wip II
[sdk] / compiler / libec / src / lexer.ec
index 7727932..f81497f 100644 (file)
@@ -283,91 +283,82 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 164
-#define YY_END_OF_BUFFER 165
-static yyconst short int yy_accept[737] =
+#define YY_NUM_RULES 166
+#define YY_END_OF_BUFFER 167
+static yyconst short int yy_accept[661] =
     {   0,
-      104,  104,  165,  163,  162,  161,  160,  147,  163,    1,
-      159,  153,  146,  163,  141,  142,  151,  150,  138,  149,
-      145,  152,  107,  107,  139,  135,  154,  140,  155,  158,
-      104,  104,  143,  144,  156,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  136,  157,  137,  148,  134,    0,  112,
-        0,  120,  137,  129,  121,    0,    0,  118,  126,  116,
-      127,  117,  128,    0,  110,    2,    3,  119,  111,  106,
-        0,  107,    0,  107,  104,  144,  136,  143,  125,  131,
-      133,  132,  124,    0,  104,    0,    0,    0,  122,  104,
-
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,   11,  104,  104,  104,  104,
-      104,  104,  104,  104,   19,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  123,  130,
-      108,  113,    0,  110,  110,    0,  111,  106,    0,  109,
-      105,  104,  115,  114,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,   84,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,   17,
-
-       42,  104,  104,  104,  104,   20,  104,  104,  104,   48,
-      104,  104,  104,  104,  104,  104,   41,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,    0,  110,    0,  110,
-        0,  111,  109,  105,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,    4,  104,    6,    7,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-       13,   14,  104,  104,  104,   18,  104,  104,  104,  104,
-      104,   22,  104,   49,  104,  104,  104,  104,  104,  104,
-
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,   21,  104,  104,  104,   35,  104,  104,  104,    0,
-      110,   85,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,    5,
-       44,    8,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,   16,  104,  104,  104,   55,
-       43,  104,  104,  104,  104,  104,   50,  104,   25,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,   33,
-      104,  104,  104,   87,   39,  104,  104,  104,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-       53,   47,  104,  104,   12,   15,  104,   52,   80,   64,
-      104,  104,  104,   76,  104,   51,   24,   26,   28,   29,
-      104,  104,   30,  104,   31,  104,  104,  104,  104,  104,
-      104,  104,   83,  104,  104,   68,   74,  104,  104,  104,
-       54,  104,  104,  104,  104,  104,  104,   62,  104,  104,
-      104,  104,  104,  104,  104,  104,  101,  102,  100,   10,
-      104,  104,  104,  104,   77,  104,  104,   72,  104,  104,
-      104,  104,   32,  104,   46,  104,  104,  104,  104,  104,
-      104,   63,  104,  104,  104,   86,  104,  104,   71,  104,
-
-      104,  104,  104,  104,  104,    9,  104,  104,  104,  104,
-      104,   40,   23,  104,   98,  104,  104,   34,   36,  104,
-      104,  104,  104,  104,  104,  104,  104,   69,  104,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,   66,   67,
-      104,   99,  104,  104,   45,  104,   90,  104,  104,  104,
-      104,   61,   73,   27,  104,   38,  104,   79,   96,  104,
-      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
-      104,    0,  104,  104,   70,  104,   82,  104,  104,   93,
-      104,  104,  104,  104,  104,  104,  104,    0,    0,  104,
-      104,   65,    0,  104,   75,   37,  104,  104,  104,  104,
-
-      104,   89,  104,   88,   78,    0,  104,  104,  104,   81,
-      104,  104,  104,  104,  103,  104,    0,    0,    0,    0,
-        0,    0,    0,  104,  104,  104,  104,   91,  104,   97,
-      104,    0,    0,    0,    0,   60,    0,    0,    0,    0,
-        0,  104,  104,  104,  104,  104,  104,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      104,   57,  104,  104,  104,  104,    0,    0,    0,    0,
-        0,    0,    0,   59,    0,    0,    0,    0,  104,   56,
-      104,  104,   95,    0,    0,    0,    0,    0,    0,    0,
-        0,  104,  104,   92,    0,    0,    0,  104,  104,  104,
-
-      104,  104,  104,  104,   94,  104,  104,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0
+      106,  106,  167,  165,  164,  163,  162,  149,  165,    1,
+      161,  155,  148,  165,  143,  144,  153,  152,  140,  151,
+      147,  154,  109,  109,  141,  137,  156,  142,  157,  160,
+      106,  106,  145,  146,  158,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  138,  159,  139,  150,  136,    0,  114,
+        0,  122,  139,  131,  123,    0,    0,  120,  128,  118,
+      129,  119,  130,    0,  112,    2,    3,  121,  113,  108,
+        0,  109,    0,  109,  106,  146,  138,  145,  127,  133,
+      135,  134,  126,    0,  106,    0,    0,    0,  124,  106,
+
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,   11,  106,  106,  106,  106,
+      106,  106,  106,  106,   19,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  125,  132,
+      110,  115,    0,  112,  112,    0,  113,  108,    0,  111,
+      107,  106,  117,  116,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,   86,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,   17,
+
+       44,  106,  106,  106,  106,   20,  106,  106,  106,   50,
+      106,  106,  106,  106,  106,  106,   43,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,    0,  112,    0,  112,
+        0,  113,  111,  107,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,    4,  106,    6,    7,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,   13,   14,  106,  106,  106,   18,  106,  106,  106,
+      106,  106,   22,  106,   51,  106,  106,  106,  106,  106,
+
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,   21,  106,  106,  106,   37,  106,  106,  106,
+        0,  112,  106,   87,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,    5,   46,    8,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,   16,  106,  106,
+      106,   57,   45,  106,  106,  106,  106,  106,   52,  106,
+       25,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,   35,  106,  106,  106,   89,   41,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,   55,   49,  106,  106,   12,   15,  106,
+       54,   82,   66,  106,  106,  106,   78,  106,   53,   24,
+       26,   29,   31,  106,  106,   32,  106,   33,  106,  106,
+      106,  106,  106,  106,  106,  106,   85,  106,  106,   70,
+       76,  106,  106,  106,   56,  106,  106,  106,  106,  106,
+      106,   64,  106,  106,  106,  106,  106,  106,  106,  106,
+      103,  104,  102,   10,  106,  106,  106,  106,   79,  106,
+      106,   74,  106,  106,  106,  106,   34,  106,   48,  106,
+      106,  106,  106,  106,  106,  106,   65,  106,   27,  106,
+
+       88,  106,  106,   73,  106,  106,  106,  106,  106,  106,
+        9,  106,  106,  106,  106,  106,   42,   23,  106,  100,
+      106,  106,   36,   38,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,   71,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,   68,   69,  106,  101,  106,  106,
+       47,  106,   92,  106,  106,  106,  106,  106,   63,   75,
+       28,  106,   40,  106,   81,   98,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,   30,   62,  106,    0,
+      106,  106,   72,  106,   84,  106,  106,   95,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,   67,    0,  106,
+
+       77,   39,  106,  106,  106,  106,  106,   91,  106,   90,
+       80,   61,  106,  106,   83,  106,  106,  106,  106,  105,
+      106,  106,  106,  106,  106,   93,  106,   99,  106,  106,
+      106,  106,  106,  106,  106,  106,   59,  106,  106,  106,
+      106,  106,   58,  106,  106,   97,  106,  106,   94,  106,
+      106,  106,  106,  106,  106,  106,   96,  106,   60,    0
     } ;
 
 static yyconst int yy_ec[256] =
@@ -375,17 +366,17 @@ static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         4,    4,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    5,    6,    7,    8,    9,   10,   11,   12,   13,
-       14,   15,   16,   17,   18,   19,   20,   21,   22,   22,
-       22,   23,   22,   24,   22,   22,   22,   25,   26,   27,
-       28,   29,   30,    1,   31,   31,   31,   31,   32,   33,
-       34,   34,   34,   34,   34,   35,   34,   34,   34,   34,
-       34,   34,   34,   34,   36,   34,   34,   37,   34,   34,
-       38,   39,   40,   41,   42,    1,   43,   44,   45,   46,
-
-       47,   48,   49,   50,   51,   52,   53,   54,   55,   56,
-       57,   58,   34,   59,   60,   61,   62,   63,   64,   65,
-       66,   67,   68,   69,   70,   71,    1,    1,    1,    1,
+        1,    4,    5,    6,    7,    8,    9,   10,   11,   12,
+       13,   14,   15,   16,   17,   18,   19,   20,   21,   21,
+       21,   22,   21,   23,   21,   21,   21,   24,   25,   26,
+       27,   28,   29,    1,   30,   30,   30,   30,   31,   32,
+       33,   33,   33,   33,   33,   34,   33,   33,   33,   33,
+       33,   33,   33,   33,   35,   33,   33,   36,   33,   33,
+       37,   38,   39,   40,   41,    1,   42,   43,   44,   45,
+
+       46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
+       56,   57,   33,   58,   59,   60,   61,   62,   63,   64,
+       65,   66,   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,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -402,492 +393,425 @@ static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[72] =
+static yyconst int yy_meta[71] =
     {   0,
-        1,    1,    1,    1,    2,    1,    3,    1,    1,    1,
-        4,    5,    6,    7,    1,    1,    2,    1,    1,    1,
-        8,    8,    8,    8,    4,    1,    1,    1,    1,    1,
-        9,    9,    9,   10,   10,   10,   10,    1,    1,    1,
-        1,   10,    9,    9,    9,    9,    9,    9,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-       10,   10,   10,   10,   10,   10,   10,    1,    1,    1,
-        1
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+        3,    1,    4,    1,    1,    1,    1,    1,    1,    5,
+        5,    5,    5,    2,    1,    1,    1,    1,    1,    6,
+        6,    6,    7,    7,    7,    7,    1,    1,    1,    1,
+        7,    6,    6,    6,    6,    6,    6,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    1,    1,    1,    1
     } ;
 
-static yyconst short int yy_base[763] =
+static yyconst short int yy_base[669] =
     {   0,
-        0,    0,  329, 2592, 2592, 2592, 2592,  290,   65, 2592,
-     2592,   45,   64,  275, 2592, 2592,  278,   60, 2592,   61,
-       59,   71,   86,  133,   68, 2592,   75,  258,   66, 2592,
-       73,  104, 2592, 2592,  257,  102,   76,  101,  120,  139,
+        0,    0,  216, 2195, 2195, 2195, 2195,  178,   65, 2195,
+     2195,   45,   64,  158, 2195, 2195,  160,   60, 2195,   61,
+       59,   71,   86,  133,   68, 2195,   75,  156,   66, 2195,
+       73,  104, 2195, 2195,  150,  102,   76,  101,  120,  139,
       136,  148,  147,  160,  109,  164,  117,  156,  187,  189,
-      202,  199,  211, 2592,   68, 2592, 2592, 2592,  107, 2592,
-      276, 2592, 2592, 2592, 2592,  179,  127, 2592, 2592, 2592,
-     2592, 2592, 2592,  228,  241, 2592, 2592, 2592,  245,  281,
-      207,  236,    0,    0,    0, 2592, 2592, 2592,  214, 2592,
-     2592, 2592,  204,  192,  208,  181,  202,  158, 2592,  333,
+      202,  199,  211, 2195,   68, 2195, 2195, 2195,  107, 2195,
+      139, 2195, 2195, 2195, 2195,  179,  113, 2195, 2195, 2195,
+     2195, 2195, 2195,  122,  241, 2195, 2195, 2195,  245,  281,
+      207,  236,    0,    0,    0, 2195, 2195, 2195,  111, 2195,
+     2195, 2195,  107,  105,  208,   99,  202,   80, 2195,  333,
 
       210,  235,  259,  215,  232,  271,  272,  234,  290,  296,
       297,  298,  299,  300,  301,  320,  326,  327,  338,  316,
       331,  346,  356,  358,  362,  379,  384,  386,  387,  389,
       390,  391,  395,  402,  396,  399,  411,  407,  415,  422,
-      424,  430,  451,  454,  456,  457,  458,  459, 2592, 2592,
-     2592, 2592,  469, 2592,  499,  478, 2592,  462,  504,  515,
-      505,    0, 2592, 2592,    0,  484,  492,  518,  524,  493,
-      531,  541,  540,  549,  551,  557,  559,  561,  567,  461,
-      568,  569,  570,  572,  574,  578,  579,  585,  589,  594,
-      605,  595,  610,  615,  616,  618,  621,  622,  633,  639,
-
-      640,  641,  642,  649,  659,  661,  664,  666,  667,  669,
-      668,  670,  671,  672,  677,  676,  692,  693,  694,  695,
-      696,  701,  702,  705,  711,  718,  722,  723,  724,  726,
-      729,  728,  730,  734,  733,  750,  741,  770,  750, 2592,
-      774,  778, 2592,  752,    0,  796,  797,  798,  804,  806,
-      805,  809,  808,  814,  816,  817,  824,  825,  826,  832,
-      833,  837,  835,  852,  853,  856,  860,  861,  862,  863,
-      878,  879,  882,  880,  883,  884,  885,  886,  887,  890,
-      888,  891,  906,  907,  908,  909,  914,  916,  918,  924,
-      925,  927,  937,  942,  945,  943,  947,  950,  953,  955,
-
-      966,  968,  971,  970,  976,  974,  978,  981,  991,  997,
-      993, 1000, 1001, 1009, 1018, 1019, 1020, 1021, 1022, 1027,
-     1031, 1045, 1048, 1049, 1050, 1051, 1052, 1057, 1061, 1067,
-     1072, 1073, 1077, 1083, 1085, 1088, 1089, 1094, 1090, 1098,
-     1106, 1107, 1110, 1113, 1114, 1115, 1116, 1125, 1135, 1136,
-     1132, 1138, 1140, 1142, 1148, 1144, 1147, 1153, 1160, 1163,
-     1164, 1169, 1170, 1175, 1181, 1186, 1188, 1192, 1191, 1193,
-     1194, 1199, 1203, 1210, 1204, 1211, 1212, 1221, 1227, 1230,
-     1234, 1238, 1245, 1239, 1247, 1255, 1260, 1262, 1266, 1267,
-     1273, 1268, 1275, 1278, 1277, 1283, 1284, 1288, 1293, 1296,
-
-     1294, 1301, 1314, 1304, 1321, 1324, 1323, 1326, 1332, 1333,
-     1336, 1342, 1348, 1352, 1353, 1357, 1360, 1361, 1363, 1364,
-     1365, 1370, 1376, 1381, 1382, 1385, 1386, 1387, 1388, 1389,
-     1391, 1393, 1408, 1409, 1411, 1413, 1414, 1415, 1417, 1416,
-     1419, 1421, 1424, 1432, 1436, 1437, 1441, 1442, 1447, 1449,
-     1457, 1464, 1466, 1467, 1468, 1469, 1472, 1470, 1473, 1477,
-     1479, 1474, 1492, 1494, 1503, 1507, 1518, 1519, 1520, 1522,
-     1523, 1526, 1527, 1530, 1531, 1535, 1546, 1548, 1551, 1552,
-     1553, 1554, 1555, 1556, 1558, 1559, 1563, 1575, 1578, 1579,
-     1582, 1583, 1584, 1586, 1599, 1605, 1607, 1610, 1611, 1620,
-
-     1616, 1627, 1629, 1631, 1632, 1633, 1637, 1635, 1638, 1653,
-     1644, 1655, 1657, 1659, 1660, 1661, 1663, 1665, 1670, 1681,
-     1682, 1687, 1689, 1691, 1693, 1694, 1697, 1699, 1700, 1702,
-     1706, 1719, 1721, 1712, 1725, 1727, 1715, 1731, 1734, 1740,
-     1743, 1746, 1750, 1755, 1758, 1766, 1759, 1767, 1768, 1774,
-     1771, 1775, 1778, 1783, 1786, 1787, 1790, 1791, 1793, 1794,
-     1796, 1798, 1799, 1811, 1814, 1815, 1822, 1823, 1824, 1841,
-     1830,  174, 1826, 1842, 1832, 1850, 1851, 1852, 1860, 1869,
-     1870, 1871, 1875, 1876, 1877, 1878, 1879,  112,  171, 1887,
-     1882, 2592,  164, 1900, 1880, 1888, 1898, 1906, 1907, 1909,
-
-     1910, 1926, 1930, 1932, 1933, 1496, 1943, 1935, 1936, 1938,
-     1951, 1953, 1958, 1956, 1960, 1961, 1975, 1970,  127, 1986,
-     1991,  130,  111, 1984, 1986, 1990, 1991, 1995, 1996, 2002,
-     2006, 2018, 2019, 2020, 2033, 2592, 2038, 2043, 2048, 2053,
-     2059, 2015, 2019, 2058, 2060, 2064, 2066, 2073, 2079, 2081,
-     2083, 2087, 2089, 2094, 2100, 2107, 2117,  105, 2122, 2124,
-     2098, 2091, 2115, 2117, 2121, 2119, 2138, 2142, 2143, 2144,
-     2148, 2149, 2163, 2592, 2170, 2165, 2176, 2181, 2177, 2139,
-     2180, 2181, 2185, 2194, 2195, 2199, 2209, 2210, 2214, 2215,
-     2228, 2192, 2196, 2214, 2235, 2239, 2241, 2223, 2236, 2225,
-
-     2240, 2243, 2246, 2248, 2249, 2251, 2272,  239,   93, 2265,
-     2286, 2291,   63, 2293, 2304, 2297, 2299, 2310, 2314, 2592,
-     2320, 2315, 2325, 2330, 2331, 2335, 2336, 2341, 2346, 2351,
-     2352, 2357, 2359, 2367, 2372, 2592, 2389, 2399, 2406, 2409,
-     2410, 2413, 2415, 2419, 2428, 2437, 2446, 2455, 2464, 2473,
-     2482, 2491, 2500, 2509, 2518, 2527, 2536, 2545, 2554, 2563,
-     2572, 2581
+      424,  430,  451,  454,  456,  457,  458,  459, 2195, 2195,
+     2195, 2195,  469, 2195,  499,  478, 2195,  462,  504,  515,
+      505,    0, 2195, 2195,    0,  518,  492,  519,  524,  493,
+      531,  541,  549,  550,  557,  484,  559,  566,  569,  461,
+      570,  572,  574,  578,  579,  581,  582,  594,  597,  606,
+      607,  609,  613,  615,  618,  619,  622,  637,  643,  598,
+
+      641,  646,  650,  652,  662,  656,  665,  667,  668,  674,
+      671,  672,  677,  689,  680,  683,  693,  695,  699,  710,
+      698,  708,  711,  714,  717,  718,  721,  726,  727,  733,
+      736,  738,  739,  749,  755,  757,  772,  780,  796, 2195,
+      784,  800, 2195,  735,    0,  761,  805,  814,  766,  815,
+      818,  820,  825,  821,  826,  830,  836,  827,  833,  838,
+      842,  846,  849,  853,  773,  861,  868,  870,  873,  877,
+      888,  890,  893,  895,  892,  894,  896,  897,  898,  900,
+      905,  901,  917,  918,  920,  921,  924,  926,  936,  937,
+      942,  939,  943,  946,  949,  955,  961,  962,  964,  965,
+
+      967,  970,  980,  977,  985,  990,  986,  992,  993,  996,
+      998, 1003, 1005, 1014, 1027, 1021, 1029, 1031, 1034, 1033,
+     1039, 1064, 1040, 1053, 1042, 1044, 1046, 1057, 1068, 1079,
+     1083, 1085, 1089, 1091, 1094, 1095, 1100, 1096, 1102, 1112,
+     1104, 1113, 1119, 1120, 1121, 1124, 1129, 1140, 1145, 1146,
+     1148, 1149, 1151, 1153, 1155, 1157, 1161, 1164, 1168, 1173,
+     1180, 1181, 1183, 1190, 1192, 1199, 1201, 1203, 1209, 1207,
+     1208, 1211, 1212, 1214, 1220, 1224, 1227, 1229, 1230, 1231,
+     1236, 1240, 1251, 1257, 1259, 1262, 1264, 1266, 1270, 1268,
+     1279, 1281, 1283, 1286, 1291, 1292, 1290, 1298, 1303, 1309,
+
+     1307, 1313, 1316, 1314, 1318, 1326, 1331, 1320, 1338, 1342,
+     1343, 1344, 1348, 1355, 1359, 1360, 1370, 1372, 1375, 1379,
+     1381, 1382, 1385, 1388, 1390, 1391, 1394, 1400, 1401, 1403,
+     1407, 1409, 1410, 1411, 1413, 1418, 1419, 1428, 1430, 1431,
+     1434, 1437, 1435, 1438, 1439, 1443, 1446, 1447, 1450, 1455,
+     1456, 1465, 1474, 1482, 1483, 1484, 1485, 1486, 1491, 1487,
+     1492, 1493, 1494, 1495, 1502, 1503, 1511, 1519, 1522, 1526,
+     1521, 1530, 1539, 1541, 1542, 1545, 1546, 1547, 1549, 1550,
+     1551, 1552, 1554, 1569, 1570, 1571, 1572, 1573, 1575, 1577,
+     1578, 1595, 1582, 1597, 1598, 1600, 1606, 1601, 1610, 1602,
+
+     1603, 1622, 1625, 1629, 1630, 1638, 1646, 1647, 1648, 1653,
+     1649, 1654, 1655, 1656, 1658, 1666, 1659, 1675, 1677, 1678,
+     1682, 1684, 1686, 1693, 1694, 1703, 1704, 1709, 1710, 1712,
+     1714, 1713, 1715, 1719, 1721, 1722, 1737, 1738, 1739, 1741,
+     1742, 1747, 1748, 1759, 1760, 1765, 1766, 1768, 1772, 1775,
+     1776, 1777, 1784, 1785, 1793, 1794, 1809, 1796, 1800, 1803,
+     1804, 1812, 1819, 1821, 1822, 1824, 1825, 1828, 1830, 1831,
+     1837, 1840, 1847, 1848, 1849, 1855, 1853, 1857, 1858,   92,
+     1860, 1868, 1856, 1878, 1879, 1883, 1884, 1886, 1896, 1901,
+     1902, 1903, 1904, 1906, 1905, 1911, 1908, 2195,   63, 1914,
+
+     1907, 1913, 1923, 1933, 1934, 1936, 1951, 1953, 1956, 1957,
+     1958, 1960, 1961, 1962, 1963, 1964, 1968, 1979, 1984, 1985,
+     1987, 1988, 1989, 1990, 2000, 2006, 2007, 2008, 2009, 2012,
+     2013, 2015, 2017, 2018, 2019, 2034, 2028, 2036, 2038, 2043,
+     2040, 2045, 2049, 2061, 2062, 2066, 2068, 2069, 2071, 2073,
+     2074, 2077, 2078, 2090, 2096, 2098, 2097, 2101, 2102, 2195,
+     2161, 2168, 2174, 2177, 2178, 2181, 2183, 2187
     } ;
 
