Imported several libraries, added name generator.
authorethereal <ethereal@ethv.net>
Thu, 23 Oct 2014 04:55:37 +0000 (21:55 -0700)
committerethereal <ethereal@ethv.net>
Thu, 23 Oct 2014 04:55:37 +0000 (21:55 -0700)
268 files changed:
CMakeLists.txt
COPYING
data/names-female.tri [new file with mode: 0644]
data/names-male.tri [new file with mode: 0644]
libs/CMakeLists.txt
libs/glm/CMakeLists.txt [new file with mode: 0644]
libs/glm/common.hpp [new file with mode: 0644]
libs/glm/detail/_features.hpp [new file with mode: 0644]
libs/glm/detail/_fixes.hpp [new file with mode: 0644]
libs/glm/detail/_literals.hpp [new file with mode: 0644]
libs/glm/detail/_noise.hpp [new file with mode: 0644]
libs/glm/detail/_swizzle.hpp [new file with mode: 0644]
libs/glm/detail/_swizzle_func.hpp [new file with mode: 0644]
libs/glm/detail/_vectorize.hpp [new file with mode: 0644]
libs/glm/detail/dummy.cpp [new file with mode: 0644]
libs/glm/detail/func_common.hpp [new file with mode: 0644]
libs/glm/detail/func_common.inl [new file with mode: 0644]
libs/glm/detail/func_exponential.hpp [new file with mode: 0644]
libs/glm/detail/func_exponential.inl [new file with mode: 0644]
libs/glm/detail/func_geometric.hpp [new file with mode: 0644]
libs/glm/detail/func_geometric.inl [new file with mode: 0644]
libs/glm/detail/func_integer.hpp [new file with mode: 0644]
libs/glm/detail/func_integer.inl [new file with mode: 0644]
libs/glm/detail/func_matrix.hpp [new file with mode: 0644]
libs/glm/detail/func_matrix.inl [new file with mode: 0644]
libs/glm/detail/func_noise.hpp [new file with mode: 0644]
libs/glm/detail/func_noise.inl [new file with mode: 0644]
libs/glm/detail/func_packing.hpp [new file with mode: 0644]
libs/glm/detail/func_packing.inl [new file with mode: 0644]
libs/glm/detail/func_trigonometric.hpp [new file with mode: 0644]
libs/glm/detail/func_trigonometric.inl [new file with mode: 0644]
libs/glm/detail/func_vector_relational.hpp [new file with mode: 0644]
libs/glm/detail/func_vector_relational.inl [new file with mode: 0644]
libs/glm/detail/glm.cpp [new file with mode: 0644]
libs/glm/detail/hint.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_common.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_common.inl [new file with mode: 0644]
libs/glm/detail/intrinsic_exponential.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_exponential.inl [new file with mode: 0644]
libs/glm/detail/intrinsic_geometric.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_geometric.inl [new file with mode: 0644]
libs/glm/detail/intrinsic_integer.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_integer.inl [new file with mode: 0644]
libs/glm/detail/intrinsic_matrix.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_matrix.inl [new file with mode: 0644]
libs/glm/detail/intrinsic_trigonometric.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_trigonometric.inl [new file with mode: 0644]
libs/glm/detail/intrinsic_vector_relational.hpp [new file with mode: 0644]
libs/glm/detail/intrinsic_vector_relational.inl [new file with mode: 0644]
libs/glm/detail/precision.hpp [new file with mode: 0644]
libs/glm/detail/precision.inl [new file with mode: 0644]
libs/glm/detail/setup.hpp [new file with mode: 0644]
libs/glm/detail/type_float.hpp [new file with mode: 0644]
libs/glm/detail/type_gentype.hpp [new file with mode: 0644]
libs/glm/detail/type_gentype.inl [new file with mode: 0644]
libs/glm/detail/type_half.hpp [new file with mode: 0644]
libs/glm/detail/type_half.inl [new file with mode: 0644]
libs/glm/detail/type_int.hpp [new file with mode: 0644]
libs/glm/detail/type_mat.hpp [new file with mode: 0644]
libs/glm/detail/type_mat.inl [new file with mode: 0644]
libs/glm/detail/type_mat2x2.hpp [new file with mode: 0644]
libs/glm/detail/type_mat2x2.inl [new file with mode: 0644]
libs/glm/detail/type_mat2x3.hpp [new file with mode: 0644]
libs/glm/detail/type_mat2x3.inl [new file with mode: 0644]
libs/glm/detail/type_mat2x4.hpp [new file with mode: 0644]
libs/glm/detail/type_mat2x4.inl [new file with mode: 0644]
libs/glm/detail/type_mat3x2.hpp [new file with mode: 0644]
libs/glm/detail/type_mat3x2.inl [new file with mode: 0644]
libs/glm/detail/type_mat3x3.hpp [new file with mode: 0644]
libs/glm/detail/type_mat3x3.inl [new file with mode: 0644]
libs/glm/detail/type_mat3x4.hpp [new file with mode: 0644]
libs/glm/detail/type_mat3x4.inl [new file with mode: 0644]
libs/glm/detail/type_mat4x2.hpp [new file with mode: 0644]
libs/glm/detail/type_mat4x2.inl [new file with mode: 0644]
libs/glm/detail/type_mat4x3.hpp [new file with mode: 0644]
libs/glm/detail/type_mat4x3.inl [new file with mode: 0644]
libs/glm/detail/type_mat4x4.hpp [new file with mode: 0644]
libs/glm/detail/type_mat4x4.inl [new file with mode: 0644]
libs/glm/detail/type_vec.hpp [new file with mode: 0644]
libs/glm/detail/type_vec.inl [new file with mode: 0644]
libs/glm/detail/type_vec1.hpp [new file with mode: 0644]
libs/glm/detail/type_vec1.inl [new file with mode: 0644]
libs/glm/detail/type_vec2.hpp [new file with mode: 0644]
libs/glm/detail/type_vec2.inl [new file with mode: 0644]
libs/glm/detail/type_vec3.hpp [new file with mode: 0644]
libs/glm/detail/type_vec3.inl [new file with mode: 0644]
libs/glm/detail/type_vec4.hpp [new file with mode: 0644]
libs/glm/detail/type_vec4.inl [new file with mode: 0644]
libs/glm/exponential.hpp [new file with mode: 0644]
libs/glm/ext.hpp [new file with mode: 0644]
libs/glm/fwd.hpp [new file with mode: 0644]
libs/glm/geometric.hpp [new file with mode: 0644]
libs/glm/glm.hpp [new file with mode: 0644]
libs/glm/gtc/constants.hpp [new file with mode: 0644]
libs/glm/gtc/constants.inl [new file with mode: 0644]
libs/glm/gtc/epsilon.hpp [new file with mode: 0644]
libs/glm/gtc/epsilon.inl [new file with mode: 0644]
libs/glm/gtc/matrix_access.hpp [new file with mode: 0644]
libs/glm/gtc/matrix_access.inl [new file with mode: 0644]
libs/glm/gtc/matrix_integer.hpp [new file with mode: 0644]
libs/glm/gtc/matrix_inverse.hpp [new file with mode: 0644]
libs/glm/gtc/matrix_inverse.inl [new file with mode: 0644]
libs/glm/gtc/matrix_transform.hpp [new file with mode: 0644]
libs/glm/gtc/matrix_transform.inl [new file with mode: 0644]
libs/glm/gtc/noise.hpp [new file with mode: 0644]
libs/glm/gtc/noise.inl [new file with mode: 0644]
libs/glm/gtc/packing.hpp [new file with mode: 0644]
libs/glm/gtc/packing.inl [new file with mode: 0644]
libs/glm/gtc/quaternion.hpp [new file with mode: 0644]
libs/glm/gtc/quaternion.inl [new file with mode: 0644]
libs/glm/gtc/random.hpp [new file with mode: 0644]
libs/glm/gtc/random.inl [new file with mode: 0644]
libs/glm/gtc/reciprocal.hpp [new file with mode: 0644]
libs/glm/gtc/reciprocal.inl [new file with mode: 0644]
libs/glm/gtc/type_precision.hpp [new file with mode: 0644]
libs/glm/gtc/type_precision.inl [new file with mode: 0644]
libs/glm/gtc/type_ptr.hpp [new file with mode: 0644]
libs/glm/gtc/type_ptr.inl [new file with mode: 0644]
libs/glm/gtc/ulp.hpp [new file with mode: 0644]
libs/glm/gtc/ulp.inl [new file with mode: 0644]
libs/glm/gtx/associated_min_max.hpp [new file with mode: 0644]
libs/glm/gtx/associated_min_max.inl [new file with mode: 0644]
libs/glm/gtx/bit.hpp [new file with mode: 0644]
libs/glm/gtx/bit.inl [new file with mode: 0644]
libs/glm/gtx/closest_point.hpp [new file with mode: 0644]
libs/glm/gtx/closest_point.inl [new file with mode: 0644]
libs/glm/gtx/color_space.hpp [new file with mode: 0644]
libs/glm/gtx/color_space.inl [new file with mode: 0644]
libs/glm/gtx/color_space_YCoCg.hpp [new file with mode: 0644]
libs/glm/gtx/color_space_YCoCg.inl [new file with mode: 0644]
libs/glm/gtx/compatibility.hpp [new file with mode: 0644]
libs/glm/gtx/compatibility.inl [new file with mode: 0644]
libs/glm/gtx/component_wise.hpp [new file with mode: 0644]
libs/glm/gtx/component_wise.inl [new file with mode: 0644]
libs/glm/gtx/constants.hpp [new file with mode: 0644]
libs/glm/gtx/dual_quaternion.hpp [new file with mode: 0644]
libs/glm/gtx/dual_quaternion.inl [new file with mode: 0644]
libs/glm/gtx/epsilon.hpp [new file with mode: 0644]
libs/glm/gtx/euler_angles.hpp [new file with mode: 0644]
libs/glm/gtx/euler_angles.inl [new file with mode: 0644]
libs/glm/gtx/extend.hpp [new file with mode: 0644]
libs/glm/gtx/extend.inl [new file with mode: 0644]
libs/glm/gtx/extented_min_max.hpp [new file with mode: 0644]
libs/glm/gtx/extented_min_max.inl [new file with mode: 0644]
libs/glm/gtx/fast_exponential.hpp [new file with mode: 0644]
libs/glm/gtx/fast_exponential.inl [new file with mode: 0644]
libs/glm/gtx/fast_square_root.hpp [new file with mode: 0644]
libs/glm/gtx/fast_square_root.inl [new file with mode: 0644]
libs/glm/gtx/fast_trigonometry.hpp [new file with mode: 0644]
libs/glm/gtx/fast_trigonometry.inl [new file with mode: 0644]
libs/glm/gtx/gradient_paint.hpp [new file with mode: 0644]
libs/glm/gtx/gradient_paint.inl [new file with mode: 0644]
libs/glm/gtx/handed_coordinate_space.hpp [new file with mode: 0644]
libs/glm/gtx/handed_coordinate_space.inl [new file with mode: 0644]
libs/glm/gtx/inertia.hpp [new file with mode: 0644]
libs/glm/gtx/inertia.inl [new file with mode: 0644]
libs/glm/gtx/int_10_10_10_2.hpp [new file with mode: 0644]
libs/glm/gtx/int_10_10_10_2.inl [new file with mode: 0644]
libs/glm/gtx/integer.hpp [new file with mode: 0644]
libs/glm/gtx/integer.inl [new file with mode: 0644]
libs/glm/gtx/intersect.hpp [new file with mode: 0644]
libs/glm/gtx/intersect.inl [new file with mode: 0644]
libs/glm/gtx/io.hpp [new file with mode: 0644]
libs/glm/gtx/io.inl [new file with mode: 0644]
libs/glm/gtx/log_base.hpp [new file with mode: 0644]
libs/glm/gtx/log_base.inl [new file with mode: 0644]
libs/glm/gtx/matrix_cross_product.hpp [new file with mode: 0644]
libs/glm/gtx/matrix_cross_product.inl [new file with mode: 0644]
libs/glm/gtx/matrix_interpolation.hpp [new file with mode: 0644]
libs/glm/gtx/matrix_interpolation.inl [new file with mode: 0644]
libs/glm/gtx/matrix_major_storage.hpp [new file with mode: 0644]
libs/glm/gtx/matrix_major_storage.inl [new file with mode: 0644]
libs/glm/gtx/matrix_operation.hpp [new file with mode: 0644]
libs/glm/gtx/matrix_operation.inl [new file with mode: 0644]
libs/glm/gtx/matrix_query.hpp [new file with mode: 0644]
libs/glm/gtx/matrix_query.inl [new file with mode: 0644]
libs/glm/gtx/matrix_transform_2d.hpp [new file with mode: 0644]
libs/glm/gtx/matrix_transform_2d.inl [new file with mode: 0644]
libs/glm/gtx/mixed_product.hpp [new file with mode: 0644]
libs/glm/gtx/mixed_product.inl [new file with mode: 0644]
libs/glm/gtx/multiple.hpp [new file with mode: 0644]
libs/glm/gtx/multiple.inl [new file with mode: 0644]
libs/glm/gtx/noise.hpp [new file with mode: 0644]
libs/glm/gtx/norm.hpp [new file with mode: 0644]
libs/glm/gtx/norm.inl [new file with mode: 0644]
libs/glm/gtx/normal.hpp [new file with mode: 0644]
libs/glm/gtx/normal.inl [new file with mode: 0644]
libs/glm/gtx/normalize_dot.hpp [new file with mode: 0644]
libs/glm/gtx/normalize_dot.inl [new file with mode: 0644]
libs/glm/gtx/number_precision.hpp [new file with mode: 0644]
libs/glm/gtx/number_precision.inl [new file with mode: 0644]
libs/glm/gtx/optimum_pow.hpp [new file with mode: 0644]
libs/glm/gtx/optimum_pow.inl [new file with mode: 0644]
libs/glm/gtx/orthonormalize.hpp [new file with mode: 0644]
libs/glm/gtx/orthonormalize.inl [new file with mode: 0644]
libs/glm/gtx/perpendicular.hpp [new file with mode: 0644]
libs/glm/gtx/perpendicular.inl [new file with mode: 0644]
libs/glm/gtx/polar_coordinates.hpp [new file with mode: 0644]
libs/glm/gtx/polar_coordinates.inl [new file with mode: 0644]
libs/glm/gtx/projection.hpp [new file with mode: 0644]
libs/glm/gtx/projection.inl [new file with mode: 0644]
libs/glm/gtx/quaternion.hpp [new file with mode: 0644]
libs/glm/gtx/quaternion.inl [new file with mode: 0644]
libs/glm/gtx/random.hpp [new file with mode: 0644]
libs/glm/gtx/raw_data.hpp [new file with mode: 0644]
libs/glm/gtx/raw_data.inl [new file with mode: 0644]
libs/glm/gtx/reciprocal.hpp [new file with mode: 0644]
libs/glm/gtx/rotate_normalized_axis.hpp [new file with mode: 0644]
libs/glm/gtx/rotate_normalized_axis.inl [new file with mode: 0644]
libs/glm/gtx/rotate_vector.hpp [new file with mode: 0644]
libs/glm/gtx/rotate_vector.inl [new file with mode: 0644]
libs/glm/gtx/scalar_relational.hpp [new file with mode: 0644]
libs/glm/gtx/scalar_relational.inl [new file with mode: 0644]
libs/glm/gtx/simd_mat4.hpp [new file with mode: 0644]
libs/glm/gtx/simd_mat4.inl [new file with mode: 0644]
libs/glm/gtx/simd_quat.hpp [new file with mode: 0644]
libs/glm/gtx/simd_quat.inl [new file with mode: 0644]
libs/glm/gtx/simd_vec4.hpp [new file with mode: 0644]
libs/glm/gtx/simd_vec4.inl [new file with mode: 0644]
libs/glm/gtx/spline.hpp [new file with mode: 0644]
libs/glm/gtx/spline.inl [new file with mode: 0644]
libs/glm/gtx/std_based_type.hpp [new file with mode: 0644]
libs/glm/gtx/std_based_type.inl [new file with mode: 0644]
libs/glm/gtx/string_cast.hpp [new file with mode: 0644]
libs/glm/gtx/string_cast.inl [new file with mode: 0644]
libs/glm/gtx/transform.hpp [new file with mode: 0644]
libs/glm/gtx/transform.inl [new file with mode: 0644]
libs/glm/gtx/transform2.hpp [new file with mode: 0644]
libs/glm/gtx/transform2.inl [new file with mode: 0644]
libs/glm/gtx/ulp.hpp [new file with mode: 0644]
libs/glm/gtx/unsigned_int.hpp [new file with mode: 0644]
libs/glm/gtx/unsigned_int.inl [new file with mode: 0644]
libs/glm/gtx/vec1.hpp [new file with mode: 0644]
libs/glm/gtx/vec1.inl [new file with mode: 0644]
libs/glm/gtx/vector_angle.hpp [new file with mode: 0644]
libs/glm/gtx/vector_angle.inl [new file with mode: 0644]
libs/glm/gtx/vector_query.hpp [new file with mode: 0644]
libs/glm/gtx/vector_query.inl [new file with mode: 0644]
libs/glm/gtx/wrap.hpp [new file with mode: 0644]
libs/glm/gtx/wrap.inl [new file with mode: 0644]
libs/glm/integer.hpp [new file with mode: 0644]
libs/glm/mat2x2.hpp [new file with mode: 0644]
libs/glm/mat2x3.hpp [new file with mode: 0644]
libs/glm/mat2x4.hpp [new file with mode: 0644]
libs/glm/mat3x2.hpp [new file with mode: 0644]
libs/glm/mat3x3.hpp [new file with mode: 0644]
libs/glm/mat3x4.hpp [new file with mode: 0644]
libs/glm/mat4x2.hpp [new file with mode: 0644]
libs/glm/mat4x3.hpp [new file with mode: 0644]
libs/glm/mat4x4.hpp [new file with mode: 0644]
libs/glm/matrix.hpp [new file with mode: 0644]
libs/glm/packing.hpp [new file with mode: 0644]
libs/glm/trigonometric.hpp [new file with mode: 0644]
libs/glm/vec2.hpp [new file with mode: 0644]
libs/glm/vec3.hpp [new file with mode: 0644]
libs/glm/vec4.hpp [new file with mode: 0644]
libs/glm/vector_relational.hpp [new file with mode: 0644]
libs/pugixml/CMakeLists.txt
src/CMakeLists.txt
src/main.cpp
src/object/structure.hpp
src/world/geography.cpp [new file with mode: 0644]
src/world/geography.hpp [new file with mode: 0644]
src/world/name_generator.cpp [new file with mode: 0644]
src/world/name_generator.hpp [new file with mode: 0644]
support/.gitignore [new file with mode: 0644]
support/get_names.sh [new file with mode: 0644]
support/trigraph_extractor.py [new file with mode: 0755]

index dd1690e..92d04d6 100644 (file)
@@ -4,5 +4,7 @@ project(skeleton C CXX)
 
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
 
+add_definitions(-DDATA_PATH="data/")
+
 add_subdirectory(libs)
 add_subdirectory(src)
diff --git a/COPYING b/COPYING
index d999028..a24fd4e 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,8 +1,9 @@
-Except as noted below, BTT is released under the following license:
+Except as noted below, Behind The Throne is released under the following
+license:
 
 ----
 
-Copyright (c) 2012, 2013, Kent "ethereal" Williams-King
+Copyright (c) 2012, 2013, 2014, Kent "ethereal" Williams-King
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -13,9 +14,9 @@ modification, are permitted provided that the following conditions are met:
 - Redistributions in binary form must reproduce the above copyright notice,
     this list of conditions and the following disclaimer in the documentation
     and/or other materials provided with the distribution.
-- Neither the name BTT nor the names of its contributors may be used to
-    endorse or promote products derived from this software without specific
-    prior written permission.
+- Neither the name Behind The Throne nor the names of its contributors may be
+    used to endorse or promote products derived from this software without
+    specific prior written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -30,8 +31,32 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 ----
 
-This project also contains source code from several libraries, as well as the
-primary distribution. For easy classification, all source code not released
+This project contains trigraph data extracted from the Names Corpus, which is
+provided under the following license:
+
+----
+
+Names Corpus, Version 1.3 (1994-03-29)
+Copyright (C) 1991 Mark Kantrowitz
+Additions by Bill Ross
+
+This corpus contains 5001 female names and 2943 male names, sorted
+alphabetically, one per line.
+
+You may use the lists of names for any purpose, so long as credit is
+given in any published work. You may also redistribute the list if you
+provide the recipients with a copy of this README file. The lists are
+not in the public domain (I retain the copyright on the lists) but are
+freely redistributable.  If you have any additions to the lists of
+names, I would appreciate receiving them.
+
+Mark Kantrowitz <mkant+@cs.cmu.edu>
+http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/nlp/corpora/names/
+
+----
+
+This project also contains source code from several libraries, in addition to
+the primary distribution. For easy classification, all source code not released
 under the above license is placed in the libs/ directory in the main
 distribution.
 
@@ -65,5 +90,32 @@ OTHER DEALINGS IN THE SOFTWARE.
 
 ---- 
 
+The license for glm, contained within the libs/glm/ directory, is as
+follows:
+
+The MIT License
+
+Copyright (c) 2005 - 2013 G-Truc Creation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+----
+
 Should you wish for an exception from the distribution license of this project,
 contact the authors.
