translator: Add ES3.1 multisample texture support.

Implement shader objects, [iu]sampler2DMS, textureSize(gsampler2DMS).
as well as texelFetch(gsampler2DMS,P,sample) for the glsl.

BUG=angleproject:1590

TEST=angle_unittests
TEST=angle_end2end_tests

Change-Id: I781023f7bec34ad0264af69f34bb182b50bd1fbd
Reviewed-on: https://chromium-review.googlesource.com/423175
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/BaseTypes.h b/src/compiler/translator/BaseTypes.h
index da64691..abf392b 100644
--- a/src/compiler/translator/BaseTypes.h
+++ b/src/compiler/translator/BaseTypes.h
@@ -72,14 +72,17 @@
     EbtSampler2DArray,
     EbtSamplerExternalOES,  // Only valid if OES_EGL_image_external exists.
     EbtSampler2DRect,       // Only valid if GL_ARB_texture_rectangle exists.
+    EbtSampler2DMS,
     EbtISampler2D,
     EbtISampler3D,
     EbtISamplerCube,
     EbtISampler2DArray,
+    EbtISampler2DMS,
     EbtUSampler2D,
     EbtUSampler3D,
     EbtUSamplerCube,
     EbtUSampler2DArray,
+    EbtUSampler2DMS,
     EbtSampler2DShadow,
     EbtSamplerCubeShadow,
     EbtSampler2DArrayShadow,
@@ -89,6 +92,7 @@
     EbtGSamplerCube,     // non type: represents samplerCube, isamplerCube, and usamplerCube
     EbtGSampler2DArray,  // non type: represents sampler2DArray, isampler2DArray, and
                          // usampler2DArray
+    EbtGSampler2DMS,     // non type: represents sampler2DMS, isampler2DMS, and usampler2DMS
 
     // images
     EbtGuardImageBegin,
@@ -206,10 +210,12 @@
         case EbtISampler3D:
         case EbtISamplerCube:
         case EbtISampler2DArray:
+        case EbtISampler2DMS:
         case EbtUSampler2D:
         case EbtUSampler3D:
         case EbtUSamplerCube:
         case EbtUSampler2DArray:
+        case EbtUSampler2DMS:
             return true;
         case EbtSampler2D:
         case EbtSampler3D:
@@ -220,6 +226,7 @@
         case EbtSampler2DShadow:
         case EbtSamplerCubeShadow:
         case EbtSampler2DArrayShadow:
+        case EbtSampler2DMS:
             return false;
         default:
             assert(!IsSampler(type));
@@ -292,6 +299,9 @@
         case EbtSamplerExternalOES:
         case EbtSampler2DShadow:
         case EbtSampler2DArrayShadow:
+        case EbtSampler2DMS:
+        case EbtISampler2DMS:
+        case EbtUSampler2DMS:
             return true;
         case EbtSampler3D:
         case EbtISampler3D:
@@ -322,12 +332,15 @@
         case EbtSamplerExternalOES:
         case EbtSampler2DRect:
         case EbtSampler2DArray:
+        case EbtSampler2DMS:
         case EbtISampler2D:
         case EbtISampler3D:
         case EbtISampler2DArray:
+        case EbtISampler2DMS:
         case EbtUSampler2D:
         case EbtUSampler3D:
         case EbtUSampler2DArray:
+        case EbtUSampler2DMS:
         case EbtSampler2DShadow:
         case EbtSampler2DArrayShadow:
             return false;
@@ -351,12 +364,15 @@
         case EbtSamplerExternalOES:
         case EbtSampler2DRect:
         case EbtSampler2DArray:
+        case EbtSampler2DMS:
         case EbtISampler2D:
         case EbtISamplerCube:
         case EbtISampler2DArray:
+        case EbtISampler2DMS:
         case EbtUSampler2D:
         case EbtUSamplerCube:
         case EbtUSampler2DArray:
+        case EbtUSampler2DMS:
         case EbtSampler2DShadow:
         case EbtSamplerCubeShadow:
         case EbtSampler2DArrayShadow:
@@ -390,6 +406,9 @@
         case EbtSamplerCube:
         case EbtSampler2DShadow:
         case EbtSamplerCubeShadow:
+        case EbtSampler2DMS:
+        case EbtISampler2DMS:
+        case EbtUSampler2DMS:
             return false;
         default:
             assert(!IsSampler(type));
@@ -410,16 +429,19 @@
         case EbtISampler3D:
         case EbtISamplerCube:
         case EbtISampler2DArray:
+        case EbtISampler2DMS:
         case EbtUSampler2D:
         case EbtUSampler3D:
         case EbtUSamplerCube:
         case EbtUSampler2DArray:
+        case EbtUSampler2DMS:
         case EbtSampler2D:
         case EbtSampler3D:
         case EbtSamplerCube:
         case EbtSamplerExternalOES:
         case EbtSampler2DRect:
         case EbtSampler2DArray:
+        case EbtSampler2DMS:
             return false;
         default:
             assert(!IsSampler(type));
diff --git a/src/compiler/translator/Initialize.cpp b/src/compiler/translator/Initialize.cpp
index b369223..fa767e0 100644
--- a/src/compiler/translator/Initialize.cpp
+++ b/src/compiler/translator/Initialize.cpp
@@ -373,6 +373,7 @@
     const TType *gsamplerCube    = TCache::getType(EbtGSamplerCube);
     const TType *gsampler3D      = TCache::getType(EbtGSampler3D);
     const TType *gsampler2DArray = TCache::getType(EbtGSampler2DArray);
+    const TType *gsampler2DMS    = TCache::getType(EbtGSampler2DMS);
 
     //
     // Texture Functions for GLSL ES 3.0
@@ -452,6 +453,7 @@
     symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "textureSize", sampler2DShadow, int1);
     symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "textureSize", samplerCubeShadow, int1);
     symbolTable.insertBuiltIn(ESSL3_BUILTINS, int3, "textureSize", sampler2DArrayShadow, int1);
+    symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "textureSize", gsampler2DMS);
 
     if (resources.OES_EGL_image_external_essl3)
     {
@@ -620,6 +622,8 @@
     symbolTable.insertBuiltInFunctionNoParameters(ESSL3_1_BUILTINS, EOpMemoryBarrierImage, voidType,
                                                   "memoryBarrierImage");
 
+    symbolTable.insertBuiltIn(ESSL3_1_BUILTINS, gvec4, "texelFetch", gsampler2DMS, int2, int1);
+
     if (type == GL_COMPUTE_SHADER)
     {
         symbolTable.insertBuiltInFunctionNoParameters(ESSL3_1_BUILTINS, EOpBarrier, voidType,
diff --git a/src/compiler/translator/SymbolTable.cpp b/src/compiler/translator/SymbolTable.cpp
index 857873c..b28eda1 100644
--- a/src/compiler/translator/SymbolTable.cpp
+++ b/src/compiler/translator/SymbolTable.cpp
@@ -290,6 +290,17 @@
         insertBuiltIn(level, gvec4 ? TCache::getType(EbtUInt, 4) : rvalue, name,
                       TCache::getType(EbtUSampler2DArray), ptype2, ptype3, ptype4, ptype5);
     }
+    else if (ptype1->getBasicType() == EbtGSampler2DMS)
+    {
+        insertUnmangledBuiltInName(name, level);
+        bool gvec4 = (rvalue->getBasicType() == EbtGVec4);
+        insertBuiltIn(level, gvec4 ? TCache::getType(EbtFloat, 4) : rvalue, name,
+                      TCache::getType(EbtSampler2DMS), ptype2, ptype3, ptype4, ptype5);
+        insertBuiltIn(level, gvec4 ? TCache::getType(EbtInt, 4) : rvalue, name,
+                      TCache::getType(EbtISampler2DMS), ptype2, ptype3, ptype4, ptype5);
+        insertBuiltIn(level, gvec4 ? TCache::getType(EbtUInt, 4) : rvalue, name,
+                      TCache::getType(EbtUSampler2DMS), ptype2, ptype3, ptype4, ptype5);
+    }
     else if (IsGImage(ptype1->getBasicType()))
     {
         insertUnmangledBuiltInName(name, level);
diff --git a/src/compiler/translator/Types.cpp b/src/compiler/translator/Types.cpp
index 13f01b9..48818fb 100644
--- a/src/compiler/translator/Types.cpp
+++ b/src/compiler/translator/Types.cpp
@@ -45,6 +45,8 @@
             return "sampler2DRect";
         case EbtSampler2DArray:
             return "sampler2DArray";
+        case EbtSampler2DMS:
+            return "sampler2DMS";
         case EbtISampler2D:
             return "isampler2D";
         case EbtISampler3D:
@@ -53,6 +55,8 @@
             return "isamplerCube";
         case EbtISampler2DArray:
             return "isampler2DArray";
+        case EbtISampler2DMS:
+            return "isampler2DMS";
         case EbtUSampler2D:
             return "usampler2D";
         case EbtUSampler3D:
@@ -61,6 +65,8 @@
             return "usamplerCube";
         case EbtUSampler2DArray:
             return "usampler2DArray";
+        case EbtUSampler2DMS:
+            return "usampler2DMS";
         case EbtSampler2DShadow:
             return "sampler2DShadow";
         case EbtSamplerCubeShadow:
@@ -304,6 +310,9 @@
         case EbtSampler2DRect:
             mangledName += "s2r";
             break;
+        case EbtSampler2DMS:
+            mangledName += "s2ms";
+            break;
         case EbtISampler2D:
             mangledName += "is2";
             break;
@@ -316,6 +325,9 @@
         case EbtISampler2DArray:
             mangledName += "is2a";
             break;
+        case EbtISampler2DMS:
+            mangledName += "is2ms";
+            break;
         case EbtUSampler2D:
             mangledName += "us2";
             break;
@@ -328,6 +340,9 @@
         case EbtUSampler2DArray:
             mangledName += "us2a";
             break;
+        case EbtUSampler2DMS:
+            mangledName += "us2ms";
+            break;
         case EbtSampler2DShadow:
             mangledName += "s2s";
             break;
diff --git a/src/compiler/translator/glslang.l b/src/compiler/translator/glslang.l
index 10acdbc..91f6ad5 100644
--- a/src/compiler/translator/glslang.l
+++ b/src/compiler/translator/glslang.l
@@ -180,14 +180,17 @@
 "sampler3DRect"        { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
 "sampler2DRect"        { return SAMPLER2DRECT; }
 "sampler2DArray"       { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); }
+"sampler2DMS"          { return ES2_ident_ES3_reserved_ES3_1_keyword(context, SAMPLER2DMS); }
 "isampler2D"           { return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
 "isampler3D"           { return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
 "isamplerCube"         { return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
 "isampler2DArray"      { return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
+"isampler2DMS"         { return ES2_ident_ES3_reserved_ES3_1_keyword(context, ISAMPLER2DMS); }
 "usampler2D"           { return ES2_ident_ES3_keyword(context, USAMPLER2D); }
 "usampler3D"           { return ES2_ident_ES3_keyword(context, USAMPLER3D); }
 "usamplerCube"         { return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
 "usampler2DArray"      { return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
+"usampler2DMS"         { return ES2_ident_ES3_reserved_ES3_1_keyword(context, USAMPLER2DMS); }
 "sampler2DShadow"      { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
 "samplerCubeShadow"    { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
 "sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
@@ -251,9 +254,6 @@
 "samplerBuffer"     |
 "isamplerBuffer"    |
 "usamplerBuffer"    |
-"sampler2DMS"       |
-"isampler2DMS"      |
-"usampler2DMS"      |
 "sampler2DMSArray"  |
 "isampler2DMSArray" |
 "usampler2DMSArray" { 
diff --git a/src/compiler/translator/glslang.y b/src/compiler/translator/glslang.y
index e81e7a0..19bdd02 100644
--- a/src/compiler/translator/glslang.y
+++ b/src/compiler/translator/glslang.y
@@ -174,6 +174,7 @@
 %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT SAMPLER2DARRAY
 %token <lex> ISAMPLER2D ISAMPLER3D ISAMPLERCUBE ISAMPLER2DARRAY
 %token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY
+%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
 %token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW
 %token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
 %token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
@@ -1147,6 +1148,9 @@
     | SAMPLER2DARRAY {
         $$.initialize(EbtSampler2DArray, @1);
     }
+    | SAMPLER2DMS {
+        $$.initialize(EbtSampler2DMS, @1);
+    }
     | ISAMPLER2D {
         $$.initialize(EbtISampler2D, @1);
     }
@@ -1159,6 +1163,9 @@
     | ISAMPLER2DARRAY {
         $$.initialize(EbtISampler2DArray, @1);
     }
+    | ISAMPLER2DMS {
+        $$.initialize(EbtISampler2DMS, @1);
+    }
     | USAMPLER2D {
         $$.initialize(EbtUSampler2D, @1);
     }
@@ -1171,6 +1178,9 @@
     | USAMPLER2DARRAY {
         $$.initialize(EbtUSampler2DArray, @1);
     }
+    | USAMPLER2DMS {
+        $$.initialize(EbtUSampler2DMS, @1);
+    }
     | SAMPLER2DSHADOW {
         $$.initialize(EbtSampler2DShadow, @1);
     }
diff --git a/src/compiler/translator/glslang_lex.cpp b/src/compiler/translator/glslang_lex.cpp
index 47c64ff..d7c9e9b 100644
--- a/src/compiler/translator/glslang_lex.cpp
+++ b/src/compiler/translator/glslang_lex.cpp
@@ -222,7 +222,7 @@
     #define  YY_LESS_LINENO(n) \
             do { \
                 yy_size_t yyl;\
-                for ( yyl = n; yyl < yyleng; ++yyl )\
+                for ( yyl = n; yyl < static_cast<yy_site_t>(yyleng); ++yyl )\
                     if ( yytext[yyl] == '\n' )\
                         --yylineno;\
             }while(0)
@@ -397,7 +397,7 @@
  */
 #define YY_DO_BEFORE_ACTION \
 	yyg->yytext_ptr = yy_bp; \
-	yyleng = (yy_size_t) (yy_cp - yy_bp); \
+	yyleng = (size_t) (yy_cp - yy_bp); \
 	yyg->yy_hold_char = *yy_cp; \
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
@@ -455,55 +455,55 @@
       178,  165,  166,  167,  178,   33,  178,  157,   27,  168,
       169,  170,    2,  162,  163,  164,  178,  178,  178,   25,
       160,  178,  178,  178,   51,   52,   53,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  100,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  103,  178,
 
       178,  178,  178,  178,  178,  178,  178,  154,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  140,
       178,  178,  177,   57,   58,   59,  178,  178,   14,  178,
-      105,  178,  178,  178,  178,  103,  178,  178,  178,  155,
-      150,  106,  178,  178,  178,  178,  178,  178,  146,  178,
-      178,  178,   79,   39,   42,   44,   43,   40,   46,   45,
+      108,  178,  178,  178,  178,  106,  178,  178,  178,  155,
+      150,  109,  178,  178,  178,  178,  178,  178,  146,  178,
+      178,  178,   82,   39,   42,   44,   43,   40,   46,   45,
        47,   41,  178,  178,  178,  178,  161,  137,  178,  178,
-      148,  178,  178,  178,   35,  101,   26,  174,   22,  149,
-       78,  178,  159,   17,  178,  178,  178,  178,  178,  178,
+      148,  178,  178,  178,   35,  104,   26,  174,   22,  149,
+       81,  178,  159,   17,  178,  178,  178,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,   19,   34,
 
-      178,  178,  178,  178,  178,  178,  107,   80,   86,  178,
+      178,  178,  178,  178,  178,  178,  110,   83,   89,  178,
       178,  178,  178,  178,    3,  178,  178,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  142,  178,  178,  178,
       178,  178,    8,  178,  178,    9,  178,  178,  178,  178,
-       20,   94,   11,  151,  108,   81,   88,  178,  178,  178,
+       20,   97,   11,  151,  111,   84,   91,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  147,
-      178,  178,  178,   92,   97,   95,  178,  178,  178,  178,
-      178,  178,  178,  143,  109,   82,   87,  178,  178,  158,
-      178,   96,  178,  178,    6,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,   91,  152,    1,  178,  178,  178,
+      178,  178,  178,   95,  100,   98,  178,  178,  178,  178,
+      178,  178,  178,  143,  112,   85,   90,  178,  178,  158,
+      178,   99,  178,  178,    6,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,   94,  152,    1,  178,  178,  178,
 
-      178,  178,  176,  178,  104,    5,  171,   60,   63,  178,
+      178,  178,  176,  178,  107,    5,  171,   60,   63,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  178,   93,  178,  178,  178,  178,   89,  178,  178,
-      178,  178,  178,  122,   67,   68,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  178,  102,
-      178,  178,  178,   90,  124,   71,   72,  178,  178,   98,
-      178,  178,  178,  178,  178,  178,  178,  117,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  178,  131,  178,
+      178,  178,   96,  178,  178,  178,  178,   92,  178,  178,
+      178,  178,  178,  125,   68,   69,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  105,
+      178,  178,  178,   93,  127,   73,   74,  178,  178,  101,
+      178,  178,  178,  178,  178,  178,  178,  120,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,   67,  178,
       178,  178,  178,   61,  178,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  118,  110,  178,   83,
+      178,  178,  178,  178,  178,  178,  121,  113,  178,   86,
 
-      178,  178,  178,  132,  178,  178,   69,  178,  178,  178,
+      178,  178,  178,   72,  178,  178,   70,  178,  178,  178,
       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      119,  178,  178,  133,  178,  178,   73,  111,   84,  178,
-      113,  178,  114,  178,  178,  178,  178,  178,   99,  178,
-      178,  178,  178,   65,  178,   64,  128,  178,  178,  112,
-       85,  178,  178,  178,  178,  178,  178,  178,  178,  178,
-      178,  126,  129,  120,  178,   66,  178,  178,  178,  178,
-      178,  178,  178,  178,  127,  130,  178,  178,  123,   70,
-      178,  178,  172,  178,  178,  178,   75,  178,  178,  125,
-       74,  178,  178,  178,  178,  178,  178,  134,  178,  178,
+      122,  178,  178,   77,  178,  178,   75,  114,   87,  178,
+      116,  178,  117,  178,  178,  178,  178,  178,  102,  178,
+      178,  178,  178,   65,  178,   64,  131,  178,  178,  115,
+       88,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  129,  132,  123,  178,   66,  178,  178,  178,  178,
+      178,  178,  178,  178,  130,  133,  178,  178,  126,   71,
+      178,  178,  172,  178,  178,  178,   78,  178,  178,  128,
+       76,  178,  178,  178,  178,  178,  178,  134,  178,  178,
 
-      178,  178,  178,  178,  135,  178,  178,  178,   76,  178,
-      136,  115,  116,  178,  178,  178,   62,  178,  178,  173,
-      121,   77,    0
+      178,  178,  178,  178,  135,  178,  178,  178,   79,  178,
+      136,  118,  119,  178,  178,  178,   62,  178,  178,  173,
+      124,   80,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -1381,7 +1381,7 @@
 		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
 			{
 			yy_size_t yyl;
-			for ( yyl = 0; yyl < yyleng; ++yyl )
+			for ( yyl = 0; yyl < static_cast<yy_size_t>(yyleng); ++yyl )
 				if ( yytext[yyl] == '\n' )
 					   
     do{ yylineno++;
@@ -1667,128 +1667,137 @@
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, SAMPLER2DMS); }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLER2D); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLER3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, ISAMPLER2DMS); }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
+{ return ES2_ident_ES3_keyword(context, USAMPLER2D); }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
+{ return ES2_ident_ES3_keyword(context, USAMPLER3D); }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+{ return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
+{ return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, USAMPLER2DMS); }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-{ return STRUCT; }
+{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, LAYOUT); }
+{ return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
+{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
+{ return STRUCT; }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
+{ return ES2_ident_ES3_keyword(context, LAYOUT); }
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
+	YY_BREAK
+case 98:
+YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
+	YY_BREAK
+case 99:
+YY_RULE_SETUP
 { return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); }
 	YY_BREAK
 /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
-case 97:
-case 98:
-case 99:
 case 100:
 case 101:
 case 102:
@@ -2385,7 +2394,7 @@
 			yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
 
 			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
+						static_cast<int>(number_to_move) - 1;
 
 			}
 
@@ -2393,8 +2402,10 @@
 			num_to_read = YY_READ_BUF_SIZE;
 
 		/* Read in more data. */
+        size_t result = 0;
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			yyg->yy_n_chars, num_to_read );
+            result, num_to_read );
+        yyg->yy_n_chars = static_cast<int>(result);
 
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
 		}
@@ -2835,7 +2846,7 @@
 		/* Increase the buffer to prepare for a possible push. */
 		int grow_size = 8 /* arbitrary grow size */;
 
-		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+		num_to_alloc = static_cast<int>(yyg->yy_buffer_stack_max + grow_size);
 		yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
 								(yyg->yy_buffer_stack,
 								num_to_alloc * sizeof(struct yy_buffer_state*)
@@ -2869,7 +2880,7 @@
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_size = static_cast<int>(size) - 2;	/* "- 2" to take care of EOB's */
 	b->yy_buf_pos = b->yy_ch_buf = base;
 	b->yy_is_our_buffer = 0;
 	b->yy_input_file = 0;
@@ -2918,7 +2929,7 @@
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
 
-	for ( i = 0; i < _yybytes_len; ++i )
+	for ( i = 0; i < static_cast<yy_size_t>(_yybytes_len); ++i )
 		buf[i] = yybytes[i];
 
 	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
diff --git a/src/compiler/translator/glslang_tab.cpp b/src/compiler/translator/glslang_tab.cpp
index 4f8d18d..173bcc1 100644
--- a/src/compiler/translator/glslang_tab.cpp
+++ b/src/compiler/translator/glslang_tab.cpp
@@ -210,76 +210,79 @@
     USAMPLER3D = 328,
     USAMPLERCUBE = 329,
     USAMPLER2DARRAY = 330,
-    SAMPLER3D = 331,
-    SAMPLER3DRECT = 332,
-    SAMPLER2DSHADOW = 333,
-    SAMPLERCUBESHADOW = 334,
-    SAMPLER2DARRAYSHADOW = 335,
-    IMAGE2D = 336,
-    IIMAGE2D = 337,
-    UIMAGE2D = 338,
-    IMAGE3D = 339,
-    IIMAGE3D = 340,
-    UIMAGE3D = 341,
-    IMAGE2DARRAY = 342,
-    IIMAGE2DARRAY = 343,
-    UIMAGE2DARRAY = 344,
-    IMAGECUBE = 345,
-    IIMAGECUBE = 346,
-    UIMAGECUBE = 347,
-    LAYOUT = 348,
-    IDENTIFIER = 349,
-    TYPE_NAME = 350,
-    FLOATCONSTANT = 351,
-    INTCONSTANT = 352,
-    UINTCONSTANT = 353,
-    BOOLCONSTANT = 354,
-    FIELD_SELECTION = 355,
-    LEFT_OP = 356,
-    RIGHT_OP = 357,
-    INC_OP = 358,
-    DEC_OP = 359,
-    LE_OP = 360,
-    GE_OP = 361,
-    EQ_OP = 362,
-    NE_OP = 363,
-    AND_OP = 364,
-    OR_OP = 365,
-    XOR_OP = 366,
-    MUL_ASSIGN = 367,
-    DIV_ASSIGN = 368,
-    ADD_ASSIGN = 369,
-    MOD_ASSIGN = 370,
-    LEFT_ASSIGN = 371,
-    RIGHT_ASSIGN = 372,
-    AND_ASSIGN = 373,
-    XOR_ASSIGN = 374,
-    OR_ASSIGN = 375,
-    SUB_ASSIGN = 376,
-    LEFT_PAREN = 377,
-    RIGHT_PAREN = 378,
-    LEFT_BRACKET = 379,
-    RIGHT_BRACKET = 380,
-    LEFT_BRACE = 381,
-    RIGHT_BRACE = 382,
-    DOT = 383,
-    COMMA = 384,
-    COLON = 385,
-    EQUAL = 386,
-    SEMICOLON = 387,
-    BANG = 388,
-    DASH = 389,
-    TILDE = 390,
-    PLUS = 391,
-    STAR = 392,
-    SLASH = 393,
-    PERCENT = 394,
-    LEFT_ANGLE = 395,
-    RIGHT_ANGLE = 396,
-    VERTICAL_BAR = 397,
-    CARET = 398,
-    AMPERSAND = 399,
-    QUESTION = 400
+    SAMPLER2DMS = 331,
+    ISAMPLER2DMS = 332,
+    USAMPLER2DMS = 333,
+    SAMPLER3D = 334,
+    SAMPLER3DRECT = 335,
+    SAMPLER2DSHADOW = 336,
+    SAMPLERCUBESHADOW = 337,
+    SAMPLER2DARRAYSHADOW = 338,
+    IMAGE2D = 339,
+    IIMAGE2D = 340,
+    UIMAGE2D = 341,
+    IMAGE3D = 342,
+    IIMAGE3D = 343,
+    UIMAGE3D = 344,
+    IMAGE2DARRAY = 345,
+    IIMAGE2DARRAY = 346,
+    UIMAGE2DARRAY = 347,
+    IMAGECUBE = 348,
+    IIMAGECUBE = 349,
+    UIMAGECUBE = 350,
+    LAYOUT = 351,
+    IDENTIFIER = 352,
+    TYPE_NAME = 353,
+    FLOATCONSTANT = 354,
+    INTCONSTANT = 355,
+    UINTCONSTANT = 356,
+    BOOLCONSTANT = 357,
+    FIELD_SELECTION = 358,
+    LEFT_OP = 359,
+    RIGHT_OP = 360,
+    INC_OP = 361,
+    DEC_OP = 362,
+    LE_OP = 363,
+    GE_OP = 364,
+    EQ_OP = 365,
+    NE_OP = 366,
+    AND_OP = 367,
+    OR_OP = 368,
+    XOR_OP = 369,
+    MUL_ASSIGN = 370,
+    DIV_ASSIGN = 371,
+    ADD_ASSIGN = 372,
+    MOD_ASSIGN = 373,
+    LEFT_ASSIGN = 374,
+    RIGHT_ASSIGN = 375,
+    AND_ASSIGN = 376,
+    XOR_ASSIGN = 377,
+    OR_ASSIGN = 378,
+    SUB_ASSIGN = 379,
+    LEFT_PAREN = 380,
+    RIGHT_PAREN = 381,
+    LEFT_BRACKET = 382,
+    RIGHT_BRACKET = 383,
+    LEFT_BRACE = 384,
+    RIGHT_BRACE = 385,
+    DOT = 386,
+    COMMA = 387,
+    COLON = 388,
+    EQUAL = 389,
+    SEMICOLON = 390,
+    BANG = 391,
+    DASH = 392,
+    TILDE = 393,
+    PLUS = 394,
+    STAR = 395,
+    SLASH = 396,
+    PERCENT = 397,
+    LEFT_ANGLE = 398,
+    RIGHT_ANGLE = 399,
+    VERTICAL_BAR = 400,
+    CARET = 401,
+    AMPERSAND = 402,
+    QUESTION = 403
   };
 #endif
 
@@ -661,23 +664,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  127
+#define YYFINAL  130
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2847
+#define YYLAST   2916
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  146
+#define YYNTOKENS  149
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  94
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  288
+#define YYNRULES  291
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  424
+#define YYNSTATES  427
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   400
+#define YYMAXUTOK   403
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -726,42 +729,43 @@
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145
+     145,   146,   147,   148
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   243,   243,   244,   247,   257,   260,   265,   270,   275,
-     280,   286,   289,   292,   295,   298,   301,   307,   314,   325,
-     329,   337,   340,   346,   350,   357,   363,   372,   380,   386,
-     392,   401,   404,   407,   410,   420,   421,   422,   423,   431,
-     432,   435,   438,   445,   446,   449,   455,   456,   460,   467,
-     468,   471,   474,   477,   483,   484,   487,   493,   494,   501,
-     502,   509,   510,   517,   518,   524,   525,   531,   532,   538,
-     539,   545,   546,   553,   554,   555,   556,   560,   561,   562,
-     566,   570,   574,   578,   585,   588,   594,   601,   608,   611,
-     614,   623,   627,   631,   635,   639,   646,   653,   656,   663,
-     671,   691,   701,   709,   734,   738,   742,   746,   753,   760,
-     763,   767,   771,   776,   781,   788,   792,   796,   800,   805,
-     810,   817,   821,   827,   830,   836,   840,   847,   853,   857,
-     861,   864,   867,   876,   882,   890,   893,   913,   932,   939,
-     943,   947,   950,   953,   956,   959,   962,   970,   977,   980,
-     983,   989,   996,   999,  1005,  1008,  1011,  1014,  1020,  1023,
-    1028,  1039,  1042,  1045,  1048,  1051,  1054,  1058,  1062,  1066,
-    1070,  1074,  1078,  1082,  1086,  1090,  1094,  1098,  1102,  1106,
-    1110,  1114,  1118,  1122,  1126,  1130,  1134,  1138,  1141,  1144,
-    1147,  1150,  1153,  1156,  1159,  1162,  1165,  1168,  1171,  1174,
-    1177,  1180,  1183,  1190,  1196,  1199,  1202,  1205,  1208,  1211,
-    1214,  1217,  1220,  1223,  1226,  1229,  1232,  1235,  1247,  1247,
-    1250,  1250,  1256,  1259,  1265,  1268,  1275,  1279,  1285,  1291,
-    1303,  1307,  1311,  1312,  1318,  1319,  1320,  1321,  1322,  1323,
-    1324,  1328,  1329,  1329,  1329,  1338,  1339,  1343,  1343,  1344,
-    1344,  1349,  1352,  1361,  1366,  1373,  1374,  1378,  1385,  1389,
-    1396,  1396,  1403,  1406,  1413,  1417,  1430,  1430,  1435,  1435,
-    1441,  1441,  1449,  1452,  1458,  1461,  1467,  1471,  1478,  1481,
-    1484,  1487,  1490,  1499,  1505,  1511,  1514,  1520,  1520
+       0,   244,   244,   245,   248,   258,   261,   266,   271,   276,
+     281,   287,   290,   293,   296,   299,   302,   308,   315,   326,
+     330,   338,   341,   347,   351,   358,   364,   373,   381,   387,
+     393,   402,   405,   408,   411,   421,   422,   423,   424,   432,
+     433,   436,   439,   446,   447,   450,   456,   457,   461,   468,
+     469,   472,   475,   478,   484,   485,   488,   494,   495,   502,
+     503,   510,   511,   518,   519,   525,   526,   532,   533,   539,
+     540,   546,   547,   554,   555,   556,   557,   561,   562,   563,
+     567,   571,   575,   579,   586,   589,   595,   602,   609,   612,
+     615,   624,   628,   632,   636,   640,   647,   654,   657,   664,
+     672,   692,   702,   710,   735,   739,   743,   747,   754,   761,
+     764,   768,   772,   777,   782,   789,   793,   797,   801,   806,
+     811,   818,   822,   828,   831,   837,   841,   848,   854,   858,
+     862,   865,   868,   877,   883,   891,   894,   914,   933,   940,
+     944,   948,   951,   954,   957,   960,   963,   971,   978,   981,
+     984,   990,   997,  1000,  1006,  1009,  1012,  1015,  1021,  1024,
+    1029,  1040,  1043,  1046,  1049,  1052,  1055,  1059,  1063,  1067,
+    1071,  1075,  1079,  1083,  1087,  1091,  1095,  1099,  1103,  1107,
+    1111,  1115,  1119,  1123,  1127,  1131,  1135,  1139,  1142,  1145,
+    1148,  1151,  1154,  1157,  1160,  1163,  1166,  1169,  1172,  1175,
+    1178,  1181,  1184,  1187,  1190,  1193,  1200,  1206,  1209,  1212,
+    1215,  1218,  1221,  1224,  1227,  1230,  1233,  1236,  1239,  1242,
+    1245,  1257,  1257,  1260,  1260,  1266,  1269,  1275,  1278,  1285,
+    1289,  1295,  1301,  1313,  1317,  1321,  1322,  1328,  1329,  1330,
+    1331,  1332,  1333,  1334,  1338,  1339,  1339,  1339,  1348,  1349,
+    1353,  1353,  1354,  1354,  1359,  1362,  1371,  1376,  1383,  1384,
+    1388,  1395,  1399,  1406,  1406,  1413,  1416,  1423,  1427,  1440,
+    1440,  1445,  1445,  1451,  1451,  1459,  1462,  1468,  1471,  1477,
+    1481,  1488,  1491,  1494,  1497,  1500,  1509,  1515,  1521,  1524,
+    1530,  1530
 };
 #endif
 
@@ -783,24 +787,24 @@
   "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
   "SAMPLER2DRECT", "SAMPLER2DARRAY", "ISAMPLER2D", "ISAMPLER3D",
   "ISAMPLERCUBE", "ISAMPLER2DARRAY", "USAMPLER2D", "USAMPLER3D",
-  "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER3D", "SAMPLER3DRECT",
-  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER2DARRAYSHADOW",
-  "IMAGE2D", "IIMAGE2D", "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D",
-  "IMAGE2DARRAY", "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBE",
-  "IIMAGECUBE", "UIMAGECUBE", "LAYOUT", "IDENTIFIER", "TYPE_NAME",
-  "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
-  "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
-  "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
-  "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
-  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN",
-  "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE",
-  "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG",
-  "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", "LEFT_ANGLE",
-  "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", "QUESTION",
-  "$accept", "identifier", "variable_identifier", "primary_expression",
-  "postfix_expression", "integer_expression", "function_call",
-  "function_call_or_method", "function_call_generic",
-  "function_call_header_no_parameters",
+  "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
+  "USAMPLER2DMS", "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW",
+  "SAMPLERCUBESHADOW", "SAMPLER2DARRAYSHADOW", "IMAGE2D", "IIMAGE2D",
+  "UIMAGE2D", "IMAGE3D", "IIMAGE3D", "UIMAGE3D", "IMAGE2DARRAY",
+  "IIMAGE2DARRAY", "UIMAGE2DARRAY", "IMAGECUBE", "IIMAGECUBE",
+  "UIMAGECUBE", "LAYOUT", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT",
+  "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION",
+  "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP",
+  "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN",
+  "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN",
+  "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN",
+  "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT",
+  "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS",
+  "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR",
+  "CARET", "AMPERSAND", "QUESTION", "$accept", "identifier",
+  "variable_identifier", "primary_expression", "postfix_expression",
+  "integer_expression", "function_call", "function_call_or_method",
+  "function_call_generic", "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
   "multiplicative_expression", "additive_expression", "shift_expression",
@@ -852,16 +856,16 @@
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400
+     395,   396,   397,   398,   399,   400,   401,   402,   403
 };
 # endif
 
-#define YYPACT_NINF -359
+#define YYPACT_NINF -375
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-359)))
+  (!!((Yystate) == (-375)))
 
-#define YYTABLE_NINF -248
+#define YYTABLE_NINF -251
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -870,49 +874,49 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2487,  -359,  -359,  -359,  -359,   148,  -359,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,   -74,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,   -78,  -359,
-    -359,  -101,   -37,   -38,  2580,  -100,  -359,    30,  -359,  1308,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,   -31,  -359,  2394,
-    -359,  -359,  2752,  -359,  -359,  -359,   -19,   -43,  -359,     5,
-    -359,  2580,  -359,  -359,  -359,  2580,    44,    44,  -359,   -27,
-     -98,   -66,  -359,  2580,  -359,  -359,  1396,  -359,  -359,    13,
-    2580,  -359,  -359,    16,   -42,  -359,   408,  -359,  -359,  -359,
-    -359,    10,   -84,  -359,  1512,  1857,  -359,  -359,  2580,    44,
-    2085,  -359,     7,  -359,  -359,  -359,  -359,  -359,  1857,  1857,
-    1857,  -359,  -359,  -359,  -359,  -359,  -359,  -359,   -45,  -359,
-    -359,  -359,    26,   -41,  1970,    47,  -359,  1857,    18,   -56,
-      41,   -68,    51,    28,    32,    34,    71,    70,   -88,  -359,
-      58,  -359,  -359,  2188,  2580,    65,  -359,   -43,    52,    53,
-    -359,    64,    67,    55,  1628,    69,  1857,    62,    73,    74,
-    -359,  -359,    98,  -359,  -359,   -86,  -359,  -101,    75,  -359,
-    -359,  -359,  -359,   542,  -359,  -359,  -359,  -359,  -359,  -359,
-    1857,  1741,  1857,    72,    77,  -359,  -359,    44,    76,   -26,
-    -359,   -76,  -359,  -359,  -359,   -33,  -359,  -359,  1857,  2666,
-    -359,  -359,  1857,    82,  -359,  -359,  -359,  1857,  1857,  1857,
-    1857,  1857,  1857,  1857,  1857,  1857,  1857,  1857,  1857,  1857,
-    1857,  1857,  1857,  1857,  1857,  1857,  1857,  -359,  -359,  2291,
-    -359,  -359,  -359,  -359,  -359,    80,  -359,  1857,  -359,  -359,
-     -24,  1857,    66,  -359,  -359,  -359,   676,  -359,  -359,  -359,
-    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  1857,  1857,
-    -359,  -359,  -359,    84,    89,    96,  -359,  1857,    91,     3,
-    1857,    44,  -359,   -97,  -359,  -359,    99,    97,  -359,   103,
-    -359,  -359,  -359,  -359,  -359,    18,    18,   -56,   -56,    41,
-      41,    41,    41,   -68,   -68,    51,    28,    32,    34,    71,
-      70,    35,  -359,   165,     5,   944,  1078,   -25,  -359,    -3,
-    -359,  1193,   676,  -359,  -359,  -359,  1857,   104,  -359,  1857,
-    -359,   105,  -359,  1857,  -359,  -359,  1857,   114,  -359,  -359,
-    -359,  -359,  1193,    80,  -359,    97,    44,  2580,   115,   110,
-    -359,  1857,  -359,  -359,   119,  -359,  1857,  -359,   107,   117,
-     228,  -359,   120,   116,   810,  -359,  -359,   118,    -2,  1857,
-     810,    80,  -359,  1857,  -359,  -359,  -359,  -359,   121,    97,
-    -359,  -359,  -359,  -359
+    2544,  -375,  -375,  -375,  -375,   102,  -375,  -375,  -375,  -375,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,   -76,  -375,  -375,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,  -101,  -375,  -375,   -92,   -75,   -52,  2640,   -97,  -375,
+     -12,  -375,  1332,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+     -79,  -375,  2448,  -375,  -375,  2818,  -375,  -375,  -375,   -59,
+     -41,  -375,   -38,  -375,  2640,  -375,  -375,  -375,  2640,    43,
+      43,  -375,    -5,  -102,  -109,  -375,  2640,  -375,  -375,  1423,
+    -375,  -375,     8,  2640,  -375,  -375,     1,   -72,  -375,   411,
+    -375,  -375,  -375,  -375,     3,   -98,  -375,  1542,  1896,  -375,
+    -375,  2640,    43,  2130,  -375,    27,  -375,  -375,  -375,  -375,
+    -375,  1896,  1896,  1896,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,   -43,  -375,  -375,  -375,    45,   -49,  2012,    55,  -375,
+    1896,    26,   -71,   -11,   -62,    38,    39,    42,    40,    75,
+      77,   -86,  -375,    61,  -375,  -375,  2236,  2640,    54,  -375,
+     -41,    57,    58,  -375,    70,    78,    65,  1661,    79,  1896,
+      69,    80,    76,  -375,  -375,    41,  -375,  -375,   -57,  -375,
+     -92,    82,  -375,  -375,  -375,  -375,   548,  -375,  -375,  -375,
+    -375,  -375,  -375,  1896,  1777,  1896,    74,    81,  -375,  -375,
+      43,    83,    -4,  -375,   -78,  -375,  -375,  -375,   -37,  -375,
+    -375,  1896,  2729,  -375,  -375,  1896,    85,  -375,  -375,  -375,
+    1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,
+    1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,  1896,
+    -375,  -375,  2342,  -375,  -375,  -375,  -375,  -375,    86,  -375,
+    1896,  -375,  -375,    -3,  1896,    84,  -375,  -375,  -375,   685,
+    -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,  1896,  1896,  -375,  -375,  -375,    88,    87,    90,  -375,
+    1896,    89,     2,  1896,    43,  -375,  -104,  -375,  -375,    91,
+      92,  -375,    95,  -375,  -375,  -375,  -375,  -375,    26,    26,
+     -71,   -71,   -11,   -11,   -11,   -11,   -62,   -62,    38,    39,
+      42,    40,    75,    77,    37,  -375,   160,   -38,   959,  1096,
+     -36,  -375,   -23,  -375,  1214,   685,  -375,  -375,  -375,  1896,
+      93,  -375,  1896,  -375,    97,  -375,  1896,  -375,  -375,  1896,
+     103,  -375,  -375,  -375,  -375,  1214,    86,  -375,    92,    43,
+    2640,   104,    99,  -375,  1896,  -375,  -375,   108,  -375,  1896,
+    -375,   105,   111,   221,  -375,   110,   112,   822,  -375,  -375,
+     107,   -22,  1896,   822,    86,  -375,  1896,  -375,  -375,  -375,
+    -375,   109,    92,  -375,  -375,  -375,  -375
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -925,74 +929,74 @@
      168,   175,   176,   177,   178,   179,   180,   136,   137,   138,
      140,   134,   181,   182,   183,   184,   185,   186,   139,   124,
      123,   141,   142,   143,   144,   145,   146,     0,   161,   187,
-     189,   202,   203,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   188,   199,   200,   201,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,     0,   217,
-     286,   287,     0,    98,    97,     0,   109,   115,   131,     0,
-     132,   125,   128,   121,   130,   129,   147,   158,   204,     0,
-     283,   285,     0,     2,     3,   220,     0,     0,    88,     0,
-      96,     0,   105,    99,   107,     0,   108,     0,    89,     2,
-     116,     0,    94,     0,   126,   122,     0,     1,   284,     0,
-       0,   218,   157,   154,     0,   152,     0,   288,   100,   104,
-     106,   102,   110,   101,     0,     0,    87,    95,     0,     0,
-       0,   222,     4,     8,     6,     7,     9,    30,     0,     0,
-       0,   159,    37,    36,    38,    35,     5,    11,    31,    13,
-      18,    19,     0,     0,    24,     0,    39,     0,    43,    46,
-      49,    54,    57,    59,    61,    63,    65,    67,    69,    86,
-       0,    28,    90,     0,     0,     0,   151,     0,     0,     0,
-     268,     0,     0,     0,     0,     0,     0,     0,     0,   242,
-     251,   255,    39,    71,    84,     0,   231,     0,   147,   234,
-     253,   233,   232,     0,   235,   236,   237,   238,   239,   240,
-       0,     0,     0,     0,     0,   230,   120,     0,   228,     0,
-     226,     0,   223,    32,    33,     0,    15,    16,     0,     0,
-      22,    21,     0,   161,    25,    27,    34,     0,     0,     0,
+     189,   205,   206,   190,   192,   193,   194,   195,   197,   198,
+     199,   200,   191,   196,   201,   188,   202,   203,   204,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,     0,   220,   289,   290,     0,    98,    97,     0,   109,
+     115,   131,     0,   132,   125,   128,   121,   130,   129,   147,
+     158,   207,     0,   286,   288,     0,     2,     3,   223,     0,
+       0,    88,     0,    96,     0,   105,    99,   107,     0,   108,
+       0,    89,     2,   116,     0,    94,     0,   126,   122,     0,
+       1,   287,     0,     0,   221,   157,   154,     0,   152,     0,
+     291,   100,   104,   106,   102,   110,   101,     0,     0,    87,
+      95,     0,     0,     0,   225,     4,     8,     6,     7,     9,
+      30,     0,     0,     0,   159,    37,    36,    38,    35,     5,
+      11,    31,    13,    18,    19,     0,     0,    24,     0,    39,
+       0,    43,    46,    49,    54,    57,    59,    61,    63,    65,
+      67,    69,    86,     0,    28,    90,     0,     0,     0,   151,
+       0,     0,     0,   271,     0,     0,     0,     0,     0,     0,
+       0,     0,   245,   254,   258,    39,    71,    84,     0,   234,
+       0,   147,   237,   256,   236,   235,     0,   238,   239,   240,
+     241,   242,   243,     0,     0,     0,     0,     0,   233,   120,
+       0,   231,     0,   229,     0,   226,    32,    33,     0,    15,
+      16,     0,     0,    22,    21,     0,   161,    25,    27,    34,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   160,   221,     0,
-     155,   156,   153,   279,   278,   249,   270,     0,   282,   280,
-       0,     0,     0,   263,   266,   241,     0,    74,    75,    77,
-      76,    79,    80,    81,    82,    83,    78,    73,     0,     0,
-     256,   252,   254,     0,     0,     0,   114,     0,   117,     0,
-       0,     0,   224,     0,    91,    10,     0,    17,    29,    14,
-      20,    26,    40,    41,    42,    45,    44,    47,    48,    52,
-      53,    50,    51,    55,    56,    58,    60,    62,    64,    66,
-      68,     0,   219,     0,     0,     0,     0,     0,   281,     0,
-     262,     0,   243,    72,    85,   103,     0,   111,   118,     0,
-     225,     0,   227,     0,    92,    12,     0,     0,   248,   250,
-     273,   272,   275,   249,   260,   264,     0,     0,     0,     0,
-     112,     0,   119,   229,     0,    70,     0,   274,     0,     0,
-     259,   257,     0,     0,     0,   244,   113,     0,     0,   276,
-       0,   249,   261,     0,   246,   267,   245,    93,     0,   277,
-     271,   258,   265,   269
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     160,   224,     0,   155,   156,   153,   282,   281,   252,   273,
+       0,   285,   283,     0,     0,     0,   266,   269,   244,     0,
+      74,    75,    77,    76,    79,    80,    81,    82,    83,    78,
+      73,     0,     0,   259,   255,   257,     0,     0,     0,   114,
+       0,   117,     0,     0,     0,   227,     0,    91,    10,     0,
+      17,    29,    14,    20,    26,    40,    41,    42,    45,    44,
+      47,    48,    52,    53,    50,    51,    55,    56,    58,    60,
+      62,    64,    66,    68,     0,   222,     0,     0,     0,     0,
+       0,   284,     0,   265,     0,   246,    72,    85,   103,     0,
+     111,   118,     0,   228,     0,   230,     0,    92,    12,     0,
+       0,   251,   253,   276,   275,   278,   252,   263,   267,     0,
+       0,     0,     0,   112,     0,   119,   232,     0,    70,     0,
+     277,     0,     0,   262,   260,     0,     0,     0,   247,   113,
+       0,     0,   279,     0,   252,   264,     0,   249,   270,   248,
+      93,     0,   280,   274,   261,   268,   272
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -359,   -46,  -359,  -359,  -359,  -359,  -359,  -359,    -1,  -359,
-    -359,  -359,  -359,     2,  -359,   -93,   -92,  -202,   -91,   -16,
-     -20,   -15,     8,     6,   -17,  -359,  -121,  -135,  -359,  -154,
-    -130,  -359,    15,    17,  -359,  -359,  -359,   167,   172,   169,
-    -359,  -359,  -337,  -359,   -75,  -359,   -87,  -359,   -81,   280,
-    -359,  -359,    90,     0,  -359,  -359,  -359,  -359,  -117,  -139,
-      54,   -32,  -225,   -64,  -211,  -336,  -114,  -359,  -359,  -120,
-    -358,  -359,  -359,  -105,     1,   -63,  -359,  -359,  -359,  -359,
-    -359,   -83,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
-    -359,   195,  -359,  -359
+    -375,   -46,  -375,  -375,  -375,  -375,  -375,  -375,    -7,  -375,
+    -375,  -375,  -375,    52,  -375,   -87,   -82,  -145,   -93,   -25,
+     -24,   -21,   -19,   -26,   -20,  -375,   -88,  -138,  -375,  -152,
+    -133,  -375,     9,    17,  -375,  -375,  -375,   134,   139,   137,
+    -375,  -375,  -327,  -375,   -81,  -375,   -90,  -375,   -84,   254,
+    -375,  -375,    62,     0,  -375,  -375,  -375,  -375,  -118,  -146,
+      23,   -60,  -222,   -94,  -221,  -342,  -139,  -375,  -375,  -144,
+    -374,  -375,  -375,  -108,   -32,   -91,  -375,  -375,  -375,  -375,
+    -375,  -115,  -375,  -375,  -375,  -375,  -375,  -375,  -375,  -375,
+    -375,   169,  -375,  -375
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   238,   166,   167,   168,   326,   169,   170,   171,   172,
-     173,   174,   175,   212,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   213,   214,   308,   215,
-     190,   123,   216,   217,    82,    83,    84,   112,   113,   114,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,   134,   135,   191,    97,    98,   194,   130,   150,   151,
-     239,   240,   236,   219,   220,   221,   222,   296,   389,   415,
-     353,   354,   355,   416,   223,   224,   225,   401,   226,   402,
-     227,   388,   228,   361,   285,   356,   382,   398,   399,   229,
-      99,   100,   101,   109
+      -1,   241,   169,   170,   171,   329,   172,   173,   174,   175,
+     176,   177,   178,   215,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   216,   217,   311,   218,
+     193,   126,   219,   220,    85,    86,    87,   115,   116,   117,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,   137,   138,   194,   100,   101,   197,   133,   153,   154,
+     242,   243,   239,   222,   223,   224,   225,   299,   392,   418,
+     356,   357,   358,   419,   226,   227,   228,   404,   229,   405,
+     230,   391,   231,   364,   288,   359,   385,   401,   402,   232,
+     102,   103,   104,   112
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1000,580 +1004,594 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      96,   106,   124,   116,   137,   189,   245,   316,   125,   115,
-     235,   242,   312,   193,   234,    80,   132,    81,   323,   379,
-     103,   104,   275,   189,   386,   400,   144,   373,   124,   117,
-     116,   108,   118,   145,   116,   374,   115,   264,   265,   254,
-     231,   120,   149,   309,   107,   386,   310,   232,   148,   149,
-     290,   133,   105,   421,   242,   148,   324,   276,   246,   247,
-     146,   124,   339,   340,   341,   342,   147,   237,   414,   149,
-     141,   142,   266,   267,   414,   148,   292,   279,   260,   248,
-     261,   196,   251,   249,    96,   189,   110,   197,   252,    96,
-     325,   111,   368,   126,   327,   143,   309,   235,   383,    96,
-     313,   315,   129,   321,   309,   309,   322,   131,   358,   189,
-     189,    96,   149,   149,    80,    96,    81,   331,   148,   148,
-     384,   418,   351,    96,   119,   104,   309,   309,   176,   -29,
-      96,   136,   321,   357,   230,   370,   218,   359,   103,   104,
-     242,   390,   262,   263,   392,   192,   176,   195,    96,   250,
-      96,   312,     2,     3,     4,   257,   258,   259,   268,   269,
-     243,   244,   280,   281,   309,   376,   406,   335,   336,   255,
-     337,   338,   270,   363,   364,   271,   272,   343,   344,   256,
-     273,   274,   235,   277,   283,   284,   286,   288,   422,   287,
-     371,   291,   293,    96,    96,   294,   360,   -28,   149,   189,
-     320,   295,   318,   317,   148,   -23,  -247,   385,   176,   365,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     366,   367,   369,   218,   375,   -30,   309,   377,   385,   307,
-     393,   235,   176,   176,   235,   391,   396,   405,   404,   409,
-     410,   395,   408,   394,   407,   411,   209,   413,   330,   378,
-     417,   346,   189,   423,   345,   419,   235,   347,   350,   332,
-     333,   334,   176,   176,   176,   176,   176,   176,   176,   176,
-     176,   176,   176,   176,   176,   176,   176,   176,   235,    96,
-     349,   348,   139,   138,   140,   102,   387,   282,   412,   372,
-     420,   319,   380,   381,   128,     0,   218,   362,     0,   397,
-     124,     0,     0,     0,     0,     0,   125,   387,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   176,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     403,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   218,   218,     0,     0,     0,
-       0,   218,   218,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   176,     0,     0,     0,     0,
-       0,     0,   218,     0,     0,     0,     0,    96,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   218,     0,     0,     0,     0,     0,
-     218,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   198,   199,   200,     0,   201,   202,   203,   204,
-     205,   206,   207,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-     208,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,   152,    79,   153,   154,   155,   156,   157,     0,
-       0,   158,   159,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     160,     0,     0,     0,   209,   210,     0,     0,     0,     0,
-     211,   162,   163,   164,   165,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   198,   199,   200,     0,
-     201,   202,   203,   204,   205,   206,   207,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,   208,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,   152,    79,   153,   154,
-     155,   156,   157,     0,     0,   158,   159,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   160,     0,     0,     0,   209,   311,
-       0,     0,     0,     0,   211,   162,   163,   164,   165,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-     198,   199,   200,     0,   201,   202,   203,   204,   205,   206,
-     207,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,   208,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,     0,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-     152,    79,   153,   154,   155,   156,   157,     0,     0,   158,
-     159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   160,     0,
-       0,     0,   209,     0,     0,     0,     0,     0,   211,   162,
-     163,   164,   165,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   198,   199,   200,     0,   201,   202,
-     203,   204,   205,   206,   207,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,   208,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,     0,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,   152,    79,   153,   154,   155,   156,
-     157,     0,     0,   158,   159,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   160,     0,     0,     0,   136,     0,     0,     0,
-       0,     0,   211,   162,   163,   164,   165,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   198,   199,
-     200,     0,   201,   202,   203,   204,   205,   206,   207,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,   208,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,     0,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,   152,    79,
-     153,   154,   155,   156,   157,     0,     0,   158,   159,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   160,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   211,   162,   163,   164,
-     165,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,   152,    79,   153,   154,   155,   156,   157,     0,
-       0,   158,   159,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     1,     2,     3,     4,
-     160,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-     211,   162,   163,   164,   165,     0,     0,     0,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,     0,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-       0,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,   152,    79,   153,
-     154,   155,   156,   157,     0,     0,   158,   159,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     1,     2,     3,     4,   160,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,     0,   162,   163,   164,   165,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,   121,    79,     0,     0,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-     122,    32,    33,    34,    35,    36,    37,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    47,    48,     0,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,     0,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,     0,
-     152,    79,   153,   154,   155,   156,   157,     0,     0,   158,
-     159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   160,     0,
-       0,   161,     8,     9,    10,    11,     0,     0,     0,   162,
-     163,   164,   165,     0,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
-      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    47,    48,     0,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,     0,   152,    79,   153,   154,
-     155,   156,   157,     0,     0,   158,   159,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   160,     0,     0,   233,     8,     9,
-      10,    11,     0,     0,     0,   162,   163,   164,   165,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,    32,    33,    34,    35,    36,    37,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    47,    48,
-       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,     0,   152,    79,   153,   154,   155,   156,   157,     0,
-       0,   158,   159,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     160,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-     289,   162,   163,   164,   165,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,     0,     0,     0,     0,     0,    32,    33,    34,    35,
-      36,    37,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    47,    48,     0,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,     0,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,     0,   152,    79,   153,   154,   155,
-     156,   157,     0,     0,   158,   159,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   160,     0,     0,   314,     8,     9,    10,
-      11,     0,     0,     0,   162,   163,   164,   165,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    32,    33,    34,    35,    36,    37,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    47,    48,     0,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,     0,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-       0,   152,    79,   153,   154,   155,   156,   157,     0,     0,
-     158,   159,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   160,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-     162,   163,   164,   165,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
-      37,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      47,   253,     0,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,     0,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,     0,   152,    79,   153,   154,   155,   156,
-     157,     0,     0,   158,   159,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     1,     2,
-       3,     4,   160,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,   162,   163,   164,   165,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,     0,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,     0,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,     0,
-      79,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     1,     2,     3,     4,     0,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   241,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,     0,    79,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     1,     2,     3,     4,     0,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   278,    12,    13,    14,    15,
+      99,   109,   127,   119,   140,   315,   118,   245,   128,    83,
+     238,   248,   403,   319,   237,   196,   382,    84,   135,   326,
+     149,   106,   107,   376,   110,   147,   150,   278,   127,   234,
+     119,   377,   148,   118,   119,   120,   235,   389,   121,   257,
+     424,   192,   152,   111,   123,   151,   267,   268,   129,   152,
+     245,   113,   151,   108,   199,   293,   136,   327,   389,   192,
+     200,   127,   279,   249,   250,   417,   263,   240,   264,   152,
+     134,   417,   151,   144,   145,   312,   295,   254,   313,   282,
+     114,   269,   270,   255,   251,   122,   107,    99,   252,   328,
+     386,   139,    99,   265,   266,   312,   312,   238,   371,   330,
+     316,   318,    99,   387,   421,   132,     2,     3,     4,   312,
+     312,    83,   152,   152,    99,   151,   151,   334,    99,    84,
+     146,   192,   342,   343,   344,   345,    99,   354,   324,   312,
+     233,   325,   361,    99,   324,   198,   245,   373,   360,   221,
+     106,   107,   362,   195,   315,   192,   192,   393,   271,   272,
+     395,    99,   -29,    99,   283,   284,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   260,   261,   262,   312,
+     379,   253,   409,   366,   367,   310,   338,   339,   346,   347,
+     258,   179,   238,   340,   341,   275,   273,   276,   274,   280,
+     374,   277,   286,   287,   425,   289,    99,    99,   152,   179,
+     291,   151,   296,   290,   294,   297,   298,   -28,   320,   321,
+     323,   -23,   388,   246,   247,  -250,   368,   363,   370,   378,
+     -30,   369,   380,   372,   312,   396,   221,   394,   399,   408,
+     407,   238,   259,   388,   238,   192,   410,   413,   414,   212,
+     412,   398,   420,   397,   426,   333,   416,   411,   348,   381,
+     349,   352,   142,   141,   350,   143,   238,   351,   353,   105,
+     422,   179,   285,   322,   375,   383,   415,   365,   384,   423,
+     400,   131,     0,     0,     0,     0,     0,     0,   238,     0,
+       0,     0,    99,   390,     0,   179,   179,     0,   192,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   221,
+     127,     0,     0,     0,   390,     0,   128,     0,     0,     0,
+       0,     0,   335,   336,   337,   179,   179,   179,   179,   179,
+     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
+     179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   406,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   221,   221,
+       0,     0,     0,     0,   221,   221,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   179,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   221,     0,     0,     0,     0,
+      99,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   221,     0,     0,
+       0,     0,     0,   221,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   201,   202,   203,   179,   204,
+     205,   206,   207,   208,   209,   210,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,     0,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,     0,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,     0,    79,     0,     0,     0,
-       0,     0,     0,     0,   127,     0,     0,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   352,    12,
+      46,    47,    48,   211,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,     0,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,   155,    82,
+     156,   157,   158,   159,   160,     0,     0,   161,   162,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   163,     0,     0,     0,
+     212,   213,     0,     0,     0,     0,   214,   165,   166,   167,
+     168,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   201,   202,   203,     0,   204,   205,   206,   207,
+     208,   209,   210,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+     211,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,   155,    82,   156,   157,   158,
+     159,   160,     0,     0,   161,   162,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   163,     0,     0,     0,   212,   314,     0,
+       0,     0,     0,   214,   165,   166,   167,   168,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,   201,
+     202,   203,     0,   204,   205,   206,   207,   208,   209,   210,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,   211,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,     0,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,   155,    82,   156,   157,   158,   159,   160,     0,
+       0,   161,   162,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     163,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+     214,   165,   166,   167,   168,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   201,   202,   203,     0,
+     204,   205,   206,   207,   208,   209,   210,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,   211,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,   155,
+      82,   156,   157,   158,   159,   160,     0,     0,   161,   162,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   163,     0,     0,
+       0,   139,     0,     0,     0,     0,     0,   214,   165,   166,
+     167,   168,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,   201,   202,   203,     0,   204,   205,   206,
+     207,   208,   209,   210,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,   211,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,     0,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,   155,    82,   156,   157,
+     158,   159,   160,     0,     0,   161,   162,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   163,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   214,   165,   166,   167,   168,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,     0,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,   155,    82,   156,   157,   158,   159,   160,
+       0,     0,   161,   162,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     1,     2,     3,
+       4,   163,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,   214,   165,   166,   167,   168,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,     0,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,     0,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,     0,    79,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,     0,
+      62,    63,    64,    65,     0,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,   155,    82,   156,   157,   158,   159,   160,     0,     0,
+     161,   162,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     1,     2,     3,     4,   163,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+     165,   166,   167,   168,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,   124,
+      82,     0,     0,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,   125,    32,    33,
+      34,    35,    36,    37,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    47,    48,     0,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,     0,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,     0,
+     155,    82,   156,   157,   158,   159,   160,     0,     0,   161,
+     162,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   163,     0,
+       0,   164,     8,     9,    10,    11,     0,     0,     0,   165,
+     166,   167,   168,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
+      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    47,    48,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,     0,   155,
+      82,   156,   157,   158,   159,   160,     0,     0,   161,   162,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   163,     0,     0,
+     236,     8,     9,    10,    11,     0,     0,     0,   165,   166,
+     167,   168,     0,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,     0,     0,     0,     0,     0,    32,    33,    34,    35,
+      36,    37,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    47,    48,     0,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,     0,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,     0,   155,    82,
+     156,   157,   158,   159,   160,     0,     0,   161,   162,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   163,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,   292,   165,   166,   167,
+     168,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
+       0,     0,    32,    33,    34,    35,    36,    37,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    47,    48,     0,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,     0,    63,    64,    65,    66,    67,
+      59,    60,    61,    62,    63,    64,    65,     0,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,     0,    79,     1,     2,     3,     4,     0,     6,     7,
+      78,    79,    80,     0,   155,    82,   156,   157,   158,   159,
+     160,     0,     0,   161,   162,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   163,     0,     0,   317,     8,     9,    10,    11,
+       0,     0,     0,   165,   166,   167,   168,     0,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,    32,    33,    34,    35,    36,    37,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    47,    48,     0,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,     0,   155,    82,   156,   157,   158,   159,   160,
+       0,     0,   161,   162,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   163,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,   165,   166,   167,   168,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
+      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    47,   256,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,     0,   155,
+      82,   156,   157,   158,   159,   160,     0,     0,   161,   162,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     1,     2,     3,     4,   163,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,     0,   165,   166,
+     167,   168,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,     0,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,     0,    82,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     1,
+       2,     3,     4,     0,     6,     7,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     244,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,     0,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,     0,    82,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     1,     2,     3,     4,     0,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   281,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,     0,
+      82,     0,     0,     0,     0,     0,     0,     0,   130,     0,
+       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   355,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,     0,    82,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,     0,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,     0,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,     0,    82,     1,     2,     3,     4,     0,     6,     7,
        8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,     0,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,     0,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,     0,    79,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,    32,    33,    34,    35,    36,    37,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    47,    48,     0,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,     0,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,     0,
