]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: implement 'for range x {'
authorRuss Cox <rsc@golang.org>
Wed, 16 Jul 2014 23:27:10 +0000 (19:27 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 16 Jul 2014 23:27:10 +0000 (19:27 -0400)
Fixes #6102.

LGTM=gri
R=ken, r, gri
CC=golang-codereviews
https://golang.org/cl/113120043

12 files changed:
src/cmd/gc/esc.c
src/cmd/gc/fmt.c
src/cmd/gc/go.y
src/cmd/gc/range.c
src/cmd/gc/y.tab.c
src/cmd/gc/yerr.h
test/bench/shootout/chameneosredux.go
test/chan/perm.go
test/fixedbugs/bug173.go
test/fixedbugs/bug406.go
test/range.go
test/stress/maps.go

index 7ba1a4540a42e73ea826ee5d2acefd324a83a81e..324f24fcf89f3f39f17ab3097e9f6aa5c4667e49 100644 (file)
@@ -495,7 +495,7 @@ esc(EscState *e, Node *n, Node *up)
 
        case ORANGE:
                // Everything but fixed array is a dereference.
-               if(isfixedarray(n->type) && n->list->next)
+               if(isfixedarray(n->type) && n->list && n->list->next)
                        escassign(e, n->list->next->n, n->right);
                break;
 
index 4e3968588c5f077e30b7ac0d6bd3ed1074154b51..951170aeff2271797aa48aaeb8fba1657440c58a 100644 (file)
@@ -880,7 +880,11 @@ stmtfmt(Fmt *f, Node *n)
                        fmtstrcpy(f, "for loop");
                        break;
                }
-
+               
+               if(n->list == nil) {
+                       fmtprint(f, "for range %N { %H }", n->right, n->nbody);
+                       break;
+               }
                fmtprint(f, "for %,H = range %N { %H }", n->list, n->right, n->nbody);
                break;
 
index 5d5249ebc66933338ef3014eb59ee3791e70ad0b..b16f64b5d60e4aeea4c580b7b26b033f4fa618db 100644 (file)
@@ -613,6 +613,11 @@ range_stmt:
                $$->colas = 1;
                colasdefn($1, $$);
        }
+|      LRANGE expr
+       {
+               $$ = nod(ORANGE, N, $2);
+               $$->etype = 0; // := flag
+       }
 
 for_header:
        osimple_stmt ';' osimple_stmt ';' osimple_stmt
index 45aa521b3a82fbe6f1b1e76e44d64d17cb82884c..4ed45283238eb7de01864992faf87e3b532cf410 100644 (file)
@@ -67,9 +67,11 @@ typecheckrange(Node *n)
                yyerror("too many variables in range");
        }
 
-       v1 = n->list->n;
+       v1 = N;
+       if(n->list)
+               v1 = n->list->n;
        v2 = N;
-       if(n->list->next)
+       if(n->list && n->list->next)
                v2 = n->list->next->n;
 
        // this is not only a optimization but also a requirement in the spec.
@@ -77,14 +79,17 @@ typecheckrange(Node *n)
        // clause is equivalent to the same clause with only the first variable
        // present."
        if(isblank(v2)) {
-               n->list = list1(v1);
+               if(v1 != N)
+                       n->list = list1(v1);
                v2 = N;
        }
 
-       if(v1->defn == n)
-               v1->type = t1;
-       else if(v1->type != T && assignop(t1, v1->type, &why) == 0)
-               yyerror("cannot assign type %T to %lN in range%s", t1, v1, why);
+       if(v1) {
+               if(v1->defn == n)
+                       v1->type = t1;
+               else if(v1->type != T && assignop(t1, v1->type, &why) == 0)
+                       yyerror("cannot assign type %T to %lN in range%s", t1, v1, why);
+       }
        if(v2) {
                if(v2->defn == n)
                        v2->type = t2;
@@ -123,9 +128,11 @@ walkrange(Node *n)
        a = n->right;
        lno = setlineno(a);
 
-       v1 = n->list->n;
+       v1 = N;
+       if(n->list)
+               v1 = n->list->n;
        v2 = N;
-       if(n->list->next && !isblank(n->list->next->n))
+       if(n->list && n->list->next && !isblank(n->list->next->n))
                v2 = n->list->next->n;
        // n->list has no meaning anymore, clear it
        // to avoid erroneous processing by racewalk.
@@ -154,7 +161,9 @@ walkrange(Node *n)
 
                n->ntest = nod(OLT, hv1, hn);
                n->nincr = nod(OAS, hv1, nod(OADD, hv1, nodintconst(1)));
-               if(v2 == N)
+               if(v1 == N)
+                       body = nil;
+               else if(v2 == N)
                        body = list1(nod(OAS, v1, hv1));
                else {
                        a = nod(OAS2, N, N);
@@ -205,16 +214,18 @@ walkrange(Node *n)
 
                key = nod(ODOT, hit, keyname);
                key = nod(OIND, key, N);
-               if(v2 == N) {
-                       a = nod(OAS, v1, key);
+               if(v1 == N)
+                       body = nil;
+               else if(v2 == N) {
+                       body = list1(nod(OAS, v1, key));
                } else {
                        val = nod(ODOT, hit, valname);
                        val = nod(OIND, val, N);
                        a = nod(OAS2, N, N);
                        a->list = list(list1(v1), v2);
                        a->rlist = list(list1(key), val);
+                       body = list1(a);
                }
-               body = list1(a);
                break;
 
        case TCHAN:
@@ -223,6 +234,7 @@ walkrange(Node *n)
                n->ntest = N;
                
                hv1 = temp(t->type);
+               hv1->typecheck = 1;
                if(haspointers(t->type))
                        init = list(init, nod(OAS, hv1, N));
                hb = temp(types[TBOOL]);
@@ -233,7 +245,10 @@ walkrange(Node *n)
                a->list = list(list1(hv1), hb);
                a->rlist = list1(nod(ORECV, ha, N));
                n->ntest->ninit = list1(a);
-               body = list1(nod(OAS, v1, hv1));
+               if(v1 == N)
+                       body = nil;
+               else
+                       body = list1(nod(OAS, v1, hv1));
                break;
 
        case TSTRING:
@@ -257,7 +272,10 @@ walkrange(Node *n)
                n->ntest = nod(ONE, hv1, nodintconst(0));
                n->ntest->ninit = list(list1(nod(OAS, ohv1, hv1)), a);
 
-               body = list1(nod(OAS, v1, ohv1));
+               
+               body = nil;
+               if(v1 != N)
+                       body = list1(nod(OAS, v1, ohv1));
                if(v2 != N)
                        body = list(body, nod(OAS, v2, hv2));
                break;
index 7f5721d536bf04367165191927dc5ddbf8850ba6..47beae03b69da1097acbfc475ffb60f76ad5fa3b 100644 (file)
@@ -440,16 +440,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  4
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2270
+#define YYLAST   2201
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  76
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  142
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  351
+#define YYNRULES  352
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  667
+#define YYNSTATES  669
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -506,35 +506,35 @@ static const yytype_uint16 yyprhs[] =
      129,   132,   137,   141,   146,   150,   152,   155,   157,   159,
      162,   164,   168,   172,   176,   179,   182,   186,   192,   198,
      201,   202,   207,   208,   212,   213,   216,   217,   222,   227,
-     232,   238,   240,   242,   245,   246,   250,   252,   256,   257,
-     258,   259,   268,   269,   275,   276,   279,   280,   283,   284,
-     285,   293,   294,   300,   302,   306,   310,   314,   318,   322,
-     326,   330,   334,   338,   342,   346,   350,   354,   358,   362,
-     366,   370,   374,   378,   382,   384,   387,   390,   393,   396,
-     399,   402,   405,   408,   412,   418,   425,   427,   429,   433,
-     439,   445,   450,   457,   466,   468,   474,   480,   486,   494,
-     496,   497,   501,   503,   508,   510,   515,   517,   521,   523,
-     525,   527,   529,   531,   533,   535,   536,   538,   540,   542,
-     544,   549,   554,   556,   558,   560,   563,   565,   567,   569,
-     571,   573,   577,   579,   581,   583,   586,   588,   590,   592,
-     594,   598,   600,   602,   604,   606,   608,   610,   612,   614,
-     616,   620,   625,   630,   633,   637,   643,   645,   647,   650,
-     654,   660,   664,   670,   674,   678,   684,   693,   699,   708,
-     714,   715,   719,   720,   722,   726,   728,   733,   736,   737,
-     741,   743,   747,   749,   753,   755,   759,   761,   765,   767,
-     771,   775,   778,   783,   787,   793,   799,   801,   805,   807,
-     810,   812,   816,   821,   823,   826,   829,   831,   833,   837,
-     838,   841,   842,   844,   846,   848,   850,   852,   854,   856,
-     858,   860,   861,   866,   868,   871,   874,   877,   880,   883,
-     886,   888,   892,   894,   898,   900,   904,   906,   910,   912,
-     916,   918,   920,   924,   928,   929,   932,   933,   935,   936,
-     938,   939,   941,   942,   944,   945,   947,   948,   950,   951,
-     953,   954,   956,   957,   959,   964,   969,   975,   982,   987,
-     992,   994,   996,   998,  1000,  1002,  1004,  1006,  1008,  1010,
-    1014,  1019,  1025,  1030,  1035,  1038,  1041,  1046,  1050,  1054,
-    1060,  1064,  1069,  1073,  1079,  1081,  1082,  1084,  1088,  1090,
-    1092,  1095,  1097,  1099,  1105,  1106,  1109,  1111,  1115,  1117,
-    1121,  1123
+     232,   235,   241,   243,   245,   248,   249,   253,   255,   259,
+     260,   261,   262,   271,   272,   278,   279,   282,   283,   286,
+     287,   288,   296,   297,   303,   305,   309,   313,   317,   321,
+     325,   329,   333,   337,   341,   345,   349,   353,   357,   361,
+     365,   369,   373,   377,   381,   385,   387,   390,   393,   396,
+     399,   402,   405,   408,   411,   415,   421,   428,   430,   432,
+     436,   442,   448,   453,   460,   469,   471,   477,   483,   489,
+     497,   499,   500,   504,   506,   511,   513,   518,   520,   524,
+     526,   528,   530,   532,   534,   536,   538,   539,   541,   543,
+     545,   547,   552,   557,   559,   561,   563,   566,   568,   570,
+     572,   574,   576,   580,   582,   584,   586,   589,   591,   593,
+     595,   597,   601,   603,   605,   607,   609,   611,   613,   615,
+     617,   619,   623,   628,   633,   636,   640,   646,   648,   650,
+     653,   657,   663,   667,   673,   677,   681,   687,   696,   702,
+     711,   717,   718,   722,   723,   725,   729,   731,   736,   739,
+     740,   744,   746,   750,   752,   756,   758,   762,   764,   768,
+     770,   774,   778,   781,   786,   790,   796,   802,   804,   808,
+     810,   813,   815,   819,   824,   826,   829,   832,   834,   836,
+     840,   841,   844,   845,   847,   849,   851,   853,   855,   857,
+     859,   861,   863,   864,   869,   871,   874,   877,   880,   883,
+     886,   889,   891,   895,   897,   901,   903,   907,   909,   913,
+     915,   919,   921,   923,   927,   931,   932,   935,   936,   938,
+     939,   941,   942,   944,   945,   947,   948,   950,   951,   953,
+     954,   956,   957,   959,   960,   962,   967,   972,   978,   985,
+     990,   995,   997,   999,  1001,  1003,  1005,  1007,  1009,  1011,
+    1013,  1017,  1022,  1028,  1033,  1038,  1041,  1044,  1049,  1053,
+    1057,  1063,  1067,  1072,  1076,  1082,  1084,  1085,  1087,  1091,
+    1093,  1095,  1098,  1100,  1102,  1108,  1109,  1112,  1114,  1118,
+    1120,  1124,  1126
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -563,96 +563,96 @@ static const yytype_int16 yyrhs[] =
       -1,    -1,    67,   101,   183,    68,    -1,    -1,    99,   103,
      183,    -1,    -1,   104,   102,    -1,    -1,    35,   106,   183,
       68,    -1,   186,    65,    26,   126,    -1,   186,     5,    26,
-     126,    -1,   194,    62,   194,    62,   194,    -1,   194,    -1,
-     107,    -1,   108,   105,    -1,    -1,    16,   111,   109,    -1,
-     194,    -1,   194,    62,   194,    -1,    -1,    -1,    -1,    20,
-     114,   112,   115,   105,   116,   119,   120,    -1,    -1,    14,
-      20,   118,   112,   105,    -1,    -1,   119,   117,    -1,    -1,
-      14,   100,    -1,    -1,    -1,    30,   122,   112,   123,    35,
-     104,    68,    -1,    -1,    28,   125,    35,   104,    68,    -1,
-     127,    -1,   126,    47,   126,    -1,   126,    33,   126,    -1,
-     126,    38,   126,    -1,   126,    46,   126,    -1,   126,    45,
-     126,    -1,   126,    43,   126,    -1,   126,    39,   126,    -1,
-     126,    40,   126,    -1,   126,    49,   126,    -1,   126,    50,
-     126,    -1,   126,    51,   126,    -1,   126,    52,   126,    -1,
-     126,    53,   126,    -1,   126,    54,   126,    -1,   126,    55,
-     126,    -1,   126,    56,   126,    -1,   126,    34,   126,    -1,
-     126,    44,   126,    -1,   126,    48,   126,    -1,   126,    36,
-     126,    -1,   134,    -1,    53,   127,    -1,    56,   127,    -1,
-      49,   127,    -1,    50,   127,    -1,    69,   127,    -1,    70,
-     127,    -1,    52,   127,    -1,    36,   127,    -1,   134,    59,
-      60,    -1,   134,    59,   187,   191,    60,    -1,   134,    59,
-     187,    11,   191,    60,    -1,     3,    -1,   143,    -1,   134,
-      63,   141,    -1,   134,    63,    59,   135,    60,    -1,   134,
-      63,    59,    31,    60,    -1,   134,    71,   126,    72,    -1,
-     134,    71,   192,    66,   192,    72,    -1,   134,    71,   192,
-      66,   192,    66,   192,    72,    -1,   128,    -1,   149,    59,
-     126,   191,    60,    -1,   150,   137,   130,   189,    68,    -1,
-     129,    67,   130,   189,    68,    -1,    59,   135,    60,    67,
-     130,   189,    68,    -1,   165,    -1,    -1,   126,    66,   133,
-      -1,   126,    -1,    67,   130,   189,    68,    -1,   126,    -1,
-      67,   130,   189,    68,    -1,   129,    -1,    59,   135,    60,
-      -1,   126,    -1,   147,    -1,   146,    -1,    35,    -1,    67,
-      -1,   141,    -1,   141,    -1,    -1,   138,    -1,    24,    -1,
-     142,    -1,    73,    -1,    74,     3,    63,    24,    -1,    74,
-       3,    63,    73,    -1,   141,    -1,   138,    -1,    11,    -1,
-      11,   146,    -1,   155,    -1,   161,    -1,   153,    -1,   154,
-      -1,   152,    -1,    59,   146,    60,    -1,   155,    -1,   161,
-      -1,   153,    -1,    53,   147,    -1,   161,    -1,   153,    -1,
-     154,    -1,   152,    -1,    59,   146,    60,    -1,   161,    -1,
-     153,    -1,   153,    -1,   155,    -1,   161,    -1,   153,    -1,
-     154,    -1,   152,    -1,   143,    -1,   143,    63,   141,    -1,
-      71,   192,    72,   146,    -1,    71,    11,    72,   146,    -1,
-       8,   148,    -1,     8,    36,   146,    -1,    23,    71,   146,
-      72,   146,    -1,   156,    -1,   157,    -1,    53,   146,    -1,
-      36,     8,   146,    -1,    29,   137,   170,   190,    68,    -1,
-      29,   137,    68,    -1,    22,   137,   171,   190,    68,    -1,
-      22,   137,    68,    -1,    17,   159,   162,    -1,   141,    59,
-     179,    60,   163,    -1,    59,   179,    60,   141,    59,   179,
-      60,   163,    -1,   200,    59,   195,    60,   210,    -1,    59,
-     215,    60,   141,    59,   195,    60,   210,    -1,    17,    59,
-     179,    60,   163,    -1,    -1,    67,   183,    68,    -1,    -1,
-     151,    -1,    59,   179,    60,    -1,   161,    -1,   164,   137,
-     183,    68,    -1,   164,     1,    -1,    -1,   166,    90,    62,
-      -1,    93,    -1,   167,    62,    93,    -1,    95,    -1,   168,
-      62,    95,    -1,    97,    -1,   169,    62,    97,    -1,   172,
-      -1,   170,    62,   172,    -1,   175,    -1,   171,    62,   175,
-      -1,   184,   146,   198,    -1,   174,   198,    -1,    59,   174,
-      60,   198,    -1,    53,   174,   198,    -1,    59,    53,   174,
-      60,   198,    -1,    53,    59,   174,    60,   198,    -1,    24,
-      -1,    24,    63,   141,    -1,   173,    -1,   138,   176,    -1,
-     173,    -1,    59,   173,    60,    -1,    59,   179,    60,   163,
-      -1,   136,    -1,   141,   136,    -1,   141,   145,    -1,   145,
-      -1,   177,    -1,   178,    75,   177,    -1,    -1,   178,   191,
-      -1,    -1,   100,    -1,    91,    -1,   181,    -1,     1,    -1,
-      98,    -1,   110,    -1,   121,    -1,   124,    -1,   113,    -1,
-      -1,   144,    66,   182,   180,    -1,    15,    -1,     6,   140,
-      -1,    10,   140,    -1,    18,   128,    -1,    13,   128,    -1,
-      19,   138,    -1,    27,   193,    -1,   180,    -1,   183,    62,
-     180,    -1,   138,    -1,   184,    75,   138,    -1,   139,    -1,
-     185,    75,   139,    -1,   126,    -1,   186,    75,   126,    -1,
-     135,    -1,   187,    75,   135,    -1,   131,    -1,   132,    -1,
-     188,    75,   131,    -1,   188,    75,   132,    -1,    -1,   188,
-     191,    -1,    -1,    62,    -1,    -1,    75,    -1,    -1,   126,
-      -1,    -1,   186,    -1,    -1,    98,    -1,    -1,   215,    -1,
-      -1,   216,    -1,    -1,   217,    -1,    -1,     3,    -1,    21,
-      24,     3,    62,    -1,    32,   200,   202,    62,    -1,     9,
-     200,    65,   213,    62,    -1,     9,   200,   202,    65,   213,
-      62,    -1,    31,   201,   202,    62,    -1,    17,   160,   162,
-      62,    -1,   142,    -1,   200,    -1,   204,    -1,   205,    -1,
-     206,    -1,   204,    -1,   206,    -1,   142,    -1,    24,    -1,
-      71,    72,   202,    -1,    71,     3,    72,   202,    -1,    23,
-      71,   202,    72,   202,    -1,    29,    67,   196,    68,    -1,
-      22,    67,   197,    68,    -1,    53,   202,    -1,     8,   203,
-      -1,     8,    59,   205,    60,    -1,     8,    36,   202,    -1,
-      36,     8,   202,    -1,    17,    59,   195,    60,   210,    -1,
-     141,   202,   198,    -1,   141,    11,   202,   198,    -1,   141,
-     202,   198,    -1,   141,    59,   195,    60,   210,    -1,   202,
-      -1,    -1,   211,    -1,    59,   195,    60,    -1,   202,    -1,
-       3,    -1,    50,     3,    -1,   141,    -1,   212,    -1,    59,
-     212,    49,   212,    60,    -1,    -1,   214,   199,    -1,   207,
-      -1,   215,    75,   207,    -1,   208,    -1,   216,    62,   208,
-      -1,   209,    -1,   217,    62,   209,    -1
+     126,    -1,    26,   126,    -1,   194,    62,   194,    62,   194,
+      -1,   194,    -1,   107,    -1,   108,   105,    -1,    -1,    16,
+     111,   109,    -1,   194,    -1,   194,    62,   194,    -1,    -1,
+      -1,    -1,    20,   114,   112,   115,   105,   116,   119,   120,
+      -1,    -1,    14,    20,   118,   112,   105,    -1,    -1,   119,
+     117,    -1,    -1,    14,   100,    -1,    -1,    -1,    30,   122,
+     112,   123,    35,   104,    68,    -1,    -1,    28,   125,    35,
+     104,    68,    -1,   127,    -1,   126,    47,   126,    -1,   126,
+      33,   126,    -1,   126,    38,   126,    -1,   126,    46,   126,
+      -1,   126,    45,   126,    -1,   126,    43,   126,    -1,   126,
+      39,   126,    -1,   126,    40,   126,    -1,   126,    49,   126,
+      -1,   126,    50,   126,    -1,   126,    51,   126,    -1,   126,
+      52,   126,    -1,   126,    53,   126,    -1,   126,    54,   126,
+      -1,   126,    55,   126,    -1,   126,    56,   126,    -1,   126,
+      34,   126,    -1,   126,    44,   126,    -1,   126,    48,   126,
+      -1,   126,    36,   126,    -1,   134,    -1,    53,   127,    -1,
+      56,   127,    -1,    49,   127,    -1,    50,   127,    -1,    69,
+     127,    -1,    70,   127,    -1,    52,   127,    -1,    36,   127,
+      -1,   134,    59,    60,    -1,   134,    59,   187,   191,    60,
+      -1,   134,    59,   187,    11,   191,    60,    -1,     3,    -1,
+     143,    -1,   134,    63,   141,    -1,   134,    63,    59,   135,
+      60,    -1,   134,    63,    59,    31,    60,    -1,   134,    71,
+     126,    72,    -1,   134,    71,   192,    66,   192,    72,    -1,
+     134,    71,   192,    66,   192,    66,   192,    72,    -1,   128,
+      -1,   149,    59,   126,   191,    60,    -1,   150,   137,   130,
+     189,    68,    -1,   129,    67,   130,   189,    68,    -1,    59,
+     135,    60,    67,   130,   189,    68,    -1,   165,    -1,    -1,
+     126,    66,   133,    -1,   126,    -1,    67,   130,   189,    68,
+      -1,   126,    -1,    67,   130,   189,    68,    -1,   129,    -1,
+      59,   135,    60,    -1,   126,    -1,   147,    -1,   146,    -1,
+      35,    -1,    67,    -1,   141,    -1,   141,    -1,    -1,   138,
+      -1,    24,    -1,   142,    -1,    73,    -1,    74,     3,    63,
+      24,    -1,    74,     3,    63,    73,    -1,   141,    -1,   138,
+      -1,    11,    -1,    11,   146,    -1,   155,    -1,   161,    -1,
+     153,    -1,   154,    -1,   152,    -1,    59,   146,    60,    -1,
+     155,    -1,   161,    -1,   153,    -1,    53,   147,    -1,   161,
+      -1,   153,    -1,   154,    -1,   152,    -1,    59,   146,    60,
+      -1,   161,    -1,   153,    -1,   153,    -1,   155,    -1,   161,
+      -1,   153,    -1,   154,    -1,   152,    -1,   143,    -1,   143,
+      63,   141,    -1,    71,   192,    72,   146,    -1,    71,    11,
+      72,   146,    -1,     8,   148,    -1,     8,    36,   146,    -1,
+      23,    71,   146,    72,   146,    -1,   156,    -1,   157,    -1,
+      53,   146,    -1,    36,     8,   146,    -1,    29,   137,   170,
+     190,    68,    -1,    29,   137,    68,    -1,    22,   137,   171,
+     190,    68,    -1,    22,   137,    68,    -1,    17,   159,   162,
+      -1,   141,    59,   179,    60,   163,    -1,    59,   179,    60,
+     141,    59,   179,    60,   163,    -1,   200,    59,   195,    60,
+     210,    -1,    59,   215,    60,   141,    59,   195,    60,   210,
+      -1,    17,    59,   179,    60,   163,    -1,    -1,    67,   183,
+      68,    -1,    -1,   151,    -1,    59,   179,    60,    -1,   161,
+      -1,   164,   137,   183,    68,    -1,   164,     1,    -1,    -1,
+     166,    90,    62,    -1,    93,    -1,   167,    62,    93,    -1,
+      95,    -1,   168,    62,    95,    -1,    97,    -1,   169,    62,
+      97,    -1,   172,    -1,   170,    62,   172,    -1,   175,    -1,
+     171,    62,   175,    -1,   184,   146,   198,    -1,   174,   198,
+      -1,    59,   174,    60,   198,    -1,    53,   174,   198,    -1,
+      59,    53,   174,    60,   198,    -1,    53,    59,   174,    60,
+     198,    -1,    24,    -1,    24,    63,   141,    -1,   173,    -1,
+     138,   176,    -1,   173,    -1,    59,   173,    60,    -1,    59,
+     179,    60,   163,    -1,   136,    -1,   141,   136,    -1,   141,
+     145,    -1,   145,    -1,   177,    -1,   178,    75,   177,    -1,
+      -1,   178,   191,    -1,    -1,   100,    -1,    91,    -1,   181,
+      -1,     1,    -1,    98,    -1,   110,    -1,   121,    -1,   124,
+      -1,   113,    -1,    -1,   144,    66,   182,   180,    -1,    15,
+      -1,     6,   140,    -1,    10,   140,    -1,    18,   128,    -1,
+      13,   128,    -1,    19,   138,    -1,    27,   193,    -1,   180,
+      -1,   183,    62,   180,    -1,   138,    -1,   184,    75,   138,
+      -1,   139,    -1,   185,    75,   139,    -1,   126,    -1,   186,
+      75,   126,    -1,   135,    -1,   187,    75,   135,    -1,   131,
+      -1,   132,    -1,   188,    75,   131,    -1,   188,    75,   132,
+      -1,    -1,   188,   191,    -1,    -1,    62,    -1,    -1,    75,
+      -1,    -1,   126,    -1,    -1,   186,    -1,    -1,    98,    -1,
+      -1,   215,    -1,    -1,   216,    -1,    -1,   217,    -1,    -1,
+       3,    -1,    21,    24,     3,    62,    -1,    32,   200,   202,
+      62,    -1,     9,   200,    65,   213,    62,    -1,     9,   200,
+     202,    65,   213,    62,    -1,    31,   201,   202,    62,    -1,
+      17,   160,   162,    62,    -1,   142,    -1,   200,    -1,   204,
+      -1,   205,    -1,   206,    -1,   204,    -1,   206,    -1,   142,
+      -1,    24,    -1,    71,    72,   202,    -1,    71,     3,    72,
+     202,    -1,    23,    71,   202,    72,   202,    -1,    29,    67,
+     196,    68,    -1,    22,    67,   197,    68,    -1,    53,   202,
+      -1,     8,   203,    -1,     8,    59,   205,    60,    -1,     8,
+      36,   202,    -1,    36,     8,   202,    -1,    17,    59,   195,
+      60,   210,    -1,   141,   202,   198,    -1,   141,    11,   202,
+     198,    -1,   141,   202,   198,    -1,   141,    59,   195,    60,
+     210,    -1,   202,    -1,    -1,   211,    -1,    59,   195,    60,
+      -1,   202,    -1,     3,    -1,    50,     3,    -1,   141,    -1,
+     212,    -1,    59,   212,    49,   212,    60,    -1,    -1,   214,
+     199,    -1,   207,    -1,   215,    75,   207,    -1,   208,    -1,
+     216,    62,   208,    -1,   209,    -1,   217,    62,   209,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -665,35 +665,35 @@ static const yytype_uint16 yyrline[] =
      359,   363,   367,   373,   377,   383,   384,   388,   394,   403,
      409,   427,   432,   444,   460,   465,   472,   492,   510,   519,
      538,   537,   552,   551,   583,   586,   593,   592,   603,   609,
-     618,   629,   635,   638,   646,   645,   656,   662,   674,   678,
-     683,   673,   704,   703,   716,   719,   725,   728,   740,   744,
-     739,   762,   761,   777,   778,   782,   786,   790,   794,   798,
-     802,   806,   810,   814,   818,   822,   826,   830,   834,   838,
-     842,   846,   850,   855,   861,   862,   866,   877,   881,   885,
-     889,   894,   898,   908,   912,   917,   925,   929,   930,   941,
-     945,   949,   953,   957,   965,   966,   972,   979,   985,   992,
-     995,  1002,  1008,  1025,  1032,  1033,  1040,  1041,  1060,  1061,
-    1064,  1067,  1071,  1082,  1091,  1097,  1100,  1103,  1110,  1111,
-    1117,  1130,  1145,  1153,  1165,  1170,  1176,  1177,  1178,  1179,
-    1180,  1181,  1187,  1188,  1189,  1190,  1196,  1197,  1198,  1199,
-    1200,  1206,  1207,  1210,  1213,  1214,  1215,  1216,  1217,  1220,
-    1221,  1234,  1238,  1243,  1248,  1253,  1257,  1258,  1261,  1267,
-    1274,  1280,  1287,  1293,  1304,  1319,  1348,  1386,  1411,  1429,
-    1438,  1441,  1449,  1453,  1457,  1464,  1470,  1475,  1487,  1490,
-    1501,  1502,  1508,  1509,  1515,  1519,  1525,  1526,  1532,  1536,
-    1542,  1565,  1570,  1576,  1582,  1589,  1598,  1607,  1622,  1628,
-    1633,  1637,  1644,  1657,  1658,  1664,  1670,  1673,  1677,  1683,
-    1686,  1695,  1698,  1699,  1703,  1704,  1710,  1711,  1712,  1713,
-    1714,  1716,  1715,  1730,  1736,  1740,  1744,  1748,  1752,  1757,
-    1776,  1782,  1790,  1794,  1800,  1804,  1810,  1814,  1820,  1824,
-    1833,  1837,  1841,  1845,  1851,  1854,  1862,  1863,  1865,  1866,
-    1869,  1872,  1875,  1878,  1881,  1884,  1887,  1890,  1893,  1896,
-    1899,  1902,  1905,  1908,  1914,  1918,  1922,  1926,  1930,  1934,
-    1954,  1961,  1972,  1973,  1974,  1977,  1978,  1981,  1985,  1995,
-    1999,  2003,  2007,  2011,  2015,  2019,  2025,  2031,  2039,  2047,
-    2053,  2060,  2076,  2098,  2102,  2108,  2111,  2114,  2118,  2128,
-    2132,  2151,  2159,  2160,  2172,  2173,  2176,  2180,  2186,  2190,
-    2196,  2200
+     616,   623,   634,   640,   643,   651,   650,   661,   667,   679,
+     683,   688,   678,   709,   708,   721,   724,   730,   733,   745,
+     749,   744,   767,   766,   782,   783,   787,   791,   795,   799,
+     803,   807,   811,   815,   819,   823,   827,   831,   835,   839,
+     843,   847,   851,   855,   860,   866,   867,   871,   882,   886,
+     890,   894,   899,   903,   913,   917,   922,   930,   934,   935,
+     946,   950,   954,   958,   962,   970,   971,   977,   984,   990,
+     997,  1000,  1007,  1013,  1030,  1037,  1038,  1045,  1046,  1065,
+    1066,  1069,  1072,  1076,  1087,  1096,  1102,  1105,  1108,  1115,
+    1116,  1122,  1135,  1150,  1158,  1170,  1175,  1181,  1182,  1183,
+    1184,  1185,  1186,  1192,  1193,  1194,  1195,  1201,  1202,  1203,
+    1204,  1205,  1211,  1212,  1215,  1218,  1219,  1220,  1221,  1222,
+    1225,  1226,  1239,  1243,  1248,  1253,  1258,  1262,  1263,  1266,
+    1272,  1279,  1285,  1292,  1298,  1309,  1324,  1353,  1391,  1416,
+    1434,  1443,  1446,  1454,  1458,  1462,  1469,  1475,  1480,  1492,
+    1495,  1506,  1507,  1513,  1514,  1520,  1524,  1530,  1531,  1537,
+    1541,  1547,  1570,  1575,  1581,  1587,  1594,  1603,  1612,  1627,
+    1633,  1638,  1642,  1649,  1662,  1663,  1669,  1675,  1678,  1682,
+    1688,  1691,  1700,  1703,  1704,  1708,  1709,  1715,  1716,  1717,
+    1718,  1719,  1721,  1720,  1735,  1741,  1745,  1749,  1753,  1757,
+    1762,  1781,  1787,  1795,  1799,  1805,  1809,  1815,  1819,  1825,
+    1829,  1838,  1842,  1846,  1850,  1856,  1859,  1867,  1868,  1870,
+    1871,  1874,  1877,  1880,  1883,  1886,  1889,  1892,  1895,  1898,
+    1901,  1904,  1907,  1910,  1913,  1919,  1923,  1927,  1931,  1935,
+    1939,  1959,  1966,  1977,  1978,  1979,  1982,  1983,  1986,  1990,
+    2000,  2004,  2008,  2012,  2016,  2020,  2024,  2030,  2036,  2044,
+    2052,  2058,  2065,  2081,  2103,  2107,  2113,  2116,  2119,  2123,
+    2133,  2137,  2156,  2164,  2165,  2177,  2178,  2181,  2185,  2191,
+    2195,  2201,  2205
 };
 #endif
 
@@ -772,35 +772,35 @@ static const yytype_uint8 yyr1[] =
       93,    93,    93,    94,    94,    95,    95,    95,    96,    97,
       98,    98,    98,    98,    98,    98,    99,    99,    99,    99,
      101,   100,   103,   102,   104,   104,   106,   105,   107,   107,
-     108,   108,   108,   109,   111,   110,   112,   112,   114,   115,
-     116,   113,   118,   117,   119,   119,   120,   120,   122,   123,
-     121,   125,   124,   126,   126,   126,   126,   126,   126,   126,
+     107,   108,   108,   108,   109,   111,   110,   112,   112,   114,
+     115,   116,   113,   118,   117,   119,   119,   120,   120,   122,
+     123,   121,   125,   124,   126,   126,   126,   126,   126,   126,
      126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
-     126,   126,   126,   126,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   128,   128,   128,   129,   129,   129,   129,
+     126,   126,   126,   126,   126,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   128,   128,   128,   129,   129,   129,
      129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     130,   131,   132,   132,   133,   133,   134,   134,   135,   135,
-     136,   137,   137,   138,   139,   140,   140,   141,   141,   141,
-     142,   142,   143,   144,   145,   145,   146,   146,   146,   146,
-     146,   146,   147,   147,   147,   147,   148,   148,   148,   148,
-     148,   149,   149,   150,   151,   151,   151,   151,   151,   152,
-     152,   153,   153,   153,   153,   153,   153,   153,   154,   155,
-     156,   156,   157,   157,   158,   159,   159,   160,   160,   161,
-     162,   162,   163,   163,   163,   164,   165,   165,   166,   166,
-     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
-     172,   172,   172,   172,   172,   172,   173,   173,   174,   175,
-     175,   175,   176,   177,   177,   177,   177,   178,   178,   179,
-     179,   180,   180,   180,   180,   180,   181,   181,   181,   181,
-     181,   182,   181,   181,   181,   181,   181,   181,   181,   181,
-     183,   183,   184,   184,   185,   185,   186,   186,   187,   187,
-     188,   188,   188,   188,   189,   189,   190,   190,   191,   191,
-     192,   192,   193,   193,   194,   194,   195,   195,   196,   196,
-     197,   197,   198,   198,   199,   199,   199,   199,   199,   199,
-     200,   201,   202,   202,   202,   203,   203,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   205,   206,
-     207,   207,   208,   209,   209,   210,   210,   211,   211,   212,
-     212,   212,   213,   213,   214,   214,   215,   215,   216,   216,
-     217,   217
+     129,   130,   131,   132,   132,   133,   133,   134,   134,   135,
+     135,   136,   137,   137,   138,   139,   140,   140,   141,   141,
+     141,   142,   142,   143,   144,   145,   145,   146,   146,   146,
+     146,   146,   146,   147,   147,   147,   147,   148,   148,   148,
+     148,   148,   149,   149,   150,   151,   151,   151,   151,   151,
+     152,   152,   153,   153,   153,   153,   153,   153,   153,   154,
+     155,   156,   156,   157,   157,   158,   159,   159,   160,   160,
+     161,   162,   162,   163,   163,   163,   164,   165,   165,   166,
+     166,   167,   167,   168,   168,   169,   169,   170,   170,   171,
+     171,   172,   172,   172,   172,   172,   172,   173,   173,   174,
+     175,   175,   175,   176,   177,   177,   177,   177,   178,   178,
+     179,   179,   180,   180,   180,   180,   180,   181,   181,   181,
+     181,   181,   182,   181,   181,   181,   181,   181,   181,   181,
+     181,   183,   183,   184,   184,   185,   185,   186,   186,   187,
+     187,   188,   188,   188,   188,   189,   189,   190,   190,   191,
+     191,   192,   192,   193,   193,   194,   194,   195,   195,   196,
+     196,   197,   197,   198,   198,   199,   199,   199,   199,   199,
+     199,   200,   201,   202,   202,   202,   203,   203,   204,   204,
+     204,   204,   204,   204,   204,   204,   204,   204,   204,   205,
+     206,   207,   207,   208,   209,   209,   210,   210,   211,   211,
+     212,   212,   212,   213,   213,   214,   214,   215,   215,   216,
+     216,   217,   217
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -813,35 +813,35 @@ static const yytype_uint8 yyr2[] =
        2,     4,     3,     4,     3,     1,     2,     1,     1,     2,
        1,     3,     3,     3,     2,     2,     3,     5,     5,     2,
        0,     4,     0,     3,     0,     2,     0,     4,     4,     4,
-       5,     1,     1,     2,     0,     3,     1,     3,     0,     0,
-       0,     8,     0,     5,     0,     2,     0,     2,     0,     0,
-       7,     0,     5,     1,     3,     3,     3,     3,     3,     3,
+       2,     5,     1,     1,     2,     0,     3,     1,     3,     0,
+       0,     0,     8,     0,     5,     0,     2,     0,     2,     0,
+       0,     7,     0,     5,     1,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     1,     2,     2,     2,     2,     2,
-       2,     2,     2,     3,     5,     6,     1,     1,     3,     5,
-       5,     4,     6,     8,     1,     5,     5,     5,     7,     1,
-       0,     3,     1,     4,     1,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     0,     1,     1,     1,     1,
-       4,     4,     1,     1,     1,     2,     1,     1,     1,     1,
-       1,     3,     1,     1,     1,     2,     1,     1,     1,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     4,     4,     2,     3,     5,     1,     1,     2,     3,
-       5,     3,     5,     3,     3,     5,     8,     5,     8,     5,
-       0,     3,     0,     1,     3,     1,     4,     2,     0,     3,
-       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       3,     2,     4,     3,     5,     5,     1,     3,     1,     2,
-       1,     3,     4,     1,     2,     2,     1,     1,     3,     0,
-       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     1,     2,     2,     2,     2,     2,     2,
-       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     1,     3,     3,     0,     2,     0,     1,     0,     1,
-       0,     1,     0,     1,     0,     1,     0,     1,     0,     1,
-       0,     1,     0,     1,     4,     4,     5,     6,     4,     4,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       4,     5,     4,     4,     2,     2,     4,     3,     3,     5,
-       3,     4,     3,     5,     1,     0,     1,     3,     1,     1,
-       2,     1,     1,     5,     0,     2,     1,     3,     1,     3,
-       1,     3
+       3,     3,     3,     3,     3,     1,     2,     2,     2,     2,
+       2,     2,     2,     2,     3,     5,     6,     1,     1,     3,
+       5,     5,     4,     6,     8,     1,     5,     5,     5,     7,
+       1,     0,     3,     1,     4,     1,     4,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     0,     1,     1,     1,
+       1,     4,     4,     1,     1,     1,     2,     1,     1,     1,
+       1,     1,     3,     1,     1,     1,     2,     1,     1,     1,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     3,     4,     4,     2,     3,     5,     1,     1,     2,
+       3,     5,     3,     5,     3,     3,     5,     8,     5,     8,
+       5,     0,     3,     0,     1,     3,     1,     4,     2,     0,
+       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
+       3,     3,     2,     4,     3,     5,     5,     1,     3,     1,
+       2,     1,     3,     4,     1,     2,     2,     1,     1,     3,
+       0,     2,     0,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     4,     1,     2,     2,     2,     2,     2,
+       2,     1,     3,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     1,     3,     3,     0,     2,     0,     1,     0,
+       1,     0,     1,     0,     1,     0,     1,     0,     1,     0,
+       1,     0,     1,     0,     1,     4,     4,     5,     6,     4,
+       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     4,     5,     4,     4,     2,     2,     4,     3,     3,
+       5,     3,     4,     3,     5,     1,     0,     1,     3,     1,
+       1,     2,     1,     1,     5,     0,     2,     1,     3,     1,
+       3,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -849,656 +849,642 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       5,     0,     3,     0,     1,     0,     7,     0,    22,   157,
-     159,     0,     0,   158,   218,    20,     6,   344,     0,     4,
+       5,     0,     3,     0,     1,     0,     7,     0,    22,   158,
+     160,     0,     0,   159,   219,    20,     6,   345,     0,     4,
        0,     0,     0,    21,     0,     0,     0,    16,     0,     0,
-       9,    22,     0,     8,    28,   126,   155,     0,    39,   155,
-       0,   263,    74,     0,     0,     0,    78,     0,     0,   292,
-      91,     0,    88,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   290,     0,    25,     0,   256,   257,
-     260,   258,   259,    50,    93,   134,   146,   114,   163,   162,
-     127,     0,     0,     0,   183,   196,   197,    26,   215,     0,
-     139,    27,     0,    19,     0,     0,     0,     0,     0,     0,
-     345,   160,   161,    11,    14,   286,    18,    22,    13,    17,
-     156,   264,   153,     0,     0,     0,     0,   162,   189,   193,
-     179,   177,   178,   176,   265,   134,     0,   294,   249,     0,
-     210,   134,   268,   294,   151,   152,     0,     0,   276,   293,
-     269,     0,     0,   294,     0,     0,    36,    48,     0,    29,
-     274,   154,     0,   122,   117,   118,   121,   115,   116,     0,
-       0,   148,     0,   149,   174,   172,   173,   119,   120,     0,
-     291,     0,   219,     0,    32,     0,     0,     0,     0,     0,
+       9,    22,     0,     8,    28,   127,   156,     0,    39,   156,
+       0,   264,    75,     0,     0,     0,    79,     0,     0,   293,
+      92,     0,    89,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   291,     0,    25,     0,   257,   258,
+     261,   259,   260,    50,    94,   135,   147,   115,   164,   163,
+     128,     0,     0,     0,   184,   197,   198,    26,   216,     0,
+     140,    27,     0,    19,     0,     0,     0,     0,     0,     0,
+     346,   161,   162,    11,    14,   287,    18,    22,    13,    17,
+     157,   265,   154,     0,     0,     0,     0,   163,   190,   194,
+     180,   178,   179,   177,   266,   135,     0,   295,   250,     0,
+     211,   135,   269,   295,   152,   153,     0,     0,   277,   294,
+     270,     0,     0,   295,     0,     0,    36,    48,     0,    29,
+     275,   155,     0,   123,   118,   119,   122,   116,   117,     0,
+       0,   149,     0,   150,   175,   173,   174,   120,   121,     0,
+     292,     0,   220,     0,    32,     0,     0,     0,     0,     0,
       55,     0,     0,     0,    54,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   140,
-       0,     0,   290,   261,     0,   140,   217,     0,     0,     0,
-       0,   310,     0,     0,   210,     0,     0,   311,     0,     0,
-      23,   287,     0,    12,   249,     0,     0,   194,   170,   168,
-     169,   166,   167,   198,     0,     0,   295,    72,     0,    75,
-       0,    71,   164,   243,   162,   246,   150,   247,   288,     0,
-     249,     0,   204,    79,    76,   157,     0,   203,     0,   286,
-     240,   228,     0,    64,     0,     0,   201,   272,   286,   226,
-     238,   302,     0,    89,    38,   224,   286,    49,    31,   220,
-     286,     0,     0,    40,     0,   175,   147,     0,     0,    35,
-     286,     0,     0,    51,    95,   110,   113,    96,   100,   101,
-      99,   111,    98,    97,    94,   112,   102,   103,   104,   105,
-     106,   107,   108,   109,   284,   123,   278,   288,     0,   128,
-     291,     0,     0,   288,   284,   255,    60,   253,   252,   270,
-     254,     0,    53,    52,   277,     0,     0,     0,     0,   318,
-       0,     0,     0,     0,     0,   317,     0,   312,   313,   314,
-       0,   346,     0,     0,   296,     0,     0,     0,    15,    10,
-       0,     0,     0,   180,   190,    66,    73,     0,     0,   294,
-     165,   244,   245,   289,   250,   212,     0,     0,     0,   294,
-       0,   236,     0,   249,   239,   287,     0,     0,     0,     0,
-     302,     0,     0,   287,     0,   303,   231,     0,   302,     0,
-     287,     0,   287,     0,    42,   275,     0,     0,     0,   199,
-     170,   168,   169,   167,   140,   192,   191,   287,     0,    44,
-       0,   140,   142,   280,   281,   288,     0,   288,   289,     0,
-       0,     0,   131,   290,   262,   289,     0,     0,     0,     0,
-     216,     0,     0,   325,   315,   316,   296,   300,     0,   298,
-       0,   324,   339,     0,     0,   341,   342,     0,     0,     0,
-       0,     0,   302,     0,     0,   309,     0,   297,   304,   308,
-     305,   212,   171,     0,     0,     0,     0,   248,   249,   162,
-     213,   188,   186,   187,   184,   185,   209,   212,   211,    80,
-      77,   237,   241,     0,   229,   202,   195,     0,     0,    92,
-      62,    65,     0,   233,     0,   302,   227,   200,   273,   230,
-      64,   225,    37,   221,    30,    41,     0,   284,    45,   222,
-     286,    47,    33,    43,   284,     0,   289,   285,   137,     0,
-     279,   124,   130,   129,     0,   135,   136,     0,   271,   327,
-       0,     0,   318,     0,   317,     0,   334,   350,   301,     0,
-       0,     0,   348,   299,   328,   340,     0,   306,     0,   319,
-       0,   302,   330,     0,   347,   335,     0,    69,    68,   294,
-       0,   249,   205,    84,   212,     0,    59,     0,   302,   302,
-     232,     0,   171,     0,   287,     0,    46,     0,   140,   144,
-     141,   282,   283,   125,   290,   132,    61,   326,   335,   296,
-     323,     0,     0,   302,   322,     0,     0,   320,   307,   331,
-     296,   296,   338,   207,   336,    67,    70,   214,     0,    86,
-     242,     0,     0,    56,     0,    63,   235,   234,    90,   138,
-     223,    34,   143,   284,     0,   329,     0,   351,   321,   332,
-     349,     0,     0,     0,   212,     0,    85,    81,     0,     0,
-       0,   133,   335,   343,   335,   337,   206,    82,    87,    58,
-      57,   145,   333,   208,   294,     0,    83
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   141,
+       0,     0,   291,   262,     0,   141,   218,     0,     0,     0,
+       0,   311,     0,     0,   211,     0,     0,   312,     0,     0,
+      23,   288,     0,    12,   250,     0,     0,   195,   171,   169,
+     170,   167,   168,   199,     0,     0,     0,   296,    73,     0,
+      76,     0,    72,   165,   244,   163,   247,   151,   248,   289,
+       0,   250,     0,   205,    80,    77,   158,     0,   204,     0,
+     287,   241,   229,     0,    64,     0,     0,   202,   273,   287,
+     227,   239,   303,     0,    90,    38,   225,   287,    49,    31,
+     221,   287,     0,     0,    40,     0,   176,   148,     0,     0,
+      35,   287,     0,     0,    51,    96,   111,   114,    97,   101,
+     102,   100,   112,    99,    98,    95,   113,   103,   104,   105,
+     106,   107,   108,   109,   110,   285,   124,   279,   289,     0,
+     129,   292,     0,     0,   289,   285,   256,    60,   254,   253,
+     271,   255,     0,    53,    52,   278,     0,     0,     0,     0,
+     319,     0,     0,     0,     0,     0,   318,     0,   313,   314,
+     315,     0,   347,     0,     0,   297,     0,     0,     0,    15,
+      10,     0,     0,     0,   181,   191,    70,    66,    74,     0,
+       0,   295,   166,   245,   246,   290,   251,   213,     0,     0,
+       0,   295,     0,   237,     0,   250,   240,   288,     0,     0,
+       0,     0,   303,     0,     0,   288,     0,   304,   232,     0,
+     303,     0,   288,     0,   288,     0,    42,   276,     0,     0,
+       0,   200,   171,   169,   170,   168,   141,   193,   192,   288,
+       0,    44,     0,   141,   143,   281,   282,   289,     0,   289,
+     290,     0,     0,     0,   132,   291,   263,   290,     0,     0,
+       0,     0,   217,     0,     0,   326,   316,   317,   297,   301,
+       0,   299,     0,   325,   340,     0,     0,   342,   343,     0,
+       0,     0,     0,     0,   303,     0,     0,   310,     0,   298,
+     305,   309,   306,   213,   172,     0,     0,     0,     0,   249,
+     250,   163,   214,   189,   187,   188,   185,   186,   210,   213,
+     212,    81,    78,   238,   242,     0,   230,   203,   196,     0,
+       0,    93,    62,    65,     0,   234,     0,   303,   228,   201,
+     274,   231,    64,   226,    37,   222,    30,    41,     0,   285,
+      45,   223,   287,    47,    33,    43,   285,     0,   290,   286,
+     138,     0,   280,   125,   131,   130,     0,   136,   137,     0,
+     272,   328,     0,     0,   319,     0,   318,     0,   335,   351,
+     302,     0,     0,     0,   349,   300,   329,   341,     0,   307,
+       0,   320,     0,   303,   331,     0,   348,   336,     0,    69,
+      68,   295,     0,   250,   206,    85,   213,     0,    59,     0,
+     303,   303,   233,     0,   172,     0,   288,     0,    46,     0,
+     141,   145,   142,   283,   284,   126,   291,   133,    61,   327,
+     336,   297,   324,     0,     0,   303,   323,     0,     0,   321,
+     308,   332,   297,   297,   339,   208,   337,    67,    71,   215,
+       0,    87,   243,     0,     0,    56,     0,    63,   236,   235,
+      91,   139,   224,    34,   144,   285,     0,   330,     0,   352,
+     322,   333,   350,     0,     0,     0,   213,     0,    86,    82,
+       0,     0,     0,   134,   336,   344,   336,   338,   207,    83,
+      88,    58,    57,   146,   334,   209,   295,     0,    84
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     1,     6,     2,     3,    14,    21,    30,   105,    31,
-       8,    24,    16,    17,    65,   327,    67,   149,   518,   519,
-     145,   146,    68,   500,   328,   438,   501,   577,   388,   366,
-     473,   237,   238,   239,    69,   127,   253,    70,   133,   378,
-     573,   646,   664,   619,   647,    71,   143,   399,    72,   141,
-      73,    74,    75,    76,   314,   423,   424,   590,    77,   316,
-     243,   136,    78,   150,   111,   117,    13,    80,    81,   245,
-     246,   163,   119,    82,    83,   480,   228,    84,   230,   231,
-      85,    86,    87,   130,   214,    88,   252,   486,    89,    90,
-      22,   280,   520,   276,   268,   259,   269,   270,   271,   261,
-     384,   247,   248,   249,   329,   330,   322,   331,   272,   152,
-      92,   317,   425,   426,   222,   374,   171,   140,   254,   466,
-     551,   545,   396,   100,   212,   218,   612,   443,   347,   348,
-     349,   351,   552,   547,   613,   614,   456,   457,    25,   467,
-     553,   548
+       8,    24,    16,    17,    65,   328,    67,   149,   520,   521,
+     145,   146,    68,   502,   329,   440,   503,   579,   390,   368,
+     475,   238,   239,   240,    69,   127,   254,    70,   133,   380,
+     575,   648,   666,   621,   649,    71,   143,   401,    72,   141,
+      73,    74,    75,    76,   315,   425,   426,   592,    77,   317,
+     244,   136,    78,   150,   111,   117,    13,    80,    81,   246,
+     247,   163,   119,    82,    83,   482,   228,    84,   230,   231,
+      85,    86,    87,   130,   214,    88,   253,   488,    89,    90,
+      22,   281,   522,   277,   269,   260,   270,   271,   272,   262,
+     386,   248,   249,   250,   330,   331,   323,   332,   273,   152,
+      92,   318,   427,   428,   222,   376,   171,   140,   255,   468,
+     553,   547,   398,   100,   212,   218,   614,   445,   348,   349,
+     350,   352,   554,   549,   615,   616,   458,   459,    25,   469,
+     555,   550
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -474
+#define YYPACT_NINF -473
 static const yytype_int16 yypact[] =
 {
-    -474,    48,    28,    35,  -474,   258,  -474,    37,  -474,  -474,
-    -474,    61,    12,  -474,    85,   107,  -474,  -474,    70,  -474,
-     156,    82,  1059,  -474,   122,   328,    22,  -474,    56,   199,
-    -474,    35,   211,  -474,  -474,  -474,   258,   767,  -474,   258,
-     459,  -474,  -474,   152,   459,   258,  -474,    23,   145,  1650,
-    -474,    23,  -474,   294,   359,  1650,  1650,  1650,  1650,  1650,
-    1650,  1693,  1650,  1650,  1289,   159,  -474,   412,  -474,  -474,
-    -474,  -474,  -474,   939,  -474,  -474,   157,   302,  -474,   168,
-    -474,   175,   184,    23,   204,  -474,  -474,  -474,   219,    54,
-    -474,  -474,    47,  -474,   227,   -12,   269,   227,   227,   239,
-    -474,  -474,  -474,  -474,  -474,   240,  -474,  -474,  -474,  -474,
-    -474,  -474,  -474,   250,  1813,  1813,  1813,  -474,   259,  -474,
-    -474,  -474,  -474,  -474,  -474,    64,   302,  1650,  1805,   262,
-     260,   174,  -474,  1650,  -474,  -474,   221,  1813,  2166,   255,
-    -474,   290,   237,  1650,   304,  1813,  -474,  -474,   420,  -474,
-    -474,  -474,   580,  -474,  -474,  -474,  -474,  -474,  -474,  1736,
-    1693,  2166,   280,  -474,   253,  -474,    50,  -474,  -474,   275,
-    2166,   285,  -474,   430,  -474,   612,  1650,  1650,  1650,  1650,
-    -474,  1650,  1650,  1650,  -474,  1650,  1650,  1650,  1650,  1650,
-    1650,  1650,  1650,  1650,  1650,  1650,  1650,  1650,  1650,  -474,
-    1332,   428,  1650,  -474,  1650,  -474,  -474,  1234,  1650,  1650,
-    1650,  -474,   763,   258,   260,   293,   369,  -474,  1992,  1992,
-    -474,    51,   326,  -474,  1805,   392,  1813,  -474,  -474,  -474,
-    -474,  -474,  -474,  -474,   341,   258,  -474,  -474,   371,  -474,
-      89,   342,  1813,  -474,  1805,  -474,  -474,  -474,   335,   360,
-    1805,  1234,  -474,  -474,   357,    99,   399,  -474,   365,   380,
-    -474,  -474,   377,  -474,   173,   151,  -474,  -474,   381,  -474,
-    -474,   456,  1779,  -474,  -474,  -474,   401,  -474,  -474,  -474,
-     404,  1650,   258,   366,  1838,  -474,   405,  1813,  1813,  -474,
-     407,  1650,   410,  2166,   650,  -474,  2190,   877,   877,   877,
-     877,  -474,   877,   877,  2214,  -474,   461,   461,   461,   461,
-    -474,  -474,  -474,  -474,  1387,  -474,  -474,    52,  1442,  -474,
-    2064,   411,  1160,  2031,  1387,  -474,  -474,  -474,  -474,  -474,
-    -474,    19,   255,   255,  2166,  1905,   447,   441,   439,  -474,
-     444,   505,  1992,   225,    27,  -474,   454,  -474,  -474,  -474,
-    1931,  -474,   125,   458,   258,   460,   465,   466,  -474,  -474,
-     463,  1813,   480,  -474,  -474,  -474,  -474,  1497,  1552,  1650,
-    -474,  -474,  -474,  1805,  -474,  1872,   484,    24,   371,  1650,
-     258,   485,   487,  1805,  -474,   472,   481,  1813,    81,   399,
-     456,   399,   490,   289,   483,  -474,  -474,   258,   456,   519,
-     258,   495,   258,   496,   255,  -474,  1650,  1897,  1813,  -474,
-     321,   349,   350,   354,  -474,  -474,  -474,   258,   497,   255,
-    1650,  -474,  2094,  -474,  -474,   488,   491,   489,  1693,   498,
-     500,   502,  -474,  1650,  -474,  -474,   506,   503,  1234,  1160,
-    -474,  1992,   534,  -474,  -474,  -474,   258,  1958,  1992,   258,
-    1992,  -474,  -474,   565,   149,  -474,  -474,   510,   504,  1992,
-     225,  1992,   456,   258,   258,  -474,   514,   507,  -474,  -474,
-    -474,  1872,  -474,  1234,  1650,  1650,   515,  -474,  1805,   520,
-    -474,  -474,  -474,  -474,  -474,  -474,  -474,  1872,  -474,  -474,
-    -474,  -474,  -474,   518,  -474,  -474,  -474,  1693,   517,  -474,
-    -474,  -474,   524,  -474,   525,   456,  -474,  -474,  -474,  -474,
-    -474,  -474,  -474,  -474,  -474,   255,   526,  1387,  -474,  -474,
-     527,   612,  -474,   255,  1387,  1595,  1387,  -474,  -474,   530,
-    -474,  -474,  -474,  -474,   116,  -474,  -474,   141,  -474,  -474,
-     539,   540,   521,   542,   546,   538,  -474,  -474,   548,   543,
-    1992,   549,  -474,   552,  -474,  -474,   562,  -474,  1992,  -474,
-     556,   456,  -474,   560,  -474,  1984,   238,  2166,  2166,  1650,
-     561,  1805,  -474,  -474,  1872,    32,  -474,  1160,   456,   456,
-    -474,   186,   370,   554,   258,   563,   410,   557,  -474,  2166,
-    -474,  -474,  -474,  -474,  1650,  -474,  -474,  -474,  1984,   258,
-    -474,  1958,  1992,   456,  -474,   258,   149,  -474,  -474,  -474,
-     258,   258,  -474,  -474,  -474,  -474,  -474,  -474,   564,   613,
-    -474,  1650,  1650,  -474,  1693,   566,  -474,  -474,  -474,  -474,
-    -474,  -474,  -474,  1387,   558,  -474,   571,  -474,  -474,  -474,
-    -474,   577,   582,   583,  1872,    36,  -474,  -474,  2118,  2142,
-     572,  -474,  1984,  -474,  1984,  -474,  -474,  -474,  -474,  -474,
-    -474,  -474,  -474,  -474,  1650,   371,  -474
+    -473,    65,    22,    49,  -473,   261,  -473,    64,  -473,  -473,
+    -473,    95,    52,  -473,   143,   145,  -473,  -473,   104,  -473,
+      68,   128,  1049,  -473,   142,   305,    16,  -473,    56,   204,
+    -473,    49,   220,  -473,  -473,  -473,   261,   974,  -473,   261,
+     562,  -473,  -473,   288,   562,   261,  -473,    14,   147,  1615,
+    -473,    14,  -473,   395,   401,  1615,  1615,  1615,  1615,  1615,
+    1615,  1658,  1615,  1615,   737,   168,  -473,   414,  -473,  -473,
+    -473,  -473,  -473,   649,  -473,  -473,   165,   122,  -473,   169,
+    -473,   177,   218,    14,   219,  -473,  -473,  -473,   235,    89,
+    -473,  -473,    34,  -473,   206,   124,   286,   206,   206,   260,
+    -473,  -473,  -473,  -473,  -473,   265,  -473,  -473,  -473,  -473,
+    -473,  -473,  -473,   270,  1803,  1803,  1803,  -473,   269,  -473,
+    -473,  -473,  -473,  -473,  -473,    39,   122,   882,  1777,   283,
+     277,   230,  -473,  1615,  -473,  -473,   292,  1803,  2097,   280,
+    -473,   332,   315,  1615,   215,  1803,  -473,  -473,   244,  -473,
+    -473,  -473,   949,  -473,  -473,  -473,  -473,  -473,  -473,  1701,
+    1658,  2097,   298,  -473,     9,  -473,    59,  -473,  -473,   303,
+    2097,   319,  -473,   330,  -473,  1744,  1615,  1615,  1615,  1615,
+    -473,  1615,  1615,  1615,  -473,  1615,  1615,  1615,  1615,  1615,
+    1615,  1615,  1615,  1615,  1615,  1615,  1615,  1615,  1615,  -473,
+    1297,   455,  1615,  -473,  1615,  -473,  -473,  1225,  1615,  1615,
+    1615,  -473,   594,   261,   277,   328,   403,  -473,  1308,  1308,
+    -473,   152,   352,  -473,  1777,   405,  1803,  -473,  -473,  -473,
+    -473,  -473,  -473,  -473,   354,   261,  1615,  -473,  -473,   382,
+    -473,    47,   360,  1803,  -473,  1777,  -473,  -473,  -473,   351,
+     367,  1777,  1225,  -473,  -473,   366,    84,   407,  -473,   374,
+     373,  -473,  -473,   372,  -473,   138,    42,  -473,  -473,   377,
+    -473,  -473,   442,  1769,  -473,  -473,  -473,   384,  -473,  -473,
+    -473,   389,  1615,   261,   391,  1830,  -473,   394,  1803,  1803,
+    -473,   409,  1615,   411,  2097,  1935,  -473,  2121,  1080,  1080,
+    1080,  1080,  -473,  1080,  1080,  2145,  -473,   503,   503,   503,
+     503,  -473,  -473,  -473,  -473,  1352,  -473,  -473,    27,  1407,
+    -473,  1995,   412,  1147,  1962,  1352,  -473,  -473,  -473,  -473,
+    -473,  -473,     7,   280,   280,  2097,   698,   418,   415,   413,
+    -473,   416,   477,  1308,   188,    31,  -473,   425,  -473,  -473,
+    -473,  1897,  -473,   221,   433,   261,   434,   436,   439,  -473,
+    -473,   432,  1803,   452,  -473,  -473,  2097,  -473,  -473,  1462,
+    1517,  1615,  -473,  -473,  -473,  1777,  -473,  1856,   453,    91,
+     382,  1615,   261,   454,   456,  1777,  -473,   475,   451,  1803,
+     133,   407,   442,   407,   460,   326,   462,  -473,  -473,   261,
+     442,   467,   261,   478,   261,   486,   280,  -473,  1615,  1864,
+    1803,  -473,    26,   248,   264,   430,  -473,  -473,  -473,   261,
+     492,   280,  1615,  -473,  2025,  -473,  -473,   485,   493,   487,
+    1658,   504,   506,   508,  -473,  1615,  -473,  -473,   512,   505,
+    1225,  1147,  -473,  1308,   517,  -473,  -473,  -473,   261,  1889,
+    1308,   261,  1308,  -473,  -473,   571,   155,  -473,  -473,   514,
+     509,  1308,   188,  1308,   442,   261,   261,  -473,   518,   507,
+    -473,  -473,  -473,  1856,  -473,  1225,  1615,  1615,   521,  -473,
+    1777,   528,  -473,  -473,  -473,  -473,  -473,  -473,  -473,  1856,
+    -473,  -473,  -473,  -473,  -473,   520,  -473,  -473,  -473,  1658,
+     522,  -473,  -473,  -473,   530,  -473,   532,   442,  -473,  -473,
+    -473,  -473,  -473,  -473,  -473,  -473,  -473,   280,   535,  1352,
+    -473,  -473,   536,  1744,  -473,   280,  1352,  1560,  1352,  -473,
+    -473,   539,  -473,  -473,  -473,  -473,   247,  -473,  -473,   308,
+    -473,  -473,   541,   543,   545,   546,   547,   544,  -473,  -473,
+     551,   548,  1308,   554,  -473,   557,  -473,  -473,   576,  -473,
+    1308,  -473,   564,   442,  -473,   568,  -473,  1923,   318,  2097,
+    2097,  1615,   569,  1777,  -473,  -473,  1856,   156,  -473,  1147,
+     442,   442,  -473,   243,   483,   563,   261,   577,   411,   570,
+    -473,  2097,  -473,  -473,  -473,  -473,  1615,  -473,  -473,  -473,
+    1923,   261,  -473,  1889,  1308,   442,  -473,   261,   155,  -473,
+    -473,  -473,   261,   261,  -473,  -473,  -473,  -473,  -473,  -473,
+     579,   627,  -473,  1615,  1615,  -473,  1658,   580,  -473,  -473,
+    -473,  -473,  -473,  -473,  -473,  1352,   572,  -473,   583,  -473,
+    -473,  -473,  -473,   585,   586,   590,  1856,    77,  -473,  -473,
+    2049,  2073,   584,  -473,  1923,  -473,  1923,  -473,  -473,  -473,
+    -473,  -473,  -473,  -473,  -473,  -473,  1615,   382,  -473
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -474,  -474,  -474,  -474,  -474,  -474,  -474,   -15,  -474,  -474,
-     616,  -474,    -3,  -474,  -474,   622,  -474,  -125,   -27,    66,
-    -474,  -124,  -112,  -474,    11,  -474,  -474,  -474,   147,  -368,
-    -474,  -474,  -474,  -474,  -474,  -474,  -140,  -474,  -474,  -474,
-    -474,  -474,  -474,  -474,  -474,  -474,  -474,  -474,  -474,  -474,
-     532,    10,   247,  -474,  -194,   132,   135,  -474,   279,   -59,
-     418,    67,     5,   384,   624,   425,   317,    20,  -474,   424,
-     636,   509,  -474,  -474,  -474,  -474,   -36,   -37,   -31,   -49,
-    -474,  -474,  -474,  -474,  -474,   -32,   464,  -473,  -474,  -474,
-    -474,  -474,  -474,  -474,  -474,  -474,   277,  -119,  -231,   287,
-    -474,   300,  -474,  -205,  -300,   652,  -474,  -242,  -474,   -63,
-     106,   182,  -474,  -316,  -241,  -285,  -195,  -474,  -111,  -420,
-    -474,  -474,  -245,  -474,   402,  -474,  -176,  -474,   345,   249,
-     346,   218,    87,    96,  -415,  -474,  -429,   252,  -474,   522,
-    -474,  -474
+    -473,  -473,  -473,  -473,  -473,  -473,  -473,   -12,  -473,  -473,
+     624,  -473,    -1,  -473,  -473,   635,  -473,  -137,   -48,    74,
+    -473,  -130,  -112,  -473,    11,  -473,  -473,  -473,   149,  -372,
+    -473,  -473,  -473,  -473,  -473,  -473,  -140,  -473,  -473,  -473,
+    -473,  -473,  -473,  -473,  -473,  -473,  -473,  -473,  -473,  -473,
+     662,   448,   257,  -473,  -196,   135,   139,  -473,   262,   -59,
+     424,   -16,    -3,   387,   632,   427,   313,    20,  -473,   428,
+     -89,   524,  -473,  -473,  -473,  -473,   -36,   -37,   -31,   -49,
+    -473,  -473,  -473,  -473,  -473,   -32,   458,  -472,  -473,  -473,
+    -473,  -473,  -473,  -473,  -473,  -473,   279,  -108,  -211,   290,
+    -473,   306,  -473,  -214,  -291,   658,  -473,  -230,  -473,   -63,
+      -6,   191,  -473,  -302,  -219,  -254,  -195,  -473,  -107,  -435,
+    -473,  -473,  -347,  -473,   323,  -473,    72,  -473,   371,   268,
+     380,   242,   102,   110,  -468,  -473,  -438,   255,  -473,   515,
+    -473,  -473
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -277
+#define YYTABLE_NINF -278
 static const yytype_int16 yytable[] =
 {
-     121,   120,   162,   273,   175,   123,   122,   321,   437,   377,
-     489,   324,   165,   104,   572,   236,   241,   260,   386,   360,
-     275,   236,   434,   279,   164,   556,   541,   394,   108,   166,
-     458,   236,   429,   390,   392,   401,   346,   621,   436,   403,
-     174,   110,   356,   357,   110,   376,   101,   213,     4,   418,
-     132,  -215,   208,     5,    27,   206,   657,   118,   134,    27,
-       7,    15,    11,   427,    18,   153,   154,   155,   156,   157,
-     158,  -267,   167,   168,    19,     9,  -267,   229,   229,   229,
-       9,   439,   232,   232,   232,  -215,   439,   440,   497,   134,
-     135,   229,   488,   498,   367,   102,   232,   622,   623,   459,
-     229,   620,  -236,   326,   223,   232,    20,   624,   229,  -181,
-     175,   165,   209,   232,    29,   229,   103,  -215,   142,    29,
-     232,   135,   210,   164,    10,    11,  -267,   428,   166,    10,
-      11,    23,  -267,    26,   118,   118,   118,   382,   229,   538,
-     527,   258,   529,   232,    33,   503,   290,   267,   118,   499,
-     205,   165,   452,   509,   368,   139,   207,   118,   502,    27,
-     504,  -236,   380,   164,   210,   118,   451,  -236,   166,   153,
-     157,   656,   118,     9,   462,   381,     9,   641,   493,   636,
-       9,  -266,   594,   635,    93,   463,  -266,   229,   595,   229,
-     642,   643,   232,   497,   232,   118,   537,   381,   498,   453,
-     464,   583,   106,   439,   391,   229,   358,   229,   587,   596,
-     232,   128,   232,   229,   109,    28,   137,   562,   232,    29,
-     517,   172,    10,    11,   199,    10,    11,   524,   452,    10,
-      11,   566,   389,   240,  -153,   229,  -266,   662,   534,   663,
-     232,   203,  -266,   204,   118,   255,   118,   411,   410,     9,
-     229,   229,   413,   412,   628,   232,   232,   236,   476,   431,
-     580,   255,   118,  -182,   118,   539,   260,   236,   490,   165,
-     118,   546,   549,   570,   554,   453,   511,   513,  -181,   585,
-     256,   164,     9,   559,   454,   561,   166,   125,  -183,   257,
-     264,   131,   118,   216,    10,    11,   265,   666,    10,    11,
-     439,    11,   221,   220,   118,   266,   615,   118,   118,   224,
-      10,    11,  -182,   255,   332,   333,   609,   650,     9,   126,
-    -183,   250,   235,   126,   229,   263,   484,   251,     9,   232,
-     210,    10,    11,   626,   627,   625,   229,    94,   482,   481,
-     286,   232,   264,   485,   483,    95,   229,   287,   265,    96,
-     229,   232,   354,   144,   521,   232,  -179,   288,   639,    97,
-      98,   200,    10,    11,   274,   201,   618,    10,    11,   530,
-     229,   229,   355,   202,   603,   232,   232,    10,    11,   165,
-    -179,   118,   607,     9,  -177,  -178,   359,   404,  -179,  -176,
-     258,   164,    99,   118,   633,   118,   166,   419,   267,   634,
-     361,   363,   508,   118,   369,  -180,   365,   118,  -177,  -178,
-     373,   211,   211,  -176,   211,   211,  -177,  -178,   148,   379,
-     375,  -176,   484,   381,   383,   546,   638,   118,   118,  -180,
-      12,   406,    10,    11,   482,   481,     9,  -180,   484,   485,
-     483,   229,   385,   393,     9,    32,   232,    79,   165,   387,
-     482,   481,     9,    32,     9,   485,   483,   236,   616,   395,
-     164,   112,    35,   400,   112,   166,   402,    37,   129,   417,
-     112,   173,   414,   332,   333,   420,   113,   433,   147,   151,
-     278,    47,    48,     9,   229,    10,    11,   318,    51,   232,
-     289,   118,   151,    10,    11,   178,   255,   215,   118,   217,
-     219,    10,    11,    10,    11,   186,   446,   118,   447,   190,
-     448,   449,   515,   450,   195,   196,   197,   198,    61,   460,
-     465,   521,   468,   471,   665,   484,   523,   469,   470,   345,
-      64,   256,    10,    11,   229,   345,   345,   482,   481,   232,
-     472,   118,   485,   483,   487,    10,    11,   492,   380,   495,
-     505,   507,   236,   244,   510,   512,   514,   522,   531,   528,
-     532,   112,   533,   526,   435,   530,   535,   112,   555,   147,
-     341,   536,   557,   151,   565,   165,   558,   569,   574,   571,
-    -157,   138,   464,   576,   578,   579,   582,   164,    37,   584,
-     593,   118,   166,   161,   118,   484,   170,   113,   151,   597,
-     598,   599,    47,    48,     9,  -158,   600,   482,   481,    51,
-     601,   606,   485,   483,   605,   602,   225,   604,   608,   610,
-      37,   617,   629,   631,   644,   632,   319,   645,   439,   113,
-     651,   652,    79,   115,    47,    48,     9,   653,   350,   226,
-     661,    51,   654,   655,    66,   281,    32,   107,   225,   244,
-     630,    64,   345,    10,    11,   282,   658,   581,   591,   345,
-     364,   592,   371,   124,   118,   115,   405,   345,   372,   285,
-     506,   226,   494,   477,    91,   244,    79,   291,   353,   575,
-     444,   445,   564,    64,   178,    10,    11,   282,   181,   182,
-     183,   540,   640,   185,   186,   187,   188,   637,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   151,   293,   294,
-     295,   296,   560,   297,   298,   299,     0,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,     0,   161,     0,   320,   352,   323,     0,     0,     0,
-     138,   138,   334,     0,     0,     0,     0,    79,     0,     0,
-     227,   233,   234,     0,     0,     0,     0,     0,   345,     0,
-       0,     0,     0,     0,   544,   345,     0,   345,   455,     0,
-       0,   335,     0,   262,     0,    37,   345,     0,   345,   350,
-     336,   277,     0,     0,   113,   337,   338,   339,   283,    47,
-      48,     9,   340,     0,     0,     0,    51,     0,   244,   341,
-     479,     0,     0,   114,     0,   491,     0,     0,   244,     0,
-     112,   292,     0,   138,     0,     0,   342,     0,   112,     0,
-     115,     0,   112,   138,     0,   147,   116,   151,   343,     0,
-       0,     0,     0,     0,   344,     0,     0,    11,    64,     0,
-      10,    11,   151,     0,     0,     0,   422,     0,     0,     0,
-     161,     0,     0,     0,     0,     0,   422,     0,     0,     0,
-       0,     0,   362,    79,    79,     0,     0,   345,     0,     0,
-       0,   350,   543,     0,   550,   345,     0,     0,   370,   455,
-       0,     0,   345,     0,     0,   455,     0,     0,   563,   350,
-       0,     0,     0,     0,     0,     0,     0,     0,    79,   138,
-     138,     0,     0,   244,     0,     0,     0,     0,   398,     0,
-       0,   178,     0,     0,     0,   345,     0,     0,   544,   345,
-     409,   186,     0,   415,   416,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,     0,     0,     0,     0,   138,     0,
-       0,     0,     0,   176,  -276,     0,     0,     0,     0,     0,
-       0,     0,   138,     0,     0,     0,     0,     0,     0,     0,
-     161,     0,     0,     0,     0,   170,     0,     0,     0,   345,
-       0,   345,   177,   178,     0,   179,   180,   181,   182,   183,
-       0,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   244,   409,     0,     0,
-       0,     0,    79,     0,  -276,     0,   567,   568,     0,   151,
-       0,     0,     0,     0,  -276,     0,     0,     0,     0,     0,
-       0,     0,     0,   496,   350,     0,   543,     0,     0,   161,
-     550,   455,     0,     0,     0,   350,   350,     0,     0,     0,
-       0,     0,     0,   227,   516,     0,     0,     0,     0,   422,
-       0,     0,     0,     0,     0,     0,   422,   589,   422,    -2,
+     121,   120,   162,   274,   175,   123,   122,   322,   491,   325,
+     361,   280,   165,   543,   276,   237,   104,   574,   558,   174,
+     242,   237,   379,   439,   164,   227,   233,   234,   261,   166,
+     108,   237,   436,   110,   460,   142,   110,   378,   429,   208,
+     101,   388,   132,   139,  -184,   505,  -268,     5,   263,   134,
+     396,  -268,   369,   511,   392,   394,   278,   118,   403,    27,
+    -216,  -180,   405,   284,   431,     4,   383,   205,  -183,   441,
+     438,    27,   420,   207,     7,   442,  -184,   229,   229,   229,
+       9,   135,   232,   232,   232,  -180,   293,  -237,    15,   102,
+     206,   229,     9,  -180,  -216,   393,   232,   659,    18,   209,
+     229,  -268,   430,   461,   622,   232,   223,  -268,   229,   210,
+     175,   165,   370,   232,    19,   229,   103,   564,  -182,    29,
+     232,   241,   210,   164,   134,   291,  -216,    28,   166,    10,
+      11,    29,   637,   259,   118,   118,   118,   363,   229,   268,
+     499,    10,    11,   232,   327,   500,  -237,   382,   118,   384,
+     540,   165,  -237,   441,   372,    27,   135,   118,   454,   490,
+     582,   623,   383,   164,    20,   118,   638,    26,   166,    23,
+     643,   495,   118,   529,   658,   531,     9,   644,   645,     9,
+     504,   200,   506,   213,   400,   201,   664,   229,   665,   229,
+      33,   454,   232,   202,   232,   118,   411,   391,    11,   417,
+     418,   501,   333,   334,    93,   455,   229,   106,   229,   359,
+     539,   232,     9,   232,   229,    29,   611,   585,   137,   232,
+     519,   624,   625,   109,   589,    10,    11,   526,    10,    11,
+     172,   626,   199,   628,   629,  -154,   229,  -267,   455,     9,
+     536,   232,  -267,   203,   118,   568,   118,   456,   413,   412,
+     499,   229,   229,   415,   414,   500,   232,   232,   641,   237,
+     433,    10,    11,   118,   478,   118,   572,   515,     9,   237,
+     165,   118,   513,   411,   492,   275,   406,   204,  -183,   261,
+      11,   465,   164,  -178,   347,     9,   421,   166,    10,    11,
+     357,   358,  -267,   118,  -182,   668,   466,   125,  -267,  -179,
+     498,   131,   126,   587,   279,   118,   126,  -178,   118,   118,
+     216,   630,     9,   596,    94,  -178,   256,    10,    11,   597,
+     227,   518,    95,  -179,   220,   229,    96,   221,   486,   224,
+     232,  -179,   235,   652,    10,    11,    97,    98,   229,   256,
+     484,   483,   251,   232,   252,   487,   485,   128,   229,   627,
+     256,   257,   229,   232,     9,   210,   523,   232,   287,   620,
+     258,    10,    11,   333,   334,    10,    11,   264,   265,    99,
+     441,   532,   229,   229,   266,   288,   598,   232,   232,   265,
+     441,   165,   118,   267,   259,   266,   617,   355,    10,    11,
+     290,   289,   268,   164,   635,   118,   510,   118,   166,    10,
+      11,   636,   517,    10,    11,   118,   356,   211,   211,   118,
+     211,   211,   360,   362,   364,   453,   525,   367,   215,     9,
+     217,   219,   371,   464,   486,     9,   375,   377,   381,   118,
+     118,   383,    12,   385,   588,   387,   484,   483,     9,   395,
+     486,   487,   485,   229,   389,   397,   402,    32,   232,    79,
+     165,   404,   484,   483,   144,    32,   408,   487,   485,   237,
+     148,   416,   164,   112,   618,  -177,   112,   166,    10,    11,
+     129,   419,   112,   173,    10,    11,   422,   448,   435,     9,
+     147,   151,   449,   451,   450,   452,   229,    10,    11,  -177,
+     462,   232,   473,   118,   151,   467,   470,  -177,   471,   256,
+     118,   472,   512,   153,   154,   155,   156,   157,   158,   118,
+     167,   168,   474,   489,   319,   541,   494,   382,  -181,   497,
+     507,   548,   551,   523,   556,   346,   667,   486,    10,    11,
+     509,   346,   346,   561,   257,   563,   229,   178,   514,   484,
+     483,   232,  -181,   118,   487,   485,   516,   186,    10,    11,
+    -181,   190,   524,   342,   237,   245,   195,   196,   197,   198,
+     528,   530,   437,   112,   533,    35,   534,   532,   535,   112,
+      37,   147,   537,   538,   557,   151,   559,   165,   567,   113,
+     576,   560,   466,   571,    47,    48,     9,   573,   578,   164,
+     580,    51,   581,   118,   166,   584,   118,   486,   586,   595,
+     151,   599,   336,   600,  -158,   601,  -159,   153,   157,   484,
+     483,   337,   602,   603,   487,   485,   338,   339,   340,   607,
+     604,    61,   606,   341,   605,   608,   610,   612,   320,   619,
+     342,   631,   609,    64,    79,    10,    11,   633,   634,   646,
+     351,   647,   441,   654,   653,   655,   656,   343,    32,   346,
+     657,   245,   663,   176,  -277,   107,   346,    66,   660,   344,
+     632,   583,   365,   593,   346,   345,   118,   594,    11,   373,
+     407,   124,   354,   374,   508,   548,   640,   496,   245,    79,
+      91,   479,   177,   178,   286,   179,   180,   181,   182,   183,
+     577,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   336,   446,   566,   642,
+     151,   138,   542,   639,  -277,   337,   447,   562,     0,     0,
+     338,   339,   340,   161,  -277,     0,   170,   341,   353,     0,
+       0,     0,     0,     0,   443,     0,     0,     0,     0,     0,
+      35,     0,     0,     0,     0,    37,     0,     0,   169,     0,
+      79,   343,     0,     0,   113,     0,   346,   444,     0,    47,
+      48,     9,   546,   346,     0,   346,    51,     0,     0,   345,
+       0,   457,    11,    55,   346,     0,   346,     0,     0,     0,
+       0,     0,   351,     0,     0,     0,    56,    57,     0,    58,
+      59,     0,     0,    60,     0,     0,    61,     0,     0,     0,
+       0,     0,   245,     0,   481,     0,    62,    63,    64,   493,
+      10,    11,   245,     0,   112,     0,     0,     0,     0,     0,
+       0,     0,   112,     0,     0,     0,   112,     0,     0,   147,
+       0,   151,     0,     0,     0,     0,     0,     0,   294,   295,
+     296,   297,     0,   298,   299,   300,   151,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,     0,   161,     0,   321,   346,   324,    79,    79,     0,
+     138,   138,   335,   346,     0,   351,   545,     0,   552,     0,
+     346,     0,     0,   457,     0,    35,     0,     0,     0,   457,
+      37,     0,   565,   351,     0,     0,     0,     0,   366,   113,
+       0,     0,    79,     0,    47,    48,     9,   245,   236,     0,
+       0,    51,     0,   346,     0,     0,   546,   346,    55,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    56,    57,     0,    58,    59,     0,     0,    60,     0,
+       0,    61,     0,     0,   138,     0,     0,     0,     0,     0,
+       0,    62,    63,    64,   138,    10,    11,    37,     0,     0,
+       0,     0,     0,     0,     0,     0,   113,   346,     0,   346,
+       0,    47,    48,     9,     0,     0,     0,   424,    51,     0,
+       0,   161,    37,     0,     0,   225,     0,   424,     0,     0,
+       0,   113,     0,     0,     0,     0,    47,    48,     9,     0,
+     245,     0,   115,    51,     0,     0,    79,     0,   226,     0,
+     114,     0,     0,   151,   282,     0,     0,     0,     0,     0,
+      64,     0,    10,    11,   283,     0,     0,   115,   351,     0,
+     545,   138,   138,   116,   552,   457,     0,     0,     0,   351,
+     351,     0,     0,     0,     0,    64,     0,    10,    11,    -2,
       34,     0,    35,     0,     0,    36,     0,    37,    38,    39,
        0,     0,    40,     0,    41,    42,    43,    44,    45,    46,
-       0,    47,    48,     9,     0,     0,    49,    50,    51,    52,
-      53,    54,     0,     0,     0,    55,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    56,    57,
+     138,    47,    48,     9,     0,     0,    49,    50,    51,    52,
+      53,    54,     0,     0,   138,    55,     0,     0,     0,     0,
+       0,     0,   161,     0,     0,     0,     0,   170,    56,    57,
        0,    58,    59,     0,     0,    60,     0,     0,    61,     0,
-       0,   -24,     0,     0,     0,     0,   170,     0,    62,    63,
-      64,     0,    10,    11,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   648,   649,     0,   161,   586,     0,     0,
-       0,   325,     0,    35,     0,   422,    36,  -251,    37,    38,
-      39,     0,  -251,    40,     0,    41,    42,   113,    44,    45,
-      46,     0,    47,    48,     9,     0,     0,    49,    50,    51,
-      52,    53,    54,     0,     0,     0,    55,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    56,
-      57,     0,    58,    59,     0,     0,    60,     0,     0,    61,
-       0,     0,  -251,     0,     0,     0,     0,   326,  -251,    62,
-      63,    64,     0,    10,    11,   325,     0,    35,     0,     0,
-      36,     0,    37,    38,    39,     0,     0,    40,     0,    41,
-      42,   113,    44,    45,    46,     0,    47,    48,     9,     0,
-       0,    49,    50,    51,    52,    53,    54,     0,     0,     0,
-      55,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    56,    57,     0,    58,    59,     0,     0,
-      60,     0,    35,    61,     0,     0,  -251,    37,     0,     0,
-     169,   326,  -251,    62,    63,    64,   113,    10,    11,     0,
-       0,    47,    48,     9,     0,     0,     0,     0,    51,     0,
-       0,     0,     0,     0,     0,    55,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    35,     0,     0,    56,    57,
-      37,    58,    59,     0,     0,    60,     0,     0,    61,   113,
-       0,     0,     0,     0,    47,    48,     9,     0,    62,    63,
-      64,    51,    10,    11,     0,     0,     0,     0,   159,     0,
+       0,   -24,     0,     0,   178,     0,     0,     0,    62,    63,
+      64,     0,    10,    11,   186,     0,     0,     0,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,     0,   569,   570,
+       0,     0,     0,     0,     0,     0,     0,     0,   326,     0,
+      35,     0,     0,    36,  -252,    37,    38,    39,     0,  -252,
+      40,   161,    41,    42,   113,    44,    45,    46,     0,    47,
+      48,     9,     0,     0,    49,    50,    51,    52,    53,    54,
+       0,   424,     0,    55,     0,     0,     0,     0,   424,   591,
+     424,     0,     0,     0,     0,     0,    56,    57,     0,    58,
+      59,     0,     0,    60,     0,     0,    61,     0,     0,  -252,
+       0,     0,     0,     0,   327,  -252,    62,    63,    64,     0,
+      10,    11,     0,     0,     0,     0,   326,     0,    35,     0,
+       0,    36,     0,    37,    38,    39,     0,     0,    40,     0,
+      41,    42,   113,    44,    45,    46,     0,    47,    48,     9,
+       0,     0,    49,    50,    51,    52,    53,    54,   170,     0,
+       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    56,    57,     0,    58,    59,     0,
+       0,    60,     0,     0,    61,   650,   651,  -252,   161,     0,
+       0,     0,   327,  -252,    62,    63,    64,   424,    10,    11,
+      35,     0,     0,     0,     0,    37,     0,     0,     0,     0,
+       0,     0,     0,     0,   113,     0,   336,     0,     0,    47,
+      48,     9,     0,     0,     0,   337,    51,     0,     0,     0,
+     338,   339,   340,   159,     0,     0,     0,   341,     0,     0,
+       0,     0,     0,     0,   342,     0,    56,    57,     0,    58,
+     160,     0,     0,    60,     0,    35,    61,   316,     0,     0,
+      37,   343,     0,     0,     0,     0,    62,    63,    64,   113,
+      10,    11,     0,     0,    47,    48,     9,     0,     0,   345,
+       0,    51,    11,     0,     0,     0,     0,     0,    55,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    56,    57,     0,    58,   160,     0,     0,    60,     0,
-      35,    61,   315,     0,     0,    37,     0,     0,     0,     0,
+       0,    56,    57,     0,    58,    59,     0,     0,    60,     0,
+      35,    61,     0,     0,     0,    37,     0,     0,     0,   423,
        0,    62,    63,    64,   113,    10,    11,     0,     0,    47,
-      48,     9,     0,     0,     0,     0,    51,     0,     0,     0,
-       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+      48,     9,     0,     0,     0,     0,    51,     0,   432,     0,
+       0,     0,     0,   159,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    56,    57,     0,    58,
-      59,     0,     0,    60,     0,    35,    61,     0,     0,     0,
-      37,     0,     0,     0,   421,     0,    62,    63,    64,   113,
-      10,    11,     0,     0,    47,    48,     9,     0,     0,     0,
-       0,    51,     0,   430,     0,     0,     0,     0,   159,     0,
+     160,     0,     0,    60,     0,    35,    61,     0,     0,     0,
+      37,     0,     0,     0,     0,     0,    62,    63,    64,   113,
+      10,    11,     0,     0,    47,    48,     9,     0,   476,     0,
+       0,    51,     0,     0,     0,     0,     0,     0,    55,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    56,    57,     0,    58,   160,     0,     0,    60,     0,
+       0,    56,    57,     0,    58,    59,     0,     0,    60,     0,
       35,    61,     0,     0,     0,    37,     0,     0,     0,     0,
        0,    62,    63,    64,   113,    10,    11,     0,     0,    47,
-      48,     9,     0,   474,     0,     0,    51,     0,     0,     0,
+      48,     9,     0,   477,     0,     0,    51,     0,     0,     0,
        0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    56,    57,     0,    58,
-      59,     0,     0,    60,     0,    35,    61,     0,     0,     0,
-      37,     0,     0,     0,     0,     0,    62,    63,    64,   113,
-      10,    11,     0,     0,    47,    48,     9,     0,   475,     0,
-       0,    51,     0,     0,     0,     0,     0,     0,    55,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    35,     0,
-       0,    56,    57,    37,    58,    59,     0,     0,    60,     0,
-       0,    61,   113,     0,     0,     0,     0,    47,    48,     9,
-       0,    62,    63,    64,    51,    10,    11,     0,     0,     0,
+       0,     0,     0,    35,     0,     0,    56,    57,    37,    58,
+      59,     0,     0,    60,     0,     0,    61,   113,     0,     0,
+       0,     0,    47,    48,     9,     0,    62,    63,    64,    51,
+      10,    11,     0,     0,     0,     0,    55,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    56,
+      57,     0,    58,    59,     0,     0,    60,     0,    35,    61,
+       0,     0,     0,    37,     0,     0,     0,   590,     0,    62,
+      63,    64,   113,    10,    11,     0,     0,    47,    48,     9,
+       0,     0,     0,     0,    51,     0,     0,     0,     0,     0,
        0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    56,    57,     0,    58,    59,     0,
-       0,    60,     0,    35,    61,     0,     0,     0,    37,     0,
-       0,     0,   588,     0,    62,    63,    64,   113,    10,    11,
-       0,     0,    47,    48,     9,     0,     0,     0,     0,    51,
-       0,     0,     0,     0,     0,     0,    55,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    35,     0,     0,    56,
-      57,    37,    58,    59,     0,     0,    60,     0,     0,    61,
-     113,     0,     0,     0,     0,    47,    48,     9,     0,    62,
-      63,    64,    51,    10,    11,     0,     0,     0,     0,   159,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    35,
-       0,     0,    56,    57,   284,    58,   160,     0,     0,    60,
-       0,     0,    61,   113,     0,     0,     0,     0,    47,    48,
-       9,     0,    62,    63,    64,    51,    10,    11,     0,     0,
-       0,     0,    55,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    56,    57,    37,    58,    59,
-       0,     0,    60,     0,     0,    61,   113,     0,     0,     0,
-       0,    47,    48,     9,     0,    62,    63,    64,    51,    10,
-      11,     0,     0,    37,     0,   225,   242,     0,     0,     0,
-       0,    37,   113,     0,     0,     0,     0,    47,    48,     9,
-     113,     0,   115,     0,    51,    47,    48,     9,   226,     0,
-       0,   225,    51,     0,     0,     0,    37,     0,     0,   225,
-      64,     0,    10,    11,   397,   113,     0,     0,   115,     0,
-      47,    48,     9,     0,   226,     0,   115,    51,     0,     0,
-       0,     0,   226,     0,   407,     0,    64,     0,    10,    11,
-      37,     0,     0,     0,    64,     0,    10,    11,     0,   113,
-       0,   115,     0,     0,    47,    48,     9,   408,     0,     0,
-       0,    51,     0,     0,     0,   284,     0,     0,   225,    64,
-       0,    10,    11,   335,   113,     0,     0,     0,     0,    47,
-      48,     9,   336,     0,     0,   115,    51,   337,   338,   339,
-       0,   478,     0,   225,   340,     0,     0,     0,     0,   335,
-       0,   441,   461,    64,     0,    10,    11,     0,   336,     0,
-     115,     0,     0,   337,   338,   339,   226,     0,   342,     0,
-     340,     0,     0,     0,   442,     0,   335,   341,    64,     0,
-      10,    11,     0,     0,     0,   336,   344,     0,     0,    11,
-     337,   338,   542,     0,   342,     0,     0,   340,     0,     0,
-       0,     0,   335,     0,   341,     0,     0,     0,     0,     0,
-     335,   336,   344,     0,     0,    11,   337,   338,   339,   336,
-       0,   342,     0,   340,   337,   338,   339,     0,     0,     0,
-     341,   340,     0,     0,     0,     0,     0,     0,   341,   344,
-       0,    10,    11,     0,     0,     0,     0,   342,     0,     0,
-       0,     0,     0,   611,     0,   342,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   344,     0,     0,    11,     0,
-       0,     0,     0,   344,   177,   178,    11,   179,     0,   181,
+       0,    35,     0,     0,    56,    57,    37,    58,    59,     0,
+       0,    60,     0,     0,    61,   113,     0,     0,     0,     0,
+      47,    48,     9,     0,    62,    63,    64,    51,    10,    11,
+       0,     0,     0,     0,   159,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    35,     0,     0,    56,    57,   285,
+      58,   160,     0,     0,    60,     0,     0,    61,   113,     0,
+       0,     0,     0,    47,    48,     9,     0,    62,    63,    64,
+      51,    10,    11,     0,     0,     0,     0,    55,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      56,    57,    37,    58,    59,     0,     0,    60,     0,     0,
+      61,   113,     0,     0,     0,     0,    47,    48,     9,     0,
+      62,    63,    64,    51,    10,    11,     0,    37,     0,     0,
+     225,     0,     0,     0,     0,    37,   113,     0,   243,     0,
+       0,    47,    48,     9,   113,     0,     0,   115,    51,    47,
+      48,     9,     0,   226,     0,   225,    51,     0,     0,   292,
+       0,    37,     0,   225,     0,    64,     0,    10,    11,   283,
+     113,     0,   115,     0,     0,    47,    48,     9,   226,     0,
+     115,     0,    51,     0,     0,     0,   226,     0,    37,   225,
+      64,     0,    10,    11,   399,     0,     0,   113,    64,     0,
+      10,    11,    47,    48,     9,     0,   115,     0,     0,    51,
+       0,     0,   226,     0,    37,     0,   409,     0,     0,     0,
+       0,     0,   285,   113,    64,     0,    10,    11,    47,    48,
+       9,   113,     0,   115,     0,    51,    47,    48,     9,   410,
+       0,     0,   225,    51,     0,     0,     0,   336,     0,     0,
+     225,    64,     0,    10,    11,   336,   337,     0,   463,   115,
+       0,   338,   339,   544,   337,   480,     0,   115,   341,   338,
+     339,   340,     0,   226,     0,   342,   341,    64,     0,    10,
+      11,   336,     0,   342,     0,    64,     0,    10,    11,     0,
+     337,     0,   343,     0,     0,   338,   339,   340,     0,     0,
+     343,     0,   341,     0,     0,     0,     0,     0,     0,   342,
+     345,     0,    10,    11,     0,     0,     0,     0,   345,   178,
+       0,    11,     0,   181,   182,   183,   343,     0,   185,   186,
+     187,   188,   613,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,     0,     0,   345,   177,   178,    11,   179,     0,
+     181,   182,   183,     0,     0,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   177,   178,
+       0,   179,     0,   181,   182,   183,     0,   437,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,     0,     0,     0,     0,     0,     0,   177,   178,
+       0,   179,     0,   181,   182,   183,     0,   434,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   177,   178,     0,   179,     0,   181,   182,   183,
+       0,   527,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   177,   178,     0,   179,
+       0,   181,   182,   183,     0,   661,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     177,   178,     0,   179,     0,   181,   182,   183,     0,   662,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   177,   178,     0,     0,     0,   181,
      182,   183,     0,     0,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   177,   178,     0,
-     179,     0,   181,   182,   183,     0,   435,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,     0,     0,     0,     0,     0,     0,   177,   178,     0,
-     179,     0,   181,   182,   183,     0,   432,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   177,   178,     0,   179,     0,   181,   182,   183,     0,
-     525,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   177,   178,     0,   179,     0,
-     181,   182,   183,     0,   659,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   177,
-     178,     0,   179,     0,   181,   182,   183,     0,   660,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   177,   178,     0,     0,     0,   181,   182,
-     183,     0,     0,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   177,   178,     0,
-       0,     0,   181,   182,   183,     0,     0,   185,   186,   187,
-     188,     0,   190,   191,   192,   193,   194,   195,   196,   197,
-     198
+     191,   192,   193,   194,   195,   196,   197,   198,   177,   178,
+       0,     0,     0,   181,   182,   183,     0,     0,   185,   186,
+     187,   188,     0,   190,   191,   192,   193,   194,   195,   196,
+     197,   198
 };
 
 static const yytype_int16 yycheck[] =
 {
-      37,    37,    61,   143,    67,    37,    37,   202,   324,   251,
-     378,   205,    61,    28,   487,   127,   127,   136,   259,   224,
-     144,   133,   322,   148,    61,   454,   446,   268,    31,    61,
-       3,   143,   317,   264,   265,   276,   212,     5,   323,   280,
-      67,    36,   218,   219,    39,   250,    24,    59,     0,   290,
-      45,     1,     5,    25,     3,     1,    20,    37,    35,     3,
-      25,    24,    74,    11,     3,    55,    56,    57,    58,    59,
-      60,     7,    62,    63,    62,    24,    12,   114,   115,   116,
-      24,    62,   114,   115,   116,    35,    62,    68,     7,    35,
-      67,   128,    68,    12,     5,    73,   128,    65,    66,    72,
-     137,   574,     3,    67,   107,   137,    21,    75,   145,    59,
-     173,   160,    65,   145,    63,   152,    60,    67,    51,    63,
-     152,    67,    75,   160,    73,    74,    62,    75,   160,    73,
-      74,    24,    68,    63,   114,   115,   116,   256,   175,   439,
-     425,   136,   427,   175,    62,   390,   173,   142,   128,    68,
-      83,   200,     3,   398,    65,    49,    89,   137,   389,     3,
-     391,    62,    63,   200,    75,   145,   342,    68,   200,   159,
-     160,   644,   152,    24,   350,    24,    24,   606,   383,   599,
-      24,     7,    66,   598,    62,    60,    12,   224,    72,   226,
-     610,   611,   224,     7,   226,   175,   438,    24,    12,    50,
-      75,   517,     3,    62,    53,   242,   221,   244,   524,    68,
-     242,    59,   244,   250,     3,    59,    71,   462,   250,    63,
-     414,    62,    73,    74,    67,    73,    74,   421,     3,    73,
-      74,   473,    59,   127,    66,   272,    62,   652,   433,   654,
-     272,    66,    68,    59,   224,    24,   226,   284,   284,    24,
-     287,   288,   284,   284,    68,   287,   288,   369,   369,   318,
-     505,    24,   242,    59,   244,   441,   385,   379,   379,   318,
-     250,   447,   448,   478,   450,    50,   400,   402,    59,   520,
-      59,   318,    24,   459,    59,   461,   318,    40,    35,    68,
-      53,    44,   272,    24,    73,    74,    59,   665,    73,    74,
-      62,    74,    62,    64,   284,    68,    68,   287,   288,    59,
-      73,    74,    59,    24,   208,   209,   561,   633,    24,    40,
-      67,    59,    63,    44,   361,    35,   375,    67,    24,   361,
-      75,    73,    74,   578,   579,   577,   373,     9,   375,   375,
-      60,   373,    53,   375,   375,    17,   383,    72,    59,    21,
-     387,   383,    59,    59,   417,   387,    35,    72,   603,    31,
-      32,    59,    73,    74,    60,    63,   571,    73,    74,   428,
-     407,   408,     3,    71,   550,   407,   408,    73,    74,   428,
-      59,   361,   558,    24,    35,    35,    60,   281,    67,    35,
-     385,   428,    64,   373,   588,   375,   428,   291,   393,   594,
-       8,    60,   397,   383,    62,    35,    35,   387,    59,    59,
-      75,    94,    95,    59,    97,    98,    67,    67,    59,    62,
-      60,    67,   471,    24,    59,   601,   602,   407,   408,    59,
-       5,    65,    73,    74,   471,   471,    24,    67,   487,   471,
-     471,   478,    62,    62,    24,    20,   478,    22,   497,    72,
-     487,   487,    24,    28,    24,   487,   487,   569,   569,     3,
-     497,    36,     3,    62,    39,   497,    62,     8,    43,    62,
-      45,    59,    67,   367,   368,    65,    17,    66,    53,    54,
-      60,    22,    23,    24,   521,    73,    74,    59,    29,   521,
-      60,   471,    67,    73,    74,    34,    24,    95,   478,    97,
-      98,    73,    74,    73,    74,    44,    59,   487,    67,    48,
-      71,    67,   406,     8,    53,    54,    55,    56,    59,    65,
-      62,   584,    62,    60,   664,   574,   420,    62,    62,   212,
-      71,    59,    73,    74,   571,   218,   219,   574,   574,   571,
-      60,   521,   574,   574,    60,    73,    74,    60,    63,    68,
-      60,    68,   664,   128,    35,    60,    60,    60,    60,    68,
-      60,   136,    60,    75,    75,   624,    60,   142,     3,   144,
-      36,    68,    62,   148,    60,   624,    72,    62,    60,    59,
-      59,    49,    75,    66,    60,    60,    60,   624,     8,    62,
-      60,   571,   624,    61,   574,   644,    64,    17,   173,    60,
-      60,    59,    22,    23,    24,    59,    68,   644,   644,    29,
-      62,    49,   644,   644,    62,    72,    36,    68,    62,    59,
-       8,    60,    68,    60,    60,    68,   201,    14,    62,    17,
-      72,    60,   207,    53,    22,    23,    24,    60,   213,    59,
-      68,    29,    60,    60,    22,    65,   221,    31,    36,   224,
-     584,    71,   335,    73,    74,    75,   645,   510,   526,   342,
-     235,   526,   244,    39,   644,    53,   282,   350,   244,   160,
-     393,    59,   385,   373,    22,   250,   251,    65,   214,   497,
-     335,   335,   464,    71,    34,    73,    74,    75,    38,    39,
-      40,   442,   605,    43,    44,    45,    46,   601,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,   282,   176,   177,
-     178,   179,   460,   181,   182,   183,    -1,   185,   186,   187,
+      37,    37,    61,   143,    67,    37,    37,   202,   380,   205,
+     224,   148,    61,   448,   144,   127,    28,   489,   456,    67,
+     127,   133,   252,   325,    61,   114,   115,   116,   136,    61,
+      31,   143,   323,    36,     3,    51,    39,   251,    11,     5,
+      24,   260,    45,    49,    35,   392,     7,    25,   137,    35,
+     269,    12,     5,   400,   265,   266,   145,    37,   277,     3,
+       1,    35,   281,   152,   318,     0,    24,    83,    59,    62,
+     324,     3,   291,    89,    25,    68,    67,   114,   115,   116,
+      24,    67,   114,   115,   116,    59,   175,     3,    24,    73,
+       1,   128,    24,    67,    35,    53,   128,    20,     3,    65,
+     137,    62,    75,    72,   576,   137,   107,    68,   145,    75,
+     173,   160,    65,   145,    62,   152,    60,   464,    59,    63,
+     152,   127,    75,   160,    35,   173,    67,    59,   160,    73,
+      74,    63,   600,   136,   114,   115,   116,   226,   175,   142,
+       7,    73,    74,   175,    67,    12,    62,    63,   128,   257,
+     441,   200,    68,    62,   243,     3,    67,   137,     3,    68,
+     507,     5,    24,   200,    21,   145,   601,    63,   200,    24,
+     608,   385,   152,   427,   646,   429,    24,   612,   613,    24,
+     391,    59,   393,    59,   273,    63,   654,   224,   656,   226,
+      62,     3,   224,    71,   226,   175,   285,    59,    74,   288,
+     289,    68,   208,   209,    62,    50,   243,     3,   245,   221,
+     440,   243,    24,   245,   251,    63,   563,   519,    71,   251,
+     416,    65,    66,     3,   526,    73,    74,   423,    73,    74,
+      62,    75,    67,   580,   581,    66,   273,     7,    50,    24,
+     435,   273,    12,    66,   224,   475,   226,    59,   285,   285,
+       7,   288,   289,   285,   285,    12,   288,   289,   605,   371,
+     319,    73,    74,   243,   371,   245,   480,   404,    24,   381,
+     319,   251,   402,   362,   381,    60,   282,    59,    59,   387,
+      74,    60,   319,    35,   212,    24,   292,   319,    73,    74,
+     218,   219,    62,   273,    59,   667,    75,    40,    68,    35,
+     389,    44,    40,   522,    60,   285,    44,    59,   288,   289,
+      24,    68,    24,    66,     9,    67,    24,    73,    74,    72,
+     409,   410,    17,    59,    64,   362,    21,    62,   377,    59,
+     362,    67,    63,   635,    73,    74,    31,    32,   375,    24,
+     377,   377,    59,   375,    67,   377,   377,    59,   385,   579,
+      24,    59,   389,   385,    24,    75,   419,   389,    60,   573,
+      68,    73,    74,   369,   370,    73,    74,    35,    53,    64,
+      62,   430,   409,   410,    59,    72,    68,   409,   410,    53,
+      62,   430,   362,    68,   387,    59,    68,    59,    73,    74,
+      60,    72,   395,   430,   590,   375,   399,   377,   430,    73,
+      74,   596,   408,    73,    74,   385,     3,    94,    95,   389,
+      97,    98,    60,     8,    60,   343,   422,    35,    95,    24,
+      97,    98,    62,   351,   473,    24,    75,    60,    62,   409,
+     410,    24,     5,    59,   523,    62,   473,   473,    24,    62,
+     489,   473,   473,   480,    72,     3,    62,    20,   480,    22,
+     499,    62,   489,   489,    59,    28,    65,   489,   489,   571,
+      59,    67,   499,    36,   571,    35,    39,   499,    73,    74,
+      43,    62,    45,    59,    73,    74,    65,    59,    66,    24,
+      53,    54,    67,    67,    71,     8,   523,    73,    74,    59,
+      65,   523,    60,   473,    67,    62,    62,    67,    62,    24,
+     480,    62,    35,    55,    56,    57,    58,    59,    60,   489,
+      62,    63,    60,    60,    59,   443,    60,    63,    35,    68,
+      60,   449,   450,   586,   452,   212,   666,   576,    73,    74,
+      68,   218,   219,   461,    59,   463,   573,    34,    60,   576,
+     576,   573,    59,   523,   576,   576,    60,    44,    73,    74,
+      67,    48,    60,    36,   666,   128,    53,    54,    55,    56,
+      75,    68,    75,   136,    60,     3,    60,   626,    60,   142,
+       8,   144,    60,    68,     3,   148,    62,   626,    60,    17,
+      60,    72,    75,    62,    22,    23,    24,    59,    66,   626,
+      60,    29,    60,   573,   626,    60,   576,   646,    62,    60,
+     173,    60,     8,    60,    59,    59,    59,   159,   160,   646,
+     646,    17,    68,    62,   646,   646,    22,    23,    24,    62,
+      72,    59,    68,    29,   552,    49,    62,    59,   201,    60,
+      36,    68,   560,    71,   207,    73,    74,    60,    68,    60,
+     213,    14,    62,    60,    72,    60,    60,    53,   221,   336,
+      60,   224,    68,     4,     5,    31,   343,    22,   647,    65,
+     586,   512,   235,   528,   351,    71,   646,   528,    74,   245,
+     283,    39,   214,   245,   395,   603,   604,   387,   251,   252,
+      22,   375,    33,    34,   160,    36,    37,    38,    39,    40,
+     499,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,     8,   336,   466,   607,
+     283,    49,   444,   603,    65,    17,   336,   462,    -1,    -1,
+      22,    23,    24,    61,    75,    -1,    64,    29,   213,    -1,
+      -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
+       3,    -1,    -1,    -1,    -1,     8,    -1,    -1,    11,    -1,
+     323,    53,    -1,    -1,    17,    -1,   443,    59,    -1,    22,
+      23,    24,   449,   450,    -1,   452,    29,    -1,    -1,    71,
+      -1,   344,    74,    36,   461,    -1,   463,    -1,    -1,    -1,
+      -1,    -1,   355,    -1,    -1,    -1,    49,    50,    -1,    52,
+      53,    -1,    -1,    56,    -1,    -1,    59,    -1,    -1,    -1,
+      -1,    -1,   375,    -1,   377,    -1,    69,    70,    71,   382,
+      73,    74,   385,    -1,   387,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   395,    -1,    -1,    -1,   399,    -1,    -1,   402,
+      -1,   404,    -1,    -1,    -1,    -1,    -1,    -1,   176,   177,
+     178,   179,    -1,   181,   182,   183,   419,   185,   186,   187,
      188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,    -1,   200,    -1,   202,   213,   204,    -1,    -1,    -1,
-     208,   209,   210,    -1,    -1,    -1,    -1,   322,    -1,    -1,
-     114,   115,   116,    -1,    -1,    -1,    -1,    -1,   441,    -1,
-      -1,    -1,    -1,    -1,   447,   448,    -1,   450,   343,    -1,
-      -1,     8,    -1,   137,    -1,     8,   459,    -1,   461,   354,
-      17,   145,    -1,    -1,    17,    22,    23,    24,   152,    22,
-      23,    24,    29,    -1,    -1,    -1,    29,    -1,   373,    36,
-     375,    -1,    -1,    36,    -1,   380,    -1,    -1,   383,    -1,
-     385,   175,    -1,   281,    -1,    -1,    53,    -1,   393,    -1,
-      53,    -1,   397,   291,    -1,   400,    59,   402,    65,    -1,
-      -1,    -1,    -1,    -1,    71,    -1,    -1,    74,    71,    -1,
-      73,    74,   417,    -1,    -1,    -1,   314,    -1,    -1,    -1,
-     318,    -1,    -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,
-      -1,    -1,   226,   438,   439,    -1,    -1,   550,    -1,    -1,
-      -1,   446,   447,    -1,   449,   558,    -1,    -1,   242,   454,
-      -1,    -1,   565,    -1,    -1,   460,    -1,    -1,   463,   464,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   473,   367,
-     368,    -1,    -1,   478,    -1,    -1,    -1,    -1,   272,    -1,
-      -1,    34,    -1,    -1,    -1,   598,    -1,    -1,   601,   602,
-     284,    44,    -1,   287,   288,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    -1,    -1,    -1,    -1,   406,    -1,
-      -1,    -1,    -1,     4,     5,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   420,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     428,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,   652,
-      -1,   654,    33,    34,    -1,    36,    37,    38,    39,    40,
-      -1,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,   571,   361,    -1,    -1,
-      -1,    -1,   577,    -1,    65,    -1,   474,   475,    -1,   584,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   387,   599,    -1,   601,    -1,    -1,   497,
-     605,   606,    -1,    -1,    -1,   610,   611,    -1,    -1,    -1,
-      -1,    -1,    -1,   407,   408,    -1,    -1,    -1,    -1,   517,
-      -1,    -1,    -1,    -1,    -1,    -1,   524,   525,   526,     0,
+     198,    -1,   200,    -1,   202,   552,   204,   440,   441,    -1,
+     208,   209,   210,   560,    -1,   448,   449,    -1,   451,    -1,
+     567,    -1,    -1,   456,    -1,     3,    -1,    -1,    -1,   462,
+       8,    -1,   465,   466,    -1,    -1,    -1,    -1,   236,    17,
+      -1,    -1,   475,    -1,    22,    23,    24,   480,    26,    -1,
+      -1,    29,    -1,   600,    -1,    -1,   603,   604,    36,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
+      -1,    59,    -1,    -1,   282,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    70,    71,   292,    73,    74,     8,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    17,   654,    -1,   656,
+      -1,    22,    23,    24,    -1,    -1,    -1,   315,    29,    -1,
+      -1,   319,     8,    -1,    -1,    36,    -1,   325,    -1,    -1,
+      -1,    17,    -1,    -1,    -1,    -1,    22,    23,    24,    -1,
+     573,    -1,    53,    29,    -1,    -1,   579,    -1,    59,    -1,
+      36,    -1,    -1,   586,    65,    -1,    -1,    -1,    -1,    -1,
+      71,    -1,    73,    74,    75,    -1,    -1,    53,   601,    -1,
+     603,   369,   370,    59,   607,   608,    -1,    -1,    -1,   612,
+     613,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,     0,
        1,    -1,     3,    -1,    -1,     6,    -1,     8,     9,    10,
       -1,    -1,    13,    -1,    15,    16,    17,    18,    19,    20,
-      -1,    22,    23,    24,    -1,    -1,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    50,
+     408,    22,    23,    24,    -1,    -1,    27,    28,    29,    30,
+      31,    32,    -1,    -1,   422,    36,    -1,    -1,    -1,    -1,
+      -1,    -1,   430,    -1,    -1,    -1,    -1,   435,    49,    50,
       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    59,    -1,
-      -1,    62,    -1,    -1,    -1,    -1,   594,    -1,    69,    70,
-      71,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   621,   622,    -1,   624,   521,    -1,    -1,
-      -1,     1,    -1,     3,    -1,   633,     6,     7,     8,     9,
-      10,    -1,    12,    13,    -1,    15,    16,    17,    18,    19,
-      20,    -1,    22,    23,    24,    -1,    -1,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
-      50,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    59,
-      -1,    -1,    62,    -1,    -1,    -1,    -1,    67,    68,    69,
-      70,    71,    -1,    73,    74,     1,    -1,     3,    -1,    -1,
-       6,    -1,     8,     9,    10,    -1,    -1,    13,    -1,    15,
-      16,    17,    18,    19,    20,    -1,    22,    23,    24,    -1,
-      -1,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
-      36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    49,    50,    -1,    52,    53,    -1,    -1,
-      56,    -1,     3,    59,    -1,    -1,    62,     8,    -1,    -1,
-      11,    67,    68,    69,    70,    71,    17,    73,    74,    -1,
-      -1,    22,    23,    24,    -1,    -1,    -1,    -1,    29,    -1,
-      -1,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,    -1,    -1,    49,    50,
-       8,    52,    53,    -1,    -1,    56,    -1,    -1,    59,    17,
-      -1,    -1,    -1,    -1,    22,    23,    24,    -1,    69,    70,
-      71,    29,    73,    74,    -1,    -1,    -1,    -1,    36,    -1,
+      -1,    62,    -1,    -1,    34,    -1,    -1,    -1,    69,    70,
+      71,    -1,    73,    74,    44,    -1,    -1,    -1,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    -1,   476,   477,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
+       3,    -1,    -1,     6,     7,     8,     9,    10,    -1,    12,
+      13,   499,    15,    16,    17,    18,    19,    20,    -1,    22,
+      23,    24,    -1,    -1,    27,    28,    29,    30,    31,    32,
+      -1,   519,    -1,    36,    -1,    -1,    -1,    -1,   526,   527,
+     528,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,
+      53,    -1,    -1,    56,    -1,    -1,    59,    -1,    -1,    62,
+      -1,    -1,    -1,    -1,    67,    68,    69,    70,    71,    -1,
+      73,    74,    -1,    -1,    -1,    -1,     1,    -1,     3,    -1,
+      -1,     6,    -1,     8,     9,    10,    -1,    -1,    13,    -1,
+      15,    16,    17,    18,    19,    20,    -1,    22,    23,    24,
+      -1,    -1,    27,    28,    29,    30,    31,    32,   596,    -1,
+      -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    49,    50,    -1,    52,    53,    -1,
+      -1,    56,    -1,    -1,    59,   623,   624,    62,   626,    -1,
+      -1,    -1,    67,    68,    69,    70,    71,   635,    73,    74,
+       3,    -1,    -1,    -1,    -1,     8,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    17,    -1,     8,    -1,    -1,    22,
+      23,    24,    -1,    -1,    -1,    17,    29,    -1,    -1,    -1,
+      22,    23,    24,    36,    -1,    -1,    -1,    29,    -1,    -1,
+      -1,    -1,    -1,    -1,    36,    -1,    49,    50,    -1,    52,
+      53,    -1,    -1,    56,    -1,     3,    59,    60,    -1,    -1,
+       8,    53,    -1,    -1,    -1,    -1,    69,    70,    71,    17,
+      73,    74,    -1,    -1,    22,    23,    24,    -1,    -1,    71,
+      -1,    29,    74,    -1,    -1,    -1,    -1,    -1,    36,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
-       3,    59,    60,    -1,    -1,     8,    -1,    -1,    -1,    -1,
+       3,    59,    -1,    -1,    -1,     8,    -1,    -1,    -1,    67,
       -1,    69,    70,    71,    17,    73,    74,    -1,    -1,    22,
-      23,    24,    -1,    -1,    -1,    -1,    29,    -1,    -1,    -1,
+      23,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,    -1,
       -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,
       53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,    -1,
-       8,    -1,    -1,    -1,    67,    -1,    69,    70,    71,    17,
-      73,    74,    -1,    -1,    22,    23,    24,    -1,    -1,    -1,
-      -1,    29,    -1,    31,    -1,    -1,    -1,    -1,    36,    -1,
+       8,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    17,
+      73,    74,    -1,    -1,    22,    23,    24,    -1,    26,    -1,
+      -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
        3,    59,    -1,    -1,    -1,     8,    -1,    -1,    -1,    -1,
       -1,    69,    70,    71,    17,    73,    74,    -1,    -1,    22,
       23,    24,    -1,    26,    -1,    -1,    29,    -1,    -1,    -1,
       -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,
-      53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,    -1,
-       8,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    17,
-      73,    74,    -1,    -1,    22,    23,    24,    -1,    26,    -1,
-      -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,
-      -1,    49,    50,     8,    52,    53,    -1,    -1,    56,    -1,
-      -1,    59,    17,    -1,    -1,    -1,    -1,    22,    23,    24,
-      -1,    69,    70,    71,    29,    73,    74,    -1,    -1,    -1,
+      -1,    -1,    -1,     3,    -1,    -1,    49,    50,     8,    52,
+      53,    -1,    -1,    56,    -1,    -1,    59,    17,    -1,    -1,
+      -1,    -1,    22,    23,    24,    -1,    69,    70,    71,    29,
+      73,    74,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
+      50,    -1,    52,    53,    -1,    -1,    56,    -1,     3,    59,
+      -1,    -1,    -1,     8,    -1,    -1,    -1,    67,    -1,    69,
+      70,    71,    17,    73,    74,    -1,    -1,    22,    23,    24,
+      -1,    -1,    -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,
       -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    49,    50,    -1,    52,    53,    -1,
-      -1,    56,    -1,     3,    59,    -1,    -1,    -1,     8,    -1,
-      -1,    -1,    67,    -1,    69,    70,    71,    17,    73,    74,
-      -1,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    29,
-      -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,    -1,    -1,    49,
-      50,     8,    52,    53,    -1,    -1,    56,    -1,    -1,    59,
-      17,    -1,    -1,    -1,    -1,    22,    23,    24,    -1,    69,
-      70,    71,    29,    73,    74,    -1,    -1,    -1,    -1,    36,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-      -1,    -1,    49,    50,     8,    52,    53,    -1,    -1,    56,
-      -1,    -1,    59,    17,    -1,    -1,    -1,    -1,    22,    23,
-      24,    -1,    69,    70,    71,    29,    73,    74,    -1,    -1,
-      -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    49,    50,     8,    52,    53,
-      -1,    -1,    56,    -1,    -1,    59,    17,    -1,    -1,    -1,
-      -1,    22,    23,    24,    -1,    69,    70,    71,    29,    73,
-      74,    -1,    -1,     8,    -1,    36,    11,    -1,    -1,    -1,
-      -1,     8,    17,    -1,    -1,    -1,    -1,    22,    23,    24,
-      17,    -1,    53,    -1,    29,    22,    23,    24,    59,    -1,
-      -1,    36,    29,    -1,    -1,    -1,     8,    -1,    -1,    36,
-      71,    -1,    73,    74,    75,    17,    -1,    -1,    53,    -1,
-      22,    23,    24,    -1,    59,    -1,    53,    29,    -1,    -1,
-      -1,    -1,    59,    -1,    36,    -1,    71,    -1,    73,    74,
-       8,    -1,    -1,    -1,    71,    -1,    73,    74,    -1,    17,
-      -1,    53,    -1,    -1,    22,    23,    24,    59,    -1,    -1,
-      -1,    29,    -1,    -1,    -1,     8,    -1,    -1,    36,    71,
-      -1,    73,    74,     8,    17,    -1,    -1,    -1,    -1,    22,
-      23,    24,    17,    -1,    -1,    53,    29,    22,    23,    24,
-      -1,    59,    -1,    36,    29,    -1,    -1,    -1,    -1,     8,
-      -1,    36,    11,    71,    -1,    73,    74,    -1,    17,    -1,
-      53,    -1,    -1,    22,    23,    24,    59,    -1,    53,    -1,
-      29,    -1,    -1,    -1,    59,    -1,     8,    36,    71,    -1,
-      73,    74,    -1,    -1,    -1,    17,    71,    -1,    -1,    74,
-      22,    23,    24,    -1,    53,    -1,    -1,    29,    -1,    -1,
-      -1,    -1,     8,    -1,    36,    -1,    -1,    -1,    -1,    -1,
-       8,    17,    71,    -1,    -1,    74,    22,    23,    24,    17,
-      -1,    53,    -1,    29,    22,    23,    24,    -1,    -1,    -1,
-      36,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,    71,
-      -1,    73,    74,    -1,    -1,    -1,    -1,    53,    -1,    -1,
-      -1,    -1,    -1,    59,    -1,    53,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    74,    -1,
-      -1,    -1,    -1,    71,    33,    34,    74,    36,    -1,    38,
+      -1,     3,    -1,    -1,    49,    50,     8,    52,    53,    -1,
+      -1,    56,    -1,    -1,    59,    17,    -1,    -1,    -1,    -1,
+      22,    23,    24,    -1,    69,    70,    71,    29,    73,    74,
+      -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,    -1,    -1,    49,    50,     8,
+      52,    53,    -1,    -1,    56,    -1,    -1,    59,    17,    -1,
+      -1,    -1,    -1,    22,    23,    24,    -1,    69,    70,    71,
+      29,    73,    74,    -1,    -1,    -1,    -1,    36,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      49,    50,     8,    52,    53,    -1,    -1,    56,    -1,    -1,
+      59,    17,    -1,    -1,    -1,    -1,    22,    23,    24,    -1,
+      69,    70,    71,    29,    73,    74,    -1,     8,    -1,    -1,
+      36,    -1,    -1,    -1,    -1,     8,    17,    -1,    11,    -1,
+      -1,    22,    23,    24,    17,    -1,    -1,    53,    29,    22,
+      23,    24,    -1,    59,    -1,    36,    29,    -1,    -1,    65,
+      -1,     8,    -1,    36,    -1,    71,    -1,    73,    74,    75,
+      17,    -1,    53,    -1,    -1,    22,    23,    24,    59,    -1,
+      53,    -1,    29,    -1,    -1,    -1,    59,    -1,     8,    36,
+      71,    -1,    73,    74,    75,    -1,    -1,    17,    71,    -1,
+      73,    74,    22,    23,    24,    -1,    53,    -1,    -1,    29,
+      -1,    -1,    59,    -1,     8,    -1,    36,    -1,    -1,    -1,
+      -1,    -1,     8,    17,    71,    -1,    73,    74,    22,    23,
+      24,    17,    -1,    53,    -1,    29,    22,    23,    24,    59,
+      -1,    -1,    36,    29,    -1,    -1,    -1,     8,    -1,    -1,
+      36,    71,    -1,    73,    74,     8,    17,    -1,    11,    53,
+      -1,    22,    23,    24,    17,    59,    -1,    53,    29,    22,
+      23,    24,    -1,    59,    -1,    36,    29,    71,    -1,    73,
+      74,     8,    -1,    36,    -1,    71,    -1,    73,    74,    -1,
+      17,    -1,    53,    -1,    -1,    22,    23,    24,    -1,    -1,
+      53,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,
+      71,    -1,    73,    74,    -1,    -1,    -1,    -1,    71,    34,
+      -1,    74,    -1,    38,    39,    40,    53,    -1,    43,    44,
+      45,    46,    59,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    -1,    -1,    71,    33,    34,    74,    36,    -1,
+      38,    39,    40,    -1,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,
+      -1,    36,    -1,    38,    39,    40,    -1,    75,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,
+      -1,    36,    -1,    38,    39,    40,    -1,    72,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    33,    34,    -1,    36,    -1,    38,    39,    40,
+      -1,    66,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    33,    34,    -1,    36,
+      -1,    38,    39,    40,    -1,    66,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      33,    34,    -1,    36,    -1,    38,    39,    40,    -1,    66,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    33,    34,    -1,    -1,    -1,    38,
       39,    40,    -1,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    -1,
-      36,    -1,    38,    39,    40,    -1,    75,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    -1,
-      36,    -1,    38,    39,    40,    -1,    72,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    33,    34,    -1,    36,    -1,    38,    39,    40,    -1,
-      66,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    33,    34,    -1,    36,    -1,
-      38,    39,    40,    -1,    66,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    33,
-      34,    -1,    36,    -1,    38,    39,    40,    -1,    66,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    33,    34,    -1,    -1,    -1,    38,    39,
-      40,    -1,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    33,    34,    -1,
-      -1,    -1,    38,    39,    40,    -1,    -1,    43,    44,    45,
-      46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
-      56
+      49,    50,    51,    52,    53,    54,    55,    56,    33,    34,
+      -1,    -1,    -1,    38,    39,    40,    -1,    -1,    43,    44,
+      45,    46,    -1,    48,    49,    50,    51,    52,    53,    54,
+      55,    56
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1528,50 +1514,50 @@ static const yytype_uint8 yystos[] =
       59,    63,    71,    66,    59,   137,     1,   137,     5,    65,
       75,   142,   200,    59,   160,   200,    24,   200,   201,   200,
       64,    62,   190,    88,    59,    36,    59,   146,   152,   153,
-     154,   155,   161,   146,   146,    63,    98,   107,   108,   109,
-     186,   194,    11,   136,   141,   145,   146,   177,   178,   179,
-      59,    67,   162,   112,   194,    24,    59,    68,   138,   171,
-     173,   175,   146,    35,    53,    59,    68,   138,   170,   172,
-     173,   174,   184,   112,    60,    97,   169,   146,    60,    93,
-     167,    65,    75,   146,     8,   147,    60,    72,    72,    60,
-      94,    65,   146,   126,   126,   126,   126,   126,   126,   126,
+     154,   155,   161,   146,   146,    63,    26,    98,   107,   108,
+     109,   186,   194,    11,   136,   141,   145,   146,   177,   178,
+     179,    59,    67,   162,   112,   194,    24,    59,    68,   138,
+     171,   173,   175,   146,    35,    53,    59,    68,   138,   170,
+     172,   173,   174,   184,   112,    60,    97,   169,   146,    60,
+      93,   167,    65,    75,   146,     8,   147,    60,    72,    72,
+      60,    94,    65,   146,   126,   126,   126,   126,   126,   126,
      126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
-     126,   126,   126,   126,   130,    60,   135,   187,    59,   141,
-     126,   192,   182,   126,   130,     1,    67,    91,   100,   180,
-     181,   183,   186,   186,   126,     8,    17,    22,    23,    24,
-      29,    36,    53,    65,    71,   142,   202,   204,   205,   206,
-     141,   207,   215,   162,    59,     3,   202,   202,    83,    60,
-     179,     8,   146,    60,   141,    35,   105,     5,    65,    62,
-     146,   136,   145,    75,   191,    60,   179,   183,   115,    62,
-      63,    24,   173,    59,   176,    62,   190,    72,   104,    59,
-     174,    53,   174,    62,   190,     3,   198,    75,   146,   123,
-      62,   190,    62,   190,   186,   139,    65,    36,    59,   146,
-     152,   153,   154,   161,    67,   146,   146,    62,   190,   186,
-      65,    67,   126,   131,   132,   188,   189,    11,    75,   191,
-      31,   135,    72,    66,   180,    75,   191,   189,   101,    62,
-      68,    36,    59,   203,   204,   206,    59,    67,    71,    67,
-       8,   202,     3,    50,    59,   141,   212,   213,     3,    72,
-      65,    11,   202,    60,    75,    62,   195,   215,    62,    62,
-      62,    60,    60,   106,    26,    26,   194,   177,    59,   141,
-     151,   152,   153,   154,   155,   161,   163,    60,    68,   105,
-     194,   141,    60,   179,   175,    68,   146,     7,    12,    68,
-      99,   102,   174,   198,   174,    60,   172,    68,   138,   198,
-      35,    97,    60,    93,    60,   186,   146,   130,    94,    95,
-     168,   185,    60,   186,   130,    66,    75,   191,    68,   191,
-     135,    60,    60,    60,   192,    60,    68,   183,   180,   202,
-     205,   195,    24,   141,   142,   197,   202,   209,   217,   202,
-     141,   196,   208,   216,   202,     3,   212,    62,    72,   202,
-     213,   202,   198,   141,   207,    60,   183,   126,   126,    62,
-     179,    59,   163,   116,    60,   187,    66,   103,    60,    60,
-     198,   104,    60,   189,    62,   190,   146,   189,    67,   126,
-     133,   131,   132,    60,    66,    72,    68,    60,    60,    59,
-      68,    62,    72,   202,    68,    62,    49,   202,    62,   198,
-      59,    59,   202,   210,   211,    68,   194,    60,   179,   119,
-     163,     5,    65,    66,    75,   183,   198,   198,    68,    68,
-      95,    60,    68,   130,   192,   210,   195,   209,   202,   198,
-     208,   212,   195,   195,    60,    14,   117,   120,   126,   126,
-     189,    72,    60,    60,    60,    60,   163,    20,   100,    66,
-      66,    68,   210,   210,   118,   112,   105
+     126,   126,   126,   126,   126,   130,    60,   135,   187,    59,
+     141,   126,   192,   182,   126,   130,     1,    67,    91,   100,
+     180,   181,   183,   186,   186,   126,     8,    17,    22,    23,
+      24,    29,    36,    53,    65,    71,   142,   202,   204,   205,
+     206,   141,   207,   215,   162,    59,     3,   202,   202,    83,
+      60,   179,     8,   146,    60,   141,   126,    35,   105,     5,
+      65,    62,   146,   136,   145,    75,   191,    60,   179,   183,
+     115,    62,    63,    24,   173,    59,   176,    62,   190,    72,
+     104,    59,   174,    53,   174,    62,   190,     3,   198,    75,
+     146,   123,    62,   190,    62,   190,   186,   139,    65,    36,
+      59,   146,   152,   153,   154,   161,    67,   146,   146,    62,
+     190,   186,    65,    67,   126,   131,   132,   188,   189,    11,
+      75,   191,    31,   135,    72,    66,   180,    75,   191,   189,
+     101,    62,    68,    36,    59,   203,   204,   206,    59,    67,
+      71,    67,     8,   202,     3,    50,    59,   141,   212,   213,
+       3,    72,    65,    11,   202,    60,    75,    62,   195,   215,
+      62,    62,    62,    60,    60,   106,    26,    26,   194,   177,
+      59,   141,   151,   152,   153,   154,   155,   161,   163,    60,
+      68,   105,   194,   141,    60,   179,   175,    68,   146,     7,
+      12,    68,    99,   102,   174,   198,   174,    60,   172,    68,
+     138,   198,    35,    97,    60,    93,    60,   186,   146,   130,
+      94,    95,   168,   185,    60,   186,   130,    66,    75,   191,
+      68,   191,   135,    60,    60,    60,   192,    60,    68,   183,
+     180,   202,   205,   195,    24,   141,   142,   197,   202,   209,
+     217,   202,   141,   196,   208,   216,   202,     3,   212,    62,
+      72,   202,   213,   202,   198,   141,   207,    60,   183,   126,
+     126,    62,   179,    59,   163,   116,    60,   187,    66,   103,
+      60,    60,   198,   104,    60,   189,    62,   190,   146,   189,
+      67,   126,   133,   131,   132,    60,    66,    72,    68,    60,
+      60,    59,    68,    62,    72,   202,    68,    62,    49,   202,
+      62,   198,    59,    59,   202,   210,   211,    68,   194,    60,
+     179,   119,   163,     5,    65,    66,    75,   183,   198,   198,
+      68,    68,    95,    60,    68,   130,   192,   210,   195,   209,
+     202,   198,   208,   212,   195,   195,    60,    14,   117,   120,
+     126,   126,   189,    72,    60,    60,    60,    60,   163,    20,
+     100,    66,    66,    68,   210,   210,   118,   112,   105
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2985,7 +2971,15 @@ yyreduce:
     break;
 
   case 70:
-#line 619 "go.y"
+#line 617 "go.y"
+    {
+               (yyval.node) = nod(ORANGE, N, (yyvsp[(2) - (2)].node));
+               (yyval.node)->etype = 0; // := flag
+       }
+    break;
+
+  case 71:
+#line 624 "go.y"
     {
                // init ; test ; incr
                if((yyvsp[(5) - (5)].node) != N && (yyvsp[(5) - (5)].node)->colas != 0)
@@ -2998,8 +2992,8 @@ yyreduce:
        }
     break;
 
-  case 71:
-#line 630 "go.y"
+  case 72:
+#line 635 "go.y"
     {
                // normal test
                (yyval.node) = nod(OFOR, N, N);
@@ -3007,31 +3001,31 @@ yyreduce:
        }
     break;
 
-  case 73:
-#line 639 "go.y"
+  case 74:
+#line 644 "go.y"
     {
                (yyval.node) = (yyvsp[(1) - (2)].node);
                (yyval.node)->nbody = concat((yyval.node)->nbody, (yyvsp[(2) - (2)].list));
        }
     break;
 
-  case 74:
-#line 646 "go.y"
+  case 75:
+#line 651 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 75:
-#line 650 "go.y"
+  case 76:
+#line 655 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (3)].node);
                popdcl();
        }
     break;
 
-  case 76:
-#line 657 "go.y"
+  case 77:
+#line 662 "go.y"
     {
                // test
                (yyval.node) = nod(OIF, N, N);
@@ -3039,8 +3033,8 @@ yyreduce:
        }
     break;
 
-  case 77:
-#line 663 "go.y"
+  case 78:
+#line 668 "go.y"
     {
                // init ; test
                (yyval.node) = nod(OIF, N, N);
@@ -3050,30 +3044,30 @@ yyreduce:
        }
     break;
 
-  case 78:
-#line 674 "go.y"
+  case 79:
+#line 679 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 79:
-#line 678 "go.y"
+  case 80:
+#line 683 "go.y"
     {
                if((yyvsp[(3) - (3)].node)->ntest == N)
                        yyerror("missing condition in if statement");
        }
     break;
 
-  case 80:
-#line 683 "go.y"
+  case 81:
+#line 688 "go.y"
     {
                (yyvsp[(3) - (5)].node)->nbody = (yyvsp[(5) - (5)].list);
        }
     break;
 
-  case 81:
-#line 687 "go.y"
+  case 82:
+#line 692 "go.y"
     {
                Node *n;
                NodeList *nn;
@@ -3090,15 +3084,15 @@ yyreduce:
        }
     break;
 
-  case 82:
-#line 704 "go.y"
+  case 83:
+#line 709 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 83:
-#line 708 "go.y"
+  case 84:
+#line 713 "go.y"
     {
                if((yyvsp[(4) - (5)].node)->ntest == N)
                        yyerror("missing condition in if statement");
@@ -3107,29 +3101,29 @@ yyreduce:
        }
     break;
 
-  case 84:
-#line 716 "go.y"
+  case 85:
+#line 721 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 85:
-#line 720 "go.y"
+  case 86:
+#line 725 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list));
        }
     break;
 
-  case 86:
-#line 725 "go.y"
+  case 87:
+#line 730 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 87:
-#line 729 "go.y"
+  case 88:
+#line 734 "go.y"
     {
                NodeList *node;
                
@@ -3140,15 +3134,15 @@ yyreduce:
        }
     break;
 
-  case 88:
-#line 740 "go.y"
+  case 89:
+#line 745 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 89:
-#line 744 "go.y"
+  case 90:
+#line 749 "go.y"
     {
                Node *n;
                n = (yyvsp[(3) - (3)].node)->ntest;
@@ -3158,8 +3152,8 @@ yyreduce:
        }
     break;
 
-  case 90:
-#line 752 "go.y"
+  case 91:
+#line 757 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (7)].node);
                (yyval.node)->op = OSWITCH;
@@ -3169,15 +3163,15 @@ yyreduce:
        }
     break;
 
-  case 91:
-#line 762 "go.y"
+  case 92:
+#line 767 "go.y"
     {
                typesw = nod(OXXX, typesw, N);
        }
     break;
 
-  case 92:
-#line 766 "go.y"
+  case 93:
+#line 771 "go.y"
     {
                (yyval.node) = nod(OSELECT, N, N);
                (yyval.node)->lineno = typesw->lineno;
@@ -3186,155 +3180,155 @@ yyreduce:
        }
     break;
 
-  case 94:
-#line 779 "go.y"
+  case 95:
+#line 784 "go.y"
     {
                (yyval.node) = nod(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 95:
-#line 783 "go.y"
+  case 96:
+#line 788 "go.y"
     {
                (yyval.node) = nod(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 96:
-#line 787 "go.y"
+  case 97:
+#line 792 "go.y"
     {
                (yyval.node) = nod(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 97:
-#line 791 "go.y"
+  case 98:
+#line 796 "go.y"
     {
                (yyval.node) = nod(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 98:
-#line 795 "go.y"
+  case 99:
+#line 800 "go.y"
     {
                (yyval.node) = nod(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 99:
-#line 799 "go.y"
+  case 100:
+#line 804 "go.y"
     {
                (yyval.node) = nod(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 100:
-#line 803 "go.y"
+  case 101:
+#line 808 "go.y"
     {
                (yyval.node) = nod(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 101:
-#line 807 "go.y"
+  case 102:
+#line 812 "go.y"
     {
                (yyval.node) = nod(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 102:
-#line 811 "go.y"
+  case 103:
+#line 816 "go.y"
     {
                (yyval.node) = nod(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 103:
-#line 815 "go.y"
+  case 104:
+#line 820 "go.y"
     {
                (yyval.node) = nod(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 104:
-#line 819 "go.y"
+  case 105:
+#line 824 "go.y"
     {
                (yyval.node) = nod(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 105:
-#line 823 "go.y"
+  case 106:
+#line 828 "go.y"
     {
                (yyval.node) = nod(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 106:
-#line 827 "go.y"
+  case 107:
+#line 832 "go.y"
     {
                (yyval.node) = nod(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 107:
-#line 831 "go.y"
+  case 108:
+#line 836 "go.y"
     {
                (yyval.node) = nod(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 108:
-#line 835 "go.y"
+  case 109:
+#line 840 "go.y"
     {
                (yyval.node) = nod(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 109:
-#line 839 "go.y"
+  case 110:
+#line 844 "go.y"
     {
                (yyval.node) = nod(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 110:
-#line 843 "go.y"
+  case 111:
+#line 848 "go.y"
     {
                (yyval.node) = nod(OANDNOT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 111:
-#line 847 "go.y"
+  case 112:
+#line 852 "go.y"
     {
                (yyval.node) = nod(OLSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 112:
-#line 851 "go.y"
+  case 113:
+#line 856 "go.y"
     {
                (yyval.node) = nod(ORSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 113:
-#line 856 "go.y"
+  case 114:
+#line 861 "go.y"
     {
                (yyval.node) = nod(OSEND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 115:
-#line 863 "go.y"
+  case 116:
+#line 868 "go.y"
     {
                (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 116:
-#line 867 "go.y"
+  case 117:
+#line 872 "go.y"
     {
                if((yyvsp[(2) - (2)].node)->op == OCOMPLIT) {
                        // Special case for &T{...}: turn into (*T){...}.
@@ -3347,66 +3341,66 @@ yyreduce:
        }
     break;
 
-  case 117:
-#line 878 "go.y"
+  case 118:
+#line 883 "go.y"
     {
                (yyval.node) = nod(OPLUS, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 118:
-#line 882 "go.y"
+  case 119:
+#line 887 "go.y"
     {
                (yyval.node) = nod(OMINUS, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 119:
-#line 886 "go.y"
+  case 120:
+#line 891 "go.y"
     {
                (yyval.node) = nod(ONOT, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 120:
-#line 890 "go.y"
+  case 121:
+#line 895 "go.y"
     {
                yyerror("the bitwise complement operator is ^");
                (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 121:
-#line 895 "go.y"
+  case 122:
+#line 900 "go.y"
     {
                (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 122:
-#line 899 "go.y"
+  case 123:
+#line 904 "go.y"
     {
                (yyval.node) = nod(ORECV, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 123:
-#line 909 "go.y"
+  case 124:
+#line 914 "go.y"
     {
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (3)].node), N);
        }
     break;
 
-  case 124:
-#line 913 "go.y"
+  case 125:
+#line 918 "go.y"
     {
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N);
                (yyval.node)->list = (yyvsp[(3) - (5)].list);
        }
     break;
 
-  case 125:
-#line 918 "go.y"
+  case 126:
+#line 923 "go.y"
     {
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (6)].node), N);
                (yyval.node)->list = (yyvsp[(3) - (6)].list);
@@ -3414,15 +3408,15 @@ yyreduce:
        }
     break;
 
-  case 126:
-#line 926 "go.y"
+  case 127:
+#line 931 "go.y"
     {
                (yyval.node) = nodlit((yyvsp[(1) - (1)].val));
        }
     break;
 
-  case 128:
-#line 931 "go.y"
+  case 129:
+#line 936 "go.y"
     {
                if((yyvsp[(1) - (3)].node)->op == OPACK) {
                        Sym *s;
@@ -3435,36 +3429,36 @@ yyreduce:
        }
     break;
 
-  case 129:
-#line 942 "go.y"
+  case 130:
+#line 947 "go.y"
     {
                (yyval.node) = nod(ODOTTYPE, (yyvsp[(1) - (5)].node), (yyvsp[(4) - (5)].node));
        }
     break;
 
-  case 130:
-#line 946 "go.y"
+  case 131:
+#line 951 "go.y"
     {
                (yyval.node) = nod(OTYPESW, N, (yyvsp[(1) - (5)].node));
        }
     break;
 
-  case 131:
-#line 950 "go.y"
+  case 132:
+#line 955 "go.y"
     {
                (yyval.node) = nod(OINDEX, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
        }
     break;
 
-  case 132:
-#line 954 "go.y"
+  case 133:
+#line 959 "go.y"
     {
                (yyval.node) = nod(OSLICE, (yyvsp[(1) - (6)].node), nod(OKEY, (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node)));
        }
     break;
 
-  case 133:
-#line 958 "go.y"
+  case 134:
+#line 963 "go.y"
     {
                if((yyvsp[(5) - (8)].node) == N)
                        yyerror("middle index required in 3-index slice");
@@ -3474,8 +3468,8 @@ yyreduce:
        }
     break;
 
-  case 135:
-#line 967 "go.y"
+  case 136:
+#line 972 "go.y"
     {
                // conversion
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N);
@@ -3483,8 +3477,8 @@ yyreduce:
        }
     break;
 
-  case 136:
-#line 973 "go.y"
+  case 137:
+#line 978 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (5)].node);
                (yyval.node)->right = (yyvsp[(1) - (5)].node);
@@ -3493,8 +3487,8 @@ yyreduce:
        }
     break;
 
-  case 137:
-#line 980 "go.y"
+  case 138:
+#line 985 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (5)].node);
                (yyval.node)->right = (yyvsp[(1) - (5)].node);
@@ -3502,8 +3496,8 @@ yyreduce:
        }
     break;
 
-  case 138:
-#line 986 "go.y"
+  case 139:
+#line 991 "go.y"
     {
                yyerror("cannot parenthesize type in composite literal");
                (yyval.node) = (yyvsp[(5) - (7)].node);
@@ -3512,8 +3506,8 @@ yyreduce:
        }
     break;
 
-  case 140:
-#line 995 "go.y"
+  case 141:
+#line 1000 "go.y"
     {
                // composite expression.
                // make node early so we get the right line number.
@@ -3521,15 +3515,15 @@ yyreduce:
        }
     break;
 
-  case 141:
-#line 1003 "go.y"
+  case 142:
+#line 1008 "go.y"
     {
                (yyval.node) = nod(OKEY, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 142:
-#line 1009 "go.y"
+  case 143:
+#line 1014 "go.y"
     {
                // These nodes do not carry line numbers.
                // Since a composite literal commonly spans several lines,
@@ -3548,24 +3542,24 @@ yyreduce:
        }
     break;
 
-  case 143:
-#line 1026 "go.y"
+  case 144:
+#line 1031 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (4)].node);
                (yyval.node)->list = (yyvsp[(3) - (4)].list);
        }
     break;
 
-  case 145:
-#line 1034 "go.y"
+  case 146:
+#line 1039 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (4)].node);
                (yyval.node)->list = (yyvsp[(3) - (4)].list);
        }
     break;
 
-  case 147:
-#line 1042 "go.y"
+  case 148:
+#line 1047 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (3)].node);
                
@@ -3584,22 +3578,22 @@ yyreduce:
        }
     break;
 
-  case 151:
-#line 1068 "go.y"
+  case 152:
+#line 1073 "go.y"
     {
                (yyval.i) = LBODY;
        }
     break;
 
-  case 152:
-#line 1072 "go.y"
+  case 153:
+#line 1077 "go.y"
     {
                (yyval.i) = '{';
        }
     break;
 
-  case 153:
-#line 1083 "go.y"
+  case 154:
+#line 1088 "go.y"
     {
                if((yyvsp[(1) - (1)].sym) == S)
                        (yyval.node) = N;
@@ -3608,22 +3602,22 @@ yyreduce:
        }
     break;
 
-  case 154:
-#line 1092 "go.y"
+  case 155:
+#line 1097 "go.y"
     {
                (yyval.node) = dclname((yyvsp[(1) - (1)].sym));
        }
     break;
 
-  case 155:
-#line 1097 "go.y"
+  case 156:
+#line 1102 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 157:
-#line 1104 "go.y"
+  case 158:
+#line 1109 "go.y"
     {
                (yyval.sym) = (yyvsp[(1) - (1)].sym);
                // during imports, unqualified non-exported identifiers are from builtinpkg
@@ -3632,15 +3626,15 @@ yyreduce:
        }
     break;
 
-  case 159:
-#line 1112 "go.y"
+  case 160:
+#line 1117 "go.y"
     {
                (yyval.sym) = S;
        }
     break;
 
-  case 160:
-#line 1118 "go.y"
+  case 161:
+#line 1123 "go.y"
     {
                Pkg *p;
 
@@ -3655,8 +3649,8 @@ yyreduce:
        }
     break;
 
-  case 161:
-#line 1131 "go.y"
+  case 162:
+#line 1136 "go.y"
     {
                Pkg *p;
 
@@ -3671,8 +3665,8 @@ yyreduce:
        }
     break;
 
-  case 162:
-#line 1146 "go.y"
+  case 163:
+#line 1151 "go.y"
     {
                (yyval.node) = oldname((yyvsp[(1) - (1)].sym));
                if((yyval.node)->pack != N)
@@ -3680,44 +3674,44 @@ yyreduce:
        }
     break;
 
-  case 164:
-#line 1166 "go.y"
+  case 165:
+#line 1171 "go.y"
     {
                yyerror("final argument in variadic function missing type");
                (yyval.node) = nod(ODDD, typenod(typ(TINTER)), N);
        }
     break;
 
-  case 165:
-#line 1171 "go.y"
+  case 166:
+#line 1176 "go.y"
     {
                (yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 171:
-#line 1182 "go.y"
+  case 172:
+#line 1187 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (3)].node);
        }
     break;
 
-  case 175:
-#line 1191 "go.y"
+  case 176:
+#line 1196 "go.y"
     {
                (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 180:
-#line 1201 "go.y"
+  case 181:
+#line 1206 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (3)].node);
        }
     break;
 
-  case 190:
-#line 1222 "go.y"
+  case 191:
+#line 1227 "go.y"
     {
                if((yyvsp[(1) - (3)].node)->op == OPACK) {
                        Sym *s;
@@ -3730,61 +3724,61 @@ yyreduce:
        }
     break;
 
-  case 191:
-#line 1235 "go.y"
+  case 192:
+#line 1240 "go.y"
     {
                (yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
        }
     break;
 
-  case 192:
-#line 1239 "go.y"
+  case 193:
+#line 1244 "go.y"
     {
                // array literal of nelem
                (yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node));
        }
     break;
 
-  case 193:
-#line 1244 "go.y"
+  case 194:
+#line 1249 "go.y"
     {
                (yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N);
                (yyval.node)->etype = Cboth;
        }
     break;
 
-  case 194:
-#line 1249 "go.y"
+  case 195:
+#line 1254 "go.y"
     {
                (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
                (yyval.node)->etype = Csend;
        }
     break;
 
-  case 195:
-#line 1254 "go.y"
+  case 196:
+#line 1259 "go.y"
     {
                (yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
        }
     break;
 
-  case 198:
-#line 1262 "go.y"
+  case 199:
+#line 1267 "go.y"
     {
                (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 199:
-#line 1268 "go.y"
+  case 200:
+#line 1273 "go.y"
     {
                (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
                (yyval.node)->etype = Crecv;
        }
     break;
 
-  case 200:
-#line 1275 "go.y"
+  case 201:
+#line 1280 "go.y"
     {
                (yyval.node) = nod(OTSTRUCT, N, N);
                (yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3792,16 +3786,16 @@ yyreduce:
        }
     break;
 
-  case 201:
-#line 1281 "go.y"
+  case 202:
+#line 1286 "go.y"
     {
                (yyval.node) = nod(OTSTRUCT, N, N);
                fixlbrace((yyvsp[(2) - (3)].i));
        }
     break;
 
-  case 202:
-#line 1288 "go.y"
+  case 203:
+#line 1293 "go.y"
     {
                (yyval.node) = nod(OTINTER, N, N);
                (yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3809,16 +3803,16 @@ yyreduce:
        }
     break;
 
-  case 203:
-#line 1294 "go.y"
+  case 204:
+#line 1299 "go.y"
     {
                (yyval.node) = nod(OTINTER, N, N);
                fixlbrace((yyvsp[(2) - (3)].i));
        }
     break;
 
-  case 204:
-#line 1305 "go.y"
+  case 205:
+#line 1310 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (3)].node);
                if((yyval.node) == N)
@@ -3833,8 +3827,8 @@ yyreduce:
        }
     break;
 
-  case 205:
-#line 1320 "go.y"
+  case 206:
+#line 1325 "go.y"
     {
                Node *t;
 
@@ -3865,8 +3859,8 @@ yyreduce:
        }
     break;
 
-  case 206:
-#line 1349 "go.y"
+  case 207:
+#line 1354 "go.y"
     {
                Node *rcvr, *t;
 
@@ -3904,8 +3898,8 @@ yyreduce:
        }
     break;
 
-  case 207:
-#line 1387 "go.y"
+  case 208:
+#line 1392 "go.y"
     {
                Sym *s;
                Type *t;
@@ -3932,8 +3926,8 @@ yyreduce:
        }
     break;
 
-  case 208:
-#line 1412 "go.y"
+  case 209:
+#line 1417 "go.y"
     {
                (yyval.node) = methodname1(newname((yyvsp[(4) - (8)].sym)), (yyvsp[(2) - (8)].list)->n->right); 
                (yyval.node)->type = functype((yyvsp[(2) - (8)].list)->n, (yyvsp[(6) - (8)].list), (yyvsp[(8) - (8)].list));
@@ -3951,8 +3945,8 @@ yyreduce:
        }
     break;
 
-  case 209:
-#line 1430 "go.y"
+  case 210:
+#line 1435 "go.y"
     {
                (yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1);
                (yyval.node) = nod(OTFUNC, N, N);
@@ -3961,15 +3955,15 @@ yyreduce:
        }
     break;
 
-  case 210:
-#line 1438 "go.y"
+  case 211:
+#line 1443 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 211:
-#line 1442 "go.y"
+  case 212:
+#line 1447 "go.y"
     {
                (yyval.list) = (yyvsp[(2) - (3)].list);
                if((yyval.list) == nil)
@@ -3977,59 +3971,59 @@ yyreduce:
        }
     break;
 
-  case 212:
-#line 1450 "go.y"
+  case 213:
+#line 1455 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 213:
-#line 1454 "go.y"
+  case 214:
+#line 1459 "go.y"
     {
                (yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node)));
        }
     break;
 
-  case 214:
-#line 1458 "go.y"
+  case 215:
+#line 1463 "go.y"
     {
                (yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0);
                (yyval.list) = (yyvsp[(2) - (3)].list);
        }
     break;
 
-  case 215:
-#line 1465 "go.y"
+  case 216:
+#line 1470 "go.y"
     {
                closurehdr((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 216:
-#line 1471 "go.y"
+  case 217:
+#line 1476 "go.y"
     {
                (yyval.node) = closurebody((yyvsp[(3) - (4)].list));
                fixlbrace((yyvsp[(2) - (4)].i));
        }
     break;
 
-  case 217:
-#line 1476 "go.y"
+  case 218:
+#line 1481 "go.y"
     {
                (yyval.node) = closurebody(nil);
        }
     break;
 
-  case 218:
-#line 1487 "go.y"
+  case 219:
+#line 1492 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 219:
-#line 1491 "go.y"
+  case 220:
+#line 1496 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list));
                if(nsyntaxerrors == 0)
@@ -4040,57 +4034,57 @@ yyreduce:
        }
     break;
 
-  case 221:
-#line 1503 "go.y"
+  case 222:
+#line 1508 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 223:
-#line 1510 "go.y"
+  case 224:
+#line 1515 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 224:
-#line 1516 "go.y"
+  case 225:
+#line 1521 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 225:
-#line 1520 "go.y"
+  case 226:
+#line 1525 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 227:
-#line 1527 "go.y"
+  case 228:
+#line 1532 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 228:
-#line 1533 "go.y"
+  case 229:
+#line 1538 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 229:
-#line 1537 "go.y"
+  case 230:
+#line 1542 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 230:
-#line 1543 "go.y"
+  case 231:
+#line 1548 "go.y"
     {
                NodeList *l;
 
@@ -4115,16 +4109,16 @@ yyreduce:
        }
     break;
 
-  case 231:
-#line 1566 "go.y"
+  case 232:
+#line 1571 "go.y"
     {
                (yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val);
                (yyval.list) = list1((yyvsp[(1) - (2)].node));
        }
     break;
 
-  case 232:
-#line 1571 "go.y"
+  case 233:
+#line 1576 "go.y"
     {
                (yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val);
                (yyval.list) = list1((yyvsp[(2) - (4)].node));
@@ -4132,8 +4126,8 @@ yyreduce:
        }
     break;
 
-  case 233:
-#line 1577 "go.y"
+  case 234:
+#line 1582 "go.y"
     {
                (yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N);
                (yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val);
@@ -4141,8 +4135,8 @@ yyreduce:
        }
     break;
 
-  case 234:
-#line 1583 "go.y"
+  case 235:
+#line 1588 "go.y"
     {
                (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
                (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4151,8 +4145,8 @@ yyreduce:
        }
     break;
 
-  case 235:
-#line 1590 "go.y"
+  case 236:
+#line 1595 "go.y"
     {
                (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
                (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4161,8 +4155,8 @@ yyreduce:
        }
     break;
 
-  case 236:
-#line 1599 "go.y"
+  case 237:
+#line 1604 "go.y"
     {
                Node *n;
 
@@ -4173,8 +4167,8 @@ yyreduce:
        }
     break;
 
-  case 237:
-#line 1608 "go.y"
+  case 238:
+#line 1613 "go.y"
     {
                Pkg *pkg;
 
@@ -4189,38 +4183,38 @@ yyreduce:
        }
     break;
 
-  case 238:
-#line 1623 "go.y"
+  case 239:
+#line 1628 "go.y"
     {
                (yyval.node) = embedded((yyvsp[(1) - (1)].sym), localpkg);
        }
     break;
 
-  case 239:
-#line 1629 "go.y"
+  case 240:
+#line 1634 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
                ifacedcl((yyval.node));
        }
     break;
 
-  case 240:
-#line 1634 "go.y"
+  case 241:
+#line 1639 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym)));
        }
     break;
 
-  case 241:
-#line 1638 "go.y"
+  case 242:
+#line 1643 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym)));
                yyerror("cannot parenthesize embedded type");
        }
     break;
 
-  case 242:
-#line 1645 "go.y"
+  case 243:
+#line 1650 "go.y"
     {
                // without func keyword
                (yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1);
@@ -4230,8 +4224,8 @@ yyreduce:
        }
     break;
 
-  case 244:
-#line 1659 "go.y"
+  case 245:
+#line 1664 "go.y"
     {
                (yyval.node) = nod(ONONAME, N, N);
                (yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4239,8 +4233,8 @@ yyreduce:
        }
     break;
 
-  case 245:
-#line 1665 "go.y"
+  case 246:
+#line 1670 "go.y"
     {
                (yyval.node) = nod(ONONAME, N, N);
                (yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4248,65 +4242,65 @@ yyreduce:
        }
     break;
 
-  case 247:
-#line 1674 "go.y"
+  case 248:
+#line 1679 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 248:
-#line 1678 "go.y"
+  case 249:
+#line 1683 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 249:
-#line 1683 "go.y"
+  case 250:
+#line 1688 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 250:
-#line 1687 "go.y"
+  case 251:
+#line 1692 "go.y"
     {
                (yyval.list) = (yyvsp[(1) - (2)].list);
        }
     break;
 
-  case 251:
-#line 1695 "go.y"
+  case 252:
+#line 1700 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 253:
-#line 1700 "go.y"
+  case 254:
+#line 1705 "go.y"
     {
                (yyval.node) = liststmt((yyvsp[(1) - (1)].list));
        }
     break;
 
-  case 255:
-#line 1705 "go.y"
+  case 256:
+#line 1710 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 261:
-#line 1716 "go.y"
+  case 262:
+#line 1721 "go.y"
     {
                (yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N);
                (yyvsp[(1) - (2)].node)->sym = dclstack;  // context, for goto restrictions
        }
     break;
 
-  case 262:
-#line 1721 "go.y"
+  case 263:
+#line 1726 "go.y"
     {
                NodeList *l;
 
@@ -4318,8 +4312,8 @@ yyreduce:
        }
     break;
 
-  case 263:
-#line 1731 "go.y"
+  case 264:
+#line 1736 "go.y"
     {
                // will be converted to OFALL
                (yyval.node) = nod(OXFALL, N, N);
@@ -4327,44 +4321,44 @@ yyreduce:
        }
     break;
 
-  case 264:
-#line 1737 "go.y"
+  case 265:
+#line 1742 "go.y"
     {
                (yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 265:
-#line 1741 "go.y"
+  case 266:
+#line 1746 "go.y"
     {
                (yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 266:
-#line 1745 "go.y"
+  case 267:
+#line 1750 "go.y"
     {
                (yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 267:
-#line 1749 "go.y"
+  case 268:
+#line 1754 "go.y"
     {
                (yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 268:
-#line 1753 "go.y"
+  case 269:
+#line 1758 "go.y"
     {
                (yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N);
                (yyval.node)->sym = dclstack;  // context, for goto restrictions
        }
     break;
 
-  case 269:
-#line 1758 "go.y"
+  case 270:
+#line 1763 "go.y"
     {
                (yyval.node) = nod(ORETURN, N, N);
                (yyval.node)->list = (yyvsp[(2) - (2)].list);
@@ -4383,8 +4377,8 @@ yyreduce:
        }
     break;
 
-  case 270:
-#line 1777 "go.y"
+  case 271:
+#line 1782 "go.y"
     {
                (yyval.list) = nil;
                if((yyvsp[(1) - (1)].node) != N)
@@ -4392,8 +4386,8 @@ yyreduce:
        }
     break;
 
-  case 271:
-#line 1783 "go.y"
+  case 272:
+#line 1788 "go.y"
     {
                (yyval.list) = (yyvsp[(1) - (3)].list);
                if((yyvsp[(3) - (3)].node) != N)
@@ -4401,190 +4395,190 @@ yyreduce:
        }
     break;
 
-  case 272:
-#line 1791 "go.y"
+  case 273:
+#line 1796 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 273:
-#line 1795 "go.y"
+  case 274:
+#line 1800 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 274:
-#line 1801 "go.y"
+  case 275:
+#line 1806 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 275:
-#line 1805 "go.y"
+  case 276:
+#line 1810 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 276:
-#line 1811 "go.y"
+  case 277:
+#line 1816 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 277:
-#line 1815 "go.y"
+  case 278:
+#line 1820 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 278:
-#line 1821 "go.y"
+  case 279:
+#line 1826 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 279:
-#line 1825 "go.y"
+  case 280:
+#line 1830 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 280:
-#line 1834 "go.y"
+  case 281:
+#line 1839 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 281:
-#line 1838 "go.y"
+  case 282:
+#line 1843 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 282:
-#line 1842 "go.y"
+  case 283:
+#line 1847 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 283:
-#line 1846 "go.y"
+  case 284:
+#line 1851 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 284:
-#line 1851 "go.y"
+  case 285:
+#line 1856 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 285:
-#line 1855 "go.y"
+  case 286:
+#line 1860 "go.y"
     {
                (yyval.list) = (yyvsp[(1) - (2)].list);
        }
     break;
 
-  case 290:
-#line 1869 "go.y"
+  case 291:
+#line 1874 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 292:
-#line 1875 "go.y"
+  case 293:
+#line 1880 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 294:
-#line 1881 "go.y"
+  case 295:
+#line 1886 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 296:
-#line 1887 "go.y"
+  case 297:
+#line 1892 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 298:
-#line 1893 "go.y"
+  case 299:
+#line 1898 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 300:
-#line 1899 "go.y"
+  case 301:
+#line 1904 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 302:
-#line 1905 "go.y"
+  case 303:
+#line 1910 "go.y"
     {
                (yyval.val).ctype = CTxxx;
        }
     break;
 
-  case 304:
-#line 1915 "go.y"
+  case 305:
+#line 1920 "go.y"
     {
                importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval);
        }
     break;
 
-  case 305:
-#line 1919 "go.y"
+  case 306:
+#line 1924 "go.y"
     {
                importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type));
        }
     break;
 
-  case 306:
-#line 1923 "go.y"
+  case 307:
+#line 1928 "go.y"
     {
                importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node));
        }
     break;
 
-  case 307:
-#line 1927 "go.y"
+  case 308:
+#line 1932 "go.y"
     {
                importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node));
        }
     break;
 
-  case 308:
-#line 1931 "go.y"
+  case 309:
+#line 1936 "go.y"
     {
                importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type));
        }
     break;
 
-  case 309:
-#line 1935 "go.y"
+  case 310:
+#line 1940 "go.y"
     {
                if((yyvsp[(2) - (4)].node) == N) {
                        dclcontext = PEXTERN;  // since we skip the funcbody below
@@ -4604,31 +4598,31 @@ yyreduce:
        }
     break;
 
-  case 310:
-#line 1955 "go.y"
+  case 311:
+#line 1960 "go.y"
     {
                (yyval.sym) = (yyvsp[(1) - (1)].sym);
                structpkg = (yyval.sym)->pkg;
        }
     break;
 
-  case 311:
-#line 1962 "go.y"
+  case 312:
+#line 1967 "go.y"
     {
                (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
                importsym((yyvsp[(1) - (1)].sym), OTYPE);
        }
     break;
 
-  case 317:
-#line 1982 "go.y"
+  case 318:
+#line 1987 "go.y"
     {
                (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
        }
     break;
 
-  case 318:
-#line 1986 "go.y"
+  case 319:
+#line 1991 "go.y"
     {
                // predefined name like uint8
                (yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg);
@@ -4640,50 +4634,50 @@ yyreduce:
        }
     break;
 
-  case 319:
-#line 1996 "go.y"
+  case 320:
+#line 2001 "go.y"
     {
                (yyval.type) = aindex(N, (yyvsp[(3) - (3)].type));
        }
     break;
 
-  case 320:
-#line 2000 "go.y"
+  case 321:
+#line 2005 "go.y"
     {
                (yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type));
        }
     break;
 
-  case 321:
-#line 2004 "go.y"
+  case 322:
+#line 2009 "go.y"
     {
                (yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type));
        }
     break;
 
-  case 322:
-#line 2008 "go.y"
+  case 323:
+#line 2013 "go.y"
     {
                (yyval.type) = tostruct((yyvsp[(3) - (4)].list));
        }
     break;
 
-  case 323:
-#line 2012 "go.y"
+  case 324:
+#line 2017 "go.y"
     {
                (yyval.type) = tointerface((yyvsp[(3) - (4)].list));
        }
     break;
 
-  case 324:
-#line 2016 "go.y"
+  case 325:
+#line 2021 "go.y"
     {
                (yyval.type) = ptrto((yyvsp[(2) - (2)].type));
        }
     break;
 
-  case 325:
-#line 2020 "go.y"
+  case 326:
+#line 2025 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(2) - (2)].type);
@@ -4691,8 +4685,8 @@ yyreduce:
        }
     break;
 
-  case 326:
-#line 2026 "go.y"
+  case 327:
+#line 2031 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(3) - (4)].type);
@@ -4700,8 +4694,8 @@ yyreduce:
        }
     break;
 
-  case 327:
-#line 2032 "go.y"
+  case 328:
+#line 2037 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -4709,8 +4703,8 @@ yyreduce:
        }
     break;
 
-  case 328:
-#line 2040 "go.y"
+  case 329:
+#line 2045 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -4718,15 +4712,15 @@ yyreduce:
        }
     break;
 
-  case 329:
-#line 2048 "go.y"
+  case 330:
+#line 2053 "go.y"
     {
                (yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list));
        }
     break;
 
-  case 330:
-#line 2054 "go.y"
+  case 331:
+#line 2059 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type)));
                if((yyvsp[(1) - (3)].sym))
@@ -4735,8 +4729,8 @@ yyreduce:
        }
     break;
 
-  case 331:
-#line 2061 "go.y"
+  case 332:
+#line 2066 "go.y"
     {
                Type *t;
        
@@ -4752,8 +4746,8 @@ yyreduce:
        }
     break;
 
-  case 332:
-#line 2077 "go.y"
+  case 333:
+#line 2082 "go.y"
     {
                Sym *s;
                Pkg *p;
@@ -4775,50 +4769,50 @@ yyreduce:
        }
     break;
 
-  case 333:
-#line 2099 "go.y"
+  case 334:
+#line 2104 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list))));
        }
     break;
 
-  case 334:
-#line 2103 "go.y"
+  case 335:
+#line 2108 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)));
        }
     break;
 
-  case 335:
-#line 2108 "go.y"
+  case 336:
+#line 2113 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 337:
-#line 2115 "go.y"
+  case 338:
+#line 2120 "go.y"
     {
                (yyval.list) = (yyvsp[(2) - (3)].list);
        }
     break;
 
-  case 338:
-#line 2119 "go.y"
+  case 339:
+#line 2124 "go.y"
     {
                (yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))));
        }
     break;
 
-  case 339:
-#line 2129 "go.y"
+  case 340:
+#line 2134 "go.y"
     {
                (yyval.node) = nodlit((yyvsp[(1) - (1)].val));
        }
     break;
 
-  case 340:
-#line 2133 "go.y"
+  case 341:
+#line 2138 "go.y"
     {
                (yyval.node) = nodlit((yyvsp[(2) - (2)].val));
                switch((yyval.node)->val.ctype){
@@ -4839,8 +4833,8 @@ yyreduce:
        }
     break;
 
-  case 341:
-#line 2152 "go.y"
+  case 342:
+#line 2157 "go.y"
     {
                (yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg));
                if((yyval.node)->op != OLITERAL)
@@ -4848,8 +4842,8 @@ yyreduce:
        }
     break;
 
-  case 343:
-#line 2161 "go.y"
+  case 344:
+#line 2166 "go.y"
     {
                if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) {
                        (yyval.node) = (yyvsp[(2) - (5)].node);
@@ -4862,43 +4856,43 @@ yyreduce:
        }
     break;
 
-  case 346:
-#line 2177 "go.y"
+  case 347:
+#line 2182 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 347:
-#line 2181 "go.y"
+  case 348:
+#line 2186 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 348:
-#line 2187 "go.y"
+  case 349:
+#line 2192 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 349:
-#line 2191 "go.y"
+  case 350:
+#line 2196 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 350:
-#line 2197 "go.y"
+  case 351:
+#line 2202 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 351:
-#line 2201 "go.y"
+  case 352:
+#line 2206 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
@@ -4906,7 +4900,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 4911 "y.tab.c"
+#line 4905 "y.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5120,7 +5114,7 @@ yyreturn:
 }
 
 
-#line 2205 "go.y"
+#line 2210 "go.y"
 
 
 static void
index fa3e9f27cc7a76097fd20f32b795bae3df5fda3e..d0dd639ff3d82403be8801f5f7b8dc32cfe6eb07 100644 (file)
@@ -20,16 +20,16 @@ static struct {
        {32, ';',
        "missing import path; require quoted string"},
 
-       {378, ';',
+       {380, ';',
        "missing { after if clause"},
 
-       {399, ';',
+       {401, ';',
        "missing { after switch clause"},
 
-       {238, ';',
+       {239, ';',
        "missing { after for clause"},
 
-       {476, LBODY,
+       {478, LBODY,
        "missing { after for clause"},
 
        {22, '{',
@@ -47,33 +47,33 @@ static struct {
        {37, ',',
        "unexpected comma in channel type"},
 
-       {439, LELSE,
+       {441, LELSE,
        "unexpected semicolon or newline before else"},
 
-       {258, ',',
+       {259, ',',
        "name list not allowed in interface type"},
 
-       {238, LVAR,
+       {239, LVAR,
        "var declaration not allowed in for initializer"},
 
        {65, '{',
        "unexpected { at end of statement"},
 
-       {377, '{',
+       {379, '{',
        "unexpected { at end of statement"},
        
        {126, ';',
        "argument to go/defer must be function call"},
        
-       {426, ';',
+       {428, ';',
        "need trailing comma before newline in composite literal"},
        
-       {437, ';',
+       {439, ';',
        "need trailing comma before newline in composite literal"},
        
        {113, LNAME,
        "nested func not allowed"},
 
-       {645, ';',
+       {647, ';',
        "else must be followed by if or statement block"}
 };
index 3395798620f060589ab3afefcfb5c11351991b30..72ce7dd138a539abc06cdf10c2a205aa7ba0db44 100644 (file)
@@ -123,7 +123,7 @@ func pallmall(cols []int) {
        fmt.Println(msg)
        tot := 0
        // wait for all results
-       for _ = range cols {
+       for range cols {
                result := <-ended
                tot += result.met
                fmt.Printf("%v%v\n", result.met, spell(result.same, true))
index 7e152c5eb5a2f51d896d4c94706780947dd92861..919fa30fbf1410bb8b9a4ebcf4c5fcdebaf91855 100644 (file)
@@ -56,6 +56,9 @@ func main() {
        for _ = range cs {// ERROR "receive"
        }
 
+       for range cs {// ERROR "receive"
+       }
+
        close(c)
        close(cs)
        close(cr)  // ERROR "receive"
index 6479bb2531b26880f6a4bb02d66bf8831e086707..3515c649bbeb1b5340bc6b1b13fde66666b0f64a 100644 (file)
@@ -18,4 +18,6 @@ func main() {
        }
        for _ = range t {
        }
+       for range t {
+       }
 }
index c6f8534c9ba5da64ad72a12476111d3be1355596..6df3c5cae669ce107d7fa3d147efc3d31f37c1e9 100644 (file)
@@ -14,6 +14,8 @@ type matrix struct {
 func (a matrix) equal() bool {
        for _ = range a.e {
        }
+       for range a.e {
+       }
        return true
 }
 
index 8effbe9c53a990decbece1baf23222672203f5c8..af89edac54b1814835ef7a926049c281435b868f 100644 (file)
@@ -32,6 +32,13 @@ func testchan() {
                println("Wanted lowercase alphabet; got", s)
                panic("fail")
        }
+       n := 0
+       for range seq('a', 'z') {
+               n++
+       }
+       if n != 26 {
+               println("testchan wrong count", n, "want 26")
+       }
 }
 
 // test that range over slice only evaluates
@@ -87,6 +94,22 @@ func testslice1() {
        }
 }
 
+func testslice2() {
+       n := 0
+       nmake = 0
+       for range makeslice() {
+               n++
+       }
+       if nmake != 1 {
+               println("range called makeslice", nmake, "times")
+               panic("fail")
+       }
+       if n != 5 {
+               println("wrong count ranging over makeslice", n)
+               panic("fail")
+       }
+}
+
 // test that range over array only evaluates
 // the expression after "range" once.
 
@@ -127,6 +150,22 @@ func testarray1() {
        }
 }
 
+func testarray2() {
+       n := 0
+       nmake = 0
+       for range makearray() {
+               n++
+       }
+       if nmake != 1 {
+               println("range called makearray", nmake, "times")
+               panic("fail")
+       }
+       if n != 5 {
+               println("wrong count ranging over makearray", n)
+               panic("fail")
+       }
+}
+
 func makearrayptr() *[5]int {
        nmake++
        return &[5]int{1, 2, 3, 4, 5}
@@ -176,6 +215,22 @@ func testarrayptr1() {
        }
 }
 
+func testarrayptr2() {
+       n := 0
+       nmake = 0
+       for range makearrayptr() {
+               n++
+       }
+       if nmake != 1 {
+               println("range called makearrayptr", nmake, "times")
+               panic("fail")
+       }
+       if n != 5 {
+               println("wrong count ranging over makearrayptr", n)
+               panic("fail")
+       }
+}
+
 // test that range over string only evaluates
 // the expression after "range" once.
 
@@ -216,6 +271,22 @@ func teststring1() {
        }
 }
 
+func teststring2() {
+       n := 0
+       nmake = 0
+       for range makestring() {
+               n++
+       }
+       if nmake != 1 {
+               println("range called makestring", nmake, "times")
+               panic("fail")
+       }
+       if n != 5 {
+               println("wrong count ranging over makestring", n)
+               panic("fail")
+       }
+}
+
 // test that range over map only evaluates
 // the expression after "range" once.
 
@@ -256,6 +327,22 @@ func testmap1() {
        }
 }
 
+func testmap2() {
+       n := 0
+       nmake = 0
+       for range makemap() {
+               n++
+       }
+       if nmake != 1 {
+               println("range called makemap", nmake, "times")
+               panic("fail")
+       }
+       if n != 5 {
+               println("wrong count ranging over makemap", n)
+               panic("fail")
+       }
+}
+
 // test that range evaluates the index and value expressions
 // exactly once per iteration.
 
@@ -298,13 +385,18 @@ func main() {
        testchan()
        testarray()
        testarray1()
+       testarray2()
        testarrayptr()
        testarrayptr1()
+       testarrayptr2()
        testslice()
        testslice1()
+       testslice2()
        teststring()
        teststring1()
+       teststring2()
        testmap()
        testmap1()
+       testmap2()
        testcalls()
 }
index d022e19ade0ef0d84a92c5bc24bcd0268268dbe4..fc5ab05a2c4cdc20d187da21b9e49facc5135e60 100644 (file)
@@ -97,6 +97,8 @@ func (m intMap) Len() int { return len(m) }
 func (m intMap) RangeAll() {
        for _ = range m {
        }
+       for range m {
+       }
 }
 
 func stressMaps() {