]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- config parser changed. Gives some syntax errors closer to where they
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 6 Feb 2009 10:19:16 +0000 (10:19 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 6 Feb 2009 10:19:16 +0000 (10:19 +0000)
  occurred. Does not enforce a space after keyword anymore.
  Does not allow literal newlines inside quoted strings anymore.

git-svn-id: file:///svn/unbound/trunk@1460 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
util/configlexer.c
util/configlexer.lex

index 6c1602533a3356f0bebef6b852a03267ac30c8a8..1c7deee71f2d3800e82c74dfee3f640fb8d8e2ac 100644 (file)
@@ -3,6 +3,9 @@
        - iana portlist updated.
        - fixup EOL in include directive (reported by Paul Wouters).
          You can no longer specify newlines in the names of included files.
+       - config parser changed. Gives some syntax errors closer to where they 
+         occurred. Does not enforce a space after keyword anymore.
+         Does not allow literal newlines inside quoted strings anymore.
 
 5 February 2009: Wouter
        - ldns 1.5.0 rc as tarball included.
index e2d5203bc08568c621993c03d0c77853703ca955..392bbcb53409fe11bd14f10cb3f5b47d57adf760 100644 (file)
@@ -361,8 +361,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 111
-#define YY_END_OF_BUFFER 112
+#define YY_NUM_RULES 113
+#define YY_END_OF_BUFFER 114
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -370,121 +370,123 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1025] =
+static yyconst flex_int16_t yy_accept[1046] =
     {   0,
         1,    1,   95,   95,   99,   99,  103,  103,  107,  107,
-      112,  110,    1,   93,   94,    2,   98,  111,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,   95,   96,  111,
-       97,  111,   99,  100,  101,  111,  106,  103,  104,  105,
-      111,  107,  108,  109,  111,  110,    0,    1,    2,    2,
-        2,    2,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,   95,    0,
-
-       99,    0,  106,    0,  103,  107,    0,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,   50,  110,  110,  110,  110,  110,    6,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-
-      110,  110,  110,  110,  110,  110,  110,  110,   20,  110,
-      110,  110,  110,   12,   13,  110,   15,   14,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,    3,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  102,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,   23,  110,  110,  110,  110,
-
-      110,  110,  110,   24,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,   63,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,   62,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,   21,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-
-       22,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-       17,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,   51,   52,  110,   49,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,    5,  110,
-      110,  110,  110,  110,  110,  110,  110,   65,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,   80,
-       79,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-
-      110,  110,  110,  110,   25,  110,  110,  110,  110,   53,
-      110,  110,  110,  110,  110,   78,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,   42,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,    4,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,   88,  110,   16,  110,
-      110,   55,   56,   54,  110,  110,  110,  110,  110,   61,
-
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,   69,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,   31,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,   60,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,   64,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-       71,  110,  110,  110,  110,   59,  110,   86,  110,  110,
-
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,   32,   33,  110,   38,   74,  110,   81,  110,
-       27,  110,   76,  110,  110,  110,  110,  110,    7,  110,
-       48,   85,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-       66,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,  110,  110,   75,   26,   28,  110,  110,  110,  110,
-      110,   47,  110,  110,  110,   89,  110,  110,  110,  110,
-      110,  110,   45,  110,  110,  110,  110,  110,  110,   91,
-      110,  110,  110,  110,  110,  110,  110,   11,  110,  110,
-
-      110,  110,  110,  110,   10,  110,  110,   29,  110,   90,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-       92,   87,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,   34,  110,  110,  110,  110,  110,   30,  110,  110,
-      110,   67,   68,  110,  110,  110,   70,  110,  110,  110,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,   18,
-      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
-      110,   84,  110,  110,  110,  110,  110,  110,   19,  110,
-        9,  110,  110,   82,   39,  110,  110,  110,   73,   57,
-      110,  110,   41,   44,   40,  110,   35,  110,    8,  110,
-
-      110,   72,  110,  110,  110,   36,  110,   83,  110,  110,
-       58,   43,   37,  110,  110,  110,  110,   46,  110,  110,
-      110,  110,   77,    0
+        1,    1,  114,  111,    1,   93,   93,  112,  111,  112,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,   95,
+       96,   97,  113,   99,  100,  101,  113,  106,  103,  104,
+      105,  113,  113,  107,  108,  109,  113,  110,    1,   94,
+      110,   98,  113,  110,  111,    0,    1,    0,  111,    0,
+        2,    0,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  111,  111,  111,   95,    0,
+       99,    0,  106,    0,  103,  107,    0,  110,    0,  110,
+        0,  110,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  110,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      110,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,   50,  111,
+      111,  111,  111,  111,    6,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  110,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  110,  111,  111,   20,  111,  111,
+      111,  111,   12,   13,  111,   15,   14,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,    3,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  110,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  102,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,   23,  111,  111,  111,  111,
+      111,  111,  111,   24,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,   63,  102,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,   62,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  111,  111,   21,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,   22,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,   17,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,   51,   52,  111,   49,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,    5,
+      111,  111,  111,  111,  111,  111,  111,  111,   65,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+       80,   79,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,   25,  111,  111,  111,  111,
+       53,  111,  111,  111,  111,  111,   78,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,   42,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,    4,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  111,  111,   88,  111,   16,
+      111,  111,   55,   56,   54,  111,  111,  111,  111,  111,
+       61,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,   69,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,   31,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,   60,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,   64,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,   71,  111,  111,  111,  111,   59,  111,   86,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,   32,   33,  111,   38,   74,  111,   81,
+      111,   27,  111,   76,  111,  111,  111,  111,  111,    7,
+      111,   48,   85,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,   66,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,   75,   26,   28,  111,  111,  111,
+      111,  111,   47,  111,  111,  111,   89,  111,  111,  111,
+
+      111,  111,  111,   45,  111,  111,  111,  111,  111,  111,
+       91,  111,  111,  111,  111,  111,  111,  111,   11,  111,
+      111,  111,  111,  111,  111,   10,  111,  111,   29,  111,
+       90,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,   92,   87,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,   34,  111,  111,  111,  111,  111,   30,  111,
+      111,  111,   67,   68,  111,  111,  111,   70,  111,  111,
+      111,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+       18,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,   84,  111,  111,  111,  111,  111,  111,   19,
+
+      111,    9,  111,  111,   82,   39,  111,  111,  111,   73,
+       57,  111,  111,   41,   44,   40,  111,   35,  111,    8,
+      111,  111,   72,  111,  111,  111,   36,  111,   83,  111,
+      111,   58,   43,   37,  111,  111,  111,  111,   46,  111,
+      111,  111,  111,   77,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -521,724 +523,732 @@ static yyconst flex_int32_t yy_ec[256] =
 
 static yyconst flex_int32_t yy_meta[40] =
     {   0,
-        1,    2,    3,    4,    5,    1,    6,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    3,    3,    4,    1,    5,    1,    1,    1,
+        1,    6,    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
     } ;
 
-static yyconst flex_int16_t yy_base[1036] =
+static yyconst flex_int16_t yy_base[1060] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-     2098, 2084,   50, 2099, 2099,   82, 2099,   89,   33,   84,
-       79,   62,   72,   89,   93,   95,   96,  100,  102,  103,
-       49,  105,  111,  113,  127,  122,  130, 2083, 2099, 2099,
-     2099,  146, 2082, 2099, 2099,  115, 2081, 2091, 2099, 2099,
-      155, 2079, 2099, 2099,  148, 2078,  159,  163,    0,  166,
-        0,    0,  159,  161,  125,  154,  163,  112,  170,  167,
-      171,  172,  169,  174,  177,  175,  176,  185,  178,  184,
-      119,  186,  195,  196,  198,  199,  200,  205,  204,  203,
-      206,  210,  207,  212,  213,  215,  214,  221, 2077,  236,
-
-     2076,  238, 2075,  246, 2085, 2073,  250,  243,  244,  230,
-      234,  246,  255,  256,  253,  249,  257,  259,  266,  263,
-      267,  268,  262,  274,  283,  281,  271,  291,  288,  294,
-      295,  296,  298,  279,  297,  300,  301,  302,  305,  306,
-      308,  309,  311,  312,  322,  323,  329,  314,  320,  324,
-      328,  332,  336,  341,   61,  334,  344,  350,  338,  355,
-      353,  362,  343,  345,  351,  359,  361,  365,  367,  368,
-      369,  371,  372,  382,  373,  384,  385,  386,  388,  389,
-      391,  397,  393,  394,  396,  403,  402,  406,  408,  409,
-      410,  429,  415,  414,  416,  425,  417,  418,  419,  427,
-
-      442,  451,  434,  436,  440,  446,  453,  455,  457,  458,
-      459,  461,  465,  462,  472,  473,  480,  464,  478,  481,
-      484, 2072,  486,  482,  488,  489,  492, 2071,  490,  494,
-      493,  500,  491,  497,  505,  507,  517,  508,  514,  511,
-      518,  520,  525,  523,  524,  529,  526,  532,  538,  530,
-      540,  541,  544,  548,  549,  555,  557,  563,  561,  565,
-      566,  568,  574,  573,  570,  567,  576,  578,  582,  579,
-      588,  586,  591,  593,  601,  597,  599,  604,  600,  606,
-      608,  609,  610,  616,  612,  620,  630,  613,  627,  619,
-      618,  626,  637,  638,  640,  642,  635,  643,  645,  646,
-
-      649,  650,  652,  648,  656,  659,  660,  667, 2070,  669,
-      661,  670,  671, 2069, 2068,  421, 2067, 2066,  672,  680,
-      687,  677,  674,  683,  685,  681,  689,  695,  696,  698,
-      693,  703,  714,  702,  719,  704,  716,  712,  721,  709,
-      723,  724,  726,  735,  733,  732,  737,  739, 2065,  734,
-      740,  741,  745,  747,  749,  748,  756,  753,  752,  758,
-      759,  763,  765,  769,  767,  768,  773,  775,  776,  223,
-      794,  777,  780,  778,  779,  787,  788,  790,  786,  806,
-      808,  801,  811,  812,  816, 2064,  822,  818,  819,  820,
-      823,  826,  824,  827,  830, 2063,  834,  832,  836,  840,
-
-      839,  842,  851, 2062,  852,  850,  854,  855,  857,  859,
-      860,  861,  866,  867,  868,  870,  869,  871,  881,  883,
-      877,  885,  887,  888,  893,  890,  891,  894, 2061,  895,
-      901,  898,  897,  899,  905,  907,  915,  912,  916,  918,
-      917,  920,  926,  927,  921,  928,  929,  931,  933,  932,
-      934, 2060,  939,  938,  935,  945,  959,  944,  956,  960,
-      962,  963,  964,  970,  971,  968,  972,  969,  975,  974,
-      980,  981,  984,  986,  988,  990,  996,  998, 1001, 1003,
-      991,  999, 1005, 1008, 1012, 1014, 2059, 1020, 1022, 1024,
-     1016, 1023, 1028, 1029, 1030, 1033, 1031, 1034, 1035, 1037,
-
-     2058, 1041, 1038, 1039, 1043, 1044, 1046, 1045, 1047, 1053,
-     1061, 1062, 1052, 1069, 1056, 1072, 1074, 1080, 1081, 1082,
-     2057, 1084, 1073, 1091, 1088, 1094, 1101, 1085, 1095, 1097,
-     1098, 1099, 1102, 1103, 1105, 1107, 1108, 1109, 1120, 1110,
-     1112, 1127, 1130, 2056, 2055, 1134, 2054, 1128, 1124, 1126,
-     1135, 1137, 1142, 1136, 1143, 1138, 1146, 1145, 2053, 1147,
-     1148, 1153,  550, 1154, 1160, 1157, 1161, 2052, 1158, 1162,
-     1169, 1166, 1171, 1174, 1175, 1182, 1178, 1172, 1176, 1185,
-     1186, 1188, 1194, 1192, 1193, 1195, 1199, 1197, 1202, 2051,
-     2050, 1198, 1203, 1208, 1210, 1226, 1224, 1211, 1215, 1225,
-
-     1227, 1229, 1232, 1230, 2049, 1239, 1240, 1236, 1246, 2048,
-     1237, 1238, 1244, 1250, 1251, 2047, 1252, 1253, 1254, 1260,
-     1258, 1261, 1262, 1273, 1270, 1271, 1275, 1278, 1279, 1284,
-     1285, 1286, 1291, 1293, 1295, 1296, 2046, 1302, 1287, 1303,
-     1300, 1308, 1309, 1301, 1310, 1311, 1312, 1314, 1316, 1317,
-     1319, 1321, 1324, 1322, 1326, 1323, 1329, 2045, 1336, 1343,
-     1334, 1337, 1346, 1347, 1340, 1350, 1352, 1353, 1357, 1359,
-     1365, 1368, 1366, 1364, 1375, 1371, 1377, 1372, 1379, 1380,
-     1382, 1385, 1386, 1388, 1389, 1387, 2044, 1391, 2043, 1398,
-     1400, 2042, 2041, 2040, 1406, 1390, 1404, 1411, 1415, 2039,
-
-     1408, 1416, 1412, 1418, 1419, 1420, 1421, 1422, 1424, 1423,
-     1426, 1435, 1427, 1438, 1437, 1440, 1441, 1447, 1448, 1454,
-     1450, 1451, 1452, 1457, 1462, 1458, 1460, 1463, 1459, 1461,
-     1475, 2038, 1478, 1464, 1473, 1486, 1483, 1480, 1487, 1488,
-     1495, 2037, 1496, 1498, 1500, 1490, 1503, 1506, 1504, 1507,
-     1509, 1511, 1512, 1513, 2036, 1514, 1516, 1518, 1520, 1523,
-     1536, 1525, 1540, 1542, 1527, 1544, 2035, 1545, 1548, 1530,
-     1552, 1515, 1553, 1554, 1555, 1561, 1558, 1563, 1565, 1566,
-     1567, 1569, 1570, 1572, 1573, 1574, 1576, 1579, 1587, 1580,
-     2034, 1583, 1586, 1590, 1599, 2033, 1596, 2032, 1597, 1601,
-
-     1605, 1598, 1607, 1609, 1611, 1612, 1618, 1614, 1616, 1619,
-     1615, 1625, 2031, 2030, 1621, 2029, 2028, 1634, 2027, 1636,
-     2026, 1638, 2025, 1644, 1640, 1626, 1628, 1643, 2024, 1646,
-     2023, 2022, 1647, 1649, 1653, 1655, 1656, 1657, 1659, 1660,
-     1661, 1662, 1664, 1665, 1666, 1667, 1670, 1676, 1679, 1678,
-     2021, 1680, 1685, 1688, 1689, 1690, 1693, 1691, 1695, 1701,
-     1699, 1700, 1702, 2017, 2013, 2012, 1703, 1712, 1705, 1706,
-     1711, 2011, 1717, 1713, 1725, 2007, 1726, 1718, 1728, 1730,
-     1731, 1733, 2006, 1734, 1738, 1739, 1742, 1746, 1748, 2002,
-     1750, 1751, 1753, 1752, 1758, 1759, 1762, 2001, 1754, 1764,
-
-     1766, 1768, 1770, 1769, 2000, 1772, 1775, 1994, 1780, 1966,
-     1776, 1784, 1786, 1791, 1793, 1782, 1787, 1799, 1798, 1802,
-     1965, 1964, 1795, 1803, 1804, 1805, 1807, 1808, 1809, 1810,
-     1813, 1963, 1815, 1816, 1825, 1822, 1820, 1962, 1827, 1830,
-     1831, 1960, 1959, 1832, 1838, 1840, 1958, 1841, 1843, 1844,
-     1848, 1845, 1850, 1852, 1853, 1851, 1854, 1864, 1865, 1957,
-     1867, 1855, 1857, 1872, 1881, 1868, 1874, 1876, 1883, 1885,
-     1878, 1956, 1888, 1890, 1892, 1895, 1898, 1900, 1954, 1901,
-     1953, 1905, 1906, 1952, 1951, 1907, 1909, 1912, 1817, 1720,
-     1910, 1914, 1669, 1630, 1537, 1920, 1456, 1921, 1264, 1923,
-
-     1913, 1204, 1916, 1927, 1932, 1077, 1936,  993, 1929, 1937,
-      904,  783,  700, 1939, 1924, 1946, 1933,  628, 1940, 1947,
-     1948, 1950,  584, 2099, 1980, 1986, 1992, 1998,  154, 2004,
-     2010, 2016,   62, 2021, 2027
+       87,  108, 2026, 2012,   50, 2115, 2115, 2115,  129,   94,
+       33,  124,   94,   49,   74,   61,   91,   92,  110,  111,
+      112,  133,   50,  135,  137,  136,  145,  143,  159, 2010,
+     2115, 2115,  122, 2009, 2115, 2115,  157, 2008, 2018, 2115,
+     2115, 2115,  176, 1873, 2115, 2115,  180, 1729,  180, 2115,
+      185, 2115,  189,   90, 1646,  195,  199, 1586,  206, 1428,
+     2115, 1276,  158,  190,  122,  116,  191,  182,  207,  199,
+      203,  208,  210,  211,  212,  147,  213,  217,  223,  222,
+      228,  230,  231,  225,  235,  233,  234,  236,  240,  242,
+
+      246,  247,  252,  250,  253,  254,   72,  256, 1212,  266,
+     1161,  269,  764,  286,  752,  374,  274,  307,  290,  296,
+      211,  269,  262,  283,  289,  273,  292,  299,  305,  295,
+      298,  302,  303,  301,  312,  310,  311,  313,  322,  329,
+      331,  318,  340,  336,  343,  347,  344,  346,  334,  323,
+      348,  349,  350,  353,  356,  357,  358,  360,  361,  371,
+      372,  368,  320,  364,  373,  377,  380,  381,  385,  390,
+      388,  382,  393,  395,  394,  400,  402,  410,  403,  406,
+      409,  411,  413,  414,  415,  416,  420,  421,  432,  425,
+      436,  430,  437,  440,  442,  443,  438,  451,  445,  448,
+
+      454,  460,  456,  457,  459,  464,  462,  484,  466,  469,
+      468,  471,  475,  472,  479,  482,  474,  480,  506,  491,
+      493,  496,  497,  495,  505,  507,  508,  510,  515,  523,
+      520,  522,  530,  533,  525,  534,  521,  535, 2115,  540,
+      532,  538,  543,  544, 2115,  545,  549,  547,  562,  548,
+      550,  559,  551,  563,  561,  572,  564,  576,  578,  570,
+      579,  574,  583,  580,  586,  587,  595,  584,  603,  592,
+      594,  605,  600,  607,  611,  617,  615,  619,  616,  620,
+      627,  625,  623,  626,  630,  631,  636,  632,  642,  638,
+      643,  649,  655,  634,  653,  657,  658,  652,  651,  659,
+
+      661,  667,  668,  671,  680,  672,  678,  673,  676,  681,
+      689,  685,  683,  690,  691,  693,  697,  698,  699,  701,
+      703,  700,  702,  709,  714,  713,  720, 2115,  722,  715,
+      724,  725, 2115, 2115,  726, 2115, 2115,  727,  734,  744,
+      730,  728,  736,  738,  742,  752,  739,  757,  747,  745,
+      759,  768,  755,  772,  773,  760,  774,  775,  777,  779,
+      778,  781,  791,  787,  788,  792,  794, 2115,  789,  796,
+      799,  801,  803,  806,  807,  809,  811,  808,  813,  814,
+      816,  822,  826,  820,  828,  824,  831,  833,  834,  835,
+      860,  836,  839,  842,  843,  845,  847,  852,  846,  850,
+
+      857,  867,  868,  853,  878, 2115,  879,  880,  870,  881,
+      885,  884,  886,  887,  888, 2115,  895,  892,  896,  898,
+      899,  904,  911, 2115,  912,  900,  909,  914,  918,  919,
+      922,  920,  921,  926,  927,  928,  931,  935,  942,  945,
+      936,  944,  930,  947,  952,  950,  953,  954, 2115,  149,
+      955,  963,  959,  956,  957,  960,  966,  973,  967,  974,
+      975,  976,  978,  977,  984,  986,  987,  988,  990,  989,
+      991,  993, 2115,  998, 1001,  994, 1010, 1018, 1003, 1024,
+     1020, 1022, 1023, 1007, 1031, 1033, 1029, 1032, 1030, 1038,
+     1035, 1040, 1041, 1043, 1045, 1047, 1049, 1053, 1056, 1057,
+
+     1059, 1061, 1065, 1064, 1066, 1070, 1067, 2115, 1080, 1082,
+     1083, 1079, 1071, 1086, 1087, 1089, 1092, 1093, 1091, 1095,
+     1096, 2115, 1102, 1098, 1099, 1103, 1100, 1106, 1105, 1108,
+     1113, 1115, 1116, 1112, 1126, 1128, 1129, 1131, 1137, 1138,
+     1139, 2115, 1141, 1134, 1149, 1152, 1154, 1147, 1145, 1155,
+     1156, 1157, 1158, 1159, 1162, 1165, 1163, 1168, 1169, 1171,
+     1173, 1179, 1187, 1188, 2115, 2115, 1185, 2115,  997, 1186,
+     1190, 1191, 1192, 1194, 1197, 1202, 1195, 1200, 1205, 2115,
+     1198, 1208, 1209,  417, 1213, 1219, 1210, 1220, 2115, 1222,
+     1211, 1231, 1221, 1223, 1233, 1235, 1242, 1244, 1234, 1225,
+
+     1237, 1246, 1248, 1255, 1247, 1251, 1253, 1254, 1256, 1259,
+     2115, 2115, 1263, 1258, 1264, 1270, 1283, 1281, 1262, 1284,
+     1285, 1286, 1287, 1288, 1290, 2115, 1296, 1298, 1295, 1304,
+     2115, 1294, 1292, 1299, 1306, 1309, 2115, 1311, 1312, 1314,
+     1315, 1317, 1321, 1323, 1329, 1325, 1328, 1332, 1334, 1330,
+     1341, 1347, 1343, 1345, 1349, 1351, 1352, 2115, 1358, 1354,
+     1361, 1357, 1360, 1367, 1364, 1365, 1366, 1368, 1369, 1370,
+     1373, 1371, 1377, 1380, 1375, 1392, 1379, 1381, 2115, 1394,
+     1400, 1387, 1402, 1398, 1404, 1406, 1408, 1410, 1411, 1412,
+     1414, 1422, 1424, 1430, 1426, 1434, 1431, 1432, 1415, 1442,
+
+     1435, 1439, 1445, 1441, 1448, 1446, 1449, 2115, 1450, 2115,
+     1454, 1456, 2115, 2115, 2115, 1464, 1460, 1467, 1461, 1470,
+     2115, 1471, 1472, 1474, 1475, 1476, 1478, 1479, 1480, 1481,
+     1482, 1483, 1493, 1485, 1497, 1496, 1499, 1503, 1489, 1505,
+     1514, 1510, 1512, 1506, 1516, 1517, 1513, 1518, 1519, 1521,
+     1523, 1527, 2115, 1534, 1524, 1535, 1537, 1538, 1542, 1546,
+     1543, 1552, 2115, 1545, 1556, 1557, 1553, 1559, 1562, 1560,
+     1563, 1567, 1568, 1569, 1570, 2115, 1571, 1572, 1577, 1578,
+     1584, 1588, 1580, 1595, 1597, 1573, 1599, 2115, 1600, 1602,
+     1603, 1607, 1608, 1604, 1609, 1613, 1616, 1611, 1618, 1620,
+
+     1621, 1623, 1625, 1627, 1628, 1631, 1633, 1634, 1635, 1645,
+     1638, 2115, 1639, 1641, 1651, 1658, 2115, 1654, 2115, 1657,
+     1656, 1663, 1664, 1667, 1655, 1665, 1669, 1676, 1672, 1673,
+     1677, 1679, 1681, 2115, 2115, 1690, 2115, 2115, 1693, 2115,
+     1695, 2115, 1697, 2115, 1703, 1699, 1686, 1684, 1704, 2115,
+     1708, 2115, 2115, 1705, 1711, 1712, 1715, 1716, 1701, 1718,
+     1720, 1721, 1722, 1724, 1725, 1726, 1727, 1731, 1735, 1736,
+     1738, 2115, 1739, 1745, 1749, 1743, 1748, 1751, 1750, 1754,
+     1760, 1756, 1759, 1762, 2115, 2115, 2115, 1763, 1765, 1773,
+     1764, 1770, 2115, 1775, 1776, 1781, 2115, 1784, 1777, 1787,
+
+     1786, 1789, 1680, 2115, 1790, 1792, 1793, 1800, 1802, 1804,
+     2115, 1806, 1807, 1809, 1808, 1813, 1820, 1814, 2115, 1810,
+     1816, 1825, 1818, 1826, 1828, 2115, 1830, 1831, 2115, 1837,
+     2115, 1832, 1840, 1842, 1847, 1849, 1838, 1843, 1855, 1854,
+     1858, 2115, 2115, 1851, 1859, 1860, 1861, 1863, 1864, 1865,
+     1866, 1869, 2115, 1871, 1872, 1881, 1878, 1876, 2115, 1883,
+     1886, 1887, 2115, 2115, 1888, 1894, 1896, 2115, 1897, 1899,
+     1900, 1904, 1901, 1906, 1908, 1909, 1907, 1910, 1920, 1921,
+     2115, 1923, 1911, 1913, 1928, 1937, 1924, 1930, 1932, 1939,
+     1941, 1934, 2115, 1944, 1946, 1948, 1951, 1954, 1956, 2115,
+
+     1957, 2115, 1961, 1962, 2115, 2115, 1963, 1965, 1968, 2115,
+     2115, 1966, 1970, 2115, 2115, 2115, 1976, 2115, 1977, 2115,
+     1979, 1969, 2115, 1972, 1983, 1988, 2115, 1992, 2115, 1985,
+     1993, 2115, 2115, 2115, 1995, 1980, 2002, 1989, 2115, 1996,
+     2003, 2004, 2006, 2115, 2115, 2036, 2042, 2048, 2054, 2060,
+       94, 2066, 2072, 2078, 2084, 2090, 2096, 2102, 2108
     } ;
 