-static yyconst short int yy_def[763] =
+static yyconst short int yy_def[669] =
     {   0,
-      736,    1,  736,  736,  736,  736,  736,  736,  737,  736,
-      736,  736,  736,  738,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      739,  739,  736,  736,  736,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  736,  736,  736,  736,  736,  737,  736,
-      737,  736,  736,  736,  736,  738,  738,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  740,   24,  741,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  739,  736,  737,  738,  736,  739,
-
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      740,  742,  736,  736,  743,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  736,  736,  736,  736,
-      736,  736,  736,  736,  742,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  736,
-      736,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  744,  739,  739,  739,  739,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  739,  736,  736,  739,
-      739,  736,  744,  739,  739,  739,  739,  739,  739,  739,
-
-      739,  739,  739,  739,  739,  745,  739,  739,  739,  739,
-      739,  739,  739,  739,  739,  739,  745,  746,  736,  747,
-      745,  736,  736,  739,  739,  739,  739,  739,  739,  739,
-      739,  736,  746,  736,  748,  736,  747,  749,  747,  736,
-      750,  739,  739,  739,  739,  739,  739,  736,  748,  748,
-      736,  749,  736,  751,  736,  750,  752,  736,  753,  750,
-      739,  739,  739,  739,  739,  739,  736,  751,  751,  736,
-      752,  736,  754,  736,  753,  755,  753,  736,  739,  739,
-      739,  739,  739,  736,  754,  754,  736,  755,  736,  756,
-      736,  739,  739,  739,  736,  756,  756,  739,  739,  739,
-
-      739,  739,  739,  739,  739,  739,  739,  736,  736,  757,
-      757,  758,  736,  759,  757,  736,  758,  736,  760,  736,
-      759,  761,  759,  736,  736,  760,  760,  736,  761,  736,
-      762,  736,  736,  762,  762,    0,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736
+      660,    1,  660,  660,  660,  660,  660,  660,  661,  660,
+      660,  660,  660,  662,  660,  660,  660,  660,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      663,  663,  660,  660,  660,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  660,  660,  660,  660,  660,  661,  660,
+      661,  660,  660,  660,  660,  662,  662,  660,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      660,  660,  664,   24,  665,  660,  660,  660,  660,  660,
+      660,  660,  660,  660,  663,  660,  661,  662,  660,  663,
+
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      664,  666,  660,  660,  667,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  660,  660,  660,  660,
+      660,  660,  660,  660,  666,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      660,  660,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  668,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  660,  668,  663,
+
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,    0,
+      660,  660,  660,  660,  660,  660,  660,  660
     } ;
 
-static yyconst short int yy_nxt[2664] =
+static yyconst short int yy_nxt[2266] =
     {   0,
-        4,    5,    6,    7,    7,    8,    9,   10,   11,   12,
-       13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
-       23,   24,   24,   24,   25,   26,   27,   28,   29,   30,
-       31,   31,   31,   31,   32,   31,   31,   33,    4,   34,
-       35,   36,   37,   38,   39,   40,   41,   42,   43,   31,
-       44,   31,   31,   45,   31,   46,   31,   47,   48,   49,
-       50,   51,   52,   53,   31,   31,   31,   54,   55,   56,
-       57,   60,   62,   63,   64,   69,  720,   74,   71,   75,
-       75,   75,   75,   94,   87,   76,   94,   70,   72,   73,
-       77,   65,   85,   92,   93,  149,   86,   96,   78,   88,
-
-       96,   89,   90,   61,   79,  710,   80,   80,   80,   80,
-       97,   94,   94,   60,   94,   98,  588,   81,  674,   94,
-       82,   82,   83,  641,  589,   96,   96,   94,   96,  736,
-       94,  104,   81,   96,  622,  105,  150,  106,   66,   82,
-      636,   96,  623,  100,   96,   61,   94,   82,  101,   94,
-       83,   79,  102,   84,   84,   84,   84,   94,   94,  107,
-       96,  103,  108,   96,   81,  129,   94,   82,   82,  109,
-       94,   96,   96,  110,   94,  132,  111,  592,  133,   81,
-       96,  112,  113,  606,   96,  114,   82,  592,   96,  117,
-      151,  118,  115,  123,   82,  116,   67,   94,  120,   94,
-
-      119,  121,  134,  124,  122,  165,  130,  125,   60,   94,
-      131,   96,   94,   96,  126,  127,   96,   67,   94,  128,
-       94,   94,  159,   96,  159,   94,   96,  160,  160,  160,
-      160,  164,   96,  135,   96,   96,  136,  137,  141,   96,
-       61,  163,   94,  708,   94,   94,  152,  138,  139,  145,
-      140,  709,  143,  147,  142,  146,   96,  144,   96,   96,
-      148,   75,   75,   75,   75,  155,  155,  155,  155,   94,
-       82,   82,  153,  154,  176,  154,  156,  157,  736,  157,
-      179,   94,   94,   96,   99,   91,  180,  153,  154,   82,
-      177,  156,  157,  183,  154,   96,   96,   82,  157,   79,
-
-       94,   80,   80,   80,   80,   68,   94,   94,   94,   94,
-       94,   94,   81,   67,   96,  158,  158,   58,  182,  178,
-       96,   96,   96,   96,   96,   96,   94,   81,  736,  736,
-       94,  181,  184,  736,  158,  736,   94,   94,  185,  736,
-       96,   94,  158,   94,   96,  736,  188,  191,   94,  189,
-       96,   96,  186,  192,  193,   96,   94,   96,  187,  190,
-      736,  736,   96,  736,  736,  736,   94,  736,   94,  736,
-       96,  736,   94,  736,  198,  166,  167,  168,  169,  170,
-       96,  194,   96,  171,  736,  195,   96,  199,  196,   94,
-      736,  172,  173,  174,   94,  175,   94,   94,  197,   94,
-
-       94,   94,  736,   96,  200,   94,   94,  736,   96,   94,
-       96,   96,   94,   96,   96,   96,  201,   94,  202,   96,
-       96,   94,  736,   96,  736,   94,   96,  736,  204,  736,
-      736,   96,   94,  736,   94,   96,  203,  205,  213,   96,
-       94,  211,  208,  209,  206,  207,   96,  212,   96,  221,
-      214,  736,  222,  210,   96,  218,  217,  215,  225,  219,
-      736,   94,  216,  223,   94,  224,   94,   94,   94,   94,
-      736,   94,  226,  736,  227,   96,  736,  220,   96,  736,
-       96,   96,   96,   96,  237,   96,  237,  228,  736,  238,
-      238,  238,  238,  241,   94,  241,  158,  158,  242,  242,
-
-      242,  242,   94,   94,  230,  736,  229,  233,   96,  236,
-      234,  736,  736,  231,  232,  158,   96,   96,  235,  155,
-      155,  155,  155,  158,  160,  160,  160,  160,   94,  736,
-      239,  240,  736,  240,   94,  160,  160,  160,  160,  244,
-      244,   94,   96,  247,  248,  239,  240,  243,   96,  243,
-       94,   94,  240,  249,  736,   96,  736,  253,  244,   94,
-      736,   94,  243,  250,   96,   96,  244,   94,  243,   94,
-      252,   94,  736,   96,  251,   96,  736,   94,   94,   94,
-       94,   96,   94,   96,   94,   96,  254,  255,   94,   94,
-      256,   96,   96,   96,   96,   94,   96,  736,   96,   94,
-
-      257,  736,   96,   96,   94,   94,  262,  259,  263,   96,
-      736,  265,  261,   96,  258,   94,  266,  260,   96,   96,
-       94,  271,  736,  736,  264,   94,   94,  736,   94,   96,
-      267,   94,   94,  268,   96,  272,  274,  269,  270,   96,
-       96,  277,   96,   94,  273,   96,   96,  275,  736,   94,
-       94,   94,   94,  736,  736,  276,  278,   96,  280,   94,
-      279,  736,  281,   96,   96,   96,   96,  283,  284,   94,
-      736,   94,  282,   96,   94,  285,   94,   94,   94,   94,
-       94,   94,   94,   96,  290,   96,   94,   94,   96,  294,
-       96,   96,   96,   96,   96,   96,   96,  286,  287,  736,
-
-       96,   96,   94,   94,   94,   94,   94,  288,  736,  289,
-      291,   94,   94,  293,  292,   94,   96,   96,   96,   96,
-       96,   94,  298,  299,  297,   96,   96,  296,   94,   96,
-      295,  736,   94,   94,   94,   96,   94,  300,   94,   94,
-       94,  303,   96,   94,   94,  305,   96,   96,   96,  302,
-       96,  301,   96,   96,   96,  308,  304,   96,   96,  306,
-       94,  238,  238,  238,  238,  320,  307,  320,  736,  311,
-      321,  321,  321,  321,   96,  316,  317,  318,  309,  314,
-      736,  310,  313,  736,  312,  736,  244,  244,  315,  736,
-      238,  238,  238,  238,  242,  242,  242,  242,  242,  242,
-
-      242,  242,  154,  319,  154,  244,   94,   94,   94,  736,
-      157,  736,  157,  244,   94,   94,   94,  154,   94,   94,
-       96,   96,   96,  154,   94,  157,   94,   94,   96,   96,
-       96,  157,   96,   96,   94,   94,   94,  736,   96,  736,
-       96,   96,   94,   94,  736,   94,  736,   94,   96,   96,
-       96,  322,  325,  327,  324,  736,   96,   96,  323,   96,
-      326,   96,   94,   94,  736,  332,   94,  329,  328,  333,
-       94,   94,   94,   94,  330,  331,   96,   96,  336,  335,
-       96,  338,  334,  337,   96,   96,   96,   96,   94,   94,
-       94,  339,   94,   94,   94,   94,   94,   94,   94,  736,
-
-       94,   94,   96,   96,   96,  340,   96,   96,   96,   96,
-       96,   96,   96,  343,   96,   96,   94,   94,   94,   94,
-      341,  344,  342,  347,   94,  345,   94,  346,   94,  736,
-       96,   96,   96,   96,   94,   94,  736,   94,   96,  349,
-       96,  352,   96,  353,  348,  350,  360,   94,   96,   96,
-      351,   96,   94,   94,  736,   94,  736,   94,  736,  736,
-       94,   96,  358,   94,  354,   94,   96,   96,  356,   96,
-      355,   96,  357,  359,   96,  736,   94,   96,   94,   96,
-       94,   94,  736,  736,   94,  361,   94,  363,   94,  364,
-       96,   94,   96,  736,   96,   96,  362,  365,   96,  736,
-
-       96,   94,   96,   94,  736,   96,  736,   94,  736,  366,
-       94,   94,  736,  368,  370,   96,  367,   96,  373,   94,
-      372,   96,  375,  736,   96,   96,  369,  371,   94,   94,
-       94,   94,   94,   96,  376,  377,  736,  374,  379,  736,
-      736,  378,   96,   96,   96,   96,   96,  321,  321,  321,
-      321,  321,  321,  321,  321,   94,  380,  381,   94,   94,
-       94,   94,   94,  240,  736,  240,  736,   94,  385,   96,
-      384,   94,   96,   96,   96,   96,   96,   94,  240,  382,
-      383,   96,   94,   94,  240,   96,  386,   94,  736,  736,
-      394,   96,  736,   94,  389,   94,   96,   96,   94,   94,
-
-       94,   96,  388,  392,   94,  391,  387,   96,   94,   96,
-      390,  393,   96,   96,   96,  736,   94,   94,   96,  736,
-       94,  397,   96,   94,   94,   94,   94,  399,  396,  398,
-       96,   96,  395,  403,   96,   94,  402,   96,   96,   96,
-       96,  736,   94,  400,  401,   94,   94,  404,   94,   96,
-       94,  736,   94,  736,   94,  406,   96,   94,   94,   96,
-       96,  408,   96,   94,   96,  405,   96,  407,   96,  409,
-       94,   96,   96,   94,   94,  736,  736,   96,  410,   94,
-       94,  411,  412,  736,   96,   94,  415,   96,   96,  413,
-      417,   94,  736,   96,   96,  414,   94,  416,   94,   96,
-
-      419,   94,   94,   94,   94,   96,  420,  418,  426,   94,
-       96,  736,   96,   94,   94,   96,   96,   96,   96,  736,
-       94,   94,   94,   96,  736,  424,  421,   96,   96,  736,
-      422,   94,  736,  423,   96,   96,   96,   94,  428,  736,
-       94,  429,  736,  430,   94,   96,  425,  427,   94,   94,
-      736,   96,  432,  434,   96,   94,  431,   94,   96,  736,
-      736,  435,   96,   96,  433,   94,  736,  736,  437,   96,
-       94,   96,   94,  438,  436,  736,   94,   94,   94,   96,
-      440,  442,  736,   94,   96,   94,   96,   94,   94,  439,
-       96,   96,   96,   94,   94,  441,  443,   96,   94,   96,
-
-      451,   96,   96,   94,   94,  736,   94,   96,   96,  736,
-      444,   94,   96,  736,   94,  736,  736,   96,   96,  446,
-       96,  736,  445,  449,   94,   96,  454,  447,   96,  453,
-      450,   94,  448,   94,   94,  452,   94,  736,   96,  736,
-      458,  736,   94,   94,  455,   96,   94,   96,   96,  461,
-       96,  462,   94,  456,  459,  457,   96,   96,   94,  463,
-       96,  464,   94,   94,  736,  460,   96,   94,  467,  736,
-       94,   94,   96,   94,   94,   94,   96,   96,  469,  736,
-       94,   96,  465,  466,   96,   96,   94,   96,   96,   96,
-      468,   94,   94,  470,   96,   94,   94,   94,   94,   94,
-
-       96,   94,  736,   94,  471,   96,   96,  474,  472,   96,
-       96,   96,   96,   96,  736,   96,  475,   96,   94,   94,
-      473,   94,  736,   94,   94,   94,   94,   94,  477,   94,
-      736,   94,   96,   96,   94,   96,  476,   96,   96,   96,
-       96,   96,   94,   96,  478,   96,   94,   94,   96,  736,
-      736,   94,   94,  479,  736,  481,   96,   94,  736,   94,
-       96,   96,  483,  484,  487,   96,   96,   94,  480,  485,
-      482,   96,  486,   96,   94,  488,   94,   94,   94,   94,
-       94,   96,   94,   94,   94,  736,  489,   94,   96,   94,
-       96,   96,   96,   96,   96,  492,   96,   96,   96,  490,
-
-      617,   96,   94,   96,   94,  736,  491,  736,  618,  619,
-      736,  494,  620,   94,  493,  496,   96,   94,   96,  497,
-      495,  501,  498,  500,  503,  502,  499,   96,   94,   94,
-       94,   96,   94,   94,  736,  736,   94,   94,  736,  736,
-       94,   94,   96,   96,   96,   94,   96,   96,  504,  506,
-       96,   96,  505,  507,   96,   96,   94,  736,   94,   96,
-      736,   94,   94,   94,   94,   94,   94,  736,   94,   94,
-       96,  510,   96,   94,  511,   96,   96,   96,   96,   96,
-       96,  508,   96,   96,  509,   94,  736,   96,   94,   94,
-      736,  736,   94,   94,   94,  514,   94,  517,  736,   96,
-
-      512,  518,   96,   96,  513,  519,   96,   96,   96,   94,
-       96,  515,  516,  736,  736,   94,  520,   94,  736,  736,
-       94,   94,  736,   96,  525,  523,   94,  527,  526,   96,
-       94,   96,  524,  522,   96,   96,  521,   94,  736,   94,
-       96,   94,   94,   94,   96,   94,  736,   94,   94,  736,
-      736,   96,  528,   96,   94,   96,   96,   96,  736,   96,
-      529,   96,   96,   94,  531,   94,  530,   94,   96,   94,
-       94,   94,  536,   94,  533,   94,  532,   96,  538,   96,
-       94,   96,  736,   96,   96,   96,  534,   96,  537,   96,
-      542,   94,   94,  535,   96,  539,  543,   94,  540,   94,
-
-      736,   94,  541,   94,   94,   96,   96,   94,  544,   94,
-       94,   96,   94,   96,  546,   96,   94,   96,   96,  736,
-      545,   96,   94,   96,   96,   94,   96,  547,  549,   94,
-       96,   94,  736,  550,  552,   94,   96,   94,  554,   96,
-      555,   94,  548,   96,   94,   96,  556,  551,  736,   96,
-       94,   96,  736,   94,  553,   96,   94,  557,   96,  736,
-       94,  559,  561,  560,   96,   94,  558,   96,   94,   94,
-       96,  562,  564,  563,   96,  736,   94,   94,   94,   96,
-      736,   94,   96,   96,   94,   94,  572,  565,   94,  566,
-       96,   96,   96,   94,  567,   96,   94,   94,   96,   96,
-
-       94,   94,   96,   94,   94,  568,   94,   96,   94,   94,
-       96,   96,  569,  570,   96,   96,  736,   96,   96,  574,
-       96,   94,   96,   96,   94,   94,  573,  575,  576,  736,
-      571,  577,   94,   94,   94,   96,   94,  736,   96,   96,
-       94,  736,   94,  580,  579,  588,   96,   96,   96,  736,
-       96,   94,   94,  589,   96,  578,   96,  582,  736,  736,
-       94,   94,   94,  581,  585,   96,   96,  594,  587,  736,
-       94,  583,  591,  584,   96,   96,   96,  736,  586,   94,
-       94,   94,  590,  595,   96,   94,   94,   94,   94,   94,
-       94,  596,   94,   96,   96,   96,  736,   94,   94,   96,
-
-       96,   96,   96,   96,   96,  597,   96,  736,   94,  736,
-       94,   96,   96,  736,  736,  598,   94,   94,  736,   94,
-       94,  601,   96,  609,   96,  736,  604,  599,  607,  600,
-       96,   96,  608,   96,   96,  602,   94,  603,  736,  605,
-       94,  610,   94,   94,  736,   94,   94,  622,   94,  613,
-       96,  736,  612,   94,   96,  623,   96,   96,  611,   96,
-       96,   94,   96,   94,  736,  615,   94,   96,   94,  614,
-       94,   94,  736,  736,  632,   96,  616,   96,  625,  617,
-       96,  624,   96,  634,   96,   96,  635,  618,  619,  626,
-      637,  620,  627,  736,   94,  640,   94,  736,  638,  619,
-
-       94,   94,  620,  618,  619,   94,   94,  620,   96,  631,
-       96,  628,   94,  629,   96,   96,   94,  736,  736,   96,
-       96,  630,  632,  632,  648,   94,   96,  736,  736,   94,
-       96,  634,  634,  619,  635,  635,  620,  649,  736,   96,
-      644,  642,  637,   96,  643,  736,  634,  651,  645,  635,
-      638,  619,  655,  736,  620,  646,  653,  640,  736,  654,
-      638,  619,  647,  656,  620,  618,  619,  662,   94,  620,
-       94,  657,  658,  661,   94,  659,   94,  648,  736,  736,
-      736,  736,   96,  649,   96,  632,  619,  651,   96,  620,
-       96,  651,  634,  667,  634,  635,  653,  635,  668,  654,
-
-      653,   94,  619,  654,  655,  620,  736,  653,   94,  736,
-      654,  656,  638,  619,  665,   96,  620,  663,  664,  657,
-      658,  670,   96,  659,  666,   94,  675,   94,  678,   94,
-      672,   94,  736,  673,  676,  658,  657,  658,  659,   96,
-      659,   96,  667,   96,  679,   96,  668,  651,  670,   94,
-      736,  619,  670,  684,  620,  653,  653,  672,  654,  654,
-      673,  672,  658,   96,  673,  659,  736,  685,  736,  687,
-      736,  736,  736,  681,  675,  680,  672,  682,  689,  673,
-      691,  690,  676,  658,  683,  678,  659,   94,  676,  658,
-       94,   94,  659,  657,  658,   94,  736,  659,  684,  685,
-
-      736,   96,   94,  670,   96,   96,   94,  658,  672,   96,
-      659,  673,  672,  687,  687,  673,   96,  736,  695,  696,
-       96,  692,  689,  689,   94,  690,  690,  658,  689,  736,
-      659,  690,  691,   94,  698,   94,  694,  693,   96,  695,
-      676,  658,  699,  696,  659,  687,   94,   96,  658,   96,
-       94,  659,  689,   94,  689,  690,   94,  690,   94,   94,
-       96,   94,  736,  736,   96,  736,  736,   96,  736,  711,
-       96,  702,   96,   96,  736,   96,  708,  712,  713,  736,
-      736,  714,   94,  700,  709,  736,  736,  736,  704,  706,
-      711,  736,  707,  736,  701,  716,   96,  721,  712,  713,
-
-      703,  716,  714,  716,  718,  722,  713,  719,  724,  714,
-      718,  705,  718,  719,  725,  719,  712,  713,  726,  728,
-      714,  736,  736,  713,  721,  736,  714,  718,  730,  732,
-      719,  731,  722,  713,  724,  725,  714,  722,  713,  726,
-      716,  714,  712,  713,  713,  728,  714,  714,  718,  718,
-      728,  719,  719,  736,  730,  733,  734,  731,  736,  730,
-      736,  732,  731,  733,  713,  730,  736,  714,  731,  722,
-      713,  734,  713,  714,  736,  714,  728,  736,  736,  736,
-      730,  736,  736,  731,  736,  730,  736,  736,  731,   59,
-       59,   59,   59,   59,   59,   59,   59,   59,   59,   66,
-
-       66,   66,   66,  736,   66,   66,   66,   66,   66,   95,
-      736,  736,  736,   95,   95,   95,  161,  161,  162,  162,
-      245,  245,  245,  246,  246,  593,  593,  593,  593,  621,
-      736,  736,  736,  621,  621,  621,  621,  621,  633,  633,
-      736,  736,  736,  633,  633,  633,  633,  639,  736,  736,
-      736,  639,  639,  639,  639,  639,  650,  650,  736,  736,
-      736,  650,  650,  650,  650,  652,  652,  736,  736,  736,
-      652,  652,  652,  652,  660,  736,  736,  736,  660,  660,
-      660,  660,  660,  669,  669,  736,  736,  736,  669,  669,
-      669,  669,  671,  671,  736,  736,  736,  671,  671,  671,
-
-      671,  677,  736,  736,  736,  677,  677,  677,  677,  677,
-      686,  686,  736,  736,  736,  686,  686,  686,  686,  688,
-      688,  736,  736,  736,  688,  688,  688,  688,  697,  697,
-      736,  736,  736,  697,  697,  697,  697,  715,  736,  736,
-      736,  715,  715,  715,  715,  715,  717,  717,  736,  736,
-      736,  717,  717,  717,  717,  723,  736,  736,  736,  723,
-      723,  723,  723,  723,  727,  727,  736,  736,  736,  727,
-      727,  727,  727,  729,  729,  736,  736,  736,  729,  729,
-      729,  729,  735,  735,  736,  736,  736,  735,  735,  735,
-      735,    3,  736,  736,  736,  736,  736,  736,  736,  736,
-
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736
+        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
+       14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
+       24,   24,   24,   25,   26,   27,   28,   29,   30,   31,
+       31,   31,   31,   32,   31,   31,   33,    4,   34,   35,
+       36,   37,   38,   39,   40,   41,   42,   43,   31,   44,
+       31,   31,   45,   31,   46,   31,   47,   48,   49,   50,
+       51,   52,   53,   31,   31,   31,   54,   55,   56,   57,
+       60,   62,   63,   64,   69,  598,   74,   71,   75,   75,
+       75,   75,   94,   87,   76,   94,   70,   72,   73,   77,
+       65,   85,   92,   93,  149,   86,   96,   78,   88,   96,
+
+       89,   90,   61,   79,  598,   80,   80,   80,   80,   97,
+       94,   94,   60,   94,   98,  660,   81,   67,   94,   82,
+       82,   83,  165,   66,   96,   96,   94,   96,   96,   94,
+      104,   81,   96,  164,  105,  150,  106,  163,   82,  152,
+       96,  660,  100,   96,   61,   94,   82,  101,   94,   83,
+       79,  102,   84,   84,   84,   84,   94,   94,  107,   96,
+      103,  108,   96,   81,  129,   94,   82,   82,  109,   94,
+       96,   96,  110,   94,  132,  111,   99,  133,   81,   96,
+      112,  113,   91,   96,  114,   82,   68,   96,  117,  151,
+      118,  115,  123,   82,  116,   67,   94,  120,   94,  119,
+
+      121,  134,  124,  122,   58,  130,  125,   60,   94,  131,
+       96,   94,   96,  126,  127,  660,   67,   94,  128,   94,
+       94,  159,   96,  159,   94,   96,  160,  160,  160,  160,
+      660,   96,  135,   96,   96,  136,  137,  141,   96,   61,
+      660,   94,  660,   94,   94,  660,  138,  139,  145,  140,
+      660,  143,  147,  142,  146,   96,  144,   96,   96,  148,
+       75,   75,   75,   75,  155,  155,  155,  155,   94,   82,
+       82,  153,  154,  176,  154,  156,  157,  660,  157,  179,
+       94,   94,   96,  660,  660,  180,  153,  154,   82,  177,
+      156,  157,  183,  154,   96,   96,   82,  157,   79,   94,
+
+       80,   80,   80,   80,  660,   94,   94,   94,   94,   94,
+       94,   81,  660,   96,  158,  158,  660,  182,  178,   96,
+       96,   96,   96,   96,   96,   94,   81,  660,  660,   94,
+      181,  184,  660,  158,  660,   94,   94,  185,  660,   96,
+       94,  158,   94,   96,  660,  188,  191,   94,  189,   96,
+       96,  186,  192,  193,   96,   94,   96,  187,  190,  660,
+      660,   96,  660,  660,  660,   94,  660,   94,  660,   96,
+      660,   94,  660,  198,  166,  167,  168,  169,  170,   96,
+      194,   96,  171,  660,  195,   96,  199,  196,   94,  660,
+      172,  173,  174,   94,  175,   94,   94,  197,   94,   94,
+
+       94,  660,   96,  200,   94,   94,  660,   96,   94,   96,
+       96,   94,   96,   96,   96,  201,   94,  202,   96,   96,
+       94,  660,   96,  660,   94,   96,  660,  204,  660,  660,
+       96,   94,  660,   94,   96,  203,  205,  213,   96,   94,
+      211,  208,  209,  206,  207,   96,  212,   96,  221,  214,
+      660,  222,  210,   96,  218,  217,  215,  225,  219,  660,
+       94,  216,  223,   94,  224,   94,   94,   94,   94,  660,
+       94,  226,  660,  227,   96,  660,  220,   96,  660,   96,
+       96,   96,   96,  237,   96,  237,  228,  660,  238,  238,
+      238,  238,  241,   94,  241,  158,  158,  242,  242,  242,
+
+      242,   94,   94,  230,  660,  229,  233,   96,  236,  234,
+      660,  660,  231,  232,  158,   96,   96,  235,  155,  155,
+      155,  155,  158,  160,  160,  160,  160,   94,   94,  239,
+      240,  660,  240,   94,  160,  160,  160,  160,  244,  244,
+       94,   96,   96,  261,  239,  240,  243,   96,  243,  660,
+       94,  240,  250,  660,   96,  660,  254,  244,   94,   94,
+      660,  243,  660,  251,   96,  244,   94,  243,   94,  253,
+      247,  660,   96,   96,  252,   94,  248,  249,   94,   94,
+       96,   94,   96,   94,  660,  255,  256,   94,   94,   96,
+       94,   94,   96,   96,  660,   96,  660,   96,  257,  660,
+
+      660,   96,   96,   94,   96,   96,   94,   94,  258,  264,
+      263,  262,  260,  266,  259,   94,   94,   96,   94,  267,
+       96,   96,   94,  272,   94,  265,  660,   94,   94,   96,
+       96,   94,   96,  660,  660,  268,   96,  269,   96,  270,
+      271,   96,   96,  273,  660,   96,   94,  275,  276,  660,
+       94,  274,   94,  660,  278,   94,  277,  281,  279,   94,
+       96,   94,  280,  282,   96,   94,   96,  284,  660,   96,
+      660,   94,  283,   96,   94,   96,   94,   94,  291,   96,
+       94,   94,  285,   94,  286,   96,   94,  660,   96,   94,
+       96,   96,   94,  295,   96,   96,  660,   96,   94,  660,
+
+       96,  287,   94,   96,   94,  288,   96,   94,   94,  289,
+      292,  290,   96,  294,  293,  660,   96,   94,   96,   94,
+       94,   96,   96,   94,  660,  300,   94,   94,  297,  298,
+       94,   96,  296,   96,   96,   94,   94,   96,  299,  660,
+       96,   96,   94,  301,   96,   94,  660,   94,   94,   96,
+       96,  306,  302,  303,  660,  304,   96,  305,   94,   96,
+      309,   96,   96,  660,   94,  660,   94,  307,  244,  244,
+       94,  312,   96,  660,  308,   94,  660,  310,   96,  311,
+       96,  660,   94,  317,   96,  315,  313,  244,  314,   96,
+      318,  238,  238,  238,  238,  244,   96,  316,  319,  238,
+
+      238,  238,  238,  242,  242,  242,  242,  660,  660,  320,
+      321,  154,  321,  154,   94,  322,  322,  322,  322,  242,
+      242,  242,  242,   94,   94,  325,  154,   94,   96,   94,
+       94,  157,  154,  157,   94,   94,   94,   96,   96,   94,
+      660,   96,   94,   96,   96,   94,  157,   94,   96,   96,
+       96,   94,  157,   96,  323,   94,   96,  660,   94,   96,
+      660,   96,   94,  327,  326,   96,  660,  324,  329,   96,
+       94,  335,   96,  660,  328,  660,   96,   94,  331,   94,
+      330,  660,   94,  334,   96,  332,   94,  338,  333,  336,
+      337,   96,  340,   96,  660,  339,   96,   94,  660,   94,
+
+       96,   94,   94,   94,   94,   94,   94,   94,  341,   94,
+       94,   96,  342,   96,   94,   96,   96,   96,   96,   96,
+       96,   96,  660,   96,   96,  660,   94,   94,   96,   94,
+       94,  343,  346,   94,  349,   94,  344,  345,  347,  348,
+       96,   96,  660,   96,   96,   94,   94,   96,   94,   96,
+      351,   94,   94,  354,  350,   94,  352,  355,   94,   96,
+       96,  353,   96,  362,   94,   96,   96,  660,  660,   96,
+       94,   94,   96,   94,   94,  356,   94,  660,   96,   94,
+      358,  360,  357,  359,   96,   96,   94,   96,   96,   94,
+       96,  361,  660,   96,   94,   94,  365,  660,  363,   94,
+
+       96,   94,   94,   96,  364,   94,  366,   94,   96,   96,
+      660,  367,   94,   96,   94,   96,   96,  660,  660,   96,
+      660,   96,  368,   94,  370,  372,   96,  369,   96,  371,
+       94,  375,  373,  660,  374,  377,   94,   96,   94,  379,
+       94,  380,   94,   94,   96,  378,  660,  381,  376,   94,
+       96,   94,   96,   94,   96,   94,   96,   96,  322,  322,
+      322,  322,   94,   96,  660,   96,   94,   96,  382,   96,
+      660,  660,  660,  660,  383,  660,   96,   94,  387,  660,
+       96,  384,  386,  322,  322,  322,  322,  388,   94,  392,
+      385,   96,   94,  389,   94,  240,  391,  240,   94,  390,
+
+       94,  660,   96,   94,   94,   94,   96,  397,   96,   94,
+      240,   94,   96,   94,   96,  393,  240,   96,   96,   96,
+      394,   94,   94,   96,  395,   96,  660,   96,   94,   94,
+       94,  660,  396,   94,  660,   96,   96,  400,   94,  660,
+      401,  402,   96,   96,   96,  399,  406,   96,  398,   94,
+      403,  660,   96,  405,   94,   94,  404,   94,   94,  407,
+       94,  660,   94,   96,   94,  409,   94,  660,   96,   96,
+       94,   96,   96,   94,   96,  408,   96,   94,   96,  660,
+       96,  410,   94,  660,   96,  411,  660,   96,  660,   94,
+       94,   96,   94,  414,  415,  660,   96,  412,  413,   94,
+
+      418,   94,  420,   96,   96,  660,   96,  416,   94,  417,
+       94,  419,   94,   96,  660,   96,   94,   94,   94,  422,
+       94,   94,   96,   94,   96,  423,   96,  421,  429,   94,
+       96,   96,   96,   94,   96,   96,   94,   96,   94,   94,
+       94,  660,  660,   96,  427,   94,  424,   96,  660,   94,
+       96,  425,   96,   96,   96,  431,  426,  433,  432,   96,
+       94,  430,  428,   96,  660,  435,   94,  660,   94,  660,
+      437,   94,  434,   94,   96,   94,  440,   94,  438,   94,
+       96,  441,   96,  439,  660,   96,  436,   96,   94,   96,
+       94,   96,   94,   96,  660,   94,  660,  660,  443,   94,
+
+       94,   94,   96,  445,   96,  442,   96,   94,  444,   96,
+      447,  455,   94,   96,   96,   96,   94,  448,   94,  660,
+      446,   96,   94,   94,  660,   94,   96,   94,  660,   94,
+       96,  660,   96,  450,  660,   94,   96,   96,  449,   96,
+       94,   96,  451,   96,  452,  453,  454,   94,  457,   96,
+      458,   94,   94,   94,   96,  456,  660,   94,  660,  462,
+      660,   96,  459,  660,   94,   96,   96,   96,   94,   94,
+      463,   96,  460,  660,  461,  465,  464,  466,   96,   94,
+      469,   94,   96,   96,   94,  467,  471,  468,   94,  473,
+       94,   94,  660,   96,   94,   96,  470,   94,   96,   94,
+
+       94,  660,   96,   94,   96,   96,  472,  474,   96,   94,
+       94,   96,   94,   96,   96,  475,   94,   96,   94,   94,
+       94,  660,   94,   96,   96,  476,   96,   94,   94,  478,
+       96,  660,   96,   96,   96,  479,   96,   94,  477,   94,
+       94,   96,   96,   94,   94,  481,   94,   94,   94,  660,
+      480,   96,   94,   96,   96,   94,   94,   96,   96,   94,
+       96,   96,   96,  482,   94,   94,   96,  660,  660,   96,
+       96,  485,  483,   96,   94,  660,  660,  484,   96,   96,
+      487,  491,  488,   94,  660,  660,  486,  489,   96,  493,
+      490,   94,   94,   94,   94,   94,   94,   96,  492,  494,
+
+       94,   94,   94,   94,   94,   96,   96,   96,   96,   96,
+       96,   94,   94,  660,   96,   96,   96,   96,   96,  660,
+       94,  495,  660,  660,  660,   96,   96,  497,   94,  499,
+       94,   94,  496,  498,   96,   94,  502,  501,  500,   94,
+      505,  503,   96,  506,   96,   96,  504,  507,   94,   96,
+       94,   94,  508,   96,   94,   94,   94,  660,   94,   94,
+       94,   94,   96,   94,   96,   96,  509,  511,   96,   96,
+       96,  512,   96,   96,   96,   96,  510,   96,   94,   94,
+       94,   94,   94,  660,   94,  660,   94,   94,  660,  515,
+      516,   94,   96,   96,   96,   96,   96,  519,   96,  513,
+
+       96,   96,  514,  660,   94,   96,   94,   94,  518,   94,
+       94,   94,   94,  522,  517,   94,  660,  523,   96,   94,
+       96,   96,  524,   96,   96,   96,   96,  520,  521,   96,
+      525,   94,  660,   96,   94,  660,  660,  660,   94,   94,
+      660,  526,  527,  529,  532,   96,  531,   94,   96,  530,
+      533,  528,   96,   96,  534,   94,   94,   94,   94,  660,
+      660,   96,   94,   94,   94,   94,  660,   94,   94,   96,
+       96,   96,   96,  537,  535,   94,   96,   96,   96,   96,
+      536,   96,   96,  660,   94,  660,   94,   94,  542,   96,
+      660,   94,  539,   94,  544,   94,  660,  538,   96,  549,
+
+       96,   96,   94,   94,  540,   96,  547,   96,  543,   96,
+      541,  548,   94,   94,  545,  546,   96,   96,   94,   94,
+      660,   94,   94,   94,   94,  550,   96,   96,   94,  660,
+       94,   94,   96,   96,  552,   96,   96,   96,   96,  553,
+      551,  660,   96,  554,   96,   96,   94,   94,   94,  556,
+       94,   94,  660,  557,  559,  561,   94,   94,  660,  562,
+       96,   96,   96,  555,   96,   96,  563,  558,   94,   94,
+       96,   96,  560,  660,   94,   94,  564,   94,  660,  566,
+      567,   94,   96,   96,   94,   94,   94,  569,   96,   96,
+      568,   96,  570,   94,   94,   96,  565,  660,   96,   96,
+
+       96,  660,   94,   94,  571,   94,  660,   96,   96,   94,
+      660,  573,   94,   94,  572,  574,   96,   96,   94,   96,
+      580,   94,  576,   96,  575,  577,   96,   96,   94,  660,
+       94,   94,   96,   94,   94,   96,  660,   94,  578,   94,
+       94,  660,   96,  582,   96,   96,   94,   96,   96,   94,
+      581,   96,  583,   96,   96,  579,   94,   94,   94,  584,
+       96,  585,   94,   96,   94,   94,   94,   94,  660,   94,
+       96,   96,   96,  660,  588,  587,   96,   94,   96,   96,
+       96,   96,  590,   96,  660,  586,  660,   94,   94,  593,
+      660,   96,   94,   94,  589,   94,  591,  596,  595,  597,
+
+      600,   96,   96,  594,  592,   94,   96,   96,  601,   96,
+       94,   94,   94,   94,   94,   94,   94,   94,  602,   96,
+       94,  660,   94,   94,   96,   96,   96,   96,   96,   96,
+       96,   96,   94,  660,   96,  603,   96,   96,  604,  660,
+      660,  660,   94,   94,  660,   94,   96,  607,  614,  660,
+      660,  612,  605,  610,  615,  613,   96,   96,  606,   96,
+       94,  608,   94,  609,  611,   94,   94,   94,  660,   94,
+       94,   94,   94,   94,   96,  618,   96,   94,  617,   96,
+       96,   96,  616,   96,   96,   96,   96,   96,   94,  660,
+      660,   96,  660,   94,   94,  619,   94,   94,   94,   94,
+
+      660,  621,   96,  623,  625,  620,  622,   96,   96,   94,
+       96,   96,   96,   96,  624,   94,   94,   94,   94,  660,
+      660,   94,   94,   96,   94,  626,   94,   94,   94,   96,
+       96,   96,   96,  627,  629,   96,   96,   94,   96,  632,
+       96,   96,   96,   94,  630,   94,  631,   94,  628,   94,
+      660,   96,   94,  660,   94,  660,  633,   96,   94,   96,
+      637,   96,  660,   96,  635,  634,   96,  640,   96,  636,
+       94,   94,   96,  638,  639,   94,  641,   94,   94,  642,
+       94,  660,   94,   94,   96,   96,   94,   94,  647,   96,
+      660,   96,   96,  644,   96,  643,   96,   96,  645,   94,
+
+       96,   96,  660,  660,  646,   94,   94,   94,  660,  650,
+       94,   94,  660,   96,  651,  660,  649,  648,  660,   96,
+       96,   96,  654,  660,   96,   96,  660,  660,  660,  660,
+      660,  653,  652,  660,  656,  660,  660,  655,  658,  660,
+      660,  659,  660,  660,  660,  660,  660,  660,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      657,   59,   59,   59,   59,   59,   59,   59,   66,   66,
+      660,   66,   66,   66,   66,   95,  660,  660,   95,   95,
+       95,  161,  161,  162,  162,  245,  245,  245,  246,  246,
+      599,  599,  599,  599,    3,  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,  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
     } ;
 
-static yyconst short int yy_chk[2664] =
+static yyconst short int yy_chk[2266] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -896,292 +820,248 @@ static yyconst short int yy_chk[2664] =
         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,    9,   12,   12,   13,   18,  713,   21,   20,   21,
-       21,   21,   21,   31,   27,   22,   37,   18,   20,   20,
-       22,   13,   25,   29,   29,   55,   25,   31,   22,   27,
-
-       37,   27,   27,    9,   23,  709,   23,   23,   23,   23,
-       32,   38,   36,   59,   32,   32,  588,   23,  658,   45,
-       23,   23,   23,  623,  588,   38,   36,   47,   32,   67,
-       39,   37,   23,   45,  622,   37,   55,   37,   67,   23,
-      619,   47,  622,   36,   39,   59,   41,   23,   36,   40,
-       23,   24,   36,   24,   24,   24,   24,   43,   42,   38,
-       41,   36,   39,   40,   24,   45,   48,   24,   24,   39,
-       44,   43,   42,   39,   46,   47,   39,  593,   47,   24,
-       48,   40,   40,  589,   44,   40,   24,  572,   46,   41,
-       66,   41,   40,   43,   24,   40,   98,   49,   42,   50,
-
-       41,   42,   48,   43,   42,   96,   46,   44,   97,   52,
-       46,   49,   51,   50,   44,   44,   94,   66,   95,   44,
-      101,   53,   81,   52,   81,  104,   51,   81,   81,   81,
-       81,   93,   95,   49,  101,   53,   49,   49,   50,  104,
-       97,   89,  105,  708,  108,  102,   74,   49,   49,   52,
-       49,  708,   51,   53,   50,   52,  105,   51,  108,  102,
-       53,   75,   75,   75,   75,   79,   79,   79,   79,  103,
-       82,   82,   75,   75,  101,   75,   79,   79,   61,   79,
-      104,  106,  107,  103,   35,   28,  105,   75,   75,   82,
-      102,   79,   79,  108,   75,  106,  107,   82,   79,   80,
-
-      109,   80,   80,   80,   80,   17,  110,  111,  112,  113,
-      114,  115,   80,   14,  109,   80,   80,    8,  107,  103,
-      110,  111,  112,  113,  114,  115,  120,   80,    3,    0,
-      116,  106,  109,    0,   80,    0,  117,  118,  110,    0,
-      120,  121,   80,  100,  116,    0,  113,  114,  119,  113,
-      117,  118,  111,  114,  115,  121,  122,  100,  112,  113,
-        0,    0,  119,    0,    0,    0,  123,    0,  124,    0,
-      122,    0,  125,    0,  120,  100,  100,  100,  100,  100,
-      123,  116,  124,  100,    0,  117,  125,  121,  118,  126,
-        0,  100,  100,  100,  127,  100,  128,  129,  119,  130,
-
-      131,  132,    0,  126,  122,  133,  135,    0,  127,  136,
-      128,  129,  134,  130,  131,  132,  123,  138,  124,  133,
-      135,  137,    0,  136,    0,  139,  134,    0,  127,    0,
-        0,  138,  140,    0,  141,  137,  126,  127,  133,  139,
-      142,  132,  129,  130,  127,  128,  140,  132,  141,  138,
-      134,    0,  138,  131,  142,  136,  135,  134,  139,  137,
-        0,  143,  134,  138,  144,  138,  145,  146,  147,  148,
-        0,  180,  140,    0,  141,  143,    0,  137,  144,    0,
-      145,  146,  147,  148,  153,  180,  153,  142,    0,  153,
-      153,  153,  153,  156,  166,  156,  158,  158,  156,  156,
-
-      156,  156,  167,  170,  144,    0,  143,  146,  166,  148,
-      146,    0,    0,  144,  145,  158,  167,  170,  147,  155,
-      155,  155,  155,  158,  159,  159,  159,  159,  168,    0,
-      155,  155,    0,  155,  169,  160,  160,  160,  160,  161,
-      161,  171,  168,  166,  166,  155,  155,  160,  169,  160,
-      173,  172,  155,  167,    0,  171,    0,  170,  161,  174,
-        0,  175,  160,  168,  173,  172,  161,  176,  160,  177,
-      169,  178,    0,  174,  168,  175,    0,  179,  181,  182,
-      183,  176,  184,  177,  185,  178,  171,  172,  186,  187,
-      173,  179,  181,  182,  183,  188,  184,    0,  185,  189,
-
-      173,    0,  186,  187,  190,  192,  178,  175,  179,  188,
-        0,  182,  177,  189,  174,  191,  183,  176,  190,  192,
-      193,  187,    0,    0,  181,  194,  195,    0,  196,  191,
-      184,  197,  198,  185,  193,  188,  190,  186,  186,  194,
-      195,  192,  196,  199,  189,  197,  198,  191,    0,  200,
-      201,  202,  203,    0,    0,  191,  193,  199,  194,  204,
-      193,    0,  195,  200,  201,  202,  203,  197,  198,  205,
-        0,  206,  196,  204,  207,  199,  208,  209,  211,  210,
-      212,  213,  214,  205,  206,  206,  216,  215,  207,  210,
-      208,  209,  211,  210,  212,  213,  214,  202,  203,    0,
-
-      216,  215,  217,  218,  219,  220,  221,  204,    0,  205,
-      207,  222,  223,  209,  208,  224,  217,  218,  219,  220,
-      221,  225,  214,  215,  213,  222,  223,  212,  226,  224,
-      211,    0,  227,  228,  229,  225,  230,  216,  232,  231,
-      233,  220,  226,  235,  234,  222,  227,  228,  229,  219,
-      230,  218,  232,  231,  233,  225,  221,  235,  234,  223,
-      236,  237,  237,  237,  237,  239,  224,  239,    0,  228,
-      239,  239,  239,  239,  236,  233,  234,  235,  226,  231,
-        0,  227,  230,    0,  229,    0,  244,  244,  232,    0,
-      238,  238,  238,  238,  241,  241,  241,  241,  242,  242,
-
-      242,  242,  238,  236,  238,  244,  246,  247,  248,    0,
-      242,    0,  242,  244,  249,  251,  250,  238,  253,  252,
-      246,  247,  248,  238,  254,  242,  255,  256,  249,  251,
-      250,  242,  253,  252,  257,  258,  259,    0,  254,    0,
-      255,  256,  260,  261,    0,  263,    0,  262,  257,  258,
-      259,  247,  250,  252,  249,    0,  260,  261,  248,  263,
-      251,  262,  264,  265,    0,  256,  266,  254,  253,  257,
-      267,  268,  269,  270,  254,  255,  264,  265,  260,  259,
-      266,  262,  258,  261,  267,  268,  269,  270,  271,  272,
-      274,  263,  273,  275,  276,  277,  278,  279,  281,    0,
-
-      280,  282,  271,  272,  274,  265,  273,  275,  276,  277,
-      278,  279,  281,  270,  280,  282,  283,  284,  285,  286,
-      268,  271,  269,  274,  287,  272,  288,  273,  289,    0,
-      283,  284,  285,  286,  290,  291,    0,  292,  287,  276,
-      288,  279,  289,  280,  275,  277,  290,  293,  290,  291,
-      278,  292,  294,  296,    0,  295,    0,  297,    0,    0,
-      298,  293,  288,  299,  283,  300,  294,  296,  285,  295,
-      284,  297,  287,  289,  298,    0,  301,  299,  302,  300,
-      304,  303,    0,    0,  306,  291,  305,  295,  307,  296,
-      301,  308,  302,    0,  304,  303,  293,  297,  306,    0,
-
-      305,  309,  307,  311,    0,  308,    0,  310,    0,  298,
-      312,  313,    0,  300,  302,  309,  299,  311,  305,  314,
-      304,  310,  307,    0,  312,  313,  301,  303,  315,  316,
-      317,  318,  319,  314,  308,  309,    0,  306,  311,    0,
-        0,  310,  315,  316,  317,  318,  319,  320,  320,  320,
-      320,  321,  321,  321,  321,  322,  313,  314,  323,  324,
-      325,  326,  327,  321,    0,  321,    0,  328,  319,  322,
-      318,  329,  323,  324,  325,  326,  327,  330,  321,  315,
-      317,  328,  331,  332,  321,  329,  322,  333,    0,    0,
-      330,  330,    0,  334,  325,  335,  331,  332,  336,  337,
-
-      339,  333,  324,  328,  338,  327,  323,  334,  340,  335,
-      326,  329,  336,  337,  339,    0,  341,  342,  338,    0,
-      343,  333,  340,  344,  345,  346,  347,  335,  332,  334,
-      341,  342,  331,  339,  343,  348,  338,  344,  345,  346,
-      347,    0,  351,  336,  337,  349,  350,  341,  352,  348,
-      353,    0,  354,    0,  356,  344,  351,  357,  355,  349,
-      350,  346,  352,  358,  353,  343,  354,  345,  356,  347,
-      359,  357,  355,  360,  361,    0,    0,  358,  348,  362,
-      363,  349,  350,    0,  359,  364,  353,  360,  361,  351,
-      355,  365,    0,  362,  363,  352,  366,  354,  367,  364,
-
-      358,  369,  368,  370,  371,  365,  359,  357,  367,  372,
-      366,    0,  367,  373,  375,  369,  368,  370,  371,    0,
-      374,  376,  377,  372,    0,  365,  362,  373,  375,    0,
-      363,  378,    0,  364,  374,  376,  377,  379,  370,    0,
-      380,  371,    0,  372,  381,  378,  366,  368,  382,  384,
-        0,  379,  374,  376,  380,  383,  373,  385,  381,    0,
-        0,  377,  382,  384,  375,  386,    0,    0,  379,  383,
-      387,  385,  388,  379,  378,    0,  389,  390,  392,  386,
-      382,  384,    0,  391,  387,  393,  388,  395,  394,  381,
-      389,  390,  392,  396,  397,  383,  386,  391,  398,  393,
-
-      394,  395,  394,  399,  401,    0,  400,  396,  397,    0,
-      387,  402,  398,    0,  404,    0,    0,  399,  401,  389,
-      400,    0,  388,  392,  403,  402,  397,  390,  404,  396,
-      393,  405,  391,  407,  406,  395,  408,    0,  403,    0,
-      401,    0,  409,  410,  398,  405,  411,  407,  406,  404,
-      408,  404,  412,  399,  402,  400,  409,  410,  413,  404,
-      411,  404,  414,  415,    0,  403,  412,  416,  407,    0,
-      417,  418,  413,  419,  420,  421,  414,  415,  409,    0,
-      422,  416,  405,  406,  417,  418,  423,  419,  420,  421,
-      408,  424,  425,  410,  422,  426,  427,  428,  429,  430,
-
-      423,  431,    0,  432,  413,  424,  425,  421,  414,  426,
-      427,  428,  429,  430,    0,  431,  422,  432,  433,  434,
-      417,  435,    0,  436,  437,  438,  440,  439,  425,  441,
-        0,  442,  433,  434,  443,  435,  423,  436,  437,  438,
-      440,  439,  444,  441,  431,  442,  445,  446,  443,    0,
-        0,  447,  448,  432,    0,  436,  444,  449,    0,  450,
-      445,  446,  438,  439,  442,  447,  448,  451,  434,  440,
-      437,  449,  441,  450,  452,  444,  453,  454,  455,  456,
-      458,  451,  457,  459,  462,    0,  445,  460,  452,  461,
-      453,  454,  455,  456,  458,  450,  457,  459,  462,  448,
-
-      606,  460,  463,  461,  464,    0,  449,    0,  606,  606,
-        0,  453,  606,  465,  452,  455,  463,  466,  464,  456,
-      454,  461,  457,  460,  462,  461,  459,  465,  467,  468,
-      469,  466,  470,  471,    0,    0,  472,  473,    0,    0,
-      474,  475,  467,  468,  469,  476,  470,  471,  463,  465,
-      472,  473,  464,  466,  474,  475,  477,    0,  478,  476,
-        0,  479,  480,  481,  482,  483,  484,    0,  485,  486,
-      477,  473,  478,  487,  474,  479,  480,  481,  482,  483,
-      484,  471,  485,  486,  472,  488,    0,  487,  489,  490,
-        0,    0,  491,  492,  493,  479,  494,  482,    0,  488,
-
-      476,  484,  489,  490,  477,  486,  491,  492,  493,  495,
-      494,  480,  481,    0,    0,  496,  487,  497,    0,    0,
-      498,  499,    0,  495,  492,  490,  501,  494,  493,  496,
-      500,  497,  491,  489,  498,  499,  488,  502,    0,  503,
-      501,  504,  505,  506,  500,  508,    0,  507,  509,    0,
-        0,  502,  495,  503,  511,  504,  505,  506,    0,  508,
-      497,  507,  509,  510,  500,  512,  498,  513,  511,  514,
-      515,  516,  504,  517,  502,  518,  501,  510,  507,  512,
-      519,  513,    0,  514,  515,  516,  502,  517,  505,  518,
-      511,  520,  521,  503,  519,  508,  512,  522,  509,  523,
-
-        0,  524,  510,  525,  526,  520,  521,  527,  514,  528,
-      529,  522,  530,  523,  517,  524,  531,  525,  526,    0,
-      516,  527,  534,  528,  529,  537,  530,  520,  522,  532,
-      531,  533,    0,  523,  525,  535,  534,  536,  527,  537,
-      528,  538,  521,  532,  539,  533,  529,  524,    0,  535,
-      540,  536,    0,  541,  526,  538,  542,  530,  539,    0,
-      543,  532,  534,  533,  540,  544,  531,  541,  545,  547,
-      542,  535,  537,  536,  543,    0,  546,  548,  549,  544,
-        0,  551,  545,  547,  550,  552,  550,  538,  553,  541,
-      546,  548,  549,  554,  543,  551,  555,  556,  550,  552,
-
-      557,  558,  553,  559,  560,  544,  561,  554,  562,  563,
-      555,  556,  546,  548,  557,  558,    0,  559,  560,  553,
-      561,  564,  562,  563,  565,  566,  551,  555,  556,    0,
-      549,  557,  567,  568,  569,  564,  573,    0,  565,  566,
-      571,    0,  575,  562,  561,  570,  567,  568,  569,    0,
-      573,  570,  574,  570,  571,  560,  575,  564,    0,    0,
-      576,  577,  578,  563,  567,  570,  574,  573,  569,    0,
-      579,  565,  571,  566,  576,  577,  578,    0,  568,  580,
-      581,  582,  570,  574,  579,  583,  584,  585,  586,  587,
-      595,  576,  591,  580,  581,  582,    0,  590,  596,  583,
-
-      584,  585,  586,  587,  595,  578,  591,    0,  597,    0,
-      594,  590,  596,    0,    0,  579,  598,  599,    0,  600,
-      601,  583,  597,  591,  594,    0,  586,  581,  590,  582,
-      598,  599,  590,  600,  601,  584,  602,  585,    0,  587,
-      603,  594,  604,  605,    0,  608,  609,  607,  610,  599,
-      602,    0,  598,  607,  603,  607,  604,  605,  597,  608,
-      609,  611,  610,  612,    0,  601,  614,  607,  613,  600,
-      615,  616,    0,    0,  618,  611,  603,  612,  609,  617,
-      614,  608,  613,  618,  615,  616,  618,  617,  617,  609,
-      620,  617,  611,    0,  624,  621,  625,    0,  620,  620,
-
-      626,  627,  620,  621,  621,  628,  629,  621,  624,  616,
-      625,  612,  630,  613,  626,  627,  631,    0,    0,  628,
-      629,  614,  632,  633,  634,  642,  630,    0,    0,  643,
-      631,  632,  633,  634,  632,  633,  634,  635,    0,  642,
-      626,  624,  637,  643,  625,    0,  635,  638,  627,  635,
-      637,  637,  639,    0,  637,  629,  638,  640,    0,  638,
-      639,  639,  631,  641,  639,  640,  640,  643,  644,  640,
-      645,  641,  641,  642,  646,  641,  647,  648,    0,    0,
-        0,    0,  644,  649,  645,  650,  648,  651,  646,  648,
-      647,  652,  649,  653,  650,  649,  651,  650,  654,  651,
-
-      652,  662,  653,  652,  655,  653,    0,  654,  661,    0,
-      654,  656,  655,  655,  646,  662,  655,  644,  645,  656,
-      656,  657,  661,  656,  647,  663,  659,  664,  660,  666,
-      657,  665,    0,  657,  659,  659,  660,  660,  659,  663,
-      660,  664,  667,  666,  661,  665,  668,  669,  670,  680,
-        0,  667,  671,  672,  667,  668,  669,  670,  668,  669,
-      670,  671,  672,  680,  671,  672,    0,  673,    0,  676,
-        0,    0,    0,  664,  675,  663,  673,  665,  676,  673,
-      677,  676,  675,  675,  666,  678,  675,  679,  677,  677,
-      681,  682,  677,  678,  678,  683,    0,  678,  684,  685,
-
-        0,  679,  692,  686,  681,  682,  693,  684,  685,  683,
-      684,  685,  686,  687,  688,  686,  692,    0,  689,  690,
-      693,  679,  687,  688,  694,  687,  688,  689,  690,    0,
-      689,  690,  691,  698,  692,  700,  682,  681,  694,  695,
-      691,  691,  693,  696,  691,  697,  699,  698,  695,  700,
-      701,  695,  696,  702,  697,  696,  703,  697,  704,  705,
-      699,  706,    0,    0,  701,    0,    0,  702,    0,  710,
-      703,  700,  704,  705,    0,  706,  707,  710,  710,    0,
-        0,  710,  707,  698,  707,    0,    0,    0,  702,  704,
-      711,    0,  706,    0,  699,  712,  707,  714,  711,  711,
-
-      701,  716,  711,  717,  712,  714,  714,  712,  715,  714,
-      716,  703,  717,  716,  718,  717,  715,  715,  719,  722,
-      715,    0,    0,  718,  721,    0,  718,  719,  722,  723,
-      719,  722,  721,  721,  724,  725,  721,  723,  723,  726,
-      727,  723,  724,  724,  725,  728,  724,  725,  726,  727,
-      729,  726,  727,    0,  728,  730,  731,  728,    0,  729,
-        0,  732,  729,  733,  730,  731,    0,  730,  731,  732,
-      732,  734,  733,  732,    0,  733,  735,    0,    0,    0,
-      734,    0,    0,  734,    0,  735,    0,    0,  735,  737,
-      737,  737,  737,  737,  737,  737,  737,  737,  737,  738,
-
-      738,  738,  738,    0,  738,  738,  738,  738,  738,  739,
-        0,    0,    0,  739,  739,  739,  740,  740,  741,  741,
-      742,  742,  742,  743,  743,  744,  744,  744,  744,  745,
-        0,    0,    0,  745,  745,  745,  745,  745,  746,  746,
-        0,    0,    0,  746,  746,  746,  746,  747,    0,    0,
-        0,  747,  747,  747,  747,  747,  748,  748,    0,    0,
-        0,  748,  748,  748,  748,  749,  749,    0,    0,    0,
-      749,  749,  749,  749,  750,    0,    0,    0,  750,  750,
-      750,  750,  750,  751,  751,    0,    0,    0,  751,  751,
-      751,  751,  752,  752,    0,    0,    0,  752,  752,  752,
-
-      752,  753,    0,    0,    0,  753,  753,  753,  753,  753,
-      754,  754,    0,    0,    0,  754,  754,  754,  754,  755,
-      755,    0,    0,    0,  755,  755,  755,  755,  756,  756,
-        0,    0,    0,  756,  756,  756,  756,  757,    0,    0,
-        0,  757,  757,  757,  757,  757,  758,  758,    0,    0,
-        0,  758,  758,  758,  758,  759,    0,    0,    0,  759,
-      759,  759,  759,  759,  760,  760,    0,    0,    0,  760,
-      760,  760,  760,  761,  761,    0,    0,    0,  761,  761,
-      761,  761,  762,  762,    0,    0,    0,  762,  762,  762,
-      762,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736
+        9,   12,   12,   13,   18,  599,   21,   20,   21,   21,
+       21,   21,   31,   27,   22,   37,   18,   20,   20,   22,
+       13,   25,   29,   29,   55,   25,   31,   22,   27,   37,
+
+       27,   27,    9,   23,  580,   23,   23,   23,   23,   32,
+       38,   36,   59,   32,   32,   67,   23,   98,   45,   23,
+       23,   23,   96,   67,   38,   36,   47,   32,   94,   39,
+       37,   23,   45,   93,   37,   55,   37,   89,   23,   74,
+       47,   61,   36,   39,   59,   41,   23,   36,   40,   23,
+       24,   36,   24,   24,   24,   24,   43,   42,   38,   41,
+       36,   39,   40,   24,   45,   48,   24,   24,   39,   44,
+       43,   42,   39,   46,   47,   39,   35,   47,   24,   48,
+       40,   40,   28,   44,   40,   24,   17,   46,   41,   66,
+       41,   40,   43,   24,   40,   14,   49,   42,   50,   41,
+
+       42,   48,   43,   42,    8,   46,   44,   97,   52,   46,
+       49,   51,   50,   44,   44,    3,   66,   95,   44,  101,
+       53,   81,   52,   81,  104,   51,   81,   81,   81,   81,
+        0,   95,   49,  101,   53,   49,   49,   50,  104,   97,
+        0,  105,    0,  108,  102,    0,   49,   49,   52,   49,
+        0,   51,   53,   50,   52,  105,   51,  108,  102,   53,
+       75,   75,   75,   75,   79,   79,   79,   79,  103,   82,
+       82,   75,   75,  101,   75,   79,   79,    0,   79,  104,
+      106,  107,  103,    0,    0,  105,   75,   75,   82,  102,
+       79,   79,  108,   75,  106,  107,   82,   79,   80,  109,
+
+       80,   80,   80,   80,    0,  110,  111,  112,  113,  114,
+      115,   80,    0,  109,   80,   80,    0,  107,  103,  110,
+      111,  112,  113,  114,  115,  120,   80,    0,    0,  116,
+      106,  109,    0,   80,    0,  117,  118,  110,    0,  120,
+      121,   80,  100,  116,    0,  113,  114,  119,  113,  117,
+      118,  111,  114,  115,  121,  122,  100,  112,  113,    0,
+        0,  119,    0,    0,    0,  123,    0,  124,    0,  122,
+        0,  125,    0,  120,  100,  100,  100,  100,  100,  123,
+      116,  124,  100,    0,  117,  125,  121,  118,  126,    0,
+      100,  100,  100,  127,  100,  128,  129,  119,  130,  131,
+
+      132,    0,  126,  122,  133,  135,    0,  127,  136,  128,
+      129,  134,  130,  131,  132,  123,  138,  124,  133,  135,
+      137,    0,  136,    0,  139,  134,    0,  127,    0,    0,
+      138,  140,    0,  141,  137,  126,  127,  133,  139,  142,
+      132,  129,  130,  127,  128,  140,  132,  141,  138,  134,
+        0,  138,  131,  142,  136,  135,  134,  139,  137,    0,
+      143,  134,  138,  144,  138,  145,  146,  147,  148,    0,
+      180,  140,    0,  141,  143,    0,  137,  144,    0,  145,
+      146,  147,  148,  153,  180,  153,  142,    0,  153,  153,
+      153,  153,  156,  176,  156,  158,  158,  156,  156,  156,
+
+      156,  167,  170,  144,    0,  143,  146,  176,  148,  146,
+        0,    0,  144,  145,  158,  167,  170,  147,  155,  155,
+      155,  155,  158,  159,  159,  159,  159,  166,  168,  155,
+      155,    0,  155,  169,  160,  160,  160,  160,  161,  161,
+      171,  166,  168,  176,  155,  155,  160,  169,  160,    0,
+      172,  155,  167,    0,  171,    0,  170,  161,  173,  174,
+        0,  160,    0,  168,  172,  161,  175,  160,  177,  169,
+      166,    0,  173,  174,  168,  178,  166,  166,  179,  181,
+      175,  182,  177,  183,    0,  171,  172,  184,  185,  178,
+      186,  187,  179,  181,    0,  182,    0,  183,  173,    0,
+
+        0,  184,  185,  188,  186,  187,  189,  200,  173,  179,
+      178,  177,  175,  182,  174,  190,  191,  188,  192,  183,
+      189,  200,  193,  187,  194,  181,    0,  195,  196,  190,
+      191,  197,  192,    0,    0,  184,  193,  185,  194,  186,
+      186,  195,  196,  188,    0,  197,  198,  190,  191,    0,
+      201,  189,  199,    0,  192,  202,  191,  194,  193,  203,
+      198,  204,  193,  195,  201,  206,  199,  197,    0,  202,
+        0,  205,  196,  203,  207,  204,  208,  209,  206,  206,
+      211,  212,  198,  210,  199,  205,  213,    0,  207,  215,
+      208,  209,  216,  210,  211,  212,    0,  210,  214,    0,
+
+      213,  202,  217,  215,  218,  203,  216,  221,  219,  204,
+      207,  205,  214,  209,  208,    0,  217,  222,  218,  220,
+      223,  221,  219,  224,    0,  215,  225,  226,  212,  213,
+      227,  222,  211,  220,  223,  228,  229,  224,  214,    0,
+      225,  226,  230,  216,  227,  231,    0,  232,  233,  228,
+      229,  222,  218,  219,    0,  220,  230,  221,  234,  231,
+      225,  232,  233,    0,  235,    0,  236,  223,  244,  244,
+      246,  228,  234,    0,  224,  249,    0,  226,  235,  227,
+      236,    0,  265,  233,  246,  231,  229,  244,  230,  249,
+      234,  237,  237,  237,  237,  244,  265,  232,  235,  238,
+
+      238,  238,  238,  241,  241,  241,  241,    0,    0,  236,
+      239,  238,  239,  238,  247,  239,  239,  239,  239,  242,
+      242,  242,  242,  248,  250,  249,  238,  251,  247,  252,
+      254,  242,  238,  242,  253,  255,  258,  248,  250,  256,
+        0,  251,  259,  252,  254,  257,  242,  260,  253,  255,
+      258,  261,  242,  256,  247,  262,  259,    0,  263,  257,
+        0,  260,  264,  251,  250,  261,    0,  248,  253,  262,
+      266,  258,  263,    0,  252,    0,  264,  267,  255,  268,
+      254,    0,  269,  257,  266,  255,  270,  261,  256,  259,
+      260,  267,  263,  268,    0,  262,  269,  271,    0,  272,
+
+      270,  275,  273,  276,  274,  277,  278,  279,  264,  280,
+      282,  271,  266,  272,  281,  275,  273,  276,  274,  277,
+      278,  279,    0,  280,  282,    0,  283,  284,  281,  285,
+      286,  269,  272,  287,  275,  288,  270,  271,  273,  274,
+      283,  284,    0,  285,  286,  289,  290,  287,  292,  288,
+      277,  291,  293,  280,  276,  294,  278,  281,  295,  289,
+      290,  279,  292,  291,  296,  291,  293,    0,    0,  294,
+      297,  298,  295,  299,  300,  284,  301,    0,  296,  302,
+      286,  289,  285,  288,  297,  298,  304,  299,  300,  303,
+      301,  290,    0,  302,  305,  307,  296,    0,  292,  306,
+
+      304,  308,  309,  303,  294,  310,  297,  311,  305,  307,
+        0,  298,  312,  306,  313,  308,  309,    0,    0,  310,
+        0,  311,  299,  314,  301,  303,  312,  300,  313,  302,
+      316,  306,  304,    0,  305,  308,  315,  314,  317,  310,
+      318,  311,  320,  319,  316,  309,    0,  312,  307,  323,
+      315,  325,  317,  326,  318,  327,  320,  319,  321,  321,
+      321,  321,  324,  323,    0,  325,  328,  326,  314,  327,
+        0,    0,    0,    0,  315,    0,  324,  329,  320,    0,
+      328,  316,  319,  322,  322,  322,  322,  323,  330,  327,
+      318,  329,  331,  324,  332,  322,  326,  322,  333,  325,
+
+      334,    0,  330,  335,  336,  338,  331,  332,  332,  337,
+      322,  339,  333,  341,  334,  328,  322,  335,  336,  338,
+      329,  340,  342,  337,  330,  339,    0,  341,  343,  344,
+      345,    0,  331,  346,    0,  340,  342,  335,  347,    0,
+      336,  337,  343,  344,  345,  334,  341,  346,  333,  348,
+      338,    0,  347,  340,  349,  350,  339,  351,  352,  343,
+      353,    0,  354,  348,  355,  346,  356,    0,  349,  350,
+      357,  351,  352,  358,  353,  345,  354,  359,  355,    0,
+      356,  347,  360,    0,  357,  348,    0,  358,    0,  361,
+      362,  359,  363,  351,  352,    0,  360,  349,  350,  364,
+
+      355,  365,  357,  361,  362,    0,  363,  353,  366,  354,
+      367,  356,  368,  364,    0,  365,  370,  371,  369,  360,
+      372,  373,  366,  374,  367,  361,  368,  359,  369,  375,
+      370,  371,  369,  376,  372,  373,  377,  374,  378,  379,
+      380,    0,    0,  375,  367,  381,  364,  376,    0,  382,
+      377,  365,  378,  379,  380,  372,  366,  374,  373,  381,
+      383,  370,  368,  382,    0,  376,  384,    0,  385,    0,
+      378,  386,  375,  387,  383,  388,  381,  390,  379,  389,
+      384,  381,  385,  380,    0,  386,  377,  387,  391,  388,
+      392,  390,  393,  389,    0,  394,    0,    0,  384,  397,
+
+      395,  396,  391,  386,  392,  383,  393,  398,  385,  394,
+      389,  397,  399,  397,  395,  396,  401,  390,  400,    0,
+      388,  398,  402,  404,    0,  403,  399,  405,    0,  408,
+      401,    0,  400,  392,    0,  406,  402,  404,  391,  403,
+      407,  405,  393,  408,  394,  395,  396,  409,  399,  406,
+      400,  410,  411,  412,  407,  398,    0,  413,    0,  404,
+        0,  409,  401,    0,  414,  410,  411,  412,  415,  416,
+      405,  413,  402,    0,  403,  407,  406,  407,  414,  417,
+      408,  418,  415,  416,  419,  407,  410,  407,  420,  412,
+      421,  422,    0,  417,  423,  418,  409,  424,  419,  425,
+
+      426,    0,  420,  427,  421,  422,  411,  413,  423,  428,
+      429,  424,  430,  425,  426,  416,  431,  427,  432,  433,
+      434,    0,  435,  428,  429,  417,  430,  436,  437,  424,
+      431,    0,  432,  433,  434,  425,  435,  438,  420,  439,
+      440,  436,  437,  441,  443,  428,  442,  444,  445,    0,
+      426,  438,  446,  439,  440,  447,  448,  441,  443,  449,
+      442,  444,  445,  434,  450,  451,  446,    0,    0,  447,
+      448,  439,  435,  449,  452,    0,    0,  437,  450,  451,
+      441,  445,  442,  453,    0,    0,  440,  443,  452,  448,
+      444,  454,  455,  456,  457,  458,  460,  453,  446,  449,
+
+      459,  461,  462,  463,  464,  454,  455,  456,  457,  458,
+      460,  465,  466,    0,  459,  461,  462,  463,  464,    0,
+      467,  452,    0,    0,    0,  465,  466,  454,  468,  457,
+      471,  469,  453,  456,  467,  470,  460,  459,  458,  472,
+      464,  461,  468,  465,  471,  469,  463,  465,  473,  470,
+      474,  475,  466,  472,  476,  477,  478,    0,  479,  480,
+      481,  482,  473,  483,  474,  475,  467,  469,  476,  477,
+      478,  470,  479,  480,  481,  482,  468,  483,  484,  485,
+      486,  487,  488,    0,  489,    0,  490,  491,    0,  477,
+      478,  493,  484,  485,  486,  487,  488,  483,  489,  475,
+
+      490,  491,  476,    0,  492,  493,  494,  495,  481,  496,
+      498,  500,  501,  486,  480,  497,    0,  488,  492,  499,
+      494,  495,  490,  496,  498,  500,  501,  484,  485,  497,
+      491,  502,    0,  499,  503,    0,    0,    0,  504,  505,
+        0,  492,  493,  495,  498,  502,  497,  506,  503,  496,
+      499,  494,  504,  505,  500,  507,  508,  509,  511,    0,
+        0,  506,  510,  512,  513,  514,    0,  515,  517,  507,
+      508,  509,  511,  505,  502,  516,  510,  512,  513,  514,
+      503,  515,  517,    0,  518,    0,  519,  520,  509,  516,
+        0,  521,  507,  522,  512,  523,    0,  506,  518,  517,
+
+      519,  520,  524,  525,  507,  521,  515,  522,  510,  523,
+      508,  516,  526,  527,  513,  514,  524,  525,  528,  529,
+        0,  530,  532,  531,  533,  519,  526,  527,  534,    0,
+      535,  536,  528,  529,  522,  530,  532,  531,  533,  525,
+      521,    0,  534,  526,  535,  536,  537,  538,  539,  528,
+      540,  541,    0,  529,  531,  533,  542,  543,    0,  534,
+      537,  538,  539,  527,  540,  541,  535,  530,  544,  545,
+      542,  543,  532,    0,  546,  547,  536,  548,    0,  538,
+      539,  549,  544,  545,  550,  551,  552,  541,  546,  547,
+      540,  548,  542,  553,  554,  549,  537,    0,  550,  551,
+
+      552,    0,  555,  556,  543,  558,    0,  553,  554,  559,
+        0,  547,  560,  561,  544,  549,  555,  556,  557,  558,
+      557,  562,  552,  559,  550,  554,  560,  561,  563,    0,
+      564,  565,  557,  566,  567,  562,    0,  568,  555,  569,
+      570,    0,  563,  560,  564,  565,  571,  566,  567,  572,
+      558,  568,  562,  569,  570,  556,  573,  574,  575,  563,
+      571,  564,  577,  572,  576,  583,  578,  579,    0,  581,
+      573,  574,  575,    0,  569,  568,  577,  582,  576,  583,
+      578,  579,  571,  581,    0,  567,    0,  584,  585,  574,
+        0,  582,  586,  587,  570,  588,  572,  578,  576,  579,
+
+      581,  584,  585,  575,  573,  589,  586,  587,  582,  588,
+      590,  591,  592,  593,  595,  594,  601,  597,  584,  589,
+      596,    0,  602,  600,  590,  591,  592,  593,  595,  594,
+      601,  597,  603,    0,  596,  586,  602,  600,  587,    0,
+        0,    0,  604,  605,    0,  606,  603,  591,  597,    0,
+        0,  596,  589,  594,  600,  596,  604,  605,  590,  606,
+      607,  592,  608,  593,  595,  609,  610,  611,    0,  612,
+      613,  614,  615,  616,  607,  605,  608,  617,  604,  609,
+      610,  611,  603,  612,  613,  614,  615,  616,  618,    0,
+        0,  617,    0,  619,  620,  606,  621,  622,  623,  624,
+
+        0,  609,  618,  614,  616,  607,  613,  619,  620,  625,
+      621,  622,  623,  624,  614,  626,  627,  628,  629,    0,
+        0,  630,  631,  625,  632,  617,  633,  634,  635,  626,
+      627,  628,  629,  618,  621,  630,  631,  637,  632,  624,
+      633,  634,  635,  636,  622,  638,  623,  639,  619,  641,
+        0,  637,  640,    0,  642,    0,  625,  636,  643,  638,
+      631,  639,    0,  641,  629,  627,  640,  634,  642,  630,
+      644,  645,  643,  632,  633,  646,  635,  647,  648,  636,
+      649,    0,  650,  651,  644,  645,  652,  653,  642,  646,
+        0,  647,  648,  639,  649,  638,  650,  651,  640,  654,
+
+      652,  653,    0,    0,  641,  655,  657,  656,    0,  647,
+      658,  659,    0,  654,  648,    0,  645,  644,    0,  655,
+      657,  656,  652,    0,  658,  659,    0,    0,    0,    0,
+        0,  651,  650,    0,  654,    0,    0,  653,  656,    0,
+        0,  658,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      655,  661,  661,  661,  661,  661,  661,  661,  662,  662,
+        0,  662,  662,  662,  662,  663,    0,    0,  663,  663,
+      663,  664,  664,  665,  665,  666,  666,  666,  667,  667,
+      668,  668,  668,  668,  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,  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
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1200,6 +1080,7 @@ char *yytext;
 #line 10 "lexer.l"
 import "ecdefs"
 #define YYLTYPE Location
+#define YY_NEVER_INTERACTIVE 1    // Avoid calling isatty on eC File object
 
 #include "grammar.h"
 
@@ -1245,7 +1126,7 @@ int include_stack_ptr = 0;
 #define uint _uint
 default:
 
-#line 1249 "lexer.ec"
+#line 1130 "lexer.ec"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1396,7 +1277,7 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
 
-#line 59 "lexer.l"
+#line 60 "lexer.l"
 
 
 
@@ -1405,7 +1286,7 @@ YY_DECL
    expression_yylloc.start = expression_yylloc.end; 
 
 
-#line 1409 "lexer.ec"
+#line 1290 "lexer.ec"
 
        if ( yy_init )
                {
@@ -1456,13 +1337,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 737 )
+                               if ( yy_current_state >= 661 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 2592 );
+               while ( yy_base[yy_current_state] != 2195 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1490,107 +1371,107 @@ do_action:    /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 67 "lexer.l"
+#line 68 "lexer.l"
 { preprocessor(); }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 68 "lexer.l"
+#line 69 "lexer.l"
 { comment(); }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 69 "lexer.l"
+#line 70 "lexer.l"
 { commentCPP(); }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 71 "lexer.l"
+#line 72 "lexer.l"
 { return(AUTO); }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 72 "lexer.l"
+#line 73 "lexer.l"
 { return(BREAK); }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 73 "lexer.l"
+#line 74 "lexer.l"
 { return(CASE); }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 74 "lexer.l"
+#line 75 "lexer.l"
 { return(CHAR); }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 75 "lexer.l"
+#line 76 "lexer.l"
 { return(CONST); }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 76 "lexer.l"
+#line 77 "lexer.l"
 { return(CONTINUE); }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 77 "lexer.l"
+#line 78 "lexer.l"
 { return(DEFAULT); }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 78 "lexer.l"
+#line 79 "lexer.l"
 { return(DO); }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 79 "lexer.l"
+#line 80 "lexer.l"
 { return(DOUBLE); }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 80 "lexer.l"
+#line 81 "lexer.l"
 { return(ELSE); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 81 "lexer.l"
+#line 82 "lexer.l"
 { return(ENUM); }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 82 "lexer.l"
+#line 83 "lexer.l"
 { return(EXTERN); }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 83 "lexer.l"
+#line 84 "lexer.l"
 { return(FLOAT); }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 84 "lexer.l"
+#line 85 "lexer.l"
 { return(FOR); }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 85 "lexer.l"
+#line 86 "lexer.l"
 { return(GOTO); }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 86 "lexer.l"
+#line 87 "lexer.l"
 { return(IF); }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 87 "lexer.l"
+#line 88 "lexer.l"
 { return(INT); }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 88 "lexer.l"
+#line 89 "lexer.l"
 { return(UINT); }
        YY_BREAK
 /* "uint16"            { return(UINT16); } */
@@ -1598,704 +1479,739 @@ YY_RULE_SETUP
 /* "bool"              { return(BOOL_TOKEN); } */
 case 22:
 YY_RULE_SETUP
-#line 92 "lexer.l"
+#line 93 "lexer.l"
 { return(LONG); }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 93 "lexer.l"
+#line 94 "lexer.l"
 { return(REGISTER); }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 94 "lexer.l"
+#line 95 "lexer.l"
 { return(RETURN); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 95 "lexer.l"
+#line 96 "lexer.l"
 { return(SHORT); }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 96 "lexer.l"
+#line 97 "lexer.l"
 { return(SIGNED); }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 97 "lexer.l"
+#line 98 "lexer.l"
 { return(SIGNED); }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 98 "lexer.l"
-{ return(SIZEOF); }
+#line 99 "lexer.l"
+{ return(SIGNED); }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 99 "lexer.l"
-{ return(STATIC); }
+#line 100 "lexer.l"
+{ return(SIZEOF); }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 100 "lexer.l"
-{ return(STRUCT); }
+#line 101 "lexer.l"
+{ return(ALIGNOF); }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 101 "lexer.l"
-{ return(SWITCH); }
+#line 102 "lexer.l"
+{ return(STATIC); }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 102 "lexer.l"
-{ return(TYPEDEF); }
+#line 103 "lexer.l"
+{ return(STRUCT); }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 103 "lexer.l"
-{ return(UNION); }
+#line 104 "lexer.l"
+{ return(SWITCH); }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 104 "lexer.l"
-{ return(UNSIGNED); }
+#line 105 "lexer.l"
+{ return(TYPEDEF); }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 105 "lexer.l"
-{ return(VOID); }
+#line 106 "lexer.l"
+{ return(UNION); }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 106 "lexer.l"
-{ return(VOLATILE); }
+#line 107 "lexer.l"
+{ return(UNSIGNED); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 107 "lexer.l"
-{ return(VOLATILE); }
+#line 108 "lexer.l"
+{ return(VOID); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 108 "lexer.l"
+#line 109 "lexer.l"
 { return(VOLATILE); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 109 "lexer.l"
-{ return(WHILE); }
+#line 110 "lexer.l"
+{ return(VOLATILE); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 111 "lexer.l"
-{ return(PROPERTY); }
+{ return(VOLATILE); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 112 "lexer.l"
-{ return(SETPROP); }    // TODO: Don't make this a keyword...
+{ return(WHILE); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 113 "lexer.l"
-{ return(GETPROP); }    // TODO: Don't make this a keyword...
+#line 114 "lexer.l"
+{ return(PROPERTY); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 114 "lexer.l"
-{ return(ISPROPSET); }    // TODO: Don't make this a keyword...
+#line 115 "lexer.l"
+{ return(SETPROP); }    // TODO: Don't make this a keyword...
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 115 "lexer.l"
-{ return(CLASS); }
+#line 116 "lexer.l"
+{ return(GETPROP); }    // TODO: Don't make this a keyword...
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 116 "lexer.l"
-{ return(THISCLASS); }
+#line 117 "lexer.l"
+{ return(ISPROPSET); }    // TODO: Don't make this a keyword...
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 117 "lexer.l"
-{ return(VIRTUAL); }
+#line 118 "lexer.l"
+{ return(CLASS); }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 118 "lexer.l"
-{ return(DELETE); }
+#line 119 "lexer.l"
+{ return(THISCLASS); }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 119 "lexer.l"
-{ return(NEWOP); }
+#line 120 "lexer.l"
+{ return(VIRTUAL); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 120 "lexer.l"
-{ return(NEW0OP); }
+#line 121 "lexer.l"
+{ return(DELETE); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 121 "lexer.l"
-{ return(RENEW); }
+#line 122 "lexer.l"
+{ return(NEWOP); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 122 "lexer.l"
-{ return(RENEW0); }
+#line 123 "lexer.l"
+{ return(NEW0OP); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 123 "lexer.l"
-{ return(IMPORT); }
+#line 124 "lexer.l"
+{ return(RENEW); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 124 "lexer.l"
-{ return(DEFINE); }
+#line 125 "lexer.l"
+{ return(RENEW0); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 125 "lexer.l"
-{ return(INT64); }
+#line 126 "lexer.l"
+{ return(IMPORT); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 126 "lexer.l"
-{ return(INT64); }
+#line 127 "lexer.l"
+{ return(DEFINE); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 127 "lexer.l"
-{ return(VALIST); }
+#line 128 "lexer.l"
+{ return(INT64); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 128 "lexer.l"
-{ return(VAARG); }
+#line 129 "lexer.l"
+{ return(INT64); }
        YY_BREAK
-/* "__attribute__".?"(("({D}|{L})*"))" { return(EXT_ATTRIB); } */
-/* DID I MEAN? "__attribute__"" "*"(("" "*({D}|{L})*" "*("("({D}|{L})*(" "*","" "*({D}|{L})*)*" "*")")?" "*"))" { return(EXT_ATTRIB); } */
 case 58:
 YY_RULE_SETUP
-#line 134 "lexer.l"
-{ return(EXT_ATTRIB); }
+#line 130 "lexer.l"
+{ return(VALIST); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 135 "lexer.l"
-{ return(EXT_ATTRIB); }
+#line 131 "lexer.l"
+{ return(VAARG); }
        YY_BREAK
+/* "__attribute__".?"(("({D}|{L})*"))" { return(EXT_ATTRIB); } */
+/* DID I MEAN? "__attribute__"" "*"(("" "*({D}|{L})*" "*("("({D}|{L})*(" "*","" "*({D}|{L})*)*" "*")")?" "*"))" { return(EXT_ATTRIB); } */
+/*
+ "__attribute_deprecated__"(" "*)"(("(" "*)({D}|{L})*(" "*)("("({D}|{L}|\")*((" "*)","(" "*)({D}|{L}|\")*)*(" "*)")")?(" "*)(","(" "*)({D}|{L})*(" "*)("("({D}|{L}|\")*((" "*)","(" "*)({D}|{L}|\")*)*(" "*)")")?(" "*))*"))" { return(EXT_ATTRIB); }
+ "__attribute__"           (" "*)"(("(" "*)({D}|{L})*(" "*)("("({D}|{L}|\")*((" "*)","(" "*)({D}|{L}|\")*)*(" "*)")")?(" "*)(","(" "*)({D}|{L})*(" "*)("("({D}|{L}|\")*((" "*)","(" "*)({D}|{L}|\")*)*(" "*)")")?(" "*))*"))" { return(EXT_ATTRIB); }
+ "__attribute"             (" "*)"(("(" "*)({D}|{L})*(" "*)("("({D}|{L}|\")*((" "*)","(" "*)({D}|{L}|\")*)*(" "*)")")?(" "*)(","(" "*)({D}|{L})*(" "*)("("({D}|{L}|\")*((" "*)","(" "*)({D}|{L}|\")*)*(" "*)")")?(" "*))*"))" { return(EXT_ATTRIB); }
+ */
+/*
+ [__attribute__] [spaces]
+   [((] [spaces] 
+      [digits | letters] [spaces]
+         ( [(]  [digits or letters or "]  ( [spaces] [,] [spaces] [digits or letters or "] )*  [spaces]  [)] )?
+      [spaces]
+      ( [,] [spaces]  [digits or letters]  [spaces]
+         ( [(]  [digits or letters or "]
+            ( [spaces] [,] [spaces] [digits or letters or "] )*  [spaces] [)]
+         )? [spaces] 
+      )*
+   [))]
+ */
+/* "__attribute__".?"((".?({D}|{L})*.?("("({D}|{L})*(.?",".?({D}|{L})*)*.?")")?.?"))" { return(EXT_ATTRIB); } */
+/* "__attribute".?"((".?({D}|{L})*.?("("({D}|{L})*(.?",".?({D}|{L})*)*.?")")?.?"))" { return(EXT_ATTRIB); }*/
 case 60:
 YY_RULE_SETUP
-#line 136 "lexer.l"
-{ return(EXT_ATTRIB); }
+#line 158 "lexer.l"
+{ return ATTRIB_DEP; }
        YY_BREAK
-/* "__attribute__".?"((".?({D}|{L})*.?("("({D}|{L})*(.?",".?({D}|{L})*)*.?")")?.?"))" { return(EXT_ATTRIB); } */
-/* "__attribute".?"((".?({D}|{L})*.?("("({D}|{L})*(.?",".?({D}|{L})*)*.?")")?.?"))" { return(EXT_ATTRIB); }*/
 case 61:
 YY_RULE_SETUP
-#line 141 "lexer.l"
-{ return(EXT_STORAGE); }
+#line 159 "lexer.l"
+{ return ATTRIB; }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 142 "lexer.l"
-{ return(EXT_STORAGE); }
+#line 160 "lexer.l"
+{ return __ATTRIB; }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 143 "lexer.l"
+#line 162 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 144 "lexer.l"
+#line 163 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 145 "lexer.l"
+#line 164 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 146 "lexer.l"
+#line 165 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 147 "lexer.l"
+#line 166 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 148 "lexer.l"
-{ return(EXT_DECL); }
+#line 167 "lexer.l"
+{ return(EXT_STORAGE); }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 149 "lexer.l"
-{ return(EXT_DECL); }
+#line 168 "lexer.l"
+{ return(EXT_STORAGE); }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 150 "lexer.l"
+#line 169 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 151 "lexer.l"
+#line 170 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 152 "lexer.l"
+#line 171 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 153 "lexer.l"
+#line 172 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 154 "lexer.l"
+#line 173 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 155 "lexer.l"
+#line 174 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 156 "lexer.l"
-{ return(PUBLIC); }
+#line 175 "lexer.l"
+{ return(EXT_DECL); }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 157 "lexer.l"
-{ return(PRIVATE); }
+#line 176 "lexer.l"
+{ return(EXT_DECL); }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 158 "lexer.l"
-{ return(TYPED_OBJECT); }
+#line 177 "lexer.l"
+{ return(PUBLIC); }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 159 "lexer.l"
-{ return(ANY_OBJECT); }
+#line 178 "lexer.l"
+{ return(PRIVATE); }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 160 "lexer.l"
-{ return(_INCREF); }
+#line 179 "lexer.l"
+{ return(TYPED_OBJECT); }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 161 "lexer.l"
-{ return(EXTENSION); }
+#line 180 "lexer.l"
+{ return(ANY_OBJECT); }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 162 "lexer.l"
-{ return(EXTENSION); }
+#line 181 "lexer.l"
+{ return(_INCREF); }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 163 "lexer.l"
-{ return(ASM); }
+#line 182 "lexer.l"
+{ return(EXTENSION); }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 164 "lexer.l"
-{ return(ASM); }
+#line 183 "lexer.l"
+{ return(EXTENSION); }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 165 "lexer.l"
+#line 184 "lexer.l"
 { return(ASM); }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 166 "lexer.l"
-{ return(TYPEOF); }
+#line 185 "lexer.l"
+{ return(ASM); }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 167 "lexer.l"
-{ return(WATCH); }
+#line 186 "lexer.l"
+{ return(ASM); }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 168 "lexer.l"
-{ return(STOPWATCHING); }
+#line 187 "lexer.l"
+{ return(TYPEOF); }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 169 "lexer.l"
-{ return(FIREWATCHERS); }
+#line 188 "lexer.l"
+{ return(WATCH); }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 170 "lexer.l"
-{ return(WATCHABLE); }
+#line 189 "lexer.l"
+{ return(STOPWATCHING); }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 171 "lexer.l"
-{ return(CLASS_DESIGNER); }
+#line 190 "lexer.l"
+{ return(FIREWATCHERS); }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 172 "lexer.l"
-{ return(CLASS_NO_EXPANSION); }
+#line 191 "lexer.l"
+{ return(WATCHABLE); }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 173 "lexer.l"
-{ return(CLASS_FIXED); }
+#line 192 "lexer.l"
+{ return(CLASS_DESIGNER); }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 174 "lexer.l"
-{ return(CLASS_DEFAULT_PROPERTY); }
+#line 193 "lexer.l"
+{ return(CLASS_NO_EXPANSION); }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 175 "lexer.l"
-{ return(PROPERTY_CATEGORY); }
+#line 194 "lexer.l"
+{ return(CLASS_FIXED); }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 176 "lexer.l"
-{ return(CLASS_DATA); }
+#line 195 "lexer.l"
+{ return(CLASS_DEFAULT_PROPERTY); }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 177 "lexer.l"
-{ return(CLASS_PROPERTY); }
+#line 196 "lexer.l"
+{ return(PROPERTY_CATEGORY); }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 178 "lexer.l"
-{ return(SUBCLASS); }
+#line 197 "lexer.l"
+{ return(CLASS_DATA); }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 179 "lexer.l"
-{ return(NAMESPACE); }
+#line 198 "lexer.l"
+{ return(CLASS_PROPERTY); }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 180 "lexer.l"
-{ return(DBTABLE); }
+#line 199 "lexer.l"
+{ return(SUBCLASS); }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 181 "lexer.l"
-{ return(DBFIELD); }
+#line 200 "lexer.l"
+{ return(NAMESPACE); }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 182 "lexer.l"
-{ return(DBINDEX); }
+#line 201 "lexer.l"
+{ return(DBTABLE); }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 183 "lexer.l"
-{ return(DATABASE_OPEN); }
+#line 202 "lexer.l"
+{ return(DBFIELD); }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 185 "lexer.l"
-{ return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }  // ("::"|(({IDENT}"::")*)){IDENT}  { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }
+#line 203 "lexer.l"
+{ return(DBINDEX); }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 187 "lexer.l"
-{ return(CONSTANT); }
+#line 204 "lexer.l"
+{ return(DATABASE_OPEN); }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 188 "lexer.l"
-{ return(CONSTANT); }
+#line 206 "lexer.l"
+{ return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }  // ("::"|(({IDENT}"::")*)){IDENT}  { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 189 "lexer.l"
+#line 208 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 190 "lexer.l"
+#line 209 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 192 "lexer.l"
+#line 210 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 193 "lexer.l"
+#line 211 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 194 "lexer.l"
+#line 213 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 196 "lexer.l"
-{ return(STRING_LITERAL); }
+#line 214 "lexer.l"
+{ return(CONSTANT); }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 198 "lexer.l"
-{ return(ELLIPSIS); }
+#line 215 "lexer.l"
+{ return(CONSTANT); }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 199 "lexer.l"
-{ return(RIGHT_ASSIGN); }
+#line 217 "lexer.l"
+{ return(STRING_LITERAL); }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 200 "lexer.l"
-{ return(LEFT_ASSIGN); }
+#line 219 "lexer.l"
+{ return(ELLIPSIS); }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 201 "lexer.l"
-{ return(ADD_ASSIGN); }
+#line 220 "lexer.l"
+{ return(RIGHT_ASSIGN); }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 202 "lexer.l"
-{ return(SUB_ASSIGN); }
+#line 221 "lexer.l"
+{ return(LEFT_ASSIGN); }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 203 "lexer.l"
-{ return(MUL_ASSIGN); }
+#line 222 "lexer.l"
+{ return(ADD_ASSIGN); }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 204 "lexer.l"
-{ return(DIV_ASSIGN); }
+#line 223 "lexer.l"
+{ return(SUB_ASSIGN); }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 205 "lexer.l"
-{ return(MOD_ASSIGN); }
+#line 224 "lexer.l"
+{ return(MUL_ASSIGN); }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 206 "lexer.l"
-{ return(AND_ASSIGN); }
+#line 225 "lexer.l"
+{ return(DIV_ASSIGN); }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 207 "lexer.l"
-{ return(XOR_ASSIGN); }
+#line 226 "lexer.l"
+{ return(MOD_ASSIGN); }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 208 "lexer.l"
-{ return(OR_ASSIGN); }
+#line 227 "lexer.l"
+{ return(AND_ASSIGN); }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 209 "lexer.l"
-{ return(RIGHT_OP); }
+#line 228 "lexer.l"
+{ return(XOR_ASSIGN); }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 210 "lexer.l"
-{ return(LEFT_OP); }
+#line 229 "lexer.l"
+{ return(OR_ASSIGN); }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 211 "lexer.l"
-{ return(INC_OP); }
+#line 230 "lexer.l"
+{ return(RIGHT_OP); }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 212 "lexer.l"
-{ return(DEC_OP); }
+#line 231 "lexer.l"
+{ return(LEFT_OP); }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 213 "lexer.l"
-{ return(PTR_OP); }
+#line 232 "lexer.l"
+{ return(INC_OP); }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 214 "lexer.l"
-{ return(AND_OP); }
+#line 233 "lexer.l"
+{ return(DEC_OP); }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 215 "lexer.l"
-{ return(OR_OP); }
+#line 234 "lexer.l"
+{ return(PTR_OP); }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 216 "lexer.l"
-{ return(LE_OP); }
+#line 235 "lexer.l"
+{ return(AND_OP); }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 217 "lexer.l"
-{ return(GE_OP); }
+#line 236 "lexer.l"
+{ return(OR_OP); }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 218 "lexer.l"
-{ return(EQ_OP); }
+#line 237 "lexer.l"
+{ return(LE_OP); }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 219 "lexer.l"
+#line 238 "lexer.l"
+{ return(GE_OP); }
+       YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 239 "lexer.l"
+{ return(EQ_OP); }
+       YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 240 "lexer.l"
 { return(NE_OP); }
        YY_BREAK
 /* "::"        { return(CLASS_OP); } */
-case 135:
+case 137:
 YY_RULE_SETUP
-#line 221 "lexer.l"
+#line 242 "lexer.l"
 { return(';'); }
        YY_BREAK
-case 136:
+case 138:
 YY_RULE_SETUP
-#line 222 "lexer.l"
+#line 243 "lexer.l"
 { return('{'); }
        YY_BREAK
-case 137:
+case 139:
 YY_RULE_SETUP
-#line 223 "lexer.l"
+#line 244 "lexer.l"
 { return('}'); }
        YY_BREAK
-case 138:
+case 140:
 YY_RULE_SETUP
-#line 224 "lexer.l"
+#line 245 "lexer.l"
 { return(','); }
        YY_BREAK
-case 139:
+case 141:
 YY_RULE_SETUP
-#line 225 "lexer.l"
+#line 246 "lexer.l"
 { return(':'); }
        YY_BREAK
-case 140:
+case 142:
 YY_RULE_SETUP
-#line 226 "lexer.l"
+#line 247 "lexer.l"
 { return('='); }
        YY_BREAK
-case 141:
+case 143:
 YY_RULE_SETUP
-#line 227 "lexer.l"
+#line 248 "lexer.l"
 { return('('); }
        YY_BREAK
-case 142:
+case 144:
 YY_RULE_SETUP
-#line 228 "lexer.l"
+#line 249 "lexer.l"
 { return(')'); }
        YY_BREAK
-case 143:
+case 145:
 YY_RULE_SETUP
-#line 229 "lexer.l"
+#line 250 "lexer.l"
 { return('['); }
        YY_BREAK
-case 144:
+case 146:
 YY_RULE_SETUP
-#line 230 "lexer.l"
+#line 251 "lexer.l"
 { return(']'); }
        YY_BREAK
-case 145:
+case 147:
 YY_RULE_SETUP
-#line 231 "lexer.l"
+#line 252 "lexer.l"
 { return('.'); }
        YY_BREAK
-case 146:
+case 148:
 YY_RULE_SETUP
-#line 232 "lexer.l"
+#line 253 "lexer.l"
 { return('&'); }
        YY_BREAK
-case 147:
+case 149:
 YY_RULE_SETUP
-#line 233 "lexer.l"
+#line 254 "lexer.l"
 { return('!'); }
        YY_BREAK
-case 148:
+case 150:
 YY_RULE_SETUP
-#line 234 "lexer.l"
+#line 255 "lexer.l"
 { return('~'); }
        YY_BREAK
-case 149:
+case 151:
 YY_RULE_SETUP
-#line 235 "lexer.l"
+#line 256 "lexer.l"
 { return('-'); }
        YY_BREAK
-case 150:
+case 152:
 YY_RULE_SETUP
-#line 236 "lexer.l"
+#line 257 "lexer.l"
 { return('+'); }
        YY_BREAK
-case 151:
+case 153:
 YY_RULE_SETUP
-#line 237 "lexer.l"
+#line 258 "lexer.l"
 { return('*'); }
        YY_BREAK
-case 152:
+case 154:
 YY_RULE_SETUP
-#line 238 "lexer.l"
+#line 259 "lexer.l"
 { return('/'); }
        YY_BREAK
-case 153:
+case 155:
 YY_RULE_SETUP
-#line 239 "lexer.l"
+#line 260 "lexer.l"
 { return('%'); }
        YY_BREAK
-case 154:
+case 156:
 YY_RULE_SETUP
-#line 240 "lexer.l"
+#line 261 "lexer.l"
 { return('<'); }
        YY_BREAK
-case 155:
+case 157:
 YY_RULE_SETUP
-#line 241 "lexer.l"
+#line 262 "lexer.l"
 { return('>'); }
        YY_BREAK
-case 156:
+case 158:
 YY_RULE_SETUP
-#line 242 "lexer.l"
+#line 263 "lexer.l"
 { return('^'); }
        YY_BREAK
-case 157:
+case 159:
 YY_RULE_SETUP
-#line 243 "lexer.l"
+#line 264 "lexer.l"
 { return('|'); }
        YY_BREAK
-case 158:
+case 160:
 YY_RULE_SETUP
-#line 244 "lexer.l"
+#line 265 "lexer.l"
 { return('?'); }
        YY_BREAK
-case 159:
+case 161:
 YY_RULE_SETUP
-#line 245 "lexer.l"
+#line 266 "lexer.l"
 { return('$'); }
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 247 "lexer.l"
+#line 268 "lexer.l"
 {
+      while(include_stack_ptr && !fileStack[include_stack_ptr-1])
+      {
+         --include_stack_ptr;
+         defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+      }
+
       if ( --include_stack_ptr < 0 )
       {
+         include_stack_ptr = 0;
          yyterminate();
       }
       else
@@ -2311,40 +2227,40 @@ case YY_STATE_EOF(INITIAL):
       }
    }
        YY_BREAK
-case 160:
+case 162:
 YY_RULE_SETUP
-#line 266 "lexer.l"
+#line 294 "lexer.l"
 { yylloc.start = yylloc.end; type_yylloc.start = type_yylloc.end; expression_yylloc.start = expression_yylloc.end;}
        YY_BREAK
-case 161:
+case 163:
 YY_RULE_SETUP
-#line 267 "lexer.l"
+#line 295 "lexer.l"
 { 
    yylloc.end.charPos = 1; yylloc.end.line += yyleng; yylloc.start = yylloc.end; 
    type_yylloc.end.charPos = 1; type_yylloc.end.line += yyleng; type_yylloc.start = type_yylloc.end; 
    expression_yylloc.end.charPos = 1; expression_yylloc.end.line += yyleng; expression_yylloc.start = expression_yylloc.end; 
    }
        YY_BREAK
-case 162:
+case 164:
 YY_RULE_SETUP
-#line 272 "lexer.l"
+#line 300 "lexer.l"
 { 
    yylloc.start.charPos++ /*= 3 - (yylloc.start.col % 3)*/; yylloc.end.charPos = yylloc.start.charPos; yylloc.start.pos = yylloc.end.pos; 
    expression_yylloc.start.charPos++ /*= 3 - (expression_yylloc.start.col % 3)*/; expression_yylloc.end.charPos = expression_yylloc.start.charPos; expression_yylloc.start.pos = expression_yylloc.end.pos; 
    type_yylloc.start.charPos++ /*= 3 - (type_yylloc.start.col % 3)*/; type_yylloc.end.charPos = type_yylloc.start.charPos; type_yylloc.start.pos = type_yylloc.end.pos; 
    }
        YY_BREAK
-case 163:
+case 165:
 YY_RULE_SETUP
-#line 278 "lexer.l"
+#line 306 "lexer.l"
 { yylloc.start = yylloc.end; expression_yylloc.start = expression_yylloc.end;  type_yylloc.start = type_yylloc.end; }
        YY_BREAK
-case 164:
+case 166:
 YY_RULE_SETUP
-#line 280 "lexer.l"
+#line 308 "lexer.l"
 ECHO;
        YY_BREAK
-#line 2348 "lexer.ec"
+#line 2264 "lexer.ec"
 
        case YY_END_OF_BUFFER:
                {
@@ -2634,7 +2550,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 737 )
+                       if ( yy_current_state >= 661 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2669,11 +2585,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 737 )
+               if ( yy_current_state >= 661 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 736);
+       yy_is_jam = (yy_current_state == 660);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -3228,8 +3144,10 @@ int main()
        return 0;
        }
 #endif
-#line 280 "lexer.l"
+#line 308 "lexer.l"
+
 
+private:
 
 yywrap()
 {
@@ -3332,6 +3250,8 @@ int preprocessor()
                char fileName[MAX_LOCATION];
                
                int inOut;
+
+               fileName[0] = 0;
                GetString(&pointer, fileName, MAX_LOCATION);
                inOut = GetValue(&pointer);
                               
@@ -3345,6 +3265,7 @@ int preprocessor()
                   if(!strcmp(extension, "c") || !strcmp(extension, "h"))
                      declMode = defaultDeclMode = defaultAccess;
 
+                  fileStack[include_stack_ptr] = null;
                   include_stack_ptr++;
                }
                else if(inOut == 2)
@@ -3356,7 +3277,11 @@ int preprocessor()
                yylloc.end.charPos = 1;
                yylloc.end.line = lineNumber;
                //yylloc.end.pos -= count;
-               yylloc.end.included = (include_stack_ptr > 0) ? GetIncludeFileID(fileName) : 0;
+
+               if(include_stack_ptr > 0 || (lineNumber && fileName[0]))
+                  yylloc.end.included = GetIncludeFileID(fileName);
+               else
+                  yylloc.end.included = 0;
             }
             /*
             int lineNumber = strtol(line+1, &endPtr, 0);
@@ -3400,7 +3325,7 @@ int preprocessor()
    {
       char includeFile[MAX_LOCATION] = "";
 
-      strcpy(line, line+c);
+      memmove(line, line+c, strlen(line+c)+1);
       TrimLSpaces(line, line);
       if(line[0] == '\"')
       {
@@ -3427,7 +3352,7 @@ int preprocessor()
 
       if ( include_stack_ptr >= MAX_INCLUDE_DEPTH )
       {
-         fprintf( stderr, "Includes nested too deeply" );
+         fprintf( stderr, $"Includes nested too deeply" );
          exit( 1 );
       }
 
@@ -3469,17 +3394,17 @@ public void resetScanner()
    yylloc.start.charPos = yylloc.end.charPos = 1;
    yylloc.start.line = yylloc.end.line = 1;
    yylloc.start.pos = yylloc.end.pos = 0;
-   yylloc.start.included = yylloc.end.included = false;
+   yylloc.start.included = yylloc.end.included = 0;
 
    expression_yylloc.start.charPos = expression_yylloc.end.charPos = 1;
    expression_yylloc.start.line = expression_yylloc.end.line = 1;
    expression_yylloc.start.pos = expression_yylloc.end.pos = 0;
-   expression_yylloc.start.included = expression_yylloc.end.included = false;
+   expression_yylloc.start.included = expression_yylloc.end.included = 0;
 
    type_yylloc.start.charPos = type_yylloc.end.charPos = 1;
    type_yylloc.start.line = type_yylloc.end.line = 1;
    type_yylloc.start.pos = type_yylloc.end.pos = 0;
-   type_yylloc.start.included = type_yylloc.end.included = false;
+   type_yylloc.start.included = type_yylloc.end.included = 0;
 
    include_stack_ptr = 0;
 }
@@ -3491,3 +3416,112 @@ void resetScannerPos(CodePosition pos)
    type_yylloc.start = type_yylloc.end = pos;
    expression_yylloc.start = expression_yylloc.end = pos;
 }
+
+class LexerBackup
+{
+   YYLTYPE yylloc;
+   YYLTYPE type_yylloc;
+   YYLTYPE expression_yylloc;
+
+   AccessMode declMode;
+   AccessMode defaultDeclMode;
+
+   File fileInput;
+   YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+   File fileStack[MAX_INCLUDE_DEPTH];
+   char sourceFileStack[MAX_INCLUDE_DEPTH][MAX_LOCATION];
+   YYLTYPE locStack[MAX_INCLUDE_DEPTH];
+   AccessMode declModeStack[MAX_INCLUDE_DEPTH];
+   int include_stack_ptr;
+   YY_BUFFER_STATE buffer;
+
+   int yy_n_chars;
+   char * yytext_ptr;
+   char * yy_c_buf_p;
+   FILE * yyin;
+   char yy_hold_char;
+   int yychar;
+   int yy_init;
+   int yy_start;
+
+};
+
+LexerBackup pushLexer()
+{
+   LexerBackup backup { };
+
+   backup.yylloc = yylloc;
+   backup.type_yylloc = type_yylloc;
+   backup.expression_yylloc = expression_yylloc;
+   backup.fileInput = fileInput;
+   memcpy(backup.include_stack, include_stack, sizeof(include_stack));
+   memcpy(backup.fileStack, fileStack, sizeof(fileStack));
+   memcpy(backup.sourceFileStack, sourceFileStack, sizeof(sourceFileStack));
+   memcpy(backup.locStack, locStack, sizeof(locStack));
+   memcpy(backup.declModeStack, declModeStack, sizeof(declModeStack));
+   backup.include_stack_ptr = include_stack_ptr;
+   backup.defaultDeclMode = defaultDeclMode;
+   backup.declMode = declMode;
+   backup.buffer = yy_current_buffer;
+
+   backup.yy_n_chars = yy_n_chars;
+   backup.yytext_ptr = yytext_ptr;
+   backup.yy_c_buf_p = yy_c_buf_p;
+   backup.yyin = yyin;
+   backup.yy_hold_char = yy_hold_char;
+   backup.yychar = yychar;
+   backup.yy_init = yy_init;
+   backup.yy_start = yy_start;
+
+   yy_init = 1;
+
+   yy_current_buffer = 0;
+
+   yylloc.start.charPos = yylloc.end.charPos = 1;
+   yylloc.start.line = yylloc.end.line = 1;
+   yylloc.start.pos = yylloc.end.pos = 0;
+   yylloc.start.included = yylloc.end.included = 0;
+
+   expression_yylloc.start.charPos = expression_yylloc.end.charPos = 1;
+   expression_yylloc.start.line = expression_yylloc.end.line = 1;
+   expression_yylloc.start.pos = expression_yylloc.end.pos = 0;
+   expression_yylloc.start.included = expression_yylloc.end.included = 0;
+
+   type_yylloc.start.charPos = type_yylloc.end.charPos = 1;
+   type_yylloc.start.line = type_yylloc.end.line = 1;
+   type_yylloc.start.pos = type_yylloc.end.pos = 0;
+   type_yylloc.start.included = type_yylloc.end.included = 0;
+
+   include_stack_ptr = 0;
+
+   return backup;
+}
+
+void popLexer(LexerBackup backup)
+{
+   yylloc = backup.yylloc;
+   type_yylloc = backup.type_yylloc;
+   expression_yylloc = backup.expression_yylloc;
+   fileInput = backup.fileInput;
+   memcpy(include_stack, backup.include_stack, sizeof(include_stack));
+   memcpy(fileStack, backup.fileStack, sizeof(fileStack));
+   memcpy(sourceFileStack, backup.sourceFileStack, sizeof(sourceFileStack));
+   memcpy(locStack, backup.locStack, sizeof(locStack));
+   memcpy(declModeStack, backup.declModeStack, sizeof(declModeStack));
+   include_stack_ptr = backup.include_stack_ptr;
+   defaultDeclMode = backup.defaultDeclMode;
+   declMode = backup.declMode;
+
+   // yy_switch_to_buffer(backup.buffer);
+   yy_current_buffer = backup.buffer;
+   yy_n_chars = backup.yy_n_chars;
+   yytext_ptr = backup.yytext_ptr;
+   yy_c_buf_p = backup.yy_c_buf_p;
+   yyin = backup.yyin;
+   yy_hold_char = backup.yy_hold_char;
+   yychar = backup.yychar;
+   yy_init = backup.yy_init;
+   yy_start = backup.yy_start;
+
+   delete backup;
+}