Commit eadc387c by Jonah Ryan-Davis Committed by Commit Bot

GL: Support GL_OES_texture_cube_map_array in shader translator

GL_OES_texture_cube_map_array is core in 3.2. This CL adds support for this extension in the shader translator. Now passes dEQP.KHR_GLES31/core_texture_cube_map_array.*, dEQP.GLES31/functional_fbo_color_texcubearray_*, and dEQP.GLES31/functional_opaque_type_indexing*samplercubearray* with GL backend. Bug: angleproject:3584 Change-Id: I1a8485c7d9d3fffb9b5109d292b35b0c56a3c665 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2133086Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
parent 7fde3673
......@@ -399,6 +399,8 @@ struct ShBuiltInResources
int ANGLE_base_vertex_base_instance;
int WEBGL_video_texture;
int APPLE_clip_distance;
int OES_texture_cube_map_array;
int EXT_texture_cube_map_array;
// Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
// with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
......
......@@ -4,15 +4,15 @@
"src/compiler/translator/generate_parser.py":
"566178ecdfae3a29803b3687fc518ebb",
"src/compiler/translator/glslang.l":
"76676b64d51f4312e8060f4a00bc8f1b",
"5af9feeb7ba8549265f8d19ec7f43343",
"src/compiler/translator/glslang.y":
"609c38a1997b77a9affec84541daf9c9",
"1619aa1587a5fae94df9d143af732b77",
"src/compiler/translator/glslang_lex_autogen.cpp":
"edc229f6d1b48f8588301219df80760e",
"4b94107e3314432cfdc8f9e90909e5a0",
"src/compiler/translator/glslang_tab_autogen.cpp":
"8872811534b4e8aeef0df354bbd05044",
"fc0ab4cb3179dc0d936ed9d56bb2dbd0",
"src/compiler/translator/glslang_tab_autogen.h":
"1bb42872dd5fd0a6f647201b142b67b6",
"7be1b46407ec9671626ef3594bcec57e",
"tools/flex-bison/linux/bison.sha1":
"efa86001f00e7bcfdbe899dd15fc88e0",
"tools/flex-bison/linux/flex.sha1":
......
{
"src/compiler/translator/ImmutableString_ESSL_autogen.cpp":
"0025705dc18b69c702b64644806a799c",
"0ea93a3bc04293f610fdbfae45f8e436",
"src/compiler/translator/ImmutableString_autogen.cpp":
"0af0ec12d54ecc032b74b58dd3526129",
"f3b0095f9f8669520698c845085ab62e",
"src/compiler/translator/ParseContext_ESSL_autogen.h":
"c753d946807cca10df7f50ca2db8a47a",
"45035f9e1e7cd735476fc250e034bc72",
"src/compiler/translator/ParseContext_complete_autogen.h":
"dc88a43c877a9955c909e73c4da34176",
"d116f43b2e3b61a73b26b301be561e0b",
"src/compiler/translator/SymbolTable_ESSL_autogen.cpp":
"98e1c96985096c1bbe0625983f67a23e",
"6f3e49f813ca1fa93de47514b3390dfe",
"src/compiler/translator/SymbolTable_autogen.cpp":
"73ac6e5df17521d8cd6734450a9788a0",
"912d1ec634bf4178d310de6db46066f3",
"src/compiler/translator/SymbolTable_autogen.h":
"2d8bed6ff5debc6546199a2add316a66",
"src/compiler/translator/builtin_function_declarations.txt":
"e4a0add049ebbaa8dc5b6c630816b7f8",
"52e0dd28d8be3a0430b70c23d2b060aa",
"src/compiler/translator/builtin_variables.json":
"98d347a6ed181eca3d89bfd73193d787",
"src/compiler/translator/gen_builtin_symbols.py":
"ef6fde209ca86ffb1752fc3a5b9d72d7",
"src/compiler/translator/tree_util/BuiltIn_ESSL_autogen.h":
"aa5d8059a42adb2fb833c84e86726b95",
"2ca793d3326d9e39e7d4ffbca7041e52",
"src/compiler/translator/tree_util/BuiltIn_complete_autogen.h":
"cf8312c854b06d9fe4ede0daa67b5060",
"f3713a80fc4ffee53ba4992cc275d5b7",
"src/tests/compiler_tests/ImmutableString_test_ESSL_autogen.cpp":
"f3a7e48b43b08c17682a3bb5502fc016",
"14cbdec9c41ae4a27910347b2c5e59ef",
"src/tests/compiler_tests/ImmutableString_test_autogen.cpp":
"673110e754ad8ea6939a736b88a781bc"
"d368befd9e4c194c5f6b987b3628a184"
}
\ No newline at end of file
{
"src/common/gen_uniform_type_table.py":
"f7a7846f21da3406f79dcd9a4cb394e8",
"43f21df292ca1864166cc93ed59f2b66",
"src/common/uniform_type_info_autogen.cpp":
"417dddc7510f3d3fa71345f8838e323e"
"ecffb0755d6051d656f9b68e3d7eea72"
}
\ No newline at end of file
......@@ -16,19 +16,23 @@ all_uniform_types = [
"GL_FLOAT_MAT2", "GL_FLOAT_MAT2x3", "GL_FLOAT_MAT2x4", "GL_FLOAT_MAT3", "GL_FLOAT_MAT3x2",
"GL_FLOAT_MAT3x4", "GL_FLOAT_MAT4", "GL_FLOAT_MAT4x2", "GL_FLOAT_MAT4x3", "GL_FLOAT_VEC2",
"GL_FLOAT_VEC3", "GL_FLOAT_VEC4", "GL_IMAGE_2D", "GL_IMAGE_2D_ARRAY", "GL_IMAGE_3D",
"GL_IMAGE_CUBE", "GL_INT", "GL_INT_IMAGE_2D", "GL_INT_IMAGE_2D_ARRAY", "GL_INT_IMAGE_3D",
"GL_INT_IMAGE_CUBE", "GL_INT_SAMPLER_2D", "GL_INT_SAMPLER_2D_ARRAY",
"GL_INT_SAMPLER_2D_MULTISAMPLE", "GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_INT_SAMPLER_3D",
"GL_INT_SAMPLER_CUBE", "GL_INT_VEC2", "GL_INT_VEC3", "GL_INT_VEC4", "GL_SAMPLER_2D",
"GL_IMAGE_CUBE", "GL_IMAGE_CUBE_MAP_ARRAY", "GL_INT", "GL_INT_IMAGE_2D",
"GL_INT_IMAGE_2D_ARRAY", "GL_INT_IMAGE_3D", "GL_INT_IMAGE_CUBE", "GL_INT_IMAGE_CUBE_MAP_ARRAY",
"GL_INT_SAMPLER_2D", "GL_INT_SAMPLER_2D_ARRAY", "GL_INT_SAMPLER_2D_MULTISAMPLE",
"GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_INT_SAMPLER_3D", "GL_INT_SAMPLER_CUBE",
"GL_INT_SAMPLER_CUBE_MAP_ARRAY", "GL_INT_VEC2", "GL_INT_VEC3", "GL_INT_VEC4", "GL_SAMPLER_2D",
"GL_SAMPLER_2D_ARRAY", "GL_SAMPLER_2D_ARRAY_SHADOW", "GL_SAMPLER_2D_MULTISAMPLE",
"GL_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_SAMPLER_2D_RECT_ANGLE", "GL_SAMPLER_2D_SHADOW",
"GL_SAMPLER_3D", "GL_SAMPLER_CUBE", "GL_SAMPLER_CUBE_SHADOW", "GL_SAMPLER_EXTERNAL_OES",
"GL_UNSIGNED_INT", "GL_UNSIGNED_INT_ATOMIC_COUNTER", "GL_UNSIGNED_INT_IMAGE_2D",
"GL_UNSIGNED_INT_IMAGE_2D_ARRAY", "GL_UNSIGNED_INT_IMAGE_3D", "GL_UNSIGNED_INT_IMAGE_CUBE",
"GL_UNSIGNED_INT_SAMPLER_2D", "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY",
"GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE", "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY",
"GL_UNSIGNED_INT_SAMPLER_3D", "GL_UNSIGNED_INT_SAMPLER_CUBE", "GL_UNSIGNED_INT_VEC2",
"GL_UNSIGNED_INT_VEC3", "GL_UNSIGNED_INT_VEC4", "GL_SAMPLER_VIDEO_IMAGE_WEBGL"
"GL_SAMPLER_3D", "GL_SAMPLER_CUBE", "GL_SAMPLER_CUBE_MAP_ARRAY", "GL_SAMPLER_CUBE_SHADOW",
"GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW", "GL_SAMPLER_EXTERNAL_OES", "GL_UNSIGNED_INT",
"GL_UNSIGNED_INT_ATOMIC_COUNTER", "GL_UNSIGNED_INT_IMAGE_2D", "GL_UNSIGNED_INT_IMAGE_2D_ARRAY",
"GL_UNSIGNED_INT_IMAGE_3D", "GL_UNSIGNED_INT_IMAGE_CUBE",
"GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY", "GL_UNSIGNED_INT_SAMPLER_2D",
"GL_UNSIGNED_INT_SAMPLER_2D_ARRAY", "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE",
"GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", "GL_UNSIGNED_INT_SAMPLER_3D",
"GL_UNSIGNED_INT_SAMPLER_CUBE", "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY",
"GL_UNSIGNED_INT_VEC2", "GL_UNSIGNED_INT_VEC3", "GL_UNSIGNED_INT_VEC4",
"GL_SAMPLER_VIDEO_IMAGE_WEBGL"
]
# Uniform texture types. Be wary of substrings finding the wrong types.
......@@ -46,6 +50,7 @@ texture_types = {
"CUBE_SHADOW": "CUBE_MAP",
"EXTERNAL_OES": "EXTERNAL_OES",
"RECT": "RECTANGLE",
"CUBE_MAP_ARRAY": "CUBE_MAP_ARRAY",
"VIDEO_IMAGE_WEBGL": "VIDEO_IMAGE_WEBGL",
}
......
// GENERATED FILE - DO NOT EDIT.
// Generated by gen_uniform_type_table.py.
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -18,7 +18,7 @@ namespace gl
namespace
{
constexpr std::array<UniformTypeInfo, 63> kInfoTable = {
constexpr std::array<UniformTypeInfo, 70> kInfoTable = {
{{GL_NONE, GL_NONE, GL_NONE, GL_NONE, GL_NONE, SamplerFormat::InvalidEnum, 0, 0, 0, 0, 0 * 0,
0 * 0, false, false, false, ""},
{GL_BOOL, GL_BOOL, GL_NONE, GL_NONE, GL_NONE, SamplerFormat::InvalidEnum, 1, 1, 1,
......@@ -65,6 +65,9 @@ constexpr std::array<UniformTypeInfo, 63> kInfoTable = {
{GL_IMAGE_CUBE, GL_INT, GL_TEXTURE_CUBE_MAP, GL_NONE, GL_NONE, SamplerFormat::InvalidEnum, 1,
1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, false, false, true,
"intBitsToFloat"},
{GL_IMAGE_CUBE_MAP_ARRAY, GL_INT, GL_TEXTURE_CUBE_MAP_ARRAY, GL_NONE, GL_NONE,
SamplerFormat::InvalidEnum, 1, 1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1,
false, false, true, "intBitsToFloat"},
{GL_INT, GL_INT, GL_NONE, GL_NONE, GL_BOOL, SamplerFormat::InvalidEnum, 1, 1, 1, sizeof(GLint),
sizeof(GLint) * 4, sizeof(GLint) * 1, false, false, false, "intBitsToFloat"},
{GL_INT_IMAGE_2D, GL_INT, GL_TEXTURE_2D, GL_NONE, GL_NONE, SamplerFormat::InvalidEnum, 1, 1, 1,
......@@ -77,6 +80,9 @@ constexpr std::array<UniformTypeInfo, 63> kInfoTable = {
{GL_INT_IMAGE_CUBE, GL_INT, GL_TEXTURE_CUBE_MAP, GL_NONE, GL_NONE, SamplerFormat::InvalidEnum,
1, 1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, false, false, true,
"intBitsToFloat"},
{GL_INT_IMAGE_CUBE_MAP_ARRAY, GL_INT, GL_TEXTURE_CUBE_MAP_ARRAY, GL_NONE, GL_NONE,
SamplerFormat::InvalidEnum, 1, 1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1,
false, false, true, "intBitsToFloat"},
{GL_INT_SAMPLER_2D, GL_INT, GL_TEXTURE_2D, GL_NONE, GL_NONE, SamplerFormat::Signed, 1, 1, 1,
sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true, false, false, "intBitsToFloat"},
{GL_INT_SAMPLER_2D_ARRAY, GL_INT, GL_TEXTURE_2D_ARRAY, GL_NONE, GL_NONE, SamplerFormat::Signed,
......@@ -93,6 +99,9 @@ constexpr std::array<UniformTypeInfo, 63> kInfoTable = {
{GL_INT_SAMPLER_CUBE, GL_INT, GL_TEXTURE_CUBE_MAP, GL_NONE, GL_NONE, SamplerFormat::Signed, 1,
1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true, false, false,
"intBitsToFloat"},
{GL_INT_SAMPLER_CUBE_MAP_ARRAY, GL_INT, GL_TEXTURE_CUBE_MAP_ARRAY, GL_NONE, GL_NONE,
SamplerFormat::Signed, 1, 1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true,
false, false, "intBitsToFloat"},
{GL_INT_VEC2, GL_INT, GL_NONE, GL_NONE, GL_BOOL_VEC2, SamplerFormat::InvalidEnum, 1, 2, 2,
sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 2, false, false, false, "intBitsToFloat"},
{GL_INT_VEC3, GL_INT, GL_NONE, GL_NONE, GL_BOOL_VEC3, SamplerFormat::InvalidEnum, 1, 3, 3,
......@@ -121,9 +130,15 @@ constexpr std::array<UniformTypeInfo, 63> kInfoTable = {
sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true, false, false, "intBitsToFloat"},
{GL_SAMPLER_CUBE, GL_INT, GL_TEXTURE_CUBE_MAP, GL_NONE, GL_NONE, SamplerFormat::Float, 1, 1, 1,
sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true, false, false, "intBitsToFloat"},
{GL_SAMPLER_CUBE_MAP_ARRAY, GL_INT, GL_TEXTURE_CUBE_MAP_ARRAY, GL_NONE, GL_NONE,
SamplerFormat::Float, 1, 1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true,
false, false, "intBitsToFloat"},
{GL_SAMPLER_CUBE_SHADOW, GL_INT, GL_TEXTURE_CUBE_MAP, GL_NONE, GL_NONE, SamplerFormat::Shadow,
1, 1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true, false, false,
"intBitsToFloat"},
{GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW, GL_INT, GL_NONE, GL_NONE, GL_NONE, SamplerFormat::Shadow, 1,
1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true, false, false,
"intBitsToFloat"},
{GL_SAMPLER_EXTERNAL_OES, GL_INT, GL_TEXTURE_EXTERNAL_OES, GL_NONE, GL_NONE,
SamplerFormat::Float, 1, 1, 1, sizeof(GLint), sizeof(GLint) * 4, sizeof(GLint) * 1, true,
false, false, "intBitsToFloat"},
......@@ -145,6 +160,9 @@ constexpr std::array<UniformTypeInfo, 63> kInfoTable = {
{GL_UNSIGNED_INT_IMAGE_CUBE, GL_UNSIGNED_INT, GL_TEXTURE_CUBE_MAP, GL_NONE, GL_NONE,
SamplerFormat::InvalidEnum, 1, 1, 1, sizeof(GLuint), sizeof(GLuint) * 4, sizeof(GLuint) * 1,
false, false, true, "uintBitsToFloat"},
{GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, GL_UNSIGNED_INT, GL_TEXTURE_CUBE_MAP_ARRAY, GL_NONE,
GL_NONE, SamplerFormat::InvalidEnum, 1, 1, 1, sizeof(GLuint), sizeof(GLuint) * 4,
sizeof(GLuint) * 1, false, false, true, "uintBitsToFloat"},
{GL_UNSIGNED_INT_SAMPLER_2D, GL_UNSIGNED_INT, GL_TEXTURE_2D, GL_NONE, GL_NONE,
SamplerFormat::Unsigned, 1, 1, 1, sizeof(GLuint), sizeof(GLuint) * 4, sizeof(GLuint) * 1,
true, false, false, "uintBitsToFloat"},
......@@ -164,6 +182,9 @@ constexpr std::array<UniformTypeInfo, 63> kInfoTable = {
{GL_UNSIGNED_INT_SAMPLER_CUBE, GL_UNSIGNED_INT, GL_TEXTURE_CUBE_MAP, GL_NONE, GL_NONE,
SamplerFormat::Unsigned, 1, 1, 1, sizeof(GLuint), sizeof(GLuint) * 4, sizeof(GLuint) * 1,
true, false, false, "uintBitsToFloat"},
{GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY, GL_UNSIGNED_INT, GL_TEXTURE_CUBE_MAP_ARRAY, GL_NONE,
GL_NONE, SamplerFormat::Unsigned, 1, 1, 1, sizeof(GLuint), sizeof(GLuint) * 4,
sizeof(GLuint) * 1, true, false, false, "uintBitsToFloat"},
{GL_UNSIGNED_INT_VEC2, GL_UNSIGNED_INT, GL_NONE, GL_NONE, GL_BOOL_VEC2,
SamplerFormat::InvalidEnum, 1, 2, 2, sizeof(GLuint), sizeof(GLuint) * 4, sizeof(GLuint) * 2,
false, false, false, "uintBitsToFloat"},
......@@ -225,88 +246,102 @@ size_t GetTypeInfoIndex(GLenum uniformType)
return 20;
case GL_IMAGE_CUBE:
return 21;
case GL_INT:
case GL_IMAGE_CUBE_MAP_ARRAY:
return 22;
case GL_INT_IMAGE_2D:
case GL_INT:
return 23;
case GL_INT_IMAGE_2D_ARRAY:
case GL_INT_IMAGE_2D:
return 24;
case GL_INT_IMAGE_3D:
case GL_INT_IMAGE_2D_ARRAY:
return 25;
case GL_INT_IMAGE_CUBE:
case GL_INT_IMAGE_3D:
return 26;
case GL_INT_SAMPLER_2D:
case GL_INT_IMAGE_CUBE:
return 27;
case GL_INT_SAMPLER_2D_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
return 28;
case GL_INT_SAMPLER_2D_MULTISAMPLE:
case GL_INT_SAMPLER_2D:
return 29;
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_INT_SAMPLER_2D_ARRAY:
return 30;
case GL_INT_SAMPLER_3D:
case GL_INT_SAMPLER_2D_MULTISAMPLE:
return 31;
case GL_INT_SAMPLER_CUBE:
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
return 32;
case GL_INT_VEC2:
case GL_INT_SAMPLER_3D:
return 33;
case GL_INT_VEC3:
case GL_INT_SAMPLER_CUBE:
return 34;
case GL_INT_VEC4:
case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
return 35;
case GL_SAMPLER_2D:
case GL_INT_VEC2:
return 36;
case GL_SAMPLER_2D_ARRAY:
case GL_INT_VEC3:
return 37;
case GL_SAMPLER_2D_ARRAY_SHADOW:
case GL_INT_VEC4:
return 38;
case GL_SAMPLER_2D_MULTISAMPLE:
case GL_SAMPLER_2D:
return 39;
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_SAMPLER_2D_ARRAY:
return 40;
case GL_SAMPLER_2D_RECT_ANGLE:
case GL_SAMPLER_2D_ARRAY_SHADOW:
return 41;
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_2D_MULTISAMPLE:
return 42;
case GL_SAMPLER_3D:
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
return 43;
case GL_SAMPLER_CUBE:
case GL_SAMPLER_2D_RECT_ANGLE:
return 44;
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_SHADOW:
return 45;
case GL_SAMPLER_EXTERNAL_OES:
case GL_SAMPLER_3D:
return 46;
case GL_UNSIGNED_INT:
case GL_SAMPLER_CUBE:
return 47;
case GL_UNSIGNED_INT_ATOMIC_COUNTER:
case GL_SAMPLER_CUBE_MAP_ARRAY:
return 48;
case GL_UNSIGNED_INT_IMAGE_2D:
case GL_SAMPLER_CUBE_SHADOW:
return 49;
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:
return 50;
case GL_UNSIGNED_INT_IMAGE_3D:
case GL_SAMPLER_EXTERNAL_OES:
return 51;
case GL_UNSIGNED_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT:
return 52;
case GL_UNSIGNED_INT_SAMPLER_2D:
case GL_UNSIGNED_INT_ATOMIC_COUNTER:
return 53;
case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
case GL_UNSIGNED_INT_IMAGE_2D:
return 54;
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
return 55;
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_UNSIGNED_INT_IMAGE_3D:
return 56;
case GL_UNSIGNED_INT_SAMPLER_3D:
case GL_UNSIGNED_INT_IMAGE_CUBE:
return 57;
case GL_UNSIGNED_INT_SAMPLER_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
return 58;
case GL_UNSIGNED_INT_VEC2:
case GL_UNSIGNED_INT_SAMPLER_2D:
return 59;
case GL_UNSIGNED_INT_VEC3:
case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
return 60;
case GL_UNSIGNED_INT_VEC4:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
return 61;
case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
return 62;
case GL_UNSIGNED_INT_SAMPLER_3D:
return 63;
case GL_UNSIGNED_INT_SAMPLER_CUBE:
return 64;
case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
return 65;
case GL_UNSIGNED_INT_VEC2:
return 66;
case GL_UNSIGNED_INT_VEC3:
return 67;
case GL_UNSIGNED_INT_VEC4:
return 68;
case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
return 69;
default:
UNREACHABLE();
return 0;
......
......@@ -163,6 +163,9 @@ GLenum VariableComponentType(GLenum type)
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_ATOMIC_COUNTER:
case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
return GL_INT;
......@@ -313,21 +316,25 @@ int VariableRowCount(GLenum type)
case GL_SAMPLER_2D_RECT_ANGLE:
case GL_SAMPLER_2D_MULTISAMPLE:
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_SAMPLER_CUBE_MAP_ARRAY:
case GL_INT_SAMPLER_2D:
case GL_INT_SAMPLER_3D:
case GL_INT_SAMPLER_CUBE:
case GL_INT_SAMPLER_2D_ARRAY:
case GL_INT_SAMPLER_2D_MULTISAMPLE:
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_2D:
case GL_UNSIGNED_INT_SAMPLER_3D:
case GL_UNSIGNED_INT_SAMPLER_CUBE:
case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW:
case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:
case GL_IMAGE_2D:
case GL_INT_IMAGE_2D:
case GL_UNSIGNED_INT_IMAGE_2D:
......@@ -341,6 +348,9 @@ int VariableRowCount(GLenum type)
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_ATOMIC_COUNTER:
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
return 1;
case GL_FLOAT_MAT2:
......@@ -378,12 +388,14 @@ int VariableColumnCount(GLenum type)
case GL_SAMPLER_2D_ARRAY:
case GL_SAMPLER_2D_MULTISAMPLE:
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_SAMPLER_CUBE_MAP_ARRAY:
case GL_INT_SAMPLER_2D:
case GL_INT_SAMPLER_3D:
case GL_INT_SAMPLER_CUBE:
case GL_INT_SAMPLER_2D_ARRAY:
case GL_INT_SAMPLER_2D_MULTISAMPLE:
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_EXTERNAL_OES:
case GL_SAMPLER_2D_RECT_ANGLE:
case GL_UNSIGNED_INT_SAMPLER_2D:
......@@ -392,9 +404,11 @@ int VariableColumnCount(GLenum type)
case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW:
case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:
case GL_IMAGE_2D:
case GL_INT_IMAGE_2D:
case GL_UNSIGNED_INT_IMAGE_2D:
......@@ -404,6 +418,9 @@ int VariableColumnCount(GLenum type)
case GL_IMAGE_2D_ARRAY:
case GL_INT_IMAGE_2D_ARRAY:
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
......@@ -452,6 +469,7 @@ bool IsSamplerType(GLenum type)
case GL_SAMPLER_EXTERNAL_OES:
case GL_SAMPLER_2D_MULTISAMPLE:
case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_2D_RECT_ANGLE:
case GL_INT_SAMPLER_2D:
case GL_INT_SAMPLER_3D:
......@@ -459,15 +477,18 @@ bool IsSamplerType(GLenum type)
case GL_INT_SAMPLER_2D_ARRAY:
case GL_INT_SAMPLER_2D_MULTISAMPLE:
case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_2D:
case GL_UNSIGNED_INT_SAMPLER_3D:
case GL_UNSIGNED_INT_SAMPLER_CUBE:
case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
case GL_SAMPLER_2D_SHADOW:
case GL_SAMPLER_CUBE_SHADOW:
case GL_SAMPLER_2D_ARRAY_SHADOW:
case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:
case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
return true;
}
......@@ -502,6 +523,9 @@ bool IsImageType(GLenum type)
case GL_IMAGE_2D_ARRAY:
case GL_INT_IMAGE_2D_ARRAY:
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
......@@ -524,6 +548,9 @@ bool IsImage2DType(GLenum type)
case GL_IMAGE_2D_ARRAY:
case GL_INT_IMAGE_2D_ARRAY:
case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
case GL_IMAGE_CUBE_MAP_ARRAY:
case GL_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
......
......@@ -1087,6 +1087,8 @@ void TCompiler::setResourceString()
<< ":ANGLE_multi_draw:" << mResources.ANGLE_multi_draw
<< ":ANGLE_base_vertex_base_instance:" << mResources.ANGLE_base_vertex_base_instance
<< ":APPLE_clip_distance:" << mResources.APPLE_clip_distance
<< ":OES_texture_cube_map_array:" << mResources.OES_texture_cube_map_array
<< ":EXT_texture_cube_map_array:" << mResources.EXT_texture_cube_map_array
<< ":MinProgramTextureGatherOffset:" << mResources.MinProgramTextureGatherOffset
<< ":MaxProgramTextureGatherOffset:" << mResources.MaxProgramTextureGatherOffset
<< ":MaxImageUnits:" << mResources.MaxImageUnits
......
......@@ -38,7 +38,9 @@
OP(ANGLE_multi_draw) \
OP(ANGLE_base_vertex_base_instance) \
OP(WEBGL_video_texture) \
OP(APPLE_clip_distance)
OP(APPLE_clip_distance) \
OP(OES_texture_cube_map_array) \
OP(EXT_texture_cube_map_array)
namespace sh
{
......
......@@ -45,6 +45,8 @@ enum class TExtension : uint8_t
ANGLE_base_vertex_base_instance,
WEBGL_video_texture,
APPLE_clip_distance,
OES_texture_cube_map_array,
EXT_texture_cube_map_array,
};
enum TBehavior : uint8_t
......
......@@ -24,129 +24,139 @@ std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
namespace
{
constexpr int mangledkT1[] = {576, 1799, 1318, 442, 700, 1751, 1287, 678, 1525, 206,
1170, 550, 1470, 1009, 1178, 1566, 842, 605, 1223, 1577,
476, 175, 132, 18, 774, 1001, 217, 1124, 1447, 1736,
1792, 378, 1483, 993, 90, 1452, 902};
constexpr int mangledkT2[] = {387, 1455, 891, 850, 1815, 915, 378, 591, 905, 1053,
906, 1369, 1680, 39, 406, 1514, 1170, 728, 206, 1497,
596, 667, 1461, 12, 25, 375, 1578, 1123, 322, 502,
62, 32, 1393, 1552, 1715, 947, 526};
constexpr int mangledkT1[] = {1687, 1918, 1635, 89, 1810, 832, 422, 1932, 1379, 706,
1114, 534, 457, 343, 605, 691, 62, 1004, 626, 1437,
1528, 643, 320, 761, 1619, 653, 1176, 1843, 1558, 646,
1281, 751, 996, 1673, 6, 389, 1399};
constexpr int mangledkT2[] = {24, 908, 260, 250, 1791, 819, 1942, 1246, 344, 255,
830, 1865, 1511, 411, 312, 236, 326, 828, 951, 441,
1520, 422, 1792, 1138, 106, 1636, 763, 1503, 287, 149,
856, 1312, 1508, 1052, 251, 1939, 897};
constexpr int mangledkG[] = {
0, 0, 0, 577, 0, 0, 0, 0, 0, 52, 0, 799, 0, 0, 0, 0,
0, 0, 0, 0, 0, 977, 0, 0, 797, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 262, 0, 1594, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1311, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 307, 0, 0, 0, 48, 0, 0, 0, 0, 104, 0, 1196, 1352, 0, 1056,
0, 253, 0, 824, 0, 0, 994, 0, 0, 808, 1366, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 1315, 0, 0, 148, 0, 0,
1699, 0, 0, 0, 1085, 0, 0, 0, 91, 0, 0, 0, 1123, 0, 0, 0,
1150, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1465, 780, 196, 0,
0, 0, 0, 345, 1662, 0, 718, 895, 0, 1329, 1148, 0, 0, 1516, 926, 0,
0, 0, 0, 0, 0, 1581, 0, 0, 1408, 428, 0, 1312, 0, 1127, 544, 0,
0, 0, 0, 0, 0, 214, 716, 0, 0, 1182, 0, 0, 0, 330, 1138, 0,
0, 1781, 0, 0, 780, 636, 0, 157, 0, 0, 0, 0, 0, 0, 0, 1089,
0, 0, 436, 110, 0, 1572, 1494, 0, 0, 1595, 0, 0, 0, 709, 991, 0,
0, 0, 1355, 0, 1201, 1786, 0, 312, 235, 1386, 0, 0, 1582, 1448, 0, 1574,
620, 0, 0, 0, 0, 493, 7, 0, 952, 912, 0, 170, 0, 0, 0, 1564,
585, 0, 0, 0, 0, 0, 1481, 0, 278, 0, 535, 0, 0, 1634, 29, 611,
1486, 106, 0, 0, 1070, 0, 0, 0, 266, 0, 0, 1806, 0, 216, 0, 98,
676, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 105, 72, 0, 317, 133,
0, 0, 146, 354, 0, 677, 0, 110, 0, 1097, 0, 1674, 0, 0, 57, 0,
1574, 587, 0, 242, 188, 0, 196, 864, 1330, 735, 0, 339, 0, 739, 0, 58,
193, 0, 0, 165, 0, 823, 0, 128, 0, 0, 1077, 0, 0, 0, 0, 0,
0, 872, 1782, 1692, 0, 0, 664, 1270, 0, 1199, 0, 0, 61, 0, 0, 0,
662, 0, 489, 0, 1029, 0, 0, 0, 1333, 69, 466, 0, 0, 1360, 0, 0,
251, 153, 445, 173, 0, 1181, 0, 0, 325, 0, 0, 342, 391, 0, 901, 0,
707, 0, 0, 0, 0, 1272, 0, 490, 0, 0, 0, 0, 721, 0, 0, 0,
0, 1220, 1228, 811, 1359, 1353, 1262, 72, 0, 0, 683, 0, 1339, 0, 0, 0,
1343, 0, 717, 0, 0, 1723, 728, 0, 0, 0, 78, 533, 243, 0, 0, 1416,
363, 0, 0, 0, 426, 0, 514, 0, 1132, 501, 262, 0, 0, 42, 1647, 1775,
903, 803, 607, 0, 0, 905, 237, 0, 0, 309, 1164, 0, 0, 730, 1700, 0,
0, 0, 0, 0, 0, 234, 1663, 0, 0, 383, 1018, 0, 1665, 0, 0, 1252,
0, 0, 0, 785, 0, 346, 1420, 0, 0, 0, 0, 0, 0, 1755, 1334, 0,
990, 1230, 0, 1479, 927, 1760, 233, 852, 0, 712, 103, 1512, 436, 0, 0, 133,
0, 0, 0, 0, 0, 419, 1746, 193, 0, 0, 1280, 832, 744, 0, 0, 826,
0, 1600, 0, 963, 485, 238, 0, 217, 1374, 1715, 867, 0, 877, 569, 438, 599,
0, 0, 429, 920, 850, 0, 0, 0, 141, 0, 138, 0, 0, 0, 1513, 0,
0, 0, 0, 643, 0, 0, 1275, 0, 0, 1541, 1451, 0, 87, 0, 0, 0,
0, 0, 0, 179, 1089, 0, 0, 0, 0, 0, 0, 486, 0, 0, 313, 0,
339, 324, 1465, 0, 0, 390, 0, 0, 0, 767, 0, 0, 828, 377, 1779, 151,
0, 0, 1694, 0, 671, 0, 627, 1483, 0, 0, 631, 422, 0, 29, 0, 540,
1147, 0, 1461, 0, 1509, 262, 0, 0, 368, 1384, 1624, 1602, 876, 0, 820, 396,
844, 1671, 277, 0, 0, 1364, 0, 0, 0, 875, 0, 440, 0, 0, 0, 0,
232, 0, 0, 47, 295, 10, 0, 0, 0, 412, 311, 0, 1318, 76, 1064, 0,
0, 1386, 726, 0, 0, 1237, 0, 957, 986, 0, 771, 1508, 292, 0, 0, 291,
995, 394, 0, 0, 0, 0, 1363, 11, 867, 0, 534, 302, 124, 0, 0, 0,
1743, 0, 0, 104, 912, 272, 0, 0, 0, 0, 227, 0, 0, 0, 1579, 710,
1031, 0, 0, 0, 0, 901, 0, 483, 0, 390, 755, 474, 1270, 0, 305, 0,
559, 0, 352, 0, 0, 401, 0, 1348, 0, 840, 0, 108, 0, 0, 0, 794,
0, 441, 1049, 338, 0, 857, 0, 334, 272, 960, 0, 0, 461, 326, 856, 1246,
1607, 767, 381, 286, 0, 351, 0, 0, 0, 1309, 0, 150, 350, 0, 367, 708,
0, 0, 36, 0, 0, 1157, 1713, 559, 246, 484, 680, 149, 0, 0, 0, 329,
734, 0, 0, 1796, 137, 0, 56, 98, 0, 0, 656, 0, 655, 0, 0, 167,
0, 0, 177, 0, 1391, 0, 0, 0, 0, 719, 913, 1751, 642, 478, 1387, 0,
0, 1677, 612, 1120, 0, 482, 294, 753, 0, 882, 723, 13, 0, 1586, 616, 0,
1624, 918, 687, 1383, 0, 802, 923, 1781, 0, 0, 198, 1475, 90, 0, 0, 927,
0, 0, 0, 1454, 0, 791, 1180, 0, 1687, 1763, 80, 61, 1326, 0, 0, 0,
0, 870, 782, 0, 448, 1407, 713, 1080, 0, 0, 0, 880, 612, 0, 0, 1706,
834, 1073, 839, 0, 0, 38, 1653, 0, 1265, 0, 0, 662, 1613, 0, 0, 0,
1495, 1110, 19, 0, 0, 0, 968, 0, 0, 1375, 0, 1646, 1490, 0, 594, 671,
0, 622, 0, 83, 362, 164, 0, 0, 145, 198, 0, 0, 193, 0, 560, 700,
0, 0, 0, 1404, 906, 436, 0, 1314, 0, 1250, 0, 0, 1691, 0, 181, 0,
99, 1086, 0, 1601, 796, 346, 1494, 0, 0, 0, 490, 0, 1226, 0, 487, 1113,
165, 1429, 897, 0, 1674, 1030, 402, 0, 810, 841, 1490, 451, 701, 0, 0, 0,
1685, 138, 336, 0, 227, 0, 67, 0, 344, 0, 0, 817, 986, 663, 135, 725,
0, 199, 1155, 546, 1519, 0, 1438, 1223, 0, 277, 0, 0, 0, 0, 0, 0,
0, 542, 0, 1237, 0, 1205, 0, 0, 1294, 0, 0, 0, 0, 442, 0, 744,
906, 0, 0, 0, 749, 22, 915, 0, 1494, 706, 747, 0, 816, 0, 788, 331,
153, 1308, 922, 0, 264, 887, 219, 1039, 353, 477, 0, 0, 0, 1447, 0, 673,
1610, 29, 115, 1670, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 230,
0, 1327, 0, 925, 0, 1366, 1558, 0, 0, 683, 0, 355, 326, 583, 346, 0,
1680, 1333, 0, 763, 1703, 752, 0, 97, 0, 1721, 0, 0, 607, 312, 0, 283,
372, 496, 605, 44, 0, 148, 329, 651, 0, 1198, 897, 139, 123, 63, 564, 0,
1471, 1670, 0, 0, 483, 335, 642, 0, 176, 0, 63, 1671, 544, 0, 1577, 119,
1557, 785, 436, 27, 134, 835, 1170, 0, 0, 0, 86, 0, 682, 397, 251, 64,
0, 59, 0, 529, 0, 879, 0, 0, 181, 1656, 39, 286, 1657, 0, 794, 1514,
555, 461, 642, 0, 398, 0, 0, 0, 29, 0, 0, 127, 1604, 0, 658, 0,
1266, 0, 222, 0, 0, 0, 190, 741, 185, 339, 615, 0, 0, 1657, 0, 1547,
0, 449, 0, 257, 0, 1019, 519, 1791, 366, 820, 734, 429, 0, 606, 1647, 634,
824, 618, 0, 105, 0, 114, 389, 462, 814, 0, 509, 0, 929, 779, 327, 717,
420, 1169, 1494, 0, 0, 513, 940, 1170, 185, 0, 913, 110, 0, 0, 13, 819,
668, 1569, 1739, 1086, 36, 0, 1320, 0, 0, 1378, 0, 0, 1072, 397, 0, 0,
49, 0, 0, 624, 0, 1523, 0, 805, 1237, 1770, 827, 0, 616, 0, 405, 0,
0, 0, 1685, 1351, 0, 778, 463, 944, 1255, 0, 413, 0, 0, 0, 660, 1008,
0, 0, 1401, 522, 0, 14, 0, 1510, 0, 1139, 608, 1607, 585, 0, 0, 0,
240, 297, 692, 220, 1434, 59, 518, 70, 152, 403, 506, 224, 0, 0, 369, 0,
801, 740, 0, 1701, 0, 0, 1599, 0, 0, 0, 0, 709, 275, 322, 0, 0,
805, 0, 281, 298, 60, 0, 0, 282, 705, 0, 0, 0, 1782, 1148, 952, 0,
451, 486, 152, 0, 0, 0, 0, 194, 552, 54, 0, 110, 5, 1457, 0, 861,
1311, 0, 34, 1424, 107, 0, 0, 137, 324, 248, 736, 1751, 644, 1330, 594, 1088,
1375, 0, 0, 1114, 102, 0, 0, 0, 0, 304, 0, 1050, 0, 0, 0, 632,
0, 32, 0, 321, 576, 0, 215, 933, 0, 604, 0, 0, 0, 1650, 0, 0,
1404, 480, 77, 0, 0, 1173, 743, 271, 0, 0, 805, 1481, 501, 1053, 580, 0,
0, 0, 746, 0, 1508, 1247, 1496, 0, 0, 289, 525, 176, 0, 0, 902, 0,
184, 0, 1327, 0, 7, 581, 1163, 951, 161, 0, 229, 243, 795, 0, 437, 290,
0, 427, 248, 350, 409, 0, 556, 0, 128, 93, 238, 347, 332, 0, 472, 551,
792, 728, 0, 208, 460, 0, 356, 0, 434, 231, 1458, 1246, 0, 739, 941, 1745,
1801, 1555, 1390, 0, 714, 358, 400, 173, 523, 1176, 660, 325, 488, 953, 0, 0,
1388, 574, 0, 0, 215, 459, 606, 1757, 571, 373, 201, 0, 0, 423, 77, 0,
608, 207, 0, 706, 0, 0, 0, 0, 983, 0, 0, 0, 1011, 1266, 343, 0,
0, 0, 847, 1137, 10, 531, 995, 0, 0, 391, 0, 1784, 0, 528, 222, 863,
885, 0, 1779, 0, 1642, 977, 0, 0, 489, 628, 805, 0, 404, 127, 268, 0,
0, 242, 0, 0, 0, 1750, 293, 663, 861, 528, 0, 0, 0, 1104, 685, 314,
262, 781, 1359, 666, 1370, 1656, 219, 1100, 1675, 920, 512, 802, 1258, 1601, 1721, 780,
0, 0, 689, 1765, 947, 1507, 1540, 0, 0, 831, 1609, 385, 0, 1776, 844, 1601,
0, 2, 939, 657, 0, 0, 247, 436, 1136, 205, 1200, 471, 98, 889, 166, 47,
1627, 659, 407, 676, 851, 985, 830, 106, 1076, 1090, 0, 1810, 0, 672, 32, 1351,
1387, 1446, 390, 586, 0, 202, 585, 687, 205, 0, 746, 1212, 97, 130, 1218, 498,
0, 0, 911, 584, 409, 416, 0, 0, 0, 1412, 511, 480, 81, 1061, 0, 803,
75, 0, 0, 859, 0, 434, 504, 0, 0, 267, 852, 990, 1679, 1265, 0, 122,
0, 0, 789, 0, 111, 0, 0, 0, 674, 0, 0, 0, 1763, 0, 0, 615,
0, 0, 85, 754, 0, 574, 1220, 1262, 0, 353, 0, 753, 0, 1542, 0, 614,
978, 166, 1728, 0, 0, 290, 0, 0, 508, 1316, 383, 0, 17, 1452, 832, 478,
0, 1574, 913, 73, 0, 0, 1323, 0, 53, 1656, 0, 0, 0, 315, 0, 0,
0, 0, 446, 0, 0, 0, 614, 331, 1486, 0, 1315};
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 1354,
0, 0, 0, 0, 0, 0, 1121, 0, 1738, 0, 1207, 0, 0, 0, 0, 1720,
0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 1859, 0, 0, 0, 0, 0,
0, 0, 0, 1604, 0, 0, 0, 215, 0, 1963, 0, 0, 1397, 0, 52, 0,
0, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 350, 0, 1235, 212, 0, 0,
0, 0, 0, 0, 1595, 0, 0, 602, 16, 0, 713, 1126, 0, 0, 0, 0,
0, 1739, 0, 0, 474, 0, 0, 1520, 0, 1856, 0, 0, 0, 0, 0, 0,
1572, 0, 0, 0, 0, 1368, 0, 119, 0, 1818, 0, 797, 0, 0, 0, 0,
0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 1667, 0, 0, 1956, 0, 149,
0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423,
0, 0, 1315, 1801, 0, 0, 969, 0, 0, 0, 0, 229, 0, 831, 0, 190,
0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 1928, 59, 720, 897, 0,
0, 0, 552, 0, 0, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0,
0, 0, 922, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 1044, 1407, 0,
0, 54, 0, 0, 697, 0, 630, 980, 300, 0, 450, 693, 0, 0, 0, 0,
0, 0, 769, 0, 11, 0, 1728, 0, 0, 1591, 723, 0, 1508, 1928, 0, 0,
154, 0, 1088, 0, 1573, 0, 0, 0, 0, 98, 0, 708, 0, 0, 207, 1198,
0, 0, 0, 1649, 404, 0, 0, 0, 0, 0, 267, 0, 242, 130, 0, 0,
99, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 949,
0, 0, 112, 959, 536, 695, 1237, 0, 0, 179, 1911, 0, 0, 0, 0, 1812,
0, 0, 0, 0, 0, 816, 532, 624, 0, 0, 0, 0, 0, 0, 810, 0,
0, 973, 1068, 0, 0, 0, 127, 0, 0, 1201, 0, 1866, 0, 0, 0, 0,
628, 0, 0, 0, 0, 1910, 0, 1976, 835, 0, 405, 0, 0, 1220, 0, 1923,
305, 0, 0, 0, 955, 851, 0, 0, 0, 997, 0, 0, 0, 0, 1680, 395,
2, 0, 969, 668, 1411, 1876, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 873, 0, 0, 701, 0, 0, 525, 998, 1713, 0, 0, 537, 0, 0, 0,
0, 0, 0, 0, 1571, 0, 327, 0, 0, 1409, 1757, 0, 647, 1681, 0, 1861,
0, 0, 78, 0, 306, 523, 23, 1412, 1225, 223, 0, 0, 75, 0, 948, 0,
167, 1394, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 332, 1156, 130, 0,
0, 370, 282, 0, 0, 420, 0, 297, 553, 0, 0, 0, 777, 0, 0, 9,
192, 537, 1909, 1153, 67, 0, 1881, 823, 0, 0, 10, 0, 603, 0, 187, 0,
0, 1604, 798, 827, 1474, 1302, 0, 1349, 893, 0, 1700, 1194, 0, 1444, 0, 0,
458, 680, 973, 0, 0, 0, 1195, 0, 0, 0, 220, 1053, 100, 731, 1797, 0,
0, 0, 680, 0, 215, 0, 1580, 470, 0, 0, 177, 685, 0, 0, 52, 0,
1783, 1547, 11, 446, 0, 523, 0, 0, 0, 1650, 787, 0, 1965, 0, 744, 0,
0, 0, 126, 0, 30, 0, 0, 0, 0, 1364, 0, 156, 1580, 1320, 0, 333,
0, 0, 0, 0, 0, 0, 699, 0, 990, 368, 1812, 0, 105, 0, 0, 148,
0, 0, 0, 759, 0, 310, 0, 0, 0, 0, 0, 0, 0, 1894, 697, 137,
211, 913, 328, 861, 1462, 0, 0, 885, 0, 0, 438, 0, 739, 1328, 647, 1898,
0, 268, 0, 0, 0, 731, 0, 1349, 1872, 0, 0, 0, 205, 0, 0, 0,
0, 0, 1030, 562, 0, 297, 0, 629, 835, 921, 0, 0, 344, 1740, 0, 0,
495, 0, 371, 0, 283, 457, 908, 361, 0, 1806, 1411, 863, 0, 0, 796, 146,
0, 0, 1590, 0, 0, 0, 1832, 0, 0, 0, 904, 901, 81, 938, 0, 896,
903, 1408, 17, 918, 0, 1827, 0, 1737, 0, 0, 1190, 0, 0, 0, 0, 0,
0, 1744, 0, 514, 666, 674, 0, 0, 881, 90, 1423, 515, 473, 910, 0, 0,
1134, 0, 425, 0, 609, 189, 682, 0, 1699, 0, 628, 156, 0, 0, 0, 0,
1124, 0, 0, 0, 1895, 419, 0, 0, 1767, 0, 101, 0, 0, 0, 425, 749,
127, 1690, 0, 1900, 0, 533, 1100, 0, 1879, 0, 0, 655, 0, 116, 0, 1734,
1051, 0, 521, 0, 0, 1730, 0, 1449, 0, 0, 0, 0, 1903, 0, 0, 311,
1006, 0, 0, 1576, 551, 142, 0, 677, 1364, 1515, 0, 0, 0, 0, 0, 1725,
1469, 0, 0, 351, 0, 0, 0, 793, 0, 0, 541, 1934, 636, 1010, 0, 1370,
0, 0, 0, 618, 1334, 1839, 0, 1002, 0, 431, 1440, 635, 0, 920, 0, 0,
0, 403, 0, 1945, 0, 74, 0, 0, 0, 1466, 1095, 0, 981, 0, 0, 0,
262, 0, 0, 1495, 0, 0, 0, 0, 1534, 1933, 0, 46, 0, 0, 0, 1393,
398, 1105, 0, 735, 371, 115, 39, 613, 255, 0, 1906, 0, 0, 0, 1844, 946,
242, 0, 0, 129, 0, 1856, 1145, 1186, 0, 939, 1693, 0, 1581, 0, 1961, 0,
65, 139, 984, 1401, 0, 0, 1576, 142, 1937, 0, 0, 987, 130, 889, 0, 347,
975, 1463, 0, 456, 1825, 1232, 103, 647, 1609, 0, 0, 0, 123, 267, 642, 0,
718, 0, 893, 0, 0, 1198, 602, 285, 1670, 105, 0, 0, 1247, 0, 872, 0,
113, 236, 0, 1227, 1217, 0, 0, 391, 0, 1959, 729, 700, 0, 1011, 0, 0,
0, 315, 283, 1897, 238, 0, 598, 687, 0, 0, 857, 0, 0, 637, 139, 0,
0, 0, 980, 695, 106, 0, 373, 269, 0, 774, 757, 0, 0, 1022, 0, 746,
1802, 2, 509, 0, 454, 0, 0, 934, 1615, 0, 0, 77, 0, 355, 0, 1518,
1138, 1333, 0, 0, 0, 0, 0, 0, 471, 441, 0, 396, 0, 682, 246, 894,
0, 1784, 1647, 677, 0, 847, 0, 0, 0, 0, 0, 0, 327, 0, 203, 1171,
266, 1459, 919, 1091, 1126, 515, 0, 1656, 469, 183, 0, 1797, 0, 809, 0, 1523,
71, 0, 1387, 0, 347, 0, 539, 301, 56, 110, 21, 1776, 0, 0, 0, 0,
0, 0, 0, 0, 0, 274, 0, 298, 1875, 0, 1362, 448, 0, 1052, 1964, 0,
0, 678, 0, 0, 501, 0, 0, 765, 923, 0, 539, 410, 885, 0, 261, 1240,
0, 446, 339, 876, 0, 616, 1186, 0, 1454, 0, 0, 876, 653, 87, 78, 406,
938, 1335, 0, 0, 6, 0, 0, 0, 1594, 0, 1072, 83, 0, 0, 0, 0,
0, 1152, 0, 995, 0, 346, 0, 366, 305, 1274, 0, 163, 0, 0, 1756, 0,
363, 234, 0, 280, 0, 0, 1660, 897, 0, 125, 1548, 312, 1290, 907, 0, 80,
0, 714, 161, 0, 0, 264, 0, 0, 0, 534, 0, 216, 0, 0, 0, 638,
0, 49, 0, 803, 0, 1441, 0, 475, 0, 0, 137, 1965, 1181, 0, 883, 0,
501, 13, 1693, 0, 924, 0, 0, 0, 536, 248, 0, 672, 0, 0, 513, 908,
1045, 0, 142, 374, 128, 0, 210, 1580, 833, 1602, 278, 660, 0, 0, 303, 0,
1569, 0, 0, 200, 0, 0, 1085, 0, 0, 0, 1896, 0, 1929, 0, 0, 451,
791, 0, 147, 412, 1221, 0, 970, 410, 0, 50, 13, 939, 93, 0, 774, 90,
0, 0, 820, 71, 987, 948, 0, 1779, 0, 1318, 475, 1759, 0, 0, 0, 104,
0, 0, 467, 12, 1410, 0, 909, 723, 143, 1853, 1481, 0, 773, 0, 107, 0,
491, 656, 0, 0, 0, 1778, 1468, 630, 0, 316, 0, 1866, 0, 1139, 919, 1848,
0, 1296, 4, 0, 0, 0, 633, 987, 0, 0, 0, 683, 133, 0, 728, 997,
190, 230, 1861, 0, 585, 634, 0, 1326, 895, 1335, 0, 0, 0, 422, 667, 221,
79, 1937, 0, 0, 457, 845, 1736, 500, 903, 498, 370, 1635, 1409, 9, 15, 0,
0, 522, 0, 518, 118, 841, 417, 0, 929, 827, 802, 0, 0, 0, 184, 1639,
0, 0, 1731, 261, 0, 0, 0, 886, 454, 0, 1742, 3, 0, 0, 111, 0,
0, 0, 552, 0, 0, 376, 966, 0, 0, 516, 254, 900, 0, 0, 0, 0,
499, 0, 0, 0, 889, 705, 0, 0, 255, 0, 0, 1907, 0, 1898, 0, 814,
0, 605, 0, 412, 222, 790, 335, 0, 0, 142, 794, 0, 0, 972, 0, 0,
628, 0, 109, 1553, 1153, 335, 748, 1512, 892, 1355, 1943, 801, 115, 0, 934, 228,
428, 0, 0, 0, 255, 0, 1865, 1531, 0, 0, 0, 0, 962, 979, 1268, 237,
108, 673, 0, 1560, 0, 0, 712, 1749, 0, 651, 289, 0, 108, 0, 157, 1623,
0, 120, 77, 990, 1706, 350, 567, 1837, 1488, 0, 169, 1498, 0, 630, 217, 200,
0, 0, 1818, 0, 0, 0, 0, 0, 0, 270, 1599, 632, 1505, 172, 963, 546,
0, 613, 929, 0, 0, 214, 1539, 0, 82, 1768, 482, 0, 0, 1957, 0, 96,
970, 398, 797, 688, 0, 723, 1379, 952, 661, 0, 1897, 0, 1675, 348, 0, 0,
0, 1027, 0, 0, 0, 0, 865, 1550, 1452, 0, 537, 0, 64, 0, 965, 408,
1303, 1236, 871, 0, 0, 27, 0, 0, 436, 493, 1723, 577, 1555, 0, 1868, 0,
400, 0, 0, 0, 0, 0, 0, 597, 303, 745, 790, 629, 1482, 1010, 737, 0,
0, 0, 0, 0, 0, 0, 949, 63, 1460, 753, 0, 0, 0, 435, 326, 0,
130, 0, 82, 703, 0, 1759, 826, 0, 0, 0, 0, 1889, 0, 114, 607, 390,
506, 0, 557, 1799, 921, 560, 5, 1109, 0, 430, 529, 0, 350, 573, 1399, 0,
1050, 592, 0, 0, 118, 446, 830, 1365, 501, 1289, 376, 232, 0, 90, 1956, 0,
723, 123, 0, 166, 609, 744, 0, 0, 0, 0, 956, 62, 0, 302, 530, 288,
0, 727, 0, 1023, 0, 1388, 1335, 0, 0, 880, 496, 315, 1521, 478, 667, 898,
86, 1735, 0, 1683, 178, 566, 1495, 27, 0, 0, 0, 0, 245, 266, 394, 73,
0, 780, 280, 577, 0, 1902, 631, 0, 1922, 60, 358, 0, 0, 836, 0, 937,
0, 75, 0, 526, 698, 0, 742, 1253, 0, 302, 1938, 506, 0, 862, 41, 0,
0, 0, 746, 102, 696, 0, 0, 473, 159, 161, 1885, 0, 15, 1035, 0, 275,
0, 301, 19, 0, 762, 0, 563, 286, 1117, 0, 1944, 184, 0, 1175, 760, 0,
0, 1737, 0, 86, 1429, 1594, 1868, 440, 560, 1114, 0, 521, 0, 599, 808, 0,
0, 1229, 331, 0, 316, 649, 492, 514, 425, 0, 563, 870, 479, 684, 549, 0,
1736, 976, 595, 786, 0, 0, 63, 0, 929, 664, 0, 0, 98, 0, 819, 590,
0, 1612, 0, 1444, 0, 0, 184, 297, 882, 1322, 702, 219, 1053, 247, 0, 393,
1705, 41, 874, 231, 0, 55, 236, 0, 411, 0, 0, 539, 0, 0, 0, 620,
878, 942, 329, 1729, 0, 782, 558, 0, 87, 0, 1844, 719, 0, 0, 0, 1261,
0, 0, 0, 234, 0, 0, 109, 351, 0, 0, 187, 0, 0, 1944, 852, 0,
1703, 68, 958, 5, 296, 0, 1809, 0, 427, 0, 1731, 1757, 0, 357, 1876, 697,
174, 0, 51, 0, 0, 0, 30, 0, 0, 0, 0, 415, 824, 1251, 0, 1648,
675, 389, 0, 597, 0, 724, 0, 0, 0, 0, 252, 923, 408, 0, 296, 1143,
0, 148, 1573, 0, 384, 893, 0, 772, 1843, 0, 375, 232, 882, 0, 619, 0,
690, 0, 1374, 516, 356, 0, 1889, 0, 2, 0, 0, 0, 0, 492, 86, 3,
0, 953, 1190, 0, 307, 433, 0, 0, 1104};
int MangledHashG(const char *key, const int *T)
{
......@@ -155,7 +165,7 @@ int MangledHashG(const char *key, const int *T)
for (int i = 0; key[i] != '\0'; i++)
{
sum += T[i] * key[i];
sum %= 1819;
sum %= 1977;
}
return mangledkG[sum];
}
......@@ -165,30 +175,29 @@ int MangledPerfectHash(const char *key)
if (strlen(key) > 37)
return 0;
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 1819;
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 1977;
}
constexpr int unmangledkT1[] = {293, 75, 40, 95, 74, 289, 163, 32, 196, 213, 151, 250, 270,
222, 33, 225, 68, 121, 96, 188, 267, 106, 137, 167, 63, 225};
constexpr int unmangledkT2[] = {282, 168, 232, 116, 146, 41, 230, 239, 190, 13, 17, 153, 163,
115, 101, 5, 235, 257, 66, 70, 287, 264, 162, 100, 294, 5};
constexpr int unmangledkT1[] = {163, 200, 23, 188, 228, 164, 235, 223, 155, 227, 190, 135, 61,
36, 102, 226, 161, 44, 69, 138, 105, 177, 44, 180, 41, 256};
constexpr int unmangledkT2[] = {185, 17, 279, 66, 39, 191, 246, 40, 267, 239, 253, 57, 237,
78, 238, 45, 82, 49, 8, 23, 206, 264, 108, 23, 272, 147};
constexpr int unmangledkG[] = {
0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 55, 0, 0, 0, 240, 0, 27, 192, 0,
0, 135, 7, 53, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 145, 74,
0, 258, 13, 0, 0, 200, 0, 0, 0, 71, 116, 0, 53, 0, 48, 222, 0, 185, 0,
135, 0, 24, 262, 0, 24, 242, 0, 0, 0, 195, 0, 39, 8, 99, 152, 0, 0, 4,
0, 0, 0, 94, 97, 0, 0, 32, 0, 242, 67, 0, 3, 0, 100, 0, 0, 0, 13,
101, 0, 46, 0, 0, 105, 0, 0, 0, 0, 96, 0, 110, 228, 0, 52, 269, 0, 0,
0, 0, 0, 6, 0, 0, 109, 131, 0, 0, 0, 93, 283, 251, 189, 0, 111, 0, 0,
0, 65, 24, 236, 154, 0, 132, 204, 0, 207, 0, 0, 0, 0, 0, 87, 74, 60, 142,
137, 69, 0, 0, 0, 75, 0, 0, 88, 0, 124, 51, 56, 0, 113, 0, 0, 0, 46,
0, 0, 221, 0, 58, 278, 257, 0, 0, 0, 271, 149, 91, 0, 224, 95, 152, 0, 0,
81, 49, 198, 121, 74, 0, 0, 0, 0, 0, 94, 247, 41, 0, 0, 0, 10, 140, 0,
0, 0, 119, 25, 0, 106, 0, 195, 115, 35, 0, 162, 0, 81, 0, 23, 76, 0, 272,
86, 72, 52, 0, 0, 118, 0, 125, 0, 145, 0, 214, 0, 145, 228, 0, 0, 121, 0,
0, 110, 60, 18, 7, 5, 190, 276, 96, 0, 57, 249, 0, 65, 31, 213, 0, 0, 29,
178, 108, 125, 30, 0, 0, 0, 0, 0, 200, 250, 0, 35, 0, 103, 230, 243, 276, 17,
268, 147, 180, 46, 55, 26, 4, 269, 16, 0};
0, 0, 0, 0, 0, 88, 0, 159, 0, 0, 56, 0, 142, 0, 0, 0, 80, 0, 0,
0, 24, 0, 0, 24, 64, 178, 0, 0, 0, 0, 0, 0, 31, 16, 129, 0, 0, 0,
0, 267, 0, 120, 0, 0, 84, 0, 270, 263, 101, 0, 77, 149, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 87, 82, 0, 113, 0, 0, 255, 92, 0, 155, 136, 0, 25,
52, 0, 95, 0, 91, 0, 0, 0, 169, 253, 9, 16, 104, 6, 0, 0, 0, 229, 0,
102, 254, 40, 0, 75, 6, 117, 253, 0, 0, 138, 0, 147, 0, 0, 0, 0, 0, 0,
0, 0, 47, 0, 0, 72, 0, 149, 0, 272, 62, 128, 0, 71, 169, 106, 0, 121, 57,
279, 0, 0, 0, 0, 98, 0, 0, 251, 55, 0, 12, 0, 143, 0, 201, 243, 58, 207,
0, 160, 52, 0, 0, 0, 0, 3, 0, 190, 0, 22, 0, 0, 67, 10, 56, 0, 268,
259, 151, 112, 0, 52, 145, 19, 104, 0, 99, 0, 0, 255, 118, 61, 0, 16, 83, 0,
0, 54, 16, 15, 141, 21, 0, 259, 145, 186, 92, 253, 1, 254, 97, 0, 15, 0, 212,
111, 18, 215, 50, 0, 0, 27, 36, 59, 157, 256, 272, 0, 267, 180, 0, 31, 0, 13,
0, 208, 109, 0, 0, 279, 13, 0, 0, 67, 0, 65, 84, 0, 215, 0, 0, 176, 131,
0, 136, 0, 273, 235, 0, 251, 43, 35, 251, 118, 49, 39, 66, 0, 180, 87, 0, 62,
191, 0, 8, 158, 203, 196, 58, 185, 136, 139, 126, 0, 0, 0, 0};
int UnmangledHashG(const char *key, const int *T)
{
......@@ -197,7 +206,7 @@ int UnmangledHashG(const char *key, const int *T)
for (int i = 0; key[i] != '\0'; i++)
{
sum += T[i] * key[i];
sum %= 295;
sum %= 281;
}
return unmangledkG[sum];
}
......@@ -207,7 +216,7 @@ int UnmangledPerfectHash(const char *key)
if (strlen(key) > 26)
return 0;
return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 295;
return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 281;
}
} // namespace
......
......@@ -24,293 +24,294 @@ std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
namespace
{
constexpr int mangledkT1[] = {417, 3313, 3044, 680, 2508, 3561, 1073, 351, 457, 1363,
1704, 3701, 2117, 3388, 1046, 3102, 4330, 1835, 3825, 249,
345, 1171, 4152, 3215, 3212, 3745, 2872, 3795, 3526, 3916,
2870, 642, 326, 585, 2346, 2144, 2595};
constexpr int mangledkT2[] = {173, 3815, 3691, 3308, 3907, 1340, 3432, 3919, 2665, 3544,
3700, 2906, 3546, 3971, 952, 918, 2735, 3910, 3624, 3624,
689, 3012, 1300, 3916, 1468, 4198, 864, 1975, 3174, 2392,
2885, 3797, 379, 3769, 1054, 4303, 2029};
constexpr int mangledkT1[] = {419, 3324, 3055, 682, 2516, 3573, 1077, 352, 459, 1367,
1709, 3713, 2124, 3400, 1049, 3112, 4345, 1841, 3838, 250,
346, 1175, 4166, 3226, 3223, 3757, 2882, 3808, 3538, 3929,
2879, 645, 327, 587, 2354, 2152, 2604};
constexpr int mangledkT2[] = {173, 3828, 3704, 3319, 3921, 1345, 3443, 3932, 2674, 3556,
3712, 2915, 3558, 3985, 956, 921, 2744, 3923, 3636, 3636,
691, 3023, 1304, 3929, 1473, 4212, 867, 1982, 3185, 2400,
2895, 3809, 381, 3781, 1058, 4317, 2036};
constexpr int mangledkG[] = {
0, 0, 0, 0, 0, 0, 0, 0, 4046, 0, 0, 0, 3913, 0, 0, 0,
0, 1688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1126, 0,
0, 0, 0, 0, 0, 0, 0, 1324, 0, 0, 559, 3047, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 3078, 4432, 0, 0, 0, 4398,
1246, 0, 0, 0, 2758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 0,
0, 0, 0, 4156, 0, 0, 0, 0, 0, 2014, 0, 0, 0, 0, 0, 0,
3409, 1575, 0, 1860, 818, 1854, 0, 0, 2843, 0, 0, 0, 0, 0, 376, 0,
0, 0, 0, 0, 0, 0, 3906, 0, 982, 0, 0, 0, 1719, 0, 0, 0,
0, 0, 0, 0, 0, 240, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4174, 0, 0, 0,
0, 0, 296, 1398, 0, 1665, 0, 0, 67, 0, 853, 0, 0, 2957, 0, 0,
2419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1211, 0, 0, 3659, 0, 0, 0, 0, 0, 0, 0,
240, 0, 1545, 1946, 0, 0, 0, 2341, 0, 0, 0, 0, 0, 0, 2096, 0,
0, 3018, 0, 0, 0, 0, 0, 2306, 984, 14, 0, 0, 0, 3367, 0, 0,
4406, 0, 0, 0, 0, 3898, 0, 0, 354, 0, 0, 0, 0, 4386, 0, 2046,
0, 0, 0, 0, 0, 1234, 0, 1483, 0, 0, 4335, 228, 2659, 0, 526, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1896, 0, 0, 0, 0,
0, 0, 1728, 0, 0, 0, 2163, 1841, 3798, 0, 0, 0, 890, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 872, 0, 0, 0, 0, 0, 503, 0,
333, 1676, 0, 0, 4356, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
798, 0, 115, 1536, 0, 0, 0, 0, 4327, 0, 0, 0, 0, 0, 0, 0,
3513, 0, 0, 0, 0, 4035, 999, 764, 0, 0, 0, 0, 0, 0, 0, 1127,
2850, 0, 0, 0, 0, 0, 0, 0, 0, 3897, 0, 0, 0, 0, 0, 0,
0, 2732, 1387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 3079, 0, 0,
0, 1425, 0, 0, 0, 874, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1153, 0, 0, 1232, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 3898, 0, 0,
0, 0, 0, 0, 0, 1706, 3200, 3292, 1993, 0, 1020, 3202, 0, 0, 0, 0,
2043, 862, 0, 3541, 0, 0, 3985, 0, 0, 0, 0, 0, 0, 75, 0, 0,
0, 0, 3555, 1345, 640, 0, 0, 0, 0, 0, 0, 0, 2041, 0, 3950, 874,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 412,
0, 0, 0, 0, 4409, 0, 0, 3255, 0, 0, 0, 0, 0, 0, 0, 0,
896, 0, 0, 0, 4344, 4215, 0, 0, 3028, 0, 0, 0, 1697, 269, 0, 0,
0, 0, 1530, 0, 0, 4216, 1620, 0, 0, 0, 0, 611, 498, 0, 0, 452,
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1757, 0, 0, 117, 1172,
0, 900, 4137, 0, 0, 3639, 1838, 0, 0, 793, 0, 0, 0, 0, 191, 0,
0, 0, 0, 2407, 0, 0, 0, 311, 0, 0, 0, 0, 824, 0, 1560, 0,
0, 2105, 0, 0, 1522, 4347, 0, 1445, 1601, 0, 3674, 0, 2444, 0, 0, 0,
0, 1467, 1387, 3874, 2896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2099, 0, 0, 3277, 0, 1100, 0, 0, 2418, 0, 0, 1616, 0, 3212, 0, 328,
0, 0, 0, 2574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
773, 0, 0, 0, 0, 1652, 0, 2750, 955, 719, 0, 0, 0, 0, 383, 0,
0, 0, 0, 0, 0, 0, 0, 1385, 0, 0, 84, 0, 0, 0, 3263, 0,
0, 0, 3517, 0, 0, 0, 0, 0, 1634, 0, 1931, 2758, 0, 0, 0, 0,
3887, 570, 851, 0, 0, 1408, 1789, 0, 0, 1637, 590, 0, 0, 0, 0, 891,
0, 0, 0, 2412, 0, 0, 0, 0, 0, 0, 3824, 0, 0, 131, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 0, 3632,
0, 0, 0, 0, 0, 876, 0, 0, 1684, 0, 3820, 0, 0, 0, 0, 1902,
2531, 677, 0, 3733, 1261, 139, 1652, 0, 0, 0, 1331, 1631, 0, 0, 0, 0,
0, 515, 1197, 645, 0, 2137, 203, 0, 0, 0, 0, 369, 469, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1816, 782, 0, 3192, 0, 1959, 0,
243, 0, 573, 0, 0, 0, 3141, 0, 0, 0, 0, 0, 290, 1751, 0, 0,
1943, 0, 0, 1021, 2402, 0, 2671, 0, 2747, 4067, 0, 0, 0, 0, 0, 0,
3845, 4125, 0, 356, 0, 0, 2585, 0, 0, 0, 1626, 0, 0, 4289, 0, 0,
0, 0, 990, 916, 302, 0, 0, 0, 0, 0, 2310, 0, 4383, 0, 0, 2396,
0, 4088, 1847, 0, 3847, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 1091,
0, 0, 0, 2669, 0, 4148, 0, 0, 0, 0, 630, 0, 251, 0, 3728, 0,
1546, 1879, 0, 3815, 0, 1548, 1389, 0, 2596, 3228, 314, 3563, 3798, 0, 206, 3170,
0, 0, 2316, 0, 3357, 3608, 0, 0, 466, 0, 101, 3756, 0, 0, 0, 2093,
780, 0, 0, 0, 2844, 0, 0, 0, 0, 0, 1190, 201, 0, 0, 0, 0,
0, 480, 0, 4413, 4024, 0, 36, 0, 0, 1795, 1037, 0, 0, 0, 3440, 1528,
0, 0, 1643, 0, 3495, 0, 0, 1786, 0, 0, 0, 0, 0, 0, 0, 90,
3083, 3508, 3718, 2824, 0, 0, 3774, 0, 0, 0, 0, 150, 0, 0, 4245, 0,
1010, 1446, 0, 0, 0, 0, 0, 981, 0, 689, 0, 422, 0, 0, 4075, 0,
0, 0, 0, 739, 316, 0, 0, 0, 0, 964, 0, 1060, 0, 0, 3893, 0,
1724, 126, 0, 0, 0, 428, 3764, 0, 411, 0, 0, 0, 0, 0, 1164, 3790,
0, 0, 0, 454, 879, 0, 0, 0, 1677, 0, 1093, 0, 1249, 843, 524, 0,
0, 0, 3691, 0, 0, 1343, 3408, 0, 0, 1798, 0, 251, 0, 0, 0, 0,
0, 4121, 0, 0, 3993, 1416, 0, 779, 0, 0, 0, 0, 0, 2935, 0, 0,
930, 0, 749, 0, 0, 0, 0, 499, 0, 1031, 2063, 1762, 1334, 2398, 0, 875,
0, 1016, 0, 0, 0, 0, 0, 0, 0, 273, 2030, 1220, 0, 0, 3271, 0,
0, 0, 0, 1910, 0, 0, 0, 0, 0, 0, 0, 0, 597, 1737, 2139, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 1123, 0, 0,
1124, 3860, 203, 675, 0, 4057, 0, 0, 745, 0, 0, 0, 1175, 0, 3140, 64,
0, 2640, 0, 104, 0, 2072, 772, 0, 0, 0, 0, 547, 0, 0, 0, 1312,
0, 0, 0, 0, 1870, 0, 3993, 2934, 0, 0, 2777, 0, 4314, 648, 0, 677,
0, 2942, 0, 452, 0, 3622, 0, 4209, 0, 0, 1009, 0, 0, 0, 0, 0,
1023, 0, 312, 1713, 1127, 0, 866, 0, 0, 0, 0, 0, 2113, 510, 4204, 0,
0, 0, 0, 0, 645, 213, 0, 0, 1985, 1181, 0, 1408, 165, 931, 76, 0,
0, 1291, 4264, 0, 1507, 1278, 0, 0, 0, 0, 630, 0, 0, 513, 1092, 4033,
0, 4339, 930, 0, 450, 1569, 4389, 0, 0, 0, 0, 982, 0, 0, 897, 0,
1706, 0, 1963, 0, 0, 789, 2035, 0, 813, 342, 0, 3001, 0, 230, 0, 2916,
0, 0, 2637, 1897, 0, 0, 0, 0, 0, 882, 37, 0, 2120, 0, 2968, 0,
0, 567, 0, 3458, 0, 0, 0, 0, 730, 0, 3579, 0, 1364, 0, 0, 4416,
0, 0, 3773, 1046, 3779, 0, 540, 1666, 1678, 0, 822, 0, 0, 0, 0, 0,
0, 900, 1908, 0, 0, 0, 4332, 4273, 1025, 739, 2558, 216, 368, 0, 0, 0,
2454, 857, 0, 148, 451, 0, 0, 170, 0, 0, 1104, 0, 216, 0, 1662, 782,
0, 0, 0, 1240, 1098, 4298, 0, 0, 0, 0, 449, 0, 0, 0, 69, 0,
0, 0, 669, 0, 797, 0, 266, 2615, 2513, 0, 1231, 0, 1362, 0, 0, 0,
2775, 0, 165, 0, 0, 0, 1516, 0, 963, 0, 0, 0, 805, 0, 0, 0,
0, 0, 1258, 0, 4209, 0, 1035, 84, 0, 760, 0, 2044, 0, 0, 1164, 42,
1205, 35, 0, 3565, 2849, 0, 2741, 2048, 0, 2451, 0, 0, 0, 0, 0, 0,
2880, 720, 1617, 0, 1493, 0, 0, 0, 0, 3678, 0, 0, 2489, 0, 2423, 0,
1279, 469, 3735, 408, 0, 2886, 0, 0, 0, 0, 0, 0, 1616, 223, 3639, 923,
1892, 0, 3758, 0, 0, 0, 0, 3901, 1934, 0, 0, 0, 0, 0, 31, 962,
3425, 0, 169, 766, 169, 0, 0, 369, 0, 137, 2234, 0, 0, 0, 1699, 3838,
3523, 561, 109, 3650, 0, 1784, 3960, 1203, 0, 0, 0, 0, 0, 86, 0, 0,
2396, 0, 1855, 0, 0, 0, 0, 0, 3004, 0, 2934, 904, 0, 4399, 29, 0,
902, 1046, 3238, 0, 0, 0, 1763, 0, 628, 0, 0, 88, 0, 0, 2368, 0,
0, 0, 704, 2780, 0, 604, 0, 0, 360, 4304, 2313, 271, 0, 0, 0, 222,
3006, 880, 0, 3146, 1328, 1562, 1138, 101, 4260, 84, 1737, 1511, 4327, 0, 2211, 1612,
0, 0, 0, 952, 0, 3654, 1919, 1720, 0, 0, 0, 1716, 3380, 1891, 0, 1351,
0, 97, 0, 0, 3450, 0, 3751, 3934, 0, 0, 704, 0, 0, 0, 0, 0,
1929, 94, 0, 1166, 0, 60, 0, 87, 0, 1128, 0, 0, 654, 0, 4131, 1291,
0, 175, 0, 700, 1706, 0, 0, 0, 0, 0, 0, 180, 1705, 2132, 235, 0,
1290, 578, 0, 815, 0, 0, 4050, 0, 0, 0, 163, 0, 2590, 0, 0, 0,
0, 0, 347, 0, 1960, 0, 0, 3038, 0, 3307, 3297, 0, 0, 1848, 0, 1211,
0, 0, 0, 0, 0, 2903, 50, 64, 2403, 1253, 0, 622, 0, 0, 1984, 3035,
0, 0, 1332, 3984, 1098, 4181, 0, 0, 0, 623, 0, 1503, 0, 0, 1202, 0,
405, 281, 0, 2447, 0, 0, 1010, 0, 192, 0, 3923, 554, 0, 0, 0, 1216,
0, 354, 1150, 0, 3779, 0, 0, 0, 1086, 1257, 4383, 0, 0, 4128, 0, 3408,
3718, 3991, 0, 0, 0, 2006, 0, 0, 3731, 0, 0, 4216, 1907, 1880, 0, 0,
1698, 1335, 812, 0, 0, 0, 4173, 0, 3273, 0, 0, 881, 0, 4111, 0, 0,
0, 0, 1740, 0, 991, 4135, 0, 0, 0, 99, 3182, 0, 3246, 1752, 1853, 0,
2670, 0, 2896, 2800, 1790, 208, 1188, 0, 3136, 0, 292, 1489, 641, 1693, 0, 1837,
413, 2584, 0, 0, 0, 0, 0, 373, 0, 2199, 362, 4049, 2535, 57, 2776, 0,
3416, 0, 0, 1123, 0, 2573, 0, 0, 416, 2966, 0, 716, 0, 455, 0, 1352,
0, 0, 1086, 1996, 444, 2239, 914, 0, 3600, 0, 0, 0, 0, 0, 1159, 0,
0, 99, 4250, 0, 2033, 3204, 3970, 0, 446, 0, 0, 0, 0, 0, 1869, 2409,
0, 0, 0, 0, 1341, 0, 1696, 0, 589, 0, 3326, 4332, 0, 0, 3146, 0,
0, 0, 0, 195, 0, 0, 0, 0, 0, 374, 2590, 2571, 1804, 0, 0, 0,
0, 178, 1641, 444, 4049, 0, 4038, 575, 0, 0, 258, 1456, 0, 0, 2000, 1085,
0, 1911, 0, 0, 0, 3651, 0, 311, 1771, 0, 4083, 2800, 0, 0, 0, 0,
0, 553, 534, 0, 440, 0, 0, 2082, 0, 0, 0, 2524, 1559, 4115, 2154, 0,
0, 0, 389, 0, 363, 0, 871, 2076, 1097, 3734, 3674, 0, 244, 3638, 0, 1541,
0, 203, 1051, 1630, 0, 0, 2713, 0, 0, 0, 915, 0, 0, 0, 2988, 0,
0, 0, 0, 4329, 3873, 0, 0, 1676, 0, 0, 0, 1839, 1017, 560, 0, 0,
4372, 0, 0, 169, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 44, 1440,
397, 0, 0, 158, 0, 709, 0, 2456, 2069, 4250, 0, 1729, 0, 0, 0, 0,
1508, 0, 0, 68, 0, 0, 443, 2979, 2402, 0, 0, 0, 0, 3208, 0, 2317,
0, 37, 376, 4204, 0, 2224, 0, 0, 50, 219, 729, 3407, 1141, 0, 1769, 0,
563, 451, 193, 238, 58, 3468, 0, 3863, 0, 91, 1053, 0, 2888, 0, 1887, 4176,
0, 620, 0, 478, 0, 0, 1481, 0, 4074, 0, 0, 0, 596, 0, 0, 0,
1435, 0, 2441, 1374, 0, 0, 4208, 2090, 0, 0, 0, 3760, 0, 0, 1134, 109,
2325, 797, 0, 0, 0, 996, 497, 1077, 0, 2551, 329, 322, 0, 0, 1925, 0,
0, 1118, 0, 1481, 3885, 0, 261, 0, 0, 0, 0, 0, 0, 174, 0, 0,
0, 1376, 0, 1617, 0, 576, 0, 3778, 0, 961, 1375, 4359, 0, 1542, 143, 0,
733, 0, 4026, 2149, 0, 1675, 339, 1811, 0, 0, 0, 1612, 0, 0, 2146, 0,
0, 0, 3890, 0, 218, 0, 1250, 0, 4070, 0, 0, 2363, 4280, 231, 0, 0,
1236, 1568, 3398, 448, 0, 0, 3680, 674, 0, 1743, 0, 0, 4012, 830, 3922, 1380,
658, 0, 2166, 293, 1824, 0, 0, 1102, 0, 3662, 1902, 228, 0, 0, 0, 0,
0, 41, 1793, 2577, 0, 0, 726, 4196, 0, 0, 0, 0, 2824, 0, 0, 4408,
0, 0, 0, 1779, 3767, 3623, 1313, 0, 0, 1780, 0, 1149, 1648, 0, 2360, 0,
4117, 646, 0, 0, 1661, 2840, 0, 3553, 0, 1867, 2797, 0, 0, 0, 0, 3265,
799, 4307, 0, 386, 0, 490, 4172, 1695, 0, 0, 0, 696, 0, 524, 480, 3188,
2035, 891, 0, 0, 0, 0, 1409, 262, 242, 700, 0, 0, 845, 2268, 1247, 1646,
2602, 0, 1048, 0, 3406, 408, 0, 584, 0, 1680, 0, 0, 2036, 0, 0, 274,
0, 0, 0, 0, 0, 3781, 0, 168, 4136, 16, 164, 136, 1992, 0, 406, 0,
0, 1967, 0, 3903, 2555, 0, 1280, 3742, 537, 1272, 966, 797, 2924, 0, 1952, 1013,
0, 1923, 0, 1397, 1507, 497, 0, 0, 401, 923, 455, 0, 0, 4122, 1592, 4257,
0, 1350, 1364, 4006, 3958, 0, 1301, 1947, 0, 2168, 818, 187, 0, 0, 0, 1324,
0, 1438, 1375, 0, 2397, 2984, 0, 1864, 252, 0, 0, 0, 0, 2361, 395, 0,
2309, 814, 0, 802, 0, 3423, 1205, 0, 0, 465, 0, 0, 0, 4179, 0, 2954,
4373, 1898, 1202, 2019, 0, 2057, 0, 0, 1190, 1647, 4065, 0, 268, 3437, 0, 678,
1061, 0, 0, 0, 0, 613, 403, 2081, 0, 0, 2063, 2059, 0, 1683, 1069, 358,
637, 396, 0, 0, 980, 0, 1211, 1120, 651, 1280, 969, 846, 3385, 4414, 0, 0,
337, 0, 1750, 788, 1163, 0, 0, 0, 113, 616, 1822, 0, 0, 0, 491, 0,
0, 1911, 0, 0, 0, 974, 0, 1641, 2128, 0, 0, 0, 0, 650, 419, 345,
0, 0, 0, 1569, 791, 0, 660, 0, 1915, 361, 1658, 1717, 324, 0, 0, 1290,
0, 2282, 280, 0, 416, 1629, 0, 2152, 4186, 904, 3459, 0, 0, 2017, 0, 0,
0, 0, 267, 1207, 1198, 4348, 0, 0, 250, 0, 0, 0, 3204, 1165, 817, 2708,
1012, 0, 0, 482, 1649, 0, 1745, 0, 980, 761, 0, 0, 3182, 0, 0, 1287,
0, 0, 905, 410, 1246, 566, 0, 756, 4011, 0, 2273, 2742, 0, 375, 1787, 695,
0, 3955, 471, 0, 3229, 202, 3939, 1958, 436, 318, 0, 0, 0, 4009, 0, 617,
1530, 699, 1307, 1945, 0, 2074, 1869, 583, 1664, 120, 1156, 1879, 0, 0, 3457, 1710,
0, 0, 0, 0, 318, 926, 0, 0, 1650, 0, 0, 957, 0, 0, 0, 0,
0, 0, 0, 0, 0, 592, 4318, 0, 9, 4355, 911, 973, 0, 3257, 0, 78,
0, 1024, 0, 0, 0, 3569, 0, 1532, 0, 0, 571, 1217, 350, 0, 0, 0,
3742, 0, 359, 0, 1178, 0, 0, 839, 1834, 994, 65, 59, 0, 0, 4289, 69,
0, 0, 0, 2795, 746, 0, 0, 305, 0, 0, 0, 0, 0, 3674, 0, 0,
0, 3899, 0, 1828, 1851, 2091, 0, 1700, 4120, 913, 0, 188, 0, 3340, 1848, 984,
0, 0, 4345, 0, 1948, 3914, 1915, 0, 0, 1721, 0, 2950, 0, 0, 0, 0,
456, 300, 2456, 803, 0, 509, 1737, 0, 0, 0, 0, 2049, 0, 16, 407, 0,
506, 352, 1668, 1465, 0, 0, 0, 1298, 0, 0, 0, 390, 3405, 0, 0, 0,
2027, 842, 1321, 1194, 0, 0, 935, 0, 0, 0, 0, 546, 1221, 0, 0, 396,
1452, 4370, 0, 0, 0, 0, 2029, 0, 0, 826, 1297, 4178, 0, 764, 0, 4253,
1954, 0, 0, 0, 1357, 0, 1214, 0, 0, 0, 0, 2712, 0, 1269, 0, 2851,
0, 507, 332, 0, 4198, 0, 0, 0, 1545, 0, 0, 0, 0, 230, 496, 0,
3648, 0, 1465, 0, 0, 278, 0, 2294, 1121, 0, 832, 0, 1789, 3253, 1445, 3773,
2820, 512, 4259, 1924, 3447, 0, 0, 0, 1741, 255, 0, 3039, 1501, 0, 2854, 1484,
1325, 838, 897, 549, 3815, 1736, 0, 129, 3982, 4324, 0, 1955, 2835, 0, 1594, 0,
686, 4385, 71, 1672, 1799, 4169, 0, 0, 1012, 0, 0, 1686, 0, 864, 0, 1120,
0, 2792, 0, 0, 1227, 0, 655, 785, 1315, 655, 1893, 0, 0, 0, 3540, 2028,
0, 3509, 1283, 1075, 0, 0, 0, 4368, 2010, 0, 0, 969, 2626, 4070, 1159, 1998,
0, 860, 3518, 0, 1754, 4247, 34, 4167, 1467, 0, 1894, 178, 0, 0, 0, 1203,
0, 0, 1593, 0, 867, 3802, 473, 0, 0, 0, 551, 1061, 972, 0, 0, 0,
0, 451, 3555, 0, 2097, 3002, 0, 2043, 0, 0, 926, 1990, 1201, 0, 0, 0,
2083, 690, 0, 0, 0, 0, 0, 0, 1180, 489, 3296, 1558, 2379, 569, 3423, 453,
574, 0, 0, 0, 511, 798, 0, 0, 0, 1147, 731, 829, 1112, 3623, 0, 0,
3548, 0, 0, 2031, 1090, 3615, 0, 637, 3063, 0, 292, 499, 0, 0, 0, 2989,
1413, 611, 1114, 2129, 0, 0, 0, 1303, 4279, 0, 1950, 0, 3053, 1591, 854, 2996,
1181, 0, 742, 939, 840, 1319, 0, 4025, 3328, 0, 3242, 2929, 2251, 0, 1988, 1670,
1350, 0, 3672, 0, 0, 0, 3553, 0, 0, 157, 1015, 0, 0, 0, 4053, 1517,
0, 0, 0, 0, 677, 0, 0, 3545, 750, 599, 0, 0, 4404, 0, 1852, 1513,
0, 412, 0, 0, 4128, 284, 0, 473, 442, 24, 3048, 0, 455, 0, 2433, 684,
470, 276, 594, 700, 1282, 0, 0, 0, 1586, 103, 0, 888, 0, 1559, 1476, 841,
0, 2709, 3176, 1538, 486, 0, 119, 0, 0, 1992, 0, 370, 453, 0, 206, 1839,
240, 2465, 383, 727, 689, 0, 1083, 4384, 0, 1151, 1688, 0, 2026, 1388, 1075, 0,
177, 2683, 0, 4405, 1962, 3120, 4162, 0, 0, 247, 720, 0, 0, 714, 1552, 1043,
417, 0, 197, 0, 729, 1098, 0, 106, 0, 801, 3127, 0, 0, 1459, 309, 0,
737, 316, 1451, 67, 275, 400, 135, 93, 4001, 3413, 0, 372, 4022, 1371, 146, 4242,
847, 0, 959, 1431, 4173, 4172, 708, 0, 249, 3339, 112, 0, 1866, 2450, 3786, 0,
1653, 1627, 0, 0, 0, 0, 4325, 1809, 351, 1199, 3317, 0, 4271, 1685, 883, 2360,
939, 836, 0, 0, 2395, 0, 1135, 0, 800, 337, 0, 0, 4292, 3378, 0, 4239,
0, 37, 2292, 0, 0, 0, 1629, 0, 792, 0, 2073, 1096, 541, 0, 263, 1237,
3719, 1463, 0, 0, 2130, 0, 1861, 512, 0, 853, 649, 2388, 1035, 1904, 0, 969,
0, 1492, 615, 3658, 313, 340, 1217, 3502, 1555, 1407, 833, 999, 2591, 2118, 0, 704,
4231, 0, 279, 0, 2642, 1822, 1715, 1707, 1030, 2920, 2567, 0, 0, 0, 0, 0,
2900, 3155, 0, 3667, 1772, 2, 0, 1078, 2977, 0, 0, 0, 2729, 0, 1442, 0,
0, 0, 0, 0, 3920, 0, 0, 3935, 0, 1268, 0, 0, 445, 1392, 1363, 0,
0, 1065, 0, 488, 174, 3583, 2426, 1695, 0, 0, 1701, 947, 2725, 506, 1912, 0,
0, 2584, 783, 0, 73, 63, 8, 0, 4059, 281, 0, 0, 0, 200, 1234, 0,
0, 0, 2040, 0, 0, 491, 2550, 0, 270, 0, 0, 3633, 0, 545, 0, 1828,
0, 2017, 776, 2246, 1943, 3754, 0, 1359, 3380, 1757, 0, 0, 1655, 0, 972, 0,
820, 0, 721, 0, 902, 0, 4345, 139, 833, 0, 613, 3566, 2190, 1456, 4312, 0,
0, 0, 0, 21, 0, 2853, 0, 0, 675, 2107, 0, 293, 0, 479, 0, 0,
2196, 1468, 0, 0, 484, 0, 2156, 0, 946, 145, 1120, 1186, 0, 172, 1633, 1336,
0, 0, 289, 3205, 0, 256, 593, 968, 0, 3951, 0, 1419, 2564, 2002, 0, 0,
1740, 0, 0, 4287, 0, 1653, 1921, 570, 0, 1034, 0, 1124, 662, 0, 0, 1755,
1400, 0, 0, 0, 316, 0, 0, 0, 1490, 0, 0, 0, 0, 0, 1541, 4087,
0, 1393, 0, 948, 0, 4399, 1366, 0, 239, 0, 0, 4434, 0, 0, 247, 0,
3410, 0, 677, 412, 3905, 0, 2360, 0, 3052, 0, 838, 1582, 0, 1221, 0, 0,
0, 1453, 528, 2773, 0, 515, 0, 2112, 3720, 1068, 3636, 378, 0, 1726, 778, 4077,
0, 0, 0, 55, 1311, 1115, 1243, 0, 0, 3736, 1583, 0, 2313, 1409, 213, 0,
3382, 0, 0, 1182, 1514, 993, 853, 1962, 0, 0, 1307, 693, 0, 1299, 382, 0,
843, 0, 0, 2964, 515, 1136, 0, 0, 0, 0, 0, 1064, 1333, 0, 1655, 3331,
1533, 3489, 0, 1758, 2071, 51, 2062, 0, 0, 0, 3874, 4331, 2770, 0, 1815, 0,
0, 3463, 0, 1133, 682, 3269, 0, 991, 685, 0, 1954, 4084, 435, 0, 270, 0,
485, 4390, 1306, 0, 743, 192, 3816, 0, 0, 1694, 1547, 4004, 1444, 1348, 754, 345,
0, 2231, 945, 1737, 2846, 0, 893, 1224, 664, 1978, 0, 410, 3665, 1977, 1389, 0,
568, 0, 785, 938, 2869, 1699, 820, 0, 0, 14, 124, 0, 3984, 58, 0, 2133,
0, 0, 4166, 0, 1983, 0, 0, 1672, 1835, 2693, 3941, 850, 0, 1504, 0, 0,
0, 166, 2235, 3296, 0, 3197, 1921, 1293, 0, 789, 0, 0, 0, 0, 0, 0,
735, 472, 2520, 657, 1893, 1044, 4135, 0, 1939, 551, 0, 0, 0, 0, 753, 0,
0, 1206, 985, 0, 1472, 377, 218, 2261, 1553, 3987, 1622, 0, 4395, 2758, 1471, 4329,
110, 1951, 308, 212, 312, 0, 3532, 1846, 1738, 0, 2034, 0, 1002, 248, 1935, 0,
0, 1105, 0, 0, 4251, 315, 0, 167, 2505, 361, 0, 3188, 422, 0, 0, 0,
0, 0, 0, 1639, 0, 1178, 1681, 3464, 1113, 962, 0, 0, 1164, 803, 807, 0,
0, 0, 0, 0, 0, 0, 1541, 0, 0, 723, 0, 255, 0, 0, 196, 0,
0, 1239, 4332, 0, 161, 0, 0, 0, 12, 663, 899, 1396, 0, 706, 3925, 3944,
0, 1580, 580, 0, 770, 0, 0, 0, 1308, 0, 0, 3245, 0, 1509, 1581, 4074,
796, 0, 67, 1991, 2099, 0, 0, 756, 1332, 0, 3100, 1685, 473, 0, 0, 3556,
310, 1742, 0, 99, 0, 0, 0, 1615, 1045, 0, 0, 4293, 0, 0, 63, 1454,
1201, 1423, 3959, 0, 0, 1550, 1409, 0, 338, 0, 0, 4084, 0, 0, 0, 0,
1808, 0, 0, 544, 0, 2445, 1182, 1095, 45, 0, 2143, 0, 1297, 3930, 1618, 4262,
271, 945, 2502, 0, 0, 3228, 0, 0, 1921, 0, 0, 0, 52, 1704, 510, 556,
571, 0, 4124, 0, 2102, 3796, 0, 889, 0, 0, 44, 1938, 629, 224, 0, 0,
0, 0, 385, 1554, 0, 2228, 139, 0, 627, 1972, 335, 62, 669, 1773, 0, 2083,
1366, 0, 1471, 0, 498, 3988, 0, 522, 0, 205, 1606, 1757, 3023, 0, 1010, 564,
107, 628, 1884, 0, 3461, 1369, 585, 0, 1725, 3483, 3024, 653, 4278, 1602, 889, 372,
220, 1198, 460, 0, 1165, 0, 863, 0, 0, 0, 0, 496, 3563, 1046, 0, 0,
0, 0, 1745, 1158, 2089, 125, 857, 0, 2195, 0, 619, 4298, 0, 0, 0, 732,
313, 711, 0, 1694, 372, 0, 1326, 930, 4009, 1224, 0, 1090, 3888, 2008, 1390, 3070,
2099, 2815, 3538, 3573, 1715, 4373, 0, 0, 1474, 1076, 2760, 1542, 0, 861, 0, 0,
0, 0, 0, 944, 4203, 990, 3499, 0, 0, 177, 1642, 0, 1222, 0, 196, 3731,
0, 0, 1858, 0, 0, 2971, 0, 678, 0, 3380, 601, 698, 2915, 3734, 0, 2065,
0, 0, 2780, 1479, 0, 0, 1624, 0, 0, 0, 2957, 2660, 3970, 0, 196, 392,
0, 754, 0, 0, 0, 0, 1601, 1405, 2884, 1413, 4185, 0, 1844, 104, 1007, 2054,
0, 0, 700, 0, 336, 0, 3635, 202, 0, 0, 0, 1449, 798, 758, 522, 2544,
0, 34, 0, 2092, 434, 146, 0, 0, 4294, 0, 4276, 863, 0, 3228, 0, 725,
4420, 987, 0, 1882, 0, 1881, 3797, 1764, 2024, 2690, 0, 220, 0, 549, 1106, 505,
1260, 0, 0, 2110, 3273, 0, 768, 2086, 0, 795, 3357, 4368, 142, 0, 3030, 10,
1109, 1192, 0, 3817, 3209, 2265, 983, 170, 0, 0, 1582, 0, 0, 0, 480, 943,
0, 1295, 1216, 1460, 1193, 0, 0, 368, 1386, 3889, 764, 0, 1310, 0, 2126, 1118,
1355, 0, 1486, 1056, 2964, 1596, 4059, 0, 0, 2131, 3414, 29, 910, 555, 1830, 982,
2894, 3557, 0, 2950, 2127, 2982, 360, 0, 0, 1204, 0, 1170, 0, 0, 1242, 282,
1052, 1942, 0, 2124, 0, 289, 511, 527, 0, 0, 4314, 3611, 0, 911, 1100, 0,
118, 479, 1874, 3541, 344, 259, 3202, 0, 3182, 127, 1813, 1476, 0, 0, 0, 0,
2944, 468, 0, 521, 0, 578, 0, 808, 0, 450, 1054, 425, 850, 1197, 0, 715,
0, 1203, 4109, 2110, 0, 0, 1093, 0, 2023, 760, 1473, 0, 0, 1944, 0, 72,
0, 1519, 1, 3083, 440, 1294, 671, 739, 4179, 1407, 0, 0, 3482, 1356, 1345, 2094,
0, 209, 732, 0, 1134, 1230, 3570, 1386, 1806, 424, 302, 1604, 662, 2635, 0, 0,
1469, 0, 820, 0, 1600, 0, 47, 894, 1388, 4282, 0, 855, 2659, 0, 2707, 3184,
3384, 0, 0, 47, 0, 0, 1454, 1646, 958, 4262, 0, 0, 0, 1630, 0, 0,
0, 3738, 2920, 0, 2965, 0, 362, 0, 0, 0, 1026, 0, 547, 4297, 1897, 973,
1775, 0, 3494, 2714, 3430, 852, 1497, 1432, 0, 4150, 2123, 40, 1254, 697, 912, 0,
4211, 0, 878, 0, 1346};
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2630, 3675, 882, 0, 3822, 0, 0, 0, 0, 0, 1494,
1899, 0, 0, 2963, 0, 0, 0, 1859, 0, 0, 0, 0, 0, 0, 0, 0,
4374, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 3537, 0, 0, 0, 0, 0, 0, 0, 0, 3291, 3382, 0, 0, 0,
4267, 0, 0, 0, 0, 0, 0, 0, 4011, 0, 0, 0, 0, 0, 2849, 2820,
0, 0, 4136, 0, 0, 4107, 0, 0, 0, 0, 1640, 955, 0, 0, 3367, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 0,
3769, 0, 0, 0, 4347, 0, 0, 0, 0, 0, 0, 0, 3664, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 864,
4374, 0, 0, 0, 0, 0, 0, 2269, 0, 0, 0, 0, 0, 0, 438, 0,
0, 0, 0, 0, 0, 0, 4295, 4046, 0, 0, 517, 2304, 3284, 0, 0, 0,
0, 0, 0, 0, 0, 3597, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0,
1142, 4180, 0, 0, 0, 751, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1364, 1250, 4066, 0, 3333, 0, 0, 0, 0, 0, 0, 0, 2206, 2883,
0, 0, 0, 0, 3226, 0, 0, 0, 0, 3858, 0, 0, 1113, 0, 0, 0,
0, 0, 3999, 0, 4391, 0, 4102, 0, 0, 0, 0, 3875, 0, 0, 0, 0,
1243, 0, 613, 2744, 559, 0, 0, 0, 0, 1145, 194, 0, 0, 0, 0, 2883,
4271, 1209, 0, 3568, 0, 1870, 0, 0, 0, 0, 1281, 2427, 2360, 0, 4183, 3437,
0, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2306, 0, 0, 1157, 4242,
2811, 0, 0, 0, 0, 2198, 0, 0, 2406, 2596, 3, 0, 0, 0, 0, 0,
0, 0, 4311, 2906, 463, 0, 894, 0, 4245, 0, 1024, 2083, 0, 0, 1553, 2733,
0, 0, 1201, 0, 0, 0, 1477, 0, 3057, 452, 0, 0, 0, 0, 1223, 0,
0, 1324, 0, 2477, 0, 0, 0, 0, 669, 3599, 0, 0, 0, 1006, 3579, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3250, 0, 0, 0, 3221, 3883, 1203,
0, 0, 4408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1011, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 3054,
446, 0, 0, 0, 634, 4156, 0, 0, 0, 1903, 0, 4037, 3641, 0, 0, 0,
0, 0, 961, 4328, 3145, 3282, 0, 2003, 1632, 0, 0, 0, 1628, 1632, 0, 4073,
0, 0, 648, 3234, 0, 922, 0, 1625, 0, 0, 0, 0, 0, 0, 0, 2729,
0, 589, 0, 0, 0, 0, 4244, 958, 0, 0, 0, 0, 0, 0, 0, 0,
0, 758, 0, 0, 0, 0, 0, 2159, 0, 185, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 212, 1099, 0, 11, 0, 1789,
0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 900, 4153, 0,
0, 1095, 0, 0, 0, 0, 0, 0, 0, 655, 3766, 634, 1640, 0, 0, 0,
846, 0, 1155, 0, 0, 0, 0, 191, 3422, 0, 0, 0, 1242, 855, 4108, 2813,
2941, 0, 337, 592, 0, 1502, 3892, 0, 0, 0, 4198, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1794, 0, 0, 0, 0, 4224, 0, 0, 1144, 0, 0,
199, 0, 1702, 0, 84, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 1731,
851, 311, 0, 3240, 0, 0, 0, 365, 0, 0, 4302, 0, 0, 0, 0, 2975,
0, 0, 0, 0, 1808, 904, 3894, 796, 0, 0, 0, 0, 0, 0, 0, 1424,
0, 0, 0, 3503, 0, 117, 0, 4034, 0, 0, 2155, 0, 1588, 0, 0, 0,
399, 0, 0, 0, 3811, 568, 1220, 443, 0, 1640, 0, 1657, 0, 0, 0, 0,
3427, 0, 0, 4376, 1148, 0, 0, 582, 0, 0, 895, 0, 0, 0, 0, 1907,
3439, 0, 1265, 0, 0, 0, 0, 0, 3103, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 505, 0, 0, 0, 0, 563, 1942, 565, 0, 0, 0, 0, 0,
1667, 0, 0, 0, 0, 1897, 0, 643, 0, 0, 241, 0, 586, 1821, 0, 1918,
0, 0, 0, 4292, 0, 1416, 0, 0, 1289, 0, 0, 3144, 0, 0, 2147, 194,
0, 572, 0, 0, 0, 0, 0, 0, 862, 0, 2245, 0, 0, 1625, 1025, 0,
0, 500, 0, 0, 0, 0, 0, 2699, 0, 2101, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 1944, 0, 0, 0, 0, 0,
0, 0, 0, 1964, 1234, 0, 541, 0, 1214, 467, 0, 0, 4033, 0, 0, 0,
0, 0, 0, 0, 0, 1392, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0,
4421, 386, 1242, 0, 2144, 0, 0, 775, 891, 0, 0, 0, 0, 0, 0, 414,
2413, 1636, 0, 482, 0, 1731, 1041, 3244, 0, 0, 3311, 0, 1450, 0, 0, 1551,
0, 283, 0, 0, 0, 704, 0, 1619, 0, 1060, 0, 243, 1948, 0, 477, 0,
225, 1547, 4432, 0, 0, 0, 0, 0, 0, 1198, 543, 985, 2987, 77, 710, 0,
0, 0, 0, 0, 0, 0, 1532, 0, 0, 0, 1868, 0, 735, 0, 0, 0,
742, 4107, 2126, 1284, 0, 2674, 3313, 0, 0, 0, 0, 0, 0, 0, 1708, 0,
3977, 28, 2591, 0, 3589, 698, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0,
2437, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1302, 97, 0, 1347,
0, 0, 0, 0, 0, 0, 1580, 0, 556, 2831, 777, 0, 0, 0, 0, 0,
0, 0, 0, 892, 1682, 0, 0, 0, 0, 3598, 455, 752, 1230, 0, 1435, 4347,
667, 4212, 0, 0, 0, 0, 0, 0, 0, 0, 4366, 1164, 4016, 0, 2234, 0,
0, 0, 412, 3764, 0, 3815, 0, 623, 1845, 0, 0, 0, 0, 0, 318, 0,
0, 0, 4339, 0, 0, 0, 0, 0, 0, 3300, 0, 0, 90, 0, 0, 0,
429, 0, 273, 0, 0, 83, 0, 48, 3941, 0, 124, 0, 0, 2110, 0, 0,
1803, 0, 0, 0, 0, 1224, 1973, 3802, 0, 0, 0, 1784, 0, 0, 0, 599,
1452, 0, 343, 1729, 481, 0, 0, 0, 0, 1035, 1875, 777, 934, 0, 909, 0,
1133, 256, 3598, 0, 0, 0, 0, 4199, 0, 2278, 0, 1919, 1041, 4075, 0, 0,
0, 0, 0, 3325, 3227, 0, 782, 0, 2175, 0, 0, 0, 0, 0, 3535, 0,
86, 0, 531, 0, 0, 112, 0, 516, 0, 1803, 0, 3381, 0, 1576, 1711, 1921,
4439, 0, 3528, 227, 4405, 3857, 0, 2445, 0, 416, 4380, 0, 0, 2008, 360, 0,
3821, 0, 0, 0, 3354, 0, 0, 0, 1116, 79, 0, 0, 2646, 0, 923, 0,
1322, 0, 0, 0, 0, 2012, 1481, 0, 0, 748, 1238, 1581, 0, 4344, 0, 484,
529, 0, 0, 0, 0, 3569, 1728, 0, 0, 2280, 0, 1023, 0, 0, 2158, 4024,
0, 1110, 47, 0, 685, 1314, 0, 0, 0, 0, 0, 0, 0, 380, 0, 1671,
0, 4151, 0, 2491, 1544, 562, 0, 0, 4205, 382, 0, 0, 1378, 0, 1359, 0,
647, 0, 0, 0, 2439, 3870, 4165, 0, 0, 1722, 1029, 0, 0, 0, 0, 0,
1081, 473, 2172, 880, 0, 0, 3863, 36, 4309, 0, 0, 219, 870, 0, 0, 0,
0, 1432, 4012, 0, 465, 4141, 0, 291, 0, 4221, 0, 0, 0, 0, 0, 0,
0, 1003, 1667, 0, 0, 3856, 1231, 0, 122, 0, 0, 2664, 503, 0, 4210, 0,
0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 2103, 0, 0, 0, 165, 0,
0, 1262, 0, 1187, 3016, 0, 0, 0, 2053, 0, 0, 0, 450, 0, 1335, 0,
3609, 0, 0, 0, 0, 0, 0, 2235, 0, 0, 3550, 3839, 0, 0, 938, 0,
926, 1605, 2972, 0, 3235, 777, 1269, 206, 0, 320, 1331, 0, 108, 929, 0, 1573,
0, 1497, 1520, 2609, 1673, 808, 0, 0, 0, 618, 4302, 0, 0, 1489, 1944, 0,
0, 0, 2055, 0, 0, 0, 3953, 0, 0, 0, 0, 2172, 0, 1269, 857, 0,
0, 0, 0, 0, 0, 0, 1119, 0, 0, 0, 0, 149, 0, 892, 1178, 2991,
0, 1413, 3786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3882, 4234, 1833,
0, 704, 0, 2437, 1426, 0, 0, 2945, 4389, 749, 0, 1671, 0, 292, 0, 0,
0, 4118, 0, 0, 0, 4345, 0, 2341, 3107, 1191, 1865, 0, 4227, 266, 506, 0,
0, 0, 0, 2060, 0, 1489, 1272, 0, 1815, 0, 1142, 1527, 598, 3556, 1860, 0,
0, 2996, 1766, 0, 1058, 974, 0, 0, 0, 2555, 2298, 0, 1122, 0, 0, 1979,
0, 0, 0, 0, 1547, 2276, 1040, 762, 558, 1307, 0, 538, 0, 0, 1324, 4139,
2788, 0, 0, 1235, 2945, 2804, 0, 0, 144, 0, 3013, 0, 0, 0, 2226, 0,
1148, 0, 0, 2985, 0, 0, 0, 86, 894, 0, 0, 0, 1495, 0, 1355, 0,
0, 0, 0, 0, 1934, 0, 3815, 236, 169, 1294, 3739, 0, 641, 0, 500, 0,
1338, 0, 0, 1200, 4365, 0, 0, 0, 4107, 0, 0, 4287, 0, 2348, 0, 2492,
3134, 0, 305, 2012, 1617, 0, 0, 819, 1372, 0, 0, 271, 0, 559, 0, 0,
3791, 0, 0, 0, 1380, 0, 1257, 0, 0, 1515, 1730, 0, 0, 2453, 3079, 0,
0, 0, 3938, 1672, 0, 1220, 282, 0, 4013, 0, 0, 1488, 692, 0, 0, 2138,
0, 562, 0, 1460, 0, 0, 2085, 0, 0, 733, 0, 948, 0, 1903, 0, 0,
404, 0, 1696, 1965, 406, 0, 1389, 0, 1836, 0, 0, 1507, 0, 0, 754, 4406,
1768, 644, 0, 0, 3761, 1154, 580, 1143, 0, 0, 2861, 3473, 2257, 0, 0, 0,
3613, 0, 0, 1028, 0, 2011, 308, 0, 0, 0, 1916, 0, 1865, 0, 743, 0,
232, 0, 1648, 0, 0, 0, 0, 470, 0, 1703, 0, 788, 4401, 0, 0, 1819,
1551, 876, 1236, 0, 0, 0, 0, 3257, 0, 1592, 0, 0, 1958, 4062, 0, 0,
0, 1695, 755, 2544, 1806, 0, 1745, 2154, 0, 4408, 1493, 497, 0, 1795, 0, 2147,
624, 643, 2635, 0, 235, 0, 520, 1665, 0, 1975, 0, 0, 0, 353, 3148, 0,
0, 1436, 0, 0, 0, 1223, 445, 1589, 580, 0, 1818, 0, 0, 1698, 0, 1256,
3650, 0, 4240, 0, 0, 0, 3395, 0, 0, 0, 0, 1363, 4172, 2731, 1868, 1336,
0, 0, 2360, 0, 945, 0, 0, 0, 2038, 1620, 0, 0, 0, 4158, 0, 0,
889, 0, 1858, 0, 3318, 0, 269, 0, 0, 0, 195, 0, 804, 1148, 539, 382,
1095, 0, 1686, 0, 0, 0, 2461, 1525, 0, 42, 2474, 21, 4394, 0, 0, 1630,
1420, 3080, 4185, 0, 4176, 1692, 0, 2365, 0, 0, 894, 1093, 1685, 0, 0, 0,
3139, 4269, 657, 535, 4182, 2710, 0, 0, 426, 0, 0, 0, 0, 374, 1692, 257,
3660, 521, 0, 0, 3169, 3396, 256, 394, 4056, 204, 203, 2539, 4408, 1209, 1097, 0,
4188, 0, 792, 0, 166, 0, 1334, 0, 240, 0, 0, 0, 2908, 0, 0, 0,
2383, 1989, 0, 1254, 0, 0, 0, 0, 1126, 980, 0, 0, 0, 4181, 707, 0,
0, 0, 0, 0, 0, 0, 3560, 0, 0, 681, 1931, 191, 461, 0, 2756, 0,
0, 0, 0, 2844, 554, 3968, 0, 1577, 0, 4120, 0, 2824, 0, 0, 0, 0,
30, 0, 0, 4141, 1681, 0, 0, 0, 194, 4009, 2735, 0, 0, 138, 0, 0,
612, 0, 0, 0, 0, 1238, 0, 854, 98, 0, 0, 0, 0, 0, 0, 0,
0, 3802, 4048, 0, 0, 0, 994, 4088, 0, 1322, 171, 2789, 3513, 4055, 0, 1485,
3286, 0, 0, 0, 0, 0, 0, 340, 0, 2473, 1844, 3928, 0, 3358, 62, 752,
393, 0, 598, 0, 0, 2088, 0, 1821, 1512, 0, 0, 3929, 277, 0, 0, 0,
3870, 0, 0, 0, 3573, 66, 1021, 193, 1804, 715, 0, 1120, 35, 0, 0, 984,
0, 0, 4441, 3617, 0, 96, 0, 0, 0, 0, 0, 2697, 0, 0, 326, 0,
0, 323, 0, 0, 4263, 2675, 0, 336, 0, 0, 4294, 0, 0, 3624, 3734, 0,
0, 0, 2075, 444, 604, 0, 0, 0, 0, 3347, 2244, 1622, 0, 0, 0, 1748,
0, 4431, 3702, 1284, 4080, 3182, 0, 0, 428, 0, 4354, 0, 0, 4451, 1183, 0,
4282, 0, 3906, 3098, 15, 428, 0, 0, 0, 324, 0, 0, 0, 308, 1659, 487,
0, 199, 1554, 1106, 0, 1832, 2266, 0, 2359, 0, 1983, 622, 834, 0, 0, 501,
1531, 600, 0, 0, 494, 0, 537, 811, 1126, 1829, 0, 0, 1797, 0, 0, 3549,
3891, 1000, 0, 0, 676, 0, 340, 0, 2608, 0, 0, 0, 0, 0, 0, 1295,
170, 1434, 0, 0, 0, 551, 1610, 4219, 0, 0, 702, 0, 1901, 0, 0, 800,
1153, 746, 3822, 2121, 1672, 1930, 0, 0, 0, 0, 1382, 0, 52, 4332, 0, 1103,
0, 1739, 3848, 698, 0, 0, 1265, 0, 231, 4343, 0, 242, 491, 0, 1684, 0,
2942, 0, 0, 0, 1699, 534, 0, 0, 959, 536, 1168, 1507, 3947, 0, 3631, 0,
981, 1992, 0, 218, 2093, 49, 627, 1840, 0, 660, 16, 0, 164, 0, 4064, 0,
0, 1688, 0, 302, 1362, 0, 0, 538, 656, 0, 559, 1798, 501, 0, 1066, 3361,
0, 0, 0, 2411, 0, 2414, 1444, 0, 1980, 0, 279, 208, 4253, 0, 614, 1773,
3632, 449, 0, 3160, 4191, 1276, 2767, 0, 0, 0, 0, 3896, 0, 0, 0, 0,
0, 1381, 736, 1666, 1982, 1653, 0, 975, 0, 0, 0, 0, 0, 0, 4157, 0,
0, 3068, 1850, 3817, 1782, 1703, 2105, 0, 1199, 3398, 0, 1903, 1785, 3213, 0, 1035,
0, 0, 3130, 0, 1926, 498, 0, 0, 927, 2016, 986, 669, 1152, 0, 0, 353,
4274, 3920, 0, 0, 3689, 0, 0, 0, 0, 0, 0, 0, 0, 2818, 806, 0,
0, 602, 2726, 0, 0, 273, 0, 0, 89, 2193, 0, 0, 807, 1989, 697, 2113,
2041, 0, 0, 366, 0, 281, 1375, 0, 4308, 0, 604, 0, 0, 1648, 0, 4,
385, 618, 0, 0, 0, 3697, 3707, 0, 1374, 0, 0, 3829, 4227, 628, 0, 1755,
3152, 794, 2658, 0, 0, 0, 0, 0, 1354, 1841, 990, 3234, 0, 1774, 3163, 0,
0, 3634, 0, 0, 159, 0, 0, 0, 4225, 0, 3370, 1223, 0, 836, 2140, 0,
0, 253, 1118, 973, 1623, 1289, 0, 252, 3997, 0, 0, 0, 280, 2064, 1747, 4053,
74, 1042, 0, 0, 0, 0, 0, 0, 348, 0, 3056, 0, 821, 0, 0, 0,
0, 2880, 0, 3427, 2134, 0, 0, 1084, 0, 837, 1438, 1760, 952, 0, 0, 908,
4096, 3631, 1237, 4048, 801, 2627, 0, 0, 1028, 3840, 439, 0, 1928, 0, 393, 0,
0, 483, 4193, 0, 0, 851, 707, 1120, 760, 0, 705, 130, 0, 1430, 0, 660,
0, 269, 113, 190, 1931, 0, 1331, 2201, 120, 0, 0, 4299, 0, 4098, 0, 108,
1715, 378, 2060, 437, 835, 0, 0, 0, 341, 0, 0, 1669, 32, 376, 1874, 3066,
0, 0, 455, 0, 364, 1536, 3511, 0, 3191, 933, 0, 1925, 1479, 0, 736, 1812,
4130, 0, 3852, 2613, 1182, 0, 768, 0, 0, 0, 0, 0, 0, 3034, 1629, 3104,
0, 2050, 0, 2004, 1660, 1722, 0, 1063, 0, 1001, 1839, 2974, 0, 0, 0, 0,
0, 0, 3846, 589, 701, 0, 0, 880, 0, 0, 0, 0, 0, 988, 3432, 417,
1058, 0, 0, 4185, 0, 0, 1545, 82, 0, 0, 3123, 0, 992, 0, 0, 1640,
3222, 3364, 0, 0, 1655, 0, 604, 0, 0, 3813, 0, 1586, 403, 0, 0, 0,
0, 301, 0, 235, 1752, 0, 2395, 0, 0, 487, 510, 3883, 88, 0, 3768, 0,
0, 2116, 4352, 0, 1953, 1308, 3602, 0, 239, 691, 0, 507, 0, 0, 0, 3375,
0, 0, 0, 457, 0, 0, 820, 4014, 954, 0, 0, 0, 0, 0, 0, 3975,
0, 0, 0, 0, 0, 335, 0, 1751, 0, 4086, 0, 207, 0, 1263, 519, 0,
0, 3831, 0, 0, 0, 0, 0, 0, 493, 0, 0, 504, 3954, 0, 0, 2127,
0, 0, 4387, 0, 0, 0, 0, 0, 0, 658, 278, 0, 0, 268, 2614, 547,
0, 332, 0, 4122, 0, 0, 845, 2465, 267, 1593, 0, 1419, 0, 0, 3762, 3258,
0, 0, 0, 3877, 0, 1268, 1325, 496, 0, 747, 0, 1622, 0, 0, 0, 0,
1749, 3079, 3598, 769, 0, 0, 772, 0, 193, 0, 0, 1673, 0, 778, 0, 0,
0, 1403, 0, 0, 0, 252, 0, 966, 3777, 807, 326, 0, 0, 3716, 1843, 0,
1264, 0, 2090, 2625, 2082, 0, 15, 0, 1430, 1807, 0, 1028, 310, 3244, 0, 0,
2719, 4367, 0, 0, 2031, 672, 664, 1207, 2246, 1334, 3695, 0, 0, 0, 1393, 0,
3564, 2272, 1652, 364, 0, 2276, 3103, 3758, 569, 0, 836, 4251, 657, 811, 0, 0,
1296, 0, 0, 1319, 1218, 3650, 0, 1758, 0, 0, 2044, 0, 0, 610, 755, 0,
1737, 300, 185, 3799, 675, 937, 3578, 2116, 0, 0, 771, 753, 0, 0, 3882, 0,
4045, 4009, 0, 120, 0, 0, 1899, 1090, 744, 0, 0, 1116, 4309, 0, 0, 0,
0, 4023, 2727, 587, 749, 1125, 0, 4140, 0, 2419, 0, 1563, 1733, 4049, 1307, 3227,
0, 833, 447, 2055, 734, 0, 1340, 2015, 0, 1732, 803, 670, 3492, 0, 368, 0,
490, 656, 861, 0, 4056, 2135, 0, 0, 0, 0, 0, 108, 1248, 1973, 0, 0,
0, 1757, 0, 1258, 3314, 4409, 0, 1999, 0, 1083, 0, 0, 3571, 2036, 1124, 0,
1492, 491, 0, 1225, 0, 0, 689, 2671, 0, 312, 0, 0, 0, 1563, 1599, 0,
0, 0, 0, 0, 0, 0, 0, 0, 710, 2238, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1179, 1815, 0, 0, 3385, 727, 0, 1464, 0, 1449, 4291, 0, 725,
0, 284, 0, 0, 1720, 2927, 2488, 0, 0, 0, 794, 1304, 741, 0, 1883, 1234,
101, 4087, 0, 0, 4342, 4404, 371, 1159, 17, 914, 0, 45, 27, 1031, 4033, 456,
866, 0, 4173, 81, 146, 4085, 963, 0, 1951, 0, 0, 0, 0, 154, 1508, 0,
657, 2555, 0, 0, 0, 1894, 0, 0, 2444, 1831, 0, 1008, 3034, 0, 0, 1967,
577, 0, 0, 0, 430, 0, 1958, 2232, 1350, 0, 4037, 0, 0, 3070, 0, 0,
0, 1118, 570, 3212, 1456, 1203, 284, 1918, 3700, 524, 2221, 0, 0, 0, 0, 0,
4036, 1911, 0, 753, 0, 0, 0, 1511, 591, 0, 0, 2209, 443, 0, 0, 3931,
0, 840, 201, 240, 0, 1110, 2031, 453, 0, 0, 1997, 3449, 2354, 1778, 1814, 803,
2811, 0, 0, 169, 1690, 0, 0, 4364, 0, 1136, 43, 539, 0, 1422, 0, 568,
3883, 0, 0, 2051, 186, 1001, 0, 194, 2469, 0, 0, 283, 3617, 0, 0, 0,
4384, 0, 247, 0, 1772, 4302, 177, 2753, 4113, 2776, 119, 3156, 0, 0, 0, 4055,
2686, 135, 4023, 1985, 0, 1039, 1018, 0, 839, 0, 0, 3800, 1411, 275, 268, 0,
3909, 401, 3648, 3769, 1263, 0, 0, 0, 2320, 1678, 3621, 2718, 0, 0, 3999, 893,
0, 1770, 0, 2940, 83, 2544, 225, 513, 0, 0, 1590, 867, 0, 0, 531, 0,
979, 3698, 595, 0, 0, 0, 2527, 1482, 707, 220, 3168, 0, 1402, 0, 3047, 0,
1410, 1824, 0, 4017, 1229, 3629, 174, 1641, 1396, 2765, 1704, 664, 0, 2031, 0, 0,
29, 0, 0, 0, 0, 0, 0, 0, 314, 816, 0, 2053, 3408, 0, 0, 0,
483, 2170, 0, 155, 795, 442, 0, 1100, 1207, 0, 2315, 0, 3420, 2207, 3056, 1848,
0, 0, 0, 3834, 923, 0, 3118, 0, 0, 0, 0, 1545, 576, 1649, 0, 2027,
723, 0, 3283, 0, 3670, 0, 1249, 2174, 2420, 1138, 0, 2243, 1149, 615, 653, 0,
0, 352, 0, 0, 0, 0, 0, 3877, 4436, 0, 0, 2315, 0, 1200, 0, 2081,
4415, 0, 43, 1053, 0, 0, 4122, 317, 0, 0, 0, 63, 0, 3246, 0, 0,
0, 133, 881, 0, 590, 833, 389, 737, 0, 571, 0, 895, 0, 0, 723, 1975,
595, 364, 1648, 0, 200, 172, 1440, 2062, 150, 1009, 0, 1736, 1766, 0, 0, 1405,
0, 167, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 1548, 0, 0, 874,
0, 1123, 0, 1397, 3525, 577, 0, 0, 4364, 0, 0, 0, 0, 2923, 0, 228,
3563, 0, 182, 983, 0, 4140, 735, 394, 1431, 3564, 421, 700, 0, 0, 0, 2841,
605, 0, 1469, 1428, 0, 1084, 3405, 0, 2035, 4298, 2118, 1081, 464, 3424, 1323, 3786,
0, 570, 3382, 3883, 234, 0, 4200, 4232, 0, 0, 0, 3468, 1044, 0, 182, 4395,
0, 2321, 1469, 135, 2201, 0, 0, 953, 2912, 2371, 1387, 0, 0, 1854, 4276, 687,
706, 4077, 1980, 2007, 0, 0, 0, 301, 605, 0, 0, 1595, 0, 1143, 4133, 286,
0, 1927, 0, 2637, 0, 2071, 0, 1731, 0, 215, 0, 2582, 0, 385, 1834, 812,
1194, 0, 0, 1932, 1228, 3368, 605, 1225, 213, 1237, 0, 1763, 2210, 0, 0, 62,
0, 1247, 1478, 0, 1629, 581, 0, 2713, 814, 1614, 0, 0, 1372, 359, 1569, 0,
304, 2667, 1222, 1818, 2125, 0, 106, 3838, 3579, 48, 2734, 2051, 0, 0, 124, 1820,
0, 3695, 3683, 0, 0, 3834, 464, 972, 2678, 3716, 1071, 1021, 0, 1870, 2130, 4252,
4320, 2981, 3280, 0, 1036, 594, 661, 908, 1920, 0, 1610, 1991, 3, 1375, 0, 1192,
0, 2312, 0, 1128, 0, 2322, 2894, 2222, 537, 4424, 0, 0, 1407, 954, 781, 0,
3676, 378, 133, 3228, 0, 0, 17, 0, 248, 0, 0, 2459, 746, 67, 731, 788,
306, 923, 0, 1352, 0, 166, 2502, 0, 0, 0, 854, 0, 0, 917, 0, 1253,
0, 0, 1561, 0, 603, 841, 265, 305, 2753, 2906, 362, 0, 1022, 180, 1982, 1940,
486, 262, 0, 0, 1454, 1006, 0, 0, 1194, 0, 2039, 526, 2749, 3542, 650, 0,
1845, 0, 0, 0, 860, 3057, 960, 2101, 0, 4286, 0, 0, 524, 1966, 0, 1956,
3835, 3337, 0, 0, 4054, 0, 806, 3300, 0, 1321, 0, 448, 1906, 0, 0, 0,
0, 3888, 2784, 2114, 0, 0, 534, 2255, 852, 0, 0, 3332, 2315, 392, 0, 0,
2722, 0, 0, 67, 0, 1925, 0, 2898, 3801, 2341, 0, 0, 4247, 3574, 111, 0,
1861, 219, 0, 0, 0, 431, 0, 0, 4397, 4279, 2108, 2546, 4067, 4259, 0, 257,
584, 0, 674, 218, 1210, 0, 331, 2803, 2380, 544, 861, 0, 1935, 0, 3854, 0,
1388, 0, 0, 0, 3538, 917, 1996, 1686, 0, 0, 1125, 4160, 1370, 0, 0, 0,
2573, 4296, 0, 825, 0, 0, 727, 694, 802, 1067, 0, 0, 0, 92, 0, 0,
320, 0, 0, 215, 45, 1656, 0, 0, 0, 0, 0, 3164, 1801, 224, 115, 3793,
0, 0, 1475, 2486, 3661, 2080, 0, 1456, 1250, 557, 336, 0, 0, 824, 1, 196,
0, 0, 0, 0, 1705, 0, 0, 0, 2273, 919, 0, 0, 1168, 2571, 0, 4042,
774, 0, 0, 0, 997, 1754, 3223, 0, 1736, 1313, 0, 0, 542, 498, 2297, 0,
28, 62, 2996, 443, 3445, 0, 3402, 0, 1444, 0, 0, 3924, 3772, 107, 790, 0,
0, 0, 0, 3727, 0, 3381, 0, 0, 0, 0, 1643, 0, 0, 335, 0, 0,
4408, 0, 2915, 0, 2095, 558, 0, 1172, 1310, 586, 0, 326, 4312, 277, 314, 1068,
1099, 386, 3578, 58, 0, 0, 0, 1394, 719, 0, 1819, 0, 0, 1891, 0, 1270,
0, 159, 2474, 630, 44, 195, 0, 639, 3387, 0, 1750, 1679, 0, 0, 476, 2000,
4187, 0, 0, 1045, 3059, 0, 0, 4011, 757, 879, 1309, 0, 0, 1285, 0, 493,
0, 0, 403, 3090, 0, 1420, 0, 0, 0, 93, 3097, 0, 2678, 0, 4382, 519,
0, 0, 0, 1483, 3662, 677, 0, 0, 210, 2969, 1381, 0, 0, 697, 621, 1034,
2438, 0, 548, 454, 2031, 998, 0, 0, 1344, 3719, 762, 1854, 322, 1565, 2898, 0,
0, 1880, 488, 4066, 1208, 4331, 0, 1946, 2947, 1001, 957, 0, 605, 0, 0, 2653,
0, 2576, 1071, 2691, 1453, 839, 1699, 1498, 0, 0, 1453, 2837, 644, 390, 0, 1417,
0, 0, 2002, 403, 0, 0, 1058, 151, 3634, 2514, 685, 0, 1552, 1957, 0, 0,
4008, 0, 0, 907, 1180, 1970, 5, 1554, 1716, 1406, 0, 1281, 1608, 1386, 0, 46,
990, 1196, 0, 2749, 2074, 458, 0, 1147, 0, 303, 4093, 2353, 3243, 2029, 3905, 0,
1344, 0, 889, 3759, 0, 0, 0, 0, 697, 1292, 0, 0, 940, 4381, 0, 1097,
1279, 0, 0, 0, 921, 0, 3951, 0, 0, 1774, 0, 0, 3666, 0, 0, 0,
2132, 49, 0, 1998, 0, 0, 3063, 2263, 0, 0, 0, 0, 4133, 0, 4168, 0,
2291, 0, 30, 2020, 1578, 0, 0, 1340, 3835, 1601, 0, 1154, 623, 3975, 1990, 431,
1879, 0, 0, 0, 1250, 1437, 0, 205, 0, 484, 1031, 107, 1358, 173, 1159, 4001,
294, 4263, 528, 92, 0, 2683, 0, 42, 0, 205, 0, 2971, 0, 0, 0, 122,
299, 3205, 0, 850, 906, 625, 2413, 2904, 410, 0, 3395, 2076, 68, 0, 0, 1587,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1551, 989, 0, 4344, 1523, 0, 967,
0, 673, 795, 0, 0, 746, 0, 3633, 412, 781, 0, 762, 0, 0, 1435, 0,
87, 0, 603, 2598, 982, 0, 936, 302, 1113, 0, 0, 0, 0, 178, 0, 3223,
0, 147, 2023, 361, 1492, 290, 3936, 1176, 0, 366, 4185, 3937, 6, 1188, 247, 1755,
556, 0, 1633, 0, 0, 2129, 0, 3726, 716, 0, 1102, 0, 0, 0, 0, 0,
241, 1792, 0, 758, 0, 0, 3855, 480, 0, 0, 902, 3812, 0, 823, 0, 3631,
1447, 0, 3684, 1302, 520, 685, 1701, 0, 4131, 1127, 40, 0, 0, 0, 0, 641,
4256, 1076, 1442, 0, 1018, 0, 970, 377, 0, 919, 0, 645, 1391, 564, 443, 1843,
465, 1697, 916, 797, 0, 0, 1433, 0, 1727, 3260, 0, 0, 0, 0, 0, 3978,
4255, 0, 0, 185, 798, 0, 3635, 4265, 1466, 0, 4057, 430, 1811, 0, 1753, 605,
0, 469, 839, 325, 1451, 1317, 1902, 4251, 0, 2, 0, 0, 86, 439, 0, 1255,
1536, 2001, 2390, 0, 0, 0, 0, 878, 966, 986, 0, 0, 1343, 0, 2039, 0,
0, 61, 1939, 1875, 202, 0, 0, 2049, 0, 3918, 1470, 897, 1501, 0, 0, 3211,
403, 0, 504, 459};
int MangledHashG(const char *key, const int *T)
{
......@@ -319,7 +320,7 @@ int MangledHashG(const char *key, const int *T)
for (int i = 0; key[i] != '\0'; i++)
{
sum += T[i] * key[i];
sum %= 4437;
sum %= 4452;
}
return mangledkG[sum];
}
......@@ -329,7 +330,7 @@ int MangledPerfectHash(const char *key)
if (strlen(key) > 37)
return 0;
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4437;
return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4452;
}
constexpr int unmangledkT1[] = {162, 98, 200, 17, 263, 137, 354, 364, 24, 149, 40, 40, 170,
......@@ -338,26 +339,26 @@ constexpr int unmangledkT2[] = {290, 338, 301, 284, 117, 303, 83, 150, 389, 350
316, 310, 107, 30, 65, 14, 310, 8, 298, 365, 40, 174, 83};
constexpr int unmangledkG[] = {
0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 199, 165, 0, 0, 0,
0, 0, 231, 244, 164, 0, 0, 71, 381, 37, 0, 0, 138, 9, 33, 0, 6, 0, 0,
163, 102, 0, 0, 152, 0, 70, 0, 0, 203, 0, 181, 0, 0, 206, 0, 0, 0, 0,
0, 0, 0, 40, 0, 0, 119, 0, 0, 122, 0, 116, 0, 66, 0, 92, 116, 0, 355,
101, 0, 0, 0, 70, 0, 0, 0, 78, 366, 0, 28, 383, 0, 0, 273, 0, 392, 0,
0, 0, 369, 325, 0, 74, 0, 0, 260, 0, 0, 0, 306, 306, 0, 68, 0, 123, 61,
0, 140, 190, 0, 0, 0, 165, 88, 73, 0, 379, 17, 81, 82, 360, 0, 170, 28, 120,
0, 0, 0, 0, 315, 58, 56, 0, 393, 50, 0, 0, 392, 48, 305, 0, 0, 384, 24,
0, 381, 0, 0, 0, 74, 0, 0, 227, 0, 0, 160, 174, 0, 0, 0, 0, 0, 0,
0, 0, 192, 0, 59, 0, 0, 0, 225, 327, 0, 75, 142, 367, 0, 0, 107, 0, 0,
48, 0, 0, 66, 47, 0, 0, 0, 228, 341, 58, 0, 196, 40, 130, 25, 41, 179, 136,
3, 0, 115, 373, 0, 0, 311, 31, 0, 0, 0, 349, 113, 62, 89, 0, 21, 0, 21,
24, 76, 378, 0, 390, 0, 140, 123, 0, 0, 0, 0, 2, 322, 151, 382, 112, 0, 19,
273, 137, 0, 0, 69, 23, 0, 0, 160, 0, 39, 26, 269, 362, 0, 186, 0, 109, 62,
82, 0, 57, 37, 0, 155, 64, 399, 146, 191, 0, 0, 282, 0, 0, 163, 392, 153, 192,
127, 0, 98, 0, 72, 0, 0, 128, 24, 396, 0, 41, 71, 0, 0, 17, 133, 0, 381,
180, 310, 115, 124, 166, 7, 0, 0, 0, 0, 81, 295, 369, 0, 230, 134, 86, 0, 121,
0, 0, 206, 0, 0, 188, 85, 230, 197, 118, 0, 0, 10, 394, 59, 96, 0, 371, 53,
0, 369, 0, 364, 0, 209, 0, 178, 195, 228, 0, 0, 0, 0, 0, 0, 0, 167, 41,
89, 0, 76, 0, 172, 0, 0, 176, 0, 48, 0, 198, 0, 265, 56, 157, 0, 283, 0,
102, 217, 0, 0, 0, 38, 146, 0, 112, 0, 41, 0, 0, 0, 200, 0, 19, 43, 0,
0, 0, 230, 245, 164, 0, 0, 71, 382, 38, 0, 0, 137, 9, 34, 0, 6, 0, 0,
162, 101, 0, 0, 151, 0, 70, 0, 0, 201, 0, 181, 0, 0, 207, 0, 0, 0, 0,
0, 0, 0, 38, 0, 0, 120, 0, 0, 121, 0, 115, 0, 67, 0, 92, 115, 0, 356,
99, 0, 0, 0, 70, 0, 0, 0, 79, 366, 0, 28, 383, 0, 0, 273, 0, 392, 0,
0, 0, 369, 324, 0, 74, 0, 0, 261, 0, 0, 0, 304, 306, 0, 68, 0, 123, 61,
0, 142, 190, 0, 0, 0, 164, 88, 73, 0, 378, 17, 81, 82, 361, 0, 169, 27, 119,
0, 0, 0, 0, 313, 58, 56, 0, 393, 50, 0, 0, 392, 47, 305, 0, 0, 384, 24,
0, 380, 0, 0, 0, 73, 0, 0, 227, 0, 0, 158, 174, 0, 0, 0, 0, 0, 0,
0, 0, 193, 0, 59, 0, 0, 0, 225, 327, 0, 76, 142, 367, 0, 0, 106, 0, 0,
48, 0, 0, 66, 45, 0, 0, 0, 227, 340, 57, 0, 195, 39, 130, 25, 40, 179, 135,
3, 0, 114, 373, 0, 0, 312, 31, 0, 0, 0, 348, 113, 61, 88, 0, 21, 0, 21,
25, 76, 376, 0, 391, 0, 141, 122, 0, 0, 0, 0, 2, 322, 150, 381, 112, 0, 19,
272, 136, 0, 0, 69, 22, 0, 0, 159, 0, 39, 26, 268, 364, 0, 186, 0, 108, 62,
82, 0, 56, 35, 0, 154, 65, 400, 145, 191, 0, 0, 282, 0, 0, 163, 391, 152, 192,
127, 0, 97, 0, 71, 0, 0, 127, 24, 396, 0, 41, 70, 0, 0, 90, 132, 0, 382,
180, 311, 114, 123, 165, 7, 0, 0, 0, 0, 81, 296, 369, 0, 229, 133, 85, 0, 120,
0, 0, 206, 0, 0, 188, 84, 230, 196, 117, 0, 0, 10, 394, 59, 97, 0, 371, 53,
0, 370, 0, 364, 0, 208, 0, 178, 195, 229, 0, 0, 0, 0, 0, 0, 0, 166, 41,
89, 0, 77, 0, 171, 0, 0, 177, 0, 47, 0, 198, 0, 266, 56, 156, 0, 283, 0,
101, 218, 0, 0, 0, 38, 145, 0, 111, 0, 41, 0, 0, 0, 201, 0, 19, 43, 0,
82, 396, 57};
int UnmangledHashG(const char *key, const int *T)
......
......@@ -117,6 +117,14 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi
{
extBehavior[TExtension::APPLE_clip_distance] = EBhUndefined;
}
if (resources.OES_texture_cube_map_array)
{
extBehavior[TExtension::OES_texture_cube_map_array] = EBhUndefined;
}
if (resources.EXT_texture_cube_map_array)
{
extBehavior[TExtension::EXT_texture_cube_map_array] = EBhUndefined;
}
}
void ResetExtensionBehavior(const ShBuiltInResources &resources,
......@@ -137,8 +145,8 @@ void ResetExtensionBehavior(const ShBuiltInResources &resources,
else
{
// Restore ARB_texture_rectangle in case it was removed during an earlier reset. As
// noted above, it doesn't follow the standard for extension directives and is enabled
// by default.
// noted above, it doesn't follow the standard for extension directives and is
// enabled by default.
extBehavior[TExtension::ARB_texture_rectangle] = EBhEnable;
}
}
......
......@@ -21,67 +21,67 @@ namespace BuiltInGroup
bool isTextureOffsetNoBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3060 && id <= 3129;
return id >= 3094 && id <= 3163;
}
bool isTextureOffsetBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3130 && id <= 3149;
return id >= 3164 && id <= 3183;
}
bool isTextureGatherOffsetsComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3187 && id <= 3199;
return id >= 3221 && id <= 3233;
}
bool isTextureGatherOffsetsNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3200 && id <= 3215;
return id >= 3234 && id <= 3249;
}
bool isTextureGatherOffsets(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3187 && id <= 3215;
return id >= 3221 && id <= 3249;
}
bool isTextureGatherOffsetComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3216 && id <= 3221;
return id >= 3250 && id <= 3255;
}
bool isTextureGatherOffsetNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3222 && id <= 3229;
return id >= 3256 && id <= 3263;
}
bool isTextureGatherOffset(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3216 && id <= 3229;
return id >= 3250 && id <= 3263;
}
bool isTextureGather(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3163 && id <= 3229;
return id >= 3197 && id <= 3263;
}
bool isAtomicMemory(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3246 && id <= 3263;
return id >= 3280 && id <= 3297;
}
bool isImageLoad(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3288 && id <= 3299;
return id >= 3328 && id <= 3342;
}
bool isImageStore(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3300 && id <= 3311;
return id >= 3343 && id <= 3357;
}
bool isImage(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3264 && id <= 3311;
return id >= 3298 && id <= 3357;
}
} // namespace BuiltInGroup
......
......@@ -21,67 +21,67 @@ namespace BuiltInGroup
bool isTextureOffsetNoBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1117 && id <= 1263;
return id >= 1130 && id <= 1276;
}
bool isTextureOffsetBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1264 && id <= 1298;
return id >= 1277 && id <= 1311;
}
bool isTextureGatherOffsetsComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1350 && id <= 1365;
return id >= 1356 && id <= 1371;
}
bool isTextureGatherOffsetsNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1366 && id <= 1385;
return id >= 1372 && id <= 1391;
}
bool isTextureGatherOffsets(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1350 && id <= 1385;
return id >= 1356 && id <= 1391;
}
bool isTextureGatherOffsetComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1386 && id <= 1394;
return id >= 1392 && id <= 1400;
}
bool isTextureGatherOffsetNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1395 && id <= 1406;
return id >= 1401 && id <= 1412;
}
bool isTextureGatherOffset(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1386 && id <= 1406;
return id >= 1392 && id <= 1412;
}
bool isTextureGather(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1312 && id <= 1406;
return id >= 1325 && id <= 1412;
}
bool isAtomicMemory(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1468 && id <= 1485;
return id >= 1474 && id <= 1491;
}
bool isImageLoad(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 2122 && id <= 2154;
return id >= 2128 && id <= 2160;
}
bool isImageStore(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 2155 && id <= 2187;
return id >= 2161 && id <= 2193;
}
bool isImage(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 1486 && id <= 2187;
return id >= 1492 && id <= 2193;
}
} // namespace BuiltInGroup
......
......@@ -176,6 +176,8 @@ void InitBuiltInResources(ShBuiltInResources *resources)
resources->ANGLE_base_vertex_base_instance = 0;
resources->WEBGL_video_texture = 0;
resources->APPLE_clip_distance = 0;
resources->OES_texture_cube_map_array = 0;
resources->EXT_texture_cube_map_array = 0;
resources->NV_draw_buffers = 0;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -254,6 +254,8 @@ void TranslatorGLSL::writeVersion(TIntermNode *root)
void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions compileOptions)
{
bool usesTextureCubeMapArray = false;
TInfoSinkBase &sink = getInfoSink().obj;
const TExtensionBehavior &extBehavior = getExtensionBehavior();
for (const auto &iter : extBehavior)
......@@ -305,6 +307,13 @@ void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions
sink << "#extension GL_ARB_texture_multisample : " << GetBehaviorString(iter.second)
<< "\n";
}
if ((iter.first == TExtension::OES_texture_cube_map_array ||
iter.first == TExtension::EXT_texture_cube_map_array) &&
(iter.second == EBhRequire || iter.second == EBhEnable))
{
usesTextureCubeMapArray = true;
}
}
// GLSL ES 3 explicit location qualifiers need to use an extension before GLSL 330
......@@ -326,6 +335,20 @@ void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions
sink << "#extension GL_EXT_gpu_shader5 : enable\n";
}
if (usesTextureCubeMapArray)
{
if (getOutputType() >= SH_GLSL_COMPATIBILITY_OUTPUT &&
getOutputType() < SH_GLSL_400_CORE_OUTPUT)
{
sink << "#extension GL_ARB_texture_cube_map_array : enable\n";
}
else if (getOutputType() == SH_ESSL_OUTPUT && getShaderVersion() < 320)
{
sink << "#extension GL_OES_texture_cube_map_array : enable\n";
sink << "#extension GL_EXT_texture_cube_map_array : enable\n";
}
}
TExtensionGLSL extensionGLSL(getOutputType());
root->traverse(&extensionGLSL);
......
......@@ -54,6 +54,8 @@ const char *getBasicString(TBasicType t)
return "sampler2DMS";
case EbtSampler2DMSArray:
return "sampler2DMSArray";
case EbtSamplerCubeArray:
return "samplerCubeArray";
case EbtISampler2D:
return "isampler2D";
case EbtISampler3D:
......@@ -66,6 +68,8 @@ const char *getBasicString(TBasicType t)
return "isampler2DMS";
case EbtISampler2DMSArray:
return "isampler2DMSArray";
case EbtISamplerCubeArray:
return "isamplerCubeArray";
case EbtUSampler2D:
return "usampler2D";
case EbtUSampler3D:
......@@ -78,12 +82,16 @@ const char *getBasicString(TBasicType t)
return "usampler2DMS";
case EbtUSampler2DMSArray:
return "usampler2DMSArray";
case EbtUSamplerCubeArray:
return "usamplerCubeArray";
case EbtSampler2DShadow:
return "sampler2DShadow";
case EbtSamplerCubeShadow:
return "samplerCubeShadow";
case EbtSampler2DArrayShadow:
return "sampler2DArrayShadow";
case EbtSamplerCubeArrayShadow:
return "samplerCubeArrayShadow";
case EbtStruct:
return "structure";
case EbtInterfaceBlock:
......@@ -112,6 +120,12 @@ const char *getBasicString(TBasicType t)
return "iimageCube";
case EbtUImageCube:
return "uimageCube";
case EbtImageCubeArray:
return "imageCubeArray";
case EbtIImageCubeArray:
return "iimageCubeArray";
case EbtUImageCubeArray:
return "uimageCubeArray";
case EbtAtomicCounter:
return "atomic_uint";
case EbtSamplerVideoWEBGL:
......
......@@ -649,6 +649,23 @@ GROUP BEGIN TextureSizeMSArrayExt
ivec3 textureSize(gsampler2DMSArray);
GROUP END TextureSizeMSArrayExt
// These functions are part of OES/EXT_texture_cube_map.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
GROUP BEGIN OES_cube_map_array
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
ivec3 textureSize(gsamplerCubeArray, int);
ivec3 textureSize(samplerCubeArrayShadow, int);
gvec4 texture(gsamplerCubeArray, vec4);
gvec4 texture(gsamplerCubeArray, vec4, float);
float texture(samplerCubeArrayShadow, vec4, float);
gvec4 textureLod(gsamplerCubeArray, vec4, float);
gvec4 textureGrad(gsamplerCubeArray, vec4, vec3, vec3);
gvec4 textureGather(gsamplerCubeArray, vec4);
gvec4 textureGather(gsamplerCubeArray, vec4, int);
vec4 textureGather(samplerCubeArrayShadow, vec4, float);
GROUP END OES_cube_map_array
GROUP BEGIN TexelFetchMS
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 texelFetch(gsampler2DMS, ivec2, int);
......@@ -1001,6 +1018,13 @@ GROUP BEGIN Image {"queryFunction": true}
void imageStore(gimage3D, ivec3, gvec4);
void imageStore(gimage2DArray, ivec3, gvec4);
void imageStore(gimageCube, ivec3, gvec4);
// These functions are part of OES/EXT_texture_cube_map.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 imageStore(gimageCubeArray, ivec3, gvec4);
DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
void imageStore(writeonly IMAGE_PARAMS, gvec4);
GROUP END Store
......@@ -1010,6 +1034,13 @@ GROUP BEGIN Image {"queryFunction": true}
gvec4 imageLoad(gimage3D, ivec3);
gvec4 imageLoad(gimage2DArray, ivec3);
gvec4 imageLoad(gimageCube, ivec3);
// These functions are part of OES/EXT_texture_cube_map.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 imageLoad(gimageCubeArray, ivec3);
DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 imageLoad(readonly IMAGE_PARAMS);
GROUP END Load
......@@ -1018,6 +1049,13 @@ GROUP BEGIN Image {"queryFunction": true}
ivec3 imageSize(gimage3D);
ivec3 imageSize(gimage2DArray);
ivec2 imageSize(gimageCube);
// These functions are part of OES/EXT_texture_cube_map.
// There's no way to mark alternative extensions for builtins, so these are marked with none.
// TODO(anglebug.com/4589)
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
ivec3 imageSize(gimageCubeArray);
DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS", "op": "CallBuiltInFunction"}
int imageSize(readonly writeonly gimage1D);
ivec2 imageSize(readonly writeonly gimage2D);
......
......@@ -108,6 +108,7 @@ static int ES3_reserved_ES3_1_extension_ES3_2_keyword(TParseContext *context, TE
static int ES3_reserved_ES3_extension(TParseContext *context, TExtension extension, int token);
static int ES3_reserved_ES3_extension_ES3_1_keyword(TParseContext *context, TExtension extension, int token);
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword(TParseContext *context, TExtension extension, int token);
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context, TExtension extension1, TExtension extension2, int token1, int token2);
static int WEBGL_video_texture_extension(TParseContext *context, int token);
static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context);
......@@ -231,6 +232,10 @@ O [0-7]
"sampler2DMSArray" { return ES3_reserved_ES3_1_extension_ES3_2_keyword(context, TExtension::OES_texture_storage_multisample_2d_array, SAMPLER2DMSARRAY); }
"isampler2DMSArray" { return ES3_reserved_ES3_1_extension_ES3_2_keyword(context, TExtension::OES_texture_storage_multisample_2d_array, ISAMPLER2DMSARRAY); }
"usampler2DMSArray" { return ES3_reserved_ES3_1_extension_ES3_2_keyword(context, TExtension::OES_texture_storage_multisample_2d_array, USAMPLER2DMSARRAY); }
"samplerCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, SAMPLERCUBEARRAYOES, SAMPLERCUBEARRAYEXT); }
"samplerCubeArrayShadow" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, SAMPLERCUBEARRAYSHADOWOES, SAMPLERCUBEARRAYSHADOWEXT); }
"isamplerCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, ISAMPLERCUBEARRAYOES, ISAMPLERCUBEARRAYEXT); }
"usamplerCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, USAMPLERCUBEARRAYOES, USAMPLERCUBEARRAYEXT); }
"samplerVideoWEBGL" { return WEBGL_video_texture_extension(context, SAMPLERVIDEOWEBGL); }
"struct" { return STRUCT; }
......@@ -253,6 +258,9 @@ O [0-7]
"iimageCube" { return ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
"uimageCube" { return ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
"imageCube" { return ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
"imageCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, IMAGECUBEARRAYOES, IMAGECUBEARRAYEXT); }
"iimageCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, IIMAGECUBEARRAYOES, IIMAGECUBEARRAYEXT); }
"uimageCubeArray" { return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(context, TExtension::OES_texture_cube_map_array, TExtension::EXT_texture_cube_map_array, UIMAGECUBEARRAYOES, UIMAGECUBEARRAYEXT); }
"readonly" { return ES3_reserved_ES3_1_keyword(context, READONLY); }
"writeonly" { return ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
"coherent" { return ES3_reserved_ES3_1_keyword(context, COHERENT); }
......@@ -711,6 +719,31 @@ static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword(TParseContext *context,
return check_type(yyscanner);
}
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context, TExtension extension1, TExtension extension2, int token1, int token2)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
yyscan_t yyscanner = (yyscan_t) context->getScanner();
// A keyword in GLSL ES 3.20 or GLSL ES 3.10 with enabled extension.
if (is_extension_enabled_or_is_core(context, 310, extension1, 320))
{
return token1;
}
else if (is_extension_enabled_or_is_core(context, 310, extension2, 320))
{
return token2;
}
// A reserved word in GLSL ES 3.10
if (context->getShaderVersion() == 310)
{
return reserved_word(yyscanner);
}
yylval->lex.string = AllocatePoolCharArray(yytext, yyleng);
return check_type(yyscanner);
}
int uint_constant(TParseContext *context)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
......
......@@ -173,9 +173,13 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
%token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW SAMPLERVIDEOWEBGL
%token <lex> SAMPLERCUBEARRAYOES SAMPLERCUBEARRAYSHADOWOES ISAMPLERCUBEARRAYOES USAMPLERCUBEARRAYOES
%token <lex> SAMPLERCUBEARRAYEXT SAMPLERCUBEARRAYSHADOWEXT ISAMPLERCUBEARRAYEXT USAMPLERCUBEARRAYEXT
%token <lex> SAMPLEREXTERNAL2DY2YEXT
%token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
%token <lex> IMAGECUBEARRAYOES IIMAGECUBEARRAYOES UIMAGECUBEARRAYOES
%token <lex> IMAGECUBEARRAYEXT IIMAGECUBEARRAYEXT UIMAGECUBEARRAYEXT
%token <lex> ATOMICUINT
%token <lex> LAYOUT
%token <lex> YUVCSCSTANDARDEXT YUVCSCSTANDARDEXTCONSTANT
......@@ -1102,6 +1106,22 @@ type_specifier_nonarray
| SAMPLER2DMSARRAY {
$$.initialize(EbtSampler2DMSArray, @1);
}
| SAMPLERCUBEARRAYOES {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::OES_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__samplerCubeArray");
}
$$.initialize(EbtSamplerCubeArray, @1);
}
| SAMPLERCUBEARRAYEXT {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::EXT_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__samplerCubeArray");
}
$$.initialize(EbtSamplerCubeArray, @1);
}
| ISAMPLER2D {
$$.initialize(EbtISampler2D, @1);
}
......@@ -1120,6 +1140,22 @@ type_specifier_nonarray
| ISAMPLER2DMSARRAY {
$$.initialize(EbtISampler2DMSArray, @1);
}
| ISAMPLERCUBEARRAYOES {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::OES_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__isamplerCubeArray");
}
$$.initialize(EbtISamplerCubeArray, @1);
}
| ISAMPLERCUBEARRAYEXT {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::EXT_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__isamplerCubeArray");
}
$$.initialize(EbtISamplerCubeArray, @1);
}
| USAMPLER2D {
$$.initialize(EbtUSampler2D, @1);
}
......@@ -1138,6 +1174,22 @@ type_specifier_nonarray
| USAMPLER2DMSARRAY {
$$.initialize(EbtUSampler2DMSArray, @1);
}
| USAMPLERCUBEARRAYOES {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::OES_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__usamplerCubeArray");
}
$$.initialize(EbtUSamplerCubeArray, @1);
}
| USAMPLERCUBEARRAYEXT {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::EXT_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__usamplerCubeArray");
}
$$.initialize(EbtUSamplerCubeArray, @1);
}
| SAMPLER2DSHADOW {
$$.initialize(EbtSampler2DShadow, @1);
}
......@@ -1147,6 +1199,22 @@ type_specifier_nonarray
| SAMPLER2DARRAYSHADOW {
$$.initialize(EbtSampler2DArrayShadow, @1);
}
| SAMPLERCUBEARRAYSHADOWOES {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::OES_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__samplerCubeArrayShadow");
}
$$.initialize(EbtSamplerCubeArrayShadow, @1);
}
| SAMPLERCUBEARRAYSHADOWEXT {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::EXT_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__samplerCubeArrayShadow");
}
$$.initialize(EbtSamplerCubeArrayShadow, @1);
}
| SAMPLERVIDEOWEBGL {
if (!context->checkCanUseExtension(@1, TExtension::WEBGL_video_texture))
{
......@@ -1214,6 +1282,54 @@ type_specifier_nonarray
| UIMAGECUBE {
$$.initialize(EbtUImageCube, @1);
}
| IMAGECUBEARRAYOES {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::OES_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__imageCubeArray");
}
$$.initialize(EbtImageCubeArray, @1);
}
| IMAGECUBEARRAYEXT {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::EXT_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__imageCubeArray");
}
$$.initialize(EbtImageCubeArray, @1);
}
| IIMAGECUBEARRAYOES {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::OES_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__iimageCubeArray");
}
$$.initialize(EbtIImageCubeArray, @1);
}
| IIMAGECUBEARRAYEXT {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::EXT_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__iimageCubeArray");
}
$$.initialize(EbtIImageCubeArray, @1);
}
| UIMAGECUBEARRAYOES {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::OES_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__uimageCubeArray");
}
$$.initialize(EbtUImageCubeArray, @1);
}
| UIMAGECUBEARRAYEXT {
if (context->getShaderVersion() < 320
&& !context->checkCanUseExtension(@1, TExtension::EXT_texture_cube_map_array))
{
context->error(@1, "unsupported type", "__uimageCubeArray");
}
$$.initialize(EbtUImageCubeArray, @1);
}
| ATOMICUINT {
$$.initialize(EbtAtomicCounter, @1);
}
......
......@@ -414,8 +414,8 @@ static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner);
yyg->yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 249
#define YY_END_OF_BUFFER 250
#define YY_NUM_RULES 256
#define YY_END_OF_BUFFER 257
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
......@@ -423,71 +423,72 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static const flex_int16_t yy_accept[902] = {
0, 0, 0, 0, 0, 250, 248, 247, 247, 231, 237, 242, 226, 227, 235, 234, 223,
232, 230, 236, 189, 189, 224, 220, 238, 225, 239, 243, 186, 228, 229, 241, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 221, 240, 222, 233, 246, 245, 249, 244, 217, 203, 222, 211, 206, 201,
209, 199, 210, 200, 195, 202, 194, 188, 189, 0, 192, 0, 229, 221, 228, 218, 214,
216, 215, 219, 186, 207, 213, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 13, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 16, 186, 186, 25, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 208, 212, 244, 0, 198, 194, 0, 197, 191, 0, 193,
187, 204, 205, 186, 186, 146, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 14, 186,
186, 186, 186, 186, 186, 186, 186, 186, 186, 30, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 26, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 0, 195, 0, 194, 196, 190, 186, 186, 186,
186, 33, 186, 186, 186, 19, 183, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
17, 149, 186, 186, 186, 186, 22, 186, 186, 153, 164, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 186, 161, 4, 38, 39, 40, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 152, 34, 186, 186, 31, 186, 186, 186, 186, 186, 186, 186,
50, 51, 52, 32, 186, 186, 186, 186, 186, 186, 186, 186, 11, 186, 56, 57, 58,
186, 147, 186, 186, 7, 186, 186, 186, 186, 173, 174, 175, 186, 35, 186, 165, 29,
176, 177, 178, 2, 170, 171, 172, 186, 186, 186, 27, 168, 186, 186, 186,
186, 186, 53, 54, 55, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 114,
186, 186, 186, 186, 186, 186, 186, 186, 162, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 148, 186, 186, 185, 59, 60, 61, 186, 186, 15, 186, 186, 186, 119,
186, 186, 9, 186, 186, 117, 186, 186, 186, 163, 158, 120, 186, 186, 186, 186, 186,
186, 154, 186, 186, 186, 186, 186, 89, 41, 44, 46, 45, 42, 48, 47, 49, 43,
186, 186, 186, 186, 169, 145, 186, 186, 156, 186, 186, 186, 37, 115, 28,
182, 23, 157, 88, 186, 167, 18, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 20, 36, 186, 186, 186, 186, 186, 186, 121, 94, 100,
186, 186, 186, 186, 186, 91, 93, 3, 186, 186, 186, 186, 112, 186, 186, 186, 186,
186, 186, 186, 150, 186, 186, 186, 186, 186, 8, 186, 186, 10, 186, 186, 186, 186,
186, 186, 21, 108, 12, 159, 122, 95, 102, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 155, 186, 186, 186, 106, 113, 109, 186, 186, 186,
186, 186, 186, 186, 186, 151, 123, 96, 101, 186, 186, 166, 186, 110, 186, 186, 186,
186, 6, 186, 186, 186, 186, 186, 186, 186, 186, 186, 105, 160, 1, 186, 186, 186,
186, 186, 186, 184, 186, 118, 5, 179, 62, 65, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 107, 186, 186, 186, 186, 186, 186, 103, 186, 186,
186, 186, 186, 136, 70, 71, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 116, 186, 186, 186, 104, 138, 75, 76, 186, 186, 186,
186, 111, 186, 186, 186, 186, 186, 186, 186, 131, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 69, 186, 186, 186, 186, 63, 186, 186, 186, 186, 186, 186, 186,
186, 186, 186, 186, 186, 186, 186, 186, 132, 124, 186, 97, 186, 186, 186, 74, 186,
186, 72, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
133, 186, 186, 79, 186, 186, 77, 186, 186, 125, 98, 186, 127, 186, 128, 186, 186,
186, 186, 186, 186, 24, 186, 186, 186, 186, 67, 186, 66, 142, 186, 186,
186, 126, 99, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 140, 143,
186, 134, 186, 68, 186, 186, 186, 186, 186, 186, 186, 186, 186, 141, 144, 186, 186,
186, 186, 137, 73, 186, 186, 186, 180, 186, 186, 186, 80, 186, 186, 186, 139, 78,
186, 186, 186, 186, 186, 186, 186, 186, 186, 84, 186, 186, 186, 186, 186, 186, 186,
186, 186, 85, 186, 186, 186, 186, 81, 186, 87, 86, 90, 186, 129, 130, 92, 186,
186, 186, 64, 186, 186, 186, 181, 186, 135, 82, 186, 186, 186, 186, 83,
0};
static const flex_int16_t yy_accept[938] = {
0, 0, 0, 0, 0, 257, 255, 254, 254, 238, 244, 249, 233, 234, 242, 241, 230, 239, 237,
243, 196, 196, 231, 227, 245, 232, 246, 250, 193, 235, 236, 248, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 228, 247, 229,
240, 253, 252, 256, 251, 224, 210, 229, 218, 213, 208, 216, 206, 217, 207, 202, 209, 201, 195,
196, 0, 199, 0, 236, 228, 235, 225, 221, 223, 222, 226, 193, 214, 220, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 13, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 16,
193, 193, 25, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
215, 219, 251, 0, 205, 201, 0, 204, 198, 0, 200, 194, 211, 212, 193, 193, 153, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 14, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 30, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 26, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 0, 202, 0, 201, 203, 197, 193, 193, 193, 193, 33, 193, 193, 193, 19, 190, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 17, 156, 193, 193, 193, 193, 22, 193, 193, 160,
171, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 168, 4, 38, 39, 40, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 159, 34, 193, 193, 31, 193, 193, 193, 193, 193, 193, 193, 50, 51, 52, 32, 193, 193,
193, 193, 193, 193, 193, 193, 11, 193, 56, 57, 58, 193, 154, 193, 193, 7, 193, 193, 193,
193, 180, 181, 182, 193, 35, 193, 172, 29, 183, 184, 185, 2, 177, 178, 179, 193, 193, 193,
27, 175, 193, 193, 193,
193, 193, 53, 54, 55, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 121, 193, 193,
193, 193, 193, 193, 193, 193, 169, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 155,
193, 193, 192, 59, 60, 61, 193, 193, 15, 193, 193, 193, 126, 193, 193, 9, 193, 193, 124,
193, 193, 193, 170, 165, 127, 193, 193, 193, 193, 193, 193, 161, 193, 193, 193, 193, 193, 93,
41, 44, 46, 45, 42, 48, 47, 49, 43, 193, 193, 193, 193, 176, 152, 193, 193, 163, 193,
193, 193, 37, 122, 28,
189, 23, 164, 92, 193, 174, 18, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 20, 36, 193, 193, 193, 193, 193, 193, 128, 98, 104, 193, 193, 193, 193,
193, 95, 97, 3, 193, 193, 193, 193, 119, 193, 193, 193, 193, 193, 193, 193, 157, 193, 193,
193, 193, 193, 8, 193, 193, 10, 193, 193, 193, 193, 193, 193, 21, 115, 12, 166, 129, 99,
106, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 162, 193, 193, 193, 113,
120, 116, 193, 193, 193,
193, 193, 193, 193, 193, 158, 130, 100, 105, 193, 193, 173, 193, 117, 193, 193, 193, 193, 6,
193, 193, 193, 193, 193, 193, 193, 193, 193, 109, 167, 1, 193, 193, 193, 193, 193, 193, 191,
193, 125, 5, 186, 62, 65, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 114, 193, 193, 193, 193, 193, 193, 107, 193, 193, 193, 193, 193, 193, 143, 70, 71, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 123, 193, 193, 193, 108,
145, 75, 76, 193, 193,
193, 193, 118, 193, 193, 193, 193, 193, 193, 193, 193, 138, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 69, 193, 193, 193, 193, 63, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 139, 193, 131, 193, 101, 193, 193, 193, 193, 74, 193,
193, 72, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 140,
193, 193, 193, 79, 193, 193, 77, 193, 193, 132, 102, 193, 193, 134, 193, 135, 193, 193, 193,
193, 193, 193, 193, 193,
24, 193, 193, 193, 193, 67, 193, 66, 149, 193, 193, 193, 193, 133, 103, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 110, 193, 193, 193, 147, 150, 193, 193, 141, 193, 68,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 148, 151, 193, 193, 193, 111, 193, 193,
144, 73, 193, 193, 193, 193, 187, 193, 193, 193, 80, 193, 193, 193, 193, 112, 146, 78, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 84, 193, 87, 193, 193, 193, 193, 193, 193,
193, 193, 193, 85, 89,
193, 193, 193, 193, 193, 81, 193, 91, 86, 90, 94, 193, 136, 137, 96, 193, 193, 193, 193,
64, 193, 193, 193, 188, 193, 193, 142, 82, 193, 193, 193, 193, 88, 193, 193, 83, 0};
static const YY_CHAR yy_ec[256] = {
0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
......@@ -511,148 +512,152 @@ static const YY_CHAR yy_meta[82] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
6, 6, 6, 7, 6, 6, 6, 6, 1, 1, 1, 6, 4, 4, 4, 4, 3, 5, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 1, 1, 1, 1};
static const flex_int16_t yy_base[908] = {
0, 0, 0, 81, 0, 1155, 1156, 1156, 1156, 1126, 135, 159, 1156, 1156, 1125,
156, 1156, 155, 153, 1124, 175, 166, 1122, 1156, 175, 1122, 153, 1156, 0, 1156,
1156, 157, 1096, 148, 158, 168, 178, 141, 175, 1081, 187, 193, 154, 159, 161,
1075, 199, 1088, 208, 185, 215, 220, 117, 1073, 1156, 178, 1156, 1156, 1156, 1156,
1156, 0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 240, 1156, 248,
241, 259, 317, 1156, 0, 1156, 1156, 1156, 1116, 1156, 1156, 1156, 1115, 0, 1156,
1156, 1072, 1070, 1075, 224, 1072, 1080, 1078, 1078, 1065, 1068,
1079, 231, 1073, 1061, 1058, 1071, 1058, 1055, 1055, 1061, 192, 236, 1055, 1065, 1051,
1057, 1060, 1061, 0, 1053, 1063, 241, 1062, 1043, 1056, 1037, 227, 1041, 1054, 1045,
253, 1038, 254, 1050, 1052, 248, 1041, 257, 1028, 1037, 274, 287, 1041, 1037, 1039,
1028, 1031, 279, 260, 292, 1040, 1028, 1040, 150, 1033, 1032, 1020, 1156, 1156, 0,
341, 1156, 312, 357, 1156, 1156, 367, 377, 357, 1156, 1156, 1038, 1029, 0, 1025,
1020, 1024, 1033, 1027, 1029, 345, 1013, 1013, 1024, 1016, 279, 1026, 1023, 1023, 1021,
1018, 1010, 1016, 1003, 1001, 1013, 999, 1015, 0, 1012,
1000, 1007, 1004, 1008, 1009, 1002, 999, 988, 987, 1000, 1003, 991, 1002, 998, 986,
992, 983, 387, 988, 991, 982, 989, 978, 982, 973, 987, 986, 977, 983, 340,
967, 970, 968, 967, 977, 967, 962, 960, 962, 972, 958, 960, 957, 968, 967,
970, 952, 350, 960, 956, 954, 963, 942, 401, 960, 962, 951, 943, 980, 422,
432, 442, 454, 1156, 1156, 947, 938, 948, 947, 0, 945, 949, 404, 0, 0,
937, 935, 935, 936, 931, 939, 928, 945, 934, 407, 0, 0, 928, 938, 937,
937, 0, 922, 413, 0, 0, 924, 416, 931, 932,
923, 917, 916, 917, 916, 916, 393, 462, 911, 0, 0, 907, 906, 905, 907,
908, 913, 907, 903, 916, 911, 911, 909, 908, 902, 896, 898, 897, 901, 906,
892, 895, 890, 898, 903, 891, 888, 900, 891, 0, 0, 897, 893, 0, 885,
885, 890, 881, 888, 465, 885, 0, 0, 0, 0, 875, 887, 886, 873, 874,
883, 884, 884, 0, 869, 0, 0, 0, 870, 0, 878, 869, 0, 868, 869,
863, 873, 0, 0, 0, 864, 0, 860, 0, 0, 0, 0, 0, 0, 0,
0, 0, 870, 469, 869, 0, 0, 867, 863, 860,
908, 907, 0, 0, 0, 850, 475, 478, 481, 855, 851, 856, 847, 845, 858,
843, 0, 843, 856, 845, 841, 847, 842, 849, 849, 0, 846, 843, 847, 831,
829, 832, 838, 844, 839, 838, 826, 0, 828, 829, 0, 0, 0, 0, 826,
829, 0, 823, 833, 824, 0, 834, 814, 0, 823, 818, 0, 811, 811, 824,
0, 826, 0, 487, 845, 844, 843, 804, 803, 0, 820, 819, 814, 855, 846,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 814, 801, 798, 0,
0, 803, 350, 0, 800, 807, 806, 0, 792, 0,
0, 0, 0, 0, 789, 0, 0, 788, 799, 490, 792, 798, 797, 794, 789,
786, 808, 792, 777, 777, 790, 775, 787, 0, 0, 780, 809, 808, 807, 768,
767, 478, 481, 0, 779, 782, 780, 769, 765, 780, 0, 0, 776, 773, 772,
762, 0, 761, 751, 768, 754, 498, 762, 765, 0, 788, 787, 786, 747, 746,
0, 760, 747, 0, 757, 750, 742, 743, 749, 752, 0, 0, 0, 0, 778,
777, 0, 748, 751, 736, 743, 734, 741, 742, 742, 741, 727, 509, 738, 738,
0, 739, 728, 727, 0, 0, 0, 758, 757, 756,
717, 716, 712, 724, 719, 0, 753, 752, 0, 723, 726, 0, 518, 0, 704,
725, 743, 711, 0, 707, 706, 715, 715, 703, 717, 701, 715, 710, 0, 0,
0, 733, 732, 731, 692, 691, 690, 0, 690, 0, 0, 486, 497, 718, 700,
703, 686, 699, 697, 685, 684, 693, 693, 716, 715, 714, 675, 674, 0, 679,
669, 672, 673, 672, 682, 0, 685, 681, 683, 679, 666, 703, 507, 0, 674,
677, 667, 668, 660, 667, 658, 683, 667, 663, 665, 663, 663, 662, 661, 0,
649, 648, 658, 0, 684, 512, 0, 655, 658, 655,
640, 0, 656, 655, 639, 631, 639, 629, 637, 0, 634, 633, 658, 642, 640,
640, 633, 623, 626, 640, 624, 661, 635, 636, 633, 630, 644, 617, 618, 630,
629, 613, 612, 611, 636, 620, 618, 618, 621, 616, 597, 596, 0, 628, 596,
626, 594, 598, 597, 634, 608, 605, 0, 609, 599, 600, 584, 586, 570, 118,
177, 173, 196, 239, 254, 279, 276, 290, 0, 299, 341, 396, 372, 409, 0,
419, 420, 0, 0, 449, 0, 450, 0, 464, 478, 476, 475, 479, 484, 0,
479, 489, 481, 489, 516, 493, 0, 0, 507, 508,
528, 0, 0, 510, 511, 497, 496, 499, 512, 504, 517, 518, 497, 498, 506,
0, 0, 522, 534, 504, 536, 526, 520, 508, 526, 520, 553, 510, 511, 519,
0, 0, 554, 536, 534, 535, 0, 0, 539, 528, 534, 0, 535, 521, 544,
0, 532, 559, 564, 0, 0, 548, 555, 540, 538, 539, 531, 548, 555, 556,
0, 554, 538, 578, 575, 539, 572, 600, 544, 545, 0, 562, 564, 565, 556,
0, 581, 0, 0, 0, 591, 0, 0, 0, 559, 560, 554, 0, 580, 556,
557, 0, 615, 0, 0, 584, 599, 587, 592, 0,
1156, 635, 640, 645, 650, 653, 656};
static const flex_int16_t yy_def[908] = {
0, 901, 1, 901, 3, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 902, 901, 901, 901, 901, 901, 901, 903, 901, 901, 901, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 901, 901, 901, 901, 901, 901, 901, 904, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 905, 901, 906, 20, 902, 901, 901, 907, 901, 901, 901, 901, 901,
901, 901, 901, 903, 901, 901, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 901, 901, 904, 901, 901, 906, 901, 901, 901, 901, 901,
907, 901, 901, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 901, 901, 901, 901, 901, 901, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903,
0, 901, 901, 901, 901, 901, 901};
static const flex_int16_t yy_nxt[1238] = {
static const flex_int16_t yy_base[944] = {
0, 0, 0, 81, 0, 1191, 1192, 1192, 1192, 1162, 135, 159, 1192, 1192, 1161,
156, 1192, 155, 153, 1160, 175, 166, 1158, 1192, 175, 1158, 153, 1192, 0, 1192,
1192, 157, 1132, 148, 158, 168, 178, 141, 175, 1117, 187, 193, 154, 159, 161,
1111, 199, 1124, 208, 185, 215, 220, 117, 1109, 1192, 178, 1192, 1192, 1192, 1192,
1192, 0, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 240, 1192, 248,
241, 259, 317, 1192, 0, 1192, 1192, 1192, 1152, 1192, 1192, 1192, 1151, 0, 1192,
1192, 1108, 1106, 1111, 224, 1108, 1116, 1114, 1114, 1101, 1104,
1115, 231, 1109, 1097, 1094, 1107, 1094, 1091, 1091, 1097, 192, 236, 1091, 1101, 1087,
1093, 1096, 1097, 0, 1089, 1099, 241, 1098, 1079, 1092, 1073, 227, 1077, 1090, 1081,
253, 1074, 254, 1086, 1088, 248, 1077, 257, 1064, 1073, 274, 287, 1077, 1073, 1075,
1064, 1067, 279, 260, 292, 1076, 1064, 1076, 150, 1069, 1068, 1056, 1192, 1192, 0,
341, 1192, 312, 357, 1192, 1192, 367, 377, 357, 1192, 1192, 1074, 1065, 0, 1061,
1056, 1060, 1069, 1063, 1065, 345, 1049, 1049, 1060, 1052, 279, 1062, 1059, 1059, 1057,
1054, 1046, 1052, 1039, 1037, 1049, 1035, 1051, 0, 1048,
1036, 1043, 1040, 1044, 1045, 1038, 1035, 1024, 1023, 1036, 1039, 1027, 1038, 1034, 1022,
1028, 1019, 387, 1024, 1027, 1018, 1025, 1014, 1018, 1009, 1023, 1022, 1013, 1019, 340,
1003, 1006, 1004, 1003, 1013, 1003, 998, 996, 998, 1008, 994, 996, 993, 1004, 1003,
1006, 988, 350, 996, 992, 990, 999, 978, 401, 996, 998, 987, 979, 1016, 422,
432, 442, 454, 1192, 1192, 983, 974, 984, 983, 0, 981, 985, 404, 0, 0,
973, 971, 971, 972, 967, 975, 964, 981, 970, 407, 0, 0, 964, 974, 973,
973, 0, 958, 413, 0, 0, 960, 416, 967, 968,
959, 953, 952, 953, 952, 952, 393, 462, 947, 0, 0, 943, 942, 941, 943,
944, 949, 943, 939, 952, 947, 947, 945, 944, 938, 932, 934, 933, 937, 942,
928, 931, 926, 934, 939, 927, 924, 936, 927, 0, 0, 933, 929, 0, 921,
921, 926, 917, 924, 465, 921, 0, 0, 0, 0, 911, 923, 922, 909, 910,
919, 920, 920, 0, 905, 0, 0, 0, 906, 0, 914, 905, 0, 904, 905,
899, 909, 0, 0, 0, 900, 0, 896, 0, 0, 0, 0, 0, 0, 0,
0, 0, 906, 469, 905, 0, 0, 903, 899, 896,
944, 943, 0, 0, 0, 886, 475, 478, 481, 891, 887, 892, 883, 881, 894,
879, 0, 879, 892, 881, 877, 883, 878, 885, 885, 0, 882, 879, 883, 867,
865, 868, 874, 880, 875, 874, 862, 0, 864, 865, 0, 0, 0, 0, 862,
865, 0, 859, 869, 860, 0, 870, 850, 0, 859, 854, 0, 847, 847, 860,
0, 862, 0, 487, 881, 880, 879, 840, 839, 0, 856, 855, 850, 891, 882,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 837, 850, 837, 834, 0,
0, 839, 350, 0, 836, 843, 842, 0, 828, 0,
0, 0, 0, 0, 825, 0, 0, 824, 835, 490, 828, 834, 833, 830, 825,
822, 844, 828, 813, 813, 826, 811, 823, 0, 0, 816, 845, 844, 843, 804,
803, 478, 481, 0, 815, 818, 816, 805, 801, 816, 0, 0, 812, 809, 808,
798, 0, 797, 787, 804, 790, 498, 798, 801, 0, 824, 823, 822, 783, 782,
0, 796, 783, 0, 793, 786, 778, 779, 785, 788, 0, 0, 0, 0, 814,
813, 0, 784, 787, 772, 779, 770, 777, 778, 778, 777, 763, 509, 774, 774,
0, 775, 764, 763, 0, 0, 0, 794, 793, 792,
753, 752, 748, 760, 755, 0, 789, 788, 0, 759, 762, 0, 518, 0, 740,
761, 779, 747, 0, 743, 742, 751, 751, 739, 753, 737, 751, 746, 772, 0,
0, 768, 767, 766, 727, 726, 725, 0, 725, 0, 0, 486, 497, 753, 735,
738, 721, 734, 732, 720, 719, 728, 728, 751, 750, 749, 710, 709, 0, 714,
704, 707, 708, 707, 717, 743, 719, 715, 717, 713, 700, 699, 736, 507, 0,
707, 710, 700, 701, 693, 700, 691, 716, 700, 696, 698, 696, 696, 695, 694,
0, 682, 681, 691, 717, 716, 512, 0, 687, 690,
687, 672, 0, 688, 687, 671, 670, 662, 670, 660, 668, 0, 665, 664, 663,
688, 672, 670, 670, 663, 653, 656, 670, 654, 691, 665, 666, 663, 660, 514,
648, 649, 661, 660, 644, 643, 642, 641, 666, 650, 648, 648, 651, 646, 627,
626, 0, 632, 657, 625, 655, 619, 636, 608, 607, 644, 133, 176, 213, 212,
242, 266, 269, 298, 297, 297, 353, 356, 359, 398, 427, 423, 463, 435, 442,
0, 463, 477, 479, 522, 499, 498, 527, 490, 491, 0, 0, 507, 501, 0,
502, 0, 488, 511, 512, 498, 497, 500, 501, 502,
0, 496, 506, 498, 506, 533, 510, 0, 0, 509, 525, 526, 546, 0, 0,
528, 529, 530, 516, 515, 518, 519, 532, 524, 515, 538, 539, 0, 518, 519,
527, 0, 0, 528, 544, 556, 526, 558, 548, 542, 530, 551, 549, 543, 576,
533, 534, 535, 543, 0, 0, 544, 579, 561, 0, 559, 560, 0, 0, 564,
565, 554, 560, 0, 561, 547, 570, 0, 549, 559, 586, 591, 0, 0, 0,
575, 576, 583, 568, 566, 567, 559, 560, 577, 584, 585, 0, 583, 598, 568,
608, 605, 569, 570, 603, 631, 575, 576, 0, 0,
593, 595, 596, 587, 594, 0, 613, 0, 0, 0, 0, 623, 0, 0, 0,
591, 592, 586, 607, 0, 613, 589, 590, 0, 608, 649, 0, 0, 600, 619,
595, 635, 0, 623, 628, 0, 1192, 671, 676, 681, 686, 689, 692};
static const flex_int16_t yy_def[944] = {
0, 937, 1, 937, 3, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 938, 937, 937, 937, 937, 937, 937, 939, 937, 937, 937, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 937, 937, 937, 937, 937, 937, 937, 940, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 941, 937, 942, 20, 938, 937, 937, 943, 937, 937, 937, 937, 937,
937, 937, 937, 939, 937, 937, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 937, 937, 940, 937, 937, 942, 937, 937, 937, 937, 937,
943, 937, 937, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 937, 937, 937, 937, 937, 937, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939,
939, 939, 0, 937, 937, 937, 937, 937, 937};
static const flex_int16_t yy_nxt[1274] = {
0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 21,
21, 21, 21, 21, 21, 21, 22, 23, 24, 25, 26, 27, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 30, 31, 32, 33, 34, 35,
......@@ -664,83 +669,85 @@ static const flex_int16_t yy_nxt[1238] = {
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 58, 58, 58, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 58, 58, 58, 58, 63, 64, 65, 68, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72,
72, 155, 74, 81, 86, 87, 71, 69, 89, 156, 66, 74, 795, 75, 75, 75, 75, 75, 75,
72, 155, 74, 81, 86, 87, 71, 69, 89, 156, 66, 74, 797, 75, 75, 75, 75, 75, 75,
75, 75, 76, 76, 82,
77, 83, 84, 92, 107, 158, 108, 126, 90, 77, 78, 255, 128, 256, 130, 109, 129, 93, 94,
78, 127, 99, 79, 77, 95, 100, 96, 131, 110, 97, 98, 101, 77, 796, 102, 103, 111, 78,
112, 104, 116, 113, 144, 797, 105, 145, 78, 114, 117, 79, 106, 119, 133, 146, 120, 195, 159,
121, 122, 118, 147, 137, 123, 124, 798, 125, 196, 134, 138, 139, 135, 74, 140, 152, 161, 162,
148, 153, 141, 142, 149, 143, 164, 165, 150, 166, 154, 151, 901, 197, 175, 184, 216, 77, 176,
185, 186, 161, 162, 799,
217, 229, 198, 78, 207, 164, 165, 208, 209, 224, 233, 210, 166, 211, 221, 901, 77, 230, 231,
800, 222, 248, 225, 234, 226, 801, 167, 237, 167, 249, 78, 168, 168, 168, 168, 168, 168, 168,
168, 168, 168, 239, 238, 246, 247, 250, 164, 165, 280, 281, 260, 802, 260, 251, 240, 261, 261,
261, 261, 261, 261, 261, 261, 261, 261, 803, 262, 804, 262, 164, 165, 263, 263, 263, 263, 263,
78, 127, 99, 79, 77, 95, 100, 96, 131, 110, 97, 98, 101, 77, 798, 102, 103, 111, 78,
112, 104, 116, 113, 144, 799, 105, 145, 78, 114, 117, 79, 106, 119, 133, 146, 120, 195, 159,
121, 122, 118, 147, 137, 123, 124, 800, 125, 196, 134, 138, 139, 135, 74, 140, 152, 161, 162,
148, 153, 141, 142, 149, 143, 164, 165, 150, 166, 154, 151, 937, 197, 175, 184, 216, 77, 176,
185, 186, 161, 162, 801,
217, 229, 198, 78, 207, 164, 165, 208, 209, 224, 233, 210, 166, 211, 221, 937, 77, 230, 231,
802, 222, 248, 225, 234, 226, 803, 167, 237, 167, 249, 78, 168, 168, 168, 168, 168, 168, 168,
168, 168, 168, 239, 238, 246, 247, 250, 164, 165, 280, 281, 260, 804, 260, 251, 240, 261, 261,
261, 261, 261, 261, 261, 261, 261, 261, 805, 262, 806, 262, 164, 165, 263, 263, 263, 263, 263,
263, 263, 263, 263, 263, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
168, 168, 168, 168, 168,
168, 265, 274, 312, 313, 314, 326, 547, 345, 805, 327, 548, 264, 401, 402, 275, 346, 352, 353,
354, 366, 367, 368, 378, 379, 380, 806, 807, 265, 386, 387, 388, 390, 391, 392, 264, 261, 261,
168, 265, 274, 312, 313, 314, 326, 547, 345, 807, 327, 548, 264, 401, 402, 275, 346, 352, 353,
354, 366, 367, 368, 378, 379, 380, 808, 809, 265, 386, 387, 388, 390, 391, 392, 264, 261, 261,
261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 263,
263, 263, 263, 263, 263, 263, 263, 263, 263, 808, 162, 263, 263, 263, 263, 263, 263, 263, 263,
263, 263, 403, 404, 405, 442, 443, 444, 465, 466, 467, 809, 810, 165, 162, 477, 478, 479, 480,
263, 263, 263, 263, 263, 263, 263, 263, 263, 810, 162, 263, 263, 263, 263, 263, 263, 263, 263,
263, 263, 403, 404, 405, 442, 443, 444, 465, 466, 467, 811, 812, 165, 162, 477, 478, 479, 480,
481, 482, 483, 484, 485,
468, 469, 527, 528, 529, 556, 557, 558, 580, 811, 812, 582, 165, 598, 599, 600, 679, 813, 530,
531, 581, 559, 560, 583, 632, 633, 634, 681, 680, 601, 602, 814, 603, 654, 655, 656, 682, 712,
683, 684, 635, 636, 734, 604, 815, 816, 713, 817, 714, 657, 658, 735, 818, 736, 819, 820, 821,
468, 469, 527, 528, 529, 556, 557, 558, 580, 813, 814, 582, 165, 598, 599, 600, 680, 815, 530,
531, 581, 559, 560, 583, 632, 633, 634, 682, 681, 601, 602, 816, 603, 654, 655, 656, 683, 715,
684, 685, 635, 636, 738, 604, 770, 817, 716, 818, 717, 657, 658, 739, 819, 740, 820, 821, 771,
822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840,
841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
860, 861, 862, 863, 864,
865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883,
884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 76, 76,
794, 793, 792, 76, 88, 88, 88, 88, 88, 160, 160, 160, 160, 160, 72, 791, 72, 163, 790,
163, 169, 169, 169, 789, 788, 787, 786, 785, 784, 783, 782, 781, 780, 779, 778, 777, 776, 775,
774, 773, 772, 771, 770, 769, 768, 767, 766, 765, 764, 763, 762, 761, 760, 759, 758, 757, 756,
755, 754, 753, 752, 751,
750, 749, 748, 747, 746, 745, 744, 743, 742, 741, 740, 739, 738, 737, 733, 732, 731, 730, 729,
728, 727, 726, 725, 724, 723, 722, 721, 720, 719, 718, 717, 716, 715, 711, 710, 709, 708, 707,
706, 705, 704, 703, 702, 701, 700, 699, 698, 697, 696, 695, 694, 693, 692, 691, 690, 689, 688,
687, 686, 685, 678, 677, 676, 675, 674, 673, 672, 671, 670, 669, 668, 667, 666, 665, 664, 663,
662, 661, 660, 659, 653, 652, 651, 650, 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, 639,
638, 637, 631, 630, 629,
628, 627, 626, 625, 624, 623, 622, 621, 620, 619, 618, 617, 616, 615, 614, 613, 612, 611, 610,
609, 608, 607, 606, 605, 597, 596, 595, 594, 593, 592, 591, 590, 589, 588, 587, 586, 585, 584,
579, 578, 577, 576, 575, 574, 573, 572, 571, 570, 569, 568, 567, 566, 565, 564, 563, 562, 561,
555, 554, 553, 552, 551, 550, 549, 546, 545, 544, 543, 542, 541, 540, 539, 538, 537, 536, 535,
534, 533, 532, 526, 525, 524, 523, 522, 521, 520, 519, 518, 517, 516, 515, 514, 513, 512, 511,
510, 509, 508, 507, 506,
505, 504, 503, 502, 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, 491, 490, 489, 488, 487,
486, 476, 475, 474, 473, 472, 471, 470, 464, 463, 462, 461, 460, 459, 458, 457, 456, 455, 454,
453, 452, 451, 450, 449, 448, 447, 446, 445, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432,
431, 430, 429, 428, 427, 426, 425, 424, 423, 422, 421, 420, 419, 418, 417, 416, 415, 414, 413,
412, 411, 410, 409, 408, 407, 406, 400, 399, 398, 397, 396, 395, 394, 393, 389, 385, 384, 383,
382, 381, 377, 376, 375,
374, 373, 372, 371, 370, 369, 365, 364, 363, 362, 361, 360, 359, 358, 357, 356, 355, 351, 350,
349, 348, 347, 344, 343, 342, 341, 340, 339, 338, 337, 336, 335, 334, 333, 332, 331, 330, 329,
328, 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, 315, 311, 310, 309, 308, 307, 306, 305,
304, 303, 302, 301, 300, 299, 298, 297, 296, 295, 294, 293, 292, 291, 290, 289, 288, 287, 286,
285, 284, 283, 282, 279, 278, 277, 276, 273, 272, 271, 270, 269, 268, 267, 266, 259, 258, 257,
254, 253, 252, 245, 244,
243, 242, 241, 236, 235, 232, 228, 227, 223, 220, 219, 218, 215, 214, 213, 212, 206, 205, 204,
203, 202, 201, 200, 199, 194, 193, 192, 191, 190, 189, 188, 187, 183, 182, 181, 180, 179, 178,
177, 174, 173, 172, 171, 170, 157, 136, 132, 115, 91, 85, 80, 73, 67, 62, 901, 5, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901};
static const flex_int16_t yy_chk[1238] = {
884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902,
903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921,
922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 76, 76, 796, 795,
794, 76, 88, 88, 88, 88, 88, 160, 160, 160, 160, 160, 72, 793, 72, 163, 792, 163, 169,
169, 169, 791, 790, 789,
788, 787, 786, 785, 784, 783, 782, 781, 780, 779, 778, 777, 776, 775, 774, 773, 772, 769, 768,
767, 766, 765, 764, 763, 762, 761, 760, 759, 758, 757, 756, 755, 754, 753, 752, 751, 750, 749,
748, 747, 746, 745, 744, 743, 742, 741, 737, 736, 735, 734, 733, 732, 731, 730, 729, 728, 727,
726, 725, 724, 723, 722, 721, 720, 719, 718, 714, 713, 712, 711, 710, 709, 708, 707, 706, 705,
704, 703, 702, 701, 700, 699, 698, 697, 696, 695, 694, 693, 692, 691, 690, 689, 688, 687, 686,
679, 678, 677, 676, 675,
674, 673, 672, 671, 670, 669, 668, 667, 666, 665, 664, 663, 662, 661, 660, 659, 653, 652, 651,
650, 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, 639, 638, 637, 631, 630, 629, 628, 627,
626, 625, 624, 623, 622, 621, 620, 619, 618, 617, 616, 615, 614, 613, 612, 611, 610, 609, 608,
607, 606, 605, 597, 596, 595, 594, 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, 579, 578,
577, 576, 575, 574, 573, 572, 571, 570, 569, 568, 567, 566, 565, 564, 563, 562, 561, 555, 554,
553, 552, 551, 550, 549,
546, 545, 544, 543, 542, 541, 540, 539, 538, 537, 536, 535, 534, 533, 532, 526, 525, 524, 523,
522, 521, 520, 519, 518, 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, 505, 504,
503, 502, 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, 476,
475, 474, 473, 472, 471, 470, 464, 463, 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, 452,
451, 450, 449, 448, 447, 446, 445, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432, 431, 430,
429, 428, 427, 426, 425,
424, 423, 422, 421, 420, 419, 418, 417, 416, 415, 414, 413, 412, 411, 410, 409, 408, 407, 406,
400, 399, 398, 397, 396, 395, 394, 393, 389, 385, 384, 383, 382, 381, 377, 376, 375, 374, 373,
372, 371, 370, 369, 365, 364, 363, 362, 361, 360, 359, 358, 357, 356, 355, 351, 350, 349, 348,
347, 344, 343, 342, 341, 340, 339, 338, 337, 336, 335, 334, 333, 332, 331, 330, 329, 328, 325,
324, 323, 322, 321, 320, 319, 318, 317, 316, 315, 311, 310, 309, 308, 307, 306, 305, 304, 303,
302, 301, 300, 299, 298,
297, 296, 295, 294, 293, 292, 291, 290, 289, 288, 287, 286, 285, 284, 283, 282, 279, 278, 277,
276, 273, 272, 271, 270, 269, 268, 267, 266, 259, 258, 257, 254, 253, 252, 245, 244, 243, 242,
241, 236, 235, 232, 228, 227, 223, 220, 219, 218, 215, 214, 213, 212, 206, 205, 204, 203, 202,
201, 200, 199, 194, 193, 192, 191, 190, 189, 188, 187, 183, 182, 181, 180, 179, 178, 177, 174,
173, 172, 171, 170, 157, 136, 132, 115, 91, 85, 80, 73, 67, 62, 937, 5, 937, 937, 937,
937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937};
static const flex_int16_t yy_chk[1274] = {
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
......@@ -752,92 +759,95 @@ static const flex_int16_t yy_chk[1238] = {
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 10, 10, 11, 15, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18,
18, 52, 21, 24, 26, 26, 17, 15, 31, 52, 11, 20, 760, 20, 20, 20, 20, 20, 20,
18, 52, 21, 24, 26, 26, 17, 15, 31, 52, 11, 20, 757, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 24,
21, 24, 24, 33, 37, 55, 37, 42, 31, 20, 21, 154, 43, 154, 44, 37, 43, 33, 33,
20, 42, 35, 20, 21, 34, 35, 34, 44, 38, 34, 34, 35, 20, 761, 35, 36, 38, 21,
38, 36, 40, 38, 49, 762, 36, 49, 20, 38, 40, 20, 36, 41, 46, 49, 41, 111, 55,
41, 41, 40, 49, 48, 41, 41, 763, 41, 111, 46, 48, 48, 46, 76, 48, 51, 72, 72,
20, 42, 35, 20, 21, 34, 35, 34, 44, 38, 34, 34, 35, 20, 758, 35, 36, 38, 21,
38, 36, 40, 38, 49, 759, 36, 49, 20, 38, 40, 20, 36, 41, 46, 49, 41, 111, 55,
41, 41, 40, 49, 48, 41, 41, 760, 41, 111, 46, 48, 48, 46, 76, 48, 51, 72, 72,
50, 51, 48, 48, 50, 48, 74, 74, 50, 75, 51, 50, 75, 112, 94, 102, 127, 76, 94,
102, 102, 72, 72, 764,
102, 102, 72, 72, 761,
127, 136, 112, 76, 122, 74, 74, 122, 122, 133, 138, 122, 75, 122, 131, 75, 76, 136, 136,
765, 131, 149, 133, 138, 133, 766, 77, 141, 77, 149, 76, 77, 77, 77, 77, 77, 77, 77,
77, 77, 77, 142, 141, 148, 148, 150, 163, 163, 186, 186, 161, 767, 161, 150, 142, 161, 161,
161, 161, 161, 161, 161, 161, 161, 161, 768, 164, 770, 164, 163, 163, 164, 164, 164, 164, 164,
762, 131, 149, 133, 138, 133, 763, 77, 141, 77, 149, 76, 77, 77, 77, 77, 77, 77, 77,
77, 77, 77, 142, 141, 148, 148, 150, 163, 163, 186, 186, 161, 764, 161, 150, 142, 161, 161,
161, 161, 161, 161, 161, 161, 161, 161, 765, 164, 766, 164, 163, 163, 164, 164, 164, 164, 164,
164, 164, 164, 164, 164, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168,
168, 168, 168, 168, 168,
168, 169, 181, 218, 218, 218, 230, 493, 248, 771, 230, 493, 168, 307, 307, 181, 248, 254, 254,
254, 273, 273, 273, 285, 285, 285, 772, 773, 169, 294, 294, 294, 298, 298, 298, 168, 260, 260,
168, 169, 181, 218, 218, 218, 230, 493, 248, 767, 230, 493, 168, 307, 307, 181, 248, 254, 254,
254, 273, 273, 273, 285, 285, 285, 768, 769, 169, 294, 294, 294, 298, 298, 298, 168, 260, 260,
260, 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 262,
262, 262, 262, 262, 262, 262, 262, 262, 262, 774, 261, 263, 263, 263, 263, 263, 263, 263, 263,
263, 263, 308, 308, 308, 350, 350, 350, 394, 394, 394, 776, 777, 263, 261, 407, 407, 407, 408,
262, 262, 262, 262, 262, 262, 262, 262, 262, 770, 261, 263, 263, 263, 263, 263, 263, 263, 263,
263, 263, 308, 308, 308, 350, 350, 350, 394, 394, 394, 771, 772, 263, 261, 407, 407, 407, 408,
408, 408, 409, 409, 409,
394, 394, 464, 464, 464, 510, 510, 510, 532, 780, 782, 533, 263, 552, 552, 552, 642, 784, 464,
464, 532, 510, 510, 533, 588, 588, 588, 643, 642, 552, 552, 785, 552, 613, 613, 613, 643, 673,
643, 643, 588, 588, 696, 552, 786, 787, 673, 788, 673, 613, 613, 696, 789, 696, 791, 792, 793,
794, 795, 796, 799, 800, 801, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 818,
819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 833, 834, 835, 836, 839, 840, 841,
843, 844, 845, 847, 848,
849, 852, 853, 854, 855, 856, 857, 858, 859, 860, 862, 863, 864, 865, 866, 867, 868, 869, 870,
872, 873, 874, 875, 877, 881, 885, 886, 887, 889, 890, 891, 893, 896, 897, 898, 899, 902, 902,
759, 758, 757, 902, 903, 903, 903, 903, 903, 904, 904, 904, 904, 904, 905, 756, 905, 906, 755,
906, 907, 907, 907, 754, 752, 751, 750, 749, 748, 747, 746, 745, 744, 742, 741, 740, 739, 738,
737, 736, 735, 734, 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, 723, 722, 721, 720, 719,
718, 717, 716, 715, 714,
713, 712, 711, 709, 708, 707, 706, 705, 704, 703, 701, 700, 699, 698, 695, 693, 692, 691, 689,
688, 687, 686, 685, 684, 683, 682, 681, 680, 679, 678, 677, 676, 675, 672, 671, 670, 669, 668,
667, 665, 664, 663, 662, 661, 660, 658, 657, 656, 655, 654, 653, 652, 651, 650, 649, 648, 647,
646, 645, 644, 639, 637, 636, 635, 634, 633, 632, 628, 627, 626, 625, 624, 623, 622, 621, 620,
618, 617, 616, 615, 611, 610, 608, 607, 605, 604, 603, 602, 601, 600, 599, 598, 594, 593, 592,
590, 589, 587, 586, 585,
584, 583, 582, 581, 580, 579, 578, 576, 575, 570, 569, 568, 567, 566, 565, 563, 562, 560, 559,
558, 557, 556, 554, 553, 551, 550, 549, 548, 546, 545, 544, 543, 540, 539, 538, 537, 536, 535,
531, 530, 529, 528, 527, 526, 523, 522, 521, 520, 519, 518, 517, 516, 515, 514, 513, 512, 511,
509, 508, 505, 499, 497, 496, 495, 492, 489, 488, 487, 486, 475, 474, 473, 472, 471, 469, 468,
467, 466, 465, 462, 460, 459, 458, 456, 455, 453, 452, 450, 449, 448, 446, 445, 440, 439, 437,
436, 435, 434, 433, 432,
431, 430, 429, 428, 427, 425, 424, 423, 422, 421, 420, 419, 418, 416, 415, 414, 413, 412, 411,
410, 406, 402, 401, 400, 399, 398, 395, 393, 383, 381, 377, 376, 375, 374, 372, 371, 369, 365,
363, 362, 361, 360, 359, 358, 357, 356, 351, 349, 348, 347, 346, 345, 343, 342, 339, 338, 337,
336, 335, 334, 333, 332, 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, 321, 320, 319, 318,
317, 316, 315, 314, 313, 312, 309, 306, 305, 304, 303, 302, 301, 300, 299, 297, 293, 291, 290,
289, 288, 284, 283, 282,
281, 280, 279, 278, 277, 276, 272, 271, 269, 268, 267, 266, 259, 258, 257, 256, 255, 253, 252,
251, 250, 249, 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232,
231, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 216, 215, 214, 213, 212, 211,
210, 209, 208, 207, 206, 205, 204, 203, 202, 201, 200, 198, 197, 196, 195, 194, 193, 192, 191,
190, 189, 188, 187, 185, 184, 183, 182, 180, 179, 178, 177, 176, 175, 173, 172, 157, 156, 155,
153, 152, 151, 147, 146,
145, 144, 143, 140, 139, 137, 135, 134, 132, 130, 129, 128, 126, 125, 124, 123, 121, 120, 118,
117, 116, 115, 114, 113, 110, 109, 108, 107, 106, 105, 104, 103, 101, 100, 99, 98, 97, 96,
95, 93, 92, 91, 87, 83, 53, 47, 45, 39, 32, 25, 22, 19, 14, 9, 5, 901, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901,
901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901};
394, 394, 464, 464, 464, 510, 510, 510, 532, 773, 774, 533, 263, 552, 552, 552, 642, 775, 464,
464, 532, 510, 510, 533, 588, 588, 588, 643, 642, 552, 552, 777, 552, 613, 613, 613, 643, 674,
643, 643, 588, 588, 697, 552, 730, 778, 674, 779, 674, 613, 613, 697, 780, 697, 781, 782, 730,
783, 784, 785, 788, 789, 791, 793, 794, 795, 796, 797, 798, 799, 800, 802, 803, 804, 805, 806,
807, 810, 811, 812, 813, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 829, 830,
831, 834, 835, 836, 837,
838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 852, 853, 854, 856, 857, 860, 861,
862, 863, 865, 866, 867, 869, 870, 871, 872, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885,
886, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 901, 902, 903, 904, 905, 907, 912,
916, 917, 918, 919, 921, 922, 923, 925, 926, 929, 930, 931, 932, 934, 935, 938, 938, 756, 755,
754, 938, 939, 939, 939, 939, 939, 940, 940, 940, 940, 940, 941, 753, 941, 942, 752, 942, 943,
943, 943, 751, 750, 749,
748, 746, 745, 744, 743, 742, 741, 740, 739, 738, 737, 736, 735, 734, 733, 732, 731, 729, 728,
727, 726, 725, 724, 723, 722, 721, 720, 719, 718, 717, 716, 715, 714, 713, 711, 710, 709, 708,
707, 706, 705, 704, 702, 701, 700, 699, 696, 695, 694, 693, 692, 690, 689, 688, 687, 686, 685,
684, 683, 682, 681, 680, 679, 678, 677, 676, 673, 672, 671, 670, 669, 668, 667, 666, 665, 664,
663, 662, 661, 660, 658, 657, 656, 655, 654, 653, 652, 651, 650, 649, 648, 647, 646, 645, 644,
639, 637, 636, 635, 634,
633, 632, 629, 628, 627, 626, 625, 624, 623, 622, 621, 620, 618, 617, 616, 615, 611, 610, 608,
607, 605, 604, 603, 602, 601, 600, 599, 598, 594, 593, 592, 590, 589, 587, 586, 585, 584, 583,
582, 581, 580, 579, 578, 576, 575, 570, 569, 568, 567, 566, 565, 563, 562, 560, 559, 558, 557,
556, 554, 553, 551, 550, 549, 548, 546, 545, 544, 543, 540, 539, 538, 537, 536, 535, 531, 530,
529, 528, 527, 526, 523, 522, 521, 520, 519, 518, 517, 516, 515, 514, 513, 512, 511, 509, 508,
505, 499, 497, 496, 495,
492, 489, 488, 487, 486, 475, 474, 473, 472, 471, 469, 468, 467, 466, 465, 462, 460, 459, 458,
456, 455, 453, 452, 450, 449, 448, 446, 445, 440, 439, 437, 436, 435, 434, 433, 432, 431, 430,
429, 428, 427, 425, 424, 423, 422, 421, 420, 419, 418, 416, 415, 414, 413, 412, 411, 410, 406,
402, 401, 400, 399, 398, 395, 393, 383, 381, 377, 376, 375, 374, 372, 371, 369, 365, 363, 362,
361, 360, 359, 358, 357, 356, 351, 349, 348, 347, 346, 345, 343, 342, 339, 338, 337, 336, 335,
334, 333, 332, 331, 330,
329, 328, 327, 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, 315, 314, 313, 312, 309,
306, 305, 304, 303, 302, 301, 300, 299, 297, 293, 291, 290, 289, 288, 284, 283, 282, 281, 280,
279, 278, 277, 276, 272, 271, 269, 268, 267, 266, 259, 258, 257, 256, 255, 253, 252, 251, 250,
249, 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 229,
228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 216, 215, 214, 213, 212, 211, 210, 209,
208, 207, 206, 205, 204,
203, 202, 201, 200, 198, 197, 196, 195, 194, 193, 192, 191, 190, 189, 188, 187, 185, 184, 183,
182, 180, 179, 178, 177, 176, 175, 173, 172, 157, 156, 155, 153, 152, 151, 147, 146, 145, 144,
143, 140, 139, 137, 135, 134, 132, 130, 129, 128, 126, 125, 124, 123, 121, 120, 118, 117, 116,
115, 114, 113, 110, 109, 108, 107, 106, 105, 104, 103, 101, 100, 99, 98, 97, 96, 95, 93,
92, 91, 87, 83, 53, 47, 45, 39, 32, 25, 22, 19, 14, 9, 5, 937, 937, 937, 937,
937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937};
/* Table of booleans, true if rule could match eol. */
static const flex_int32_t yy_rule_can_match_eol[250] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
static const flex_int32_t yy_rule_can_match_eol[257] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
};
/* The intent behind this definition is that it'll catch
......@@ -928,6 +938,11 @@ static int ES3_reserved_ES3_extension_ES3_1_keyword(TParseContext *context,
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword(TParseContext *context,
TExtension extension,
int token);
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context,
TExtension extension1,
TExtension extension2,
int token1,
int token2);
static int WEBGL_video_texture_extension(TParseContext *context, int token);
static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context);
......@@ -1235,12 +1250,12 @@ YY_DECL
while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
{
yy_current_state = (int)yy_def[yy_current_state];
if (yy_current_state >= 902)
if (yy_current_state >= 938)
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
} while (yy_current_state != 901);
} while (yy_current_state != 937);
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
......@@ -1582,100 +1597,156 @@ YY_DECL
case 87:
YY_RULE_SETUP
{
return WEBGL_video_texture_extension(context, SAMPLERVIDEOWEBGL);
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(
context, TExtension::OES_texture_cube_map_array,
TExtension::EXT_texture_cube_map_array, SAMPLERCUBEARRAYOES,
SAMPLERCUBEARRAYEXT);
}
YY_BREAK
case 88:
YY_RULE_SETUP { return STRUCT; }
YY_RULE_SETUP
{
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(
context, TExtension::OES_texture_cube_map_array,
TExtension::EXT_texture_cube_map_array, SAMPLERCUBEARRAYSHADOWOES,
SAMPLERCUBEARRAYSHADOWEXT);
}
YY_BREAK
case 89:
YY_RULE_SETUP { return ES3_keyword(context, LAYOUT); }
YY_RULE_SETUP
{
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(
context, TExtension::OES_texture_cube_map_array,
TExtension::EXT_texture_cube_map_array, ISAMPLERCUBEARRAYOES,
ISAMPLERCUBEARRAYEXT);
}
YY_BREAK
case 90:
YY_RULE_SETUP
{
return ES3_extension(context, TExtension::EXT_YUV_target,
YUVCSCSTANDARDEXT);
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(
context, TExtension::OES_texture_cube_map_array,
TExtension::EXT_texture_cube_map_array, USAMPLERCUBEARRAYOES,
USAMPLERCUBEARRAYEXT);
}
YY_BREAK
case 91:
YY_RULE_SETUP { return yuvcscstandardext_constant(context); }
YY_RULE_SETUP
{
return WEBGL_video_texture_extension(context, SAMPLERVIDEOWEBGL);
}
YY_BREAK
case 92:
YY_RULE_SETUP { return yuvcscstandardext_constant(context); }
YY_RULE_SETUP { return STRUCT; }
YY_BREAK
case 93:
YY_RULE_SETUP { return yuvcscstandardext_constant(context); }
YY_RULE_SETUP { return ES3_keyword(context, LAYOUT); }
YY_BREAK
case 94:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
YY_RULE_SETUP
{
return ES3_extension(context, TExtension::EXT_YUV_target,
YUVCSCSTANDARDEXT);
}
YY_BREAK
case 95:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
YY_RULE_SETUP { return yuvcscstandardext_constant(context); }
YY_BREAK
case 96:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
YY_RULE_SETUP { return yuvcscstandardext_constant(context); }
YY_BREAK
case 97:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
YY_RULE_SETUP { return yuvcscstandardext_constant(context); }
YY_BREAK
case 98:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
YY_BREAK
case 99:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
YY_BREAK
case 100:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
YY_BREAK
case 101:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
YY_BREAK
case 102:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
YY_BREAK
case 103:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
YY_BREAK
case 104:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
YY_BREAK
case 105:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
YY_BREAK
case 106:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, READONLY); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
YY_BREAK
case 107:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
YY_BREAK
case 108:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, COHERENT); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
YY_BREAK
case 109:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, RESTRICT); }
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
YY_BREAK
case 110:
YY_RULE_SETUP { return ES2_reserved_ES3_1_keyword(context, VOLATILE); }
YY_RULE_SETUP
{
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(
context, TExtension::OES_texture_cube_map_array,
TExtension::EXT_texture_cube_map_array, IMAGECUBEARRAYOES,
IMAGECUBEARRAYEXT);
}
YY_BREAK
case 111:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, ATOMICUINT); }
YY_RULE_SETUP
{
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(
context, TExtension::OES_texture_cube_map_array,
TExtension::EXT_texture_cube_map_array, IIMAGECUBEARRAYOES,
IIMAGECUBEARRAYEXT);
}
YY_BREAK
case 112:
YY_RULE_SETUP
{
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword(
context, TExtension::EXT_gpu_shader5, PRECISE);
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(
context, TExtension::OES_texture_cube_map_array,
TExtension::EXT_texture_cube_map_array, UIMAGECUBEARRAYOES,
UIMAGECUBEARRAYEXT);
}
YY_BREAK
/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
case 113:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, READONLY); }
YY_BREAK
case 114:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
YY_BREAK
case 115:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, COHERENT); }
YY_BREAK
case 116:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, RESTRICT); }
YY_BREAK
case 117:
YY_RULE_SETUP { return ES2_reserved_ES3_1_keyword(context, VOLATILE); }
YY_BREAK
case 118:
YY_RULE_SETUP { return ES3_reserved_ES3_1_keyword(context, ATOMICUINT); }
YY_BREAK
case 119:
YY_RULE_SETUP
{
return ES3_1_reserved_ES3_1_extension_ES3_2_keyword(
context, TExtension::EXT_gpu_shader5, PRECISE);
}
YY_BREAK
/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
case 120:
case 121:
case 122:
......@@ -1701,6 +1772,13 @@ YY_DECL
case 142:
case 143:
case 144:
case 145:
case 146:
case 147:
case 148:
case 149:
case 150:
case 151:
YY_RULE_SETUP
{
if (context->getShaderVersion() < 300)
......@@ -1712,7 +1790,7 @@ YY_DECL
}
YY_BREAK
/* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
case 145:
case 152:
YY_RULE_SETUP
{
if (context->getShaderVersion() >= 300)
......@@ -1725,13 +1803,6 @@ YY_DECL
}
YY_BREAK
/* Reserved keywords */
case 146:
case 147:
case 148:
case 149:
case 150:
case 151:
case 152:
case 153:
case 154:
case 155:
......@@ -1765,191 +1836,198 @@ YY_DECL
case 183:
case 184:
case 185:
case 186:
case 187:
case 188:
case 189:
case 190:
case 191:
case 192:
YY_RULE_SETUP { return reserved_word(yyscanner); }
YY_BREAK
case 186:
case 193:
YY_RULE_SETUP
{
yylval->lex.string = AllocatePoolCharArray(yytext, yyleng);
return check_type(yyscanner);
}
YY_BREAK
case 187:
case 194:
YY_RULE_SETUP { return int_constant(context); }
YY_BREAK
case 188:
case 195:
YY_RULE_SETUP { return int_constant(context); }
YY_BREAK
case 189:
case 196:
YY_RULE_SETUP { return int_constant(context); }
YY_BREAK
case 190:
case 197:
YY_RULE_SETUP { return uint_constant(context); }
YY_BREAK
case 191:
case 198:
YY_RULE_SETUP { return uint_constant(context); }
YY_BREAK
case 192:
case 199:
YY_RULE_SETUP { return uint_constant(context); }
YY_BREAK
case 193:
case 200:
YY_RULE_SETUP { return float_constant(yyscanner); }
YY_BREAK
case 194:
case 201:
YY_RULE_SETUP { return float_constant(yyscanner); }
YY_BREAK
case 195:
case 202:
YY_RULE_SETUP { return float_constant(yyscanner); }
YY_BREAK
case 196:
case 203:
YY_RULE_SETUP { return floatsuffix_check(context); }
YY_BREAK
case 197:
case 204:
YY_RULE_SETUP { return floatsuffix_check(context); }
YY_BREAK
case 198:
case 205:
YY_RULE_SETUP { return floatsuffix_check(context); }
YY_BREAK
case 199:
case 206:
YY_RULE_SETUP { return ADD_ASSIGN; }
YY_BREAK
case 200:
case 207:
YY_RULE_SETUP { return SUB_ASSIGN; }
YY_BREAK
case 201:
case 208:
YY_RULE_SETUP { return MUL_ASSIGN; }
YY_BREAK
case 202:
case 209:
YY_RULE_SETUP { return DIV_ASSIGN; }
YY_BREAK
case 203:
case 210:
YY_RULE_SETUP { return MOD_ASSIGN; }
YY_BREAK
case 204:
case 211:
YY_RULE_SETUP { return LEFT_ASSIGN; }
YY_BREAK
case 205:
case 212:
YY_RULE_SETUP { return RIGHT_ASSIGN; }
YY_BREAK
case 206:
case 213:
YY_RULE_SETUP { return AND_ASSIGN; }
YY_BREAK
case 207:
case 214:
YY_RULE_SETUP { return XOR_ASSIGN; }
YY_BREAK
case 208:
case 215:
YY_RULE_SETUP { return OR_ASSIGN; }
YY_BREAK
case 209:
case 216:
YY_RULE_SETUP { return INC_OP; }
YY_BREAK
case 210:
case 217:
YY_RULE_SETUP { return DEC_OP; }
YY_BREAK
case 211:
case 218:
YY_RULE_SETUP { return AND_OP; }
YY_BREAK
case 212:
case 219:
YY_RULE_SETUP { return OR_OP; }
YY_BREAK
case 213:
case 220:
YY_RULE_SETUP { return XOR_OP; }
YY_BREAK
case 214:
case 221:
YY_RULE_SETUP { return LE_OP; }
YY_BREAK
case 215:
case 222:
YY_RULE_SETUP { return GE_OP; }
YY_BREAK
case 216:
case 223:
YY_RULE_SETUP { return EQ_OP; }
YY_BREAK
case 217:
case 224:
YY_RULE_SETUP { return NE_OP; }
YY_BREAK
case 218:
case 225:
YY_RULE_SETUP { return LEFT_OP; }
YY_BREAK
case 219:
case 226:
YY_RULE_SETUP { return RIGHT_OP; }
YY_BREAK
case 220:
case 227:
YY_RULE_SETUP { return SEMICOLON; }
YY_BREAK
case 221:
case 228:
YY_RULE_SETUP { return LEFT_BRACE; }
YY_BREAK
case 222:
case 229:
YY_RULE_SETUP { return RIGHT_BRACE; }
YY_BREAK
case 223:
case 230:
YY_RULE_SETUP { return COMMA; }
YY_BREAK
case 224:
case 231:
YY_RULE_SETUP { return COLON; }
YY_BREAK
case 225:
case 232:
YY_RULE_SETUP { return EQUAL; }
YY_BREAK
case 226:
case 233:
YY_RULE_SETUP { return LEFT_PAREN; }
YY_BREAK
case 227:
case 234:
YY_RULE_SETUP { return RIGHT_PAREN; }
YY_BREAK
case 228:
case 235:
YY_RULE_SETUP { return LEFT_BRACKET; }
YY_BREAK
case 229:
case 236:
YY_RULE_SETUP { return RIGHT_BRACKET; }
YY_BREAK
case 230:
case 237:
YY_RULE_SETUP
{
BEGIN(FIELDS);
return DOT;
}
YY_BREAK
case 231:
case 238:
YY_RULE_SETUP { return BANG; }
YY_BREAK
case 232:
case 239:
YY_RULE_SETUP { return DASH; }
YY_BREAK
case 233:
case 240:
YY_RULE_SETUP { return TILDE; }
YY_BREAK
case 234:
case 241:
YY_RULE_SETUP { return PLUS; }
YY_BREAK
case 235:
case 242:
YY_RULE_SETUP { return STAR; }
YY_BREAK
case 236:
case 243:
YY_RULE_SETUP { return SLASH; }
YY_BREAK
case 237:
case 244:
YY_RULE_SETUP { return PERCENT; }
YY_BREAK
case 238:
case 245:
YY_RULE_SETUP { return LEFT_ANGLE; }
YY_BREAK
case 239:
case 246:
YY_RULE_SETUP { return RIGHT_ANGLE; }
YY_BREAK
case 240:
case 247:
YY_RULE_SETUP { return VERTICAL_BAR; }
YY_BREAK
case 241:
case 248:
YY_RULE_SETUP { return CARET; }
YY_BREAK
case 242:
case 249:
YY_RULE_SETUP { return AMPERSAND; }
YY_BREAK
case 243:
case 250:
YY_RULE_SETUP { return QUESTION; }
YY_BREAK
case 244:
case 251:
YY_RULE_SETUP
{
BEGIN(INITIAL);
......@@ -1957,18 +2035,18 @@ YY_DECL
return FIELD_SELECTION;
}
YY_BREAK
case 245:
case 252:
YY_RULE_SETUP {}
YY_BREAK
case 246:
case 253:
YY_RULE_SETUP
{
yyextra->error(*yylloc, "Illegal character at fieldname start", yytext);
return 0;
}
YY_BREAK
case 247:
/* rule 247 can match eol */
case 254:
/* rule 254 can match eol */
YY_RULE_SETUP {}
YY_BREAK
case YY_STATE_EOF(INITIAL):
......@@ -1977,14 +2055,14 @@ YY_DECL
yyterminate();
}
YY_BREAK
case 248:
case 255:
YY_RULE_SETUP
{
assert(false);
return 0;
}
YY_BREAK
case 249:
case 256:
YY_RULE_SETUP
ECHO;
YY_BREAK
......@@ -2278,7 +2356,7 @@ static yy_state_type yy_get_previous_state(yyscan_t yyscanner)
while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
{
yy_current_state = (int)yy_def[yy_current_state];
if (yy_current_state >= 902)
if (yy_current_state >= 938)
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
......@@ -2308,11 +2386,11 @@ static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state, yyscan_t y
while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
{
yy_current_state = (int)yy_def[yy_current_state];
if (yy_current_state >= 902)
if (yy_current_state >= 938)
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
yy_is_jam = (yy_current_state == 901);
yy_is_jam = (yy_current_state == 937);
(void)yyg;
return yy_is_jam ? 0 : yy_current_state;
......@@ -3424,6 +3502,35 @@ static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword(TParseContext *context,
return check_type(yyscanner);
}
static int ES3_1_reserved_ES3_1_extension_ES3_2_keyword_2(TParseContext *context,
TExtension extension1,
TExtension extension2,
int token1,
int token2)
{
struct yyguts_t *yyg = (struct yyguts_t *)context->getScanner();
yyscan_t yyscanner = (yyscan_t)context->getScanner();
// A keyword in GLSL ES 3.20 or GLSL ES 3.10 with enabled extension.
if (is_extension_enabled_or_is_core(context, 310, extension1, 320))
{
return token1;
}
else if (is_extension_enabled_or_is_core(context, 310, extension2, 320))
{
return token2;
}
// A reserved word in GLSL ES 3.10
if (context->getShaderVersion() == 310)
{
return reserved_word(yyscanner);
}
yylval->lex.string = AllocatePoolCharArray(yytext, yyleng);
return check_type(yyscanner);
}
int uint_constant(TParseContext *context)
{
struct yyguts_t *yyg = (struct yyguts_t *)context->getScanner();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -142,75 +142,89 @@ enum yytokentype
SAMPLERCUBESHADOW = 343,
SAMPLER2DARRAYSHADOW = 344,
SAMPLERVIDEOWEBGL = 345,
SAMPLEREXTERNAL2DY2YEXT = 346,
IMAGE2D = 347,
IIMAGE2D = 348,
UIMAGE2D = 349,
IMAGE3D = 350,
IIMAGE3D = 351,
UIMAGE3D = 352,
IMAGE2DARRAY = 353,
IIMAGE2DARRAY = 354,
UIMAGE2DARRAY = 355,
IMAGECUBE = 356,
IIMAGECUBE = 357,
UIMAGECUBE = 358,
ATOMICUINT = 359,
LAYOUT = 360,
YUVCSCSTANDARDEXT = 361,
YUVCSCSTANDARDEXTCONSTANT = 362,
IDENTIFIER = 363,
TYPE_NAME = 364,
FLOATCONSTANT = 365,
INTCONSTANT = 366,
UINTCONSTANT = 367,
BOOLCONSTANT = 368,
FIELD_SELECTION = 369,
LEFT_OP = 370,
RIGHT_OP = 371,
INC_OP = 372,
DEC_OP = 373,
LE_OP = 374,
GE_OP = 375,
EQ_OP = 376,
NE_OP = 377,
AND_OP = 378,
OR_OP = 379,
XOR_OP = 380,
MUL_ASSIGN = 381,
DIV_ASSIGN = 382,
ADD_ASSIGN = 383,
MOD_ASSIGN = 384,
LEFT_ASSIGN = 385,
RIGHT_ASSIGN = 386,
AND_ASSIGN = 387,
XOR_ASSIGN = 388,
OR_ASSIGN = 389,
SUB_ASSIGN = 390,
LEFT_PAREN = 391,
RIGHT_PAREN = 392,
LEFT_BRACKET = 393,
RIGHT_BRACKET = 394,
LEFT_BRACE = 395,
RIGHT_BRACE = 396,
DOT = 397,
COMMA = 398,
COLON = 399,
EQUAL = 400,
SEMICOLON = 401,
BANG = 402,
DASH = 403,
TILDE = 404,
PLUS = 405,
STAR = 406,
SLASH = 407,
PERCENT = 408,
LEFT_ANGLE = 409,
RIGHT_ANGLE = 410,
VERTICAL_BAR = 411,
CARET = 412,
AMPERSAND = 413,
QUESTION = 414
SAMPLERCUBEARRAYOES = 346,
SAMPLERCUBEARRAYSHADOWOES = 347,
ISAMPLERCUBEARRAYOES = 348,
USAMPLERCUBEARRAYOES = 349,
SAMPLERCUBEARRAYEXT = 350,
SAMPLERCUBEARRAYSHADOWEXT = 351,
ISAMPLERCUBEARRAYEXT = 352,
USAMPLERCUBEARRAYEXT = 353,
SAMPLEREXTERNAL2DY2YEXT = 354,
IMAGE2D = 355,
IIMAGE2D = 356,
UIMAGE2D = 357,
IMAGE3D = 358,
IIMAGE3D = 359,
UIMAGE3D = 360,
IMAGE2DARRAY = 361,
IIMAGE2DARRAY = 362,
UIMAGE2DARRAY = 363,
IMAGECUBE = 364,
IIMAGECUBE = 365,
UIMAGECUBE = 366,
IMAGECUBEARRAYOES = 367,
IIMAGECUBEARRAYOES = 368,
UIMAGECUBEARRAYOES = 369,
IMAGECUBEARRAYEXT = 370,
IIMAGECUBEARRAYEXT = 371,
UIMAGECUBEARRAYEXT = 372,
ATOMICUINT = 373,
LAYOUT = 374,
YUVCSCSTANDARDEXT = 375,
YUVCSCSTANDARDEXTCONSTANT = 376,
IDENTIFIER = 377,
TYPE_NAME = 378,
FLOATCONSTANT = 379,
INTCONSTANT = 380,
UINTCONSTANT = 381,
BOOLCONSTANT = 382,
FIELD_SELECTION = 383,
LEFT_OP = 384,
RIGHT_OP = 385,
INC_OP = 386,
DEC_OP = 387,
LE_OP = 388,
GE_OP = 389,
EQ_OP = 390,
NE_OP = 391,
AND_OP = 392,
OR_OP = 393,
XOR_OP = 394,
MUL_ASSIGN = 395,
DIV_ASSIGN = 396,
ADD_ASSIGN = 397,
MOD_ASSIGN = 398,
LEFT_ASSIGN = 399,
RIGHT_ASSIGN = 400,
AND_ASSIGN = 401,
XOR_ASSIGN = 402,
OR_ASSIGN = 403,
SUB_ASSIGN = 404,
LEFT_PAREN = 405,
RIGHT_PAREN = 406,
LEFT_BRACKET = 407,
RIGHT_BRACKET = 408,
LEFT_BRACE = 409,
RIGHT_BRACE = 410,
DOT = 411,
COMMA = 412,
COLON = 413,
EQUAL = 414,
SEMICOLON = 415,
BANG = 416,
DASH = 417,
TILDE = 418,
PLUS = 419,
STAR = 420,
SLASH = 421,
PERCENT = 422,
LEFT_ANGLE = 423,
RIGHT_ANGLE = 424,
VERTICAL_BAR = 425,
CARET = 426,
AMPERSAND = 427,
QUESTION = 428
};
#endif
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -378,6 +378,8 @@ GLenum GLVariableType(const TType &type)
return GL_SAMPLER_2D_MULTISAMPLE;
case EbtSampler2DMSArray:
return GL_SAMPLER_2D_MULTISAMPLE_ARRAY;
case EbtSamplerCubeArray:
return GL_SAMPLER_CUBE_MAP_ARRAY;
case EbtISampler2D:
return GL_INT_SAMPLER_2D;
case EbtISampler3D:
......@@ -390,6 +392,8 @@ GLenum GLVariableType(const TType &type)
return GL_INT_SAMPLER_2D_MULTISAMPLE;
case EbtISampler2DMSArray:
return GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY;
case EbtISamplerCubeArray:
return GL_INT_SAMPLER_CUBE_MAP_ARRAY;
case EbtUSampler2D:
return GL_UNSIGNED_INT_SAMPLER_2D;
case EbtUSampler3D:
......@@ -402,12 +406,16 @@ GLenum GLVariableType(const TType &type)
return GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE;
case EbtUSampler2DMSArray:
return GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY;
case EbtUSamplerCubeArray:
return GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY;
case EbtSampler2DShadow:
return GL_SAMPLER_2D_SHADOW;
case EbtSamplerCubeShadow:
return GL_SAMPLER_CUBE_SHADOW;
case EbtSampler2DArrayShadow:
return GL_SAMPLER_2D_ARRAY_SHADOW;
case EbtSamplerCubeArrayShadow:
return GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW;
case EbtImage2D:
return GL_IMAGE_2D;
case EbtIImage2D:
......@@ -432,6 +440,12 @@ GLenum GLVariableType(const TType &type)
return GL_INT_IMAGE_CUBE;
case EbtUImageCube:
return GL_UNSIGNED_INT_IMAGE_CUBE;
case EbtImageCubeArray:
return GL_IMAGE_CUBE_MAP_ARRAY;
case EbtIImageCubeArray:
return GL_INT_IMAGE_CUBE_MAP_ARRAY;
case EbtUImageCubeArray:
return GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY;
case EbtAtomicCounter:
return GL_UNSIGNED_INT_ATOMIC_COUNTER;
case EbtSamplerVideoWEBGL:
......
......@@ -123,6 +123,10 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const State &state)
// WEBGL_video_texture
mResources.WEBGL_video_texture = extensions.webglVideoTexture;
// OES_texture_cube_map_array
mResources.OES_texture_cube_map_array = extensions.textureCubeMapArrayOES;
mResources.EXT_texture_cube_map_array = extensions.textureCubeMapArrayEXT;
// GLSL ES 3.0 constants
mResources.MaxVertexOutputVectors = caps.maxVertexOutputComponents / 4;
mResources.MaxFragmentInputVectors = caps.maxFragmentInputComponents / 4;
......
......@@ -1126,6 +1126,22 @@ void GenerateCaps(const FunctionsGL *functions,
LimitVersion(maxSupportedESVersion, gl::Version(2, 0));
}
// GL_OES_texture_cube_map_array
if (functions->isAtLeastGL(gl::Version(4, 0)) ||
functions->hasGLESExtension("GL_OES_texture_cube_map_array") ||
functions->hasGLESExtension("GL_EXT_texture_cube_map_array") ||
functions->hasGLExtension("GL_ARB_texture_cube_map_array") ||
functions->isAtLeastGLES(gl::Version(3, 2)))
{
extensions->textureCubeMapArrayOES = true;
extensions->textureCubeMapArrayEXT = true;
}
else
{
// Can't support ES3.2 without cube map array textures
LimitVersion(maxSupportedESVersion, gl::Version(3, 1));
}
// Extension support
extensions->setTextureExtensionSupport(*textureCapsMap);
extensions->textureCompressionASTCHDRKHR =
......
......@@ -80,6 +80,7 @@ angle_unittests_sources = [
"compiler_tests/IntermNode_test.cpp",
"compiler_tests/NV_draw_buffers_test.cpp",
"compiler_tests/OES_standard_derivatives_test.cpp",
"compiler_tests/OES_texture_cube_map_array_test.cpp",
"compiler_tests/OVR_multiview2_test.cpp",
"compiler_tests/OVR_multiview_test.cpp",
"compiler_tests/Pack_Unpack_test.cpp",
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
//
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// OES_texture_cube_map_array_test.cpp:
// Test for the [OES/EXT]_texture_cube_map_array extension
//
#include "GLSLANG/ShaderLang.h"
#include "angle_gl.h"
#include "gtest/gtest.h"
#include "tests/test_utils/ShaderCompileTreeTest.h"
using namespace sh;
class TextureCubeMapArrayTestNoExt : public ShaderCompileTreeTest
{
protected:
::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; }
ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
};
class OESTextureCubeMapArrayTest : public TextureCubeMapArrayTestNoExt
{
protected:
void initResources(ShBuiltInResources *resources) override
{
resources->OES_texture_cube_map_array = 1;
}
};
class EXTTextureCubeMapArrayTest : public TextureCubeMapArrayTestNoExt
{
protected:
void initResources(ShBuiltInResources *resources) override
{
resources->EXT_texture_cube_map_array = 1;
}
};
// Check that if the extension is not supported, trying to use the features without having an
// extension directive fails.
TEST_F(TextureCubeMapArrayTestNoExt, MissingExtensionDirective)
{
const std::string &shaderString =
R"(
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Check that if the extension is not supported, trying to use the features without having an
// extension directive fails.
TEST_F(OESTextureCubeMapArrayTest, MissingExtensionDirective)
{
const std::string &shaderString =
R"(
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Check that if the extension is not supported, trying to use the features without having an
// extension directive fails.
TEST_F(EXTTextureCubeMapArrayTest, MissingExtensionDirective)
{
const std::string &shaderString =
R"(
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Check that if the extension is enabled, trying to use the features without the extension
// enabled fails.
TEST_F(TextureCubeMapArrayTestNoExt, ExtensionEnabledOES)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_texture_cube_map_array : enable
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Check that if the extension supported and enabled, using the features succeeds.
TEST_F(OESTextureCubeMapArrayTest, ExtensionEnabledOES)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_texture_cube_map_array : enable
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (!compile(shaderString))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Check that if the extension is enabled, trying to use the features without the extension
// enabled fails.
TEST_F(EXTTextureCubeMapArrayTest, ExtensionEnabledOES)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_texture_cube_map_array : enable
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Check that if the extension is enabled, trying to use the features without the extension
// enabled fails.
TEST_F(TextureCubeMapArrayTestNoExt, ExtensionEnabledEXT)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_EXT_texture_cube_map_array : enable
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Check that if the extension is enabled, trying to use the features without the extension
// enabled fails.
TEST_F(OESTextureCubeMapArrayTest, ExtensionEnabledEXT)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_EXT_texture_cube_map_array : enable
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Check that if the extension supported and enabled, using the features succeeds.
TEST_F(EXTTextureCubeMapArrayTest, ExtensionEnabledEXT)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_EXT_texture_cube_map_array : enable
precision mediump float;
uniform highp isamplerCubeArray u_sampler;
void main()
{
vec4 color = vec4(texture(u_sampler, vec4(0, 0, 0, 0)));
})";
if (!compile(shaderString))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
......@@ -147,6 +147,8 @@
1442 OPENGL : dEQP-GLES31.functional.state_query.program_pipeline.* = SKIP
1442 D3D11 : dEQP-GLES31.functional.state_query.program_pipeline.* = SKIP
3584 OPENGL : dEQP-GLES31.functional.shaders.opaque_type_indexing.sampler.*samplercubearray* = PASS
// These tests are failing because of compile errors with SSBOs in compute shaders.
1442 D3D11 : dEQP-GLES31.functional.stencil_texturing.* = SKIP
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment