]> andersk Git - splint.git/commitdiff
Added files
authordrl7x <drl7x>
Fri, 2 Mar 2001 03:45:13 +0000 (03:45 +0000)
committerdrl7x <drl7x>
Fri, 2 Mar 2001 03:45:13 +0000 (03:45 +0000)
16 files changed:
src/Headers/herald.h
src/Headers/herald.last
src/cgrammar.c
src/cgrammar.tab.c
src/clabstract.c
src/constraint.c
src/constraintGeneration.c
src/constraintList.c
src/constraintResolve.c
src/exprChecks.c
src/exprDataQuite.i [new file with mode: 0644]
src/exprNode.c
src/llgrammar.c
src/llgrammar.tab.c
src/maketags [new file with mode: 0755]
src/sRef.c

index d7d5d20ba7f815cf239c9760b326830458d5d37f..207b2aa9b0c0ed67eb94951b5ba25a22277d2457 100644 (file)
@@ -4,4 +4,4 @@
 /*@constant observer char *LCL_PARSE_VERSION;@*/
 # define LCL_PARSE_VERSION "LCLint 2.5q"
 /*@constant observer char *LCL_COMPILE;@*/
-# define LCL_COMPILE "Compiled using /usr/local/bin/gcc -Wall -g on FreeBSD shankly.cs.virginia.edu 3.2-RELEASE FreeBSD 3.2-RELEASE #0: Tue May 18 04:05:08 GMT 1999 jkh@cathair:/usr/src/sys/compile/GENERIC i386 by drl7x"
+# define LCL_COMPILE "Compiled using /opt/GCC281/bin/gcc -DSTDC_HEADERS=1 -g -Wall on SunOS mamba.cs.Virginia.EDU 5.6 Generic_105181-09 sun4u sparc SUNW,Ultra-60 by drl7x"
index 117a593cdb963b6f421e4bc437074aa1ebd25be9..207b2aa9b0c0ed67eb94951b5ba25a22277d2457 100644 (file)
@@ -4,4 +4,4 @@
 /*@constant observer char *LCL_PARSE_VERSION;@*/
 # define LCL_PARSE_VERSION "LCLint 2.5q"
 /*@constant observer char *LCL_COMPILE;@*/
-# define LCL_COMPILE "Compiled using gcc -DSTDC_HEADERS=1 -g -Wall on FreeBSD shankly.cs.virginia.edu 3.2-RELEASE FreeBSD 3.2-RELEASE #0: Tue May 18 04:05:08 GMT 1999 jkh@cathair:/usr/src/sys/compile/GENERIC i386 by drl7x"
+# define LCL_COMPILE "Compiled using /opt/GCC281/bin/gcc -DSTDC_HEADERS=1 -g -Wall on SunOS mamba.cs.Virginia.EDU 5.6 Generic_105181-09 sun4u sparc SUNW,Ultra-60 by drl7x"
index 0ceb23a6a5c5540478d599ba4136c5ee5256dc3c..81d337af74bb762bbfe7e31a2d8df0efee879343 100644 (file)
@@ -2658,7 +2658,7 @@ static const short yycheck[] = {     0,
     -1,   185,    -1,    -1,    -1,   189
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/share/misc/bison.simple"
+#line 3 "/gnu/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -2851,7 +2851,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/share/misc/bison.simple"
+#line 196 "/gnu/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -5535,7 +5535,7 @@ case 667:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/share/misc/bison.simple"
+#line 498 "/gnu/share/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
index e6440e91ccd1bf5796bb1d11599860a25d416f2e..612f22cc233ee91ba1237eecaf8810aea24cd386 100644 (file)
@@ -272,6 +272,13 @@ typedef union
  /*@only@*/ exprNodeList alist;
  /*@only@*/ sRefSet srset; 
  /*@only@*/ cstringList cstringlist;
+  /*drl
+    added 1/19/2001
+  */
+  constraint con;
+  constraintList conL;
+  constraintExpr conE;
+  /* drl */
 } YYSTYPE;
 #ifndef YYDEBUG
 #define YYDEBUG 1
@@ -287,11 +294,11 @@ typedef union
 
 
 
-#define        YYFINAL         1214
+#define        YYFINAL         1229
 #define        YYFLAG          -32768
 #define        YYNTBASE        190
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 444 ? yytranslate[x] : 433)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 444 ? yytranslate[x] : 434)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -350,349 +357,354 @@ static const short yyprhs[] = {     0,
    159,   163,   166,   168,   169,   172,   173,   176,   179,   180,
    185,   186,   187,   192,   193,   196,   198,   203,   205,   207,
    209,   211,   213,   215,   220,   226,   228,   230,   232,   234,
-   236,   238,   239,   242,   243,   246,   248,   251,   253,   256,
-   258,   261,   263,   267,   270,   272,   274,   276,   278,   280,
-   282,   284,   285,   288,   289,   296,   297,   304,   306,   308,
-   309,   310,   316,   317,   323,   325,   327,   328,   330,   331,
-   332,   336,   337,   341,   343,   345,   347,   349,   351,   353,
-   355,   357,   359,   361,   363,   365,   367,   369,   371,   373,
-   375,   376,   384,   385,   394,   396,   400,   401,   405,   406,
-   410,   413,   417,   420,   423,   425,   427,   429,   433,   438,
-   441,   445,   449,   453,   455,   457,   459,   463,   465,   467,
-   471,   476,   479,   483,   487,   491,   493,   497,   499,   501,
-   503,   507,   509,   511,   513,   518,   522,   527,   534,   540,
-   546,   549,   552,   554,   558,   560,   563,   566,   569,   572,
-   575,   578,   581,   584,   586,   588,   592,   594,   604,   605,
-   609,   614,   617,   622,   625,   627,   632,   634,   638,   642,
-   646,   648,   652,   656,   658,   662,   666,   668,   672,   676,
-   680,   684,   686,   690,   694,   696,   700,   702,   706,   708,
-   712,   714,   715,   720,   722,   723,   728,   730,   731,   732,
-   740,   742,   746,   750,   754,   758,   762,   766,   770,   774,
-   778,   782,   786,   788,   792,   793,   795,   797,   799,   801,
-   803,   807,   808,   818,   819,   831,   834,   835,   842,   843,
-   851,   856,   861,   862,   863,   866,   868,   873,   874,   879,
-   881,   885,   890,   892,   896,   898,   900,   902,   904,   906,
-   909,   912,   915,   918,   921,   924,   927,   930,   933,   936,
-   939,   942,   945,   948,   951,   954,   957,   960,   963,   966,
-   969,   972,   975,   978,   981,   984,   987,   990,   993,   996,
-   999,  1002,  1005,  1008,  1011,  1014,  1017,  1020,  1023,  1026,
-  1029,  1032,  1035,  1038,  1041,  1044,  1046,  1048,  1050,  1052,
-  1055,  1058,  1061,  1064,  1067,  1070,  1073,  1076,  1079,  1082,
-  1085,  1088,  1091,  1094,  1098,  1100,  1105,  1107,  1111,  1114,
-  1117,  1120,  1121,  1123,  1124,  1125,  1137,  1138,  1139,  1151,
-  1158,  1165,  1166,  1167,  1178,  1179,  1180,  1191,  1197,  1203,
-  1208,  1213,  1214,  1216,  1218,  1221,  1227,  1231,  1234,  1239,
-  1241,  1245,  1250,  1257,  1258,  1267,  1272,  1274,  1278,  1281,
-  1283,  1288,  1290,  1292,  1295,  1298,  1300,  1303,  1305,  1308,
-  1310,  1312,  1314,  1317,  1319,  1322,  1325,  1329,  1331,  1335,
-  1337,  1341,  1343,  1345,  1349,  1350,  1353,  1354,  1359,  1364,
-  1366,  1368,  1371,  1373,  1375,  1378,  1379,  1381,  1387,  1390,
-  1394,  1398,  1403,  1407,  1412,  1417,  1423,  1425,  1427,  1429,
-  1431,  1433,  1435,  1437,  1439,  1441,  1443,  1448,  1453,  1458,
-  1461,  1463,  1465,  1467,  1470,  1473,  1481,  1488,  1491,  1492,
-  1493,  1504,  1505,  1512,  1514,  1516,  1518,  1520,  1523,  1525,
-  1527,  1529,  1531,  1533,  1535,  1537,  1541,  1543,  1546,  1549,
-  1552,  1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,
-  1572,  1576,  1578,  1580,  1583,  1586,  1587,  1592,  1593,  1599,
-  1600,  1604,  1605,  1610,  1614,  1617,  1621,  1622,  1623,  1624,
-  1625,  1626,  1628,  1631,  1634,  1638,  1641,  1645,  1649,  1654,
-  1657,  1660,  1664,  1668,  1673,  1675,  1678,  1680,  1683,  1685,
-  1688,  1690,  1693,  1695,  1698,  1700,  1705,  1708,  1709,  1715,
-  1716,  1723,  1728,  1733,  1734,  1735,  1746,  1748,  1749,  1754,
-  1756,  1758,  1760,  1762,  1764,  1768,  1770,  1775,  1779,  1784,
-  1791,  1797,  1803,  1806,  1809,  1811,  1814,  1817,  1820,  1823,
-  1826,  1829,  1832,  1835,  1837,  1839,  1844,  1846,  1850,  1854,
-  1858,  1860,  1864,  1868,  1870,  1874,  1878,  1880,  1884,  1888,
-  1892,  1896,  1898,  1902,  1906,  1908,  1912,  1914,  1918,  1920,
-  1924,  1926,  1930,  1932,  1936,  1938,  1939,  1940,  1948,  1950,
-  1954,  1958,  1962,  1966,  1970,  1974,  1978,  1982,  1986,  1990,
-  1994,  1996,  1997,  1999,  2002,  2010,  2013,  2016,  2024,  2031,
-  2034,  2038,  2041,  2045,  2048,  2052,  2056,  2060,  2064,  2067,
-  2071,  2072,  2074,  2076,  2078,  2080,  2082,  2084,  2086,  2088
+   238,   243,   246,   250,   254,   258,   260,   262,   264,   265,
+   268,   269,   272,   274,   277,   279,   282,   284,   287,   289,
+   293,   296,   298,   300,   302,   304,   306,   308,   310,   311,
+   314,   315,   322,   323,   330,   332,   334,   335,   336,   342,
+   343,   349,   351,   353,   354,   356,   357,   358,   362,   363,
+   367,   369,   371,   373,   375,   377,   379,   381,   383,   385,
+   387,   389,   391,   393,   395,   397,   399,   401,   402,   410,
+   411,   420,   422,   426,   427,   431,   432,   436,   439,   443,
+   446,   449,   451,   453,   455,   459,   464,   467,   471,   475,
+   479,   481,   483,   485,   489,   491,   493,   497,   502,   505,
+   509,   513,   517,   519,   523,   525,   527,   529,   533,   535,
+   537,   539,   544,   548,   553,   560,   566,   572,   575,   578,
+   580,   584,   586,   589,   592,   595,   598,   601,   604,   607,
+   610,   612,   614,   618,   620,   630,   631,   635,   640,   643,
+   648,   651,   653,   658,   660,   664,   668,   672,   674,   678,
+   682,   684,   688,   692,   694,   698,   702,   706,   710,   712,
+   716,   720,   722,   726,   728,   732,   734,   738,   740,   741,
+   746,   748,   749,   754,   756,   757,   758,   766,   768,   772,
+   776,   780,   784,   788,   792,   796,   800,   804,   808,   812,
+   814,   818,   819,   821,   823,   825,   827,   829,   833,   834,
+   844,   845,   857,   860,   861,   868,   869,   877,   882,   887,
+   888,   889,   892,   894,   899,   900,   905,   907,   911,   916,
+   918,   922,   924,   926,   928,   930,   932,   935,   938,   941,
+   944,   947,   950,   953,   956,   959,   962,   965,   968,   971,
+   974,   977,   980,   983,   986,   989,   992,   995,   998,  1001,
+  1004,  1007,  1010,  1013,  1016,  1019,  1022,  1025,  1028,  1031,
+  1034,  1037,  1040,  1043,  1046,  1049,  1052,  1055,  1058,  1061,
+  1064,  1067,  1070,  1072,  1074,  1076,  1078,  1081,  1084,  1087,
+  1090,  1093,  1096,  1099,  1102,  1105,  1108,  1111,  1114,  1117,
+  1120,  1124,  1126,  1131,  1133,  1137,  1140,  1143,  1146,  1147,
+  1149,  1150,  1151,  1163,  1164,  1165,  1177,  1184,  1191,  1192,
+  1193,  1204,  1205,  1206,  1217,  1223,  1229,  1234,  1239,  1240,
+  1242,  1244,  1247,  1253,  1257,  1260,  1265,  1267,  1271,  1276,
+  1283,  1284,  1293,  1298,  1300,  1304,  1307,  1309,  1314,  1316,
+  1318,  1321,  1324,  1326,  1329,  1331,  1334,  1336,  1338,  1340,
+  1343,  1345,  1348,  1351,  1355,  1357,  1361,  1363,  1367,  1369,
+  1371,  1375,  1376,  1379,  1380,  1385,  1390,  1392,  1394,  1397,
+  1399,  1401,  1404,  1405,  1407,  1413,  1416,  1420,  1424,  1429,
+  1433,  1438,  1443,  1449,  1451,  1453,  1455,  1457,  1459,  1461,
+  1463,  1465,  1467,  1469,  1474,  1479,  1484,  1487,  1489,  1491,
+  1493,  1496,  1499,  1507,  1514,  1517,  1518,  1519,  1530,  1531,
+  1538,  1540,  1542,  1544,  1546,  1549,  1551,  1553,  1555,  1557,
+  1559,  1561,  1563,  1567,  1569,  1572,  1575,  1578,  1580,  1582,
+  1584,  1586,  1588,  1590,  1592,  1594,  1596,  1598,  1602,  1604,
+  1606,  1609,  1612,  1613,  1618,  1619,  1625,  1626,  1630,  1631,
+  1636,  1640,  1643,  1647,  1648,  1649,  1650,  1651,  1652,  1654,
+  1657,  1660,  1664,  1667,  1671,  1675,  1680,  1683,  1686,  1690,
+  1694,  1699,  1701,  1704,  1706,  1709,  1711,  1714,  1716,  1719,
+  1721,  1724,  1726,  1731,  1734,  1735,  1741,  1742,  1749,  1754,
+  1759,  1760,  1761,  1772,  1774,  1775,  1780,  1782,  1784,  1786,
+  1788,  1790,  1794,  1796,  1801,  1805,  1810,  1817,  1823,  1829,
+  1832,  1835,  1837,  1840,  1843,  1846,  1849,  1852,  1855,  1858,
+  1861,  1863,  1865,  1870,  1872,  1876,  1880,  1884,  1886,  1890,
+  1894,  1896,  1900,  1904,  1906,  1910,  1914,  1918,  1922,  1924,
+  1928,  1932,  1934,  1938,  1940,  1944,  1946,  1950,  1952,  1956,
+  1958,  1962,  1964,  1965,  1966,  1974,  1976,  1980,  1984,  1988,
+  1992,  1996,  2000,  2004,  2008,  2012,  2016,  2020,  2022,  2023,
+  2025,  2028,  2036,  2039,  2042,  2050,  2057,  2060,  2064,  2067,
+  2071,  2074,  2078,  2082,  2086,  2090,  2093,  2097,  2098,  2100,
+  2102,  2104,  2106,  2108,  2110,  2112,  2114
 };
 
 static const short yyrhs[] = {    -1,
-   191,     0,   192,     0,   191,   192,     0,   259,   429,     0,
-   193,     0,   194,     0,   204,     0,   207,     0,   296,     0,
-     1,     0,    75,   316,   329,   339,   329,   429,   304,    88,
-     0,    75,   316,   329,   339,   329,    23,   304,   309,   308,
-   429,    88,     0,     0,    76,   195,   196,   429,    88,     0,
-   197,     0,   316,   329,   197,     0,   201,     0,   343,   201,
-     0,   431,     0,   304,    24,   329,   339,   304,    25,     0,
-   198,    26,    27,     0,   198,    26,   304,   295,    27,   329,
-     0,     0,   198,   305,    24,    25,   199,   209,   211,     0,
-     0,   198,   305,    24,   340,    25,   200,   209,   211,     0,
-   431,     0,   304,    24,   329,   197,   304,    25,     0,   201,
-    26,    27,     0,   201,    26,   304,   295,    27,   329,     0,
-     0,   201,   305,    24,    25,   202,   226,     0,     0,   201,
-   305,    24,   340,    25,   203,   226,     0,     0,     0,    77,
-   431,    24,   340,    25,   205,   226,   206,   429,    88,     0,
-    89,   370,    92,     0,    90,   357,    92,     0,    91,   358,
-    92,     0,    89,    92,     0,   255,     0,     0,   210,   228,
+   191,     0,   192,     0,   191,   192,     0,   260,   430,     0,
+   193,     0,   194,     0,   204,     0,   207,     0,   297,     0,
+     1,     0,    75,   317,   330,   340,   330,   430,   305,    88,
+     0,    75,   317,   330,   340,   330,    23,   305,   310,   309,
+   430,    88,     0,     0,    76,   195,   196,   430,    88,     0,
+   197,     0,   317,   330,   197,     0,   201,     0,   344,   201,
+     0,   432,     0,   305,    24,   330,   340,   305,    25,     0,
+   198,    26,    27,     0,   198,    26,   305,   296,    27,   330,
+     0,     0,   198,   306,    24,    25,   199,   209,   211,     0,
+     0,   198,   306,    24,   341,    25,   200,   209,   211,     0,
+   432,     0,   305,    24,   330,   197,   305,    25,     0,   201,
+    26,    27,     0,   201,    26,   305,   296,    27,   330,     0,
+     0,   201,   306,    24,    25,   202,   227,     0,     0,   201,
+   306,    24,   341,    25,   203,   227,     0,     0,     0,    77,
+   432,    24,   341,    25,   205,   227,   206,   430,    88,     0,
+    89,   371,    92,     0,    90,   358,    92,     0,    91,   359,
+    92,     0,    89,    92,     0,   256,     0,     0,   210,   229,
      0,     0,   212,   213,     0,   216,   214,     0,     0,   215,
    178,   218,    88,     0,     0,     0,   217,   177,   218,    88,
      0,     0,   219,   218,     0,   219,     0,   222,   221,   222,
     18,     0,   180,     0,   181,     0,    52,     0,    51,     0,
-    53,     0,   223,     0,   224,    24,   222,    25,     0,    24,
-   222,   225,   222,    25,     0,   430,     0,   184,     0,   186,
-     0,   220,     0,    33,     0,    32,     0,     0,     0,   229,
-     0,     0,   227,   229,     0,   236,     0,   230,   236,     0,
-   239,     0,   230,   239,     0,   252,     0,   252,   230,     0,
-   232,     0,   231,    21,   232,     0,   235,   233,     0,   430,
-     0,   184,     0,    86,     0,    87,     0,   116,     0,   117,
-     0,   130,     0,     0,   234,   235,     0,     0,    72,   237,
-   390,   429,    88,   242,     0,     0,    72,   238,   231,   429,
-    88,   242,     0,    74,     0,   243,     0,     0,     0,    72,
-   240,   390,   429,   242,     0,     0,    72,   241,   231,   429,
-   242,     0,    74,     0,   245,     0,     0,   243,     0,     0,
-     0,    73,   244,   260,     0,     0,    73,   246,   261,     0,
-    78,     0,    79,     0,    80,     0,    81,     0,    82,     0,
-    88,     0,    88,     0,    83,     0,    84,     0,   119,     0,
-   137,     0,   135,     0,   133,     0,   132,     0,   121,     0,
-   138,     0,   150,     0,     0,   247,   329,   253,   266,   429,
-   249,   304,     0,     0,   250,   329,   251,   254,   266,   429,
-   248,   304,     0,   339,     0,   316,   329,   339,     0,     0,
-    19,   257,   386,     0,     0,   390,   258,   379,     0,   208,
-   256,     0,   264,   429,    88,     0,   429,    88,     0,   264,
-   429,     0,   429,     0,   430,     0,   184,     0,   262,    26,
-    27,     0,   262,    26,   263,    27,     0,    34,   262,     0,
-    24,   262,    25,     0,   262,    28,   431,     0,   262,    44,
-   431,     0,   262,     0,   186,     0,   262,     0,   264,    21,
-   262,     0,   430,     0,   184,     0,   265,    26,    27,     0,
-   265,    26,   263,    27,     0,    34,   265,     0,    24,   265,
-    25,     0,   265,    28,   431,     0,   265,    44,   431,     0,
-   265,     0,   266,    21,   265,     0,   430,     0,   184,     0,
-   186,     0,    24,   293,    25,     0,   185,     0,   111,     0,
-   267,     0,   268,    26,   293,    27,     0,   268,    24,    25,
-     0,   268,    24,   269,    25,     0,    70,    24,   292,    21,
-   351,    25,     0,   268,   329,    28,   431,   304,     0,   268,
-   329,    44,   431,   304,     0,   268,    47,     0,   268,    48,
-     0,   292,     0,   269,    21,   292,     0,   268,     0,    47,
-   270,     0,    48,   270,     0,    29,   276,     0,    34,   276,
-     0,    33,   276,     0,    32,   276,     0,    31,   276,     0,
-    30,   276,     0,   273,     0,   272,     0,   271,    28,   431,
-     0,   431,     0,    46,   304,    24,   351,   329,    21,   271,
-    25,   304,     0,     0,   304,   274,   275,     0,    42,    24,
-   351,    25,     0,    42,   270,     0,    43,    24,   351,    25,
-     0,    43,   270,     0,   270,     0,    24,   351,    25,   276,
-     0,   276,     0,   277,    34,   276,     0,   277,    35,   276,
-     0,   277,    36,   276,     0,   277,     0,   278,    33,   277,
-     0,   278,    32,   277,     0,   278,     0,   279,    49,   278,
-     0,   279,    50,   278,     0,   279,     0,   280,    37,   279,
-     0,   280,    38,   279,     0,   280,    51,   279,     0,   280,
-    52,   279,     0,   280,     0,   281,    53,   280,     0,   281,
-    54,   280,     0,   281,     0,   282,    29,   281,     0,   282,
-     0,   283,    39,   282,     0,   283,     0,   284,    40,   283,
-     0,   284,     0,     0,   285,    55,   286,   284,     0,   285,
-     0,     0,   287,    56,   288,   285,     0,   287,     0,     0,
-     0,   287,    41,   290,   293,    22,   291,   289,     0,   289,
-     0,   270,    23,   292,     0,   270,    57,   292,     0,   270,
-    58,   292,     0,   270,    59,   292,     0,   270,    60,   292,
-     0,   270,    61,   292,     0,   270,    62,   292,     0,   270,
-    63,   292,     0,   270,    64,   292,     0,   270,    65,   292,
-     0,   270,    66,   292,     0,   292,     0,   293,    21,   292,
-     0,     0,   293,     0,   289,     0,   297,     0,    71,     0,
-   302,     0,   316,   304,    18,     0,     0,   316,   329,   339,
-   329,   298,   304,   308,    18,   304,     0,     0,   316,   329,
-   339,   329,    23,   299,   304,   309,   308,    18,   304,     0,
-   339,   329,     0,     0,   339,   329,    23,   301,   304,   309,
-     0,     0,    45,   316,   303,   329,   306,   304,    18,     0,
-    45,   316,   304,    18,     0,    45,   306,   304,    18,     0,
-     0,     0,   307,   304,     0,   300,     0,   306,    21,   329,
-   300,     0,     0,   308,    21,   329,   300,     0,   292,     0,
-    19,   310,    20,     0,    19,   310,    21,    20,     0,   309,
-     0,   310,    21,   309,     0,   112,     0,   110,     0,   113,
-     0,   114,     0,   115,     0,   108,   304,     0,   109,   304,
-     0,   116,   304,     0,   117,   304,     0,   130,   304,     0,
-   131,   304,     0,   132,   304,     0,   133,   304,     0,   118,
-   304,     0,   120,   304,     0,   119,   304,     0,   128,   304,
-     0,   129,   304,     0,   121,   304,     0,   123,   304,     0,
-   139,   304,     0,   140,   304,     0,   142,   304,     0,   143,
-   304,     0,   141,   304,     0,   136,   304,     0,   151,   304,
-     0,   134,   304,     0,   135,   304,     0,   137,   304,     0,
-   124,   304,     0,   127,   304,     0,   125,   304,     0,   126,
-   304,     0,   156,   304,     0,   157,   304,     0,   148,   304,
-     0,   158,   304,     0,   149,   304,     0,   152,   304,     0,
-   153,   304,     0,   154,   304,     0,   155,   304,     0,   150,
-   304,     0,   159,   304,     0,   160,   304,     0,   163,   304,
-     0,   164,   304,     0,   161,   304,     0,   162,   304,     0,
-   175,   304,     0,   147,     0,   144,     0,   145,     0,   146,
-     0,   165,   329,     0,   167,   329,     0,   166,   329,     0,
-   168,   329,     0,   169,   329,     0,   170,   329,     0,   171,
-   329,     0,   172,   329,     0,   173,   329,     0,   174,   329,
-     0,   432,   329,     0,   320,   329,     0,   334,   329,     0,
-   313,   329,     0,   304,   316,   304,     0,   318,     0,   318,
-    85,   317,    88,     0,   351,     0,   351,    21,   317,     0,
-   311,   319,     0,   312,   319,     0,   314,   319,     0,     0,
-   316,     0,     0,     0,   329,    67,   431,   304,    19,   321,
-   383,   330,   384,   322,    20,     0,     0,     0,   329,    68,
-   431,   304,    19,   323,   383,   330,   384,   324,    20,     0,
-   329,    67,   431,   304,    19,    20,     0,   329,    68,   431,
-   304,    19,    20,     0,     0,     0,   329,    67,   304,    19,
-   325,   383,   330,   384,   326,    20,     0,     0,     0,   329,
-    68,   304,    19,   327,   383,   330,   384,   328,    20,     0,
-   329,    67,   304,    19,    20,     0,   329,    68,   304,    19,
-    20,     0,   329,    67,   431,   329,     0,   329,    68,   431,
-   329,     0,     0,   331,     0,   207,     0,   330,   331,     0,
-   316,   329,   332,   304,    18,     0,   316,   304,    18,     0,
-   333,   329,     0,   332,    21,   333,   329,     0,   339,     0,
-    22,   304,   295,     0,   339,    22,   304,   295,     0,   329,
-    69,    19,   336,    20,   304,     0,     0,   329,    69,   431,
-    19,   335,   336,    20,   304,     0,   329,    69,   431,   304,
-     0,   337,     0,   336,    21,   337,     0,   336,    21,     0,
-   431,     0,   431,    23,   304,   295,     0,   198,     0,   353,
-     0,   343,   189,     0,   343,   338,     0,   198,     0,   343,
-   198,     0,   346,     0,   329,   344,     0,   108,     0,   109,
-     0,   341,     0,   342,   341,     0,    34,     0,    34,   342,
-     0,    34,   343,     0,    34,   342,   343,     0,   345,     0,
-   345,    21,     5,     0,   431,     0,   345,    21,   431,     0,
-     5,     0,   347,     0,   347,    21,     5,     0,     0,   348,
-   350,     0,     0,   347,    21,   349,   350,     0,   304,   316,
-   338,   304,     0,   431,     0,   315,     0,   315,   352,     0,
-   343,     0,   354,     0,   343,   354,     0,     0,   354,     0,
-   304,    24,   329,   352,    25,     0,    26,    27,     0,    26,
-   295,    27,     0,   354,    26,    27,     0,   354,    26,   295,
-    27,     0,   304,    24,    25,     0,   304,    24,   346,    25,
-     0,   354,   304,    24,    25,     0,   354,   304,    24,   346,
-    25,     0,   372,     0,   373,     0,   376,     0,   379,     0,
-   392,     0,   395,     0,   426,     0,   400,     0,   428,     0,
-   356,     0,   176,   430,   186,    88,     0,   179,   430,   186,
-    88,     0,   182,   430,   186,    88,     0,    22,   431,     0,
-   359,     0,   357,     0,   366,     0,   359,   366,     0,   399,
-   359,     0,   425,   371,    11,    24,   293,    25,    18,     0,
-   425,   371,    11,    24,   293,    25,     0,   361,   366,     0,
-     0,     0,    13,    24,   294,    18,   294,    18,   362,   294,
-   363,    25,     0,     0,   187,   381,    24,   365,   403,    25,
-     0,   188,     0,   372,     0,   373,     0,   376,     0,   368,
-   390,     0,   368,     0,   369,     0,   392,     0,   367,     0,
-   360,     0,   364,     0,   428,     0,    24,   366,    25,     0,
-     1,     0,   394,   366,     0,   381,    19,     0,   385,    20,
-     0,   371,     0,   389,     0,   372,     0,   373,     0,   376,
-     0,   380,     0,   393,     0,   395,     0,   400,     0,   427,
-     0,    24,   371,    25,     0,   428,     0,     1,     0,   431,
-    22,     0,   107,   355,     0,     0,     6,   295,   374,    22,
-     0,     0,    98,     6,   295,   375,    22,     0,     0,     7,
-   377,    22,     0,     0,    98,     7,   378,    22,     0,    24,
-   379,    25,     0,   381,   387,     0,   381,   388,   382,     0,
-     0,     0,     0,     0,     0,    20,     0,   107,    20,     0,
-   391,    20,     0,   391,   107,    20,     0,   390,    20,     0,
-   390,   107,    20,     0,   390,   391,    20,     0,   390,   391,
-   107,    20,     0,    19,   386,     0,    19,    20,     0,    19,
-   389,    20,     0,    19,   390,    20,     0,    19,   390,   391,
-    20,     0,   371,     0,   389,   371,     0,   296,     0,   390,
-   296,     0,   355,     0,   391,   355,     0,    18,     0,   293,
-    18,     0,    18,     0,   293,    18,     0,   293,     0,     8,
-    24,   293,    25,     0,   394,   355,     0,     0,   394,   355,
-     9,   396,   355,     0,     0,    10,    24,   293,   397,    25,
-   355,     0,    11,    24,   293,    25,     0,    11,    24,   293,
-    25,     0,     0,     0,   187,   401,   381,    24,   402,   403,
-    25,   379,   424,   382,     0,   405,     0,     0,   403,   404,
-    21,   405,     0,   423,     0,   430,     0,   185,     0,   184,
-     0,   186,     0,    24,   293,    25,     0,   406,     0,   268,
-    26,   293,    27,     0,   268,    24,    25,     0,   268,    24,
-   269,    25,     0,    70,    24,   292,    21,   351,    25,     0,
-   268,   329,    28,   431,   304,     0,   268,   329,    44,   431,
-   304,     0,   268,    47,     0,   268,    48,     0,   407,     0,
-    47,   270,     0,    48,   270,     0,    29,   276,     0,    34,
-   276,     0,    33,   276,     0,    32,   276,     0,    31,   276,
-     0,    30,   276,     0,   273,     0,   408,     0,    24,   351,
-    25,   276,     0,   409,     0,   277,    34,   276,     0,   277,
-    35,   276,     0,   277,    36,   276,     0,   410,     0,   278,
-    33,   277,     0,   278,    32,   277,     0,   411,     0,   279,
-    49,   278,     0,   279,    50,   278,     0,   412,     0,   280,
-    37,   279,     0,   280,    38,   279,     0,   280,    51,   279,
-     0,   280,    52,   279,     0,   413,     0,   281,    53,   280,
-     0,   281,    54,   280,     0,   414,     0,   282,    29,   281,
-     0,   415,     0,   283,    39,   282,     0,   416,     0,   284,
-    40,   283,     0,   417,     0,   285,    55,   284,     0,   418,
-     0,   287,    56,   285,     0,   419,     0,     0,     0,   287,
-    41,   421,   293,    22,   422,   289,     0,   420,     0,   270,
-    23,   292,     0,   270,    57,   292,     0,   270,    58,   292,
-     0,   270,    59,   292,     0,   270,    60,   292,     0,   270,
-    61,   292,     0,   270,    62,   292,     0,   270,    63,   292,
-     0,   270,    64,   292,     0,   270,    65,   292,     0,   270,
-    66,   292,     0,   188,     0,     0,    12,     0,   398,   355,
-     0,   425,   355,    11,    24,   293,    25,    18,     0,   361,
-   355,     0,   398,   371,     0,   425,   371,    11,    24,   293,
-    25,    18,     0,   425,   371,    11,    24,   293,    25,     0,
-   361,   371,     0,    14,   431,    18,     0,    15,    18,     0,
-    97,    15,    18,     0,    16,    18,     0,    93,    16,    18,
-     0,    94,    16,    18,     0,    95,    16,    18,     0,    96,
-    16,    18,     0,    17,    18,     0,    17,   293,    18,     0,
-     0,    18,     0,   183,     0,   184,     0,   187,     0,   188,
-     0,   430,     0,   185,     0,   189,     0,   185,     0
+    53,     0,   223,     0,   225,    24,   222,    25,     0,    24,
+   222,   226,   222,    25,     0,   224,     0,   186,     0,   431,
+     0,   184,     0,   224,    26,    27,     0,   224,    26,   186,
+    27,     0,    34,   224,     0,    24,   224,    25,     0,   224,
+    28,   432,     0,   224,    44,   432,     0,   220,     0,    33,
+     0,    32,     0,     0,     0,   230,     0,     0,   228,   230,
+     0,   237,     0,   231,   237,     0,   240,     0,   231,   240,
+     0,   253,     0,   253,   231,     0,   233,     0,   232,    21,
+   233,     0,   236,   234,     0,   431,     0,   184,     0,    86,
+     0,    87,     0,   116,     0,   117,     0,   130,     0,     0,
+   235,   236,     0,     0,    72,   238,   391,   430,    88,   243,
+     0,     0,    72,   239,   232,   430,    88,   243,     0,    74,
+     0,   244,     0,     0,     0,    72,   241,   391,   430,   243,
+     0,     0,    72,   242,   232,   430,   243,     0,    74,     0,
+   246,     0,     0,   244,     0,     0,     0,    73,   245,   261,
+     0,     0,    73,   247,   262,     0,    78,     0,    79,     0,
+    80,     0,    81,     0,    82,     0,    88,     0,    88,     0,
+    83,     0,    84,     0,   119,     0,   137,     0,   135,     0,
+   133,     0,   132,     0,   121,     0,   138,     0,   150,     0,
+     0,   248,   330,   254,   267,   430,   250,   305,     0,     0,
+   251,   330,   252,   255,   267,   430,   249,   305,     0,   340,
+     0,   317,   330,   340,     0,     0,    19,   258,   387,     0,
+     0,   391,   259,   380,     0,   208,   257,     0,   265,   430,
+    88,     0,   430,    88,     0,   265,   430,     0,   430,     0,
+   431,     0,   184,     0,   263,    26,    27,     0,   263,    26,
+   264,    27,     0,    34,   263,     0,    24,   263,    25,     0,
+   263,    28,   432,     0,   263,    44,   432,     0,   263,     0,
+   186,     0,   263,     0,   265,    21,   263,     0,   431,     0,
+   184,     0,   266,    26,    27,     0,   266,    26,   264,    27,
+     0,    34,   266,     0,    24,   266,    25,     0,   266,    28,
+   432,     0,   266,    44,   432,     0,   266,     0,   267,    21,
+   266,     0,   431,     0,   184,     0,   186,     0,    24,   294,
+    25,     0,   185,     0,   111,     0,   268,     0,   269,    26,
+   294,    27,     0,   269,    24,    25,     0,   269,    24,   270,
+    25,     0,    70,    24,   293,    21,   352,    25,     0,   269,
+   330,    28,   432,   305,     0,   269,   330,    44,   432,   305,
+     0,   269,    47,     0,   269,    48,     0,   293,     0,   270,
+    21,   293,     0,   269,     0,    47,   271,     0,    48,   271,
+     0,    29,   277,     0,    34,   277,     0,    33,   277,     0,
+    32,   277,     0,    31,   277,     0,    30,   277,     0,   274,
+     0,   273,     0,   272,    28,   432,     0,   432,     0,    46,
+   305,    24,   352,   330,    21,   272,    25,   305,     0,     0,
+   305,   275,   276,     0,    42,    24,   352,    25,     0,    42,
+   271,     0,    43,    24,   352,    25,     0,    43,   271,     0,
+   271,     0,    24,   352,    25,   277,     0,   277,     0,   278,
+    34,   277,     0,   278,    35,   277,     0,   278,    36,   277,
+     0,   278,     0,   279,    33,   278,     0,   279,    32,   278,
+     0,   279,     0,   280,    49,   279,     0,   280,    50,   279,
+     0,   280,     0,   281,    37,   280,     0,   281,    38,   280,
+     0,   281,    51,   280,     0,   281,    52,   280,     0,   281,
+     0,   282,    53,   281,     0,   282,    54,   281,     0,   282,
+     0,   283,    29,   282,     0,   283,     0,   284,    39,   283,
+     0,   284,     0,   285,    40,   284,     0,   285,     0,     0,
+   286,    55,   287,   285,     0,   286,     0,     0,   288,    56,
+   289,   286,     0,   288,     0,     0,     0,   288,    41,   291,
+   294,    22,   292,   290,     0,   290,     0,   271,    23,   293,
+     0,   271,    57,   293,     0,   271,    58,   293,     0,   271,
+    59,   293,     0,   271,    60,   293,     0,   271,    61,   293,
+     0,   271,    62,   293,     0,   271,    63,   293,     0,   271,
+    64,   293,     0,   271,    65,   293,     0,   271,    66,   293,
+     0,   293,     0,   294,    21,   293,     0,     0,   294,     0,
+   290,     0,   298,     0,    71,     0,   303,     0,   317,   305,
+    18,     0,     0,   317,   330,   340,   330,   299,   305,   309,
+    18,   305,     0,     0,   317,   330,   340,   330,    23,   300,
+   305,   310,   309,    18,   305,     0,   340,   330,     0,     0,
+   340,   330,    23,   302,   305,   310,     0,     0,    45,   317,
+   304,   330,   307,   305,    18,     0,    45,   317,   305,    18,
+     0,    45,   307,   305,    18,     0,     0,     0,   308,   305,
+     0,   301,     0,   307,    21,   330,   301,     0,     0,   309,
+    21,   330,   301,     0,   293,     0,    19,   311,    20,     0,
+    19,   311,    21,    20,     0,   310,     0,   311,    21,   310,
+     0,   112,     0,   110,     0,   113,     0,   114,     0,   115,
+     0,   108,   305,     0,   109,   305,     0,   116,   305,     0,
+   117,   305,     0,   130,   305,     0,   131,   305,     0,   132,
+   305,     0,   133,   305,     0,   118,   305,     0,   120,   305,
+     0,   119,   305,     0,   128,   305,     0,   129,   305,     0,
+   121,   305,     0,   123,   305,     0,   139,   305,     0,   140,
+   305,     0,   142,   305,     0,   143,   305,     0,   141,   305,
+     0,   136,   305,     0,   151,   305,     0,   134,   305,     0,
+   135,   305,     0,   137,   305,     0,   124,   305,     0,   127,
+   305,     0,   125,   305,     0,   126,   305,     0,   156,   305,
+     0,   157,   305,     0,   148,   305,     0,   158,   305,     0,
+   149,   305,     0,   152,   305,     0,   153,   305,     0,   154,
+   305,     0,   155,   305,     0,   150,   305,     0,   159,   305,
+     0,   160,   305,     0,   163,   305,     0,   164,   305,     0,
+   161,   305,     0,   162,   305,     0,   175,   305,     0,   147,
+     0,   144,     0,   145,     0,   146,     0,   165,   330,     0,
+   167,   330,     0,   166,   330,     0,   168,   330,     0,   169,
+   330,     0,   170,   330,     0,   171,   330,     0,   172,   330,
+     0,   173,   330,     0,   174,   330,     0,   433,   330,     0,
+   321,   330,     0,   335,   330,     0,   314,   330,     0,   305,
+   317,   305,     0,   319,     0,   319,    85,   318,    88,     0,
+   352,     0,   352,    21,   318,     0,   312,   320,     0,   313,
+   320,     0,   315,   320,     0,     0,   317,     0,     0,     0,
+   330,    67,   432,   305,    19,   322,   384,   331,   385,   323,
+    20,     0,     0,     0,   330,    68,   432,   305,    19,   324,
+   384,   331,   385,   325,    20,     0,   330,    67,   432,   305,
+    19,    20,     0,   330,    68,   432,   305,    19,    20,     0,
+     0,     0,   330,    67,   305,    19,   326,   384,   331,   385,
+   327,    20,     0,     0,     0,   330,    68,   305,    19,   328,
+   384,   331,   385,   329,    20,     0,   330,    67,   305,    19,
+    20,     0,   330,    68,   305,    19,    20,     0,   330,    67,
+   432,   330,     0,   330,    68,   432,   330,     0,     0,   332,
+     0,   207,     0,   331,   332,     0,   317,   330,   333,   305,
+    18,     0,   317,   305,    18,     0,   334,   330,     0,   333,
+    21,   334,   330,     0,   340,     0,    22,   305,   296,     0,
+   340,    22,   305,   296,     0,   330,    69,    19,   337,    20,
+   305,     0,     0,   330,    69,   432,    19,   336,   337,    20,
+   305,     0,   330,    69,   432,   305,     0,   338,     0,   337,
+    21,   338,     0,   337,    21,     0,   432,     0,   432,    23,
+   305,   296,     0,   198,     0,   354,     0,   344,   189,     0,
+   344,   339,     0,   198,     0,   344,   198,     0,   347,     0,
+   330,   345,     0,   108,     0,   109,     0,   342,     0,   343,
+   342,     0,    34,     0,    34,   343,     0,    34,   344,     0,
+    34,   343,   344,     0,   346,     0,   346,    21,     5,     0,
+   432,     0,   346,    21,   432,     0,     5,     0,   348,     0,
+   348,    21,     5,     0,     0,   349,   351,     0,     0,   348,
+    21,   350,   351,     0,   305,   317,   339,   305,     0,   432,
+     0,   316,     0,   316,   353,     0,   344,     0,   355,     0,
+   344,   355,     0,     0,   355,     0,   305,    24,   330,   353,
+    25,     0,    26,    27,     0,    26,   296,    27,     0,   355,
+    26,    27,     0,   355,    26,   296,    27,     0,   305,    24,
+    25,     0,   305,    24,   347,    25,     0,   355,   305,    24,
+    25,     0,   355,   305,    24,   347,    25,     0,   373,     0,
+   374,     0,   377,     0,   380,     0,   393,     0,   396,     0,
+   427,     0,   401,     0,   429,     0,   357,     0,   176,   431,
+   186,    88,     0,   179,   431,   186,    88,     0,   182,   431,
+   186,    88,     0,    22,   432,     0,   360,     0,   358,     0,
+   367,     0,   360,   367,     0,   400,   360,     0,   426,   372,
+    11,    24,   294,    25,    18,     0,   426,   372,    11,    24,
+   294,    25,     0,   362,   367,     0,     0,     0,    13,    24,
+   295,    18,   295,    18,   363,   295,   364,    25,     0,     0,
+   187,   382,    24,   366,   404,    25,     0,   188,     0,   373,
+     0,   374,     0,   377,     0,   369,   391,     0,   369,     0,
+   370,     0,   393,     0,   368,     0,   361,     0,   365,     0,
+   429,     0,    24,   367,    25,     0,     1,     0,   395,   367,
+     0,   382,    19,     0,   386,    20,     0,   372,     0,   390,
+     0,   373,     0,   374,     0,   377,     0,   381,     0,   394,
+     0,   396,     0,   401,     0,   428,     0,    24,   372,    25,
+     0,   429,     0,     1,     0,   432,    22,     0,   107,   356,
+     0,     0,     6,   296,   375,    22,     0,     0,    98,     6,
+   296,   376,    22,     0,     0,     7,   378,    22,     0,     0,
+    98,     7,   379,    22,     0,    24,   380,    25,     0,   382,
+   388,     0,   382,   389,   383,     0,     0,     0,     0,     0,
+     0,    20,     0,   107,    20,     0,   392,    20,     0,   392,
+   107,    20,     0,   391,    20,     0,   391,   107,    20,     0,
+   391,   392,    20,     0,   391,   392,   107,    20,     0,    19,
+   387,     0,    19,    20,     0,    19,   390,    20,     0,    19,
+   391,    20,     0,    19,   391,   392,    20,     0,   372,     0,
+   390,   372,     0,   297,     0,   391,   297,     0,   356,     0,
+   392,   356,     0,    18,     0,   294,    18,     0,    18,     0,
+   294,    18,     0,   294,     0,     8,    24,   294,    25,     0,
+   395,   356,     0,     0,   395,   356,     9,   397,   356,     0,
+     0,    10,    24,   294,   398,    25,   356,     0,    11,    24,
+   294,    25,     0,    11,    24,   294,    25,     0,     0,     0,
+   187,   402,   382,    24,   403,   404,    25,   380,   425,   383,
+     0,   406,     0,     0,   404,   405,    21,   406,     0,   424,
+     0,   431,     0,   185,     0,   184,     0,   186,     0,    24,
+   294,    25,     0,   407,     0,   269,    26,   294,    27,     0,
+   269,    24,    25,     0,   269,    24,   270,    25,     0,    70,
+    24,   293,    21,   352,    25,     0,   269,   330,    28,   432,
+   305,     0,   269,   330,    44,   432,   305,     0,   269,    47,
+     0,   269,    48,     0,   408,     0,    47,   271,     0,    48,
+   271,     0,    29,   277,     0,    34,   277,     0,    33,   277,
+     0,    32,   277,     0,    31,   277,     0,    30,   277,     0,
+   274,     0,   409,     0,    24,   352,    25,   277,     0,   410,
+     0,   278,    34,   277,     0,   278,    35,   277,     0,   278,
+    36,   277,     0,   411,     0,   279,    33,   278,     0,   279,
+    32,   278,     0,   412,     0,   280,    49,   279,     0,   280,
+    50,   279,     0,   413,     0,   281,    37,   280,     0,   281,
+    38,   280,     0,   281,    51,   280,     0,   281,    52,   280,
+     0,   414,     0,   282,    53,   281,     0,   282,    54,   281,
+     0,   415,     0,   283,    29,   282,     0,   416,     0,   284,
+    39,   283,     0,   417,     0,   285,    40,   284,     0,   418,
+     0,   286,    55,   285,     0,   419,     0,   288,    56,   286,
+     0,   420,     0,     0,     0,   288,    41,   422,   294,    22,
+   423,   290,     0,   421,     0,   271,    23,   293,     0,   271,
+    57,   293,     0,   271,    58,   293,     0,   271,    59,   293,
+     0,   271,    60,   293,     0,   271,    61,   293,     0,   271,
+    62,   293,     0,   271,    63,   293,     0,   271,    64,   293,
+     0,   271,    65,   293,     0,   271,    66,   293,     0,   188,
+     0,     0,    12,     0,   399,   356,     0,   426,   356,    11,
+    24,   294,    25,    18,     0,   362,   356,     0,   399,   372,
+     0,   426,   372,    11,    24,   294,    25,    18,     0,   426,
+   372,    11,    24,   294,    25,     0,   362,   372,     0,    14,
+   432,    18,     0,    15,    18,     0,    97,    15,    18,     0,
+    16,    18,     0,    93,    16,    18,     0,    94,    16,    18,
+     0,    95,    16,    18,     0,    96,    16,    18,     0,    17,
+    18,     0,    17,   294,    18,     0,     0,    18,     0,   183,
+     0,   184,     0,   187,     0,   188,     0,   431,     0,   185,
+     0,   189,     0,   185,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   261,   262,   265,   266,   269,   270,   271,   272,   273,   274,
-   275,   278,   280,   284,   284,   289,   295,   299,   300,   304,
-   305,   307,   309,   313,   316,   324,   327,   336,   337,   339,
-   341,   357,   361,   368,   372,   378,   380,   380,   384,   385,
-   386,   387,   390,   393,   394,   400,   401,   405,   409,   414,
-   421,   425,   430,   437,   440,   441,   444,   449,   450,   453,
-   454,   455,   458,   459,   460,   465,   467,   468,   479,   483,
-   484,   489,   490,   500,   501,   504,   505,   508,   509,   512,
-   513,   516,   517,   520,   523,   524,   527,   528,   529,   530,
-   531,   534,   535,   538,   538,   541,   541,   544,   548,   549,
-   552,   552,   555,   555,   558,   562,   563,   566,   567,   570,
-   576,   583,   589,   596,   597,   598,   599,   600,   603,   606,
-   609,   610,   613,   614,   615,   616,   617,   618,   619,   620,
-   623,   629,   636,   642,   651,   657,   661,   663,   667,   670,
-   677,   687,   688,   691,   692,   695,   696,   697,   698,   699,
-   700,   701,   702,   706,   707,   711,   712,   715,   717,   719,
-   720,   721,   722,   723,   725,   729,   733,   745,   746,   747,
-   748,   749,   750,   753,   754,   755,   756,   757,   758,   759,
-   760,   761,   764,   765,   768,   769,   770,   771,   772,   773,
-   774,   775,   776,   777,   778,   781,   782,   785,   789,   790,
-   793,   794,   795,   796,   799,   800,   804,   805,   806,   807,
-   810,   811,   812,   815,   816,   817,   820,   821,   822,   823,
-   824,   827,   828,   829,   832,   833,   836,   837,   841,   842,
-   845,   846,   851,   857,   858,   864,   870,   871,   871,   873,
-   876,   877,   878,   879,   880,   881,   882,   883,   884,   885,
-   886,   887,   890,   891,   894,   895,   898,   903,   904,   905,
-   908,   921,   925,   926,   929,   934,   935,   935,   940,   941,
-   942,   943,   946,   949,   952,   955,   956,   959,   960,   963,
-   964,   965,   969,   971,   980,   981,   982,   983,   984,   987,
-   988,   989,   990,   991,   992,   993,   994,   995,   996,   997,
-   998,   999,  1000,  1001,  1002,  1003,  1004,  1005,  1006,  1007,
-  1008,  1009,  1010,  1011,  1012,  1013,  1014,  1015,  1016,  1017,
-  1018,  1019,  1020,  1021,  1022,  1023,  1024,  1025,  1026,  1027,
-  1028,  1029,  1030,  1031,  1032,  1038,  1039,  1040,  1041,  1044,
+   269,   270,   273,   274,   277,   278,   279,   280,   281,   282,
+   283,   286,   288,   292,   292,   297,   303,   307,   308,   312,
+   313,   315,   317,   321,   324,   332,   335,   344,   345,   347,
+   349,   365,   369,   376,   380,   386,   388,   388,   392,   393,
+   394,   395,   398,   401,   402,   408,   409,   413,   417,   422,
+   429,   433,   438,   445,   448,   449,   452,   457,   458,   461,
+   462,   463,   466,   467,   468,   473,   474,   482,   485,   487,
+   488,   493,   494,   495,   497,   513,   517,   518,   523,   524,
+   534,   535,   538,   539,   542,   543,   546,   547,   550,   551,
+   554,   557,   558,   561,   562,   563,   564,   565,   568,   569,
+   572,   572,   575,   575,   578,   582,   583,   586,   586,   589,
+   589,   592,   596,   597,   600,   601,   604,   610,   617,   623,
+   630,   631,   632,   633,   634,   637,   640,   643,   644,   647,
+   648,   649,   650,   651,   652,   653,   654,   657,   663,   670,
+   676,   685,   691,   695,   697,   701,   704,   711,   721,   722,
+   725,   726,   729,   730,   731,   732,   733,   734,   735,   736,
+   740,   741,   745,   746,   749,   751,   753,   754,   755,   756,
+   757,   759,   763,   767,   779,   780,   781,   782,   783,   784,
+   787,   788,   789,   790,   791,   792,   793,   794,   795,   798,
+   799,   802,   803,   804,   805,   806,   807,   808,   809,   810,
+   811,   812,   815,   816,   819,   823,   824,   827,   828,   829,
+   830,   833,   834,   838,   839,   840,   841,   844,   845,   846,
+   849,   850,   851,   854,   855,   856,   857,   858,   861,   862,
+   863,   866,   867,   870,   871,   875,   876,   879,   880,   885,
+   891,   892,   898,   904,   905,   905,   907,   910,   911,   912,
+   913,   914,   915,   916,   917,   918,   919,   920,   921,   924,
+   925,   928,   929,   932,   937,   938,   939,   942,   955,   959,
+   960,   963,   968,   969,   969,   974,   975,   976,   977,   980,
+   983,   986,   989,   990,   993,   994,   997,   998,   999,  1003,
+  1005,  1014,  1015,  1016,  1017,  1018,  1021,  1022,  1023,  1024,
+  1025,  1026,  1027,  1028,  1029,  1030,  1031,  1032,  1033,  1034,
+  1035,  1036,  1037,  1038,  1039,  1040,  1041,  1042,  1043,  1044,
   1045,  1046,  1047,  1048,  1049,  1050,  1051,  1052,  1053,  1054,
-  1055,  1056,  1057,  1060,  1064,  1065,  1069,  1070,  1074,  1075,
-  1076,  1079,  1080,  1083,  1085,  1087,  1088,  1090,  1092,  1093,
-  1095,  1097,  1099,  1101,  1102,  1104,  1106,  1107,  1109,  1111,
-  1112,  1115,  1118,  1119,  1120,  1123,  1125,  1129,  1131,  1135,
-  1136,  1137,  1141,  1143,  1143,  1145,  1148,  1150,  1152,  1155,
-  1160,  1167,  1168,  1169,  1176,  1180,  1181,  1185,  1186,  1189,
-  1190,  1193,  1194,  1197,  1198,  1199,  1200,  1203,  1204,  1207,
-  1208,  1211,  1212,  1213,  1216,  1216,  1217,  1218,  1221,  1233,
-  1249,  1250,  1253,  1254,  1255,  1258,  1259,  1262,  1264,  1265,
-  1267,  1268,  1270,  1272,  1274,  1276,  1282,  1283,  1284,  1285,
-  1286,  1287,  1288,  1289,  1290,  1292,  1296,  1298,  1300,  1306,
-  1311,  1314,  1317,  1318,  1322,  1324,  1326,  1328,  1332,  1333,
-  1335,  1339,  1341,  1343,  1346,  1347,  1348,  1349,  1350,  1351,
-  1352,  1353,  1354,  1355,  1356,  1357,  1358,  1361,  1367,  1370,
-  1373,  1374,  1377,  1378,  1379,  1380,  1381,  1382,  1383,  1384,
-  1385,  1386,  1387,  1390,  1391,  1397,  1398,  1399,  1400,  1403,
-  1404,  1405,  1406,  1409,  1410,  1414,  1417,  1420,  1423,  1426,
-  1429,  1432,  1433,  1434,  1435,  1437,  1438,  1440,  1442,  1449,
-  1453,  1455,  1457,  1459,  1463,  1464,  1467,  1468,  1471,  1472,
-  1475,  1476,  1479,  1480,  1481,  1484,  1492,  1497,  1498,  1502,
-  1503,  1506,  1511,  1514,  1515,  1516,  1524,  1525,  1525,  1529,
-  1530,  1531,  1542,  1549,  1550,  1553,  1554,  1555,  1556,  1557,
-  1559,  1560,  1561,  1562,  1565,  1566,  1567,  1568,  1569,  1570,
-  1571,  1572,  1573,  1574,  1577,  1578,  1581,  1582,  1583,  1584,
-  1587,  1588,  1589,  1592,  1593,  1594,  1597,  1598,  1599,  1600,
-  1601,  1604,  1605,  1606,  1609,  1610,  1613,  1614,  1618,  1619,
-  1622,  1623,  1626,  1627,  1630,  1631,  1632,  1633,  1636,  1637,
-  1638,  1639,  1640,  1641,  1642,  1643,  1644,  1645,  1646,  1647,
-  1650,  1651,  1654,  1657,  1659,  1661,  1665,  1666,  1668,  1670,
-  1673,  1674,  1675,  1677,  1678,  1679,  1680,  1681,  1682,  1683,
-  1686,  1687,  1690,  1693,  1694,  1695,  1696,  1697,  1700,  1701
+  1055,  1056,  1057,  1058,  1059,  1060,  1061,  1062,  1063,  1064,
+  1065,  1066,  1072,  1073,  1074,  1075,  1078,  1079,  1080,  1081,
+  1082,  1083,  1084,  1085,  1086,  1087,  1088,  1089,  1090,  1091,
+  1094,  1098,  1099,  1103,  1104,  1108,  1109,  1110,  1113,  1114,
+  1117,  1119,  1121,  1122,  1124,  1126,  1127,  1129,  1131,  1133,
+  1135,  1136,  1138,  1140,  1141,  1143,  1145,  1146,  1149,  1152,
+  1153,  1154,  1157,  1159,  1163,  1165,  1169,  1170,  1171,  1175,
+  1177,  1177,  1179,  1182,  1184,  1186,  1189,  1194,  1201,  1202,
+  1203,  1210,  1214,  1215,  1219,  1220,  1223,  1224,  1227,  1228,
+  1231,  1232,  1233,  1234,  1237,  1238,  1241,  1242,  1245,  1246,
+  1247,  1250,  1250,  1251,  1252,  1255,  1267,  1283,  1284,  1287,
+  1288,  1289,  1292,  1293,  1296,  1298,  1299,  1301,  1302,  1304,
+  1306,  1308,  1310,  1316,  1317,  1318,  1319,  1320,  1321,  1322,
+  1323,  1324,  1326,  1330,  1332,  1334,  1340,  1345,  1348,  1351,
+  1352,  1356,  1358,  1360,  1362,  1366,  1367,  1369,  1373,  1375,
+  1377,  1380,  1381,  1382,  1383,  1384,  1385,  1386,  1387,  1388,
+  1389,  1390,  1391,  1392,  1395,  1401,  1404,  1407,  1408,  1411,
+  1412,  1413,  1414,  1415,  1416,  1417,  1418,  1419,  1420,  1421,
+  1424,  1425,  1431,  1432,  1433,  1434,  1437,  1438,  1439,  1440,
+  1443,  1444,  1448,  1451,  1454,  1457,  1460,  1463,  1466,  1467,
+  1468,  1469,  1471,  1472,  1474,  1476,  1483,  1487,  1489,  1491,
+  1493,  1497,  1498,  1501,  1502,  1505,  1506,  1509,  1510,  1513,
+  1514,  1515,  1518,  1526,  1531,  1532,  1536,  1537,  1540,  1545,
+  1548,  1549,  1550,  1558,  1559,  1559,  1563,  1564,  1565,  1576,
+  1583,  1584,  1587,  1588,  1589,  1590,  1591,  1593,  1594,  1595,
+  1596,  1599,  1600,  1601,  1602,  1603,  1604,  1605,  1606,  1607,
+  1608,  1611,  1612,  1615,  1616,  1617,  1618,  1621,  1622,  1623,
+  1626,  1627,  1628,  1631,  1632,  1633,  1634,  1635,  1638,  1639,
+  1640,  1643,  1644,  1647,  1648,  1652,  1653,  1656,  1657,  1660,
+  1661,  1664,  1665,  1666,  1667,  1670,  1671,  1672,  1673,  1674,
+  1675,  1676,  1677,  1678,  1679,  1680,  1681,  1684,  1685,  1688,
+  1691,  1693,  1695,  1699,  1700,  1702,  1704,  1707,  1708,  1709,
+  1711,  1712,  1713,  1714,  1715,  1716,  1717,  1720,  1721,  1724,
+  1727,  1728,  1729,  1730,  1731,  1734,  1735
 };
 #endif
 
@@ -731,39 +743,40 @@ static const char * const yytname[] = {   "$","error","$undefined.","BADTOK",
 "optGlobMods","@8","optGlobBufConstraints","@9","optGlobBufConstraintsRest",
 "optGlobEnsuresConstraintsAux","@10","optGlobBufConstraintsAux","@11","BufConstraintList",
 "BufConstraint","bufferModifier","relationalOp","BufConstraintExpr","BufConstraintTerm",
-"BufUnaryOp","BufBinaryOp","optPlainGlobMods","@13","optGlobModsRest","optPlainGlobModsRest",
-"specialClauses","globIdList","globIdListExpr","globId","globQual","optGlobQuals",
-"optGlobModsAux","@14","@15","optPlainGlobModsAux","@16","@17","optMods","fcnMods",
-"@18","fcnPlainMods","@19","specialTag","endStateTag","endSpecialTag","stateSpecialClause",
-"specialClauseType","specialClause","@20","@21","fcnDefHdrAux","fcnBody","@22",
-"@23","fcnDef","locModifies","locPlainModifies","modListExpr","mExpr","modList",
-"specClauseListExpr","specClauseList","primaryExpr","postfixExpr","argumentExprList",
-"unaryExpr","fieldDesignator","offsetofExpr","sizeofExpr","@24","sizeofExprAux",
-"castExpr","timesExpr","plusExpr","shiftExpr","relationalExpr","equalityExpr",
-"bitandExpr","xorExpr","bitorExpr","andExpr","@25","orExpr","@26","conditionalExpr",
-"@27","@28","assignExpr","expr","optExpr","constantExpr","initializer","instanceDecl",
-"@29","@30","namedInitializer","@31","typeDecl","@32","IsType","PushType","namedInitializerList",
-"namedInitializerListAux","optDeclarators","init","initList","storageSpecifier",
-"typeQualifier","typeModifier","typeSpecifier","completeType","completeTypeSpecifier",
-"altType","completeTypeSpecifierAux","optCompleteType","suSpc","@33","@34","@35",
-"@36","@37","@38","@39","@40","NotType","structDeclList","structDecl","structNamedDeclList",
-"structNamedDecl","enumSpc","@41","enumeratorList","enumerator","optNamedDecl",
-"namedDecl","genericParamList","innerMods","innerModsList","pointers","paramIdList",
-"idList","paramTypeList","paramList","@42","@43","paramDecl","typeExpression",
-"abstractDecl","optAbstractDeclBase","abstractDeclBase","stmt","lclintassertion",
-"iterBody","endBody","iterDefStmtList","iterDefIterationStmt","forPred","@44",
-"@45","partialIterStmt","@46","iterDefStmt","iterSelectionStmt","openScope",
-"closeScope","macroBody","stmtErr","labeledStmt","caseStmt","@47","@48","defaultStmt",
-"@49","@50","compoundStmt","compoundStmtErr","CreateInnerScope","DeleteInnerScope",
-"CreateStructInnerScope","DeleteStructInnerScope","DeleteInnerScopeSafe","compoundStmtRest",
-"compoundStmtAux","compoundStmtAuxErr","stmtListErr","initializerList","stmtList",
-"expressionStmt","expressionStmtErr","ifPred","selectionStmt","@51","@52","whilePred",
-"iterWhilePred","iterStmt","@53","@54","iterArgList","@55","iterArgExpr","primaryIterExpr",
-"postfixIterExpr","unaryIterExpr","castIterExpr","timesIterExpr","plusIterExpr",
-"shiftIterExpr","relationalIterExpr","equalityIterExpr","bitandIterExpr","xorIterExpr",
-"bitorIterExpr","andIterExpr","orIterExpr","conditionalIterExpr","@56","@57",
-"assignIterExpr","endIter","doHeader","iterationStmt","iterationStmtErr","jumpStmt",
-"optSemi","id","newId","typeName", NULL
+"BufConstraintSrefExpr","BufUnaryOp","BufBinaryOp","optPlainGlobMods","@13",
+"optGlobModsRest","optPlainGlobModsRest","specialClauses","globIdList","globIdListExpr",
+"globId","globQual","optGlobQuals","optGlobModsAux","@14","@15","optPlainGlobModsAux",
+"@16","@17","optMods","fcnMods","@18","fcnPlainMods","@19","specialTag","endStateTag",
+"endSpecialTag","stateSpecialClause","specialClauseType","specialClause","@20",
+"@21","fcnDefHdrAux","fcnBody","@22","@23","fcnDef","locModifies","locPlainModifies",
+"modListExpr","mExpr","modList","specClauseListExpr","specClauseList","primaryExpr",
+"postfixExpr","argumentExprList","unaryExpr","fieldDesignator","offsetofExpr",
+"sizeofExpr","@24","sizeofExprAux","castExpr","timesExpr","plusExpr","shiftExpr",
+"relationalExpr","equalityExpr","bitandExpr","xorExpr","bitorExpr","andExpr",
+"@25","orExpr","@26","conditionalExpr","@27","@28","assignExpr","expr","optExpr",
+"constantExpr","initializer","instanceDecl","@29","@30","namedInitializer","@31",
+"typeDecl","@32","IsType","PushType","namedInitializerList","namedInitializerListAux",
+"optDeclarators","init","initList","storageSpecifier","typeQualifier","typeModifier",
+"typeSpecifier","completeType","completeTypeSpecifier","altType","completeTypeSpecifierAux",
+"optCompleteType","suSpc","@33","@34","@35","@36","@37","@38","@39","@40","NotType",
+"structDeclList","structDecl","structNamedDeclList","structNamedDecl","enumSpc",
+"@41","enumeratorList","enumerator","optNamedDecl","namedDecl","genericParamList",
+"innerMods","innerModsList","pointers","paramIdList","idList","paramTypeList",
+"paramList","@42","@43","paramDecl","typeExpression","abstractDecl","optAbstractDeclBase",
+"abstractDeclBase","stmt","lclintassertion","iterBody","endBody","iterDefStmtList",
+"iterDefIterationStmt","forPred","@44","@45","partialIterStmt","@46","iterDefStmt",
+"iterSelectionStmt","openScope","closeScope","macroBody","stmtErr","labeledStmt",
+"caseStmt","@47","@48","defaultStmt","@49","@50","compoundStmt","compoundStmtErr",
+"CreateInnerScope","DeleteInnerScope","CreateStructInnerScope","DeleteStructInnerScope",
+"DeleteInnerScopeSafe","compoundStmtRest","compoundStmtAux","compoundStmtAuxErr",
+"stmtListErr","initializerList","stmtList","expressionStmt","expressionStmtErr",
+"ifPred","selectionStmt","@51","@52","whilePred","iterWhilePred","iterStmt",
+"@53","@54","iterArgList","@55","iterArgExpr","primaryIterExpr","postfixIterExpr",
+"unaryIterExpr","castIterExpr","timesIterExpr","plusIterExpr","shiftIterExpr",
+"relationalIterExpr","equalityIterExpr","bitandIterExpr","xorIterExpr","bitorIterExpr",
+"andIterExpr","orIterExpr","conditionalIterExpr","@56","@57","assignIterExpr",
+"endIter","doHeader","iterationStmt","iterationStmtErr","jumpStmt","optSemi",
+"id","newId","typeName", NULL
 };
 #endif
 
@@ -774,66 +787,67 @@ static const short yyr1[] = {     0,
    201,   202,   201,   203,   201,   205,   206,   204,   207,   207,
    207,   207,   208,   210,   209,   212,   211,   213,   215,   214,
    214,   217,   216,   216,   218,   218,   219,   220,   220,   221,
-   221,   221,   222,   222,   222,   223,   223,   223,   224,   225,
-   225,    -1,    -1,   227,   226,   228,   228,   229,   229,   230,
-   230,   231,   231,   232,   233,   233,   234,   234,   234,   234,
-   234,   235,   235,   237,   236,   238,   236,   236,   236,   236,
-   240,   239,   241,   239,   239,   239,   239,   242,   242,   244,
-   243,   246,   245,   247,   247,   247,   247,   247,   248,   249,
-   250,   250,   251,   251,   251,   251,   251,   251,   251,   251,
-   253,   252,   254,   252,   255,   255,   257,   256,   258,   256,
-   259,   260,   260,   261,   261,   262,   262,   262,   262,   262,
-   262,   262,   262,   263,   263,   264,   264,   265,   265,   265,
-   265,   265,   265,   265,   265,   266,   266,   267,   267,   267,
-   267,   267,   267,   268,   268,   268,   268,   268,   268,   268,
-   268,   268,   269,   269,   270,   270,   270,   270,   270,   270,
-   270,   270,   270,   270,   270,   271,   271,   272,   274,   273,
-   275,   275,   275,   275,   276,   276,   277,   277,   277,   277,
-   278,   278,   278,   279,   279,   279,   280,   280,   280,   280,
-   280,   281,   281,   281,   282,   282,   283,   283,   284,   284,
-   285,   286,   285,   287,   288,   287,   289,   290,   291,   289,
-   292,   292,   292,   292,   292,   292,   292,   292,   292,   292,
-   292,   292,   293,   293,   294,   294,   295,   296,   296,   296,
-   297,   298,   297,   299,   297,   300,   301,   300,   303,   302,
-   302,   302,   304,   305,   306,   307,   307,   308,   308,   309,
-   309,   309,   310,   310,   311,   311,   311,   311,   311,   312,
-   312,   312,   312,   312,   312,   312,   312,   312,   312,   312,
-   312,   312,   312,   312,   312,   312,   312,   312,   312,   312,
-   312,   312,   312,   312,   312,   312,   312,   312,   312,   312,
-   312,   312,   312,   312,   312,   312,   312,   312,   312,   312,
-   312,   312,   312,   312,   312,   313,   313,   313,   313,   314,
-   314,   314,   314,   314,   314,   314,   314,   314,   314,   314,
-   314,   314,   314,   315,   316,   316,   317,   317,   318,   318,
-   318,   319,   319,   321,   322,   320,   323,   324,   320,   320,
-   320,   325,   326,   320,   327,   328,   320,   320,   320,   320,
-   320,   329,   330,   330,   330,   331,   331,   332,   332,   333,
-   333,   333,   334,   335,   334,   334,   336,   336,   336,   337,
-   337,   338,   338,   338,   338,   339,   339,   340,   340,   341,
-   341,   342,   342,   343,   343,   343,   343,   344,   344,   345,
-   345,   346,   346,   346,   348,   347,   349,   347,   350,   350,
-   351,   351,   352,   352,   352,   353,   353,   354,   354,   354,
-   354,   354,   354,   354,   354,   354,   355,   355,   355,   355,
-   355,   355,   355,   355,   355,   355,   356,   356,   356,    -1,
-   357,   358,   359,   359,   360,   360,   360,   360,   362,   363,
-   361,   365,   364,   364,   366,   366,   366,   366,   366,   366,
-   366,   366,   366,   366,   366,   366,   366,   367,   368,   369,
-   370,   370,   371,   371,   371,   371,   371,   371,   371,   371,
-   371,   371,   371,   372,   372,   374,   373,   375,   373,   377,
-   376,   378,   376,   379,   379,   380,   381,   382,   383,   384,
-   385,   386,   386,   386,   386,   386,   386,   386,   386,   387,
-   388,   388,   388,   388,   389,   389,   390,   390,   391,   391,
-   392,   392,   393,   393,   393,   394,   395,   396,   395,   397,
-   395,   398,   399,   401,   402,   400,   403,   404,   403,   405,
-   405,   405,   405,   406,   406,   407,   407,   407,   407,   407,
-   407,   407,   407,   407,   408,   408,   408,   408,   408,   408,
-   408,   408,   408,   408,   409,   409,   410,   410,   410,   410,
-   411,   411,   411,   412,   412,   412,   413,   413,   413,   413,
-   413,   414,   414,   414,   415,   415,   416,   416,   417,   417,
-   418,   418,   419,   419,   420,   421,   422,   420,   423,   423,
-   423,   423,   423,   423,   423,   423,   423,   423,   423,   423,
-   424,   424,   425,   426,   426,   426,   427,   427,   427,   427,
-   428,   428,   428,   428,   428,   428,   428,   428,   428,   428,
-   429,   429,   430,   431,   431,   431,   431,   431,   432,   432
+   221,   221,   222,   222,   222,   223,   223,   224,   224,   224,
+   224,   224,   224,   224,   224,   225,   226,   226,    -1,    -1,
+   228,   227,   229,   229,   230,   230,   231,   231,   232,   232,
+   233,   234,   234,   235,   235,   235,   235,   235,   236,   236,
+   238,   237,   239,   237,   237,   237,   237,   241,   240,   242,
+   240,   240,   240,   240,   243,   243,   245,   244,   247,   246,
+   248,   248,   248,   248,   248,   249,   250,   251,   251,   252,
+   252,   252,   252,   252,   252,   252,   252,   254,   253,   255,
+   253,   256,   256,   258,   257,   259,   257,   260,   261,   261,
+   262,   262,   263,   263,   263,   263,   263,   263,   263,   263,
+   264,   264,   265,   265,   266,   266,   266,   266,   266,   266,
+   266,   266,   267,   267,   268,   268,   268,   268,   268,   268,
+   269,   269,   269,   269,   269,   269,   269,   269,   269,   270,
+   270,   271,   271,   271,   271,   271,   271,   271,   271,   271,
+   271,   271,   272,   272,   273,   275,   274,   276,   276,   276,
+   276,   277,   277,   278,   278,   278,   278,   279,   279,   279,
+   280,   280,   280,   281,   281,   281,   281,   281,   282,   282,
+   282,   283,   283,   284,   284,   285,   285,   286,   287,   286,
+   288,   289,   288,   290,   291,   292,   290,   293,   293,   293,
+   293,   293,   293,   293,   293,   293,   293,   293,   293,   294,
+   294,   295,   295,   296,   297,   297,   297,   298,   299,   298,
+   300,   298,   301,   302,   301,   304,   303,   303,   303,   305,
+   306,   307,   308,   308,   309,   309,   310,   310,   310,   311,
+   311,   312,   312,   312,   312,   312,   313,   313,   313,   313,
+   313,   313,   313,   313,   313,   313,   313,   313,   313,   313,
+   313,   313,   313,   313,   313,   313,   313,   313,   313,   313,
+   313,   313,   313,   313,   313,   313,   313,   313,   313,   313,
+   313,   313,   313,   313,   313,   313,   313,   313,   313,   313,
+   313,   313,   314,   314,   314,   314,   315,   315,   315,   315,
+   315,   315,   315,   315,   315,   315,   315,   315,   315,   315,
+   316,   317,   317,   318,   318,   319,   319,   319,   320,   320,
+   322,   323,   321,   324,   325,   321,   321,   321,   326,   327,
+   321,   328,   329,   321,   321,   321,   321,   321,   330,   331,
+   331,   331,   332,   332,   333,   333,   334,   334,   334,   335,
+   336,   335,   335,   337,   337,   337,   338,   338,   339,   339,
+   339,   339,   340,   340,   341,   341,   342,   342,   343,   343,
+   344,   344,   344,   344,   345,   345,   346,   346,   347,   347,
+   347,   349,   348,   350,   348,   351,   351,   352,   352,   353,
+   353,   353,   354,   354,   355,   355,   355,   355,   355,   355,
+   355,   355,   355,   356,   356,   356,   356,   356,   356,   356,
+   356,   356,   356,   357,   357,   357,    -1,   358,   359,   360,
+   360,   361,   361,   361,   361,   363,   364,   362,   366,   365,
+   365,   367,   367,   367,   367,   367,   367,   367,   367,   367,
+   367,   367,   367,   367,   368,   369,   370,   371,   371,   372,
+   372,   372,   372,   372,   372,   372,   372,   372,   372,   372,
+   373,   373,   375,   374,   376,   374,   378,   377,   379,   377,
+   380,   380,   381,   382,   383,   384,   385,   386,   387,   387,
+   387,   387,   387,   387,   387,   387,   388,   389,   389,   389,
+   389,   390,   390,   391,   391,   392,   392,   393,   393,   394,
+   394,   394,   395,   396,   397,   396,   398,   396,   399,   400,
+   402,   403,   401,   404,   405,   404,   406,   406,   406,   406,
+   407,   407,   408,   408,   408,   408,   408,   408,   408,   408,
+   408,   409,   409,   409,   409,   409,   409,   409,   409,   409,
+   409,   410,   410,   411,   411,   411,   411,   412,   412,   412,
+   413,   413,   413,   414,   414,   414,   414,   414,   415,   415,
+   415,   416,   416,   417,   417,   418,   418,   419,   419,   420,
+   420,   421,   422,   423,   421,   424,   424,   424,   424,   424,
+   424,   424,   424,   424,   424,   424,   424,   425,   425,   426,
+   427,   427,   427,   428,   428,   428,   428,   429,   429,   429,
+   429,   429,   429,   429,   429,   429,   429,   430,   430,   431,
+   432,   432,   432,   432,   432,   433,   433
 };
 
 static const short yyr2[] = {     0,
@@ -843,988 +857,1020 @@ static const short yyr2[] = {     0,
      6,     0,     6,     0,     7,     0,     0,    10,     3,     3,
      3,     2,     1,     0,     2,     0,     2,     2,     0,     4,
      0,     0,     4,     0,     2,     1,     4,     1,     1,     1,
-     1,     1,     1,     4,     5,     1,     1,     1,     1,     1,
-     1,     0,     2,     0,     2,     1,     2,     1,     2,     1,
-     2,     1,     3,     2,     1,     1,     1,     1,     1,     1,
-     1,     0,     2,     0,     6,     0,     6,     1,     1,     0,
-     0,     5,     0,     5,     1,     1,     0,     1,     0,     0,
-     3,     0,     3,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     4,     5,     1,     1,     1,     1,     3,
+     4,     2,     3,     3,     3,     1,     1,     1,     0,     2,
+     0,     2,     1,     2,     1,     2,     1,     2,     1,     3,
+     2,     1,     1,     1,     1,     1,     1,     1,     0,     2,
+     0,     6,     0,     6,     1,     1,     0,     0,     5,     0,
+     5,     1,     1,     0,     1,     0,     0,     3,     0,     3,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     0,     7,     0,     8,     1,     3,     0,     3,     0,     3,
-     2,     3,     2,     2,     1,     1,     1,     3,     4,     2,
-     3,     3,     3,     1,     1,     1,     3,     1,     1,     3,
-     4,     2,     3,     3,     3,     1,     3,     1,     1,     1,
-     3,     1,     1,     1,     4,     3,     4,     6,     5,     5,
-     2,     2,     1,     3,     1,     2,     2,     2,     2,     2,
-     2,     2,     2,     1,     1,     3,     1,     9,     0,     3,
-     4,     2,     4,     2,     1,     4,     1,     3,     3,     3,
-     1,     3,     3,     1,     3,     3,     1,     3,     3,     3,
-     3,     1,     3,     3,     1,     3,     1,     3,     1,     3,
-     1,     0,     4,     1,     0,     4,     1,     0,     0,     7,
-     1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     1,     3,     0,     1,     1,     1,     1,     1,
-     3,     0,     9,     0,    11,     2,     0,     6,     0,     7,
-     4,     4,     0,     0,     2,     1,     4,     0,     4,     1,
-     3,     4,     1,     3,     1,     1,     1,     1,     1,     2,
+     1,     1,     1,     1,     1,     1,     1,     0,     7,     0,
+     8,     1,     3,     0,     3,     0,     3,     2,     3,     2,
+     2,     1,     1,     1,     3,     4,     2,     3,     3,     3,
+     1,     1,     1,     3,     1,     1,     3,     4,     2,     3,
+     3,     3,     1,     3,     1,     1,     1,     3,     1,     1,
+     1,     4,     3,     4,     6,     5,     5,     2,     2,     1,
+     3,     1,     2,     2,     2,     2,     2,     2,     2,     2,
+     1,     1,     3,     1,     9,     0,     3,     4,     2,     4,
+     2,     1,     4,     1,     3,     3,     3,     1,     3,     3,
+     1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
+     3,     1,     3,     1,     3,     1,     3,     1,     0,     4,
+     1,     0,     4,     1,     0,     0,     7,     1,     3,     3,
+     3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
+     3,     0,     1,     1,     1,     1,     1,     3,     0,     9,
+     0,    11,     2,     0,     6,     0,     7,     4,     4,     0,
+     0,     2,     1,     4,     0,     4,     1,     3,     4,     1,
+     3,     1,     1,     1,     1,     1,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     1,     1,     1,     2,
+     2,     2,     1,     1,     1,     1,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     3,     1,     4,     1,     3,     2,     2,
-     2,     0,     1,     0,     0,    11,     0,     0,    11,     6,
-     6,     0,     0,    10,     0,     0,    10,     5,     5,     4,
-     4,     0,     1,     1,     2,     5,     3,     2,     4,     1,
-     3,     4,     6,     0,     8,     4,     1,     3,     2,     1,
-     4,     1,     1,     2,     2,     1,     2,     1,     2,     1,
-     1,     1,     2,     1,     2,     2,     3,     1,     3,     1,
-     3,     1,     1,     3,     0,     2,     0,     4,     4,     1,
-     1,     2,     1,     1,     2,     0,     1,     5,     2,     3,
-     3,     4,     3,     4,     4,     5,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     4,     4,     4,     2,
-     1,     1,     1,     2,     2,     7,     6,     2,     0,     0,
-    10,     0,     6,     1,     1,     1,     1,     2,     1,     1,
-     1,     1,     1,     1,     1,     3,     1,     2,     2,     2,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     3,     1,     1,     2,     2,     0,     4,     0,     5,     0,
-     3,     0,     4,     3,     2,     3,     0,     0,     0,     0,
-     0,     1,     2,     2,     3,     2,     3,     3,     4,     2,
-     2,     3,     3,     4,     1,     2,     1,     2,     1,     2,
-     1,     2,     1,     2,     1,     4,     2,     0,     5,     0,
-     6,     4,     4,     0,     0,    10,     1,     0,     4,     1,
-     1,     1,     1,     1,     3,     1,     4,     3,     4,     6,
-     5,     5,     2,     2,     1,     2,     2,     2,     2,     2,
-     2,     2,     2,     1,     1,     4,     1,     3,     3,     3,
-     1,     3,     3,     1,     3,     3,     1,     3,     3,     3,
-     3,     1,     3,     3,     1,     3,     1,     3,     1,     3,
-     1,     3,     1,     3,     1,     0,     0,     7,     1,     3,
-     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-     1,     0,     1,     2,     7,     2,     2,     7,     6,     2,
-     3,     2,     3,     2,     3,     3,     3,     3,     2,     3,
-     0,     1,     1,     1,     1,     1,     1,     1,     1,     1
+     3,     1,     4,     1,     3,     2,     2,     2,     0,     1,
+     0,     0,    11,     0,     0,    11,     6,     6,     0,     0,
+    10,     0,     0,    10,     5,     5,     4,     4,     0,     1,
+     1,     2,     5,     3,     2,     4,     1,     3,     4,     6,
+     0,     8,     4,     1,     3,     2,     1,     4,     1,     1,
+     2,     2,     1,     2,     1,     2,     1,     1,     1,     2,
+     1,     2,     2,     3,     1,     3,     1,     3,     1,     1,
+     3,     0,     2,     0,     4,     4,     1,     1,     2,     1,
+     1,     2,     0,     1,     5,     2,     3,     3,     4,     3,
+     4,     4,     5,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     4,     4,     4,     2,     1,     1,     1,
+     2,     2,     7,     6,     2,     0,     0,    10,     0,     6,
+     1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+     1,     1,     3,     1,     2,     2,     2,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     3,     1,     1,
+     2,     2,     0,     4,     0,     5,     0,     3,     0,     4,
+     3,     2,     3,     0,     0,     0,     0,     0,     1,     2,
+     2,     3,     2,     3,     3,     4,     2,     2,     3,     3,
+     4,     1,     2,     1,     2,     1,     2,     1,     2,     1,
+     2,     1,     4,     2,     0,     5,     0,     6,     4,     4,
+     0,     0,    10,     1,     0,     4,     1,     1,     1,     1,
+     1,     3,     1,     4,     3,     4,     6,     5,     5,     2,
+     2,     1,     2,     2,     2,     2,     2,     2,     2,     2,
+     1,     1,     4,     1,     3,     3,     3,     1,     3,     3,
+     1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
+     3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
+     3,     1,     0,     0,     7,     1,     3,     3,     3,     3,
+     3,     3,     3,     3,     3,     3,     3,     1,     0,     1,
+     2,     7,     2,     2,     7,     6,     2,     3,     2,     3,
+     2,     3,     3,     3,     3,     2,     3,     0,     1,     1,
+     1,     1,     1,     1,     1,     1,     1
 };
 
 static const short yydefact[] = {     0,
-    11,   414,   382,   259,   382,    14,     0,     0,     0,     0,
-   273,   273,   286,   285,   287,   288,   289,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   337,   338,   339,   336,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   382,   382,   382,   382,   382,   382,
-   382,   382,   382,   382,   273,   653,   654,   658,   655,   656,
-   659,     0,     3,     6,     7,   406,     8,     9,   382,    43,
-   651,    10,   258,   260,     0,   362,   362,   382,   362,   382,
-   355,   382,     0,   382,   135,   273,   657,    20,   382,   410,
-   411,   412,   415,   416,   276,   273,   273,   269,   382,   660,
-   382,   382,   658,     0,   503,   273,   510,     0,     0,     0,
-   633,     0,     0,     0,     0,   273,   543,     0,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,     0,    42,     0,
-     0,     0,     0,     0,     0,   273,   173,   169,   172,   170,
-   554,   174,   185,   205,   195,   194,   207,   211,   214,   217,
-   222,   225,   227,   229,   231,   234,   237,   241,   253,   545,
-   199,     0,     0,   535,   493,   494,   495,   496,     0,     0,
-   497,   273,   498,     0,   499,     0,   500,   502,   168,     0,
-   487,     0,   541,     0,   517,   474,     0,     0,     0,   483,
-     0,   484,   463,   482,   479,   480,   475,   476,   477,     0,
-     0,   481,     0,     0,     0,   485,   462,     0,   290,   291,
-   292,   293,   298,   300,   299,   303,   304,   315,   317,   318,
-   316,   301,   302,   294,   295,   296,   297,   312,   313,   310,
-   314,   305,   306,   309,   307,   308,   321,   323,   328,   311,
-   324,   325,   326,   327,   319,   320,   322,   329,   330,   333,
-   334,   331,   332,   340,   342,   341,   343,   344,   345,   346,
-   347,   348,   349,   335,     4,   273,     0,   137,   141,   537,
-   382,   382,   652,     5,   382,   363,   359,   360,   353,   361,
-     0,   273,   273,   351,   273,   273,     0,   352,   407,   350,
-   413,   417,   382,     0,   275,   382,     0,   266,   273,   651,
-    16,    18,     0,   382,   273,    28,   425,   273,   169,   172,
-   205,   257,   506,   168,     0,   273,   273,   273,   273,     0,
-   642,   644,   649,     0,     0,   382,   431,     0,     0,   188,
-   193,   192,   191,   190,   189,     0,   273,   186,   187,   273,
-     0,     0,     0,     0,     0,   273,   512,   273,     0,     0,
-     0,   505,   456,   273,   447,   448,   449,   450,     0,   451,
-   452,   273,   454,   273,   453,   455,   517,   273,   273,   181,
-   182,     0,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   232,
-   238,   235,   544,   273,     0,   640,    39,     0,   518,   536,
-   547,   637,     0,   504,   273,     0,     0,     0,   542,    40,
-   464,   468,   478,   489,   490,   488,     0,     0,    41,    22,
-   273,   425,   382,   273,   517,   538,   273,   261,   136,   382,
-     0,   357,     0,   382,     0,   382,     0,   273,   273,   272,
-   273,   271,   267,   382,     0,   273,     0,   382,   273,    19,
-   422,     0,     0,   408,   423,   273,     0,     0,   511,     0,
-   550,     0,   256,     0,   641,   650,   171,   273,   273,     0,
-   433,   432,   434,   273,   501,   273,     0,   645,   646,   647,
-   648,   643,   508,     0,     0,     0,     0,     0,   636,   382,
-   515,   634,     0,     0,   176,     0,   183,     0,     0,     0,
-   242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-   252,   208,   209,   210,   213,   212,   215,   216,   218,   219,
-   220,   221,   223,   224,   226,   228,   230,   273,   273,   273,
-   254,   273,   273,   200,   531,   172,   535,     0,   382,   516,
-   548,     0,     0,   486,   472,     0,     0,    24,     0,   522,
-   273,   539,   138,   382,   273,   382,   517,   140,   273,   262,
-   356,   273,   372,     0,   380,   375,     0,   381,     0,   397,
-   400,   394,   396,   277,   273,   273,   651,    15,    30,   273,
-   425,   273,    17,   409,   418,   420,    36,   427,   382,   426,
-   430,   507,   546,     0,   552,   273,   354,   439,     0,   425,
-   435,   273,     0,   206,   382,   273,     0,   513,   514,     0,
-     0,     0,   530,     0,   555,   273,   177,   175,   273,   273,
-   233,     0,   236,   273,   202,   273,   204,   532,   533,   273,
-   273,   273,   553,   273,   273,   382,    44,    26,   523,   526,
-   273,   273,   524,   273,   540,     0,   264,   273,   358,   378,
-   519,   364,   379,   519,   367,   273,   399,   273,     0,     0,
-   273,   273,   273,     0,    32,     0,   273,     0,    74,   424,
-   273,   436,   273,     0,   440,   443,   273,     0,   441,     0,
-   425,     0,     0,   509,   457,   458,   459,   273,   273,   184,
-   179,   180,   239,     0,     0,   534,   549,     0,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,     0,   169,   172,
-   170,   185,   205,   194,   211,   214,   217,   222,   225,   227,
-   229,   231,   234,     0,   558,   557,   566,   575,   585,   587,
-   591,   594,   597,   602,   605,   607,   609,   611,   613,   615,
-   619,   560,   168,     0,    23,    46,   100,    44,   527,   528,
-   273,   525,    21,   273,   278,   382,   370,   519,   382,   371,
-   519,   393,   398,   273,     0,   270,   273,   280,   268,   273,
-     0,   382,    74,    34,     0,   419,   421,    37,   107,   428,
-   402,     0,   273,   436,   403,   437,   551,   469,     0,   444,
-   442,   445,     0,     0,   178,     0,   558,   273,   201,   203,
-   639,     0,     0,   188,   193,   192,   191,   190,   189,   186,
-   187,   273,   273,   273,   181,   182,     0,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
-   273,   273,   273,   273,   232,   616,   235,   473,     0,   467,
-    25,    54,    94,   110,    98,   114,   115,   116,   117,   118,
-   121,   122,    45,   100,    76,    99,   382,   382,    80,    46,
-   529,   273,     0,   384,   382,   382,   383,   382,   382,   382,
-   401,   273,   283,     0,   278,    12,    31,    33,    74,    29,
-   651,   101,   112,   105,    75,   107,    78,   106,   425,   429,
-   404,   405,   273,   438,   446,     0,   197,     0,   517,   240,
-   638,   171,   273,     0,   176,     0,     0,     0,     0,   620,
-   621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
-   208,   209,   210,   213,   212,   215,   216,   218,   219,   220,
-   221,   223,   224,   226,   228,   230,   612,   273,   614,   273,
-   466,    47,    51,     0,   382,    92,   651,    77,   131,     0,
-    81,    27,   278,   273,   382,     0,   273,   385,   373,   382,
-   376,   382,   395,   281,   273,   651,    35,     0,   382,    92,
-   651,    79,   273,   470,   273,     0,   635,   632,   206,   273,
-   177,   175,   273,   273,     0,   559,    48,     0,     0,   382,
-    87,    88,    89,    90,    91,   651,    82,    92,     0,     0,
-     0,   147,   111,   156,   651,     0,   146,     0,   123,   128,
-   127,   126,   125,   124,   129,   130,   133,     0,   263,   273,
-   387,   273,   273,   382,   390,     0,   365,     0,   368,   282,
-   284,     0,    38,   651,   651,   113,   651,   145,   273,     0,
-   198,   196,   631,   518,     0,   179,   180,   617,     0,     0,
-    58,    59,    67,    68,     0,    56,    69,     0,    63,     0,
-    66,     0,    92,     0,    93,    86,    84,    85,     0,   150,
-     0,     0,     0,     0,     0,   143,     0,     0,   159,   166,
-   651,   158,     0,   273,   279,   273,   273,     0,   388,   273,
-   374,     0,   377,     0,    13,   109,   109,   144,   471,   556,
-   178,   273,     0,     0,    53,    55,    61,    60,    62,     0,
-     0,   109,    83,   109,   151,   148,   155,   154,     0,   152,
-   153,   157,   142,     0,   162,     0,     0,     0,     0,     0,
-   651,   265,   391,   382,   386,   273,   366,   369,   102,   108,
-   104,   618,    50,    71,    70,     0,     0,     0,    95,    97,
-   149,   163,   160,     0,   164,   165,   167,   120,   273,     0,
-   389,   392,     0,    57,    64,   161,   132,   119,   273,    65,
-   134,     0,     0,     0
+    11,   421,   389,   266,   389,    14,     0,     0,     0,     0,
+   280,   280,   293,   292,   294,   295,   296,   280,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,   280,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,   280,   280,   280,
+   280,   280,   280,   344,   345,   346,   343,   280,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,   280,   280,   280,
+   280,   280,   280,   280,   389,   389,   389,   389,   389,   389,
+   389,   389,   389,   389,   280,   660,   661,   665,   662,   663,
+   666,     0,     3,     6,     7,   413,     8,     9,   389,    43,
+   658,    10,   265,   267,     0,   369,   369,   389,   369,   389,
+   362,   389,     0,   389,   142,   280,   664,    20,   389,   417,
+   418,   419,   422,   423,   283,   280,   280,   276,   389,   667,
+   389,   389,   665,     0,   510,   280,   517,     0,     0,     0,
+   640,     0,     0,     0,     0,   280,   550,     0,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,     0,    42,     0,
+     0,     0,     0,     0,     0,   280,   180,   176,   179,   177,
+   561,   181,   192,   212,   202,   201,   214,   218,   221,   224,
+   229,   232,   234,   236,   238,   241,   244,   248,   260,   552,
+   206,     0,     0,   542,   500,   501,   502,   503,     0,     0,
+   504,   280,   505,     0,   506,     0,   507,   509,   175,     0,
+   494,     0,   548,     0,   524,   481,     0,     0,     0,   490,
+     0,   491,   470,   489,   486,   487,   482,   483,   484,     0,
+     0,   488,     0,     0,     0,   492,   469,     0,   297,   298,
+   299,   300,   305,   307,   306,   310,   311,   322,   324,   325,
+   323,   308,   309,   301,   302,   303,   304,   319,   320,   317,
+   321,   312,   313,   316,   314,   315,   328,   330,   335,   318,
+   331,   332,   333,   334,   326,   327,   329,   336,   337,   340,
+   341,   338,   339,   347,   349,   348,   350,   351,   352,   353,
+   354,   355,   356,   342,     4,   280,     0,   144,   148,   544,
+   389,   389,   659,     5,   389,   370,   366,   367,   360,   368,
+     0,   280,   280,   358,   280,   280,     0,   359,   414,   357,
+   420,   424,   389,     0,   282,   389,     0,   273,   280,   658,
+    16,    18,     0,   389,   280,    28,   432,   280,   176,   179,
+   212,   264,   513,   175,     0,   280,   280,   280,   280,     0,
+   649,   651,   656,     0,     0,   389,   438,     0,     0,   195,
+   200,   199,   198,   197,   196,     0,   280,   193,   194,   280,
+     0,     0,     0,     0,     0,   280,   519,   280,     0,     0,
+     0,   512,   463,   280,   454,   455,   456,   457,     0,   458,
+   459,   280,   461,   280,   460,   462,   524,   280,   280,   188,
+   189,     0,   280,   280,   280,   280,   280,   280,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,   280,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,   280,   280,   239,
+   245,   242,   551,   280,     0,   647,    39,     0,   525,   543,
+   554,   644,     0,   511,   280,     0,     0,     0,   549,    40,
+   471,   475,   485,   496,   497,   495,     0,     0,    41,    22,
+   280,   432,   389,   280,   524,   545,   280,   268,   143,   389,
+     0,   364,     0,   389,     0,   389,     0,   280,   280,   279,
+   280,   278,   274,   389,     0,   280,     0,   389,   280,    19,
+   429,     0,     0,   415,   430,   280,     0,     0,   518,     0,
+   557,     0,   263,     0,   648,   657,   178,   280,   280,     0,
+   440,   439,   441,   280,   508,   280,     0,   652,   653,   654,
+   655,   650,   515,     0,     0,     0,     0,     0,   643,   389,
+   522,   641,     0,     0,   183,     0,   190,     0,     0,     0,
+   249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+   259,   215,   216,   217,   220,   219,   222,   223,   225,   226,
+   227,   228,   230,   231,   233,   235,   237,   280,   280,   280,
+   261,   280,   280,   207,   538,   179,   542,     0,   389,   523,
+   555,     0,     0,   493,   479,     0,     0,    24,     0,   529,
+   280,   546,   145,   389,   280,   389,   524,   147,   280,   269,
+   363,   280,   379,     0,   387,   382,     0,   388,     0,   404,
+   407,   401,   403,   284,   280,   280,   658,    15,    30,   280,
+   432,   280,    17,   416,   425,   427,    36,   434,   389,   433,
+   437,   514,   553,     0,   559,   280,   361,   446,     0,   432,
+   442,   280,     0,   213,   389,   280,     0,   520,   521,     0,
+     0,     0,   537,     0,   562,   280,   184,   182,   280,   280,
+   240,     0,   243,   280,   209,   280,   211,   539,   540,   280,
+   280,   280,   560,   280,   280,   389,    44,    26,   530,   533,
+   280,   280,   531,   280,   547,     0,   271,   280,   365,   385,
+   526,   371,   386,   526,   374,   280,   406,   280,     0,     0,
+   280,   280,   280,     0,    32,     0,   280,     0,    81,   431,
+   280,   443,   280,     0,   447,   450,   280,     0,   448,     0,
+   432,     0,     0,   516,   464,   465,   466,   280,   280,   191,
+   186,   187,   246,     0,     0,   541,   556,     0,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,     0,   176,   179,
+   177,   192,   212,   201,   218,   221,   224,   229,   232,   234,
+   236,   238,   241,     0,   565,   564,   573,   582,   592,   594,
+   598,   601,   604,   609,   612,   614,   616,   618,   620,   622,
+   626,   567,   175,     0,    23,    46,   107,    44,   534,   535,
+   280,   532,    21,   280,   285,   389,   377,   526,   389,   378,
+   526,   400,   405,   280,     0,   277,   280,   287,   275,   280,
+     0,   389,    81,    34,     0,   426,   428,    37,   114,   435,
+   409,     0,   280,   443,   410,   444,   558,   476,     0,   451,
+   449,   452,     0,     0,   185,     0,   565,   280,   208,   210,
+   646,     0,     0,   195,   200,   199,   198,   197,   196,   193,
+   194,   280,   280,   280,   188,   189,     0,   280,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,   280,   280,   280,
+   280,   280,   280,   280,   280,   280,   280,   280,   280,   280,
+   280,   280,   280,   280,   239,   623,   242,   480,     0,   474,
+    25,    54,   101,   117,   105,   121,   122,   123,   124,   125,
+   128,   129,    45,   107,    83,   106,   389,   389,    87,    46,
+   536,   280,     0,   391,   389,   389,   390,   389,   389,   389,
+   408,   280,   290,     0,   285,    12,    31,    33,    81,    29,
+   658,   108,   119,   112,    82,   114,    85,   113,   432,   436,
+   411,   412,   280,   445,   453,     0,   204,     0,   524,   247,
+   645,   178,   280,     0,   183,     0,     0,     0,     0,   627,
+   628,   629,   630,   631,   632,   633,   634,   635,   636,   637,
+   215,   216,   217,   220,   219,   222,   223,   225,   226,   227,
+   228,   230,   231,   233,   235,   237,   619,   280,   621,   280,
+   473,    47,    51,     0,   389,    99,   658,    84,   138,     0,
+    88,    27,   285,   280,   389,     0,   280,   392,   380,   389,
+   383,   389,   402,   288,   280,   658,    35,     0,   389,    99,
+   658,    86,   280,   477,   280,     0,   642,   639,   213,   280,
+   184,   182,   280,   280,     0,   566,    48,     0,     0,   389,
+    94,    95,    96,    97,    98,   658,    89,    99,     0,     0,
+     0,   154,   118,   163,   658,     0,   153,     0,   130,   135,
+   134,   133,   132,   131,   136,   137,   140,     0,   270,   280,
+   394,   280,   280,   389,   397,     0,   372,     0,   375,   289,
+   291,     0,    38,   658,   658,   120,   658,   152,   280,     0,
+   205,   203,   638,   525,     0,   186,   187,   624,     0,     0,
+     0,    58,    59,    69,    67,     0,    56,    76,     0,    63,
+    66,     0,    68,     0,    99,     0,   100,    93,    91,    92,
+     0,   157,     0,     0,     0,     0,     0,   150,     0,     0,
+   166,   173,   658,   165,     0,   280,   286,   280,   280,     0,
+   395,   280,   381,     0,   384,     0,    13,   116,   116,   151,
+   478,   563,   185,   280,     0,     0,    66,     0,    72,    53,
+    55,    61,    60,    62,     0,     0,     0,     0,     0,   116,
+    90,   116,   158,   155,   162,   161,     0,   159,   160,   164,
+   149,     0,   169,     0,     0,     0,     0,     0,   658,   272,
+   398,   389,   393,   280,   373,   376,   109,   115,   111,   625,
+    50,    78,    77,     0,    73,     0,     0,    70,     0,    74,
+    75,     0,   102,   104,   156,   170,   167,     0,   171,   172,
+   174,   127,   280,     0,   396,   399,     0,    57,    71,    64,
+   168,   139,   126,   280,    65,   141,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1212,
+static const short yydefgoto[] = {  1227,
     82,    83,    84,    85,   122,   320,   321,    86,   667,   778,
    322,   803,   919,    87,   699,   921,   904,    89,   776,   777,
-   881,   882,   982,  1027,  1028,   983,   984,  1095,  1096,  1097,
-  1150,  1098,  1099,  1100,  1186,   808,   809,   893,   925,   894,
-  1036,  1037,  1107,  1038,  1039,   895,   985,   986,   927,  1009,
-  1010,  1179,  1180,   987,   928,  1011,   897,  1209,  1199,   898,
-  1057,   899,  1048,  1123,    90,   289,   453,   455,    91,  1043,
-  1076,  1044,  1159,  1045,  1120,  1121,   162,   163,   526,   164,
-   936,   165,   166,   425,   564,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,   558,   177,   560,   178,   559,
-   828,   179,   207,   494,   333,   290,    93,   678,   784,   115,
-   606,    94,   316,   181,   287,   116,   117,   903,   799,   914,
-    96,    97,    98,    99,   347,   291,   461,   101,   297,   102,
-   788,  1132,   791,  1134,   681,  1066,   684,  1068,   103,   906,
-   907,  1063,  1064,   104,   689,   599,   600,   813,   119,   483,
-   112,   113,   106,   614,   615,   484,   485,   486,   701,   620,
-   348,   819,   815,   503,   372,   373,   208,   228,   209,   210,
-   374,   933,  1080,   212,   664,   213,   214,   215,   216,   183,
-   430,   375,   376,   488,   637,   377,   335,   514,   378,   188,
-   379,   570,   786,   999,   221,   583,   521,   429,   190,   584,
-   585,   380,   191,   192,   381,   661,   624,   382,   224,   383,
-   387,   719,   755,   879,   756,   757,   758,   759,   760,   761,
-   762,   763,   764,   765,   766,   767,   768,   769,   770,   771,
-   978,  1142,   772,  1084,   384,   385,   197,   386,   294,   334,
-   200,   109
+   881,   882,   982,  1027,  1028,   983,   984,  1096,  1097,  1098,
+  1155,  1099,  1100,  1101,  1102,  1194,   808,   809,   893,   925,
+   894,  1036,  1037,  1109,  1038,  1039,   895,   985,   986,   927,
+  1009,  1010,  1187,  1188,   987,   928,  1011,   897,  1224,  1213,
+   898,  1057,   899,  1048,  1125,    90,   289,   453,   455,    91,
+  1043,  1076,  1044,  1167,  1045,  1122,  1123,   162,   163,   526,
+   164,   936,   165,   166,   425,   564,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,   176,   558,   177,   560,   178,
+   559,   828,   179,   207,   494,   333,   290,    93,   678,   784,
+   115,   606,    94,   316,   181,   287,   116,   117,   903,   799,
+   914,    96,    97,    98,    99,   347,   291,   461,   101,   297,
+   102,   788,  1134,   791,  1136,   681,  1066,   684,  1068,   103,
+   906,   907,  1063,  1064,   104,   689,   599,   600,   813,   119,
+   483,   112,   113,   106,   614,   615,   484,   485,   486,   701,
+   620,   348,   819,   815,   503,   372,   373,   208,   228,   209,
+   210,   374,   933,  1080,   212,   664,   213,   214,   215,   216,
+   183,   430,   375,   376,   488,   637,   377,   335,   514,   378,
+   188,   379,   570,   786,   999,   221,   583,   521,   429,   190,
+   584,   585,   380,   191,   192,   381,   661,   624,   382,   224,
+   383,   387,   719,   755,   879,   756,   757,   758,   759,   760,
+   761,   762,   763,   764,   765,   766,   767,   768,   769,   770,
+   771,   978,  1144,   772,  1084,   384,   385,   197,   386,   294,
+   334,   200,   109
 };
 
-static const short yypact[] = {  1967,
--32768,   135,  5675,-32768,  6518,-32768,   578,  1881,  3275,  3275,
+static const short yypact[] = {  2240,
+-32768,   108,  6007,-32768,  6677,-32768,   697,  3211,  3591,  3591,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   396,-32768,-32768,
--32768,  2143,-32768,-32768,-32768,   107,-32768,-32768,  5291,-32768,
-   184,-32768,-32768,-32768,    89,  6353,  6353,-32768,  6353,   206,
-    35,-32768,   969,-32768,-32768,   578,-32768,-32768,-32768,-32768,
--32768,-32768,   135,-32768,-32768,   310,-32768,   206,-32768,-32768,
--32768,  5675,-32768,   340,-32768,  5837,-32768,   386,   394,   413,
--32768,   423,   578,   330,   455,  1693,-32768,  2517,  5837,  5837,
-  5837,  5837,  5837,  5837,-32768,  5848,  5848,   434,-32768,   479,
-   538,   544,   560,   463,   171,  4738,-32768,   478,   504,-32768,
-   556,-32768,   837,  1023,-32768,-32768,-32768,  1014,   481,   568,
-   404,   793,   557,   549,   554,   571,   111,-32768,-32768,   297,
--32768,  3318,   597,   607,-32768,-32768,-32768,-32768,   663,  2938,
--32768,  4738,-32768,  3318,-32768,  3318,-32768,-32768,   688,   704,
--32768,   710,-32768,  2706,   556,   706,   336,   651,  3085,-32768,
-  3275,-32768,-32768,-32768,  6113,-32768,-32768,-32768,-32768,   732,
-   739,-32768,  3275,  3275,  3318,-32768,-32768,   662,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,   431,-32768,-32768,
+-32768,  2416,-32768,-32768,-32768,   355,-32768,-32768,  5623,-32768,
+   114,-32768,-32768,-32768,    74,  6512,  6512,-32768,  6512,   140,
+   149,-32768,   766,-32768,-32768,   697,-32768,-32768,-32768,-32768,
+-32768,-32768,   108,-32768,-32768,   191,-32768,   140,-32768,-32768,
+-32768,  6007,-32768,   217,-32768,  4477,-32768,   225,   234,   253,
+-32768,   268,   697,   306,   319,   762,-32768,  2790,  4477,  4477,
+  4477,  4477,  4477,  4477,-32768,  4703,  4703,   398,-32768,   393,
+   425,   434,   445,   413,   219,  5070,-32768,   450,   456,-32768,
+   486,-32768,   905,   898,-32768,-32768,-32768,  1049,   423,   577,
+   723,   752,   488,   508,   487,   521,    67,-32768,-32768,   325,
+-32768,  3738,   468,   502,-32768,-32768,-32768,-32768,   615,  3358,
+-32768,  5070,-32768,  3738,-32768,  3738,-32768,-32768,   580,   636,
+-32768,   620,-32768,  2979,   486,   647,   344,   599,  3401,-32768,
+  3591,-32768,-32768,-32768,  6272,-32768,-32768,-32768,-32768,   656,
+   676,-32768,  3591,  3591,  3738,-32768,-32768,   629,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   737,   756,-32768,-32768,-32768,
-   206,  5134,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   768,   666,-32768,-32768,   578,   578,    25,-32768,   107,-32768,
--32768,-32768,-32768,   771,-32768,-32768,   776,   774,   666,   184,
--32768,   129,   775,-32768,   578,-32768,    69,  5837,-32768,-32768,
--32768,-32768,-32768,-32768,   785,  5837,  5837,  5837,  1837,   792,
--32768,-32768,-32768,   411,   283,  5982,   493,   796,   805,-32768,
--32768,-32768,-32768,-32768,-32768,   814,  5837,-32768,-32768,  5837,
-   844,   846,   865,   874,   876,  5837,-32768,  1338,   658,   658,
-   658,-32768,-32768,  4738,-32768,-32768,-32768,-32768,   836,-32768,
--32768,  4738,-32768,  4738,-32768,-32768,-32768,  4102,  5837,-32768,
--32768,   179,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,
-  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,
-  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,-32768,
--32768,-32768,-32768,  5837,   905,-32768,-32768,  2328,-32768,-32768,
-   877,-32768,   895,-32768,  5837,   428,   872,   891,-32768,-32768,
--32768,-32768,  6113,-32768,-32768,-32768,  2895,   963,-32768,-32768,
-  5837,   374,  3465,   666,   907,-32768,   666,-32768,   462,  6518,
-   893,   902,   934,   972,   995,   972,   578,  1033,   666,-32768,
-   666,-32768,-32768,-32768,   911,   935,  1003,-32768,   666,   129,
--32768,   578,  1029,-32768,  1044,   578,   154,  1039,-32768,   194,
-  1049,   256,  1049,  1056,-32768,-32768,-32768,-32768,  4328,  1067,
-   224,-32768,   264,  5837,-32768,-32768,  1088,-32768,-32768,-32768,
--32768,-32768,-32768,  1101,  1096,   939,   945,   970,-32768,  3465,
--32768,-32768,  1143,  1131,-32768,   382,-32768,   293,   578,   578,
+-32768,-32768,-32768,-32768,-32768,   687,   708,-32768,-32768,-32768,
+   140,  5466,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   722,   477,-32768,-32768,   697,   697,    59,-32768,   355,-32768,
+-32768,-32768,-32768,   749,-32768,-32768,   758,   724,   477,   114,
+-32768,   540,   759,-32768,   697,-32768,   255,  4477,-32768,-32768,
+-32768,-32768,-32768,-32768,   768,  4477,  4477,  4477,   797,   770,
+-32768,-32768,-32768,   516,   464,  6141,   296,   786,   800,-32768,
+-32768,-32768,-32768,-32768,-32768,   816,  4477,-32768,-32768,  4477,
+   828,   838,   879,   886,   891,  4477,-32768,  1718,   693,   693,
+   693,-32768,-32768,  5070,-32768,-32768,-32768,-32768,   892,-32768,
+-32768,  5070,-32768,  5070,-32768,-32768,-32768,  1451,  4477,-32768,
+-32768,    96,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,
+  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,
+  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,-32768,
+-32768,-32768,-32768,  4477,   716,-32768,-32768,  2601,-32768,-32768,
+   910,-32768,   913,-32768,  4477,   505,   901,   920,-32768,-32768,
+-32768,-32768,  6272,-32768,-32768,-32768,  3168,   954,-32768,-32768,
+  4477,    68,  3840,   477,   949,-32768,   477,-32768,   570,  6677,
+   896,   972,   992,   998,  1006,   998,   697,  1035,   477,-32768,
+   477,-32768,-32768,-32768,   912,  1025,  1037,-32768,   477,   540,
+-32768,   697,  1047,-32768,  1045,   697,   279,  1059,-32768,   333,
+  1079,   385,  1079,  1069,-32768,-32768,-32768,-32768,  2008,  1078,
+   587,-32768,   627,  4477,-32768,-32768,  1085,-32768,-32768,-32768,
+-32768,-32768,-32768,  1109,  1116,   948,   957,   963,-32768,  3840,
+-32768,-32768,  1139,  1134,-32768,   412,-32768,    99,   697,   697,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1014,  1014,   481,   481,   568,   568,
-   568,   568,   404,   404,   793,   557,   549,  5837,  5837,  5837,
--32768,  5868,  5879,-32768,-32768,  5523,-32768,  3128,  3649,-32768,
--32768,  1133,   542,-32768,-32768,  1134,  1135,-32768,  1136,-32768,
-  4017,-32768,-32768,  3833,  4060,-32768,   907,-32768,-32768,  1137,
--32768,-32768,  1144,  1147,-32768,  1148,  1150,-32768,   637,-32768,
-  1149,-32768,-32768,-32768,   310,-32768,   183,-32768,-32768,  5837,
-   381,   666,-32768,-32768,  1153,-32768,-32768,  1165,  6518,-32768,
--32768,-32768,-32768,  1152,-32768,  1837,-32768,-32768,  1151,   690,
-   264,  4554,  1155,-32768,-32768,-32768,  1161,-32768,-32768,  1097,
-  1110,  1115,-32768,  1163,-32768,  5837,-32768,-32768,-32768,-32768,
-   554,  1008,   571,  5837,-32768,  5837,-32768,-32768,-32768,  4243,
-  4738,  5837,-32768,  5899,  5837,-32768,-32768,-32768,-32768,-32768,
-  4286,  4469,-32768,  4512,-32768,  1164,-32768,-32768,-32768,-32768,
--32768,  1184,-32768,-32768,  1185,-32768,   578,-32768,   578,  1188,
-  2139,-32768,-32768,  1181,-32768,  1186,-32768,    81,-32768,-32768,
-   578,   734,  4738,  1192,-32768,-32768,   317,  1187,-32768,  1189,
-    98,  1194,  1198,-32768,-32768,-32768,-32768,  5837,  5899,-32768,
--32768,-32768,-32768,  1200,  1201,-32768,-32768,   604,  5837,  5837,
-  5837,  5837,  5837,  5837,  5837,  5848,  5848,  1193,   766,   784,
-   794,   956,  1692,   797,  1042,  1000,   990,   570,  1047,  1190,
-  1174,  1191,  1172,   254,  1203,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  1049,  1049,   423,   423,   577,   577,
+   577,   577,   723,   723,   752,   488,   508,  4477,  4477,  4477,
+-32768,  4929,  4940,-32768,-32768,  5855,-32768,  3548,  4024,-32768,
+-32768,  1137,   426,-32768,-32768,  1138,  1140,-32768,  1141,-32768,
+  2110,-32768,-32768,  4208,  4392,-32768,   949,-32768,-32768,  1146,
+-32768,-32768,  1144,  1151,-32768,  1152,  1157,-32768,   843,-32768,
+  1148,-32768,-32768,-32768,   191,-32768,   406,-32768,-32768,  4477,
+   358,   477,-32768,-32768,  1156,-32768,-32768,  1176,  6677,-32768,
+-32768,-32768,-32768,  1158,-32768,   797,-32768,-32768,  1155,   556,
+   627,  2412,  1160,-32768,-32768,-32768,  1164,-32768,-32768,  1099,
+  1100,  1102,-32768,  1165,-32768,  4477,-32768,-32768,-32768,-32768,
+   487,   914,   521,  4477,-32768,  4477,-32768,-32768,-32768,  4435,
+  5070,  4477,-32768,  5178,  4477,-32768,-32768,-32768,-32768,-32768,
+  4618,  4661,-32768,  4844,-32768,  1166,-32768,-32768,-32768,-32768,
+-32768,  1175,-32768,-32768,  1177,-32768,   697,-32768,   697,  1178,
+  2040,-32768,-32768,  1171,-32768,  1180,-32768,   348,-32768,-32768,
+   697,   614,  5070,  1182,-32768,-32768,   137,  1181,-32768,  1183,
+   109,  1186,  1184,-32768,-32768,-32768,-32768,  4477,  5178,-32768,
+-32768,-32768,-32768,  1187,  1189,-32768,-32768,   452,  4477,  4477,
+  4477,  4477,  4477,  4477,  4477,  4703,  4703,  1179,   504,   575,
+   582,  1077,  1033,   604,  1081,   918,   981,   850,  1024,  1173,
+  1169,  1185,  1161,    90,  1190,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   815,   857,-32768,-32768,  1024,-32768,-32768,-32768,
-  4695,-32768,-32768,-32768,-32768,  6440,-32768,-32768,  6440,-32768,
--32768,-32768,-32768,  5837,  1099,-32768,  2139,-32768,-32768,  2139,
-  1142,-32768,-32768,-32768,  1208,-32768,-32768,-32768,  1457,-32768,
-   107,  1210,-32768,   590,-32768,   264,-32768,-32768,  1211,-32768,
--32768,-32768,  1214,   578,-32768,   868,  1216,  5837,-32768,-32768,
-  1217,   879,  1219,   886,   888,   899,   912,   913,   915,   918,
-   920,  5837,  5004,  5837,   942,   943,   214,  5837,  5837,  5837,
-  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,
-  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,  5837,
-  5837,  5837,  5837,  5837,  5837,-32768,  5837,-32768,  1221,  1227,
--32768,  1069,    49,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1021,-32768,-32768,-32768,-32768,  1113,-32768,
--32768,  2139,   484,-32768,   206,  5369,-32768,  6440,  5369,  6440,
--32768,-32768,-32768,  1108,-32768,-32768,-32768,-32768,-32768,-32768,
-   184,   469,-32768,-32768,-32768,  1040,-32768,-32768,   548,-32768,
--32768,-32768,  5550,-32768,-32768,   516,-32768,  1229,   907,-32768,
--32768,   944,  5837,  1228,   950,   951,   510,   578,   578,-32768,
+-32768,-32768,   612,   660,-32768,-32768,  1326,-32768,-32768,-32768,
+  4887,-32768,-32768,-32768,-32768,  6599,-32768,-32768,  6599,-32768,
+-32768,-32768,-32768,  4477,  1054,-32768,  2040,-32768,-32768,  2040,
+  1123,-32768,-32768,-32768,  1193,-32768,-32768,-32768,  1429,-32768,
+   355,  1195,-32768,   539,-32768,   627,-32768,-32768,  1196,-32768,
+-32768,-32768,  1197,   697,-32768,   695,  1201,  4477,-32768,-32768,
+  1202,   729,  1205,   782,   798,   830,   853,   874,   885,   893,
+   895,  4477,  1633,  4477,   902,   909,   155,  4477,  4477,  4477,
+  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,
+  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,  4477,
+  4477,  4477,  4477,  4477,  4477,-32768,  4477,-32768,  1211,  1215,
+-32768,  1057,    24,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1066,-32768,-32768,-32768,-32768,  1030,-32768,
+-32768,  2040,   583,-32768,   140,  5701,-32768,  6599,  5701,  6599,
+-32768,-32768,-32768,  1098,-32768,-32768,-32768,-32768,-32768,-32768,
+   114,   300,-32768,-32768,-32768,  1080,-32768,-32768,   189,-32768,
+-32768,-32768,  3694,-32768,-32768,   638,-32768,  1220,   949,-32768,
+-32768,   916,  4477,  1221,   945,   946,   240,   697,   697,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   958,   967,   968,   835,  1022,   383,   760,   109,   440,   442,
-   654,   609,   806,   550,   698,   255,   554,  5837,   571,  5899,
--32768,-32768,  1070,  1073,  6244,    57,    55,-32768,-32768,   823,
--32768,-32768,-32768,-32768,-32768,  1233,    87,-32768,-32768,  5369,
--32768,  5369,-32768,-32768,   152,   581,-32768,  1166,  6244,    57,
-    55,-32768,   561,-32768,-32768,   578,-32768,  1064,   980,-32768,
-   985,   986,-32768,-32768,  1112,-32768,-32768,  1077,   620,  4977,
--32768,-32768,-32768,-32768,-32768,   614,-32768,    57,   861,    95,
-    95,-32768,-32768,   327,   669,  1169,-32768,   156,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   687,-32768,   666,
--32768,-32768,  1237,-32768,  1238,  1239,-32768,  1241,-32768,-32768,
--32768,  1175,-32768,  4819,   614,-32768,   669,-32768,   355,  1240,
--32768,-32768,-32768,-32768,  1244,   991,   996,-32768,   620,   620,
--32768,-32768,-32768,-32768,  1182,   620,-32768,  1065,-32768,  1247,
--32768,  1195,    57,  1196,-32768,-32768,-32768,-32768,   639,   327,
-   586,   578,   578,    95,  1197,-32768,   156,   156,-32768,   615,
-   700,-32768,   156,-32768,-32768,  5837,    87,  1255,-32768,-32768,
--32768,  1242,-32768,  1254,-32768,  1204,  1204,-32768,-32768,-32768,
-  1001,  5837,  1202,  1103,-32768,-32768,-32768,-32768,-32768,   620,
-   620,  1204,-32768,  1204,-32768,-32768,-32768,   327,  1252,-32768,
--32768,   327,-32768,   727,   615,   642,   578,   578,   156,  1206,
-   700,-32768,-32768,-32768,-32768,  5837,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   620,  1262,  1256,-32768,-32768,
--32768,-32768,-32768,  1261,-32768,-32768,   615,-32768,-32768,  1209,
--32768,-32768,  1257,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1289,  1301,-32768
+   947,   970,   971,   858,   993,   523,   673,   410,   489,   622,
+   662,   467,   652,   427,   254,   336,   487,  4477,   521,  5178,
+-32768,-32768,  1065,  1067,  6403,    57,    81,-32768,-32768,   866,
+-32768,-32768,-32768,-32768,-32768,  1228,   366,-32768,-32768,  5701,
+-32768,  5701,-32768,-32768,  1979,   764,-32768,  1159,  6403,    57,
+    81,-32768,   755,-32768,-32768,   697,-32768,  1061,  1021,-32768,
+  1022,  1023,-32768,-32768,  1101,-32768,-32768,  1073,   101,  5309,
+-32768,-32768,-32768,-32768,-32768,   840,-32768,    57,   944,    55,
+    55,-32768,-32768,   285,   987,  1167,-32768,   151,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1001,-32768,   477,
+-32768,-32768,  1232,-32768,  1235,  1236,-32768,  1239,-32768,-32768,
+-32768,  1188,-32768,  5151,   840,-32768,   987,-32768,   654,  1229,
+-32768,-32768,-32768,-32768,  1238,  1032,  1034,-32768,   101,   101,
+   156,-32768,-32768,-32768,-32768,  1194,   101,-32768,  1104,-32768,
+   370,  1237,-32768,  1198,    57,  1199,-32768,-32768,-32768,-32768,
+   705,   285,    85,   697,   697,    55,  1204,-32768,   151,   151,
+-32768,   543,  1052,-32768,   151,-32768,-32768,  4477,   366,  1250,
+-32768,-32768,-32768,  1249,-32768,  1251,-32768,  1200,  1200,-32768,
+-32768,-32768,  1043,  4477,  1207,  1113,   711,   156,   370,-32768,
+-32768,-32768,-32768,-32768,   101,    41,   697,   697,   101,  1200,
+-32768,  1200,-32768,-32768,-32768,   285,  1245,-32768,-32768,   285,
+-32768,   792,   543,   823,   697,   697,   151,  1208,  1052,-32768,
+-32768,-32768,-32768,  4477,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   101,-32768,   711,  1256,-32768,  1248,-32768,
+-32768,  1259,-32768,-32768,-32768,-32768,-32768,  1254,-32768,-32768,
+   543,-32768,-32768,  1209,-32768,-32768,  1264,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  1290,  1293,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,  1220,-32768,-32768,-32768,-32768,  -395,  -102,-32768,-32768,
-   978,-32768,-32768,-32768,-32768,-32768,    78,-32768,   526,-32768,
-   405,-32768,-32768,-32768,-32768,-32768,-32768,  -981,-32768,-32768,
--32768,  -676,-32768,-32768,-32768,  -698,-32768,-32768,-32768,  -711,
-   298,   207,-32768,-32768,   271,   417,-32768,-32768,   387,-32768,
--32768,  -998,  -700,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1216,-32768,-32768,-32768,-32768,  -391,  -105,-32768,-32768,
+   974,-32768,-32768,-32768,-32768,-32768,   107,-32768,   522,-32768,
+   405,-32768,-32768,-32768,-32768,-32768,-32768,  -897,-32768,-32768,
+-32768,  -931,-32768,  -943,-32768,-32768,  -709,-32768,-32768,-32768,
+  -696,   299,   201,-32768,-32768,   272,   417,-32768,-32768,   386,
+-32768,-32768,  -863,  -674,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  -950,   146,   307,  -976,   198,-32768,  -648,   494,   733,
--32768,-32768,  -617,-32768,-32768,     7,  -342,  -341,  -318,  -335,
-  -347,  -403,  -352,  -473,  -472,-32768,  -592,-32768,  -117,-32768,
--32768,   932,  1082,  -612,  -359,     1,-32768,-32768,-32768,  -467,
--32768,-32768,-32768,     0,  -277,   851,-32768,  -804,  -635,-32768,
--32768,-32768,-32768,-32768,-32768,   163,   744,-32768,   277,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   324,  -690,
-  -805,-32768,   197,-32768,-32768,   653,   659,   533,     5,  -406,
-  1235,-32768,    15,-32768,-32768,  -554,-32768,-32768,-32768,   648,
-  -295,  1004,-32768,  -488,   450,-32768,  1342,-32768,  1129,-32768,
-  1290,-32768,-32768,-32768,-32768,   -97,-32768,-32768,-32768,-32768,
-   117,  1366,  1434,-32768,-32768,  1473,-32768,-32768,  -358,-32768,
-   977,   274,  -560,  -713,-32768,   839,-32768,-32768,   927,   -83,
-  -184,   216,-32768,   273,   102,-32768,-32768,   162,-32768,   322,
--32768,-32768,   641,-32768,   393,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  -884,   141,   303,  -959,   194,-32768,  -647,   475,
+  1234,-32768,-32768,  -590,-32768,-32768,    11,  -363,  -402,  -245,
+  -350,  -348,  -371,  -352,  -471,  -483,-32768,  -578,-32768,   -24,
+-32768,-32768,   928,  1332,  -610,  -360,    15,-32768,-32768,-32768,
+  -465,-32768,-32768,-32768,     0,  -226,   849,-32768,  -811,  -716,
+-32768,-32768,-32768,-32768,-32768,-32768,    80,   740,-32768,   585,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   967,
+  -699,  -611,-32768,   204,-32768,-32768,   645,   648,   524,    13,
+  -376,  1224,-32768,     8,-32768,-32768,  -584,-32768,-32768,-32768,
+   640,  -233,   995,-32768,  -496,   193,-32768,  1329,-32768,  1120,
+-32768,  1041,-32768,-32768,-32768,-32768,   -39,-32768,-32768,-32768,
+-32768,    63,  1231,  1362,-32768,-32768,  1616,-32768,-32768,  -354,
+-32768,   969,   264,  -551,  -582,-32768,   829,-32768,-32768,   922,
+   -87,  -420,   127,-32768,   221,    84,-32768,-32768,   170,-32768,
+   211,-32768,-32768,   632,-32768,   373,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1510,-32768,-32768,  1624,   -79,   227,
-   366,-32768
+-32768,-32768,-32768,-32768,-32768,  1686,-32768,-32768,  1731,  -311,
+   188,   446,-32768
 };
 
 
-#define        YYLAST          6707
+#define        YYLAST          6866
 
 
 static const short yytable[] = {    95,
-    92,   604,    95,   309,   105,   292,   513,   462,   332,   515,
-   229,   230,   631,   704,   556,   742,   114,   231,   232,   233,
+   309,   292,    95,   604,   631,   513,   547,   548,   475,   114,
+   229,   230,   105,   515,    92,   704,   742,   231,   232,   233,
    234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
    244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-   254,   255,   256,   467,   477,   579,   744,   257,   258,   259,
+   254,   255,   256,   545,   546,   708,   556,   257,   258,   259,
    260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-   270,   271,   272,   273,   545,   546,   557,   547,   548,   555,
-   742,   754,   293,   481,   284,   708,   896,    88,  1040,   553,
-   554,    95,    92,   613,   651,   806,   105,   653,  1041,  1109,
-  1110,   577,   549,   550,   551,   552,   588,   926,   909,   301,
-   998,   744,   481,   998,   918,    95,   437,  1143,  1062,   193,
-  1006,   441,   295,   442,  1146,   314,   315,   317,  1040,   303,
-     2,   323,   822,   789,   184,   446,   754,   312,  1041,  -598,
-  -274,   443,   286,  -598,   -96,   -96,   325,   346,  1181,   629,
-  1164,  1165,  1031,  1032,   356,   350,   351,   352,   353,   354,
-   355,   421,  -274,  1189,   476,  1190,   823,   409,   410,    88,
-  1158,   913,   100,  1162,   915,   118,   422,   121,     2,   194,
-   797,  1070,  1033,  1034,   424,   328,   366,   367,   497,  1117,
-   139,   140,   141,   142,   143,   144,  1035,   991,  1058,  1118,
-   752,   753,  1197,   896,   998,  1001,   998,   145,   146,   147,
-   293,   293,   477,   346,   696,   692,   529,    76,    77,   123,
-   635,    79,    80,   816,   424,  1158,   697,  1000,   623,  1002,
-  1007,   148,   530,  -273,   222,   222,   107,   908,   515,   107,
-   910,   -96,   -96,   107,   199,   199,   199,    76,  1042,   193,
-   475,   948,   110,   111,   100,   752,   753,  -273,   332,   499,
-   694,  -382,  -382,  -382,   349,  -382,  -382,   949,   296,   296,
-   750,   296,   157,    76,    77,   123,   993,    79,    80,    76,
-    77,   123,   710,    79,    80,  -610,   424,    76,  1042,  -610,
-   625,   223,   223,   193,   324,   451,  1067,  -273,  1069,   632,
-   301,   193,   456,   418,   876,   193,   462,   193,   426,   194,
-   423,    95,   460,   424,   463,   465,   459,   497,   107,   877,
-   432,   751,   433,   424,   423,   750,   749,   424,    95,   648,
-  1014,   745,   746,   474,   323,   816,   193,   346,   748,   195,
-   313,   742,   107,   332,    76,   329,   330,   160,    76,  1119,
-   713,   448,   499,   194,   569,   747,   500,   341,   107,   441,
-     2,   194,  1111,   439,  1112,   194,   424,   194,   724,   107,
-   725,   501,   744,   327,   199,   108,   751,   346,   108,  1071,
-  1113,   749,   124,   298,   708,   300,   745,   746,   481,  -433,
-   499,   332,   199,   748,   660,   481,   194,   754,   274,   275,
-   276,   277,   278,   279,   280,   281,   282,   283,   578,   672,
-   747,   977,   646,  -595,   979,   695,   647,  -595,   199,   336,
-   542,   543,   544,  1144,   407,   408,   199,   337,   199,   222,
-   199,   299,   199,   302,   222,   304,   222,   308,   496,  -660,
-   199,   424,   310,   833,   911,   199,   338,   199,   222,   222,
-   411,   412,   318,   456,   319,   439,   339,   108,   424,   199,
-   199,   199,   497,    95,   413,   414,    95,   360,   586,   195,
-  -599,   589,  -600,   594,  -599,   597,  -600,   603,    95,   975,
-    95,   108,   342,  1187,  1188,   610,   223,   365,   323,  -382,
-  -660,   223,  -382,   223,  -382,   619,   392,   326,   409,   410,
-   409,   410,   332,   325,   361,   223,   223,   627,   340,  -654,
-   500,   994,   633,   195,   995,   460,   752,   753,   498,  1203,
-   634,   195,   407,   408,   332,   195,  -273,   195,   499,   964,
-   965,   976,   966,   967,   974,  -658,     2,   693,   107,   193,
-   424,   107,   107,   107,   972,   973,  1022,    76,    77,   123,
-  1015,    79,    80,  1016,   567,   107,   195,   968,   969,   970,
-   971,   107,   481,   362,  -103,  -103,  -382,  -382,  -382,   363,
-  -382,  -382,   424,  -382,  -382,  -382,   663,  -382,  -382,   456,
-  -606,  -382,   706,  -382,  -606,   364,   750,  -655,  -660,  -660,
-  1018,  -382,  -660,  -660,   456,   417,   499,   418,   676,   194,
-   631,   460,  1125,   419,     2,   516,   517,   518,   293,   811,
-   199,   995,   415,   416,   690,   691,   866,   867,   199,  1040,
-   199,   323,  1156,  -273,   454,   499,   409,   410,   457,  1041,
-   868,   869,   498,     2,   424,   420,   325,   751,   831,  -603,
-   633,   293,   749,  -603,  1103,   460,   469,   745,   746,   471,
-  1166,   431,  1167,  1090,   748,   411,   412,   479,   721,   722,
-   482,  -103,  -103,   346,   199,   346,   686,   687,  1168,   413,
-   414,   747,   222,  1155,  1111,  1040,  1112,   108,  1193,   193,
-   464,   466,   468,   199,  -601,  1041,   332,   785,  -601,   199,
-   107,   428,  1113,   107,   108,   792,   293,   794,   427,  1114,
-   326,   800,   801,   107,   481,   107,   805,   107,  -491,     2,
-   619,   812,   409,   410,  1124,   107,   500,   995,   107,  -657,
-   940,   811,   107,  -382,   706,  -382,   814,   293,  -608,   223,
-  1169,   501,  -608,  -382,  1085,   434,   417,  -656,   346,   194,
-  -382,  -382,  -382,   435,  -382,  -382,   834,   835,   836,   837,
-   838,   839,   440,    76,    77,   123,   199,    79,    80,   195,
-   444,  1192,  1166,   449,  1167,   107,   107,  -273,   445,   499,
-    76,    77,   123,   450,    79,    80,  1173,     2,    76,  1042,
-  1168,  1157,    76,    77,   123,   482,    79,    80,   931,   452,
-  -596,   702,   590,   902,  -596,   458,  -563,   595,   470,   598,
-  -563,   407,   408,   472,   199,   199,   473,   607,   478,  1091,
-  1092,   612,    76,  1093,  -562,  1094,   489,   199,  -562,   495,
-   199,   199,   930,   812,  -564,   633,  1202,  -584,  -564,   108,
-   504,  -584,   108,   519,    76,  1042,  -604,  1157,   814,   505,
-  -604,   522,   601,   523,   108,  -561,   108,   506,   107,  -561,
-    76,  1008,   411,   412,   326,   415,   416,   616,    76,    77,
-   123,   621,    79,    80,   520,  -593,   413,   414,   331,  -593,
-   388,   508,   389,   509,  -382,   961,   962,   963,   404,   405,
-   406,   331,   331,   331,   331,   331,   331,   424,   358,   359,
-  -382,   880,   510,   390,   391,   571,   199,   199,   424,   195,
-   773,   511,   938,   512,   649,   650,   574,   199,   199,   424,
-   199,  1030,   582,   942,   996,   572,  -578,  1046,  -583,   590,
-  -578,  1003,  -583,   107,   575,   107,    76,    77,   123,  -582,
-    79,    80,   592,  -582,   107,  1074,  1072,   107,   107,   199,
-   587,  1078,  -581,  -580,   482,  -579,  -581,  -580,  -576,  -579,
-  -577,  1049,  -576,  1050,  -577,   773,   562,   563,   905,  1019,
-  1102,   905,   593,   707,  1051,  1052,  1104,  1053,   712,  1054,
-  1055,   609,  -573,  -574,  -565,  1115,  -573,  -574,  -565,   582,
-  -568,   646,  1056,   576,  -568,  1021,   309,   326,  -588,   843,
-   591,   844,  -588,  -382,   189,   220,   220,  -589,  -590,   775,
-  -273,  -589,  -590,  1059,  1136,  1137,    95,  1138,   608,  -382,
-  -586,  1065,   845,   846,  -586,  -569,  -567,   199,   332,  -569,
-  -567,  -571,   812,   596,  1081,  -571,  -572,   589,   582,   460,
-  -572,  -570,  1086,  1087,  1182,  -570,   611,  1079,   424,   723,
-   456,   862,   863,   582,   675,   305,   306,   307,   864,   865,
-   107,  1170,  -592,    76,  1106,   393,  -592,   404,   405,   406,
-   107,   602,   601,   617,   601,   404,   405,   406,   332,    95,
-   622,  1126,  1128,   807,   618,   847,   621,   108,   905,   424,
-   905,   905,   905,   626,   456,   859,   860,   861,   812,   394,
-   395,   396,   397,   398,   399,   400,   401,   402,   403,   180,
-   630,  1200,   883,   884,   885,   883,   884,   885,   331,   870,
-   871,   886,   887,   888,   889,   890,   891,   892,   636,   675,
-   727,   922,   923,   924,   189,  1147,  1148,  1149,   912,   687,
-   639,   675,   638,  1172,   640,   917,    95,  1004,  1005,  1176,
-   641,  1065,   424,  1088,  1184,  1185,   331,   331,   331,   331,
+   270,   271,   272,   273,   553,   554,   557,  1198,   555,   462,
+   184,   742,   481,   744,   284,   579,   653,   467,  1040,   100,
+   913,    95,   118,   915,   121,   754,   651,   613,  1041,   909,
+   577,   193,   578,   918,   105,   477,    92,   295,   293,   301,
+   588,   332,   896,  1006,  1040,    95,    88,   421,  1040,  -103,
+  -103,  1164,   926,   481,  1041,   314,   315,   317,  1041,   424,
+   312,   323,   422,   529,  1090,   648,   823,   443,   744,   325,
+   876,   293,   789,   822,  1091,   222,   222,   346,   629,   530,
+   754,     2,  1031,  1032,   356,   877,  1147,  1149,   660,   350,
+   351,   352,   353,   354,   355,  1111,  1112,  -280,  1146,  1172,
+  1173,   100,   499,   672,   437,   549,   550,   551,   552,   441,
+     2,   442,  1033,  1034,  1119,   296,   296,   194,   296,  1148,
+   753,  1058,   948,   446,  1120,   993,  1035,   107,    88,  1091,
+   107,  1145,   752,   481,   107,   199,   199,   199,   949,  1151,
+   349,   324,   991,   346,  1196,   816,  -103,  -103,  1000,  1007,
+  1002,   313,  -389,   706,  -389,   110,   111,  1211,   195,   896,
+   697,   193,  -389,  1197,   366,   367,  1199,  1202,  1166,   223,
+   223,  1170,   515,   303,   696,   753,   908,    76,  1042,   910,
+   327,    76,    77,   123,   426,    79,    80,   752,   336,   694,
+  -389,  -389,  -389,   477,  -389,  -389,   432,   337,   433,   481,
+   424,   746,  1217,    76,  1042,   193,  1022,    76,  1042,   107,
+  1165,   710,   635,   193,  -615,  1189,   338,   193,  -615,   193,
+  1092,  1093,   417,    76,  1094,   451,  1095,   448,  1071,  1166,
+   301,   339,   750,   107,   998,   693,  1203,   998,  1204,   424,
+   745,    95,   460,   497,   463,   465,   456,   194,   193,   107,
+  1113,   751,  1114,   748,   459,   749,   746,   816,    95,  -280,
+   107,   499,  1014,   341,   323,   199,  1001,   346,  1115,     2,
+   222,   474,   742,    76,  1121,   222,   342,   222,    76,  1094,
+   569,   332,   423,   199,   708,   424,   500,   750,   195,   222,
+   222,   194,   806,   424,   501,   745,  -617,   623,   462,   194,
+  -617,   439,   481,   194,   424,   194,   751,   346,   748,   199,
+   749,  -389,  -389,  -389,   418,  -389,  -389,   199,  -281,   199,
+   286,   199,   695,   199,   431,  -110,  -110,  1062,   998,   744,
+   998,   199,   195,   979,   194,  1156,   199,  1157,   199,     2,
+   195,   754,   713,   977,   195,   424,   195,   441,   361,   625,
+   199,   199,   199,  1158,   542,   543,   544,  1067,   747,  1069,
+   724,   360,   725,   293,   223,   498,   332,   365,   692,   223,
+  -605,   223,   646,   911,  -605,   195,   647,  -389,  -389,  -389,
+   362,  -389,  -389,   223,   223,   108,   424,  -613,   108,   363,
+   663,  -613,   124,    95,   407,   408,    95,   456,   409,   410,
+   364,   966,   967,   594,  -667,   597,   586,   603,    95,   589,
+    95,  -661,   424,   747,   332,   610,   831,  -665,   323,   415,
+   416,   423,  -110,  -110,   424,   619,   325,  -610,   497,   107,
+   567,  -610,   107,   107,   107,   833,   753,   627,   964,   965,
+   500,   975,   633,   411,   412,   460,   107,  -662,   752,  -606,
+     2,   193,   107,  -606,   634,  -667,   417,   413,   414,   972,
+   973,   976,   439,   974,  -570,   424,   419,   108,  -570,   497,
+    76,    77,   123,   496,    79,    80,   424,   409,   410,   498,
+  -389,  -389,  -389,  -602,  -389,  -389,   418,  -602,    76,    77,
+   123,   108,    79,    80,   407,   408,   516,   517,   518,   427,
+   481,   199,  -280,  -281,   499,   476,   519,   326,  1174,   199,
+  1175,   199,     2,   222,   522,   420,   523,   746,   340,  -389,
+   706,  -389,   631,   456,  1018,   332,  1176,  -389,   676,  -389,
+  -389,   460,  -389,  -498,  1127,  -569,   811,   194,   456,  -569,
+   994,  -664,  -571,   995,   690,   691,  -571,   332,   750,  1008,
+  -280,   323,   499,  -667,  -667,   199,   745,  -667,  -667,   325,
+   968,   969,   970,   971,  -591,   409,   410,   751,  -591,   748,
+   633,   749,  -568,   428,   199,   460,  -568,  -280,   195,   499,
+   199,   107,  -607,   435,   107,   582,  -607,     2,   721,   722,
+  -280,   193,   632,   346,   107,   346,   107,   434,   107,    76,
+    77,   123,  1015,    79,    80,  1016,   107,   223,  -663,   107,
+   409,   410,  -611,   107,   444,  1046,  -611,   785,  -440,   499,
+   424,   298,  -608,   300,   880,   792,  -608,   794,   411,   412,
+   440,   800,   801,  -603,  1072,   445,   805,  -603,   702,  1078,
+   619,   812,   413,   414,   407,   408,   500,   199,   811,   814,
+   409,   410,   582,   450,   501,   424,   107,   107,  1104,   938,
+   449,    76,    77,   123,  1106,    79,    80,   931,   346,  1163,
+  1113,   452,  1114,  1117,   747,  1195,  1156,   194,  1157,   458,
+   834,   835,   836,   837,   838,   839,   473,   108,  1115,   424,
+   464,   466,   468,   942,  1158,   199,   199,   562,   563,   411,
+   412,   582,  1138,  1139,   108,  1140,   470,  1181,   199,   332,
+   326,   199,   199,   413,   414,   472,   582,   675,   195,   343,
+   499,   293,   478,   902,   995,   328,  1085,   495,     2,   489,
+   139,   140,   141,   142,   143,   144,    76,    77,   123,   107,
+    79,    80,  -585,   940,   415,   416,  -585,   145,   146,   147,
+   504,  1178,   930,   812,  -262,   633,  1206,  1174,  -590,  1175,
+   328,   814,  -590,  1216,   505,   139,   140,   141,   142,   143,
+   144,   148,   305,   306,   307,  1176,    76,    77,   123,   506,
+    79,    80,   145,   146,   147,   508,  1040,   199,   199,  1207,
+  -589,   773,   675,   727,  -589,   509,  1041,   293,   199,   199,
+  1105,   199,   686,   687,   675,   905,   148,  1214,   905,   961,
+   962,   963,   157,  -588,   107,    76,   107,  -588,  -600,    76,
+    77,   123,  -600,    79,    80,   107,   866,   867,   107,   107,
+   199,   404,   405,   406,  -587,   817,   510,  1030,  -587,   108,
+   868,   869,   108,   511,   996,  -586,   773,   157,   512,  -586,
+   520,  1003,   601,  -583,   108,  -584,   108,  -583,   571,  -584,
+   393,  1074,  -580,   572,   326,   574,  -580,   616,   388,  -581,
+   389,   621,  -389,  -581,   424,   723,  -572,    76,    77,   123,
+  -572,    79,    80,   575,    76,   329,   330,   160,  -389,   862,
+   863,   390,   391,  1019,   394,   395,   396,   397,   398,   399,
+   400,   401,   402,   403,   576,  -575,   646,  -595,   199,  -575,
+  1021,  -595,   587,   309,   649,   650,   189,   220,   220,    76,
+   329,   330,   160,   591,  1049,   905,  1050,   905,   905,   905,
+  -596,  -597,   592,  1059,  -596,  -597,    95,  1051,  1052,   608,
+  1053,   107,  1054,  1055,   293,    76,  1042,  1116,  1165,  1065,
+   593,   107,   812,  -599,  1081,  1056,  -280,  -599,  1126,   460,
+  1079,   995,  1086,  1087,   596,   589,   404,   405,   406,   864,
+   865,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+   283,  -593,  -576,  -574,   456,  -593,  -576,  -574,   182,   211,
+   211,   609,  -578,   602,  -579,   848,  -578,   326,  -579,    95,
+   611,  1128,  1130,  -577,   299,   618,   302,  -577,   304,   293,
+   308,   617,  1177,   912,   687,   310,   870,   871,   812,   905,
+   622,   905,   404,   405,   406,   318,   626,   319,   456,   849,
+   850,   851,   852,   853,   854,   855,   856,   857,   858,   424,
+   843,   630,   844,   332,  -389,   636,   189,   886,   887,   888,
+   889,   890,   891,   892,   859,   860,   861,  1004,  1005,  1190,
+  -389,   424,  1088,   845,   846,  1180,    76,  1108,    95,   392,
+   638,  1184,   601,   640,   601,   107,   107,   883,   884,   885,
+   639,  1065,   641,   807,  1192,  1193,   621,   108,   642,   644,
+   189,   922,   923,   924,  1152,  1153,  1154,   645,   189,   332,
+   662,   665,   189,   680,   189,   668,   666,   773,   677,   682,
+   688,   683,   220,   438,  1047,   685,   698,   220,   182,   220,
+   700,   705,   703,   711,   107,   714,   715,   716,   718,   717,
+   783,   220,   220,   189,   787,   796,   790,   802,  1047,   818,
+   107,   872,   842,   107,   804,   820,   824,   873,   825,   821,
+   916,   829,  1222,   830,   878,   875,  1103,   920,   929,   941,
+   934,   935,   182,  1226,   874,   939,  1110,  1047,  1047,   943,
+   182,   980,   981,   -52,   182,  1124,   182,  1017,   185,   217,
+   217,  1020,   -49,  1029,   211,  1061,  1073,   107,  1083,   211,
+  1089,   211,  1129,  1141,  1118,  1133,  1132,   454,  1135,   108,
+  1159,   457,  1143,   211,   211,   182,   107,  1183,  1185,   937,
+  1186,  1205,   884,  1218,  1219,  1137,  1103,  1103,  1103,   469,
+  1221,  1150,   471,  1220,  1103,  1160,  1162,   507,  1225,  1228,
+   479,  1171,  1229,   482,  1191,  1212,  1223,   285,   480,   900,
+  1047,   107,   107,  1047,   992,  1161,  1124,  1124,  1075,  1107,
+   988,  1012,  1124,  1077,  1208,   527,   107,   946,  1179,   605,
+   531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
+   541,   679,  1182,   795,   793,  1103,   311,   932,   227,   180,
+   810,   502,  1103,   447,   107,   107,  1103,  1142,   643,   568,
+   827,   561,  1026,     0,     0,   524,     0,     0,     0,   331,
+     0,  1047,   107,   107,  1124,     0,     0,     0,   185,   186,
+   218,   218,   331,   331,   331,   331,   331,   331,     0,   358,
+   359,  1103,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,  1023,  1024,     0,   189,   883,   884,   885,
+     0,     0,     0,   886,   887,   888,   889,   890,   891,   892,
+     0,     0,   185,     0,     0,   220,     0,     0,   482,     0,
+   185,     0,     0,     0,   185,   590,   185,     0,     0,     0,
+   595,     0,   598,     0,   217,     0,     0,     0,     0,   217,
+   607,   217,   108,     0,   612,     0,     0,     0,     0,     0,
+     0,     0,     0,   217,   217,   185,     0,     0,   108,     0,
+     0,  1082,     0,     0,     0,     0,     0,   344,   182,   345,
+     0,     0,     0,     0,   328,   525,     0,     0,     0,   139,
+   140,   141,   142,   143,   144,     0,     0,   211,     0,     0,
+     0,     0,     0,     0,     0,     0,   145,   146,   147,   186,
+   922,   923,   924,     0,     0,   108,   886,   887,   888,   889,
+   890,   891,   892,   180,     0,     0,     0,     0,     0,     0,
+   148,   180,     0,     0,   108,   180,     0,   180,     0,     0,
+     0,     0,     0,     0,     0,   436,   189,     0,     0,     0,
+     0,     0,     0,   186,     0,     0,     0,     0,     0,     0,
+     0,   186,   590,     0,     0,   186,   180,   186,     0,  1168,
+  1169,   157,     0,     0,     0,   218,     0,     0,     0,     0,
+   218,     0,   218,   720,   108,     0,     0,   482,     0,     0,
+     0,     0,     0,     0,   218,   218,   186,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   707,     0,     0,   331,
+     0,   712,  1200,  1201,     0,     0,     0,     0,   182,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   798,     0,
+  1209,  1210,     0,   187,   219,   219,     0,     0,     0,     0,
+     0,     0,   775,    76,   329,   330,   160,   331,   331,   331,
    331,   331,   331,   331,   331,   331,   331,   331,   331,   331,
-   331,   331,   817,   644,   645,   642,   662,   665,   189,   677,
-   668,   666,   905,   680,   905,   682,   189,   683,   685,   700,
-   189,   688,   189,   698,   107,   107,   703,   705,   711,   108,
-   220,   438,   714,   331,   715,   220,   718,   220,   783,   937,
-   886,   887,   888,   889,   890,   891,   892,   716,  1207,   220,
-   220,   189,   717,   787,   790,   796,   773,   802,  1211,   818,
-   804,   820,   873,  1047,   824,   821,   842,   344,   872,   345,
-   989,   990,   825,   107,   829,   830,   875,   878,   997,   916,
-   874,   331,   920,   929,   941,   934,   331,  1047,   935,   107,
-   939,   980,   107,   943,   981,   -52,  1017,   -49,  1020,  1029,
-  1061,  1083,  1013,  1073,  1089,  1101,  1116,  1127,  1131,  1130,
-  1133,  1177,  1135,   180,  1139,  1108,  1047,  1047,  1141,  1145,
-  1151,   180,  1175,  1178,  1122,   180,   884,   180,  1191,  1204,
-  1205,  1210,  1152,  1154,  1163,   436,   107,  1206,  1213,  1183,
-   331,   507,   331,  1198,   655,   657,  1208,   182,   211,   211,
-  1214,   285,   480,   900,   992,   107,   180,  1075,  1105,  1153,
-   988,  1194,  1012,  1023,  1024,  1101,  1101,  1077,  1060,   527,
-  1171,   605,  1101,  1174,   531,   532,   533,   534,   535,   536,
-   537,   538,   539,   540,   541,   679,   946,  1047,   107,   107,
-  1047,   795,   331,  1122,  1122,   793,   932,   311,   810,  1122,
-   502,   227,   447,   107,   568,   561,  -517,  1140,   643,   827,
-     0,   368,   108,   524,   331,     0,   139,   140,   141,   142,
-   143,   144,  1026,   185,   217,   217,  1101,  1101,   108,     0,
-     0,  1082,     0,   145,   146,   147,     0,  1129,     0,     0,
-     0,     0,  1047,   107,   107,  1122,   743,     0,     0,     0,
-     0,     0,     0,     0,   189,     0,     0,   148,     0,   487,
-     0,     0,  1101,     0,     0,     0,     0,   490,   491,   492,
-   493,     0,     0,   220,     0,   108,     0,   182,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   487,     0,
-     0,   186,   218,   218,   108,     0,     0,     0,   157,   487,
-     0,   743,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   331,   331,   331,   331,   331,   331,   840,   841,
-   528,   182,     0,     0,     0,     0,     0,  1160,  1161,   182,
-   187,   219,   219,   182,     0,   182,     0,     0,     0,     0,
-     0,     0,   108,   211,     0,     0,     0,  1201,   211,     0,
-   211,     0,     0,   185,     0,     0,     0,     0,     0,   180,
-     0,     0,   211,   211,   182,     0,   573,   196,   225,   225,
-    76,   329,   330,   160,     0,     0,   331,     0,   922,   923,
-   924,     0,  1195,  1196,   886,   887,   888,   889,   890,   891,
-   892,     0,     0,     0,   189,     0,     0,   185,     0,     0,
-     0,     0,     0,     0,     0,   185,     0,     0,     0,   185,
-   331,   185,     0,     0,     0,     0,     0,     0,     0,   217,
-     0,   186,     0,     0,   217,     0,   217,   720,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   217,   217,
-   185,   331,   331,   331,   331,   331,   331,   331,   331,   331,
-   331,   331,   331,   331,   331,   331,   331,   331,     0,   331,
-   187,     0,     0,     0,     0,   186,     0,     0,     0,     0,
-     0,     0,   798,   186,     0,     0,     0,   186,     0,   186,
-     0,   198,   226,   226,     0,     0,     0,   218,     0,     0,
-   652,     0,   218,     0,   218,     0,     0,   196,     0,   180,
-     0,     0,     0,     0,   187,     0,   218,   218,   186,     0,
-     0,     0,   187,     0,     0,     0,   187,     0,   187,     0,
-     0,     0,     0,     0,     0,   331,   219,     0,     0,     0,
-     0,   219,     0,   219,     0,     0,     0,     0,     0,     0,
-     0,   196,     0,     0,     0,   219,   219,   187,     0,   196,
-     0,     0,     0,   196,     0,   196,     0,   493,     0,     0,
-   343,     0,   743,   225,   848,     0,   328,   182,   225,     0,
-   225,   139,   140,   141,   142,   143,   144,     0,   798,     0,
-     0,   798,   225,   225,   196,   487,   211,   487,   145,   146,
-   147,     0,     0,   728,     0,     0,   774,     0,   849,   850,
-   851,   852,   853,   854,   855,   856,   857,   858,     0,     0,
-     0,   198,   148,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   944,   527,     0,     0,     0,     0,   950,
-   951,   952,   953,   954,   955,   956,   957,   958,   959,   960,
-     0,     0,     0,   185,     0,     0,     0,     0,     0,   826,
-     0,     0,     0,   157,     0,   198,     0,     0,     0,     0,
-   832,     0,   217,   198,     0,     0,     0,   198,     0,   198,
-     0,     0,     0,     0,     0,     0,     0,   226,     0,     0,
-     0,     0,   226,   798,   226,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   226,   226,   198,     0,
-     0,     0,     0,     0,  -255,     0,     0,   182,   331,     0,
-   328,   186,     0,     0,     0,   139,   140,   141,   142,   143,
-   144,     0,     0,     0,   331,    76,   329,   330,   160,     0,
-   218,   125,   145,   146,   147,     0,   126,   127,   128,     0,
-   129,   130,   131,   132,   133,   134,   135,   136,   137,  -517,
-   187,     0,     0,     0,   138,     0,   148,     0,   331,   139,
-   140,   141,   142,   143,   144,     0,     0,     0,     0,   219,
-     0,     0,  -273,  -273,     0,   947,   145,   146,   147,     0,
-     0,     0,     0,   185,     0,     0,   798,   196,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   157,     0,     0,
-   148,     0,     0,     0,     0,     0,   225,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    -1,     1,     0,     0,
-     0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
-     0,     0,     0,     0,     0,     0,     0,   156,     0,     0,
-  -273,   157,     0,     0,     0,     0,     0,     0,     0,     0,
-     2,   186,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     3,     0,     0,   493,     0,     0,     0,     0,    76,
-   329,   330,   160,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  -382,  -382,  -382,     0,     4,     0,     0,
-   187,     5,     6,     7,     0,     0,     0,     0,     0,     0,
-     0,   198,     0,     0,     0,     8,     9,    10,     0,  1025,
-     0,     0,     0,    76,   158,   159,   160,   161,    80,     0,
-   226,     0,     0,     0,    11,    12,    13,   196,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,     0,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-    35,    36,    37,    38,     0,    39,    40,    41,    42,    43,
-    44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-    54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    75,    -2,     1,     0,     0,     0,     0,     0,    76,
-    77,    78,     0,    79,    80,    81,     0,   797,     0,     0,
-     0,     0,   328,     0,     0,     0,  -273,   139,   140,   141,
-   142,   143,   144,     0,     0,     0,     2,     0,     0,     0,
-     0,     0,     0,     0,   145,   146,   147,     3,     0,     0,
-     0,   198,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   148,  -382,
-  -382,  -382,     0,     4,     0,     0,     0,     5,     6,     7,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     8,     9,    10,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   157,
-    11,    12,    13,     0,    14,    15,    16,    17,    18,    19,
-    20,    21,    22,    23,     0,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-     0,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,     0,     0,
-     0,    76,   329,   330,   160,    76,    77,    78,   125,    79,
-    80,    81,     0,   126,   127,   128,     0,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,  -517,   565,     0,     0,
-     0,   138,     0,     0,     0,     0,   139,   140,   141,   142,
-   143,   144,     0,     0,     0,     0,     0,     0,     0,  -273,
-  -273,     0,     3,   145,   146,   147,     0,     0,     0,     0,
+   331,   331,   331,     0,     0,     0,   328,   945,   185,   487,
+     0,   139,   140,   141,   142,   143,   144,   490,   491,   492,
+   493,     0,     0,     0,     0,     0,     0,   217,   145,   146,
+   147,     0,     0,     0,   331,     0,     0,     0,   487,     0,
+     0,     0,     0,   196,   225,   225,     0,     0,     0,   487,
+     0,     0,   148,     0,     0,     0,     0,     0,   847,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,  -382,  -382,  -382,   148,     4,     0,
+   528,     0,     0,     0,   798,     0,     0,   798,     0,     0,
+     0,     0,   331,     0,     0,     0,  -524,   331,   198,   226,
+   226,   368,     0,   157,     0,     0,   139,   140,   141,   142,
+   143,   144,     0,   187,     0,     0,     0,     0,     0,   180,
+     0,     0,     0,   145,   146,   147,   573,     0,   917,   944,
+   527,     0,     0,     0,     0,   950,   951,   952,   953,   954,
+   955,   956,   957,   958,   959,   960,     0,   148,     0,   186,
+     0,   331,     0,   331,     0,   655,   657,   187,   185,     0,
+     0,     0,     0,     0,     0,   187,     0,     0,   218,   187,
+     0,   187,     0,     0,     0,    76,   329,   330,   160,   219,
+     0,     0,     0,   196,   219,     0,   219,     0,   157,   798,
+     0,     0,     0,     0,     0,     0,     0,     0,   219,   219,
+   187,     0,     0,   331,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   989,   990,   331,     0,   196,   198,     0,
+     0,   997,     0,     0,     0,   196,     0,     0,     0,   196,
+     0,   196,     0,     0,     0,     0,     0,     0,     0,   225,
+   652,     0,     0,     0,   225,  1013,   225,   743,     0,   180,
+    76,   329,   330,   160,     0,     0,     0,     0,   225,   225,
+   196,     0,   198,     0,     0,     0,     0,     0,     0,     0,
+   198,     0,     0,     0,   198,     0,   198,     0,     0,   186,
+     0,     0,   798,     0,   226,     0,     0,     0,     0,   226,
+     0,   226,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   743,   226,   226,   198,     0,   493,     0,     0,
+     0,  1060,     0,   331,   331,   331,   331,   331,   331,   840,
+   841,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   487,     0,   487,     0,     0,
+     0,     0,     0,   728,     0,     0,   774,   797,  1070,     0,
+     0,     0,   328,     0,     0,     0,     0,   139,   140,   141,
+   142,   143,   144,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   145,   146,   147,   331,     0,     0,
+  1131,   328,     0,     0,   628,     0,   139,   140,   141,   142,
+   143,   144,     0,   187,     0,     0,     0,     0,   148,   826,
+     0,     0,     0,   145,   146,   147,     0,     0,   797,     0,
+   832,   331,   219,   328,     0,     0,     0,     0,   139,   140,
+   141,   142,   143,   144,     0,     0,     0,   148,     0,     0,
+     0,     0,     0,     0,     0,   145,   146,   147,     0,   157,
+     0,     0,   331,   331,   331,   331,   331,   331,   331,   331,
+   331,   331,   331,   331,   331,   331,   331,   331,   331,   148,
+   331,     0,     0,   196,     0,   126,   127,   128,   157,   129,
+   130,   131,   132,   133,   134,   135,   136,   203,  -524,   669,
+     0,     0,   225,   368,     0,     0,     0,     0,   139,   140,
+   141,   142,   143,   144,     0,     0,     0,     0,  1215,     0,
+   157,     0,     0,     0,     0,   145,   146,   147,   198,     0,
+     0,    76,   329,   330,   160,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   947,   331,   226,     0,   148,
+     0,     0,     0,   187,     0,     0,     0,     0,     0,     0,
+    76,   329,   330,   160,     0,     0,     0,     0,     0,     0,
+     0,     0,   150,   151,   152,   153,   154,   155,     0,     0,
+     0,     0,     0,   743,     0,     0,   156,     0,     0,     0,
+   157,     0,    76,   329,   330,   160,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    -1,
+     1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   196,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,  -280,   493,     0,     0,     0,     0,     0,
+     0,     0,     0,     2,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     3,   369,     0,     0,   370,     0,
+     0,   371,    76,   158,   159,   160,   161,    80,   198,     0,
+     0,     0,     0,     0,     0,     0,  -389,  -389,  -389,  1025,
+     4,     0,     0,     0,     5,     6,     7,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     8,     9,
+    10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
+     0,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,   331,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,    33,    34,    35,    36,    37,    38,   331,    39,    40,
+    41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+    51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,    -2,     1,   331,     0,     0,
+     0,     0,    76,    77,    78,     0,    79,    80,    81,     0,
+     0,     0,     0,     0,     0,   328,     0,     0,   709,  -280,
+   139,   140,   141,   142,   143,   144,     0,     0,     0,     2,
+     0,     0,     0,     0,     0,     0,     0,   145,   146,   147,
+     3,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
-     0,     0,     0,     0,   156,    11,    12,    13,   157,    14,
-    15,    16,    17,    18,    19,    20,    21,    22,    23,     0,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-    34,    35,    36,    37,    38,     0,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,     0,     0,     0,     0,     0,     0,     0,
-    76,   158,   566,   160,   161,    80,    81,   125,     0,     0,
-     0,     0,   126,   127,   128,     0,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,  -517,     0,     0,     0,     0,
-   138,     0,     0,     0,     0,   139,   140,   141,   142,   143,
-   144,     0,     0,     0,     0,     0,     0,     0,  -273,  -273,
-     0,     0,   145,   146,   147,     0,     0,     0,     0,     0,
+     0,   148,  -389,  -389,  -389,     0,     4,     0,     0,     0,
+     5,     6,     7,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     8,     9,    10,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  -273,  -273,  -273,   148,     0,     0,     0,
+     0,     0,   157,    11,    12,    13,     0,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,     0,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,     0,    39,    40,    41,    42,    43,    44,
+    45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+    55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,     0,     0,     0,    76,   329,   330,   160,    76,    77,
+    78,   125,    79,    80,    81,     0,   126,   127,   128,     0,
+   129,   130,   131,   132,   133,   134,   135,   136,   137,  -524,
+   565,     0,     0,     0,   138,     0,     0,     0,     0,   139,
+   140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
+     0,     0,  -280,  -280,     0,     3,   145,   146,   147,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   150,
-   151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
-     0,     0,     0,   156,  -273,  -273,  -273,   157,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,     0,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,     0,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,     0,     0,     0,     0,     0,     0,     0,    76,
-   158,   159,   160,   161,    80,  -273,   201,     0,     0,     0,
-     0,   126,   127,   128,     0,     0,   202,   131,   132,   133,
-   134,   135,   136,   203,  -517,  -521,     0,     0,     0,   204,
-     0,     0,     0,     0,   139,   140,   141,   142,   143,   144,
-     0,     0,     0,     0,     0,     0,     0,  -273,  -273,     0,
-     0,   145,   146,   147,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,  -389,  -389,  -389,
+   148,     4,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,  -273,  -273,  -273,   148,     0,     0,     0,     0,
+     0,     0,     0,   150,   151,   152,   153,   154,   155,     0,
+     0,     0,     0,     0,     0,     0,     0,   156,    11,    12,
+    13,   157,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,    33,    34,    35,    36,    37,    38,     0,    39,
+    40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+    50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+    60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,     0,     0,     0,     0,
+     0,     0,     0,    76,   158,   566,   160,   161,    80,    81,
+   125,     0,     0,     0,     0,   126,   127,   128,     0,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,  -524,     0,
+     0,     0,     0,   138,     0,     0,     0,     0,   139,   140,
+   141,   142,   143,   144,     0,     0,     0,     0,     0,     0,
+     0,  -280,  -280,     0,     0,   145,   146,   147,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   150,   151,
-   152,   153,   154,   155,     0,     0,     0,     0,     0,     0,
-     0,     0,   156,  -273,  -273,  -273,   157,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,     0,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,     0,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
-  -273,     0,     0,     0,     0,     0,     0,     0,    76,   158,
-   159,   160,   205,   206,  -273,   201,     0,     0,     0,     0,
-   126,   127,   128,     0,     0,   202,   131,   132,   133,   134,
-   135,   136,   203,  -465,  -465,     0,     0,     0,   204,  -465,
-     0,     0,     0,   139,   140,   141,   142,   143,   144,     0,
-     0,     0,     0,     0,     0,     0,  -273,  -273,   125,     0,
-   145,   146,   147,   126,   127,   128,     0,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,  -517,     0,     0,     0,
-     0,   138,     0,     0,   148,     0,   139,   140,   141,   142,
-   143,   144,     0,     0,     0,     0,     0,     0,     0,  -273,
-  -273,     0,     0,   145,   146,   147,  -465,   150,   151,   152,
-   153,   154,   155,     0,     0,     0,     0,     0,     0,     0,
-     0,   156,     0,     0,     0,   157,     0,   148,     0,     0,
+     0,     0,     0,     0,     0,     0,  -280,  -280,  -280,   148,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  -492,
-   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
-     0,     0,     0,     0,   156,     0,     0,     0,   157,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   150,   151,   152,   153,   154,   155,     0,     0,
+     0,     0,     0,     0,     0,     0,   156,  -280,  -280,  -280,
+   157,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,     0,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,     0,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,     0,     0,     0,     0,     0,
+     0,     0,    76,   158,   159,   160,   161,    80,  -280,   201,
+     0,     0,     0,     0,   126,   127,   128,     0,     0,   202,
+   131,   132,   133,   134,   135,   136,   203,  -524,  -528,     0,
+     0,     0,   204,     0,     0,     0,     0,   139,   140,   141,
+   142,   143,   144,     0,     0,     0,     0,     0,     0,     0,
+  -280,  -280,     0,     0,   145,   146,   147,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    76,   158,   159,
-   160,   205,   206,     0,     0,   201,     0,     0,     0,     0,
-   126,   127,   128,     0,     0,   202,   131,   132,   133,   134,
-   135,   136,   203,  -517,  -521,     0,     0,     0,   204,     0,
-     0,     0,     0,   139,   140,   141,   142,   143,   144,     0,
-    76,   158,   159,   160,   161,    80,  -273,  -273,   125,     0,
-   145,   146,   147,   126,   127,   128,     0,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,  -517,   658,     0,     0,
-     0,   138,     0,     0,   148,     0,   139,   140,   141,   142,
-   143,   144,     0,     0,     0,     0,     0,     0,     0,  -273,
-  -273,     0,     0,   145,   146,   147,  -461,   150,   151,   152,
-   153,   154,   155,     0,     0,     0,     0,     0,     0,     0,
-     0,   156,     0,     0,     0,   157,     0,   148,     0,     0,
+     0,     0,     0,     0,     0,  -280,  -280,  -280,   148,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
+     0,     0,     0,     0,     0,   156,  -280,  -280,  -280,   157,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+     0,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,     0,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,  -280,
+  -280,  -280,  -280,  -280,     0,     0,     0,     0,     0,     0,
+     0,    76,   158,   159,   160,   205,   206,  -280,   201,     0,
+     0,     0,     0,   126,   127,   128,     0,     0,   202,   131,
+   132,   133,   134,   135,   136,   203,  -472,  -472,     0,     0,
+     0,   204,  -472,     0,     0,     0,   139,   140,   141,   142,
+   143,   144,     0,     0,     0,     0,     0,     0,     0,  -280,
+  -280,   125,     0,   145,   146,   147,   126,   127,   128,     0,
+   129,   130,   131,   132,   133,   134,   135,   136,   137,  -524,
+     0,     0,     0,     0,   138,     0,     0,   148,     0,   139,
+   140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
+     0,     0,  -280,  -280,     0,     0,   145,   146,   147,  -472,
    150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
      0,     0,     0,     0,   156,     0,     0,     0,   157,     0,
+   148,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    76,   158,   159,
-   160,   205,   206,     0,     0,   201,     0,     0,     0,     0,
-   126,   127,   128,     0,     0,   202,   131,   132,   133,   134,
-   135,   136,   203,  -517,  -521,     0,     0,     0,   204,     0,
-     0,     0,     0,   139,   140,   141,   142,   143,   144,     0,
-    76,   158,   159,   160,   161,    80,  -273,  -273,   125,     0,
-   145,   146,   147,   126,   127,   128,     0,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,  -517,     0,     0,     0,
-     0,   138,     0,     0,   148,     0,   139,   140,   141,   142,
-   143,   144,     0,     0,     0,     0,     0,     0,     0,  -273,
-  -273,     0,     0,   145,   146,   147,     0,   150,   151,   152,
-   153,   154,   155,     0,     0,     0,     0,     0,     0,     0,
-     0,   156,     0,     0,     0,   157,     0,   148,     0,     0,
+     0,     0,   149,   150,   151,   152,   153,   154,   155,     0,
+     0,     0,     0,     0,     0,     0,     0,   156,     0,     0,
+     0,   157,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    76,   158,   159,   160,   205,   206,     0,     0,   125,     0,
+     0,     0,     0,   126,   127,   128,     0,   129,   130,   131,
+   132,   133,   134,   135,   136,   137,  -524,     0,     0,     0,
+     0,   138,     0,     0,     0,     0,   139,   140,   141,   142,
+   143,   144,     0,    76,   158,   159,   160,   161,    80,  -280,
+  -280,   201,     0,   145,   146,   147,   126,   127,   128,     0,
+     0,   202,   131,   132,   133,   134,   135,   136,   203,  -524,
+  -528,     0,     0,     0,   204,     0,     0,   148,     0,   139,
+   140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
+     0,     0,  -280,  -280,     0,     0,   145,   146,   147,  -499,
    150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
      0,     0,     0,     0,   156,     0,     0,     0,   157,     0,
+   148,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  -468,   150,   151,   152,   153,   154,   155,     0,
+     0,     0,     0,     0,     0,     0,     0,   156,     0,     0,
+     0,   157,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    76,   158,   159,
-   160,   205,   206,     0,     0,     0,     0,     0,     0,     0,
-   126,   127,   128,     0,   129,   130,   131,   132,   133,   134,
-   135,   136,   203,  -517,   580,     0,     0,     0,   368,     0,
-     0,     0,     0,   139,   140,   141,   142,   143,   144,     0,
-    76,   158,   159,   160,   161,    80,  -273,  -273,     0,     3,
-   145,   146,   147,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   148,     4,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   150,   151,   152,
-   153,   154,   155,     0,     0,     0,     0,     0,     0,     0,
-     0,   581,    11,    12,    13,   157,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,     0,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    38,     0,    39,    40,    41,    42,    43,    44,    45,
-    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-   369,     0,     0,   370,     0,     0,   371,    76,   158,   566,
-   160,   161,    80,    81,   126,   127,   128,     0,   129,   130,
-   131,   132,   133,   134,   135,   136,   203,  -517,   659,     0,
-     0,     0,   368,     0,     0,     0,     0,   139,   140,   141,
-   142,   143,   144,     0,     0,     0,     0,     0,     0,     0,
-  -273,  -273,     0,     3,   145,   146,   147,     0,     0,     0,
+    76,   158,   159,   160,   161,    80,     0,     0,   125,     0,
+     0,     0,     0,   126,   127,   128,     0,   129,   130,   131,
+   132,   133,   134,   135,   136,   137,  -524,   658,     0,     0,
+     0,   138,     0,     0,     0,     0,   139,   140,   141,   142,
+   143,   144,     0,    76,   158,   159,   160,   205,   206,  -280,
+  -280,   201,     0,   145,   146,   147,   126,   127,   128,     0,
+     0,   202,   131,   132,   133,   134,   135,   136,   203,  -524,
+  -528,     0,     0,     0,   204,     0,     0,   148,     0,   139,
+   140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
+     0,     0,  -280,  -280,     0,     0,   145,   146,   147,     0,
+   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
+     0,     0,     0,     0,   156,     0,     0,     0,   157,     0,
+   148,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   148,     4,
+     0,     0,     0,   150,   151,   152,   153,   154,   155,     0,
+     0,     0,     0,     0,     0,     0,     0,   156,     0,     0,
+     0,   157,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   328,  -262,     0,
+     0,     0,   139,   140,   141,   142,   143,   144,     0,     0,
+    76,   158,   159,   160,   161,    80,     0,     0,   125,   145,
+   146,   147,     0,   126,   127,   128,     0,   129,   130,   131,
+   132,   133,   134,   135,   136,   137,  -524,     0,     0,     0,
+     0,   138,     0,   148,     0,     0,   139,   140,   141,   142,
+   143,   144,     0,    76,   158,   159,   160,   205,   206,  -280,
+  -280,     0,     0,   145,   146,   147,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   157,     0,     0,   148,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
-     0,     0,     0,     0,     0,   156,    11,    12,    13,   157,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,     0,    39,    40,    41,
-    42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-    52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,   369,     0,     0,   370,     0,     0,
-   371,    76,   158,   566,   160,   161,    80,    81,   126,   127,
-   128,     0,   129,   130,   131,   132,   133,   134,   135,   136,
-   203,  -517,   670,     0,     0,     0,   368,     0,     0,     0,
-     0,   139,   140,   141,   142,   143,   144,     0,     0,     0,
-     0,     0,     0,     0,  -273,  -273,     0,     3,   145,   146,
-   147,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   148,     4,     0,     0,     0,     0,     0,     0,
+   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
+     0,     0,     0,     0,   156,   126,   127,   128,   157,   129,
+   130,   131,   132,   133,   134,   135,   136,   203,  -524,   580,
+     0,     0,     0,   368,     0,     0,     0,     0,   139,   140,
+   141,   142,   143,   144,     0,     0,    76,   329,   330,   160,
+     0,  -280,  -280,     0,     3,   145,   146,   147,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   150,   151,   152,   153,   154,
-   155,     0,     0,     0,     0,     0,     0,     0,     0,   671,
-    11,    12,    13,   157,    14,    15,    16,    17,    18,    19,
-    20,    21,    22,    23,     0,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-     0,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,   369,     0,
-     0,   370,     0,     0,   371,    76,   158,   566,   160,   161,
-    80,    81,   126,   127,   128,     0,   129,   130,   131,   132,
-   133,   134,   135,   136,   203,  -517,   669,     0,     0,     0,
-   368,     0,     0,     0,     0,   139,   140,   141,   142,   143,
-   144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   145,   146,   147,   126,   127,   128,     0,   129,
-   130,   131,   132,   133,   134,   135,   136,   203,  -517,   673,
-     0,     0,     0,   368,     0,     0,   148,     0,   139,   140,
-   141,   142,   143,   144,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   145,   146,   147,     0,   150,
-   151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
-     0,     0,     0,   156,     0,   328,   525,   157,     0,   148,
-   139,   140,   141,   142,   143,   144,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   145,   146,   147,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
+     4,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    76,   158,   159,   160,   161,    80,     0,     0,     0,     0,
      0,     0,   150,   151,   152,   153,   154,   155,     0,     0,
-     0,     0,     0,     0,     0,     0,   674,     0,     0,     0,
-   157,   148,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   369,     0,     0,   370,     0,     0,   371,    76,
-   158,   159,   160,   161,    80,     0,     0,     0,     0,     0,
-     0,     0,   157,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   581,    11,    12,    13,
+   157,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    23,     0,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,    33,    34,    35,    36,    37,    38,     0,    39,    40,
+    41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+    51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,   369,     0,     0,   370,     0,
+     0,   371,    76,   158,   566,   160,   161,    80,    81,   126,
+   127,   128,     0,   129,   130,   131,   132,   133,   134,   135,
+   136,   203,  -524,   659,     0,     0,     0,   368,     0,     0,
+     0,     0,   139,   140,   141,   142,   143,   144,     0,     0,
+     0,     0,     0,     0,     0,  -280,  -280,     0,     3,   145,
+   146,   147,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   369,     0,     0,   370,     0,
-     0,   371,    76,   158,   159,   160,   161,    80,   126,   127,
-   128,     0,   129,   130,   131,   132,   133,   134,   135,   136,
-   203,  -517,   726,     0,     0,     0,   368,     0,     0,     0,
-     0,   139,   140,   141,   142,   143,   144,     0,     0,     0,
-     0,     0,     0,     0,    76,   329,   330,   160,   145,   146,
-   147,   126,   127,   128,     0,   129,   130,   131,   132,   133,
-   134,   135,   136,   203,  -517,   779,     0,     0,     0,   368,
-     0,     0,   148,     0,   139,   140,   141,   142,   143,   144,
+     0,     0,     0,   148,     4,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   145,   146,   147,     0,   150,   151,   152,   153,   154,
-   155,     0,     0,     0,     0,     0,     0,     0,     0,   156,
-     0,   328,     0,   157,   628,   148,   139,   140,   141,   142,
-   143,   144,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   145,   146,   147,     0,     0,   150,   151,
-   152,   153,   154,   155,     0,     0,     0,     0,     0,     0,
-     0,     0,   156,     0,     0,     0,   157,   148,     0,     0,
+     0,     0,     0,     0,     0,     0,   150,   151,   152,   153,
+   154,   155,     0,     0,     0,     0,     0,     0,     0,     0,
+   156,    11,    12,    13,   157,    14,    15,    16,    17,    18,
+    19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+    38,     0,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,   369,
+     0,     0,   370,     0,     0,   371,    76,   158,   566,   160,
+   161,    80,    81,   126,   127,   128,     0,   129,   130,   131,
+   132,   133,   134,   135,   136,   203,  -524,   670,     0,     0,
+     0,   368,     0,     0,     0,     0,   139,   140,   141,   142,
+   143,   144,     0,     0,     0,     0,     0,     0,     0,  -280,
+  -280,     0,     3,   145,   146,   147,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   369,     0,
-     0,   370,     0,     0,   371,    76,   158,   159,   160,   161,
-    80,     0,     0,     0,     0,     0,     0,     0,   157,     0,
+     0,     0,     0,     0,     0,     0,     0,   148,     4,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   369,     0,     0,   370,     0,     0,   371,    76,   158,
-   159,   160,   161,    80,   126,   127,   128,     0,   129,   130,
-   131,   132,   133,   134,   135,   136,   203,  -517,   780,     0,
-     0,     0,   368,     0,     0,     0,     0,   139,   140,   141,
-   142,   143,   144,     0,     0,     0,     0,     0,     0,     0,
-    76,   329,   330,   160,   145,   146,   147,   126,   127,   128,
+   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
+     0,     0,     0,     0,   671,    11,    12,    13,   157,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    23,     0,
+    24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+    34,    35,    36,    37,    38,     0,    39,    40,    41,    42,
+    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,   369,     0,     0,   370,     0,     0,   371,
+    76,   158,   566,   160,   161,    80,    81,   126,   127,   128,
      0,   129,   130,   131,   132,   133,   134,   135,   136,   203,
-  -517,   782,     0,     0,     0,   368,     0,     0,   148,     0,
+  -524,   673,     0,     0,     0,   368,     0,     0,     0,     0,
    139,   140,   141,   142,   143,   144,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,   145,   146,   147,
-     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
-     0,     0,     0,     0,     0,   781,     0,   328,     0,   157,
-   709,   148,   139,   140,   141,   142,   143,   144,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   145,
-   146,   147,     0,     0,   150,   151,   152,   153,   154,   155,
-     0,     0,     0,     0,     0,     0,     0,     0,   156,     0,
-     0,     0,   157,   148,     0,     0,     0,     0,     0,     0,
+   126,   127,   128,     0,   129,   130,   131,   132,   133,   134,
+   135,   136,   203,  -524,   726,     0,     0,     0,   368,     0,
+     0,   148,     0,   139,   140,   141,   142,   143,   144,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   369,     0,     0,   370,     0,     0,
-   371,    76,   158,   159,   160,   161,    80,     0,     0,     0,
-     0,     0,     0,     0,   157,     0,     0,     0,     0,     0,
+   145,   146,   147,     0,   150,   151,   152,   153,   154,   155,
+     0,     0,     0,     0,     0,     0,     0,     0,   674,     0,
+   328,     0,   157,     0,   148,   139,   140,   141,   142,   143,
+   144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   145,   146,   147,     0,     0,   150,   151,   152,
+   153,   154,   155,     0,     0,     0,     0,     0,     0,     0,
+     0,   156,     0,     0,     0,   157,   148,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,   369,     0,     0,
    370,     0,     0,   371,    76,   158,   159,   160,   161,    80,
-   126,   127,   128,     0,   129,   130,   131,   132,   133,   134,
-   135,   136,   203,  -517,   901,     0,     0,     0,   368,     0,
-     0,     0,     0,   139,   140,   141,   142,   143,   144,     0,
-     0,     0,     0,     0,     0,     0,    76,   329,   330,   160,
-   145,   146,   147,   126,   127,   128,     0,   129,   130,   131,
-   132,   133,   134,   135,   136,   203,  -517,     0,     0,     0,
-     0,   368,     0,     0,   148,     0,   139,   140,   141,   142,
-   143,   144,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   145,   146,   147,     0,   150,   151,   152,
-   153,   154,   155,     0,     0,     0,     0,     0,     0,     0,
-     0,   156,     0,     0,     0,   157,     0,   148,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   157,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   150,   151,   152,   153,   154,   155,   293,     0,     0,     0,
-     0,     0,     0,     0,   156,     0,     0,     0,   157,     0,
+   369,     0,     0,   370,     0,     0,   371,    76,   158,   159,
+   160,   161,    80,   126,   127,   128,     0,   129,   130,   131,
+   132,   133,   134,   135,   136,   203,  -524,   779,     0,     0,
+     0,   368,     0,     0,     0,     0,   139,   140,   141,   142,
+   143,   144,     0,     0,     0,     0,     0,     0,     0,    76,
+   329,   330,   160,   145,   146,   147,   126,   127,   128,     0,
+   129,   130,   131,   132,   133,   134,   135,   136,   203,  -524,
+   780,     0,     0,     0,   368,     0,     0,   148,     0,   139,
+   140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   145,   146,   147,     0,
+   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
+     0,     0,     0,     0,   156,     0,   357,     0,   157,     0,
+   148,   139,   140,   141,   142,   143,   144,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   145,   146,
+   147,     0,     0,   150,   151,   152,   153,   154,   155,     0,
+     0,     0,     0,     0,     0,     0,     0,   781,     0,     0,
+     0,   157,   148,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   369,     0,     0,   370,     0,     0,   371,
+    76,   158,   159,   160,   161,    80,     0,     0,     0,     0,
+     0,     0,     0,   157,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   369,     0,     0,   370,
+     0,     0,   371,    76,   158,   159,   160,   161,    80,   126,
+   127,   128,     0,   129,   130,   131,   132,   133,   134,   135,
+   136,   203,  -524,   782,     0,     0,     0,   368,     0,     0,
+     0,     0,   139,   140,   141,   142,   143,   144,     0,     0,
+     0,     0,     0,     0,     0,    76,   329,   330,   160,   145,
+   146,   147,   126,   127,   128,     0,   129,   130,   131,   132,
+   133,   134,   135,   136,   203,  -524,   901,     0,     0,     0,
+   368,     0,     0,   148,     0,   139,   140,   141,   142,   143,
+   144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   145,   146,   147,     0,   150,   151,   152,   153,
+   154,   155,     0,     0,     0,     0,     0,     0,     0,     0,
+   156,     0,   654,     0,   157,     0,   148,   139,   140,   141,
+   142,   143,   144,   656,     0,     0,     0,     0,   139,   140,
+   141,   142,   143,   144,   145,   146,   147,     0,     0,   150,
+   151,   152,   153,   154,   155,   145,   146,   147,     0,     0,
+     0,     0,     0,   156,     0,     0,     0,   157,   148,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   369,
+     0,     0,   370,     0,     0,   371,    76,   158,   159,   160,
+   161,    80,     0,     0,     0,     0,     0,     0,     0,   157,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   157,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   369,     0,     0,   370,     0,     0,   371,    76,
+   158,   159,   160,   161,    80,   126,   127,   128,     0,   129,
+   130,   131,   132,   133,   134,   135,   136,   203,  -524,     0,
+     0,     0,     0,   368,     0,     0,     0,     0,   139,   140,
+   141,   142,   143,   144,     0,     0,     0,     0,     0,     0,
+     0,    76,   329,   330,   160,   145,   146,   147,     0,     0,
+     0,     0,    76,   329,   330,   160,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   150,   151,   152,   153,   154,   155,   293,     0,
+     0,     0,     0,     0,     0,     0,   156,     0,     0,     0,
+   157,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     3,     0,     0,     0,     0,
+     0,   729,     0,     0,     0,     0,   730,   731,   732,   733,
+   734,   735,     0,     0,     0,     0,     0,  -389,  -389,  -389,
+     0,     4,     0,   145,   736,   737,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   369,     0,   738,   370,     0,
+     0,   371,    76,   158,   159,   160,   161,    80,    11,    12,
+    13,     0,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,    33,    34,    35,    36,    37,    38,   157,    39,
+    40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+    50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+    60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,   293,     0,     0,     0,
+     0,     0,     0,     0,     0,   120,     0,     0,     0,    81,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     3,     0,     0,     0,     0,     0,     0,
-   369,     0,     0,   370,     0,     0,   371,    76,   158,   159,
-   160,   161,    80,     0,     0,  -382,  -382,  -382,     0,     4,
+    76,   739,   740,   741,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     4,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,  -658,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   369,     0,     0,   370,     0,     0,   371,
-    76,   158,   159,   160,   161,    80,    11,    12,    13,     0,
+     0,     0,     0,     0,     0,     0,    11,    12,    13,     0,
     14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
      0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
     33,    34,    35,    36,    37,    38,     0,    39,    40,    41,
     42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
     52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
     62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,   293,     0,     0,     0,     0,     0,
+    72,    73,    74,    75,  -146,     0,     0,     0,     0,  -146,
      0,     0,     0,   120,     0,     0,     0,    81,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     3,     0,     0,     0,     0,     0,   328,   945,     0,
-     0,     0,   139,   140,   141,   142,   143,   144,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     4,     0,   145,
-   146,   147,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,  -651,     0,     0,     0,     0,     0,
-     0,     0,     0,   148,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    11,    12,    13,     0,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,     0,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-    35,    36,    37,    38,   157,    39,    40,    41,    42,    43,
-    44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-    54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    75,  -139,     0,     0,     0,     0,  -139,     0,     0,
-     0,   120,     0,     0,     0,    81,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     3,     0,
-     0,     0,     0,     0,     0,     0,    76,   329,   330,   160,
+     3,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     4,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     4,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    11,    12,    13,     0,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,     0,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,   288,
-     0,     0,     0,     0,     0,     0,     0,     0,   120,     0,
-     0,     0,    81,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     3,     0,     0,     0,     0,
+     0,     0,     0,    11,    12,    13,     0,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,     0,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,     0,    39,    40,    41,    42,    43,    44,
+    45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+    55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,   288,     0,     0,     0,     0,     0,     0,     0,     0,
+   120,     0,     0,     0,    81,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     3,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     4,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     4,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,  -520,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    11,    12,
-    13,     0,    14,    15,    16,    17,    18,    19,    20,    21,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+  -527,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    11,    12,    13,     0,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    23,     0,    24,    25,    26,    27,    28,
+    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+     0,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+    68,    69,    70,    71,    72,    73,    74,    75,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   120,    11,    12,
+    13,    81,    14,    15,    16,    17,    18,    19,    20,    21,
     22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
     31,    32,    33,    34,    35,    36,    37,    38,     0,    39,
     40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
     50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
     60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,    75,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   120,    11,    12,    13,    81,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,     0,    39,    40,    41,
-    42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-    52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,  -658,     0,     0,     0,     0,     0,
-     0,     0,     0,   120,     0,     0,     0,    81,     0,     0,
+    70,    71,    72,    73,    74,    75,  -665,     0,     0,     0,
+     0,     0,     0,     0,     0,   120,     0,     0,     0,    81,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   328,  -255,     0,     0,     0,   139,   140,
-   141,   142,   143,   144,     0,     0,     0,     0,     0,  -660,
-  -660,  -660,     0,     0,     0,   145,   146,   147,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  -660,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-  -660,  -660,  -660,     0,  -660,  -660,  -660,  -660,  -660,  -660,
-  -660,  -660,  -660,  -660,     0,  -660,  -660,  -660,  -660,  -660,
-  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,
-   157,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,
-  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,
-  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,
-  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -660,  -273,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     2,     0,
-     0,  -660,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    76,   329,   330,   160,     0,     0,     0,     0,
+     0,  -667,  -667,  -667,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,  -667,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  -667,  -667,  -667,     0,  -667,  -667,  -667,  -667,
+  -667,  -667,  -667,  -667,  -667,  -667,     0,  -667,  -667,  -667,
+  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,
+  -667,  -667,     0,  -667,  -667,  -667,  -667,  -667,  -667,  -667,
+  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,
+  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,
+  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,  -667,
+  -280,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     2,     0,     0,  -667,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    11,    12,    13,     0,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,     0,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    38,     0,    39,    40,    41,    42,    43,    44,    45,
-    46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-     0,     0,     0,     0,     0,     0,     0,    76,    77,    78,
-   328,    79,    80,    81,     0,   139,   140,   141,   142,   143,
-   144,   357,     0,     0,     0,     0,   139,   140,   141,   142,
-   143,   144,   145,   146,   147,     0,     0,     0,     0,     0,
-     0,   654,     0,   145,   146,   147,   139,   140,   141,   142,
-   143,   144,   656,     0,     0,     0,   148,   139,   140,   141,
-   142,   143,   144,   145,   146,   147,     0,   148,     0,     0,
-     0,     0,   729,     0,   145,   146,   147,   730,   731,   732,
-   733,   734,   735,     0,     0,     0,     0,   148,     0,     0,
-     0,     0,     0,     0,   145,   736,   737,   157,   148,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   157,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   738,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   157,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   157,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   157,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    76,
-   329,   330,   160,  -199,  -199,     0,     0,     0,     0,     0,
-    76,   329,   330,   160,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    76,   329,   330,   160,     0,     0,     0,     0,     0,     0,
-     0,    76,   329,   330,   160,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    76,   739,   740,   741,     0,     0,     0,     0,    11,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    11,    12,    13,     0,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,     0,    24,
+    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+    35,    36,    37,    38,     0,    39,    40,    41,    42,    43,
+    44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+    54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,  -206,  -206,     0,     0,     0,     0,     0,    76,
+    77,    78,     0,    79,    80,    81,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    11,    12,
+    13,     0,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,    33,    34,    35,    36,    37,    38,     0,    39,
+    40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+    50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+    60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,     3,     0,     0,     0,
+     0,     0,     0,     0,     0,   120,     0,     0,     0,    81,
+     0,     0,     0,     0,     0,     0,     0,     0,  -389,  -389,
+  -389,     0,     4,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    11,
     12,    13,     0,    14,    15,    16,    17,    18,    19,    20,
     21,    22,    23,     0,    24,    25,    26,    27,    28,    29,
     30,    31,    32,    33,    34,    35,    36,    37,    38,     0,
@@ -1833,8 +1879,8 @@ static const short yytable[] = {    95,
     59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
     69,    70,    71,    72,    73,    74,    75,     3,     0,     0,
      0,     0,     0,     0,     0,     0,   120,     0,     0,     0,
-    81,     0,     0,     0,     0,     0,     0,     0,     0,  -382,
-  -382,  -382,     0,     4,     0,     0,     0,     0,     0,     0,
+    81,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     4,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1844,424 +1890,344 @@ static const short yytable[] = {    95,
      0,    39,    40,    41,    42,    43,    44,    45,    46,    47,
     48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
     58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,     3,     0,
-     0,     0,     0,     0,     0,     0,     0,   120,     0,     0,
+    68,    69,    70,    71,    72,    73,    74,    75,  -389,  -389,
+  -389,     0,     0,     0,     0,     0,     0,   120,     0,     0,
      0,    81,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     4,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    11,    12,    13,     0,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,     0,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,  -382,
-  -382,  -382,     0,     0,     0,     0,     0,     0,   120,     0,
-     0,     0,    81,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    11,    12,    13,     0,    14,    15,    16,    17,    18,    19,
-    20,    21,    22,    23,     0,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-     0,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,     8,     9,
-    10,     0,     0,     0,     0,     0,     0,   120,     0,     0,
-     0,    81,     0,     0,     0,     0,     0,    11,    12,    13,
-     0,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,     0,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    38,     0,    39,    40,
-    41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-    51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-    71,    72,    73,    74,    75,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   120,    11,    12,    13,    81,    14,
-    15,    16,    17,    18,    19,    20,    21,    22,    23,     0,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-    34,    35,    36,    37,    38,     0,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-    53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   120,     0,     0,     0,    81
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    11,
+    12,    13,     0,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,     0,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,    33,    34,    35,    36,    37,    38,     0,
+    39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+    49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+    59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,     8,     9,    10,
+     0,     0,     0,     0,     0,     0,   120,     0,     0,     0,
+    81,     0,     0,     0,     0,     0,    11,    12,    13,     0,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+    33,    34,    35,    36,    37,    38,     0,    39,    40,    41,
+    42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+    52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   120,    11,    12,    13,    81,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,     0,    24,
+    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+    35,    36,    37,    38,     0,    39,    40,    41,    42,    43,
+    44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+    54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   120,     0,     0,     0,    81
 };
 
 static const short yycheck[] = {     0,
-     0,   469,     3,   106,     0,    89,   366,   303,   126,   368,
-    11,    12,   501,   626,   418,   664,     2,    18,    19,    20,
+   106,    89,     3,   469,   501,   366,   409,   410,   320,     2,
+    11,    12,     0,   368,     0,   626,   664,    18,    19,    20,
     21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
     31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-    41,    42,    43,    19,   322,   452,   664,    48,    49,    50,
+    41,    42,    43,   407,   408,   630,   418,    48,    49,    50,
     51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-    61,    62,    63,    64,   407,   408,   419,   409,   410,   417,
-   719,   664,    18,     5,    75,   630,   777,     0,    24,   415,
-   416,    82,    82,   479,   558,     5,    82,   560,    34,  1040,
-  1041,   451,   411,   412,   413,   414,   455,   809,   789,   100,
-   906,   719,     5,   909,   803,   106,   204,  1089,    22,     8,
-   915,   209,    24,   211,  1096,   116,   117,   118,    24,    85,
-    34,   122,    25,   684,     8,   223,   719,   113,    34,    21,
-    24,   215,    26,    25,    86,    87,   122,   138,  1137,   499,
-  1117,  1118,    86,    87,   145,   139,   140,   141,   142,   143,
-   144,    41,    24,  1152,    26,  1154,   711,    49,    50,    82,
-  1111,   797,     0,  1114,   800,     3,    56,     5,    34,     8,
-    19,    20,   116,   117,    21,    24,     6,     7,    25,    24,
-    29,    30,    31,    32,    33,    34,   130,   899,   993,    34,
-   664,   664,  1169,   894,  1000,   909,  1002,    46,    47,    48,
-    18,    18,   480,   204,   611,    23,    28,   183,   184,   185,
-   506,   187,   188,   702,    21,  1166,   612,   908,    25,   910,
-   919,    70,    44,    18,     9,    10,     0,   788,   587,     3,
-   791,   183,   184,     7,     8,     9,    10,   183,   184,   138,
-   320,    28,   108,   109,    82,   719,   719,    24,   366,    26,
-   610,   183,   184,   185,   138,   187,   188,    44,    96,    97,
-   664,    99,   111,   183,   184,   185,   902,   187,   188,   183,
-   184,   185,   632,   187,   188,    21,    21,   183,   184,    25,
-    25,     9,    10,   182,   122,   286,  1000,    24,  1002,    26,
-   291,   190,   292,    39,    41,   194,   592,   196,   182,   138,
-    18,   302,   303,    21,   305,   306,   302,    25,    82,    56,
-   194,   664,   196,    21,    18,   719,   664,    21,   319,    27,
-   933,   664,   664,   319,   325,   814,   225,   328,   664,     8,
-    21,   980,   106,   451,   183,   184,   185,   186,   183,   184,
-   636,   225,    26,   182,   428,   664,   347,    18,   122,   447,
-    34,   190,    26,    18,    28,   194,    21,   196,   654,   133,
-   656,   347,   980,    24,   138,     0,   719,   368,     3,  1005,
-    44,   719,     7,    97,   929,    99,   719,   719,     5,    25,
-    26,   499,   156,   719,   569,     5,   225,   980,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    25,   584,
-   719,   875,    21,    21,   877,    25,    25,    25,   182,    24,
-   404,   405,   406,  1090,    32,    33,   190,    24,   192,   204,
-   194,    98,   196,   100,   209,   102,   211,   104,    18,    34,
-   204,    21,   109,   729,   794,   209,    24,   211,   223,   224,
-    37,    38,   119,   443,   121,    18,    24,    82,    21,   223,
-   224,   225,    25,   454,    51,    52,   457,    24,   454,   138,
-    21,   457,    21,   464,    25,   466,    25,   468,   469,   873,
-   471,   106,    18,  1150,  1151,   476,   204,    15,   479,    18,
-    85,   209,    21,   211,    23,   486,   163,   122,    49,    50,
-    49,    50,   610,   479,    16,   223,   224,   498,   133,    22,
-   501,    18,   503,   182,    21,   506,   980,   980,   346,  1186,
-   504,   190,    32,    33,   632,   194,    24,   196,    26,   862,
-   863,   874,   864,   865,   872,    22,    34,   607,   302,   428,
-    21,   305,   306,   307,   870,   871,    27,   183,   184,   185,
-    25,   187,   188,    28,   428,   319,   225,   866,   867,   868,
-   869,   325,     5,    16,    86,    87,   183,   184,   185,    16,
-   187,   188,    21,   183,   184,   185,    25,   187,   188,   569,
-    21,    24,    25,    26,    25,    16,   980,    22,   183,   184,
-   939,    34,   187,   188,   584,    29,    26,    39,   589,   428,
-  1079,   592,  1060,    40,    34,   369,   370,   371,    18,   702,
-   374,    21,    53,    54,   605,   606,    37,    38,   382,    24,
-   384,   612,    27,    24,   291,    26,    49,    50,   295,    34,
-    51,    52,   460,    34,    21,    55,   612,   980,    25,    21,
-   631,    18,   980,    25,    21,   636,   313,   980,   980,   316,
-    26,   192,    28,    24,   980,    37,    38,   324,   649,   650,
-   327,   183,   184,   654,   428,   656,    20,    21,    44,    51,
-    52,   980,   447,    25,    26,    24,    28,   302,    27,   568,
-   305,   306,   307,   447,    21,    34,   794,   678,    25,   453,
-   454,    19,    44,   457,   319,   686,    18,   688,    92,    21,
-   325,   692,   693,   467,     5,   469,   697,   471,    92,    34,
-   701,   702,    49,    50,    18,   479,   707,    21,   482,    22,
-   828,   814,   486,    24,    25,    26,   702,    18,    21,   447,
-    21,   707,    25,    34,  1020,    22,    29,    22,   729,   568,
-   183,   184,   185,    24,   187,   188,   730,   731,   732,   733,
-   734,   735,    92,   183,   184,   185,   520,   187,   188,   428,
-    19,    25,    26,    92,    28,   529,   530,    24,    20,    26,
-   183,   184,   185,    27,   187,   188,  1126,    34,   183,   184,
-    44,   186,   183,   184,   185,   452,   187,   188,   189,    24,
-    21,   619,   459,   784,    25,    18,    21,   464,    18,   466,
-    25,    32,    33,    18,   568,   569,    23,   474,    24,   180,
-   181,   478,   183,   184,    21,   186,    22,   581,    25,    18,
-   584,   585,   813,   814,    21,   816,  1176,    21,    25,   454,
-    25,    25,   457,   374,   183,   184,    21,   186,   814,    25,
-    25,   382,   467,   384,   469,    21,   471,    24,   612,    25,
-   183,   921,    37,    38,   479,    53,    54,   482,   183,   184,
-   185,   486,   187,   188,    19,    21,    51,    52,   126,    25,
-    24,    18,    26,    18,    28,   859,   860,   861,    34,    35,
-    36,   139,   140,   141,   142,   143,   144,    21,   146,   147,
-    44,    25,    18,    47,    48,     9,   660,   661,    21,   568,
-   664,    18,    25,    18,   529,   530,    25,   671,   672,    21,
-   674,   985,   453,    25,   905,    11,    21,   987,    21,   586,
-    25,   912,    25,   687,    24,   689,   183,   184,   185,    21,
-   187,   188,    21,    25,   698,  1009,  1006,   701,   702,   703,
-    24,  1011,    21,    21,   611,    21,    25,    25,    21,    25,
-    21,   119,    25,   121,    25,   719,    42,    43,   786,   943,
-  1030,   789,    19,   630,   132,   133,  1036,   135,   635,   137,
-   138,    27,    21,    21,    21,  1045,    25,    25,    25,   520,
-    21,    21,   150,    11,    25,    25,  1079,   612,    21,    24,
-    88,    26,    25,    28,     8,     9,    10,    21,    21,   666,
-    19,    25,    25,   994,  1074,  1075,   997,  1077,    88,    44,
-    21,   997,    47,    48,    25,    21,    21,   781,  1126,    25,
-    25,    21,  1013,    19,  1015,    25,    21,  1013,   569,  1020,
-    25,    21,  1023,  1024,  1142,    25,    24,  1013,    21,    22,
-  1030,    32,    33,   584,   585,    67,    68,    69,    49,    50,
-   814,  1121,    21,   183,   184,    23,    25,    34,    35,    36,
-   824,    19,   687,    25,   689,    34,    35,    36,  1176,  1060,
-    22,  1062,  1063,   698,    21,   742,   701,   702,   906,    21,
-   908,   909,   910,    18,  1074,    34,    35,    36,  1079,    57,
-    58,    59,    60,    61,    62,    63,    64,    65,    66,     8,
-    24,  1171,    72,    73,    74,    72,    73,    74,   366,    53,
-    54,    78,    79,    80,    81,    82,    83,    84,    21,   660,
-   661,    72,    73,    74,   138,    51,    52,    53,    20,    21,
-    25,   672,    22,  1124,   186,   802,  1127,    20,    21,  1130,
-   186,  1127,    21,    22,    32,    33,   404,   405,   406,   407,
-   408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-   418,   419,   703,    11,    24,   186,    24,    24,   182,    23,
-    25,    27,  1000,    20,  1002,    19,   190,    20,    19,     5,
-   194,    23,   196,    21,   948,   949,    25,    27,    24,   814,
-   204,   205,    22,   451,    88,   209,    24,   211,    25,   824,
-    78,    79,    80,    81,    82,    83,    84,    88,  1199,   223,
-   224,   225,    88,    20,    20,    18,   980,    27,  1209,    18,
-    25,    25,    39,   987,    21,    27,    24,   136,    29,   138,
-   897,   898,    25,   997,    25,    25,    55,    25,   905,    88,
-    40,   499,    25,    24,    18,    25,   504,  1011,    25,  1013,
-    25,    21,  1016,    25,    18,   177,    18,   178,    21,   177,
-    18,   188,   929,    88,   178,  1029,    88,    21,    20,    22,
-    20,    20,    88,   182,    25,  1039,  1040,  1041,    25,    88,
-    24,   190,    18,    20,  1048,   194,    73,   196,    27,    18,
-    25,    25,    88,    88,    88,   204,  1060,    27,     0,    88,
-   558,   360,   560,    88,   562,   563,    88,     8,     9,    10,
-     0,    82,   325,   778,   900,  1079,   225,  1010,  1038,  1103,
-   894,  1166,   926,   948,   949,  1089,  1090,  1011,   995,   388,
-  1123,   471,  1096,  1127,   393,   394,   395,   396,   397,   398,
-   399,   400,   401,   402,   403,   592,   843,  1111,  1112,  1113,
-  1114,   689,   610,  1117,  1118,   687,   814,   113,   701,  1123,
-   347,    10,   224,  1127,   428,   424,    19,  1084,   520,   719,
-    -1,    24,   997,   387,   632,    -1,    29,    30,    31,    32,
-    33,    34,   980,     8,     9,    10,  1150,  1151,  1013,    -1,
-    -1,  1016,    -1,    46,    47,    48,    -1,  1064,    -1,    -1,
-    -1,    -1,  1166,  1167,  1168,  1169,   664,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   428,    -1,    -1,    70,    -1,   328,
-    -1,    -1,  1186,    -1,    -1,    -1,    -1,   336,   337,   338,
-   339,    -1,    -1,   447,    -1,  1060,    -1,   138,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,
-    -1,     8,     9,    10,  1079,    -1,    -1,    -1,   111,   368,
-    -1,   719,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   730,   731,   732,   733,   734,   735,   736,   737,
-   389,   182,    -1,    -1,    -1,    -1,    -1,  1112,  1113,   190,
-     8,     9,    10,   194,    -1,   196,    -1,    -1,    -1,    -1,
-    -1,    -1,  1127,   204,    -1,    -1,    -1,  1174,   209,    -1,
-   211,    -1,    -1,   138,    -1,    -1,    -1,    -1,    -1,   428,
-    -1,    -1,   223,   224,   225,    -1,   435,     8,     9,    10,
-   183,   184,   185,   186,    -1,    -1,   794,    -1,    72,    73,
-    74,    -1,  1167,  1168,    78,    79,    80,    81,    82,    83,
-    84,    -1,    -1,    -1,   568,    -1,    -1,   182,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   190,    -1,    -1,    -1,   194,
-   828,   196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,
-    -1,   138,    -1,    -1,   209,    -1,   211,   646,    -1,    -1,
+    61,    62,    63,    64,   415,   416,   419,    27,   417,   303,
+     8,   719,     5,   664,    75,   452,   560,    19,    24,     0,
+   797,    82,     3,   800,     5,   664,   558,   479,    34,   789,
+   451,     8,    25,   803,    82,   322,    82,    24,    18,   100,
+   455,   126,   777,   915,    24,   106,     0,    41,    24,    86,
+    87,    27,   809,     5,    34,   116,   117,   118,    34,    21,
+   113,   122,    56,    28,    24,    27,   711,   215,   719,   122,
+    41,    18,   684,    25,    34,     9,    10,   138,   499,    44,
+   719,    34,    86,    87,   145,    56,  1090,  1091,   569,   139,
+   140,   141,   142,   143,   144,  1040,  1041,    18,  1090,  1119,
+  1120,    82,    26,   584,   204,   411,   412,   413,   414,   209,
+    34,   211,   116,   117,    24,    96,    97,     8,    99,    24,
+   664,   993,    28,   223,    34,   902,   130,     0,    82,    34,
+     3,  1089,   664,     5,     7,     8,     9,    10,    44,  1097,
+   138,   122,   899,   204,  1148,   702,   183,   184,   908,   919,
+   910,    21,    24,    25,    26,   108,   109,  1177,     8,   894,
+   612,   138,    34,  1155,     6,     7,   186,  1159,  1113,     9,
+    10,  1116,   587,    85,   611,   719,   788,   183,   184,   791,
+    24,   183,   184,   185,   182,   187,   188,   719,    24,   610,
+   183,   184,   185,   480,   187,   188,   194,    24,   196,     5,
+    21,   664,  1194,   183,   184,   182,    27,   183,   184,    82,
+   186,   632,   506,   190,    21,  1139,    24,   194,    25,   196,
+   180,   181,    29,   183,   184,   286,   186,   225,  1005,  1174,
+   291,    24,   664,   106,   906,   607,  1160,   909,  1162,    21,
+   664,   302,   303,    25,   305,   306,   292,   138,   225,   122,
+    26,   664,    28,   664,   302,   664,   719,   814,   319,    24,
+   133,    26,   933,    18,   325,   138,   909,   328,    44,    34,
+   204,   319,   980,   183,   184,   209,    18,   211,   183,   184,
+   428,   366,    18,   156,   929,    21,   347,   719,   138,   223,
+   224,   182,     5,    21,   347,   719,    21,    25,   592,   190,
+    25,    18,     5,   194,    21,   196,   719,   368,   719,   182,
+   719,   183,   184,   185,    39,   187,   188,   190,    24,   192,
+    26,   194,    25,   196,   192,    86,    87,    22,  1000,   980,
+  1002,   204,   182,   877,   225,    26,   209,    28,   211,    34,
+   190,   980,   636,   875,   194,    21,   196,   447,    16,    25,
+   223,   224,   225,    44,   404,   405,   406,  1000,   664,  1002,
+   654,    24,   656,    18,   204,   346,   451,    15,    23,   209,
+    21,   211,    21,   794,    25,   225,    25,   183,   184,   185,
+    16,   187,   188,   223,   224,     0,    21,    21,     3,    16,
+    25,    25,     7,   454,    32,    33,   457,   443,    49,    50,
+    16,   864,   865,   464,    34,   466,   454,   468,   469,   457,
+   471,    22,    21,   719,   499,   476,    25,    22,   479,    53,
+    54,    18,   183,   184,    21,   486,   479,    21,    25,   302,
+   428,    25,   305,   306,   307,   729,   980,   498,   862,   863,
+   501,   873,   503,    37,    38,   506,   319,    22,   980,    21,
+    34,   428,   325,    25,   504,    85,    29,    51,    52,   870,
+   871,   874,    18,   872,    21,    21,    40,    82,    25,    25,
+   183,   184,   185,    18,   187,   188,    21,    49,    50,   460,
+   183,   184,   185,    21,   187,   188,    39,    25,   183,   184,
+   185,   106,   187,   188,    32,    33,   369,   370,   371,    92,
+     5,   374,    24,    24,    26,    26,   374,   122,    26,   382,
+    28,   384,    34,   447,   382,    55,   384,   980,   133,    24,
+    25,    26,  1079,   569,   939,   610,    44,    18,   589,    34,
+    21,   592,    23,    92,  1060,    21,   702,   428,   584,    25,
+    18,    22,    21,    21,   605,   606,    25,   632,   980,   921,
+    24,   612,    26,   183,   184,   428,   980,   187,   188,   612,
+   866,   867,   868,   869,    21,    49,    50,   980,    25,   980,
+   631,   980,    21,    19,   447,   636,    25,    24,   428,    26,
+   453,   454,    21,    24,   457,   453,    25,    34,   649,   650,
+    24,   568,    26,   654,   467,   656,   469,    22,   471,   183,
+   184,   185,    25,   187,   188,    28,   479,   447,    22,   482,
+    49,    50,    21,   486,    19,   987,    25,   678,    25,    26,
+    21,    97,    21,    99,    25,   686,    25,   688,    37,    38,
+    92,   692,   693,    21,  1006,    20,   697,    25,   619,  1011,
+   701,   702,    51,    52,    32,    33,   707,   520,   814,   702,
+    49,    50,   520,    27,   707,    21,   529,   530,  1030,    25,
+    92,   183,   184,   185,  1036,   187,   188,   189,   729,    25,
+    26,    24,    28,  1045,   980,    25,    26,   568,    28,    18,
+   730,   731,   732,   733,   734,   735,    23,   302,    44,    21,
+   305,   306,   307,    25,    44,   568,   569,    42,    43,    37,
+    38,   569,  1074,  1075,   319,  1077,    18,  1128,   581,   794,
+   325,   584,   585,    51,    52,    18,   584,   585,   568,    18,
+    26,    18,    24,   784,    21,    24,  1020,    18,    34,    22,
+    29,    30,    31,    32,    33,    34,   183,   184,   185,   612,
+   187,   188,    21,   828,    53,    54,    25,    46,    47,    48,
+    25,  1123,   813,   814,    18,   816,    25,    26,    21,    28,
+    24,   814,    25,  1184,    25,    29,    30,    31,    32,    33,
+    34,    70,    67,    68,    69,    44,   183,   184,   185,    24,
+   187,   188,    46,    47,    48,    18,    24,   660,   661,    27,
+    21,   664,   660,   661,    25,    18,    34,    18,   671,   672,
+    21,   674,    20,    21,   672,   786,    70,  1179,   789,   859,
+   860,   861,   111,    21,   687,   183,   689,    25,    21,   183,
+   184,   185,    25,   187,   188,   698,    37,    38,   701,   702,
+   703,    34,    35,    36,    21,   703,    18,   985,    25,   454,
+    51,    52,   457,    18,   905,    21,   719,   111,    18,    25,
+    19,   912,   467,    21,   469,    21,   471,    25,     9,    25,
+    23,  1009,    21,    11,   479,    25,    25,   482,    24,    21,
+    26,   486,    28,    25,    21,    22,    21,   183,   184,   185,
+    25,   187,   188,    24,   183,   184,   185,   186,    44,    32,
+    33,    47,    48,   943,    57,    58,    59,    60,    61,    62,
+    63,    64,    65,    66,    11,    21,    21,    21,   781,    25,
+    25,    25,    24,  1079,   529,   530,     8,     9,    10,   183,
+   184,   185,   186,    88,   119,   906,   121,   908,   909,   910,
+    21,    21,    21,   994,    25,    25,   997,   132,   133,    88,
+   135,   814,   137,   138,    18,   183,   184,    21,   186,   997,
+    19,   824,  1013,    21,  1015,   150,    19,    25,    18,  1020,
+  1013,    21,  1023,  1024,    19,  1013,    34,    35,    36,    49,
+    50,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    21,    21,    21,  1030,    25,    25,    25,     8,     9,
+    10,    27,    21,    19,    21,    23,    25,   612,    25,  1060,
+    24,  1062,  1063,    21,    98,    21,   100,    25,   102,    18,
+   104,    25,    21,    20,    21,   109,    53,    54,  1079,  1000,
+    22,  1002,    34,    35,    36,   119,    18,   121,  1074,    57,
+    58,    59,    60,    61,    62,    63,    64,    65,    66,    21,
+    24,    24,    26,  1128,    28,    21,   138,    78,    79,    80,
+    81,    82,    83,    84,    34,    35,    36,    20,    21,  1144,
+    44,    21,    22,    47,    48,  1126,   183,   184,  1129,   163,
+    22,  1132,   687,   186,   689,   948,   949,    72,    73,    74,
+    25,  1129,   186,   698,    32,    33,   701,   702,   186,    11,
+   182,    72,    73,    74,    51,    52,    53,    24,   190,  1184,
+    24,    24,   194,    20,   196,    25,    27,   980,    23,    19,
+    23,    20,   204,   205,   987,    19,    21,   209,   138,   211,
+     5,    27,    25,    24,   997,    22,    88,    88,    24,    88,
+    25,   223,   224,   225,    20,    18,    20,    27,  1011,    18,
+  1013,    29,    24,  1016,    25,    25,    21,    39,    25,    27,
+    88,    25,  1213,    25,    25,    55,  1029,    25,    24,    18,
+    25,    25,   182,  1224,    40,    25,  1039,  1040,  1041,    25,
+   190,    21,    18,   177,   194,  1048,   196,    18,     8,     9,
+    10,    21,   178,   177,   204,    18,    88,  1060,   188,   209,
+   178,   211,    21,    25,    88,    20,    22,   291,    20,   814,
+    24,   295,    25,   223,   224,   225,  1079,    18,    20,   824,
+    20,    27,    73,    18,    27,    88,  1089,  1090,  1091,   313,
+    27,    88,   316,    25,  1097,    88,    88,   360,    25,     0,
+   324,    88,     0,   327,    88,    88,    88,    82,   325,   778,
+  1113,  1114,  1115,  1116,   900,  1105,  1119,  1120,  1010,  1038,
+   894,   926,  1125,  1011,  1174,   388,  1129,   843,  1125,   471,
+   393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+   403,   592,  1129,   689,   687,  1148,   113,   814,    10,     8,
+   701,   347,  1155,   224,  1157,  1158,  1159,  1084,   520,   428,
+   719,   424,   980,    -1,    -1,   387,    -1,    -1,    -1,   126,
+    -1,  1174,  1175,  1176,  1177,    -1,    -1,    -1,   138,     8,
+     9,    10,   139,   140,   141,   142,   143,   144,    -1,   146,
+   147,  1194,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   948,   949,    -1,   428,    72,    73,    74,
+    -1,    -1,    -1,    78,    79,    80,    81,    82,    83,    84,
+    -1,    -1,   182,    -1,    -1,   447,    -1,    -1,   452,    -1,
+   190,    -1,    -1,    -1,   194,   459,   196,    -1,    -1,    -1,
+   464,    -1,   466,    -1,   204,    -1,    -1,    -1,    -1,   209,
+   474,   211,   997,    -1,   478,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   223,   224,   225,    -1,    -1,  1013,    -1,
+    -1,  1016,    -1,    -1,    -1,    -1,    -1,   136,   428,   138,
+    -1,    -1,    -1,    -1,    24,    25,    -1,    -1,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,   447,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,   138,
+    72,    73,    74,    -1,    -1,  1060,    78,    79,    80,    81,
+    82,    83,    84,   182,    -1,    -1,    -1,    -1,    -1,    -1,
+    70,   190,    -1,    -1,  1079,   194,    -1,   196,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   204,   568,    -1,    -1,    -1,
+    -1,    -1,    -1,   182,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   190,   586,    -1,    -1,   194,   225,   196,    -1,  1114,
+  1115,   111,    -1,    -1,    -1,   204,    -1,    -1,    -1,    -1,
+   209,    -1,   211,   646,  1129,    -1,    -1,   611,    -1,    -1,
+    -1,    -1,    -1,    -1,   223,   224,   225,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   630,    -1,    -1,   366,
+    -1,   635,  1157,  1158,    -1,    -1,    -1,    -1,   568,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   691,    -1,
+  1175,  1176,    -1,     8,     9,    10,    -1,    -1,    -1,    -1,
+    -1,    -1,   666,   183,   184,   185,   186,   404,   405,   406,
+   407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
+   417,   418,   419,    -1,    -1,    -1,    24,    25,   428,   328,
+    -1,    29,    30,    31,    32,    33,    34,   336,   337,   338,
+   339,    -1,    -1,    -1,    -1,    -1,    -1,   447,    46,    47,
+    48,    -1,    -1,    -1,   451,    -1,    -1,    -1,   357,    -1,
+    -1,    -1,    -1,     8,     9,    10,    -1,    -1,    -1,   368,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,   742,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   389,    -1,    -1,    -1,   797,    -1,    -1,   800,    -1,    -1,
+    -1,    -1,   499,    -1,    -1,    -1,    19,   504,     8,     9,
+    10,    24,    -1,   111,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,   138,    -1,    -1,    -1,    -1,    -1,   428,
+    -1,    -1,    -1,    46,    47,    48,   435,    -1,   802,   842,
+   843,    -1,    -1,    -1,    -1,   848,   849,   850,   851,   852,
+   853,   854,   855,   856,   857,   858,    -1,    70,    -1,   428,
+    -1,   558,    -1,   560,    -1,   562,   563,   182,   568,    -1,
+    -1,    -1,    -1,    -1,    -1,   190,    -1,    -1,   447,   194,
+    -1,   196,    -1,    -1,    -1,   183,   184,   185,   186,   204,
+    -1,    -1,    -1,   138,   209,    -1,   211,    -1,   111,   902,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   223,   224,
-   225,   859,   860,   861,   862,   863,   864,   865,   866,   867,
-   868,   869,   870,   871,   872,   873,   874,   875,    -1,   877,
-   138,    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,    -1,
-    -1,    -1,   691,   190,    -1,    -1,    -1,   194,    -1,   196,
-    -1,     8,     9,    10,    -1,    -1,    -1,   204,    -1,    -1,
-   559,    -1,   209,    -1,   211,    -1,    -1,   138,    -1,   568,
-    -1,    -1,    -1,    -1,   182,    -1,   223,   224,   225,    -1,
-    -1,    -1,   190,    -1,    -1,    -1,   194,    -1,   196,    -1,
-    -1,    -1,    -1,    -1,    -1,   943,   204,    -1,    -1,    -1,
-    -1,   209,    -1,   211,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   182,    -1,    -1,    -1,   223,   224,   225,    -1,   190,
-    -1,    -1,    -1,   194,    -1,   196,    -1,   626,    -1,    -1,
-    18,    -1,   980,   204,    23,    -1,    24,   428,   209,    -1,
-   211,    29,    30,    31,    32,    33,    34,    -1,   797,    -1,
-    -1,   800,   223,   224,   225,   654,   447,   656,    46,    47,
-    48,    -1,    -1,   662,    -1,    -1,   665,    -1,    57,    58,
-    59,    60,    61,    62,    63,    64,    65,    66,    -1,    -1,
-    -1,   138,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   842,   843,    -1,    -1,    -1,    -1,   848,
-   849,   850,   851,   852,   853,   854,   855,   856,   857,   858,
-    -1,    -1,    -1,   428,    -1,    -1,    -1,    -1,    -1,   718,
-    -1,    -1,    -1,   111,    -1,   182,    -1,    -1,    -1,    -1,
-   729,    -1,   447,   190,    -1,    -1,    -1,   194,    -1,   196,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,    -1,    -1,
-    -1,    -1,   209,   902,   211,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   223,   224,   225,    -1,
-    -1,    -1,    -1,    -1,    18,    -1,    -1,   568,  1126,    -1,
-    24,   428,    -1,    -1,    -1,    29,    30,    31,    32,    33,
-    34,    -1,    -1,    -1,  1142,   183,   184,   185,   186,    -1,
-   447,     1,    46,    47,    48,    -1,     6,     7,     8,    -1,
-    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-   428,    -1,    -1,    -1,    24,    -1,    70,    -1,  1176,    29,
-    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,   447,
-    -1,    -1,    42,    43,    -1,   844,    46,    47,    48,    -1,
-    -1,    -1,    -1,   568,    -1,    -1,  1005,   428,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,   447,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     0,     1,    -1,    -1,
-    -1,    -1,    92,    93,    94,    95,    96,    97,    98,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
-    24,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    34,   568,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    45,    -1,    -1,   933,    -1,    -1,    -1,    -1,   183,
-   184,   185,   186,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    67,    68,    69,    -1,    71,    -1,    -1,
-   568,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   428,    -1,    -1,    -1,    89,    90,    91,    -1,   978,
-    -1,    -1,    -1,   183,   184,   185,   186,   187,   188,    -1,
-   447,    -1,    -1,    -1,   108,   109,   110,   568,   112,   113,
-   114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
-   124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-   134,   135,   136,   137,    -1,   139,   140,   141,   142,   143,
-   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,     0,     1,    -1,    -1,    -1,    -1,    -1,   183,
-   184,   185,    -1,   187,   188,   189,    -1,    19,    -1,    -1,
-    -1,    -1,    24,    -1,    -1,    -1,    24,    29,    30,    31,
-    32,    33,    34,    -1,    -1,    -1,    34,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    46,    47,    48,    45,    -1,    -1,
-    -1,   568,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    67,
-    68,    69,    -1,    71,    -1,    -1,    -1,    75,    76,    77,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    89,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-   108,   109,   110,    -1,   112,   113,   114,   115,   116,   117,
-   118,   119,   120,   121,    -1,   123,   124,   125,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-    -1,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
-    -1,   183,   184,   185,   186,   183,   184,   185,     1,   187,
-   188,   189,    -1,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-    43,    -1,    45,    46,    47,    48,    -1,    -1,    -1,    -1,
+   225,    -1,    -1,   610,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    67,    68,    69,    70,    71,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   107,   108,   109,   110,   111,   112,
-   113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
-   123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,    -1,   139,   140,   141,   142,
-   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   183,   184,   185,   186,   187,   188,   189,     1,    -1,    -1,
-    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    -1,
-    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
-    -1,    -1,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    67,    68,    69,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   107,   108,   109,   110,   111,   112,   113,
-   114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
-   124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-   134,   135,   136,   137,    -1,   139,   140,   141,   142,   143,
-   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,
-   184,   185,   186,   187,   188,   189,     1,    -1,    -1,    -1,
-    -1,     6,     7,     8,    -1,    -1,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,
-    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    -1,
-    -1,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   897,   898,   632,    -1,   182,   138,    -1,
+    -1,   905,    -1,    -1,    -1,   190,    -1,    -1,    -1,   194,
+    -1,   196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,
+   559,    -1,    -1,    -1,   209,   929,   211,   664,    -1,   568,
+   183,   184,   185,   186,    -1,    -1,    -1,    -1,   223,   224,
+   225,    -1,   182,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   190,    -1,    -1,    -1,   194,    -1,   196,    -1,    -1,   568,
+    -1,    -1,  1005,    -1,   204,    -1,    -1,    -1,    -1,   209,
+    -1,   211,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   719,   223,   224,   225,    -1,   626,    -1,    -1,
+    -1,   995,    -1,   730,   731,   732,   733,   734,   735,   736,
+   737,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   654,    -1,   656,    -1,    -1,
+    -1,    -1,    -1,   662,    -1,    -1,   665,    19,    20,    -1,
+    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
+    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    46,    47,    48,   794,    -1,    -1,
+  1064,    24,    -1,    -1,    27,    -1,    29,    30,    31,    32,
+    33,    34,    -1,   428,    -1,    -1,    -1,    -1,    70,   718,
+    -1,    -1,    -1,    46,    47,    48,    -1,    -1,    19,    -1,
+   729,   828,   447,    24,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    33,    34,    -1,    -1,    -1,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    -1,   111,
+    -1,    -1,   859,   860,   861,   862,   863,   864,   865,   866,
+   867,   868,   869,   870,   871,   872,   873,   874,   875,    70,
+   877,    -1,    -1,   428,    -1,     6,     7,     8,   111,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    -1,    -1,   447,    24,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    33,    34,    -1,    -1,    -1,    -1,  1182,    -1,
+   111,    -1,    -1,    -1,    -1,    46,    47,    48,   428,    -1,
+    -1,   183,   184,   185,   186,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   844,   943,   447,    -1,    70,
+    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,   186,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    93,    94,    95,    96,    97,    98,    -1,    -1,
+    -1,    -1,    -1,   980,    -1,    -1,   107,    -1,    -1,    -1,
+   111,    -1,   183,   184,   185,   186,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
+     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    24,   933,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    45,   176,    -1,    -1,   179,    -1,
+    -1,   182,   183,   184,   185,   186,   187,   188,   568,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,   978,
+    71,    -1,    -1,    -1,    75,    76,    77,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
+    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,   110,
+    -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+   121,  1128,   123,   124,   125,   126,   127,   128,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,  1144,   139,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,     0,     1,  1184,    -1,    -1,
+    -1,    -1,   183,   184,   185,    -1,   187,   188,   189,    -1,
+    -1,    -1,    -1,    -1,    -1,    24,    -1,    -1,    27,    24,
+    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    34,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
+    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    67,    68,    69,    70,    -1,    -1,    -1,    -1,
+    -1,    70,    67,    68,    69,    -1,    71,    -1,    -1,    -1,
+    75,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    89,    90,    91,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,
-    95,    96,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   107,   108,   109,   110,   111,   112,   113,   114,
+    -1,    -1,   111,   108,   109,   110,    -1,   112,   113,   114,
    115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
    125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
    135,   136,   137,    -1,   139,   140,   141,   142,   143,   144,
    145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
    155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
    165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,
-   185,   186,   187,   188,   189,     1,    -1,    -1,    -1,    -1,
-     6,     7,     8,    -1,    -1,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,    25,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,     1,    -1,
-    46,    47,    48,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
-    -1,    24,    -1,    -1,    70,    -1,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-    43,    -1,    -1,    46,    47,    48,    92,    93,    94,    95,
-    96,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   107,    -1,    -1,    -1,   111,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
-    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    -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,   183,   184,   185,
-   186,   187,   188,    -1,    -1,     1,    -1,    -1,    -1,    -1,
-     6,     7,     8,    -1,    -1,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
-   183,   184,   185,   186,   187,   188,    42,    43,     1,    -1,
-    46,    47,    48,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-    -1,    24,    -1,    -1,    70,    -1,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-    43,    -1,    -1,    46,    47,    48,    92,    93,    94,    95,
-    96,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   107,    -1,    -1,    -1,   111,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    -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,   183,   184,   185,
-   186,   187,   188,    -1,    -1,     1,    -1,    -1,    -1,    -1,
-     6,     7,     8,    -1,    -1,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
-   183,   184,   185,   186,   187,   188,    42,    43,     1,    -1,
-    46,    47,    48,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
-    -1,    24,    -1,    -1,    70,    -1,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-    43,    -1,    -1,    46,    47,    48,    -1,    93,    94,    95,
-    96,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   107,    -1,    -1,    -1,   111,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   175,    -1,    -1,    -1,   183,   184,   185,   186,   183,   184,
+   185,     1,   187,   188,   189,    -1,     6,     7,     8,    -1,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    42,    43,    -1,    45,    46,    47,    48,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,
+    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    93,    94,    95,    96,    97,    98,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,
+   110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,    -1,   123,   124,   125,   126,   127,   128,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,    -1,   139,
+   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   183,   184,   185,   186,   187,   188,   189,
+     1,    -1,    -1,    -1,    -1,     6,     7,     8,    -1,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    -1,
+    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    42,    43,    -1,    -1,    46,    47,    48,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,
-   186,   187,   188,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     6,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
-   183,   184,   185,   186,   187,   188,    42,    43,    -1,    45,
-    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,    70,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,    71,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,
-    96,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-   116,   117,   118,   119,   120,   121,    -1,   123,   124,   125,
-   126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-   136,   137,    -1,   139,   140,   141,   142,   143,   144,   145,
-   146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-   176,    -1,    -1,   179,    -1,    -1,   182,   183,   184,   185,
-   186,   187,   188,   189,     6,     7,     8,    -1,    10,    11,
+    -1,    -1,    93,    94,    95,    96,    97,    98,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,   110,
+   111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+   121,    -1,   123,   124,   125,   126,   127,   128,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,    -1,   139,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   183,   184,   185,   186,   187,   188,   189,     1,
+    -1,    -1,    -1,    -1,     6,     7,     8,    -1,    -1,    11,
     12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
     -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
     32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    42,    43,    -1,    45,    46,    47,    48,    -1,    -1,    -1,
+    42,    43,    -1,    -1,    46,    47,    48,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,
+    -1,    -1,    -1,    -1,    -1,    67,    68,    69,    70,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,
@@ -2272,200 +2238,285 @@ static const short yycheck[] = {     0,
    142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
    152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
    162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,    -1,    -1,   179,    -1,    -1,
-   182,   183,   184,   185,   186,   187,   188,   189,     6,     7,
-     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    42,    43,    -1,    45,    46,    47,
-    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   183,   184,   185,   186,   187,   188,   189,     1,    -1,
+    -1,    -1,    -1,     6,     7,     8,    -1,    -1,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    24,    25,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+    43,     1,    -1,    46,    47,    48,     6,     7,     8,    -1,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    -1,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    42,    43,    -1,    -1,    46,    47,    48,    92,
+    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    92,    93,    94,    95,    96,    97,    98,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
+    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,    97,
-    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
-   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-   118,   119,   120,   121,    -1,   123,   124,   125,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-    -1,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,    -1,
-    -1,   179,    -1,    -1,   182,   183,   184,   185,   186,   187,
-   188,   189,     6,     7,     8,    -1,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
-    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    46,    47,    48,     6,     7,     8,    -1,    10,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,   186,   187,   188,    -1,    -1,     1,    -1,
+    -1,    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,   183,   184,   185,   186,   187,   188,    42,
+    43,     1,    -1,    46,    47,    48,     6,     7,     8,    -1,
+    -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    42,    43,    -1,    -1,    46,    47,    48,    92,
+    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    92,    93,    94,    95,    96,    97,    98,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
+    -1,   111,    -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,
+   183,   184,   185,   186,   187,   188,    -1,    -1,     1,    -1,
+    -1,    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,   183,   184,   185,   186,   187,   188,    42,
+    43,     1,    -1,    46,    47,    48,     6,     7,     8,    -1,
+    -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    42,    43,    -1,    -1,    46,    47,    48,    -1,
+    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    93,    94,    95,    96,    97,    98,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
+    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    -1,
+    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
+   183,   184,   185,   186,   187,   188,    -1,    -1,     1,    46,
+    47,    48,    -1,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
+    -1,    24,    -1,    70,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,   183,   184,   185,   186,   187,   188,    42,
+    43,    -1,    -1,    46,    47,    48,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   111,    -1,    -1,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   107,     6,     7,     8,   111,    10,
     11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,    30,
-    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    -1,    93,
-    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   107,    -1,    24,    25,   111,    -1,    70,
-    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-    -1,    -1,    93,    94,    95,    96,    97,    98,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,
-   111,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    33,    34,    -1,    -1,   183,   184,   185,   186,
+    -1,    42,    43,    -1,    45,    46,    47,    48,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   176,    -1,    -1,   179,    -1,    -1,   182,   183,
-   184,   185,   186,   187,   188,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,   186,   187,   188,    -1,    -1,    -1,    -1,
+    -1,    -1,    93,    94,    95,    96,    97,    98,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,   110,
+   111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+   121,    -1,   123,   124,   125,   126,   127,   128,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,    -1,   139,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,   176,    -1,    -1,   179,    -1,
+    -1,   182,   183,   184,   185,   186,   187,   188,   189,     6,
+     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,
+    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    42,    43,    -1,    45,    46,
+    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   176,    -1,    -1,   179,    -1,
-    -1,   182,   183,   184,   185,   186,   187,   188,     6,     7,
-     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   183,   184,   185,   186,    46,    47,
-    48,     6,     7,     8,    -1,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,
-    -1,    -1,    70,    -1,    29,    30,    31,    32,    33,    34,
+    -1,    -1,    -1,    70,    71,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    46,    47,    48,    -1,    93,    94,    95,    96,    97,
-    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
-    -1,    24,    -1,   111,    27,    70,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    46,    47,    48,    -1,    -1,    93,    94,
-    95,    96,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   107,    -1,    -1,    -1,   111,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    95,    96,
+    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,    -1,   123,   124,   125,   126,
+   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+   137,    -1,   139,   140,   141,   142,   143,   144,   145,   146,
+   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+    -1,    -1,   179,    -1,    -1,   182,   183,   184,   185,   186,
+   187,   188,   189,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+    43,    -1,    45,    46,    47,    48,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   176,    -1,
-    -1,   179,    -1,    -1,   182,   183,   184,   185,   186,   187,
-   188,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   176,    -1,    -1,   179,    -1,    -1,   182,   183,   184,
-   185,   186,   187,   188,     6,     7,     8,    -1,    10,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
-    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   183,   184,   185,   186,    46,    47,    48,     6,     7,     8,
+    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   107,   108,   109,   110,   111,   112,
+   113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
+   123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,    -1,   139,   140,   141,   142,
+   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   176,    -1,    -1,   179,    -1,    -1,   182,
+   183,   184,   185,   186,   187,   188,   189,     6,     7,     8,
     -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,
+    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
     29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-    -1,    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   107,    -1,    24,    -1,   111,
-    27,    70,    29,    30,    31,    32,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
-    47,    48,    -1,    -1,    93,    94,    95,    96,    97,    98,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,
-    -1,    -1,   111,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   176,    -1,    -1,   179,    -1,    -1,
-   182,   183,   184,   185,   186,   187,   188,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   176,    -1,    -1,
-   179,    -1,    -1,   182,   183,   184,   185,   186,   187,   188,
      6,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
     16,    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,   186,
-    46,    47,    48,     6,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
-    -1,    24,    -1,    -1,    70,    -1,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    46,    47,    48,    -1,    93,    94,    95,
+    -1,    70,    -1,    29,    30,    31,    32,    33,    34,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    46,    47,    48,    -1,    93,    94,    95,    96,    97,    98,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,
+    24,    -1,   111,    -1,    70,    29,    30,    31,    32,    33,
+    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    46,    47,    48,    -1,    -1,    93,    94,    95,
     96,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   107,    -1,    -1,    -1,   111,    -1,    70,    -1,    -1,
+    -1,   107,    -1,    -1,    -1,   111,    70,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   176,    -1,    -1,
+   179,    -1,    -1,   182,   183,   184,   185,   186,   187,   188,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    93,    94,    95,    96,    97,    98,    18,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,
    176,    -1,    -1,   179,    -1,    -1,   182,   183,   184,   185,
-   186,   187,   188,    -1,    -1,    67,    68,    69,    -1,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   186,   187,   188,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,
+   184,   185,   186,    46,    47,    48,     6,     7,     8,    -1,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    -1,
+    93,    94,    95,    96,    97,    98,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   107,    -1,    24,    -1,   111,    -1,
+    70,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
+    48,    -1,    -1,    93,    94,    95,    96,    97,    98,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
+    -1,   111,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,   176,    -1,    -1,   179,    -1,    -1,   182,
-   183,   184,   185,   186,   187,   188,   108,   109,   110,    -1,
-   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-    -1,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,    -1,   139,   140,   141,
-   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,    18,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   185,    -1,    -1,    -1,   189,    -1,    -1,
+   183,   184,   185,   186,   187,   188,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    45,    -1,    -1,    -1,    -1,    -1,    24,    25,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   176,    -1,    -1,   179,
+    -1,    -1,   182,   183,   184,   185,   186,   187,   188,     6,
+     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,
     -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    46,
-    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   108,   109,   110,    -1,   112,   113,
-   114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
-   124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-   134,   135,   136,   137,   111,   139,   140,   141,   142,   143,
-   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,    19,    -1,    -1,    -1,    -1,    24,    -1,    -1,
-    -1,   185,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,   186,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   183,   184,   185,   186,    46,
+    47,    48,     6,     7,     8,    -1,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
+    24,    -1,    -1,    70,    -1,    29,    30,    31,    32,    33,
+    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    46,    47,    48,    -1,    93,    94,    95,    96,
+    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   107,    -1,    24,    -1,   111,    -1,    70,    29,    30,    31,
+    32,    33,    34,    24,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    33,    34,    46,    47,    48,    -1,    -1,    93,
+    94,    95,    96,    97,    98,    46,    47,    48,    -1,    -1,
+    -1,    -1,    -1,   107,    -1,    -1,    -1,   111,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   176,
+    -1,    -1,   179,    -1,    -1,   182,   183,   184,   185,   186,
+   187,   188,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   176,    -1,    -1,   179,    -1,    -1,   182,   183,
+   184,   185,   186,   187,   188,     6,     7,     8,    -1,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    -1,
+    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   183,   184,   185,   186,    46,    47,    48,    -1,    -1,
+    -1,    -1,   183,   184,   185,   186,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   108,   109,   110,    -1,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,    -1,   123,   124,   125,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,    -1,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,    19,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,
-    -1,    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    93,    94,    95,    96,    97,    98,    18,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,    -1,
+   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,
+    -1,    71,    -1,    46,    47,    48,    -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,    71,    -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,    20,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,
+    -1,    -1,    -1,    -1,    -1,   176,    -1,    70,   179,    -1,
+    -1,   182,   183,   184,   185,   186,   187,   188,   108,   109,
    110,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
    120,   121,    -1,   123,   124,   125,   126,   127,   128,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,    -1,   139,
+   130,   131,   132,   133,   134,   135,   136,   137,   111,   139,
    140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
    150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
    160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   185,   108,   109,   110,   189,
+   170,   171,   172,   173,   174,   175,    18,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,    -1,   189,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,   186,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,   110,    -1,
    112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
     -1,   123,   124,   125,   126,   127,   128,   129,   130,   131,
    132,   133,   134,   135,   136,   137,    -1,   139,   140,   141,
    142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
    152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
    162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,    22,    -1,    -1,    -1,    -1,    -1,
+   172,   173,   174,   175,    19,    -1,    -1,    -1,    -1,    24,
     -1,    -1,    -1,   185,    -1,    -1,    -1,   189,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    24,    25,    -1,    -1,    -1,    29,    30,
-    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    67,
-    68,    69,    -1,    -1,    -1,    46,    47,    48,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
+    45,    -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,    71,    -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,   108,   109,   110,    -1,   112,   113,   114,
+   115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
+   125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+   135,   136,   137,    -1,   139,   140,   141,   142,   143,   144,
+   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   185,    -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    -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,    71,    -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,
+    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    108,   109,   110,    -1,   112,   113,   114,   115,   116,   117,
    118,   119,   120,   121,    -1,   123,   124,   125,   126,   127,
    128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   111,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+    -1,   139,   140,   141,   142,   143,   144,   145,   146,   147,
    148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
    158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    24,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,
-    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   168,   169,   170,   171,   172,   173,   174,   175,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   108,   109,
+   110,   189,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,    -1,   123,   124,   125,   126,   127,   128,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,    -1,   139,
+   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    22,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,    -1,   189,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   183,   184,   185,   186,    -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,    67,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,   108,   109,   110,    -1,   112,   113,   114,   115,
@@ -2475,30 +2526,41 @@ static const short yycheck[] = {     0,
    146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
    156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
    166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,
-    24,   187,   188,   189,    -1,    29,    30,    31,    32,    33,
-    34,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
-    33,    34,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,
-    -1,    24,    -1,    46,    47,    48,    29,    30,    31,    32,
-    33,    34,    24,    -1,    -1,    -1,    70,    29,    30,    31,
-    32,    33,    34,    46,    47,    48,    -1,    70,    -1,    -1,
-    -1,    -1,    24,    -1,    46,    47,    48,    29,    30,    31,
-    32,    33,    34,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    46,    47,    48,   111,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
+    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    34,    -1,    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,
-   184,   185,   186,    42,    43,    -1,    -1,    -1,    -1,    -1,
-   183,   184,   185,   186,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   183,   184,   185,   186,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   183,   184,   185,   186,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   183,   184,   185,   186,    -1,    -1,    -1,    -1,   108,
+    -1,    -1,    -1,    -1,   108,   109,   110,    -1,   112,   113,
+   114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
+   124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+   134,   135,   136,   137,    -1,   139,   140,   141,   142,   143,
+   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+   174,   175,    42,    43,    -1,    -1,    -1,    -1,    -1,   183,
+   184,   185,    -1,   187,   188,   189,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,
+   110,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,    -1,   123,   124,   125,   126,   127,   128,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,    -1,   139,
+   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,    45,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,    -1,   189,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,
+    69,    -1,    71,    -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,   108,
    109,   110,    -1,   112,   113,   114,   115,   116,   117,   118,
    119,   120,   121,    -1,   123,   124,   125,   126,   127,   128,
    129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
@@ -2507,8 +2569,8 @@ static const short yycheck[] = {     0,
    159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
    169,   170,   171,   172,   173,   174,   175,    45,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,    -1,
-   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-    68,    69,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    71,    -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,
@@ -2518,52 +2580,39 @@ static const short yycheck[] = {     0,
     -1,   139,   140,   141,   142,   143,   144,   145,   146,   147,
    148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
    158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    45,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,
+   168,   169,   170,   171,   172,   173,   174,   175,    67,    68,
+    69,    -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,
     -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    71,    -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,   108,   109,   110,    -1,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,    -1,   123,   124,   125,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,    -1,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,    67,
-    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,
-    -1,    -1,   189,    -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,
-   108,   109,   110,    -1,   112,   113,   114,   115,   116,   117,
-   118,   119,   120,   121,    -1,   123,   124,   125,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-    -1,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,    89,    90,
-    91,    -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,
-    -1,   189,    -1,    -1,    -1,    -1,    -1,   108,   109,   110,
-    -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-   121,    -1,   123,   124,   125,   126,   127,   128,   129,   130,
-   131,   132,   133,   134,   135,   136,   137,    -1,   139,   140,
-   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   185,   108,   109,   110,   189,   112,
-   113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
-   123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,    -1,   139,   140,   141,   142,
-   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   185,    -1,    -1,    -1,   189
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,
+   109,   110,    -1,   112,   113,   114,   115,   116,   117,   118,
+   119,   120,   121,    -1,   123,   124,   125,   126,   127,   128,
+   129,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
+   139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+   149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+   169,   170,   171,   172,   173,   174,   175,    89,    90,    91,
+    -1,    -1,    -1,    -1,    -1,    -1,   185,    -1,    -1,    -1,
+   189,    -1,    -1,    -1,    -1,    -1,   108,   109,   110,    -1,
+   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+    -1,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+   132,   133,   134,   135,   136,   137,    -1,   139,   140,   141,
+   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+   172,   173,   174,   175,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   185,   108,   109,   110,   189,   112,   113,
+   114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
+   124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+   134,   135,   136,   137,    -1,   139,   140,   141,   142,   143,
+   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+   174,   175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   185,    -1,    -1,    -1,   189
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/share/misc/bison.simple"
+#line 3 "/gnu/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -2756,7 +2805,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/share/misc/bison.simple"
+#line 196 "/gnu/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -3061,52 +3110,52 @@ yyreduce:
   switch (yyn) {
 
 case 5:
-#line 269 "cgrammar.y"
+#line 277 "cgrammar.y"
 { uentry_clearDecl (); ;
     break;}
 case 6:
-#line 270 "cgrammar.y"
+#line 278 "cgrammar.y"
 { uentry_clearDecl (); ;
     break;}
 case 7:
-#line 271 "cgrammar.y"
+#line 279 "cgrammar.y"
 { uentry_clearDecl (); ;
     break;}
 case 8:
-#line 272 "cgrammar.y"
+#line 280 "cgrammar.y"
 { uentry_clearDecl (); ;
     break;}
 case 9:
-#line 273 "cgrammar.y"
+#line 281 "cgrammar.y"
 { uentry_clearDecl (); ;
     break;}
 case 10:
-#line 274 "cgrammar.y"
+#line 282 "cgrammar.y"
 { uentry_checkDecl (); exprNode_free (yyvsp[0].expr); ;
     break;}
 case 11:
-#line 275 "cgrammar.y"
+#line 283 "cgrammar.y"
 { uentry_clearDecl (); ;
     break;}
 case 12:
-#line 279 "cgrammar.y"
+#line 287 "cgrammar.y"
 { checkConstant (yyvsp[-6].qtyp, yyvsp[-4].ntyp); ;
     break;}
 case 13:
-#line 281 "cgrammar.y"
+#line 289 "cgrammar.y"
 { checkValueConstant (yyvsp[-9].qtyp, yyvsp[-7].ntyp, yyvsp[-3].expr) ; ;
     break;}
 case 14:
-#line 284 "cgrammar.y"
+#line 292 "cgrammar.y"
 { context_enterFunctionDecl (); ;
     break;}
 case 15:
-#line 285 "cgrammar.y"
+#line 293 "cgrammar.y"
 { declareStaticFunction (yyvsp[-2].ntyp); context_quietExitFunction (); 
      context_exitFunctionDecl (); ;
     break;}
 case 16:
-#line 290 "cgrammar.y"
+#line 298 "cgrammar.y"
 { 
      qtype qint = qtype_create (ctype_int);
      yyval.ntyp = idDecl_fixBase (yyvsp[0].ntyp, qint);
@@ -3114,38 +3163,38 @@ case 16:
    ;
     break;}
 case 17:
-#line 296 "cgrammar.y"
+#line 304 "cgrammar.y"
 { yyval.ntyp = idDecl_fixBase (yyvsp[0].ntyp, yyvsp[-2].qtyp); ;
     break;}
 case 19:
-#line 301 "cgrammar.y"
+#line 309 "cgrammar.y"
 { yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ;
     break;}
 case 20:
-#line 304 "cgrammar.y"
+#line 312 "cgrammar.y"
 { yyval.ntyp = idDecl_create (yyvsp[0].cname, qtype_unknown ()); ;
     break;}
 case 21:
-#line 306 "cgrammar.y"
+#line 314 "cgrammar.y"
 { yyval.ntyp = idDecl_expectFunction (yyvsp[-2].ntyp); ;
     break;}
 case 22:
-#line 308 "cgrammar.y"
+#line 316 "cgrammar.y"
 { yyval.ntyp = idDecl_replaceCtype (yyvsp[-2].ntyp, ctype_makeArray (idDecl_getCtype (yyvsp[-2].ntyp))); ;
     break;}
 case 23:
-#line 310 "cgrammar.y"
+#line 318 "cgrammar.y"
 { 
      yyval.ntyp = idDecl_replaceCtype (yyvsp[-5].ntyp, ctype_makeFixedArray (idDecl_getCtype (yyvsp[-5].ntyp), exprNode_getLongValue (yyvsp[-2].expr)));
    ;
     break;}
 case 24:
-#line 314 "cgrammar.y"
+#line 322 "cgrammar.y"
 { setCurrentParams (uentryList_missingParams); 
         ;
     break;}
 case 25:
-#line 317 "cgrammar.y"
+#line 325 "cgrammar.y"
 { /* need to support globals and modifies here! */
      ctype ct = ctype_makeFunction (idDecl_getCtype (yyvsp[-6].ntyp), 
                                    uentryList_makeMissingParams ());
@@ -3155,12 +3204,12 @@ case 25:
    ;
     break;}
 case 26:
-#line 325 "cgrammar.y"
+#line 333 "cgrammar.y"
 { setCurrentParams (yyvsp[-1].entrylist); 
         ;
     break;}
 case 27:
-#line 328 "cgrammar.y"
+#line 336 "cgrammar.y"
 { clearCurrentParams ();
      yyval.ntyp = idDecl_replaceCtype (yyvsp[-7].ntyp, ctype_makeFunction (idDecl_getCtype (yyvsp[-7].ntyp), yyvsp[-4].entrylist));
      context_popLoc ();
@@ -3169,19 +3218,19 @@ case 27:
    ;
     break;}
 case 28:
-#line 336 "cgrammar.y"
+#line 344 "cgrammar.y"
 { yyval.ntyp = idDecl_create (yyvsp[0].cname, qtype_unknown ()); ;
     break;}
 case 29:
-#line 338 "cgrammar.y"
+#line 346 "cgrammar.y"
 { yyval.ntyp = idDecl_expectFunction (yyvsp[-2].ntyp); ;
     break;}
 case 30:
-#line 340 "cgrammar.y"
+#line 348 "cgrammar.y"
 { yyval.ntyp = idDecl_replaceCtype (yyvsp[-2].ntyp, ctype_makeArray (idDecl_getCtype (yyvsp[-2].ntyp))); ;
     break;}
 case 31:
-#line 342 "cgrammar.y"
+#line 350 "cgrammar.y"
 { 
      int value;
 
@@ -3199,12 +3248,12 @@ case 31:
    ;
     break;}
 case 32:
-#line 358 "cgrammar.y"
+#line 366 "cgrammar.y"
 { setCurrentParams (uentryList_missingParams); 
         ;
     break;}
 case 33:
-#line 361 "cgrammar.y"
+#line 369 "cgrammar.y"
 { /* need to support globals and modifies here! */
      ctype ct = ctype_makeFunction (idDecl_getCtype (yyvsp[-5].ntyp), 
                                    uentryList_makeMissingParams ());
@@ -3214,67 +3263,67 @@ case 33:
    ;
     break;}
 case 34:
-#line 369 "cgrammar.y"
+#line 377 "cgrammar.y"
 { setCurrentParams (yyvsp[-1].entrylist); 
         ;
     break;}
 case 35:
-#line 372 "cgrammar.y"
+#line 380 "cgrammar.y"
 { clearCurrentParams ();
      yyval.ntyp = idDecl_replaceCtype (yyvsp[-6].ntyp, ctype_makeFunction (idDecl_getCtype (yyvsp[-6].ntyp), yyvsp[-3].entrylist));
      context_popLoc (); 
    ;
     break;}
 case 36:
-#line 379 "cgrammar.y"
+#line 387 "cgrammar.y"
 { setCurrentParams (yyvsp[-1].entrylist); ;
     break;}
 case 37:
-#line 380 "cgrammar.y"
+#line 388 "cgrammar.y"
 { clearCurrentParams (); ;
     break;}
 case 38:
-#line 381 "cgrammar.y"
+#line 389 "cgrammar.y"
 { declareCIter (yyvsp[-8].cname, yyvsp[-6].entrylist); ;
     break;}
 case 39:
-#line 384 "cgrammar.y"
+#line 392 "cgrammar.y"
 { exprNode_checkMacroBody (yyvsp[-1].expr); ;
     break;}
 case 40:
-#line 385 "cgrammar.y"
+#line 393 "cgrammar.y"
 { exprNode_checkIterBody (yyvsp[-1].expr); ;
     break;}
 case 41:
-#line 386 "cgrammar.y"
+#line 394 "cgrammar.y"
 { exprNode_checkIterEnd (yyvsp[-1].expr); ;
     break;}
 case 42:
-#line 387 "cgrammar.y"
+#line 395 "cgrammar.y"
 { exprChecks_checkEmptyMacroBody (); ;
     break;}
 case 43:
-#line 390 "cgrammar.y"
+#line 398 "cgrammar.y"
 { declareFunction (yyvsp[0].ntyp); ;
     break;}
 case 44:
-#line 393 "cgrammar.y"
+#line 401 "cgrammar.y"
 { setProcessingGlobMods (); ;
     break;}
 case 45:
-#line 394 "cgrammar.y"
+#line 402 "cgrammar.y"
 { clearProcessingGlobMods (); ;
     break;}
 case 46:
-#line 400 "cgrammar.y"
+#line 408 "cgrammar.y"
 { setProcessingGlobMods (); ;
     break;}
 case 47:
-#line 401 "cgrammar.y"
+#line 409 "cgrammar.y"
 { clearProcessingGlobMods (); ;
     break;}
 case 49:
-#line 409 "cgrammar.y"
+#line 417 "cgrammar.y"
 {
   DPRINTF ( ("doing optGlobEnsuresConstraintsAux\n") );
 context_setProtectVars (); enterParamsTemp (); 
@@ -3283,16 +3332,16 @@ context_setProtectVars (); enterParamsTemp ();
 ;
     break;}
 case 50:
-#line 415 "cgrammar.y"
+#line 423 "cgrammar.y"
 {
-  setEnsuresConstraints (yyvsp[-1].sr);
+  setEnsuresConstraints (yyvsp[-1].conL);
   exitParamsTemp ();
      sRef_clearGlobalScopeSafe (); 
      context_releaseVars ();
   DPRINTF (("done optGlobBufConstraintsAux\n"));;
     break;}
 case 52:
-#line 425 "cgrammar.y"
+#line 433 "cgrammar.y"
 {
   DPRINTF ( ("doing optGlobBufConstraintsAux\n") );
 context_setProtectVars (); enterParamsTemp (); 
@@ -3301,235 +3350,270 @@ context_setProtectVars (); enterParamsTemp ();
 ;
     break;}
 case 53:
-#line 431 "cgrammar.y"
+#line 439 "cgrammar.y"
 {
-  setFunctionConstraints (yyvsp[-1].sr);
+  setFunctionConstraints (yyvsp[-1].conL);
   exitParamsTemp ();
      sRef_clearGlobalScopeSafe (); 
      context_releaseVars ();
   DPRINTF (("done optGlobBufConstraintsAux\n"));;
     break;}
 case 55:
-#line 440 "cgrammar.y"
-{ yyval.sr = constraintList_add (yyvsp[0].sr, yyvsp[-1].sr); ;
+#line 448 "cgrammar.y"
+{ yyval.conL = constraintList_add (yyvsp[0].conL, yyvsp[-1].con); ;
     break;}
 case 56:
-#line 441 "cgrammar.y"
-{constraintList c; c = constraintList_new(); c = constraintList_add (c, yyvsp[0].sr); yyval.sr = c;
+#line 449 "cgrammar.y"
+{constraintList c; c = constraintList_new(); c = constraintList_add (c, yyvsp[0].con); yyval.conL = c;
     break;}
 case 57:
-#line 444 "cgrammar.y"
+#line 452 "cgrammar.y"
 {
- yyval.sr = makeConstraintParse3 (yyvsp[-3].sr, yyvsp[-2].tok, yyvsp[-1].sr);
+ yyval.con = makeConstraintParse3 (yyvsp[-3].conE, yyvsp[-2].tok, yyvsp[-1].conE);
  DPRINTF(("Done BufConstraint1\n")); ;
     break;}
 case 64:
-#line 459 "cgrammar.y"
-{yyval.sr = constraintExpr_parseMakeUnaryOp (yyvsp[-3].tok, yyvsp[-1].sr);  DPRINTF( ("Got BufConstraintExpr UNary Op ") ); ;
+#line 467 "cgrammar.y"
+{yyval.conE = constraintExpr_parseMakeUnaryOp (yyvsp[-3].tok, yyvsp[-1].conE);  DPRINTF( ("Got BufConstraintExpr UNary Op ") ); ;
     break;}
 case 65:
-#line 460 "cgrammar.y"
+#line 468 "cgrammar.y"
 {
    DPRINTF( ("Got BufConstraintExpr BINary Op ") );
-   yyval.sr = constraintExpr_parseMakeBinaryOp (yyvsp[-3].sr, yyvsp[-2].tok, yyvsp[-1].sr); ;
+   yyval.conE = constraintExpr_parseMakeBinaryOp (yyvsp[-3].conE, yyvsp[-2].tok, yyvsp[-1].conE); ;
     break;}
 case 66:
-#line 465 "cgrammar.y"
-{ /* $$ = constraintExpr_makeTermsRef (checkSpecClausesId ($1)); */
- yyval.sr = constraintExpr_makeTermsRef (checkbufferConstraintClausesId (yyvsp[0].entry));;
+#line 473 "cgrammar.y"
+{ yyval.conE =  constraintExpr_makeTermsRef(yyvsp[0].sr);;
     break;}
 case 67:
-#line 467 "cgrammar.y"
-{ yyval.sr = constraintExpr_makeTermsRef(fixSpecClausesId (yyvsp[0].cname) ); ;
-    break;}
-case 68:
-#line 468 "cgrammar.y"
+#line 474 "cgrammar.y"
 {  char *t; int c;
   t =  cstring_toCharsSafe (exprNode_unparse(yyvsp[0].expr));
   c = atoi( t );
-  yyval.sr = constraintExpr_makeIntLiteral (c);
+  yyval.conE = constraintExpr_makeIntLiteral (c);
 ;
     break;}
+case 68:
+#line 482 "cgrammar.y"
+{
+   yyval.sr =
+     checkbufferConstraintClausesId (yyvsp[0].entry);;
+    break;}
+case 69:
+#line 485 "cgrammar.y"
+{ yyval.sr = fixSpecClausesId (yyvsp[0].cname); ;
+    break;}
+case 70:
+#line 487 "cgrammar.y"
+{ yyval.sr = sRef_makeAnyArrayFetch (yyvsp[-2].sr); ;
+    break;}
+case 71:
+#line 488 "cgrammar.y"
+{
+     char *t; int c;
+  t =  cstring_toCharsSafe (exprNode_unparse(yyvsp[-1].expr));
+  c = atoi( t );
+   yyval.sr = sRef_makeArrayFetchKnown(yyvsp[-3].sr, c); ;
+    break;}
 case 72:
-#line 489 "cgrammar.y"
-{ setProcessingGlobMods (); ;
+#line 493 "cgrammar.y"
+{ yyval.sr = sRef_constructPointer (yyvsp[0].sr); ;
     break;}
 case 73:
-#line 490 "cgrammar.y"
-{ clearProcessingGlobMods (); ;
+#line 494 "cgrammar.y"
+{ yyval.sr = yyvsp[-1].sr; ;
     break;}
 case 74:
-#line 500 "cgrammar.y"
-{ setProcessingGlobMods (); ;
+#line 495 "cgrammar.y"
+{ cstring_markOwned (yyvsp[0].cname);
+                                           yyval.sr = sRef_buildField (yyvsp[-2].sr, yyvsp[0].cname); ;
     break;}
 case 75:
-#line 501 "cgrammar.y"
+#line 497 "cgrammar.y"
+{ cstring_markOwned (yyvsp[0].cname);
+                                            yyval.sr = sRef_makeArrow (yyvsp[-2].sr, yyvsp[0].cname); ;
+    break;}
+case 79:
+#line 523 "cgrammar.y"
+{ setProcessingGlobMods (); ;
+    break;}
+case 80:
+#line 524 "cgrammar.y"
 { clearProcessingGlobMods (); ;
     break;}
+case 81:
+#line 534 "cgrammar.y"
+{ setProcessingGlobMods (); ;
+    break;}
 case 82:
-#line 516 "cgrammar.y"
+#line 535 "cgrammar.y"
+{ clearProcessingGlobMods (); ;
+    break;}
+case 89:
+#line 550 "cgrammar.y"
 { ; ;
     break;}
-case 83:
-#line 517 "cgrammar.y"
+case 90:
+#line 551 "cgrammar.y"
 { ; ;
     break;}
-case 84:
-#line 520 "cgrammar.y"
+case 91:
+#line 554 "cgrammar.y"
 { globListAdd (yyvsp[0].sr, yyvsp[-1].tquallist); ;
     break;}
-case 85:
-#line 523 "cgrammar.y"
+case 92:
+#line 557 "cgrammar.y"
 { yyval.sr = uentry_getSref (yyvsp[0].entry); ;
     break;}
-case 86:
-#line 524 "cgrammar.y"
+case 93:
+#line 558 "cgrammar.y"
 { yyval.sr = globListUnrecognized (yyvsp[0].cname); ;
     break;}
-case 87:
-#line 527 "cgrammar.y"
+case 94:
+#line 561 "cgrammar.y"
 { yyval.typequal = qual_createUndef (); ;
     break;}
-case 88:
-#line 528 "cgrammar.y"
+case 95:
+#line 562 "cgrammar.y"
 { yyval.typequal = qual_createKilled (); ;
     break;}
-case 89:
-#line 529 "cgrammar.y"
+case 96:
+#line 563 "cgrammar.y"
 { yyval.typequal = qual_createOut (); ;
     break;}
-case 90:
-#line 530 "cgrammar.y"
+case 97:
+#line 564 "cgrammar.y"
 { yyval.typequal = qual_createIn (); ;
     break;}
-case 91:
-#line 531 "cgrammar.y"
+case 98:
+#line 565 "cgrammar.y"
 { yyval.typequal = qual_createPartial (); ;
     break;}
-case 92:
-#line 534 "cgrammar.y"
+case 99:
+#line 568 "cgrammar.y"
 { yyval.tquallist = qualList_undefined; ;
     break;}
-case 93:
-#line 535 "cgrammar.y"
+case 100:
+#line 569 "cgrammar.y"
 { yyval.tquallist = qualList_add (yyvsp[0].tquallist, yyvsp[-1].typequal); ;
     break;}
-case 94:
-#line 538 "cgrammar.y"
+case 101:
+#line 572 "cgrammar.y"
 { setProcessingGlobalsList (); ;
     break;}
-case 95:
-#line 540 "cgrammar.y"
+case 102:
+#line 574 "cgrammar.y"
 { unsetProcessingGlobals (); ;
     break;}
-case 96:
-#line 541 "cgrammar.y"
+case 103:
+#line 575 "cgrammar.y"
 { setProcessingGlobalsList (); ;
     break;}
-case 97:
-#line 543 "cgrammar.y"
+case 104:
+#line 577 "cgrammar.y"
 { unsetProcessingGlobals (); ;
     break;}
-case 98:
-#line 545 "cgrammar.y"
+case 105:
+#line 579 "cgrammar.y"
 { setFunctionNoGlobals ();
      setFunctionModifies (sRefSet_single (sRef_makeNothing ())); 
    ;
     break;}
-case 101:
-#line 552 "cgrammar.y"
+case 108:
+#line 586 "cgrammar.y"
 { setProcessingGlobalsList (); ;
     break;}
-case 102:
-#line 554 "cgrammar.y"
+case 109:
+#line 588 "cgrammar.y"
 { unsetProcessingGlobals (); ;
     break;}
-case 103:
-#line 555 "cgrammar.y"
+case 110:
+#line 589 "cgrammar.y"
 { setProcessingGlobalsList (); ;
     break;}
-case 104:
-#line 557 "cgrammar.y"
+case 111:
+#line 591 "cgrammar.y"
 { unsetProcessingGlobals (); ;
     break;}
-case 105:
-#line 559 "cgrammar.y"
+case 112:
+#line 593 "cgrammar.y"
 { setFunctionNoGlobals ();
      setFunctionModifies (sRefSet_single (sRef_makeNothing ())); 
    ;
     break;}
-case 110:
-#line 571 "cgrammar.y"
+case 117:
+#line 605 "cgrammar.y"
 {
      context_setProtectVars (); enterParamsTemp (); 
      sRef_setGlobalScopeSafe (); 
    ;
     break;}
-case 111:
-#line 576 "cgrammar.y"
+case 118:
+#line 610 "cgrammar.y"
 { 
      setFunctionModifies (yyvsp[0].srset); exitParamsTemp ();
      sRef_clearGlobalScopeSafe (); 
      context_releaseVars ();
    ;
     break;}
-case 112:
-#line 584 "cgrammar.y"
+case 119:
+#line 618 "cgrammar.y"
 {
      context_setProtectVars (); enterParamsTemp (); 
      sRef_setGlobalScopeSafe (); 
    ;
     break;}
-case 113:
-#line 589 "cgrammar.y"
+case 120:
+#line 623 "cgrammar.y"
 { 
      setFunctionModifies (yyvsp[0].srset); exitParamsTemp ();
      sRef_clearGlobalScopeSafe (); 
      context_releaseVars ();
    ;
     break;}
-case 123:
-#line 613 "cgrammar.y"
+case 130:
+#line 647 "cgrammar.y"
 { yyval.sck = SP_ISONLY; ;
     break;}
-case 124:
-#line 614 "cgrammar.y"
+case 131:
+#line 648 "cgrammar.y"
 { yyval.sck = SP_ISOBSERVER; ;
     break;}
-case 125:
-#line 615 "cgrammar.y"
+case 132:
+#line 649 "cgrammar.y"
 { yyval.sck = SP_ISEXPOSED; ;
     break;}
-case 126:
-#line 616 "cgrammar.y"
+case 133:
+#line 650 "cgrammar.y"
 { yyval.sck = SP_ISDEPENDENT; ;
     break;}
-case 127:
-#line 617 "cgrammar.y"
+case 134:
+#line 651 "cgrammar.y"
 { yyval.sck = SP_ISOWNED; ;
     break;}
-case 128:
-#line 618 "cgrammar.y"
+case 135:
+#line 652 "cgrammar.y"
 { yyval.sck = SP_ISSHARED; ;
     break;}
-case 129:
-#line 619 "cgrammar.y"
+case 136:
+#line 653 "cgrammar.y"
 { yyval.sck = SP_ISNULL; ;
     break;}
-case 130:
-#line 620 "cgrammar.y"
+case 137:
+#line 654 "cgrammar.y"
 { yyval.sck = SP_ISNOTNULL; ;
     break;}
-case 131:
-#line 624 "cgrammar.y"
+case 138:
+#line 658 "cgrammar.y"
 {
      context_setProtectVars (); 
      enterParamsTemp (); 
      sRef_setGlobalScopeSafe (); 
    ;
     break;}
-case 132:
-#line 630 "cgrammar.y"
+case 139:
+#line 664 "cgrammar.y"
 { 
      setFunctionSpecialClause (yyvsp[-6].tok, yyvsp[-3].srset, yyvsp[-1].tok); 
      exitParamsTemp ();
@@ -3537,16 +3621,16 @@ case 132:
      context_releaseVars ();
    ;
     break;}
-case 133:
-#line 637 "cgrammar.y"
+case 140:
+#line 671 "cgrammar.y"
 {
       context_setProtectVars (); 
       enterParamsTemp (); 
       sRef_setGlobalScopeSafe (); 
     ;
     break;}
-case 134:
-#line 643 "cgrammar.y"
+case 141:
+#line 677 "cgrammar.y"
 { 
       setFunctionStateSpecialClause (yyvsp[-7].tok, yyvsp[-5].sck, yyvsp[-3].srset, yyvsp[-1].tok); 
       exitParamsTemp ();
@@ -3554,43 +3638,43 @@ case 134:
       context_releaseVars ();
     ;
     break;}
-case 135:
-#line 652 "cgrammar.y"
+case 142:
+#line 686 "cgrammar.y"
 { 
      qtype qint = qtype_create (ctype_int);
      yyval.ntyp = idDecl_fixBase (yyvsp[0].ntyp, qint);
      qtype_free (qint);
    ;
     break;}
-case 136:
-#line 658 "cgrammar.y"
+case 143:
+#line 692 "cgrammar.y"
 { yyval.ntyp = idDecl_fixBase (yyvsp[0].ntyp, yyvsp[-2].qtyp); ;
     break;}
-case 137:
-#line 661 "cgrammar.y"
+case 144:
+#line 695 "cgrammar.y"
 { checkDoneParams (); context_enterInnerContext (); ;
     break;}
-case 138:
-#line 663 "cgrammar.y"
+case 145:
+#line 697 "cgrammar.y"
 {  
      exprNode_checkFunctionBody (yyvsp[0].expr); yyval.expr = yyvsp[0].expr; 
      context_exitInner (yyvsp[0].expr); 
    ;
     break;}
-case 139:
-#line 668 "cgrammar.y"
+case 146:
+#line 702 "cgrammar.y"
 { doneParams (); context_enterInnerContext (); ;
     break;}
-case 140:
-#line 670 "cgrammar.y"
+case 147:
+#line 704 "cgrammar.y"
 {
      context_exitInner (yyvsp[0].expr);
      exprNode_checkFunctionBody (yyvsp[0].expr); 
      yyval.expr = yyvsp[0].expr; /* old style */ 
    ;
     break;}
-case 141:
-#line 678 "cgrammar.y"
+case 148:
+#line 712 "cgrammar.y"
 { 
      context_setFunctionDefined (exprNode_loc (yyvsp[0].expr)); 
      /* exprNode_checkFunction (context_getHeader (), $2); */
@@ -3599,112 +3683,112 @@ case 141:
      context_exitFunction ();
    ;
     break;}
-case 142:
-#line 687 "cgrammar.y"
+case 149:
+#line 721 "cgrammar.y"
 { yyval.srset = yyvsp[-2].srset; ;
     break;}
-case 143:
-#line 688 "cgrammar.y"
+case 150:
+#line 722 "cgrammar.y"
 { yyval.srset = sRefSet_new (); ;
     break;}
-case 144:
-#line 691 "cgrammar.y"
+case 151:
+#line 725 "cgrammar.y"
 { yyval.srset = yyvsp[-1].srset; ;
     break;}
-case 145:
-#line 692 "cgrammar.y"
+case 152:
+#line 726 "cgrammar.y"
 { yyval.srset = sRefSet_new (); ;
     break;}
-case 146:
-#line 695 "cgrammar.y"
+case 153:
+#line 729 "cgrammar.y"
 { yyval.sr = uentry_getSref (yyvsp[0].entry); checkModifiesId (yyvsp[0].entry); ;
     break;}
-case 147:
-#line 696 "cgrammar.y"
+case 154:
+#line 730 "cgrammar.y"
 { yyval.sr = fixModifiesId (yyvsp[0].cname); ;
     break;}
-case 148:
-#line 697 "cgrammar.y"
+case 155:
+#line 731 "cgrammar.y"
 { yyval.sr = modListArrayFetch (yyvsp[-2].sr, sRef_undefined); ;
     break;}
-case 149:
-#line 698 "cgrammar.y"
+case 156:
+#line 732 "cgrammar.y"
 { yyval.sr = modListArrayFetch (yyvsp[-3].sr, yyvsp[-1].sr); ;
     break;}
-case 150:
-#line 699 "cgrammar.y"
+case 157:
+#line 733 "cgrammar.y"
 { yyval.sr = modListPointer (yyvsp[0].sr); ;
     break;}
-case 151:
-#line 700 "cgrammar.y"
+case 158:
+#line 734 "cgrammar.y"
 { yyval.sr = yyvsp[-1].sr; ;
     break;}
-case 152:
-#line 701 "cgrammar.y"
+case 159:
+#line 735 "cgrammar.y"
 { yyval.sr = modListFieldAccess (yyvsp[-2].sr, yyvsp[0].cname); ;
     break;}
-case 153:
-#line 702 "cgrammar.y"
+case 160:
+#line 736 "cgrammar.y"
 { yyval.sr = modListArrowAccess (yyvsp[-2].sr, yyvsp[0].cname); ;
     break;}
-case 154:
-#line 706 "cgrammar.y"
+case 161:
+#line 740 "cgrammar.y"
 { yyval.sr = yyvsp[0].sr; ;
     break;}
-case 155:
-#line 707 "cgrammar.y"
+case 162:
+#line 741 "cgrammar.y"
 { yyval.sr = sRef_makeUnknown (); /* sRef_makeConstant ($1); ? */ ;
     break;}
-case 156:
-#line 711 "cgrammar.y"
+case 163:
+#line 745 "cgrammar.y"
 { yyval.srset = sRefSet_single (yyvsp[0].sr); ;
     break;}
-case 157:
-#line 712 "cgrammar.y"
+case 164:
+#line 746 "cgrammar.y"
 { yyval.srset = sRefSet_insert (yyvsp[-2].srset, yyvsp[0].sr); ;
     break;}
-case 158:
-#line 716 "cgrammar.y"
+case 165:
+#line 750 "cgrammar.y"
 { yyval.sr = checkSpecClausesId (yyvsp[0].entry); ;
     break;}
-case 159:
-#line 718 "cgrammar.y"
+case 166:
+#line 752 "cgrammar.y"
 { yyval.sr = fixSpecClausesId (yyvsp[0].cname); ;
     break;}
-case 160:
-#line 719 "cgrammar.y"
+case 167:
+#line 753 "cgrammar.y"
 { yyval.sr = sRef_makeAnyArrayFetch (yyvsp[-2].sr); ;
     break;}
-case 161:
-#line 720 "cgrammar.y"
+case 168:
+#line 754 "cgrammar.y"
 { yyval.sr = sRef_makeAnyArrayFetch (yyvsp[-3].sr); ;
     break;}
-case 162:
-#line 721 "cgrammar.y"
+case 169:
+#line 755 "cgrammar.y"
 { yyval.sr = sRef_constructPointer (yyvsp[0].sr); ;
     break;}
-case 163:
-#line 722 "cgrammar.y"
+case 170:
+#line 756 "cgrammar.y"
 { yyval.sr = yyvsp[-1].sr; ;
     break;}
-case 164:
-#line 723 "cgrammar.y"
+case 171:
+#line 757 "cgrammar.y"
 { cstring_markOwned (yyvsp[0].cname);
                                            yyval.sr = sRef_buildField (yyvsp[-2].sr, yyvsp[0].cname); ;
     break;}
-case 165:
-#line 725 "cgrammar.y"
+case 172:
+#line 759 "cgrammar.y"
 { cstring_markOwned (yyvsp[0].cname);
                                             yyval.sr = sRef_makeArrow (yyvsp[-2].sr, yyvsp[0].cname); ;
     break;}
-case 166:
-#line 730 "cgrammar.y"
+case 173:
+#line 764 "cgrammar.y"
 { if (sRef_isValid (yyvsp[0].sr)) { yyval.srset = sRefSet_single (yyvsp[0].sr); } 
       else { yyval.srset = sRefSet_undefined; } 
     ;
     break;}
-case 167:
-#line 734 "cgrammar.y"
+case 174:
+#line 768 "cgrammar.y"
 { if (sRef_isValid (yyvsp[0].sr))
        {
          yyval.srset = sRefSet_insert (yyvsp[-2].srset, yyvsp[0].sr); 
@@ -3715,850 +3799,850 @@ case 167:
        }
     ;
     break;}
-case 168:
-#line 745 "cgrammar.y"
+case 175:
+#line 779 "cgrammar.y"
 { yyval.expr = exprNode_fromIdentifier (yyvsp[0].entry); ;
     break;}
-case 169:
-#line 746 "cgrammar.y"
+case 176:
+#line 780 "cgrammar.y"
 { yyval.expr = exprNode_fromUIO (yyvsp[0].cname); ;
     break;}
-case 170:
-#line 747 "cgrammar.y"
+case 177:
+#line 781 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 171:
-#line 748 "cgrammar.y"
+case 178:
+#line 782 "cgrammar.y"
 { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
     break;}
-case 172:
-#line 749 "cgrammar.y"
+case 179:
+#line 783 "cgrammar.y"
 { yyval.expr = exprNode_fromIdentifier (coerceId (yyvsp[0].cname)); ;
     break;}
-case 173:
-#line 750 "cgrammar.y"
+case 180:
+#line 784 "cgrammar.y"
 { yyval.expr = exprNode_makeError (); ;
     break;}
-case 175:
-#line 754 "cgrammar.y"
+case 182:
+#line 788 "cgrammar.y"
 { yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ;
     break;}
-case 176:
-#line 755 "cgrammar.y"
+case 183:
+#line 789 "cgrammar.y"
 { yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ;
     break;}
-case 177:
-#line 756 "cgrammar.y"
+case 184:
+#line 790 "cgrammar.y"
 { yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].alist); ;
     break;}
-case 178:
-#line 757 "cgrammar.y"
+case 185:
+#line 791 "cgrammar.y"
 { yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ;
     break;}
-case 179:
-#line 758 "cgrammar.y"
+case 186:
+#line 792 "cgrammar.y"
 { yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-1].cname); ;
     break;}
-case 180:
-#line 759 "cgrammar.y"
+case 187:
+#line 793 "cgrammar.y"
 { yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-1].cname); ;
     break;}
-case 181:
-#line 760 "cgrammar.y"
+case 188:
+#line 794 "cgrammar.y"
 { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
-case 182:
-#line 761 "cgrammar.y"
+case 189:
+#line 795 "cgrammar.y"
 { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
-case 183:
-#line 764 "cgrammar.y"
+case 190:
+#line 798 "cgrammar.y"
 { yyval.alist = exprNodeList_singleton (yyvsp[0].expr); ;
     break;}
-case 184:
-#line 765 "cgrammar.y"
+case 191:
+#line 799 "cgrammar.y"
 { yyval.alist = exprNodeList_push (yyvsp[-2].alist, yyvsp[0].expr); ;
     break;}
-case 186:
-#line 769 "cgrammar.y"
+case 193:
+#line 803 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 187:
-#line 770 "cgrammar.y"
+case 194:
+#line 804 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 188:
-#line 771 "cgrammar.y"
+case 195:
+#line 805 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 189:
-#line 772 "cgrammar.y"
+case 196:
+#line 806 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 190:
-#line 773 "cgrammar.y"
+case 197:
+#line 807 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 191:
-#line 774 "cgrammar.y"
+case 198:
+#line 808 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 192:
-#line 775 "cgrammar.y"
+case 199:
+#line 809 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 193:
-#line 776 "cgrammar.y"
+case 200:
+#line 810 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 194:
-#line 777 "cgrammar.y"
+case 201:
+#line 811 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 195:
-#line 778 "cgrammar.y"
+case 202:
+#line 812 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 196:
-#line 781 "cgrammar.y"
+case 203:
+#line 815 "cgrammar.y"
 { yyval.cstringlist = cstringList_add (yyvsp[-2].cstringlist, yyvsp[0].cname); ;
     break;}
-case 197:
-#line 782 "cgrammar.y"
+case 204:
+#line 816 "cgrammar.y"
 { yyval.cstringlist = cstringList_single (yyvsp[0].cname); ;
     break;}
-case 198:
-#line 786 "cgrammar.y"
+case 205:
+#line 820 "cgrammar.y"
 { yyval.expr = exprNode_offsetof (yyvsp[-5].qtyp, yyvsp[-2].cstringlist); ;
     break;}
-case 199:
-#line 789 "cgrammar.y"
+case 206:
+#line 823 "cgrammar.y"
 { context_setProtectVars (); ;
     break;}
-case 200:
-#line 790 "cgrammar.y"
+case 207:
+#line 824 "cgrammar.y"
 { context_sizeofReleaseVars (); yyval.expr = yyvsp[0].expr; ;
     break;}
-case 201:
-#line 793 "cgrammar.y"
+case 208:
+#line 827 "cgrammar.y"
 { yyval.expr = exprNode_sizeofType (yyvsp[-1].qtyp); ;
     break;}
-case 202:
-#line 794 "cgrammar.y"
+case 209:
+#line 828 "cgrammar.y"
 { yyval.expr = exprNode_sizeofExpr (yyvsp[0].expr); ;
     break;}
-case 203:
-#line 795 "cgrammar.y"
+case 210:
+#line 829 "cgrammar.y"
 { yyval.expr = exprNode_alignofType (yyvsp[-1].qtyp); ;
     break;}
-case 204:
-#line 796 "cgrammar.y"
+case 211:
+#line 830 "cgrammar.y"
 { yyval.expr = exprNode_alignofExpr (yyvsp[0].expr); ;
     break;}
-case 206:
-#line 801 "cgrammar.y"
+case 213:
+#line 835 "cgrammar.y"
 { yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ;
     break;}
-case 208:
-#line 805 "cgrammar.y"
+case 215:
+#line 839 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 209:
-#line 806 "cgrammar.y"
+case 216:
+#line 840 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 210:
-#line 807 "cgrammar.y"
+case 217:
+#line 841 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 212:
-#line 811 "cgrammar.y"
+case 219:
+#line 845 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 213:
-#line 812 "cgrammar.y"
+case 220:
+#line 846 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 215:
-#line 816 "cgrammar.y"
+case 222:
+#line 850 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 216:
-#line 817 "cgrammar.y"
+case 223:
+#line 851 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 218:
-#line 821 "cgrammar.y"
+case 225:
+#line 855 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 219:
-#line 822 "cgrammar.y"
+case 226:
+#line 856 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 220:
-#line 823 "cgrammar.y"
+case 227:
+#line 857 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 221:
-#line 824 "cgrammar.y"
+case 228:
+#line 858 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 223:
-#line 828 "cgrammar.y"
+case 230:
+#line 862 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 224:
-#line 829 "cgrammar.y"
+case 231:
+#line 863 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 226:
-#line 833 "cgrammar.y"
+case 233:
+#line 867 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 228:
-#line 837 "cgrammar.y"
+case 235:
+#line 871 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 230:
-#line 842 "cgrammar.y"
+case 237:
+#line 876 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 232:
-#line 847 "cgrammar.y"
+case 239:
+#line 881 "cgrammar.y"
 { exprNode_produceGuards (yyvsp[-1].expr); 
      context_enterAndClause (yyvsp[-1].expr); 
    ;
     break;}
-case 233:
-#line 851 "cgrammar.y"
+case 240:
+#line 885 "cgrammar.y"
 { 
      yyval.expr = exprNode_op (yyvsp[-3].expr, yyvsp[0].expr, yyvsp[-2].tok); 
      context_exitAndClause (yyval.expr, yyvsp[0].expr);
    ;
     break;}
-case 235:
-#line 859 "cgrammar.y"
+case 242:
+#line 893 "cgrammar.y"
 { 
      exprNode_produceGuards (yyvsp[-1].expr);
      context_enterOrClause (yyvsp[-1].expr); 
    ;
     break;}
-case 236:
-#line 864 "cgrammar.y"
+case 243:
+#line 898 "cgrammar.y"
 { 
      yyval.expr = exprNode_op (yyvsp[-3].expr, yyvsp[0].expr, yyvsp[-2].tok); 
      context_exitOrClause (yyval.expr, yyvsp[0].expr);
    ;
     break;}
-case 238:
-#line 871 "cgrammar.y"
+case 245:
+#line 905 "cgrammar.y"
 { exprNode_produceGuards (yyvsp[-1].expr); context_enterTrueClause (yyvsp[-1].expr); ;
     break;}
-case 239:
-#line 872 "cgrammar.y"
+case 246:
+#line 906 "cgrammar.y"
 { context_enterFalseClause (yyvsp[-4].expr); ;
     break;}
-case 240:
-#line 873 "cgrammar.y"
+case 247:
+#line 907 "cgrammar.y"
 { yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); context_exitClause (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
-case 242:
-#line 877 "cgrammar.y"
+case 249:
+#line 911 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 243:
-#line 878 "cgrammar.y"
+case 250:
+#line 912 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 244:
-#line 879 "cgrammar.y"
+case 251:
+#line 913 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 245:
-#line 880 "cgrammar.y"
+case 252:
+#line 914 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 246:
-#line 881 "cgrammar.y"
+case 253:
+#line 915 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 247:
-#line 882 "cgrammar.y"
+case 254:
+#line 916 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 248:
-#line 883 "cgrammar.y"
+case 255:
+#line 917 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 249:
-#line 884 "cgrammar.y"
+case 256:
+#line 918 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 250:
-#line 885 "cgrammar.y"
+case 257:
+#line 919 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 251:
-#line 886 "cgrammar.y"
+case 258:
+#line 920 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 252:
-#line 887 "cgrammar.y"
+case 259:
+#line 921 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 254:
-#line 891 "cgrammar.y"
+case 261:
+#line 925 "cgrammar.y"
 { yyval.expr = exprNode_comma (yyvsp[-2].expr, yyvsp[0].expr); ;
     break;}
-case 255:
-#line 894 "cgrammar.y"
+case 262:
+#line 928 "cgrammar.y"
 { yyval.expr = exprNode_undefined; ;
     break;}
-case 258:
-#line 903 "cgrammar.y"
+case 265:
+#line 937 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 259:
-#line 904 "cgrammar.y"
+case 266:
+#line 938 "cgrammar.y"
 { doVaDcl (); yyval.expr = exprNode_makeError (); ;
     break;}
-case 260:
-#line 905 "cgrammar.y"
+case 267:
+#line 939 "cgrammar.y"
 { yyval.expr = exprNode_makeError (); ;
     break;}
-case 261:
-#line 908 "cgrammar.y"
+case 268:
+#line 942 "cgrammar.y"
 { yyval.expr = exprNode_makeError (); ;
     break;}
-case 262:
-#line 922 "cgrammar.y"
+case 269:
+#line 956 "cgrammar.y"
 {
                setProcessingVars (yyvsp[-3].qtyp); 
      processNamedDecl (yyvsp[-1].ntyp); ;
     break;}
-case 263:
-#line 925 "cgrammar.y"
+case 270:
+#line 959 "cgrammar.y"
 { unsetProcessingVars (); yyval.expr = yyvsp[-2].expr; ;
     break;}
-case 264:
-#line 927 "cgrammar.y"
+case 271:
+#line 961 "cgrammar.y"
 { setProcessingVars (yyvsp[-4].qtyp); processNamedDecl (yyvsp[-2].ntyp); 
         ;
     break;}
-case 265:
-#line 930 "cgrammar.y"
+case 272:
+#line 964 "cgrammar.y"
 { yyval.expr = exprNode_concat (yyvsp[-2].expr, exprNode_makeInitialization (yyvsp[-8].ntyp, yyvsp[-3].expr)); 
      unsetProcessingVars ();
    ;
     break;}
-case 266:
-#line 934 "cgrammar.y"
+case 273:
+#line 968 "cgrammar.y"
 { processNamedDecl (yyvsp[-1].ntyp); yyval.expr = exprNode_makeError (); ;
     break;}
-case 267:
-#line 935 "cgrammar.y"
+case 274:
+#line 969 "cgrammar.y"
 { processNamedDecl (yyvsp[-2].ntyp); ;
     break;}
-case 268:
-#line 936 "cgrammar.y"
+case 275:
+#line 970 "cgrammar.y"
 { yyval.expr = exprNode_makeInitialization (yyvsp[-5].ntyp, yyvsp[0].expr); ;
     break;}
-case 269:
-#line 940 "cgrammar.y"
+case 276:
+#line 974 "cgrammar.y"
 { setProcessingTypedef (yyvsp[0].qtyp); ;
     break;}
-case 270:
-#line 941 "cgrammar.y"
+case 277:
+#line 975 "cgrammar.y"
 { unsetProcessingTypedef (); ;
     break;}
-case 271:
-#line 942 "cgrammar.y"
+case 278:
+#line 976 "cgrammar.y"
 { /* in the ANSI grammar, semantics unclear */ ;
     break;}
-case 272:
-#line 943 "cgrammar.y"
+case 279:
+#line 977 "cgrammar.y"
 { /* in the ANSI grammar, semantics unclear */ ;
     break;}
-case 273:
-#line 946 "cgrammar.y"
+case 280:
+#line 980 "cgrammar.y"
 { g_expectingTypeName = TRUE; ;
     break;}
-case 274:
-#line 949 "cgrammar.y"
+case 281:
+#line 983 "cgrammar.y"
 { g_expectingTypeName = TRUE; context_pushLoc (); ;
     break;}
-case 275:
-#line 952 "cgrammar.y"
+case 282:
+#line 986 "cgrammar.y"
 { ; ;
     break;}
-case 276:
-#line 955 "cgrammar.y"
+case 283:
+#line 989 "cgrammar.y"
 { ; ;
     break;}
-case 277:
-#line 956 "cgrammar.y"
+case 284:
+#line 990 "cgrammar.y"
 { ; ;
     break;}
-case 278:
-#line 959 "cgrammar.y"
+case 285:
+#line 993 "cgrammar.y"
 { yyval.expr = exprNode_makeError (); ;
     break;}
-case 279:
-#line 960 "cgrammar.y"
+case 286:
+#line 994 "cgrammar.y"
 { yyval.expr = exprNode_concat (yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
-case 280:
-#line 963 "cgrammar.y"
+case 287:
+#line 997 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 281:
-#line 964 "cgrammar.y"
+case 288:
+#line 998 "cgrammar.y"
 { yyval.expr = exprNode_makeInitBlock (yyvsp[-2].tok, yyvsp[-1].alist); ;
     break;}
-case 282:
-#line 965 "cgrammar.y"
+case 289:
+#line 999 "cgrammar.y"
 { yyval.expr = exprNode_makeInitBlock (yyvsp[-3].tok, yyvsp[-2].alist); ;
     break;}
-case 283:
-#line 970 "cgrammar.y"
+case 290:
+#line 1004 "cgrammar.y"
 { yyval.alist = exprNodeList_singleton (yyvsp[0].expr); ;
     break;}
-case 284:
-#line 972 "cgrammar.y"
+case 291:
+#line 1006 "cgrammar.y"
 { yyval.alist = exprNodeList_push (yyvsp[-2].alist, yyvsp[0].expr); ;
     break;}
-case 285:
-#line 980 "cgrammar.y"
+case 292:
+#line 1014 "cgrammar.y"
 { setStorageClass (SCEXTERN); yyval.typequal = qual_createExtern (); ;
     break;}
-case 286:
-#line 981 "cgrammar.y"
+case 293:
+#line 1015 "cgrammar.y"
 { yyval.typequal = qual_createInline (); ;
     break;}
-case 287:
-#line 982 "cgrammar.y"
+case 294:
+#line 1016 "cgrammar.y"
 { setStorageClass (SCSTATIC); yyval.typequal = qual_createStatic (); ;
     break;}
-case 288:
-#line 983 "cgrammar.y"
+case 295:
+#line 1017 "cgrammar.y"
 { yyval.typequal = qual_createAuto (); ;
     break;}
-case 289:
-#line 984 "cgrammar.y"
+case 296:
+#line 1018 "cgrammar.y"
 { yyval.typequal = qual_createRegister (); ;
     break;}
-case 290:
-#line 987 "cgrammar.y"
+case 297:
+#line 1021 "cgrammar.y"
 { yyval.typequal = qual_createConst (); ;
     break;}
-case 291:
-#line 988 "cgrammar.y"
+case 298:
+#line 1022 "cgrammar.y"
 { yyval.typequal = qual_createVolatile (); ;
     break;}
-case 292:
-#line 989 "cgrammar.y"
+case 299:
+#line 1023 "cgrammar.y"
 { yyval.typequal = qual_createOut (); ;
     break;}
-case 293:
-#line 990 "cgrammar.y"
+case 300:
+#line 1024 "cgrammar.y"
 { yyval.typequal = qual_createIn (); ;
     break;}
-case 294:
-#line 991 "cgrammar.y"
+case 301:
+#line 1025 "cgrammar.y"
 { yyval.typequal = qual_createPartial (); ;
     break;}
-case 295:
-#line 992 "cgrammar.y"
+case 302:
+#line 1026 "cgrammar.y"
 { yyval.typequal = qual_createSpecial (); ;
     break;}
-case 296:
-#line 993 "cgrammar.y"
+case 303:
+#line 1027 "cgrammar.y"
 { yyval.typequal = qual_createOwned (); ;
     break;}
-case 297:
-#line 994 "cgrammar.y"
+case 304:
+#line 1028 "cgrammar.y"
 { yyval.typequal = qual_createDependent (); ;
     break;}
-case 298:
-#line 995 "cgrammar.y"
+case 305:
+#line 1029 "cgrammar.y"
 { yyval.typequal = qual_createYield (); ;
     break;}
-case 299:
-#line 996 "cgrammar.y"
+case 306:
+#line 1030 "cgrammar.y"
 { yyval.typequal = qual_createTemp (); ;
     break;}
-case 300:
-#line 997 "cgrammar.y"
+case 307:
+#line 1031 "cgrammar.y"
 { yyval.typequal = qual_createOnly (); ;
     break;}
-case 301:
-#line 998 "cgrammar.y"
+case 308:
+#line 1032 "cgrammar.y"
 { yyval.typequal = qual_createKeep (); ;
     break;}
-case 302:
-#line 999 "cgrammar.y"
+case 309:
+#line 1033 "cgrammar.y"
 { yyval.typequal = qual_createKept (); ;
     break;}
-case 303:
-#line 1000 "cgrammar.y"
+case 310:
+#line 1034 "cgrammar.y"
 { yyval.typequal = qual_createShared (); ;
     break;}
-case 304:
-#line 1001 "cgrammar.y"
+case 311:
+#line 1035 "cgrammar.y"
 { yyval.typequal = qual_createUnique (); ;
     break;}
-case 305:
-#line 1002 "cgrammar.y"
+case 312:
+#line 1036 "cgrammar.y"
 { yyval.typequal = qual_createExits (); ;
     break;}
-case 306:
-#line 1003 "cgrammar.y"
+case 313:
+#line 1037 "cgrammar.y"
 { yyval.typequal = qual_createMayExit (); ;
     break;}
-case 307:
-#line 1004 "cgrammar.y"
+case 314:
+#line 1038 "cgrammar.y"
 { yyval.typequal = qual_createTrueExit (); ;
     break;}
-case 308:
-#line 1005 "cgrammar.y"
+case 315:
+#line 1039 "cgrammar.y"
 { yyval.typequal = qual_createFalseExit (); ;
     break;}
-case 309:
-#line 1006 "cgrammar.y"
+case 316:
+#line 1040 "cgrammar.y"
 { yyval.typequal = qual_createNeverExit (); ;
     break;}
-case 310:
-#line 1007 "cgrammar.y"
+case 317:
+#line 1041 "cgrammar.y"
 { yyval.typequal = qual_createNull (); ;
     break;}
-case 311:
-#line 1008 "cgrammar.y"
+case 318:
+#line 1042 "cgrammar.y"
 { yyval.typequal = qual_createRelNull (); ;
     break;}
-case 312:
-#line 1009 "cgrammar.y"
+case 319:
+#line 1043 "cgrammar.y"
 { yyval.typequal = qual_createReturned (); ;
     break;}
-case 313:
-#line 1010 "cgrammar.y"
+case 320:
+#line 1044 "cgrammar.y"
 { yyval.typequal = qual_createExposed (); ;
     break;}
-case 314:
-#line 1011 "cgrammar.y"
+case 321:
+#line 1045 "cgrammar.y"
 { yyval.typequal = qual_createObserver (); ;
     break;}
-case 315:
-#line 1012 "cgrammar.y"
+case 322:
+#line 1046 "cgrammar.y"
 { yyval.typequal = qual_createChecked (); ;
     break;}
-case 316:
-#line 1013 "cgrammar.y"
+case 323:
+#line 1047 "cgrammar.y"
 { yyval.typequal = qual_createCheckMod (); ;
     break;}
-case 317:
-#line 1014 "cgrammar.y"
+case 324:
+#line 1048 "cgrammar.y"
 { yyval.typequal = qual_createUnchecked (); ;
     break;}
-case 318:
-#line 1015 "cgrammar.y"
+case 325:
+#line 1049 "cgrammar.y"
 { yyval.typequal = qual_createCheckedStrict (); ;
     break;}
-case 319:
-#line 1016 "cgrammar.y"
+case 326:
+#line 1050 "cgrammar.y"
 { yyval.typequal = qual_createTrueNull (); ;
     break;}
-case 320:
-#line 1017 "cgrammar.y"
+case 327:
+#line 1051 "cgrammar.y"
 { yyval.typequal = qual_createFalseNull (); ;
     break;}
-case 321:
-#line 1018 "cgrammar.y"
+case 328:
+#line 1052 "cgrammar.y"
 { yyval.typequal = qual_createUnused (); ;
     break;}
-case 322:
-#line 1019 "cgrammar.y"
+case 329:
+#line 1053 "cgrammar.y"
 { yyval.typequal = qual_createExternal (); ;
     break;}
-case 323:
-#line 1020 "cgrammar.y"
+case 330:
+#line 1054 "cgrammar.y"
 { yyval.typequal = qual_createSef (); ;
     break;}
-case 324:
-#line 1021 "cgrammar.y"
+case 331:
+#line 1055 "cgrammar.y"
 { yyval.typequal = qual_createAbstract (); ;
     break;}
-case 325:
-#line 1022 "cgrammar.y"
+case 332:
+#line 1056 "cgrammar.y"
 { yyval.typequal = qual_createConcrete (); ;
     break;}
-case 326:
-#line 1023 "cgrammar.y"
+case 333:
+#line 1057 "cgrammar.y"
 { yyval.typequal = qual_createMutable (); ;
     break;}
-case 327:
-#line 1024 "cgrammar.y"
+case 334:
+#line 1058 "cgrammar.y"
 { yyval.typequal = qual_createImmutable (); ;
     break;}
-case 328:
-#line 1025 "cgrammar.y"
+case 335:
+#line 1059 "cgrammar.y"
 { yyval.typequal = qual_createNotNull (); ;
     break;}
-case 329:
-#line 1026 "cgrammar.y"
+case 336:
+#line 1060 "cgrammar.y"
 { yyval.typequal = qual_createRefCounted (); ;
     break;}
-case 330:
-#line 1027 "cgrammar.y"
+case 337:
+#line 1061 "cgrammar.y"
 { yyval.typequal = qual_createRefs (); ;
     break;}
-case 331:
-#line 1028 "cgrammar.y"
+case 338:
+#line 1062 "cgrammar.y"
 { yyval.typequal = qual_createKillRef (); ;
     break;}
-case 332:
-#line 1029 "cgrammar.y"
+case 339:
+#line 1063 "cgrammar.y"
 { yyval.typequal = qual_createRelDef (); ;
     break;}
-case 333:
-#line 1030 "cgrammar.y"
+case 340:
+#line 1064 "cgrammar.y"
 { yyval.typequal = qual_createNewRef (); ;
     break;}
-case 334:
-#line 1031 "cgrammar.y"
+case 341:
+#line 1065 "cgrammar.y"
 { yyval.typequal = qual_createTempRef (); ;
     break;}
-case 335:
-#line 1032 "cgrammar.y"
+case 342:
+#line 1066 "cgrammar.y"
 { yyval.typequal = qual_createNullTerminated (); ;
     break;}
-case 336:
-#line 1038 "cgrammar.y"
+case 343:
+#line 1072 "cgrammar.y"
 { yyval.typequal = qual_createShort (); ;
     break;}
-case 337:
-#line 1039 "cgrammar.y"
+case 344:
+#line 1073 "cgrammar.y"
 { yyval.typequal = qual_createLong (); ;
     break;}
-case 338:
-#line 1040 "cgrammar.y"
+case 345:
+#line 1074 "cgrammar.y"
 { yyval.typequal = qual_createSigned (); ;
     break;}
-case 339:
-#line 1041 "cgrammar.y"
+case 346:
+#line 1075 "cgrammar.y"
 { yyval.typequal = qual_createUnsigned (); ;
     break;}
-case 346:
-#line 1050 "cgrammar.y"
+case 353:
+#line 1084 "cgrammar.y"
 { yyval.ctyp = ctype_unknown; ;
     break;}
-case 347:
-#line 1051 "cgrammar.y"
+case 354:
+#line 1085 "cgrammar.y"
 { yyval.ctyp = ctype_anyintegral; ;
     break;}
-case 348:
-#line 1052 "cgrammar.y"
+case 355:
+#line 1086 "cgrammar.y"
 { yyval.ctyp = ctype_unsignedintegral; ;
     break;}
-case 349:
-#line 1053 "cgrammar.y"
+case 356:
+#line 1087 "cgrammar.y"
 { yyval.ctyp = ctype_signedintegral; ;
     break;}
-case 353:
-#line 1057 "cgrammar.y"
+case 360:
+#line 1091 "cgrammar.y"
 { yyval.ctyp = ctype_fromQual (yyvsp[-1].typequal); ;
     break;}
-case 354:
-#line 1061 "cgrammar.y"
+case 361:
+#line 1095 "cgrammar.y"
 { yyval.qtyp = qtype_resolve (yyvsp[-1].qtyp); ;
     break;}
-case 355:
-#line 1064 "cgrammar.y"
+case 362:
+#line 1098 "cgrammar.y"
 { yyval.qtyp = yyvsp[0].qtyp; ;
     break;}
-case 356:
-#line 1066 "cgrammar.y"
+case 363:
+#line 1100 "cgrammar.y"
 { yyval.qtyp = qtype_mergeAlt (yyvsp[-3].qtyp, yyvsp[-1].qtyp); ;
     break;}
-case 358:
-#line 1071 "cgrammar.y"
+case 365:
+#line 1105 "cgrammar.y"
 { yyval.qtyp = qtype_mergeAlt (yyvsp[-2].qtyp, yyvsp[0].qtyp); ;
     break;}
-case 359:
-#line 1074 "cgrammar.y"
+case 366:
+#line 1108 "cgrammar.y"
 { yyval.qtyp = qtype_addQual (yyvsp[0].qtyp, yyvsp[-1].typequal); ;
     break;}
-case 360:
-#line 1075 "cgrammar.y"
+case 367:
+#line 1109 "cgrammar.y"
 { yyval.qtyp = qtype_addQual (yyvsp[0].qtyp, yyvsp[-1].typequal); ;
     break;}
-case 361:
-#line 1076 "cgrammar.y"
+case 368:
+#line 1110 "cgrammar.y"
 { yyval.qtyp = qtype_combine (yyvsp[0].qtyp, yyvsp[-1].ctyp); ;
     break;}
-case 362:
-#line 1079 "cgrammar.y"
+case 369:
+#line 1113 "cgrammar.y"
 { yyval.qtyp = qtype_unknown (); ;
     break;}
-case 363:
-#line 1080 "cgrammar.y"
+case 370:
+#line 1114 "cgrammar.y"
 { yyval.qtyp = yyvsp[0].qtyp; ;
     break;}
-case 364:
-#line 1083 "cgrammar.y"
+case 371:
+#line 1117 "cgrammar.y"
 { sRef_setGlobalScopeSafe (); ;
     break;}
-case 365:
-#line 1085 "cgrammar.y"
+case 372:
+#line 1119 "cgrammar.y"
 { sRef_clearGlobalScopeSafe (); ;
     break;}
-case 366:
-#line 1087 "cgrammar.y"
+case 373:
+#line 1121 "cgrammar.y"
 { yyval.ctyp = declareStruct (yyvsp[-8].cname, yyvsp[-3].flist); ;
     break;}
-case 367:
-#line 1088 "cgrammar.y"
+case 374:
+#line 1122 "cgrammar.y"
 { sRef_setGlobalScopeSafe (); ;
     break;}
-case 368:
-#line 1090 "cgrammar.y"
+case 375:
+#line 1124 "cgrammar.y"
 { sRef_clearGlobalScopeSafe (); ;
     break;}
-case 369:
-#line 1092 "cgrammar.y"
+case 376:
+#line 1126 "cgrammar.y"
 { yyval.ctyp = declareUnion (yyvsp[-8].cname, yyvsp[-3].flist); ;
     break;}
-case 370:
-#line 1094 "cgrammar.y"
+case 377:
+#line 1128 "cgrammar.y"
 { yyval.ctyp = declareStruct (yyvsp[-3].cname, uentryList_new ()); ;
     break;}
-case 371:
-#line 1096 "cgrammar.y"
+case 378:
+#line 1130 "cgrammar.y"
 { yyval.ctyp = declareUnion (yyvsp[-3].cname, uentryList_new ()); ;
     break;}
-case 372:
-#line 1097 "cgrammar.y"
+case 379:
+#line 1131 "cgrammar.y"
 { sRef_setGlobalScopeSafe (); ;
     break;}
-case 373:
-#line 1099 "cgrammar.y"
+case 380:
+#line 1133 "cgrammar.y"
 { sRef_clearGlobalScopeSafe (); ;
     break;}
-case 374:
-#line 1101 "cgrammar.y"
+case 381:
+#line 1135 "cgrammar.y"
 { yyval.ctyp = declareUnnamedStruct (yyvsp[-3].flist); ;
     break;}
-case 375:
-#line 1102 "cgrammar.y"
+case 382:
+#line 1136 "cgrammar.y"
 { sRef_setGlobalScopeSafe (); ;
     break;}
-case 376:
-#line 1104 "cgrammar.y"
+case 383:
+#line 1138 "cgrammar.y"
 { sRef_clearGlobalScopeSafe (); ;
     break;}
-case 377:
-#line 1106 "cgrammar.y"
+case 384:
+#line 1140 "cgrammar.y"
 { yyval.ctyp = declareUnnamedUnion (yyvsp[-3].flist); ;
     break;}
-case 378:
-#line 1108 "cgrammar.y"
+case 385:
+#line 1142 "cgrammar.y"
 { yyval.ctyp = ctype_createUnnamedStruct (uentryList_new ()); ;
     break;}
-case 379:
-#line 1110 "cgrammar.y"
+case 386:
+#line 1144 "cgrammar.y"
 { yyval.ctyp = ctype_createUnnamedUnion (uentryList_new ()); ;
     break;}
-case 380:
-#line 1111 "cgrammar.y"
+case 387:
+#line 1145 "cgrammar.y"
 { yyval.ctyp = handleStruct (yyvsp[-1].cname); ;
     break;}
-case 381:
-#line 1112 "cgrammar.y"
+case 388:
+#line 1146 "cgrammar.y"
 { yyval.ctyp = handleUnion (yyvsp[-1].cname); ;
     break;}
-case 382:
-#line 1115 "cgrammar.y"
+case 389:
+#line 1149 "cgrammar.y"
 { g_expectingTypeName = FALSE; ;
     break;}
-case 384:
-#line 1119 "cgrammar.y"
+case 391:
+#line 1153 "cgrammar.y"
 { yyval.flist = uentryList_undefined; /* bogus! */ ;
     break;}
-case 385:
-#line 1120 "cgrammar.y"
+case 392:
+#line 1154 "cgrammar.y"
 { yyval.flist = uentryList_mergeFields (yyvsp[-1].flist, yyvsp[0].flist); ;
     break;}
-case 386:
-#line 1124 "cgrammar.y"
+case 393:
+#line 1158 "cgrammar.y"
 { yyval.flist = fixUentryList (yyvsp[-2].ntyplist, yyvsp[-4].qtyp); ;
     break;}
-case 387:
-#line 1126 "cgrammar.y"
+case 394:
+#line 1160 "cgrammar.y"
 { yyval.flist = fixUnnamedDecl (yyvsp[-2].qtyp); ;
     break;}
-case 388:
-#line 1130 "cgrammar.y"
+case 395:
+#line 1164 "cgrammar.y"
 { yyval.ntyplist = idDeclList_singleton (yyvsp[-1].ntyp); ;
     break;}
-case 389:
-#line 1132 "cgrammar.y"
+case 396:
+#line 1166 "cgrammar.y"
 { yyval.ntyplist = idDeclList_add (yyvsp[-3].ntyplist, yyvsp[-1].ntyp); ;
     break;}
-case 390:
-#line 1135 "cgrammar.y"
+case 397:
+#line 1169 "cgrammar.y"
 { yyval.ntyp = yyvsp[0].ntyp; ;
     break;}
-case 391:
-#line 1136 "cgrammar.y"
+case 398:
+#line 1170 "cgrammar.y"
 { yyval.ntyp = idDecl_undefined; ;
     break;}
-case 392:
-#line 1137 "cgrammar.y"
+case 399:
+#line 1171 "cgrammar.y"
 { yyval.ntyp = yyvsp[-3].ntyp; ;
     break;}
-case 393:
-#line 1142 "cgrammar.y"
+case 400:
+#line 1176 "cgrammar.y"
 { yyval.ctyp = declareUnnamedEnum (yyvsp[-2].enumnamelist); ;
     break;}
-case 394:
-#line 1143 "cgrammar.y"
+case 401:
+#line 1177 "cgrammar.y"
 { context_pushLoc (); ;
     break;}
-case 395:
-#line 1144 "cgrammar.y"
+case 402:
+#line 1178 "cgrammar.y"
 { context_popLoc (); yyval.ctyp = declareEnum (yyvsp[-5].cname, yyvsp[-2].enumnamelist); ;
     break;}
-case 396:
-#line 1145 "cgrammar.y"
+case 403:
+#line 1179 "cgrammar.y"
 { yyval.ctyp = handleEnum (yyvsp[-1].cname); ;
     break;}
-case 397:
-#line 1149 "cgrammar.y"
+case 404:
+#line 1183 "cgrammar.y"
 { yyval.enumnamelist = enumNameList_single (yyvsp[0].cname); ;
     break;}
-case 398:
-#line 1151 "cgrammar.y"
+case 405:
+#line 1185 "cgrammar.y"
 { yyval.enumnamelist = enumNameList_push (yyvsp[-2].enumnamelist, yyvsp[0].cname); ;
     break;}
-case 400:
-#line 1156 "cgrammar.y"
+case 407:
+#line 1190 "cgrammar.y"
 { uentry ue = uentry_makeEnumConstant (yyvsp[0].cname, ctype_unknown);
      usymtab_supGlobalEntry (ue);
      yyval.cname = yyvsp[0].cname;
    ;
     break;}
-case 401:
-#line 1161 "cgrammar.y"
+case 408:
+#line 1195 "cgrammar.y"
 { uentry ue = uentry_makeEnumInitializedConstant (yyvsp[-3].cname, ctype_unknown, yyvsp[0].expr);
      usymtab_supGlobalEntry (ue);
      yyval.cname = yyvsp[-3].cname; 
    ;
     break;}
-case 403:
-#line 1168 "cgrammar.y"
+case 410:
+#line 1202 "cgrammar.y"
 { yyval.ntyp = idDecl_create (cstring_undefined, qtype_create (yyvsp[0].ctyp)); ;
     break;}
-case 404:
-#line 1170 "cgrammar.y"
+case 411:
+#line 1204 "cgrammar.y"
 { 
      qtype qt = qtype_unknown ();
 
@@ -4566,92 +4650,92 @@ case 404:
      yyval.ntyp = idDecl_create (cstring_copy (LastIdentifier ()), qt);
    ;
     break;}
-case 405:
-#line 1177 "cgrammar.y"
+case 412:
+#line 1211 "cgrammar.y"
 { yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ;
     break;}
-case 407:
-#line 1182 "cgrammar.y"
+case 414:
+#line 1216 "cgrammar.y"
 { yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ;
     break;}
-case 408:
-#line 1185 "cgrammar.y"
+case 415:
+#line 1219 "cgrammar.y"
 { yyval.entrylist = handleParamTypeList (yyvsp[0].entrylist); ;
     break;}
-case 409:
-#line 1186 "cgrammar.y"
+case 416:
+#line 1220 "cgrammar.y"
 { yyval.entrylist = handleParamIdList (yyvsp[0].entrylist); ;
     break;}
-case 410:
-#line 1189 "cgrammar.y"
+case 417:
+#line 1223 "cgrammar.y"
 { /* ignored for now */; ;
     break;}
-case 411:
-#line 1190 "cgrammar.y"
+case 418:
+#line 1224 "cgrammar.y"
 { ; ;
     break;}
-case 412:
-#line 1193 "cgrammar.y"
+case 419:
+#line 1227 "cgrammar.y"
 { ; ;
     break;}
-case 413:
-#line 1194 "cgrammar.y"
+case 420:
+#line 1228 "cgrammar.y"
 { ; ;
     break;}
-case 414:
-#line 1197 "cgrammar.y"
+case 421:
+#line 1231 "cgrammar.y"
 { yyval.count = 1; ;
     break;}
-case 415:
-#line 1198 "cgrammar.y"
+case 422:
+#line 1232 "cgrammar.y"
 { yyval.count = 1; ;
     break;}
-case 416:
-#line 1199 "cgrammar.y"
+case 423:
+#line 1233 "cgrammar.y"
 { yyval.count = 1 + yyvsp[0].count; ;
     break;}
-case 417:
-#line 1200 "cgrammar.y"
+case 424:
+#line 1234 "cgrammar.y"
 { yyval.count = 1 + yyvsp[0].count; ;
     break;}
-case 419:
-#line 1204 "cgrammar.y"
+case 426:
+#line 1238 "cgrammar.y"
 { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeElipsisMarker ()); ;
     break;}
-case 420:
-#line 1207 "cgrammar.y"
+case 427:
+#line 1241 "cgrammar.y"
 { yyval.entrylist = uentryList_single (uentry_makeVariableLoc (yyvsp[0].cname, ctype_int)); ;
     break;}
-case 421:
-#line 1208 "cgrammar.y"
+case 428:
+#line 1242 "cgrammar.y"
 { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeVariableLoc (yyvsp[0].cname, ctype_int)); ;
     break;}
-case 422:
-#line 1211 "cgrammar.y"
+case 429:
+#line 1245 "cgrammar.y"
 { yyval.entrylist = uentryList_single (uentry_makeElipsisMarker ()); ;
     break;}
-case 424:
-#line 1213 "cgrammar.y"
+case 431:
+#line 1247 "cgrammar.y"
 { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeElipsisMarker ()); ;
     break;}
-case 425:
-#line 1216 "cgrammar.y"
+case 432:
+#line 1250 "cgrammar.y"
 { storeLoc (); ;
     break;}
-case 426:
-#line 1216 "cgrammar.y"
+case 433:
+#line 1250 "cgrammar.y"
 { yyval.entrylist = uentryList_single (yyvsp[0].oentry); ;
     break;}
-case 427:
-#line 1217 "cgrammar.y"
+case 434:
+#line 1251 "cgrammar.y"
 { storeLoc (); ;
     break;}
-case 428:
-#line 1218 "cgrammar.y"
+case 435:
+#line 1252 "cgrammar.y"
 { yyval.entrylist = uentryList_add (yyvsp[-3].entrylist, yyvsp[0].oentry); ;
     break;}
-case 429:
-#line 1222 "cgrammar.y"
+case 436:
+#line 1256 "cgrammar.y"
 { 
      if (isFlipOldStyle ()) 
        { 
@@ -4664,8 +4748,8 @@ case 429:
      yyval.oentry = makeCurrentParam (idDecl_fixParamBase (yyvsp[-1].ntyp, yyvsp[-2].qtyp)); 
    ;
     break;}
-case 430:
-#line 1234 "cgrammar.y"
+case 437:
+#line 1268 "cgrammar.y"
 { 
      idDecl tparam = idDecl_create (yyvsp[0].cname, qtype_unknown ());
 
@@ -4680,405 +4764,405 @@ case 430:
      idDecl_free (tparam);
    ;
     break;}
-case 432:
-#line 1250 "cgrammar.y"
+case 439:
+#line 1284 "cgrammar.y"
 { yyval.qtyp = qtype_newBase (yyvsp[-1].qtyp, yyvsp[0].ctyp); ;
     break;}
-case 433:
-#line 1253 "cgrammar.y"
+case 440:
+#line 1287 "cgrammar.y"
 { yyval.ctyp = ctype_adjustPointers (yyvsp[0].count, ctype_unknown); ;
     break;}
-case 435:
-#line 1255 "cgrammar.y"
+case 442:
+#line 1289 "cgrammar.y"
 { yyval.ctyp = ctype_adjustPointers (yyvsp[-1].count, yyvsp[0].ctyp); ;
     break;}
-case 436:
-#line 1258 "cgrammar.y"
+case 443:
+#line 1292 "cgrammar.y"
 { yyval.ctyp = ctype_unknown; ;
     break;}
-case 438:
-#line 1263 "cgrammar.y"
+case 445:
+#line 1297 "cgrammar.y"
 { yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ;
     break;}
-case 439:
-#line 1264 "cgrammar.y"
+case 446:
+#line 1298 "cgrammar.y"
 { yyval.ctyp = ctype_makeArray (ctype_unknown); ;
     break;}
-case 440:
-#line 1266 "cgrammar.y"
+case 447:
+#line 1300 "cgrammar.y"
 { yyval.ctyp = ctype_makeFixedArray (ctype_unknown, exprNode_getLongValue (yyvsp[-1].expr)); ;
     break;}
-case 441:
-#line 1267 "cgrammar.y"
+case 448:
+#line 1301 "cgrammar.y"
 { yyval.ctyp = ctype_makeArray (yyvsp[-2].ctyp); ;
     break;}
-case 442:
-#line 1269 "cgrammar.y"
+case 449:
+#line 1303 "cgrammar.y"
 { yyval.ctyp = ctype_makeFixedArray (yyvsp[-3].ctyp, exprNode_getLongValue (yyvsp[-1].expr)); ;
     break;}
-case 443:
-#line 1271 "cgrammar.y"
+case 450:
+#line 1305 "cgrammar.y"
 { yyval.ctyp = ctype_makeFunction (ctype_unknown, uentryList_makeMissingParams ()); ;
     break;}
-case 444:
-#line 1273 "cgrammar.y"
+case 451:
+#line 1307 "cgrammar.y"
 { yyval.ctyp = ctype_makeParamsFunction (ctype_unknown, yyvsp[-1].entrylist); ;
     break;}
-case 445:
-#line 1275 "cgrammar.y"
+case 452:
+#line 1309 "cgrammar.y"
 { yyval.ctyp = ctype_makeFunction (yyvsp[-3].ctyp, uentryList_makeMissingParams ()); ;
     break;}
-case 446:
-#line 1277 "cgrammar.y"
+case 453:
+#line 1311 "cgrammar.y"
 { yyval.ctyp = ctype_makeParamsFunction (yyvsp[-4].ctyp, yyvsp[-1].entrylist); ;
     break;}
-case 456:
-#line 1292 "cgrammar.y"
+case 463:
+#line 1326 "cgrammar.y"
 {yyval.expr = yyvsp[0].expr; printf ("Doing stmt lclintassertion\n"); ;
     break;}
-case 457:
-#line 1296 "cgrammar.y"
+case 464:
+#line 1330 "cgrammar.y"
 { printf(" QSETBUFFERSIZE id CCONSTANT HEllo World\n");  uentry_setBufferSize(yyvsp[-2].entry, yyvsp[-1].expr); yyval.expr = exprNode_createTok (yyvsp[0].tok);
   ;
     break;}
-case 458:
-#line 1298 "cgrammar.y"
+case 465:
+#line 1332 "cgrammar.y"
 { printf(" QSETSTRINGLENGTH id CCONSTANT HEllo World\n");  uentry_setStringLength(yyvsp[-2].entry, yyvsp[-1].expr); yyval.expr = exprNode_createTok (yyvsp[0].tok);
   ;
     break;}
-case 459:
-#line 1300 "cgrammar.y"
+case 466:
+#line 1334 "cgrammar.y"
 {printf(" QTESTINRANGE\n");  uentry_testInRange(yyvsp[-2].entry, yyvsp[-1].expr); yyval.expr = exprNode_createTok (yyvsp[0].tok);
   ;
     break;}
-case 460:
-#line 1306 "cgrammar.y"
+case 467:
+#line 1340 "cgrammar.y"
 { yyval.expr = exprNode_labelMarker (yyvsp[0].cname); ;
     break;}
-case 461:
-#line 1311 "cgrammar.y"
+case 468:
+#line 1345 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 464:
-#line 1319 "cgrammar.y"
+case 471:
+#line 1353 "cgrammar.y"
 { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 465:
-#line 1323 "cgrammar.y"
+case 472:
+#line 1357 "cgrammar.y"
 { yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 466:
-#line 1325 "cgrammar.y"
+case 473:
+#line 1359 "cgrammar.y"
 { yyval.expr = exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr); ;
     break;}
-case 467:
-#line 1327 "cgrammar.y"
+case 474:
+#line 1361 "cgrammar.y"
 { yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ;
     break;}
-case 468:
-#line 1329 "cgrammar.y"
+case 475:
+#line 1363 "cgrammar.y"
 { yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 469:
-#line 1333 "cgrammar.y"
+case 476:
+#line 1367 "cgrammar.y"
 { context_setProtectVars (); ;
     break;}
-case 470:
-#line 1333 "cgrammar.y"
+case 477:
+#line 1367 "cgrammar.y"
 { context_sizeofReleaseVars (); ;
     break;}
-case 471:
-#line 1335 "cgrammar.y"
+case 478:
+#line 1369 "cgrammar.y"
 { yyval.expr = exprNode_forPred (yyvsp[-7].expr, yyvsp[-5].expr, yyvsp[-2].expr); 
      context_enterForClause (yyvsp[-5].expr); ;
     break;}
-case 472:
-#line 1340 "cgrammar.y"
+case 479:
+#line 1374 "cgrammar.y"
 { setProcessingIterVars (yyvsp[-2].entry); ;
     break;}
-case 473:
-#line 1342 "cgrammar.y"
+case 480:
+#line 1376 "cgrammar.y"
 { yyval.expr = exprNode_iterStart (yyvsp[-5].entry, yyvsp[-1].alist); ;
     break;}
-case 474:
-#line 1343 "cgrammar.y"
+case 481:
+#line 1377 "cgrammar.y"
 { yyval.expr = exprNode_createId (yyvsp[0].entry); ;
     break;}
-case 478:
-#line 1349 "cgrammar.y"
+case 485:
+#line 1383 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 486:
-#line 1357 "cgrammar.y"
+case 493:
+#line 1391 "cgrammar.y"
 { yyval.expr = yyvsp[-1].expr; ;
     break;}
-case 487:
-#line 1358 "cgrammar.y"
+case 494:
+#line 1392 "cgrammar.y"
 { yyval.expr = exprNode_makeError (); ;
     break;}
-case 488:
-#line 1362 "cgrammar.y"
+case 495:
+#line 1396 "cgrammar.y"
 { /* don't: context_exitTrueClause ($1, $2); */
      yyval.expr = exprNode_if (yyvsp[-1].expr, yyvsp[0].expr); 
    ;
     break;}
-case 489:
-#line 1367 "cgrammar.y"
+case 496:
+#line 1401 "cgrammar.y"
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 490:
-#line 1370 "cgrammar.y"
+case 497:
+#line 1404 "cgrammar.y"
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 501:
-#line 1385 "cgrammar.y"
+case 508:
+#line 1419 "cgrammar.y"
 { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
     break;}
-case 503:
-#line 1387 "cgrammar.y"
+case 510:
+#line 1421 "cgrammar.y"
 { yyval.expr = exprNode_makeError (); ;
     break;}
-case 504:
-#line 1390 "cgrammar.y"
+case 511:
+#line 1424 "cgrammar.y"
 { yyval.expr = exprNode_labelMarker (yyvsp[-1].cname); ;
     break;}
-case 505:
-#line 1391 "cgrammar.y"
+case 512:
+#line 1425 "cgrammar.y"
 { yyval.expr = exprNode_notReached (yyvsp[0].expr); ;
     break;}
-case 506:
-#line 1397 "cgrammar.y"
+case 513:
+#line 1431 "cgrammar.y"
 { context_enterCaseClause (yyvsp[0].expr); ;
     break;}
-case 507:
-#line 1398 "cgrammar.y"
+case 514:
+#line 1432 "cgrammar.y"
 { yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, FALSE); ;
     break;}
-case 508:
-#line 1399 "cgrammar.y"
+case 515:
+#line 1433 "cgrammar.y"
 { context_enterCaseClause (yyvsp[0].expr); ;
     break;}
-case 509:
-#line 1400 "cgrammar.y"
+case 516:
+#line 1434 "cgrammar.y"
 { yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, TRUE); ;
     break;}
-case 510:
-#line 1403 "cgrammar.y"
+case 517:
+#line 1437 "cgrammar.y"
 { context_enterCaseClause (exprNode_undefined); ;
     break;}
-case 511:
-#line 1404 "cgrammar.y"
+case 518:
+#line 1438 "cgrammar.y"
 { yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, FALSE); ;
     break;}
-case 512:
-#line 1405 "cgrammar.y"
+case 519:
+#line 1439 "cgrammar.y"
 { context_enterCaseClause (exprNode_undefined); ;
     break;}
-case 513:
-#line 1406 "cgrammar.y"
+case 520:
+#line 1440 "cgrammar.y"
 { yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, TRUE); ;
     break;}
-case 514:
-#line 1409 "cgrammar.y"
+case 521:
+#line 1443 "cgrammar.y"
 { yyval.expr = yyvsp[-1].expr; ;
     break;}
-case 515:
-#line 1411 "cgrammar.y"
+case 522:
+#line 1445 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; context_exitInner (yyvsp[0].expr); ;
     break;}
-case 516:
-#line 1414 "cgrammar.y"
+case 523:
+#line 1448 "cgrammar.y"
 { yyval.expr = yyvsp[-1].expr; ;
     break;}
-case 517:
-#line 1417 "cgrammar.y"
+case 524:
+#line 1451 "cgrammar.y"
 { context_enterInnerContext (); ;
     break;}
-case 518:
-#line 1420 "cgrammar.y"
+case 525:
+#line 1454 "cgrammar.y"
 { context_exitInnerPlain (); ;
     break;}
-case 519:
-#line 1423 "cgrammar.y"
+case 526:
+#line 1457 "cgrammar.y"
 { context_enterStructInnerContext (); ;
     break;}
-case 520:
-#line 1426 "cgrammar.y"
+case 527:
+#line 1460 "cgrammar.y"
 { context_exitStructInnerContext (); ;
     break;}
-case 521:
-#line 1429 "cgrammar.y"
+case 528:
+#line 1463 "cgrammar.y"
 { context_exitInnerSafe (); ;
     break;}
-case 522:
-#line 1432 "cgrammar.y"
+case 529:
+#line 1466 "cgrammar.y"
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 523:
-#line 1433 "cgrammar.y"
+case 530:
+#line 1467 "cgrammar.y"
 { yyval.expr = exprNode_notReached (exprNode_createTok (yyvsp[0].tok)); ;
     break;}
-case 524:
-#line 1434 "cgrammar.y"
+case 531:
+#line 1468 "cgrammar.y"
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 525:
-#line 1436 "cgrammar.y"
+case 532:
+#line 1470 "cgrammar.y"
 { yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
     break;}
-case 526:
-#line 1437 "cgrammar.y"
+case 533:
+#line 1471 "cgrammar.y"
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 527:
-#line 1439 "cgrammar.y"
+case 534:
+#line 1473 "cgrammar.y"
 { yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
     break;}
-case 528:
-#line 1441 "cgrammar.y"
+case 535:
+#line 1475 "cgrammar.y"
 { yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 529:
-#line 1443 "cgrammar.y"
+case 536:
+#line 1477 "cgrammar.y"
 { yyval.expr = exprNode_notReached (exprNode_updateLocation (exprNode_concat (yyvsp[-3].expr, yyvsp[-2].expr), 
                                                        lltok_getLoc (yyvsp[-1].tok))); 
    ;
     break;}
-case 530:
-#line 1450 "cgrammar.y"
+case 537:
+#line 1484 "cgrammar.y"
 { yyval.expr = exprNode_makeBlock (yyvsp[0].expr); ;
     break;}
-case 531:
-#line 1454 "cgrammar.y"
+case 538:
+#line 1488 "cgrammar.y"
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 532:
-#line 1456 "cgrammar.y"
+case 539:
+#line 1490 "cgrammar.y"
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 533:
-#line 1458 "cgrammar.y"
+case 540:
+#line 1492 "cgrammar.y"
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 534:
-#line 1460 "cgrammar.y"
+case 541:
+#line 1494 "cgrammar.y"
 { yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 536:
-#line 1464 "cgrammar.y"
+case 543:
+#line 1498 "cgrammar.y"
 { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 537:
-#line 1467 "cgrammar.y"
+case 544:
+#line 1501 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 538:
-#line 1468 "cgrammar.y"
+case 545:
+#line 1502 "cgrammar.y"
 { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 539:
-#line 1471 "cgrammar.y"
+case 546:
+#line 1505 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 540:
-#line 1472 "cgrammar.y"
+case 547:
+#line 1506 "cgrammar.y"
 { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 541:
-#line 1475 "cgrammar.y"
+case 548:
+#line 1509 "cgrammar.y"
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 542:
-#line 1476 "cgrammar.y"
+case 549:
+#line 1510 "cgrammar.y"
 { yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
-case 543:
-#line 1479 "cgrammar.y"
+case 550:
+#line 1513 "cgrammar.y"
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 544:
-#line 1480 "cgrammar.y"
+case 551:
+#line 1514 "cgrammar.y"
 { yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
-case 545:
-#line 1481 "cgrammar.y"
+case 552:
+#line 1515 "cgrammar.y"
 { yyval.expr = exprNode_checkExpr (yyvsp[0].expr); ;
     break;}
-case 546:
-#line 1485 "cgrammar.y"
+case 553:
+#line 1519 "cgrammar.y"
 { yyval.expr = yyvsp[-1].expr; exprNode_produceGuards (yyvsp[-1].expr); context_enterTrueClause (yyvsp[-1].expr); ;
     break;}
-case 547:
-#line 1493 "cgrammar.y"
+case 554:
+#line 1527 "cgrammar.y"
 { 
      context_exitTrueClause (yyvsp[-1].expr, yyvsp[0].expr);
      yyval.expr = exprNode_if (yyvsp[-1].expr, yyvsp[0].expr); 
    ;
     break;}
-case 548:
-#line 1497 "cgrammar.y"
+case 555:
+#line 1531 "cgrammar.y"
 { context_enterFalseClause (yyvsp[-2].expr); ;
     break;}
-case 549:
-#line 1498 "cgrammar.y"
+case 556:
+#line 1532 "cgrammar.y"
 {
      context_exitClause (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr);
      yyval.expr = exprNode_ifelse (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr); 
    ;
     break;}
-case 550:
-#line 1502 "cgrammar.y"
+case 557:
+#line 1536 "cgrammar.y"
 { context_enterSwitch (yyvsp[0].expr); ;
     break;}
-case 551:
-#line 1503 "cgrammar.y"
+case 558:
+#line 1537 "cgrammar.y"
 { yyval.expr = exprNode_switch (yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
-case 552:
-#line 1507 "cgrammar.y"
+case 559:
+#line 1541 "cgrammar.y"
 { yyval.expr = exprNode_whilePred (yyvsp[-1].expr); context_enterWhileClause (yyvsp[-1].expr); ;
     break;}
-case 553:
-#line 1511 "cgrammar.y"
+case 560:
+#line 1545 "cgrammar.y"
 { yyval.expr = exprNode_whilePred(yyvsp[-1].expr); ;
     break;}
-case 554:
-#line 1514 "cgrammar.y"
+case 561:
+#line 1548 "cgrammar.y"
 { context_enterIterClause (); ;
     break;}
-case 555:
-#line 1515 "cgrammar.y"
+case 562:
+#line 1549 "cgrammar.y"
 { setProcessingIterVars (yyvsp[-3].entry); ;
     break;}
-case 556:
-#line 1518 "cgrammar.y"
+case 563:
+#line 1552 "cgrammar.y"
 { 
      yyval.expr = exprNode_iter (yyvsp[-9].entry, yyvsp[-4].alist, yyvsp[-2].expr, yyvsp[-1].entry); 
 
    ;
     break;}
-case 557:
-#line 1524 "cgrammar.y"
+case 564:
+#line 1558 "cgrammar.y"
 { yyval.alist = exprNodeList_singleton (yyvsp[0].expr); ;
     break;}
-case 558:
-#line 1525 "cgrammar.y"
+case 565:
+#line 1559 "cgrammar.y"
 { nextIterParam (); ;
     break;}
-case 559:
-#line 1526 "cgrammar.y"
+case 566:
+#line 1560 "cgrammar.y"
 { yyval.alist = exprNodeList_push (yyvsp[-3].alist, yyvsp[0].expr); ;
     break;}
-case 560:
-#line 1529 "cgrammar.y"
+case 567:
+#line 1563 "cgrammar.y"
 { yyval.expr = exprNode_iterExpr (yyvsp[0].expr); ;
     break;}
-case 561:
-#line 1530 "cgrammar.y"
+case 568:
+#line 1564 "cgrammar.y"
 { yyval.expr = exprNode_iterId (yyvsp[0].entry); ;
     break;}
-case 562:
-#line 1531 "cgrammar.y"
+case 569:
+#line 1565 "cgrammar.y"
 { uentry ue = coerceIterId (yyvsp[0].cname);
 
                      if (uentry_isValid (ue)) 
@@ -5091,321 +5175,321 @@ case 562:
                        }
                    ;
     break;}
-case 563:
-#line 1542 "cgrammar.y"
+case 570:
+#line 1576 "cgrammar.y"
 { yyval.expr = exprNode_iterNewId (yyvsp[0].cname); ;
     break;}
-case 565:
-#line 1550 "cgrammar.y"
+case 572:
+#line 1584 "cgrammar.y"
 { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
     break;}
-case 567:
-#line 1554 "cgrammar.y"
+case 574:
+#line 1588 "cgrammar.y"
 { yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ;
     break;}
-case 568:
-#line 1555 "cgrammar.y"
+case 575:
+#line 1589 "cgrammar.y"
 { yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ;
     break;}
-case 569:
-#line 1556 "cgrammar.y"
+case 576:
+#line 1590 "cgrammar.y"
 { yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].alist); ;
     break;}
-case 570:
-#line 1558 "cgrammar.y"
+case 577:
+#line 1592 "cgrammar.y"
 { yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ;
     break;}
-case 571:
-#line 1559 "cgrammar.y"
+case 578:
+#line 1593 "cgrammar.y"
 { yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-1].cname); ;
     break;}
-case 572:
-#line 1560 "cgrammar.y"
+case 579:
+#line 1594 "cgrammar.y"
 { yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-1].cname); ;
     break;}
-case 573:
-#line 1561 "cgrammar.y"
+case 580:
+#line 1595 "cgrammar.y"
 { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
-case 574:
-#line 1562 "cgrammar.y"
+case 581:
+#line 1596 "cgrammar.y"
 { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
-case 576:
-#line 1566 "cgrammar.y"
+case 583:
+#line 1600 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 577:
-#line 1567 "cgrammar.y"
+case 584:
+#line 1601 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 578:
-#line 1568 "cgrammar.y"
+case 585:
+#line 1602 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 579:
-#line 1569 "cgrammar.y"
+case 586:
+#line 1603 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 580:
-#line 1570 "cgrammar.y"
+case 587:
+#line 1604 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 581:
-#line 1571 "cgrammar.y"
+case 588:
+#line 1605 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 582:
-#line 1572 "cgrammar.y"
+case 589:
+#line 1606 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 583:
-#line 1573 "cgrammar.y"
+case 590:
+#line 1607 "cgrammar.y"
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 584:
-#line 1574 "cgrammar.y"
+case 591:
+#line 1608 "cgrammar.y"
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 586:
-#line 1578 "cgrammar.y"
+case 593:
+#line 1612 "cgrammar.y"
 { yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ;
     break;}
-case 588:
-#line 1582 "cgrammar.y"
+case 595:
+#line 1616 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 589:
-#line 1583 "cgrammar.y"
+case 596:
+#line 1617 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 590:
-#line 1584 "cgrammar.y"
+case 597:
+#line 1618 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 592:
-#line 1588 "cgrammar.y"
+case 599:
+#line 1622 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 593:
-#line 1589 "cgrammar.y"
+case 600:
+#line 1623 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 595:
-#line 1593 "cgrammar.y"
+case 602:
+#line 1627 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 596:
-#line 1594 "cgrammar.y"
+case 603:
+#line 1628 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 598:
-#line 1598 "cgrammar.y"
+case 605:
+#line 1632 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 599:
-#line 1599 "cgrammar.y"
+case 606:
+#line 1633 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 600:
-#line 1600 "cgrammar.y"
+case 607:
+#line 1634 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 601:
-#line 1601 "cgrammar.y"
+case 608:
+#line 1635 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 603:
-#line 1605 "cgrammar.y"
+case 610:
+#line 1639 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 604:
-#line 1606 "cgrammar.y"
+case 611:
+#line 1640 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 606:
-#line 1610 "cgrammar.y"
+case 613:
+#line 1644 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 608:
-#line 1614 "cgrammar.y"
+case 615:
+#line 1648 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 610:
-#line 1619 "cgrammar.y"
+case 617:
+#line 1653 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 612:
-#line 1623 "cgrammar.y"
+case 619:
+#line 1657 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 614:
-#line 1627 "cgrammar.y"
+case 621:
+#line 1661 "cgrammar.y"
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 616:
-#line 1631 "cgrammar.y"
+case 623:
+#line 1665 "cgrammar.y"
 { context_enterTrueClause (yyvsp[-1].expr); ;
     break;}
-case 617:
-#line 1632 "cgrammar.y"
+case 624:
+#line 1666 "cgrammar.y"
 { context_enterFalseClause (yyvsp[-4].expr); ;
     break;}
-case 618:
-#line 1633 "cgrammar.y"
+case 625:
+#line 1667 "cgrammar.y"
 { yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
-case 620:
-#line 1637 "cgrammar.y"
+case 627:
+#line 1671 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 621:
-#line 1638 "cgrammar.y"
+case 628:
+#line 1672 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 622:
-#line 1639 "cgrammar.y"
+case 629:
+#line 1673 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 623:
-#line 1640 "cgrammar.y"
+case 630:
+#line 1674 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 624:
-#line 1641 "cgrammar.y"
+case 631:
+#line 1675 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 625:
-#line 1642 "cgrammar.y"
+case 632:
+#line 1676 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 626:
-#line 1643 "cgrammar.y"
+case 633:
+#line 1677 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 627:
-#line 1644 "cgrammar.y"
+case 634:
+#line 1678 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 628:
-#line 1645 "cgrammar.y"
+case 635:
+#line 1679 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 629:
-#line 1646 "cgrammar.y"
+case 636:
+#line 1680 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 630:
-#line 1647 "cgrammar.y"
+case 637:
+#line 1681 "cgrammar.y"
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 631:
-#line 1650 "cgrammar.y"
+case 638:
+#line 1684 "cgrammar.y"
 { yyval.entry = yyvsp[0].entry; ;
     break;}
-case 632:
-#line 1651 "cgrammar.y"
+case 639:
+#line 1685 "cgrammar.y"
 { yyval.entry = uentry_undefined; ;
     break;}
-case 633:
-#line 1654 "cgrammar.y"
+case 640:
+#line 1688 "cgrammar.y"
 { context_enterDoWhileClause (); yyval.tok = yyvsp[0].tok; ;
     break;}
-case 634:
-#line 1658 "cgrammar.y"
+case 641:
+#line 1692 "cgrammar.y"
 { yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 635:
-#line 1660 "cgrammar.y"
+case 642:
+#line 1694 "cgrammar.y"
 { yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
     break;}
-case 636:
-#line 1662 "cgrammar.y"
+case 643:
+#line 1696 "cgrammar.y"
 { yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 637:
-#line 1665 "cgrammar.y"
+case 644:
+#line 1699 "cgrammar.y"
 { yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 638:
-#line 1667 "cgrammar.y"
+case 645:
+#line 1701 "cgrammar.y"
 { yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
     break;}
-case 639:
-#line 1669 "cgrammar.y"
+case 646:
+#line 1703 "cgrammar.y"
 { yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ;
     break;}
-case 640:
-#line 1670 "cgrammar.y"
+case 647:
+#line 1704 "cgrammar.y"
 { yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 641:
-#line 1673 "cgrammar.y"
+case 648:
+#line 1707 "cgrammar.y"
 { yyval.expr = exprNode_goto (yyvsp[-1].cname); ;
     break;}
-case 642:
-#line 1674 "cgrammar.y"
+case 649:
+#line 1708 "cgrammar.y"
 { yyval.expr = exprNode_continue (yyvsp[-1].tok, BADTOK); ;
     break;}
-case 643:
-#line 1676 "cgrammar.y"
+case 650:
+#line 1710 "cgrammar.y"
 { yyval.expr = exprNode_continue (yyvsp[-2].tok, QINNERCONTINUE); ;
     break;}
-case 644:
-#line 1677 "cgrammar.y"
+case 651:
+#line 1711 "cgrammar.y"
 { yyval.expr = exprNode_break (yyvsp[-1].tok, BADTOK); ;
     break;}
-case 645:
-#line 1678 "cgrammar.y"
+case 652:
+#line 1712 "cgrammar.y"
 { yyval.expr = exprNode_break (yyvsp[-1].tok, QSWITCHBREAK); ;
     break;}
-case 646:
-#line 1679 "cgrammar.y"
+case 653:
+#line 1713 "cgrammar.y"
 { yyval.expr = exprNode_break (yyvsp[-1].tok, QLOOPBREAK); ;
     break;}
-case 647:
-#line 1680 "cgrammar.y"
+case 654:
+#line 1714 "cgrammar.y"
 { yyval.expr = exprNode_break (yyvsp[-1].tok, QINNERBREAK); ;
     break;}
-case 648:
-#line 1681 "cgrammar.y"
+case 655:
+#line 1715 "cgrammar.y"
 { yyval.expr = exprNode_break (yyvsp[-1].tok, QSAFEBREAK); ;
     break;}
-case 649:
-#line 1682 "cgrammar.y"
+case 656:
+#line 1716 "cgrammar.y"
 { yyval.expr = exprNode_nullReturn (yyvsp[-1].tok); ;
     break;}
-case 650:
-#line 1683 "cgrammar.y"
+case 657:
+#line 1717 "cgrammar.y"
 { yyval.expr = exprNode_return (yyvsp[-1].expr); ;
     break;}
-case 652:
-#line 1687 "cgrammar.y"
+case 659:
+#line 1721 "cgrammar.y"
 { ; ;
     break;}
-case 655:
-#line 1694 "cgrammar.y"
+case 662:
+#line 1728 "cgrammar.y"
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
-case 656:
-#line 1695 "cgrammar.y"
+case 663:
+#line 1729 "cgrammar.y"
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
-case 657:
-#line 1696 "cgrammar.y"
+case 664:
+#line 1730 "cgrammar.y"
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
-case 658:
-#line 1697 "cgrammar.y"
+case 665:
+#line 1731 "cgrammar.y"
 { yyval.cname = yyvsp[0].cname; ;
     break;}
-case 660:
-#line 1701 "cgrammar.y"
+case 667:
+#line 1735 "cgrammar.y"
 { yyval.ctyp = ctype_unknown; ;
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/share/misc/bison.simple"
+#line 498 "/gnu/share/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -5601,7 +5685,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 1703 "cgrammar.y"
+#line 1737 "cgrammar.y"
 
 
 /*@-redecl@*/
index 23e2b6ffb2bdd8a1822604a5db9e47c5ad006b69..39c73f04562c090861878663de39ea6a2162cb4b 100644 (file)
@@ -289,6 +289,7 @@ void setFunctionSpecialClause (lltok stok, sRefSet s,
 
   DPRINTF (("Added to specclauses: %s", specialClauses_unparse (specClauses)));
 }
+
 /*drl
  */
 constraintList getFunctionConstraints (void)
@@ -2132,6 +2133,12 @@ sRef checkSpecClausesId (uentry ue)
       return uentry_getSref (ue);
     }
 }
+/*drl:1/19/2001
+  oops to 1/8/2000
+  date is wronge ..
+  don;t know what the real date is...
+  
+*/
 
 /*drl
   added 1/8/2000
index ec5eb02d513dba3fd74a7fa7a2fa02060bc6b261..2187b0d4bbb95d5b44d229a9940b644c7073e518 100644 (file)
@@ -133,6 +133,8 @@ constraint constraint_copy (constraint c)
   ret->ar = c->ar;
   ret->expr =  constraintExpr_copy (c->expr);
   ret->post = c->post;
+  ret->generatingExpr = c->generatingExpr;
+  
   /*@i33 fix this*/
   if (c->orig != NULL)
     ret->orig = constraint_copy (c->orig);
@@ -154,7 +156,7 @@ void constraint_overWrite (constraint c1, constraint c2)
     c1->orig = constraint_copy (c2->orig);
   else
     c1->orig = NULL;
-
+  c1->generatingExpr = c2->generatingExpr;
 }
 
 bool constraint_resolve (/*@unused@*/ constraint c)
@@ -173,16 +175,54 @@ constraint constraint_makeNew (void)
   ret->ar = LT;
   ret->post = FALSE;
   ret->orig = NULL;
+  ret->generatingExpr = NULL;
   /*@i23*/return ret;
 }
 
+constraint constraint_addGeneratingExpr (/*@returned@*/ constraint c, exprNode e)
+{
+    
+  if (c->generatingExpr == NULL)
+    {
+      c->generatingExpr = e;
+      DPRINTF ((message ("setting generatingExpr for %s to %s", constraint_print(c), exprNode_unparse(e) )  ));
+    }
+  else
+    {
+      DPRINTF ((message ("Not setting generatingExpr for %s to %s", constraint_print(c), exprNode_unparse(e) )  ));
+    }
+  return c;
+}
+
 fileloc constraint_getFileloc (constraint c)
 {
+  if (c->generatingExpr)
+    return (exprNode_getfileloc (c->generatingExpr) );
+           
   return (constraintExpr_getFileloc (c->lexpr) );
 
 
 }
 
+static bool checkForMaxSet (constraint c)
+{
+  if (constraintExpr_hasMaxSet(c->lexpr) || constraintExpr_hasMaxSet(c->expr) )
+    return TRUE;
+
+  return FALSE;
+}
+
+bool constraint_hasMaxSet(constraint c)
+{
+  if (c->orig)
+    {
+      if (checkForMaxSet(c->orig) )
+       return TRUE;
+    }
+
+  return (checkForMaxSet(c) );
+}
+
 constraint constraint_makeReadSafeExprNode ( exprNode po, exprNode ind)
 {
   constraint ret = constraint_makeNew();
@@ -436,16 +476,23 @@ cstring arithType_print (arithType ar)
 void constraint_printError (constraint c, fileloc loc)
 {
   cstring string;
-
+  fileloc errorLoc;
+  
   string = constraint_printDetailed (c);
+
+  errorLoc = loc;
+
+  if (constraint_getFileloc(c) )
+    errorLoc = constraint_getFileloc(c);
+  
   
   if (c->post)
     {
-       voptgenerror (FLG_FUNCTIONPOST, string, loc);
+       voptgenerror (FLG_FUNCTIONPOST, string, errorLoc);
     }
   else
     {
-      voptgenerror (FLG_FUNCTIONCONSTRAINT, string, loc);
+      voptgenerror (FLG_FUNCTIONCONSTRAINT, string, errorLoc);
     }
       
 }
@@ -470,6 +517,22 @@ cstring  constraint_printDetailed (constraint c)
       else
        st = message ("Block Post condition:\nThis function block has the post condition %s", constraint_print (c));    
     }
+
+  if (context_getFlag (FLG_CONSTRAINTLOCATION) )
+    {
+      cstring temp;
+      // llassert (c->generatingExpr);
+      temp = message ("\nOriginal Generating expression %s: %s\n", fileloc_unparse( exprNode_getfileloc (c->generatingExpr) ),
+                     exprNode_unparse(c->generatingExpr) );
+      st = cstring_concat (st, temp);
+
+      if (constraint_hasMaxSet(c) )
+       {
+         cstring temp2;
+         temp2 = message ("\nHas MaxSet\n");
+         st = cstring_concat (st, temp2);
+       }
+    }
   return st;
 }
 
index 23c2d456b7f6687f4635e7ecd3d9d29d25a2653c..1fb948f0b3329594f2870a2794560faa52eaf418 100644 (file)
@@ -30,6 +30,7 @@ constraintList exprNode_traversRequiresConstraints (exprNode e);
 constraintList exprNode_traversEnsuresConstraints (exprNode e);
 
 constraintList exprNode_traversTrueEnsuresConstraints (exprNode e);
+constraintList exprNode_traversFalseEnsuresConstraints (exprNode e);
 
 extern constraintList reflectChanges (constraintList pre2, constraintList post1);
 
@@ -38,6 +39,8 @@ exprNode makeDataTypeConstraints (exprNode e);
 constraintList constraintList_makeFixedArrayConstraints (sRefSet s);
 constraintList checkCall (exprNode fcn, exprNodeList arglist);
 
+void checkArgumentList (exprNode temp, exprNodeList arglist, fileloc sequencePoint);
+
 //bool exprNode_testd()
 //{
   /*        if ( ( (exprNode_isError  ) ) )
@@ -113,15 +116,15 @@ bool /*@alt void@*/ exprNode_generateConstraints (/*@temp@*/ exprNode e)
   if (exprNode_isError (e) )
     return FALSE;
   
+  e->requiresConstraints = constraintList_new();
+  e->ensuresConstraints = constraintList_new();
+  e->trueEnsuresConstraints = constraintList_new();
+  e->falseEnsuresConstraints = constraintList_new();
+
   if (exprNode_isUnhandled (e) )
     {
       DPRINTF( (message("Warning ignoring %s", exprNode_unparse (e) ) ) );
-      e->requiresConstraints = constraintList_new();
-      e->ensuresConstraints = constraintList_new();
-      e->trueEnsuresConstraints = constraintList_new();
-      e->falseEnsuresConstraints = constraintList_new();
-      //  llassert(FALSE);
-      return FALSE;
+        return FALSE;
     }
 
   
@@ -136,6 +139,11 @@ bool /*@alt void@*/ exprNode_generateConstraints (/*@temp@*/ exprNode e)
     }
   else
     {
+      fileloc loc;
+      
+      loc = exprNode_getNextSequencePoint(e); 
+      exprNode_exprTraverse(e, FALSE, FALSE, loc);
+      
       //    llassert(FALSE);
       return FALSE;
     }
@@ -187,7 +195,8 @@ bool exprNode_stmt (exprNode e)
   exprNode snode;
   fileloc loc;
   bool notError;
-
+  char * s;
+  
   if (exprNode_isError(e) )
     {
       return FALSE;
@@ -198,8 +207,9 @@ bool exprNode_stmt (exprNode e)
   
  
   DPRINTF(( "STMT:") );
-  DPRINTF ( ( cstring_toCharsSafe ( exprNode_unparse(e)) )
-          );
+  s =  exprNode_unparse(e);
+  // DPRINTF ( ( message("STMT: %s ") ) );
+  
   if (e->kind == XPR_INIT)
     {
       DPRINTF (("Init") );
@@ -304,11 +314,22 @@ exprNode doIf (exprNode e, exprNode test, exprNode body)
   e->requiresConstraints = reflectChanges (body->requiresConstraints, test->trueEnsuresConstraints);
   e->requiresConstraints = reflectChanges (e->requiresConstraints,
                                           test->ensuresConstraints);
+  e->requiresConstraints = constraintList_addList(e->requiresConstraints, test->requiresConstraints);
 #warning bad
   e->ensuresConstraints = constraintList_copy (test->ensuresConstraints);
+
+  DPRINTF ((message ("doIf: if requiers %s ", constraintList_print(e->requiresConstraints) ) ) );
+  
   return e;
 }
 
+
+exprNode doWhile (exprNode e, exprNode test, exprNode body)
+{
+  DPRINTF ((message ("doWhile: %s ", exprNode_unparse(e) ) ) );
+  return doIf (e, test, body);
+}
+
 constraintList constraintList_makeFixedArrayConstraints (sRefSet s)
 {
   constraintList ret;
@@ -387,6 +408,8 @@ void doFor (exprNode e, exprNode forPred, exprNode forBody)
       
 }
 
+
+
 bool exprNode_multiStatement (exprNode e)
 {
   
@@ -439,11 +462,27 @@ bool exprNode_multiStatement (exprNode e)
       exprNode_generateConstraints (exprData_getTripleInit (data) );
       test = exprData_getTripleTest (data);
       exprNode_exprTraverse (test,FALSE, FALSE, exprNode_loc(e));
+      exprNode_generateConstraints (exprData_getTripleInc (data) );
+    
       if (!exprNode_isError(test) )
        test->trueEnsuresConstraints =  exprNode_traversTrueEnsuresConstraints(test);
 
       exprNode_generateConstraints (exprData_getTripleInc (data));
       break;
+
+    case XPR_WHILE:
+      e1 = exprData_getPairA (data);
+      e2 = exprData_getPairB (data);
+      
+       exprNode_exprTraverse (e1,
+                             FALSE, FALSE, exprNode_loc(e1));
+       
+       exprNode_generateConstraints (e2);
+
+       e = doWhile (e, e1, e2);
+      
+      break; 
+
     case XPR_IF:
       DPRINTF(( "IF:") );
       DPRINTF ((exprNode_unparse(e) ) );
@@ -461,7 +500,8 @@ bool exprNode_multiStatement (exprNode e)
       
       //      e->constraints = constraintList_exprNodemerge (exprData_getPairA (data),exprData_getPairB(data));
       break;
-      
+
+     
     case XPR_IFELSE:
       DPRINTF(("Starting IFELSE"));
       //      ret = message ("if (%s) %s else %s",
@@ -474,21 +514,31 @@ bool exprNode_multiStatement (exprNode e)
       exprNode_generateConstraints (trueBranch);
       exprNode_generateConstraints (falseBranch);
 
+      p->ensuresConstraints = exprNode_traversEnsuresConstraints (p);
+      p->trueEnsuresConstraints =  exprNode_traversTrueEnsuresConstraints(p);
+      //      p->falseEnsuresConstraints =  exprNode_traversFalseEnsuresConstraints(p);
+     
       // do requires clauses
-      
+
+      {
+       constraintList c1, c2;
+       c1 = constraintList_copy (p->ensuresConstraints);
+                                 
       cons = reflectChanges (trueBranch->requiresConstraints, p->trueEnsuresConstraints);
       cons  = reflectChanges (cons,
                              p->ensuresConstraints);
       e->requiresConstraints = constraintList_copy (cons);
-
+      /*
       cons = reflectChanges (falseBranch->requiresConstraints, p->falseEnsuresConstraints);
       cons  = reflectChanges (cons,
-                             p->ensuresConstraints);
+                             c1);
       e->requiresConstraints = constraintList_addList (e->requiresConstraints,
                                                       cons);
       e->requiresConstraints = constraintList_addList (e->requiresConstraints,
                                                       p->requiresConstraints);
-      
+      */
+
+      }
       // do ensures clauses
       // find the  the ensures lists for each subbranch
       t = constraintList_mergeEnsures (p->trueEnsuresConstraints, trueBranch->ensuresConstraints);
@@ -502,29 +552,7 @@ bool exprNode_multiStatement (exprNode e)
       e->ensuresConstraints = constraintList_logicalOr (t, f);
       DPRINTF( ("Done IFELSE") );
       break;
-    case XPR_WHILE:
-       e1 = exprData_getPairA (data);
-       e2 = exprData_getPairB (data);
-      exprNode_exprTraverse (e1,
-                            FALSE, FALSE, exprNode_loc(e1));
-
-      exprNode_generateConstraints (e2);
-      
-      e1->trueEnsuresConstraints =  exprNode_traversTrueEnsuresConstraints(e1);
-      
-      e->requiresConstraints = reflectChanges (e2->requiresConstraints, e1->trueEnsuresConstraints);
-      
-      e->requiresConstraints = reflectChanges (e->requiresConstraints,
-                                              e1->ensuresConstraints);
-#warning bad
-      e->ensuresConstraints = constraintList_copy (e1->ensuresConstraints);
-      
-      //      ret = message ("while (%s) %s",
-                    exprNode_generateConstraints (exprData_getPairA (data));
-                    exprNode_generateConstraints (exprData_getPairB (data));
-                    //      e->constraints = constraintList_exprNodemerge (exprData_getPairA (data), exprData_getPairB (data) );
-      break;
-
     case XPR_DOWHILE:
       // ret = message ("do { %s } while (%s)",
                     exprNode_generateConstraints (exprData_getPairB (data));
@@ -697,7 +725,7 @@ if (lltok_isLe_Op (tok) )
 
 bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  fileloc sequencePoint)
 {
-  exprNode t1, t2;
+  exprNode t1, t2, fcn;
   lltok tok;
   bool handledExprNode;
   exprData data;
@@ -755,7 +783,7 @@ bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  filel
       cons = constraint_makeEnsureMaxReadAtLeast (t1, t2, sequencePoint);
       e->ensuresConstraints = constraintList_add(e->ensuresConstraints, cons);
 
-      cons = constraint_makeEnsureLteMaxRead (t1, t2);
+      cons = constraint_makeEnsureLteMaxRead (t2, t1);
       e->trueEnsuresConstraints = constraintList_add(e->trueEnsuresConstraints, cons);
        
       //      cons = constraint_makeEnsureMinReadAtMost (t1, t2, sequencePoint);
@@ -824,17 +852,25 @@ bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  filel
       break;
       
     case XPR_CALL:
-      exprNode_exprTraverse (exprData_getFcn (data), definatelv, definaterv, sequencePoint );
+      fcn = exprData_getFcn(data);
+      
+      exprNode_exprTraverse (fcn, definatelv, definaterv, sequencePoint );
       exprNodeList_unparse (exprData_getArgs (data) );
-      DPRINTF ( (message ("Got call that %s ( %s) ",  exprNode_unparse(exprData_getFcn(data) ),   exprNodeList_unparse (exprData_getArgs (data) ) ) ) );
+      DPRINTF ( (message ("Got call that %s ( %s) ",  exprNode_unparse(fcn),   exprNodeList_unparse (exprData_getArgs (data) ) ) ) );
 
-     
+      fcn->requiresConstraints = constraintList_addList (fcn->requiresConstraints,
+                                                checkCall (fcn, exprData_getArgs (data)  ) );      
 
-      e->requiresConstraints = constraintList_addList (e->requiresConstraints,
-                                                checkCall (exprData_getFcn (data), exprData_getArgs (data)  ) );      
+      fcn->ensuresConstraints = constraintList_addList (fcn->ensuresConstraints,
+                                                getPostConditions(fcn, exprData_getArgs (data),e  ) );
+
+      t1 = exprNode_createNew (exprNode_getType (e) );
+      
+      checkArgumentList (t1, exprData_getArgs(data), sequencePoint);
 
-      e->ensuresConstraints = constraintList_addList (e->ensuresConstraints,
-                                                getPostConditions(exprData_getFcn (data), exprData_getArgs (data),e  ) );      
+      
+      mergeResolve (e, t1, fcn);
+      
       //      e->constraints = constraintList_add (e->constraints, constraint_create (e,exprNode_undefined, GT,  CALLSAFE ) );
       break;
       
@@ -932,7 +968,11 @@ bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  filel
 
   e->requiresConstraints =  constraintList_preserveOrig ( e->requiresConstraints);
   e->ensuresConstraints  =  constraintList_preserveOrig ( e->ensuresConstraints);
-  DPRINTF((message ("ensures constraint for %s are %s", exprNode_unparse(e), constraintList_print(e->ensuresConstraints) ) ));
+  e->requiresConstraints = constraintList_addGeneratingExpr ( e->requiresConstraints, e);
+
+  e->ensuresConstraints  = constraintList_addGeneratingExpr ( e->ensuresConstraints, e);
+
+  DPRINTF((message ("ensures constraint for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints) ) ));
   
   return handledExprNode; 
 }
@@ -940,7 +980,7 @@ bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  filel
 
 constraintList exprNode_traversTrueEnsuresConstraints (exprNode e)
 {
-  //  exprNode t1, t2;
+  exprNode t1, t2;
 
   bool handledExprNode;
   //  char * mes;
@@ -960,6 +1000,10 @@ constraintList exprNode_traversTrueEnsuresConstraints (exprNode e)
   
   switch (e->kind)
     {
+    case XPR_WHILEPRED:
+      t1 = exprData_getSingle (data);
+      ret = constraintList_addList ( ret,exprNode_traversTrueEnsuresConstraints (t1) );
+      break;
       
     case XPR_FETCH:
       
@@ -1064,11 +1108,141 @@ constraintList exprNode_traversTrueEnsuresConstraints (exprNode e)
   return ret;
 }
 
+constraintList exprNode_traversFalseEnsuresConstraints (exprNode e)
+{
+   exprNode t1, t2;
+
+  bool handledExprNode;
+  //  char * mes;
+  exprData data;
+  constraintList ret;
+
+   if (exprNode_handleError (e))
+     {
+       ret = constraintList_new();
+       return ret;
+     }
+  ret = constraintList_copy (e->falseEnsuresConstraints );
+   
+   handledExprNode = TRUE;
+   
+  data = e->edata;
+  
+  switch (e->kind)
+    {
+   case XPR_WHILEPRED:
+      t1 = exprData_getSingle (data);
+      ret = constraintList_addList ( ret,exprNode_traversFalseEnsuresConstraints (t1) );
+      break;
+      
+    case XPR_FETCH:
+      
+      ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getPairA (data) ) );
+        
+      ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getPairB (data) ) );
+      break;
+    case XPR_PREOP:
+          
+      ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getUopNode (data) ) );
+      break;
+      
+    case XPR_PARENS: 
+      ret = constraintList_addList (ret, exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getUopNode (data) ) );
+      break;
+    case XPR_ASSIGN:
+        ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getOpA (data) ) );
+        
+       ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getOpB (data) ) );
+       break;
+    case XPR_OP:
+       ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getOpA (data) ) );
+        
+       ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getOpB (data) ) );
+       break;
+    case XPR_SIZEOFT:
+      
+      //      ctype_unparse (qtype_getType (exprData_getType (data) ) );
+      
+      break;
+      
+    case XPR_SIZEOF:
+          
+       ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                    (exprData_getSingle (data) ) );
+       break;
+      
+    case XPR_CALL:
+      ret = constraintList_addList (ret,
+                                    exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getFcn (data) ) );
+      /*@i11*/      //   exprNodeList_unparse (exprData_getArgs (data) );
+         break;
+      
+    case XPR_RETURN:
+      ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getSingle (data) ) );
+      break;
+  
+    case XPR_NULLRETURN:
+      //      cstring_makeLiteral ("return");;
+      break;
+            
+    case XPR_FACCESS:
+          ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getFieldNode (data) ) );
+       //exprData_getFieldName (data) ;
+      break;
+   
+    case XPR_ARROW:
+        ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getFieldNode (data) ) );
+       //      exprData_getFieldName (data);
+      break;
+   
+    case XPR_STRINGLITERAL:
+      //      cstring_copy (exprData_getLiteral (data));
+      break;
+      
+    case XPR_NUMLIT:
+      //      cstring_copy (exprData_getLiteral (data));
+      break;
+    case XPR_POSTOP:
+
+           ret = constraintList_addList (ret,
+                                   exprNode_traversFalseEnsuresConstraints
+                                   (exprData_getUopNode (data) ) );
+          break;
+    default:
+      break;
+    }
+
+  return ret;
+}
+
 
 /* walk down the tree and get all requires Constraints in each subexpression*/
 constraintList exprNode_traversRequiresConstraints (exprNode e)
 {
-  //  exprNode t1, t2;
+  exprNode t1, t2;
 
   bool handledExprNode;
   //  char * mes;
@@ -1088,6 +1262,10 @@ constraintList exprNode_traversRequiresConstraints (exprNode e)
   
   switch (e->kind)
     {
+   case XPR_WHILEPRED:
+      t1 = exprData_getSingle (data);
+      ret = constraintList_addList ( ret,exprNode_traversRequiresConstraints (t1) );
+      break;
       
     case XPR_FETCH:
       
@@ -1196,7 +1374,7 @@ constraintList exprNode_traversRequiresConstraints (exprNode e)
 /* walk down the tree and get all Ensures Constraints in each subexpression*/
 constraintList exprNode_traversEnsuresConstraints (exprNode e)
 {
-  //  exprNode t1, t2;
+  exprNode t1, t2;
 
   bool handledExprNode;
   //  char * mes;
@@ -1227,6 +1405,10 @@ constraintList exprNode_traversEnsuresConstraints (exprNode e)
   
   switch (e->kind)
     {
+   case XPR_WHILEPRED:
+      t1 = exprData_getSingle (data);
+      ret = constraintList_addList ( ret,exprNode_traversEnsuresConstraints (t1) );
+      break;
       
     case XPR_FETCH:
       
index baa03af96ae8542d4fdf760436739dceddf6482a..26dbaa3bc977fda29bf85a76f9b18ded3cc7a02b 100644 (file)
@@ -257,6 +257,19 @@ constraintList constraintList_preserveOrig (constraintList c)
   return c;
 }
 
+constraintList constraintList_addGeneratingExpr (constraintList c, exprNode e)
+{
+  DPRINTF ((message ("entering constraintList_addGeneratingExpr for %s ", exprNode_unparse(e) ) ));
+  
+  constraintList_elements (c, el)
+  {
+    DPRINTF ((message ("setting generatingExpr for %s to %s", constraint_print(el), exprNode_unparse(e) )  ));
+    el = constraint_addGeneratingExpr (el, e);
+  }
+  end_constraintList_elements;
+  return c;
+}
+
 constraintList constraintList_doFixResult (constraintList postconditions, exprNode fcnCall)
 {
   constraintList ret;
index 033b80525d7244e3aac04f4d3f4a1340af48f03f..36dd667ba9bad0393cfc6e1a3e15c8f8a6ba7037 100644 (file)
@@ -79,6 +79,28 @@ constraintList constraintList_mergeEnsures (constraintList list1, constraintList
 /*   //return ret; */
 /* } */
 
+void checkArgumentList (exprNode temp, exprNodeList arglist, fileloc sequencePoint)
+{
+  temp->requiresConstraints = constraintList_new();
+  temp->ensuresConstraints = constraintList_new();
+  temp->trueEnsuresConstraints = constraintList_new();
+  temp->falseEnsuresConstraints = constraintList_new();
+  
+  exprNodeList_elements (arglist, el)
+    {
+      exprNode_exprTraverse (el, FALSE, FALSE, sequencePoint);
+      el->requiresConstraints = exprNode_traversRequiresConstraints(el);
+      el->ensuresConstraints  = exprNode_traversEnsuresConstraints(el);
+
+      temp->requiresConstraints = constraintList_addList(temp->requiresConstraints,
+                                                           el->requiresConstraints);
+      
+      temp->ensuresConstraints = constraintList_addList(temp->ensuresConstraints,
+                                                          el->ensuresConstraints);
+    }
+  end_exprNodeList_elements;
+  
+}
 
 constraintList checkCall (exprNode fcn, exprNodeList arglist)
 {
@@ -160,7 +182,7 @@ void mergeResolve (exprNode parent, exprNode child1, exprNode child2)
 
    llassert(!exprNode_isError (child1)  && ! exprNode_isError(child2) );
    
-  DPRINTF( (message ("Child constraints are %s %s and %s %s",
+   DPRINTF( (message ("Child constraints are %s %s and %s %s",
                     constraintList_print (child1->requiresConstraints),
                     constraintList_print (child1->ensuresConstraints),
                     constraintList_print (child2->requiresConstraints),
@@ -404,9 +426,12 @@ bool arithType_canResolve (arithType ar1, arithType ar2)
 bool constraint_isAlwaysTrue (constraint c)
 {
   constraintExpr l, r;
+  bool lHasConstant, rHasConstant;
+  int lConstant, rConstant;
+  
   l = c->lexpr;
   r = c->expr;
-
+    
   if (constraintExpr_canGetValue(l) && constraintExpr_canGetValue(r) )
     {
       int cmp;
@@ -425,15 +450,68 @@ bool constraint_isAlwaysTrue (constraint c)
          return (cmp < 0);
 
        default:
-         llassert(FALSE);
+         BADEXIT;
+         break;
+       }
+    }
+
+  if (constraintExpr_similar (l,r) )
+    {
+      switch (c->ar)
+       {
+       case EQ:
+       case GTE:
+       case LTE:
+         return TRUE;
+         
+       case GT:
+       case LT:
+         break;
+       default:
+         BADEXIT;
          break;
        }
     }
+
+  l = constraintExpr_copy (c->lexpr);
+  r = constraintExpr_copy (c->expr);
+
+  //  l = constraintExpr_propagateConstants (l, &lHasConstant, &lConstant);
+  r = constraintExpr_propagateConstants (r, &rHasConstant, &rConstant);
+
+  if (constraintExpr_similar (l,r) )
+    {
+      DPRINTF(( message("constraint_IsAlwaysTrue: after removing constants  %s and %s are similar", constraintExpr_unparse(l), constraintExpr_unparse(r) ) ));
+      if (rHasConstant)
+       {
+         DPRINTF(( message("constraint_IsAlwaysTrue: rconstant is  %d", rConstant ) ));
+         switch (c->ar)
+           {
+           case EQ:
+             return (rConstant == 0);
+           case LT:
+             return (rConstant > 0);
+           case LTE:
+             return (rConstant >= 0);
+           case GTE:
+             return (rConstant <= 0);
+           case GT:
+             return (rConstant < 0);
+             
+           default:
+             BADEXIT;
+             break;
+           }
+       }
+      
+    }  
   else
     {
+      DPRINTF(( message("Constraint %s is not always true", constraint_print(c) ) ));
       return FALSE;
     }
-      BADEXIT;
+  
+  BADEXIT;
 }
 
 bool rangeCheck (arithType ar1, constraintExpr expr1, arithType ar2, constraintExpr expr2)
index 07765e239176a6f1cd379c25ada8a1cf4be3cb16..44eb80b8969f62f17fb2ee6ddf5e47aa5ab58eee 100644 (file)
@@ -897,9 +897,9 @@ void exprNode_checkFunctionBody (exprNode body)
 void exprNode_checkFunction (/*@unused@*/ uentry ue, /*@only@*/ exprNode body)
 {
   constraintList c, t;
+ constraintList c2, fix;
 
-
-  //  return;
+ //  return;
   
   exprNode_generateConstraints (body);
   
@@ -916,9 +916,16 @@ void exprNode_checkFunction (/*@unused@*/ uentry ue, /*@only@*/ exprNode body)
        
        t = reflectChanges (body->requiresConstraints, constraintList_copy (c) );
        body->requiresConstraints = constraintList_copy (t);
+
+       c2  =  constraintList_copy (c);
+       fix =  constraintList_makeFixedArrayConstraints (body->uses);
+       c2  =  reflectChanges (c2, constraintList_copy(fix) );
+
+       t = reflectChanges (body->requiresConstraints, constraintList_copy (c2) );
+       body->requiresConstraints = constraintList_copy (t);
        
        DPRINTF ( (message ("The body has the required cosntraints: %s", constraintList_printDetailed (t) ) ) );
-   t = constraintList_mergeEnsures (c, body->ensuresConstraints);
+       t = constraintList_mergeEnsures (c, body->ensuresConstraints);
 
    body->ensuresConstraints = constraintList_copy (t);
    
diff --git a/src/exprDataQuite.i b/src/exprDataQuite.i
new file mode 100644 (file)
index 0000000..affecfd
--- /dev/null
@@ -0,0 +1,69 @@
+
+/*this is a fake function so that compilers will not generate warning about
+functions that are defined but not used
+
+I should probablymake an exprData api instead but this a simpler and it
+restricts access to exprData
+*/
+
+/*@ignore@*/
+
+static void fakeQuite1 (int x)
+{
+void *f;
+
+x = 1;
+
+x = x +6;
+
+llfatalbug ("fake function fakeQuite1 called");
+f = fakeQuite1;
+
+f = exprData_freeShallow;
+f = exprData_free;
+f =  exprData_getInitNode;
+f =  exprData_getInitId;
+f =  exprData_getIterSname;
+f =  exprData_getIterAlist;
+f =  exprData_getIterBody;
+f =  exprData_getIterEname;
+f =  exprData_getIterCallIter;
+f =  exprData_getIterCallArgs;
+f =  exprData_getCastNode;
+f =  exprData_getCastTok;
+f =  exprData_getCastType;
+f =  exprData_getId;
+f =  exprData_getTok;
+f =  exprData_getOffsetType;
+f =  exprData_getOffsetName;
+f =  exprData_makeOp;
+f =  exprData_makeUop;
+f =  exprData_makeSingle;
+f =  exprData_makeTok;
+f =  exprData_makeIter;
+f =  exprData_makeCall;
+f =  exprData_makeIterCall;
+f =  exprData_makeField;
+f =  exprData_makeOffsetof;
+f =  exprData_makeSizeofType;
+f =  exprData_makeCast;
+f =  exprData_makeInit;
+f =  exprData_makeCond;
+f =  exprData_makeFor;
+f =  exprData_getPairA;
+f =  exprData_getPairB;
+f =  exprData_getFcn;
+f =  exprData_getArgs;
+f =  exprData_getTriplePred;
+f =  exprData_getTripleInit;
+f =  exprData_getTripleTrue;
+f =  exprData_getTripleTest;
+f =  exprData_getTripleFalse;
+f =  exprData_getTripleInc;
+f =  exprData_getFieldNode;
+f =  exprData_getFieldName;
+f =  exprData_getUopTok;
+f =  exprData_getLiteral;
+f =  exprData_getType;
+}
+/*@end@*/
index d495f585b24932a0399183eccc9c2eb4f8d07cbe..349965a111042cce88b8d683666b178f0926e23e 100644 (file)
@@ -222,13 +222,6 @@ static void exprNode_resetSref (/*@notnull@*/ exprNode e)
   e->sref = defref;
 }
 
-exprNode exprNode_fakeCopy (exprNode e)
-{
-  /*@-temptrans@*/ /*@-retalias@*/
-  return e;
-  /*@=temptrans@*/ /*@=retalias@*/
-}
-
 static bool isFlagKey (char key)
 {
   return (key == '-' || key == '+' || key == ' ' || key == '#');
@@ -9994,3 +9987,20 @@ fileloc exprNode_getNextSequencePoint (exprNode e)
  }
 
 
+/*drl added
+ */
+exprNode exprNode_fakeCopy (exprNode e)
+{
+  /*@-temptrans@*/ /*@-retalias@*/
+  return e;
+  /*@=temptrans@*/ /*@=retalias@*/
+}
+
+exprNode exprNode_createNew(ctype c)
+{
+  exprNode ret;
+
+  ret = exprNode_createPlain (c);
+
+  return ret;
+}
index f9c3d6760872ea2685cc7f7f9552f5dac922da43..11dcee2f89d51cb64b52e483f51dcaecf1881bcc 100644 (file)
@@ -1584,7 +1584,7 @@ static const short yycheck[] = {    23,
     -1,    -1,   107,   108,    -1,    -1,    -1,    -1,    -1,   114
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/lib/bison.simple"
+#line 3 "/usr/share/misc/bison.simple"
 /* This file comes from bison-1.28.  */
 
 /* Skeleton output parser for bison,
@@ -1798,7 +1798,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #endif
 #endif
 \f
-#line 217 "/usr/lib/bison.simple"
+#line 217 "/usr/share/misc/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -3639,7 +3639,7 @@ case 404:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/lib/bison.simple"
+#line 543 "/usr/share/misc/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
index 0b3c6235bfa13b7f646ac5a1452dcd26791e162e..aeff742c6a32463f6706349142c7fc2392e04f9b 100644 (file)
@@ -1538,7 +1538,7 @@ static const short yycheck[] = {    23,
     -1,    -1,   107,   108,    -1,    -1,    -1,    -1,    -1,   114
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/lib/bison.simple"
+#line 3 "/usr/share/misc/bison.simple"
 /* This file comes from bison-1.28.  */
 
 /* Skeleton output parser for bison,
@@ -1752,7 +1752,7 @@ __yy_memcpy (char *to, char *from, unsigned int count)
 #endif
 #endif
 \f
-#line 217 "/usr/lib/bison.simple"
+#line 217 "/usr/share/misc/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -3593,7 +3593,7 @@ case 404:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/lib/bison.simple"
+#line 543 "/usr/share/misc/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
diff --git a/src/maketags b/src/maketags
new file mode 100755 (executable)
index 0000000..67fe72a
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+etags *.y Headers/* *.c *.h *.l  *.i
index ad1c60a3935b86f151558d80794991e311c89bd4..c8d8a89a4684816ac8f6297ca470cacae8105b70 100644 (file)
@@ -2051,37 +2051,65 @@ constraintExpr sRef_fixConstraintParam ( sRef s, exprNodeList args)
   if (sRef_isInvalid (s))
     llfatalbug(("Invalid sRef"));
 
-  if (s->kind == SK_RESULT)
+  switch (s->kind)
     {
-      ce = constraintExpr_makeTermsRef (s);
-      return ce;
+    case SK_RESULT:
+      {
+       ce = constraintExpr_makeTermsRef (s);
+       return ce;
+      }
+    case SK_FIELD:
+      {
+       sRef temp;
+       
+       temp = (sRef_makeField (sRef_fixBaseParam (s->info->field->rec, args),
+                             s->info->field->field));
+       ce = constraintExpr_makeTermsRef (temp);
+       return ce;
     }
-  if (s->kind != SK_PARAM)
-    {
-      if (s->kind != SK_CVAR)
+    case SK_PTR:
+      {
+       sRef temp;
+       temp = (sRef_makePointer (sRef_fixBaseParam (s->info->ref, args)));
+       ce = constraintExpr_makeTermsRef (temp);
+       return ce;
+      }
+
+    case SK_ARRAYFETCH:
+       {
+       sRef temp;
+       temp = sRef_fixBaseParam (s, args);
+       ce = constraintExpr_makeTermsRef (temp);
+       return ce;
+      }
+    case SK_CVAR:
+       ce = constraintExpr_makeTermsRef (s);
+       return ce;
+    case SK_PARAM:
+      if (exprNodeList_size (args) > s->info->paramno)
        {
-         llcontbug ((message("Trying to do fixConstraintParam on nonparam, nonglobal: %s for function with arguments %s", sRef_unparse (s), exprNodeList_unparse(args) ) ));
+         exprNode e = exprNodeList_nth (args, s->info->paramno);
+         
+         if (exprNode_isError (e))
+           {
+             llassert (FALSE);
+           }
+         
+         ce = constraintExpr_makeExprNode (e);
+       }
+      else
+       {
+         llassert(FALSE);
        }
+      return ce;
+    default:
+      llcontbug ((message("Trying to do fixConstraintParam on nonparam, nonglobal: %s for function with arguments %s", sRef_unparse (s), exprNodeList_unparse(args) ) ));
       ce = constraintExpr_makeTermsRef (s);
       return ce;
     }
+
   
-  if (exprNodeList_size (args) > s->info->paramno)
-    {
-      exprNode e = exprNodeList_nth (args, s->info->paramno);
-      
-      if (exprNode_isError (e))
-       {
-         llassert (FALSE);
-       }
-      
-      ce = constraintExpr_makeExprNode (e);
-    }
-  else
-    {
-      llassert(FALSE);
-    }
-  return ce;
+
 }
 
 /*@exposed@*/ sRef
This page took 0.512596 seconds and 5 git commands to generate.