diff --git a/data/names-female.tri b/data/names-female.tri
new file mode 100644 (file)
index 0000000..70b1ebc
--- /dev/null
@@ -0,0 +1,2595 @@
+  a n 1.0
+  d e 1.0
+  z s 1.0
+' l a 1.0
+- a n 1.0
+- c o 1.0
+- d i 1.0
+- e l 1.0
+- g r 1.0
+- j e 0.6666666666666666
+- j o 0.3333333333333333
+- k a 1.0
+- l y 1.0
+- m a 1.0
+X X a 0.08858228354329134
+X X b 0.04919016196760648
+X X c 0.09378124375124974
+X X d 0.0615876824635073
+X X e 0.05018996200759848
+X X f 0.028794241151769647
+X X g 0.04259148170365927
+X X h 0.024795040991801638
+X X i 0.016596680663867228
+X X j 0.05858828234353129
+X X k 0.055188962207558485
+X X l 0.06638672265546891
+X X m 0.09678064387122576
+X X n 0.03159368126374725
+X X o 0.013197360527894421
+X X p 0.02419516096780644
+X X q 0.001799640071985603
+X X r 0.04939012197560488
+X X s 0.0617876424715057
+X X t 0.03959208158368326
+X X u 0.0027994401119776045
+X X v 0.020995800839832032
+X X w 0.010797840431913617
+X X x 0.0009998000399920016
+X X y 0.003599280143971206
+X X z 0.0061987602479504095
+X a b 0.024830699774266364
+X a c 0.002257336343115124
+X a d 0.08126410835214447
+X a e 0.006772009029345372
+X a g 0.03611738148984198
+X a i 0.045146726862302484
+X a j 0.002257336343115124
+X a l 0.21218961625282168
+X a m 0.06997742663656885
+X a n 0.2528216704288939
+X a p 0.009029345372460496
+X a r 0.11286681715575621
+X a s 0.02708803611738149
+X a t 0.011286681715575621
+X a u 0.08126410835214447
+X a v 0.022573363431151242
+X a y 0.002257336343115124
+X b a 0.10975609756097561
+X b e 0.4105691056910569
+X b i 0.06097560975609756
+X b l 0.08130081300813008
+X b o 0.056910569105691054
+X b r 0.2601626016260163
+X b u 0.02032520325203252
+X c a 0.3582089552238806
+X c e 0.05543710021321962
+X c h 0.2046908315565032
+X c i 0.03411513859275053
+X c l 0.10021321961620469
+X c o 0.18336886993603413
+X c r 0.03837953091684435
+X c y 0.0255863539445629
+X d a 0.3116883116883117
+X d e 0.2694805194805195
+X d i 0.09090909090909091
+X d o 0.2597402597402597
+X d r 0.006493506493506494
+X d u 0.03571428571428571
+X d y 0.025974025974025976
+X e ' 0.00398406374501992
+X e a 0.02390438247011952
+X e b 0.01593625498007968
+X e d 0.08366533864541832
+X e f 0.00398406374501992
+X e i 0.01593625498007968
+X e k 0.00398406374501992
+X e l 0.33067729083665337
+X e m 0.14342629482071714
+X e n 0.03187250996015936
+X e o 0.00796812749003984
+X e r 0.09163346613545817
+X e s 0.07171314741035857
+X e t 0.043824701195219126
+X e u 0.035856573705179286
+X e v 0.08366533864541832
+X e y 0.00796812749003984
+X f a 0.2847222222222222
+X f e 0.1527777777777778
+X f i 0.10416666666666667
+X f l 0.2013888888888889
+X f o 0.013888888888888888
+X f r 0.2361111111111111
+X f u 0.006944444444444444
+X g a 0.15023474178403756
+X g e 0.2676056338028169
+X g i 0.1643192488262911
+X g l 0.10328638497652583
+X g o 0.03755868544600939
+X g r 0.10328638497652583
+X g u 0.09389671361502347
+X g w 0.07511737089201878
+X g y 0.004694835680751174
+X h a 0.3467741935483871
+X h e 0.3951612903225806
+X h i 0.0967741935483871
+X h o 0.10483870967741936
+X h u 0.008064516129032258
+X h y 0.04838709677419355
+X i a 0.012048192771084338
+X i b 0.024096385542168676
+X i d 0.08433734939759036
+X i k 0.024096385542168676
+X i l 0.1566265060240964
+X i m 0.04819277108433735
+X i n 0.20481927710843373
+X i o 0.060240963855421686
+X i r 0.08433734939759036
+X i s 0.20481927710843373
+X i v 0.07228915662650602
+X i z 0.024096385542168676
+X j a 0.2901023890784983
+X j e 0.2354948805460751
+X j i 0.03754266211604096
+X j o 0.31399317406143346
+X j u 0.11945392491467577
+X j y 0.0034129692832764505
+X k a 0.5072463768115942
+X k e 0.15579710144927536
+X k i 0.15579710144927536
+X k l 0.010869565217391304
+X k o 0.06159420289855073
+X k r 0.07608695652173914
+X k y 0.03260869565217391
+X l a 0.1897590361445783
+X l e 0.21084337349397592
+X l i 0.2319277108433735
+X l o 0.18373493975903615
+X l u 0.09939759036144578
+X l y 0.08433734939759036
+X m a 0.5557851239669421
+X m e 0.1859504132231405
+X m i 0.14049586776859505
+X m m 0.002066115702479339
+X m o 0.07024793388429752
+X m u 0.01652892561983471
+X m y 0.028925619834710745
+X n a 0.3037974683544304
+X n e 0.24050632911392406
+X n i 0.23417721518987342
+X n o 0.2088607594936709
+X n y 0.012658227848101266
+X o c 0.015151515151515152
+X o d 0.15151515151515152
+X o f 0.045454545454545456
+X o l 0.25757575757575757
+X o n 0.06060606060606061
+X o o 0.015151515151515152
+X o p 0.09090909090909091
+X o r 0.2727272727272727
+X o t 0.09090909090909091
+X p a 0.3305785123966942
+X p e 0.2892561983471074
+X p h 0.18181818181818182
+X p i 0.06611570247933884
+X p o 0.04132231404958678
+X p r 0.09090909090909091
+X q u 1.0
+X r a 0.17813765182186234
+X r e 0.16194331983805668
+X r h 0.05263157894736842
+X r i 0.08097165991902834
+X r o 0.4574898785425101
+X r u 0.06072874493927125
+X r y 0.008097165991902834
+X s a 0.16828478964401294
+X s c 0.009708737864077669
+X s e 0.06472491909385113
+X s h 0.3268608414239482
+X s i 0.11974110032362459
+X s o 0.05825242718446602
+X s t 0.12297734627831715
+X s u 0.0970873786407767
+X s y 0.032362459546925564
+X t a 0.2474747474747475
+X t e 0.18181818181818182
+X t h 0.1111111111111111
+X t i 0.15656565656565657
+X t o 0.1414141414141414
+X t r 0.13131313131313133
+X t u 0.005050505050505051
+X t w 0.010101010101010102
+X t y 0.015151515151515152
+X u l 0.35714285714285715
+X u m 0.07142857142857142
+X u n 0.07142857142857142
+X u r 0.42857142857142855
+X u t 0.07142857142857142
+X v a 0.3047619047619048
+X v e 0.21904761904761905
+X v i 0.44761904761904764
+X v o 0.02857142857142857
+X w a 0.14814814814814814
+X w e 0.12962962962962962
+X w h 0.018518518518518517
+X w i 0.5740740740740741
+X w r 0.037037037037037035
+X w y 0.09259259259259259
+X x a 0.2
+X x e 0.4
+X x y 0.4
+X y a 0.05555555555555555
+X y e 0.3333333333333333
+X y o 0.5
+X y v 0.1111111111111111
+X z a 0.25806451612903225
+X z e 0.16129032258064516
+X z i 0.12903225806451613
+X z o 0.3225806451612903
+X z s 0.06451612903225806
+X z u 0.06451612903225806
+a   z 1.0
+a - a 0.2222222222222222
+a - d 0.2222222222222222
+a - g 0.1111111111111111
+a - k 0.1111111111111111
+a - l 0.1111111111111111
+a - m 0.2222222222222222
+a X X 1.0
+a a n 0.6
+a a r 0.4
+a b X 0.0196078431372549
+a b a 0.06862745098039216
+a b b 0.12745098039215685
+a b e 0.5
+a b i 0.09803921568627451
+a b l 0.00980392156862745
+a b o 0.00980392156862745
+a b r 0.14705882352941177
+a b s 0.00980392156862745
+a b y 0.00980392156862745
+a c a 0.013157894736842105
+a c e 0.21052631578947367
+a c h 0.07894736842105263
+a c i 0.35526315789473684
+a c k 0.10526315789473684
+a c l 0.02631578947368421
+a c q 0.13157894736842105
+a c y 0.07894736842105263
+a d X 0.05660377358490566
+a d a 0.1320754716981132
+a d d 0.05660377358490566
+a d e 0.29245283018867924
+a d g 0.009433962264150943
+a d i 0.16981132075471697
+a d l 0.018867924528301886
+a d n 0.009433962264150943
+a d o 0.10377358490566038
+a d r 0.11320754716981132
+a d y 0.03773584905660377
+a e X 0.25
+a e d 0.03571428571428571
+a e g 0.03571428571428571
+a e l 0.5
+a e n 0.03571428571428571
+a e r 0.10714285714285714
+a e t 0.03571428571428571
+a f X 0.09090909090909091
+a f a 0.45454545454545453
+a f f 0.36363636363636365
+a f n 0.09090909090909091
+a g X 0.05263157894736842
+a g a 0.23684210526315788
+a g d 0.13157894736842105
+a g e 0.02631578947368421
+a g g 0.18421052631578946
+a g h 0.07894736842105263
+a g m 0.02631578947368421
+a g n 0.23684210526315788
+a g r 0.02631578947368421
+a h X 0.8805970149253731
+a h a 0.07462686567164178
+a h e 0.029850746268656716
+a h l 0.014925373134328358
+a i X 0.022222222222222223
+a i a 0.03333333333333333
+a i b 0.011111111111111112
+a i d 0.05555555555555555
+a i g 0.03333333333333333
+a i l 0.2111111111111111
+a i m 0.05555555555555555
+a i n 0.34444444444444444
+a i r 0.07777777777777778
+a i s 0.08888888888888889
+a i t 0.06666666666666667
+a j a 0.75
+a j e 0.25
+a k a 0.2857142857142857
+a k e 0.5714285714285714
+a k o 0.14285714285714285
+a l X 0.07530120481927711
+a l a 0.060240963855421686
+a l b 0.012048192771084338
+a l c 0.0030120481927710845
+a l d 0.02108433734939759
+a l e 0.20180722891566266
+a l f 0.006024096385542169
+a l i 0.2620481927710843
+a l k 0.006024096385542169
+a l l 0.1746987951807229
+a l m 0.02108433734939759
+a l n 0.006024096385542169
+a l o 0.03313253012048193
+a l p 0.0030120481927710845
+a l r 0.0030120481927710845
+a l t 0.006024096385542169
+a l v 0.018072289156626505
+a l y 0.08734939759036145
+a m X 0.05263157894736842
+a m a 0.2807017543859649
+a m b 0.07017543859649122
+a m e 0.14912280701754385
+a m i 0.20175438596491227
+a m m 0.12280701754385964
+a m o 0.06140350877192982
+a m r 0.008771929824561403
+a m u 0.02631578947368421
+a m y 0.02631578947368421
+a n X 0.07916666666666666
+a n a 0.1125
+a n c 0.044444444444444446
+a n d 0.14444444444444443
+a n e 0.10138888888888889
+a n g 0.029166666666666667
+a n i 0.09305555555555556
+a n j 0.004166666666666667
+a n k 0.006944444444444444
+a n n 0.29583333333333334
+a n o 0.019444444444444445
+a n s 0.008333333333333333
+a n t 0.0375
+a n u 0.001388888888888889
+a n y 0.020833333333333332
+a n z 0.001388888888888889
+a o l 0.5
+a o m 0.5
+a p h 0.38461538461538464
+a p p 0.38461538461538464
+a p r 0.23076923076923078
+a q u 1.0
+a r X 0.008460236886632826
+a r a 0.0829103214890017
+a r b 0.02707275803722504
+a r c 0.030456852791878174
+a r d 0.04568527918781726
+a r e 0.06429780033840947
+a r g 0.047377326565143825
+a r i 0.24873096446700507
+a r j 0.01353637901861252
+a r k 0.00338409475465313
+a r l 0.15905245346869712
+a r m 0.038917089678511
+a r n 0.01692047377326565
+a r o 0.047377326565143825
+a r q 0.001692047377326565
+a r r 0.06091370558375635
+a r s 0.00676818950930626
+a r t 0.023688663282571912
+a r w 0.001692047377326565
+a r y 0.07106598984771574
+a s X 0.07894736842105263
+a s a 0.039473684210526314
+a s c 0.013157894736842105
+a s e 0.02631578947368421
+a s h 0.19736842105263158
+a s i 0.21052631578947367
+a s l 0.013157894736842105
+a s m 0.039473684210526314
+a s s 0.25
+a s t 0.11842105263157894
+a s y 0.013157894736842105
+a t X 0.025806451612903226
+a t a 0.12903225806451613
+a t e 0.07741935483870968
+a t h 0.3548387096774194
+a t i 0.12258064516129032
+a t k 0.0064516129032258064
+a t l 0.04516129032258064
+a t o 0.0064516129032258064
+a t r 0.1032258064516129
+a t s 0.012903225806451613
+a t t 0.07741935483870968
+a t u 0.01935483870967742
+a t y 0.01935483870967742
+a u X 0.020202020202020204
+a u b 0.0707070707070707
+a u d 0.21212121212121213
+a u g 0.04040404040404041
+a u l 0.1111111111111111
+a u n 0.0707070707070707
+a u r 0.40404040404040403
+a u s 0.050505050505050504
+a u x 0.020202020202020204
+a v a 0.030303030303030304
+a v e 0.2727272727272727
+a v i 0.5151515151515151
+a v l 0.030303030303030304
+a v r 0.15151515151515152
+a w n 0.9090909090909091
+a w s 0.09090909090909091
+a x X 0.2
+a x i 0.6
+a x y 0.2
+a y X 0.18840579710144928
+a y a 0.028985507246376812
+a y b 0.014492753623188406
+a y c 0.043478260869565216
+a y d 0.043478260869565216
+a y e 0.08695652173913043
+a y i 0.014492753623188406
+a y l 0.2608695652173913
+a y m 0.028985507246376812
+a y n 0.21739130434782608
+a y r 0.028985507246376812
+a y s 0.014492753623188406
+a y t 0.028985507246376812
+a z e 0.25
+a z i 0.25
+a z m 0.25
+a z s 0.25
+b X X 1.0
+b a X 0.19607843137254902
+b a b 0.11764705882352941
+b a g 0.0392156862745098
+b a h 0.0196078431372549
+b a l 0.0784313725490196
+b a m 0.058823529411764705
+b a r 0.39215686274509803
+b a s 0.0196078431372549
+b a t 0.0784313725490196
+b b a 0.05263157894736842
+b b e 0.15789473684210525
+b b i 0.5263157894736842
+b b r 0.02631578947368421
+b b y 0.23684210526315788
+b e X 0.0319634703196347
+b e a 0.0365296803652968
+b e b 0.0045662100456621
+b e c 0.0410958904109589
+b e e 0.0182648401826484
+b e i 0.0091324200913242
+b e k 0.0182648401826484
+b e l 0.2876712328767123
+b e n 0.0547945205479452
+b e r 0.2557077625570776
+b e s 0.0136986301369863
+b e t 0.1643835616438356
+b e u 0.0045662100456621
+b e v 0.0273972602739726
+b e y 0.0319634703196347
+b h a 1.0
+b i X 0.1927710843373494
+b i a 0.03614457831325301
+b i d 0.024096385542168676
+b i e 0.24096385542168675
+b i g 0.03614457831325301
+b i l 0.13253012048192772
+b i n 0.25301204819277107
+b i r 0.04819277108433735
+b i t 0.03614457831325301
+b l a 0.391304347826087
+b l e 0.13043478260869565
+b l i 0.2608695652173913
+b l o 0.17391304347826086
+b l y 0.043478260869565216
+b o X 0.047619047619047616
+b o b 0.38095238095238093
+b o n 0.3333333333333333
+b o r 0.23809523809523808
+b r a 0.1797752808988764
+b r e 0.15730337078651685
+b r i 0.5056179775280899
+b r o 0.0449438202247191
+b r u 0.033707865168539325
+b r y 0.07865168539325842
+b s X 1.0
+b u f 0.16666666666666666
+b u n 0.5
+b u r 0.3333333333333333
+b y X 0.6666666666666666
+b y e 0.07407407407407407
+b y l 0.14814814814814814
+b y n 0.1111111111111111
+c a X 0.17142857142857143
+c a b 0.004761904761904762
+c a c 0.014285714285714285
+c a e 0.004761904761904762
+c a h 0.004761904761904762
+c a i 0.009523809523809525
+c a l 0.04285714285714286
+c a m 0.06666666666666667
+c a n 0.047619047619047616
+c a p 0.009523809523809525
+c a r 0.4
+c a s 0.0761904761904762
+c a t 0.14285714285714285
+c a y 0.004761904761904762
+c c a 1.0
+c d a 1.0
+c e X 0.44715447154471544
+c e a 0.016260162601626018
+c e c 0.056910569105691054
+c e d 0.008130081300813009
+c e e 0.04878048780487805
+c e i 0.008130081300813009
+c e l 0.2601626016260163
+c e n 0.04878048780487805
+c e s 0.032520325203252036
+c e t 0.008130081300813009
+c e y 0.06504065040650407
+c h X 0.014388489208633094
+c h a 0.3381294964028777
+c h e 0.3381294964028777
+c h i 0.03597122302158273
+c h k 0.007194244604316547
+c h l 0.02158273381294964
+c h o 0.02877697841726619
+c h r 0.2158273381294964
+c i X 0.10476190476190476
+c i a 0.23809523809523808
+c i c 0.01904761904761905
+c i e 0.1523809523809524
+c i f 0.009523809523809525
+c i l 0.1523809523809524
+c i n 0.2571428571428571
+c i s 0.047619047619047616
+c i t 0.01904761904761905
+c k a 0.13333333333333333
+c k e 0.03333333333333333
+c k i 0.43333333333333335
+c k l 0.06666666666666667
+c k q 0.06666666666666667
+c k y 0.26666666666666666
+c l a 0.58
+c l e 0.26
+c l i 0.04
+c l o 0.1
+c l y 0.02
+c o d 0.04
+c o i 0.01
+c o l 0.19
+c o n 0.18
+c o o 0.01
+c o r 0.52
+c o s 0.02
+c o t 0.01
+c o u 0.02
+c q u 1.0
+c r e 0.10526315789473684
+c r i 0.7368421052631579
+c r y 0.15789473684210525
+c t a 0.5
+c t o 0.25
+c t r 0.25
+c u n 1.0
+c y X 0.5
+c y b 0.21428571428571427
+c y n 0.2857142857142857
+c z k 1.0
+d X X 1.0
+d a X 0.5171102661596958
+d a c 0.022813688212927757
+d a d 0.0038022813688212928
+d a e 0.0038022813688212928
+d a f 0.015209125475285171
+d a g 0.011406844106463879
+d a h 0.0076045627376425855
+d a i 0.030418250950570342
+d a l 0.06463878326996197
+d a m 0.011406844106463879
+d a n 0.11787072243346007
+d a p 0.011406844106463879
+d a r 0.11026615969581749
+d a s 0.015209125475285171
+d a t 0.011406844106463879
+d a u 0.0038022813688212928
+d a v 0.022813688212927757
+d a w 0.0076045627376425855
+d a y 0.011406844106463879
+d d a 0.22727272727272727
+d d i 0.5454545454545454
+d d y 0.22727272727272727
+d e X 0.17194570135746606
+d e a 0.03167420814479638
+d e b 0.05429864253393665
+d e d 0.013574660633484163
+d e e 0.09049773755656108
+d e g 0.00904977375565611
+d e h 0.004524886877828055
+d e i 0.013574660633484163
+d e l 0.3257918552036199
+d e m 0.02262443438914027
+d e n 0.08597285067873303
+d e o 0.004524886877828055
+d e r 0.02262443438914027
+d e s 0.049773755656108594
+d e t 0.03167420814479638
+d e v 0.049773755656108594
+d e w 0.004524886877828055
+d e y 0.013574660633484163
+d g e 1.0
+d i X 0.2111111111111111
+d i a 0.15555555555555556
+d i c 0.016666666666666666
+d i d 0.022222222222222223
+d i e 0.25555555555555554
+d i k 0.005555555555555556
+d i l 0.011111111111111112
+d i n 0.1388888888888889
+d i o 0.022222222222222223
+d i r 0.005555555555555556
+d i s 0.044444444444444446
+d i t 0.08333333333333333
+d i v 0.011111111111111112
+d i x 0.011111111111111112
+d i y 0.005555555555555556
+d l e 0.5
+d l i 0.5
+d n a 0.3333333333333333
+d n e 0.6666666666666666
+d o X 0.009174311926605505
+d o d 0.03669724770642202
+d o e 0.009174311926605505
+d o l 0.11926605504587157
+d o m 0.01834862385321101
+d o n 0.1743119266055046
+d o r 0.5596330275229358
+d o s 0.01834862385321101
+d o t 0.045871559633027525
+d o v 0.009174311926605505
+d r a 0.44871794871794873
+d r e 0.23076923076923078
+d r i 0.2564102564102564
+d r o 0.02564102564102564
+d r y 0.038461538461538464
+d s a 0.3333333333333333
+d s e 0.3333333333333333
+d s i 0.16666666666666666
+d s y 0.16666666666666666
+d u l 0.9230769230769231
+d u s 0.07692307692307693
+d v i 1.0
+d w i 1.0
+d y X 0.7068965517241379
+d y a 0.1206896551724138
+d y c 0.017241379310344827
+d y e 0.034482758620689655
+d y n 0.034482758620689655
+d y s 0.034482758620689655
+d y t 0.05172413793103448
+e   d 1.0
+e ' l 1.0
+e - a 0.25
+e - c 0.125
+e - e 0.125
+e - j 0.125
+e - m 0.375
+e X X 1.0
+e a X 0.2900763358778626
+e a b 0.007633587786259542
+e a d 0.07633587786259542
+e a g 0.015267175572519083
+e a h 0.022900763358778626
+e a l 0.022900763358778626
+e a n 0.42748091603053434
+e a r 0.05343511450381679
+e a s 0.015267175572519083
+e a t 0.04580152671755725
+e a u 0.022900763358778626
+e b X 0.02857142857142857
+e b a 0.17142857142857143
+e b b 0.2
+e b e 0.37142857142857144
+e b i 0.02857142857142857
+e b o 0.17142857142857143
+e b r 0.02857142857142857
+e c a 0.037037037037037035
+e c c 0.1111111111111111
+e c e 0.1111111111111111
+e c h 0.07407407407407407
+e c i 0.3333333333333333
+e c k 0.18518518518518517
+e c o 0.037037037037037035
+e c t 0.037037037037037035
+e c u 0.037037037037037035
+e c z 0.037037037037037035
+e d X 0.05952380952380952
+e d a 0.21428571428571427
+e d d 0.16666666666666666
+e d e 0.16666666666666666
+e d i 0.21428571428571427
+e d n 0.011904761904761904
+e d o 0.011904761904761904
+e d r 0.07142857142857142
+e d v 0.011904761904761904
+e d w 0.023809523809523808
+e d y 0.047619047619047616
+e e   0.00546448087431694
+e e X 0.5792349726775956
+e e a 0.0273224043715847
+e e b 0.00546448087431694
+e e c 0.01092896174863388
+e e d 0.00546448087431694
+e e l 0.04918032786885246
+e e n 0.273224043715847
+e e r 0.01639344262295082
+e e s 0.01092896174863388
+e e t 0.01092896174863388
+e e v 0.00546448087431694
+e f a 0.4444444444444444
+e f f 0.4444444444444444
+e f i 0.1111111111111111
+e g X 0.08333333333333333
+e g a 0.20833333333333334
+e g e 0.08333333333333333
+e g g 0.375
+e g h 0.08333333333333333
+e g i 0.08333333333333333
+e g r 0.08333333333333333
+e h X 0.2
+e h a 0.2
+e h e 0.2
+e h l 0.2
+e h u 0.2
+e i X 0.06666666666666667
+e i a 0.044444444444444446
+e i d 0.15555555555555556
+e i e 0.022222222222222223
+e i g 0.08888888888888889
+e i k 0.022222222222222223
+e i l 0.35555555555555557
+e i m 0.022222222222222223
+e i n 0.08888888888888889
+e i r 0.06666666666666667
+e i s 0.044444444444444446
+e i t 0.022222222222222223
+e j a 0.6666666666666666
+e j e 0.3333333333333333
+e k a 0.4444444444444444
+e k k 0.2222222222222222
+e k l 0.1111111111111111
+e k o 0.2222222222222222
+e l X 0.1023391812865497
+e l a 0.0847953216374269
+e l b 0.01023391812865497
+e l c 0.008771929824561403
+e l d 0.01023391812865497
+e l e 0.07894736842105263
+e l f 0.005847953216374269
+e l g 0.0043859649122807015
+e l i 0.22660818713450293
+e l k 0.0029239766081871343
+e l l 0.32748538011695905
+e l m 0.014619883040935672
+e l n 0.0043859649122807015
+e l o 0.027777777777777776
+e l p 0.0043859649122807015
+e l s 0.02631578947368421
+e l v 0.011695906432748537
+e l w 0.0029239766081871343
+e l y 0.04532163742690058
+e m X 0.03076923076923077
+e m a 0.16923076923076924
+e m e 0.24615384615384617
+e m i 0.16923076923076924
+e m l 0.046153846153846156
+e m m 0.24615384615384617
+e m o 0.046153846153846156
+e m y 0.046153846153846156
+e n - 0.0025
+e n X 0.225
+e n a 0.17
+e n c 0.015
+e n d 0.0475
+e n e 0.205
+e n g 0.005
+e n i 0.0675
+e n k 0.0125
+e n n 0.1225
+e n o 0.0225
+e n r 0.0225
+e n s 0.01
+e n t 0.0475
+e n u 0.0025
+e n v 0.0025
+e n y 0.0125
+e n z 0.0075
+e o X 0.06976744186046512
+e o d 0.11627906976744186
+e o i 0.023255813953488372
+e o l 0.09302325581395349
+e o n 0.27906976744186046
+e o p 0.023255813953488372
+e o r 0.3953488372093023
+e p h 0.875
+e p i 0.125
+e r X 0.07471264367816093
+e r a 0.05459770114942529
+e r c 0.011494252873563218
+e r d 0.017241379310344827
+e r e 0.09482758620689655
+e r g 0.008620689655172414
+e r h 0.0028735632183908046
+e r i 0.21551724137931033
+e r l 0.0603448275862069
+e r m 0.04310344827586207
+e r n 0.08908045977011494
+e r o 0.014367816091954023
+e r r 0.12931034482758622
+e r s 0.014367816091954023
+e r t 0.1206896551724138
+e r v 0.0028735632183908046
+e r y 0.04310344827586207
+e r z 0.0028735632183908046
+e s X 0.06153846153846154
+e s a 0.07692307692307693
+e s c 0.015384615384615385
+e s d 0.015384615384615385
+e s e 0.06153846153846154
+e s h 0.015384615384615385
+e s i 0.06153846153846154
+e s l 0.05384615384615385
+e s m 0.046153846153846156
+e s s 0.3384615384615385
+e s t 0.23846153846153847
+e s y 0.015384615384615385
+e t X 0.07534246575342465
+e t a 0.09246575342465753
+e t c 0.003424657534246575
+e t e 0.0273972602739726
+e t h 0.11643835616438356
+e t i 0.017123287671232876
+e t n 0.003424657534246575
+e t r 0.03424657534246575
+e t s 0.00684931506849315
+e t t 0.6198630136986302
+e t u 0.003424657534246575
+e u d 0.08333333333333333
+e u g 0.25
+e u l 0.25
+e u n 0.08333333333333333
+e u p 0.08333333333333333
+e u r 0.16666666666666666
+e u s 0.08333333333333333
+e v X 0.017543859649122806
+e v a 0.2807017543859649
+e v e 0.2982456140350877
+e v i 0.14035087719298245
+e v k 0.017543859649122806
+e v o 0.10526315789473684
+e v r 0.03508771929824561
+e v s 0.017543859649122806
+e v v 0.05263157894736842
+e v y 0.03508771929824561
+e w X 0.4
+e w e 0.6
+e x X 0.1111111111111111
+e x a 0.3333333333333333
+e x i 0.5555555555555556
+e y X 0.9351851851851852
+e y a 0.009259259259259259
+e y d 0.018518518518518517
+e y l 0.009259259259259259
+e y n 0.018518518518518517
+e y s 0.009259259259259259
+e z X 0.5
+e z l 0.5
+f X X 1.0
+f a X 0.05555555555555555
+f a b 0.037037037037037035
+f a e 0.07407407407407407
+f a i 0.037037037037037035
+f a l 0.018518518518518517
+f a n 0.3333333333333333
+f a r 0.12962962962962962
+f a t 0.018518518518518517
+f a u 0.07407407407407407
+f a w 0.07407407407407407
+f a y 0.14814814814814814
+f e d 0.06666666666666667
+f e l 0.4
+f e n 0.03333333333333333
+f e o 0.03333333333333333
+f e r 0.43333333333333335
+f e y 0.03333333333333333
+f f X 0.05555555555555555
+f f a 0.2222222222222222
+f f e 0.05555555555555555
+f f i 0.4444444444444444
+f f y 0.2222222222222222
+f i X 0.14705882352941177
+f i a 0.08823529411764706
+f i c 0.029411764705882353
+f i d 0.08823529411764706
+f i e 0.20588235294117646
+f i f 0.058823529411764705
+f i l 0.11764705882352941
+f i n 0.14705882352941177
+f i o 0.11764705882352941
+f l e 0.06896551724137931
+f l o 0.9310344827586207
+f n a 1.0
+f o r 1.0
+f r a 0.475
+f r e 0.425
+f r i 0.1
+f u l 1.0
+f y X 1.0
+g X X 1.0
+g a X 0.08
+g a a 0.013333333333333334
+g a b 0.21333333333333335
+g a c 0.013333333333333334
+g a e 0.05333333333333334
+g a i 0.04
+g a l 0.08
+g a n 0.13333333333333333
+g a r 0.2
+g a t 0.05333333333333334
+g a u 0.013333333333333334
+g a v 0.02666666666666667
+g a y 0.08
+g d a 1.0
+g e X 0.09009009009009009
+g e a 0.02702702702702703
+g e b 0.018018018018018018
+g e e 0.02702702702702703
+g e l 0.15315315315315314
+g e n 0.1981981981981982
+g e o 0.13513513513513514
+g e r 0.26126126126126126
+g e t 0.09009009009009009
+g g a 0.0625
+g g e 0.0625
+g g i 0.625
+g g y 0.25
+g h X 0.5555555555555556
+g h a 0.4444444444444444
+g i X 0.0945945945945946
+g i a 0.13513513513513514
+g i d 0.02702702702702703
+g i e 0.12162162162162163
+g i g 0.013513513513513514
+g i l 0.17567567567567569
+g i n 0.21621621621621623
+g i o 0.02702702702702703
+g i p 0.013513513513513514
+g i r 0.013513513513513514
+g i s 0.05405405405405406
+g i t 0.0945945945945946
+g i z 0.013513513513513514
+g l a 0.16666666666666666
+g l e 0.375
+g l i 0.041666666666666664
+g l o 0.25
+g l y 0.16666666666666666
+g m a 1.0
+g n a 0.16666666666666666
+g n e 0.5
+g n h 0.08333333333333333
+g n o 0.25
+g o X 0.16666666666666666
+g o d 0.08333333333333333
+g o l 0.6666666666666666
+g o t 0.08333333333333333
+g r a 0.43333333333333335
+g r e 0.4
+g r i 0.16666666666666666
+g u e 0.23333333333333334
+g u g 0.03333333333333333
+g u i 0.16666666666666666
+g u n 0.1
+g u r 0.03333333333333333
+g u s 0.43333333333333335
+g w e 0.8125
+g w y 0.1875
+g y X 0.8571428571428571
+g y p 0.14285714285714285
+h X X 1.0
+h a X 0.24888888888888888
+h a d 0.008888888888888889
+h a e 0.03111111111111111
+h a i 0.022222222222222223
+h a l 0.08444444444444445
+h a m 0.0044444444444444444
+h a n 0.22666666666666666
+h a p 0.0044444444444444444
+h a r 0.28444444444444444
+h a s 0.0044444444444444444
+h a t 0.013333333333333334
+h a u 0.008888888888888889
+h a v 0.0044444444444444444
+h a w 0.013333333333333334
+h a y 0.035555555555555556
+h a z 0.0044444444444444444
+h e X 0.09734513274336283
+h e a 0.061946902654867256
+h e b 0.017699115044247787
+h e d 0.04424778761061947
+h e e 0.030973451327433628
+h e i 0.035398230088495575
+h e k 0.004424778761061947
+h e l 0.3008849557522124
+h e m 0.004424778761061947
+h e n 0.07079646017699115
+h e o 0.01327433628318584
+h e p 0.004424778761061947
+h e r 0.24778761061946902
+h e s 0.017699115044247787
+h e t 0.03982300884955752
+h e v 0.004424778761061947
+h e y 0.004424778761061947
+h i X 0.07058823529411765
+h i a 0.15294117647058825
+h i c 0.023529411764705882
+h i e 0.09411764705882353
+h i k 0.011764705882352941
+h i l 0.35294117647058826
+h i n 0.11764705882352941
+h i q 0.011764705882352941
+h i r 0.1411764705882353
+h i t 0.023529411764705882
+h k a 1.0
+h l e 0.47058823529411764
+h l i 0.29411764705882354
+h l o 0.17647058823529413
+h l y 0.058823529411764705
+h n a 0.25
+h n e 0.5
+h n n 0.25
+h o d 0.12903225806451613
+h o e 0.03225806451612903
+h o l 0.2903225806451613
+h o m 0.12903225806451613
+h o n 0.1935483870967742
+h o p 0.03225806451612903
+h o r 0.0967741935483871
+h o s 0.0967741935483871
+h r i 0.7
+h r o 0.05
+h r y 0.25
+h s h 1.0
+h u d 0.5
+h u l 0.5
+h y X 0.3
+h y a 0.25
+h y e 0.05
+h y l 0.35
+h y n 0.05
+h z i 1.0
+i - j 1.0
+i X X 1.0
+i a X 0.674863387978142
+i a c 0.00273224043715847
+i a d 0.00273224043715847
+i a e 0.00273224043715847
+i a h 0.01366120218579235
+i a l 0.00546448087431694
+i a m 0.01639344262295082
+i a n 0.27049180327868855
+i a r 0.00819672131147541
+i a s 0.00273224043715847
+i b X 0.07692307692307693
+i b a 0.07692307692307693
+i b b 0.3076923076923077
+i b e 0.3076923076923077
+i b i 0.038461538461538464
+i b l 0.07692307692307693
+i b y 0.11538461538461539
+i c a 0.211864406779661
+i c c 0.00847457627118644
+i c d 0.00847457627118644
+i c e 0.3050847457627119
+i c h 0.1440677966101695
+i c i 0.0847457627118644
+i c k 0.13559322033898305
+i c l 0.00847457627118644
+i c o 0.07627118644067797
+i c t 0.01694915254237288
+i d X 0.10294117647058823
+i d a 0.38235294117647056
+i d d 0.014705882352941176
+i d e 0.19117647058823528
+i d g 0.07352941176470588
+i d i 0.1323529411764706
+i d o 0.07352941176470588
+i d r 0.029411764705882353
+i e - 0.00404040404040404
+i e X 0.8242424242424242
+i e a 0.00202020202020202
+i e c 0.00202020202020202
+i e d 0.006060606060606061
+i e e 0.00202020202020202
+i e j 0.00202020202020202
+i e l 0.06666666666666667
+i e n 0.026262626262626262
+i e r 0.020202020202020204
+i e s 0.006060606060606061
+i e t 0.03434343434343434
+i e v 0.00404040404040404
+i f e 0.2777777777777778
+i f f 0.4444444444444444
+i f i 0.16666666666666666
+i f r 0.1111111111111111
+i g X 0.08
+i g a 0.2
+i g e 0.04
+i g h 0.16
+i g i 0.24
+i g n 0.12
+i g o 0.04
+i g r 0.04
+i g u 0.08
+i j o 1.0
+i k a 0.35135135135135137
+i k e 0.1891891891891892
+i k i 0.08108108108108109
+i k k 0.16216216216216217
+i k o 0.1891891891891892
+i k t 0.02702702702702703
+i l X 0.07636363636363637
+i l a 0.10909090909090909
+i l b 0.014545454545454545
+i l d 0.08
+i l e 0.13818181818181818
+i l h 0.01090909090909091
+i l i 0.13090909090909092
+i l k 0.01090909090909091
+i l l 0.2909090909090909
+i l m 0.01090909090909091
+i l o 0.01818181818181818
+i l p 0.0036363636363636364
+i l s 0.007272727272727273
+i l u 0.0036363636363636364
+i l v 0.01818181818181818
+i l y 0.07272727272727272
+i l z 0.0036363636363636364
+i m X 0.05405405405405406
+i m a 0.10810810810810811
+i m b 0.16216216216216217
+i m e 0.13513513513513514
+i m i 0.13513513513513514
+i m m 0.16216216216216217
+i m o 0.21621621621621623
+i m p 0.02702702702702703
+i n X 0.11438474870017332
+i n a 0.30849220103986136
+i n c 0.0017331022530329288
+i n d 0.07972270363951472
+i n e 0.32062391681109187
+i n g 0.01733102253032929
+i n i 0.025996533795493933
+i n k 0.005199306759098787
+i n n 0.0831889081455806
+i n o 0.010398613518197574
+i n s 0.005199306759098787
+i n t 0.024263431542461005
+i n y 0.0017331022530329288
+i n z 0.0017331022530329288
+i o X 0.05405405405405406
+i o a 0.02702702702702703
+i o b 0.02702702702702703
+i o l 0.21621621621621623
+i o n 0.35135135135135137
+i o r 0.13513513513513514
+i o t 0.10810810810810811
+i o u 0.05405405405405406
+i o v 0.02702702702702703
+i p X 0.058823529411764705
+i p a 0.11764705882352941
+i p e 0.058823529411764705
+i p h 0.17647058823529413
+i p p 0.5294117647058824
+i p s 0.058823529411764705
+i q u 1.0
+i r X 0.05333333333333334
+i r a 0.30666666666666664
+i r b 0.04
+i r d 0.04
+i r e 0.2
+i r g 0.08
+i r i 0.09333333333333334
+i r l 0.08
+i r m 0.013333333333333334
+i r n 0.013333333333333334
+i r s 0.08
+i s X 0.19852941176470587
+i s a 0.1323529411764706
+i s b 0.003676470588235294
+i s c 0.014705882352941176
+i s e 0.1323529411764706
+i s h 0.051470588235294115
+i s i 0.025735294117647058
+i s k 0.007352941176470588
+i s l 0.003676470588235294
+i s o 0.011029411764705883
+i s s 0.23897058823529413
+i s t 0.17279411764705882
+i s u 0.003676470588235294
+i s y 0.003676470588235294
+i t X 0.08275862068965517
+i t a 0.47586206896551725
+i t e 0.05517241379310345
+i t h 0.11724137931034483
+i t i 0.027586206896551724
+i t l 0.027586206896551724
+i t n 0.020689655172413793
+i t o 0.006896551724137931
+i t r 0.027586206896551724
+i t s 0.006896551724137931
+i t t 0.10344827586206896
+i t y 0.041379310344827586
+i t z 0.006896551724137931
+i u k 1.0
+i v X 0.027777777777777776
+i v a 0.2222222222222222
+i v e 0.1111111111111111
+i v i 0.4444444444444444
+i v k 0.027777777777777776
+i v o 0.05555555555555555
+i v y 0.1111111111111111
+i x X 0.5
+i x i 0.4
+i x y 0.1
+i y X 0.25
+i y a 0.75
+i z X 0.1
+i z a 0.45
+i z b 0.05
+i z e 0.1
+i z i 0.05
+i z z 0.25
+j X X 1.0
+j a X 0.042105263157894736
+j a c 0.2736842105263158
+j a d 0.021052631578947368
+j a i 0.031578947368421054
+j a l 0.010526315789473684
+j a m 0.042105263157894736
+j a n 0.43157894736842106
+j a q 0.05263157894736842
+j a s 0.031578947368421054
+j a y 0.05263157894736842
+j a z 0.010526315789473684
+j e X 0.012987012987012988
+j e a 0.23376623376623376
+j e h 0.012987012987012988
+j e l 0.025974025974025976
+j e m 0.06493506493506493
+j e n 0.2987012987012987
+j e r 0.14285714285714285
+j e s 0.16883116883116883
+j e w 0.03896103896103896
+j i X 0.07692307692307693
+j i e 0.07692307692307693
+j i l 0.7692307692307693
+j i n 0.07692307692307693
+j o   0.01020408163265306
+j o - 0.02040816326530612
+j o X 0.05102040816326531
+j o a 0.10204081632653061
+j o b 0.07142857142857142
+j o c 0.04081632653061224
+j o d 0.04081632653061224
+j o e 0.11224489795918367
+j o h 0.04081632653061224
+j o i 0.01020408163265306
+j o j 0.01020408163265306
+j o l 0.10204081632653061
+j o n 0.04081632653061224
+j o r 0.11224489795918367
+j o s 0.14285714285714285
+j o u 0.01020408163265306
+j o y 0.08163265306122448
+j u a 0.05714285714285714
+j u d 0.2
+j u l 0.5142857142857142
+j u n 0.14285714285714285
+j u s 0.08571428571428572
+j y X 0.5
+j y o 0.5
+k X X 1.0
+k a X 0.20634920634920634
+k a a 0.005291005291005291
+k a c 0.015873015873015872
+k a h 0.026455026455026454
+k a i 0.042328042328042326
+k a j 0.005291005291005291
+k a k 0.010582010582010581
+k a l 0.0582010582010582
+k a m 0.021164021164021163
+k a n 0.021164021164021163
+k a r 0.24867724867724866
+k a s 0.042328042328042326
+k a t 0.24867724867724866
+k a y 0.047619047619047616
+k e X 0.13559322033898305
+k e e 0.06779661016949153
+k e l 0.3728813559322034
+k e n 0.05084745762711865
+k e r 0.1694915254237288
+k e s 0.06779661016949153
+k e t 0.06779661016949153
+k e v 0.03389830508474576
+k e y 0.03389830508474576
+k i X 0.22058823529411764
+k i a 0.04411764705882353
+k i e 0.19117647058823528
+k i k 0.014705882352941176
+k i l 0.014705882352941176
+k i m 0.14705882352941177
+k i n 0.014705882352941176
+k i p 0.058823529411764705
+k i r 0.16176470588235295
+k i s 0.04411764705882353
+k i t 0.058823529411764705
+k i z 0.029411764705882353
+k k a 0.125
+k k i 0.75
+k k y 0.125
+k l a 0.6666666666666666
+k l i 0.16666666666666666
+k l y 0.16666666666666666
+k o X 0.32142857142857145
+k o l 0.07142857142857142
+k o n 0.07142857142857142
+k o o 0.03571428571428571
+k o r 0.4642857142857143
+k o u 0.03571428571428571
+k q u 1.0
+k r i 0.7619047619047619
+k r y 0.23809523809523808
+k s X 1.0
+k t a 1.0
+k y X 0.5263157894736842
+k y l 0.3157894736842105
+k y m 0.05263157894736842
+k y n 0.05263157894736842
+k y r 0.05263157894736842
+l - j 1.0
+l X X 1.0
+l a - 0.005089058524173028
+l a X 0.5114503816793893
+l a b 0.002544529262086514
+l a c 0.010178117048346057
+l a d 0.017811704834605598
+l a e 0.002544529262086514
+l a g 0.005089058524173028
+l a h 0.027989821882951654
+l a i 0.03816793893129771
+l a k 0.010178117048346057
+l a l 0.002544529262086514
+l a m 0.01272264631043257
+l a n 0.13994910941475827
+l a r 0.0916030534351145
+l a s 0.007633587786259542
+l a t 0.015267175572519083
+l a u 0.06870229007633588
+l a v 0.015267175572519083
+l a y 0.015267175572519083
+l b a 0.13333333333333333
+l b e 0.6666666666666666
+l b i 0.13333333333333333
+l b y 0.06666666666666667
+l c a 0.0625
+l c e 0.1875
+l c i 0.625
+l c y 0.125
+l d X 0.044444444444444446
+l d a 0.5111111111111111
+l d e 0.13333333333333333
+l d i 0.2
+l d r 0.044444444444444446
+l d y 0.06666666666666667
+l e X 0.2954091816367265
+l e a 0.041916167664670656
+l e b 0.001996007984031936
+l e c 0.005988023952095809
+l e d 0.007984031936127744
+l e e 0.17165668662674652
+l e g 0.003992015968063872
+l e h 0.001996007984031936
+l e i 0.021956087824351298
+l e j 0.003992015968063872
+l e l 0.007984031936127744
+l e m 0.01996007984031936
+l e n 0.17564870259481039
+l e o 0.03792415169660679
+l e r 0.015968063872255488
+l e s 0.03592814371257485
+l e t 0.06786427145708583
+l e u 0.003992015968063872
+l e v 0.001996007984031936
+l e x 0.017964071856287425
+l e y 0.05588822355289421
+l e z 0.001996007984031936
+l f i 0.3333333333333333
+l f r 0.6666666666666666
+l g a 0.75
+l g e 0.25
+l h e 1.0
+l i X 0.06463195691202872
+l i a 0.15798922800718132
+l i b 0.008976660682226212
+l i c 0.03411131059245961
+l i d 0.017953321364452424
+l i e 0.14721723518850988
+l i g 0.0017953321364452424
+l i k 0.0017953321364452424
+l i l 0.04308797127468582
+l i m 0.003590664272890485
+l i n 0.296229802513465
+l i o 0.005385996409335727
+l i p 0.010771992818671455
+l i q 0.0017953321364452424
+l i r 0.0017953321364452424
+l i s 0.12208258527827648
+l i t 0.04308797127468582
+l i u 0.0017953321364452424
+l i v 0.008976660682226212
+l i x 0.0017953321364452424
+l i y 0.0017953321364452424
+l i z 0.02333931777378815
+l j e 1.0
+l k a 0.8571428571428571
+l k e 0.14285714285714285
+l l X 0.09
+l l a 0.2525
+l l e 0.3125
+l l i 0.21
+l l l 0.0025
+l l o 0.0125
+l l s 0.005
+l l y 0.115
+l m a 0.5238095238095238
+l m e 0.19047619047619047
+l m i 0.2857142857142857
+l n a 0.4
+l n e 0.2
+l n o 0.4
+l o X 0.031055900621118012
+l o d 0.018633540372670808
+l o e 0.024844720496894408
+l o i 0.043478260869565216
+l o l 0.031055900621118012
+l o m 0.018633540372670808
+l o n 0.13043478260869565
+l o p 0.012422360248447204
+l o r 0.5031055900621118
+l o s 0.024844720496894408
+l o t 0.08695652173913043
+l o u 0.037267080745341616
+l o v 0.012422360248447204
+l o w 0.018633540372670808
+l o y 0.006211180124223602
+l p a 0.4
+l p h 0.6
+l r i 0.75
+l r y 0.25
+l s a 0.17391304347826086
+l s b 0.043478260869565216
+l s e 0.30434782608695654
+l s i 0.2608695652173913
+l s p 0.043478260869565216
+l s u 0.043478260869565216
+l s y 0.13043478260869565
+l t a 0.5
+l t h 0.5
+l u X 0.02857142857142857
+l u a 0.05714285714285714
+l u c 0.45714285714285713
+l u e 0.05714285714285714
+l u i 0.05714285714285714
+l u l 0.11428571428571428
+l u n 0.02857142857142857
+l u r 0.14285714285714285
+l u s 0.05714285714285714
+l v a 0.30434782608695654
+l v e 0.13043478260869565
+l v i 0.5652173913043478
+l w e 0.3333333333333333
+l w i 0.6666666666666666
+l y - 0.004830917874396135
+l y X 0.26570048309178745
+l y a 0.04830917874396135
+l y c 0.00966183574879227
+l y d 0.01932367149758454
+l y e 0.004830917874396135
+l y m 0.014492753623188406
+l y n 0.5120772946859904
+l y p 0.004830917874396135
+l y s 0.10628019323671498
+l y t 0.00966183574879227
+l z i 1.0
+m X X 1.0
+m a X 0.07277628032345014
+m a b 0.016172506738544475
+m a c 0.0026954177897574125
+m a d 0.0673854447439353
+m a e 0.005390835579514825
+m a g 0.029649595687331536
+m a h 0.008086253369272238
+m a i 0.03504043126684636
+m a l 0.09433962264150944
+m a m 0.008086253369272238
+m a n 0.03773584905660377
+m a r 0.5148247978436657
+m a s 0.018867924528301886
+m a t 0.02425876010781671
+m a u 0.029649595687331536
+m a v 0.005390835579514825
+m a x 0.013477088948787063
+m a y 0.016172506738544475
+m b X 0.07142857142857142
+m b e 0.5
+m b i 0.14285714285714285
+m b r 0.14285714285714285
+m b u 0.07142857142857142
+m b y 0.07142857142857142
+m e X 0.045454545454545456
+m e a 0.032467532467532464
+m e c 0.006493506493506494
+m e d 0.025974025974025976
+m e e 0.012987012987012988
+m e g 0.05844155844155844
+m e h 0.006493506493506494
+m e i 0.012987012987012988
+m e k 0.012987012987012988
+m e l 0.42207792207792205
+m e n 0.05844155844155844
+m e o 0.006493506493506494
+m e r 0.24025974025974026
+m e t 0.05194805194805195
+m e y 0.006493506493506494
+m i X 0.12101910828025478
+m i a 0.025477707006369428
+m i c 0.09554140127388536
+m i d 0.006369426751592357
+m i e 0.10828025477707007
+m i g 0.025477707006369428
+m i k 0.01910828025477707
+m i l 0.17197452229299362
+m i m 0.025477707006369428
+m i n 0.21019108280254778
+m i o 0.012738853503184714
+m i q 0.006369426751592357
+m i r 0.10191082802547771
+m i s 0.03184713375796178
+m i t 0.03821656050955414
+m l y 1.0
+m m a 0.24390243902439024
+m m e 0.04878048780487805
+m m i 0.4146341463414634
+m m y 0.2926829268292683
+m o d 0.06779661016949153
+m o g 0.05084745762711865
+m o i 0.03389830508474576
+m o j 0.01694915254237288
+m o l 0.1016949152542373
+m o m 0.01694915254237288
+m o n 0.4067796610169492
+m o r 0.2033898305084746
+m o s 0.01694915254237288
+m o t 0.01694915254237288
+m o y 0.05084745762711865
+m o z 0.01694915254237288
+m p e 0.25
+m p i 0.75
+m r a 1.0
+m u e 0.16666666666666666
+m u f 0.25
+m u i 0.08333333333333333
+m u n 0.16666666666666666
+m u r 0.3333333333333333
+m y X 0.47058823529411764
+m y e 0.029411764705882353
+m y l 0.058823529411764705
+m y n 0.058823529411764705
+m y r 0.38235294117647056
+n - e 0.3333333333333333
+n - m 0.6666666666666666
+n X X 1.0
+n a - 0.0053475935828877
+n a X 0.7896613190730838
+n a b 0.016042780748663103
+n a d 0.026737967914438502
+n a e 0.0017825311942959
+n a h 0.023172905525846704
+n a i 0.0017825311942959
+n a j 0.0017825311942959
+n a l 0.023172905525846704
+n a m 0.008912655971479501
+n a n 0.04634581105169341
+n a o 0.0035650623885918
+n a r 0.008912655971479501
+n a s 0.0053475935828877
+n a t 0.03208556149732621
+n a y 0.0053475935828877
+n c a 0.07142857142857142
+n c e 0.38095238095238093
+n c h 0.14285714285714285
+n c i 0.2619047619047619
+n c o 0.047619047619047616
+n c y 0.09523809523809523
+n d X 0.0625
+n d a 0.2692307692307692
+n d e 0.1346153846153846
+n d i 0.1778846153846154
+n d o 0.028846153846153848
+n d r 0.20192307692307693
+n d s 0.028846153846153848
+n d y 0.09615384615384616
+n e - 0.0069084628670120895
+n e X 0.6217616580310881
+n e a 0.013816925734024179
+n e c 0.0051813471502590676
+n e d 0.010362694300518135
+n e e 0.017271157167530225
+n e i 0.010362694300518135
+n e l 0.0846286701208981
+n e m 0.0034542314335060447
+n e n 0.0069084628670120895
+n e r 0.015544041450777202
+n e s 0.02936096718480138
+n e t 0.12089810017271158
+n e v 0.013816925734024179
+n e y 0.037996545768566495
+n e z 0.0017271157167530224
+n g a 0.12121212121212122
+n g e 0.696969696969697
+n g i 0.06060606060606061
+n g r 0.06060606060606061
+n g u 0.030303030303030304
+n g y 0.030303030303030304
+n h i 1.0
+n i X 0.18661971830985916
+n i a 0.13380281690140844
+n i b 0.0035211267605633804
+n i c 0.1267605633802817
+n i d 0.01056338028169014
+n i e 0.2676056338028169
+n i f 0.028169014084507043
+n i k 0.035211267605633804
+n i l 0.02464788732394366
+n i n 0.06338028169014084
+n i q 0.014084507042253521
+n i s 0.0528169014084507
+n i t 0.04929577464788732
+n i x 0.0035211267605633804
+n j a 0.75
+n j e 0.25
+n k X 0.07692307692307693
+n k a 0.7692307692307693
+n k i 0.07692307692307693
+n k y 0.07692307692307693
+n l e 1.0
+n m a 1.0
+n n - 0.004914004914004914
+n n X 0.14742014742014742
+n n a 0.26535626535626533
+n n d 0.002457002457002457
+n n e 0.27764127764127766
+n n i 0.19656019656019655
+n n m 0.004914004914004914
+n n n 0.007371007371007371
+n n o 0.009828009828009828
+n n u 0.002457002457002457
+n n y 0.08108108108108109
+n o a 0.012658227848101266
+n o e 0.10126582278481013
+n o i 0.012658227848101266
+n o l 0.06329113924050633
+n o m 0.012658227848101266
+n o n 0.25316455696202533
+n o r 0.4936708860759494
+n o t 0.012658227848101266
+n o v 0.0379746835443038
+n r i 0.8888888888888888
+n r y 0.1111111111111111
+n s X 0.037037037037037035
+n s e 0.1111111111111111
+n s h 0.037037037037037035
+n s i 0.1111111111111111
+n s l 0.14814814814814814
+n s o 0.037037037037037035
+n s t 0.37037037037037035
+n s u 0.07407407407407407
+n s y 0.07407407407407407
+n t X 0.11764705882352941
+n t a 0.17647058823529413
+n t e 0.04411764705882353
+n t h 0.3088235294117647
+n t i 0.20588235294117646
+n t o 0.10294117647058823
+n t r 0.014705882352941176
+n t u 0.014705882352941176
+n t y 0.014705882352941176
+n u e 0.3333333333333333
+n u l 0.3333333333333333
+n u s 0.3333333333333333
+n v i 0.5
+n v o 0.5
+n y X 0.7076923076923077
+n y a 0.18461538461538463
+n y d 0.015384615384615385
+n y e 0.046153846153846156
+n y s 0.046153846153846156
+n z a 0.4
+n z e 0.4
+n z y 0.2
+o   a 1.0
+o - a 1.0
+o X X 1.0
+o a m 0.06666666666666667
+o a n 0.9333333333333333
+o b b 0.24390243902439024
+o b e 0.1951219512195122
+o b h 0.024390243902439025
+o b i 0.36585365853658536
+o b y 0.17073170731707318
+o c e 0.4
+o c h 0.5
+o c t 0.1
+o d a 0.044444444444444446
+o d d 0.022222222222222223
+o d e 0.35555555555555557
+o d i 0.35555555555555557
+o d o 0.1111111111111111
+o d y 0.1111111111111111
+o e X 0.15384615384615385
+o e b 0.038461538461538464
+o e l 0.6538461538461539
+o e m 0.038461538461538464
+o e t 0.07692307692307693
+o e y 0.038461538461538464
+o f e 0.4
+o f i 0.6
+o g e 1.0
+o h X 0.2
+o h a 0.4
+o h n 0.4
+o i c 0.06666666666666667
+o i n 0.26666666666666666
+o i r 0.06666666666666667
+o i s 0.5333333333333333
+o i t 0.06666666666666667
+o j e 0.5
+o j o 0.5
+o k X 0.2
+o k e 0.2
+o k i 0.2
+o k o 0.2
+o k s 0.2
+o l - 0.006756756756756757
+o l X 0.033783783783783786
+o l a 0.20945945945945946
+o l d 0.05405405405405406
+o l e 0.16891891891891891
+o l g 0.006756756756756757
+o l i 0.18243243243243243
+o l j 0.006756756756756757
+o l l 0.20945945945945946
+o l o 0.033783783783783786
+o l v 0.006756756756756757
+o l w 0.006756756756756757
+o l y 0.07432432432432433
+o m a 0.37037037037037035
+o m e 0.1111111111111111
+o m i 0.2222222222222222
+o m m 0.14814814814814814
+o m o 0.1111111111111111
+o m y 0.037037037037037035
+o n X 0.13145539906103287
+o n a 0.1267605633802817
+o n c 0.014084507042253521
+o n d 0.0892018779342723
+o n e 0.09389671361502347
+o n i 0.18309859154929578
+o n j 0.004694835680751174
+o n l 0.004694835680751174
+o n n 0.22535211267605634
+o n o 0.03286384976525822
+o n s 0.056338028169014086
+o n t 0.009389671361502348
+o n y 0.028169014084507043
+o o X 0.1
+o o b 0.1
+o o h 0.1
+o o k 0.4
+o o n 0.1
+o o r 0.1
+o o t 0.1
+o p a 0.3125
+o p e 0.125
+o p h 0.4375
+o p p 0.0625
+o p r 0.0625
+o r X 0.025787965616045846
+o r a 0.21203438395415472
+o r c 0.0057306590257879654
+o r d 0.034383954154727794
+o r e 0.20916905444126074
+o r g 0.0659025787965616
+o r i 0.21203438395415472
+o r l 0.011461318051575931
+o r m 0.017191977077363897
+o r n 0.03151862464183381
+o r o 0.022922636103151862
+o r r 0.08882521489971347
+o r s 0.0057306590257879654
+o r t 0.025787965616045846
+o r y 0.03151862464183381
+o s X 0.013333333333333334
+o s a 0.28
+o s c 0.013333333333333334
+o s e 0.38666666666666666
+o s h 0.08
+o s i 0.10666666666666667
+o s l 0.02666666666666667
+o s m 0.013333333333333334
+o s s 0.05333333333333334
+o s y 0.02666666666666667
+o t X 0.125
+o t a 0.025
+o t e 0.05
+o t h 0.225
+o t i 0.075
+o t s 0.025
+o t t 0.475
+o u X 0.15384615384615385
+o u e 0.07692307692307693
+o u i 0.23076923076923078
+o u r 0.3076923076923077
+o u s 0.07692307692307693
+o u x 0.15384615384615385
+o v a 0.3
+o v e 0.5
+o v i 0.1
+o v o 0.1
+o w X 0.5
+o w e 0.5
+o x a 0.5
+o x i 0.375
+o x y 0.125
+o y X 0.08333333333333333
+o y a 0.3333333333333333
+o y c 0.16666666666666666
+o y e 0.08333333333333333
+o y n 0.08333333333333333
+o y o 0.08333333333333333
+o y r 0.08333333333333333
+o y s 0.08333333333333333
+o z X 0.08333333333333333
+o z a 0.4166666666666667
+o z e 0.4166666666666667
+o z i 0.08333333333333333
+p X X 1.0
+p a X 0.15384615384615385
+p a c 0.019230769230769232
+p a g 0.019230769230769232
+p a i 0.019230769230769232
+p a l 0.07692307692307693
+p a m 0.1346153846153846
+p a n 0.057692307692307696
+p a o 0.038461538461538464
+p a r 0.019230769230769232
+p a t 0.21153846153846154
+p a u 0.21153846153846154
+p a v 0.038461538461538464
+p e X 0.09302325581395349
+p e a 0.09302325581395349
+p e g 0.11627906976744186
+p e l 0.023255813953488372
+p e n 0.13953488372093023
+p e p 0.046511627906976744
+p e r 0.2558139534883721
+p e t 0.23255813953488372
+p h a 0.21052631578947367
+p h e 0.15789473684210525
+p h i 0.43859649122807015
+p h n 0.03508771929824561
+p h o 0.017543859649122806
+p h r 0.03508771929824561
+p h y 0.08771929824561403
+p h z 0.017543859649122806
+p i X 0.06666666666666667
+p i a 0.2
+p i e 0.4
+p i n 0.06666666666666667
+p i p 0.2
+p i t 0.06666666666666667
+p o l 0.5
+p o o 0.16666666666666666
+p o p 0.16666666666666666
+p o r 0.16666666666666666
+p p X 0.06666666666666667
+p p a 0.2
+p p e 0.13333333333333333
+p p h 0.13333333333333333
+p p i 0.13333333333333333
+p p o 0.06666666666666667
+p p y 0.26666666666666666
+p r a 0.06666666666666667
+p r i 0.5333333333333333
+p r u 0.4
+p s o 0.3333333333333333
+p s y 0.6666666666666666
+p y X 1.0
+q u e 0.7105263157894737
+q u i 0.2894736842105263
+r X X 1.0
+r a - 0.008902077151335312
+r a X 0.4836795252225519
+r a a 0.005934718100890208
+r a b 0.03857566765578635
+r a c 0.04451038575667656
+r a d 0.002967359050445104
+r a e 0.005934718100890208
+r a f 0.01483679525222552
+r a g 0.002967359050445104
+r a h 0.05341246290801187
+r a i 0.02373887240356083
+r a j 0.002967359050445104
+r a k 0.002967359050445104
+r a l 0.09792284866468842
+r a m 0.005934718100890208
+r a n 0.142433234421365
+r a p 0.002967359050445104
+r a q 0.005934718100890208
+r a s 0.005934718100890208
+r a t 0.011869436201780416
+r a v 0.002967359050445104
+r a y 0.02967359050445104
+r a z 0.002967359050445104
+r b X 0.10526315789473684
+r b a 0.21052631578947367
+r b e 0.2631578947368421
+r b i 0.21052631578947367
+r b r 0.05263157894736842
+r b y 0.15789473684210525
+r c a 0.041666666666666664
+r c e 0.375
+r c h 0.08333333333333333
+r c i 0.375
+r c y 0.125
+r d X 0.08163265306122448
+r d a 0.20408163265306123
+r d e 0.2857142857142857
+r d i 0.22448979591836735
+r d r 0.08163265306122448
+r d u 0.04081632653061224
+r d y 0.08163265306122448
+r e X 0.13666666666666666
+r e a 0.04666666666666667
+r e b 0.03
+r e d 0.06666666666666667
+r e e 0.10333333333333333
+r e g 0.016666666666666666
+r e i 0.02666666666666667
+r e l 0.09666666666666666
+r e m 0.0033333333333333335
+r e n 0.2
+r e s 0.08333333333333333
+r e t 0.14
+r e v 0.0033333333333333335
+r e w 0.0033333333333333335
+r e y 0.043333333333333335
+r g X 0.06666666666666667
+r g a 0.26666666666666666
+r g e 0.23333333333333334
+r g i 0.3
+r g l 0.016666666666666666
+r g o 0.05
+r g r 0.016666666666666666
+r g u 0.03333333333333333
+r g y 0.016666666666666666
+r h a 0.07142857142857142
+r h e 0.2857142857142857
+r h i 0.21428571428571427
+r h o 0.42857142857142855
+r i - 0.001694915254237288
+r i X 0.07796610169491526
+r i a 0.1288135593220339
+r i b 0.006779661016949152
+r i c 0.05084745762711865
+r i d 0.030508474576271188
+r i e 0.1711864406779661
+r i g 0.010169491525423728
+r i j 0.001694915254237288
+r i k 0.020338983050847456
+r i l 0.06440677966101695
+r i n 0.1423728813559322
+r i o 0.011864406779661017
+r i q 0.003389830508474576
+r i s 0.1864406779661017
+r i t 0.06779661016949153
+r i v 0.00847457627118644
+r i x 0.010169491525423728
+r i y 0.001694915254237288
+r i z 0.003389830508474576
+r j X 0.125
+r j a 0.125
+r j e 0.125
+r j i 0.25
+r j o 0.25
+r j y 0.125
+r k X 0.5
+r k e 0.5
+r l X 0.03816793893129771
+r l a 0.12213740458015267
+r l e 0.3969465648854962
+r l i 0.2366412213740458
+r l o 0.06870229007633588
+r l y 0.13740458015267176
+r m X 0.022222222222222223
+r m a 0.24444444444444444
+r m e 0.24444444444444444
+r m i 0.37777777777777777
+r m o 0.08888888888888889
+r m y 0.022222222222222223
+r n X 0.018518518518518517
+r n a 0.42592592592592593
+r n e 0.35185185185185186
+r n i 0.16666666666666666
+r n y 0.037037037037037035
+r o X 0.017341040462427744
+r o a 0.017341040462427744
+r o b 0.09826589595375723
+r o c 0.028901734104046242
+r o d 0.028901734104046242
+r o l 0.15606936416184972
+r o m 0.03468208092485549
+r o n 0.1329479768786127
+r o o 0.028901734104046242
+r o r 0.03468208092485549
+r o s 0.2658959537572254
+r o t 0.028901734104046242
+r o w 0.017341040462427744
+r o x 0.046242774566473986
+r o z 0.06358381502890173
+r q u 1.0
+r r X 0.008928571428571428
+r r a 0.11607142857142858
+r r e 0.044642857142857144
+r r i 0.5982142857142857
+r r o 0.026785714285714284
+r r y 0.20535714285714285
+r s a 0.125
+r s e 0.08333333333333333
+r s h 0.041666666666666664
+r s i 0.16666666666666666
+r s o 0.08333333333333333
+r s t 0.375
+r s u 0.125
+r t X 0.04054054054054054
+r t a 0.17567567567567569
+r t e 0.10810810810810811
+r t g 0.013513513513513514
+r t h 0.13513513513513514
+r t i 0.3108108108108108
+r t l 0.013513513513513514
+r t n 0.04054054054054054
+r t r 0.05405405405405406
+r t u 0.02702702702702703
+r t y 0.06756756756756757
+r t z 0.013513513513513514
+r u X 0.027777777777777776
+r u b 0.16666666666666666
+r u d 0.3888888888888889
+r u e 0.05555555555555555
+r u l 0.027777777777777776
+r u n 0.1111111111111111
+r u p 0.027777777777777776
+r u t 0.19444444444444445
+r v a 1.0
+r w a 1.0
+r y X 0.3790322580645161
+r y a 0.06451612903225806
+r y b 0.016129032258064516
+r y c 0.008064516129032258
+r y e 0.056451612903225805
+r y j 0.016129032258064516
+r y l 0.1693548387096774
+r y n 0.1532258064516129
+r y r 0.008064516129032258
+r y s 0.12903225806451613
+r z a 1.0
+s X X 1.0
+s a   0.004761904761904762
+s a - 0.004761904761904762
+s a X 0.44761904761904764
+s a a 0.004761904761904762
+s a b 0.08095238095238096
+s a c 0.004761904761904762
+s a d 0.02857142857142857
+s a e 0.004761904761904762
+s a h 0.004761904761904762
+s a i 0.004761904761904762
+s a l 0.09523809523809523
+s a m 0.05238095238095238
+s a n 0.12857142857142856
+s a p 0.009523809523809525
+s a r 0.07142857142857142
+s a s 0.014285714285714285
+s a u 0.014285714285714285
+s a v 0.004761904761904762
+s a y 0.014285714285714285
+s a z 0.004761904761904762
+s b e 1.0
+s c a 0.4166666666666667
+s c e 0.16666666666666666
+s c h 0.25
+s c i 0.08333333333333333
+s c o 0.08333333333333333
+s d a 0.5
+s d e 0.5
+s e X 0.35074626865671643
+s e a 0.05970149253731343
+s e c 0.007462686567164179
+s e e 0.022388059701492536
+s e f 0.014925373134328358
+s e k 0.007462686567164179
+s e l 0.23134328358208955
+s e m 0.029850746268656716
+s e n 0.05223880597014925
+s e p 0.029850746268656716
+s e r 0.014925373134328358
+s e t 0.05970149253731343
+s e y 0.11940298507462686
+s h X 0.02054794520547945
+s h a 0.4931506849315068
+s h e 0.3013698630136986
+s h i 0.11643835616438356
+s h l 0.04794520547945205
+s h o 0.02054794520547945
+s i X 0.1323529411764706
+s i a 0.17647058823529413
+s i b 0.08823529411764706
+s i c 0.007352941176470588
+s i d 0.029411764705882353
+s i e 0.2647058823529412
+s i g 0.007352941176470588
+s i k 0.007352941176470588
+s i l 0.051470588235294115
+s i m 0.029411764705882353
+s i n 0.08823529411764706
+s i o 0.022058823529411766
+s i r 0.022058823529411766
+s i s 0.04411764705882353
+s i t 0.029411764705882353
+s k a 1.0
+s l a 0.0625
+s l e 0.4375
+s l i 0.3125
+s l y 0.1875
+s m a 0.3
+s m e 0.3
+s m i 0.3
+s m u 0.1
+s o X 0.03571428571428571
+s o b 0.03571428571428571
+s o f 0.07142857142857142
+s o l 0.14285714285714285
+s o n 0.4642857142857143
+s o p 0.17857142857142858
+s o r 0.03571428571428571
+s o s 0.03571428571428571
+s p e 1.0
+s s X 0.06993006993006994
+s s a 0.4125874125874126
+s s e 0.11188811188811189
+s s i 0.27972027972027974
+s s o 0.006993006993006993
+s s y 0.11888111888111888
+s t X 0.005747126436781609
+s t a 0.3160919540229885
+s t e 0.2471264367816092
+s t h 0.011494252873563218
+s t i 0.27586206896551724
+s t l 0.005747126436781609
+s t o 0.034482758620689655
+s t r 0.028735632183908046
+s t y 0.07471264367816093
+s u e 0.13513513513513514
+s u k 0.05405405405405406
+s u l 0.10810810810810811
+s u n 0.10810810810810811
+s u s 0.32432432432432434
+s u z 0.2702702702702703
+s y X 0.7045454545454546
+s y a 0.06818181818181818
+s y b 0.11363636363636363
+s y d 0.06818181818181818
+s y l 0.045454545454545456
+t X X 1.0
+t a X 0.637223974763407
+t a b 0.04100946372239748
+t a c 0.025236593059936908
+t a f 0.006309148264984227
+t a l 0.08517350157728706
+t a m 0.04100946372239748
+t a n 0.07570977917981073
+t a r 0.03470031545741325
+t a s 0.031545741324921134
+t a t 0.012618296529968454
+t a v 0.0031545741324921135
+t a w 0.006309148264984227
+t c h 1.0
+t e - 0.0045662100456621
+t e X 0.5570776255707762
+t e a 0.0228310502283105
+t e d 0.0319634703196347
+t e e 0.0136986301369863
+t e f 0.0273972602739726
+t e l 0.0639269406392694
+t e n 0.0502283105022831
+t e o 0.0045662100456621
+t e p 0.0410958904109589
+t e r 0.1324200913242009
+t e s 0.0319634703196347
+t e v 0.0091324200913242
+t e y 0.0091324200913242
+t g u 1.0
+t h X 0.18478260869565216
+t h a 0.20108695652173914
+t h e 0.3641304347826087
+t h i 0.10326086956521739
+t h l 0.02717391304347826
+t h o 0.021739130434782608
+t h r 0.043478260869565216
+t h s 0.005434782608695652
+t h y 0.04891304347826087
+t i X 0.15168539325842698
+t i a 0.1348314606741573
+t i c 0.02247191011235955
+t i e 0.17415730337078653
+t i f 0.03932584269662921
+t i l 0.06179775280898876
+t i m 0.03932584269662921
+t i n 0.3089887640449438
+t i o 0.0056179775280898875
+t i p 0.016853932584269662
+t i s 0.02247191011235955
+t i t 0.02247191011235955
+t k a 1.0
+t l a 0.21428571428571427
+t l e 0.35714285714285715
+t l i 0.2857142857142857
+t l y 0.14285714285714285
+t n a 0.125
+t n e 0.75
+t n i 0.125
+t o b 0.13333333333333333
+t o d 0.022222222222222223
+t o i 0.044444444444444446
+t o l 0.022222222222222223
+t o m 0.17777777777777778
+t o n 0.24444444444444444
+t o o 0.022222222222222223
+t o r 0.28888888888888886
+t o v 0.044444444444444446
+t r a 0.208955223880597
+t r e 0.1044776119402985
+t r i 0.44776119402985076
+t r o 0.05970149253731343
+t r u 0.1791044776119403
+t s a 0.16666666666666666
+t s e 0.16666666666666666
+t s h 0.16666666666666666
+t s i 0.16666666666666666
+t s y 0.3333333333333333
+t t X 0.05286343612334802
+t t a 0.2907488986784141
+t t e 0.43612334801762115
+t t i 0.13656387665198239
+t t l 0.004405286343612335
+t t n 0.004405286343612335
+t t o 0.004405286343612335
+t t y 0.07048458149779736
+t u e 0.125
+t u m 0.125
+t u n 0.375
+t u r 0.125
+t u s 0.25
+t w i 0.5
+t w y 0.5
+t y X 0.723404255319149
+t y a 0.02127659574468085
+t y b 0.0425531914893617
+t y e 0.02127659574468085
+t y n 0.19148936170212766
+t z a 0.5
+t z i 0.5
+u X X 1.0
+u a n 1.0
+u b e 0.15384615384615385
+u b i 0.38461538461538464
+u b r 0.38461538461538464
+u b y 0.07692307692307693
+u c e 0.0625
+u c i 0.75
+u c k 0.0625
+u c r 0.0625
+u c y 0.0625
+u d X 0.045454545454545456
+u d a 0.045454545454545456
+u d e 0.25
+u d i 0.36363636363636365
+u d o 0.022727272727272728
+u d r 0.1590909090909091
+u d y 0.11363636363636363
+u e - 0.020833333333333332
+u e X 0.14583333333333334
+u e a 0.020833333333333332
+u e e 0.020833333333333332
+u e l 0.4791666666666667
+u e n 0.16666666666666666
+u e r 0.0625
+u e s 0.020833333333333332
+u e t 0.0625
+u f f 0.5
+u f i 0.5
+u g e 0.25
+u g i 0.125
+u g l 0.125
+u g u 0.5
+u i X 0.09090909090909091
+u i e 0.045454545454545456
+u i l 0.13636363636363635
+u i n 0.3181818181818182
+u i r 0.045454545454545456
+u i s 0.22727272727272727
+u i t 0.13636363636363635
+u k a 0.3333333333333333
+u k e 0.3333333333333333
+u k i 0.3333333333333333
+u l X 0.016129032258064516
+u l a 0.20967741935483872
+u l c 0.14516129032258066
+u l d 0.016129032258064516
+u l e 0.08064516129032258
+u l i 0.4032258064516129
+u l l 0.016129032258064516
+u l r 0.04838709677419355
+u l s 0.016129032258064516
+u l u 0.016129032258064516
+u l v 0.016129032258064516
+u l y 0.016129032258064516
+u m X 0.5
+u m e 0.5
+u n X 0.11428571428571428
+u n a 0.11428571428571428
+u n d 0.14285714285714285
+u n e 0.17142857142857143
+u n h 0.05714285714285714
+u n i 0.2
+u n n 0.14285714285714285
+u n s 0.02857142857142857
+u n v 0.02857142857142857
+u p e 0.5
+u p h 0.5
+u r X 0.03076923076923077
+u r a 0.12307692307692308
+u r d 0.015384615384615385
+u r e 0.3384615384615385
+u r i 0.2153846153846154
+u r l 0.06153846153846154
+u r o 0.046153846153846156
+u r s 0.09230769230769231
+u r t 0.06153846153846154
+u r y 0.015384615384615385
+u s X 0.07317073170731707
+u s a 0.1951219512195122
+u s c 0.024390243902439025
+u s e 0.04878048780487805
+u s h 0.024390243902439025
+u s i 0.04878048780487805
+u s s 0.0975609756097561
+u s t 0.4634146341463415
+u s y 0.024390243902439025
+u t a 0.125
+u t h 0.875
+u x X 0.75
+u x i 0.25
+u z a 0.45454545454545453
+u z e 0.18181818181818182
+u z i 0.18181818181818182
+u z y 0.09090909090909091
+u z z 0.09090909090909091
+v X X 1.0
+v a X 0.3235294117647059
+v a h 0.029411764705882353
+v a l 0.36764705882352944
+v a n 0.27941176470588236
+v e X 0.11290322580645161
+v e d 0.016129032258064516
+v e e 0.016129032258064516
+v e l 0.12903225806451613
+v e n 0.11290322580645161
+v e r 0.46774193548387094
+v e t 0.12903225806451613
+v e y 0.016129032258064516
+v i X 0.0380952380952381
+v i a 0.13333333333333333
+v i c 0.0380952380952381
+v i d 0.01904761904761905
+v i e 0.13333333333333333
+v i g 0.009523809523809525
+v i k 0.0380952380952381
+v i l 0.01904761904761905
+v i n 0.19047619047619047
+v i o 0.05714285714285714
+v i r 0.05714285714285714
+v i s 0.02857142857142857
+v i t 0.05714285714285714
+v i v 0.17142857142857143
+v i y 0.009523809523809525
+v k a 1.0
+v l a 1.0
+v o n 0.7857142857142857
+v o r 0.21428571428571427
+v r a 0.5714285714285714
+v r i 0.42857142857142855
+v s a 1.0
+v v i 0.3333333333333333
+v v y 0.6666666666666666
+v y X 0.625
+v y a 0.25
+v y n 0.125
+w X X 1.0
+w a l 0.4444444444444444
+w a n 0.5555555555555556
+w e X 0.037037037037037035
+w e l 0.1111111111111111
+w e n 0.8148148148148148
+w e r 0.037037037037037035
+w h i 1.0
+w i g 0.027777777777777776
+w i l 0.5555555555555556
+w i n 0.3888888888888889
+w i r 0.027777777777777776
+w n X 0.3
+w n a 0.3
+w n e 0.2
+w n i 0.1
+w n y 0.1
+w r e 1.0
+w s h 1.0
+w y l 0.2222222222222222
+w y n 0.7777777777777778
+x X X 1.0
+x a X 0.125
+x a n 0.75
+x a v 0.125
+x e n 1.0
+x i X 0.25
+x i a 0.0625
+x i e 0.375
+x i n 0.25
+x i s 0.0625
+x y X 0.6
+x y l 0.4
+y - a 1.0
+y X X 1.0
+y a X 0.4915254237288136
+y a c 0.0847457627118644
+y a h 0.01694915254237288
+y a l 0.01694915254237288
+y a n 0.3898305084745763
+y b X 0.0625
+y b a 0.0625
+y b e 0.3125
+y b i 0.5
+y b y 0.0625
+y c c 0.1111111111111111
+y c e 0.7777777777777778
+y c h 0.1111111111111111
+y d a 0.3076923076923077
+y d e 0.23076923076923078
+y d i 0.3076923076923077
+y d n 0.07692307692307693
+y d r 0.07692307692307693
+y e X 0.6451612903225806
+y e h 0.03225806451612903
+y e l 0.0967741935483871
+y e t 0.1935483870967742
+y e v 0.03225806451612903
+y i n 1.0
+y j a 0.5
+y j o 0.5
+y l X 0.24615384615384617
+y l a 0.13846153846153847
+y l e 0.24615384615384617
+y l i 0.13846153846153847
+y l l 0.07692307692307693
+y l m 0.015384615384615385
+y l o 0.015384615384615385
+y l v 0.03076923076923077
+y l y 0.09230769230769231
+y m X 0.16666666666666666
+y m e 0.3333333333333333
+y m p 0.5
+y n X 0.4350282485875706
+y n a 0.07344632768361582
+y n d 0.07909604519774012
+y n e 0.13559322033898305
+y n i 0.005649717514124294
+y n n 0.22598870056497175
+y n o 0.005649717514124294
+y n s 0.005649717514124294
+y n t 0.03389830508474576
+y o k 0.09090909090909091
+y o l 0.36363636363636365
+y o n 0.09090909090909091
+y o s 0.18181818181818182
+y o t 0.09090909090909091
+y o u 0.09090909090909091
+y o v 0.09090909090909091
+y p s 1.0
+y r a 0.2222222222222222
+y r e 0.1111111111111111
+y r i 0.1111111111111111
+y r l 0.1111111111111111
+y r n 0.05555555555555555
+y r o 0.05555555555555555
+y r s 0.05555555555555555
+y r t 0.2777777777777778
+y s X 0.17391304347826086
+y s a 0.13043478260869565
+y s e 0.13043478260869565
+y s h 0.043478260869565216
+y s i 0.06521739130434782
+y s l 0.021739130434782608
+y s o 0.043478260869565216
+y s s 0.15217391304347827
+y s t 0.2391304347826087
+y t X 0.14285714285714285
+y t h 0.8571428571428571
+y v e 0.5
+y v o 0.5
+z X X 1.0
+z a X 0.25806451612903225
+z a b 0.1935483870967742
+z a h 0.03225806451612903
+z a l 0.06451612903225806
+z a m 0.03225806451612903
+z a n 0.2903225806451613
+z a r 0.12903225806451613
+z b e 1.0
+z e X 0.16666666666666666
+z e a 0.05555555555555555
+z e e 0.05555555555555555
+z e l 0.4444444444444444
+z e n 0.1111111111111111
+z e t 0.16666666666666666
+z i X 0.2
+z i a 0.2
+z i b 0.06666666666666667
+z i e 0.26666666666666666
+z i l 0.06666666666666667
+z i n 0.06666666666666667
+z i t 0.13333333333333333
+z k a 1.0
+z l i 1.0
+z m i 1.0
+z o e 0.1
+z o l 0.1
+z o n 0.3
+z o r 0.5
+z s a 1.0
+z u l 0.5
+z u z 0.5
+z y X 1.0
+z z e 0.16666666666666666
+z z i 0.5
+z z y 0.3333333333333333
diff --git a/data/names-male.tri b/data/names-male.tri
new file mode 100644 (file)
index 0000000..9932d37
--- /dev/null
@@ -0,0 +1,2880 @@
+- c h 1.0
+- d a 1.0
+- f r 1.0
+- l o 0.5
+- l u 0.5
+- m a 1.0
+- p a 0.5
+- p e 0.25
+- p i 0.25
+X X a 0.07237512742099898
+X X b 0.05878355419639823
+X X c 0.0564050288820931
+X X d 0.04960924226979273
+X X e 0.04043493034318722
+X X f 0.029561671763506627
+X X g 0.053007135575942915
+X X h 0.055385660890248045
+X X i 0.01529051987767584
+X X j 0.04892966360856269
+X X k 0.02378525314305131
+X X l 0.038396194359497114
+X X m 0.06795786612300374
+X X n 0.02616377845735644
+X X o 0.01766904519198097
+X X p 0.03431872239211689
+X X q 0.0050968399592252805
+X X r 0.06795786612300374
+X X s 0.08086986068637445
+X X t 0.06388039415562351
+X X u 0.007475365273530411
+X X v 0.016989466530750934
+X X w 0.05130818892286782
+X X x 0.002378525314305131
+X X y 0.0054366292898402994
+X X z 0.010533469249065579
+X a a 0.009389671361502348
+X a b 0.07042253521126761
+X a c 0.004694835680751174
+X a d 0.07981220657276995
+X a g 0.018779342723004695
+X a h 0.018779342723004695
+X a j 0.009389671361502348
+X a l 0.26291079812206575
+X a m 0.04225352112676056
+X a n 0.18779342723004694
+X a p 0.009389671361502348
+X a r 0.15023474178403756
+X a s 0.023474178403755867
+X a u 0.056338028169014086
+X a v 0.04225352112676056
+X a x 0.004694835680751174
+X a y 0.004694835680751174
+X a z 0.004694835680751174
+X b a 0.30057803468208094
+X b e 0.24277456647398843
+X b h 0.005780346820809248
+X b i 0.04046242774566474
+X b j 0.011560693641618497
+X b l 0.028901734104046242
+X b o 0.057803468208092484
+X b r 0.21965317919075145
+X b u 0.08092485549132948
+X b y 0.011560693641618497
+X c a 0.1927710843373494
+X c e 0.012048192771084338
+X c h 0.30120481927710846
+X c l 0.19879518072289157
+X c o 0.21084337349397592
+X c r 0.030120481927710843
+X c u 0.018072289156626505
+X c y 0.03614457831325301
+X d a 0.3287671232876712
+X d e 0.2191780821917808
+X d i 0.11643835616438356
+X d m 0.00684931506849315
+X d o 0.15753424657534246
+X d r 0.0273972602739726
+X d u 0.0958904109589041
+X d w 0.03424657534246575
+X d y 0.0136986301369863
+X e a 0.025210084033613446
+X e b 0.03361344537815126
+X e d 0.11764705882352941
+X e f 0.008403361344537815
+X e g 0.008403361344537815
+X e h 0.008403361344537815
+X e l 0.226890756302521
+X e m 0.11764705882352941
+X e n 0.06722689075630252
+X e p 0.03361344537815126
+X e r 0.16806722689075632
+X e s 0.025210084033613446
+X e t 0.03361344537815126
+X e u 0.03361344537815126
+X e v 0.04201680672268908
+X e w 0.01680672268907563
+X e z 0.03361344537815126
+X f a 0.05747126436781609
+X f e 0.14942528735632185
+X f i 0.10344827586206896
+X f l 0.13793103448275862
+X f o 0.16091954022988506
+X f r 0.367816091954023
+X f u 0.011494252873563218
+X f y 0.011494252873563218
+X g a 0.2692307692307692
+X g e 0.1858974358974359
+X g i 0.1858974358974359
+X g l 0.019230769230769232
+X g o 0.10256410256410256
+X g r 0.1346153846153846
+X g u 0.10256410256410256
+X h a 0.43558282208588955
+X h e 0.26993865030674846
+X h i 0.08588957055214724
+X h o 0.08588957055214724
+X h u 0.09815950920245399
+X h y 0.024539877300613498
+X i a 0.06666666666666667
+X i b 0.022222222222222223
+X i c 0.022222222222222223
+X i g 0.2
+X i k 0.044444444444444446
+X i m 0.022222222222222223
+X i n 0.15555555555555556
+X i r 0.1111111111111111
+X i s 0.24444444444444444
+X i v 0.044444444444444446
+X i z 0.06666666666666667
+X j a 0.16666666666666666
+X j e 0.3680555555555556
+X j i 0.027777777777777776
+X j o 0.3055555555555556
+X j u 0.13194444444444445
+X k a 0.2
+X k e 0.38571428571428573
+X k i 0.18571428571428572
+X k l 0.02857142857142857
+X k n 0.014285714285714285
+X k o 0.05714285714285714
+X k r 0.08571428571428572
+X k u 0.02857142857142857
+X k y 0.014285714285714285
+X l a 0.24778761061946902
+X l e 0.3274336283185841
+X l i 0.10619469026548672
+X l l 0.017699115044247787
+X l o 0.1415929203539823
+X l u 0.12389380530973451
+X l y 0.035398230088495575
+X m a 0.475
+X m e 0.13
+X m i 0.155
+X m o 0.17
+X m u 0.05
+X m y 0.02
+X n a 0.12987012987012986
+X n e 0.3246753246753247
+X n i 0.2987012987012987
+X n o 0.23376623376623376
+X n u 0.012987012987012988
+X o b 0.07692307692307693
+X o c 0.019230769230769232
+X o d 0.07692307692307693
+X o l 0.17307692307692307
+X o m 0.019230769230769232
+X o r 0.25
+X o s 0.23076923076923078
+X o t 0.09615384615384616
+X o w 0.019230769230769232
+X o z 0.038461538461538464
+X p a 0.38613861386138615
+X p e 0.21782178217821782
+X p h 0.07920792079207921
+X p i 0.1188118811881188
+X p l 0.009900990099009901
+X p o 0.039603960396039604
+X p r 0.10891089108910891
+X p u 0.0297029702970297
+X p y 0.009900990099009901
+X q u 1.0
+X r a 0.225
+X r e 0.195
+X r h 0.005
+X r i 0.12
+X r o 0.31
+X r u 0.14
+X r y 0.005
+X s a 0.20588235294117646
+X s c 0.03361344537815126
+X s e 0.06302521008403361
+X s h 0.19327731092436976
+X s i 0.11764705882352941
+X s k 0.05042016806722689
+X s l 0.02100840336134454
+X s m 0.008403361344537815
+X s o 0.037815126050420166
+X s p 0.037815126050420166
+X s r 0.004201680672268907
+X s t 0.17647058823529413
+X s u 0.025210084033613446
+X s v 0.004201680672268907
+X s w 0.004201680672268907
+X s y 0.01680672268907563
+X t a 0.17553191489361702
+X t e 0.13297872340425532
+X t h 0.2074468085106383
+X t i 0.07446808510638298
+X t o 0.18617021276595744
+X t r 0.12234042553191489
+X t u 0.047872340425531915
+X t y 0.05319148936170213
+X u d 0.13636363636363635
+X u g 0.045454545454545456
+X u l 0.36363636363636365
+X u m 0.045454545454545456
+X u p 0.045454545454545456
+X u r 0.36363636363636365
+X v a 0.34
+X v e 0.18
+X v i 0.38
+X v l 0.06
+X v o 0.04
+X w a 0.31788079470198677
+X w e 0.16556291390728478
+X w h 0.046357615894039736
+X w i 0.304635761589404
+X w o 0.10596026490066225
+X w r 0.006622516556291391
+X w y 0.052980132450331126
+X x a 0.14285714285714285
+X x e 0.42857142857142855
+X x i 0.2857142857142857
+X x y 0.14285714285714285
+X y a 0.6875
+X y e 0.0625
+X y i 0.0625
+X y u 0.125
+X y v 0.0625
+X z a 0.4838709677419355
+X z e 0.3870967741935484
+X z i 0.03225806451612903
+X z o 0.0967741935483871
+a X X 1.0
+a a X 0.14285714285714285
+a a c 0.14285714285714285
+a a k 0.42857142857142855
+a a m 0.14285714285714285
+a a r 0.14285714285714285
+a b X 0.07317073170731707
+a b a 0.04878048780487805
+a b b 0.21951219512195122
+a b d 0.0975609756097561
+a b e 0.17073170731707318
+a b i 0.07317073170731707
+a b l 0.024390243902439025
+a b n 0.04878048780487805
+a b o 0.04878048780487805
+a b r 0.14634146341463414
+a b y 0.04878048780487805
+a c X 0.043478260869565216
+a c e 0.2608695652173913
+a c h 0.2826086956521739
+a c i 0.08695652173913043
+a c k 0.15217391304347827
+a c l 0.021739130434782608
+a c o 0.08695652173913043
+a c q 0.021739130434782608
+a c y 0.043478260869565216
+a d X 0.19230769230769232
+a d a 0.05128205128205128
+a d c 0.01282051282051282
+a d d 0.1794871794871795
+a d e 0.08974358974358974
+a d f 0.01282051282051282
+a d g 0.01282051282051282
+a d i 0.08974358974358974
+a d l 0.0641025641025641
+a d n 0.01282051282051282
+a d o 0.15384615384615385
+a d r 0.0641025641025641
+a d s 0.01282051282051282
+a d u 0.01282051282051282
+a d w 0.01282051282051282
+a d y 0.02564102564102564
+a e X 0.07692307692307693
+a e h 0.07692307692307693
+a e l 0.6153846153846154
+a e m 0.07692307692307693
+a e s 0.07692307692307693
+a e u 0.07692307692307693
+a f X 0.2222222222222222
+a f a 0.2222222222222222
+a f e 0.1111111111111111
+a f f 0.3333333333333333
+a f o 0.1111111111111111
+a g X 0.125
+a g a 0.1875
+a g e 0.125
+a g h 0.0625
+a g n 0.1875
+a g o 0.0625
+a g u 0.25
+a h X 0.6388888888888888
+a h a 0.1111111111111111
+a h e 0.027777777777777776
+a h i 0.027777777777777776
+a h m 0.1388888888888889
+a h u 0.05555555555555555
+a i X 0.058823529411764705
+a i a 0.014705882352941176
+a i d 0.014705882352941176
+a i g 0.07352941176470588
+a i l 0.17647058823529413
+a i m 0.058823529411764705
+a i n 0.3382352941176471
+a i r 0.16176470588235295
+a i s 0.029411764705882353
+a i t 0.07352941176470588
+a j X 0.2
+a j a 0.4
+a j e 0.2
+a j o 0.2
+a k X 0.26666666666666666
+a k e 0.5333333333333333
+a k i 0.06666666666666667
+a k o 0.13333333333333333
+a l X 0.11827956989247312
+a l a 0.03225806451612903
+a l b 0.03225806451612903
+a l c 0.005376344086021506
+a l d 0.16666666666666666
+a l e 0.1774193548387097
+a l f 0.04838709677419355
+a l g 0.005376344086021506
+a l h 0.005376344086021506
+a l i 0.043010752688172046
+a l k 0.005376344086021506
+a l l 0.16129032258064516
+a l m 0.03225806451612903
+a l o 0.04838709677419355
+a l p 0.016129032258064516
+a l s 0.016129032258064516
+a l t 0.03763440860215054
+a l v 0.03763440860215054
+a l w 0.005376344086021506
+a l y 0.005376344086021506
+a m X 0.3181818181818182
+a m a 0.06818181818181818
+a m b 0.06818181818181818
+a m e 0.11363636363636363
+a m i 0.125
+a m l 0.03409090909090909
+a m m 0.10227272727272728
+a m n 0.011363636363636364
+a m o 0.056818181818181816
+a m p 0.011363636363636364
+a m s 0.045454545454545456
+a m u 0.045454545454545456
+a n - 0.021604938271604937
+a n X 0.31790123456790126
+a n a 0.027777777777777776
+a n c 0.06790123456790123
+a n d 0.18518518518518517
+a n e 0.037037037037037035
+a n f 0.015432098765432098
+a n g 0.027777777777777776
+a n i 0.030864197530864196
+a n k 0.024691358024691357
+a n l 0.009259259259259259
+a n n 0.05864197530864197
+a n o 0.024691358024691357
+a n s 0.040123456790123455
+a n t 0.07407407407407407
+a n u 0.027777777777777776
+a n v 0.0030864197530864196
+a n w 0.0030864197530864196
+a n z 0.0030864197530864196
+a o X 0.3333333333333333
+a o l 0.3333333333333333
+a o u 0.3333333333333333
+a p h 0.25
+a p o 0.75
+a q u 1.0
+a r X 0.06963788300835655
+a r a 0.013927576601671309
+a r b 0.005571030640668524
+a r c 0.06128133704735376
+a r d 0.17827298050139276
+a r e 0.04178272980501393
+a r f 0.008356545961002786
+a r g 0.005571030640668524
+a r i 0.06963788300835655
+a r k 0.03064066852367688
+a r l 0.07799442896935933
+a r m 0.022284122562674095
+a r n 0.052924791086350974
+a r o 0.019498607242339833
+a r p 0.002785515320334262
+a r r 0.08913649025069638
+a r s 0.022284122562674095
+a r t 0.13370473537604458
+a r u 0.002785515320334262
+a r v 0.04735376044568245
+a r w 0.013927576601671309
+a r y 0.027855153203342618
+a r z 0.002785515320334262
+a s X 0.4117647058823529
+a s a 0.011764705882352941
+a s c 0.03529411764705882
+a s d 0.011764705882352941
+a s e 0.047058823529411764
+a s h 0.11764705882352941
+a s i 0.047058823529411764
+a s k 0.023529411764705882
+a s m 0.011764705882352941
+a s o 0.023529411764705882
+a s p 0.07058823529411765
+a s q 0.011764705882352941
+a s s 0.058823529411764705
+a s t 0.10588235294117647
+a s u 0.011764705882352941
+a t X 0.08571428571428572
+a t a 0.02857142857142857
+a t c 0.02857142857142857
+a t e 0.1
+a t h 0.2
+a t i 0.07142857142857142
+a t o 0.12857142857142856
+a t r 0.1
+a t s 0.014285714285714285
+a t t 0.24285714285714285
+a u X 0.034482758620689655
+a u b 0.06896551724137931
+a u d 0.10344827586206896
+a u f 0.017241379310344827
+a u g 0.15517241379310345
+a u l 0.13793103448275862
+a u m 0.017241379310344827
+a u n 0.13793103448275862
+a u r 0.2413793103448276
+a u s 0.06896551724137931
+a u t 0.017241379310344827
+a v X 0.06666666666666667
+a v a 0.022222222222222223
+a v e 0.3333333333333333
+a v i 0.35555555555555557
+a v o 0.06666666666666667
+a v r 0.1111111111111111
+a v u 0.022222222222222223
+a v y 0.022222222222222223
+a w X 0.23076923076923078
+a w e 0.07692307692307693
+a w f 0.07692307692307693
+a w l 0.07692307692307693
+a w n 0.07692307692307693
+a w r 0.07692307692307693
+a w s 0.15384615384615385
+a w t 0.07692307692307693
+a w y 0.15384615384615385
+a x X 0.21428571428571427
+a x e 0.14285714285714285
+a x f 0.07142857142857142
+a x i 0.2857142857142857
+a x o 0.07142857142857142
+a x t 0.14285714285714285
+a x w 0.07142857142857142
+a y X 0.29310344827586204
+a y a 0.017241379310344827
+a y b 0.05172413793103448
+a y d 0.034482758620689655
+a y e 0.06896551724137931
+a y i 0.017241379310344827
+a y l 0.13793103448275862
+a y m 0.05172413793103448
+a y n 0.20689655172413793
+a y o 0.017241379310344827
+a y r 0.034482758620689655
+a y t 0.034482758620689655
+a y w 0.034482758620689655
+a z X 0.08333333333333333
+a z a 0.3333333333333333
+a z e 0.16666666666666666
+a z i 0.3333333333333333
+a z l 0.08333333333333333
+b X X 1.0
+b a X 0.012345679012345678
+b a b 0.012345679012345678
+b a d 0.04938271604938271
+b a i 0.07407407407407407
+b a l 0.07407407407407407
+b a n 0.06172839506172839
+b a r 0.5308641975308642
+b a s 0.08641975308641975
+b a t 0.024691358024691357
+b a u 0.037037037037037035
+b a x 0.012345679012345678
+b a y 0.024691358024691357
+b b X 0.25
+b b a 0.05
+b b e 0.1
+b b i 0.3
+b b o 0.1
+b b y 0.2
+b d e 0.25
+b d u 0.75
+b e X 0.07216494845360824
+b e a 0.07216494845360824
+b e c 0.010309278350515464
+b e d 0.010309278350515464
+b e l 0.030927835051546393
+b e n 0.2268041237113402
+b e o 0.010309278350515464
+b e r 0.5360824742268041
+b e s 0.010309278350515464
+b e y 0.010309278350515464
+b e z 0.010309278350515464
+b h a 0.5
+b h u 0.5
+b i X 0.07142857142857142
+b i a 0.10714285714285714
+b i e 0.32142857142857145
+b i f 0.03571428571428571
+b i l 0.10714285714285714
+b i n 0.25
+b i o 0.03571428571428571
+b i s 0.03571428571428571
+b i t 0.03571428571428571
+b j o 1.0
+b l a 0.7142857142857143
+b l e 0.14285714285714285
+b l o 0.14285714285714285
+b n e 1.0
+b o X 0.07407407407407407
+b o b 0.1111111111111111
+b o d 0.037037037037037035
+b o g 0.07407407407407407
+b o l 0.1111111111111111
+b o n 0.037037037037037035
+b o r 0.2222222222222222
+b o t 0.1111111111111111
+b o u 0.14814814814814814
+b o y 0.07407407407407407
+b r a 0.21818181818181817
+b r e 0.14545454545454545
+b r i 0.16363636363636364
+b r o 0.34545454545454546
+b r u 0.03636363636363636
+b r y 0.09090909090909091
+b s t 1.0
+b u b 0.05
+b u c 0.1
+b u d 0.1
+b u l 0.1
+b u r 0.5
+b u s 0.05
+b u t 0.1
+b y X 0.8571428571428571
+b y l 0.047619047619047616
+b y r 0.09523809523809523
+c X X 1.0
+c a e 0.021739130434782608
+c a h 0.021739130434782608
+c a i 0.06521739130434782
+c a l 0.15217391304347827
+c a m 0.06521739130434782
+c a n 0.021739130434782608
+c a r 0.4782608695652174
+c a s 0.15217391304347827
+c a t 0.021739130434782608
+c c a 0.5
+c c o 0.5
+c e X 0.7246376811594203
+c e c 0.014492753623188406
+c e l 0.08695652173913043
+c e n 0.043478260869565216
+c e r 0.014492753623188406
+c e s 0.028985507246376812
+c e v 0.014492753623188406
+c e y 0.07246376811594203
+c h X 0.17692307692307693
+c h a 0.3230769230769231
+c h e 0.19230769230769232
+c h i 0.06923076923076923
+c h m 0.007692307692307693
+c h o 0.046153846153846156
+c h r 0.13076923076923078
+c h t 0.015384615384615385
+c h u 0.023076923076923078
+c h y 0.015384615384615385
+c i a 0.15
+c i e 0.15
+c i l 0.05
+c i o 0.4
+c i s 0.1
+c i u 0.1
+c i v 0.05
+c k X 0.6
+c k a 0.02857142857142857
+c k e 0.12857142857142856
+c k i 0.1
+c k o 0.014285714285714285
+c k s 0.014285714285714285
+c k w 0.02857142857142857
+c k y 0.08571428571428572
+c l a 0.525
+c l e 0.2
+c l i 0.25
+c l y 0.025
+c o X 0.16923076923076924
+c o b 0.07692307692307693
+c o d 0.015384615384615385
+c o e 0.015384615384615385
+c o i 0.03076923076923077
+c o l 0.15384615384615385
+c o m 0.015384615384615385
+c o n 0.16923076923076924
+c o o 0.015384615384615385
+c o r 0.15384615384615385
+c o s 0.046153846153846156
+c o t 0.09230769230769231
+c o u 0.03076923076923077
+c o v 0.015384615384615385
+c q u 1.0
+c r a 0.42857142857142855
+c r e 0.14285714285714285
+c r i 0.2857142857142857
+c r o 0.14285714285714285
+c t X 0.25
+c t a 0.25
+c t o 0.5
+c u l 0.375
+c u r 0.375
+c u s 0.25
+c y X 0.6153846153846154
+c y r 0.38461538461538464
+d X X 1.0
+d a b 0.013333333333333334
+d a f 0.013333333333333334
+d a h 0.013333333333333334
+d a i 0.02666666666666667
+d a l 0.13333333333333333
+d a m 0.08
+d a n 0.2
+d a r 0.30666666666666664
+d a s 0.02666666666666667
+d a v 0.17333333333333334
+d a w 0.013333333333333334
+d c l 1.0
+d d X 0.175
+d d a 0.05
+d d e 0.1
+d d h 0.025
+d d i 0.325
+d d u 0.025
+d d y 0.3
+d e X 0.10101010101010101
+d e a 0.030303030303030304
+d e c 0.010101010101010102
+d e d 0.010101010101010102
+d e e 0.010101010101010102
+d e k 0.010101010101010102
+d e l 0.12121212121212122
+d e m 0.0707070707070707
+d e n 0.1414141414141414
+d e o 0.020202020202020204
+d e r 0.35353535353535354
+d e s 0.020202020202020204
+d e t 0.010101010101010102
+d e u 0.04040404040404041
+d e v 0.020202020202020204
+d e w 0.020202020202020204
+d e x 0.010101010101010102
+d f o 0.5
+d f r 0.5
+d g a 0.2857142857142857
+d g e 0.7142857142857143
+d h a 1.0
+d i X 0.046875
+d i a 0.078125
+d i c 0.0625
+d i e 0.421875
+d i g 0.015625
+d i k 0.015625
+d i l 0.015625
+d i m 0.09375
+d i n 0.0625
+d i o 0.0625
+d i r 0.015625
+d i s 0.03125
+d i t 0.046875
+d i u 0.03125
+d l a 0.125
+d l e 0.75
+d l y 0.125
+d m a 0.2857142857142857
+d m i 0.14285714285714285
+d m o 0.2857142857142857
+d m u 0.2857142857142857
+d n a 0.16666666666666666
+d n e 0.8333333333333334
+d o X 0.2608695652173913
+d o c 0.021739130434782608
+d o l 0.15217391304347827
+d o m 0.06521739130434782
+d o n 0.1956521739130435
+d o o 0.010869565217391304
+d o r 0.18478260869565216
+d o u 0.07608695652173914
+d o v 0.010869565217391304
+d o w 0.010869565217391304
+d o y 0.010869565217391304
+d r a 0.06976744186046512
+d r e 0.18604651162790697
+d r i 0.4883720930232558
+d r o 0.13953488372093023
+d r s 0.023255813953488372
+d r u 0.046511627906976744
+d r y 0.023255813953488372
+d r z 0.023255813953488372
+d s X 0.2222222222222222
+d s a 0.1111111111111111
+d s e 0.2222222222222222
+d s o 0.3333333333333333
+d s w 0.1111111111111111
+d t X 1.0
+d u a 0.13636363636363635
+d u d 0.045454545454545456
+d u f 0.09090909090909091
+d u g 0.045454545454545456
+d u k 0.09090909090909091
+d u l 0.13636363636363635
+d u n 0.13636363636363635
+d u r 0.18181818181818182
+d u s 0.13636363636363635
+d v i 1.0
+d w a 0.38461538461538464
+d w e 0.07692307692307693
+d w i 0.5384615384615384
+d y X 0.875
+d y a 0.03125
+d y l 0.03125
+d y s 0.0625
+e X X 1.0
+e a X 0.044444444444444446
+e a d 0.06666666666666667
+e a g 0.022222222222222223
+e a l 0.2
+e a m 0.022222222222222223
+e a n 0.26666666666666666
+e a r 0.17777777777777778
+e a s 0.08888888888888889
+e a t 0.044444444444444446
+e a u 0.06666666666666667
+e b X 0.17857142857142858
+e b a 0.2857142857142857
+e b b 0.03571428571428571
+e b e 0.32142857142857145
+e b o 0.07142857142857142
+e b s 0.03571428571428571
+e b u 0.07142857142857142
+e c X 0.09090909090909091
+e c a 0.09090909090909091
+e c e 0.09090909090909091
+e c h 0.36363636363636365
+e c i 0.09090909090909091
+e c k 0.18181818181818182
+e c t 0.09090909090909091
+e d X 0.2916666666666667
+e d d 0.125
+e d e 0.1527777777777778
+e d f 0.013888888888888888
+e d g 0.041666666666666664
+e d i 0.06944444444444445
+e d m 0.06944444444444445
+e d o 0.027777777777777776
+e d r 0.125
+e d s 0.013888888888888888
+e d u 0.027777777777777776
+e d w 0.027777777777777776
+e d y 0.013888888888888888
+e e X 0.36666666666666664
+e e c 0.03333333333333333
+e e d 0.06666666666666667
+e e f 0.03333333333333333
+e e l 0.1
+e e m 0.16666666666666666
+e e n 0.06666666666666667
+e e s 0.06666666666666667
+e e t 0.06666666666666667
+e e v 0.03333333333333333
+e f X 0.09523809523809523
+e f a 0.09523809523809523
+e f e 0.047619047619047616
+e f f 0.5714285714285714
+e f i 0.047619047619047616
+e f r 0.09523809523809523
+e f t 0.047619047619047616
+e g X 0.15789473684210525
+e g a 0.10526315789473684
+e g b 0.05263157894736842
+e g e 0.05263157894736842
+e g f 0.05263157894736842
+e g g 0.2631578947368421
+e g i 0.10526315789473684
+e g o 0.21052631578947367
+e h m 0.25
+e h u 0.75
+e i X 0.0967741935483871
+e i d 0.0967741935483871
+e i e 0.03225806451612903
+e i f 0.03225806451612903
+e i g 0.2903225806451613
+e i l 0.12903225806451613
+e i n 0.22580645161290322
+e i r 0.06451612903225806
+e i t 0.03225806451612903
+e j X 0.6666666666666666
+e j a 0.3333333333333333
+e k X 0.4
+e k e 0.1
+e k i 0.3
+e k s 0.2
+e l X 0.3333333333333333
+e l a 0.02564102564102564
+e l b 0.05128205128205128
+e l c 0.005128205128205128
+e l d 0.05641025641025641
+e l e 0.02564102564102564
+e l i 0.07692307692307693
+e l l 0.24615384615384617
+e l m 0.035897435897435895
+e l n 0.005128205128205128
+e l o 0.015384615384615385
+e l r 0.015384615384615385
+e l s 0.03076923076923077
+e l t 0.020512820512820513
+e l v 0.02564102564102564
+e l w 0.020512820512820513
+e l y 0.010256410256410256
+e m X 0.16923076923076924
+e m a 0.15384615384615385
+e m b 0.015384615384615385
+e m e 0.16923076923076924
+e m i 0.12307692307692308
+e m m 0.16923076923076924
+e m n 0.015384615384615385
+e m o 0.07692307692307693
+e m p 0.046153846153846156
+e m u 0.03076923076923077
+e m y 0.03076923076923077
+e n X 0.35106382978723405
+e n a 0.047872340425531915
+e n c 0.05851063829787234
+e n d 0.07446808510638298
+e n e 0.05851063829787234
+e n g 0.026595744680851064
+e n i 0.026595744680851064
+e n j 0.026595744680851064
+e n k 0.005319148936170213
+e n n 0.10638297872340426
+e n o 0.010638297872340425
+e n r 0.0425531914893617
+e n s 0.031914893617021274
+e n t 0.11702127659574468
+e n y 0.005319148936170213
+e n z 0.010638297872340425
+e o X 0.225
+e o b 0.025
+e o d 0.175
+e o f 0.1
+e o n 0.25
+e o p 0.05
+e o r 0.15
+e o w 0.025
+e p X 0.05263157894736842
+e p a 0.05263157894736842
+e p e 0.05263157894736842
+e p h 0.5789473684210527
+e p i 0.10526315789473684
+e p p 0.15789473684210525
+e r X 0.3116883116883117
+e r a 0.023376623376623377
+e r b 0.012987012987012988
+e r c 0.02077922077922078
+e r d 0.01818181818181818
+e r e 0.04935064935064935
+e r f 0.0025974025974025974
+e r g 0.025974025974025976
+e r h 0.012987012987012988
+e r i 0.06493506493506493
+e r j 0.0025974025974025974
+e r k 0.01818181818181818
+e r l 0.023376623376623377
+e r m 0.03116883116883117
+e r n 0.05714285714285714
+e r o 0.02857142857142857
+e r r 0.08571428571428572
+e r s 0.05194805194805195
+e r t 0.0987012987012987
+e r v 0.015584415584415584
+e r w 0.012987012987012988
+e r x 0.0025974025974025974
+e r y 0.025974025974025976
+e r z 0.0025974025974025974
+e s X 0.38461538461538464
+e s a 0.038461538461538464
+e s c 0.02564102564102564
+e s e 0.038461538461538464
+e s h 0.02564102564102564
+e s l 0.05128205128205128
+e s m 0.038461538461538464
+e s o 0.01282051282051282
+e s s 0.08974358974358974
+e s t 0.28205128205128205
+e s u 0.01282051282051282
+e t X 0.2545454545454545
+e t c 0.05454545454545454
+e t e 0.10909090909090909
+e t f 0.01818181818181818
+e t h 0.14545454545454545
+e t i 0.01818181818181818
+e t o 0.03636363636363636
+e t r 0.12727272727272726
+e t t 0.21818181818181817
+e t u 0.01818181818181818
+e u X 0.05555555555555555
+e u b 0.1111111111111111
+e u c 0.05555555555555555
+e u g 0.1111111111111111
+e u s 0.6111111111111112
+e u v 0.05555555555555555
+e v X 0.16666666666666666
+e v a 0.1388888888888889
+e v e 0.25
+e v i 0.2777777777777778
+e v o 0.08333333333333333
+e v y 0.08333333333333333
+e w X 0.38461538461538464
+e w a 0.15384615384615385
+e w e 0.23076923076923078
+e w i 0.15384615384615385
+e w s 0.038461538461538464
+e w t 0.038461538461538464
+e x X 0.42857142857142855
+e x a 0.14285714285714285
+e x e 0.14285714285714285
+e x i 0.14285714285714285
+e x t 0.14285714285714285
+e y X 0.9052631578947369
+e y e 0.010526315789473684
+e y l 0.010526315789473684
+e y m 0.010526315789473684
+e y n 0.031578947368421054
+e y t 0.021052631578947368
+e y w 0.010526315789473684
+e z X 0.3333333333333333
+e z a 0.1111111111111111
+e z e 0.4444444444444444
+e z r 0.1111111111111111
+f X X 1.0
+f a X 0.06666666666666667
+f a b 0.13333333333333333
+f a c 0.13333333333333333
+f a e 0.06666666666666667
+f a i 0.06666666666666667
+f a l 0.06666666666666667
+f a n 0.13333333333333333
+f a r 0.2
+f a x 0.06666666666666667
+f a z 0.06666666666666667
+f e X 0.20833333333333334
+f e d 0.041666666666666664
+f e l 0.16666666666666666
+f e n 0.041666666666666664
+f e r 0.5416666666666666
+f f X 0.24324324324324326
+f f a 0.05405405405405406
+f f e 0.16216216216216217
+f f i 0.21621621621621623
+f f o 0.08108108108108109
+f f r 0.13513513513513514
+f f y 0.10810810810810811
+f g a 1.0
+f i d 0.038461538461538464
+f i e 0.5
+f i l 0.15384615384615385
+f i n 0.19230769230769232
+f i t 0.11538461538461539
+f l e 0.4166666666666667
+f l i 0.3333333333333333
+f l o 0.16666666666666666
+f l y 0.08333333333333333
+f o X 0.08571428571428572
+f o n 0.2
+f o r 0.6285714285714286
+f o s 0.02857142857142857
+f o w 0.02857142857142857
+f o x 0.02857142857142857
+f r a 0.32075471698113206
+f r e 0.4528301886792453
+f r i 0.1509433962264151
+f r y 0.07547169811320754
+f t X 0.3333333333333333
+f t o 0.3333333333333333
+f t y 0.3333333333333333
+f u l 0.5
+f u s 0.5
+f y X 0.8333333333333334
+f y o 0.16666666666666666
+g X X 1.0
+g a b 0.08771929824561403
+g a i 0.017543859649122806
+g a l 0.07017543859649122
+g a m 0.05263157894736842
+g a n 0.14035087719298245
+g a r 0.47368421052631576
+g a s 0.05263157894736842
+g a v 0.07017543859649122
+g a y 0.03508771929824561
+g b e 1.0
+g d a 1.0
+g e X 0.16176470588235295
+g e a 0.029411764705882353
+g e i 0.014705882352941176
+g e l 0.10294117647058823
+g e m 0.014705882352941176
+g e n 0.11764705882352941
+g e o 0.16176470588235295
+g e r 0.36764705882352944
+g e s 0.029411764705882353
+g f r 1.0
+g g X 0.08333333333333333
+g g i 0.4166666666666667
+g g l 0.08333333333333333
+g g o 0.08333333333333333
+g g s 0.08333333333333333
+g g y 0.25
+g h X 0.47058823529411764
+g h a 0.058823529411764705
+g h e 0.058823529411764705
+g h n 0.11764705882352941
+g h t 0.29411764705882354
+g i X 0.04
+g i a 0.1
+g i b 0.02
+g i d 0.02
+g i e 0.16
+g i f 0.12
+g i l 0.2
+g i n 0.1
+g i o 0.14
+g i r 0.04
+g i s 0.04
+g i u 0.02
+g l a 0.18181818181818182
+g l e 0.45454545454545453
+g l i 0.09090909090909091
+g l y 0.2727272727272727
+g m a 0.6666666666666666
+g m u 0.3333333333333333
+g n a 0.7777777777777778
+g n u 0.2222222222222222
+g o X 0.23333333333333334
+g o d 0.26666666666666666
+g o m 0.06666666666666667
+g o n 0.06666666666666667
+g o o 0.1
+g o r 0.26666666666666666
+g r a 0.4090909090909091
+g r e 0.3181818181818182
+g r i 0.18181818181818182
+g r o 0.09090909090909091
+g s X 0.375
+g s l 0.25
+g s t 0.25
+g s y 0.125
+g t X 0.2
+g t o 0.8
+g u e 0.06896551724137931
+g u i 0.13793103448275862
+g u n 0.10344827586206896
+g u s 0.5517241379310345
+g u t 0.10344827586206896
+g u y 0.034482758620689655
+g y X 1.0
+h X X 1.0
+h a X 0.031746031746031744
+h a b 0.005291005291005291
+h a c 0.005291005291005291
+h a d 0.07407407407407407
+h a e 0.021164021164021163
+h a g 0.010582010582010581
+h a h 0.005291005291005291
+h a i 0.037037037037037035
+h a k 0.010582010582010581
+h a l 0.07407407407407407
+h a m 0.12169312169312169
+h a n 0.19047619047619047
+h a r 0.25925925925925924
+h a s 0.05291005291005291
+h a t 0.010582010582010581
+h a u 0.021164021164021163
+h a v 0.005291005291005291
+h a w 0.010582010582010581
+h a x 0.005291005291005291
+h a y 0.042328042328042326
+h a z 0.005291005291005291
+h b y 1.0
+h c l 1.0
+h e X 0.057971014492753624
+h e a 0.028985507246376812
+h e b 0.014492753623188406
+h e c 0.007246376811594203
+h e d 0.014492753623188406
+h e e 0.021739130434782608
+h e f 0.028985507246376812
+h e i 0.021739130434782608
+h e l 0.15217391304347827
+h e m 0.007246376811594203
+h e n 0.08695652173913043
+h e o 0.043478260869565216
+h e p 0.036231884057971016
+h e r 0.32608695652173914
+h e s 0.028985507246376812
+h e t 0.014492753623188406
+h e u 0.014492753623188406
+h e v 0.021739130434782608
+h e w 0.057971014492753624
+h e y 0.007246376811594203
+h e z 0.007246376811594203
+h i a 0.04081632653061224
+h i b 0.08163265306122448
+h i e 0.12244897959183673
+h i g 0.02040816326530612
+h i l 0.32653061224489793
+h i m 0.08163265306122448
+h i n 0.061224489795918366
+h i p 0.04081632653061224
+h i r 0.08163265306122448
+h i s 0.02040816326530612
+h i t 0.12244897959183673
+h l e 0.5
+h l o 0.5
+h m a 0.25
+h m e 0.375
+h m o 0.25
+h m u 0.125
+h n - 0.18181818181818182
+h n X 0.2727272727272727
+h n a 0.2727272727272727
+h n n 0.18181818181818182
+h n y 0.09090909090909091
+h o X 0.0784313725490196
+h o b 0.0196078431372549
+h o d 0.0196078431372549
+h o g 0.0196078431372549
+h o l 0.23529411764705882
+h o m 0.0784313725490196
+h o n 0.13725490196078433
+h o p 0.0196078431372549
+h o r 0.3137254901960784
+h o u 0.0196078431372549
+h o w 0.0392156862745098
+h o y 0.0196078431372549
+h r a 0.10344827586206896
+h r e 0.10344827586206896
+h r i 0.5862068965517241
+h r o 0.13793103448275862
+h r u 0.034482758620689655
+h r y 0.034482758620689655
+h t X 0.4444444444444444
+h t h 0.1111111111111111
+h t o 0.4444444444444444
+h u X 0.07894736842105263
+h u a 0.05263157894736842
+h u b 0.02631578947368421
+h u c 0.02631578947368421
+h u d 0.07894736842105263
+h u e 0.02631578947368421
+h u g 0.05263157894736842
+h u l 0.02631578947368421
+h u m 0.10526315789473684
+h u n 0.13157894736842105
+h u r 0.21052631578947367
+h u s 0.15789473684210525
+h u y 0.02631578947368421
+h y X 0.6363636363636364
+h y a 0.09090909090909091
+h y l 0.09090909090909091
+h y m 0.18181818181818182
+i X X 1.0
+i a X 0.05357142857142857
+i a c 0.017857142857142856
+i a g 0.017857142857142856
+i a h 0.25
+i a i 0.017857142857142856
+i a l 0.03571428571428571
+i a m 0.03571428571428571
+i a n 0.35714285714285715
+i a r 0.017857142857142856
+i a s 0.16071428571428573
+i a t 0.017857142857142856
+i a v 0.017857142857142856
+i b a 0.4
+i b b 0.1
+i b h 0.1
+i b o 0.2
+i b r 0.1
+i b y 0.1
+i c X 0.15789473684210525
+i c a 0.02631578947368421
+i c c 0.017543859649122806
+i c e 0.08771929824561403
+i c h 0.22807017543859648
+i c i 0.02631578947368421
+i c k 0.3684210526315789
+i c o 0.07017543859649122
+i c t 0.017543859649122806
+i d X 0.4
+i d a 0.12
+i d d 0.08
+i d e 0.16
+i d n 0.08
+i d o 0.12
+i d s 0.04
+i e X 0.7317073170731707
+i e b 0.00975609756097561
+i e c 0.004878048780487805
+i e d 0.024390243902439025
+i e g 0.00975609756097561
+i e l 0.0975609756097561
+i e n 0.03414634146341464
+i e r 0.04878048780487805
+i e t 0.02926829268292683
+i e u 0.004878048780487805
+i e w 0.004878048780487805
+i f X 0.05
+i f a 0.1
+i f f 0.75
+i f i 0.05
+i f t 0.05
+i g X 0.20408163265306123
+i g a 0.02040816326530612
+i g e 0.061224489795918366
+i g f 0.04081632653061224
+i g g 0.12244897959183673
+i g h 0.24489795918367346
+i g i 0.02040816326530612
+i g l 0.02040816326530612
+i g m 0.04081632653061224
+i g n 0.12244897959183673
+i g o 0.08163265306122448
+i g u 0.02040816326530612
+i h u 1.0
+i j a 1.0
+i k X 0.2727272727272727
+i k a 0.09090909090909091
+i k e 0.3181818181818182
+i k h 0.045454545454545456
+i k i 0.09090909090909091
+i k k 0.09090909090909091
+i k o 0.09090909090909091
+i l X 0.17647058823529413
+i l a 0.014705882352941176
+i l b 0.08088235294117647
+i l d 0.014705882352941176
+i l e 0.08088235294117647
+i l f 0.014705882352941176
+i l h 0.014705882352941176
+i l i 0.08088235294117647
+i l l 0.34558823529411764
+i l m 0.022058823529411766
+i l o 0.014705882352941176
+i l s 0.022058823529411766
+i l t 0.04411764705882353
+i l u 0.007352941176470588
+i l v 0.04411764705882353
+i l y 0.022058823529411766
+i m X 0.35555555555555557
+i m b 0.044444444444444446
+i m e 0.1111111111111111
+i m i 0.17777777777777778
+i m m 0.15555555555555556
+i m o 0.13333333333333333
+i m u 0.022222222222222223
+i n X 0.45248868778280543
+i n a 0.027149321266968326
+i n c 0.058823529411764705
+i n d 0.027149321266968326
+i n e 0.07692307692307693
+i n f 0.013574660633484163
+i n g 0.11312217194570136
+i n h 0.00904977375565611
+i n i 0.027149321266968326
+i n k 0.01809954751131222
+i n l 0.00904977375565611
+i n n 0.04072398190045249
+i n o 0.03167420814479638
+i n r 0.004524886877828055
+i n s 0.03167420814479638
+i n t 0.04524886877828054
+i n u 0.004524886877828055
+i n w 0.004524886877828055
+i n z 0.004524886877828055
+i o X 0.5555555555555556
+i o n 0.17777777777777778
+i o r 0.06666666666666667
+i o s 0.022222222222222223
+i o t 0.13333333333333333
+i o v 0.044444444444444446
+i p X 0.42857142857142855
+i p e 0.14285714285714285
+i p l 0.047619047619047616
+i p p 0.3333333333333333
+i p t 0.047619047619047616
+i q u 1.0
+i r X 0.2631578947368421
+i r a 0.13157894736842105
+i r b 0.02631578947368421
+i r c 0.02631578947368421
+i r d 0.05263157894736842
+i r e 0.05263157894736842
+i r f 0.02631578947368421
+i r g 0.10526315789473684
+i r k 0.05263157894736842
+i r l 0.02631578947368421
+i r o 0.07894736842105263
+i r r 0.02631578947368421
+i r s 0.02631578947368421
+i r v 0.07894736842105263
+i r w 0.02631578947368421
+i s X 0.43617021276595747
+i s a 0.06382978723404255
+i s c 0.02127659574468085
+i s e 0.05319148936170213
+i s h 0.0851063829787234
+i s i 0.010638297872340425
+i s l 0.010638297872340425
+i s m 0.010638297872340425
+i s o 0.031914893617021274
+i s r 0.010638297872340425
+i s s 0.02127659574468085
+i s t 0.22340425531914893
+i s w 0.010638297872340425
+i s y 0.010638297872340425
+i t X 0.17543859649122806
+i t a 0.05263157894736842
+i t b 0.017543859649122806
+i t c 0.10526315789473684
+i t e 0.07017543859649122
+i t h 0.08771929824561403
+i t m 0.017543859649122806
+i t n 0.017543859649122806
+i t o 0.10526315789473684
+i t r 0.10526315789473684
+i t s 0.017543859649122806
+i t t 0.12280701754385964
+i t u 0.017543859649122806
+i t y 0.017543859649122806
+i t z 0.07017543859649122
+i u s 1.0
+i v a 0.4
+i v e 0.4
+i v i 0.1
+i v o 0.1
+i w a 1.0
+i x X 1.0
+i z X 0.25
+i z a 0.5
+i z z 0.25
+j X X 1.0
+j a b 0.03225806451612903
+j a c 0.16129032258064516
+j a e 0.03225806451612903
+j a h 0.03225806451612903
+j a i 0.06451612903225806
+j a k 0.06451612903225806
+j a m 0.1935483870967742
+j a n 0.12903225806451613
+j a r 0.0967741935483871
+j a s 0.06451612903225806
+j a v 0.03225806451612903
+j a y 0.0967741935483871
+j c i 1.0
+j e a 0.14814814814814814
+j e b 0.018518518518518517
+j e d 0.037037037037037035
+j e e 0.018518518518518517
+j e f 0.16666666666666666
+j e h 0.018518518518518517
+j e n 0.037037037037037035
+j e p 0.018518518518518517
+j e r 0.3888888888888889
+j e s 0.1111111111111111
+j e t 0.037037037037037035
+j i X 0.14285714285714285
+j i e 0.14285714285714285
+j i m 0.5714285714285714
+j i t 0.14285714285714285
+j o X 0.02127659574468085
+j o a 0.0851063829787234
+j o b 0.02127659574468085
+j o c 0.02127659574468085
+j o d 0.06382978723404255
+j o e 0.06382978723404255
+j o h 0.23404255319148937
+j o n 0.1276595744680851
+j o r 0.1702127659574468
+j o s 0.1702127659574468
+j o t 0.02127659574468085
+j u a 0.10526315789473684
+j u d 0.42105263157894735
+j u e 0.05263157894736842
+j u l 0.3157894736842105
+j u s 0.10526315789473684
+j y X 1.0
+k X X 1.0
+k a X 0.047619047619047616
+k a e 0.047619047619047616
+k a i 0.047619047619047616
+k a l 0.23809523809523808
+k a m 0.047619047619047616
+k a n 0.047619047619047616
+k a r 0.38095238095238093
+k a s 0.09523809523809523
+k a t 0.047619047619047616
+k e X 0.3466666666666667
+k e e 0.06666666666666667
+k e f 0.013333333333333334
+k e i 0.02666666666666667
+k e l 0.17333333333333334
+k e n 0.16
+k e r 0.10666666666666667
+k e v 0.02666666666666667
+k e y 0.08
+k h a 1.0
+k i X 0.10810810810810811
+k i a 0.05405405405405406
+k i e 0.24324324324324326
+k i m 0.10810810810810811
+k i n 0.1891891891891892
+k i p 0.1891891891891892
+k i r 0.05405405405405406
+k i t 0.05405405405405406
+k k i 1.0
+k l a 0.16666666666666666
+k l e 0.5
+k l i 0.16666666666666666
+k l y 0.16666666666666666
+k n o 1.0
+k o X 0.09090909090909091
+k o b 0.09090909090909091
+k o l 0.18181818181818182
+k o n 0.18181818181818182
+k o r 0.09090909090909091
+k o s 0.2727272727272727
+k o v 0.09090909090909091
+k r a 0.16666666666666666
+k r i 0.8333333333333334
+k s X 0.5
+k s a 0.25
+k s o 0.25
+k u r 0.6666666666666666
+k u s 0.3333333333333333
+k w e 0.5
+k w o 0.5
+k y X 0.75
+k y e 0.0625
+k y l 0.1875
+l X X 1.0
+l a X 0.008928571428571428
+l a a 0.008928571428571428
+l a c 0.017857142857142856
+l a d 0.03571428571428571
+l a f 0.008928571428571428
+l a g 0.017857142857142856
+l a h 0.017857142857142856
+l a i 0.08035714285714286
+l a k 0.008928571428571428
+l a l 0.008928571428571428
+l a m 0.03571428571428571
+l a n 0.23214285714285715
+l a r 0.13392857142857142
+l a s 0.08928571428571429
+l a t 0.008928571428571428
+l a u 0.10714285714285714
+l a v 0.008928571428571428
+l a w 0.044642857142857144
+l a y 0.08035714285714286
+l a z 0.044642857142857144
+l b a 0.06896551724137931
+l b e 0.5862068965517241
+l b i 0.034482758620689655
+l b o 0.034482758620689655
+l b r 0.034482758620689655
+l b u 0.13793103448275862
+l b y 0.10344827586206896
+l c h 0.5
+l c o 0.5
+l d X 0.5692307692307692
+l d e 0.1076923076923077
+l d i 0.015384615384615385
+l d o 0.2
+l d r 0.03076923076923077
+l d s 0.015384615384615385
+l d u 0.015384615384615385
+l d w 0.046153846153846156
+l e X 0.2131979695431472
+l e b 0.025380710659898477
+l e c 0.01015228426395939
+l e d 0.005076142131979695
+l e e 0.025380710659898477
+l e f 0.005076142131979695
+l e g 0.005076142131979695
+l e i 0.04568527918781726
+l e j 0.005076142131979695
+l e k 0.015228426395939087
+l e l 0.015228426395939087
+l e m 0.09137055837563451
+l e n 0.07106598984771574
+l e o 0.050761421319796954
+l e r 0.05583756345177665
+l e s 0.07106598984771574
+l e t 0.04060913705583756
+l e v 0.030456852791878174
+l e w 0.015228426395939087
+l e x 0.025380710659898477
+l e y 0.17766497461928935
+l f X 0.32
+l f e 0.04
+l f g 0.04
+l f i 0.08
+l f o 0.28
+l f r 0.2
+l f y 0.04
+l g e 1.0
+l h e 0.6666666666666666
+l h o 0.3333333333333333
+l i X 0.05042016806722689
+l i a 0.05042016806722689
+l i c 0.05042016806722689
+l i d 0.008403361344537815
+l i e 0.16806722689075632
+l i f 0.04201680672268908
+l i g 0.01680672268907563
+l i h 0.008403361344537815
+l i j 0.008403361344537815
+l i l 0.008403361344537815
+l i m 0.01680672268907563
+l i n 0.2689075630252101
+l i o 0.08403361344537816
+l i p 0.06722689075630252
+l i s 0.08403361344537816
+l i u 0.01680672268907563
+l i v 0.03361344537815126
+l i x 0.01680672268907563
+l k a 0.5
+l k e 0.5
+l l X 0.34868421052631576
+l l a 0.09868421052631579
+l l d 0.006578947368421052
+l l e 0.13157894736842105
+l l i 0.19078947368421054
+l l m 0.019736842105263157
+l l o 0.06578947368421052
+l l s 0.013157894736842105
+l l u 0.019736842105263157
+l l w 0.006578947368421052
+l l y 0.09868421052631579
+l m X 0.19047619047619047
+l m a 0.3333333333333333
+l m e 0.23809523809523808
+l m o 0.19047619047619047
+l m u 0.047619047619047616
+l n X 0.5
+l n a 0.5
+l o X 0.2857142857142857
+l o a 0.025974025974025976
+l o c 0.07792207792207792
+l o g 0.012987012987012988
+l o m 0.16883116883116883
+l o n 0.12987012987012986
+l o r 0.09090909090909091
+l o s 0.025974025974025976
+l o t 0.025974025974025976
+l o u 0.05194805194805195
+l o v 0.012987012987012988
+l o w 0.05194805194805195
+l o y 0.03896103896103896
+l p h 1.0
+l r e 0.16666666666666666
+l r i 0.6666666666666666
+l r o 0.16666666666666666
+l s X 0.3333333333333333
+l s e 0.13333333333333333
+l s h 0.13333333333333333
+l s o 0.26666666666666666
+l s t 0.06666666666666667
+l s w 0.06666666666666667
+l t X 0.30434782608695654
+l t a 0.043478260869565216
+l t e 0.043478260869565216
+l t h 0.043478260869565216
+l t o 0.5652173913043478
+l u X 0.05263157894736842
+l u c 0.42105263157894735
+l u d 0.10526315789473684
+l u i 0.10526315789473684
+l u k 0.10526315789473684
+l u s 0.15789473684210525
+l u t 0.05263157894736842
+l v a 0.4
+l v e 0.1
+l v i 0.45
+l v y 0.05
+l w i 0.5
+l w o 0.3333333333333333
+l w y 0.16666666666666666
+l y X 0.675
+l y d 0.025
+l y l 0.05
+l y n 0.225
+l y s 0.025
+m X X 1.0
+m a c 0.026143790849673203
+m a d 0.06535947712418301
+m a e 0.006535947712418301
+m a g 0.013071895424836602
+m a h 0.0196078431372549
+m a i 0.05228758169934641
+m a j 0.006535947712418301
+m a l 0.013071895424836602
+m a n 0.19607843137254902
+m a r 0.33986928104575165
+m a s 0.026143790849673203
+m a t 0.10457516339869281
+m a u 0.0457516339869281
+m a x 0.0457516339869281
+m a y 0.0392156862745098
+m b a 0.09090909090909091
+m b e 0.2727272727272727
+m b o 0.09090909090909091
+m b r 0.5454545454545454
+m e X 0.11764705882352941
+m e a 0.023529411764705882
+m e d 0.03529411764705882
+m e e 0.011764705882352941
+m e i 0.03529411764705882
+m e l 0.047058823529411764
+m e m 0.011764705882352941
+m e n 0.1411764705882353
+m e o 0.047058823529411764
+m e r 0.35294117647058826
+m e s 0.03529411764705882
+m e t 0.08235294117647059
+m e u 0.011764705882352941
+m e w 0.023529411764705882
+m e y 0.023529411764705882
+m i a 0.038461538461538464
+m i c 0.1794871794871795
+m i d 0.01282051282051282
+m i e 0.1794871794871795
+m i g 0.01282051282051282
+m i k 0.07692307692307693
+m i l 0.15384615384615385
+m i n 0.10256410256410256
+m i r 0.038461538461538464
+m i s 0.02564102564102564
+m i t 0.1794871794871795
+m k i 1.0
+m l e 0.5
+m l i 0.5
+m m a 0.1724137931034483
+m m e 0.13793103448275862
+m m i 0.3103448275862069
+m m o 0.10344827586206896
+m m y 0.27586206896551724
+m n e 0.6666666666666666
+m n o 0.3333333333333333
+m o X 0.08974358974358974
+m o e 0.01282051282051282
+m o h 0.0641025641025641
+m o i 0.038461538461538464
+m o n 0.358974358974359
+m o o 0.01282051282051282
+m o r 0.24358974358974358
+m o s 0.07692307692307693
+m o t 0.07692307692307693
+m o u 0.02564102564102564
+m p X 0.2
+m p h 0.2
+m p l 0.4
+m p s 0.2
+m r o 1.0
+m s X 0.2
+m s a 0.2
+m s e 0.2
+m s o 0.2
+m s t 0.2
+m u d 0.037037037037037035
+m u e 0.1111111111111111
+m u f 0.037037037037037035
+m u g 0.037037037037037035
+m u h 0.037037037037037035
+m u n 0.37037037037037035
+m u r 0.14814814814814814
+m u s 0.18518518518518517
+m u t 0.037037037037037035
+m y X 0.75
+m y k 0.0625
+m y l 0.125
+m y r 0.0625
+n - c 0.1111111111111111
+n - d 0.1111111111111111
+n - f 0.1111111111111111
+n - l 0.2222222222222222
+n - m 0.1111111111111111
+n - p 0.3333333333333333
+n X X 1.0
+n a X 0.027777777777777776
+n a b 0.05555555555555555
+n a c 0.041666666666666664
+n a d 0.013888888888888888
+n a e 0.013888888888888888
+n a h 0.027777777777777776
+n a l 0.09722222222222222
+n a m 0.013888888888888888
+n a n 0.1527777777777778
+n a p 0.013888888888888888
+n a r 0.19444444444444445
+n a s 0.013888888888888888
+n a t 0.2638888888888889
+n a u 0.041666666666666664
+n a z 0.027777777777777776
+n c X 0.0196078431372549
+n c a 0.0784313725490196
+n c e 0.5686274509803921
+n c h 0.0784313725490196
+n c i 0.058823529411764705
+n c l 0.0392156862745098
+n c o 0.058823529411764705
+n c r 0.0196078431372549
+n c u 0.0196078431372549
+n c y 0.058823529411764705
+n d X 0.34285714285714286
+n d a 0.05714285714285714
+n d e 0.14285714285714285
+n d f 0.009523809523809525
+n d h 0.01904761904761905
+n d i 0.047619047619047616
+n d l 0.009523809523809525
+n d o 0.11428571428571428
+n d r 0.18095238095238095
+n d s 0.02857142857142857
+n d y 0.047619047619047616
+n e X 0.4140625
+n e a 0.0546875
+n e b 0.0078125
+n e d 0.0390625
+n e e 0.0234375
+n e i 0.0078125
+n e l 0.0703125
+n e n 0.015625
+n e r 0.1171875
+n e s 0.0625
+n e t 0.0390625
+n e v 0.046875
+n e w 0.0078125
+n e y 0.078125
+n e z 0.015625
+n f i 0.25
+n f o 0.5
+n f r 0.25
+n g X 0.325
+n g a 0.025
+n g e 0.2
+n g i 0.025
+n g l 0.075
+n g m 0.025
+n g r 0.025
+n g s 0.15
+n g t 0.125
+n g u 0.025
+n h a 0.75
+n h o 0.25
+n i X 0.0625
+n i a 0.025
+n i b 0.0125
+n i c 0.1875
+n i d 0.025
+n i e 0.3125
+n i f 0.025
+n i g 0.025
+n i k 0.0625
+n i l 0.05
+n i n 0.0375
+n i o 0.0125
+n i q 0.0125
+n i s 0.0875
+n i t 0.025
+n i u 0.0125
+n i v 0.025
+n j a 0.4
+n j i 0.4
+n j y 0.2
+n k X 0.23076923076923078
+n k a 0.07692307692307693
+n k e 0.15384615384615385
+n k i 0.07692307692307693
+n k l 0.23076923076923078
+n k y 0.23076923076923078
+n l a 0.2
+n l e 0.6
+n l y 0.2
+n m r 1.0
+n n X 0.2714285714285714
+n n a 0.014285714285714285
+n n e 0.14285714285714285
+n n i 0.2714285714285714
+n n o 0.04285714285714286
+n n y 0.2571428571428571
+n o X 0.23529411764705882
+n o a 0.058823529411764705
+n o b 0.0196078431372549
+n o c 0.0196078431372549
+n o d 0.0196078431372549
+n o e 0.058823529411764705
+n o l 0.13725490196078433
+n o n 0.0784313725490196
+n o r 0.27450980392156865
+n o s 0.058823529411764705
+n o v 0.0196078431372549
+n o x 0.0196078431372549
+n r a 0.14285714285714285
+n r i 0.5
+n r o 0.2857142857142857
+n r y 0.07142857142857142
+n s - 0.024390243902439025
+n s X 0.24390243902439024
+n s e 0.24390243902439024
+n s i 0.024390243902439025
+n s l 0.024390243902439025
+n s o 0.2682926829268293
+n s t 0.17073170731707318
+n t X 0.323943661971831
+n t a 0.014084507042253521
+n t e 0.09859154929577464
+n t g 0.014084507042253521
+n t h 0.04225352112676056
+n t i 0.16901408450704225
+n t l 0.04225352112676056
+n t o 0.2535211267605634
+n t s 0.014084507042253521
+n t u 0.014084507042253521
+n t y 0.014084507042253521
+n u e 0.3076923076923077
+n u m 0.07692307692307693
+n u n 0.07692307692307693
+n u r 0.07692307692307693
+n u s 0.46153846153846156
+n v i 1.0
+n w a 0.3333333333333333
+n w o 0.3333333333333333
+n w r 0.3333333333333333
+n y X 0.9285714285714286
+n y o 0.03571428571428571
+n y s 0.03571428571428571
+n z X 0.2727272727272727
+n z a 0.18181818181818182
+n z i 0.2727272727272727
+n z o 0.2727272727272727
+o X X 1.0
+o a b 0.1
+o a c 0.2
+o a h 0.1
+o a m 0.1
+o a n 0.2
+o a o 0.1
+o a q 0.1
+o a r 0.1
+o b X 0.18181818181818182
+o b a 0.12121212121212122
+o b b 0.24242424242424243
+o b e 0.15151515151515152
+o b i 0.24242424242424243
+o b l 0.030303030303030304
+o b y 0.030303030303030304
+o c h 0.2222222222222222
+o c k 0.6666666666666666
+o c r 0.05555555555555555
+o c t 0.05555555555555555
+o d X 0.23943661971830985
+o d a 0.028169014084507043
+o d d 0.14084507042253522
+o d e 0.09859154929577464
+o d f 0.04225352112676056
+o d g 0.04225352112676056
+o d i 0.08450704225352113
+o d m 0.014084507042253521
+o d n 0.014084507042253521
+o d o 0.15492957746478872
+o d r 0.056338028169014086
+o d w 0.014084507042253521
+o d y 0.07042253521126761
+o e X 0.5454545454545454
+o e d 0.09090909090909091
+o e l 0.2727272727272727
+o e y 0.09090909090909091
+o f X 0.2857142857142857
+o f e 0.14285714285714285
+o f f 0.42857142857142855
+o f t 0.14285714285714285
+o g X 0.14285714285714285
+o g a 0.42857142857142855
+o g d 0.14285714285714285
+o g e 0.2857142857142857
+o h X 0.058823529411764705
+o h a 0.47058823529411764
+o h n 0.47058823529411764
+o i c 0.14285714285714285
+o i n 0.14285714285714285
+o i s 0.7142857142857143
+o j c 1.0
+o k X 0.3333333333333333
+o k e 0.5
+o k s 0.16666666666666666
+o l X 0.038834951456310676
+o l a 0.0970873786407767
+o l b 0.009708737864077669
+o l d 0.18446601941747573
+o l e 0.08737864077669903
+o l f 0.1262135922330097
+o l i 0.038834951456310676
+o l l 0.17475728155339806
+o l m 0.009708737864077669
+o l n 0.009708737864077669
+o l o 0.10679611650485436
+o l p 0.08737864077669903
+o l s 0.009708737864077669
+o l t 0.009708737864077669
+o l y 0.009708737864077669
+o m X 0.18181818181818182
+o m a 0.11363636363636363
+o m e 0.38636363636363635
+o m i 0.06818181818181818
+o m k 0.022727272727272728
+o m l 0.022727272727272728
+o m m 0.045454545454545456
+o m o 0.13636363636363635
+o m y 0.022727272727272728
+o n X 0.6465863453815262
+o n a 0.040160642570281124
+o n d 0.0321285140562249
+o n e 0.03614457831325301
+o n g 0.004016064257028112
+o n h 0.004016064257028112
+o n i 0.04417670682730924
+o n n 0.05622489959839357
+o n o 0.004016064257028112
+o n r 0.01606425702811245
+o n s 0.04819277108433735
+o n t 0.024096385542168676
+o n w 0.004016064257028112
+o n y 0.01606425702811245
+o n z 0.024096385542168676
+o o b 0.034482758620689655
+o o c 0.034482758620689655
+o o d 0.5517241379310345
+o o h 0.034482758620689655
+o o k 0.1724137931034483
+o o p 0.034482758620689655
+o o r 0.06896551724137931
+o o s 0.06896551724137931
+o p X 0.25
+o p e 0.08333333333333333
+o p h 0.5833333333333334
+o p o 0.08333333333333333
+o r X 0.1452513966480447
+o r a 0.03910614525139665
+o r b 0.027932960893854747
+o r d 0.13966480446927373
+o r e 0.08379888268156424
+o r g 0.055865921787709494
+o r i 0.05027932960893855
+o r k 0.00558659217877095
+o r l 0.0223463687150838
+o r m 0.0223463687150838
+o r n 0.0782122905027933
+o r o 0.00558659217877095
+o r p 0.0111731843575419
+o r r 0.1005586592178771
+o r s 0.0335195530726257
+o r t 0.10614525139664804
+o r v 0.0111731843575419
+o r w 0.0111731843575419
+o r y 0.05027932960893855
+o s X 0.32142857142857145
+o s b 0.08928571428571429
+o s c 0.03571428571428571
+o s e 0.16071428571428573
+o s g 0.017857142857142856
+o s h 0.07142857142857142
+o s i 0.07142857142857142
+o s m 0.05357142857142857
+o s s 0.05357142857142857
+o s t 0.08928571428571429
+o s w 0.03571428571428571
+o t X 0.23529411764705882
+o t e 0.029411764705882353
+o t h 0.2647058823529412
+o t i 0.029411764705882353
+o t l 0.029411764705882353
+o t r 0.058823529411764705
+o t t 0.35294117647058826
+o u X 0.12
+o u a 0.04
+o u d 0.08
+o u g 0.24
+o u i 0.08
+o u l 0.08
+o u n 0.04
+o u r 0.28
+o u t 0.04
+o v X 0.3333333333333333
+o v a 0.3333333333333333
+o v e 0.3333333333333333
+o w X 0.2222222222222222
+o w a 0.05555555555555555
+o w e 0.2222222222222222
+o w i 0.05555555555555555
+o w l 0.1111111111111111
+o w n 0.2777777777777778
+o w u 0.05555555555555555
+o x X 1.0
+o y X 0.35714285714285715
+o y a 0.07142857142857142
+o y c 0.14285714285714285
+o y d 0.21428571428571427
+o y l 0.07142857142857142
+o y s 0.07142857142857142
+o y t 0.07142857142857142
+o z z 1.0
+p X X 1.0
+p a b 0.02127659574468085
+p a c 0.0425531914893617
+p a d 0.06382978723404255
+p a g 0.02127659574468085
+p a i 0.0425531914893617
+p a l 0.02127659574468085
+p a o 0.02127659574468085
+p a r 0.2978723404255319
+p a s 0.06382978723404255
+p a t 0.3191489361702128
+p a u 0.06382978723404255
+p a v 0.02127659574468085
+p e X 0.14285714285714285
+p e a 0.023809523809523808
+p e d 0.023809523809523808
+p e i 0.023809523809523808
+p e m 0.023809523809523808
+p e n 0.21428571428571427
+p e p 0.07142857142857142
+p e r 0.30952380952380953
+p e t 0.11904761904761904
+p e y 0.047619047619047616
+p h X 0.19047619047619047
+p h a 0.07142857142857142
+p h e 0.23809523809523808
+p h i 0.19047619047619047
+p h o 0.07142857142857142
+p h r 0.11904761904761904
+p h t 0.023809523809523808
+p h u 0.047619047619047616
+p h y 0.047619047619047616
+p i e 0.42105263157894735
+p i g 0.05263157894736842
+p i k 0.05263157894736842
+p i l 0.05263157894736842
+p i n 0.15789473684210525
+p i o 0.05263157894736842
+p i p 0.05263157894736842
+p i r 0.10526315789473684
+p i t 0.05263157894736842
+p l a 0.25
+p l e 0.75
+p o l 0.375
+p o o 0.125
+p o r 0.125
+p o s 0.125
+p o u 0.125
+p o w 0.125
+p p X 0.2
+p p a 0.1
+p p e 0.4
+p p i 0.1
+p p y 0.2
+p r a 0.2727272727272727
+p r e 0.45454545454545453
+p r i 0.18181818181818182
+p r y 0.09090909090909091
+p s o 1.0
+p t o 1.0
+p u d 0.25
+p u f 0.25
+p u r 0.25
+p u t 0.25
+p y X 0.6666666666666666
+p y o 0.3333333333333333
+q u a 0.045454545454545456
+q u e 0.3181818181818182
+q u i 0.6363636363636364
+r X X 1.0
+r a X 0.02
+r a b 0.02
+r a c 0.04666666666666667
+r a d 0.07333333333333333
+r a e 0.02
+r a f 0.013333333333333334
+r a g 0.013333333333333334
+r a h 0.03333333333333333
+r a i 0.04666666666666667
+r a j 0.013333333333333334
+r a k 0.006666666666666667
+r a l 0.07333333333333333
+r a m 0.10666666666666667
+r a n 0.2733333333333333
+r a o 0.006666666666666667
+r a p 0.006666666666666667
+r a r 0.02666666666666667
+r a s 0.03333333333333333
+r a t 0.02666666666666667
+r a u 0.013333333333333334
+r a v 0.03333333333333333
+r a w 0.013333333333333334
+r a y 0.06666666666666667
+r a z 0.013333333333333334
+r b X 0.058823529411764705
+r b a 0.35294117647058826
+r b e 0.17647058823529413
+r b i 0.11764705882352941
+r b y 0.29411764705882354
+r c X 0.06060606060606061
+r c e 0.2727272727272727
+r c h 0.24242424242424243
+r c i 0.09090909090909091
+r c l 0.030303030303030304
+r c o 0.12121212121212122
+r c u 0.12121212121212122
+r c y 0.06060606060606061
+r d X 0.71
+r d a 0.03
+r d e 0.06
+r d i 0.04
+r d l 0.01
+r d n 0.01
+r d o 0.11
+r d t 0.01
+r d y 0.02
+r e X 0.1368421052631579
+r e a 0.015789473684210527
+r e c 0.005263157894736842
+r e d 0.12105263157894737
+r e e 0.042105263157894736
+r e g 0.07894736842105263
+r e i 0.02631578947368421
+r e j 0.005263157894736842
+r e k 0.015789473684210527
+r e l 0.05263157894736842
+r e m 0.06842105263157895
+r e n 0.17894736842105263
+r e s 0.042105263157894736
+r e t 0.04736842105263158
+r e u 0.015789473684210527
+r e v 0.021052631578947368
+r e w 0.021052631578947368
+r e x 0.005263157894736842
+r e y 0.09473684210526316
+r e z 0.005263157894736842
+r f a 0.4
+r f i 0.4
+r f o 0.2
+r g X 0.03571428571428571
+r g a 0.03571428571428571
+r g e 0.4642857142857143
+r g i 0.35714285714285715
+r g u 0.07142857142857142
+r g y 0.03571428571428571
+r h a 0.8333333333333334
+r h e 0.16666666666666666
+r i X 0.06278026905829596
+r i a 0.053811659192825115
+r i c 0.3004484304932735
+r i d 0.013452914798206279
+r i e 0.1210762331838565
+r i f 0.013452914798206279
+r i g 0.02242152466367713
+r i k 0.03139013452914798
+r i l 0.053811659192825115
+r i m 0.008968609865470852
+r i n 0.06278026905829596
+r i o 0.03139013452914798
+r i p 0.008968609865470852
+r i q 0.013452914798206279
+r i s 0.15695067264573992
+r i t 0.03139013452914798
+r i u 0.013452914798206279
+r j i 1.0
+r k X 0.34782608695652173
+r k e 0.34782608695652173
+r k i 0.043478260869565216
+r k l 0.043478260869565216
+r k o 0.08695652173913043
+r k u 0.043478260869565216
+r k y 0.08695652173913043
+r l X 0.10869565217391304
+r l a 0.08695652173913043
+r l e 0.2608695652173913
+r l i 0.17391304347826086
+r l o 0.2608695652173913
+r l t 0.043478260869565216
+r l y 0.06521739130434782
+r m X 0.04
+r m a 0.56
+r m i 0.16
+r m o 0.16
+r m s 0.04
+r m y 0.04
+r n X 0.16129032258064516
+r n a 0.16129032258064516
+r n d 0.03225806451612903
+r n e 0.3870967741935484
+r n h 0.016129032258064516
+r n i 0.08064516129032258
+r n o 0.08064516129032258
+r n s 0.016129032258064516
+r n t 0.016129032258064516
+r n y 0.04838709677419355
+r o X 0.09655172413793103
+r o a 0.006896551724137931
+r o b 0.05517241379310345
+r o c 0.034482758620689655
+r o d 0.16551724137931034
+r o e 0.020689655172413793
+r o f 0.006896551724137931
+r o g 0.020689655172413793
+r o i 0.006896551724137931
+r o k 0.006896551724137931
+r o l 0.1310344827586207
+r o m 0.05517241379310345
+r o n 0.14482758620689656
+r o o 0.041379310344827586
+r o p 0.013793103448275862
+r o r 0.006896551724137931
+r o s 0.07586206896551724
+r o t 0.020689655172413793
+r o u 0.013793103448275862
+r o v 0.013793103448275862
+r o w 0.013793103448275862
+r o y 0.04827586206896552
+r p X 0.25
+r p e 0.25
+r p h 0.5
+r r X 0.023529411764705882
+r r a 0.07058823529411765
+r r e 0.27058823529411763
+r r i 0.3058823529411765
+r r m 0.011764705882352941
+r r n 0.011764705882352941
+r r o 0.1411764705882353
+r r y 0.16470588235294117
+r s X 0.23076923076923078
+r s c 0.07692307692307693
+r s e 0.05128205128205128
+r s h 0.1794871794871795
+r s i 0.02564102564102564
+r s o 0.23076923076923078
+r s t 0.20512820512820512
+r t X 0.4396551724137931
+r t a 0.008620689655172414
+r t e 0.05172413793103448
+r t h 0.16379310344827586
+r t i 0.09482758620689655
+r t l 0.02586206896551724
+r t n 0.008620689655172414
+r t o 0.1206896551724138
+r t r 0.017241379310344827
+r t u 0.017241379310344827
+r t w 0.008620689655172414
+r t y 0.04310344827586207
+r u X 0.02702702702702703
+r u b 0.10810810810810811
+r u c 0.02702702702702703
+r u d 0.2702702702702703
+r u f 0.05405405405405406
+r u m 0.02702702702702703
+r u n 0.02702702702702703
+r u p 0.08108108108108109
+r u s 0.2702702702702703
+r u t 0.10810810810810811
+r v X 0.14285714285714285
+r v a 0.07142857142857142
+r v e 0.21428571428571427
+r v i 0.5
+r v y 0.07142857142857142
+r w a 0.06666666666666667
+r w e 0.06666666666666667
+r w i 0.5333333333333333
+r w o 0.26666666666666666
+r w y 0.06666666666666667
+r x e 1.0
+r y X 0.7627118644067796
+r y a 0.05084745762711865
+r y c 0.03389830508474576
+r y k 0.01694915254237288
+r y l 0.1016949152542373
+r y n 0.01694915254237288
+r y o 0.01694915254237288
+r z a 0.3333333333333333
+r z e 0.3333333333333333
+r z y 0.3333333333333333
+s - p 1.0
+s X X 1.0
+s a X 0.015384615384615385
+s a a 0.03076923076923077
+s a d 0.046153846153846156
+s a i 0.03076923076923077
+s a l 0.16923076923076924
+s a m 0.1076923076923077
+s a n 0.2
+s a r 0.06153846153846154
+s a s 0.03076923076923077
+s a u 0.1076923076923077
+s a w 0.046153846153846156
+s a x 0.046153846153846156
+s a y 0.1076923076923077
+s b e 0.2
+s b o 0.8
+s c a 0.2
+s c h 0.35
+s c o 0.45
+s d a 1.0
+s e X 0.23809523809523808
+s e a 0.031746031746031744
+s e b 0.047619047619047616
+s e e 0.031746031746031744
+s e f 0.015873015873015872
+s e i 0.031746031746031744
+s e l 0.15873015873015872
+s e n 0.031746031746031744
+s e p 0.047619047619047616
+s e r 0.14285714285714285
+s e s 0.06349206349206349
+s e t 0.031746031746031744
+s e u 0.015873015873015872
+s e v 0.015873015873015872
+s e y 0.09523809523809523
+s g o 1.0
+s h X 0.1518987341772152
+s h a 0.22784810126582278
+s h b 0.012658227848101266
+s h e 0.35443037974683544
+s h i 0.05063291139240506
+s h l 0.02531645569620253
+s h m 0.012658227848101266
+s h n 0.012658227848101266
+s h o 0.06329113924050633
+s h t 0.012658227848101266
+s h u 0.0759493670886076
+s i X 0.045454545454545456
+s i a 0.022727272727272728
+s i b 0.022727272727272728
+s i d 0.11363636363636363
+s i e 0.09090909090909091
+s i f 0.045454545454545456
+s i g 0.09090909090909091
+s i l 0.29545454545454547
+s i m 0.11363636363636363
+s i n 0.045454545454545456
+s i o 0.022727272727272728
+s i u 0.045454545454545456
+s i v 0.022727272727272728
+s i w 0.022727272727272728
+s k e 0.2857142857142857
+s k i 0.42857142857142855
+s k y 0.2857142857142857
+s l a 0.15384615384615385
+s l e 0.23076923076923078
+s l i 0.23076923076923078
+s l o 0.23076923076923078
+s l y 0.15384615384615385
+s m a 0.1
+s m e 0.1
+s m i 0.2
+s m o 0.3
+s m u 0.3
+s o X 0.06
+s o c 0.02
+s o l 0.08
+s o m 0.04
+s o n 0.8
+s p a 0.26666666666666666
+s p e 0.4666666666666667
+s p i 0.2
+s p u 0.06666666666666667
+s q u 1.0
+s r a 0.5
+s r i 0.5
+s s X 0.34782608695652173
+s s a 0.08695652173913043
+s s e 0.34782608695652173
+s s i 0.17391304347826086
+s s y 0.043478260869565216
+s t X 0.055944055944055944
+s t a 0.22377622377622378
+s t b 0.013986013986013986
+s t e 0.2727272727272727
+s t h 0.006993006993006993
+s t i 0.16083916083916083
+s t l 0.013986013986013986
+s t o 0.18181818181818182
+s t r 0.006993006993006993
+s t u 0.03496503496503497
+s t v 0.006993006993006993
+s t y 0.02097902097902098
+s u l 0.2222222222222222
+s u m 0.1111111111111111
+s u n 0.2222222222222222
+s u s 0.2222222222222222
+s u t 0.2222222222222222
+s v e 1.0
+s w a 0.16666666666666666
+s w e 0.3333333333333333
+s w o 0.5
+s y X 0.5
+s y d 0.25
+s y l 0.25
+t X X 1.0
+t a X 0.05263157894736842
+t a b 0.07894736842105263
+t a c 0.02631578947368421
+t a d 0.06578947368421052
+t a f 0.06578947368421052
+t a g 0.013157894736842105
+t a i 0.07894736842105263
+t a k 0.02631578947368421
+t a l 0.06578947368421052
+t a m 0.05263157894736842
+t a n 0.3157894736842105
+t a r 0.039473684210526314
+t a s 0.013157894736842105
+t a t 0.013157894736842105
+t a v 0.07894736842105263
+t a y 0.013157894736842105
+t b r 0.6666666666666666
+t b y 0.3333333333333333
+t c h 1.0
+t e X 0.11764705882352941
+t e a 0.029411764705882353
+t e b 0.00980392156862745
+t e d 0.0784313725490196
+t e f 0.029411764705882353
+t e i 0.00980392156862745
+t e l 0.0196078431372549
+t e m 0.029411764705882353
+t e n 0.0784313725490196
+t e o 0.058823529411764705
+t e p 0.029411764705882353
+t e r 0.4019607843137255
+t e s 0.029411764705882353
+t e v 0.0392156862745098
+t e w 0.029411764705882353
+t e y 0.00980392156862745
+t f X 1.0
+t g e 0.5
+t g o 0.5
+t h X 0.15789473684210525
+t h a 0.24561403508771928
+t h c 0.008771929824561403
+t h e 0.21929824561403508
+t h i 0.06140350877192982
+t h o 0.18421052631578946
+t h r 0.06140350877192982
+t h u 0.03508771929824561
+t h y 0.02631578947368421
+t i X 0.0136986301369863
+t i a 0.0958904109589041
+t i b 0.0136986301369863
+t i c 0.0273972602739726
+t i e 0.2054794520547945
+t i g 0.0136986301369863
+t i l 0.0410958904109589
+t i m 0.0958904109589041
+t i n 0.3150684931506849
+t i o 0.0136986301369863
+t i r 0.0273972602739726
+t i s 0.0684931506849315
+t i t 0.0410958904109589
+t i u 0.0273972602739726
+t l e 1.0
+t m a 1.0
+t n a 0.3333333333333333
+t n e 0.6666666666666666
+t o X 0.1048951048951049
+t o b 0.04895104895104895
+t o d 0.027972027972027972
+t o f 0.013986013986013986
+t o i 0.006993006993006993
+t o l 0.06993006993006994
+t o m 0.04895104895104895
+t o n 0.46853146853146854
+t o p 0.04195804195804196
+t o r 0.1048951048951049
+t o s 0.02097902097902098
+t o t 0.006993006993006993
+t o w 0.03496503496503497
+t r X 0.0625
+t r a 0.20833333333333334
+t r e 0.25
+t r i 0.3333333333333333
+t r o 0.10416666666666667
+t r u 0.020833333333333332
+t r y 0.020833333333333332
+t s X 0.6666666666666666
+t s y 0.3333333333333333
+t t X 0.52
+t t a 0.04
+t t e 0.04
+t t h 0.14
+t t i 0.12
+t t o 0.04
+t t y 0.1
+t u X 0.05263157894736842
+t u a 0.05263157894736842
+t u c 0.21052631578947367
+t u d 0.05263157894736842
+t u l 0.15789473684210525
+t u r 0.21052631578947367
+t u s 0.2631578947368421
+t v a 1.0
+t w e 1.0
+t y X 0.5769230769230769
+t y a 0.038461538461538464
+t y b 0.038461538461538464
+t y e 0.038461538461538464
+t y l 0.038461538461538464
+t y m 0.07692307692307693
+t y n 0.07692307692307693
+t y r 0.07692307692307693
+t y s 0.038461538461538464
+t z X 0.75
+t z g 0.25
+u X X 1.0
+u a X 0.1
+u a h 0.1
+u a l 0.1
+u a n 0.3
+u a r 0.4
+u b X 0.08333333333333333
+u b b 0.08333333333333333
+u b e 0.5833333333333334
+u b i 0.08333333333333333
+u b r 0.08333333333333333
+u b y 0.08333333333333333
+u c X 0.058823529411764705
+u c a 0.058823529411764705
+u c e 0.11764705882352941
+u c i 0.29411764705882354
+u c k 0.4117647058823529
+u c l 0.058823529411764705
+u d X 0.25
+u d a 0.1
+u d d 0.125
+u d e 0.075
+u d i 0.15
+u d l 0.025
+u d o 0.1
+u d s 0.05
+u d v 0.025
+u d w 0.025
+u d y 0.075
+u e X 0.2777777777777778
+u e l 0.4444444444444444
+u e n 0.1111111111111111
+u e r 0.05555555555555555
+u e s 0.05555555555555555
+u e y 0.05555555555555555
+u f e 0.14285714285714285
+u f f 0.5714285714285714
+u f o 0.14285714285714285
+u f u 0.14285714285714285
+u g X 0.045454545454545456
+u g a 0.045454545454545456
+u g e 0.09090909090909091
+u g g 0.045454545454545456
+u g h 0.18181818181818182
+u g i 0.09090909090909091
+u g l 0.13636363636363635
+u g o 0.09090909090909091
+u g s 0.045454545454545456
+u g u 0.22727272727272727
+u h a 1.0
+u i d 0.045454545454545456
+u i e 0.045454545454545456
+u i g 0.18181818181818182
+u i l 0.18181818181818182
+u i n 0.45454545454545453
+u i s 0.09090909090909091
+u k a 0.25
+u k e 0.75
+u l X 0.1951219512195122
+u l b 0.024390243902439025
+u l d 0.024390243902439025
+u l e 0.14634146341463414
+u l f 0.024390243902439025
+u l i 0.1951219512195122
+u l k 0.024390243902439025
+u l l 0.14634146341463414
+u l o 0.04878048780487805
+u l r 0.07317073170731707
+u l t 0.07317073170731707
+u l y 0.024390243902439025
+u m X 0.2222222222222222
+u m a 0.1111111111111111
+u m b 0.2222222222222222
+u m e 0.2222222222222222
+u m n 0.1111111111111111
+u m p 0.1111111111111111
+u n X 0.08823529411764706
+u n c 0.14705882352941177
+u n d 0.35294117647058826
+u n m 0.029411764705882353
+u n n 0.058823529411764705
+u n o 0.029411764705882353
+u n r 0.029411764705882353
+u n s 0.029411764705882353
+u n t 0.20588235294117646
+u n z 0.029411764705882353
+u p X 0.25
+u p e 0.5
+u p t 0.25
+u r X 0.05970149253731343
+u r a 0.07462686567164178
+u r b 0.05970149253731343
+u r c 0.029850746268656716
+u r d 0.029850746268656716
+u r e 0.07462686567164178
+u r g 0.029850746268656716
+u r i 0.16417910447761194
+u r k 0.029850746268656716
+u r l 0.05970149253731343
+u r n 0.08955223880597014
+u r o 0.014925373134328358
+u r p 0.014925373134328358
+u r r 0.014925373134328358
+u r s 0.04477611940298507
+u r t 0.16417910447761194
+u r w 0.029850746268656716
+u r y 0.014925373134328358
+u s X 0.6736842105263158
+u s a 0.010526315789473684
+u s e 0.021052631578947368
+u s o 0.010526315789473684
+u s s 0.042105263157894736
+u s t 0.24210526315789474
+u t X 0.125
+u t c 0.0625
+u t g 0.0625
+u t h 0.4375
+u t l 0.125
+u t n 0.0625
+u t t 0.125
+u v e 1.0
+u y X 0.5
+u y l 0.5
+v X X 1.0
+v a c 0.04878048780487805
+v a d 0.024390243902439025
+v a i 0.04878048780487805
+v a l 0.21951219512195122
+v a n 0.36585365853658536
+v a r 0.07317073170731707
+v a s 0.14634146341463414
+v a t 0.024390243902439025
+v a u 0.04878048780487805
+v e X 0.1568627450980392
+v e l 0.09803921568627451
+v e n 0.1568627450980392
+v e r 0.45098039215686275
+v e s 0.058823529411764705
+v e y 0.0784313725490196
+v i X 0.04225352112676056
+v i b 0.014084507042253521
+v i c 0.04225352112676056
+v i d 0.08450704225352113
+v i e 0.09859154929577464
+v i g 0.014084507042253521
+v i j 0.014084507042253521
+v i l 0.09859154929577464
+v i n 0.4084507042253521
+v i o 0.014084507042253521
+v i r 0.056338028169014086
+v i s 0.07042253521126761
+v i t 0.028169014084507043
+v i u 0.014084507042253521
+v l a 1.0
+v o X 0.1111111111111111
+v o l 0.1111111111111111
+v o n 0.4444444444444444
+v o r 0.2222222222222222
+v o u 0.1111111111111111
+v r a 0.4
+v r i 0.2
+v r o 0.4
+v u s 1.0
+v y X 0.8571428571428571
+v y n 0.14285714285714285
+w X X 1.0
+w a d 0.031746031746031744
+w a i 0.12698412698412698
+w a k 0.031746031746031744
+w a l 0.30158730158730157
+w a n 0.047619047619047616
+w a r 0.23809523809523808
+w a s 0.031746031746031744
+w a t 0.015873015873015872
+w a v 0.031746031746031744
+w a y 0.14285714285714285
+w e X 0.046511627906976744
+w e b 0.09302325581395349
+w e i 0.046511627906976744
+w e l 0.32558139534883723
+w e n 0.11627906976744186
+w e r 0.06976744186046512
+w e s 0.20930232558139536
+w e t 0.046511627906976744
+w e y 0.046511627906976744
+w f o 1.0
+w h e 0.14285714285714285
+w h i 0.8571428571428571
+w i a 0.014492753623188406
+w i c 0.014492753623188406
+w i e 0.028985507246376812
+w i g 0.028985507246376812
+w i l 0.4057971014492754
+w i n 0.4057971014492754
+w i s 0.014492753623188406
+w i t 0.08695652173913043
+w l a 0.3333333333333333
+w l e 0.6666666666666666
+w n X 0.3333333333333333
+w n e 0.16666666666666666
+w n i 0.16666666666666666
+w n s 0.16666666666666666
+w n y 0.16666666666666666
+w o j 0.034482758620689655
+w o l 0.20689655172413793
+w o o 0.5517241379310345
+w o r 0.20689655172413793
+w r e 0.3333333333333333
+w r i 0.6666666666666666
+w s o 0.6666666666666666
+w s t 0.3333333333333333
+w t o 1.0
+w u l 1.0
+w y a 0.16666666666666666
+w y e 0.25
+w y l 0.08333333333333333
+w y n 0.5
+x X X 1.0
+x a n 0.5
+x a v 0.5
+x e X 0.14285714285714285
+x e i 0.14285714285714285
+x e l 0.14285714285714285
+x e n 0.14285714285714285
+x e r 0.14285714285714285
+x e s 0.14285714285714285
+x e v 0.14285714285714285
+x f i 1.0
+x i e 0.14285714285714285
+x i m 0.7142857142857143
+x i s 0.14285714285714285
+x o n 1.0
+x t e 1.0
+x w e 1.0
+x y m 1.0
+y X X 1.0
+y a X 0.047619047619047616
+y a a 0.047619047619047616
+y a c 0.047619047619047616
+y a l 0.09523809523809523
+y a n 0.42857142857142855
+y a r 0.19047619047619047
+y a t 0.14285714285714285
+y b a 0.25
+y b o 0.75
+y c e 1.0
+y d X 0.5
+y d e 0.25
+y d n 0.125
+y d o 0.125
+y e X 0.2727272727272727
+y e h 0.09090909090909091
+y e r 0.5454545454545454
+y e s 0.09090909090909091
+y i g 0.5
+y i m 0.5
+y k e 1.0
+y l X 0.1935483870967742
+y l a 0.12903225806451613
+y l e 0.3548387096774194
+y l i 0.0967741935483871
+y l l 0.03225806451612903
+y l m 0.03225806451612903
+y l o 0.0967741935483871
+y l v 0.06451612903225806
+y m a 0.1111111111111111
+y m e 0.1111111111111111
+y m i 0.1111111111111111
+y m o 0.4444444444444444
+y m u 0.2222222222222222
+y n X 0.29411764705882354
+y n a 0.11764705882352941
+y n d 0.08823529411764706
+y n e 0.23529411764705882
+y n n 0.11764705882352941
+y n o 0.11764705882352941
+y n t 0.029411764705882353
+y o d 0.2
+y o n 0.4
+y o r 0.2
+y o t 0.2
+y r a 0.08333333333333333
+y r e 0.16666666666666666
+y r i 0.3333333333333333
+y r o 0.25
+y r u 0.16666666666666666
+y s i 0.16666666666666666
+y s o 0.3333333333333333
+y s s 0.3333333333333333
+y s u 0.16666666666666666
+y t X 0.2
+y t e 0.2
+y t o 0.6
+y u l 0.5
+y u r 0.5
+y v e 1.0
+y w a 0.3333333333333333
+y w o 0.6666666666666666
+z X X 1.0
+z a X 0.04
+z a a 0.04
+z a c 0.4
+z a k 0.08
+z a l 0.12
+z a n 0.08
+z a r 0.24
+z e b 0.2631578947368421
+z e c 0.10526315789473684
+z e d 0.10526315789473684
+z e e 0.05263157894736842
+z e j 0.05263157894736842
+z e k 0.15789473684210525
+z e l 0.10526315789473684
+z e r 0.10526315789473684
+z e u 0.05263157894736842
+z g e 1.0
+z i e 0.4444444444444444
+z i o 0.3333333333333333
+z i p 0.1111111111111111
+z i z 0.1111111111111111
+z l o 1.0
+z o X 0.5
+z o l 0.3333333333333333
+z o r 0.16666666666666666
+z r a 1.0
+z y X 1.0
+z z i 0.3333333333333333
+z z y 0.6666666666666666
index 7cc8a3d..25a00bf 100644 (file)
@@ -1 +1,5 @@
+add_subdirectory(glm)
 add_subdirectory(pugixml)
