OSDN Git Service

Invariant keyword support
authorAlexis Hetu <sugoi@google.com>
Tue, 7 Jul 2015 17:31:44 +0000 (13:31 -0400)
committerAlexis Hétu <sugoi@google.com>
Wed, 8 Jul 2015 18:40:20 +0000 (18:40 +0000)
Added support for the invariant keyword in the parser.
Also made sure all in/out types were handled properly
in OutputASM.cpp.

Change-Id: I40f0bc9caf5bccc691aa60dfaa90bed5d1d7d238
Reviewed-on: https://swiftshader-review.googlesource.com/3663
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/compiler/OutputASM.cpp
src/OpenGL/compiler/ParseHelper.cpp
src/OpenGL/compiler/ParseHelper.h
src/OpenGL/compiler/glslang.y
src/OpenGL/compiler/glslang_tab.cpp

index d268672..72d7783 100644 (file)
@@ -1866,6 +1866,12 @@ namespace glsl
                case EvqFragmentIn:          return sw::Shader::PARAMETER_INPUT;\r
                case EvqInvariantVaryingIn:  return sw::Shader::PARAMETER_INPUT;    // FIXME: Guarantee invariance at the backend\r
                case EvqInvariantVaryingOut: return sw::Shader::PARAMETER_OUTPUT;   // FIXME: Guarantee invariance at the backend \r
+               case EvqSmooth:              return sw::Shader::PARAMETER_OUTPUT;\r
+               case EvqFlat:                return sw::Shader::PARAMETER_OUTPUT;\r
+               case EvqCentroidOut:         return sw::Shader::PARAMETER_OUTPUT;\r
+               case EvqSmoothIn:            return sw::Shader::PARAMETER_INPUT;\r
+               case EvqFlatIn:              return sw::Shader::PARAMETER_INPUT;\r
+               case EvqCentroidIn:          return sw::Shader::PARAMETER_INPUT;\r
                case EvqUniform:             return sw::Shader::PARAMETER_CONST;\r
                case EvqIn:                  return sw::Shader::PARAMETER_TEMP;\r
                case EvqOut:                 return sw::Shader::PARAMETER_TEMP;\r
@@ -1906,6 +1912,12 @@ namespace glsl
                case EvqFragmentIn:          return varyingRegister(operand);\r
                case EvqInvariantVaryingIn:  return varyingRegister(operand);\r
                case EvqInvariantVaryingOut: return varyingRegister(operand);\r
+               case EvqSmooth:              return varyingRegister(operand);\r
+               case EvqFlat:                return varyingRegister(operand);\r
+               case EvqCentroidOut:         return varyingRegister(operand);\r
+               case EvqSmoothIn:            return varyingRegister(operand);\r
+               case EvqFlatIn:              return varyingRegister(operand);\r
+               case EvqCentroidIn:          return varyingRegister(operand);\r
                case EvqUniform:             return uniformRegister(operand);\r
                case EvqIn:                  return temporaryRegister(operand);\r
                case EvqOut:                 return temporaryRegister(operand);\r
index f27486e..2fa4512 100644 (file)
@@ -1053,6 +1053,24 @@ bool TParseContext::functionCallLValueErrorCheck(const TFunction *fnCandidate, T
        return false;
 }
 
+void TParseContext::es3InvariantErrorCheck(const TQualifier qualifier, const TSourceLoc &invariantLocation)
+{
+       switch(qualifier)
+       {
+       case EvqVaryingOut:
+       case EvqSmoothOut:
+       case EvqFlatOut:
+       case EvqCentroidOut:
+       case EvqVertexOut:
+       case EvqFragmentOut:
+               break;
+       default:
+               error(invariantLocation, "Only out variables can be invariant.", "invariant");
+               recover();
+               break;
+       }
+}
+
 bool TParseContext::supportsExtension(const char* extension)
 {
     const TExtensionBehavior& extbehavior = extensionBehavior();
index 52a644e..fc9f102 100644 (file)
@@ -133,6 +133,7 @@ public:
        bool singleDeclarationErrorCheck(const TPublicType &publicType, const TSourceLoc &identifierLocation);
     bool layoutLocationErrorCheck(const TSourceLoc& location, const TLayoutQualifier &layoutQualifier);
     bool functionCallLValueErrorCheck(const TFunction *fnCandidate, TIntermAggregate *);
+       void es3InvariantErrorCheck(const TQualifier qualifier, const TSourceLoc &invariantLocation);
 
     const TExtensionBehavior& extensionBehavior() const { return mDirectiveHandler.extensionBehavior(); }
     bool supportsExtension(const char* extension);
index 21793d8..47f22fa 100644 (file)
@@ -997,6 +997,16 @@ type_qualifier
         $$.setBasic(EbtVoid, $2.qualifier, @2);
         $$.layoutQualifier = $1;
     }
+    | INVARIANT storage_qualifier {
+        context->es3InvariantErrorCheck($2.qualifier, @1);
+        $$.setBasic(EbtVoid, $2.qualifier, @2);
+        $$.invariant = true;
+    }
+    | INVARIANT interpolation_qualifier storage_qualifier {
+        context->es3InvariantErrorCheck($3.qualifier, @1);
+        $$ = context->joinInterpolationQualifiers(@2, $2.qualifier, @3, $3.qualifier);
+        $$.invariant = true;
+    }
     ;
 
 storage_qualifier
index 1853808..ca610b9 100644 (file)
@@ -592,18 +592,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  110
+#define YYFINAL  112
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2519
+#define YYLAST   2525
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  128
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  93
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  270
+#define YYNRULES  272
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  410
+#define YYNSTATES  413
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -674,21 +674,21 @@ static const yytype_uint16 yyprhs[] =
      297,   303,   307,   310,   314,   317,   318,   320,   322,   324,
      326,   328,   332,   339,   347,   356,   362,   364,   367,   373,
      380,   388,   393,   396,   398,   401,   403,   405,   407,   409,
-     411,   414,   416,   419,   421,   423,   426,   428,   430,   432,
-     435,   438,   440,   442,   445,   447,   449,   451,   456,   458,
-     462,   464,   468,   472,   474,   478,   483,   485,   487,   489,
-     491,   493,   495,   497,   499,   501,   503,   505,   507,   509,
-     511,   513,   515,   517,   519,   521,   523,   525,   527,   529,
-     531,   533,   535,   537,   539,   541,   543,   545,   547,   549,
-     551,   553,   555,   557,   559,   561,   563,   565,   567,   569,
-     571,   572,   579,   580,   586,   588,   591,   595,   600,   602,
-     606,   608,   613,   615,   617,   619,   621,   623,   625,   627,
-     629,   631,   633,   635,   638,   639,   640,   646,   648,   650,
-     651,   654,   655,   658,   661,   665,   667,   670,   672,   675,
-     681,   685,   687,   688,   695,   699,   702,   704,   709,   710,
-     717,   718,   727,   728,   736,   738,   740,   742,   743,   746,
-     750,   753,   756,   759,   763,   766,   768,   771,   773,   775,
-     776
+     411,   414,   416,   419,   421,   423,   426,   429,   433,   435,
+     437,   439,   442,   445,   447,   449,   452,   454,   456,   458,
+     463,   465,   469,   471,   475,   479,   481,   485,   490,   492,
+     494,   496,   498,   500,   502,   504,   506,   508,   510,   512,
+     514,   516,   518,   520,   522,   524,   526,   528,   530,   532,
+     534,   536,   538,   540,   542,   544,   546,   548,   550,   552,
+     554,   556,   558,   560,   562,   564,   566,   568,   570,   572,
+     574,   576,   578,   579,   586,   587,   593,   595,   598,   602,
+     607,   609,   613,   615,   620,   622,   624,   626,   628,   630,
+     632,   634,   636,   638,   640,   642,   645,   646,   647,   653,
+     655,   657,   658,   661,   662,   665,   668,   672,   674,   677,
+     679,   682,   688,   692,   694,   695,   702,   706,   709,   711,
+     716,   717,   724,   725,   734,   735,   743,   745,   747,   749,
+     750,   753,   757,   760,   763,   766,   770,   773,   775,   778,
+     780,   782,   783
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -736,42 +736,43 @@ static const yytype_int16 yyrhs[] =
      113,   189,    -1,     3,    76,    -1,   175,    -1,   173,   175,
       -1,    53,    -1,    52,    -1,     9,    -1,     8,    -1,    44,
       -1,     3,    44,    -1,   174,    -1,   171,   174,    -1,   171,
-      -1,   177,    -1,   177,   174,    -1,     9,    -1,    40,    -1,
-      41,    -1,    51,    40,    -1,    51,    41,    -1,    43,    -1,
-     180,    -1,   176,   180,    -1,     4,    -1,     5,    -1,     6,
-      -1,    75,   104,   178,   105,    -1,   179,    -1,   178,   111,
-     179,    -1,    76,    -1,    76,   113,    79,    -1,    76,   113,
-      80,    -1,   181,    -1,   181,   106,   107,    -1,   181,   106,
-     157,   107,    -1,    55,    -1,    11,    -1,    12,    -1,    13,
-      -1,    10,    -1,    31,    -1,    32,    -1,    33,    -1,    25,
-      -1,    26,    -1,    27,    -1,    28,    -1,    29,    -1,    30,
-      -1,    34,    -1,    35,    -1,    36,    -1,    37,    -1,    38,
-      -1,    39,    -1,    45,    -1,    46,    -1,    47,    -1,    48,
-      -1,    49,    -1,    50,    -1,    57,    -1,    58,    -1,    59,
-      -1,    70,    -1,    61,    -1,    62,    -1,    63,    -1,    64,
-      -1,    65,    -1,    66,    -1,    67,    -1,    68,    -1,    69,
-      -1,    72,    -1,    73,    -1,    74,    -1,   182,    -1,    77,
-      -1,    -1,    54,    76,   108,   183,   185,   109,    -1,    -1,
-      54,   108,   184,   185,   109,    -1,   186,    -1,   185,   186,
-      -1,   175,   187,   114,    -1,   173,   175,   187,   114,    -1,
-     188,    -1,   187,   111,   188,    -1,    76,    -1,    76,   106,
-     157,   107,    -1,   154,    -1,   159,    -1,   193,    -1,   192,
-      -1,   190,    -1,   202,    -1,   203,    -1,   205,    -1,   207,
-      -1,   209,    -1,   216,    -1,   108,   109,    -1,    -1,    -1,
-     108,   194,   201,   195,   109,    -1,   200,    -1,   192,    -1,
-      -1,   198,   200,    -1,    -1,   199,   192,    -1,   108,   109,
-      -1,   108,   201,   109,    -1,   191,    -1,   201,   191,    -1,
-     114,    -1,   156,   114,    -1,    19,   104,   156,   105,   204,
-      -1,   197,    17,   197,    -1,   197,    -1,    -1,    22,   104,
-     156,   105,   206,   193,    -1,    23,   157,   112,    -1,    24,
-     112,    -1,   156,    -1,   170,    76,   113,   189,    -1,    -1,
-      56,   104,   210,   208,   105,   196,    -1,    -1,    16,   211,
-     197,    56,   104,   156,   105,   114,    -1,    -1,    18,   104,
-     212,   213,   215,   105,   196,    -1,   202,    -1,   190,    -1,
-     208,    -1,    -1,   214,   114,    -1,   214,   114,   156,    -1,
-      15,   114,    -1,    14,   114,    -1,    21,   114,    -1,    21,
-     156,   114,    -1,    20,   114,    -1,   218,    -1,   217,   218,
-      -1,   219,    -1,   159,    -1,    -1,   160,   220,   200,    -1
+      -1,   177,    -1,   177,   174,    -1,     3,   174,    -1,     3,
+     171,   174,    -1,     9,    -1,    40,    -1,    41,    -1,    51,
+      40,    -1,    51,    41,    -1,    43,    -1,   180,    -1,   176,
+     180,    -1,     4,    -1,     5,    -1,     6,    -1,    75,   104,
+     178,   105,    -1,   179,    -1,   178,   111,   179,    -1,    76,
+      -1,    76,   113,    79,    -1,    76,   113,    80,    -1,   181,
+      -1,   181,   106,   107,    -1,   181,   106,   157,   107,    -1,
+      55,    -1,    11,    -1,    12,    -1,    13,    -1,    10,    -1,
+      31,    -1,    32,    -1,    33,    -1,    25,    -1,    26,    -1,
+      27,    -1,    28,    -1,    29,    -1,    30,    -1,    34,    -1,
+      35,    -1,    36,    -1,    37,    -1,    38,    -1,    39,    -1,
+      45,    -1,    46,    -1,    47,    -1,    48,    -1,    49,    -1,
+      50,    -1,    57,    -1,    58,    -1,    59,    -1,    70,    -1,
+      61,    -1,    62,    -1,    63,    -1,    64,    -1,    65,    -1,
+      66,    -1,    67,    -1,    68,    -1,    69,    -1,    72,    -1,
+      73,    -1,    74,    -1,   182,    -1,    77,    -1,    -1,    54,
+      76,   108,   183,   185,   109,    -1,    -1,    54,   108,   184,
+     185,   109,    -1,   186,    -1,   185,   186,    -1,   175,   187,
+     114,    -1,   173,   175,   187,   114,    -1,   188,    -1,   187,
+     111,   188,    -1,    76,    -1,    76,   106,   157,   107,    -1,
+     154,    -1,   159,    -1,   193,    -1,   192,    -1,   190,    -1,
+     202,    -1,   203,    -1,   205,    -1,   207,    -1,   209,    -1,
+     216,    -1,   108,   109,    -1,    -1,    -1,   108,   194,   201,
+     195,   109,    -1,   200,    -1,   192,    -1,    -1,   198,   200,
+      -1,    -1,   199,   192,    -1,   108,   109,    -1,   108,   201,
+     109,    -1,   191,    -1,   201,   191,    -1,   114,    -1,   156,
+     114,    -1,    19,   104,   156,   105,   204,    -1,   197,    17,
+     197,    -1,   197,    -1,    -1,    22,   104,   156,   105,   206,
+     193,    -1,    23,   157,   112,    -1,    24,   112,    -1,   156,
+      -1,   170,    76,   113,   189,    -1,    -1,    56,   104,   210,
+     208,   105,   196,    -1,    -1,    16,   211,   197,    56,   104,
+     156,   105,   114,    -1,    -1,    18,   104,   212,   213,   215,
+     105,   196,    -1,   202,    -1,   190,    -1,   208,    -1,    -1,
+     214,   114,    -1,   214,   114,   156,    -1,    15,   114,    -1,
+      14,   114,    -1,    21,   114,    -1,    21,   156,   114,    -1,
+      20,   114,    -1,   218,    -1,   217,   218,    -1,   219,    -1,
+     159,    -1,    -1,   160,   220,   200,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -790,21 +791,21 @@ static const yytype_uint16 yyrline[] =
      782,   810,   815,   825,   830,   840,   843,   846,   849,   855,
      862,   865,   869,   873,   878,   883,   890,   894,   898,   902,
      907,   912,   916,   923,   933,   939,   942,   948,   954,   961,
-     970,   979,   982,   985,   992,   996,  1003,  1006,  1010,  1014,
-    1023,  1032,  1040,  1050,  1057,  1060,  1063,  1069,  1076,  1079,
-    1085,  1088,  1091,  1097,  1100,  1105,  1120,  1124,  1128,  1132,
-    1136,  1140,  1145,  1150,  1155,  1160,  1165,  1170,  1175,  1180,
-    1185,  1190,  1195,  1200,  1206,  1212,  1218,  1224,  1230,  1236,
-    1242,  1248,  1254,  1259,  1264,  1273,  1278,  1283,  1288,  1293,
+     970,   979,   982,   985,   992,   996,  1000,  1005,  1013,  1016,
+    1020,  1024,  1033,  1042,  1050,  1060,  1067,  1070,  1073,  1079,
+    1086,  1089,  1095,  1098,  1101,  1107,  1110,  1115,  1130,  1134,
+    1138,  1142,  1146,  1150,  1155,  1160,  1165,  1170,  1175,  1180,
+    1185,  1190,  1195,  1200,  1205,  1210,  1216,  1222,  1228,  1234,
+    1240,  1246,  1252,  1258,  1264,  1269,  1274,  1283,  1288,  1293,
     1298,  1303,  1308,  1313,  1318,  1323,  1328,  1333,  1338,  1343,
-    1356,  1356,  1359,  1359,  1365,  1368,  1384,  1387,  1396,  1400,
-    1406,  1413,  1428,  1432,  1436,  1437,  1443,  1444,  1445,  1446,
-    1447,  1448,  1449,  1453,  1454,  1454,  1454,  1464,  1465,  1469,
-    1469,  1470,  1470,  1475,  1478,  1488,  1491,  1497,  1498,  1502,
-    1510,  1514,  1521,  1521,  1528,  1531,  1540,  1545,  1562,  1562,
-    1567,  1567,  1574,  1574,  1582,  1585,  1591,  1594,  1600,  1604,
-    1611,  1614,  1617,  1620,  1623,  1632,  1636,  1643,  1646,  1652,
-    1652
+    1348,  1353,  1366,  1366,  1369,  1369,  1375,  1378,  1394,  1397,
+    1406,  1410,  1416,  1423,  1438,  1442,  1446,  1447,  1453,  1454,
+    1455,  1456,  1457,  1458,  1459,  1463,  1464,  1464,  1464,  1474,
+    1475,  1479,  1479,  1480,  1480,  1485,  1488,  1498,  1501,  1507,
+    1508,  1512,  1520,  1524,  1531,  1531,  1538,  1541,  1550,  1555,
+    1572,  1572,  1577,  1577,  1584,  1584,  1592,  1595,  1601,  1604,
+    1610,  1614,  1621,  1624,  1627,  1630,  1633,  1642,  1646,  1653,
+    1656,  1662,  1662
 };
 #endif
 
@@ -909,21 +910,21 @@ static const yytype_uint8 yyr1[] =
      164,   165,   165,   165,   165,   166,   166,   166,   166,   167,
      168,   168,   168,   168,   168,   168,   169,   169,   169,   169,
      169,   169,   169,   170,   170,   171,   171,   172,   173,   173,
-     173,   173,   173,   173,   173,   173,   174,   174,   174,   174,
-     174,   174,   175,   175,   176,   176,   176,   177,   178,   178,
-     179,   179,   179,   180,   180,   180,   181,   181,   181,   181,
+     173,   173,   173,   173,   173,   173,   173,   173,   174,   174,
+     174,   174,   174,   174,   175,   175,   176,   176,   176,   177,
+     178,   178,   179,   179,   179,   180,   180,   180,   181,   181,
      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
-     183,   182,   184,   182,   185,   185,   186,   186,   187,   187,
-     188,   188,   189,   190,   191,   191,   192,   192,   192,   192,
-     192,   192,   192,   193,   194,   195,   193,   196,   196,   198,
-     197,   199,   197,   200,   200,   201,   201,   202,   202,   203,
-     204,   204,   206,   205,   207,   207,   208,   208,   210,   209,
-     211,   209,   212,   209,   213,   213,   214,   214,   215,   215,
-     216,   216,   216,   216,   216,   217,   217,   218,   218,   220,
-     219
+     181,   181,   183,   182,   184,   182,   185,   185,   186,   186,
+     187,   187,   188,   188,   189,   190,   191,   191,   192,   192,
+     192,   192,   192,   192,   192,   193,   194,   195,   193,   196,
+     196,   198,   197,   199,   197,   200,   200,   201,   201,   202,
+     202,   203,   204,   204,   206,   205,   207,   207,   208,   208,
+     210,   209,   211,   209,   212,   209,   213,   213,   214,   214,
+     215,   215,   216,   216,   216,   216,   216,   217,   217,   218,
+     218,   220,   219
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -942,21 +943,21 @@ static const yytype_uint8 yyr2[] =
        5,     3,     2,     3,     2,     0,     1,     1,     1,     1,
        1,     3,     6,     7,     8,     5,     1,     2,     5,     6,
        7,     4,     2,     1,     2,     1,     1,     1,     1,     1,