-     328,    79,     8,     9,    10,    11,   329,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
-      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    47,    48,     0,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,     0,     0,    79
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,     0,    82,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
+       0,     0,     0,     0,    32,    33,    34,    35,    36,    37,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    47,
+      48,     0,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,     0,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,     0,   331,    82,     8,     9,
+      10,    11,   332,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
+       0,     0,     0,    32,    33,    34,    35,    36,    37,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    47,    48,
+       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,     0,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,     0,     0,    82
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    47,    89,    84,   109,   126,   160,   232,    89,    84,
-     145,   150,   223,   130,   144,     0,    59,     0,    94,   355,
-      94,    95,   110,   144,   361,   383,   124,   124,   115,   129,
-     111,   132,   132,   131,   115,   132,   111,   105,   106,   174,
-     124,    87,   123,   129,   122,   382,   132,   131,   123,   130,
-     204,    94,   126,   411,   193,   130,   132,   145,   103,   104,
-     126,   148,   264,   265,   266,   267,   132,   148,   404,   150,
-     116,   117,   140,   141,   410,   150,   206,   194,   134,   124,
-     136,   123,   123,   128,    84,   206,   123,   129,   129,    89,
-     123,   129,   317,   124,   248,   122,   129,   232,   123,    99,
-     230,   231,   102,   129,   129,   129,   132,   126,   132,   230,
-     231,   111,   193,   194,    99,   115,    99,   252,   193,   194,
-     123,   123,   276,   123,    94,    95,   129,   129,   126,   122,
-     130,   126,   129,   287,   124,   132,   136,   291,    94,    95,
-     279,   366,   101,   102,   369,   132,   144,   131,   148,   123,
-     150,   362,     4,     5,     6,   137,   138,   139,   107,   108,
-     158,   159,    97,    98,   129,   130,   391,   260,   261,   122,
-     262,   263,   144,   308,   309,   143,   142,   268,   269,   177,
-     109,   111,   317,   125,   132,   132,   122,   132,   413,   122,
-     320,   122,   130,   193,   194,   122,   130,   122,   279,   320,
-     124,   127,   125,   131,   279,   123,   126,   361,   206,   125,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     131,   125,   131,   223,   125,   122,   129,    62,   382,   131,
-     125,   366,   230,   231,   369,   131,   122,   127,   123,   132,
-     123,   376,   396,   373,   125,    17,   126,   131,   249,   354,
-     132,   271,   373,   132,   270,   409,   391,   272,   275,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   413,   279,
-     274,   273,   115,   111,   115,     5,   361,   197,   402,   321,
-     410,   237,   356,   356,    99,    -1,   296,   296,    -1,   382,
-     387,    -1,    -1,    -1,    -1,    -1,   387,   382,    -1,    -1,
+       0,    47,    92,    87,   112,   226,    87,   153,    92,     0,
+     148,   163,   386,   235,   147,   133,   358,     0,    59,    97,
+     129,    97,    98,   127,   125,   127,   135,   113,   118,   127,
+     114,   135,   134,   114,   118,   132,   134,   364,   135,   177,
+     414,   129,   126,   135,    90,   126,   108,   109,   127,   133,
+     196,   126,   133,   129,   126,   207,    97,   135,   385,   147,
+     132,   151,   148,   106,   107,   407,   137,   151,   139,   153,
+     129,   413,   153,   119,   120,   132,   209,   126,   135,   197,
+     132,   143,   144,   132,   127,    97,    98,    87,   131,   126,
+     126,   129,    92,   104,   105,   132,   132,   235,   320,   251,
+     233,   234,   102,   126,   126,   105,     4,     5,     6,   132,
+     132,   102,   196,   197,   114,   196,   197,   255,   118,   102,
+     125,   209,   267,   268,   269,   270,   126,   279,   132,   132,
+     127,   135,   135,   133,   132,   134,   282,   135,   290,   139,
+      97,    98,   294,   135,   365,   233,   234,   369,   110,   111,
+     372,   151,   125,   153,   100,   101,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   140,   141,   142,   132,
+     133,   126,   394,   311,   312,   134,   263,   264,   271,   272,
+     125,   129,   320,   265,   266,   145,   147,   112,   146,   128,
+     323,   114,   135,   135,   416,   125,   196,   197,   282,   147,
+     135,   282,   133,   125,   125,   125,   130,   125,   134,   128,
+     127,   126,   364,   161,   162,   129,   128,   133,   128,   128,
+     125,   134,    62,   134,   132,   128,   226,   134,   125,   130,
+     126,   369,   180,   385,   372,   323,   128,   126,    17,   129,
+     135,   379,   135,   376,   135,   252,   134,   399,   273,   357,
+     274,   277,   118,   114,   275,   118,   394,   276,   278,     5,
+     412,   209,   200,   240,   324,   359,   405,   299,   359,   413,
+     385,   102,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
+      -1,    -1,   282,   364,    -1,   233,   234,    -1,   376,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   299,
+     390,    -1,    -1,    -1,   385,    -1,   390,    -1,    -1,    -1,
+      -1,    -1,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   389,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,   359,
+      -1,    -1,    -1,    -1,   364,   365,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   385,    -1,    -1,    -1,    -1,
+     390,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   407,    -1,    -1,
+      -1,    -1,    -1,   413,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,   376,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,    -1,    -1,   106,   107,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   355,   356,    -1,    -1,    -1,
-      -1,   361,   362,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,    -1,    -1,    -1,    -1,
-      -1,    -1,   382,    -1,    -1,    -1,    -1,   387,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   404,    -1,    -1,    -1,    -1,    -1,
-     410,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,    -1,    -1,
+     129,   130,    -1,    -1,    -1,    -1,   135,   136,   137,   138,
+     139,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
+      72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,    -1,
-      -1,   103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,    -1,    -1,   106,   107,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     122,    -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,
-     132,   133,   134,   135,   136,     3,     4,     5,     6,     7,
+      -1,    -1,    -1,   125,    -1,    -1,    -1,   129,   130,    -1,
+      -1,    -1,    -1,   135,   136,   137,   138,   139,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    -1,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
+      -1,   106,   107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     125,    -1,    -1,    -1,   129,    -1,    -1,    -1,    -1,    -1,
+     135,   136,   137,   138,   139,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    -1,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,    -1,    -1,   103,   104,    -1,    -1,    -1,
+      98,    99,   100,   101,   102,   103,    -1,    -1,   106,   107,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,    -1,    -1,    -1,   126,   127,
-      -1,    -1,    -1,    -1,   132,   133,   134,   135,   136,     3,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,    -1,
+      -1,   129,    -1,    -1,    -1,    -1,    -1,   135,   136,   137,
+     138,   139,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    -1,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,    -1,    -1,   106,   107,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   125,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   135,   136,   137,   138,   139,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,    -1,    -1,   103,
-     104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,    -1,
-      -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,
-     134,   135,   136,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    -1,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,    -1,    -1,   103,   104,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   122,    -1,    -1,    -1,   126,    -1,    -1,    -1,
-      -1,    -1,   132,   133,   134,   135,   136,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,    -1,    -1,   103,   104,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   122,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
-     136,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,    -1,
-      -1,   103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
-     122,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-     132,   133,   134,   135,   136,    -1,    -1,    -1,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    -1,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      -1,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,    -1,    -1,   103,   104,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     3,     4,     5,     6,   122,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,   133,   134,   135,   136,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-     132,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    -1,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    -1,
-      94,    95,    96,    97,    98,    99,   100,    -1,    -1,   103,
-     104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,    -1,
-      -1,   125,    10,    11,    12,    13,    -1,    -1,    -1,   133,
-     134,   135,   136,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    -1,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    -1,    94,    95,    96,    97,
-      98,    99,   100,    -1,    -1,   103,   104,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,    -1,    -1,   125,    10,    11,
-      12,    13,    -1,    -1,    -1,   133,   134,   135,   136,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    -1,    94,    95,    96,    97,    98,    99,   100,    -1,
-      -1,   103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     122,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-     132,   133,   134,   135,   136,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    -1,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    -1,    94,    95,    96,    97,    98,
-      99,   100,    -1,    -1,   103,   104,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   122,    -1,    -1,   125,    10,    11,    12,
-      13,    -1,    -1,    -1,   133,   134,   135,   136,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    -1,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      -1,    94,    95,    96,    97,    98,    99,   100,    -1,    -1,
-     103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-     133,   134,   135,   136,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    -1,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    -1,    94,    95,    96,    97,    98,    99,
-     100,    -1,    -1,   103,   104,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,   122,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,   133,   134,   135,   136,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    -1,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    -1,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    -1,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   127,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   127,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    -1,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    -1,    95,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,    25,
+      74,    75,    76,    77,    78,    79,    -1,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+      -1,    -1,   106,   107,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,   125,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,   135,   136,   137,   138,   139,    -1,    -1,    -1,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    -1,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    -1,    95,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    -1,
+      76,    77,    78,    79,    -1,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
+     106,   107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,   125,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+     136,   137,   138,   139,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    -1,    -1,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,   135,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    60,    61,    -1,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    -1,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
+      97,    98,    99,   100,   101,   102,   103,    -1,    -1,   106,
+     107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,
+      -1,   128,    10,    11,    12,    13,    -1,    -1,    -1,   136,
+     137,   138,   139,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      98,    99,   100,   101,   102,   103,    -1,    -1,   106,   107,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   125,    -1,    -1,
+     128,    10,    11,    12,    13,    -1,    -1,    -1,   136,   137,
+     138,   139,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    -1,    97,    98,
+      99,   100,   101,   102,   103,    -1,    -1,   106,   107,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   125,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,   135,   136,   137,   138,
+     139,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
+      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    -1,    78,    79,    80,    81,    82,
+      73,    74,    75,    76,    77,    78,    79,    -1,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    -1,    95,     3,     4,     5,     6,    -1,     8,     9,
+      93,    94,    95,    -1,    97,    98,    99,   100,   101,   102,
+     103,    -1,    -1,   106,   107,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   125,    -1,    -1,   128,    10,    11,    12,    13,
+      -1,    -1,    -1,   136,   137,   138,   139,    -1,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    -1,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
+      -1,    -1,   106,   107,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   125,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,   136,   137,   138,   139,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
+      98,    99,   100,   101,   102,   103,    -1,    -1,   106,   107,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     3,     4,     5,     6,   125,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,   136,   137,
+     138,   139,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      -1,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    -1,    98,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
+       4,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     130,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    -1,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    -1,    98,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   130,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    -1,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    -1,
+      98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,
+      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   130,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    -1,    98,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    -1,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    -1,    98,     3,     4,     5,     6,    -1,     8,     9,
       10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    -1,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    -1,    95,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    -1,
-      94,    95,    10,    11,    12,    13,   100,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    -1,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    -1,    -1,    95
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      -1,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    -1,    98,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
+      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
+      61,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    -1,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    -1,    97,    98,    10,    11,
+      12,    13,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    -1,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    98
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1586,77 +1604,78 @@
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    95,
-     178,   179,   180,   181,   182,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   199,   200,   201,   236,
-     237,   238,   195,    94,    95,   126,   147,   122,   132,   239,
-     123,   129,   183,   184,   185,   190,   194,   129,   132,    94,
-     147,    94,   132,   177,   192,   194,   124,     0,   237,   199,
-     203,   126,    59,    94,   197,   198,   126,   219,   184,   183,
-     185,   147,   147,   122,   124,   131,   126,   132,   190,   194,
-     204,   205,    94,    96,    97,    98,    99,   100,   103,   104,
-     122,   125,   133,   134,   135,   136,   148,   149,   150,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+      74,    75,    76,    77,    78,    79,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    98,   181,   182,   183,   184,   185,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   202,
+     203,   204,   239,   240,   241,   198,    97,    98,   129,   150,
+     125,   135,   242,   126,   132,   186,   187,   188,   193,   197,
+     132,   135,    97,   150,    97,   135,   180,   195,   197,   127,
+       0,   240,   202,   206,   129,    59,    97,   200,   201,   129,
+     222,   187,   186,   188,   150,   150,   125,   127,   134,   129,
+     135,   193,   197,   207,   208,    97,    99,   100,   101,   102,
+     103,   106,   107,   125,   128,   136,   137,   138,   139,   151,
+     152,   153,   155,   156,   157,   158,   159,   160,   161,   162,
      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     176,   199,   132,   204,   202,   131,   123,   129,    14,    15,