+
+set(libsInclude ${glmInclude} ${pugixmlInclude}
+    CACHE INTERNAL "libs include directories")
diff --git a/libs/glm/CMakeLists.txt b/libs/glm/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8221bd8
--- /dev/null
@@ -0,0 +1,2 @@
+set(glmInclude ${CMAKE_CURRENT_LIST_DIR}/..
+    CACHE INTERNAL "glm include directory")
diff --git a/libs/glm/common.hpp b/libs/glm/common.hpp
new file mode 100644 (file)
index 0000000..b8bb14e
--- /dev/null
@@ -0,0 +1,34 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/common.hpp\r
+/// @date 2013-12-24 / 2013-12-24\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifndef GLM_COMMON_INCLUDED\r
+#define GLM_COMMON_INCLUDED\r
+\r
+#include "detail/func_common.hpp"\r
+\r
+#endif//GLM_COMMON_INCLUDED\r
diff --git a/libs/glm/detail/_features.hpp b/libs/glm/detail/_features.hpp
new file mode 100644 (file)
index 0000000..f11876a
--- /dev/null
@@ -0,0 +1,427 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/core/_features.hpp\r
+/// @date 2013-02-20 / 2013-02-20\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifndef glm_core_features\r
+#define glm_core_features\r
+\r
+// #define GLM_CXX98_EXCEPTIONS\r
+// #define GLM_CXX98_RTTI\r
+\r
+// #define GLM_CXX11_RVALUE_REFERENCES\r
+// Rvalue references - GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html\r
+\r
+// GLM_CXX11_TRAILING_RETURN\r
+// Rvalue references for *this - GCC not supported\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm\r
+\r
+// GLM_CXX11_NONSTATIC_MEMBER_INIT\r
+// Initialization of class objects by rvalues - GCC any\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html\r
+\r
+// GLM_CXX11_NONSTATIC_MEMBER_INIT\r
+// Non-static data member initializers - GCC 4.7\r
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm\r
+\r
+// #define GLM_CXX11_VARIADIC_TEMPLATE\r
+// Variadic templates - GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf\r
+\r
+// \r
+// Extending variadic template template parameters - GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf\r
+\r
+// #define GLM_CXX11_GENERALIZED_INITIALIZERS\r
+// Initializer lists - GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm\r
+\r
+// #define GLM_CXX11_STATIC_ASSERT \r
+// Static assertions - GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html\r
+\r
+// #define GLM_CXX11_AUTO_TYPE\r
+// auto-typed variables - GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf\r
+\r
+// #define GLM_CXX11_AUTO_TYPE\r
+// Multi-declarator auto - GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf\r
+\r
+// #define GLM_CXX11_AUTO_TYPE\r
+// Removal of auto as a storage-class specifier - GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm\r
+\r
+// #define GLM_CXX11_AUTO_TYPE\r
+// New function declarator syntax - GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm\r
+\r
+// #define GLM_CXX11_LAMBDAS\r
+// New wording for C++0x lambdas - GCC 4.5\r
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf\r
+\r
+// #define GLM_CXX11_DECLTYPE\r
+// Declared type of an expression - GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf\r
+\r
+// \r
+// Right angle brackets - GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html\r
+\r
+// \r
+// Default template arguments for function templates   DR226   GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226\r
+\r
+// \r
+// Solving the SFINAE problem for expressions  DR339   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html\r
+\r
+// #define GLM_CXX11_ALIAS_TEMPLATE\r
+// Template aliases    N2258   GCC 4.7\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf\r
+\r
+// \r
+// Extern templates    N1987   Yes\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm\r
+\r
+// #define GLM_CXX11_NULLPTR\r
+// Null pointer constant       N2431   GCC 4.6\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf\r
+\r
+// #define GLM_CXX11_STRONG_ENUMS\r
+// Strongly-typed enums        N2347   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf\r
+\r
+// \r
+// Forward declarations for enums      N2764   GCC 4.6\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf\r
+\r
+// \r
+// Generalized attributes      N2761   GCC 4.8\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf\r
+\r
+// \r
+// Generalized constant expressions    N2235   GCC 4.6\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf\r
+\r
+// \r
+// Alignment support   N2341   GCC 4.8\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf\r
+\r
+// #define GLM_CXX11_DELEGATING_CONSTRUCTORS\r
+// Delegating constructors     N1986   GCC 4.7\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf\r
+\r
+// \r
+// Inheriting constructors     N2540   GCC 4.8\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm\r
+\r
+// #define GLM_CXX11_EXPLICIT_CONVERSIONS\r
+// Explicit conversion operators       N2437   GCC 4.5\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf\r
+\r
+// \r
+// New character types N2249   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html\r
+\r
+// \r
+// Unicode string literals     N2442   GCC 4.5\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm\r
+\r
+// \r
+// Raw string literals N2442   GCC 4.5\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm\r
+\r
+// \r
+// Universal character name literals   N2170   GCC 4.5\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html\r
+\r
+// #define GLM_CXX11_USER_LITERALS\r
+// User-defined literals               N2765   GCC 4.7\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf\r
+\r
+// \r
+// Standard Layout Types       N2342   GCC 4.5\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm\r
+\r
+// #define GLM_CXX11_DEFAULTED_FUNCTIONS\r
+// #define GLM_CXX11_DELETED_FUNCTIONS\r
+// Defaulted and deleted functions     N2346   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm\r
+\r
+// \r
+// Extended friend declarations        N1791   GCC 4.7\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf\r
+\r
+// \r
+// Extending sizeof    N2253   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html\r
+\r
+// #define GLM_CXX11_INLINE_NAMESPACES\r
+// Inline namespaces   N2535   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm\r
+\r
+// #define GLM_CXX11_UNRESTRICTED_UNIONS\r
+// Unrestricted unions N2544   GCC 4.6\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf\r
+\r
+// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS\r
+// Local and unnamed types as template arguments       N2657   GCC 4.5\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm\r
+\r
+// #define GLM_CXX11_RANGE_FOR\r
+// Range-based for     N2930   GCC 4.6\r
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html\r
+\r
+// #define GLM_CXX11_OVERRIDE_CONTROL\r
+// Explicit virtual overrides  N2928 N3206 N3272       GCC 4.7\r
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm\r
+\r
+// \r
+// Minimal support for garbage collection and reachability-based leak detection        N2670   No\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm\r
+\r
+// #define GLM_CXX11_NOEXCEPT\r
+// Allowing move constructors to throw [noexcept]      N3050   GCC 4.6 (core language only)\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html\r
+\r
+// \r
+// Defining move special member functions      N3053   GCC 4.6\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html\r
+\r
+// \r
+// Sequence points     N2239   Yes\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html\r
+\r
+// \r
+// Atomic operations   N2427   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html\r
+\r
+// \r
+// Strong Compare and Exchange N2748   GCC 4.5\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html\r
+\r
+// \r
+// Bidirectional Fences        N2752   GCC 4.8\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm\r
+\r
+// \r
+// Memory model        N2429   GCC 4.8\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm\r
+\r
+// \r
+// Data-dependency ordering: atomics and memory model  N2664   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm\r
+\r
+// \r
+// Propagating exceptions      N2179   GCC 4.4\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html\r
+\r
+// \r
+// Abandoning a process and at_quick_exit      N2440   GCC 4.8\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm\r
+\r
+// \r
+// Allow atomics use in signal handlers        N2547   Yes\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm\r
+\r
+// \r
+// Thread-local storage        N2659   GCC 4.8\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm\r
+\r
+// \r
+// Dynamic initialization and destruction with concurrency     N2660   GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm\r
+\r
+// \r
+// __func__ predefined identifier      N2340   GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm\r
+\r
+// \r
+// C99 preprocessor    N1653   GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm\r
+\r
+// \r
+// long long   N1811   GCC 4.3\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf\r
+\r
+// \r
+// Extended integral types     N1988   Yes\r
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf\r
+\r
+#if(GLM_COMPILER & GLM_COMPILER_GCC)\r
+\r
+#      if(GLM_COMPILER >= GLM_COMPILER_GCC43)\r
+#              define GLM_CXX11_STATIC_ASSERT\r
+#      endif\r
+\r
+#elif(GLM_COMPILER & GLM_COMPILER_CLANG)\r
+#      if(__has_feature(cxx_exceptions))\r
+#              define GLM_CXX98_EXCEPTIONS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_rtti))\r
+#              define GLM_CXX98_RTTI\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_access_control_sfinae))\r
+#              define GLM_CXX11_ACCESS_CONTROL_SFINAE\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_alias_templates))\r
+#              define GLM_CXX11_ALIAS_TEMPLATE\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_alignas))\r
+#              define GLM_CXX11_ALIGNAS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_attributes))\r
+#              define GLM_CXX11_ATTRIBUTES\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_constexpr))\r
+#              define GLM_CXX11_CONSTEXPR\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_decltype))\r
+#              define GLM_CXX11_DECLTYPE\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_default_function_template_args))\r
+#              define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_defaulted_functions))\r
+#              define GLM_CXX11_DEFAULTED_FUNCTIONS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_delegating_constructors))\r
+#              define GLM_CXX11_DELEGATING_CONSTRUCTORS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_deleted_functions))\r
+#              define GLM_CXX11_DELETED_FUNCTIONS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_explicit_conversions))\r
+#              define GLM_CXX11_EXPLICIT_CONVERSIONS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_generalized_initializers))\r
+#              define GLM_CXX11_GENERALIZED_INITIALIZERS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_implicit_moves))\r
+#              define GLM_CXX11_IMPLICIT_MOVES\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_inheriting_constructors))\r
+#              define GLM_CXX11_INHERITING_CONSTRUCTORS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_inline_namespaces))\r
+#              define GLM_CXX11_INLINE_NAMESPACES\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_lambdas))\r
+#              define GLM_CXX11_LAMBDAS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_local_type_template_args))\r
+#              define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_noexcept))\r
+#              define GLM_CXX11_NOEXCEPT\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_nonstatic_member_init))\r
+#              define GLM_CXX11_NONSTATIC_MEMBER_INIT\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_nullptr))\r
+#              define GLM_CXX11_NULLPTR\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_override_control))\r
+#              define GLM_CXX11_OVERRIDE_CONTROL\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_reference_qualified_functions))\r
+#              define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_range_for))\r
+#              define GLM_CXX11_RANGE_FOR\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_raw_string_literals))\r
+#              define GLM_CXX11_RAW_STRING_LITERALS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_rvalue_references))\r
+#              define GLM_CXX11_RVALUE_REFERENCES\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_static_assert))\r
+#              define GLM_CXX11_STATIC_ASSERT\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_auto_type))\r
+#              define GLM_CXX11_AUTO_TYPE\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_strong_enums))\r
+#              define GLM_CXX11_STRONG_ENUMS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_trailing_return))\r
+#              define GLM_CXX11_TRAILING_RETURN\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_unicode_literals))\r
+#              define GLM_CXX11_UNICODE_LITERALS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_unrestricted_unions))\r
+#              define GLM_CXX11_UNRESTRICTED_UNIONS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_user_literals))\r
+#              define GLM_CXX11_USER_LITERALS\r
+#      endif\r
+\r
+#      if(__has_feature(cxx_variadic_templates))\r
+#              define GLM_CXX11_VARIADIC_TEMPLATES\r
+#      endif\r
+\r
+#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)\r
+\r
+#endif//glm_core_features\r
diff --git a/libs/glm/detail/_fixes.hpp b/libs/glm/detail/_fixes.hpp
new file mode 100644 (file)
index 0000000..95be0e7
--- /dev/null
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/core/_fixes.hpp\r
+/// @date 2011-02-21 / 2011-11-22\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#include <cmath>\r
+\r
+//! Workaround for compatibility with other libraries\r
+#ifdef max\r
+#undef max\r
+#endif\r
+\r
+//! Workaround for compatibility with other libraries\r
+#ifdef min\r
+#undef min\r
+#endif\r
+\r
+//! Workaround for Android\r
+#ifdef isnan\r
+#undef isnan\r
+#endif\r
+\r
+//! Workaround for Android\r
+#ifdef isinf\r
+#undef isinf\r
+#endif\r
+\r
+//! Workaround for Chrone Native Client\r
+#ifdef log2\r
+#undef log2\r
+#endif\r
+\r
diff --git a/libs/glm/detail/_literals.hpp b/libs/glm/detail/_literals.hpp
new file mode 100644 (file)
index 0000000..f460981
--- /dev/null
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/core/_literals.hpp\r
+/// @date 2013-05-06 / 2013-05-06\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifndef glm_core_literals\r
+#define glm_core_literals\r
+\r
+namespace glm\r
+{\r
+#define GLM_CXX11_USER_LITERALS\r
+#ifdef GLM_CXX11_USER_LITERALS\r
+/*\r
+       GLM_FUNC_QUALIFIER detail::half operator "" _h(long double const s)\r
+       {\r
+               return detail::half(s);\r
+       }\r
+\r
+       GLM_FUNC_QUALIFIER float operator "" _f(long double const s)\r
+       {\r
+               return static_cast<float>(s);\r
+       }\r
+*/\r
+#endif//GLM_CXX11_USER_LITERALS\r
+\r
+}//namespace glm\r
+\r
+#endif//glm_core_literals\r
diff --git a/libs/glm/detail/_noise.hpp b/libs/glm/detail/_noise.hpp
new file mode 100644 (file)
index 0000000..bf779bf
--- /dev/null
@@ -0,0 +1,130 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/detail/_noise.hpp\r
+/// @date 2013-12-24 / 2013-12-24\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifndef GLM_DETAIL_NOISE_INCLUDED\r
+#define GLM_DETAIL_NOISE_INCLUDED\r
+\r
+namespace glm{\r
+namespace detail\r
+{\r
+       template <typename T>\r
+       GLM_FUNC_QUALIFIER T mod289(T const & x)\r
+       {\r
+               return x - floor(x * static_cast<T>(1.0) / static_cast<T>(289.0)) * static_cast<T>(289.0);\r
+       }\r
+\r
+       template <typename T>\r
+       GLM_FUNC_QUALIFIER T permute(T const & x)\r
+       {\r
+               return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\r
+       }\r
+\r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER tvec2<T, P> permute(tvec2<T, P> const & x)\r
+       {\r
+               return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\r
+       }\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER tvec3<T, P> permute(tvec3<T, P> const & x)\r
+       {\r
+               return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\r
+       }\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER tvec4<T, P> permute(tvec4<T, P> const & x)\r
+       {\r
+               return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\r
+       }\r
+/*\r
+       template <typename T, precision P, template<typename> class vecType>\r
+       GLM_FUNC_QUALIFIER vecType<T, P> permute(vecType<T, P> const & x)\r
+       {\r
+               return mod289(((x * T(34)) + T(1)) * x);\r
+       }\r
+*/\r
+       template <typename T>\r
+       GLM_FUNC_QUALIFIER T taylorInvSqrt(T const & r)\r
+       {\r
+               return T(1.79284291400159) - T(0.85373472095314) * r;\r
+       }\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER detail::tvec2<T, P> taylorInvSqrt(detail::tvec2<T, P> const & r)\r
+       {\r
+               return T(1.79284291400159) - T(0.85373472095314) * r;\r
+       }\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER detail::tvec3<T, P> taylorInvSqrt(detail::tvec3<T, P> const & r)\r
+       {\r
+               return T(1.79284291400159) - T(0.85373472095314) * r;\r
+       }\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER detail::tvec4<T, P> taylorInvSqrt(detail::tvec4<T, P> const & r)\r
+       {\r
+               return T(1.79284291400159) - T(0.85373472095314) * r;\r
+       }\r
+/*\r
+       template <typename T, precision P, template<typename> class vecType>\r
+       GLM_FUNC_QUALIFIER vecType<T, P> taylorInvSqrt(vecType<T, P> const & r)\r
+       {\r
+               return T(1.79284291400159) - T(0.85373472095314) * r;\r
+       }\r
+*/\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER detail::tvec2<T, P> fade(detail::tvec2<T, P> const & t)\r
+       {\r
+               return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));\r
+       }\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER detail::tvec3<T, P> fade(detail::tvec3<T, P> const & t)\r
+       {\r
+               return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));\r
+       }\r
+       \r
+       template <typename T, precision P>\r
+       GLM_FUNC_QUALIFIER detail::tvec4<T, P> fade(detail::tvec4<T, P> const & t)\r
+       {\r
+               return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));\r
+       }\r
+/*\r
+       template <typename T, precision P, template <typename> class vecType>\r
+       GLM_FUNC_QUALIFIER vecType<T, P> fade(vecType<T, P> const & t)\r
+       {\r
+               return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));\r
+       }\r
+*/\r
+}//namespace detail\r
+}//namespace glm\r
+\r
+#endif//GLM_DETAIL_NOISE_INCLUDED\r
+\r
diff --git a/libs/glm/detail/_swizzle.hpp b/libs/glm/detail/_swizzle.hpp
new file mode 100644 (file)
index 0000000..1be3786
--- /dev/null
@@ -0,0 +1,840 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/core/_swizzle.hpp\r
+/// @date 2006-04-20 / 2011-02-16\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifndef glm_core_swizzle\r
+#define glm_core_swizzle\r
+\r
+namespace glm{\r
+namespace detail\r
+{\r
+       // Internal class for implementing swizzle operators\r
+       template <typename T, int N>\r
+       struct _swizzle_base0\r
+       {\r
+               typedef T       value_type;\r
+\r
+       protected:\r
+               GLM_FUNC_QUALIFIER value_type&         elem   (size_t i)       { return (reinterpret_cast<value_type*>(_buffer))[i]; }\r
+               GLM_FUNC_QUALIFIER const value_type&   elem   (size_t i) const { return (reinterpret_cast<const value_type*>(_buffer))[i]; }\r
+\r
+               // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.\r
+               // The size 1 buffer is assumed to aligned to the actual members so that the\r
+               // elem() \r
+               char    _buffer[1];\r
+       };\r
+\r
+       template <typename T, precision P, typename V, int E0, int E1, int E2, int E3, int N>\r
+       struct _swizzle_base1 : public _swizzle_base0<T, N>\r
+       {\r
+       };\r
+\r
+       template <typename T, precision P, typename V, int E0, int E1>\r
+       struct _swizzle_base1<T, P, V,E0,E1,-1,-2,2> : public _swizzle_base0<T, 2>\r
+       {\r
+               GLM_FUNC_QUALIFIER V operator ()()  const { return V(this->elem(E0), this->elem(E1)); }\r
+       };\r
+\r
+       template <typename T, precision P, typename V, int E0, int E1, int E2>\r
+       struct _swizzle_base1<T, P, V,E0,E1,E2,-1,3> : public _swizzle_base0<T, 3>\r
+       {\r
+               GLM_FUNC_QUALIFIER V operator ()()  const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); }\r
+       };\r
+\r
+       template <typename T, precision P, typename V, int E0, int E1, int E2, int E3>\r
+       struct _swizzle_base1<T, P, V,E0,E1,E2,E3,4> : public _swizzle_base0<T, 4>\r
+       { \r
+               GLM_FUNC_QUALIFIER V operator ()()  const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }\r
+       };\r
+\r
+       // Internal class for implementing swizzle operators\r
+       /*\r
+               Template parameters:\r
+\r
+               ValueType = type of scalar values (e.g. float, double)\r
+               VecType   = class the swizzle is applies to (e.g. tvec3<float>)\r
+               N         = number of components in the vector (e.g. 3)\r
+               E0...3    = what index the n-th element of this swizzle refers to in the unswizzled vec\r
+\r
+               DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles\r
+                       containing duplicate elements so that they cannot be used as r-values).            \r
+       */\r
+       template <typename ValueType, precision P, typename VecType, int N, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>\r
+       struct _swizzle_base2 : public _swizzle_base1<ValueType, P, VecType,E0,E1,E2,E3,N>\r
+       {\r
+               typedef VecType vec_type;\r
+               typedef ValueType value_type;\r
+\r
+               GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const ValueType& t)\r
+               {\r
+                       for (int i = 0; i < N; ++i)\r
+                               (*this)[i] = t;\r
+                       return *this;\r
+               }\r
+\r
+               GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const VecType& that)\r
+               {\r
+                       struct op { \r
+                               GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e = t; } \r
+                       };\r
+                       _apply_op(that, op());\r
+                       return *this;\r
+               }\r
+\r
+               GLM_FUNC_QUALIFIER void operator -= (const VecType& that)\r
+               {\r
+                       struct op { \r
+                               GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e -= t; } \r
+                       };\r
+                       _apply_op(that, op());\r
+               }\r
+\r
+               GLM_FUNC_QUALIFIER void operator += (const VecType& that)\r
+               {\r
+                       struct op { \r
+                               GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e += t; } \r
+                       };\r
+                       _apply_op(that, op());\r
+               }\r
+\r
+               GLM_FUNC_QUALIFIER void operator *= (const VecType& that)\r
+               {\r
+                       struct op { \r
+                               GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e *= t; } \r
+                       };\r
+                       _apply_op(that, op());\r
+               }\r
+\r
+               GLM_FUNC_QUALIFIER void operator /= (const VecType& that)\r
+               {\r
+                       struct op { \r
+                               GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e /= t; } \r
+                       };\r
+                       _apply_op(that, op());\r
+               }\r
+\r
+               GLM_FUNC_QUALIFIER value_type& operator[]  (size_t i)\r
+               {\r
+#ifndef __CUDA_ARCH__\r
+                       static\r
+#endif\r
+                               const int offset_dst[4] = { E0, E1, E2, E3 };\r
+                       return this->elem(offset_dst[i]);\r
+               }\r
+               GLM_FUNC_QUALIFIER value_type  operator[]  (size_t i) const\r
+               {\r
+#ifndef __CUDA_ARCH__\r
+                       static\r
+#endif\r
+                               const int offset_dst[4] = { E0, E1, E2, E3 };\r
+                       return this->elem(offset_dst[i]);\r
+               }\r
+       protected:\r
+               template <typename T>\r
+               GLM_FUNC_QUALIFIER void _apply_op(const VecType& that, T op)\r
+               {\r
+                       // Make a copy of the data in this == &that.\r
+                       // The copier should optimize out the copy in cases where the function is\r
+                       // properly inlined and the copy is not necessary.\r
+                       ValueType t[N];\r
+                       for (int i = 0; i < N; ++i)\r
+                               t[i] = that[i];\r
+                       for (int i = 0; i < N; ++i)\r
+                               op( (*this)[i], t[i] );\r
+               }\r
+       };\r
+\r
+       // Specialization for swizzles containing duplicate elements.  These cannot be modified.\r
+       template <typename ValueType, precision P, typename VecType, int N, int E0, int E1, int E2, int E3>\r
+       struct _swizzle_base2<ValueType, P, VecType,N,E0,E1,E2,E3,1> : public _swizzle_base1<ValueType, P, VecType,E0,E1,E2,E3,N>\r
+       {\r
+               typedef VecType         vec_type;        \r
+               typedef ValueType       value_type;\r
+\r
+               struct Stub {};\r
+               GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; }\r
+\r
+               GLM_FUNC_QUALIFIER value_type  operator[]  (size_t i) const\r
+               {\r
+#ifndef __CUDA_ARCH__\r
+                       static\r
+#endif\r
+                               const int offset_dst[4] = { E0, E1, E2, E3 };\r
+                       return this->elem(offset_dst[i]);\r
+               }\r
+       };\r
+\r
+       template <int N,typename ValueType, precision P, typename VecType, int E0,int E1,int E2,int E3>\r
+       struct _swizzle : public _swizzle_base2<ValueType, P, VecType, N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)>\r
+       {\r
+               typedef _swizzle_base2<ValueType, P, VecType,N,E0,E1,E2,E3,(E0==E1||E0==E2||E0==E3||E1==E2||E1==E3||E2==E3)> base_type;\r
+\r
+               using base_type::operator=;\r
+\r
+               GLM_FUNC_QUALIFIER operator VecType () const { return (*this)(); }\r
+       };\r
+\r
+//\r
+// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros\r
+//\r
+#define _GLM_SWIZZLE_TEMPLATE1   template <int N, typename T, precision P, typename V, int E0, int E1, int E2, int E3>\r
+#define _GLM_SWIZZLE_TEMPLATE2   template <int N, typename T, precision P, typename V, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>\r
+#define _GLM_SWIZZLE_TYPE1       _swizzle<N, T, P, V, E0, E1, E2, E3>\r
+#define _GLM_SWIZZLE_TYPE2       _swizzle<N, T, P, V, F0, F1, F2, F3>\r
+\r
+//\r
+// Wrapper for a binary operator (e.g. u.yy + v.zy)\r
+//\r
+#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \\r
+       _GLM_SWIZZLE_TEMPLATE2                                                          \\r
+       GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b)  \\r
+       {                                                                               \\r
+               return a() OPERAND b();                                                     \\r
+       }                                                                               \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                          \\r
+       GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b)                   \\r
+       {                                                                               \\r
+               return a() OPERAND b;                                                       \\r
+       }                                                                               \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                          \\r
+       GLM_FUNC_QUALIFIER V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b)                   \\r
+       {                                                                               \\r
+               return a OPERAND b();                                                       \\r
+       }\r
+\r
+//\r
+// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)\r
+//\r
+#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                          \\r
+       GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b)                   \\r
+       {                                                                               \\r
+               return a() OPERAND b;                                                       \\r
+       }                                                                               \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                          \\r
+       GLM_FUNC_QUALIFIER V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b)                   \\r
+       {                                                                               \\r
+               return a OPERAND b();                                                       \\r
+       }\r
+\r
+//\r
+// Macro for wrapping a function taking one argument (e.g. abs())\r
+//\r
+#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION)                          \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                          \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a)  \\r
+       {                                                                               \\r
+               return FUNCTION(a());                                                       \\r
+       }\r
+\r
+//\r
+// Macro for wrapping a function taking two vector arguments (e.g. dot()).\r
+//\r
+#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION)                                                      \\r
+       _GLM_SWIZZLE_TEMPLATE2                                                                                      \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \\r
+       {                                                                                                           \\r
+               return FUNCTION(a(), b());                                                                              \\r
+       }                                                                                                           \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                                                      \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \\r
+       {                                                                                                           \\r
+               return FUNCTION(a(), b());                                                                              \\r
+       }                                                                                                           \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                                                      \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b)         \\r
+       {                                                                                                           \\r
+               return FUNCTION(a(), b);                                                                                \\r
+       }                                                                                                           \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                                                      \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b)                  \\r
+       {                                                                                                           \\r
+               return FUNCTION(a, b());                                                                                \\r
+       } \r
+\r
+//\r
+// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).\r
+//\r
+#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION)                                                             \\r
+       _GLM_SWIZZLE_TEMPLATE2                                                                                                    \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c)   \\r
+       {                                                                                                                         \\r
+               return FUNCTION(a(), b(), c);                                                                                         \\r
+       }                                                                                                                         \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                                                                    \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c)   \\r
+       {                                                                                                                         \\r
+               return FUNCTION(a(), b(), c);                                                                                         \\r
+       }                                                                                                                         \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                                                                    \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\\r
+       {                                                                                                                         \\r
+               return FUNCTION(a(), b, c);                                                                                           \\r
+       }                                                                                                                         \\r
+       _GLM_SWIZZLE_TEMPLATE1                                                                                                    \\r
+       GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c)           \\r
+       {                                                                                                                         \\r
+               return FUNCTION(a, b(), c);                                                                                           \\r
+       } \r
\r
+}//namespace detail \r
+}//namespace glm\r
+\r
+namespace glm\r
+{\r
+       namespace detail\r
+       {\r
+               _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)\r
+               _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)\r
+               _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)\r
+               _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)\r
+               _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)\r
+               _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)\r
+       }\r
+\r
+       //\r
+       // Swizzles are distinct types from the unswizzled type.  The below macros will\r
+       // provide template specializations for the swizzle types for the given functions\r
+       // so that the compiler does not have any ambiguity to choosing how to handle\r
+       // the function.\r
+       //\r
+       // The alternative is to use the operator()() when calling the function in order\r
+       // to explicitly convert the swizzled type to the unswizzled type.\r
+       //\r
+\r
+       //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    abs);\r
+       //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acos);\r
+       //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acosh);\r
+       //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    all);\r
+       //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    any);\r
+\r
+       //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type,  dot);\r
+       //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    cross);\r
+       //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    step);    \r
+       //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);\r
+}\r
+\r
+#define _GLM_SWIZZLE2_2_MEMBERS(T, P, V, E0,E1) \\r
+       struct { _swizzle<2, T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \\r
+       struct { _swizzle<2, T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \\r
+       struct { _swizzle<2, T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \\r
+       struct { _swizzle<2, T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; }; \r
+\r
+#define _GLM_SWIZZLE2_3_MEMBERS(T, P, V, E0,E1) \\r
+       struct { _swizzle<3,T, P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T, P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T, P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T, P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T, P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T, P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T, P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T, P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; };  \r
+\r
+#define _GLM_SWIZZLE2_4_MEMBERS(T, P, V, E0,E1) \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; };  \r
+\r
+#define _GLM_SWIZZLE3_2_MEMBERS(T, P, V, E0,E1,E2) \\r
+       struct { _swizzle<2,T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 0,2,-1,-2> E0 ## E2; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 1,2,-1,-2> E1 ## E2; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 2,0,-1,-2> E2 ## E0; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 2,1,-1,-2> E2 ## E1; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 2,2,-1,-2> E2 ## E2; }; \r
+\r
+#define _GLM_SWIZZLE3_3_MEMBERS(T, P, V ,E0,E1,E2) \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,0,2,-1> E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,1,2,-1> E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,2,0,-1> E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,2,1,-1> E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,2,2,-1> E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,0,2,-1> E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,1,2,-1> E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,2,0,-1> E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,2,1,-1> E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,2,2,-1> E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,0,0,-1> E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,0,1,-1> E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,0,2,-1> E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,1,0,-1> E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,1,1,-1> E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,1,2,-1> E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,2,0,-1> E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,2,1,-1> E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,2,2,-1> E2 ## E2 ## E2; };\r
+\r
+#define _GLM_SWIZZLE3_4_MEMBERS(T, P, V, E0,E1,E2) \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<4,T, P, V<T, P>, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \r
+\r
+#define _GLM_SWIZZLE4_2_MEMBERS(T, P, V, E0,E1,E2,E3) \\r
+       struct { _swizzle<2,T, P, V<T, P>, 0,0,-1,-2> E0 ## E0; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 0,1,-1,-2> E0 ## E1; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 0,2,-1,-2> E0 ## E2; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 0,3,-1,-2> E0 ## E3; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 1,0,-1,-2> E1 ## E0; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 1,1,-1,-2> E1 ## E1; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 1,2,-1,-2> E1 ## E2; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 1,3,-1,-2> E1 ## E3; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 2,0,-1,-2> E2 ## E0; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 2,1,-1,-2> E2 ## E1; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 2,2,-1,-2> E2 ## E2; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 2,3,-1,-2> E2 ## E3; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 3,0,-1,-2> E3 ## E0; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 3,1,-1,-2> E3 ## E1; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 3,2,-1,-2> E3 ## E2; }; \\r
+       struct { _swizzle<2,T, P, V<T, P>, 3,3,-1,-2> E3 ## E3; }; \r
+\r
+#define _GLM_SWIZZLE4_3_MEMBERS(T,P, V, E0,E1,E2,E3) \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,0,0,-1> E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,0,1,-1> E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,0,2,-1> E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,0,3,-1> E0 ## E0 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,1,0,-1> E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,1,1,-1> E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,1,2,-1> E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,1,3,-1> E0 ## E1 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,2,0,-1> E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,2,1,-1> E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,2,2,-1> E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,2,3,-1> E0 ## E2 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,3,0,-1> E0 ## E3 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,3,1,-1> E0 ## E3 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,3,2,-1> E0 ## E3 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 0,3,3,-1> E0 ## E3 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,0,0,-1> E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,0,1,-1> E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,0,2,-1> E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,0,3,-1> E1 ## E0 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,1,0,-1> E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,1,1,-1> E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,1,2,-1> E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,1,3,-1> E1 ## E1 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,2,0,-1> E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,2,1,-1> E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,2,2,-1> E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,2,3,-1> E1 ## E2 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,3,0,-1> E1 ## E3 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,3,1,-1> E1 ## E3 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,3,2,-1> E1 ## E3 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 1,3,3,-1> E1 ## E3 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,0,0,-1> E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,0,1,-1> E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,0,2,-1> E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,0,3,-1> E2 ## E0 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,1,0,-1> E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,1,1,-1> E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,1,2,-1> E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,1,3,-1> E2 ## E1 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,2,0,-1> E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,2,1,-1> E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,2,2,-1> E2 ## E2 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,2,3,-1> E2 ## E2 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,3,0,-1> E2 ## E3 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,3,1,-1> E2 ## E3 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,3,2,-1> E2 ## E3 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 2,3,3,-1> E2 ## E3 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,0,0,-1> E3 ## E0 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,0,1,-1> E3 ## E0 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,0,2,-1> E3 ## E0 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,0,3,-1> E3 ## E0 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,1,0,-1> E3 ## E1 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,1,1,-1> E3 ## E1 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,1,2,-1> E3 ## E1 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,1,3,-1> E3 ## E1 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,2,0,-1> E3 ## E2 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,2,1,-1> E3 ## E2 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,2,2,-1> E3 ## E2 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,2,3,-1> E3 ## E2 ## E3; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,3,0,-1> E3 ## E3 ## E0; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,3,1,-1> E3 ## E3 ## E1; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,3,2,-1> E3 ## E3 ## E2; }; \\r
+       struct { _swizzle<3,T,P, V<T, P>, 3,3,3,-1> E3 ## E3 ## E3; };  \r
+\r
+#define _GLM_SWIZZLE4_4_MEMBERS(T, P, V, E0,E1,E2,E3) \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \\r
+       struct { _swizzle<4, T, P, V<T, P>, 3,3,3,3> E3 ## E3 ## E3 ## E3; };\r
+\r
+#endif//glm_core_swizzle\r
diff --git a/libs/glm/detail/_swizzle_func.hpp b/libs/glm/detail/_swizzle_func.hpp
new file mode 100644 (file)
index 0000000..471bcd8
--- /dev/null
@@ -0,0 +1,724 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/core/_swizzle_func.hpp\r
+/// @date 2011-10-16 / 2011-10-16\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifndef glm_core_swizzle_func\r
+#define glm_core_swizzle_func\r
+\r
+#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B)       \\r
+       SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B() CONST                                                                                              \\r
+       {                                                                                                                                                                                               \\r
+               return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B);                                                           \\r
+       }\r
+\r
+#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C)            \\r
+       SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C() CONST                                                                                         \\r
+       {                                                                                                                                                                                                       \\r
+               return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C);                                                  \\r
+       }\r
+\r
+#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \\r
+       SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C ## D() CONST                                                                            \\r
+       {                                                                                                                                                                                                       \\r
+               return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D);                                 \\r
+       }\r
+\r
+#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B)   \\r
+       template <typename TMPL_TYPE>                                                                                                                                           \\r
+       SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B() CONST                                                       \\r
+       {                                                                                                                                                                                                       \\r
+               return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B);                                                                   \\r
+       }\r
+\r
+#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C)                \\r
+       template <typename TMPL_TYPE>                                                                                                                                                   \\r
+       SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C() CONST                                                  \\r
+       {                                                                                                                                                                                                               \\r
+               return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C);                                                          \\r
+       }\r
+\r
+#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D)     \\r
+       template <typename TMPL_TYPE>                                                                                                                                                   \\r
+       SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C ## D() CONST                                             \\r
+       {                                                                                                                                                                                                               \\r
+               return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D);                                         \\r
+       }\r
+\r
+#define GLM_MUTABLE\r
+\r
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)\r
+\r
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \\r
+       GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \\r
+       GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \\r
+       GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)\r
+\r
+//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)\r
+\r
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)\r
+\r
+#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)\r
+\r
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)\r
+\r
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \\r
+       GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \\r
+       GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \\r
+       GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, p)\r
+\r
+//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)\r
+\r
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)\r
+\r
+#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)\r
+\r
+#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)\r
+\r
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)\r
+\r
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \\r
+       GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \\r
+       GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \\r
+       GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)\r
+\r
+//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE)                    \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y)  \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g)  \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)\r
+\r
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p)\r
+\r
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \\r
+       GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \\r
+       GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)\r
+\r
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \\r
+       GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)\r
+\r
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)\r
+\r
+#endif//glm_core_swizzle_func\r
diff --git a/libs/glm/detail/_vectorize.hpp b/libs/glm/detail/_vectorize.hpp
new file mode 100644 (file)
index 0000000..6874a32
--- /dev/null
@@ -0,0 +1,217 @@
+///////////////////////////////////////////////////////////////////////////////////\r
+/// OpenGL Mathematics (glm.g-truc.net)\r
+///\r
+/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\r
+/// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+/// of this software and associated documentation files (the "Software"), to deal\r
+/// in the Software without restriction, including without limitation the rights\r
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+/// copies of the Software, and to permit persons to whom the Software is\r
+/// furnished to do so, subject to the following conditions:\r
+/// \r
+/// The above copyright notice and this permission notice shall be included in\r
+/// all copies or substantial portions of the Software.\r
+/// \r
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+/// THE SOFTWARE.\r
+///\r
+/// @ref core\r
+/// @file glm/core/_vectorize.hpp\r
+/// @date 2011-10-14 / 2011-10-14\r
+/// @author Christophe Riccio\r
+///////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifndef GLM_CORE_DETAIL_INCLUDED\r
+#define GLM_CORE_DETAIL_INCLUDED\r
+\r
+#include "type_vec1.hpp"\r
+#include "type_vec2.hpp"\r
+#include "type_vec3.hpp"\r
+#include "type_vec4.hpp"\r
+\r
+#define VECTORIZE1_VEC(func)                                           \\r
+       template <typename T, precision P>                              \\r
+       GLM_FUNC_QUALIFIER detail::tvec1<T, P> func(    \\r
+               detail::tvec1<T, P> const & v)                          \\r
+       {                                                                                               \\r
+               return detail::tvec1<T, P>(                                     \\r
+                       func(v.x));                                                             \\r
+       }\r
+\r
+#define VECTORIZE2_VEC(func)                                           \\r
+       template <typename T, precision P>                              \\r
+       GLM_FUNC_QUALIFIER detail::tvec2<T, P> func(    \\r
+               detail::tvec2<T, P> const & v)                          \\r
+       {                                                                                               \\r
+               return detail::tvec2<T, P>(                                     \\r
+                       func(v.x),                                                              \\r
+                       func(v.y));                                                             \\r
+       }\r
+\r
+#define VECTORIZE3_VEC(func)                                           \\r
+       template <typename T, precision P>                              \\r
+       GLM_FUNC_QUALIFIER detail::tvec3<T, P> func(    \\r
+               detail::tvec3<T, P> const & v)                          \\r
+       {                                                                                               \\r
+               return detail::tvec3<T, P>(                                     \\r
+                       func(v.x),                                                              \\r
+                       func(v.y),                                                              \\r
+                       func(v.z));                                                             \\r
+       }\r
+\r
+#define VECTORIZE4_VEC(func)                                           \\r
+       template <typename T, precision P>                              \\r
+       GLM_FUNC_QUALIFIER detail::tvec4<T, P> func(    \\r
+               detail::tvec4<T, P> const & v)                          \\r
+       {                                                                                               \\r
+               return detail::tvec4<T, P>(                                     \\r
+                       func(v.x),                                                              \\r
+                       func(v.y),                                                              \\r
+                       func(v.z),                                                              \\r
+                       func(v.w));                                                             \\r
+       }\r
+\r
+#define VECTORIZE_VEC(func)            \\r
+       VECTORIZE1_VEC(func)            \\r
+       VECTORIZE2_VEC(func)            \\r
+       VECTORIZE3_VEC(func)            \\r
+       VECTORIZE4_VEC(func)\r
+\r
+#define VECTORIZE1_VEC_SCA(func)                                                       \\r
+       template <typename T, precision P>                                              \\r
+       GLM_FUNC_QUALIFIER detail::tvec1<T, P> func                             \\r
+       (                                                                                                               \\r
+               detail::tvec1<T, P> const & x,                                          \\r
+               T const & y                                                                                     \\r
+       )                         &