-       2,     1,     2,     1,     1,     2,     1,     1,     1,     2,
-       2,     1,     1,     2,     1,     1,     1,     4,     1,     3,
-       1,     3,     3,     1,     3,     4,     1,     1,     1,     1,
+       2,     1,     2,     1,     1,     2,     2,     3,     1,     1,
+       1,     2,     2,     1,     1,     2,     1,     1,     1,     4,
+       1,     3,     1,     3,     3,     1,     3,     4,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       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,     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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -964,444 +965,436 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     0,   144,   145,   146,     0,   128,   136,   160,   157,
-     158,   159,   164,   165,   166,   167,   168,   169,   161,   162,
-     163,   170,   171,   172,   173,   174,   175,   137,   138,   141,
-     129,   176,   177,   178,   179,   180,   181,     0,   126,   125,
-       0,   156,   182,   183,   184,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   185,   195,   196,   197,     0,   199,
-     268,   269,     0,    95,   105,     0,   110,   116,   133,     0,
-     131,   123,     0,   134,   142,   153,   198,     0,   265,   267,
-     130,   122,     0,   139,   140,     0,   202,     0,    86,     0,
-      93,   105,   127,   106,   107,   108,    96,     0,   105,     0,
-      87,   117,   132,     0,    92,     0,   124,   143,   135,     0,
-       1,   266,     0,   200,     0,   150,     0,   148,     0,   270,
-      97,   102,   104,   109,     0,   111,    98,     0,     0,    85,
-       0,     0,     0,     0,   204,     2,     6,     4,     5,     7,
-      28,     0,     0,     0,   154,    35,    34,    36,    33,     3,
-       9,    29,    11,    16,    17,     0,     0,    22,     0,    37,
-       0,    41,    44,    47,    52,    55,    57,    59,    61,    63,
-      65,    67,    84,     0,    26,    88,     0,     0,     0,   147,
-       0,     0,     0,   250,     0,     0,     0,     0,     0,     0,
-       0,     0,   224,   233,   237,    37,    69,    82,     0,   213,
-       0,   142,   216,   235,   215,   214,     0,   217,   218,   219,
-     220,   221,   222,    99,   101,   103,     0,     0,     0,     0,
-     212,   121,     0,   210,     0,   208,     0,   205,    30,    31,
-       0,    13,    14,     0,     0,    20,    19,     0,   156,    23,
-      25,    32,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   146,   147,   148,     0,   128,   138,   162,   159,
+     160,   161,   166,   167,   168,   169,   170,   171,   163,   164,
+     165,   172,   173,   174,   175,   176,   177,   139,   140,   143,
+     129,   178,   179,   180,   181,   182,   183,     0,   126,   125,
+       0,   158,   184,   185,   186,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   187,   197,   198,   199,     0,   201,
+     270,   271,     0,    95,   105,     0,   110,   116,   133,     0,
+     131,   123,     0,   134,   144,   155,   200,     0,   267,   269,
+     130,   122,     0,   136,     0,   141,   142,     0,   204,     0,
+      86,     0,    93,   105,   127,   106,   107,   108,    96,     0,
+     105,     0,    87,   117,   132,     0,    92,     0,   124,   145,
+     135,     0,     1,   268,   137,     0,   202,     0,   152,     0,
+     150,     0,   272,    97,   102,   104,   109,     0,   111,    98,
+       0,     0,    85,     0,     0,     0,     0,   206,     2,     6,
+       4,     5,     7,    28,     0,     0,     0,   156,    35,    34,
+      36,    33,     3,     9,    29,    11,    16,    17,     0,     0,
+      22,     0,    37,     0,    41,    44,    47,    52,    55,    57,
+      59,    61,    63,    65,    67,    84,     0,    26,    88,     0,
+       0,     0,   149,     0,     0,     0,   252,     0,     0,     0,
+       0,     0,     0,     0,     0,   226,   235,   239,    37,    69,
+      82,     0,   215,     0,   144,   218,   237,   217,   216,     0,
+     219,   220,   221,   222,   223,   224,    99,   101,   103,     0,
+       0,     0,     0,   214,   121,     0,   212,     0,   210,     0,
+     207,    30,    31,     0,    13,    14,     0,     0,    20,    19,
+       0,   158,    23,    25,    32,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   155,     0,   203,   151,   152,   149,   261,   260,
-     231,   252,     0,   264,   262,     0,     0,     0,   245,   248,
-     223,     0,    72,    73,    75,    74,    77,    78,    79,    80,
-      81,    76,    71,     0,     0,   238,   234,   236,     0,     0,
-       0,   115,     0,   118,     0,     0,     0,   206,     0,    89,
-       8,     0,    15,    27,    12,    18,    24,    38,    39,    40,
-      43,    42,    45,    46,    50,    51,    48,    49,    53,    54,
-      56,    58,    60,    62,    64,    66,     0,   201,     0,     0,
-       0,     0,     0,   263,     0,   244,     0,   225,    70,    83,
-       0,     0,   112,   119,     0,   207,     0,   209,     0,    90,
-      10,     0,     0,   230,   232,   255,   254,   257,   231,   242,
-     246,     0,     0,     0,     0,   100,   113,     0,   120,   211,
-       0,    68,     0,   256,     0,     0,   241,   239,     0,     0,
-       0,   226,   114,     0,     0,   258,     0,   231,   243,     0,
-     228,   249,   227,    91,     0,   259,   253,   240,   247,   251
+       0,     0,     0,     0,     0,   157,     0,   205,   153,   154,
+     151,   263,   262,   233,   254,     0,   266,   264,     0,     0,
+       0,   247,   250,   225,     0,    72,    73,    75,    74,    77,
+      78,    79,    80,    81,    76,    71,     0,     0,   240,   236,
+     238,     0,     0,     0,   115,     0,   118,     0,     0,     0,
+     208,     0,    89,     8,     0,    15,    27,    12,    18,    24,
+      38,    39,    40,    43,    42,    45,    46,    50,    51,    48,
+      49,    53,    54,    56,    58,    60,    62,    64,    66,     0,
+     203,     0,     0,     0,     0,     0,   265,     0,   246,     0,
+     227,    70,    83,     0,     0,   112,   119,     0,   209,     0,
+     211,     0,    90,    10,     0,     0,   232,   234,   257,   256,
+     259,   233,   244,   248,     0,     0,     0,     0,   100,   113,
+       0,   120,   213,     0,    68,     0,   258,     0,     0,   243,
+     241,     0,     0,     0,   228,   114,     0,     0,   260,     0,
+     233,   245,     0,   230,   251,   229,    91,     0,   261,   255,
+     242,   249,   253
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   149,   150,   151,   311,   152,   153,   154,   155,   156,
-     157,   158,   195,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   196,   197,   293,   198,   173,
-     105,   199,   200,    62,    63,    64,   121,    96,    97,   122,
-      65,    66,    67,    68,    98,    69,    70,    71,    72,    73,
-     116,   117,   174,    75,    76,   176,   114,   133,   134,   224,
-     225,   221,   202,   203,   204,   205,   281,   374,   401,   338,
-     339,   340,   402,   206,   207,   208,   387,   209,   388,   210,
-     373,   211,   346,   270,   341,   367,   384,   385,   212,    77,
-      78,    79,    89
+      -1,   152,   153,   154,   314,   155,   156,   157,   158,   159,
+     160,   161,   198,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   199,   200,   296,   201,   176,
+     107,   202,   203,    62,    63,    64,   124,    98,    99,   125,
+      65,    66,    67,    68,   100,    69,    70,    71,    72,    73,
+     119,   120,   177,    75,    76,   179,   117,   136,   137,   227,
+     228,   224,   205,   206,   207,   208,   284,   377,   404,   341,
+     342,   343,   405,   209,   210,   211,   390,   212,   391,   213,
+     376,   214,   349,   273,   344,   370,   387,   388,   215,    77,
+      78,    79,    91
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -331
+#define YYPACT_NINF -334
 static const yytype_int16 yypact[] =
 {
-    2157,   -28,  -331,  -331,  -331,   141,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,     4,  -331,  -331,
-     -44,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,   -78,  -331,
-    -331,   -31,   -35,   -24,    10,   -71,  -331,    45,    38,  1176,
-    -331,  -331,  2442,    38,  -331,     1,  -331,  2082,  -331,  -331,
-    -331,  -331,  2442,  -331,  -331,    49,  -331,    72,  -331,    51,
-    -331,    19,  -331,  -331,  -331,  -331,  -331,  2306,   110,    92,
-    -331,   -79,  -331,    67,  -331,  2232,  -331,  -331,  -331,  1246,
-    -331,  -331,    25,  -331,  2232,    58,   -70,  -331,   404,  -331,
-    -331,  -331,  -331,   103,  2306,   -89,  -331,  1344,  1635,  -331,
-     136,  2306,   105,  1827,  -331,    78,  -331,  -331,  -331,  -331,
-    -331,  1635,  1635,  1635,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,    16,  -331,  -331,  -331,    79,   -21,  1730,    83,  -331,
-    1635,    34,    40,    28,   -65,    47,    57,    61,    64,   100,
-     101,   -72,  -331,    86,  -331,  -331,  2232,  1912,    82,  -331,
-      72,    84,    85,  -331,    93,    96,    87,  1442,    98,  1635,
-      91,   106,   102,  -331,  -331,   188,  -331,  -331,   -15,  -331,
-     -31,   108,  -331,  -331,  -331,  -331,   520,  -331,  -331,  -331,
-    -331,  -331,  -331,    90,  -331,  -331,  1537,  1635,   104,   109,
-    -331,  -331,   105,   107,     5,  -331,   -61,  -331,  -331,  -331,
-     -20,  -331,  -331,  1635,  2374,  -331,  -331,  1635,   113,  -331,
-    -331,  -331,  1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,
-    1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,
-    1635,  1635,  -331,  1997,  -331,  -331,  -331,  -331,  -331,  -331,
-     111,  -331,  1635,  -331,  -331,     6,  1635,    97,  -331,  -331,
-    -331,   636,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-    -331,  -331,  -331,  1635,  1635,  -331,  -331,  -331,  1635,   112,
-     114,  -331,  1635,   115,    21,  1635,   105,  -331,   -75,  -331,
-    -331,   117,   120,  -331,   116,  -331,  -331,  -331,  -331,  -331,
-      34,    34,    40,    40,    28,    28,    28,    28,   -65,   -65,
-      47,    57,    61,    64,   100,   101,    31,  -331,   159,    51,
-     868,   984,   -17,  -331,    -5,  -331,  1081,   636,  -331,  -331,
-     119,  1635,   121,  -331,  1635,  -331,   125,  -331,  1635,  -331,
-    -331,  1635,   118,  -331,  -331,  -331,  -331,  1081,   111,  -331,
-     120,   157,  2306,   130,   127,  -331,  -331,  1635,  -331,  -331,
-     131,  -331,  1635,  -331,   126,   134,   224,  -331,   138,   129,
-     752,  -331,  -331,   133,    -1,  1635,   752,   111,  -331,  1635,
-    -331,  -331,  -331,  -331,   135,   120,  -331,  -331,  -331,  -331
+    2163,    10,  -334,  -334,  -334,   169,  -334,  -334,  -334,  -334,
+    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
+    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
+    -334,  -334,  -334,  -334,  -334,  -334,  -334,    69,  -334,  -334,
+     -48,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
+    -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,   -82,  -334,
+    -334,   -78,   -73,   -71,     1,   -59,  -334,   -32,   113,  1182,
+    -334,  -334,  2448,   113,  -334,   -23,  -334,  2088,  -334,  -334,
+    -334,  -334,   113,  -334,  2448,  -334,  -334,    11,  -334,     9,
+    -334,    20,  -334,   121,  -334,  -334,  -334,  -334,  -334,  2312,
+     150,    22,  -334,   -79,  -334,    37,  -334,  2238,  -334,  -334,
+    -334,  1252,  -334,  -334,  -334,    62,  -334,  2238,    44,   -41,
+    -334,   410,  -334,  -334,  -334,  -334,   105,  2312,   -76,  -334,
+    1350,  1641,  -334,   107,  2312,   117,  1833,  -334,    91,  -334,
+    -334,  -334,  -334,  -334,  1641,  1641,  1641,  -334,  -334,  -334,
+    -334,  -334,  -334,  -334,    19,  -334,  -334,  -334,   103,   -24,
+    1736,   120,  -334,  1641,    80,   -42,   -36,    15,    43,    99,
+     108,   104,   141,   142,   -69,  -334,   127,  -334,  -334,  2238,
+    1918,    87,  -334,     9,   122,   124,  -334,   135,   136,   129,
+    1448,   140,  1641,   133,   143,   137,  -334,  -334,   118,  -334,
+    -334,    12,  -334,   -78,   145,  -334,  -334,  -334,  -334,   526,
+    -334,  -334,  -334,  -334,  -334,  -334,   144,  -334,  -334,  1543,
+    1641,   138,   148,  -334,  -334,   117,   146,    28,  -334,   -58,
+    -334,  -334,  -334,   -15,  -334,  -334,  1641,  2380,  -334,  -334,
+    1641,   154,  -334,  -334,  -334,  1641,  1641,  1641,  1641,  1641,
+    1641,  1641,  1641,  1641,  1641,  1641,  1641,  1641,  1641,  1641,
+    1641,  1641,  1641,  1641,  1641,  -334,  2003,  -334,  -334,  -334,
+    -334,  -334,  -334,   152,  -334,  1641,  -334,  -334,    41,  1641,
+     149,  -334,  -334,  -334,   642,  -334,  -334,  -334,  -334,  -334,
+    -334,  -334,  -334,  -334,  -334,  -334,  1641,  1641,  -334,  -334,
+    -334,  1641,   151,   155,  -334,  1641,   157,    57,  1641,   117,
+    -334,   -85,  -334,  -334,   156,   160,  -334,   161,  -334,  -334,
+    -334,  -334,  -334,    80,    80,   -42,   -42,   -36,   -36,   -36,
+     -36,    15,    15,    43,    99,   108,   104,   141,   142,    72,
+    -334,   211,    20,   874,   990,   -10,  -334,     3,  -334,  1087,
+     642,  -334,  -334,   165,  1641,   163,  -334,  1641,  -334,   166,
+    -334,  1641,  -334,  -334,  1641,   164,  -334,  -334,  -334,  -334,
+    1087,   152,  -334,   160,   198,  2312,   172,   170,  -334,  -334,
+    1641,  -334,  -334,   171,  -334,  1641,  -334,   167,   175,   265,
+    -334,   178,   174,   758,  -334,  -334,   176,    13,  1641,   758,
+     152,  -334,  1641,  -334,  -334,  -334,  -334,   177,   160,  -334,
+    -334,  -334,  -334
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -331,  -331,  -331,  -331,  -331,  -331,  -331,    14,  -331,  -331,
-    -331,  -331,    63,  -331,   -82,   -74,  -122,   -88,    -4,    -6,
-      -3,     2,     7,     8,  -331,   -91,  -124,  -331,  -138,  -113,
-    -331,     3,     9,  -331,  -331,  -331,   137,   164,   160,   145,
-    -331,  -331,  -325,  -331,  -331,  -103,    -2,   -68,   254,  -331,
-    -331,    94,     0,  -331,  -331,  -331,  -331,  -101,  -123,    43,
-     -36,  -210,   -69,  -198,  -328,  -126,  -331,  -331,  -125,  -330,
-    -331,  -331,   -83,    -8,   -64,  -331,  -331,  -331,  -331,  -331,
-     -87,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
-     199,  -331,  -331
+    -334,  -334,  -334,  -334,  -334,  -334,  -334,    46,  -334,  -334,
+    -334,  -334,    66,  -334,   -46,   -44,   -67,   -34,    30,    33,
+      29,    32,    34,    31,  -334,  -104,  -127,  -334,  -144,  -119,
+    -334,    14,    17,  -334,  -334,  -334,   168,   204,   199,   173,
+    -334,  -334,  -325,     8,  -334,  -101,     7,   -68,   293,  -334,
+    -334,   119,     0,  -334,  -334,  -334,  -334,   -97,  -123,    76,
+      -6,  -208,   -40,  -206,  -328,   -83,  -334,  -334,   -94,  -333,
+    -334,  -334,   -86,    25,   -38,  -334,  -334,  -334,  -334,  -334,
+     -60,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,
+     253,  -334,  -334
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -230
+#define YYTABLE_NINF -232
 static const yytype_int16 yytable[] =
 {
-      74,   106,   131,    60,   220,   230,   119,   301,   297,    61,
-     227,   131,   364,   177,   219,   308,    80,   216,   172,    92,
-     260,   371,   249,   250,   217,   126,    87,   127,    92,   123,
-     131,   358,    85,   239,   128,   179,   172,   132,   386,   359,
-      99,   180,   371,   100,    83,    84,   132,     7,    81,   275,
-      93,    94,    95,   309,   227,   261,   123,   251,   252,    93,
-      94,    95,   400,   222,    86,   132,   102,   407,   400,    74,
-      90,   108,   107,   131,   131,   263,   277,    74,    27,    28,
-      60,    29,   112,    88,   236,   310,    61,    91,   368,    37,
-     237,   294,   353,   220,   294,   312,   294,    74,   172,   295,
-     369,   231,   232,   300,   404,    74,   294,   109,   132,   132,
-     294,   247,   248,   316,    74,   -94,   306,   294,   201,   307,
-     343,   101,   233,   336,    74,   172,   234,   324,   325,   326,
-     327,    74,   306,    74,   342,   355,   253,   254,   344,   175,
-     227,   376,   294,   361,   378,     2,     3,     4,   115,   297,
-      93,    94,    95,   242,   243,   244,   245,   113,   246,   118,
-     131,   265,   266,   320,   321,   328,   329,   392,   125,   348,
-     349,   178,   159,   322,   323,   129,    74,    74,   220,   213,
-      80,   223,   -27,   255,   235,   350,   256,   240,   257,   408,
-     159,   258,   356,   262,   259,   132,   298,   271,   268,   269,
-     272,   273,   276,   278,   228,   229,   201,   172,   370,   345,
-     279,   280,   -26,   305,   172,   362,   303,   302,   -21,  -229,
-     -28,   352,   382,   241,   360,   351,   375,   220,   354,   370,
-     220,   294,   379,   389,   377,   390,   391,   381,   393,   396,
-     395,   397,   399,   372,   394,   380,   192,   403,   315,   409,
-     331,   330,   159,   220,   332,   120,   363,   405,   124,    82,
-     333,   214,   398,    74,   372,   304,   334,   172,   335,   215,
-     357,   406,   365,   347,   267,   220,   111,   366,     0,   159,
-     383,   201,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   292,     0,     0,   106,   317,   318,   319,   159,   159,
-     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
-     159,   159,   159,   159,     0,     0,     0,     0,     0,     0,
+      74,   108,   233,   300,   223,   122,   134,   175,    83,    82,
+      94,   222,   304,   230,    60,   367,   134,    61,   311,     7,
+     180,   361,    89,   263,   374,   129,   175,   130,    87,   362,
+     219,   126,    92,   242,   131,   134,    90,   220,   389,   135,
+      93,    95,    96,    97,   103,   374,   278,   250,   251,   135,
+      27,    28,   101,    29,    80,   102,   312,   230,   264,   126,
+      88,    37,    38,    39,   182,   403,   225,   410,   135,    74,
+     183,   403,   109,   280,   248,   104,   249,    74,   134,   134,
+     110,   239,   266,   111,   115,   118,    81,   240,   175,   114,
+     313,    60,   315,   223,    61,   371,   297,   356,   128,    74,
+     303,   297,   252,   253,   234,   235,   -94,    74,   372,    85,
+      86,   135,   135,   319,   297,   175,     7,    74,   407,   116,
+     339,   204,     7,   297,   297,   236,   298,    74,   121,   237,
+      94,   345,   256,   257,    74,   347,    74,   254,   255,   309,
+      83,    82,   310,   230,   300,   132,   379,    27,    28,   381,
+      29,    80,   297,    27,    28,   346,    29,   181,    37,    38,
+      39,    95,    96,    97,    37,   134,   268,   269,   309,   351,
+     352,   358,   395,     2,     3,     4,   178,   162,   223,    74,
+      74,   216,   353,   297,   364,   327,   328,   329,   330,   359,
+      95,    96,    97,   226,   411,   -27,   162,   175,   135,   245,
+     246,   247,   323,   324,   175,   373,   325,   326,   238,   204,
+     231,   232,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   331,   332,   243,   258,   373,   223,   260,   244,
+     223,   295,   261,   259,   265,   262,   271,   384,   272,   274,
+     275,   397,   383,   276,   279,   281,   283,   282,   375,   -26,
+     301,   305,   308,   223,   408,   306,   366,   175,   162,   -21,
+    -231,   348,   355,   363,   354,   -28,    74,   365,   385,   375,
+     357,   297,   378,   382,   392,   223,   380,   393,   396,   394,
+     399,   398,   400,   318,   204,   162,   195,   402,   333,   335,
+     406,   412,   334,   336,   338,   217,   337,   123,    84,   127,
+     218,   307,   270,   360,   368,   409,   369,   108,   401,   350,
+     386,   320,   321,   322,   162,   162,   162,   162,   162,   162,
+     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     113,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   204,   204,     0,     0,     0,     0,   204,
+     204,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   162,     0,     0,
+     204,     0,     0,     0,   162,    74,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     201,   201,     0,     0,     0,     0,   201,   201,     0,     0,
+       0,     0,     0,   204,     0,     0,     0,     0,     0,   204,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   159,     0,     0,     0,     0,     0,   201,   159,     0,
-       0,     0,    74,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     201,     0,     0,     0,     0,     0,   201,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   181,   182,
-     183,   159,   184,   185,   186,   187,   188,   189,   190,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-     191,    42,    43,    44,     0,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
-     135,    59,   136,   137,   138,   139,   140,     0,     0,   141,
-     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   143,     0,
-       0,     0,   192,   193,     0,     0,     0,     0,   194,   145,
-     146,   147,   148,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   181,   182,   183,     0,   184,   185,
-     186,   187,   188,   189,   190,    12,    13,    14,    15,    16,
+       0,     0,     0,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   184,   185,   186,   162,   187,   188,
+     189,   190,   191,   192,   193,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,   191,    42,    43,    44,
+      36,    37,    38,    39,    40,    41,   194,    42,    43,    44,
        0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,    58,   135,    59,   136,   137,
-     138,   139,   140,     0,     0,   141,   142,     0,     0,     0,
+      54,     0,    55,    56,    57,    58,   138,    59,   139,   140,
+     141,   142,   143,     0,     0,   144,   145,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   143,     0,     0,     0,   192,   296,
-       0,     0,     0,     0,   194,   145,   146,   147,   148,     1,
+       0,     0,     0,     0,   146,     0,     0,     0,   195,   196,
+       0,     0,     0,     0,   197,   148,   149,   150,   151,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-     181,   182,   183,     0,   184,   185,   186,   187,   188,   189,
-     190,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+     184,   185,   186,     0,   187,   188,   189,   190,   191,   192,
+     193,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,   191,    42,    43,    44,     0,    45,    46,    47,
+      40,    41,   194,    42,    43,    44,     0,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
-      57,    58,   135,    59,   136,   137,   138,   139,   140,     0,
-       0,   141,   142,     0,     0,     0,     0,     0,     0,     0,
+      57,    58,   138,    59,   139,   140,   141,   142,   143,     0,
+       0,   144,   145,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     143,     0,     0,     0,   192,     0,     0,     0,     0,     0,
-     194,   145,   146,   147,   148,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   181,   182,   183,     0,
-     184,   185,   186,   187,   188,   189,   190,    12,    13,    14,
+     146,     0,     0,     0,   195,   299,     0,     0,     0,     0,
+     197,   148,   149,   150,   151,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   184,   185,   186,     0,
+     187,   188,   189,   190,   191,   192,   193,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,   191,    42,
+      34,    35,    36,    37,    38,    39,    40,    41,   194,    42,
       43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,    58,   135,    59,
-     136,   137,   138,   139,   140,     0,     0,   141,   142,     0,
+      52,    53,    54,     0,    55,    56,    57,    58,   138,    59,
+     139,   140,   141,   142,   143,     0,     0,   144,   145,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   143,     0,     0,     0,
-     118,     0,     0,     0,     0,     0,   194,   145,   146,   147,
-     148,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   181,   182,   183,     0,   184,   185,   186,   187,
-     188,   189,   190,    12,    13,    14,    15,    16,    17,    18,
+       0,     0,     0,     0,     0,     0,   146,     0,     0,     0,
+     195,     0,     0,     0,     0,     0,   197,   148,   149,   150,
+     151,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   184,   185,   186,     0,   187,   188,   189,   190,
+     191,   192,   193,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
        0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,   191,    42,    43,    44,     0,    45,
+      38,    39,    40,    41,   194,    42,    43,    44,     0,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
-      55,    56,    57,    58,   135,    59,   136,   137,   138,   139,
-     140,     0,     0,   141,   142,     0,     0,     0,     0,     0,
+      55,    56,    57,    58,   138,    59,   139,   140,   141,   142,
+     143,     0,     0,   144,   145,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   143,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   194,   145,   146,   147,   148,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+       0,     0,   146,     0,     0,     0,   121,     0,     0,     0,
+       0,     0,   197,   148,   149,   150,   151,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   184,   185,
+     186,     0,   187,   188,   189,   190,   191,   192,   193,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+     194,    42,    43,    44,     0,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
-     135,    59,   136,   137,   138,   139,   140,     0,     0,   141,
-     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   130,     2,     3,     4,   143,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,   194,   145,
-     146,   147,   148,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,     0,    42,    43,
-      44,     0,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,     0,    55,    56,    57,    58,   135,    59,   136,
-     137,   138,   139,   140,     0,     0,   141,   142,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       2,     3,     4,     0,     0,   143,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,   145,   146,   147,   148,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
-      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
-      57,     0,   103,    59,     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,
-     104,    31,    32,    33,    34,    35,    36,     0,     0,     0,
-      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
-      57,     0,   135,    59,   136,   137,   138,   139,   140,     0,
-       0,   141,   142,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     143,     0,     0,   144,     8,     9,    10,    11,     0,     0,
-       0,   145,   146,   147,   148,     0,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
-      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
-       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,     0,    55,    56,    57,     0,
-     135,    59,   136,   137,   138,   139,   140,     0,     0,   141,
-     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   143,     0,
-       0,   218,     8,     9,    10,    11,     0,     0,     0,   145,
-     146,   147,   148,     0,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
-      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
-      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,     0,   135,    59,
-     136,   137,   138,   139,   140,     0,     0,   141,   142,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   143,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,   274,   145,   146,   147,
-     148,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,     0,   135,    59,   136,   137,   138,   139,   140,
-       0,     0,   141,   142,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   143,     0,     0,   299,     8,     9,    10,    11,     0,
-       0,     0,   145,   146,   147,   148,     0,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-      31,    32,    33,    34,    35,    36,     0,     0,     0,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-       0,   135,    59,   136,   137,   138,   139,   140,     0,     0,
-     141,   142,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   143,
+     138,    59,   139,   140,   141,   142,   143,     0,     0,   144,
+     145,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   146,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   197,   148,
+     149,   150,   151,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-     145,   146,   147,   148,     0,    12,    13,    14,    15,    16,
+       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,    31,    32,    33,    34,    35,
-      36,     0,     0,     0,    40,   238,     0,    42,    43,    44,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
        0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,     0,   135,    59,   136,   137,
-     138,   139,   140,     0,     0,   141,   142,     0,     0,     0,
+      54,     0,    55,    56,    57,    58,   138,    59,   139,   140,
+     141,   142,   143,     0,     0,   144,   145,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     130,     2,     3,     4,   143,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,   145,   146,   147,   148,     0,
+     133,     2,     3,     4,   146,     6,     7,     8,     9,    10,
+      11,     0,     0,     0,   197,   148,   149,   150,   151,     0,
        0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,    58,     0,    59,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   130,     2,     3,     4,     0,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   226,    12,    13,    14,
+      56,    57,    58,   138,    59,   139,   140,   141,   142,   143,
+       0,     0,   144,   145,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     2,     3,     4,     0,
+       0,   146,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,   148,   149,   150,   151,     0,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
-      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,    58,     0,    59,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     130,     2,     3,     4,     0,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   264,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,    58,     0,    59,     0,     0,     0,     0,     0,
-       0,     0,   110,     0,     0,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   337,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
       43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,    58,     0,    59,
-       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,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,    58,     0,    59,   130,     2,     3,     4,     0,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+      52,    53,    54,     0,    55,    56,    57,     0,   105,    59,
+       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,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      25,    26,     0,     0,     0,     0,   106,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
       43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,    58,     0,    59,
-       2,     3,     4,     0,     0,     0,     8,     9,    10,    11,
+      52,    53,    54,     0,    55,    56,    57,     0,   138,    59,
+     139,   140,   141,   142,   143,     0,     0,   144,   145,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   146,     0,     0,   147,
+       8,     9,    10,    11,     0,     0,     0,   148,   149,   150,
+     151,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
+       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     0,    55,    56,    57,     0,   138,    59,   139,   140,
+     141,   142,   143,     0,     0,   144,   145,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   146,     0,     0,   221,     8,     9,
+      10,    11,     0,     0,     0,   148,   149,   150,   151,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
+       0,     0,     0,    31,    32,    33,    34,    35,    36,     0,
+       0,     0,    40,    41,     0,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,     0,   138,    59,   139,   140,   141,   142,
+     143,     0,     0,   144,   145,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   146,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,   277,   148,   149,   150,   151,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    40,    41,     0,
+      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,     0,    55,    56,    57,     0,   138,
+      59,   139,   140,   141,   142,   143,     0,     0,   144,   145,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   146,     0,     0,
+     302,     8,     9,    10,    11,     0,     0,     0,   148,   149,
+     150,   151,     0,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
+      35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
+      44,     0,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,     0,    55,    56,    57,     0,   138,    59,   139,
+     140,   141,   142,   143,     0,     0,   144,   145,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   146,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,   148,   149,   150,   151,
        0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
        0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
-      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
+      40,   241,     0,    42,    43,    44,     0,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
-      57,     0,     0,    59,     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,    31,
-      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
-       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,     0,    55,    56,    57,     0,
-     313,    59,     8,     9,    10,    11,   314,     0,     0,     0,
+      57,     0,   138,    59,   139,   140,   141,   142,   143,     0,
+       0,   144,   145,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   133,     2,     3,     4,
+     146,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+       0,   148,   149,   150,   151,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
+      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,     0,    55,    56,    57,    58,     0,
+      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   133,     2,     3,     4,     0,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   229,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,     0,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,    58,     0,    59,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   133,     2,     3,     4,
+       0,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   267,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
+      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,     0,    55,    56,    57,    58,     0,
+      59,     0,     0,     0,     0,     0,     0,     0,   112,     0,
+       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   340,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,     0,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,    58,     0,    59,     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,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
+      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,     0,    55,    56,    57,    58,     0,
+      59,   133,     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,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,     0,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,    58,     0,    59,     2,     3,     4,     0,
+       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,     0,    31,    32,    33,
       34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
       43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,     0,     0,    59
+      52,    53,    54,     0,    55,    56,    57,     0,     0,    59,
+       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,    31,    32,    33,    34,    35,
+      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
+       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     0,    55,    56,    57,     0,   316,    59,     8,     9,
+      10,    11,   317,     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,    31,    32,    33,    34,    35,    36,     0,
+       0,     0,    40,    41,     0,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,     0,     0,    59
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    69,   105,     0,   128,   143,    89,   217,   206,     0,
-     133,   114,   340,   114,   127,    76,    44,   106,   109,     9,
-      92,   346,    87,    88,   113,   104,   104,   106,     9,    97,
-     133,   106,    76,   157,   113,   105,   127,   105,   368,   114,
-     111,   111,   367,   114,    40,    41,   114,     9,    76,   187,
-      40,    41,    42,   114,   177,   127,   124,   122,   123,    40,
-      41,    42,   390,   131,   108,   133,    68,   397,   396,    69,
-     105,    73,    72,   176,   177,   176,   189,    77,    40,    41,
-      77,    43,    82,   114,   105,   105,    77,   111,   105,    51,
-     111,   111,   302,   217,   111,   233,   111,    97,   189,   114,
-     105,    85,    86,   216,   105,   105,   111,   106,   176,   177,
-     111,    83,    84,   237,   114,   105,   111,   111,   118,   114,
-     114,    76,   106,   261,   124,   216,   110,   249,   250,   251,
-     252,   131,   111,   133,   272,   114,    89,    90,   276,   114,
-     263,   351,   111,   112,   354,     4,     5,     6,    76,   347,
-      40,    41,    42,   119,   120,   121,   116,   108,   118,   108,
-     263,    79,    80,   245,   246,   253,   254,   377,    76,   293,
-     294,   113,   109,   247,   248,   108,   176,   177,   302,    76,
-      44,    76,   104,   126,   105,   298,   125,   104,   124,   399,
-     127,    91,   305,   107,    93,   263,   106,   104,   114,   114,
-     104,   114,   104,   112,   141,   142,   206,   298,   346,   112,
-     104,   109,   104,   106,   305,    56,   107,   113,   105,   108,
-     104,   107,   104,   160,   107,   113,   107,   351,   113,   367,
-     354,   111,   107,    76,   113,   105,   109,   361,   107,   105,
-     114,    17,   113,   346,   382,   358,   108,   114,   234,   114,
-     256,   255,   189,   377,   257,    91,   339,   395,    98,     5,
-     258,   124,   388,   263,   367,   222,   259,   358,   260,   124,
-     306,   396,   341,   281,   180,   399,    77,   341,    -1,   216,
-     367,   281,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   113,    -1,    -1,   372,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     340,   341,    -1,    -1,    -1,    -1,   346,   347,    -1,    -1,
+       0,    69,   146,   209,   131,    91,   107,   111,     1,     1,
+       9,   130,   220,   136,     0,   343,   117,     0,    76,     9,
+     117,   106,   104,    92,   349,   104,   130,   106,    76,   114,
+     106,    99,   105,   160,   113,   136,   114,   113,   371,   107,
+     111,    40,    41,    42,    76,   370,   190,    83,    84,   117,
+      40,    41,   111,    43,    44,   114,   114,   180,   127,   127,
+     108,    51,    52,    53,   105,   393,   134,   400,   136,    69,
+     111,   399,    72,   192,   116,    68,   118,    77,   179,   180,
+      73,   105,   179,   106,    84,    76,    76,   111,   192,    82,
+     105,    77,   236,   220,    77,   105,   111,   305,    76,    99,
+     219,   111,    87,    88,    85,    86,   105,   107,   105,    40,
+      41,   179,   180,   240,   111,   219,     9,   117,   105,   108,
+     264,   121,     9,   111,   111,   106,   114,   127,   108,   110,
+       9,   275,    89,    90,   134,   279,   136,   122,   123,   111,
+     133,   133,   114,   266,   350,   108,   354,    40,    41,   357,
+      43,    44,   111,    40,    41,   114,    43,   113,    51,    52,
+      53,    40,    41,    42,    51,   266,    79,    80,   111,   296,
+     297,   114,   380,     4,     5,     6,   114,   111,   305,   179,
+     180,    76,   301,   111,   112,   252,   253,   254,   255,   308,
+      40,    41,    42,    76,   402,   104,   130,   301,   266,   119,
+     120,   121,   248,   249,   308,   349,   250,   251,   105,   209,
+     144,   145,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   256,   257,   104,   126,   370,   354,   124,   163,
+     357,   113,    91,   125,   107,    93,   114,   364,   114,   104,
+     104,   385,   361,   114,   104,   112,   109,   104,   349,   104,
+     106,   113,   106,   380,   398,   107,   342,   361,   192,   105,
+     108,   112,   107,   107,   113,   104,   266,    56,   104,   370,
+     113,   111,   107,   107,    76,   402,   113,   105,   107,   109,
+     105,   114,    17,   237,   284,   219,   108,   113,   258,   260,
+     114,   114,   259,   261,   263,   127,   262,    93,     5,   100,
+     127,   225,   183,   309,   344,   399,   344,   375,   391,   284,
+     370,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+      77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   343,   344,    -1,    -1,    -1,    -1,   349,
+     350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   301,    -1,    -1,
+     370,    -1,    -1,    -1,   308,   375,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   298,    -1,    -1,    -1,    -1,    -1,   367,   305,    -1,
-      -1,    -1,   372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   393,    -1,    -1,    -1,    -1,    -1,   399,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     390,    -1,    -1,    -1,    -1,    -1,   396,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,   358,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,
-      -1,    -1,   108,   109,    -1,    -1,    -1,    -1,   114,   115,
-     116,   117,   118,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,   361,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
@@ -1422,7 +1415,7 @@ static const yytype_int16 yycheck[] =
       74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
       -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     104,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,
+     104,    -1,    -1,    -1,   108,   109,    -1,    -1,    -1,    -1,
      114,   115,   116,   117,   118,     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,
@@ -1445,161 +1438,173 @@ static const yytype_int16 yycheck[] =
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   104,    -1,    -1,    -1,   108,    -1,    -1,    -1,
       -1,    -1,   114,   115,   116,   117,   118,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+       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,    -1,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
+      56,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
       86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,   104,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,   114,   115,
-     116,   117,   118,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-      59,    -1,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       4,     5,     6,    -1,    -1,   104,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    -1,   115,   116,   117,   118,
-      -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,
-      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    -1,    76,    77,    -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,
-     114,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     104,    -1,    -1,   107,    10,    11,    12,    13,    -1,    -1,
-      -1,   115,   116,   117,   118,    -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,    54,    55,
-      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,
-      -1,   107,    10,    11,    12,    13,    -1,    -1,    -1,   115,
-     116,   117,   118,    -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,    54,    55,    -1,    57,
-      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   104,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
-     118,    -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,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   104,    -1,    -1,   107,    10,    11,    12,    13,    -1,
-      -1,    -1,   115,   116,   117,   118,    -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,    54,
-      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,   115,
+     116,   117,   118,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-     115,   116,   117,   118,    -1,    25,    26,    27,    28,    29,
+      -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,    54,    55,    -1,    57,    58,    59,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
       -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    -1,    76,    77,    78,    79,
+      70,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        3,     4,     5,     6,   104,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,   115,   116,   117,   118,    -1,
+      13,    -1,    -1,    -1,   114,   115,   116,   117,   118,    -1,
       -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    75,    -1,    77,    -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,   109,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
-      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    75,    -1,    77,
-      -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,   109,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    75,    -1,    77,    -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,   109,    25,    26,    27,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,    -1,
+      -1,   104,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,   115,   116,   117,   118,    -1,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
       58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    75,    -1,    77,
-       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,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    75,    -1,    77,     3,     4,     5,     6,    -1,
-       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      68,    69,    70,    -1,    72,    73,    74,    -1,    76,    77,
+      -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,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      38,    39,    -1,    -1,    -1,    -1,   114,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
       58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    75,    -1,    77,
-       4,     5,     6,    -1,    -1,    -1,    10,    11,    12,    13,
+      68,    69,    70,    -1,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,   107,
+      10,    11,    12,    13,    -1,    -1,    -1,   115,   116,   117,
+     118,    -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,    54,    55,    -1,    57,    58,    59,
+      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    72,    73,    74,    -1,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,    -1,    -1,   107,    10,    11,
+      12,    13,    -1,    -1,    -1,   115,   116,   117,   118,    -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,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   104,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,   114,   115,   116,   117,   118,    -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,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,
+     107,    10,    11,    12,    13,    -1,    -1,    -1,   115,   116,
+     117,   118,    -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,    54,    55,    -1,    57,    58,
+      59,    -1,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    72,    73,    74,    -1,    76,    77,    78,
+      79,    80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   104,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,   115,   116,   117,   118,
       -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,
       54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    -1,    -1,    77,    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,    54,    55,
-      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    72,    73,    74,    -1,
-      76,    77,    10,    11,    12,    13,    82,    -1,    -1,    -1,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+     104,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,   115,   116,   117,   118,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    75,    -1,
+      77,    -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,   109,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    75,    -1,    77,    -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,   109,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    75,    -1,
+      77,    -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,   109,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    75,    -1,    77,     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,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    75,    -1,
+      77,     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,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    75,    -1,    77,     4,     5,     6,    -1,
+      -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,    -1,    45,    46,    47,
       48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
       58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    -1,    -1,    77
+      68,    69,    70,    -1,    72,    73,    74,    -1,    -1,    77,
+      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,    54,    55,    -1,    57,    58,    59,
+      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    72,    73,    74,    -1,    76,    77,    10,    11,
+      12,    13,    82,    -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,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    -1,    -1,    77
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1614,39 +1619,40 @@ static const yytype_uint8 yystos[] =
       66,    67,    68,    69,    70,    72,    73,    74,    75,    77,
      159,   160,   161,   162,   163,   168,   169,   170,   171,   173,
      174,   175,   176,   177,   180,   181,   182,   217,   218,   219,
-      44,    76,   176,    40,    41,    76,   108,   104,   114,   220,
-     105,   111,     9,    40,    41,    42,   165,   166,   172,   111,
-     114,    76,   174,    76,   114,   158,   175,   180,   174,   106,
-       0,   218,   180,   108,   184,    76,   178,   179,   108,   200,
-     165,   164,   167,   175,   166,    76,   104,   106,   113,   108,
-       3,   173,   175,   185,   186,    76,    78,    79,    80,    81,
-      82,    85,    86,   104,   107,   115,   116,   117,   118,   129,
-     130,   131,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   157,   180,   114,   183,   185,   113,   105,
-     111,    14,    15,    16,    18,    19,    20,    21,    22,    23,
-      24,    56,   108,   109,   114,   140,   153,   154,   156,   159,
-     160,   180,   190,   191,   192,   193,   201,   202,   203,   205,
-     207,   209,   216,    76,   164,   167,   106,   113,   107,   157,
-     154,   189,   175,    76,   187,   188,   109,   186,   140,   140,
-     156,    85,    86,   106,   110,   105,   105,   111,    55,   154,
-     104,   140,   119,   120,   121,   116,   118,    83,    84,    87,
-      88,   122,   123,    89,    90,   126,   125,   124,    91,    93,
-      92,   127,   107,   185,   109,    79,    80,   179,   114,   114,
-     211,   104,   104,   114,   114,   156,   104,   157,   112,   104,
-     109,   194,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   113,   155,   111,   114,   109,   191,   106,   107,
-     157,   189,   113,   107,   187,   106,   111,   114,    76,   114,
-     105,   132,   156,    76,    82,   135,   154,   140,   140,   140,
-     142,   142,   143,   143,   144,   144,   144,   144,   145,   145,
-     146,   147,   148,   149,   150,   151,   156,   109,   197,   198,
-     199,   212,   156,   114,   156,   112,   210,   201,   154,   154,
-     157,   113,   107,   189,   113,   114,   157,   188,   106,   114,
-     107,   112,    56,   200,   192,   190,   202,   213,   105,   105,
-     156,   170,   173,   208,   195,   107,   189,   113,   189,   107,
-     157,   154,   104,   208,   214,   215,   197,   204,   206,    76,
-     105,   109,   189,   107,   156,   114,   105,    17,   193,   113,
-     192,   196,   200,   114,   105,   156,   196,   197,   189,   114
+      44,    76,   171,   174,   176,    40,    41,    76,   108,   104,
+     114,   220,   105,   111,     9,    40,    41,    42,   165,   166,
+     172,   111,   114,    76,   174,    76,   114,   158,   175,   180,
+     174,   106,     0,   218,   174,   180,   108,   184,    76,   178,
+     179,   108,   200,   165,   164,   167,   175,   166,    76,   104,
+     106,   113,   108,     3,   173,   175,   185,   186,    76,    78,
+      79,    80,    81,    82,    85,    86,   104,   107,   115,   116,
+     117,   118,   129,   130,   131,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   157,   180,   114,   183,
+     185,   113,   105,   111,    14,    15,    16,    18,    19,    20,
+      21,    22,    23,    24,    56,   108,   109,   114,   140,   153,
+     154,   156,   159,   160,   180,   190,   191,   192,   193,   201,
+     202,   203,   205,   207,   209,   216,    76,   164,   167,   106,
+     113,   107,   157,   154,   189,   175,    76,   187,   188,   109,
+     186,   140,   140,   156,    85,    86,   106,   110,   105,   105,
+     111,    55,   154,   104,   140,   119,   120,   121,   116,   118,
+      83,    84,    87,    88,   122,   123,    89,    90,   126,   125,
+     124,    91,    93,    92,   127,   107,   185,   109,    79,    80,
+     179,   114,   114,   211,   104,   104,   114,   114,   156,   104,
+     157,   112,   104,   109,   194,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   113,   155,   111,   114,   109,
+     191,   106,   107,   157,   189,   113,   107,   187,   106,   111,
+     114,    76,   114,   105,   132,   156,    76,    82,   135,   154,
+     140,   140,   140,   142,   142,   143,   143,   144,   144,   144,
+     144,   145,   145,   146,   147,   148,   149,   150,   151,   156,
+     109,   197,   198,   199,   212,   156,   114,   156,   112,   210,
+     201,   154,   154,   157,   113,   107,   189,   113,   114,   157,
+     188,   106,   114,   107,   112,    56,   200,   192,   190,   202,
+     213,   105,   105,   156,   170,   173,   208,   195,   107,   189,
+     113,   189,   107,   157,   154,   104,   208,   214,   215,   197,
+     204,   206,    76,   105,   109,   189,   107,   156,   114,   105,
+      17,   193,   113,   192,   196,   200,   114,   105,   156,   196,
+     197,   189,   114
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -3673,19 +3679,37 @@ yyreduce:
   case 136:
 
     {
-        (yyval.interm.type).qualifier = EvqConstExpr;
+        context->es3InvariantErrorCheck((yyvsp[(2) - (2)].interm.type).qualifier, (yylsp[(1) - (2)]));
+        (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(2) - (2)].interm.type).qualifier, (yylsp[(2) - (2)]));
+        (yyval.interm.type).invariant = true;
     }
     break;
 
   case 137:
 
     {
+        context->es3InvariantErrorCheck((yyvsp[(3) - (3)].interm.type).qualifier, (yylsp[(1) - (3)]));
+        (yyval.interm.type) = context->joinInterpolationQualifiers((yylsp[(2) - (3)]), (yyvsp[(2) - (3)].interm.type).qualifier, (yylsp[(3) - (3)]), (yyvsp[(3) - (3)].interm.type).qualifier);
+        (yyval.interm.type).invariant = true;
+    }
+    break;
+
+  case 138:
+
+    {
+        (yyval.interm.type).qualifier = EvqConstExpr;
+    }
+    break;
+
+  case 139:
+
+    {
         ES3_ONLY("in", (yylsp[(1) - (1)]), "storage qualifier");
         (yyval.interm.type).qualifier = (context->getShaderType() == GL_FRAGMENT_SHADER) ? EvqFragmentIn : EvqVertexIn;
     }
     break;
 
-  case 138:
+  case 140:
 
     {
         ES3_ONLY("out", (yylsp[(1) - (1)]), "storage qualifier");
@@ -3693,7 +3717,7 @@ yyreduce:
     }
     break;
 
-  case 139:
+  case 141:
 
     {
         ES3_ONLY("centroid in", (yylsp[(1) - (2)]), "storage qualifier");
@@ -3706,7 +3730,7 @@ yyreduce:
     }
     break;
 
-  case 140:
+  case 142:
 
     {
         ES3_ONLY("centroid out", (yylsp[(1) - (2)]), "storage qualifier");
@@ -3719,7 +3743,7 @@ yyreduce:
     }
     break;
 
-  case 141:
+  case 143:
 
     {
         if (context->globalErrorCheck((yylsp[(1) - (1)]), context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3728,7 +3752,7 @@ yyreduce:
     }
     break;
 
-  case 142:
+  case 144:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3742,7 +3766,7 @@ yyreduce:
     }
     break;
 
-  case 143:
+  case 145:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3750,28 +3774,28 @@ yyreduce:
     }
     break;
 
-  case 144:
+  case 146:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 145:
+  case 147:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 146:
+  case 148:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 147:
+  case 149:
 
     {
         ES3_ONLY("layout", (yylsp[(1) - (4)]), "qualifier");
@@ -3779,49 +3803,49 @@ yyreduce:
     }
     break;
 
-  case 148:
+  case 150:
 
     {
         (yyval.interm.layoutQualifier) = (yyvsp[(1) - (1)].interm.layoutQualifier);
     }
     break;
 
-  case 149:
+  case 151:
 
     {
         (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[(1) - (3)].interm.layoutQualifier), (yyvsp[(3) - (3)].interm.layoutQualifier));
     }
     break;
 
-  case 150:
+  case 152:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (1)].lex).string, (yylsp[(1) - (1)]));
     }
     break;
 
-  case 151:
+  case 153:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yylsp[(1) - (3)]), *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yylsp[(3) - (3)]));
     }
     break;
 
-  case 152:
+  case 154:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yylsp[(1) - (3)]), *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yylsp[(3) - (3)]));
     }
     break;
 
-  case 153:
+  case 155:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 154:
+  case 156:
 
     {
         ES3_ONLY("[]", (yylsp[(2) - (3)]), "implicitly sized array");
@@ -3830,7 +3854,7 @@ yyreduce:
     }
     break;
 
-  case 155:
+  case 157:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -3846,7 +3870,7 @@ yyreduce:
     }
     break;
 
-  case 156:
+  case 158:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3854,7 +3878,7 @@ yyreduce:
     }
     break;
 
-  case 157:
+  case 159:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3862,7 +3886,7 @@ yyreduce:
     }
     break;
 
-  case 158:
+  case 160:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3870,7 +3894,7 @@ yyreduce:
     }
     break;
 
-  case 159:
+  case 161:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3878,7 +3902,7 @@ yyreduce:
     }
     break;
 
-  case 160:
+  case 162:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3886,7 +3910,7 @@ yyreduce:
     }
     break;
 
-  case 161:
+  case 163:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3895,7 +3919,7 @@ yyreduce:
     }
     break;
 
-  case 162:
+  case 164:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3904,7 +3928,7 @@ yyreduce:
     }
     break;
 
-  case 163:
+  case 165:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3913,7 +3937,7 @@ yyreduce:
     }
     break;
 
-  case 164:
+  case 166:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3922,7 +3946,7 @@ yyreduce:
     }
     break;
 
-  case 165:
+  case 167:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3931,7 +3955,7 @@ yyreduce:
     }
     break;
 
-  case 166:
+  case 168:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3940,7 +3964,7 @@ yyreduce:
     }
     break;
 
-  case 167:
+  case 169:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3949,7 +3973,7 @@ yyreduce:
     }
     break;
 
-  case 168:
+  case 170:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3958,7 +3982,7 @@ yyreduce:
     }
     break;
 
-  case 169:
+  case 171:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3967,7 +3991,7 @@ yyreduce:
     }
     break;
 
-  case 170:
+  case 172:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3976,7 +4000,7 @@ yyreduce:
     }
     break;
 
-  case 171:
+  case 173:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3985,7 +4009,7 @@ yyreduce:
     }
     break;
 
-  case 172:
+  case 174:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3994,7 +4018,7 @@ yyreduce:
     }
     break;
 
-  case 173:
+  case 175:
 
     {
         FRAG_VERT_ONLY("mat2", (yylsp[(1) - (1)]));
@@ -4004,7 +4028,7 @@ yyreduce:
     }
     break;
 
-  case 174:
+  case 176:
 
     {
         FRAG_VERT_ONLY("mat3", (yylsp[(1) - (1)]));
@@ -4014,7 +4038,7 @@ yyreduce:
     }
     break;
 
-  case 175:
+  case 177:
 
     {
         FRAG_VERT_ONLY("mat4", (yylsp[(1) - (1)]));
@@ -4024,7 +4048,7 @@ yyreduce:
     }
     break;
 
-  case 176:
+  case 178:
 
     {
         FRAG_VERT_ONLY("mat2x3", (yylsp[(1) - (1)]));
@@ -4034,7 +4058,7 @@ yyreduce:
     }
     break;
 
-  case 177:
+  case 179:
 
     {
         FRAG_VERT_ONLY("mat3x2", (yylsp[(1) - (1)]));
@@ -4044,7 +4068,7 @@ yyreduce:
     }
     break;
 
-  case 178:
+  case 180:
 
     {
         FRAG_VERT_ONLY("mat2x4", (yylsp[(1) - (1)]));
@@ -4054,7 +4078,7 @@ yyreduce:
     }
     break;
 
-  case 179:
+  case 181:
 
     {
         FRAG_VERT_ONLY("mat4x2", (yylsp[(1) - (1)]));
@@ -4064,7 +4088,7 @@ yyreduce:
     }
     break;
 
-  case 180:
+  case 182:
 
     {
         FRAG_VERT_ONLY("mat3x4", (yylsp[(1) - (1)]));
@@ -4074,7 +4098,7 @@ yyreduce:
     }
     break;
 
-  case 181:
+  case 183:
 
     {
         FRAG_VERT_ONLY("mat4x3", (yylsp[(1) - (1)]));
@@ -4084,7 +4108,7 @@ yyreduce:
     }
     break;
 
-  case 182:
+  case 184:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yylsp[(1) - (1)]));
@@ -4093,7 +4117,7 @@ yyreduce:
     }
     break;
 
-  case 183:
+  case 185:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yylsp[(1) - (1)]));
@@ -4102,7 +4126,7 @@ yyreduce:
     }
     break;
 
-  case 184:
+  case 186:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4115,7 +4139,7 @@ yyreduce:
     }
     break;
 
-  case 185:
+  case 187:
 
     {
         FRAG_VERT_ONLY("sampler3D", (yylsp[(1) - (1)]));
@@ -4124,7 +4148,7 @@ yyreduce:
     }
     break;
 
-  case 186:
+  case 188:
 
     {
         FRAG_VERT_ONLY("sampler2DArray", (yylsp[(1) - (1)]));
@@ -4133,7 +4157,7 @@ yyreduce:
     }
     break;
 
-  case 187:
+  case 189:
 
     {
         FRAG_VERT_ONLY("isampler2D", (yylsp[(1) - (1)]));
@@ -4142,7 +4166,7 @@ yyreduce:
     }
     break;
 
-  case 188:
+  case 190:
 
     {
         FRAG_VERT_ONLY("isampler3D", (yylsp[(1) - (1)]));
@@ -4151,7 +4175,7 @@ yyreduce:
     }
     break;
 
-  case 189:
+  case 191:
 
     {
         FRAG_VERT_ONLY("isamplerCube", (yylsp[(1) - (1)]));
@@ -4160,7 +4184,7 @@ yyreduce:
     }
     break;
 
-  case 190:
+  case 192:
 
     {
         FRAG_VERT_ONLY("isampler2DArray", (yylsp[(1) - (1)]));
@@ -4169,7 +4193,7 @@ yyreduce:
     }
     break;
 
-  case 191:
+  case 193:
 
     {
         FRAG_VERT_ONLY("usampler2D", (yylsp[(1) - (1)]));
@@ -4178,7 +4202,7 @@ yyreduce:
     }
     break;
 
-  case 192:
+  case 194:
 
     {
         FRAG_VERT_ONLY("usampler3D", (yylsp[(1) - (1)]));
@@ -4187,7 +4211,7 @@ yyreduce:
     }
     break;
 
-  case 193:
+  case 195:
 
     {
         FRAG_VERT_ONLY("usamplerCube", (yylsp[(1) - (1)]));
@@ -4196,7 +4220,7 @@ yyreduce:
     }
     break;
 
-  case 194:
+  case 196:
 
     {
         FRAG_VERT_ONLY("usampler2DArray", (yylsp[(1) - (1)]));
@@ -4205,7 +4229,7 @@ yyreduce:
     }
     break;
 
-  case 195:
+  case 197:
 
     {
         FRAG_VERT_ONLY("sampler2DShadow", (yylsp[(1) - (1)]));
@@ -4214,7 +4238,7 @@ yyreduce:
     }
     break;
 
-  case 196:
+  case 198:
 
     {
         FRAG_VERT_ONLY("samplerCubeShadow", (yylsp[(1) - (1)]));
@@ -4223,7 +4247,7 @@ yyreduce:
     }
     break;
 
-  case 197:
+  case 199:
 
     {
         FRAG_VERT_ONLY("sampler2DArrayShadow", (yylsp[(1) - (1)]));
@@ -4232,7 +4256,7 @@ yyreduce:
     }
     break;
 
-  case 198:
+  case 200:
 
     {
         FRAG_VERT_ONLY("struct", (yylsp[(1) - (1)]));
@@ -4241,7 +4265,7 @@ yyreduce:
     }
     break;
 
-  case 199:
+  case 201:
 
     {
         //
@@ -4255,38 +4279,38 @@ yyreduce:
     }
     break;
 
-  case 200:
+  case 202:
 
     { if (context->enterStructDeclaration((yylsp[(2) - (3)]), *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 201:
+  case 203:
 
     {
         (yyval.interm.type) = context->addStructure((yylsp[(1) - (6)]), (yylsp[(2) - (6)]), (yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.fieldList));
     }
     break;
 
-  case 202:
+  case 204:
 
     { if (context->enterStructDeclaration((yylsp[(2) - (2)]), *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 203:
+  case 205:
 
     {
         (yyval.interm.type) = context->addStructure((yylsp[(1) - (5)]), (yylsp[(1) - (5)]), NewPoolTString(""), (yyvsp[(4) - (5)].interm.fieldList));
     }
     break;
 
-  case 204:
+  case 206:
 
     {
         (yyval.interm.fieldList) = (yyvsp[(1) - (1)].interm.fieldList);
     }
     break;
 
-  case 205:
+  case 207:
 
     {
         (yyval.interm.fieldList) = (yyvsp[(1) - (2)].interm.fieldList);
@@ -4303,14 +4327,14 @@ yyreduce:
     }
     break;
 
-  case 206:
+  case 208:
 
     {
         (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[(1) - (3)].interm.type), (yyvsp[(2) - (3)].interm.fieldList));
     }
     break;
 
-  case 207:
+  case 209:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4320,7 +4344,7 @@ yyreduce:
     }
     break;
 
-  case 208:
+  case 210:
 
     {
         (yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4328,14 +4352,14 @@ yyreduce:
     }
     break;
 
-  case 209:
+  case 211:
 
     {
         (yyval.interm.fieldList)->push_back((yyvsp[(3) - (3)].interm.field));
     }
     break;
 
-  case 210:
+  case 212:
 
     {
         if (context->reservedErrorCheck((yylsp[(1) - (1)]), *(yyvsp[(1) - (1)].lex).string))
@@ -4346,7 +4370,7 @@ yyreduce:
     }
     break;
 
-  case 211:
+  case 213:
 
     {
         if (context->reservedErrorCheck((yylsp[(1) - (4)]), *(yyvsp[(1) - (4)].lex).string))
@@ -4362,77 +4386,77 @@ yyreduce:
     }
     break;
 
-  case 212:
+  case 214:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 213:
+  case 215:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 214:
+  case 216:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
-  case 215:
+  case 217:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 216:
+  case 218:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 217:
+  case 219:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 218:
+  case 220:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 219:
+  case 221:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermSwitch); }
     break;
 
-  case 220:
+  case 222:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermCase); }
     break;
 
-  case 221:
+  case 223:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 222:
+  case 224:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 223:
+  case 225:
 
     { (yyval.interm.intermAggregate) = 0; }
     break;
 
-  case 224:
+  case 226:
 
     { context->symbolTable.push(); }
     break;
 
-  case 225:
+  case 227:
 
     { context->symbolTable.pop(); }
     break;
 
-  case 226:
+  case 228:
 
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
@@ -4443,44 +4467,44 @@ yyreduce:
     }
     break;
 
-  case 227:
+  case 229:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 228:
+  case 230:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 229:
+  case 231:
 
     { context->symbolTable.push(); }
     break;
 
-  case 230:
+  case 232:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 231:
+  case 233:
 
     { context->symbolTable.push(); }
     break;
 
-  case 232:
+  case 234:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 233:
+  case 235:
 
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 234:
+  case 236:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4491,31 +4515,31 @@ yyreduce:
     }
     break;
 
-  case 235:
+  case 237:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), (yyloc));
     }
     break;
 
-  case 236:
+  case 238:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), (yyloc));
     }
     break;
 
-  case 237:
+  case 239:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 238:
+  case 240:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 239:
+  case 241:
 
     {
         if (context->boolErrorCheck((yylsp[(1) - (5)]), (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4524,7 +4548,7 @@ yyreduce:
     }
     break;
 
-  case 240:
+  case 242:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4532,7 +4556,7 @@ yyreduce:
     }
     break;
 
-  case 241:
+  case 243:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4540,12 +4564,12 @@ yyreduce:
     }
     break;
 
-  case 242:
+  case 244:
 
     { context->incrSwitchNestingLevel(); }
     break;
 
-  case 243:
+  case 245:
 
     {
         (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[(3) - (6)].interm.intermTypedNode), (yyvsp[(6) - (6)].interm.intermAggregate), (yylsp[(1) - (6)]));
@@ -4553,21 +4577,21 @@ yyreduce:
     }
     break;
 
-  case 244:
+  case 246:
 
     {
         (yyval.interm.intermCase) = context->addCase((yyvsp[(2) - (3)].interm.intermTypedNode), (yylsp[(1) - (3)]));
     }
     break;
 
-  case 245:
+  case 247:
 
     {
         (yyval.interm.intermCase) = context->addDefault((yylsp[(1) - (2)]));
     }
     break;
 
-  case 246:
+  case 248:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4576,7 +4600,7 @@ yyreduce:
     }
     break;
 
-  case 247:
+  case 249:
 
     {
         TIntermNode* intermNode;
@@ -4594,12 +4618,12 @@ yyreduce:
     }
     break;
 
-  case 248:
+  case 250:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
     break;
 
-  case 249:
+  case 251:
 
     {
         context->symbolTable.pop();
@@ -4608,12 +4632,12 @@ yyreduce:
     }
     break;
 
-  case 250:
+  case 252:
 
     { context->incrLoopNestingLevel(); }
     break;
 
-  case 251:
+  case 253:
 
     {
         if (context->boolErrorCheck((yylsp[(8) - (8)]), (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4624,12 +4648,12 @@ yyreduce:
     }
     break;
 
-  case 252:
+  case 254:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
     break;
 
-  case 253:
+  case 255:
 
     {
         context->symbolTable.pop();
@@ -4638,35 +4662,35 @@ yyreduce:
     }
     break;
 
-  case 254:
+  case 256:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 255:
+  case 257:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 256:
+  case 258:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 257:
+  case 259:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 258:
+  case 260:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4674,7 +4698,7 @@ yyreduce:
     }
     break;
 
-  case 259:
+  case 261:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4682,35 +4706,35 @@ yyreduce:
     }
     break;
 
-  case 260:
+  case 262:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[(1) - (2)]));
     }
     break;
 
-  case 261:
+  case 263:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[(1) - (2)]));
     }
     break;
 
-  case 262:
+  case 264:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[(1) - (2)]));
     }
     break;
 
-  case 263:
+  case 265:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yylsp[(1) - (3)]));
     }
     break;
 
-  case 264:
+  case 266:
 
     {
         FRAG_ONLY("discard", (yylsp[(1) - (2)]));
@@ -4718,7 +4742,7 @@ yyreduce:
     }
     break;
 
-  case 265:
+  case 267:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4726,7 +4750,7 @@ yyreduce:
     }
     break;
 
-  case 266:
+  case 268:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), (yyloc));
@@ -4734,21 +4758,21 @@ yyreduce:
     }
     break;
 
-  case 267:
+  case 269:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 268:
+  case 270:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 269:
+  case 271:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4837,7 +4861,7 @@ yyreduce:
     }
     break;
 
-  case 270:
+  case 272:
 
     {
         //?? Check that all paths return a value if return type != void ?