-      16,    18,    19,    20,    21,    22,    23,    24,    62,   126,
-     127,   132,   159,   172,   173,   175,   178,   179,   199,   209,
-     210,   211,   212,   220,   221,   222,   224,   226,   228,   235,
-     124,   124,   131,   125,   176,   173,   208,   194,   147,   206,
-     207,   127,   205,   159,   159,   175,   103,   104,   124,   128,
-     123,   123,   129,    61,   173,   122,   159,   137,   138,   139,
-     134,   136,   101,   102,   105,   106,   140,   141,   107,   108,
-     144,   143,   142,   109,   111,   110,   145,   125,   127,   204,
-      97,    98,   198,   132,   132,   230,   122,   122,   132,   132,
-     175,   122,   176,   130,   122,   127,   213,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   131,   174,   129,
-     132,   127,   210,   176,   125,   176,   208,   131,   125,   206,
-     124,   129,   132,    94,   132,   123,   151,   175,    94,   100,
-     154,   173,   159,   159,   159,   161,   161,   162,   162,   163,
-     163,   163,   163,   164,   164,   165,   166,   167,   168,   169,
-     170,   175,   127,   216,   217,   218,   231,   175,   132,   175,
-     130,   229,   220,   173,   173,   125,   131,   125,   208,   131,
-     132,   176,   207,   124,   132,   125,   130,    62,   219,   211,
-     209,   221,   232,   123,   123,   175,   188,   190,   227,   214,
-     208,   131,   208,   125,   176,   173,   122,   227,   233,   234,
-     216,   223,   225,   147,   123,   127,   208,   125,   175,   132,
-     123,    17,   212,   131,   211,   215,   219,   132,   123,   175,
-     215,   216,   208,   132
+     173,   174,   175,   179,   202,   135,   207,   205,   134,   126,
+     132,    14,    15,    16,    18,    19,    20,    21,    22,    23,
+      24,    62,   129,   130,   135,   162,   175,   176,   178,   181,
+     182,   202,   212,   213,   214,   215,   223,   224,   225,   227,
+     229,   231,   238,   127,   127,   134,   128,   179,   176,   211,
+     197,   150,   209,   210,   130,   208,   162,   162,   178,   106,
+     107,   127,   131,   126,   126,   132,    61,   176,   125,   162,
+     140,   141,   142,   137,   139,   104,   105,   108,   109,   143,
+     144,   110,   111,   147,   146,   145,   112,   114,   113,   148,
+     128,   130,   207,   100,   101,   201,   135,   135,   233,   125,
+     125,   135,   135,   178,   125,   179,   133,   125,   130,   216,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     134,   177,   132,   135,   130,   213,   179,   128,   179,   211,
+     134,   128,   209,   127,   132,   135,    97,   135,   126,   154,
+     178,    97,   103,   157,   176,   162,   162,   162,   164,   164,
+     165,   165,   166,   166,   166,   166,   167,   167,   168,   169,
+     170,   171,   172,   173,   178,   130,   219,   220,   221,   234,
+     178,   135,   178,   133,   232,   223,   176,   176,   128,   134,
+     128,   211,   134,   135,   179,   210,   127,   135,   128,   133,
+      62,   222,   214,   212,   224,   235,   126,   126,   178,   191,
+     193,   230,   217,   211,   134,   211,   128,   179,   176,   125,
+     230,   236,   237,   219,   226,   228,   150,   126,   130,   211,
+     128,   178,   135,   126,    17,   215,   134,   214,   218,   222,
+     135,   126,   178,   218,   219,   211,   135
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   146,   147,   147,   148,   149,   149,   149,   149,   149,
-     149,   150,   150,   150,   150,   150,   150,   151,   152,   153,
-     153,   154,   154,   155,   155,   156,   156,   157,   158,   158,
-     158,   159,   159,   159,   159,   160,   160,   160,   160,   161,
-     161,   161,   161,   162,   162,   162,   163,   163,   163,   164,
-     164,   164,   164,   164,   165,   165,   165,   166,   166,   167,
-     167,   168,   168,   169,   169,   170,   170,   171,   171,   172,
-     172,   173,   173,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   175,   175,   176,   177,   178,   178,
-     178,   178,   178,   178,   178,   178,   179,   180,   180,   181,
-     181,   182,   183,   183,   184,   184,   184,   184,   185,   186,
-     186,   186,   186,   186,   186,   187,   187,   187,   187,   187,
-     187,   188,   188,   189,   189,   190,   190,   191,   192,   192,
-     192,   192,   192,   193,   193,   193,   193,   193,   193,   193,
-     193,   193,   193,   193,   193,   193,   193,   194,   195,   195,
-     195,   196,   197,   197,   198,   198,   198,   198,   199,   199,
-     199,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   202,   201,
-     203,   201,   204,   204,   205,   205,   206,   206,   207,   207,
-     208,   209,   210,   210,   211,   211,   211,   211,   211,   211,
-     211,   212,   213,   214,   212,   215,   215,   217,   216,   218,
-     216,   219,   219,   220,   220,   221,   221,   222,   223,   223,
-     225,   224,   226,   226,   227,   227,   229,   228,   230,   228,
-     231,   228,   232,   232,   233,   233,   234,   234,   235,   235,
-     235,   235,   235,   236,   236,   237,   237,   239,   238
+       0,   149,   150,   150,   151,   152,   152,   152,   152,   152,
+     152,   153,   153,   153,   153,   153,   153,   154,   155,   156,
+     156,   157,   157,   158,   158,   159,   159,   160,   161,   161,
+     161,   162,   162,   162,   162,   163,   163,   163,   163,   164,
+     164,   164,   164,   165,   165,   165,   166,   166,   166,   167,
+     167,   167,   167,   167,   168,   168,   168,   169,   169,   170,
+     170,   171,   171,   172,   172,   173,   173,   174,   174,   175,
+     175,   176,   176,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   178,   178,   179,   180,   181,   181,
+     181,   181,   181,   181,   181,   181,   182,   183,   183,   184,
+     184,   185,   186,   186,   187,   187,   187,   187,   188,   189,
+     189,   189,   189,   189,   189,   190,   190,   190,   190,   190,
+     190,   191,   191,   192,   192,   193,   193,   194,   195,   195,
+     195,   195,   195,   196,   196,   196,   196,   196,   196,   196,
+     196,   196,   196,   196,   196,   196,   196,   197,   198,   198,
+     198,   199,   200,   200,   201,   201,   201,   201,   202,   202,
+     202,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   205,   204,   206,   204,   207,   207,   208,   208,   209,
+     209,   210,   210,   211,   212,   213,   213,   214,   214,   214,
+     214,   214,   214,   214,   215,   216,   217,   215,   218,   218,
+     220,   219,   221,   219,   222,   222,   223,   223,   224,   224,
+     225,   226,   226,   228,   227,   229,   229,   230,   230,   232,
+     231,   233,   231,   234,   231,   235,   235,   236,   236,   237,
+     237,   238,   238,   238,   238,   238,   239,   239,   240,   240,
+     242,   241
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1683,14 +1702,15 @@
        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,     0,     6,
-       0,     5,     1,     2,     3,     4,     1,     3,     1,     4,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     0,     0,     5,     1,     1,     0,     2,     0,
-       2,     2,     3,     1,     2,     1,     2,     5,     3,     1,
-       0,     6,     3,     2,     1,     4,     0,     6,     0,     8,
-       0,     7,     1,     1,     1,     0,     2,     3,     2,     2,
-       2,     3,     2,     1,     2,     1,     1,     0,     3
+       1,     0,     6,     0,     5,     1,     2,     3,     4,     1,
+       3,     1,     4,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     0,     0,     5,     1,     1,
+       0,     2,     0,     2,     2,     3,     1,     2,     1,     2,
+       5,     3,     1,     0,     6,     3,     2,     1,     4,     0,
+       6,     0,     8,     0,     7,     1,     1,     1,     0,     2,
+       3,     2,     2,     2,     3,     2,     1,     2,     1,     1,
+       0,     3
 };
 
 
@@ -4137,7 +4157,7 @@
   case 191:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMS, (yylsp[0]));
     }
 
     break;
@@ -4145,7 +4165,7 @@
   case 192:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
     }
 
     break;
@@ -4153,7 +4173,7 @@
   case 193:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
     }
 
     break;
@@ -4161,7 +4181,7 @@
   case 194:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4169,7 +4189,7 @@
   case 195:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4177,7 +4197,7 @@
   case 196:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMS, (yylsp[0]));
     }
 
     break;
@@ -4185,7 +4205,7 @@
   case 197:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
     }
 
     break;
@@ -4193,7 +4213,7 @@
   case 198:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
     }
 
     break;
@@ -4201,7 +4221,7 @@
   case 199:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4209,7 +4229,7 @@
   case 200:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4217,7 +4237,7 @@
   case 201:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMS, (yylsp[0]));
     }
 
     break;