-static yyconst flex_int16_t yy_def[1036] =
+static yyconst flex_int16_t yy_def[1060] =
     {   0,
-     1024,    1, 1025, 1025, 1026, 1026, 1027, 1027, 1028, 1028,
-     1024, 1029, 1024, 1024, 1024, 1030, 1024, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1031, 1024, 1024,
-     1024, 1031, 1032, 1024, 1024, 1032, 1033, 1024, 1024, 1024,
-     1033, 1034, 1024, 1024, 1034, 1029, 1029, 1024, 1035, 1030,
-     1035, 1030, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1031, 1031,
-
-     1032, 1032, 1033, 1033, 1024, 1034, 1034, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029,    0, 1024, 1024, 1024, 1024, 1024, 1024,
-     1024, 1024, 1024, 1024, 1024
+     1045,    1, 1046, 1046, 1047, 1047, 1048, 1048, 1049, 1049,
+     1050, 1050, 1045, 1051, 1045, 1045, 1045, 1045, 1052, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1053,
+     1045, 1045, 1053, 1054, 1045, 1045, 1054, 1055, 1045, 1045,
+     1045, 1045, 1055, 1056, 1045, 1045, 1056, 1057, 1045, 1045,
+     1058, 1045, 1057, 1057, 1051, 1051, 1045, 1059, 1052, 1059,
+     1045, 1052, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1053, 1053,
+     1054, 1054, 1055, 1055, 1045, 1056, 1056, 1057, 1057, 1058,
+     1058, 1057, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1057, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1057, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051,
+     1051, 1051, 1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1057, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1057, 1051, 1051, 1045, 1051, 1051,
+     1051, 1051, 1045, 1045, 1051, 1045, 1045, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1057, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1057,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1045, 1045, 1051, 1045, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1045, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051, 1051, 1051,
+     1045, 1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051, 1045,
+     1051, 1051, 1045, 1045, 1045, 1051, 1051, 1051, 1051, 1051,
+     1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1045, 1051, 1051, 1051, 1051, 1045, 1051, 1045, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1045, 1045, 1051, 1045, 1045, 1051, 1045,
+     1051, 1045, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1045,
+     1051, 1045, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1045, 1045, 1045, 1051, 1051, 1051,
+     1051, 1051, 1045, 1051, 1051, 1051, 1045, 1051, 1051, 1051,
+
+     1051, 1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051,
+     1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1045, 1051,
+     1051, 1051, 1051, 1051, 1051, 1045, 1051, 1051, 1045, 1051,
+     1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1045, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1045, 1051,
+     1051, 1051, 1045, 1045, 1051, 1051, 1051, 1045, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1045, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1045, 1051, 1051, 1051, 1051, 1051, 1051, 1045,
+
+     1051, 1045, 1051, 1051, 1045, 1045, 1051, 1051, 1051, 1045,
+     1045, 1051, 1051, 1045, 1045, 1045, 1051, 1045, 1051, 1045,
+     1051, 1051, 1045, 1051, 1051, 1051, 1045, 1051, 1045, 1051,
+     1051, 1045, 1045, 1045, 1051, 1051, 1051, 1051, 1045, 1051,
+     1051, 1051, 1051, 1045,    0, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045
     } ;
 
-static yyconst flex_int16_t yy_nxt[2139] =
+static yyconst flex_int16_t yy_nxt[2155] =
     {   0,
-       12,   13,   14,   14,   15,   16,   17,   12,   12,   12,
-       12,   12,   18,   19,   12,   20,   21,   22,   23,   12,
-       24,   25,   26,   27,   28,   29,   30,   31,   32,   12,
-       33,   34,   35,   36,   37,   12,   12,   12,   12,   39,
-       40,   41,   39,   40,   41,   57,   44,   40,   63,   42,
-       45,   58,   42,   44,   40,   59,   46,   45,   53,   53,
-       54,   57,  103,   46,   48,   49,   49,   50,   55,   40,
-       53,   53,   54,   57,   57,   51,   48,   49,   49,   50,
-       55,   40,   84,   61,   57,   61,   61,   51,   61,  202,
-       56,   57,   56,   56,   62,   56,   57,   64,   70,   71,
-
-       67,   57,   72,   68,   65,   57,   69,   57,   57,   74,
-       73,   66,   57,   77,   57,   57,   81,   57,  101,   75,
-       82,  101,   76,   57,   57,   57,   85,   78,   88,   79,
-       91,   57,   86,   80,   57,   87,   83,   57,   89,   57,
-       93,   90,   57,   97,  129,   92,  113,   98,   95,   99,
-       99,  106,  106,   96,   56,  110,  103,   94,  103,  103,
-       56,  103,   56,   56,   58,   56,   57,   61,   59,   61,
-       61,   57,   61,   57,  108,   57,  109,  114,   62,   57,
-      111,   57,   57,   57,   57,  118,   57,   57,   57,   57,
-       57,  119,  120,  112,  127,  121,   57,   57,   57,  115,
-
-      125,  116,  117,  128,  126,  130,  123,   57,   57,  122,
-       57,   57,   57,  124,  133,   57,   57,   57,   57,   57,
-      131,  135,   57,  140,   57,   57,   57,   57,  132,  134,
-      136,  137,  145,   57,  138,   57,  139,  142,  146,   99,
-       99,  101,   57,  141,  101,  143,   57,  103,  144,  103,
-      103,  147,  103,  106,  106,   57,   57,  150,   57,  431,
-      148,   57,  153,  152,  149,   57,  151,   57,   57,   57,
-      159,   57,  154,  161,   57,   57,  162,  155,   57,   57,
-       57,  169,  156,   57,  160,  167,   57,  164,  157,  158,
-      165,   57,  163,   57,  168,   57,  170,  166,  173,  171,
-
-       57,  175,  176,   57,  172,  174,   57,   57,   57,   57,
-       57,  179,   57,   57,   57,  177,  178,   57,   57,  183,
-       57,   57,  186,   57,   57,  189,   57,  181,  187,  190,
-      192,  180,   57,  182,   57,   57,   57,  196,  185,  184,
-       57,   57,  188,  193,   57,  195,   57,  199,   57,  200,
-       57,  197,  191,   57,  201,   57,   57,   57,  198,  204,
-      194,  203,   57,   57,  206,   57,  205,   57,  207,  209,
-      208,   57,  213,   57,   57,  210,  212,   57,  211,   57,
-       57,   57,  216,   57,   57,   57,  220,  221,  223,  215,
-      218,  214,  217,  222,   57,  219,   57,   57,   57,  228,
-
-       57,   57,  229,   57,  231,   57,   57,  227,   57,   57,
-      235,  233,  226,  224,   57,   57,  225,  234,   57,  236,
-       57,   57,   57,  230,  239,  232,   57,   57,   57,   57,
-       57,   57,  250,   57,  238,  248,  241,   57,  237,   57,
-      240,   57,  247,  242,  243,  252,   57,  249,   57,  251,
-      375,  253,   57,  254,   57,  244,  245,  246,   57,  255,
-      256,  257,  261,   57,  259,   57,  258,   57,  260,   57,
-       57,   57,  269,   57,   57,  267,   57,   57,  264,  266,
-      270,  263,  268,  262,   57,   57,  272,  273,  274,  271,
-       57,  265,   57,   57,   57,  275,   57,  277,   57,  278,
-
-       57,   57,   57,   57,   57,   57,   57,  286,  280,   57,
-      281,  284,   57,  285,  276,  279,  282,   57,  289,   57,
-       57,  287,  283,   57,  294,  290,   57,  297,  288,   57,
-       57,  299,   57,  291,  295,   57,   57,   57,   57,  293,
-      296,   57,   57,  292,   57,  307,  304,  300,  298,  301,
-       57,  309,   57,   57,  302,  308,   57,  305,  303,  306,
-       57,   57,   57,  312,  625,  310,  314,   57,  315,   57,
-      316,  311,  317,   57,  313,   57,  318,   57,   57,   57,
-       57,  321,   57,  319,  320,   57,   57,  323,   57,  322,
-       57,   57,  330,  325,   57,  331,   57,  327,   57,  324,
-
-       57,  332,  328,   57,  326,   57,  329,  333,  336,   57,
-      335,   57,   57,   57,  338,  337,   57,  340,   57,  339,
-       57,   57,   57,  345,   57,   57,  343,  344,   57,  334,
-       57,   57,   57,  346,  342,  347,  341,  348,   57,   57,
-       57,  349,   57,  351,  355,  350,  352,   57,  353,   57,
-       57,  356,   57,  354,   57,   57,  357,   57,   57,  358,
-       57,   57,   57,  359,   57,  362,  363,  364,   57,  365,
-      361,   57,   57,   57,  360,  369,  371,  367,  366,   57,
-      370,   57,   57,   57,   57,  368,   57,  377,  376,   57,
-      373,  372,   57,   57,  383,   57,  386,   57,  374,   57,
-
-      387,   57,  388,  378,  384,   57,  379,   57,   57,  390,
-       57,  380,   57,  391,   57,   57,   57,  381,  382,  397,
-      385,   57,  389,  393,   57,  392,   57,  394,   57,  395,
-      396,   57,  399,   57,  398,   57,   57,  404,   57,  401,
-      402,  400,  405,  403,   57,   57,   57,   57,  406,   57,
-      408,   57,   57,   57,  409,  411,  412,   57,  407,   57,
-       57,   57,  410,  418,   57,   57,  414,  416,   57,  419,
-       57,   57,  413,  415,  417,   57,  422,   57,  424,   57,
-       57,   57,  421,  420,  425,   57,  429,   57,   57,   57,
-       57,   57,   57,  427,  441,   57,  423,  426,   57,   57,
-
-       57,  442,   57,  430,  439,  428,   57,  438,  443,  432,
-      446,  433,  440,   57,  437,  434,  445,  435,   57,  447,
-       57,  449,  436,   57,   57,  448,  444,  452,   57,  453,
-       57,   57,   57,  454,   57,   57,   57,  450,   57,   57,
-      457,  459,   57,  451,   57,  456,   57,  458,   57,  463,
-      455,   57,   57,  464,   57,  467,  461,  465,  468,  460,
-      466,  462,   57,   57,   57,  469,   57,   57,  470,   57,
-      473,   57,   57,   57,  474,  476,  475,  471,   57,   57,
-       57,   57,   57,   57,  482,  480,  472,  481,  484,   57,
-      485,  477,  479,   57,  483,   57,  487,   57,  478,   57,
-
-       57,  490,   57,   57,  486,   57,   57,   57,  495,   57,
-       57,   57,  492,   57,  489,  496,   57,   57,  488,   57,
-      491,  494,  499,  497,   57,  498,  501,   57,   57,   57,
-       57,  493,   57,   57,  500,  504,  506,  503,   57,   57,
-       57,   57,  502,   57,   57,   57,   57,   57,  505,  512,
-       57,   57,  509,  507,  508,  515,   57,   57,  517,  511,
-      513,  510,  519,  523,  514,  516,  520,  518,   57,  522,
-      521,   57,   57,  524,   57,   57,   57,  528,  529,  525,
-       57,   57,   57,   57,   57,  530,   57,   57,  531,  526,
-      532,  536,   57,   57,  527,  533,   57,  534,   57,  535,
-
-       57,  537,   57,   57,  540,   57,  538,  544,   57,  545,
-       57,   57,  539,   57,  547,   57,  541,   57,  546,  549,
-       57,  543,  550,  548,   57,  542,   57,  554,   57,  555,
-      552,  556,   57,  553,   57,   57,   57,  557,  551,  559,
-       57,   57,   57,   57,  563,   57,   57,   57,  567,   57,
-       57,   57,  568,   57,  558,   57,   57,   57,   57,   57,
-      572,  560,  561,  562,   57,   57,  564,  566,   57,  570,
-      576,  574,  565,   57,   57,  571,  569,  573,  575,  578,
-      577,   57,  579,  581,   57,   57,   57,  584,  585,   57,
-      580,  583,   57,   57,   57,  586,   57,   57,  589,  591,
-
-       57,  587,  590,   57,  588,  582,   57,   57,  593,   57,
-       57,   57,  592,   57,   57,   57,  594,   57,  601,   57,
-       57,   57,   57,  602,   57,  598,  595,  606,  596,  597,
-      600,  605,   57,  603,  608,  599,   57,  609,   57,   57,
-       57,  604,   57,  611,  607,  610,   57,   57,   57,   57,
-       57,  612,  614,  616,   57,   57,  618,   57,   57,   57,
-       57,  619,  620,  613,  615,   57,   57,  627,  617,   57,
-       57,  626,   57,   57,   57,  630,  621,  622,   57,  629,
-      623,   57,  632,   57,   57,  624,   57,   57,   57,  628,
-       57,  635,  636,  637,   57,  638,  633,   57,   57,  631,
-
-       57,  644,  639,  634,   57,   57,   57,   57,  640,   57,
-       57,   57,  642,  643,   57,   57,   57,  641,  649,  652,
-       57,  650,   57,   57,  645,  646,  648,   57,  647,  654,
-      651,  656,  655,  657,  653,  658,   57,   57,   57,   57,
-      660,   57,   57,  659,   57,  664,  666,  667,   57,   57,
-       57,   57,   57,  662,  668,  661,   57,  671,   57,  663,
-      665,  669,   57,   57,   57,   57,   57,  670,  672,  677,
-       57,  678,   57,   57,   57,  673,   57,  679,  674,  680,
-      683,  675,   57,   57,  676,   57,  682,   57,  681,  687,
-       57,   57,  690,  686,  684,  689,   57,   57,   57,   57,
-
-      688,  685,  692,   57,  693,   57,  694,   57,   57,  696,
-      698,  695,   57,   57,   57,   57,  701,  697,  691,  700,
-       57,   57,   57,   57,   57,  702,   57,  703,   57,   57,
-      710,   57,  704,   57,   57,   57,   57,  699,   57,  715,
-      712,   57,  705,  706,  707,  713,   57,  708,   57,   57,
-      719,  711,   57,  718,  709,   57,  721,  717,   57,   57,
-      714,  716,   57,  722,   57,   57,  720,  724,  723,   57,
-      726,   57,  730,  733,  727,  731,   57,   57,   57,  732,
-       57,  725,  735,   57,   57,  729,  739,   57,  734,   57,
-      728,   57,   57,  737,   57,  736,  742,   57,   57,   57,
-
-       57,   57,   57,   57,  743,  744,  741,  745,  746,  738,
-       57,  748,   57,  751,  740,  747,   57,  753,   57,  752,
-       57,  750,  749,   57,   57,  754,  755,   57,   57,  757,
-       57,   57,   57,   57,   57,   57,   57,  765,   57,   57,
-      756,  764,  759,  760,  761,  758,  767,   57,  762,   57,
-       57,  770,   57,   57,  763,  769,  766,  771,  772,   57,
-       57,  775,   57,   57,   57,  768,   57,  776,   57,   57,
-       57,   57,   57,   57,   57,   57,   57,  773,  778,  782,
-      774,  779,  777,  780,  783,   57,  781,   57,  784,  786,
-       57,  785,   57,  787,  790,   57,  788,  791,   57,   57,
-
-       57,  789,   57,  794,  792,  795,  796,   57,   57,  798,
-       57,  793,   57,  799,  800,   57,   57,  797,   57,   57,
-      801,   57,  802,   57,   57,   57,   57,   57,   57,  809,
-       57,  803,   57,  812,  813,   57,  807,   57,  804,   57,
-      805,  810,   57,  811,  806,  824,  808,  814,   57,   57,
-      815,  816,   57,  817,   57,  819,   57,   57,  818,  821,
-       57,  822,  820,  823,   57,   57,   57,   57,  827,  826,
-       57,  825,  829,   57,  831,   57,  832,   57,   57,   57,
-      834,   57,   57,  828,   57,   57,   57,  836,   57,  830,
-      838,   57,   57,  835,  842,   57,  843,  840,   57,   57,
-
-      841,  839,   57,  846,  833,  837,  847,  845,   57,   57,
-       57,   57,  849,   57,  852,  844,  851,   57,  850,   57,
-      848,   57,  853,   57,   57,  857,   57,   57,   57,  856,
-       57,   57,  858,   57,  863,  861,  860,   57,   57,  862,
-       57,  854,   57,  855,  859,  864,   57,  865,   57,  866,
-       57,  867,   57,  868,  869,   57,   57,  872,   57,   57,
-      871,   57,  870,  874,  873,   57,  876,   57,   57,   57,
-      875,   57,   57,   57,   57,  883,   57,   57,   57,   57,
-      877,   57,   57,  879,  880,  881,  884,  878,   57,  890,
-       57,   57,   57,  888,  882,  887,  889,   57,  892,  886,
-
-       57,   57,   57,   57,  885,   57,  898,   57,  899,  893,
-      891,   57,   57,   57,   57,   57,  905,   57,   57,  894,
-      895,  896,  897,   57,   57,   57,  900,  904,  908,   57,
-       57,  901,   57,  906,  902,  903,  910,   57,   57,  911,
-       57,  907,   57,   57,  909,   57,   57,  914,  915,  913,
-       57,   57,  912,  916,   57,  918,  919,  921,   57,  922,
-       57,  917,   57,   57,   57,   57,   57,  923,  925,  920,
-       57,   57,  928,  926,   57,  924,   57,  932,   57,  927,
-       57,   57,   57,  929,   57,  930,  935,   57,   57,  933,
-      934,  938,   57,  936,   57,  931,   57,  940,   57,   57,
-
-      937,  941,  942,   57,  943,   57,  946,   57,  939,  947,
-       57,   57,  944,  945,   57,   57,   57,   57,  948,   57,
-       57,   57,   57,  950,  953,   57,  949,   57,   57,   57,
-      958,  956,   57,  952,   57,  951,  960,   57,  961,   57,
-      954,  962,   57,   57,   57,  957,  959,  955,  963,  966,
-       57,  967,   57,   57,  964,   57,   57,   57,  969,  972,
-       57,  968,   57,   57,   57,   57,   57,   57,  965,   57,
-      976,  971,  975,  973,  970,  979,   57,   57,  981,   57,
-       57,  974,  980,  984,   57,  978,   57,  982,   57,  977,
-       57,  983,  985,   57,  989,   57,  990,   57,  987,  986,
-
-       57,  993,   57,  994,   57,  992,  995,   57,  988,  991,
-       57,  997,   57,   57,  998,  996,  999,   57,   57,   57,
-     1002,   57,   57, 1000,   57,   57,   57, 1001,   57, 1003,
-     1005, 1006,   57,   57, 1008,   57,   57, 1007, 1011,   57,
-     1009,   57, 1004, 1012,   57,   57, 1010, 1013,   57,   57,
-     1015,   57,   57, 1014, 1019, 1016, 1017, 1018,   57,   57,
-       57, 1023,   57,   57,   57,   57,   57, 1020,   57,   57,
-       57,   57,   57, 1021,   57,   57,   57,   57,   57, 1022,
-       38,   38,   38,   38,   38,   38,   43,   43,   43,   43,
-       43,   43,   47,   47,   47,   47,   47,   47,   52,   52,
-
-       52,   52,   52,   52,   60,   60,   57,   60,   60,   60,
-       99,   99,   57,   57,   57,   99,  101,  101,   57,   57,
-      101,  106,  106,   57,   57,   57,  106,   61,   61,   57,
-       61,   61,   61,   57,   57,   57,   57,   57,   57,   57,
-       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
-       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
-       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
-       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
-       57,   57,   57,   57,   57,  107,  105,  104,  102,  100,
-       57,  107,  105,  104,  102,  100,   57, 1024,   11, 1024,
-
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+       14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
+       14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
+       26,   27,   28,   29,   30,   31,   32,   33,   34,   14,
+       35,   36,   37,   38,   39,   14,   14,   14,   14,   41,
+       41,   42,   41,   41,   42,   66,   45,   45,   73,   43,
+       46,   67,   43,   45,   45,   68,   47,   46,   55,   55,
+       56,   66,   66,   47,   49,   50,   50,   51,   57,   52,
+       55,   55,   56,   66,   82,   53,   49,   50,   50,   51,
+       57,   52,   83,   94,   66,   80,   66,   53,   59,   16,
+       16,   60,   61,   62,   65,   65,  161,   65,   65,   63,
+
+       65,   81,  119,   66,   66,   65,   66,   84,   64,   59,
+       16,   16,   60,   61,   62,   77,  122,   85,   78,   86,
+       63,   79,   66,   66,   66,  109,  109,   87,   66,   64,
+       70,   71,   70,   70,   66,   70,   66,   74,   88,   89,
+       70,   72,  126,   90,   75,   66,   91,   66,   66,   66,
+       92,   76,  125,  101,   98,   66,   95,   66,  103,   66,
+      111,  119,   96,  111,   99,   97,   93,  100,  102,  105,
+       66,   66,  107,  123,  106,  104,  108,  113,  138,  113,
+      113,   67,  113,  116,  116,   68,   70,   71,   70,   70,
+      118,   70,  118,  118,   66,  118,   65,  121,   65,   65,
+
+       67,   65,   66,   66,   68,  124,   65,   70,   71,   70,
+       70,   66,   70,   71,  129,   66,  128,   70,   72,   66,
+       66,  127,   66,   66,   66,   66,  133,  135,  134,   66,
+      136,  130,  140,  131,   66,   66,  141,   66,  132,  142,
+       66,  143,   66,   66,  137,   66,   66,   66,   66,  145,
+      139,  148,   66,  144,   66,  150,  146,  147,   66,   66,
+      155,  151,   66,  149,   66,   66,   66,  152,   66,  109,
+      109,  160,  111,  153,   66,  111,  154,  116,  116,  164,
+      156,  119,  157,  158,  163,   66,  162,  113,  159,  113,
+      113,  118,  113,  118,  118,   66,  118,   70,   71,   70,
+
+       70,   66,   70,  165,   66,  167,  169,   66,  121,  168,
+       66,   66,  175,   66,   66,   66,  166,   66,  177,  119,
+      178,  170,   66,   66,   66,   66,  171,  179,  183,  185,
+       66,  172,  119,  176,   66,   66,  180,  173,  174,  181,
+      182,   66,  186,   66,  211,  184,   66,  189,   66,  187,
+      191,  188,   66,  190,  192,   66,   66,  196,   66,   66,
+       66,   66,   66,  193,  194,   66,  195,  199,   66,   66,
+       66,  202,   66,   66,  205,  197,   66,  203,  206,  208,
+       66,  198,  209,   66,   66,   66,  117,  200,  201,   66,
+      213,  204,   66,   66,   66,  212,  216,   66,  217,  210,
+
+       66,  207,   66,  218,  214,   66,   66,   66,  221,  220,
+      215,  222,   66,  224,   66,   66,  219,  226,   66,  225,
+      223,   66,   66,   66,  230,   66,   66,   66,   66,   66,
+      233,  646,   66,   66,  229,  227,  239,   66,  232,  228,
+      234,  235,   66,  231,   66,  236,  237,  238,   66,   66,
+       66,  240,   66,  245,   66,   66,  246,   66,  248,  241,
+       66,  244,  242,   66,  243,  250,   66,  252,   66,   66,
+      247,   66,   66,  253,   66,  251,   66,  249,   66,  256,
+      119,   66,  268,   66,   66,  255,   66,   66,  258,  254,
+      265,   66,   66,  264,   66,  257,   66,  273,  259,  260,
+
+      272,  266,  267,   66,  269,   66,  270,   66,   66,   66,
+      261,  262,  263,  279,  271,  274,  275,   66,   66,   66,
+       66,  277,   66,  276,  278,  280,  285,   66,  282,  284,
+      287,  281,   66,   66,   66,   66,  286,   66,  288,  289,
+      291,  283,   66,  290,   66,   66,   66,   66,  295,  292,
+       66,  293,   66,  296,  294,   66,   66,   66,  298,   66,
+       66,   66,   66,   66,  299,  297,  302,  303,  300,  304,
+      312,   66,  307,   66,   66,   66,   66,  301,  305,  308,
+      313,  306,   66,  311,   66,  315,   66,  309,   66,  317,
+       66,   66,   66,  314,  319,   66,   66,  310,   66,  119,
+
+      322,  316,  326,  325,   66,  318,   66,   66,  321,  327,
+      320,  323,   66,  324,  328,   66,  329,   66,  333,   66,
+      331,  330,  334,   66,  335,  332,  336,   66,   66,   66,
+      337,   66,   66,  338,  340,   66,  339,   66,   66,   66,
+      342,  341,   66,   66,   66,  349,   66,  344,   66,  350,
+       66,  346,  356,  351,   66,   66,  347,  345,  343,  352,
+      348,   66,  355,   66,   66,   66,  354,   66,  357,   66,
+       66,   66,  358,   66,  364,  359,  362,  361,  363,   66,
+       66,  353,  360,   66,   66,   66,  366,  367,   66,  365,
+       66,  368,   66,   66,  370,   66,  374,   66,  375,  376,
+
+      371,   66,   66,   66,  369,   66,  372,  377,  373,   66,
+       66,   66,   66,   66,   66,   66,  382,  381,  383,  378,
+      384,   66,  380,  386,  379,   66,  119,   66,  389,  391,
+      385,  388,   66,  390,   66,  387,   66,   66,   66,   66,
+       66,  397,   66,  396,  393,  392,   66,  403,   66,  406,
+       66,   66,  394,  115,   66,  395,   66,   66,  404,   66,
+      398,  407,  411,  399,   66,  408,  409,   66,  400,   66,
+      410,   66,   66,  405,  401,  402,  114,  412,  418,  413,
+       66,  414,  415,  416,   66,   66,   66,   66,  417,   66,
+       66,   66,  424,   66,  419,  420,  422,  423,  425,   66,
+
+       66,   66,  426,   66,   66,  428,   66,  421,   66,  429,
+      431,   66,  432,   66,  427,   66,  438,  430,   66,   66,
+       66,   66,  434,   66,  436,   66,   66,  439,   66,  435,
+      433,  442,   66,  437,   66,  444,   66,  441,   66,  440,
+       66,  445,  449,   66,  450,  119,   66,   66,   66,  443,
+      446,   66,  462,  447,   66,   66,  448,   66,   66,   66,
+      463,  451,   66,  468,   66,   66,  459,  464,  460,   66,
+      467,  452,   66,  458,  469,  453,  461,  454,  466,   66,
+       66,  455,   66,  456,  472,  465,  474,  470,  457,  473,
+       66,   66,   66,   66,  471,  475,   66,   66,   66,   66,
+
+       66,  476,  478,  480,   66,  479,  477,   66,   66,  484,
+       66,   66,   66,  485,  482,  486,   66,  488,  489,  481,
+      487,   66,  483,   66,   66,  490,   66,  492,  491,  494,
+       66,   66,   66,   66,   66,  495,  496,  497,   66,   66,
+       66,  493,   66,   66,  501,  502,  503,   66,   66,  505,
+      498,  500,  506,  499,   66,  508,   66,   66,  504,   66,
+      511,  509,   66,  507,   66,   66,   66,   66,   66,   66,
+      516,   66,   66,  510,  513,   66,  517,  520,   66,   66,
+      512,  515,  518,  519,  522,   66,   66,   66,   66,   66,
+       66,  514,  525,  521,  527,  524,   66,  523,   66,   66,
+
+       66,   66,   66,   66,  528,   66,   66,  526,  533,   66,
+       66,  529,  632,   66,  536,   66,  534,  530,  532,   66,
+      531,  538,   66,  535,  537,  541,  539,  540,  543,  542,
+       66,  544,   66,  545,   66,   66,   66,  548,  549,  546,
+      550,   66,   66,   66,   66,   66,  551,   66,  552,  547,
+       66,  553,   66,   66,  557,   66,  554,   66,  555,   66,
+      556,   66,  558,  561,  565,   66,  559,  566,   66,   66,
+      568,   66,  560,   66,  567,  562,   66,   66,   66,   66,
+      564,  571,   66,   66,  563,  570,  574,  575,  573,  576,
+      577,   66,   66,  569,   66,   66,  572,  580,   66,   66,
+
+      578,   66,  579,   66,   66,   66,  584,   66,   66,  588,
+       66,   66,   66,  589,   66,   66,  593,   66,   66,  581,
+       66,  582,  583,  585,   66,   66,  587,   66,   66,  591,
+      597,  595,  586,  599,  598,  592,  590,  594,   66,  596,
+       66,   66,  600,   66,  605,  606,   66,  601,  604,   66,
+       66,   66,  607,   66,  614,  602,  610,   66,  608,   66,
+      611,   66,  603,  612,   66,  609,   66,   66,   66,   66,
+       66,   66,  613,  112,   66,   66,  615,   66,  622,  623,
+       66,   66,  626,   66,  619,   66,  616,  617,  618,  621,
+      627,   66,  620,  624,  629,  630,  631,   66,   66,   66,
+
+       66,  625,   66,   66,   66,  637,   66,   66,  635,   66,
+       66,  628,   66,  633,   66,  639,  641,   66,  640,  636,
+       66,   66,   66,   66,  110,   66,  648,  634,  643,  638,
+      647,   66,   66,   66,   66,   66,  642,   66,  650,  651,
+      644,  645,  649,   66,  653,   66,   66,   66,  652,   66,
+      656,  654,  657,  658,   66,  655,   66,  661,   66,   66,
+       66,  659,  665,   66,  660,   66,   66,   66,   66,  662,
+       66,   66,  663,  664,   66,   66,   66,  670,   71,  666,
+      671,  669,   66,  667,  673,  675,  668,  672,  676,  674,
+      678,  677,  679,   66,  680,   66,   66,   66,   66,   66,
+
+       66,  685,   66,  687,   66,  688,   66,   66,   66,  681,
+       66,   66,  683,  689,  692,  682,   66,  684,   66,  690,
+      686,   66,  693,   66,   66,  691,   66,   66,  698,   66,
+      694,  699,  700,   66,  695,   66,  704,   66,  701,  696,
+       66,   66,   66,  697,   66,  708,   66,  703,  702,  705,
+      707,  709,  710,   66,  711,   66,  713,   66,  706,   66,
+      714,   66,  715,   66,   66,  717,   66,  716,  719,   66,
+       66,  721,   66,   66,  722,  712,   66,   66,   66,   66,
+       66,   66,   66,   66,  718,   66,  731,   66,  723,   66,
+      724,   66,   66,   66,  720,  725,  733,  726,  727,   66,
+
+      728,  734,  729,  732,   66,  736,   66,  740,  730,  738,
+       66,  739,   66,  735,   66,  743,   66,  737,   66,  741,
+       66,  742,   66,   66,   66,  744,   66,   66,  747,  751,
+       71,  752,  748,  745,   66,  753,   66,  754,   66,  746,
+      750,  756,   66,   66,   66,  749,   66,   66,  758,  760,
+      755,   66,  759,   66,   66,  757,  763,   66,   66,  764,
+       66,   66,   66,  762,  766,  765,   66,  769,   66,  761,
+      767,  772,   66,   66,  768,  775,   66,  771,  770,   66,
+      774,  776,   66,   66,   66,  778,   66,   66,   66,  773,
+       66,   66,   66,   66,   66,   66,  786,   66,  785,  780,
+
+      781,   66,  782,  777,  788,   66,  783,  779,   66,   66,
+      791,   66,  784,  787,  790,   66,  792,   66,   66,  794,
+      793,  796,   66,  789,   66,   66,   66,  797,   66,   66,
+       66,   66,  799,   66,  803,   66,   66,  795,  801,   66,
+      800,  802,  804,  798,  805,  808,   66,   66,  812,   66,
+       66,  807,  809,  806,   66,   66,  811,   66,   66,  813,
+      816,  810,  815,  817,   66,   66,  818,  819,   66,   66,
+      820,   66,   66,  814,   66,   66,  822,  821,  823,   66,
+       66,   66,   66,   66,   66,   66,  830,  824,   71,   66,
+       66,  833,   66,  828,  825,  834,   66,  831,  826,  835,
+
+       66,  827,  832,  829,  839,  836,  837,   66,  838,   66,
+      840,   66,   66,  842,   66,   66,   66,  841,  844,   66,
+       66,   66,  846,   66,  847,   66,  848,  850,   66,  852,
+       66,  853,   66,   66,  843,   66,  855,   66,  845,   66,
+       66,  849,  851,   66,  857,   66,   66,   66,  859,  856,
+       66,   66,  863,   66,  864,  861,  862,   66,   66,  854,
+      860,  858,  866,   66,  867,  868,   66,   66,   66,   66,
+       66,  865,  870,  871,  872,   66,   66,   66,  869,   66,
+      873,   66,  874,  878,   66,   66,  877,  875,   66,   66,
+      879,   66,   66,   66,  881,  883,   66,  876,   66,  882,
+
+      937,  880,   66,  884,  885,   66,  886,   66,  887,   66,
+      888,   66,  889,   66,  890,   66,   66,   66,  891,  893,
+       66,  892,  894,   66,   66,  895,  897,   66,   66,  896,
+       66,  899,   66,   66,   66,  904,   66,   66,   66,   66,
+      898,  119,  900,   66,  901,  902,  905,   66,   66,  911,
+       66,   66,  909,  910,  903,   66,  908,   66,  913,  907,
+       66,   66,   66,   66,  906,  919,   66,  920,   66,  912,
+      914,   66,   66,  915,   66,   66,   66,   66,  916,  917,
+      925,  918,   66,  921,  926,   66,  929,   66,   66,   66,
+      922,  927,  931,   66,  923,  924,   66,  932,   66,   66,
+
+      928,   66,   66,  935,   66,   66,  936,  930,  934,  939,
+      940,  933,   66,  942,   66,  943,   66,  938,   66,   66,
+       66,   66,   66,  944,  946,   66,   66,  941,   66,  947,
+       66,  945,   66,  949,  948,  950,  953,   66,   66,  954,
+       66,  951,   66,   66,   66,  956,  955,  952,  959,   66,
+       66,  957,   66,  961,   66,   66,  958,  962,  963,   66,
+      964,   66,  967,   66,  960,  968,   66,   66,  965,  966,
+       66,   66,   66,   66,  969,   66,   66,   66,   66,  971,
+      974,   66,  970,   66,   66,  117,  979,  977,   66,  973,
+       66,  972,  981,   66,  982,   66,  975,  983,   66,   66,
+
+       66,  978,  980,  976,  984,  987,   66,  988,   66,   66,
+      985,   66,   66,   66,  990,  993,   66,  989,   66,   66,
+       66,   66,   66,   66,  986,   66,  997,  992,  996,  994,
+      991, 1000,   66,   66, 1002,   66,   66,  995, 1001, 1005,
+       66,  999,   66, 1003,   66,  998,   66, 1004, 1006,   66,
+     1010,   66, 1011,   66, 1008, 1007,   66, 1014,   66, 1015,
+       66, 1013, 1016,   66, 1009, 1012,   66, 1018,   66,   66,
+     1019, 1017, 1020,   66,   66,   66, 1023,   66,   66, 1021,
+       66,   66,   66, 1022,   66, 1024, 1026, 1027,   66,   66,
+     1029,   66,   66, 1028, 1032,   66, 1030,   66, 1025, 1033,
+
+       66,   66, 1031, 1034,   66,   66, 1036,   66,   66, 1035,
+     1040, 1037, 1038, 1039,   66,   66,   66, 1044,   66,  115,
+      114,  112,  110, 1041,   66, 1045, 1045, 1045, 1045, 1042,
+     1045, 1045, 1045, 1045, 1045, 1043,   40,   40,   40,   40,
+       40,   40,   44,   44,   44,   44,   44,   44,   48,   48,
+       48,   48,   48,   48,   54,   54,   54,   54,   54,   54,
+       58,   58,   58,   58,   58,   58,   69,   69,   69,   69,
+       69,   69,  109,  109, 1045, 1045,  109,  109,  111,  111,
+     1045,  111, 1045,  111,  113, 1045, 1045, 1045, 1045,  113,
+      116,  116, 1045, 1045,  116,  116,  118, 1045, 1045, 1045,
+
+     1045,  118,  120,  120,  120,  120,  120,  120,   70,   70,
+       70,   70,   70,   70,   13, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045
     } ;
 
-static yyconst flex_int16_t yy_chk[2139] =
+static yyconst flex_int16_t yy_chk[2155] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
-        3,    3,    4,    4,    4,   19,    5,    5,   19,    3,
-        5,   13,    4,    6,    6,   13,    5,    6,    9,    9,
-        9,   31, 1033,    6,    7,    7,    7,    7,    9,    7,
-       10,   10,   10,  155,   22,    7,    8,    8,    8,    8,
-       10,    8,   31,   16,   23,   16,   16,    8,   16,  155,
-       18,   21,   18,   18,   16,   18,   20,   20,   22,   23,
-
-       21,   24,   24,   21,   20,   25,   21,   26,   27,   25,
-       24,   20,   28,   27,   29,   30,   30,   32,   46,   25,
-       30,   46,   26,   33,   68,   34,   32,   28,   33,   29,
-       34,   81,   32,   29,   36,   32,   30,   65,   33,   35,
-       35,   33,   37,   37,   81,   34,   68,   37,   36,   42,
-       42,   55,   55,   36, 1029,   65,   51,   35,   51,   51,
-       57,   51,   57,   57,   58,   57,   66,   60,   58,   60,
-       60,   63,   60,   64,   63,   67,   64,   69,   60,   70,
-       66,   73,   69,   71,   72,   73,   74,   76,   77,   75,
-       79,   74,   75,   67,   79,   75,   80,   78,   82,   70,
-
-       78,   71,   72,   80,   78,   82,   76,   83,   84,   75,
-       85,   86,   87,   77,   85,   90,   89,   88,   91,   93,
-       83,   87,   92,   92,   94,   95,   97,   96,   84,   86,
-       88,   89,   96,   98,   90,  370,   91,   93,   97,  100,
-      100,  102,  110,   92,  102,   94,  111,  104,   95,  104,
-      104,   98,  104,  107,  107,  108,  109,  110,  112,  370,
-      108,  116,  113,  112,  109,  115,  111,  113,  114,  117,
-      115,  118,  114,  117,  123,  120,  118,  114,  119,  121,
-      122,  124,  114,  127,  116,  122,  124,  120,  114,  114,
-      120,  134,  119,  126,  123,  125,  125,  121,  128,  126,
-
-      129,  130,  131,  128,  127,  129,  130,  131,  132,  135,
-      133,  134,  136,  137,  138,  132,  133,  139,  140,  138,
-      141,  142,  141,  143,  144,  144,  148,  136,  142,  145,
-      146,  135,  149,  137,  145,  146,  150,  149,  140,  139,
-      151,  147,  143,  147,  152,  148,  156,  152,  153,  153,
-      159,  150,  145,  154,  154,  163,  157,  164,  151,  157,
-      147,  156,  158,  165,  159,  161,  158,  160,  160,  162,
-      161,  166,  166,  167,  162,  163,  165,  168,  164,  169,
-      170,  171,  169,  172,  173,  175,  173,  173,  175,  168,
-      171,  167,  170,  174,  174,  172,  176,  177,  178,  179,
-
-      179,  180,  180,  181,  182,  183,  184,  178,  185,  182,
-      186,  184,  177,  176,  187,  186,  176,  185,  188,  187,
-      189,  190,  191,  181,  190,  183,  194,  193,  195,  197,
-      198,  199,  196,  316,  189,  194,  191,  196,  188,  200,
-      190,  192,  193,  192,  192,  198,  203,  195,  204,  197,
-      316,  199,  205,  200,  201,  192,  192,  192,  206,  201,
-      202,  202,  206,  202,  204,  207,  203,  208,  205,  209,
-      210,  211,  213,  212,  214,  211,  218,  213,  209,  210,
-      214,  208,  212,  207,  215,  216,  216,  217,  218,  215,
-      219,  209,  217,  220,  224,  219,  221,  221,  223,  223,
-
-      225,  226,  229,  233,  227,  231,  230,  232,  225,  234,
-      226,  230,  232,  231,  220,  224,  227,  235,  235,  236,
-      238,  233,  229,  240,  237,  235,  239,  239,  234,  237,
-      241,  241,  242,  235,  237,  244,  245,  243,  247,  236,
-      238,  246,  250,  235,  248,  249,  246,  242,  240,  243,
-      249,  251,  251,  252,  244,  250,  253,  247,  245,  248,
-      254,  255,  563,  254,  563,  252,  256,  256,  257,  257,
-      258,  253,  259,  259,  255,  258,  260,  260,  261,  266,
-      262,  263,  265,  261,  262,  264,  263,  265,  267,  264,
-      268,  270,  270,  267,  269,  271, 1023,  269,  272,  266,
-
-      271,  272,  269,  273,  268,  274,  269,  273,  275,  276,
-      274,  277,  279,  275,  277,  276,  278,  279,  280,  278,
-      281,  282,  283,  284,  285,  288,  282,  283,  284,  273,
-      291,  290,  286,  285,  281,  286,  280,  287,  292,  289,
-     1018,  287,  287,  289,  293,  288,  290,  297,  291,  293,
-      294,  294,  295,  292,  296,  298,  295,  299,  300,  296,
-      304,  301,  302,  297,  303,  300,  301,  302,  305,  303,
-      299,  306,  307,  311,  298,  307,  310,  305,  304,  308,
-      308,  310,  312,  313,  319,  306,  323,  320,  319,  322,
-      312,  311,  320,  326,  322,  324,  325,  325,  313,  321,
-
-      326,  327,  327,  321,  323,  331,  321,  328,  329,  329,
-      330,  321, 1013,  330,  334,  332,  336,  321,  321,  336,
-      324,  340,  328,  332,  338,  331,  333,  333,  337,  334,
-      335,  335,  338,  339,  337,  341,  342,  343,  343,  340,
-      341,  339,  344,  342,  346,  345,  350,  344,  345,  347,
-      347,  348,  351,  352,  348,  350,  351,  353,  346,  354,
-      356,  355,  348,  357,  359,  358,  353,  355,  357,  358,
-      360,  361,  352,  354,  356,  362,  361,  363,  363,  365,
-      366,  364,  360,  359,  364,  367,  368,  368,  369,  372,
-      374,  375,  373,  366,  376, 1012,  362,  365,  379,  376,
-
-      377,  377,  378,  369,  374,  367,  371,  373,  377,  371,
-      379,  371,  375,  382,  372,  371,  378,  371,  380,  380,
-      381,  382,  371,  383,  384,  381,  377,  385,  385,  387,
-      388,  389,  390,  388,  387,  391,  393,  383,  392,  394,
-      391,  393,  395,  384,  398,  390,  397,  392,  399,  398,
-      389,  401,  400,  399,  402,  402,  395,  400,  403,  394,
-      401,  397,  406,  403,  405,  405,  407,  408,  405,  409,
-      408,  410,  411,  412,  409,  411,  410,  406,  413,  414,
-      415,  417,  416,  418,  417,  415,  407,  416,  419,  421,
-      420,  412,  414,  419,  418,  420,  422,  422,  413,  423,
-
-      424,  425,  426,  427,  421,  425,  428,  430,  431,  433,
-      432,  434,  427,  431,  424,  432, 1011,  435,  423,  436,
-      426,  430,  435,  433,  438,  434,  437,  437,  439,  441,
-      440,  428,  442,  445,  436,  440,  442,  439,  443,  444,
-      446,  447,  438,  448,  450,  449,  451,  455,  441,  448,
-      454,  453,  445,  443,  444,  451,  458,  456,  454,  447,
-      449,  446,  456,  459,  450,  453,  457,  455,  459,  458,
-      457,  457,  460,  460,  461,  462,  463,  464,  465,  461,
-      466,  468,  464,  465,  467,  466,  470,  469,  467,  462,
-      468,  469,  471,  472,  463,  468,  473,  468,  474,  468,
-
-      475,  470,  476,  481,  473, 1008,  471,  477,  477,  478,
-      478,  482,  472,  479,  480,  480,  474,  483,  479,  482,
-      484,  476,  483,  481,  485,  475,  486,  488,  491,  489,
-      485,  490,  488,  486,  489,  492,  490,  491,  484,  493,
-      493,  494,  495,  497,  497,  496,  498,  499,  502,  500,
-      503,  504,  502,  502,  492,  505,  506,  508,  507,  509,
-      506,  494,  495,  496,  513,  510,  498,  500,  515,  504,
-      510,  508,  499,  511,  512,  505,  503,  507,  509,  512,
-      511,  514,  513,  515,  516,  523,  517,  518,  519, 1006,
-      514,  517,  518,  519,  520,  520,  522,  528,  524,  525,
-
-      525,  522,  524,  524,  523,  516,  526,  529,  527,  530,
-      531,  532,  526,  527,  533,  534,  528,  535,  535,  536,
-      537,  538,  540,  536,  541,  532,  529,  540,  530,  531,
-      534,  539,  539,  537,  542,  533,  549,  543,  550,  542,
-      548,  538,  543,  548,  541,  546,  546,  551,  554,  552,
-      556,  549,  551,  553,  553,  555,  555,  558,  557,  560,
-      561,  556,  557,  550,  552,  562,  564,  565,  554,  566,
-      569,  564,  565,  567,  570,  569,  558,  560,  572,  567,
-      561,  571,  571,  573,  578,  562,  574,  575,  579,  566,
-      577,  574,  575,  576,  576,  577,  572,  580,  581,  570,
-
-      582,  583,  578,  573,  584,  585,  583,  586,  579,  588,
-      592,  587,  581,  582,  589,  593, 1002,  580,  588,  592,
-      594,  588,  595,  598,  584,  585,  587,  599,  586,  594,
-      589,  595,  594,  596,  593,  597,  597,  600,  596,  601,
-      599,  602,  604,  598,  603,  603,  606,  607,  608,  611,
-      612,  606,  607,  601,  608,  600,  613,  611,  609,  602,
-      604,  609,  614,  615,  617,  618,  619,  609,  612,  618,
-      621,  619,  620,  622,  623,  613,  999,  620,  614,  621,
-      624,  615,  625,  626,  617,  624,  623,  627,  622,  628,
-      628,  629,  631,  627,  625,  630,  630,  631,  632,  639,
-
-      629,  626,  633,  633,  634,  634,  635,  635,  636,  638,
-      640,  636,  641,  644,  638,  640,  643,  639,  632,  642,
-      642,  643,  645,  646,  647,  644,  648,  644,  649,  650,
-      650,  651,  644,  652,  654,  656,  653,  641,  655,  655,
-      652,  657,  645,  646,  647,  653,  661,  648,  659,  662,
-      660,  651,  665,  659,  649,  660,  662,  657,  663,  664,
-      654,  656,  666,  663,  667,  668,  661,  665,  664,  669,
-      667,  670,  671,  673,  668,  672,  674,  671,  673,  672,
-      672,  666,  675,  676,  678,  670,  679,  675,  674,  677,
-      669,  679,  680,  677,  681,  676,  682,  682,  683,  686,
-
-      684,  685,  696,  688,  683,  684,  681,  685,  686,  678,
-      690,  690,  691,  695,  680,  688,  697,  697,  695,  696,
-      701,  691,  690,  698,  703,  698,  699,  699,  702,  702,
-      704,  705,  706,  707,  708,  710,  709,  710,  711,  713,
-      701,  709,  704,  705,  706,  703,  712,  712,  707,  715,
-      714,  715,  716,  717,  708,  714,  711,  716,  717,  718,
-      719,  720,  721,  722,  723,  713,  720,  721,  997,  724,
-      726,  729,  727,  730,  725,  728,  734,  718,  723,  726,
-      719,  724,  722,  725,  727,  735,  725,  731,  728,  730,
-      733,  729,  738,  731,  735,  737,  733,  736,  736,  739,
-
-      740,  734,  746,  739,  737,  740,  741,  741,  743,  744,
-      744,  738,  745,  745,  746,  747,  749,  743,  748,  750,
-      747,  751,  748,  752,  753,  754,  756,  772,  757,  756,
-      758,  749,  759,  759,  760,  760,  753,  762,  750,  765,
-      751,  757,  770,  758,  752,  772,  754,  761,  761,  995,
-      762,  763,  763,  764,  764,  766,  766,  768,  765,  769,
-      769,  770,  768,  771,  771,  773,  774,  775,  775,  774,
-      777,  773,  776,  776,  778,  778,  779,  779,  780,  781,
-      781,  782,  783,  775,  784,  785,  786,  783,  787,  777,
-      785,  788,  790,  782,  789,  792,  790,  787,  793,  789,
-
-      788,  786,  794,  794,  780,  784,  795,  793,  797,  799,
-      802,  795,  799,  800,  802,  792,  801,  801,  800,  803,
-      797,  804,  803,  805,  806,  807,  808,  811,  809,  806,
-      807,  810,  808,  815,  815,  811,  810,  812,  826,  812,
-      827,  804,  994,  805,  809,  818,  818,  820,  820,  822,
-      822,  824,  825,  825,  826,  828,  824,  830,  830,  833,
-      828,  834,  827,  834,  833,  835,  836,  836,  837,  838,
-      835,  839,  840,  841,  842,  843,  843,  844,  845,  846,
-      837,  993,  847,  839,  840,  841,  844,  838,  848,  850,
-      850,  849,  852,  848,  842,  847,  849,  853,  853,  846,
-
-      854,  855,  856,  858,  845,  857,  859,  859,  860,  854,
-      852,  861,  862,  860,  863,  867,  869,  869,  870,  855,
-      856,  857,  858,  871,  868,  874,  861,  868,  873,  873,
-      878,  862,  990,  870,  863,  867,  875,  875,  877,  877,
-      879,  871,  880,  881,  874,  882,  884,  880,  881,  879,
-      885,  886,  878,  882,  887,  885,  886,  888,  888,  889,
-      889,  884,  891,  892,  894,  893,  899,  891,  893,  887,
-      895,  896,  896,  894,  897,  892,  900,  901,  901,  895,
-      902,  904,  903,  897,  906,  899,  904,  907,  911,  902,
-      903,  909,  909,  906,  916,  900,  912,  912,  913,  917,
-
-      907,  913,  914,  914,  915,  915,  918,  923,  911,  919,
-      919,  918,  916,  917,  920,  924,  925,  926,  920,  927,
-      928,  929,  930,  924,  927,  931,  923,  933,  934,  989,
-      933,  930,  937,  926,  936,  925,  935,  935,  936,  939,
-      928,  937,  940,  941,  944,  931,  934,  929,  939,  944,
-      945,  945,  946,  948,  940,  949,  950,  952,  948,  951,
-      951,  946,  953,  956,  954,  955,  957,  962,  941,  963,
-      955,  950,  954,  952,  949,  958,  958,  959,  961,  961,
-      966,  953,  959,  964,  964,  957,  967,  962,  968,  956,
-      971,  963,  965,  965,  969,  969,  970,  970,  967,  966,
-
-      973,  974,  974,  975,  975,  973,  976,  976,  968,  971,
-      977,  978,  978,  980,  980,  977,  982,  982,  983,  986,
-      987,  987,  991,  983,  988, 1001,  992,  986, 1003,  988,
-      992,  996,  996,  998, 1000, 1000, 1015,  998, 1004, 1004,
-     1001, 1009,  991, 1005, 1005, 1017, 1003, 1007, 1007, 1010,
-     1010, 1014, 1019, 1009, 1017, 1014, 1015, 1016, 1016, 1020,
-     1021, 1022, 1022,  985,  984,  981,  979, 1019,  972,  960,
-      947,  943,  942, 1020,  938,  932,  922,  921,  910, 1021,
-     1025, 1025, 1025, 1025, 1025, 1025, 1026, 1026, 1026, 1026,
-     1026, 1026, 1027, 1027, 1027, 1027, 1027, 1027, 1028, 1028,
-
-     1028, 1028, 1028, 1028, 1030, 1030,  908, 1030, 1030, 1030,
-     1031, 1031,  905,  898,  890, 1031, 1032, 1032,  883,  876,
-     1032, 1034, 1034,  872,  866,  865, 1034, 1035, 1035,  864,
-     1035, 1035, 1035,  851,  832,  831,  829,  823,  821,  819,
-      817,  816,  814,  813,  798,  796,  791,  767,  755,  742,
-      732,  700,  694,  693,  692,  689,  687,  658,  637,  616,
-      610,  605,  591,  590,  568,  559,  547,  545,  544,  521,
-      501,  487,  452,  429,  404,  396,  386,  349,  318,  317,
-      315,  314,  309,  228,  222,  106,  105,  103,  101,   99,
-       56,   52,   48,   47,   43,   38,   12,   11, 1024, 1024,
-
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
-     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024
+        3,    3,    4,    4,    4,   21,    5,    5,   21,    3,
+        5,   15,    4,    6,    6,   15,    5,    6,    9,    9,
+        9,   24,   33,    6,    7,    7,    7,    7,    9,    7,
+       10,   10,   10,   26,   26,    7,    8,    8,    8,    8,
+       10,    8,   26,   33,  107,   24,   25,    8,   11,   11,
+       11,   11,   11,   11, 1051,   20,  107,   20,   20,   11,
+
+       20,   25,   64,   27,   28,   20,   23,   27,   11,   12,
+       12,   12,   12,   12,   12,   23,   64,   27,   23,   28,
+       12,   23,   29,   30,   31,   43,   43,   29,   76,   12,
+       19,   19,   19,   19,   75,   19,   22,   22,   30,   31,
+       19,   19,   76,   31,   22,   32,   32,   34,   36,   35,
+       32,   22,   75,   36,   35,   38,   34,   37,   37,   86,
+       47,  450,   34,   47,   35,   34,   32,   35,   36,   38,
+       73,   39,   39,   73,   38,   37,   39,   53,   86,   53,
+       53,   59,   53,   57,   57,   59,   61,   61,   61,   61,
+       63,   61,   63,   63,   78,   63,   66,   61,   66,   66,
+
+       67,   66,   74,   77,   67,   74,   66,   69,   69,   69,
+       69,   80,   69,  121,   79,   81,   78,   69,   69,   79,
+       82,   77,   83,   84,   85,   87,   83,   85,   84,   88,
+       85,   80,   88,   81,   90,   89,   88,   94,   82,   89,
+       91,   90,   92,   93,   85,   96,   97,   95,   98,   92,
+       87,   95,   99,   91,  100,   97,   93,   94,  101,  102,
+      102,   98,  104,   96,  103,  105,  106,   99,  108,  110,
+      110,  106,  112,  100,  123,  112,  101,  117,  117,  123,
+      102,  122,  103,  104,  122,  126,  108,  114,  105,  114,
+      114,  119,  114,  119,  119,  124,  119,  120,  120,  120,
+
+      120,  125,  120,  124,  127,  126,  128,  130,  120,  127,
+      131,  128,  130,  134,  132,  133,  125,  129,  132,  118,
+      133,  129,  136,  137,  135,  138,  129,  134,  137,  139,
+      142,  129,  163,  131,  139,  150,  135,  129,  129,  135,
+      136,  140,  140,  141,  163,  138,  149,  143,  144,  141,
+      145,  142,  143,  144,  146,  145,  147,  150,  148,  146,
+      151,  152,  153,  147,  148,  154,  149,  153,  155,  156,
+      157,  156,  158,  159,  159,  151,  164,  157,  160,  161,
+      162,  152,  162,  160,  161,  165,  116,  154,  155,  166,
+      165,  158,  167,  168,  172,  164,  168,  169,  169,  162,
+
+      171,  160,  170,  170,  166,  173,  175,  174,  173,  172,
+      167,  174,  176,  176,  177,  179,  171,  178,  180,  177,
+      175,  181,  178,  182,  182,  183,  184,  185,  186,  584,
+      185,  584,  187,  188,  181,  179,  190,  190,  184,  180,
+      186,  187,  192,  183,  189,  188,  189,  189,  191,  193,
+      197,  191,  194,  195,  195,  196,  196,  199,  198,  192,
+      200,  194,  192,  198,  193,  200,  201,  202,  203,  204,
+      197,  205,  202,  203,  207,  201,  206,  199,  209,  206,
+      211,  210,  213,  212,  214,  205,  217,  213,  207,  204,
+      210,  215,  218,  209,  216,  206,  208,  218,  208,  208,
+
+      217,  211,  212,  220,  214,  221,  215,  224,  222,  223,
+      208,  208,  208,  223,  216,  219,  219,  225,  219,  226,
+      227,  221,  228,  220,  222,  224,  228,  229,  226,  227,
+      230,  225,  231,  237,  232,  230,  229,  235,  231,  232,
+      234,  226,  233,  233,  241,  234,  236,  238,  238,  235,
+      242,  236,  240,  240,  237,  243,  244,  246,  242,  248,
+      250,  247,  251,  253,  243,  241,  247,  248,  244,  249,
+      254,  252,  252,  255,  249,  254,  257,  246,  250,  252,
+      254,  251,  260,  253,  256,  256,  262,  252,  258,  258,
+      259,  261,  264,  255,  260,  263,  268,  252,  265,  266,
+
+      263,  257,  267,  266,  270,  259,  271,  267,  262,  268,
+      261,  264,  273,  265,  269,  269,  270,  272,  274,  274,
+      272,  271,  275,  275,  276,  273,  277,  277,  279,  276,
+      278,  278,  280,  279,  281,  283,  280,  282,  284,  281,
+      283,  282,  285,  286,  288,  288,  294,  285,  287,  289,
+      290,  287,  294,  290,  289,  291,  287,  286,  284,  291,
+      287,  292,  293,  299,  298,  295,  292,  293,  295,  296,
+      297,  300,  296,  301,  302,  297,  300,  299,  301,  302,
+      303,  291,  298,  304,  306,  308,  304,  305,  309,  303,
+      307,  305,  305,  310,  307,  313,  311,  312,  312,  313,
+
+      308,  311,  314,  315,  306,  316,  309,  314,  310,  317,
+      318,  319,  322,  320,  323,  321,  319,  318,  320,  315,
+      321,  324,  317,  323,  316,  326,  325,  330,  326,  329,
+      322,  325,  327,  327,  329,  324,  331,  332,  335,  338,
+      342,  339,  341,  338,  331,  330,  339,  341,  343,  344,
+      344,  347,  332,  115,  345,  335,  340,  350,  342,  349,
+      340,  345,  349,  340,  346,  346,  347,  353,  340,  348,
+      348,  351,  356,  343,  340,  340,  113,  350,  356,  351,
+      352,  352,  353,  354,  354,  355,  357,  358,  355,  359,
+      361,  360,  362,  362,  357,  358,  360,  361,  363,  364,
+
+      365,  369,  364,  363,  366,  366,  367,  359,  370,  367,
+      369,  371,  370,  372,  365,  373,  376,  367,  374,  375,
+      378,  376,  372,  377,  374,  379,  380,  377,  381,  373,
+      371,  380,  384,  375,  382,  382,  386,  379,  383,  378,
+      385,  383,  387,  387,  388,  388,  389,  390,  392,  381,
+      384,  393,  396,  385,  394,  395,  386,  396,  399,  397,
+      397,  389,  400,  400,  398,  404,  393,  397,  394,  401,
+      399,  390,  391,  392,  401,  391,  395,  391,  398,  402,
+      403,  391,  409,  391,  404,  397,  407,  402,  391,  405,
+      405,  407,  408,  410,  403,  408,  412,  411,  413,  414,
+
+      415,  409,  411,  413,  418,  412,  410,  417,  419,  418,
+      420,  421,  426,  419,  415,  420,  422,  422,  423,  414,
+      421,  427,  417,  423,  425,  425,  428,  426,  425,  428,
+      429,  430,  432,  433,  431,  429,  430,  431,  434,  435,
+      436,  427,  443,  437,  435,  436,  437,  438,  441,  439,
+      432,  434,  440,  433,  439,  442,  442,  440,  438,  444,
+      445,  443,  446,  441,  445,  447,  448,  451,  454,  455,
+      452,  453,  456,  444,  447,  452,  453,  456,  457,  459,
+      446,  451,  454,  455,  458,  458,  460,  461,  462,  464,
+      463,  448,  461,  457,  463,  460,  465,  459,  466,  467,
+
+      468,  470,  469,  471,  464,  472,  476,  462,  469,  569,
+      474,  465,  569,  475,  472,  479,  470,  466,  468,  484,
+      467,  475,  477,  471,  474,  478,  476,  477,  479,  478,
+      478,  480,  481,  481,  482,  483,  480,  484,  485,  482,
+      486,  487,  489,  485,  488,  486,  487,  491,  488,  483,
+      490,  489,  492,  493,  490,  494,  489,  495,  489,  496,
+      489,  497,  491,  494,  498,  498,  492,  499,  499,  500,
+      501,  501,  493,  502,  500,  495,  504,  503,  505,  507,
+      497,  504,  506,  513,  496,  503,  507,  509,  506,  510,
+      511,  512,  509,  502,  510,  511,  505,  514,  514,  515,
+
+      512,  516,  513,  519,  517,  518,  518,  520,  521,  523,
+      524,  525,  527,  523,  523,  526,  527,  529,  528,  515,
+      530,  516,  517,  519,  534,  531,  521,  532,  533,  525,
+      531,  529,  520,  533,  532,  526,  524,  528,  535,  530,
+      536,  537,  534,  538,  539,  540,  544,  535,  538,  539,
+      540,  541,  541,  543,  548,  536,  545,  549,  543,  548,
+      545,  545,  537,  546,  546,  544,  547,  550,  551,  552,
+      553,  554,  547,  111,  555,  557,  549,  556,  556,  557,
+      558,  559,  560,  560,  553,  561,  550,  551,  552,  555,
+      561,  562,  554,  558,  563,  564,  567,  567,  570,  563,
+
+      564,  559,  571,  572,  573,  574,  574,  577,  572,  575,
+      581,  562,  578,  570,  576,  576,  578,  579,  577,  573,
+      582,  583,  587,  591,  109,  585,  586,  571,  581,  575,
+      585,  586,  588,  593,  590,  594,  579,  600,  588,  590,
+      582,  583,  587,  592,  592,  595,  599,  596,  591,  601,
+      595,  593,  596,  597,  597,  594,  598,  600,  602,  605,
+      603,  598,  604,  606,  599,  607,  608,  604,  609,  601,
+      614,  610,  602,  603,  619,  613,  615,  609,   72,  605,
+      609,  608,  616,  606,  613,  615,  607,  610,  615,  614,
+      617,  616,  618,  618,  619,  617,  620,  621,  622,  623,
+
+      624,  624,  625,  627,  633,  628,  632,  629,  627,  620,
+      628,  634,  622,  629,  632,  621,  630,  623,  635,  630,
+      625,  636,  633,  638,  639,  630,  640,  641,  639,  642,
+      634,  640,  641,  643,  635,  644,  645,  646,  642,  636,
+      647,  645,  650,  638,  648,  649,  649,  644,  643,  646,
+      648,  650,  651,  651,  652,  653,  654,  654,  647,  652,
+      655,  655,  656,  656,  657,  659,  660,  657,  661,  662,
+      659,  663,  663,  661,  664,  653,  665,  666,  667,  664,
+      668,  669,  670,  672,  660,  671,  671,  675,  665,  673,
+      665,  677,  674,  678,  662,  665,  673,  666,  667,  682,
+
+      668,  674,  669,  672,  676,  676,  680,  681,  670,  678,
+      684,  680,  681,  675,  683,  684,  685,  677,  686,  682,
+      687,  683,  688,  689,  690,  685,  691,  699,  688,  692,
+       70,  693,  689,  686,  692,  693,  693,  694,  695,  687,
+      691,  696,  694,  697,  698,  690,  696,  701,  698,  700,
+      695,  702,  699,  704,  700,  697,  703,  703,  706,  704,
+      705,  707,  709,  702,  706,  705,  711,  711,  712,  701,
+      707,  716,  717,  719,  709,  719,  716,  712,  711,  718,
+      718,  720,  720,  722,  723,  723,  724,  725,  726,  717,
+      727,  728,  729,  730,  731,  732,  731,  734,  730,  725,
+
+      726,  739,  727,  722,  733,  733,  728,  724,  736,  735,
+      736,  737,  729,  732,  735,  738,  737,  740,  744,  739,
+      738,  741,  742,  734,  743,  747,  741,  742,  745,  746,
+      748,  749,  744,  750,  747,  751,  755,  740,  746,  752,
+      745,  746,  748,  743,  749,  752,  754,  756,  757,  757,
+      758,  751,  754,  750,  759,  761,  756,  764,  760,  758,
+      761,  755,  760,  762,  762,  767,  764,  765,  765,  766,
+      766,  768,  770,  759,  769,  771,  768,  767,  769,  772,
+      773,  774,  775,  777,  778,  786,  777,  770,   68,  779,
+      780,  780,  783,  774,  771,  781,  781,  778,  772,  782,
+
+      782,  773,  779,  775,  786,  783,  784,  784,  785,  785,
+      787,  787,  789,  790,  790,  791,  794,  789,  792,  792,
+      793,  795,  794,  798,  795,  796,  796,  797,  797,  799,
+      799,  800,  800,  801,  791,  802,  802,  803,  793,  804,
+      805,  796,  798,  806,  804,  807,  808,  809,  806,  803,
+      811,  813,  810,  814,  811,  808,  809,  810,   65,  801,
+      807,  805,  814,  815,  815,  816,  818,  825,  821,  820,
+      816,  813,  820,  821,  822,  822,  823,  826,  818,  824,
+      823,  827,  824,  828,  829,  830,  827,  825,  828,  831,
+      829,  832,  903,  833,  831,  833,  848,  826,  847,  832,
+
+      903,  830,  836,  836,  839,  839,  841,  841,  843,  843,
+      845,  846,  846,  859,  847,  845,  849,  854,  848,  851,
+      851,  849,  854,  855,  856,  855,  857,  857,  858,  856,
+      860,  859,  861,  862,  863,  864,  864,  865,  866,  867,
+      858,   58,  860,  868,  861,  862,  865,  869,  870,  871,
+      871,  873,  869,  870,  863,  876,  868,  874,  874,  867,
+      877,  875,  879,  878,  866,  880,  880,  881,  882,  873,
+      875,  883,  881,  876,  884,  888,  891,  889,  877,  878,
+      889,  879,  892,  882,  890,  890,  894,  894,  895,  899,
+      883,  891,  896,  896,  884,  888,  898,  898,  901,  900,
+
+      892,  902,  905,  901,  906,  907,  902,  895,  900,  906,
+      907,  899,  908,  909,  909,  910,  910,  905,  912,  913,
+      915,  914,  920,  912,  914,  916,  918,  908,  921,  915,
+      923,  913,  917,  917,  916,  918,  922,  922,  924,  923,
+      925,  920,  927,  928,  932,  925,  924,  921,  930,  930,
+      937,  927,  933,  933,  934,  938,  928,  934,  935,  935,
+      936,  936,  939,  944,  932,  940,  940,  939,  937,  938,
+      941,  945,  946,  947,  941,  948,  949,  950,  951,  945,
+      948,  952,  944,  954,  955,   54,  954,  951,  958,  947,
+      957,  946,  956,  956,  957,  960,  949,  958,  961,  962,
+
+      965,  952,  955,  950,  960,  965,  966,  966,  967,  969,
+      961,  970,  971,  973,  969,  972,  972,  967,  974,  977,
+      975,  976,  978,  983,  962,  984,  976,  971,  975,  973,
+      970,  979,  979,  980,  982,  982,  987,  974,  980,  985,
+      985,  978,  988,  983,  989,  977,  992,  984,  986,  986,
+      990,  990,  991,  991,  988,  987,  994,  995,  995,  996,
+      996,  994,  997,  997,  989,  992,  998,  999,  999, 1001,
+     1001,  998, 1003, 1003, 1004, 1007, 1008, 1008, 1012, 1004,
+     1009, 1022, 1013, 1007, 1024, 1009, 1013, 1017, 1017, 1019,
+     1021, 1021, 1036, 1019, 1025, 1025, 1022, 1030, 1012, 1026,
+
+     1026, 1038, 1024, 1028, 1028, 1031, 1031, 1035, 1040, 1030,
+     1038, 1035, 1036, 1037, 1037, 1041, 1042, 1043, 1043,   49,
+       48,   44,   40, 1040,   14,   13,    0,    0,    0, 1041,
+        0,    0,    0,    0,    0, 1042, 1046, 1046, 1046, 1046,
+     1046, 1046, 1047, 1047, 1047, 1047, 1047, 1047, 1048, 1048,
+     1048, 1048, 1048, 1048, 1049, 1049, 1049, 1049, 1049, 1049,
+     1050, 1050, 1050, 1050, 1050, 1050, 1052, 1052, 1052, 1052,
+     1052, 1052, 1053, 1053,    0,    0, 1053, 1053, 1054, 1054,
+        0, 1054,    0, 1054, 1055,    0,    0,    0,    0, 1055,
+     1056, 1056,    0,    0, 1056, 1056, 1057,    0,    0,    0,
+
+        0, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1059, 1059,
+     1059, 1059, 1059, 1059, 1045, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1285,7 +1295,13 @@ void ub_c_error(const char *message);
 #define LEXOUT(s)
 #endif
 
-#define YDOUT LEXOUT(("v(%s )", yytext))
+/** A parser variable, this is a statement in the config file which is
+ * of the form variable: value1 value2 ...  nargs is the number of values. */
+#define YDVAR(nargs, var) \
+       num_args=(nargs); \
+       LEXOUT(("v(%s%d) ", yytext, num_args)); \
+       if(num_args > 0) { BEGIN(val); } \
+       return (var);
 
 struct inc_state {
        char* filename;
@@ -1294,6 +1310,8 @@ struct inc_state {
 static struct inc_state parse_stack[MAXINCLUDES];
 static YY_BUFFER_STATE include_stack[MAXINCLUDES];
 static int config_include_stack_ptr = 0;
+static int inc_prev = 0;
+static int num_args = 0;
 
 static void config_start_include(const char* filename)
 {
@@ -1346,7 +1364,7 @@ static void config_end_include(void)
 #endif
 
 #define YY_NO_INPUT 1
-#line 92 "util/configlexer.lex"
+#line 100 "util/configlexer.lex"
 #ifndef YY_NO_UNPUT
 #define YY_NO_UNPUT 1
 #endif
@@ -1354,13 +1372,14 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 1357 "<stdout>"
+#line 1375 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
 #define singlequotedstr 2
 #define include 3
 #define include_quoted 4
+#define val 5
 
 #ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -1538,9 +1557,9 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 111 "util/configlexer.lex"
+#line 120 "util/configlexer.lex"
 
-#line 1543 "<stdout>"
+#line 1562 "<stdout>"
 
        if ( !(yy_init) )
                {
@@ -1599,13 +1618,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 >= 1025 )
+                               if ( yy_current_state >= 1046 )
                                        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] != 2099 );
+               while ( yy_base[yy_current_state] != 2115 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1631,500 +1650,507 @@ do_action:    /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 112 "util/configlexer.lex"
-{ LEXOUT(("SP ")); /* ignore */ }
+#line 121 "util/configlexer.lex"
+{ 
+       LEXOUT(("SP ")); /* ignore */ }
        YY_BREAK
 case 2:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 113 "util/configlexer.lex"
-{ LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
+#line 123 "util/configlexer.lex"
+{ 
+       LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 114 "util/configlexer.lex"
-{ YDOUT; return VAR_SERVER;}
+#line 125 "util/configlexer.lex"
+{ YDVAR(0, VAR_SERVER) }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 115 "util/configlexer.lex"
-{ YDOUT; return VAR_NUM_THREADS;}
+#line 126 "util/configlexer.lex"
+{ YDVAR(1, VAR_NUM_THREADS) }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 116 "util/configlexer.lex"
-{ YDOUT; return VAR_VERBOSITY;}
+#line 127 "util/configlexer.lex"
+{ YDVAR(1, VAR_VERBOSITY) }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 117 "util/configlexer.lex"
-{ YDOUT; return VAR_PORT;}
+#line 128 "util/configlexer.lex"
+{ YDVAR(1, VAR_PORT) }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 118 "util/configlexer.lex"
-{ YDOUT; return VAR_OUTGOING_RANGE;}
+#line 129 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_RANGE) }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 119 "util/configlexer.lex"
-{ YDOUT; return VAR_OUTGOING_PORT_PERMIT;}
+#line 130 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 120 "util/configlexer.lex"
-{ YDOUT; return VAR_OUTGOING_PORT_AVOID;}
+#line 131 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 121 "util/configlexer.lex"
-{ YDOUT; return VAR_OUTGOING_NUM_TCP;}
+#line 132 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_NUM_TCP) }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 122 "util/configlexer.lex"
-{ YDOUT; return VAR_INCOMING_NUM_TCP;}
+#line 133 "util/configlexer.lex"
+{ YDVAR(1, VAR_INCOMING_NUM_TCP) }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 123 "util/configlexer.lex"
-{ YDOUT; return VAR_DO_IP4;}
+#line 134 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_IP4) }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 124 "util/configlexer.lex"
-{ YDOUT; return VAR_DO_IP6;}
+#line 135 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_IP6) }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 125 "util/configlexer.lex"
-{ YDOUT; return VAR_DO_UDP;}
+#line 136 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_UDP) }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 126 "util/configlexer.lex"
-{ YDOUT; return VAR_DO_TCP;}
+#line 137 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_TCP) }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 127 "util/configlexer.lex"
-{ YDOUT; return VAR_DO_DAEMONIZE;}
+#line 138 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_DAEMONIZE) }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 128 "util/configlexer.lex"
-{ YDOUT; return VAR_INTERFACE;}
+#line 139 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE) }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 129 "util/configlexer.lex"
-{ YDOUT; return VAR_OUTGOING_INTERFACE;}
+#line 140 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 130 "util/configlexer.lex"
-{ YDOUT; return VAR_INTERFACE_AUTOMATIC;}
+#line 141 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 131 "util/configlexer.lex"
-{ YDOUT; return VAR_CHROOT;}
+#line 142 "util/configlexer.lex"
+{ YDVAR(1, VAR_CHROOT) }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 132 "util/configlexer.lex"
-{ YDOUT; return VAR_USERNAME;}
+#line 143 "util/configlexer.lex"
+{ YDVAR(1, VAR_USERNAME) }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 133 "util/configlexer.lex"
-{ YDOUT; return VAR_DIRECTORY;}
+#line 144 "util/configlexer.lex"
+{ YDVAR(1, VAR_DIRECTORY) }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 134 "util/configlexer.lex"
-{ YDOUT; return VAR_LOGFILE;}
+#line 145 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOGFILE) }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 135 "util/configlexer.lex"
-{ YDOUT; return VAR_PIDFILE;}
+#line 146 "util/configlexer.lex"
+{ YDVAR(1, VAR_PIDFILE) }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 136 "util/configlexer.lex"
-{ YDOUT; return VAR_ROOT_HINTS;}
+#line 147 "util/configlexer.lex"
+{ YDVAR(1, VAR_ROOT_HINTS) }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 137 "util/configlexer.lex"
-{ YDOUT; return VAR_MSG_BUFFER_SIZE;}
+#line 148 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 138 "util/configlexer.lex"
-{ YDOUT; return VAR_MSG_CACHE_SIZE;}
+#line 149 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 139 "util/configlexer.lex"
-{ YDOUT; return VAR_MSG_CACHE_SLABS;}
+#line 150 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 140 "util/configlexer.lex"
-{ YDOUT; return VAR_RRSET_CACHE_SIZE;}
+#line 151 "util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 141 "util/configlexer.lex"
-{ YDOUT; return VAR_RRSET_CACHE_SLABS;}
+#line 152 "util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 142 "util/configlexer.lex"
-{ YDOUT; return VAR_CACHE_MAX_TTL;}
+#line 153 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 143 "util/configlexer.lex"
-{ YDOUT; return VAR_INFRA_HOST_TTL;}
+#line 154 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 144 "util/configlexer.lex"
-{ YDOUT; return VAR_INFRA_LAME_TTL;}
+#line 155 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 145 "util/configlexer.lex"
-{ YDOUT; return VAR_INFRA_CACHE_SLABS;}
+#line 156 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 146 "util/configlexer.lex"
-{ YDOUT; return VAR_INFRA_CACHE_NUMHOSTS;}
+#line 157 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 147 "util/configlexer.lex"
-{ YDOUT; return VAR_INFRA_CACHE_LAME_SIZE;}
+#line 158 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 148 "util/configlexer.lex"
-{ YDOUT; return VAR_NUM_QUERIES_PER_THREAD;}
+#line 159 "util/configlexer.lex"
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 149 "util/configlexer.lex"
-{ YDOUT; return VAR_JOSTLE_TIMEOUT;}
+#line 160 "util/configlexer.lex"
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 150 "util/configlexer.lex"
-{ YDOUT; return VAR_TARGET_FETCH_POLICY;}
+#line 161 "util/configlexer.lex"
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 151 "util/configlexer.lex"
-{ YDOUT; return VAR_HARDEN_SHORT_BUFSIZE;}
+#line 162 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 152 "util/configlexer.lex"
-{ YDOUT; return VAR_HARDEN_LARGE_QUERIES;}
+#line 163 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 153 "util/configlexer.lex"
-{ YDOUT; return VAR_HARDEN_GLUE;}
+#line 164 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_GLUE) }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 154 "util/configlexer.lex"
-{ YDOUT; return VAR_HARDEN_DNNSEC_STRIPPED;}
+#line 165 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_DNNSEC_STRIPPED) }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 155 "util/configlexer.lex"
-{ YDOUT; return VAR_HARDEN_REFERRAL_PATH;}
+#line 166 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 156 "util/configlexer.lex"
-{ YDOUT; return VAR_USE_CAPS_FOR_ID;}
+#line 167 "util/configlexer.lex"
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 157 "util/configlexer.lex"
-{ YDOUT; return VAR_UNWANTED_REPLY_THRESHOLD;}
+#line 168 "util/configlexer.lex"
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 158 "util/configlexer.lex"
-{ YDOUT; return VAR_PRIVATE_ADDRESS;}
+#line 169 "util/configlexer.lex"
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 159 "util/configlexer.lex"
-{ YDOUT; return VAR_PRIVATE_DOMAIN;}
+#line 170 "util/configlexer.lex"
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 160 "util/configlexer.lex"
-{ YDOUT; return VAR_STUB_ZONE;}
+#line 171 "util/configlexer.lex"
+{ YDVAR(0, VAR_STUB_ZONE) }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 161 "util/configlexer.lex"
-{ YDOUT; return VAR_NAME;}
+#line 172 "util/configlexer.lex"
+{ YDVAR(1, VAR_NAME) }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 162 "util/configlexer.lex"
-{ YDOUT; return VAR_STUB_ADDR;}
+#line 173 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_ADDR) }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 163 "util/configlexer.lex"
-{ YDOUT; return VAR_STUB_HOST;}
+#line 174 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_HOST) }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 164 "util/configlexer.lex"
-{ YDOUT; return VAR_STUB_PRIME;}
+#line 175 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_PRIME) }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 165 "util/configlexer.lex"
-{ YDOUT; return VAR_FORWARD_ZONE;}
+#line 176 "util/configlexer.lex"
+{ YDVAR(0, VAR_FORWARD_ZONE) }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 166 "util/configlexer.lex"
-{ YDOUT; return VAR_FORWARD_ADDR;}
+#line 177 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_ADDR) }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 167 "util/configlexer.lex"
-{ YDOUT; return VAR_FORWARD_HOST;}
+#line 178 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_HOST) }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 168 "util/configlexer.lex"
-{ YDOUT; return VAR_DO_NOT_QUERY_ADDRESS;}
+#line 179 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 169 "util/configlexer.lex"
-{ YDOUT; return VAR_DO_NOT_QUERY_LOCALHOST;}
+#line 180 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 170 "util/configlexer.lex"
-{ YDOUT; return VAR_ACCESS_CONTROL;}
+#line 181 "util/configlexer.lex"
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 171 "util/configlexer.lex"
-{ YDOUT; return VAR_HIDE_IDENTITY;}
+#line 182 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 172 "util/configlexer.lex"
-{ YDOUT; return VAR_HIDE_VERSION;}
+#line 183 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 173 "util/configlexer.lex"
-{ YDOUT; return VAR_IDENTITY;}
+#line 184 "util/configlexer.lex"
+{ YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 174 "util/configlexer.lex"
-{ YDOUT; return VAR_VERSION;}
+#line 185 "util/configlexer.lex"
+{ YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 175 "util/configlexer.lex"
-{ YDOUT; return VAR_MODULE_CONF;}
+#line 186 "util/configlexer.lex"
+{ YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 176 "util/configlexer.lex"
-{ YDOUT; return VAR_DLV_ANCHOR;}
+#line 187 "util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 177 "util/configlexer.lex"
-{ YDOUT; return VAR_DLV_ANCHOR_FILE;}
+#line 188 "util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 178 "util/configlexer.lex"
-{ YDOUT; return VAR_TRUST_ANCHOR_FILE;}
+#line 189 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 179 "util/configlexer.lex"
-{ YDOUT; return VAR_TRUSTED_KEYS_FILE;}
+#line 190 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 180 "util/configlexer.lex"
-{ YDOUT; return VAR_TRUST_ANCHOR;}
+#line 191 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 181 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_OVERRIDE_DATE;}
+#line 192 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 182 "util/configlexer.lex"
-{ YDOUT; return VAR_BOGUS_TTL;}
+#line 193 "util/configlexer.lex"
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 183 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_CLEAN_ADDITIONAL;}
+#line 194 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 184 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_PERMISSIVE_MODE;}
+#line 195 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 185 "util/configlexer.lex"
-{ YDOUT; return VAR_KEY_CACHE_SIZE;}
+#line 196 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 186 "util/configlexer.lex"
-{ YDOUT; return VAR_KEY_CACHE_SLABS;}
+#line 197 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 187 "util/configlexer.lex"
-{ YDOUT; return VAR_NEG_CACHE_SIZE;}
+#line 198 "util/configlexer.lex"
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 188 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_NSEC3_KEYSIZE_ITERATIONS;}
+#line 199 "util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 189 "util/configlexer.lex"
-{ YDOUT; return VAR_USE_SYSLOG;}
+#line 201 "util/configlexer.lex"
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 190 "util/configlexer.lex"
-{ YDOUT; return VAR_LOCAL_ZONE;}
+#line 202 "util/configlexer.lex"
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 191 "util/configlexer.lex"
-{ YDOUT; return VAR_LOCAL_DATA;}
+#line 203 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 192 "util/configlexer.lex"
-{ YDOUT; return VAR_LOCAL_DATA_PTR;}
+#line 204 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 193 "util/configlexer.lex"
-{ YDOUT; return VAR_STATISTICS_INTERVAL;}
+#line 205 "util/configlexer.lex"
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 194 "util/configlexer.lex"
-{ YDOUT; return VAR_STATISTICS_CUMULATIVE;}
+#line 206 "util/configlexer.lex"
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 195 "util/configlexer.lex"
-{ YDOUT; return VAR_EXTENDED_STATISTICS;}
+#line 207 "util/configlexer.lex"
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 196 "util/configlexer.lex"
-{ YDOUT; return VAR_REMOTE_CONTROL; }
+#line 208 "util/configlexer.lex"
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 197 "util/configlexer.lex"
-{ YDOUT; return VAR_CONTROL_ENABLE; }
+#line 209 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 198 "util/configlexer.lex"
-{ YDOUT; return VAR_CONTROL_INTERFACE; }
+#line 210 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 199 "util/configlexer.lex"
-{ YDOUT; return VAR_CONTROL_PORT; }
+#line 211 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 200 "util/configlexer.lex"
-{ YDOUT; return VAR_SERVER_KEY_FILE; }
+#line 212 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 201 "util/configlexer.lex"
-{ YDOUT; return VAR_SERVER_CERT_FILE; }
+#line 213 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 202 "util/configlexer.lex"
-{ YDOUT; return VAR_CONTROL_KEY_FILE; }
+#line 214 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 203 "util/configlexer.lex"
-{ YDOUT; return VAR_CONTROL_CERT_FILE; }
+#line 215 "util/configlexer.lex"
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 93:
 /* rule 93 can match eol */
 YY_RULE_SETUP
-#line 204 "util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+#line 216 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
 case 94:
 YY_RULE_SETUP
-#line 207 "util/configlexer.lex"
+#line 219 "util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 208 "util/configlexer.lex"
+#line 220 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
 }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 212 "util/configlexer.lex"
+#line 224 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 96:
 /* rule 96 can match eol */
 YY_RULE_SETUP
-#line 213 "util/configlexer.lex"
-{ cfg_parser->line++; yymore(); }
+#line 225 "util/configlexer.lex"
+{ yyerror("newline inside quoted string, no end \""); 
+                         cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 214 "util/configlexer.lex"
+#line 227 "util/configlexer.lex"
 {
         LEXOUT(("QE "));
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
         yytext[yyleng - 1] = '\0';
        yylval.str = strdup(yytext);
        if(!yylval.str)
@@ -2135,33 +2161,34 @@ YY_RULE_SETUP
 /* Single Quoted strings. Strip leading and ending quotes */
 case 98:
 YY_RULE_SETUP
-#line 225 "util/configlexer.lex"
+#line 238 "util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 226 "util/configlexer.lex"
+#line 239 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
 }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 230 "util/configlexer.lex"
+#line 243 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 100:
 /* rule 100 can match eol */
 YY_RULE_SETUP
-#line 231 "util/configlexer.lex"
-{ cfg_parser->line++; yymore(); }
+#line 244 "util/configlexer.lex"
+{ yyerror("newline inside quoted string, no end '"); 
+                            cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 232 "util/configlexer.lex"
+#line 246 "util/configlexer.lex"
 {
         LEXOUT(("SQE "));
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
         yytext[yyleng - 1] = '\0';
        yylval.str = strdup(yytext);
        if(!yylval.str)
@@ -2172,72 +2199,74 @@ YY_RULE_SETUP
 /* include: directive */
 case 102:
 YY_RULE_SETUP
-#line 243 "util/configlexer.lex"
-{ LEXOUT(("v(%s) ", yytext)); BEGIN(include); }
+#line 257 "util/configlexer.lex"
+{ 
+       LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 244 "util/configlexer.lex"
+#line 259 "util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
-        BEGIN(INITIAL);
+        BEGIN(inc_prev);
 }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 248 "util/configlexer.lex"
+#line 263 "util/configlexer.lex"
 { LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 104:
 /* rule 104 can match eol */
 YY_RULE_SETUP
-#line 249 "util/configlexer.lex"
+#line 264 "util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 250 "util/configlexer.lex"
+#line 265 "util/configlexer.lex"
 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 251 "util/configlexer.lex"
+#line 266 "util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include(yytext);
-       BEGIN(INITIAL);
+       BEGIN(inc_prev);
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 256 "util/configlexer.lex"
+#line 271 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
-        BEGIN(INITIAL);
+        BEGIN(inc_prev);
 }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 260 "util/configlexer.lex"
+#line 275 "util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 108:
 /* rule 108 can match eol */
 YY_RULE_SETUP
-#line 261 "util/configlexer.lex"
-{ yyerror("EOL before \" in include name"); 
-                                 cfg_parser->line++; BEGIN(INITIAL); }
+#line 276 "util/configlexer.lex"
+{ yyerror("newline before \" in include name"); 
+                                 cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 263 "util/configlexer.lex"
+#line 278 "util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
        config_start_include(yytext);
-       BEGIN(INITIAL);
+       BEGIN(inc_prev);
 }
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 269 "util/configlexer.lex"
+case YY_STATE_EOF(val):
+#line 284 "util/configlexer.lex"
 {
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
        if (config_include_stack_ptr == 0) {
@@ -2250,16 +2279,31 @@ case YY_STATE_EOF(INITIAL):
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 279 "util/configlexer.lex"
+#line 294 "util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
+                       if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING; }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 282 "util/configlexer.lex"
+#line 298 "util/configlexer.lex"
+{
+       ub_c_error_msg("unknown keyword '%s'", yytext);
+       }
+       YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 301 "util/configlexer.lex"
+{
+       ub_c_error_msg("stray '%s'", yytext);
+       }
+       YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 305 "util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 2262 "<stdout>"
+#line 2306 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -2549,7 +2593,7 @@ static int yy_get_next_buffer (void)
                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 >= 1025 )
+                       if ( yy_current_state >= 1046 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2577,11 +2621,11 @@ static int yy_get_next_buffer (void)
        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 >= 1025 )
+               if ( yy_current_state >= 1046 )
                        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 == 1024);
+       yy_is_jam = (yy_current_state == 1045);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3218,7 +3262,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 282 "util/configlexer.lex"
+#line 305 "util/configlexer.lex"
 
 
 
index 23864637f35f45586b732b7b8ced7aad4687e509..2dc1335ab81c88cb5777285a6c7be63103fa668d 100644 (file)
@@ -25,7 +25,13 @@ void ub_c_error(const char *message);
 #define LEXOUT(s)
 #endif
 
-#define YDOUT LEXOUT(("v(%s )", yytext))
+/** A parser variable, this is a statement in the config file which is
+ * of the form variable: value1 value2 ...  nargs is the number of values. */
+#define YDVAR(nargs, var) \
+       num_args=(nargs); \
+       LEXOUT(("v(%s%d) ", yytext, num_args)); \
+       if(num_args > 0) { BEGIN(val); } \
+       return (var);
 
 struct inc_state {
        char* filename;
@@ -34,6 +40,8 @@ struct inc_state {
 static struct inc_state parse_stack[MAXINCLUDES];
 static YY_BUFFER_STATE include_stack[MAXINCLUDES];
 static int config_include_stack_ptr = 0;
+static int inc_prev = 0;
+static int num_args = 0;
 
 static void config_start_include(const char* filename)
 {
@@ -100,120 +108,125 @@ static void config_end_include(void)
 SPACE   [ \t]
 LETTER  [a-zA-Z]
 UNQUOTEDLETTER [^\'\"\n\r \t\\]|\\.
+UNQUOTEDLETTER_NOCOLON [^\:\'\"\n\r \t\\]|\\.
 NEWLINE [\r\n]
 COMMENT \#
 COLON  \:
 DQANY     [^\"\n\r\\]|\\.
 SQANY     [^\'\n\r\\]|\\.
 
-%x     quotedstring singlequotedstr include include_quoted
+%x     quotedstring singlequotedstr include include_quoted val
 
 %%
-{SPACE}*               { LEXOUT(("SP ")); /* ignore */ }
-{SPACE}*{COMMENT}.*    { LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
-server{COLON}          { YDOUT; return VAR_SERVER;}
-num-threads{COLON}     { YDOUT; return VAR_NUM_THREADS;}
-verbosity{COLON}       { YDOUT; return VAR_VERBOSITY;}
-port{COLON}            { YDOUT; return VAR_PORT;}
-outgoing-range{COLON}  { YDOUT; return VAR_OUTGOING_RANGE;}
-outgoing-port-permit{COLON}    { YDOUT; return VAR_OUTGOING_PORT_PERMIT;}
-outgoing-port-avoid{COLON}     { YDOUT; return VAR_OUTGOING_PORT_AVOID;}
-outgoing-num-tcp{COLON}        { YDOUT; return VAR_OUTGOING_NUM_TCP;}
-incoming-num-tcp{COLON}        { YDOUT; return VAR_INCOMING_NUM_TCP;}
-do-ip4{COLON}          { YDOUT; return VAR_DO_IP4;}
-do-ip6{COLON}          { YDOUT; return VAR_DO_IP6;}
-do-udp{COLON}          { YDOUT; return VAR_DO_UDP;}
-do-tcp{COLON}          { YDOUT; return VAR_DO_TCP;}
-do-daemonize{COLON}            { YDOUT; return VAR_DO_DAEMONIZE;}
-interface{COLON}       { YDOUT; return VAR_INTERFACE;}
-outgoing-interface{COLON}      { YDOUT; return VAR_OUTGOING_INTERFACE;}
-interface-automatic{COLON}     { YDOUT; return VAR_INTERFACE_AUTOMATIC;}
-chroot{COLON}          { YDOUT; return VAR_CHROOT;}
-username{COLON}                { YDOUT; return VAR_USERNAME;}
-directory{COLON}       { YDOUT; return VAR_DIRECTORY;}
-logfile{COLON}         { YDOUT; return VAR_LOGFILE;}
-pidfile{COLON}         { YDOUT; return VAR_PIDFILE;}
-root-hints{COLON}      { YDOUT; return VAR_ROOT_HINTS;}
-msg-buffer-size{COLON} { YDOUT; return VAR_MSG_BUFFER_SIZE;}
-msg-cache-size{COLON}  { YDOUT; return VAR_MSG_CACHE_SIZE;}
-msg-cache-slabs{COLON} { YDOUT; return VAR_MSG_CACHE_SLABS;}
-rrset-cache-size{COLON}        { YDOUT; return VAR_RRSET_CACHE_SIZE;}
-rrset-cache-slabs{COLON}       { YDOUT; return VAR_RRSET_CACHE_SLABS;}
-cache-max-ttl{COLON}           { YDOUT; return VAR_CACHE_MAX_TTL;}
-infra-host-ttl{COLON}  { YDOUT; return VAR_INFRA_HOST_TTL;}
-infra-lame-ttl{COLON}  { YDOUT; return VAR_INFRA_LAME_TTL;}
-infra-cache-slabs{COLON}       { YDOUT; return VAR_INFRA_CACHE_SLABS;}
-infra-cache-numhosts{COLON}    { YDOUT; return VAR_INFRA_CACHE_NUMHOSTS;}
-infra-cache-lame-size{COLON}   { YDOUT; return VAR_INFRA_CACHE_LAME_SIZE;}
-num-queries-per-thread{COLON}  { YDOUT; return VAR_NUM_QUERIES_PER_THREAD;}
-jostle-timeout{COLON}  { YDOUT; return VAR_JOSTLE_TIMEOUT;}
-target-fetch-policy{COLON}     { YDOUT; return VAR_TARGET_FETCH_POLICY;}
-harden-short-bufsize{COLON}    { YDOUT; return VAR_HARDEN_SHORT_BUFSIZE;}
-harden-large-queries{COLON}    { YDOUT; return VAR_HARDEN_LARGE_QUERIES;}
-harden-glue{COLON}     { YDOUT; return VAR_HARDEN_GLUE;}
-harden-dnssec-stripped{COLON}  { YDOUT; return VAR_HARDEN_DNNSEC_STRIPPED;}
-harden-referral-path{COLON}    { YDOUT; return VAR_HARDEN_REFERRAL_PATH;}
-use-caps-for-id{COLON} { YDOUT; return VAR_USE_CAPS_FOR_ID;}
-unwanted-reply-threshold{COLON}        { YDOUT; return VAR_UNWANTED_REPLY_THRESHOLD;}
-private-address{COLON} { YDOUT; return VAR_PRIVATE_ADDRESS;}
-private-domain{COLON}  { YDOUT; return VAR_PRIVATE_DOMAIN;}
-stub-zone{COLON}       { YDOUT; return VAR_STUB_ZONE;}
-name{COLON}            { YDOUT; return VAR_NAME;}
-stub-addr{COLON}       { YDOUT; return VAR_STUB_ADDR;}
-stub-host{COLON}       { YDOUT; return VAR_STUB_HOST;}
-stub-prime{COLON}      { YDOUT; return VAR_STUB_PRIME;}
-forward-zone{COLON}    { YDOUT; return VAR_FORWARD_ZONE;}
-forward-addr{COLON}    { YDOUT; return VAR_FORWARD_ADDR;}
-forward-host{COLON}    { YDOUT; return VAR_FORWARD_HOST;}
-do-not-query-address{COLON}    { YDOUT; return VAR_DO_NOT_QUERY_ADDRESS;}
-do-not-query-localhost{COLON}  { YDOUT; return VAR_DO_NOT_QUERY_LOCALHOST;}
-access-control{COLON}  { YDOUT; return VAR_ACCESS_CONTROL;}
-hide-identity{COLON}   { YDOUT; return VAR_HIDE_IDENTITY;}
-hide-version{COLON}     { YDOUT; return VAR_HIDE_VERSION;}
-identity{COLON}                { YDOUT; return VAR_IDENTITY;}
-version{COLON}         { YDOUT; return VAR_VERSION;}
-module-config{COLON}           { YDOUT; return VAR_MODULE_CONF;}
-dlv-anchor{COLON}      { YDOUT; return VAR_DLV_ANCHOR;}
-dlv-anchor-file{COLON} { YDOUT; return VAR_DLV_ANCHOR_FILE;}
-trust-anchor-file{COLON}       { YDOUT; return VAR_TRUST_ANCHOR_FILE;}
-trusted-keys-file{COLON}       { YDOUT; return VAR_TRUSTED_KEYS_FILE;}
-trust-anchor{COLON}    { YDOUT; return VAR_TRUST_ANCHOR;}
-val-override-date{COLON}       { YDOUT; return VAR_VAL_OVERRIDE_DATE;}
-val-bogus-ttl{COLON}   { YDOUT; return VAR_BOGUS_TTL;}
-val-clean-additional{COLON}    { YDOUT; return VAR_VAL_CLEAN_ADDITIONAL;}
-val-permissive-mode{COLON}     { YDOUT; return VAR_VAL_PERMISSIVE_MODE;}
-key-cache-size{COLON}  { YDOUT; return VAR_KEY_CACHE_SIZE;}
-key-cache-slabs{COLON} { YDOUT; return VAR_KEY_CACHE_SLABS;}
-neg-cache-size{COLON}  { YDOUT; return VAR_NEG_CACHE_SIZE;}
-val-nsec3-keysize-iterations{COLON}    { YDOUT; return VAR_VAL_NSEC3_KEYSIZE_ITERATIONS;}
-use-syslog{COLON}      { YDOUT; return VAR_USE_SYSLOG;}
-local-zone{COLON}      { YDOUT; return VAR_LOCAL_ZONE;}
-local-data{COLON}      { YDOUT; return VAR_LOCAL_DATA;}
-local-data-ptr{COLON}  { YDOUT; return VAR_LOCAL_DATA_PTR;}
-statistics-interval{COLON}     { YDOUT; return VAR_STATISTICS_INTERVAL;}
-statistics-cumulative{COLON}   { YDOUT; return VAR_STATISTICS_CUMULATIVE;}
-extended-statistics{COLON}     { YDOUT; return VAR_EXTENDED_STATISTICS;}
-remote-control{COLON}  { YDOUT; return VAR_REMOTE_CONTROL; }
-control-enable{COLON}  { YDOUT; return VAR_CONTROL_ENABLE; }
-control-interface{COLON}       { YDOUT; return VAR_CONTROL_INTERFACE; }
-control-port{COLON}    { YDOUT; return VAR_CONTROL_PORT; }
-server-key-file{COLON} { YDOUT; return VAR_SERVER_KEY_FILE; }
-server-cert-file{COLON}        { YDOUT; return VAR_SERVER_CERT_FILE; }
-control-key-file{COLON}        { YDOUT; return VAR_CONTROL_KEY_FILE; }
-control-cert-file{COLON}       { YDOUT; return VAR_CONTROL_CERT_FILE; }
-{NEWLINE}              { LEXOUT(("NL\n")); cfg_parser->line++;}
+<INITIAL,val>{SPACE}*  { 
+       LEXOUT(("SP ")); /* ignore */ }
+<INITIAL,val>{SPACE}*{COMMENT}.*$      { 
+       LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
+server{COLON}                  { YDVAR(0, VAR_SERVER) }
+num-threads{COLON}             { YDVAR(1, VAR_NUM_THREADS) }
+verbosity{COLON}               { YDVAR(1, VAR_VERBOSITY) }
+port{COLON}                    { YDVAR(1, VAR_PORT) }
+outgoing-range{COLON}          { YDVAR(1, VAR_OUTGOING_RANGE) }
+outgoing-port-permit{COLON}    { YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
+outgoing-port-avoid{COLON}     { YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
+outgoing-num-tcp{COLON}                { YDVAR(1, VAR_OUTGOING_NUM_TCP) }
+incoming-num-tcp{COLON}                { YDVAR(1, VAR_INCOMING_NUM_TCP) }
+do-ip4{COLON}                  { YDVAR(1, VAR_DO_IP4) }
+do-ip6{COLON}                  { YDVAR(1, VAR_DO_IP6) }
+do-udp{COLON}                  { YDVAR(1, VAR_DO_UDP) }
+do-tcp{COLON}                  { YDVAR(1, VAR_DO_TCP) }
+do-daemonize{COLON}            { YDVAR(1, VAR_DO_DAEMONIZE) }
+interface{COLON}               { YDVAR(1, VAR_INTERFACE) }
+outgoing-interface{COLON}      { YDVAR(1, VAR_OUTGOING_INTERFACE) }
+interface-automatic{COLON}     { YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+chroot{COLON}                  { YDVAR(1, VAR_CHROOT) }
+username{COLON}                        { YDVAR(1, VAR_USERNAME) }
+directory{COLON}               { YDVAR(1, VAR_DIRECTORY) }
+logfile{COLON}                 { YDVAR(1, VAR_LOGFILE) }
+pidfile{COLON}                 { YDVAR(1, VAR_PIDFILE) }
+root-hints{COLON}              { YDVAR(1, VAR_ROOT_HINTS) }
+msg-buffer-size{COLON}         { YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+msg-cache-size{COLON}          { YDVAR(1, VAR_MSG_CACHE_SIZE) }
+msg-cache-slabs{COLON}         { YDVAR(1, VAR_MSG_CACHE_SLABS) }
+rrset-cache-size{COLON}                { YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+rrset-cache-slabs{COLON}       { YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+cache-max-ttl{COLON}           { YDVAR(1, VAR_CACHE_MAX_TTL) }
+infra-host-ttl{COLON}          { YDVAR(1, VAR_INFRA_HOST_TTL) }
+infra-lame-ttl{COLON}          { YDVAR(1, VAR_INFRA_LAME_TTL) }
+infra-cache-slabs{COLON}       { YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+infra-cache-numhosts{COLON}    { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+infra-cache-lame-size{COLON}   { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+num-queries-per-thread{COLON}  { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+jostle-timeout{COLON}          { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+target-fetch-policy{COLON}     { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+harden-short-bufsize{COLON}    { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+harden-large-queries{COLON}    { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+harden-glue{COLON}             { YDVAR(1, VAR_HARDEN_GLUE) }
+harden-dnssec-stripped{COLON}  { YDVAR(1, VAR_HARDEN_DNNSEC_STRIPPED) }
+harden-referral-path{COLON}    { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+use-caps-for-id{COLON}         { YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+unwanted-reply-threshold{COLON}        { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+private-address{COLON}         { YDVAR(1, VAR_PRIVATE_ADDRESS) }
+private-domain{COLON}          { YDVAR(1, VAR_PRIVATE_DOMAIN) }
+stub-zone{COLON}               { YDVAR(0, VAR_STUB_ZONE) }
+name{COLON}                    { YDVAR(1, VAR_NAME) }
+stub-addr{COLON}               { YDVAR(1, VAR_STUB_ADDR) }
+stub-host{COLON}               { YDVAR(1, VAR_STUB_HOST) }
+stub-prime{COLON}              { YDVAR(1, VAR_STUB_PRIME) }
+forward-zone{COLON}            { YDVAR(0, VAR_FORWARD_ZONE) }
+forward-addr{COLON}            { YDVAR(1, VAR_FORWARD_ADDR) }
+forward-host{COLON}            { YDVAR(1, VAR_FORWARD_HOST) }
+do-not-query-address{COLON}    { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+do-not-query-localhost{COLON}  { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+access-control{COLON}          { YDVAR(2, VAR_ACCESS_CONTROL) }
+hide-identity{COLON}           { YDVAR(1, VAR_HIDE_IDENTITY) }
+hide-version{COLON}            { YDVAR(1, VAR_HIDE_VERSION) }
+identity{COLON}                        { YDVAR(1, VAR_IDENTITY) }
+version{COLON}                 { YDVAR(1, VAR_VERSION) }
+module-config{COLON}           { YDVAR(1, VAR_MODULE_CONF) }
+dlv-anchor{COLON}              { YDVAR(1, VAR_DLV_ANCHOR) }
+dlv-anchor-file{COLON}         { YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+trust-anchor-file{COLON}       { YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+trusted-keys-file{COLON}       { YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+trust-anchor{COLON}            { YDVAR(1, VAR_TRUST_ANCHOR) }
+val-override-date{COLON}       { YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+val-bogus-ttl{COLON}           { YDVAR(1, VAR_BOGUS_TTL) }
+val-clean-additional{COLON}    { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+val-permissive-mode{COLON}     { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+key-cache-size{COLON}          { YDVAR(1, VAR_KEY_CACHE_SIZE) }
+key-cache-slabs{COLON}         { YDVAR(1, VAR_KEY_CACHE_SLABS) }
+neg-cache-size{COLON}          { YDVAR(1, VAR_NEG_CACHE_SIZE) }
+val-nsec3-keysize-iterations{COLON}    { 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+use-syslog{COLON}              { YDVAR(1, VAR_USE_SYSLOG) }
+local-zone{COLON}              { YDVAR(2, VAR_LOCAL_ZONE) }
+local-data{COLON}              { YDVAR(1, VAR_LOCAL_DATA) }
+local-data-ptr{COLON}          { YDVAR(1, VAR_LOCAL_DATA_PTR) }
+statistics-interval{COLON}     { YDVAR(1, VAR_STATISTICS_INTERVAL) }
+statistics-cumulative{COLON}   { YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+extended-statistics{COLON}     { YDVAR(1, VAR_EXTENDED_STATISTICS) }
+remote-control{COLON}          { YDVAR(0, VAR_REMOTE_CONTROL) }
+control-enable{COLON}          { YDVAR(1, VAR_CONTROL_ENABLE) }
+control-interface{COLON}       { YDVAR(1, VAR_CONTROL_INTERFACE) }
+control-port{COLON}            { YDVAR(1, VAR_CONTROL_PORT) }
+server-key-file{COLON}         { YDVAR(1, VAR_SERVER_KEY_FILE) }
+server-cert-file{COLON}                { YDVAR(1, VAR_SERVER_CERT_FILE) }
+control-key-file{COLON}                { YDVAR(1, VAR_CONTROL_KEY_FILE) }
+control-cert-file{COLON}       { YDVAR(1, VAR_CONTROL_CERT_FILE) }
+<INITIAL,val>{NEWLINE}         { LEXOUT(("NL\n")); cfg_parser->line++; }
 
        /* Quoted strings. Strip leading and ending quotes */
-\"                     { BEGIN(quotedstring); LEXOUT(("QS ")); }
+<val>\"                        { BEGIN(quotedstring); LEXOUT(("QS ")); }
 <quotedstring><<EOF>>   {
         yyerror("EOF inside quoted string");
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
 }
 <quotedstring>{DQANY}*  { LEXOUT(("STR(%s) ", yytext)); yymore(); }
-<quotedstring>\n        { cfg_parser->line++; yymore(); }
+<quotedstring>{NEWLINE} { yyerror("newline inside quoted string, no end \""); 
+                         cfg_parser->line++; BEGIN(INITIAL); }
 <quotedstring>\" {
         LEXOUT(("QE "));
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
         yytext[yyleng - 1] = '\0';
        yylval.str = strdup(yytext);
        if(!yylval.str)
@@ -222,16 +235,17 @@ control-cert-file{COLON}  { YDOUT; return VAR_CONTROL_CERT_FILE; }
 }
 
        /* Single Quoted strings. Strip leading and ending quotes */
-\'                     { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
+<val>\'                        { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
 <singlequotedstr><<EOF>>   {
         yyerror("EOF inside quoted string");
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
 }
 <singlequotedstr>{SQANY}*  { LEXOUT(("STR(%s) ", yytext)); yymore(); }
-<singlequotedstr>\n        { cfg_parser->line++; yymore(); }
+<singlequotedstr>{NEWLINE} { yyerror("newline inside quoted string, no end '"); 
+                            cfg_parser->line++; BEGIN(INITIAL); }
 <singlequotedstr>\' {
         LEXOUT(("SQE "));
-        BEGIN(INITIAL);
+       if(--num_args == 0) { BEGIN(INITIAL); }
         yytext[yyleng - 1] = '\0';
        yylval.str = strdup(yytext);
        if(!yylval.str)
@@ -240,10 +254,11 @@ control-cert-file{COLON}  { YDOUT; return VAR_CONTROL_CERT_FILE; }
 }
 
        /* include: directive */
-include{COLON}         { LEXOUT(("v(%s) ", yytext)); BEGIN(include); }
+<INITIAL,val>include{COLON}    { 
+       LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
 <include><<EOF>>       {
         yyerror("EOF inside include directive");
-        BEGIN(INITIAL);
+        BEGIN(inc_prev);
 }
 <include>{SPACE}*      { LEXOUT(("ISP ")); /* ignore */ }
 <include>{NEWLINE}     { LEXOUT(("NL\n")); cfg_parser->line++;}
@@ -251,22 +266,22 @@ include{COLON}            { LEXOUT(("v(%s) ", yytext)); BEGIN(include); }
 <include>{UNQUOTEDLETTER}*     {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include(yytext);
-       BEGIN(INITIAL);
+       BEGIN(inc_prev);
 }
 <include_quoted><<EOF>>        {
         yyerror("EOF inside quoted string");
-        BEGIN(INITIAL);
+        BEGIN(inc_prev);
 }
 <include_quoted>{DQANY}*       { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
-<include_quoted>{NEWLINE}      { yyerror("EOL before \" in include name"); 
-                                 cfg_parser->line++; BEGIN(INITIAL); }
+<include_quoted>{NEWLINE}      { yyerror("newline before \" in include name"); 
+                                 cfg_parser->line++; BEGIN(inc_prev); }
 <include_quoted>\"     {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
        config_start_include(yytext);
-       BEGIN(INITIAL);
+       BEGIN(inc_prev);
 }
-<INITIAL><<EOF>>       {
+<INITIAL,val><<EOF>>   {
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
        if (config_include_stack_ptr == 0) {
                yyterminate();
@@ -276,7 +291,15 @@ include{COLON}             { LEXOUT(("v(%s) ", yytext)); BEGIN(include); }
        }
 }
 
-{UNQUOTEDLETTER}*      { LEXOUT(("unquotedstr(%s) ", yytext)); 
+<val>{UNQUOTEDLETTER}* { LEXOUT(("unquotedstr(%s) ", yytext)); 
+                       if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING; }
 
+{UNQUOTEDLETTER_NOCOLON}*      {
+       ub_c_error_msg("unknown keyword '%s'", yytext);
+       }
+.      {
+       ub_c_error_msg("stray '%s'", yytext);
+       }
+
 %%