@@ -4225,6 +4245,30 @@
   case 202:
 
     {
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
+    }
+
+    break;
+
+  case 203:
+
+    {
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
+    }
+
+    break;
+
+  case 204:
+
+    {
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
+    }
+
+    break;
+
+  case 205:
+
+    {
         if (!context->supportsExtension("GL_OES_EGL_image_external") &&
             !context->supportsExtension("GL_NV_EGL_stream_consumer_external")) {
             context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
@@ -4234,7 +4278,7 @@
 
     break;
 
-  case 203:
+  case 206:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4245,7 +4289,7 @@
 
     break;
 
-  case 204:
+  case 207:
 
     {
         (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
@@ -4253,7 +4297,7 @@
 
     break;
 
-  case 205:
+  case 208:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
@@ -4261,7 +4305,7 @@
 
     break;
 
-  case 206:
+  case 209:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
@@ -4269,7 +4313,7 @@
 
     break;
 
-  case 207:
+  case 210:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
@@ -4277,7 +4321,7 @@
 
     break;
 
-  case 208:
+  case 211:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
@@ -4285,7 +4329,7 @@
 
     break;
 
-  case 209:
+  case 212:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
@@ -4293,7 +4337,7 @@
 
     break;
 
-  case 210:
+  case 213:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
@@ -4301,7 +4345,7 @@
 
     break;
 
-  case 211:
+  case 214:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
@@ -4309,7 +4353,7 @@
 
     break;
 
-  case 212:
+  case 215:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
@@ -4317,7 +4361,7 @@
 
     break;
 
-  case 213:
+  case 216:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
@@ -4325,7 +4369,7 @@
 
     break;
 
-  case 214:
+  case 217:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
@@ -4333,7 +4377,7 @@
 
     break;
 
-  case 215:
+  case 218:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
@@ -4341,7 +4385,7 @@
 
     break;
 
-  case 216:
+  case 219:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
@@ -4349,7 +4393,7 @@
 
     break;
 
-  case 217:
+  case 220:
 
     {
         //
@@ -4363,13 +4407,13 @@
 
     break;
 
-  case 218:
+  case 221:
 
     { context->enterStructDeclaration((yylsp[-1]), *(yyvsp[-1].lex).string); }
 
     break;
 
-  case 219:
+  case 222:
 
     {
         (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-5]), (yylsp[-4]), (yyvsp[-4].lex).string, (yyvsp[-1].interm.fieldList));
@@ -4377,13 +4421,13 @@
 
     break;
 
-  case 220:
+  case 223:
 
     { context->enterStructDeclaration((yylsp[0]), *(yyvsp[0].lex).string); }
 
     break;
 
-  case 221:
+  case 224:
 
     {
         (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-4]), (yyloc), NewPoolTString(""), (yyvsp[-1].interm.fieldList));
@@ -4391,7 +4435,7 @@
 
     break;
 
-  case 222:
+  case 225:
 
     {
         (yyval.interm.fieldList) = (yyvsp[0].interm.fieldList);
@@ -4399,7 +4443,7 @@
 
     break;
 
-  case 223:
+  case 226:
 
     {
         (yyval.interm.fieldList) = context->combineStructFieldLists((yyvsp[-1].interm.fieldList), (yyvsp[0].interm.fieldList), (yylsp[0]));
@@ -4407,7 +4451,7 @@
 
     break;
 
-  case 224:
+  case 227:
 
     {
         (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[-2].interm.type), (yyvsp[-1].interm.fieldList));
@@ -4415,7 +4459,7 @@
 
     break;
 
-  case 225:
+  case 228:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4424,7 +4468,7 @@
 
     break;
 
-  case 226:
+  case 229:
 
     {
         (yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4433,7 +4477,7 @@
 
     break;
 
-  case 227:
+  case 230:
 
     {
         (yyval.interm.fieldList)->push_back((yyvsp[0].interm.field));
@@ -4441,7 +4485,7 @@
 
     break;
 
-  case 228:
+  case 231:
 
     {
         context->checkIsNotReserved((yylsp[0]), *(yyvsp[0].lex).string);
@@ -4452,7 +4496,7 @@
 
     break;
 
-  case 229:
+  case 232:
 
     {
         context->checkIsNotReserved((yylsp[-3]), *(yyvsp[-3].lex).string);
@@ -4466,27 +4510,9 @@
 
     break;
 
-  case 230:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-
-    break;
-
-  case 231:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-
-    break;
-
-  case 232:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
-
-    break;
-
   case 233:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
@@ -4498,7 +4524,7 @@
 
   case 235:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
@@ -4510,13 +4536,13 @@
 
   case 237:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 238:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
@@ -4528,30 +4554,48 @@
 
   case 240:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
 
     break;
 
   case 241:
 
-    { (yyval.interm.intermBlock) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
 
     break;
 
   case 242:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 243:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 244:
 
+    { (yyval.interm.intermBlock) = 0; }
+
+    break;
+
+  case 245:
+
+    { context->symbolTable.push(); }
+
+    break;
+
+  case 246:
+
+    { context->symbolTable.pop(); }
+
+    break;
+
+  case 247:
+
     {
         if ((yyvsp[-2].interm.intermBlock) != 0) {
             (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
@@ -4561,43 +4605,43 @@
 
     break;
 
-  case 245:
+  case 248:
 
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
-  case 246:
+  case 249:
 
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
-  case 247:
+  case 250:
 
     { context->symbolTable.push(); }
 
     break;
 
-  case 248:
+  case 251:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
-  case 249:
+  case 252:
 
     { context->symbolTable.push(); }
 
     break;
 
-  case 250:
+  case 253:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
-  case 251:
+  case 254:
 
     {
         (yyval.interm.intermBlock) = 0;
@@ -4605,7 +4649,7 @@
 
     break;
 
-  case 252:
+  case 255:
 
     {
         if ((yyvsp[-1].interm.intermBlock)) {
@@ -4616,7 +4660,7 @@
 
     break;
 
-  case 253:
+  case 256:
 
     {
         (yyval.interm.intermBlock) = new TIntermBlock();
@@ -4626,7 +4670,7 @@
 
     break;
 
-  case 254:
+  case 257:
 
     {
         (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
@@ -4635,19 +4679,19 @@
 
     break;
 
-  case 255:
+  case 258:
 
     { (yyval.interm.intermNode) = 0; }
 
     break;
 
-  case 256:
+  case 259:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
 
     break;
 
-  case 257:
+  case 260:
 
     {
         context->checkIsScalarBool((yylsp[-4]), (yyvsp[-2].interm.intermTypedNode));
@@ -4656,7 +4700,7 @@
 
     break;
 
-  case 258:
+  case 261:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
@@ -4665,7 +4709,7 @@
 
     break;
 
-  case 259:
+  case 262:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
@@ -4674,13 +4718,13 @@
 
     break;
 
-  case 260:
+  case 263:
 
     { context->incrSwitchNestingLevel(); }
 
     break;
 
-  case 261:
+  case 264:
 
     {
         (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
@@ -4689,7 +4733,7 @@
 
     break;
 
-  case 262:
+  case 265:
 
     {
         (yyval.interm.intermCase) = context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4697,7 +4741,7 @@
 
     break;
 
-  case 263:
+  case 266:
 
     {
         (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
@@ -4705,7 +4749,7 @@
 
     break;
 
-  case 264:
+  case 267:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4714,7 +4758,7 @@
 
     break;
 
-  case 265:
+  case 268:
 
     {
         TIntermBinary *initNode = nullptr;
@@ -4729,13 +4773,13 @@
 
     break;
 
-  case 266:
+  case 269:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
 
     break;
 
-  case 267:
+  case 270:
 
     {
         context->symbolTable.pop();
@@ -4745,13 +4789,13 @@
 
     break;
 
-  case 268:
+  case 271:
 
     { context->incrLoopNestingLevel(); }
 
     break;
 
-  case 269:
+  case 272:
 
     {
         context->checkIsScalarBool((yylsp[0]), (yyvsp[-2].interm.intermTypedNode));
@@ -4762,13 +4806,13 @@
 
     break;
 
-  case 270:
+  case 273:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
 
     break;
 
-  case 271:
+  case 274:
 
     {
         context->symbolTable.pop();
@@ -4778,7 +4822,7 @@
 
     break;
 
-  case 272:
+  case 275:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4786,7 +4830,7 @@
 
     break;
 
-  case 273:
+  case 276:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4794,7 +4838,7 @@
 
     break;
 
-  case 274:
+  case 277:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4802,7 +4846,7 @@
 
     break;
 
-  case 275:
+  case 278:
 
     {
         (yyval.interm.intermTypedNode) = 0;
@@ -4810,7 +4854,7 @@
 
     break;
 
-  case 276:
+  case 279:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
@@ -4819,7 +4863,7 @@
 
     break;
 
-  case 277:
+  case 280:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
@@ -4828,7 +4872,7 @@
 
     break;
 
-  case 278:
+  case 281:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
@@ -4836,7 +4880,7 @@
 
     break;
 
-  case 279:
+  case 282:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
@@ -4844,7 +4888,7 @@
 
     break;
 
-  case 280:
+  case 283:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
@@ -4852,7 +4896,7 @@
 
     break;
 
-  case 281:
+  case 284:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4860,7 +4904,7 @@
 
     break;
 
-  case 282:
+  case 285:
 
     {
         FRAG_ONLY("discard", (yylsp[-1]));
@@ -4869,7 +4913,7 @@
 
     break;
 
-  case 283:
+  case 286:
 
     {
         (yyval.interm.intermBlock) = new TIntermBlock();
@@ -4880,7 +4924,7 @@
 
     break;
 
-  case 284:
+  case 287:
 
     {
         (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
@@ -4888,7 +4932,7 @@
 
     break;
 
-  case 285:
+  case 288:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4896,7 +4940,7 @@
 
     break;
 
-  case 286:
+  case 289:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4904,7 +4948,7 @@
 
     break;
 
-  case 287:
+  case 290:
 
     {
         context->parseFunctionDefinitionHeader((yylsp[0]), &((yyvsp[0].interm).function), &(yyvsp[0].interm).intermAggregate);
@@ -4912,7 +4956,7 @@
 
     break;
 
-  case 288:
+  case 291:
 
     {
         (yyval.interm.intermNode) = context->addFunctionDefinition(*((yyvsp[-2].interm).function), (yyvsp[-2].interm).intermAggregate, (yyvsp[0].interm.intermBlock), (yylsp[-2]));
diff --git a/src/compiler/translator/glslang_tab.h b/src/compiler/translator/glslang_tab.h
index 9d14a5b..b69bcce 100644
--- a/src/compiler/translator/glslang_tab.h
+++ b/src/compiler/translator/glslang_tab.h
@@ -122,76 +122,79 @@
     USAMPLER3D           = 328,
     USAMPLERCUBE         = 329,
     USAMPLER2DARRAY      = 330,
-    SAMPLER3D            = 331,
-    SAMPLER3DRECT        = 332,
-    SAMPLER2DSHADOW      = 333,
-    SAMPLERCUBESHADOW    = 334,
-    SAMPLER2DARRAYSHADOW = 335,
-    IMAGE2D              = 336,
-    IIMAGE2D             = 337,
-    UIMAGE2D             = 338,
-    IMAGE3D              = 339,
-    IIMAGE3D             = 340,
-    UIMAGE3D             = 341,
-    IMAGE2DARRAY         = 342,
-    IIMAGE2DARRAY        = 343,
-    UIMAGE2DARRAY        = 344,
-    IMAGECUBE            = 345,
-    IIMAGECUBE           = 346,
-    UIMAGECUBE           = 347,
-    LAYOUT               = 348,
-    IDENTIFIER           = 349,
-    TYPE_NAME            = 350,
-    FLOATCONSTANT        = 351,
-    INTCONSTANT          = 352,
-    UINTCONSTANT         = 353,
-    BOOLCONSTANT         = 354,
-    FIELD_SELECTION      = 355,
-    LEFT_OP              = 356,
-    RIGHT_OP             = 357,
-    INC_OP               = 358,
-    DEC_OP               = 359,
-    LE_OP                = 360,
-    GE_OP                = 361,
-    EQ_OP                = 362,
-    NE_OP                = 363,
-    AND_OP               = 364,
-    OR_OP                = 365,
-    XOR_OP               = 366,
-    MUL_ASSIGN           = 367,
-    DIV_ASSIGN           = 368,
-    ADD_ASSIGN           = 369,
-    MOD_ASSIGN           = 370,
-    LEFT_ASSIGN          = 371,
-    RIGHT_ASSIGN         = 372,
-    AND_ASSIGN           = 373,
-    XOR_ASSIGN           = 374,
-    OR_ASSIGN            = 375,
-    SUB_ASSIGN           = 376,
-    LEFT_PAREN           = 377,
-    RIGHT_PAREN          = 378,
-    LEFT_BRACKET         = 379,
-    RIGHT_BRACKET        = 380,
-    LEFT_BRACE           = 381,
-    RIGHT_BRACE          = 382,
-    DOT                  = 383,
-    COMMA                = 384,
-    COLON                = 385,
-    EQUAL                = 386,
-    SEMICOLON            = 387,
-    BANG                 = 388,
-    DASH                 = 389,
-    TILDE                = 390,
-    PLUS                 = 391,
-    STAR                 = 392,
-    SLASH                = 393,
-    PERCENT              = 394,
-    LEFT_ANGLE           = 395,
-    RIGHT_ANGLE          = 396,
-    VERTICAL_BAR         = 397,
-    CARET                = 398,
-    AMPERSAND            = 399,
-    QUESTION             = 400
+    SAMPLER2DMS          = 331,
+    ISAMPLER2DMS         = 332,
+    USAMPLER2DMS         = 333,
+    SAMPLER3D            = 334,
+    SAMPLER3DRECT        = 335,
+    SAMPLER2DSHADOW      = 336,
+    SAMPLERCUBESHADOW    = 337,
+    SAMPLER2DARRAYSHADOW = 338,
+    IMAGE2D              = 339,
+    IIMAGE2D             = 340,
+    UIMAGE2D             = 341,
+    IMAGE3D              = 342,
+    IIMAGE3D             = 343,
+    UIMAGE3D             = 344,
+    IMAGE2DARRAY         = 345,
+    IIMAGE2DARRAY        = 346,
+    UIMAGE2DARRAY        = 347,
+    IMAGECUBE            = 348,
+    IIMAGECUBE           = 349,
+    UIMAGECUBE           = 350,
+    LAYOUT               = 351,
+    IDENTIFIER           = 352,
+    TYPE_NAME            = 353,
+    FLOATCONSTANT        = 354,
+    INTCONSTANT          = 355,
+    UINTCONSTANT         = 356,
+    BOOLCONSTANT         = 357,
+    FIELD_SELECTION      = 358,
+    LEFT_OP              = 359,
+    RIGHT_OP             = 360,
+    INC_OP               = 361,
+    DEC_OP               = 362,
+    LE_OP                = 363,
+    GE_OP                = 364,
+    EQ_OP                = 365,
+    NE_OP                = 366,
+    AND_OP               = 367,
+    OR_OP                = 368,
+    XOR_OP               = 369,
+    MUL_ASSIGN           = 370,
+    DIV_ASSIGN           = 371,
+    ADD_ASSIGN           = 372,
+    MOD_ASSIGN           = 373,
+    LEFT_ASSIGN          = 374,
+    RIGHT_ASSIGN         = 375,
+    AND_ASSIGN           = 376,
+    XOR_ASSIGN           = 377,
+    OR_ASSIGN            = 378,
+    SUB_ASSIGN           = 379,
+    LEFT_PAREN           = 380,
+    RIGHT_PAREN          = 381,
+    LEFT_BRACKET         = 382,
+    RIGHT_BRACKET        = 383,
+    LEFT_BRACE           = 384,
+    RIGHT_BRACE          = 385,
+    DOT                  = 386,
+    COMMA                = 387,
+    COLON                = 388,
+    EQUAL                = 389,
+    SEMICOLON            = 390,
+    BANG                 = 391,
+    DASH                 = 392,
+    TILDE                = 393,
+    PLUS                 = 394,
+    STAR                 = 395,
+    SLASH                = 396,
+    PERCENT              = 397,
+    LEFT_ANGLE           = 398,
+    RIGHT_ANGLE          = 399,
+    VERTICAL_BAR         = 400,
+    CARET                = 401,
+    AMPERSAND            = 402,
+    QUESTION             = 403
 };
 #endif
 
diff --git a/src/compiler/translator/util.cpp b/src/compiler/translator/util.cpp
index 0ddeae4..5070f51 100644
--- a/src/compiler/translator/util.cpp
+++ b/src/compiler/translator/util.cpp
@@ -338,6 +338,8 @@
             return GL_SAMPLER_2D_RECT_ARB;
         case EbtSampler2DArray:
             return GL_SAMPLER_2D_ARRAY;
+        case EbtSampler2DMS:
+            return GL_SAMPLER_2D_MULTISAMPLE;
         case EbtISampler2D:
             return GL_INT_SAMPLER_2D;
         case EbtISampler3D:
@@ -346,6 +348,8 @@
             return GL_INT_SAMPLER_CUBE;
         case EbtISampler2DArray:
             return GL_INT_SAMPLER_2D_ARRAY;
+        case EbtISampler2DMS:
+            return GL_INT_SAMPLER_2D_MULTISAMPLE;
         case EbtUSampler2D:
             return GL_UNSIGNED_INT_SAMPLER_2D;
         case EbtUSampler3D:
@@ -354,6 +358,8 @@
             return GL_UNSIGNED_INT_SAMPLER_CUBE;
         case EbtUSampler2DArray:
             return GL_UNSIGNED_INT_SAMPLER_2D_ARRAY;
+        case EbtUSampler2DMS:
+            return GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE;
         case EbtSampler2DShadow:
             return GL_SAMPLER_2D_SHADOW;
         case EbtSamplerCubeShadow: