develooper Front page | perl.cvs.parrot | Postings from December 2008

[svn:parrot] r33647 - in branches/calling_conventions: . compilers/imcc compilers/ncigen compilers/pct/src/PAST compilers/pct/src/PCT compilers/pge/PGE compilers/pirc compilers/pirc/macro compilers/pirc/new compilers/pirc/src compilers/tge/TGE config/gen/

From:
allison
Date:
December 7, 2008 22:38
Subject:
[svn:parrot] r33647 - in branches/calling_conventions: . compilers/imcc compilers/ncigen compilers/pct/src/PAST compilers/pct/src/PCT compilers/pge/PGE compilers/pirc compilers/pirc/macro compilers/pirc/new compilers/pirc/src compilers/tge/TGE config/gen/
Message ID:
20081208063752.BAD21CB9AF@x12.develooper.com
Author: allison
Date: Sun Dec  7 22:37:43 2008
New Revision: 33647

Added:
   branches/calling_conventions/languages/perl6/Configure.pl
      - copied unchanged from r33645, /trunk/languages/perl6/Configure.pl
   branches/calling_conventions/languages/perl6/build/gen_builtins_pir.pl
      - copied unchanged from r33645, /trunk/languages/perl6/build/gen_builtins_pir.pl
   branches/calling_conventions/languages/perl6/build/gen_metaop_pir.pl
      - copied unchanged from r33645, /trunk/languages/perl6/build/gen_metaop_pir.pl
Modified:
   branches/calling_conventions/DEPRECATED.pod
   branches/calling_conventions/MANIFEST
   branches/calling_conventions/MANIFEST.SKIP
   branches/calling_conventions/compilers/imcc/imcc.l
   branches/calling_conventions/compilers/imcc/imcc.y
   branches/calling_conventions/compilers/imcc/imclexer.c
   branches/calling_conventions/compilers/imcc/imcparser.c
   branches/calling_conventions/compilers/imcc/imcparser.h
   branches/calling_conventions/compilers/imcc/parser_util.c
   branches/calling_conventions/compilers/imcc/pbc.c
   branches/calling_conventions/compilers/imcc/pbc.h
   branches/calling_conventions/compilers/imcc/symreg.c
   branches/calling_conventions/compilers/ncigen/NCIGENP6.pm
   branches/calling_conventions/compilers/ncigen/README
   branches/calling_conventions/compilers/ncigen/gen_sqlite3.pl   (contents, props changed)
   branches/calling_conventions/compilers/ncigen/k.h   (contents, props changed)
   branches/calling_conventions/compilers/ncigen/kk.h   (contents, props changed)
   branches/calling_conventions/compilers/pct/src/PAST/Compiler.pir
   branches/calling_conventions/compilers/pct/src/PAST/Node.pir
   branches/calling_conventions/compilers/pct/src/PCT/Node.pir
   branches/calling_conventions/compilers/pge/PGE/Match.pir
   branches/calling_conventions/compilers/pge/PGE/OPTable.pir
   branches/calling_conventions/compilers/pirc/README.pod
   branches/calling_conventions/compilers/pirc/macro/macro.l
   branches/calling_conventions/compilers/pirc/macro/macrolexer.c
   branches/calling_conventions/compilers/pirc/new/bcgen.c
   branches/calling_conventions/compilers/pirc/new/bcgen.h
   branches/calling_conventions/compilers/pirc/new/hdocprep.c
   branches/calling_conventions/compilers/pirc/new/hdocprep.l
   branches/calling_conventions/compilers/pirc/new/main.c
   branches/calling_conventions/compilers/pirc/new/pir.y
   branches/calling_conventions/compilers/pirc/new/pircompiler.h
   branches/calling_conventions/compilers/pirc/new/pircompunit.c
   branches/calling_conventions/compilers/pirc/new/pircompunit.h
   branches/calling_conventions/compilers/pirc/new/piremit.c
   branches/calling_conventions/compilers/pirc/new/pirparser.c
   branches/calling_conventions/compilers/pirc/new/pirsymbol.c
   branches/calling_conventions/compilers/pirc/src/pirout.c
   branches/calling_conventions/compilers/tge/TGE/Compiler.pir
   branches/calling_conventions/config/gen/call_list/misc.in
   branches/calling_conventions/docs/book/ch01_overview.pod
   branches/calling_conventions/docs/book/ch03_pir_basics.pod
   branches/calling_conventions/docs/book/ch04_pir_subroutines.pod
   branches/calling_conventions/docs/book/ch05_pasm.pod
   branches/calling_conventions/docs/book/ch06_library.pod
   branches/calling_conventions/docs/book/ch11_pmcs.pod
   branches/calling_conventions/docs/book/ch12_opcodes.pod
   branches/calling_conventions/examples/benchmarks/primes2.pir
   branches/calling_conventions/ext/SQLite3/DBDI.pm   (contents, props changed)
   branches/calling_conventions/ext/SQLite3/DBDI/Driver/SQLite3.pm   (contents, props changed)
   branches/calling_conventions/include/parrot/atomic/gcc_x86.h
   branches/calling_conventions/include/parrot/hash.h
   branches/calling_conventions/include/parrot/misc.h
   branches/calling_conventions/include/parrot/multidispatch.h
   branches/calling_conventions/include/parrot/pmc.h
   branches/calling_conventions/include/parrot/register.h
   branches/calling_conventions/include/parrot/string_funcs.h
   branches/calling_conventions/include/parrot/sub.h
   branches/calling_conventions/languages/APL/Configure.pl   (contents, props changed)
   branches/calling_conventions/languages/APL/src/pmc/aplvector.pmc
   branches/calling_conventions/languages/lua/src/lib/complex.pir
   branches/calling_conventions/languages/lua/src/lib/mathx.pir
   branches/calling_conventions/languages/lua/t/complex.t
   branches/calling_conventions/languages/lua/t/mathx.t
   branches/calling_conventions/languages/m4/src/macro.pir
   branches/calling_conventions/languages/perl6/config/makefiles/root.in
   branches/calling_conventions/languages/perl6/docs/spectest-progress.csv
   branches/calling_conventions/languages/perl6/perl6.pir
   branches/calling_conventions/languages/perl6/src/builtins/any-list.pir
   branches/calling_conventions/languages/perl6/src/builtins/any-str.pir
   branches/calling_conventions/languages/perl6/src/builtins/assign.pir
   branches/calling_conventions/languages/perl6/src/builtins/misc.pir
   branches/calling_conventions/languages/perl6/src/builtins/op.pir
   branches/calling_conventions/languages/perl6/src/classes/Capture.pir
   branches/calling_conventions/languages/perl6/src/classes/Object.pir
   branches/calling_conventions/languages/perl6/src/ops/   (props changed)
   branches/calling_conventions/languages/perl6/src/parser/actions.pm
   branches/calling_conventions/languages/perl6/src/parser/grammar-oper.pg
   branches/calling_conventions/languages/perl6/src/parser/grammar.pg
   branches/calling_conventions/languages/perl6/src/pmc/perl6multisub.pmc
   branches/calling_conventions/languages/perl6/t/spectest.data
   branches/calling_conventions/languages/pheme/lib/pge2past.tg
   branches/calling_conventions/runtime/parrot/library/Data/Dumper/Default.pir
   branches/calling_conventions/runtime/parrot/library/File/Spec/Unix.pir
   branches/calling_conventions/runtime/parrot/library/File/Spec/Win32.pir
   branches/calling_conventions/runtime/parrot/library/PGE/Hs.pir
   branches/calling_conventions/src/atomic/gcc_x86.c
   branches/calling_conventions/src/encodings/utf8.c
   branches/calling_conventions/src/exceptions.c
   branches/calling_conventions/src/extend.c
   branches/calling_conventions/src/gc/register.c
   branches/calling_conventions/src/gc/smallobject.c
   branches/calling_conventions/src/global.c
   branches/calling_conventions/src/io/buffer.c
   branches/calling_conventions/src/jit/i386/exec_dep.h
   branches/calling_conventions/src/multidispatch.c
   branches/calling_conventions/src/parrot_debugger.c
   branches/calling_conventions/src/pmc.c
   branches/calling_conventions/src/pmc/capture.pmc
   branches/calling_conventions/src/pmc/class.pmc
   branches/calling_conventions/src/pmc/eventhandler.pmc
   branches/calling_conventions/src/pmc/exception.pmc
   branches/calling_conventions/src/pmc/fixedpmcarray.pmc
   branches/calling_conventions/src/pmc/pmcproxy.pmc
   branches/calling_conventions/src/string.c
   branches/calling_conventions/src/string_primitives.c
   branches/calling_conventions/src/sub.c
   branches/calling_conventions/src/utils.c
   branches/calling_conventions/t/op/calling.t
   branches/calling_conventions/t/pmc/capture.t
   branches/calling_conventions/t/pmc/eval.t
   branches/calling_conventions/t/pmc/fixedpmcarray.t
   branches/calling_conventions/t/pmc/multidispatch.t
   branches/calling_conventions/t/pmc/object-meths.t
   branches/calling_conventions/t/pmc/objects.t
   branches/calling_conventions/t/pmc/sub.t
   branches/calling_conventions/t/pmc/threads.t
   branches/calling_conventions/t/stm/basic_mt.t
   branches/calling_conventions/t/stm/runtime.t
   branches/calling_conventions/tools/dev/mk_inno.pl
   branches/calling_conventions/tools/dev/mk_language_shell.pl

Log:
[calling_conventions] Bringing the calling_conventions branch up-to-date
with trunk r33644.


Modified: branches/calling_conventions/DEPRECATED.pod
==============================================================================
--- branches/calling_conventions/DEPRECATED.pod	(original)
+++ branches/calling_conventions/DEPRECATED.pod	Sun Dec  7 22:37:43 2008
@@ -86,11 +86,6 @@
 
 =over 4
 
-=item * C<global> keyword [post 0.6.4]
-
-See RT #48016
-and RT #48018.
-
 =item * C<#line> [post 0.6.4]
 
 Will be replaced by C<.line> to be more consistent with other PIR syntax.
@@ -176,6 +171,11 @@
 All of the named vtable functions in PCT and PGE will lose
 their names and effectively become anonymous.  See RT #60384.
 
+=item Capture_PIR class [post 0.8.2]
+
+The Capture_PIR class in runtime/parrot/library/Parrot/Capture_PIR.pir
+is deprecated and will be removed.
+
 =back
 
 =cut

Modified: branches/calling_conventions/MANIFEST
==============================================================================
--- branches/calling_conventions/MANIFEST	(original)
+++ branches/calling_conventions/MANIFEST	Sun Dec  7 22:37:43 2008
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Fri Dec  5 17:27:57 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun Dec  7 15:38:53 2008 UT
 #
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
@@ -997,6 +997,7 @@
 include/parrot/vtables.h                                    [main]include
 include/parrot/warnings.h                                   [main]include
 languages/APL/APL.pir                                       [APL]
+languages/APL/Configure.pl                                  [APL]
 languages/APL/MAINTAINER                                    [APL]
 languages/APL/README                                        [APL]
 languages/APL/STATUS                                        [APL]
@@ -2090,11 +2091,14 @@
 languages/parrot_compiler/sample.pasm                       [parrot_compiler]
 languages/parrot_compiler/t/basic/hello.t                   [parrot_compiler]
 languages/parrot_compiler/t/harness                         [parrot_compiler]
+languages/perl6/Configure.pl                                [perl6]
 languages/perl6/MAINTAINER                                  [perl6]
 languages/perl6/README                                      [perl6]
 languages/perl6/ROADMAP                                     [perl6]
 languages/perl6/Test.pm                                     [perl6]
+languages/perl6/build/gen_builtins_pir.pl                   [perl6]
 languages/perl6/build/gen_junction_pir.pl                   [perl6]
+languages/perl6/build/gen_metaop_pir.pl                     [perl6]
 languages/perl6/build/gen_objectref_pmc.pl                  [perl6]
 languages/perl6/config/makefiles/root.in                    [perl6]
 languages/perl6/config/makefiles/utils.in                   [perl6]

Modified: branches/calling_conventions/MANIFEST.SKIP
==============================================================================
--- branches/calling_conventions/MANIFEST.SKIP	(original)
+++ branches/calling_conventions/MANIFEST.SKIP	Sun Dec  7 22:37:43 2008
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools\dev\mk_manifest_and_skip.pl Tue Dec  2 10:07:56 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sat Dec  6 05:46:39 2008 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -1050,6 +1050,8 @@
 ^languages/perl6/src/gen_.*\.pir$
 ^languages/perl6/src/gen_.*\.pir/
 # generated from svn:ignore of 'languages/perl6/src/ops/'
+^languages/perl6/src/ops/.*\.bundle$
+^languages/perl6/src/ops/.*\.bundle/
 ^languages/perl6/src/ops/.*\.c$
 ^languages/perl6/src/ops/.*\.c/
 ^languages/perl6/src/ops/.*\.dll$

Modified: branches/calling_conventions/compilers/imcc/imcc.l
==============================================================================
--- branches/calling_conventions/compilers/imcc/imcc.l	(original)
+++ branches/calling_conventions/compilers/imcc/imcc.l	Sun Dec  7 22:37:43 2008
@@ -365,7 +365,6 @@
 "int"                         return INTV;
 "num"                         return FLOATV;
 "new"                         return NEW;
-"global"                      return GLOBALOP;
 "pmc"                         return PMCV;
 "string"                      return STRINGV;
 "<<"                          return SHIFT_LEFT;

Modified: branches/calling_conventions/compilers/imcc/imcc.y
==============================================================================
--- branches/calling_conventions/compilers/imcc/imcc.y	(original)
+++ branches/calling_conventions/compilers/imcc/imcc.y	Sun Dec  7 22:37:43 2008
@@ -709,7 +709,7 @@
 %token <t> SHR_ASSIGN SHL_ASSIGN SHR_U_ASSIGN
 %token <t> SHIFT_LEFT SHIFT_RIGHT INTV FLOATV STRINGV PMCV LOG_XOR
 %token <t> RELOP_EQ RELOP_NE RELOP_GT RELOP_GTE RELOP_LT RELOP_LTE
-%token <t> GLOBALOP RESULT RETURN TAILCALL YIELDT GET_RESULTS
+%token <t> RESULT RETURN TAILCALL YIELDT GET_RESULTS
 %token <t> POW SHIFT_RIGHT_U LOG_AND LOG_OR
 %token <t> COMMA ESUB DOTDOT
 %token <t> PCC_BEGIN PCC_END PCC_CALL PCC_SUB PCC_BEGIN_RETURN PCC_END_RETURN
@@ -1022,18 +1022,6 @@
            $$->type |= $3;
            mem_sys_free($2);
           }
-
-   /* don't free $2 here; adv_named_set uses the pointer directly */
-   | type STRINGC ADV_ARROW IDENTIFIER paramtype_list
-          {
-            if ($5 & VT_UNIQUE_REG)
-                $$ = mk_ident_ur(interp, $4, $1);
-            else
-                $$ = mk_ident(interp, $4, $1);
-            $$->type |= $5;
-            adv_named_set(interp, $2);
-            mem_sys_free($4);
-          }
    ;
 
 
@@ -1644,10 +1632,6 @@
             { $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, $1, $4, $6); }
    | target '=' NEW var '[' keylist ']'
             { $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, $1, $4, $6); }
-   | target '=' GLOBALOP string
-            { $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, "find_global", 2, $1, $4);}
-   | GLOBALOP string '=' var
-            { $$ = MK_I(interp, IMCC_INFO(interp)->cur_unit, "store_global", 2, $2, $4); }
        /* NEW is here because it is both PIR and PASM keywords so we
         * have to handle the token here (or badly hack the lexer). */
    | NEW target COMMA var

Modified: branches/calling_conventions/compilers/imcc/imclexer.c
==============================================================================
--- branches/calling_conventions/compilers/imcc/imclexer.c	(original)
+++ branches/calling_conventions/compilers/imcc/imclexer.c	Sun Dec  7 22:37:43 2008
@@ -368,8 +368,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 149
-#define YY_END_OF_BUFFER 150
+#define YY_NUM_RULES 148
+#define YY_END_OF_BUFFER 149
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -377,121 +377,120 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[1026] =
+static yyconst flex_int16_t yy_accept[1021] =
     {   0,
         0,    0,    0,    0,    0,    0,   15,   15,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        3,    3,  150,  136,  135,   10,  135,  136,  136,   11,
-      136,  136,  136,  136,  136,  136,  116,  136,   95,  136,
-      120,  120,  136,   87,  136,   89,  134,  134,  134,  134,
-      134,  134,  134,  134,  136,  136,   13,  135,  135,  136,
-      136,  136,  136,  134,   13,  148,  143,  138,  143,  148,
-      148,  148,  148,  148,  120,  120,  148,  146,  146,  146,
-      142,  142,   13,   15,   16,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,  149,  136,    8,    8,
-
-      136,  136,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    5,  136,    9,  136,  136,  136,  136,  136,
-      120,  120,  136,  136,  136,  136,   12,  136,  136,  136,
-      136,  136,  120,  120,  136,  136,  136,  149,    1,  149,
-      149,  149,  149,  149,  120,  120,  149,  149,  149,    3,
+        3,    3,  149,  135,  134,   10,  134,  135,  135,   11,
+      135,  135,  135,  135,  135,  135,  115,  135,   94,  135,
+      119,  119,  135,   86,  135,   88,  133,  133,  133,  133,
+      133,  133,  133,  133,  135,  135,   13,  134,  134,  135,
+      135,  135,  135,  133,   13,  147,  142,  137,  142,  147,
+      147,  147,  147,  147,  119,  119,  147,  145,  145,  145,
+      141,  141,   13,   15,   16,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,  148,  135,    8,    8,
+
+      135,  135,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    4,    5,  135,    9,  135,  135,  135,  135,  135,
+      119,  119,  135,  135,  135,  135,   12,  135,  135,  135,
+      135,  135,  119,  119,  135,  135,  135,  148,    1,  148,
+      148,  148,  148,  148,  119,  119,  148,  148,  148,    3,
         2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,  135,    0,   10,   92,    0,  125,    0,  132,  132,
-      132,  132,  132,  101,   84,  104,    0,   93,   99,    0,
-      120,   97,   98,   96,  119,  110,  118,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
+        3,  134,    0,   10,   91,    0,  124,    0,  131,  131,
+      131,  131,  131,  100,   83,  103,    0,   92,   98,    0,
+      119,   96,   97,   95,  118,  109,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
 
-      118,  102,  100,  119,    0,    0,  124,    0,    0,    0,
+      117,  101,   99,  118,    0,    0,  123,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       81,   88,   91,   61,   90,   82,  115,    0,  134,  117,
-      133,  134,  134,   72,  134,  134,  134,  134,  134,  134,
-      134,  105,   85,  106,   86,  135,  118,  118,  118,  118,
-      118,  118,    0,    0,    0,    0,  143,  138,  143,    0,
-        0,    0,  147,  147,  147,  146,    0,  144,  146,  142,
-      142,   15,   16,   15,   15,   15,   15,   15,   15,   15,
+       80,   87,   90,   61,   89,   81,  114,    0,  133,  116,
+      132,  133,   72,  133,  133,  133,  133,  133,  133,  133,
+      104,   84,  105,   85,  134,  117,  117,  117,  117,  117,
+      117,    0,    0,    0,    0,  142,  137,  142,    0,    0,
+        0,  146,  146,  146,  145,    0,  143,  145,  141,  141,
+       15,   16,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,    0,    8,    0,    4,    4,    4,    4,    4,
+       15,    0,    8,    0,    4,    4,    4,    4,    4,    4,
 
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    0,    9,    0,    0,    0,  125,    0,    0,
-        0,    0,  120,  119,    0,  119,    0,    0,  124,    0,
-        0,    0,    0,    0,    0,    0,   12,    0,    0,    0,
-      125,    0,    0,    0,    0,  120,  119,    0,  119,    0,
-        0,  124,    0,    0,    0,    0,    0,    0,    0,    1,
-        0,    0,    0,  125,    0,    0,    0,    0,  120,  119,
-        0,  119,    0,    0,  124,    0,    0,    0,    0,    0,
-        0,    3,    2,    3,    3,    3,    3,    3,    3,    3,
+        4,    0,    9,    0,    0,    0,  124,    0,    0,    0,
+        0,  119,  118,    0,  118,    0,    0,  123,    0,    0,
+        0,    0,    0,    0,    0,   12,    0,    0,    0,  124,
+        0,    0,    0,    0,  119,  118,    0,  118,    0,    0,
+      123,    0,    0,    0,    0,    0,    0,    0,    1,    0,
+        0,    0,  124,    0,    0,    0,    0,  119,  118,    0,
+      118,    0,    0,  123,    0,    0,    0,    0,    0,    0,
+        3,    2,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
 
-        3,   94,  128,  129,  131,  130,    0,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      103,  119,  122,    0,  119,  123,  121,    0,    0,    0,
+       93,  127,  128,  130,  129,    0,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  102,
+      118,  121,    0,  118,  122,  120,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  108,  107,   83,
-      114,    0,    0,  133,  134,  134,   75,   77,  134,   76,
-       79,  134,  134,  134,  118,  118,    0,    0,  139,  145,
-      141,  147,  147,  147,  147,  146,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+        0,    0,    0,    0,    0,    0,  107,  106,   82,  113,
+        0,    0,  132,  133,   75,   77,  133,   76,   78,  133,
+      133,  133,  117,  117,    0,    0,  138,  144,  140,  146,
+      146,  146,  146,  145,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,    0,    0,
 
-        0,    0,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    0,    0,  119,  122,    0,  119,  123,
-      121,    0,    0,    0,    0,    0,    0,    0,  119,  122,
-        0,  119,  123,  121,    0,    0,    0,    0,    0,    0,
-        0,  119,  122,    0,  119,  123,  121,    0,    0,    0,
-        0,    0,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    0,  119,   64,  118,  118,
-      118,   21,  118,  118,  118,  118,   18,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,   20,  118,
-      118,    0,    0,    0,    0,    0,    0,   42,    0,    0,
+        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+        4,    0,    0,  118,  121,    0,  118,  122,  120,    0,
+        0,    0,    0,    0,    0,    0,  118,  121,    0,  118,
+      122,  120,    0,    0,    0,    0,    0,    0,    0,  118,
+      121,    0,  118,  122,  120,    0,    0,    0,    0,    0,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    0,  118,   64,  117,  117,  117,   21,
+      117,  117,  117,  117,   18,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,   20,  117,  117,    0,
+        0,    0,    0,    0,    0,   42,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  126,    0,    0,  109,    0,  127,    0,    0,
-        0,  134,   71,   74,  134,  134,  134,  134,  141,  147,
-      147,  147,  146,  146,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,    0,
-        0,    0,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    0,  119,    0,    0,    0,  126,    0,    0,    0,
-        0,    0,  127,    0,    0,    0,    0,    0,    0,  119,
-        0,    0,    0,  126,    0,    0,    0,    0,    0,  127,
-        0,    0,    0,    0,    0,    0,  119,    0,    0,    0,
-
-      126,    0,    0,    0,    0,    0,  127,    0,    0,    0,
-        0,    0,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,  118,  118,   24,  118,
-      118,  118,  118,  118,  118,  118,   17,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,  118,   40,
-       56,    0,   37,    0,    0,   36,   35,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  134,
-      134,  134,  134,  134,  137,  147,   17,  146,  146,   15,
-       15,   15,   14,   15,   17,    0,    0,    4,    4,    4,
-       17,    0,    0,   17,    0,    0,   17,    0,    0,    3,
-
-        3,    3,  118,  118,   68,  118,  118,  118,  118,  118,
-      118,  118,  118,  118,   67,  112,  118,  118,  118,   70,
-      118,  118,  118,  118,  118,  118,   50,    0,    0,    0,
-        0,   34,   60,    0,    0,    0,   41,    0,    0,   47,
-        0,    0,   78,  134,  134,   80,   73,  147,  146,  146,
-       15,   15,    0,    0,    4,    4,    0,    0,    0,    0,
-        0,    0,    3,    3,  118,  118,  118,  118,  118,  118,
-      118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-       52,  118,  118,  118,  118,    0,    0,    0,   33,    0,
-        0,    0,    0,   57,    0,   43,  134,  134,  140,  146,
-
-      146,   15,   15,    0,    0,    4,    4,    0,    0,    0,
-        0,    0,    0,    3,    3,   65,  118,  118,  118,  118,
-      118,  118,  118,  118,  118,  113,  118,   55,  118,  118,
-      118,  118,   28,   19,  118,  118,  118,    0,    0,    0,
-       44,    0,    0,    0,    0,    0,    7,   15,    7,    4,
-        4,    0,    7,    0,    7,    0,    7,    3,    3,  118,
-      118,  118,   23,  118,  118,  118,  118,  118,   27,  118,
-      118,  118,   25,  118,  118,   54,    0,    0,   62,   59,
-       58,   39,    0,    6,    6,    6,    6,    6,    3,  118,
-      118,  118,  118,   32,  118,  118,  118,  118,   26,   63,
-
-      118,   51,   38,    0,    0,   22,  118,  118,   30,  118,
-       48,  118,  118,   53,   46,   45,  118,   31,  118,   49,
-       69,  111,   29,   66,    0
+      125,    0,    0,  108,    0,  126,    0,    0,    0,   71,
+       74,  133,  133,  133,  133,  140,  146,  146,  146,  145,
+      145,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,    0,    0,    0,    4,
+        4,    4,    4,    4,    4,    4,    4,    4,    0,  118,
+        0,    0,    0,  125,    0,    0,    0,    0,    0,  126,
+        0,    0,    0,    0,    0,    0,  118,    0,    0,    0,
+      125,    0,    0,    0,    0,    0,  126,    0,    0,    0,
+        0,    0,    0,  118,    0,    0,    0,  125,    0,    0,
+
+        0,    0,    0,  126,    0,    0,    0,    0,    0,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,  117,  117,   24,  117,  117,  117,  117,
+      117,  117,  117,   17,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,   40,   56,    0,   37,
+        0,    0,   36,   35,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  133,  133,  133,  133,
+      136,  146,   17,  145,  145,   15,   15,   15,   14,   15,
+       17,    0,    0,    4,    4,    4,   17,    0,    0,   17,
+        0,    0,   17,    0,    0,    3,    3,    3,  117,  117,
+
+       68,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+       67,  111,  117,  117,  117,   70,  117,  117,  117,  117,
+      117,  117,   50,    0,    0,    0,    0,   34,   60,    0,
+        0,    0,   41,    0,    0,   47,    0,    0,  133,  133,
+       79,   73,  146,  145,  145,   15,   15,    0,    0,    4,
+        4,    0,    0,    0,    0,    0,    0,    3,    3,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,   52,  117,  117,  117,  117,
+        0,    0,    0,   33,    0,    0,    0,    0,   57,    0,
+       43,  133,  133,  139,  145,  145,   15,   15,    0,    0,
+
+        4,    4,    0,    0,    0,    0,    0,    0,    3,    3,
+       65,  117,  117,  117,  117,  117,  117,  117,  117,  117,
+      112,  117,   55,  117,  117,  117,  117,   28,   19,  117,
+      117,  117,    0,    0,    0,   44,    0,    0,    0,    0,
+        0,    7,   15,    7,    4,    4,    0,    7,    0,    7,
+        0,    7,    3,    3,  117,  117,  117,   23,  117,  117,
+      117,  117,  117,   27,  117,  117,  117,   25,  117,  117,
+       54,    0,    0,   62,   59,   58,   39,    0,    6,    6,
+        6,    6,    6,    3,  117,  117,  117,  117,   32,  117,
+      117,  117,  117,   26,   63,  117,   51,   38,    0,    0,
+
+       22,  117,  117,   30,  117,   48,  117,  117,   53,   46,
+       45,  117,   31,  117,   49,   69,  110,   29,   66,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -537,275 +536,273 @@
        10,   10,   10,   10,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1183] =
+static yyconst flex_int16_t yy_base[1178] =
     {   0,
-        0, 4171,   65, 4170,  131,   82,  197, 4169,  263,    0,
+        0, 4123,   65, 4122,  131,   82,  197, 4121,  263,    0,
       329,    0,   73,   78,  395,    0,  461,    0,  527,    0,
-      593,    0, 4192, 7497,   99, 7497,  107, 4166,   65, 7497,
-       84, 4165,  103, 4177,   83,  643, 7497,  650,  659,  648,
-      707,  735,  740,   49,  101,  657,  716,  755,  735,  726,
-      787,  788,  790,  793,  715,  706,  708,  743,  815,  804,
-      825,  801, 4164,  799, 7497, 7497,  825, 7497,  855,  723,
-      804, 4175,  844,  872,    0,  878, 4162,  743,  894,  789,
-      883,  899, 7497,    0, 7497, 4182,  827, 4172,  908,  900,
-      935,  904, 4159,  998, 1064, 4138, 7497,  915,  940, 1009,
-
-     4158,   83,    0,    0,  867,  963,  974, 1114,  934, 4156,
-     1177, 1243,  865,  764, 7497,  780,  935,  941, 1015, 1081,
-     1307, 1083, 1037, 1370, 1436,  828, 7497,  903, 1043, 1041,
-     1094, 1120, 1500, 1130, 1056, 1563, 1629,  928, 7497,  945,
-     1088, 1045, 1193, 1219, 1693, 1236, 1103, 1756, 1822,    0,
-     7497, 4172,  939, 4162, 1187, 1199, 1872, 1242, 4149, 1935,
-     2001, 1147, 1116, 7497, 7497,  961, 7497,    0,    0, 1205,
-     1209, 1213, 1272, 7497, 7497, 7497, 4160, 7497, 7497, 1281,
-     1301, 7497, 7497, 7497, 1370, 7497,    0, 4135, 4101, 1000,
-     4093,  940, 4092, 1108,  802,  718,  867, 4098,  639, 4101,
-
-     4092, 4116, 7497, 1382, 1032, 1335, 7497, 1155,    0, 4087,
-     4088, 1041, 1063,  930,  619,  932, 4084,   17, 4084, 4074,
-     1252, 7497, 7497, 7497, 7497, 1130, 4109, 4108, 1264, 4123,
-     1343, 1398, 1397, 1316, 1399, 1402, 1454, 1456, 1408, 1457,
-     1462, 7497, 7497, 7497, 7497, 1293, 4075, 4071, 1284, 4081,
-     4080, 4077, 1146, 4062, 4059, 1055, 1310, 7497, 1484, 4095,
-     1471,    0,    0, 4064, 1232,  791, 4109, 1528, 1410, 1493,
-     1505,    0, 7497, 1098,    0,    0, 4103, 1504, 1574, 1579,
-     4064, 1637, 1217, 1539,    0, 1348, 2049, 1158, 2096, 2162,
-     2228, 4053, 4062, 1643,  867,    0, 1160,    0, 1563, 1671,
-
-     1756, 4061, 1768, 1243, 1591,    0, 1378, 2276, 1204, 2323,
-     2389, 2455, 1303, 7497, 1313, 1611, 1667, 1341, 1426, 1471,
-     1528, 1699, 2519, 1839, 1512, 1851, 1508, 1721, 1534, 1730,
-     2563, 1675, 2610, 2676, 2742, 1538, 7497, 1553, 1801, 1809,
-     1613, 1618, 1696, 1741, 1900, 2806, 1951, 1681, 1974, 1780,
-     1909, 1620, 1790, 2850, 1871, 2897, 2963, 3029, 1623, 7497,
-     1645, 1860, 1892, 1677, 1751, 1803, 1853, 1963, 3093, 2018,
-     1788, 2030, 1960, 2112, 1814, 2025, 3137, 2050, 3184, 3250,
-     3316,    0, 7497, 1279,    0,    0, 4028, 1831, 2239, 2053,
-     3989, 2119, 1800, 2066,    0, 1967, 3364, 1420, 3411, 3477,
-
-     3543, 1875, 1970, 2123, 2131, 2135, 2256,    0, 4004, 3989,
-     3985, 3982, 3989, 3974, 3978, 1064, 3968, 3977, 1014, 3985,
-     3969, 3975, 3976, 3968, 3980, 3964, 3963, 3978, 3970, 3973,
-     7497, 2244, 1890, 2228, 2260, 2011,    0, 3964, 3975, 3963,
-     1648, 3951, 3971, 3962, 3952, 3959, 3957, 3962, 3948, 3947,
-     3947, 3944, 3960, 3948, 3955, 1379, 3984, 7497, 7497, 3970,
-     7497, 1745, 3969, 1953, 2334, 2291, 2114, 2292, 2293, 2294,
-     2342, 2466, 2468, 2478, 3926, 3927, 3918, 3944, 7497, 2333,
-        0,    0, 3921, 3922, 3911, 2460, 2348, 3910, 2512, 1897,
-     2352, 2359, 2127, 3591, 1898, 3950, 1917, 3638, 3704, 3902,
-
-     3907, 2012, 2483, 3903, 2524, 1914, 2363, 2506, 2139, 3752,
-     2503, 3799, 3865, 2557, 2308, 2626, 2356, 2577, 2638, 2583,
-     3929, 2489, 2280, 2548, 3976, 4042, 2648, 2482, 2758, 2544,
-     2770, 2792, 2634, 4106, 2780, 2628, 2790, 4153, 4219, 2828,
-     2586, 2913, 2766, 2796, 2842, 2818, 4283, 2878, 2662, 2884,
-     4330, 4396, 2925, 3902, 2837, 1979, 2854, 2906, 2814, 4444,
-     2016, 3942, 2077, 4491, 4557, 2929, 2933, 3912, 3902, 3896,
-     3888, 1235, 3904, 3901, 3892, 3888,    0, 3895, 3895, 3897,
-     3881, 3888, 3890, 3894, 3892, 3831, 3803, 3821,    0, 3810,
-     3809, 3806, 3799, 3811, 3797, 3796, 3800, 7497, 3808, 3799,
-
-     3802, 3791, 3803, 3795,  900, 3801, 3787, 3788, 3794, 3787,
-     3799, 2248, 7497,    0, 3829, 7497, 2555, 7497,    0, 3817,
-     3831, 3040, 3041, 3042, 3050, 3051, 3052, 3061,    0, 3785,
-     3790, 3789, 1529, 1688, 3059, 3070, 3788, 2561,    0,    0,
-     3821, 2765,    0,    0, 4623, 3825, 4689, 4755, 2039, 3785,
-     1310, 1434, 3087, 3109, 3784, 2848,    0, 4821, 3822, 4887,
-     4953, 3113, 3133, 2760, 3165, 3171, 2086, 2121, 2926, 3099,
-     3340, 3347, 2383, 2505, 5019, 2953, 5085, 3778, 3141, 3200,
-     3118, 3355, 3357, 2553, 2571, 3139, 3211, 3362, 3364, 2640,
-     2772, 5151, 3143, 5217, 3777, 3209, 3213, 3332, 3435, 3440,
-
-     2799, 2862, 3233, 3235, 3567, 3574, 2886, 3068, 5283, 3237,
-     5349, 3776, 3369, 3379, 3775, 2879,    0,    0, 3808, 3078,
-        0,    0, 5415, 3812, 5481, 5547, 3766, 3762,    0, 3747,
-     3288, 3751, 3735, 3749, 3730, 3745,    0, 3737, 3736, 3732,
-     3744, 3726, 3739, 3727, 3720, 3720, 3306, 3732, 3730, 7497,
-     7497, 3662, 7497, 3660, 3657, 7497, 7497, 3646, 3649, 3653,
-     3638, 3649, 3640, 3636, 3648, 3636, 3645, 3629, 3637, 3564,
-     3566, 3563, 3575, 3583,    0, 3636,    0, 3380, 3417,    0,
-     5613, 5679, 7497, 3683, 7497, 1863, 1663,    0, 5745, 5811,
-     3083, 5877, 1094, 3095, 3074,  735, 3145, 3120,  964,    0,
-
-     3126, 1046, 3643, 3641,    0, 3634, 3629, 3624, 3621, 3614,
-     3608, 3612, 3612, 3582,    0, 3581, 3561, 3546, 3558,    0,
-     3534, 3540, 3519, 3519, 3509, 3504,    0, 3414, 3405, 3415,
-     3387, 7497, 7497, 3373, 3376, 3361, 7497, 3351, 3315, 7497,
-     3327, 3326, 3432, 3581, 3649, 3436, 3437, 3372, 3202, 3572,
-      974, 1544, 1622, 1749, 2012, 2466, 1615, 1905, 1359, 1556,
-     1626, 1680, 1751, 2221, 3302, 3405, 3304, 3294, 3303, 3300,
-     3148, 3129, 3092, 3073, 3077, 3060, 3051, 3041, 3025, 3019,
-        0, 3000, 2986, 2915, 2907, 2900, 2896, 2883, 7497, 2867,
-     2871, 2842, 2825, 7497, 2827, 7497, 3445, 3661, 3461, 3451,
-
-     3580, 2076, 2286, 1335, 1476, 2766, 2776, 1839, 3195, 1418,
-     1877, 2239, 2466, 2621, 2793,    0, 2799, 2778, 2708, 2622,
-     2603, 2610, 2591, 2540, 2540,    0, 2513,    0, 2515, 2508,
-     2506, 2486,    0,    0, 2470, 2423, 2411, 2307, 2296, 2271,
-     7497, 2265, 2248, 2231, 2205, 1528, 2252, 1741, 2226, 2483,
-     2130, 3621, 3468, 3664, 3559, 3676, 3626, 2493, 2122, 2067,
-     2053, 2015,    0, 1998, 1991, 1962, 1923, 1915,    0, 1912,
-     1856, 1852,    0, 1827, 1831,    0, 1820, 1749, 7497, 7497,
-     7497, 7497, 1682, 7497,    0, 3223, 3239, 3334,    0, 1599,
-     1559, 1541, 1465,    0, 1413, 1375, 1290, 1284,    0,    0,
-
-     1251,    0, 7497, 1237, 1157,    0, 1104, 1041,    0,  989,
-      838,  779,  679,    0, 7497, 7497,  621,    0,   56,    0,
-        0,    0,    0,    0, 7497, 5943, 5949, 5959, 5967, 5971,
-     5979, 5986, 5997, 6008, 6019, 6030, 6037, 6048, 6059, 6070,
-     6081, 6092, 6103, 6114, 6125, 6136, 6147, 6158, 6169, 6180,
-     6191, 6202, 6213, 6224, 6235, 6246, 6252, 6262, 6268, 6274,
-     6279, 6287, 6296, 6302, 6306, 6312, 6319, 6330, 6341, 6352,
-     6363, 6374, 6385, 6396, 6407, 6418, 6429, 6440, 6451, 6462,
-     6473, 6484, 6495, 6506, 6517, 6528, 6539, 6550, 6561, 6572,
-     6578, 6583, 6589, 6598, 6609, 6620, 6627, 6635, 6641, 6647,
-
-     6653, 6660, 6671, 6682, 6693, 6704, 6715, 6722, 6733, 6744,
-     6755, 6766, 6777, 6788, 6799, 6810, 6821, 6832, 6843, 6854,
-     6865, 6876, 6887, 6898, 6909, 6920, 6931, 6942, 6953, 6964,
-     6975, 6981, 6992, 7003, 7014, 7021, 7029, 7035, 7041, 7048,
-     7059, 7070, 7081, 7092, 7103, 7114, 7121, 7132, 7143, 7154,
-     7165, 7176, 7187, 7198, 7209, 7220, 7231, 7242, 7253, 7264,
-     7275, 7286, 7297, 7308, 7319, 7330, 7341, 7352, 7363, 7374,
-     7385, 7396, 7402, 7410, 7416, 7423, 7434, 7445, 7452, 7463,
-     7474, 7485
+      593,    0, 4145, 7503,   99, 7503,  107, 4119,   65, 7503,
+       84, 4118,  103, 4127,   83,  643, 7503,  650,  659,  648,
+      707,  735,  740,   49,  101,  657,  716,  755,  726,  750,
+      763,  790,  795,  735,  720,  674,  705,  758,  812,  805,
+      830,  778, 4114,  829, 7503, 7503,  832, 7503,  844,  727,
+      823, 4125,  845,  850,    0,  878, 4112,  773,  894,  861,
+      888,  900, 7503,    0, 7503, 4132,  800, 4118,  901,  906,
+      941,  901, 4105, 1004, 1070, 4084, 7503,  914,  926, 1015,
+
+     4104,   83,    0,    0,  947,  969,  947, 1120, 1004, 4102,
+     1183, 1249,  803,  744, 7503,  780, 1049,  939, 1087, 1109,
+     1313, 1119,  928, 1376, 1442,  847, 7503,  935, 1059,  969,
+     1098, 1148, 1506, 1174,  975, 1569, 1635,  979, 7503,  989,
+     1140, 1038, 1212, 1277, 1699, 1182,  999, 1762, 1828,    0,
+     7503, 4122,  846, 4112, 1104, 1219, 1878, 1240, 4099, 1941,
+     2007, 1173,  992, 7503, 7503,  934, 7503,    0,    0, 1265,
+     1271, 1285, 1289, 7503, 7503, 7503, 4110, 7503, 7503, 1299,
+     1387, 7503, 7503, 7503, 1318, 7503,    0, 4087, 4074,  984,
+     4066,  687, 4065, 1005,  766,  777,  867, 4071,  979, 4004,
+
+     3995, 4019, 7503, 1392,  981, 1341, 7503, 1113,    0, 3990,
+     3991, 1012,  631, 1111,  821, 1013, 3987,   17, 3987, 3980,
+     1319, 7503, 7503, 7503, 7503, 1072, 4015, 4014, 1156, 4029,
+     1349, 1411, 1196, 1414, 1313, 1453, 1387, 1416, 1455, 1463,
+     7503, 7503, 7503, 7503, 1222, 3981, 3981, 1300, 3991, 3990,
+     3987, 1093, 3972, 3969, 1093, 1487, 7503, 1491, 4005, 1478,
+        0,    0, 3974, 1004,  933, 4019, 1497, 1219, 1527, 1551,
+        0, 7503, 1017,    0,    0, 4013, 1542, 1580, 1585, 3974,
+     1643, 1224, 1597,    0, 1281, 2055, 1115, 2102, 2168, 2234,
+     3963, 3971, 1649, 1197,    0, 1412,    0, 1546, 1677, 1762,
+
+     3970, 1774, 1227, 1608,    0, 1304, 2282, 1169, 2329, 2395,
+     2461, 1309, 7503, 1370, 1499, 1673, 1394, 1425, 1534, 1547,
+     1705, 2525, 1845, 1540, 1857, 1711, 1736, 1432, 1740, 2569,
+     1681, 2616, 2682, 2748, 1477, 7503, 1480, 1807, 1815, 1518,
+     1530, 1786, 1797, 1906, 2812, 1957, 1617, 1980, 1853, 1915,
+     1544, 1885, 2856, 1809, 2903, 2969, 3035, 1554, 7503, 1585,
+     1965, 1987, 1629, 1651, 1803, 1859, 2035, 3099, 2040, 1687,
+     2118, 1866, 2130, 1653, 1919, 3143, 1985, 3190, 3256, 3322,
+        0, 7503, 1665,    0,    0, 4007, 1727, 2245, 2059, 3968,
+     2250, 1667, 2074,    0, 1804, 3370, 1270, 3417, 3483, 3549,
+
+     1878, 2015, 2029, 2044, 2110, 2139,    0, 3983, 3968, 3964,
+     3961, 3968, 3953, 3957,  987, 3947, 3956, 1160, 3960, 3944,
+     3950, 3951, 3941, 3932, 3916, 3915, 3930, 3922, 3925, 7503,
+     2262, 1839, 2234, 2266, 1954,    0, 3916, 3927, 3916, 1053,
+     3904, 3924, 3912, 3902, 3909, 3907, 3912, 3894, 3893, 3893,
+     3890, 3906, 3898, 3905, 1810, 3934, 7503, 7503, 3920, 7503,
+     1904, 3921, 2297, 2479, 2298, 2300, 2340, 2341, 2342, 2474,
+     2473, 2484, 3899, 3900, 3891, 3917, 7503, 2351,    0,    0,
+     3833, 3826, 3815, 2487, 2361, 3814, 2494, 1882, 2340, 2365,
+     2021, 3597, 1923, 3854, 1955, 3644, 3710, 3806, 3811, 1464,
+
+     2542, 3810, 2530, 1896, 2546, 2558, 2048, 3758, 1729, 3805,
+     3871, 2632, 2088, 2764, 2550, 2581, 2640, 2589, 3935, 2501,
+     2153, 2772, 3982, 4048, 2654, 2314, 2778, 2646, 2798, 2818,
+     2824, 4112, 2786, 2159, 2847, 4159, 4225, 2849, 2495, 2919,
+     2660, 2869, 2931, 2876, 4289, 3059, 2286, 3064, 4336, 4402,
+     2940, 3809, 3035, 1951, 2585, 2784, 2257, 4450, 1989, 3849,
+     2254, 4497, 4563, 2911, 2925, 3819, 3809, 3807, 3799, 1300,
+     3815, 3812, 3803, 3799,    0, 3806, 3806, 3808, 3792, 3799,
+     3801, 3805, 3802, 3802, 3782, 3800,    0, 3789, 3788, 3785,
+     3778, 3790, 3776, 3775, 3779, 7503, 3787, 3774, 3777, 3766,
+
+     3778, 3768,  935, 3766, 3740, 3741, 3747, 3740, 3752, 2308,
+     7503,    0, 3782, 7503, 2338, 7503,    0, 3770, 3785, 2832,
+     2858, 3060, 3061, 3064, 3069,    0, 3739, 3744, 3743, 1575,
+     2622, 3069, 3076, 3739, 2499,    0,    0, 3772, 2771,    0,
+        0, 4629, 3776, 4695, 4761, 1982, 3736, 1435, 1562, 3086,
+     3093, 3735, 2784,    0, 4827, 3706, 4893, 4959, 3119, 3131,
+     2120, 3121, 3171, 2042, 2132, 2571, 2583, 3177, 3346, 2385,
+     2389, 5025, 2515, 5091, 3658, 3206, 3215, 2879, 3353, 3361,
+     2477, 2488, 2954, 3145, 3363, 3368, 2508, 2528, 5157, 2960,
+     5223, 3657, 3219, 3228, 2890, 3370, 3441, 2532, 2578, 3155,
+
+     3165, 3446, 3573, 2674, 2766, 5289, 3217, 5355, 3656, 3223,
+     3232, 3659, 2785,    0,    0, 3692, 2816,    0,    0, 5421,
+     3696, 5487, 5553, 3650, 3648,    0, 3641, 3294, 3657, 3641,
+     3655, 3636, 3651,    0, 3643, 3642, 3638, 3650, 3632, 3645,
+     3636, 3629, 3629, 3022, 3641, 3638, 7503, 7503, 3637, 7503,
+     3639, 3636, 7503, 7503, 3625, 3628, 3632, 3617, 3628, 3620,
+     3616, 3628, 3616, 3621, 3605, 3613, 3360, 3386, 3562, 3121,
+        0, 3612,    0, 2841, 3567,    0, 5619, 5685, 7503, 3657,
+     7503, 1600, 1651,    0, 5751, 5817, 2832, 5883, 1410, 2858,
+     3081,  752, 3139, 3104, 1111,    0, 3132, 1215, 3605, 3596,
+
+        0, 3589, 3584, 3579, 3576, 3576, 3561, 3566, 3567, 3557,
+        0, 3565, 3560, 3544, 3554,    0, 3535, 3541, 3535, 3524,
+     3515, 3432,    0, 3422, 3416, 3413, 3388, 7503, 7503, 3363,
+     3356, 3332, 7503, 3309, 3291, 7503, 3296, 3200, 3575, 3577,
+     3438, 3442, 3339, 3336, 3338, 1550, 1664,  883, 1372, 1867,
+     2101, 1947, 1977, 1632, 1753, 1846, 2621, 3110, 3120, 3178,
+     3402, 3178, 3153, 3160, 3130, 3078, 3082, 3063, 3040, 3039,
+     3030, 3030, 3009, 2891, 2881,    0, 2871, 2807, 2803, 2796,
+     2788, 2751, 2727, 7503, 2713, 2627, 2613, 2595, 7503, 2596,
+     7503, 3447, 3455, 3392, 2932, 3457, 1387, 1421, 1322, 1821,
+
+     1701, 1999, 1087, 1746, 2245, 2759, 3547, 3574, 3582, 3583,
+        0, 2590, 2511, 2493, 2486, 2457, 2458, 2436, 2417, 2414,
+        0, 2331,    0, 2325, 2325, 2292, 2271,    0,    0, 2259,
+     2254, 2246, 2214, 2222, 2204, 7503, 2189, 2067, 2032, 2025,
+     1975, 2066, 2138, 2053, 2361, 1952, 3472, 3375, 3598, 3401,
+     3631, 3433, 2589, 1928, 1839, 1825, 1835,    0, 1748, 1746,
+     1723, 1683, 1669,    0, 1659, 1641, 1562,    0, 1484, 1479,
+        0, 1431, 1351, 7503, 7503, 7503, 7503, 1320, 7503,    0,
+     3464, 3565, 3578,    0, 1300, 1228, 1220, 1177,    0, 1180,
+     1155, 1028, 1002,    0,    0,  967,    0, 7503,  960,  905,
+
+        0,  862,  823,    0,  813,  786,  709,  615,    0, 7503,
+     7503,  608,    0,   56,    0,    0,    0,    0,    0, 7503,
+     5949, 5955, 5965, 5973, 5977, 5985, 5992, 6003, 6014, 6025,
+     6036, 6043, 6054, 6065, 6076, 6087, 6098, 6109, 6120, 6131,
+     6142, 6153, 6164, 6175, 6186, 6197, 6208, 6219, 6230, 6241,
+     6252, 6258, 6268, 6274, 6280, 6285, 6293, 6302, 6308, 6312,
+     6318, 6325, 6336, 6347, 6358, 6369, 6380, 6391, 6402, 6413,
+     6424, 6435, 6446, 6457, 6468, 6479, 6490, 6501, 6512, 6523,
+     6534, 6545, 6556, 6567, 6578, 6584, 6589, 6595, 6604, 6615,
+     6626, 6633, 6641, 6647, 6653, 6659, 6666, 6677, 6688, 6699,
+
+     6710, 6721, 6728, 6739, 6750, 6761, 6772, 6783, 6794, 6805,
+     6816, 6827, 6838, 6849, 6860, 6871, 6882, 6893, 6904, 6915,
+     6926, 6937, 6948, 6959, 6970, 6981, 6987, 6998, 7009, 7020,
+     7027, 7035, 7041, 7047, 7054, 7065, 7076, 7087, 7098, 7109,
+     7120, 7127, 7138, 7149, 7160, 7171, 7182, 7193, 7204, 7215,
+     7226, 7237, 7248, 7259, 7270, 7281, 7292, 7303, 7314, 7325,
+     7336, 7347, 7358, 7369, 7380, 7391, 7402, 7408, 7416, 7422,
+     7429, 7440, 7451, 7458, 7469, 7480, 7491
     } ;
 
-static yyconst flex_int16_t yy_def[1183] =
+static yyconst flex_int16_t yy_def[1178] =
     {   0,
-     1025,    1,    1,    3, 1025,    5, 1025,    7, 1025,    9,
-     1025,   11,    9,    9, 1025,   15, 1025,   17, 1025,   19,
-     1025,   21, 1025, 1025, 1025, 1025, 1025, 1025, 1026, 1025,
-     1027, 1025, 1025, 1028, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1029, 1029, 1029, 1029,
-     1029, 1029, 1029, 1029, 1025, 1025, 1025, 1025, 1025, 1025,
-       39, 1025, 1025, 1029, 1025, 1025, 1025, 1025, 1025, 1026,
-     1030, 1028, 1025, 1031,   41, 1025, 1025, 1032, 1032, 1032,
-     1025, 1025, 1025, 1033, 1025, 1033, 1034, 1035, 1033, 1033,
-     1033,   91, 1033, 1036, 1036, 1033, 1025, 1025,   41, 1025,
-
-     1037, 1037, 1038, 1038, 1039, 1038, 1038, 1038,  108, 1038,
-     1040, 1040, 1026, 1041, 1025, 1041, 1042, 1043, 1041, 1041,
-     1041,  121, 1041, 1044, 1044, 1045, 1025, 1045, 1046, 1047,
-     1045, 1045, 1045,  133, 1045, 1048, 1048, 1049, 1025, 1049,
-     1050, 1051, 1049, 1049, 1049,  145, 1049, 1052, 1052, 1053,
-     1025, 1053, 1054, 1055, 1053, 1053, 1053,  157, 1053, 1056,
-     1056, 1025, 1025, 1025, 1025, 1026, 1025, 1026, 1057, 1057,
-     1057, 1057, 1057, 1025, 1025, 1025, 1058, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1059, 1059, 1059, 1059,
-     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
-
-     1059, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1060, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1061, 1062, 1063,
-     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
-     1062, 1025, 1025, 1025, 1025, 1025, 1059, 1059, 1059, 1059,
-     1059, 1059, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1064,
-     1064, 1065, 1066, 1066, 1066, 1067, 1063, 1067, 1067, 1025,
-     1025, 1068, 1025, 1069, 1068, 1069, 1070, 1068, 1068, 1068,
-     1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1071, 1025,
-     1071, 1068, 1025, 1025, 1061, 1072, 1073, 1072, 1072, 1072,
-
-     1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1074,
-     1025, 1074, 1075, 1025, 1075, 1076, 1076, 1075, 1076, 1077,
-     1077, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
-     1075, 1075, 1078, 1025, 1078, 1079, 1025, 1079, 1080, 1080,
-     1079, 1080, 1081, 1081, 1079, 1079, 1079, 1079, 1079, 1079,
-     1079, 1079, 1079, 1079, 1079, 1082, 1025, 1082, 1083, 1025,
-     1083, 1084, 1084, 1083, 1084, 1085, 1085, 1083, 1083, 1083,
-     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1086, 1025,
-     1086, 1087, 1025, 1088, 1087, 1088, 1089, 1087, 1087, 1087,
-     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1090, 1025,
-
-     1090, 1025, 1091, 1091, 1091, 1091, 1025, 1092, 1092, 1092,
-     1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
-     1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
-     1025, 1025, 1025, 1025, 1025, 1025, 1093, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1094, 1095, 1025, 1025, 1025,
-     1025, 1096, 1097, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
-     1098, 1098, 1098, 1098, 1092, 1092, 1025, 1099, 1025, 1099,
-     1100, 1101, 1101, 1101, 1101, 1102, 1103, 1103, 1103, 1103,
-     1103, 1103, 1103, 1103, 1104, 1105, 1106, 1107, 1025, 1103,
-
-     1025, 1108, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
-     1110, 1111, 1025, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
-     1112, 1113, 1114, 1115, 1116, 1025, 1117, 1117, 1117, 1117,
-     1117, 1117, 1117, 1117, 1118, 1119, 1120, 1121, 1025, 1122,
-     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123, 1124, 1125,
-     1126, 1025, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
-     1128, 1129, 1130, 1131, 1025, 1025, 1025, 1132, 1132, 1132,
-     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
-     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
-     1132, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1133, 1025, 1133, 1134, 1025, 1135, 1025, 1135, 1136,
-     1025, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1138, 1139,
-     1139, 1139, 1140, 1140, 1141, 1141, 1141, 1142, 1141, 1142,
-     1143, 1144, 1141, 1144, 1145, 1141, 1146, 1146, 1141, 1025,
-     1147, 1147, 1148, 1148, 1148, 1149, 1148, 1150, 1148, 1151,
-     1151, 1152, 1152, 1152, 1153, 1153, 1152, 1153, 1154, 1154,
-     1155, 1155, 1152, 1155, 1156, 1152, 1025,  677, 1157, 1157,
-     1157, 1158, 1158, 1157, 1158, 1159, 1159, 1160, 1160, 1157,
-     1160, 1161, 1157, 1025,  694, 1162, 1162, 1162, 1163, 1163,
-
-     1162, 1163, 1164, 1164, 1165, 1165, 1162, 1165, 1166, 1162,
-     1025,  711, 1167, 1167, 1167, 1168, 1167, 1168, 1169, 1170,
-     1167, 1170, 1171, 1167, 1172, 1172, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1174,
-     1174, 1174, 1174, 1174, 1175, 1175, 1175, 1176, 1176, 1177,
-     1178, 1178, 1025, 1177, 1025, 1179, 1179, 1180, 1181, 1181,
-     1182, 1025,  792, 1157,  694,  694, 1162,  711,  711, 1167,
-
-      726,  726, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1174, 1174, 1174, 1174, 1174, 1175, 1176, 1176,
-      782,  782, 1179, 1179,  790,  790,  792,  792,  694,  694,
-      711,  711,  726,  726, 1173, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1174, 1174, 1025, 1176,
-
-     1176,  782,  782, 1179, 1179,  790,  790,  792,  792,  694,
-      694,  711,  711,  726,  726, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1177, 1177, 1180,
-     1180, 1182, 1182, 1157, 1157, 1162, 1162, 1167, 1167, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1177, 1182, 1157, 1162, 1167, 1173,
-     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
-
-     1173, 1173, 1025, 1025, 1025, 1173, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173, 1025, 1025, 1173, 1173, 1173, 1173,
-     1173, 1173, 1173, 1173,    0, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025
+     1020,    1,    1,    3, 1020,    5, 1020,    7, 1020,    9,
+     1020,   11,    9,    9, 1020,   15, 1020,   17, 1020,   19,
+     1020,   21, 1020, 1020, 1020, 1020, 1020, 1020, 1021, 1020,
+     1022, 1020, 1020, 1023, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1024, 1024, 1024, 1024,
+     1024, 1024, 1024, 1024, 1020, 1020, 1020, 1020, 1020, 1020,
+       39, 1020, 1020, 1024, 1020, 1020, 1020, 1020, 1020, 1021,
+     1025, 1023, 1020, 1026,   41, 1020, 1020, 1027, 1027, 1027,
+     1020, 1020, 1020, 1028, 1020, 1028, 1029, 1030, 1028, 1028,
+     1028,   91, 1028, 1031, 1031, 1028, 1020, 1020,   41, 1020,
+
+     1032, 1032, 1033, 1033, 1034, 1033, 1033, 1033,  108, 1033,
+     1035, 1035, 1021, 1036, 1020, 1036, 1037, 1038, 1036, 1036,
+     1036,  121, 1036, 1039, 1039, 1040, 1020, 1040, 1041, 1042,
+     1040, 1040, 1040,  133, 1040, 1043, 1043, 1044, 1020, 1044,
+     1045, 1046, 1044, 1044, 1044,  145, 1044, 1047, 1047, 1048,
+     1020, 1048, 1049, 1050, 1048, 1048, 1048,  157, 1048, 1051,
+     1051, 1020, 1020, 1020, 1020, 1021, 1020, 1021, 1052, 1052,
+     1052, 1052, 1052, 1020, 1020, 1020, 1053, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1054, 1054, 1054, 1054,
+     1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
+
+     1054, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1055, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1056, 1057, 1058,
+     1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057,
+     1020, 1020, 1020, 1020, 1020, 1054, 1054, 1054, 1054, 1054,
+     1054, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1059, 1059,
+     1060, 1061, 1061, 1061, 1062, 1058, 1062, 1062, 1020, 1020,
+     1063, 1020, 1064, 1063, 1064, 1065, 1063, 1063, 1063, 1063,
+     1063, 1063, 1063, 1063, 1063, 1063, 1063, 1066, 1020, 1066,
+     1063, 1020, 1020, 1056, 1067, 1068, 1067, 1067, 1067, 1067,
+
+     1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1069, 1020,
+     1069, 1070, 1020, 1070, 1071, 1071, 1070, 1071, 1072, 1072,
+     1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
+     1070, 1073, 1020, 1073, 1074, 1020, 1074, 1075, 1075, 1074,
+     1075, 1076, 1076, 1074, 1074, 1074, 1074, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1077, 1020, 1077, 1078, 1020, 1078,
+     1079, 1079, 1078, 1079, 1080, 1080, 1078, 1078, 1078, 1078,
+     1078, 1078, 1078, 1078, 1078, 1078, 1078, 1081, 1020, 1081,
+     1082, 1020, 1083, 1082, 1083, 1084, 1082, 1082, 1082, 1082,
+     1082, 1082, 1082, 1082, 1082, 1082, 1082, 1085, 1020, 1085,
+
+     1020, 1086, 1086, 1086, 1086, 1020, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
+     1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1020,
+     1020, 1020, 1020, 1020, 1020, 1088, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1089, 1090, 1020, 1020, 1020, 1020,
+     1091, 1092, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1087, 1087, 1020, 1094, 1020, 1094, 1095, 1096,
+     1096, 1096, 1096, 1097, 1098, 1098, 1098, 1098, 1098, 1098,
+     1098, 1098, 1099, 1100, 1101, 1102, 1020, 1098, 1020, 1103,
+
+     1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1105, 1106,
+     1020, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1108,
+     1109, 1110, 1111, 1020, 1112, 1112, 1112, 1112, 1112, 1112,
+     1112, 1112, 1113, 1114, 1115, 1116, 1020, 1117, 1117, 1117,
+     1117, 1117, 1117, 1117, 1117, 1118, 1119, 1120, 1121, 1020,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123, 1124,
+     1125, 1126, 1020, 1020, 1020, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1128,
+     1020, 1128, 1129, 1020, 1130, 1020, 1130, 1131, 1020, 1132,
+     1132, 1132, 1132, 1132, 1132, 1133, 1134, 1134, 1134, 1135,
+     1135, 1136, 1136, 1136, 1137, 1136, 1137, 1138, 1139, 1136,
+     1139, 1140, 1136, 1141, 1141, 1136, 1020, 1142, 1142, 1143,
+     1143, 1143, 1144, 1143, 1145, 1143, 1146, 1146, 1147, 1147,
+     1147, 1148, 1148, 1147, 1148, 1149, 1149, 1150, 1150, 1147,
+     1150, 1151, 1147, 1020,  674, 1152, 1152, 1152, 1153, 1153,
+     1152, 1153, 1154, 1154, 1155, 1155, 1152, 1155, 1156, 1152,
+     1020,  691, 1157, 1157, 1157, 1158, 1158, 1157, 1158, 1159,
+
+     1159, 1160, 1160, 1157, 1160, 1161, 1157, 1020,  708, 1162,
+     1162, 1162, 1163, 1162, 1163, 1164, 1165, 1162, 1165, 1166,
+     1162, 1167, 1167, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1169, 1169, 1169, 1169,
+     1170, 1170, 1170, 1171, 1171, 1172, 1173, 1173, 1020, 1172,
+     1020, 1174, 1174, 1175, 1176, 1176, 1177, 1020,  788, 1152,
+      691,  691, 1157,  708,  708, 1162,  723,  723, 1168, 1168,
+
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1169, 1169,
+     1169, 1169, 1170, 1171, 1171,  778,  778, 1174, 1174,  786,
+      786,  788,  788,  691,  691,  708,  708,  723,  723, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1169, 1169, 1020, 1171, 1171,  778,  778, 1174, 1174,
+
+      786,  786,  788,  788,  691,  691,  708,  708,  723,  723,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1172, 1172, 1175, 1175, 1177, 1177, 1152, 1152,
+     1157, 1157, 1162, 1162, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1172,
+     1177, 1152, 1157, 1162, 1168, 1168, 1168, 1168, 1168, 1168,
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1020, 1020, 1020,
+
+     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1020,
+     1020, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,    0,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020
     } ;
 
-static yyconst flex_int16_t yy_nxt[7564] =
+static yyconst flex_int16_t yy_nxt[7570] =
     {   0,
        24,   25,   26,   27,   25,   28,   29,   30,   31,   32,
        33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
@@ -813,14 +810,14 @@
        47,   47,   48,   47,   48,   47,   48,   48,   47,   24,
        47,   47,   47,   47,   47,   47,   47,   49,   47,   50,
        47,   47,   51,   47,   52,   47,   47,   53,   47,   54,
-       47,   47,   47,   47,   55,   56,   58,  452,   59,   58,
-       24,  167,  221,  222,   24,   24,  453,   24,   60,  113,
+       47,   47,   47,   47,   55,   56,   58,  451,   59,   58,
+       24,  167,  221,  222,   24,   24,  452,   24,   60,  113,
        60,   61,   24,   81,  113,   82,   81,   62,   63,   24,
        24,   41,   42,   42,   42,  178,   41,   42,   42,   42,
 
-      162, 1024,  162,  162,  168,  267,   83,  179,  162,  164,
+      162, 1019,  162,  162,  168,  266,   83,  179,  162,  164,
       162,  162,   47,  175,   47,  163,  170,   47,  171,   47,
-      172,  173,   64,  163,   47,  223,  224,  176,  295,   24,
+      172,  173,   64,  163,   47,  223,  224,  176,  294,   24,
        24,   66,   67,   68,   69,   67,   66,   70,   66,   71,
        66,   66,   72,   66,   73,   66,   73,   74,   66,   75,
        76,   76,   76,   66,   77,   66,   66,   78,   78,   78,
@@ -879,769 +876,769 @@
       160,  160,  150,  160,  160,  160,  160,  160,  160,  160,
       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
       161,  160,  160,  160,  160,  160,  160,  150,  150,  180,
-      447,  181,  181,  181,  181,  202,  180,  182,  181,  181,
-      181,  181,  203, 1023,  183,  184,  448,  185,  185,  185,
-      185,  225,  226,  186,  427,  187,  187,  187,  187,  187,
-      188,  187,  187,  187,  187,  187,  187,  187,  428,  187,
+     1018,  181,  181,  181,  181,  202,  180,  182,  181,  181,
+      181,  181,  203, 1017,  183,  184,  441,  185,  185,  185,
+      185,  225,  226,  186,  442,  187,  187,  187,  187,  187,
+      188,  187,  187,  187,  187,  187,  187,  187,  243,  187,
 
       187,  189,  190,  187,  191,  187,  192,  187,  193,  194,
       195,  196,  187,  197,  187,  198,  199,  200,  187,  187,
-      187,  187,  201,  204,  227,  181,  181,  181,  181,  167,
-      244,  228,  223,  224,  227,  205,  206, 1022,  230,  242,
-      207,  228,  208,  227,  246,  209,  246,  246,  230,  205,
-      228,  204,  206,  181,  181,  181,  181,  230,  228,  422,
-      208,  423,  168,  227,  206,  267,  314,  315,  207,  209,
-      228,  245,  234,  231,  231,  231,  231,  230,  235,  243,
-      206,  210,  314,  315,  356,  232,  211,  860,  233,  212,
-      213,  214,  215,  216,  217,  227,  227,  218,  227,  219,
-
-      220,  227,  228,  228,  228,  228,  228,  227,  228,  230,
-      230,  267,  230,  267,  228,  230,  246,  164,  246,  246,
-      180,  230,  181,  181,  181,  181,  257,  258,  259,  257,
-      337,  338,  236,  275,  269,  239,  261, 1021,  261,  238,
-      261,  261,  210,  420,  239,  241,  237,  421,  240, 1025,
-      253,  213,  214,  254,  255,  217,  257,  258,  259,  257,
-      180,  220,  181,  181,  181,  181,  276,  187,  247,  296,
-      187,  167,  187,  177,  248,  249,  250,  251,  298,  252,
-      262,  187,  187,  187,  270,  258,  271,  270,  187,  267,
-      185,  185,  185,  185,  204, 1020,  181,  181,  181,  181,
-
-      270,  258,  271,  270,  168,  337,  338,  206,  424,  228,
-      425,  207,  268,  268,  268,  268,  267,  264,  280,  280,
-      280,  280,  265,  206,  278,  502,  279,  279,  279,  279,
-      360,  361,  272,  185,  185,  185,  185,  314,  317,  272,
-      762,  318,  272,  314,  321,  385,  272,  360,  361,  763,
-      281,  282,  318,  279,  279,  279,  279,  272,  294,  294,
-      294,  294,  296,  283,  284,  293,  272,  167,  285,  296,
-      286,  444,  296,  287,  319,  445,  296,  283,  386,  299,
-      284,  300,  300,  300,  300,  414,  449,  296,  286,  446,
-      415,  450,  301,  301,  301,  301,  296,  287,  272,  272,
-
-      168,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  272,  379,  272,  272,  862,  314,  315,  902,
-      290,  272,  272,  272,  302,  204,  289,  294,  294,  294,
-      294,  322, 1019,  323,  323,  323,  323,  272,  206,  314,
-      315,  411,  207,  337,  344,  337,  340,  360,  367,  341,
-      433,  433,  341,  412,  206,  579,  364,  580,  337,  338,
-      332,  456,  272,  272,  272,  272,  457,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  355,
-      272,  272,  342,  314,  315, 1018,  290,  272,  272,  272,
-      360,  363,  440,  441,  364,  399,  337,  338,  864,  324,
-
-      324,  324,  324,  272,  275,  360,  361,  575,  442,  291,
-      345,  313,  346,  346,  346,  346,  443,  402,  313,  402,
-      402,  313,  337,  338,  576,  313,  378,  365,  272,  272,
-      303,  325,  300,  300,  300,  300,  313,  276,  347,  347,
-      347,  347,  304,  305,  333,  313,  858,  306,  162,  307,
-      162,  162,  308,  417,  459,  460,  304,  418,  336,  305,
-     1017,  419,  296,  163,  495,  336,  177,  307,  336,  496,
-      348,  298,  336,  436,  436,  436,  308,  296,  296,  296,
-      296,  296,  296,  336,  296,  296,  296,  296,  296,  296,
-      296,  296,  336,  296,  296,  360,  361,  440,  477,  311,
-
-      296,  296,  296,  388, 1016,  389,  389,  389,  389,  368,
-      456,  369,  369,  369,  369,  511,  296,  390,  390,  390,
-      390,  360,  361,  403,  403,  403,  403,  404,  404,  404,
-      404,  405,  405,  405,  405,  490,  490,  370,  370,  370,
-      370,  296,  296,  296,  296,  296,  296,  296,  296,  391,
-      296,  296,  296,  296,  296,  296,  296,  296,  456,  296,
-      296,  506,  506,  457,  359,  311,  296,  296,  296,  371,
-      382,  359,  227,  484,  359,  731,  458,  382,  359,  228,
-      382,  485,  296, 1015,  382,  385,  230,  732,  312,  359,
-      406,  406,  406,  406,  246,  382,  246,  246,  359,  185,
-
-      185,  185,  185, 1014,  382,  314,  315,  296,  296,  314,
-      315,  257,  258,  259,  257,  314,  315,  204,  386,  181,
-      181,  181,  181,  326,  227,  323,  323,  323,  323,  417,
-      206,  228,  267,  418,  207,  327,  328,  476,  230,  946,
-      329, 1013,  330,  314,  315,  331,  206, 1012,  434,  327,
-      434,  227,  328,  435,  435,  435,  435,  267,  228,  786,
-      330,  464,  464,  464,  464,  230,  493,  493,  493,  331,
-      313,  313,  314,  315,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  613,  313,  313,  185,  185,
-      185,  185,  334,  313,  313,  313,  509,  509,  509,  407,
-
-      432,  432,  432,  432,  910,  227,  227,  227,  356,  313,
-      227,  407,  228,  228,  228,  407,  227,  228,  614,  230,
-      230,  230,  954,  228,  230,  228,  561,  407,  314,  317,
-      230,  562,  267, 1011,  313,  313,  313,  313,  314,  315,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  465,  313,  313, 1010,  466,  267,  467,  334,  313,
-      313,  313,  227,  468,  227,  227,  472,  356,  486,  228,
-      227,  228,  228,  314,  321,  313,  230,  228,  230,  230,
-      947,  335,  318,  787,  230,  257,  258,  259,  257,  480,
-      480,  480,  480,  479,  270,  258,  271,  270,  267,  471,
-
-      313,  313,  337,  338,  469,  470,  270,  258,  271,  270,
-      314,  315,  474,  473,  314,  315,  349, 1009,  346,  346,
-      346,  346,  280,  280,  280,  280,  517,  517,  350,  351,
-      314,  321,  946,  352,  984,  353,  314,  315,  354,  318,
-      337,  338,  350,  228,  228,  351,  268,  268,  268,  268,
-      267,  267,  491,  353,  491,  337,  338,  492,  492,  492,
-      492,  515,  354,  336,  336,  337,  338,  336,  336,  336,
-      336,  336,  336,  336,  336,  336,  336,  336,  778,  336,
-      336,  301,  301,  301,  301,  357,  336,  336,  336,  903,
-      282, 1008,  279,  279,  279,  279,  289,  280,  280,  280,
-
-      280,  911,  336,  284,  507,  356,  507,  285,  487,  508,
-      508,  508,  508,  314,  317,  337,  338,  318, 1007,  284,
-      337,  340,  337,  338,  487,  360,  361,  336,  336,  336,
-      336,  337,  338,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  267,  336,  336,  360,  361, 1006,
-      319,  357,  336,  336,  336,  489,  489,  489,  489,  204,
-      908,  294,  294,  294,  294,  333,  487,  904,  336,  314,
-      317,  912,  206,  318,  358,  379,  207,  314,  315,  360,
-      361,  522,  487,  337,  338,  267,  523,  303,  206,  300,
-      300,  300,  300,  336,  336,  360,  361,  595,  337,  344,
-
-      305,  314,  315,  228,  306,  596,  319,  341,  597,  372,
-      267,  369,  369,  369,  369,  854,  305,  324,  324,  324,
-      324,  373,  374,  314,  315,  913,  375, 1005,  376,  379,
-      528,  377,  314,  315,  518,  373,  518,  779,  374,  519,
-      519,  519,  519,  337,  344,  948,  376,  985,  520,  520,
-      520,  618,  341,  360,  363,  377,  359,  359,  360,  361,
-      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
-      359,  267,  359,  359,  301,  301,  301,  301,  380,  359,
-      359,  359,  337,  338,  619,  503,  505,  505,  505,  505,
-      360,  361,  337,  338,  905,  359,  914,  503,  530,  530,
-
-      399,  503, 1004,  337,  340,  360,  367,  341,  533,  533,
-      533,  337,  340,  503,  364,  341,  360,  361,  556,  556,
-      359,  359,  359,  359,  360,  361,  359,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  541,  359,  359,
-      342,  314,  315,  952,  380,  359,  359,  359,  342,  390,
-      390,  390,  390,  314,  315,  360,  367,  324,  324,  324,
-      324,  359,  360,  363,  364, 1003,  364,  381,  514,  516,
-      516,  516,  516,  337,  338, 1002,  402,  535,  402,  402,
-      514,  955,  536, 1001,  514,  267,  359,  359,  392,  333,
-      389,  389,  389,  389,  360,  363,  514, 1000,  364,  365,
-
-      393,  394,  337,  338,  639,  395,  999,  396,  433,  433,
-      397,  337,  338,  853,  393,  490,  490,  394,  347,  347,
-      347,  347,  531,  643,  531,  396,  356,  532,  532,  532,
-      532,  365,  506,  506,  397,  382,  382,  640,  382,  382,
-      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
-      909,  382,  382,  337,  338,  333,  644,  400,  382,  382,
-      382,  227,  360,  361,  998,  360,  361,  997,  228,  347,
-      347,  347,  347,  996,  382,  230,  337,  338,  543,  543,
-      527,  370,  370,  370,  370,  559,  559,  559,  403,  403,
-      403,  403,  529,  529,  529,  529,  527,  556,  556,  382,
-
-      382,  382,  382,  527,  382,  382,  382,  382,  382,  382,
-      382,  382,  382,  382,  382,  382,  995,  382,  382,  527,
-      360,  361,  717,  400,  382,  382,  382,  360,  361,  436,
-      436,  436,  360,  361,  267,  994,  370,  370,  370,  370,
-      382,  783,  784,  546,  546,  546,  401,  540,  542,  542,
-      542,  542,  360,  361,  993,  718,  548,  906,  651,  540,
-      992,  549,  652,  540,  310,  382,  382,  494,  494,  494,
-      494,  390,  390,  390,  390,  540,  494,  494,  494,  557,
-      948,  557,  553,  721,  558,  558,  558,  558,  314,  315,
-      494,  494,  494,  494,  494,  494,  272,  272,  553,  272,
-
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  991,  272,  272,  360,  361,  722,  990,  290,  272,
-      272,  272,  227,  314,  666,  544,  959,  544,  289,  228,
-      545,  545,  545,  545,  951,  272,  230,  555,  555,  555,
-      555,  404,  404,  404,  404,  493,  493,  493,  553,  405,
-      405,  405,  405,  406,  406,  406,  406,  509,  509,  509,
-      272,  272,  272,  272,  553,  272,  272,  272,  497,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  498,  498,
-      498,  498,  498,  498,  498,  498,  498,  498,  498,  498,
-
-      498,  272,  498,  498,  498,  498,  498,  498,  498,  498,
-      498,  498,  498,  498,  498,  498,  498,  498,  498,  498,
-      498,  498,  498,  498,  498,  498,  272,  272,  272,  272,
-      949,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  272,  956,  272,  272,  435,  435,  435,  435,
-      290,  272,  272,  272,  613,  392,  947,  389,  389,  389,
-      389,  983,  432,  432,  432,  432,  915,  272,  394,  566,
-      399,  566,  395,  407,  567,  567,  567,  567,  435,  435,
-      435,  435,  314,  670,  394,  982,  499,  614,  379,  407,
-      949,  667,  272,  272,  510,  510,  510,  510,  981,  227,
-
-      227,  227,  227,  510,  510,  510,  228,  228,  228,  228,
-      314,  315,  980,  230,  230,  230,  230,  510,  510,  510,
-      510,  510,  510,  296,  296,  296,  296,  296,  296,  979,
-      296,  296,  296,  296,  296,  296,  296,  296,  289,  296,
-      296,  978,  227,  624,  623,  311,  296,  296,  296,  228,
-      227,  480,  480,  480,  480,  479,  230,  228,  314,  315,
-      664,  635,  296,  635,  230,  977,  636,  636,  636,  636,
-      492,  492,  492,  492,  517,  517,  622,  492,  492,  492,
-      492,  508,  508,  508,  508,  314,  315,  296,  296,  296,
-      296,  296,  296,  296,  296,  462,  296,  296,  296,  296,
-
-      296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
-      296,  296,  296,  296,  296,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  296,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
-      512,  512,  512,  296,  296,  296,  296,  296,  296,  296,
-      296,  976,  296,  296,  296,  296,  296,  296,  296,  296,
-      957,  296,  296,  975,  227,  228,  227,  311,  296,  296,
-      296,  228,  267,  228,  337,  338,  227,  950,  230,  984,
-      230,  314,  666,  228,  296,  667,  653,  958,  653,  989,
-
-      230,  654,  654,  654,  654,  296,  633,  314,  672,  615,
-      634,  907,  625,  513,  657,  379,  626,  627,  310,  296,
-      296,  314,  315,  628,  508,  508,  508,  508,  668,  974,
-      489,  489,  489,  489,  681,  326,  973,  323,  323,  323,
-      323,  487,  505,  505,  505,  505,  337,  338,  328,  972,
-      314,  672,  329,  503,  673,  337,  338,  487,  971,  314,
-      315,  618,  530,  530,  328,  314,  315,  639,  970,  503,
-      662,  969,  662,  337,  683,  663,  663,  663,  663,  314,
-      315,  521,  521,  521,  521,  314,  315,  674,  360,  361,
-      521,  521,  521,  968,  619,  519,  519,  519,  519,  967,
-
-      640,  520,  520,  520,  521,  521,  521,  521,  521,  521,
-      313,  313,  314,  315,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  958,  313,  313,  314,  315,
-      337,  687,  334,  313,  313,  313,  337,  338,  698,  684,
-      314,  315,  337,  338,  516,  516,  516,  516,  966,  313,
-      337,  338,  533,  533,  533,  514,  519,  519,  519,  519,
-      965,  679,  964,  679,  360,  704,  680,  680,  680,  680,
-      399,  514,  963,  701,  313,  313,  313,  313,  314,  315,
-      313,  313,  524,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-
-      313,  313,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  313,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      313,  313,  313,  313,  314,  315,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  962,  313,  313,
-      337,  338,  314,  315,  334,  313,  313,  313,  360,  361,
-      950,  643,  337,  338,  337,  689,  529,  529,  529,  529,
-      951,  313,  337,  683,  543,  543,  684,  527,  532,  532,
-      532,  532,  337,  689,  337,  338,  690,  959,  360,  361,
-
-      526,  360,  361,  527,  644,  791,  313,  313,  337,  338,
-      532,  532,  532,  532,  545,  545,  545,  545,  310,  685,
-      360,  361,  349,  961,  346,  346,  346,  346,  310,  691,
-      360,  361,  559,  559,  559,  351,  546,  546,  546,  352,
-      960,  696,  399,  696,  360,  361,  697,  697,  697,  697,
-      296,  351,  337,  338,  615,  555,  555,  555,  555,  657,
-      545,  545,  545,  545,  360,  700,  553,  945,  534,  534,
-      534,  534,  558,  558,  558,  558,  944,  534,  534,  534,
-      360,  700,  553,  943,  701,  717,  360,  706,  360,  361,
-      707,  534,  534,  534,  534,  534,  534,  336,  336,  337,
-
-      338,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  942,  336,  336,  360,  361,  702,  718,  357,
-      336,  336,  336,  708,  558,  558,  558,  558,  314,  670,
-      941,  542,  542,  542,  542,  940,  336,  667,  713,  939,
-      713,  938,  540,  714,  714,  714,  714,  567,  567,  567,
-      567,  567,  567,  567,  567,  314,  315,  937,  540,  524,
-      936,  336,  336,  336,  336,  337,  338,  336,  336,  537,
-      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  336,  336,  336,  336,  336,  538,
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-
-      538,  538,  336,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  336,  336,  336,
-      336,  337,  338,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  935,  336,  336,  934,  227,  227,
-      227,  357,  336,  336,  336,  228,  228,  228,  227,  227,
-      227,  933,  230,  230,  230,  228,  228,  228,  336,  227,
-      360,  706,  230,  230,  230,  932,  228,  636,  636,  636,
-      636,  770,  931,  230,  721,  314,  315,  539,  636,  636,
-      636,  636,  930,  336,  336,  360,  361,  337,  338,  771,
-
-      772,  314,  670,  929,  773,  654,  654,  654,  654,  372,
-      667,  369,  369,  369,  369,  314,  315,  722,  774,  928,
-      337,  338,  374,  356,  859,  927,  375,  654,  654,  654,
-      654,  663,  663,  663,  663,  314,  315,  926,  374,  360,
-      361,  337,  687,  337,  338,  337,  338,  360,  361,  537,
-      684,  663,  663,  663,  663,  547,  547,  547,  547,  680,
-      680,  680,  680,  794,  547,  547,  547,  314,  666,  379,
-      861,  667,  925,  314,  666,  399,  863,  667,  547,  547,
-      547,  547,  547,  547,  359,  359,  360,  361,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  359,  359,  953,
-
-      359,  359,  337,  338,  668,  924,  380,  359,  359,  359,
-      668,  360,  361,  337,  687,  360,  361,  228,  680,  680,
-      680,  680,  684,  359,  267,  314,  315,  697,  697,  697,
-      697,  697,  697,  697,  697,  360,  704,  360,  704,  360,
-      361,  337,  338,  550,  701,  333,  701,  900,  359,  359,
-      359,  359,  360,  361,  359,  359,  550,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  551,  551,  551,  551,
-      551,  551,  551,  551,  551,  551,  551,  551,  551,  359,
-      551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-
-      551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-      551,  551,  551,  551,  359,  359,  359,  359,  360,  361,
-      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
-      359,  806,  359,  359,  360,  361,  360,  361,  380,  359,
-      359,  359,  314,  672,  807,  923,  673,  823,  922,  314,
-      672,  808,  921,  673,  920,  359,  916,  337,  683,  337,
-      683,  684,  824,  684,  337,  689,  337,  689,  690,  825,
-      690,  896,  895,  899,  552,  899,  899,  797,  894,  674,
-      359,  359,  560,  560,  560,  560,  674,  714,  714,  714,
-      714,  560,  560,  560,  685,  228,  685,  714,  714,  714,
-
-      714,  691,  267,  691,  893,  560,  560,  560,  560,  560,
-      560,  382,  382,  892,  382,  382,  382,  382,  382,  382,
-      382,  382,  382,  382,  382,  382,  891,  382,  382,  890,
-      849,  889,  228,  400,  382,  382,  382,  360,  700,  267,
-      227,  701,  360,  700,  227,  227,  701,  228,  917,  946,
-      382,  228,  228,  227,  230,  946,  888,  887,  230,  230,
-      228,  918,  899,  886,  899,  899,  228,  230,  919,  850,
-      314,  315,  953,  267,  702,  382,  382,  382,  382,  702,
-      382,  382,  382,  563,  382,  382,  382,  382,  382,  382,
-      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
-
-      382,  382,  382,  564,  564,  564,  564,  564,  564,  564,
-      564,  564,  564,  564,  564,  564,  382,  564,  564,  564,
-      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
-      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
-      564,  382,  382,  382,  382,  885,  382,  382,  382,  382,
-      382,  382,  382,  382,  382,  382,  382,  382,  884,  382,
-      382,  337,  338,  955,  883,  400,  382,  382,  382,  360,
-      706,  227,  227,  707,  227,  882,  360,  706,  228,  228,
-      707,  228,  382,  227,  947,  230,  230,  228,  230,  227,
-      228,  227,  881,  880,  267,  228,  228,  230,  228,  879,
-
-      878,  565,  267,  230,  877,  230,  708,  382,  382,  494,
-      494,  494,  494,  708,  843,  845,  844,  901,  494,  494,
-      494,  876,  846,  314,  315,  952,  897,  986,  360,  361,
-      957,  875,  494,  494,  494,  494,  494,  494,  272,  272,
-      847,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  272,  874,  272,  272,  873,  227,  872,  871,
-      646,  272,  272,  272,  228,  947,  337,  338,  954,  227,
-      987,  230,  870,  869,  868,  867,  228,  272,  360,  361,
-      956,  866,  988,  230,  865,  783,  848,  842,  841,  840,
-      839,  838,  837,  836,  898,  835,  834,  833,  832,  831,
-
-      830,  829,  272,  272,  272,  272,  828,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  289,
-      272,  272,  289,  289,  289,  289,  290,  272,  272,  272,
-      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-      289,  289,  289,  272,  289,  289,  289,  289,  289,  289,
-      647,  289,  289,  289,  648,  289,  289,  289,  289,  289,
-      289,  289,  289,  289,  289,  289,  289,  289,  272,  272,
-      510,  510,  510,  510,  827,  826,  822,  821,  820,  510,
-      510,  510,  819,  818,  817,  816,  815,  814,  813,  812,
-      811,  810,  809,  510,  510,  510,  510,  510,  510,  296,
-
-      296,  296,  296,  296,  296,  805,  296,  296,  296,  296,
-      296,  296,  296,  296,  804,  296,  296,  803,  563,  717,
-      800,  659,  296,  296,  296,  799,  796,  793,  462,  788,
-      785,  497,  639,  780,  777,  776,  775,  462,  296,  621,
-      613,  769,  768,  767,  766,  765,  764,  761,  760,  759,
-      758,  757,  756,  755,  754,  753,  752,  751,  750,  749,
-      748,  747,  746,  296,  296,  296,  296,  296,  296,  296,
-      296,  745,  296,  296,  296,  296,  296,  296,  296,  296,
-      310,  296,  296,  310,  310,  310,  310,  311,  296,  296,
-      296,  310,  310,  310,  310,  310,  310,  310,  310,  310,
-
-      310,  310,  310,  310,  296,  310,  310,  310,  310,  310,
-      310,  660,  310,  310,  310,  661,  310,  310,  310,  310,
-      310,  310,  310,  310,  310,  310,  310,  310,  310,  296,
-      296,  314,  315,  744,  743,  742,  741,  740,  739,  738,
-      737,  736,  735,  734,  733,  730,  729,  521,  521,  521,
-      521,  728,  727,  717,  715,  655,  521,  521,  521,  650,
-      649,  639,  637,  632,  631,  630,  479,  595,  579,  575,
-      521,  521,  521,  521,  521,  521,  313,  313,  314,  315,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  621,  313,  313,  616,  613,  611,  610,  676,  313,
-
-      313,  313,  609,  608,  607,  606,  605,  604,  603,  602,
-      601,  600,  599,  598,  594,  313,  593,  592,  591,  590,
-      589,  588,  587,  586,  585,  584,  583,  582,  581,  578,
-      577,  574,  573,  572,  571,  570,  569,  568,  554,  385,
-      313,  313,  313,  313,  314,  315,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  333,  313,  313,
-      333,  333,  333,  333,  334,  313,  313,  313,  333,  333,
-      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
-      333,  313,  333,  333,  333,  333,  333,  333,  677,  333,
-      333,  333,  678,  333,  333,  333,  333,  333,  333,  333,
+      187,  187,  201,  204,  227,  181,  181,  181,  181,  223,
+      224,  228,  413,  167,  227,  205,  206,  414,  230,  244,
+      207,  228,  208,  227,  241,  209,  313,  314,  230,  205,
+      228,  204,  206,  181,  181,  181,  181,  230,  227,  245,
+      208,  245,  245,  227,  206,  228,  168, 1016,  207,  209,
+      228,  227,  230,  231,  231,  231,  231,  230,  228,  232,
+      206,  210,  313,  314,  242,  230,  211,  240,  228,  212,
+      213,  214,  215,  216,  217,  266,  233,  218,  227,  219,
+
+      220,  355,  234,  227,  855,  228,  274,  419,  235,  167,
+      228,  420,  230,  245,  164,  245,  245,  230,  421,  210,
+      422,  180,  236,  181,  181,  181,  181,  252,  213,  214,
+      253,  254,  217,  256,  257,  258,  256,  227,  220,  275,
+      238,  237,  168, 1015,  228,  256,  257,  258,  256,  336,
+      337,  230,  384,  239, 1020,  260, 1014,  260,  261,  260,
+      260,  180,  446,  181,  181,  181,  181, 1013,  185,  185,
+      185,  185,  187,  246,  238,  187,  228,  187,  447,  247,
+      248,  249,  250,  266,  251,  385,  187,  187,  187,  269,
+      257,  270,  269,  187,  204,  263,  181,  181,  181,  181,
+
+      264,  269,  257,  270,  269,  266,  268,  206,  423,  228,
+      424,  207,  267,  267,  267,  267,  266,  277, 1012,  278,
+      278,  278,  278,  206,  279,  279,  279,  279,  899,  271,
+      313,  314,  185,  185,  185,  185,  271,  336,  337,  271,
+      167,  313,  320,  271,  293,  293,  293,  293,  228,  295,
+      317,  331, 1011,  177,  271,  266,  280,  281,  297,  278,
+      278,  278,  278,  271,  292,  300,  300,  300,  300,  282,
+      283,  336,  343,  168,  284,  759,  285,  336,  337,  286,
+      340,  359,  360,  282,  760,  298,  283,  299,  299,  299,
+      299,  359,  360,  401,  285,  401,  401,  301,  354,  432,
+
+      432,  359,  360,  286,  271,  271, 1010,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  271,  271,  271, 1009,
+      271,  271,  377,  274,  426,  410,  289,  271,  271,  271,
+      573,  204,  295,  293,  293,  293,  293,  411,  427,  295,
+      359,  366,  295,  271,  206,  482,  295,  574,  207,  363,
+      416,  313,  316,  483,  417,  317,  275,  295,  418, 1008,
+      206,  336,  339,  439,  440,  340,  295,  448,  271,  271,
+      271,  271,  449,  271,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  271, 1007,  271,  271,  318,  313,
+      314,  947,  289,  271,  271,  271,  458,  459,  341,  455,
+
+      336,  337,  593,  321,  456,  322,  322,  322,  322,  271,
+      594,  313,  314,  595,  344,  290,  345,  345,  345,  345,
+      387,  493,  388,  388,  388,  388,  494,  323,  323,  323,
+      323,  435,  435,  435,  271,  271,  302,  332,  299,  299,
+      299,  299,  359,  362,  439,  475,  363,  312,  303,  304,
+      336,  337,  443,  305,  312,  306,  444,  312,  307,  324,
+      378,  312,  303,  857,  227,  304,  346,  346,  346,  346,
+      445,  228,  312,  306,  162,  455,  162,  162,  230,  364,
+      509,  312,  307,  295,  295,  295,  295,  295,  295,  163,
+      295,  295,  295,  295,  295,  295,  295,  295,  347,  295,
+
+      295,  577,  335,  578,  227,  310,  295,  295,  295,  335,
+      358,  228,  335, 1006,  359,  360,  335,  358,  230,  266,
+      358, 1005,  295,  245,  358,  245,  245,  335,  367, 1004,
+      368,  368,  368,  368,  228,  358,  335,  389,  389,  389,
+      389,  266,  488,  488,  358,  504,  504,  295,  295,  295,
+      295,  295,  295,  295,  295,  500,  295,  295,  295,  295,
+      295,  295,  295,  295,  398,  295,  295,  859,  381,  390,
+     1003,  310,  295,  295,  295,  381,  559,  484,  381,  359,
+      360,  560,  381,  402,  402,  402,  402, 1002,  295,  403,
+      403,  403,  403,  381,  311,  369,  369,  369,  369,  491,
+
+      491,  491,  381,  404,  404,  404,  404,  405,  405,  405,
+      405,  313,  314,  295,  295,  313,  314,  185,  185,  185,
+      185,  227,  507,  507,  507,  455,  941,  370,  228,  325,
+      456,  322,  322,  322,  322,  230,  185,  185,  185,  185,
+      728,  326,  327,  457,  266,  416,  328,  406,  329,  417,
+     1001,  330,  729,  474,  433,  326,  433,  227,  327,  434,
+      434,  434,  434,  406,  228, 1000,  329,  463,  463,  463,
+      463,  230,  313,  314,  466,  330,  312,  312,  313,  314,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  943,  312,  312,  266,  227,  313,  314,  333,  312,
+
+      312,  312,  228,  204,  999,  181,  181,  181,  181,  230,
+      431,  431,  431,  431,  295,  312,  206,  900,  177,  227,
+      207,  406,  227,  297,  227,  944,  228,  313,  316,  228,
+      469,  228,  206,  230,  313,  314,  230,  406,  230,  288,
+      312,  312,  312,  312,  313,  314,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  266,  312,  312,
+      332,  227,  853,  227,  333,  312,  312,  312,  228,  464,
+      228,  227,  465,  288,  470,  230,  998,  230,  228,  336,
+      337,  312,  336,  337,  782,  230,  266,  334,  256,  257,
+      258,  256,  256,  257,  258,  256,  478,  478,  478,  478,
+
+      477,  313,  316,  467,  468,  317,  312,  312,  336,  337,
+      648,  471,  228,  472,  649,  267,  267,  267,  267,  266,
+      336,  337,  348,  997,  345,  345,  345,  345,  269,  257,
+      270,  269,  336,  339,  349,  350,  313,  320,  318,  351,
+      996,  352,  313,  314,  353,  317,  336,  337,  349,  313,
+      320,  350,  269,  257,  270,  269,  359,  360,  317,  352,
+      279,  279,  279,  279,  300,  300,  300,  300,  353,  335,
+      335,  336,  337,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  266,  335,  335,  359,  360,  513,
+      228,  356,  335,  335,  335,  897,  281,  266,  278,  278,
+
+      278,  278,  288,  279,  279,  279,  279,  995,  335,  283,
+      489,  783,  489,  284,  485,  490,  490,  490,  490,  336,
+      337,  505,  266,  505,  774,  283,  506,  506,  506,  506,
+      485,  359,  360,  335,  335,  335,  335,  336,  337,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      848,  335,  335,  359,  362,  359,  360,  356,  335,  335,
+      335,  487,  487,  487,  487,  204,  526,  293,  293,  293,
+      293,  384,  485,  266,  335,  313,  316,  905,  206,  317,
+      357,  355,  207,  313,  314,  554,  554,  520,  485,  359,
+      360,  994,  521,  302,  206,  299,  299,  299,  299,  335,
+
+      335,  359,  360,  849,  385,  945,  304,  313,  314,  898,
+      305,  993,  318,  313,  314,  371,  288,  368,  368,  368,
+      368,  992,  304,  323,  323,  323,  323,  372,  373,  515,
+      515,  295,  374,  991,  375,  613,  539,  376,  313,  314,
+      654,  372,  313,  314,  373,  389,  389,  389,  389,  516,
+      948,  516,  375,  309,  517,  517,  517,  517,  518,  518,
+      518,  376,  358,  358,  359,  360,  358,  358,  358,  358,
+      358,  358,  358,  358,  358,  358,  358,  990,  358,  358,
+      300,  300,  300,  300,  379,  358,  358,  358,  336,  343,
+      989,  501,  503,  503,  503,  503,  332,  340,  906,  336,
+
+      343,  358,  355,  501,  988,  359,  366,  501,  340,  336,
+      339,  336,  337,  340,  363,  533,  611,  336,  339,  501,
+      534,  340,  557,  557,  557,  942,  358,  358,  358,  358,
+      359,  360,  358,  358,  358,  358,  358,  358,  358,  358,
+      358,  358,  358,  266,  358,  358,  341,  313,  314,  612,
+      379,  358,  358,  358,  341,  336,  337,  432,  432,  313,
+      314,  359,  366,  323,  323,  323,  323,  358,  359,  360,
+      363,  528,  528,  380,  512,  514,  514,  514,  514,  401,
+      987,  401,  401,  986,  541,  541,  512,  336,  337,  985,
+      512,  907,  358,  358,  391,  378,  388,  388,  388,  388,
+
+      488,  488,  512,  531,  531,  531,  392,  393,  336,  337,
+      616,  394,  901,  395,  504,  504,  396,  336,  337,  309,
+      392,  359,  360,  393,  346,  346,  346,  346,  529,  636,
+      529,  395,  954,  530,  530,  530,  530,  544,  544,  544,
+      396,  381,  381,  617,  381,  381,  381,  381,  381,  381,
+      381,  381,  381,  381,  381,  381,  946,  381,  381,  336,
+      337,  640,  637,  399,  381,  381,  381,  359,  362,  554,
+      554,  363,  435,  435,  435,  346,  346,  346,  346,  941,
+      381,  979,  336,  337,  779,  780,  525,  359,  360,  359,
+      362,  546,  903,  363,  641,  714,  547,  332,  527,  527,
 
-      333,  333,  333,  333,  333,  333,  313,  313,  337,  338,
-      504,  501,  500,  488,  275,  462,  483,  479,  450,  448,
-      425,  422,  420,  475,  534,  534,  534,  534,  412,  462,
-      267,  461,  455,  534,  534,  534,  454,  451,  439,  438,
-      431,  430,  429,  426,  416,  413,  410,  534,  534,  534,
-      534,  534,  534,  336,  336,  337,  338,  336,  336,  336,
-      336,  336,  336,  336,  336,  336,  336,  336,  409,  336,
-      336,  167,  398,  385,  383,  693,  336,  336,  336,  309,
-      267,  292,  288,  275,  273,  256,  167,  256,  167,  174,
-      165, 1025,  336,   96,   65,   57, 1025, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025,  336,  336,  336,
-      336,  337,  338,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  356,  336,  336,  356,  356,  356,
-      356,  357,  336,  336,  336,  356,  356,  356,  356,  356,
-      356,  356,  356,  356,  356,  356,  356,  356,  336,  356,
-      356,  356,  356,  356,  356,  694,  356,  356,  356,  695,
-      356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
-      356,  356,  356,  336,  336,  360,  361, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
+      527,  527,  525,  946,  364,  381,  381,  381,  381,  525,
+      381,  381,  381,  381,  381,  381,  381,  381,  381,  381,
+      381,  381,  904,  381,  381,  525,  364,  332,  715,  399,
+      381,  381,  381,  402,  402,  402,  402,  359,  360,  491,
+      491,  491,  359,  360,  313,  314,  381,  403,  403,  403,
+      403,  309,  400,  369,  369,  369,  369,  944,  369,  369,
+      369,  369,  404,  404,  404,  404,  507,  507,  507,  538,
+      942,  381,  381,  492,  492,  492,  492,  389,  389,  389,
+      389,  978,  492,  492,  492,  538,  977,  555,  551,  555,
+      313,  314,  556,  556,  556,  556,  492,  492,  492,  492,
+
+      492,  492,  271,  271,  551,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  271,  976,  271,  271,
+      359,  360,  313,  314,  289,  271,  271,  271,  405,  405,
+      405,  405,  359,  360,  313,  663,  540,  540,  540,  540,
+      661,  271,  943,  542,  980,  542,  902,  538,  543,  543,
+      543,  543,  564,  309,  564,  313,  667,  565,  565,  565,
+      565,  336,  684,  538,  664,  787,  271,  271,  271,  271,
+      681,  271,  271,  271,  495,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  496,  496,  496,  496,  496,  496,
+
+      496,  496,  496,  496,  496,  496,  496,  271,  496,  496,
+      496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+      496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+      496,  496,  271,  271,  271,  271,  975,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  271,  271,  271,  949,
+      271,  271,  434,  434,  434,  434,  289,  271,  271,  271,
+      718,  391,  974,  388,  388,  388,  388,  973,  553,  553,
+      553,  553,  972,  271,  393,  557,  557,  557,  394,  551,
+      431,  431,  431,  431,  434,  434,  434,  434,  359,  701,
+      393,  406,  497,  719,  355,  551,  971,  698,  271,  271,
+
+      508,  508,  508,  508,  970,  227,  227,  406,  227,  508,
+      508,  508,  228,  228,  611,  228,  336,  337,  969,  230,
+      230,  968,  230,  508,  508,  508,  508,  508,  508,  295,
+      295,  295,  295,  295,  295,  967,  295,  295,  295,  295,
+      295,  295,  295,  295,  616,  295,  295,  612,  227,  227,
+      227,  310,  295,  295,  295,  228,  228,  228,  490,  490,
+      490,  490,  230,  230,  230,  945,  678,  979,  295,  478,
+      478,  478,  478,  477,  632,  966,  632,  617,  965,  633,
+      633,  633,  633,  490,  490,  490,  490,  313,  314,  964,
+      621,  313,  669,  295,  295,  295,  295,  295,  295,  295,
+
+      295,  461,  295,  295,  295,  295,  295,  295,  295,  295,
+      295,  295,  295,  295,  295,  295,  295,  295,  295,  295,
+      295,  510,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  295,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  510,  510,  510,  510,  510,  510,  510,  510,  295,
+      295,  295,  295,  295,  295,  295,  295,  963,  295,  295,
+      295,  295,  295,  295,  295,  295,  962,  295,  295,  336,
+      337,  227,  227,  310,  295,  295,  295,  227,  228,  228,
+      336,  680,  227,  961,  228,  230,  230,  359,  360,  228,
+
+      295,  230,  228,  313,  663,  636,  230,  664,  960,  266,
+      336,  337,  487,  487,  487,  487,  959,  313,  314,  511,
+      622,  522,  624,  485,  623,  295,  295,  313,  314,  625,
+      336,  686,  620,  630,  359,  360,  958,  631,  637,  485,
+      665,  325,  957,  322,  322,  322,  322,  695,  503,  503,
+      503,  503,  313,  314,  327,  650,  956,  650,  328,  501,
+      651,  651,  651,  651,  506,  506,  506,  506,  515,  515,
+      327,  313,  314,  313,  667,  501,  506,  506,  506,  506,
+      359,  697,  664,  313,  314,  313,  667,  519,  519,  519,
+      519,  313,  314,  953,  664,  984,  519,  519,  519,  517,
+
+      517,  517,  517,  556,  556,  556,  556,  518,  518,  518,
+      519,  519,  519,  519,  519,  519,  312,  312,  313,  314,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  955,  312,  312,  313,  314,  940,  228,  333,  312,
+      312,  312,  313,  314,  266,  659,  939,  659,  336,  337,
+      660,  660,  660,  660,  938,  312,  336,  337,  517,  517,
+      517,  517,  359,  360,  528,  528,  908,  676,  937,  676,
+      378,  775,  677,  677,  677,  677,  359,  360,  541,  541,
+      312,  312,  312,  312,  313,  314,  312,  312,  522,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+
+      312,  312,  312,  312,  312,  312,  312,  312,  523,  523,
+      523,  523,  523,  523,  523,  523,  523,  523,  523,  523,
+      523,  312,  523,  523,  523,  523,  523,  523,  523,  523,
+      523,  523,  523,  523,  523,  523,  523,  523,  523,  523,
+      523,  523,  523,  523,  523,  523,  312,  312,  312,  312,
+      313,  314,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  950,  312,  312,  313,  314,  359,  703,
+      333,  312,  312,  312,  313,  669,  936,  640,  670,  935,
+      336,  337,  514,  514,  514,  514,  295,  312,  336,  680,
+      613,  714,  681,  512,  934,  654,  527,  527,  527,  527,
+
+      336,  337,  556,  556,  556,  556,  524,  525,  355,  512,
+      641,  671,  312,  312,  336,  337,  530,  530,  530,  530,
+      336,  337,  718,  525,  715,  682,  336,  337,  348,  933,
+      345,  345,  345,  345,  313,  314,  530,  530,  530,  530,
+      227,  350,  531,  531,  531,  351,  932,  228,  931,  336,
+      686,  359,  360,  687,  230,  719,  228,  350,  336,  337,
+      336,  337,  693,  266,  693,  930,  227,  694,  694,  694,
+      694,  359,  360,  228,  532,  532,  532,  532,  359,  360,
+      230,  336,  337,  532,  532,  532,  688,  543,  543,  543,
+      543,  844,  359,  360,  544,  544,  544,  532,  532,  532,
+
+      532,  532,  532,  335,  335,  336,  337,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  929,  335,
+      335,  359,  360,  928,  790,  356,  335,  335,  335,  565,
+      565,  565,  565,  359,  360,  793,  941,  540,  540,  540,
+      540,  927,  335,  565,  565,  565,  565,  228,  538,  543,
+      543,  543,  543,  710,  266,  710,  336,  684,  711,  711,
+      711,  711,  336,  337,  538,  681,  535,  335,  335,  335,
+      335,  336,  337,  335,  335,  535,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  536,  536,  536,  536,  536,
+
+      536,  536,  536,  536,  536,  536,  536,  536,  335,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  335,  335,  335,  335,  336,  337,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      926,  335,  335,  553,  553,  553,  553,  356,  335,  335,
+      335,  359,  697,  819,  551,  698,  359,  703,  227,  227,
+      704,  925,  227,  924,  335,  228,  228,  227,  820,  228,
+      551,  923,  230,  230,  228,  821,  230,  633,  633,  633,
+      633,  230,  922,  537,  633,  633,  633,  633,  699,  335,
+
+      335,  359,  360,  705,  651,  651,  651,  651,  921,  767,
+      768,  651,  651,  651,  651,  371,  769,  368,  368,  368,
+      368,  313,  314,  313,  663,  920,  770,  664,  373,  227,
+      355,  854,  374,  313,  314,  919,  228,  660,  660,  660,
+      660,  359,  360,  230,  373,  359,  360,  336,  684,  660,
+      660,  660,  660,  378,  856,  909,  681,  359,  701,  398,
+      665,  545,  545,  545,  545,  910,  698,  359,  701,  398,
+      545,  545,  545,  313,  663,  918,  698,  664,  842,  313,
+      669,  398,  858,  670,  545,  545,  545,  545,  545,  545,
+      358,  358,  359,  360,  358,  358,  358,  358,  358,  358,
+
+      358,  358,  358,  358,  358,  917,  358,  358,  336,  337,
+      665,  916,  379,  358,  358,  358,  671,  336,  337,  359,
+      360,  359,  360,  548,  677,  677,  677,  677,  915,  358,
+      359,  360,  911,  677,  677,  677,  677,  694,  694,  694,
+      694,  711,  711,  711,  711,  891,  694,  694,  694,  694,
+      711,  711,  711,  711,  358,  358,  358,  358,  359,  360,
+      358,  358,  548,  358,  358,  358,  358,  358,  358,  358,
+      358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
+      358,  358,  549,  549,  549,  549,  549,  549,  549,  549,
+      549,  549,  549,  549,  549,  358,  549,  549,  549,  549,
 
-     1025,  547,  547,  547,  547, 1025, 1025, 1025, 1025, 1025,
-      547,  547,  547, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025,  547,  547,  547,  547,  547,  547,
-      359,  359,  360,  361,  359,  359,  359,  359,  359,  359,
-      359,  359,  359,  359,  359, 1025,  359,  359, 1025, 1025,
-     1025, 1025,  710,  359,  359,  359, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  359,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025,  359,  359,  359,  359,  360,  361,
-
-      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
-      359,  379,  359,  359,  379,  379,  379,  379,  380,  359,
-      359,  359,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  359,  379,  379,  379,  379,
-      379,  379,  711,  379,  379,  379,  712,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      359,  359,  560,  560,  560,  560, 1025, 1025, 1025, 1025,
-     1025,  560,  560,  560, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025,  560,  560,  560,  560,  560,
-      560,  382,  382, 1025,  382,  382,  382,  382,  382,  382,
-
-      382,  382,  382,  382,  382,  382, 1025,  382,  382, 1025,
-     1025, 1025, 1025,  724,  382,  382,  382, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-      382, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025,  382,  382,  382,  382, 1025,
-      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
-      382,  382,  399,  382,  382,  399,  399,  399,  399,  400,
-      382,  382,  382,  399,  399,  399,  399,  399,  399,  399,
-      399,  399,  399,  399,  399,  399,  382,  399,  399,  399,
+      549,  549,  549,  549,  549,  549,  549,  549,  549,  549,
+      549,  549,  549,  549,  549,  549,  549,  549,  549,  549,
+      358,  358,  358,  358,  359,  360,  358,  358,  358,  358,
+      358,  358,  358,  358,  358,  358,  358,  802,  358,  358,
+      894,  890,  894,  894,  379,  358,  358,  358,  313,  669,
+      803,  228,  670,  228,  889,  336,  680,  804,  266,  681,
+      266,  358,  888,  336,  680,  336,  686,  681,  227,  687,
+      336,  686,  359,  697,  687,  228,  698,  313,  314,  948,
+      550,  895,  230,  896,  887,  671,  358,  358,  558,  558,
+      558,  558,  682,  894,  227,  894,  894,  558,  558,  558,
 
-      399,  399,  399,  725,  399,  399,  399,  726,  399,  399,
-      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
-      399,  382,  382,  272,  272, 1025,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272, 1025,  272,
-      272, 1025, 1025, 1025, 1025,  646,  272,  272,  272, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025,  272, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025,  272,  272,  272,
-      272, 1025,  272,  272,  272,  272,  272,  272,  272,  272,
-
-      272,  272,  272,  272, 1025,  272,  272, 1025, 1025, 1025,
-     1025,  290,  272,  272,  272, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  272, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  781, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025,  272,  272,  272,  272, 1025,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-     1025,  272,  272, 1025, 1025, 1025, 1025,  290,  272,  272,
-      272, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025,  272, 1025, 1025, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025,  782, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  272,
-      272,  296,  296,  296,  296,  296,  296, 1025,  296,  296,
-      296,  296,  296,  296,  296,  296, 1025,  296,  296, 1025,
-     1025, 1025, 1025,  659,  296,  296,  296, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-      296, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025,  296,  296,  296,  296,  296,
-      296,  296,  296, 1025,  296,  296,  296,  296,  296,  296,
-
-      296,  296, 1025,  296,  296, 1025, 1025, 1025, 1025,  311,
-      296,  296,  296, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025,  296, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025,  789, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025,  296,  296,  296,  296,  296,  296,  296,  296, 1025,
-      296,  296,  296,  296,  296,  296,  296,  296, 1025,  296,
-      296, 1025, 1025, 1025, 1025,  311,  296,  296,  296, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025,  296, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-
-     1025, 1025,  790, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025,  296,  296,  313,
-      313,  314,  315,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313, 1025,  313,  313, 1025, 1025, 1025,
-     1025,  676,  313,  313,  313, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  313, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025,  313,  313,  313,  313,  314,  315,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-
-      333,  313,  313,  333,  333,  333,  333,  334,  313,  313,
-      313,  333,  333,  333,  333,  333,  333,  333,  333,  333,
-      333,  333,  333,  333,  313,  333,  333,  333,  333,  333,
-      333,  333,  333,  333,  792,  333,  333,  333,  333,  333,
-      333,  333,  333,  333,  333,  333,  333,  333,  333,  313,
-      313,  336,  336,  337,  338,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  336,  336, 1025,  336,  336, 1025,
-     1025, 1025, 1025,  693,  336,  336,  336, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-      336, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025,  336,  336,  336,  336,  337,
-      338,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  356,  336,  336,  356,  356,  356,  356,  357,
-      336,  336,  336,  356,  356,  356,  356,  356,  356,  356,
-      356,  356,  356,  356,  356,  356,  336,  356,  356,  356,
-      356,  356,  356,  356,  356,  356,  795,  356,  356,  356,
-      356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
-      356,  336,  336,  359,  359,  360,  361,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  359, 1025,  359,
+      682,  228,  688,  336,  337,  950,  886,  688,  230,  699,
+      839,  558,  558,  558,  558,  558,  558,  381,  381,  885,
+      381,  381,  381,  381,  381,  381,  381,  381,  381,  381,
+      381,  381,  884,  381,  381,  359,  360,  952,  840,  399,
+      381,  381,  381,  359,  697,  912,  227,  698,  359,  703,
+      227,  941,  704,  228,  883,  227,  381,  228,  913,  942,
+      230,  942,  228,  227,  230,  914,  313,  314,  882,  230,
+      228,  881,  228,  880,  313,  314,  947,  230,  981,  266,
+      699,  381,  381,  381,  381,  705,  381,  381,  381,  561,
+      381,  381,  381,  381,  381,  381,  381,  381,  381,  381,
 
-      359, 1025, 1025, 1025, 1025,  710,  359,  359,  359, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025,  359, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025,  359,  359,  359,
-      359,  360,  361,  359,  359,  359,  359,  359,  359,  359,
-      359,  359,  359,  359,  379,  359,  359,  379,  379,  379,
-      379,  380,  359,  359,  359,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  359,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  798,  379,
+      381,  381,  381,  381,  381,  381,  381,  381,  381,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  381,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  381,  381,  381,
+      381,  951,  381,  381,  381,  381,  381,  381,  381,  381,
+      381,  381,  381,  381,  879,  381,  381,  336,  337,  878,
+      227,  399,  381,  381,  381,  359,  703,  228,  952,  704,
+      359,  360,  228,  227,  230,  227,  953,  954,  381,  266,
+      228,  877,  228,  876,  875,  874,  378,  230,  873,  230,
+
+      336,  337,  949,  872,  982,  871,  870,  563,  869,  841,
+      868,  867,  705,  381,  381,  492,  492,  492,  492,  845,
+      892,  866,  893,  378,  492,  492,  492,  865,  864,  863,
+      862,  398,  398,  359,  360,  951,  861,  983,  492,  492,
+      492,  492,  492,  492,  271,  271,  860,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  271,  271,  271,  779,
+      271,  271,  843,  838,  837,  836,  643,  271,  271,  271,
+      835,  834,  833,  832,  831,  830,  829,  828,  827,  826,
+      825,  824,  823,  271,  822,  818,  817,  816,  815,  814,
+      813,  812,  811,  810,  809,  808,  807,  806,  805,  801,
+
+      800,  799,  561,  714,  796,  795,  792,  789,  271,  271,
+      271,  271,  461,  271,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  271,  288,  271,  271,  288,  288,
+      288,  288,  289,  271,  271,  271,  288,  288,  288,  288,
+      288,  288,  288,  288,  288,  288,  288,  288,  288,  271,
+      288,  288,  288,  288,  288,  288,  644,  288,  288,  288,
+      645,  288,  288,  288,  288,  288,  288,  288,  288,  288,
+      288,  288,  288,  288,  271,  271,  508,  508,  508,  508,
+      784,  781,  495,  636,  776,  508,  508,  508,  773,  772,
+      771,  461,  619,  611,  766,  765,  764,  763,  762,  508,
+
+      508,  508,  508,  508,  508,  295,  295,  295,  295,  295,
+      295,  761,  295,  295,  295,  295,  295,  295,  295,  295,
+      758,  295,  295,  757,  756,  755,  754,  656,  295,  295,
+      295,  753,  752,  751,  750,  749,  748,  747,  746,  745,
+      744,  743,  742,  741,  295,  740,  739,  738,  737,  736,
+      735,  734,  733,  732,  731,  730,  727,  726,  725,  724,
+      714,  712,  652,  647,  646,  636,  634,  629,  628,  295,
+      295,  295,  295,  295,  295,  295,  295,  627,  295,  295,
+      295,  295,  295,  295,  295,  295,  309,  295,  295,  309,
+      309,  309,  309,  310,  295,  295,  295,  309,  309,  309,
+
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      295,  309,  309,  309,  309,  309,  309,  657,  309,  309,
+      309,  658,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  295,  295,  313,  314,  477,
+      593,  577,  573,  619,  614,  611,  609,  608,  607,  606,
+      605,  604,  603,  519,  519,  519,  519,  602,  601,  600,
+      599,  598,  519,  519,  519,  597,  596,  592,  591,  590,
+      589,  588,  587,  586,  585,  584,  519,  519,  519,  519,
+      519,  519,  312,  312,  313,  314,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  583,  312,  312,
+
+      582,  581,  580,  579,  673,  312,  312,  312,  576,  575,
+      572,  571,  570,  569,  568,  567,  566,  552,  384,  502,
+      499,  312,  498,  486,  274,  461,  481,  477,  449,  447,
+      424,  421,  419,  473,  411,  461,  266,  460,  454,  453,
+      450,  438,  437,  430,  429,  428,  312,  312,  312,  312,
+      313,  314,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  332,  312,  312,  332,  332,  332,  332,
+      333,  312,  312,  312,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  312,  332,  332,
+      332,  332,  332,  332,  674,  332,  332,  332,  675,  332,
+
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  312,  312,  336,  337,  425,  415,  412,  409,
+      408,  167,  397,  384,  382,  308,  266,  291,  287,  274,
+      532,  532,  532,  532,  272,  255,  167,  255,  167,  532,
+      532,  532,  174,  165, 1020,   96,   65,   57, 1020, 1020,
+     1020, 1020, 1020,  532,  532,  532,  532,  532,  532,  335,
+      335,  336,  337,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335, 1020,  335,  335, 1020, 1020, 1020,
+     1020,  690,  335,  335,  335, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  335, 1020,
+
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020,  335,  335,  335,  335,  336,  337,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      355,  335,  335,  355,  355,  355,  355,  356,  335,  335,
+      335,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  335,  355,  355,  355,  355,  355,
+      355,  691,  355,  355,  355,  692,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  335,
+      335,  359,  360, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+
+     1020, 1020, 1020, 1020, 1020, 1020, 1020,  545,  545,  545,
+      545, 1020, 1020, 1020, 1020, 1020,  545,  545,  545, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+      545,  545,  545,  545,  545,  545,  358,  358,  359,  360,
+      358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
+      358, 1020,  358,  358, 1020, 1020, 1020, 1020,  707,  358,
+      358,  358, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020,  358, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+
+      358,  358,  358,  358,  359,  360,  358,  358,  358,  358,
+      358,  358,  358,  358,  358,  358,  358,  378,  358,  358,
+      378,  378,  378,  378,  379,  358,  358,  358,  378,  378,
+      378,  378,  378,  378,  378,  378,  378,  378,  378,  378,
+      378,  358,  378,  378,  378,  378,  378,  378,  708,  378,
+      378,  378,  709,  378,  378,  378,  378,  378,  378,  378,
+      378,  378,  378,  378,  378,  378,  358,  358,  558,  558,
+      558,  558, 1020, 1020, 1020, 1020, 1020,  558,  558,  558,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020,  558,  558,  558,  558,  558,  558,  381,  381, 1020,
 
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  359,  359,  382,  382, 1025,  382,  382,
-      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
-     1025,  382,  382, 1025, 1025, 1025, 1025,  724,  382,  382,
-      382, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025,  382, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  382,
-      382,  382,  382, 1025,  382,  382,  382,  382,  382,  382,
-      382,  382,  382,  382,  382,  382, 1025,  382,  382, 1025,
-
-     1025, 1025, 1025,  400,  382,  382,  382, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-      382, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-      801, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025,  382,  382,  382,  382, 1025,
-      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
-      382,  382, 1025,  382,  382, 1025, 1025, 1025, 1025,  400,
-      382,  382,  382, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025,  382, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025,  802, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025,  382,  382,  272,  272, 1025,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  272,  272,  272, 1025,  272,
-      272, 1025, 1025, 1025, 1025,  290,  272,  272,  272, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025,  272, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025,  851, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025,  272,  272,  272,
-      272, 1025,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  272,  272, 1025,  272,  272, 1025, 1025, 1025,
-
-     1025,  290,  272,  272,  272, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  272, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025,  852, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025,  272,  272,  296,  296,  296,  296,  296,
-      296, 1025,  296,  296,  296,  296,  296,  296,  296,  296,
-     1025,  296,  296, 1025, 1025, 1025, 1025,  311,  296,  296,
-      296, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025,  296, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025,  855, 1025, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,  296,
-      296,  296,  296,  296,  296,  296,  296, 1025,  296,  296,
-      296,  296,  296,  296,  296,  296, 1025,  296,  296, 1025,
-     1025, 1025, 1025,  311,  296,  296,  296, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-      296, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025,  856, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025,  296,  296,  313,  313,  314,
-      315,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  333,  313,  313,  333,  333,  333,  333,  334,
-
-      313,  313,  313,  333,  333,  333,  333,  333,  333,  333,
-      333,  333,  333,  333,  333,  333,  313,  333,  333,  333,
-      333,  333,  333,  333,  333,  333,  333,  857,  333,  333,
-      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
-      333,  313,  313,  166, 1025,  166,  166,  166,  166,  166,
-      166,  166,  166,  166,  169, 1025, 1025,  169,  169,  177,
-     1025,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      229,  229,  229,  229,  229,  229,  229,  229,  260,  260,
-      260,  260,  263, 1025,  263, 1025,  263,  263,  263,  263,
-      266,  266,  266,  266,  266,  266,  266,  272, 1025,  272,
-
-      272,  272,  272,  272,  272,  272,  272,  272,  274, 1025,
-      274,  274,  274,  274,  274,  274,  274,  274,  274,  277,
-     1025,  277,  277,  277,  277,  277,  277,  277,  277,  277,
-      289, 1025,  289,  289,  289,  289,  289,  289,  289,  289,
-      289,  228,  228,  228,  228,  228,  228,  228,  296,  296,
-     1025,  296,  296,  296,  296,  296,  296,  296,  296,  297,
-      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
-      310,  310, 1025,  310,  310,  310,  310,  310,  310,  310,
-      310,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  316,  316,  316,  316,  316,  316,  316,  316,
-
-      316,  316,  316,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  320,  320,  333,  333,  333,  333,  333,  333,
-      333,  333,  333,  333,  333,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  336,  336,  339,  339,  339,  339,
-      339,  339,  339,  339,  339,  339,  339,  343,  343,  343,
-      343,  343,  343,  343,  343,  343,  343,  343,  356,  356,
-      356,  356,  356,  356,  356,  356,  356,  356,  356,  359,
-      359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
-      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-
-      366,  366,  379,  379,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  382, 1025,  382,  382,  382,  382,  382,
-      382,  382,  382,  382,  384, 1025,  384,  384,  384,  384,
-      384,  384,  384,  384,  384,  387, 1025,  387,  387,  387,
-      387,  387,  387,  387,  387,  387,  399, 1025,  399,  399,
-      399,  399,  399,  399,  399,  399,  399,  169, 1025, 1025,
-      169,  169,  177, 1025,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  408, 1025, 1025,  408,  408,  408,  437,
-     1025, 1025,  437,  228,  228,  228,  228,  228,  228,  228,
-      229,  229,  229,  229,  229,  229,  229,  229,  463, 1025,
-
-     1025, 1025, 1025,  463,  463,  463,  463,  478,  478,  478,
-      478,  478,  478,  481,  481,  481,  481,  482, 1025,  482,
-      482,  482,  482,  266,  266,  266,  266,  266,  266,  266,
-      272, 1025,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  274, 1025,  274,  274,  274,  274,  274,  274,  274,
-      274,  274,  277, 1025,  277,  277,  277,  277,  277,  277,
-      277,  277,  277,  289, 1025,  289,  289,  289,  289,  289,
-      289,  289,  289,  289,  296,  296, 1025,  296,  296,  296,
-      296,  296,  296,  296,  296,  297,  297,  297,  297,  297,
-      297,  297,  297,  297,  297,  297,  310,  310, 1025,  310,
-
-      310,  310,  310,  310,  310,  310,  310,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  320,
-      320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
-      333,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  339,  339,  339,  339,  339,  339,  339,  339,
-      339,  339,  339,  343,  343,  343,  343,  343,  343,  343,
-      343,  343,  343,  343,  356,  356,  356,  356,  356,  356,
-      356,  356,  356,  356,  356,  359,  359,  359,  359,  359,
-
-      359,  359,  359,  359,  359,  359,  362,  362,  362,  362,
-      362,  362,  362,  362,  362,  362,  362,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  382,
-     1025,  382,  382,  382,  382,  382,  382,  382,  382,  382,
-      384, 1025,  384,  384,  384,  384,  384,  384,  384,  384,
-      384,  387, 1025,  387,  387,  387,  387,  387,  387,  387,
-      387,  387,  399, 1025,  399,  399,  399,  399,  399,  399,
-      399,  399,  399,  169, 1025, 1025,  169,  169,  408, 1025,
-     1025,  408,  408,  408,  437, 1025, 1025,  437,  612, 1025,
-
-      612,  612,  612,  612,  612,  612,  612,  612,  612,  615,
-     1025,  615,  615,  615,  615,  615,  615,  615,  615,  615,
-      617, 1025,  617,  617,  617,  617,  617,  617,  617,  617,
-      617,  620,  620,  620,  620,  620,  620,  620,  229,  229,
-      229,  229,  229,  229,  229,  229,  478,  478,  478,  478,
-      478,  478,  629, 1025,  629,  629,  629,  629,  482, 1025,
-      482,  482,  482,  482,  266,  266,  266,  266,  266,  266,
-      266,  272, 1025,  272,  272,  272,  272,  272,  272,  272,
-      272,  272,  638, 1025,  638,  638,  638,  638,  638,  638,
-      638,  638,  638,  641, 1025,  641,  641,  641,  641,  641,
-
-      641,  641,  641,  641,  642, 1025,  642,  642,  642,  642,
-      642,  642,  642,  642,  642,  645, 1025,  645,  645,  645,
-      645,  645,  645,  645,  645,  645,  228,  228,  228,  228,
-      228,  228,  228,  296,  296, 1025,  296,  296,  296,  296,
-      296,  296,  296,  296,  656,  656,  656,  656,  656,  656,
-      656,  656,  656,  656,  656,  658,  658, 1025,  658,  658,
-      658,  658,  658,  658,  658,  658,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  665,  665,  665,
-      665,  665,  665,  665,  665,  665,  665,  665,  669,  669,
-      669,  669,  669,  669,  669,  669,  669,  669,  669,  671,
-
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
-      675,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  682,  682,  682,  682,  682,  682,  682,  682,
-      682,  682,  682,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  688,  688,  688,  688,  688,  688,
-      688,  688,  688,  688,  688,  692,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  692,  359,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  699,  699,  699,
-      699,  699,  699,  699,  699,  699,  699,  699,  703,  703,
-
-      703,  703,  703,  703,  703,  703,  703,  703,  703,  705,
-      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
-      709,  709,  709,  709,  709,  709,  709,  709,  709,  709,
-      709,  382, 1025,  382,  382,  382,  382,  382,  382,  382,
-      382,  382,  716, 1025,  716,  716,  716,  716,  716,  716,
-      716,  716,  716,  719, 1025,  719,  719,  719,  719,  719,
-      719,  719,  719,  719,  720, 1025,  720,  720,  720,  720,
-      720,  720,  720,  720,  720,  723, 1025,  723,  723,  723,
-      723,  723,  723,  723,  723,  723,  408, 1025, 1025,  408,
-      408,  408,  612, 1025,  612,  612,  612,  612,  612,  612,
-
-      612,  612,  612,  615, 1025,  615,  615,  615,  615,  615,
-      615,  615,  615,  615,  617, 1025,  617,  617,  617,  617,
-      617,  617,  617,  617,  617,  620,  620,  620,  620,  620,
-      620,  620,  229,  229,  229,  229,  229,  229,  229,  229,
-      629, 1025,  629,  629,  629,  629,  482, 1025,  482,  482,
-      482,  482,  266,  266,  266,  266,  266,  266,  266,  272,
-     1025,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      638, 1025,  638,  638,  638,  638,  638,  638,  638,  638,
-      638,  641, 1025,  641,  641,  641,  641,  641,  641,  641,
-      641,  641,  642, 1025,  642,  642,  642,  642,  642,  642,
-
-      642,  642,  642,  645, 1025,  645,  645,  645,  645,  645,
-      645,  645,  645,  645,  289, 1025,  289,  289,  289,  289,
-      289,  289,  289,  289,  289,  228,  228,  228,  228,  228,
-      228,  228,  296,  296, 1025,  296,  296,  296,  296,  296,
-      296,  296,  296,  656,  656,  656,  656,  656,  656,  656,
-      656,  656,  656,  656,  658,  658, 1025,  658,  658,  658,
-      658,  658,  658,  658,  658,  310,  310, 1025,  310,  310,
-      310,  310,  310,  310,  310,  310,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  665,  665,  665,
-      665,  665,  665,  665,  665,  665,  665,  665,  669,  669,
-
-      669,  669,  669,  669,  669,  669,  669,  669,  669,  671,
-      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
-      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
-      675,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  682,  682,  682,  682,  682,  682,  682,  682,
-      682,  682,  682,  686,  686,  686,  686,  686,  686,  686,
-      686,  686,  686,  686,  688,  688,  688,  688,  688,  688,
-      688,  688,  688,  688,  688,  692,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  692,  359,  359,  359,  359,
-      359,  359,  359,  359,  359,  359,  359,  699,  699,  699,
-
-      699,  699,  699,  699,  699,  699,  699,  699,  703,  703,
-      703,  703,  703,  703,  703,  703,  703,  703,  703,  705,
-      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
-      709,  709,  709,  709,  709,  709,  709,  709,  709,  709,
-      709,  382, 1025,  382,  382,  382,  382,  382,  382,  382,
-      382,  382,  716, 1025,  716,  716,  716,  716,  716,  716,
-      716,  716,  716,  719, 1025,  719,  719,  719,  719,  719,
-      719,  719,  719,  719,  720, 1025,  720,  720,  720,  720,
-      720,  720,  720,  720,  720,  723, 1025,  723,  723,  723,
-      723,  723,  723,  723,  723,  723,  399, 1025,  399,  399,
-
-      399,  399,  399,  399,  399,  399,  399,  408, 1025, 1025,
-      408,  408,  408,  229,  229,  229,  229,  229,  229,  229,
-      229,  482, 1025,  482,  482,  482,  482,  266,  266,  266,
-      266,  266,  266,  266,  272, 1025,  272,  272,  272,  272,
-      272,  272,  272,  272,  272,  289, 1025,  289,  289,  289,
-      289,  289,  289,  289,  289,  289,  228,  228,  228,  228,
-      228,  228,  228,  296,  296, 1025,  296,  296,  296,  296,
-      296,  296,  296,  296,  310,  310, 1025,  310,  310,  310,
-      310,  310,  310,  310,  310,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,   23, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025
+      381,  381,  381,  381,  381,  381,  381,  381,  381,  381,
+      381,  381, 1020,  381,  381, 1020, 1020, 1020, 1020,  721,
+      381,  381,  381, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020,  381, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020,  381,  381,  381,  381, 1020,  381,  381,  381,  381,
+      381,  381,  381,  381,  381,  381,  381,  381,  398,  381,
+      381,  398,  398,  398,  398,  399,  381,  381,  381,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+
+      398,  398,  381,  398,  398,  398,  398,  398,  398,  722,
+      398,  398,  398,  723,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  381,  381,  271,
+      271, 1020,  271,  271,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271, 1020,  271,  271, 1020, 1020, 1020,
+     1020,  643,  271,  271,  271, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  271, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020,  271,  271,  271,  271, 1020,  271,  271,
+
+      271,  271,  271,  271,  271,  271,  271,  271,  271,  271,
+     1020,  271,  271, 1020, 1020, 1020, 1020,  289,  271,  271,
+      271, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020,  271, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020,  777, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  271,
+      271,  271,  271, 1020,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  271,  271, 1020,  271,  271, 1020,
+     1020, 1020, 1020,  289,  271,  271,  271, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+
+      271, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+      778, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020,  271,  271,  295,  295,  295,
+      295,  295,  295, 1020,  295,  295,  295,  295,  295,  295,
+      295,  295, 1020,  295,  295, 1020, 1020, 1020, 1020,  656,
+      295,  295,  295, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020,  295, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020,  295,  295,  295,  295,  295,  295,  295,  295, 1020,
+
+      295,  295,  295,  295,  295,  295,  295,  295, 1020,  295,
+      295, 1020, 1020, 1020, 1020,  310,  295,  295,  295, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020,  295, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020,  785, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020,  295,  295,  295,
+      295,  295,  295,  295,  295, 1020,  295,  295,  295,  295,
+      295,  295,  295,  295, 1020,  295,  295, 1020, 1020, 1020,
+     1020,  310,  295,  295,  295, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  295, 1020,
+
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  786, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020,  295,  295,  312,  312,  313,  314,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+     1020,  312,  312, 1020, 1020, 1020, 1020,  673,  312,  312,
+      312, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020,  312, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  312,
+      312,  312,  312,  313,  314,  312,  312,  312,  312,  312,
+
+      312,  312,  312,  312,  312,  312,  332,  312,  312,  332,
+      332,  332,  332,  333,  312,  312,  312,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      312,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      788,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  312,  312,  335,  335,  336,
+      337,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335, 1020,  335,  335, 1020, 1020, 1020, 1020,  690,
+      335,  335,  335, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020,  335, 1020, 1020, 1020,
+
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020,  335,  335,  335,  335,  336,  337,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  355,  335,
+      335,  355,  355,  355,  355,  356,  335,  335,  335,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  335,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  791,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  335,  335,  358,
+      358,  359,  360,  358,  358,  358,  358,  358,  358,  358,
+
+      358,  358,  358,  358, 1020,  358,  358, 1020, 1020, 1020,
+     1020,  707,  358,  358,  358, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  358, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020,  358,  358,  358,  358,  359,  360,  358,
+      358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
+      378,  358,  358,  378,  378,  378,  378,  379,  358,  358,
+      358,  378,  378,  378,  378,  378,  378,  378,  378,  378,
+      378,  378,  378,  378,  358,  378,  378,  378,  378,  378,
+
+      378,  378,  378,  378,  794,  378,  378,  378,  378,  378,
+      378,  378,  378,  378,  378,  378,  378,  378,  378,  358,
+      358,  381,  381, 1020,  381,  381,  381,  381,  381,  381,
+      381,  381,  381,  381,  381,  381, 1020,  381,  381, 1020,
+     1020, 1020, 1020,  721,  381,  381,  381, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+      381, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020,  381,  381,  381,  381, 1020,
+      381,  381,  381,  381,  381,  381,  381,  381,  381,  381,
+
+      381,  381, 1020,  381,  381, 1020, 1020, 1020, 1020,  399,
+      381,  381,  381, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020,  381, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020,  797, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020,  381,  381,  381,  381, 1020,  381,  381,  381,  381,
+      381,  381,  381,  381,  381,  381,  381,  381, 1020,  381,
+      381, 1020, 1020, 1020, 1020,  399,  381,  381,  381, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020,  381, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+
+     1020, 1020,  798, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020,  381,  381,  271,
+      271, 1020,  271,  271,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271, 1020,  271,  271, 1020, 1020, 1020,
+     1020,  289,  271,  271,  271, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  271, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  846,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020,  271,  271,  271,  271, 1020,  271,  271,
+      271,  271,  271,  271,  271,  271,  271,  271,  271,  271,
+
+     1020,  271,  271, 1020, 1020, 1020, 1020,  289,  271,  271,
+      271, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020,  271, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020,  847, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  271,
+      271,  295,  295,  295,  295,  295,  295, 1020,  295,  295,
+      295,  295,  295,  295,  295,  295, 1020,  295,  295, 1020,
+     1020, 1020, 1020,  310,  295,  295,  295, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+      295, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+
+     1020,  850, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020,  295,  295,  295,  295,  295,
+      295,  295,  295, 1020,  295,  295,  295,  295,  295,  295,
+      295,  295, 1020,  295,  295, 1020, 1020, 1020, 1020,  310,
+      295,  295,  295, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020,  295, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,  851,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020,  295,  295,  312,  312,  313,  314,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  332,  312,
+
+      312,  332,  332,  332,  332,  333,  312,  312,  312,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  312,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  852,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  312,  312,  166,
+     1020,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      169, 1020, 1020,  169,  169,  177, 1020,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  229,  229,  229,  229,
+      229,  229,  229,  229,  259,  259,  259,  259,  262, 1020,
+      262, 1020,  262,  262,  262,  262,  265,  265,  265,  265,
+
+      265,  265,  265,  271, 1020,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  273, 1020,  273,  273,  273,  273,
+      273,  273,  273,  273,  273,  276, 1020,  276,  276,  276,
+      276,  276,  276,  276,  276,  276,  288, 1020,  288,  288,
+      288,  288,  288,  288,  288,  288,  288,  228,  228,  228,
+      228,  228,  228,  228,  295,  295, 1020,  295,  295,  295,
+      295,  295,  295,  295,  295,  296,  296,  296,  296,  296,
+      296,  296,  296,  296,  296,  296,  309,  309, 1020,  309,
+      309,  309,  309,  309,  309,  309,  309,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  315,  315,
+
+      315,  315,  315,  315,  315,  315,  315,  315,  315,  319,
+      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  338,  338,  338,  338,  338,  338,  338,  338,
+      338,  338,  338,  342,  342,  342,  342,  342,  342,  342,
+      342,  342,  342,  342,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  358,  358,  358,  358,  358,
+      358,  358,  358,  358,  358,  358,  361,  361,  361,  361,
+      361,  361,  361,  361,  361,  361,  361,  365,  365,  365,
+
+      365,  365,  365,  365,  365,  365,  365,  365,  378,  378,
+      378,  378,  378,  378,  378,  378,  378,  378,  378,  381,
+     1020,  381,  381,  381,  381,  381,  381,  381,  381,  381,
+      383, 1020,  383,  383,  383,  383,  383,  383,  383,  383,
+      383,  386, 1020,  386,  386,  386,  386,  386,  386,  386,
+      386,  386,  398, 1020,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  169, 1020, 1020,  169,  169,  177, 1020,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  407,
+     1020, 1020,  407,  407,  407,  436, 1020, 1020,  436,  228,
+      228,  228,  228,  228,  228,  228,  229,  229,  229,  229,
+
+      229,  229,  229,  229,  462, 1020, 1020, 1020, 1020,  462,
+      462,  462,  462,  476,  476,  476,  476,  476,  476,  479,
+      479,  479,  479,  480, 1020,  480,  480,  480,  480,  265,
+      265,  265,  265,  265,  265,  265,  271, 1020,  271,  271,
+      271,  271,  271,  271,  271,  271,  271,  273, 1020,  273,
+      273,  273,  273,  273,  273,  273,  273,  273,  276, 1020,
+      276,  276,  276,  276,  276,  276,  276,  276,  276,  288,
+     1020,  288,  288,  288,  288,  288,  288,  288,  288,  288,
+      295,  295, 1020,  295,  295,  295,  295,  295,  295,  295,
+      295,  296,  296,  296,  296,  296,  296,  296,  296,  296,
+
+      296,  296,  309,  309, 1020,  309,  309,  309,  309,  309,
+      309,  309,  309,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  319,  319,  319,  319,  319,
+      319,  319,  319,  319,  319,  319,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  338,  338,
+      338,  338,  338,  338,  338,  338,  338,  338,  338,  342,
+      342,  342,  342,  342,  342,  342,  342,  342,  342,  342,
+      355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
+
+      355,  358,  358,  358,  358,  358,  358,  358,  358,  358,
+      358,  358,  361,  361,  361,  361,  361,  361,  361,  361,
+      361,  361,  361,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  378,  378,  378,  378,  378,  378,
+      378,  378,  378,  378,  378,  381, 1020,  381,  381,  381,
+      381,  381,  381,  381,  381,  381,  383, 1020,  383,  383,
+      383,  383,  383,  383,  383,  383,  383,  386, 1020,  386,
+      386,  386,  386,  386,  386,  386,  386,  386,  398, 1020,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  169,
+     1020, 1020,  169,  169,  407, 1020, 1020,  407,  407,  407,
+
+      436, 1020, 1020,  436,  610, 1020,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  613, 1020,  613,  613,  613,
+      613,  613,  613,  613,  613,  613,  615, 1020,  615,  615,
+      615,  615,  615,  615,  615,  615,  615,  618,  618,  618,
+      618,  618,  618,  618,  229,  229,  229,  229,  229,  229,
+      229,  229,  476,  476,  476,  476,  476,  476,  626, 1020,
+      626,  626,  626,  626,  480, 1020,  480,  480,  480,  480,
+      265,  265,  265,  265,  265,  265,  265,  271, 1020,  271,
+      271,  271,  271,  271,  271,  271,  271,  271,  635, 1020,
+      635,  635,  635,  635,  635,  635,  635,  635,  635,  638,
+
+     1020,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+      639, 1020,  639,  639,  639,  639,  639,  639,  639,  639,
+      639,  642, 1020,  642,  642,  642,  642,  642,  642,  642,
+      642,  642,  228,  228,  228,  228,  228,  228,  228,  295,
+      295, 1020,  295,  295,  295,  295,  295,  295,  295,  295,
+      653,  653,  653,  653,  653,  653,  653,  653,  653,  653,
+      653,  655,  655, 1020,  655,  655,  655,  655,  655,  655,
+      655,  655,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  662,  662,  662,  662,  662,  662,  662,
+      662,  662,  662,  662,  666,  666,  666,  666,  666,  666,
+
+      666,  666,  666,  666,  666,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  672,  672,  672,  672,
+      672,  672,  672,  672,  672,  672,  672,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  679,  679,
+      679,  679,  679,  679,  679,  679,  679,  679,  679,  683,
+      683,  683,  683,  683,  683,  683,  683,  683,  683,  683,
+      685,  685,  685,  685,  685,  685,  685,  685,  685,  685,
+      685,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  358,  358,  358,  358,  358,  358,  358,  358,
+      358,  358,  358,  696,  696,  696,  696,  696,  696,  696,
+
+      696,  696,  696,  696,  700,  700,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  702,  702,  702,  702,  702,
+      702,  702,  702,  702,  702,  702,  706,  706,  706,  706,
+      706,  706,  706,  706,  706,  706,  706,  381, 1020,  381,
+      381,  381,  381,  381,  381,  381,  381,  381,  713, 1020,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  716,
+     1020,  716,  716,  716,  716,  716,  716,  716,  716,  716,
+      717, 1020,  717,  717,  717,  717,  717,  717,  717,  717,
+      717,  720, 1020,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  407, 1020, 1020,  407,  407,  407,  610, 1020,
+
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  613,
+     1020,  613,  613,  613,  613,  613,  613,  613,  613,  613,
+      615, 1020,  615,  615,  615,  615,  615,  615,  615,  615,
+      615,  618,  618,  618,  618,  618,  618,  618,  229,  229,
+      229,  229,  229,  229,  229,  229,  626, 1020,  626,  626,
+      626,  626,  480, 1020,  480,  480,  480,  480,  265,  265,
+      265,  265,  265,  265,  265,  271, 1020,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  635, 1020,  635,  635,
+      635,  635,  635,  635,  635,  635,  635,  638, 1020,  638,
+      638,  638,  638,  638,  638,  638,  638,  638,  639, 1020,
+
+      639,  639,  639,  639,  639,  639,  639,  639,  639,  642,
+     1020,  642,  642,  642,  642,  642,  642,  642,  642,  642,
+      288, 1020,  288,  288,  288,  288,  288,  288,  288,  288,
+      288,  228,  228,  228,  228,  228,  228,  228,  295,  295,
+     1020,  295,  295,  295,  295,  295,  295,  295,  295,  653,
+      653,  653,  653,  653,  653,  653,  653,  653,  653,  653,
+      655,  655, 1020,  655,  655,  655,  655,  655,  655,  655,
+      655,  309,  309, 1020,  309,  309,  309,  309,  309,  309,
+      309,  309,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  662,  662,  662,  662,  662,  662,  662,
+
+      662,  662,  662,  662,  666,  666,  666,  666,  666,  666,
+      666,  666,  666,  666,  666,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  672,  672,  672,  672,
+      672,  672,  672,  672,  672,  672,  672,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  679,  679,
+      679,  679,  679,  679,  679,  679,  679,  679,  679,  683,
+      683,  683,  683,  683,  683,  683,  683,  683,  683,  683,
+      685,  685,  685,  685,  685,  685,  685,  685,  685,  685,
+      685,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  358,  358,  358,  358,  358,  358,  358,  358,
+
+      358,  358,  358,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  700,  700,  700,  700,  700,  700,
+      700,  700,  700,  700,  700,  702,  702,  702,  702,  702,
+      702,  702,  702,  702,  702,  702,  706,  706,  706,  706,
+      706,  706,  706,  706,  706,  706,  706,  381, 1020,  381,
+      381,  381,  381,  381,  381,  381,  381,  381,  713, 1020,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  716,
+     1020,  716,  716,  716,  716,  716,  716,  716,  716,  716,
+      717, 1020,  717,  717,  717,  717,  717,  717,  717,  717,
+      717,  720, 1020,  720,  720,  720,  720,  720,  720,  720,
+
+      720,  720,  398, 1020,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  407, 1020, 1020,  407,  407,  407,  229,
+      229,  229,  229,  229,  229,  229,  229,  480, 1020,  480,
+      480,  480,  480,  265,  265,  265,  265,  265,  265,  265,
+      271, 1020,  271,  271,  271,  271,  271,  271,  271,  271,
+      271,  288, 1020,  288,  288,  288,  288,  288,  288,  288,
+      288,  288,  228,  228,  228,  228,  228,  228,  228,  295,
+      295, 1020,  295,  295,  295,  295,  295,  295,  295,  295,
+      309,  309, 1020,  309,  309,  309,  309,  309,  309,  309,
+      309,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+
+      312,  312,   23, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020
     } ;
 
-static yyconst flex_int16_t yy_chk[7564] =
+static yyconst flex_int16_t yy_chk[7570] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1654,7 +1651,7 @@
         3,    3,    3,    6,   14,    6,    6,    3,    3,    3,
         3,   13,   13,   13,   13,   35,   14,   14,   14,   14,
 
-       25, 1019,   25,   25,   29,  102,    6,   35,   27,   27,
+       25, 1014,   25,   25,   29,  102,    6,   35,   27,   27,
        27,   27,    3,   33,    3,   25,   31,    3,   31,    3,
        31,   31,    3,   27,    3,   45,   45,   33,  102,    3,
         3,    5,    5,    5,    5,    5,    5,    5,    5,    5,
@@ -1715,766 +1712,766 @@
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   36,
-      215,   36,   36,   36,   36,   40,   38,   36,   38,   38,
-       38,   38,   40, 1017,   38,   39,  215,   39,   39,   39,
-       39,   46,   46,   39,  199,   39,   39,   39,   39,   39,
-       39,   39,   39,   39,   39,   39,   39,   39,  199,   39,
+     1012,   36,   36,   36,   36,   40,   38,   36,   38,   38,
+       38,   38,   40, 1008,   38,   39,  213,   39,   39,   39,
+       39,   46,   46,   39,  213,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   39,   39,   39,   39,   56,   39,
 
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
-       39,   39,   39,   41,   47,   41,   41,   41,   41,   70,
-       56,   47,   57,   57,   50,   41,   41, 1013,   47,   55,
-       41,   50,   41,   49,   58,   41,   58,   58,   50,   41,
-       49,   42,   41,   42,   42,   42,   42,   49,   78,  196,
-       41,  196,   70,   48,   42,   78,  114,  114,   42,   41,
-       48,   56,   50,   48,   48,   48,   48,   48,   50,   55,
-       42,   43,  116,  116,  796,   49,   43,  796,   49,   43,
-       43,   43,   43,   43,   43,   51,   52,   43,   53,   43,
-
-       43,   54,   51,   52,   80,   53,  266,   64,   54,   51,
-       52,   80,   53,  266,   64,   54,   59,   59,   59,   59,
-       60,   64,   60,   60,   60,   60,   67,   67,   67,   67,
-      126,  126,   51,   87,   80,   53,   71, 1012,   71,   52,
-       71,   71,   62,  195,   64,   54,   51,  195,   53,   61,
-       62,   62,   62,   62,   62,   62,   69,   69,   69,   69,
-       73,   62,   73,   73,   73,   73,   87,   61,   61,  105,
-       61,  113,   61,  105,   61,   61,   61,   61,  105,   61,
-       74,   61,   61,   61,   81,   81,   81,   81,   61,  295,
-       74,   74,   74,   74,   76, 1011,   76,   76,   76,   76,
-
-       82,   82,   82,   82,  113,  128,  128,   76,  197,   79,
-      197,   76,   79,   79,   79,   79,   79,   74,   90,   90,
-       90,   90,   74,   76,   89,  295,   89,   89,   89,   89,
-      138,  138,   92,   98,   98,   98,   98,  117,  117,   92,
-      605,  117,   92,  118,  118,  153,   92,  140,  140,  605,
-       90,   91,  118,   91,   91,   91,   91,   92,   99,   99,
-       99,   99,  109,   91,   91,   98,   92,  166,   91,  109,
-       91,  214,  109,   91,  117,  214,  109,   91,  153,  106,
-       91,  106,  106,  106,  106,  192,  216,  109,   91,  214,
-      192,  216,  107,  107,  107,  107,  109,   91,   94,   94,
-
-      166,   94,   94,   94,   94,   94,   94,   94,   94,   94,
-       94,   94,   94,  799,   94,   94,  799,  119,  119,  851,
-       94,   94,   94,   94,  107,  100,  851,  100,  100,  100,
-      100,  119, 1010,  119,  119,  119,  119,   94,  100,  123,
-      123,  190,  100,  130,  130,  129,  129,  142,  142,  129,
-      205,  205,  130,  190,  100,  419,  142,  419,  135,  135,
-      123,  256,   94,   94,   95,   95,  256,   95,   95,   95,
-       95,   95,   95,   95,   95,   95,   95,   95,   95,  135,
-       95,   95,  129,  120,  120, 1008,   95,   95,   95,   95,
-      141,  141,  212,  212,  141,  802,  131,  131,  802,  120,
-
-      120,  120,  120,   95,  274,  147,  147,  416,  213,   95,
-      131,  122,  131,  131,  131,  131,  213,  163,  122,  163,
-      163,  122,  132,  132,  416,  122,  147,  141,   95,   95,
-      108,  120,  108,  108,  108,  108,  122,  274,  132,  132,
-      132,  132,  108,  108,  793,  122,  793,  108,  162,  108,
-      162,  162,  108,  194,  226,  226,  108,  194,  134,  108,
-     1007,  194,  297,  162,  288,  134,  297,  108,  134,  288,
-      132,  297,  134,  208,  208,  208,  108,  111,  111,  111,
-      111,  111,  111,  134,  111,  111,  111,  111,  111,  111,
-      111,  111,  134,  111,  111,  143,  143,  253,  253,  111,
-
-      111,  111,  111,  155, 1005,  155,  155,  155,  155,  143,
-      309,  143,  143,  143,  143,  309,  111,  156,  156,  156,
-      156,  144,  144,  170,  170,  170,  170,  171,  171,  171,
-      171,  172,  172,  172,  172,  283,  283,  144,  144,  144,
-      144,  111,  111,  112,  112,  112,  112,  112,  112,  156,
-      112,  112,  112,  112,  112,  112,  112,  112,  221,  112,
-      112,  304,  304,  221,  146,  112,  112,  112,  112,  144,
-      158,  146,  229,  265,  146,  572,  221,  158,  146,  229,
-      158,  265,  112, 1004,  158,  384,  229,  572,  112,  146,
-      173,  173,  173,  173,  246,  158,  246,  246,  146,  180,
-
-      180,  180,  180, 1001,  158,  313,  313,  112,  112,  121,
-      121,  257,  257,  257,  257,  315,  315,  181,  384,  181,
-      181,  181,  181,  121,  234,  121,  121,  121,  121,  249,
-      181,  234,  651,  249,  181,  121,  121,  249,  234,  904,
-      121,  998,  121,  318,  318,  121,  181,  997,  206,  121,
-      206,  231,  121,  206,  206,  206,  206,  904,  231,  651,
-      121,  231,  231,  231,  231,  231,  286,  286,  286,  121,
+       39,   39,   39,   41,   47,   41,   41,   41,   41,   57,
+       57,   47,  192,   70,   49,   41,   41,  192,   47,   56,
+       41,   49,   41,   54,   55,   41,  114,  114,   49,   41,
+       54,   42,   41,   42,   42,   42,   42,   54,   50,   58,
+       41,   58,   58,   48,   42,   50,   70, 1007,   42,   41,
+       48,   51,   50,   48,   48,   48,   48,   48,   51,   49,
+       42,   43,  116,  116,   55,   51,   43,   54,   78,   43,
+       43,   43,   43,   43,   43,   78,   50,   43,   52,   43,
+
+       43,  792,   50,   53,  792,   52,   87,  195,   51,  113,
+       53,  195,   52,   59,   59,   59,   59,   53,  196,   62,
+      196,   60,   51,   60,   60,   60,   60,   62,   62,   62,
+       62,   62,   62,   67,   67,   67,   67,   64,   62,   87,
+       53,   52,  113, 1006,   64,   69,   69,   69,   69,  126,
+      126,   64,  153,   53,   61,   71, 1005,   71,   74,   71,
+       71,   73,  215,   73,   73,   73,   73, 1003,   74,   74,
+       74,   74,   61,   61,   64,   61,   80,   61,  215,   61,
+       61,   61,   61,   80,   61,  153,   61,   61,   61,   81,
+       81,   81,   81,   61,   76,   74,   76,   76,   76,   76,
+
+       74,   82,   82,   82,   82,  848,   80,   76,  197,   79,
+      197,   76,   79,   79,   79,   79,   79,   89, 1002,   89,
+       89,   89,   89,   76,   90,   90,   90,   90,  848,   92,
+      123,  123,   98,   98,   98,   98,   92,  128,  128,   92,
+      166,  118,  118,   92,   99,   99,   99,   99,  265,  105,
+      118,  123, 1000,  105,   92,  265,   90,   91,  105,   91,
+       91,   91,   91,   92,   98,  107,  107,  107,  107,   91,
+       91,  130,  130,  166,   91,  603,   91,  135,  135,   91,
+      130,  138,  138,   91,  603,  106,   91,  106,  106,  106,
+      106,  140,  140,  163,   91,  163,  163,  107,  135,  205,
+
+      205,  147,  147,   91,   94,   94,  999,   94,   94,   94,
+       94,   94,   94,   94,   94,   94,   94,   94,   94,  996,
+       94,   94,  147,  273,  199,  190,   94,   94,   94,   94,
+      415,  100,  109,  100,  100,  100,  100,  190,  199,  109,
+      142,  142,  109,   94,  100,  264,  109,  415,  100,  142,
+      194,  117,  117,  264,  194,  117,  273,  109,  194,  993,
+      100,  129,  129,  212,  212,  129,  109,  216,   94,   94,
+       95,   95,  216,   95,   95,   95,   95,   95,   95,   95,
+       95,   95,   95,   95,   95,  992,   95,   95,  117,  119,
+      119,  903,   95,   95,   95,   95,  226,  226,  129,  255,
+
+      131,  131,  440,  119,  255,  119,  119,  119,  119,   95,
+      440,  120,  120,  440,  131,   95,  131,  131,  131,  131,
+      155,  287,  155,  155,  155,  155,  287,  120,  120,  120,
+      120,  208,  208,  208,   95,   95,  108,  903,  108,  108,
+      108,  108,  141,  141,  252,  252,  141,  122,  108,  108,
+      132,  132,  214,  108,  122,  108,  214,  122,  108,  120,
+      795,  122,  108,  795,  229,  108,  132,  132,  132,  132,
+      214,  229,  122,  108,  162,  308,  162,  162,  229,  141,
+      308,  122,  108,  111,  111,  111,  111,  111,  111,  162,
+      111,  111,  111,  111,  111,  111,  111,  111,  132,  111,
+
+      111,  418,  134,  418,  233,  111,  111,  111,  111,  134,
+      146,  233,  134,  991,  143,  143,  134,  146,  233,  294,
+      146,  990,  111,  245,  146,  245,  245,  134,  143,  988,
+      143,  143,  143,  143,  268,  146,  134,  156,  156,  156,
+      156,  268,  282,  282,  146,  303,  303,  111,  111,  112,
+      112,  112,  112,  112,  112,  294,  112,  112,  112,  112,
+      112,  112,  112,  112,  798,  112,  112,  798,  158,  156,
+      987,  112,  112,  112,  112,  158,  397,  268,  158,  144,
+      144,  397,  158,  170,  170,  170,  170,  986,  112,  171,
+      171,  171,  171,  158,  112,  144,  144,  144,  144,  285,
+
+      285,  285,  158,  172,  172,  172,  172,  173,  173,  173,
+      173,  312,  312,  112,  112,  121,  121,  180,  180,  180,
+      180,  235,  306,  306,  306,  221,  899,  144,  235,  121,
+      221,  121,  121,  121,  121,  235,  185,  185,  185,  185,
+      570,  121,  121,  221,  899,  248,  121,  185,  121,  248,
+      985,  121,  570,  248,  206,  121,  206,  231,  121,  206,
+      206,  206,  206,  185,  231,  978,  121,  231,  231,  231,
+      231,  231,  314,  314,  235,  121,  124,  124,  124,  124,
       124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  456,  124,  124,  185,  185,
-      185,  185,  124,  124,  124,  124,  307,  307,  307,  185,
+      124,  897,  124,  124,  849,  237,  317,  317,  124,  124,
 
-      204,  204,  204,  204,  859,  233,  232,  235,  859,  124,
-      236,  204,  233,  232,  235,  185,  239,  236,  456,  233,
-      232,  235,  910,  239,  236,  269,  398,  204,  319,  319,
-      239,  398,  269,  996,  124,  124,  125,  125,  125,  125,
-      125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
-      125,  232,  125,  125,  995,  233,  652,  235,  125,  125,
-      125,  125,  237,  236,  238,  240,  239,  910,  269,  237,
-      241,  238,  240,  320,  320,  125,  237,  241,  238,  240,
-      905,  125,  320,  652,  241,  259,  259,  259,  259,  261,
-      261,  261,  261,  261,  270,  270,  270,  270,  905,  238,
-
-      125,  125,  133,  133,  237,  237,  271,  271,  271,  271,
-      327,  327,  241,  240,  325,  325,  133,  993,  133,  133,
-      133,  133,  278,  278,  278,  278,  327,  327,  133,  133,
-      321,  321,  946,  133,  946,  133,  329,  329,  133,  321,
-      336,  336,  133,  268,  633,  133,  268,  268,  268,  268,
-      268,  633,  284,  133,  284,  338,  338,  284,  284,  284,
-      284,  325,  133,  136,  136,  136,  136,  136,  136,  136,
-      136,  136,  136,  136,  136,  136,  136,  136,  633,  136,
-      136,  299,  299,  299,  299,  136,  136,  136,  136,  852,
-      279,  992,  279,  279,  279,  279,  852,  280,  280,  280,
-
-      280,  860,  136,  279,  305,  860,  305,  279,  280,  305,
-      305,  305,  305,  316,  316,  341,  341,  316,  991,  279,
-      342,  342,  352,  352,  280,  359,  359,  136,  136,  137,
-      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-      137,  137,  137,  137,  853,  137,  137,  361,  361,  990,
-      316,  137,  137,  137,  137,  282,  282,  282,  282,  294,
-      857,  294,  294,  294,  294,  857,  282,  853,  137,  317,
-      317,  861,  294,  317,  137,  861,  294,  332,  332,  364,
-      364,  332,  282,  348,  348,  787,  332,  300,  294,  300,
-      300,  300,  300,  137,  137,  145,  145,  441,  343,  343,
-
-      300,  322,  322,  634,  300,  441,  317,  343,  441,  145,
-      634,  145,  145,  145,  145,  787,  300,  322,  322,  322,
-      322,  145,  145,  328,  328,  862,  145,  983,  145,  862,
-      348,  145,  330,  330,  328,  145,  328,  634,  145,  328,
-      328,  328,  328,  344,  344,  948,  145,  948,  330,  330,
-      330,  462,  344,  365,  365,  145,  148,  148,  148,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-      148,  854,  148,  148,  301,  301,  301,  301,  148,  148,
-      148,  148,  350,  350,  462,  301,  303,  303,  303,  303,
-      371,  371,  353,  353,  854,  148,  863,  303,  350,  350,
-
-      863,  301,  978,  339,  339,  366,  366,  339,  353,  353,
-      353,  340,  340,  303,  366,  340,  375,  375,  393,  393,
-      148,  148,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  371,  149,  149,
-      339,  324,  324,  908,  149,  149,  149,  149,  340,  388,
-      388,  388,  388,  326,  326,  367,  367,  324,  324,  324,
-      324,  149,  362,  362,  367,  977,  362,  149,  324,  326,
-      326,  326,  326,  355,  355,  975,  402,  355,  402,  402,
-      326,  911,  355,  974,  324,  786,  149,  149,  157,  908,
-      157,  157,  157,  157,  363,  363,  326,  972,  363,  362,
-
-      157,  157,  345,  345,  495,  157,  971,  157,  433,  433,
-      157,  351,  351,  786,  157,  490,  490,  157,  345,  345,
-      345,  345,  351,  497,  351,  157,  911,  351,  351,  351,
-      351,  363,  506,  506,  157,  160,  160,  495,  160,  160,
-      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
-      858,  160,  160,  347,  347,  858,  497,  160,  160,  160,
-      160,  464,  373,  373,  970,  368,  368,  968,  464,  347,
-      347,  347,  347,  967,  160,  464,  349,  349,  373,  373,
-      347,  368,  368,  368,  368,  396,  396,  396,  403,  403,
-      403,  403,  349,  349,  349,  349,  347,  556,  556,  160,
-
-      160,  161,  161,  349,  161,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  966,  161,  161,  349,
-      370,  370,  561,  161,  161,  161,  161,  376,  376,  436,
-      436,  436,  372,  372,  502,  965,  370,  370,  370,  370,
-      161,  649,  649,  376,  376,  376,  161,  370,  372,  372,
-      372,  372,  378,  378,  964,  561,  378,  855,  502,  372,
-      962,  378,  502,  370,  855,  161,  161,  287,  287,  287,
-      287,  390,  390,  390,  390,  372,  287,  287,  287,  394,
-      902,  394,  390,  563,  394,  394,  394,  394,  667,  667,
-      287,  287,  287,  287,  287,  287,  289,  289,  390,  289,
+      124,  124,  237,  181,  973,  181,  181,  181,  181,  237,
+      204,  204,  204,  204,  296,  124,  181,  849,  296,  232,
+      181,  204,  234,  296,  238,  898,  232,  318,  318,  234,
+      237,  238,  181,  232,  328,  328,  234,  204,  238,  897,
+      124,  124,  125,  125,  125,  125,  125,  125,  125,  125,
+      125,  125,  125,  125,  125,  125,  125,  648,  125,  125,
+      789,  236,  789,  239,  125,  125,  125,  125,  236,  232,
+      239,  240,  234,  898,  238,  236,  972,  239,  240,  335,
+      335,  125,  337,  337,  648,  240,  500,  125,  256,  256,
+      256,  256,  258,  258,  258,  258,  260,  260,  260,  260,
+
+      260,  315,  315,  236,  236,  315,  125,  125,  133,  133,
+      500,  239,  267,  240,  500,  267,  267,  267,  267,  267,
+      340,  340,  133,  970,  133,  133,  133,  133,  269,  269,
+      269,  269,  341,  341,  133,  133,  319,  319,  315,  133,
+      969,  133,  324,  324,  133,  319,  351,  351,  133,  320,
+      320,  133,  270,  270,  270,  270,  358,  358,  320,  133,
+      277,  277,  277,  277,  298,  298,  298,  298,  133,  136,
+      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
+      136,  136,  136,  136,  649,  136,  136,  360,  360,  324,
+      630,  136,  136,  136,  136,  846,  278,  630,  278,  278,
 
+      278,  278,  846,  279,  279,  279,  279,  967,  136,  278,
+      283,  649,  283,  278,  279,  283,  283,  283,  283,  347,
+      347,  304,  782,  304,  630,  278,  304,  304,  304,  304,
+      279,  363,  363,  136,  136,  137,  137,  137,  137,  137,
+      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
+      782,  137,  137,  364,  364,  374,  374,  137,  137,  137,
+      137,  281,  281,  281,  281,  293,  347,  293,  293,  293,
+      293,  383,  281,  783,  137,  316,  316,  854,  293,  316,
+      137,  854,  293,  331,  331,  392,  392,  331,  281,  370,
+      370,  966,  331,  299,  293,  299,  299,  299,  299,  137,
+
+      137,  145,  145,  783,  383,  901,  299,  321,  321,  847,
+      299,  965,  316,  326,  326,  145,  847,  145,  145,  145,
+      145,  963,  299,  321,  321,  321,  321,  145,  145,  326,
+      326,  509,  145,  962,  145,  509,  370,  145,  327,  327,
+      509,  145,  329,  329,  145,  387,  387,  387,  387,  327,
+      904,  327,  145,  901,  327,  327,  327,  327,  329,  329,
+      329,  145,  148,  148,  148,  148,  148,  148,  148,  148,
+      148,  148,  148,  148,  148,  148,  148,  961,  148,  148,
+      300,  300,  300,  300,  148,  148,  148,  148,  342,  342,
+      960,  300,  302,  302,  302,  302,  904,  342,  855,  343,
+
+      343,  148,  855,  302,  959,  365,  365,  300,  343,  338,
+      338,  354,  354,  338,  365,  354,  455,  339,  339,  302,
+      354,  339,  395,  395,  395,  900,  148,  148,  149,  149,
+      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
+      149,  149,  149,  900,  149,  149,  338,  323,  323,  455,
+      149,  149,  149,  149,  339,  349,  349,  432,  432,  325,
+      325,  366,  366,  323,  323,  323,  323,  149,  372,  372,
+      366,  349,  349,  149,  323,  325,  325,  325,  325,  401,
+      957,  401,  401,  956,  372,  372,  325,  352,  352,  955,
+      323,  856,  149,  149,  157,  856,  157,  157,  157,  157,
+
+      488,  488,  325,  352,  352,  352,  157,  157,  344,  344,
+      461,  157,  850,  157,  504,  504,  157,  350,  350,  850,
+      157,  375,  375,  157,  344,  344,  344,  344,  350,  493,
+      350,  157,  954,  350,  350,  350,  350,  375,  375,  375,
+      157,  160,  160,  461,  160,  160,  160,  160,  160,  160,
+      160,  160,  160,  160,  160,  160,  946,  160,  160,  346,
+      346,  495,  493,  160,  160,  160,  160,  361,  361,  554,
+      554,  361,  435,  435,  435,  346,  346,  346,  346,  941,
+      160,  941,  348,  348,  646,  646,  346,  377,  377,  362,
+      362,  377,  852,  362,  495,  559,  377,  852,  348,  348,
+
+      348,  348,  346,  902,  361,  160,  160,  161,  161,  348,
+      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+      161,  161,  853,  161,  161,  348,  362,  853,  559,  161,
+      161,  161,  161,  402,  402,  402,  402,  367,  367,  491,
+      491,  491,  369,  369,  664,  664,  161,  403,  403,  403,
+      403,  902,  161,  367,  367,  367,  367,  944,  369,  369,
+      369,  369,  404,  404,  404,  404,  507,  507,  507,  369,
+      942,  161,  161,  286,  286,  286,  286,  389,  389,  389,
+      389,  940,  286,  286,  286,  369,  939,  393,  389,  393,
+      513,  513,  393,  393,  393,  393,  286,  286,  286,  286,
+
+      286,  286,  288,  288,  389,  288,  288,  288,  288,  288,
+      288,  288,  288,  288,  288,  288,  288,  938,  288,  288,
+      371,  371,  661,  661,  288,  288,  288,  288,  405,  405,
+      405,  405,  373,  373,  665,  665,  371,  371,  371,  371,
+      513,  288,  943,  373,  943,  373,  851,  371,  373,  373,
+      373,  373,  406,  851,  406,  521,  521,  406,  406,  406,
+      406,  534,  534,  371,  521,  661,  288,  288,  289,  289,
+      534,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
       289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-      289,  961,  289,  289,  374,  374,  563,  960,  289,  289,
-      289,  289,  467,  668,  668,  374,  959,  374,  902,  467,
-      374,  374,  374,  374,  951,  289,  467,  392,  392,  392,
-      392,  404,  404,  404,  404,  493,  493,  493,  392,  405,
-      405,  405,  405,  406,  406,  406,  406,  509,  509,  509,
-      289,  289,  290,  290,  392,  290,  290,  290,  290,  290,
-      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-
-      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
-      290,  290,  290,  290,  290,  290,  290,  290,  291,  291,
-      949,  291,  291,  291,  291,  291,  291,  291,  291,  291,
-      291,  291,  291,  912,  291,  291,  434,  434,  434,  434,
-      291,  291,  291,  291,  612,  389,  947,  389,  389,  389,
-      389,  945,  432,  432,  432,  432,  864,  291,  389,  407,
-      864,  407,  389,  432,  407,  407,  407,  407,  435,  435,
-      435,  435,  523,  523,  389,  944,  291,  612,  912,  432,
-      903,  523,  291,  291,  308,  308,  308,  308,  943,  466,
-
-      468,  469,  470,  308,  308,  308,  466,  468,  469,  470,
-      515,  515,  942,  466,  468,  469,  470,  308,  308,  308,
-      308,  308,  308,  310,  310,  310,  310,  310,  310,  940,
-      310,  310,  310,  310,  310,  310,  310,  310,  903,  310,
-      310,  939,  465,  469,  466,  310,  310,  310,  310,  465,
-      471,  480,  480,  480,  480,  480,  465,  471,  517,  517,
-      515,  487,  310,  487,  471,  938,  487,  487,  487,  487,
-      491,  491,  491,  491,  517,  517,  465,  492,  492,  492,
-      492,  507,  507,  507,  507,  673,  673,  310,  310,  311,
-      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
-
-      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
-      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
-      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
-      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
-      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
-      311,  311,  311,  311,  311,  312,  312,  312,  312,  312,
-      312,  937,  312,  312,  312,  312,  312,  312,  312,  312,
-      913,  312,  312,  936,  472,  486,  473,  312,  312,  312,
-      312,  472,  486,  473,  528,  528,  474,  950,  472,  950,
-      473,  522,  522,  474,  312,  522,  503,  958,  503,  958,
-
-      474,  503,  503,  503,  503,  511,  486,  674,  674,  511,
-      486,  856,  472,  312,  511,  913,  472,  473,  856,  312,
-      312,  323,  323,  474,  508,  508,  508,  508,  522,  935,
-      489,  489,  489,  489,  528,  323,  932,  323,  323,  323,
-      323,  489,  505,  505,  505,  505,  530,  530,  323,  931,
-      524,  524,  323,  505,  524,  684,  684,  489,  930,  514,
-      514,  617,  530,  530,  323,  331,  331,  638,  929,  505,
-      514,  927,  514,  685,  685,  514,  514,  514,  514,  518,
-      518,  331,  331,  331,  331,  520,  520,  524,  541,  541,
-      331,  331,  331,  925,  617,  518,  518,  518,  518,  924,
 
-      638,  520,  520,  520,  331,  331,  331,  331,  331,  331,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  290,  290,  937,  290,  290,  290,
+      290,  290,  290,  290,  290,  290,  290,  290,  290,  905,
+      290,  290,  433,  433,  433,  433,  290,  290,  290,  290,
+      561,  388,  935,  388,  388,  388,  388,  934,  391,  391,
+      391,  391,  933,  290,  388,  557,  557,  557,  388,  391,
+      431,  431,  431,  431,  434,  434,  434,  434,  547,  547,
+      388,  431,  290,  561,  905,  391,  932,  547,  290,  290,
+
+      307,  307,  307,  307,  931,  463,  465,  431,  466,  307,
+      307,  307,  463,  465,  610,  466,  526,  526,  930,  463,
+      465,  927,  466,  307,  307,  307,  307,  307,  307,  309,
+      309,  309,  309,  309,  309,  926,  309,  309,  309,  309,
+      309,  309,  309,  309,  615,  309,  309,  610,  467,  468,
+      469,  309,  309,  309,  309,  467,  468,  469,  489,  489,
+      489,  489,  467,  468,  469,  945,  526,  945,  309,  478,
+      478,  478,  478,  478,  485,  925,  485,  615,  924,  485,
+      485,  485,  485,  490,  490,  490,  490,  670,  670,  922,
+      467,  671,  671,  309,  309,  310,  310,  310,  310,  310,
+
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
+      310,  311,  311,  311,  311,  311,  311,  920,  311,  311,
+      311,  311,  311,  311,  311,  311,  919,  311,  311,  681,
+      681,  471,  470,  311,  311,  311,  311,  464,  471,  470,
+      682,  682,  472,  918,  464,  471,  470,  539,  539,  472,
+
+      311,  464,  484,  520,  520,  635,  472,  520,  917,  484,
+      687,  687,  487,  487,  487,  487,  916,  673,  673,  311,
+      470,  673,  471,  487,  470,  311,  311,  322,  322,  472,
+      688,  688,  464,  484,  698,  698,  915,  484,  635,  487,
+      520,  322,  914,  322,  322,  322,  322,  539,  503,  503,
+      503,  503,  515,  515,  322,  501,  913,  501,  322,  503,
+      501,  501,  501,  501,  505,  505,  505,  505,  515,  515,
+      322,  330,  330,  666,  666,  503,  506,  506,  506,  506,
+      699,  699,  666,  516,  516,  667,  667,  330,  330,  330,
+      330,  518,  518,  953,  667,  953,  330,  330,  330,  516,
+
+      516,  516,  516,  555,  555,  555,  555,  518,  518,  518,
+      330,  330,  330,  330,  330,  330,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  912,  332,  332,  512,  512,  890,  631,  332,  332,
+      332,  332,  517,  517,  631,  512,  888,  512,  528,  528,
+      512,  512,  512,  512,  887,  332,  525,  525,  517,  517,
+      517,  517,  541,  541,  528,  528,  857,  525,  886,  525,
+      857,  631,  525,  525,  525,  525,  704,  704,  541,  541,
+      332,  332,  333,  333,  333,  333,  333,  333,  333,  333,
       333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
-      333,  333,  333,  333,  333,  914,  333,  333,  516,  516,
-      536,  536,  333,  333,  333,  333,  533,  533,  541,  536,
-      519,  519,  690,  690,  516,  516,  516,  516,  923,  333,
-      527,  527,  533,  533,  533,  516,  519,  519,  519,  519,
-      922,  527,  921,  527,  549,  549,  527,  527,  527,  527,
-      914,  516,  920,  549,  333,  333,  334,  334,  334,  334,
-      334,  334,  334,  334,  334,  334,  334,  334,  334,  334,
-      334,  334,  334,  334,  334,  334,  334,  334,  334,  334,
 
+      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
+      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
+      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
+      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
+      333,  333,  333,  333,  333,  333,  333,  333,  334,  334,
       334,  334,  334,  334,  334,  334,  334,  334,  334,  334,
-      334,  334,  334,  334,  334,  334,  334,  334,  334,  334,
-      334,  334,  334,  334,  334,  334,  334,  334,  334,  334,
-      334,  334,  334,  334,  334,  334,  334,  334,  334,  334,
-      334,  334,  335,  335,  335,  335,  335,  335,  335,  335,
-      335,  335,  335,  335,  335,  335,  335,  919,  335,  335,
-      529,  529,  664,  664,  335,  335,  335,  335,  543,  543,
-      906,  642,  531,  531,  691,  691,  529,  529,  529,  529,
-      907,  335,  535,  535,  543,  543,  535,  529,  531,  531,
-      531,  531,  537,  537,  532,  532,  537,  915,  544,  544,
-
-      335,  701,  701,  529,  642,  664,  335,  335,  346,  346,
-      532,  532,  532,  532,  544,  544,  544,  544,  906,  535,
-      546,  546,  346,  918,  346,  346,  346,  346,  907,  537,
-      540,  540,  559,  559,  559,  346,  546,  546,  546,  346,
-      917,  540,  915,  540,  545,  545,  540,  540,  540,  540,
-      656,  346,  354,  354,  656,  555,  555,  555,  555,  656,
-      545,  545,  545,  545,  702,  702,  555,  895,  354,  354,
-      354,  354,  557,  557,  557,  557,  893,  354,  354,  354,
-      548,  548,  555,  892,  548,  716,  550,  550,  707,  707,
-      550,  354,  354,  354,  354,  354,  354,  356,  356,  356,
+      334,  334,  334,  906,  334,  334,  514,  514,  705,  705,
+      334,  334,  334,  334,  522,  522,  885,  639,  522,  883,
+      527,  527,  514,  514,  514,  514,  653,  334,  533,  533,
+      653,  713,  533,  514,  882,  653,  527,  527,  527,  527,
+
+      529,  529,  556,  556,  556,  556,  334,  527,  906,  514,
+      639,  522,  334,  334,  345,  345,  529,  529,  529,  529,
+      530,  530,  717,  527,  713,  533,  531,  531,  345,  881,
+      345,  345,  345,  345,  787,  787,  530,  530,  530,  530,
+      620,  345,  531,  531,  531,  345,  880,  620,  879,  535,
+      535,  538,  538,  535,  620,  717,  774,  345,  353,  353,
+      790,  790,  538,  774,  538,  878,  621,  538,  538,  538,
+      538,  542,  542,  621,  353,  353,  353,  353,  544,  544,
+      621,  678,  678,  353,  353,  353,  535,  542,  542,  542,
+      542,  774,  695,  695,  544,  544,  544,  353,  353,  353,
+
+      353,  353,  353,  355,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  877,  355,
+      355,  540,  540,  875,  678,  355,  355,  355,  355,  564,
+      564,  564,  564,  543,  543,  695,  895,  540,  540,  540,
+      540,  874,  355,  565,  565,  565,  565,  895,  540,  543,
+      543,  543,  543,  551,  895,  551,  683,  683,  551,  551,
+      551,  551,  690,  690,  540,  683,  690,  355,  355,  356,
+      356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
+      356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
+      356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
 
       356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
-      356,  356,  891,  356,  356,  542,  542,  548,  716,  356,
-      356,  356,  356,  550,  558,  558,  558,  558,  669,  669,
-      890,  542,  542,  542,  542,  888,  356,  669,  553,  887,
-      553,  886,  542,  553,  553,  553,  553,  566,  566,  566,
-      566,  567,  567,  567,  567,  676,  676,  885,  542,  676,
-      884,  356,  356,  357,  357,  357,  357,  357,  357,  357,
-      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
-      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
+      356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
+      356,  356,  356,  356,  356,  356,  356,  356,  356,  356,
+      356,  356,  356,  356,  356,  357,  357,  357,  357,  357,
       357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
+      873,  357,  357,  553,  553,  553,  553,  357,  357,  357,
+      357,  546,  546,  744,  553,  546,  548,  548,  622,  623,
+      548,  872,  624,  871,  357,  622,  623,  625,  744,  624,
+      553,  870,  622,  623,  625,  744,  624,  632,  632,  632,
+      632,  625,  869,  357,  633,  633,  633,  633,  546,  357,
+
+      357,  368,  368,  548,  650,  650,  650,  650,  868,  622,
+      623,  651,  651,  651,  651,  368,  624,  368,  368,  368,
+      368,  659,  659,  662,  662,  867,  625,  662,  368,  770,
+      791,  791,  368,  660,  660,  866,  770,  659,  659,  659,
+      659,  793,  793,  770,  368,  376,  376,  684,  684,  660,
+      660,  660,  660,  794,  794,  858,  684,  700,  700,  858,
+      662,  376,  376,  376,  376,  859,  700,  701,  701,  859,
+      376,  376,  376,  663,  663,  865,  701,  663,  770,  668,
+      668,  797,  797,  668,  376,  376,  376,  376,  376,  376,
+      378,  378,  378,  378,  378,  378,  378,  378,  378,  378,
+
+      378,  378,  378,  378,  378,  864,  378,  378,  676,  676,
+      663,  863,  378,  378,  378,  378,  668,  677,  677,  707,
+      707,  693,  693,  707,  676,  676,  676,  676,  862,  378,
+      694,  694,  860,  677,  677,  677,  677,  693,  693,  693,
+      693,  710,  710,  710,  710,  838,  694,  694,  694,  694,
+      711,  711,  711,  711,  378,  378,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
 
-      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
-      357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
-      357,  357,  357,  357,  357,  357,  357,  357,  357,  358,
-      358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
-      358,  358,  358,  358,  883,  358,  358,  882,  622,  623,
-      624,  358,  358,  358,  358,  622,  623,  624,  625,  626,
-      627,  880,  622,  623,  624,  625,  626,  627,  358,  628,
-      708,  708,  625,  626,  627,  879,  628,  635,  635,  635,
-      635,  622,  878,  628,  720,  791,  791,  358,  636,  636,
-      636,  636,  877,  358,  358,  369,  369,  794,  794,  625,
-
-      626,  670,  670,  876,  627,  653,  653,  653,  653,  369,
-      670,  369,  369,  369,  369,  662,  662,  720,  628,  875,
-      681,  681,  369,  795,  795,  874,  369,  654,  654,  654,
-      654,  662,  662,  662,  662,  663,  663,  873,  369,  377,
-      377,  686,  686,  679,  679,  693,  693,  797,  797,  693,
-      686,  663,  663,  663,  663,  377,  377,  377,  377,  679,
-      679,  679,  679,  681,  377,  377,  377,  665,  665,  798,
-      798,  665,  872,  666,  666,  801,  801,  666,  377,  377,
-      377,  377,  377,  377,  379,  379,  379,  379,  379,  379,
-      379,  379,  379,  379,  379,  379,  379,  379,  379,  909,
-
-      379,  379,  680,  680,  665,  871,  379,  379,  379,  379,
-      666,  696,  696,  687,  687,  697,  697,  849,  680,  680,
-      680,  680,  687,  379,  849,  986,  986,  696,  696,  696,
-      696,  697,  697,  697,  697,  703,  703,  704,  704,  710,
-      710,  987,  987,  710,  703,  909,  704,  849,  379,  379,
-      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
-      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
-      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
-      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
-      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  380,  380,  380,  728,  380,  380,
+      843,  837,  843,  843,  380,  380,  380,  380,  669,  669,
+      728,  844,  669,  845,  835,  679,  679,  728,  844,  679,
+      845,  380,  834,  680,  680,  685,  685,  680,  767,  685,
+      686,  686,  696,  696,  686,  767,  696,  948,  948,  948,
+      380,  844,  767,  845,  832,  669,  380,  380,  396,  396,
+      396,  396,  679,  894,  768,  894,  894,  396,  396,  396,
+
+      680,  768,  685,  950,  950,  950,  831,  686,  768,  696,
+      767,  396,  396,  396,  396,  396,  396,  398,  398,  830,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  827,  398,  398,  952,  952,  952,  768,  398,
+      398,  398,  398,  697,  697,  861,  841,  697,  702,  702,
+      842,  892,  702,  841,  826,  892,  398,  842,  861,  893,
+      841,  896,  892,  893,  842,  861,  981,  981,  825,  892,
+      893,  824,  896,  822,  947,  947,  947,  893,  947,  896,
+      697,  398,  398,  399,  399,  702,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
 
-      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
-      380,  380,  380,  380,  380,  380,  381,  381,  381,  381,
-      381,  381,  381,  381,  381,  381,  381,  381,  381,  381,
-      381,  731,  381,  381,  698,  698,  988,  988,  381,  381,
-      381,  381,  671,  671,  731,  870,  671,  747,  869,  672,
-      672,  731,  868,  672,  867,  381,  865,  682,  682,  683,
-      683,  682,  747,  683,  688,  688,  689,  689,  688,  747,
-      689,  842,  841,  848,  381,  848,  848,  698,  839,  671,
-      381,  381,  397,  397,  397,  397,  672,  713,  713,  713,
-      713,  397,  397,  397,  682,  778,  683,  714,  714,  714,
-
-      714,  688,  778,  689,  838,  397,  397,  397,  397,  397,
-      397,  399,  399,  836,  399,  399,  399,  399,  399,  399,
-      399,  399,  399,  399,  399,  399,  835,  399,  399,  834,
-      778,  831,  779,  399,  399,  399,  399,  699,  699,  779,
-      843,  699,  700,  700,  846,  847,  700,  843,  866,  897,
-      399,  846,  847,  897,  843,  900,  830,  829,  846,  847,
-      897,  866,  899,  828,  899,  899,  900,  897,  866,  779,
-      953,  953,  953,  900,  699,  399,  399,  400,  400,  700,
-      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-
-      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-      400,  400,  400,  401,  401,  826,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  825,  401,
-      401,  955,  955,  955,  824,  401,  401,  401,  401,  705,
-      705,  772,  770,  705,  771,  823,  706,  706,  772,  770,
-      706,  771,  401,  773,  901,  772,  770,  850,  771,  844,
-      773,  774,  822,  821,  850,  901,  844,  773,  774,  819,
-
-      818,  401,  901,  844,  817,  774,  705,  401,  401,  494,
-      494,  494,  494,  706,  770,  772,  771,  850,  494,  494,
-      494,  816,  773,  952,  952,  952,  844,  952,  957,  957,
-      957,  814,  494,  494,  494,  494,  494,  494,  498,  498,
-      774,  498,  498,  498,  498,  498,  498,  498,  498,  498,
-      498,  498,  498,  813,  498,  498,  812,  845,  811,  810,
-      498,  498,  498,  498,  845,  898,  954,  954,  954,  898,
-      954,  845,  809,  808,  807,  806,  898,  498,  956,  956,
-      956,  804,  956,  898,  803,  784,  776,  769,  768,  767,
-      766,  765,  764,  763,  845,  762,  761,  760,  759,  758,
-
-      755,  754,  498,  498,  499,  499,  752,  499,  499,  499,
-      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
-      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
-      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
-      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
-      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
-      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
-      510,  510,  510,  510,  749,  748,  746,  745,  744,  510,
-      510,  510,  743,  742,  741,  740,  739,  738,  736,  735,
-      734,  733,  732,  510,  510,  510,  510,  510,  510,  512,
-
-      512,  512,  512,  512,  512,  730,  512,  512,  512,  512,
-      512,  512,  512,  512,  728,  512,  512,  727,  724,  719,
-      715,  512,  512,  512,  512,  712,  695,  678,  659,  655,
-      650,  646,  641,  637,  632,  631,  630,  621,  512,  620,
-      615,  611,  610,  609,  608,  607,  606,  604,  603,  602,
-      601,  600,  599,  597,  596,  595,  594,  593,  592,  591,
-      590,  588,  587,  512,  512,  513,  513,  513,  513,  513,
-      513,  586,  513,  513,  513,  513,  513,  513,  513,  513,
-      513,  513,  513,  513,  513,  513,  513,  513,  513,  513,
-      513,  513,  513,  513,  513,  513,  513,  513,  513,  513,
-
-      513,  513,  513,  513,  513,  513,  513,  513,  513,  513,
-      513,  513,  513,  513,  513,  513,  513,  513,  513,  513,
-      513,  513,  513,  513,  513,  513,  513,  513,  513,  513,
-      513,  521,  521,  585,  584,  583,  582,  581,  580,  579,
-      578,  576,  575,  574,  573,  571,  570,  521,  521,  521,
-      521,  569,  568,  562,  554,  504,  521,  521,  521,  501,
-      500,  496,  488,  485,  484,  483,  478,  477,  476,  475,
-      521,  521,  521,  521,  521,  521,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  463,  525,  525,  460,  457,  455,  454,  525,  525,
-
-      525,  525,  453,  452,  451,  450,  449,  448,  447,  446,
-      445,  444,  443,  442,  440,  525,  439,  438,  430,  429,
-      428,  427,  426,  425,  424,  423,  422,  421,  420,  418,
-      417,  415,  414,  413,  412,  411,  410,  409,  391,  387,
-      525,  525,  526,  526,  526,  526,  526,  526,  526,  526,
-      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
-      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
-      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
-      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
-      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
-
-      526,  526,  526,  526,  526,  526,  526,  526,  534,  534,
-      302,  293,  292,  281,  277,  267,  264,  260,  255,  254,
-      252,  251,  250,  248,  534,  534,  534,  534,  247,  230,
-      228,  227,  220,  534,  534,  534,  219,  217,  211,  210,
-      202,  201,  200,  198,  193,  191,  189,  534,  534,  534,
-      534,  534,  534,  538,  538,  538,  538,  538,  538,  538,
-      538,  538,  538,  538,  538,  538,  538,  538,  188,  538,
-      538,  177,  159,  154,  152,  538,  538,  538,  538,  110,
-      101,   96,   93,   88,   86,   77,   72,   63,   34,   32,
-       28,   23,  538,    8,    4,    2,    0,    0,    0,    0,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  400,
+      400,  907,  400,  400,  400,  400,  400,  400,  400,  400,
+      400,  400,  400,  400,  821,  400,  400,  982,  982,  820,
+      769,  400,  400,  400,  400,  703,  703,  769,  908,  703,
+      983,  983,  775,  839,  769,  840,  909,  910,  400,  775,
+      839,  819,  840,  818,  817,  815,  907,  839,  814,  840,
+
+      949,  949,  949,  813,  949,  812,  810,  400,  809,  769,
+      808,  807,  703,  400,  400,  492,  492,  492,  492,  775,
+      839,  806,  840,  908,  492,  492,  492,  805,  804,  803,
+      802,  909,  910,  951,  951,  951,  800,  951,  492,  492,
+      492,  492,  492,  492,  496,  496,  799,  496,  496,  496,
+      496,  496,  496,  496,  496,  496,  496,  496,  496,  780,
+      496,  496,  772,  766,  765,  764,  496,  496,  496,  496,
+      763,  762,  761,  760,  759,  758,  757,  756,  755,  752,
+      751,  749,  746,  496,  745,  743,  742,  741,  740,  739,
+      738,  737,  736,  735,  733,  732,  731,  730,  729,  727,
+
+      725,  724,  721,  716,  712,  709,  692,  675,  496,  496,
+      497,  497,  656,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  508,  508,  508,  508,
+      652,  647,  643,  638,  634,  508,  508,  508,  629,  628,
+      627,  619,  618,  613,  609,  608,  607,  606,  605,  508,
+
+      508,  508,  508,  508,  508,  510,  510,  510,  510,  510,
+      510,  604,  510,  510,  510,  510,  510,  510,  510,  510,
+      602,  510,  510,  601,  600,  599,  598,  510,  510,  510,
+      510,  597,  595,  594,  593,  592,  591,  590,  589,  588,
+      586,  585,  584,  583,  510,  582,  581,  580,  579,  578,
+      577,  576,  574,  573,  572,  571,  569,  568,  567,  566,
+      560,  552,  502,  499,  498,  494,  486,  483,  482,  510,
+      510,  511,  511,  511,  511,  511,  511,  481,  511,  511,
+      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+
+      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+      511,  511,  511,  511,  511,  511,  511,  519,  519,  476,
+      475,  474,  473,  462,  459,  456,  454,  453,  452,  451,
+      450,  449,  448,  519,  519,  519,  519,  447,  446,  445,
+      444,  443,  519,  519,  519,  442,  441,  439,  438,  437,
+      429,  428,  427,  426,  425,  424,  519,  519,  519,  519,
+      519,  519,  523,  523,  523,  523,  523,  523,  523,  523,
+      523,  523,  523,  523,  523,  523,  523,  423,  523,  523,
+
+      422,  421,  420,  419,  523,  523,  523,  523,  417,  416,
+      414,  413,  412,  411,  410,  409,  408,  390,  386,  301,
+      292,  523,  291,  280,  276,  266,  263,  259,  254,  253,
+      251,  250,  249,  247,  246,  230,  228,  227,  220,  219,
+      217,  211,  210,  202,  201,  200,  523,  523,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  532,  532,  198,  193,  191,  189,
+      188,  177,  159,  154,  152,  110,  101,   96,   93,   88,
+      532,  532,  532,  532,   86,   77,   72,   63,   34,  532,
+      532,  532,   32,   28,   23,    8,    4,    2,    0,    0,
+        0,    0,    0,  532,  532,  532,  532,  532,  532,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,    0,  536,  536,    0,    0,    0,
+        0,  536,  536,  536,  536,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  536,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  538,  538,  539,
-      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
-      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
-      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
-      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
-      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
-      539,  539,  539,  539,  539,  539,  539,  539,  539,  539,
-      539,  539,  539,  539,  539,  547,  547,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  536,  536,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  545,  545,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  547,  547,  547,  547,    0,    0,    0,    0,    0,
-      547,  547,  547,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  547,  547,  547,  547,  547,  547,
-      551,  551,  551,  551,  551,  551,  551,  551,  551,  551,
-      551,  551,  551,  551,  551,    0,  551,  551,    0,    0,
-        0,    0,  551,  551,  551,  551,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  551,
+        0,    0,    0,    0,    0,    0,    0,  545,  545,  545,
+      545,    0,    0,    0,    0,    0,  545,  545,  545,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      545,  545,  545,  545,  545,  545,  549,  549,  549,  549,
+      549,  549,  549,  549,  549,  549,  549,  549,  549,  549,
+      549,    0,  549,  549,    0,    0,    0,    0,  549,  549,
+      549,  549,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  549,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  551,  551,  552,  552,  552,  552,
 
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  560,  560,  560,  560,    0,    0,    0,    0,
-        0,  560,  560,  560,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  560,  560,  560,  560,  560,
-      560,  564,  564,    0,  564,  564,  564,  564,  564,  564,
+      549,  549,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  558,  558,
+      558,  558,    0,    0,    0,    0,    0,  558,  558,  558,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  558,  558,  558,  558,  558,  558,  562,  562,    0,
 
-      564,  564,  564,  564,  564,  564,    0,  564,  564,    0,
-        0,    0,    0,  564,  564,  564,  564,    0,    0,    0,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,    0,  562,  562,    0,    0,    0,    0,  562,
+      562,  562,  562,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  562,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      564,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  564,  564,  565,  565,    0,
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
-      565,  565,  565,  645,  645,    0,  645,  645,  645,  645,
-      645,  645,  645,  645,  645,  645,  645,  645,    0,  645,
-      645,    0,    0,    0,    0,  645,  645,  645,  645,    0,
+        0,  562,  562,  563,  563,    0,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  642,
+      642,    0,  642,  642,  642,  642,  642,  642,  642,  642,
+      642,  642,  642,  642,    0,  642,  642,    0,    0,    0,
+        0,  642,  642,  642,  642,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  642,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  645,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  645,  645,  647,
-      647,    0,  647,  647,  647,  647,  647,  647,  647,  647,
+        0,    0,    0,  642,  642,  644,  644,    0,  644,  644,
 
-      647,  647,  647,  647,    0,  647,  647,    0,    0,    0,
-        0,  647,  647,  647,  647,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  647,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  647,    0,
+      644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
+        0,  644,  644,    0,    0,    0,    0,  644,  644,  644,
+      644,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  644,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  644,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  644,
+      644,  645,  645,    0,  645,  645,  645,  645,  645,  645,
+      645,  645,  645,  645,  645,  645,    0,  645,  645,    0,
+        0,    0,    0,  645,  645,  645,  645,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  647,  647,  648,  648,    0,  648,  648,
-      648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
-        0,  648,  648,    0,    0,    0,    0,  648,  648,  648,
-      648,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  648,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,  648,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  648,
-      648,  658,  658,  658,  658,  658,  658,    0,  658,  658,
-      658,  658,  658,  658,  658,  658,    0,  658,  658,    0,
-        0,    0,    0,  658,  658,  658,  658,    0,    0,    0,
+
+      645,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      645,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  645,  645,  655,  655,  655,
+      655,  655,  655,    0,  655,  655,  655,  655,  655,  655,
+      655,  655,    0,  655,  655,    0,    0,    0,    0,  655,
+      655,  655,  655,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  655,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      658,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  658,  658,  660,  660,  660,
-      660,  660,  660,    0,  660,  660,  660,  660,  660,  660,
+        0,  655,  655,  657,  657,  657,  657,  657,  657,    0,
 
-      660,  660,    0,  660,  660,    0,    0,    0,    0,  660,
-      660,  660,  660,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  660,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  660,    0,    0,    0,
+      657,  657,  657,  657,  657,  657,  657,  657,    0,  657,
+      657,    0,    0,    0,    0,  657,  657,  657,  657,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  660,  660,  661,  661,  661,  661,  661,  661,    0,
-      661,  661,  661,  661,  661,  661,  661,  661,    0,  661,
-      661,    0,    0,    0,    0,  661,  661,  661,  661,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  661,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  657,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  657,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  657,  657,  658,
+      658,  658,  658,  658,  658,    0,  658,  658,  658,  658,
+      658,  658,  658,  658,    0,  658,  658,    0,    0,    0,
+        0,  658,  658,  658,  658,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  658,    0,
 
-        0,    0,  661,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  661,  661,  675,
-      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
-      675,  675,  675,  675,    0,  675,  675,    0,    0,    0,
-        0,  675,  675,  675,  675,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  675,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  658,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  658,  658,  672,  672,  672,  672,  672,
+      672,  672,  672,  672,  672,  672,  672,  672,  672,  672,
+        0,  672,  672,    0,    0,    0,    0,  672,  672,  672,
+      672,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  672,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  675,  675,  677,  677,  677,  677,  677,
-      677,  677,  677,  677,  677,  677,  677,  677,  677,  677,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  672,
+      672,  674,  674,  674,  674,  674,  674,  674,  674,  674,
 
-      677,  677,  677,  677,  677,  677,  677,  677,  677,  677,
-      677,  677,  677,  677,  677,  677,  677,  677,  677,  677,
-      677,  677,  677,  677,  677,  677,  677,  677,  677,  677,
-      677,  677,  677,  677,  677,  677,  677,  677,  677,  677,
-      677,  677,  677,  677,  677,  677,  677,  677,  677,  677,
-      677,  692,  692,  692,  692,  692,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  692,    0,  692,  692,    0,
-        0,    0,    0,  692,  692,  692,  692,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      692,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  674,  674,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,    0,  689,  689,    0,    0,    0,    0,  689,
+      689,  689,  689,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  689,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  692,  692,  694,  694,  694,
-      694,  694,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  694,  709,  709,  709,  709,  709,  709,  709,
-      709,  709,  709,  709,  709,  709,  709,  709,    0,  709,
-
-      709,    0,    0,    0,    0,  709,  709,  709,  709,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  709,    0,    0,    0,    0,    0,    0,    0,
+        0,  689,  689,  691,  691,  691,  691,  691,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  691,  706,
+      706,  706,  706,  706,  706,  706,  706,  706,  706,  706,
+
+      706,  706,  706,  706,    0,  706,  706,    0,    0,    0,
+        0,  706,  706,  706,  706,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  706,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  709,  709,  711,
-      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
-      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
-      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
-      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
-      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
-
-      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
-      711,  711,  711,  711,  711,  723,  723,    0,  723,  723,
-      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
-        0,  723,  723,    0,    0,    0,    0,  723,  723,  723,
-      723,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  723,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  723,
-      723,  725,  725,    0,  725,  725,  725,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,    0,  725,  725,    0,
-
-        0,    0,    0,  725,  725,  725,  725,    0,    0,    0,
+        0,    0,    0,  706,  706,  708,  708,  708,  708,  708,
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
+
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
+      708,  720,  720,    0,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,    0,  720,  720,    0,
+        0,    0,    0,  720,  720,  720,  720,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      720,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      725,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      725,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  725,  725,  726,  726,    0,
-      726,  726,  726,  726,  726,  726,  726,  726,  726,  726,
-      726,  726,    0,  726,  726,    0,    0,    0,    0,  726,
-      726,  726,  726,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  726,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  726,    0,    0,    0,
+        0,    0,    0,    0,    0,  720,  720,  722,  722,    0,
+      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
 
+      722,  722,    0,  722,  722,    0,    0,    0,    0,  722,
+      722,  722,  722,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  722,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  722,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  726,  726,  781,  781,    0,  781,  781,  781,  781,
-      781,  781,  781,  781,  781,  781,  781,  781,    0,  781,
-      781,    0,    0,    0,    0,  781,  781,  781,  781,    0,
+        0,  722,  722,  723,  723,    0,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,    0,  723,
+      723,    0,    0,    0,    0,  723,  723,  723,  723,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  781,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  781,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  781,  781,  782,
-      782,    0,  782,  782,  782,  782,  782,  782,  782,  782,
-      782,  782,  782,  782,    0,  782,  782,    0,    0,    0,
+        0,    0,  723,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  782,  782,  782,  782,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  782,    0,
+        0,    0,  723,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  723,  723,  777,
+      777,    0,  777,  777,  777,  777,  777,  777,  777,  777,
+      777,  777,  777,  777,    0,  777,  777,    0,    0,    0,
+        0,  777,  777,  777,  777,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  777,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  777,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  782,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  782,  782,  789,  789,  789,  789,  789,
-      789,    0,  789,  789,  789,  789,  789,  789,  789,  789,
-        0,  789,  789,    0,    0,    0,    0,  789,  789,  789,
-      789,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  789,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  789,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  789,
-      789,  790,  790,  790,  790,  790,  790,    0,  790,  790,
-      790,  790,  790,  790,  790,  790,    0,  790,  790,    0,
-        0,    0,    0,  790,  790,  790,  790,    0,    0,    0,
+        0,    0,    0,  777,  777,  778,  778,    0,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+
+        0,  778,  778,    0,    0,    0,    0,  778,  778,  778,
+      778,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  778,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  778,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  778,
+      778,  785,  785,  785,  785,  785,  785,    0,  785,  785,
+      785,  785,  785,  785,  785,  785,    0,  785,  785,    0,
+        0,    0,    0,  785,  785,  785,  785,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      790,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  790,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  790,  790,  792,  792,  792,
-      792,  792,  792,  792,  792,  792,  792,  792,  792,  792,
-      792,  792,  792,  792,  792,  792,  792,  792,  792,  792,
-
-      792,  792,  792,  792,  792,  792,  792,  792,  792,  792,
-      792,  792,  792,  792,  792,  792,  792,  792,  792,  792,
-      792,  792,  792,  792,  792,  792,  792,  792,  792,  792,
-      792,  792,  792,  792,  792,  792,  792,  792,  792,  792,
-      792,  792,  792, 1026,    0, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1027,    0,    0, 1027, 1027, 1028,
-        0, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
-     1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1030, 1030,
-     1030, 1030, 1031,    0, 1031,    0, 1031, 1031, 1031, 1031,
-     1032, 1032, 1032, 1032, 1032, 1032, 1032, 1033,    0, 1033,
-
-     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1034,    0,
-     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1035,
-        0, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035,
-     1036,    0, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
-     1036, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1038, 1038,
-        0, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1039,
+      785,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,  785,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  785,  785,  786,  786,  786,
+      786,  786,  786,    0,  786,  786,  786,  786,  786,  786,
+      786,  786,    0,  786,  786,    0,    0,    0,    0,  786,
+      786,  786,  786,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  786,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  786,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  786,  786,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+      788,  788,  788,  788,  788,  788,  788,  788,  788, 1021,
+        0, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021,
+     1022,    0,    0, 1022, 1022, 1023,    0, 1023, 1023, 1023,
+     1023, 1023, 1023, 1023, 1023, 1023, 1024, 1024, 1024, 1024,
+     1024, 1024, 1024, 1024, 1025, 1025, 1025, 1025, 1026,    0,
+     1026,    0, 1026, 1026, 1026, 1026, 1027, 1027, 1027, 1027,
+
+     1027, 1027, 1027, 1028,    0, 1028, 1028, 1028, 1028, 1028,
+     1028, 1028, 1028, 1028, 1029,    0, 1029, 1029, 1029, 1029,
+     1029, 1029, 1029, 1029, 1029, 1030,    0, 1030, 1030, 1030,
+     1030, 1030, 1030, 1030, 1030, 1030, 1031,    0, 1031, 1031,
+     1031, 1031, 1031, 1031, 1031, 1031, 1031, 1032, 1032, 1032,
+     1032, 1032, 1032, 1032, 1033, 1033,    0, 1033, 1033, 1033,
+     1033, 1033, 1033, 1033, 1033, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1035, 1035,    0, 1035,
+     1035, 1035, 1035, 1035, 1035, 1035, 1035, 1036, 1036, 1036,
+     1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037, 1037,
+
+     1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
      1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
-     1040, 1040,    0, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
-     1040, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041,
-     1041, 1041, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
-
-     1042, 1042, 1042, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
-     1043, 1043, 1043, 1043, 1044, 1044, 1044, 1044, 1044, 1044,
-     1044, 1044, 1044, 1044, 1044, 1045, 1045, 1045, 1045, 1045,
-     1045, 1045, 1045, 1045, 1045, 1045, 1046, 1046, 1046, 1046,
-     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1047, 1047, 1047,
-     1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1048, 1048,
-     1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1049,
-     1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049,
-     1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
-     1050, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
-
-     1051, 1051, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052,
-     1052, 1052, 1052, 1053,    0, 1053, 1053, 1053, 1053, 1053,
-     1053, 1053, 1053, 1053, 1054,    0, 1054, 1054, 1054, 1054,
-     1054, 1054, 1054, 1054, 1054, 1055,    0, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1056,    0, 1056, 1056,
-     1056, 1056, 1056, 1056, 1056, 1056, 1056, 1057,    0,    0,
-     1057, 1057, 1058,    0, 1058, 1058, 1058, 1058, 1058, 1058,
-     1058, 1058, 1058, 1059,    0,    0, 1059, 1059, 1059, 1060,
-        0,    0, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
-     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1063,    0,
-
-        0,    0,    0, 1063, 1063, 1063, 1063, 1064, 1064, 1064,
-     1064, 1064, 1064, 1065, 1065, 1065, 1065, 1066,    0, 1066,
-     1066, 1066, 1066, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
-     1068,    0, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
-     1068, 1069,    0, 1069, 1069, 1069, 1069, 1069, 1069, 1069,
-     1069, 1069, 1070,    0, 1070, 1070, 1070, 1070, 1070, 1070,
-     1070, 1070, 1070, 1071,    0, 1071, 1071, 1071, 1071, 1071,
-     1071, 1071, 1071, 1071, 1072, 1072,    0, 1072, 1072, 1072,
-     1072, 1072, 1072, 1072, 1072, 1073, 1073, 1073, 1073, 1073,
-     1073, 1073, 1073, 1073, 1073, 1073, 1074, 1074,    0, 1074,
-
-     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075, 1075,
-     1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1076,
-     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1077,
+     1039, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
+     1040, 1040, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041,
+     1041, 1041, 1041, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1044, 1044, 1044, 1044, 1044,
+     1044, 1044, 1044, 1044, 1044, 1044, 1045, 1045, 1045, 1045,
+     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1046, 1046, 1046,
+
+     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1047, 1047,
+     1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1048,
+        0, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048,
+     1049,    0, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049,
+     1049, 1050,    0, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+     1050, 1050, 1051,    0, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1052,    0,    0, 1052, 1052, 1053,    0,
+     1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1054,
+        0,    0, 1054, 1054, 1054, 1055,    0,    0, 1055, 1056,
+     1056, 1056, 1056, 1056, 1056, 1056, 1057, 1057, 1057, 1057,
+
+     1057, 1057, 1057, 1057, 1058,    0,    0,    0,    0, 1058,
+     1058, 1058, 1058, 1059, 1059, 1059, 1059, 1059, 1059, 1060,
+     1060, 1060, 1060, 1061,    0, 1061, 1061, 1061, 1061, 1062,
+     1062, 1062, 1062, 1062, 1062, 1062, 1063,    0, 1063, 1063,
+     1063, 1063, 1063, 1063, 1063, 1063, 1063, 1064,    0, 1064,
+     1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1065,    0,
+     1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1066,
+        0, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
+     1067, 1067,    0, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+     1067, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+
+     1068, 1068, 1069, 1069,    0, 1069, 1069, 1069, 1069, 1069,
+     1069, 1069, 1069, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
+     1070, 1070, 1070, 1070, 1071, 1071, 1071, 1071, 1071, 1071,
+     1071, 1071, 1071, 1071, 1071, 1072, 1072, 1072, 1072, 1072,
+     1072, 1072, 1072, 1072, 1072, 1072, 1073, 1073, 1073, 1073,
+     1073, 1073, 1073, 1073, 1073, 1073, 1073, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075,
+     1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1076,
+     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
      1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
-     1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078,
-     1078, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
-     1079, 1079, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
-     1080, 1080, 1080, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
-     1081, 1081, 1081, 1081, 1082, 1082, 1082, 1082, 1082, 1082,
-     1082, 1082, 1082, 1082, 1082, 1083, 1083, 1083, 1083, 1083,
-
-     1083, 1083, 1083, 1083, 1083, 1083, 1084, 1084, 1084, 1084,
-     1084, 1084, 1084, 1084, 1084, 1084, 1084, 1085, 1085, 1085,
-     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1086, 1086,
-     1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1087,
-        0, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
-     1088,    0, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
-     1088, 1089,    0, 1089, 1089, 1089, 1089, 1089, 1089, 1089,
-     1089, 1089, 1090,    0, 1090, 1090, 1090, 1090, 1090, 1090,
-     1090, 1090, 1090, 1091,    0,    0, 1091, 1091, 1092,    0,
-        0, 1092, 1092, 1092, 1093,    0,    0, 1093, 1094,    0,
-
-     1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1095,
-        0, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
-     1096,    0, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
-     1096, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098, 1098,
-     1098, 1098, 1098, 1098, 1098, 1098, 1099, 1099, 1099, 1099,
-     1099, 1099, 1100,    0, 1100, 1100, 1100, 1100, 1101,    0,
-     1101, 1101, 1101, 1101, 1102, 1102, 1102, 1102, 1102, 1102,
-     1102, 1103,    0, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
-     1103, 1103, 1104,    0, 1104, 1104, 1104, 1104, 1104, 1104,
-     1104, 1104, 1104, 1105,    0, 1105, 1105, 1105, 1105, 1105,
-
-     1105, 1105, 1105, 1105, 1106,    0, 1106, 1106, 1106, 1106,
-     1106, 1106, 1106, 1106, 1106, 1107,    0, 1107, 1107, 1107,
-     1107, 1107, 1107, 1107, 1107, 1107, 1108, 1108, 1108, 1108,
-     1108, 1108, 1108, 1109, 1109,    0, 1109, 1109, 1109, 1109,
-     1109, 1109, 1109, 1109, 1110, 1110, 1110, 1110, 1110, 1110,
-     1110, 1110, 1110, 1110, 1110, 1111, 1111,    0, 1111, 1111,
-     1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112,
-     1112, 1112, 1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113,
-     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114,
-     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1115,
 
+     1077, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078,
+     1078, 1078, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
+     1079, 1079, 1079, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1081, 1081, 1081, 1081, 1081, 1081,
+     1081, 1081, 1081, 1081, 1081, 1082,    0, 1082, 1082, 1082,
+     1082, 1082, 1082, 1082, 1082, 1082, 1083,    0, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1084,    0, 1084,
+     1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1085,    0,
+     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1086,
+        0,    0, 1086, 1086, 1087,    0,    0, 1087, 1087, 1087,
+
+     1088,    0,    0, 1088, 1089,    0, 1089, 1089, 1089, 1089,
+     1089, 1089, 1089, 1089, 1089, 1090,    0, 1090, 1090, 1090,
+     1090, 1090, 1090, 1090, 1090, 1090, 1091,    0, 1091, 1091,
+     1091, 1091, 1091, 1091, 1091, 1091, 1091, 1092, 1092, 1092,
+     1092, 1092, 1092, 1092, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1094, 1094, 1094, 1094, 1094, 1094, 1095,    0,
+     1095, 1095, 1095, 1095, 1096,    0, 1096, 1096, 1096, 1096,
+     1097, 1097, 1097, 1097, 1097, 1097, 1097, 1098,    0, 1098,
+     1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,    0,
+     1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1100,
+
+        0, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100,
+     1101,    0, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,
+     1101, 1102,    0, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
+     1102, 1102, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1104,
+     1104,    0, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104,
+     1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+     1105, 1106, 1106,    0, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
+     1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+     1108, 1108, 1108, 1108, 1109, 1109, 1109, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110, 1110, 1111, 1111, 1111, 1111,
+     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112,
+     1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1114,
+     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
      1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
-     1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-     1116, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
-     1117, 1117, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
-     1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
-     1119, 1119, 1119, 1119, 1120, 1120, 1120, 1120, 1120, 1120,
-     1120, 1120, 1120, 1120, 1120, 1121, 1121, 1121, 1121, 1121,
-     1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122, 1122,
-     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123, 1123, 1123,
-     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1124, 1124,
-
-     1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125,
-     1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
-     1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
-     1126, 1127,    0, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
-     1127, 1127, 1128,    0, 1128, 1128, 1128, 1128, 1128, 1128,
-     1128, 1128, 1128, 1129,    0, 1129, 1129, 1129, 1129, 1129,
-     1129, 1129, 1129, 1129, 1130,    0, 1130, 1130, 1130, 1130,
-     1130, 1130, 1130, 1130, 1130, 1131,    0, 1131, 1131, 1131,
-     1131, 1131, 1131, 1131, 1131, 1131, 1132,    0,    0, 1132,
-     1132, 1132, 1133,    0, 1133, 1133, 1133, 1133, 1133, 1133,
-
-     1133, 1133, 1133, 1134,    0, 1134, 1134, 1134, 1134, 1134,
-     1134, 1134, 1134, 1134, 1135,    0, 1135, 1135, 1135, 1135,
-     1135, 1135, 1135, 1135, 1135, 1136, 1136, 1136, 1136, 1136,
-     1136, 1136, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
-     1138,    0, 1138, 1138, 1138, 1138, 1139,    0, 1139, 1139,
-     1139, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1141,
-        0, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
-     1142,    0, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
-     1142, 1143,    0, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
-     1143, 1143, 1144,    0, 1144, 1144, 1144, 1144, 1144, 1144,
-
-     1144, 1144, 1144, 1145,    0, 1145, 1145, 1145, 1145, 1145,
-     1145, 1145, 1145, 1145, 1146,    0, 1146, 1146, 1146, 1146,
-     1146, 1146, 1146, 1146, 1146, 1147, 1147, 1147, 1147, 1147,
-     1147, 1147, 1148, 1148,    0, 1148, 1148, 1148, 1148, 1148,
-     1148, 1148, 1148, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
-     1149, 1149, 1149, 1149, 1150, 1150,    0, 1150, 1150, 1150,
-     1150, 1150, 1150, 1150, 1150, 1151, 1151,    0, 1151, 1151,
-     1151, 1151, 1151, 1151, 1151, 1151, 1152, 1152, 1152, 1152,
-     1152, 1152, 1152, 1152, 1152, 1152, 1152, 1153, 1153, 1153,
-     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1154, 1154,
-
-     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1155,
+     1115, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+     1116, 1116, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+     1117, 1117, 1117, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
+
+     1118, 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119,
+     1119, 1119, 1119, 1119, 1119, 1120, 1120, 1120, 1120, 1120,
+     1120, 1120, 1120, 1120, 1120, 1120, 1121, 1121, 1121, 1121,
+     1121, 1121, 1121, 1121, 1121, 1121, 1121, 1122,    0, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123,    0,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1124,
+        0, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
+     1125,    0, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+     1125, 1126,    0, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
+     1126, 1126, 1127,    0,    0, 1127, 1127, 1127, 1128,    0,
+
+     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1129,
+        0, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1130,    0, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+     1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1132, 1132,
+     1132, 1132, 1132, 1132, 1132, 1132, 1133,    0, 1133, 1133,
+     1133, 1133, 1134,    0, 1134, 1134, 1134, 1134, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1136,    0, 1136, 1136, 1136,
+     1136, 1136, 1136, 1136, 1136, 1136, 1137,    0, 1137, 1137,
+     1137, 1137, 1137, 1137, 1137, 1137, 1137, 1138,    0, 1138,
+     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1139,    0,
+
+     1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1140,
+        0, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
+     1141,    0, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
+     1141, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143,
+        0, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1144,
+     1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
+     1145, 1145,    0, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
+     1145, 1146, 1146,    0, 1146, 1146, 1146, 1146, 1146, 1146,
+     1146, 1146, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1147, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+
+     1148, 1148, 1148, 1148, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1149, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1150, 1151, 1151, 1151, 1151,
+     1151, 1151, 1151, 1151, 1151, 1151, 1151, 1152, 1152, 1152,
+     1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1153, 1153,
+     1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
      1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
-     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
-     1156, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
-     1157, 1157, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
-     1158, 1158, 1158, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
-     1159, 1159, 1159, 1159, 1160, 1160, 1160, 1160, 1160, 1160,
-     1160, 1160, 1160, 1160, 1160, 1161, 1161, 1161, 1161, 1161,
-     1161, 1161, 1161, 1161, 1161, 1161, 1162, 1162, 1162, 1162,
-     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1163, 1163, 1163,
-
-     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1164, 1164,
-     1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1165,
-     1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
-     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
-     1166, 1167,    0, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
-     1167, 1167, 1168,    0, 1168, 1168, 1168, 1168, 1168, 1168,
-     1168, 1168, 1168, 1169,    0, 1169, 1169, 1169, 1169, 1169,
-     1169, 1169, 1169, 1169, 1170,    0, 1170, 1170, 1170, 1170,
-     1170, 1170, 1170, 1170, 1170, 1171,    0, 1171, 1171, 1171,
-     1171, 1171, 1171, 1171, 1171, 1171, 1172,    0, 1172, 1172,
-
-     1172, 1172, 1172, 1172, 1172, 1172, 1172, 1173,    0,    0,
-     1173, 1173, 1173, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
-     1174, 1175,    0, 1175, 1175, 1175, 1175, 1176, 1176, 1176,
-     1176, 1176, 1176, 1176, 1177,    0, 1177, 1177, 1177, 1177,
-     1177, 1177, 1177, 1177, 1177, 1178,    0, 1178, 1178, 1178,
-     1178, 1178, 1178, 1178, 1178, 1178, 1179, 1179, 1179, 1179,
-     1179, 1179, 1179, 1180, 1180,    0, 1180, 1180, 1180, 1180,
-     1180, 1180, 1180, 1180, 1181, 1181,    0, 1181, 1181, 1181,
-     1181, 1181, 1181, 1181, 1181, 1182, 1182, 1182, 1182, 1182,
-     1182, 1182, 1182, 1182, 1182, 1182, 1025, 1025, 1025, 1025,
-
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
-     1025, 1025, 1025
+     1155, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+
+     1157, 1157, 1157, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+     1158, 1158, 1158, 1158, 1159, 1159, 1159, 1159, 1159, 1159,
+     1159, 1159, 1159, 1159, 1159, 1160, 1160, 1160, 1160, 1160,
+     1160, 1160, 1160, 1160, 1160, 1160, 1161, 1161, 1161, 1161,
+     1161, 1161, 1161, 1161, 1161, 1161, 1161, 1162,    0, 1162,
+     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1163,    0,
+     1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1164,
+        0, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+     1165,    0, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1166,    0, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+
+     1166, 1166, 1167,    0, 1167, 1167, 1167, 1167, 1167, 1167,
+     1167, 1167, 1167, 1168,    0,    0, 1168, 1168, 1168, 1169,
+     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,    0, 1170,
+     1170, 1170, 1170, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+     1172,    0, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
+     1172, 1173,    0, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
+     1173, 1173, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1175,
+     1175,    0, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
+     1176, 1176,    0, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+     1176, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+
+     1177, 1177, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -2583,7 +2580,7 @@
 
 
 
-#line 2587 "compilers/imcc/imclexer.c"
+#line 2584 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2726,7 +2723,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -2842,7 +2839,7 @@
             return 0;
         }
 
-#line 2846 "compilers/imcc/imclexer.c"
+#line 2843 "compilers/imcc/imclexer.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -2896,13 +2893,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 1026 )
+				if ( yy_current_state >= 1021 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 1025 );
+		while ( yy_current_state != 1020 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -3416,171 +3413,166 @@
 case 78:
 YY_RULE_SETUP
 #line 368 "compilers/imcc/imcc.l"
-return GLOBALOP;
+return PMCV;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 369 "compilers/imcc/imcc.l"
-return PMCV;
+return STRINGV;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 370 "compilers/imcc/imcc.l"
-return STRINGV;
+return SHIFT_LEFT;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 371 "compilers/imcc/imcc.l"
-return SHIFT_LEFT;
+return SHIFT_RIGHT;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 372 "compilers/imcc/imcc.l"
-return SHIFT_RIGHT;
+return SHIFT_RIGHT_U;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 373 "compilers/imcc/imcc.l"
-return SHIFT_RIGHT_U;
+return LOG_AND;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 374 "compilers/imcc/imcc.l"
-return LOG_AND;
+return LOG_OR;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 375 "compilers/imcc/imcc.l"
-return LOG_OR;
+return LOG_XOR;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 376 "compilers/imcc/imcc.l"
-return LOG_XOR;
+return RELOP_LT;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 377 "compilers/imcc/imcc.l"
-return RELOP_LT;
+return RELOP_LTE;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 378 "compilers/imcc/imcc.l"
-return RELOP_LTE;
+return RELOP_GT;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 379 "compilers/imcc/imcc.l"
-return RELOP_GT;
+return RELOP_GTE;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 380 "compilers/imcc/imcc.l"
-return RELOP_GTE;
+return RELOP_EQ;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 381 "compilers/imcc/imcc.l"
-return RELOP_EQ;
+return RELOP_NE;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 382 "compilers/imcc/imcc.l"
-return RELOP_NE;
+return POW;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 383 "compilers/imcc/imcc.l"
-return POW;
+#line 384 "compilers/imcc/imcc.l"
+return CONCAT;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 385 "compilers/imcc/imcc.l"
-return CONCAT;
+return DOT;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 386 "compilers/imcc/imcc.l"
-return DOT;
+return DOTDOT;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 387 "compilers/imcc/imcc.l"
-return DOTDOT;
+return PLUS_ASSIGN;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 388 "compilers/imcc/imcc.l"
-return PLUS_ASSIGN;
+return MINUS_ASSIGN;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 389 "compilers/imcc/imcc.l"
-return MINUS_ASSIGN;
+return MUL_ASSIGN;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 390 "compilers/imcc/imcc.l"
-return MUL_ASSIGN;
+return DIV_ASSIGN;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 391 "compilers/imcc/imcc.l"
-return DIV_ASSIGN;
+return MOD_ASSIGN;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 392 "compilers/imcc/imcc.l"
-return MOD_ASSIGN;
+return FDIV;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 393 "compilers/imcc/imcc.l"
-return FDIV;
+return FDIV_ASSIGN;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 394 "compilers/imcc/imcc.l"
-return FDIV_ASSIGN;
+return BAND_ASSIGN;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 395 "compilers/imcc/imcc.l"
-return BAND_ASSIGN;
+return BOR_ASSIGN;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 396 "compilers/imcc/imcc.l"
-return BOR_ASSIGN;
+return BXOR_ASSIGN;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 397 "compilers/imcc/imcc.l"
-return BXOR_ASSIGN;
+return SHR_ASSIGN;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 398 "compilers/imcc/imcc.l"
-return SHR_ASSIGN;
+return SHL_ASSIGN;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 399 "compilers/imcc/imcc.l"
-return SHL_ASSIGN;
+return SHR_U_ASSIGN;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 400 "compilers/imcc/imcc.l"
-return SHR_U_ASSIGN;
-	YY_BREAK
-case 110:
-YY_RULE_SETUP
-#line 401 "compilers/imcc/imcc.l"
 return CONCAT_ASSIGN;
 	YY_BREAK
-case 111:
+case 110:
 YY_RULE_SETUP
-#line 403 "compilers/imcc/imcc.l"
+#line 402 "compilers/imcc/imcc.l"
 {
         int c;
         int start_line;
@@ -3611,16 +3603,16 @@
         return MACRO;
     }
 	YY_BREAK
-case 112:
+case 111:
 YY_RULE_SETUP
-#line 433 "compilers/imcc/imcc.l"
+#line 432 "compilers/imcc/imcc.l"
 {
         return read_macro(valp, interp, yyscanner);
     }
 	YY_BREAK
-case 113:
+case 112:
 YY_RULE_SETUP
-#line 437 "compilers/imcc/imcc.l"
+#line 436 "compilers/imcc/imcc.l"
 {
         const int c = yylex(valp,yyscanner,interp);
         if (c != STRINGC)
@@ -3630,9 +3622,9 @@
         include_file(interp, yytext + 1, yyscanner);
     }
 	YY_BREAK
-case 114:
+case 113:
 YY_RULE_SETUP
-#line 446 "compilers/imcc/imcc.l"
+#line 445 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3655,9 +3647,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 115:
+case 114:
 YY_RULE_SETUP
-#line 468 "compilers/imcc/imcc.l"
+#line 467 "compilers/imcc/imcc.l"
 {
 
         if (valp) {
@@ -3680,14 +3672,14 @@
         return IDENTIFIER;
      }
 	YY_BREAK
-case 116:
+case 115:
 YY_RULE_SETUP
-#line 490 "compilers/imcc/imcc.l"
+#line 489 "compilers/imcc/imcc.l"
 return COMMA;
 	YY_BREAK
-case 117:
+case 116:
 YY_RULE_SETUP
-#line 492 "compilers/imcc/imcc.l"
+#line 491 "compilers/imcc/imcc.l"
 {
         /* trim last ':' */
         YYCHOP();
@@ -3698,9 +3690,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 118:
+case 117:
 YY_RULE_SETUP
-#line 502 "compilers/imcc/imcc.l"
+#line 501 "compilers/imcc/imcc.l"
 {
         char   * const macro_name = yytext + 1;
 
@@ -3710,10 +3702,15 @@
         }
     }
 	YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 512 "compilers/imcc/imcc.l"
+DUP_AND_RET(valp, FLOATC);
+	YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 513 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, FLOATC);
+DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
@@ -3732,12 +3729,7 @@
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 517 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, INTC);
-	YY_BREAK
-case 124:
-YY_RULE_SETUP
-#line 519 "compilers/imcc/imcc.l"
+#line 518 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3748,9 +3740,9 @@
         return STRINGC;
     }
 	YY_BREAK
-case 125:
+case 124:
 YY_RULE_SETUP
-#line 529 "compilers/imcc/imcc.l"
+#line 528 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3758,9 +3750,9 @@
         return STRINGC;
     }
 	YY_BREAK
-case 126:
+case 125:
 YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 535 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3789,9 +3781,9 @@
         yy_push_state(heredoc1, yyscanner);
     }
 	YY_BREAK
-case 127:
+case 126:
 YY_RULE_SETUP
-#line 564 "compilers/imcc/imcc.l"
+#line 563 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = str_dup(yytext);
@@ -3800,9 +3792,9 @@
         return USTRINGC;
     }
 	YY_BREAK
-case 128:
+case 127:
 YY_RULE_SETUP
-#line 572 "compilers/imcc/imcc.l"
+#line 571 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3811,9 +3803,9 @@
         return IREG;
     }
 	YY_BREAK
-case 129:
+case 128:
 YY_RULE_SETUP
-#line 580 "compilers/imcc/imcc.l"
+#line 579 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3822,9 +3814,9 @@
         return NREG;
     }
 	YY_BREAK
-case 130:
+case 129:
 YY_RULE_SETUP
-#line 588 "compilers/imcc/imcc.l"
+#line 587 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3833,9 +3825,9 @@
         return SREG;
     }
 	YY_BREAK
-case 131:
+case 130:
 YY_RULE_SETUP
-#line 596 "compilers/imcc/imcc.l"
+#line 595 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3844,17 +3836,17 @@
         return PREG;
     }
 	YY_BREAK
-case 132:
+case 131:
 YY_RULE_SETUP
-#line 604 "compilers/imcc/imcc.l"
+#line 603 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
     }
 	YY_BREAK
-case 133:
+case 132:
 YY_RULE_SETUP
-#line 609 "compilers/imcc/imcc.l"
+#line 608 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3866,9 +3858,9 @@
         return REG;
     }
 	YY_BREAK
-case 134:
+case 133:
 YY_RULE_SETUP
-#line 620 "compilers/imcc/imcc.l"
+#line 619 "compilers/imcc/imcc.l"
 {
         if (!is_def) {
             SymReg *r = find_sym(interp, yytext);
@@ -3897,21 +3889,21 @@
         return (!is_def && is_op(interp, valp->s) ? PARROT_OP : IDENTIFIER);
     }
 	YY_BREAK
-case 135:
+case 134:
 YY_RULE_SETUP
-#line 649 "compilers/imcc/imcc.l"
+#line 648 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
-case 136:
+case 135:
 YY_RULE_SETUP
-#line 651 "compilers/imcc/imcc.l"
+#line 650 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 656 "compilers/imcc/imcc.l"
+#line 655 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3924,31 +3916,31 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 667 "compilers/imcc/imcc.l"
+#line 666 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 137:
+case 136:
 YY_RULE_SETUP
-#line 669 "compilers/imcc/imcc.l"
+#line 668 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ENDM);
 	YY_BREAK
-case 138:
-/* rule 138 can match eol */
+case 137:
+/* rule 137 can match eol */
 YY_RULE_SETUP
-#line 671 "compilers/imcc/imcc.l"
+#line 670 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
     }
 	YY_BREAK
-case 139:
+case 138:
 YY_RULE_SETUP
-#line 676 "compilers/imcc/imcc.l"
+#line 675 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
-case 140:
+case 139:
 YY_RULE_SETUP
-#line 678 "compilers/imcc/imcc.l"
+#line 677 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3972,9 +3964,9 @@
         return LABEL;
     }
 	YY_BREAK
-case 141:
+case 140:
 YY_RULE_SETUP
-#line 701 "compilers/imcc/imcc.l"
+#line 700 "compilers/imcc/imcc.l"
 {
         if (valp) {
             const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 12;
@@ -3989,15 +3981,20 @@
         return IDENTIFIER;
     }
 	YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 714 "compilers/imcc/imcc.l"
+/* skip leading ws */;
+	YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 715 "compilers/imcc/imcc.l"
-/* skip leading ws */;
+DUP_AND_RET(valp, ' ');
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 716 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, ' ');
+DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
@@ -4007,33 +4004,28 @@
 case 145:
 YY_RULE_SETUP
 #line 718 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, REG);
+DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 719 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, IDENTIFIER);
+DUP_AND_RET(valp, MACRO);
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 720 "compilers/imcc/imcc.l"
-DUP_AND_RET(valp, MACRO);
-	YY_BREAK
-case 148:
-YY_RULE_SETUP
-#line 721 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 722 "compilers/imcc/imcc.l"
+#line 721 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
-case 149:
+case 148:
 YY_RULE_SETUP
-#line 724 "compilers/imcc/imcc.l"
+#line 723 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 4037 "compilers/imcc/imclexer.c"
+#line 4029 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4336,7 +4328,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 1026 )
+			if ( yy_current_state >= 1021 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4365,11 +4357,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 1026 )
+		if ( yy_current_state >= 1021 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 1025);
+	yy_is_jam = (yy_current_state == 1020);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5235,7 +5227,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 724 "compilers/imcc/imcc.l"
+#line 723 "compilers/imcc/imcc.l"
 
 
 

Modified: branches/calling_conventions/compilers/imcc/imcparser.c
==============================================================================
--- branches/calling_conventions/compilers/imcc/imcparser.c	(original)
+++ branches/calling_conventions/compilers/imcc/imcparser.c	Sun Dec  7 22:37:43 2008
@@ -135,67 +135,66 @@
      RELOP_GTE = 313,
      RELOP_LT = 314,
      RELOP_LTE = 315,
-     GLOBALOP = 316,
-     RESULT = 317,
-     RETURN = 318,
-     TAILCALL = 319,
-     YIELDT = 320,
-     GET_RESULTS = 321,
-     POW = 322,
-     SHIFT_RIGHT_U = 323,
-     LOG_AND = 324,
-     LOG_OR = 325,
-     COMMA = 326,
-     ESUB = 327,
-     DOTDOT = 328,
-     PCC_BEGIN = 329,
-     PCC_END = 330,
-     PCC_CALL = 331,
-     PCC_SUB = 332,
-     PCC_BEGIN_RETURN = 333,
-     PCC_END_RETURN = 334,
-     PCC_BEGIN_YIELD = 335,
-     PCC_END_YIELD = 336,
-     NCI_CALL = 337,
-     METH_CALL = 338,
-     INVOCANT = 339,
-     MAIN = 340,
-     LOAD = 341,
-     INIT = 342,
-     IMMEDIATE = 343,
-     POSTCOMP = 344,
-     METHOD = 345,
-     ANON = 346,
-     OUTER = 347,
-     NEED_LEX = 348,
-     MULTI = 349,
-     VTABLE_METHOD = 350,
-     LOADLIB = 351,
-     SUB_INSTANCE_OF = 352,
-     SUBID = 353,
-     NS_ENTRY = 354,
-     UNIQUE_REG = 355,
-     LABEL = 356,
-     EMIT = 357,
-     EOM = 358,
-     IREG = 359,
-     NREG = 360,
-     SREG = 361,
-     PREG = 362,
-     IDENTIFIER = 363,
-     REG = 364,
-     MACRO = 365,
-     ENDM = 366,
-     STRINGC = 367,
-     INTC = 368,
-     FLOATC = 369,
-     USTRINGC = 370,
-     PARROT_OP = 371,
-     VAR = 372,
-     LINECOMMENT = 373,
-     FILECOMMENT = 374,
-     DOT = 375,
-     CONCAT = 376
+     RESULT = 316,
+     RETURN = 317,
+     TAILCALL = 318,
+     YIELDT = 319,
+     GET_RESULTS = 320,
+     POW = 321,
+     SHIFT_RIGHT_U = 322,
+     LOG_AND = 323,
+     LOG_OR = 324,
+     COMMA = 325,
+     ESUB = 326,
+     DOTDOT = 327,
+     PCC_BEGIN = 328,
+     PCC_END = 329,
+     PCC_CALL = 330,
+     PCC_SUB = 331,
+     PCC_BEGIN_RETURN = 332,
+     PCC_END_RETURN = 333,
+     PCC_BEGIN_YIELD = 334,
+     PCC_END_YIELD = 335,
+     NCI_CALL = 336,
+     METH_CALL = 337,
+     INVOCANT = 338,
+     MAIN = 339,
+     LOAD = 340,
+     INIT = 341,
+     IMMEDIATE = 342,
+     POSTCOMP = 343,
+     METHOD = 344,
+     ANON = 345,
+     OUTER = 346,
+     NEED_LEX = 347,
+     MULTI = 348,
+     VTABLE_METHOD = 349,
+     LOADLIB = 350,
+     SUB_INSTANCE_OF = 351,
+     SUBID = 352,
+     NS_ENTRY = 353,
+     UNIQUE_REG = 354,
+     LABEL = 355,
+     EMIT = 356,
+     EOM = 357,
+     IREG = 358,
+     NREG = 359,
+     SREG = 360,
+     PREG = 361,
+     IDENTIFIER = 362,
+     REG = 363,
+     MACRO = 364,
+     ENDM = 365,
+     STRINGC = 366,
+     INTC = 367,
+     FLOATC = 368,
+     USTRINGC = 369,
+     PARROT_OP = 370,
+     VAR = 371,
+     LINECOMMENT = 372,
+     FILECOMMENT = 373,
+     DOT = 374,
+     CONCAT = 375
    };
 #endif
 /* Tokens.  */
@@ -257,67 +256,66 @@
 #define RELOP_GTE 313
 #define RELOP_LT 314
 #define RELOP_LTE 315
-#define GLOBALOP 316
-#define RESULT 317
-#define RETURN 318
-#define TAILCALL 319
-#define YIELDT 320
-#define GET_RESULTS 321
-#define POW 322
-#define SHIFT_RIGHT_U 323
-#define LOG_AND 324
-#define LOG_OR 325
-#define COMMA 326
-#define ESUB 327
-#define DOTDOT 328
-#define PCC_BEGIN 329
-#define PCC_END 330
-#define PCC_CALL 331
-#define PCC_SUB 332
-#define PCC_BEGIN_RETURN 333
-#define PCC_END_RETURN 334
-#define PCC_BEGIN_YIELD 335
-#define PCC_END_YIELD 336
-#define NCI_CALL 337
-#define METH_CALL 338
-#define INVOCANT 339
-#define MAIN 340
-#define LOAD 341
-#define INIT 342
-#define IMMEDIATE 343
-#define POSTCOMP 344
-#define METHOD 345
-#define ANON 346
-#define OUTER 347
-#define NEED_LEX 348
-#define MULTI 349
-#define VTABLE_METHOD 350
-#define LOADLIB 351
-#define SUB_INSTANCE_OF 352
-#define SUBID 353
-#define NS_ENTRY 354
-#define UNIQUE_REG 355
-#define LABEL 356
-#define EMIT 357
-#define EOM 358
-#define IREG 359
-#define NREG 360
-#define SREG 361
-#define PREG 362
-#define IDENTIFIER 363
-#define REG 364
-#define MACRO 365
-#define ENDM 366
-#define STRINGC 367
-#define INTC 368
-#define FLOATC 369
-#define USTRINGC 370
-#define PARROT_OP 371
-#define VAR 372
-#define LINECOMMENT 373
-#define FILECOMMENT 374
-#define DOT 375
-#define CONCAT 376
+#define RESULT 316
+#define RETURN 317
+#define TAILCALL 318
+#define YIELDT 319
+#define GET_RESULTS 320
+#define POW 321
+#define SHIFT_RIGHT_U 322
+#define LOG_AND 323
+#define LOG_OR 324
+#define COMMA 325
+#define ESUB 326
+#define DOTDOT 327
+#define PCC_BEGIN 328
+#define PCC_END 329
+#define PCC_CALL 330
+#define PCC_SUB 331
+#define PCC_BEGIN_RETURN 332
+#define PCC_END_RETURN 333
+#define PCC_BEGIN_YIELD 334
+#define PCC_END_YIELD 335
+#define NCI_CALL 336
+#define METH_CALL 337
+#define INVOCANT 338
+#define MAIN 339
+#define LOAD 340
+#define INIT 341
+#define IMMEDIATE 342
+#define POSTCOMP 343
+#define METHOD 344
+#define ANON 345
+#define OUTER 346
+#define NEED_LEX 347
+#define MULTI 348
+#define VTABLE_METHOD 349
+#define LOADLIB 350
+#define SUB_INSTANCE_OF 351
+#define SUBID 352
+#define NS_ENTRY 353
+#define UNIQUE_REG 354
+#define LABEL 355
+#define EMIT 356
+#define EOM 357
+#define IREG 358
+#define NREG 359
+#define SREG 360
+#define PREG 361
+#define IDENTIFIER 362
+#define REG 363
+#define MACRO 364
+#define ENDM 365
+#define STRINGC 366
+#define INTC 367
+#define FLOATC 368
+#define USTRINGC 369
+#define PARROT_OP 370
+#define VAR 371
+#define LINECOMMENT 372
+#define FILECOMMENT 373
+#define DOT 374
+#define CONCAT 375
 
 
 
@@ -1039,7 +1037,7 @@
     Instruction *i;
 }
 /* Line 187 of yacc.c.  */
-#line 1032 "compilers/imcc/imcparser.c"
+#line 1030 "compilers/imcc/imcparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -1052,7 +1050,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 1045 "compilers/imcc/imcparser.c"
+#line 1043 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1267,20 +1265,20 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   732
+#define YYLAST   737
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  138
+#define YYNTOKENS  137
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  127
+#define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  352
+#define YYNRULES  347
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  571
+#define YYNSTATES  559
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   376
+#define YYMAXUTOK   375
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1291,16 +1289,16 @@
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        4,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   128,     2,     2,     2,   134,   135,     2,
-     126,   127,   132,   131,     2,   130,     2,   133,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   137,
-       2,   123,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   127,     2,     2,     2,   133,   134,     2,
+     125,   126,   131,   130,     2,   129,     2,   132,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   136,
+       2,   122,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   124,     2,   125,     2,     2,     2,     2,     2,     2,
+       2,   123,     2,   124,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,   136,     2,   129,     2,     2,     2,
+       2,     2,     2,     2,   135,     2,   128,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1325,7 +1323,7 @@
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122
+     116,   117,   118,   119,   120,   121
 };
 
 #if YYDEBUG
@@ -1339,145 +1337,142 @@
       88,    90,    92,    94,    96,    98,    99,   103,   104,   109,
      112,   117,   118,   120,   121,   126,   127,   129,   133,   137,
      140,   141,   142,   143,   154,   155,   157,   161,   162,   166,
-     170,   176,   181,   186,   191,   193,   198,   200,   205,   207,
-     212,   217,   219,   224,   225,   229,   231,   233,   235,   237,
-     239,   241,   243,   247,   248,   250,   251,   261,   262,   265,
-     266,   270,   271,   273,   275,   278,   280,   282,   284,   286,
-     288,   290,   292,   294,   296,   298,   300,   302,   304,   306,
-     312,   316,   320,   324,   328,   334,   340,   341,   345,   348,
-     349,   353,   357,   358,   363,   364,   367,   369,   371,   373,
-     375,   380,   382,   383,   389,   391,   392,   398,   399,   402,
-     406,   407,   410,   414,   418,   422,   423,   429,   431,   433,
-     434,   436,   440,   444,   450,   452,   455,   456,   459,   462,
-     464,   466,   468,   469,   471,   474,   476,   478,   482,   485,
-     487,   491,   494,   495,   497,   499,   501,   504,   507,   508,
-     513,   518,   519,   526,   528,   529,   536,   539,   542,   545,
-     548,   550,   552,   554,   556,   557,   559,   561,   563,   565,
-     567,   571,   576,   582,   589,   596,   603,   611,   616,   621,
-     626,   633,   640,   648,   653,   658,   663,   670,   678,   682,
-     683,   693,   695,   697,   699,   703,   705,   707,   709,   711,
-     713,   715,   717,   719,   721,   723,   725,   727,   729,   731,
-     733,   735,   737,   739,   741,   743,   745,   747,   749,   751,
-     753,   755,   756,   762,   766,   768,   770,   772,   774,   776,
-     778,   780,   782,   784,   786,   788,   790,   792,   797,   799,
-     801,   803,   805,   809,   813,   817,   818,   824,   825,   829,
-     831,   837,   841,   844,   845,   848,   850,   852,   857,   860,
-     864,   870,   872,   876,   877,   879,   881,   888,   894,   899,
-     904,   911,   917,   919,   921,   923,   925,   927,   929,   931,
-     933,   935,   937,   938,   940,   944,   946,   948,   953,   957,
-     959,   961,   963,   965,   967,   969,   971,   973,   975,   977,
-     979,   980,   983,   984,   987,   989,   993,   994,   999,  1001,
-    1005,  1008,  1011,  1013,  1015,  1017,  1019,  1021,  1023,  1025,
-    1027,  1029,  1031
+     170,   175,   180,   185,   187,   192,   194,   199,   201,   206,
+     211,   213,   218,   219,   223,   225,   227,   229,   231,   233,
+     235,   237,   241,   242,   244,   245,   255,   256,   259,   260,
+     264,   265,   267,   269,   272,   274,   276,   278,   280,   282,
+     284,   286,   288,   290,   292,   294,   296,   298,   300,   306,
+     310,   314,   318,   322,   328,   334,   335,   339,   342,   343,
+     347,   351,   352,   357,   358,   361,   363,   365,   367,   369,
+     374,   376,   377,   383,   385,   386,   392,   393,   396,   400,
+     401,   404,   408,   412,   416,   417,   423,   425,   427,   428,
+     430,   434,   438,   444,   446,   449,   450,   453,   456,   458,
+     460,   462,   463,   465,   468,   470,   472,   476,   479,   481,
+     485,   488,   489,   491,   493,   495,   498,   501,   502,   507,
+     512,   513,   520,   522,   523,   530,   533,   536,   539,   542,
+     544,   546,   548,   550,   551,   553,   555,   557,   559,   561,
+     565,   570,   576,   583,   590,   597,   605,   610,   615,   620,
+     627,   634,   642,   647,   654,   662,   666,   667,   677,   679,
+     681,   683,   687,   689,   691,   693,   695,   697,   699,   701,
+     703,   705,   707,   709,   711,   713,   715,   717,   719,   721,
+     723,   725,   727,   729,   731,   733,   735,   737,   739,   740,
+     746,   750,   752,   754,   756,   758,   760,   762,   764,   766,
+     768,   770,   772,   774,   776,   781,   783,   785,   787,   789,
+     793,   797,   801,   802,   808,   809,   813,   815,   821,   825,
+     828,   829,   832,   834,   836,   841,   844,   848,   854,   856,
+     860,   861,   863,   865,   872,   878,   883,   888,   895,   901,
+     903,   905,   907,   909,   911,   913,   915,   917,   919,   921,
+     922,   924,   928,   930,   932,   937,   941,   943,   945,   947,
+     949,   951,   953,   955,   957,   959,   961,   963,   964,   967,
+     968,   971,   973,   977,   978,   983,   985,   989,   992,   995,
+     997,   999,  1001,  1003,  1005,  1007,  1009,  1011
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     139,     0,    -1,   140,    -1,   141,    -1,   140,   141,    -1,
-     160,    -1,   145,    -1,   162,    -1,   157,    -1,   111,     4,
-      -1,   142,    -1,   143,    -1,     4,    -1,   144,     4,    -1,
-      97,   113,     4,    -1,     8,   114,    72,   113,     4,    -1,
-       6,   113,    -1,     7,   113,   123,   113,    -1,    -1,    31,
-     146,   221,   109,   123,   263,    -1,    -1,    31,   148,   114,
-     253,   123,   150,    -1,    -1,    31,   149,   113,   253,   123,
-     150,    -1,   113,    -1,   116,    -1,   152,    -1,   151,   152,
-      -1,   210,   153,     4,    -1,   111,     4,    -1,   120,    -1,
-     119,    -1,   160,    -1,   147,    -1,   142,    -1,    -1,   154,
-     117,   156,    -1,    -1,    78,   155,   184,   102,    -1,    13,
-     254,    -1,    30,   113,    72,   110,    -1,    -1,   247,    -1,
-      -1,   103,   158,   159,   104,    -1,    -1,   151,    -1,    24,
-     161,     4,    -1,   124,   255,   125,    -1,   124,   125,    -1,
-      -1,    -1,    -1,    27,   163,   250,   164,   184,     4,   165,
-     166,   179,    73,    -1,    -1,     4,    -1,   166,   167,     4,
-      -1,    -1,     5,   168,   169,    -1,   221,   109,   193,    -1,
-     221,   113,    21,   109,   193,    -1,    95,   126,   177,   127,
-      -1,    93,   126,   113,   127,    -1,    93,   126,   109,   127,
-      -1,    96,    -1,    96,   126,   113,   127,    -1,    91,    -1,
-      91,   126,   150,   127,    -1,   100,    -1,   100,   126,   150,
-     127,    -1,    98,   126,   113,   127,    -1,    99,    -1,    99,
-     126,   150,   127,    -1,    -1,   177,    72,   178,    -1,   178,
-      -1,    51,    -1,    52,    -1,    54,    -1,    53,    -1,   109,
-      -1,   113,    -1,   124,   255,   125,    -1,    -1,   207,    -1,
-      -1,    75,     4,   181,   188,   183,   187,   182,   190,    76,
-      -1,    -1,   212,     4,    -1,    -1,    85,   254,     4,    -1,
-      -1,   185,    -1,   186,    -1,   185,   186,    -1,    87,    -1,
-      88,    -1,    86,    -1,    89,    -1,    90,    -1,    92,    -1,
-      94,    -1,   170,    -1,   171,    -1,   172,    -1,   173,    -1,
-     174,    -1,   175,    -1,   176,    -1,    77,   254,    72,   254,
-       4,    -1,    77,   254,     4,    -1,    83,   254,     4,    -1,
-      84,   246,     4,    -1,    84,   113,     4,    -1,    84,   246,
-      72,   254,     4,    -1,    84,   113,    72,   254,     4,    -1,
-      -1,   188,   189,     4,    -1,    10,   236,    -1,    -1,   190,
-     191,     4,    -1,    63,   246,   193,    -1,    -1,    29,   192,
-     221,   215,    -1,    -1,   193,   194,    -1,    17,    -1,    18,
-      -1,    19,    -1,    20,    -1,    20,   126,   113,   127,    -1,
-     101,    -1,    -1,    79,     4,   196,   199,    80,    -1,   203,
-      -1,    -1,    81,     4,   198,   200,    82,    -1,    -1,   199,
-       4,    -1,   199,   201,     4,    -1,    -1,   200,     4,    -1,
-     200,   202,     4,    -1,    14,   254,   237,    -1,    15,   254,
-     237,    -1,    -1,   205,   126,   204,   206,   127,    -1,    64,
-      -1,    66,    -1,    -1,   236,    -1,   113,    21,   254,    -1,
-     206,    72,   236,    -1,   206,    72,   113,    21,   254,    -1,
-     209,    -1,   207,   209,    -1,    -1,   208,   213,    -1,   111,
-       4,    -1,   120,    -1,   119,    -1,   143,    -1,    -1,   211,
-      -1,   211,   212,    -1,   212,    -1,   102,    -1,   210,   217,
-       4,    -1,     1,     4,    -1,   215,    -1,   214,    72,   215,
-      -1,   109,   216,    -1,    -1,   101,    -1,   223,    -1,   241,
-      -1,    24,   109,    -1,    25,   109,    -1,    -1,    29,   218,
-     221,   214,    -1,    30,   113,    72,   246,    -1,    -1,    31,
-     219,   221,   109,   123,   263,    -1,   147,    -1,    -1,    34,
-     220,   221,   109,   123,   263,    -1,    65,   233,    -1,     9,
-     252,    -1,   117,   247,    -1,    13,   254,    -1,   233,    -1,
-     180,    -1,   195,    -1,   197,    -1,    -1,    51,    -1,    52,
-      -1,    53,    -1,    54,    -1,   109,    -1,   246,   123,   254,
-      -1,   246,   123,   225,   254,    -1,   246,   123,   254,   226,
-     254,    -1,   246,   123,   254,   124,   255,   125,    -1,   246,
-     124,   255,   125,   123,   254,    -1,   246,   123,    22,   222,
-      72,   254,    -1,   246,   123,    22,   222,   124,   255,   125,
-      -1,   246,   123,    22,   222,    -1,   246,   123,    22,   254,
-      -1,   246,   123,    22,   161,    -1,   246,   123,    22,   161,
-      72,   254,    -1,   246,   123,    22,   254,    72,   254,    -1,
-     246,   123,    22,   254,   124,   255,   125,    -1,   246,   123,
-      62,   264,    -1,    62,   264,   123,   254,    -1,    22,   246,
-      72,   254,    -1,    22,   246,    72,   254,    72,   254,    -1,
-      22,   246,    72,   254,   124,   255,   125,    -1,   246,   123,
-     233,    -1,    -1,   126,   224,   240,   127,   123,   232,   126,
-     235,   127,    -1,   227,    -1,   229,    -1,   231,    -1,   246,
-     123,    13,    -1,   128,    -1,   129,    -1,   130,    -1,   130,
-      -1,   131,    -1,   132,    -1,   133,    -1,   134,    -1,    43,
-      -1,    68,    -1,   122,    -1,    56,    -1,    57,    -1,    58,
-      -1,    59,    -1,    60,    -1,    61,    -1,    49,    -1,    50,
-      -1,    69,    -1,    70,    -1,    71,    -1,    55,    -1,   135,
-      -1,   136,    -1,   129,    -1,    -1,    67,   228,   126,   240,
-     127,    -1,   246,   230,   254,    -1,    35,    -1,    36,    -1,
-      37,    -1,    38,    -1,    45,    -1,    44,    -1,    39,    -1,
-      40,    -1,    41,    -1,    42,    -1,    46,    -1,    47,    -1,
-      48,    -1,   246,   123,   117,   156,    -1,   109,    -1,   113,
-      -1,   116,    -1,   246,    -1,   246,   121,   251,    -1,   246,
-     121,   113,    -1,   246,   121,   246,    -1,    -1,   232,   234,
-     126,   235,   127,    -1,    -1,   235,    72,   236,    -1,   236,
-      -1,   235,    72,   113,    21,   254,    -1,   113,    21,   254,
-      -1,   254,   237,    -1,    -1,   237,   238,    -1,    16,    -1,
-      20,    -1,    20,   126,   113,   127,    -1,   246,   193,    -1,
-     240,    72,   239,    -1,   240,    72,   113,    21,   246,    -1,
-     239,    -1,   113,    21,   246,    -1,    -1,   243,    -1,   242,
-      -1,    12,   254,   245,   254,     9,   252,    -1,    12,    13,
-     254,     9,   252,    -1,    12,   254,   244,   252,    -1,    11,
-     254,   244,   252,    -1,    11,   254,   245,   254,     9,   252,
-      -1,    11,    13,   254,     9,   252,    -1,    72,    -1,     9,
-      -1,    56,    -1,    57,    -1,    58,    -1,    59,    -1,    60,
-      -1,    61,    -1,   118,    -1,   262,    -1,    -1,   248,    -1,
-     248,    72,   249,    -1,   249,    -1,   253,    -1,   246,   124,
-     255,   125,    -1,   124,   257,   125,    -1,   251,    -1,   113,
-      -1,   116,    -1,   109,    -1,   117,    -1,   109,    -1,   117,
-      -1,   252,    -1,   254,    -1,   246,    -1,   263,    -1,    -1,
-     256,   259,    -1,    -1,   258,   259,    -1,   261,    -1,   259,
-     137,   261,    -1,    -1,   259,    72,   260,   261,    -1,   254,
-      -1,   254,    74,   254,    -1,    74,   254,    -1,   254,    74,
-      -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,   110,
-      -1,   114,    -1,   115,    -1,   113,    -1,   116,    -1,   107,
-      -1,   113,    -1
+     138,     0,    -1,   139,    -1,   140,    -1,   139,   140,    -1,
+     159,    -1,   144,    -1,   161,    -1,   156,    -1,   110,     4,
+      -1,   141,    -1,   142,    -1,     4,    -1,   143,     4,    -1,
+      96,   112,     4,    -1,     8,   113,    71,   112,     4,    -1,
+       6,   112,    -1,     7,   112,   122,   112,    -1,    -1,    31,
+     145,   220,   108,   122,   262,    -1,    -1,    31,   147,   113,
+     252,   122,   149,    -1,    -1,    31,   148,   112,   252,   122,
+     149,    -1,   112,    -1,   115,    -1,   151,    -1,   150,   151,
+      -1,   209,   152,     4,    -1,   110,     4,    -1,   119,    -1,
+     118,    -1,   159,    -1,   146,    -1,   141,    -1,    -1,   153,
+     116,   155,    -1,    -1,    77,   154,   183,   101,    -1,    13,
+     253,    -1,    30,   112,    71,   109,    -1,    -1,   246,    -1,
+      -1,   102,   157,   158,   103,    -1,    -1,   150,    -1,    24,
+     160,     4,    -1,   123,   254,   124,    -1,   123,   124,    -1,
+      -1,    -1,    -1,    27,   162,   249,   163,   183,     4,   164,
+     165,   178,    72,    -1,    -1,     4,    -1,   165,   166,     4,
+      -1,    -1,     5,   167,   168,    -1,   220,   108,   192,    -1,
+      94,   125,   176,   126,    -1,    92,   125,   112,   126,    -1,
+      92,   125,   108,   126,    -1,    95,    -1,    95,   125,   112,
+     126,    -1,    90,    -1,    90,   125,   149,   126,    -1,    99,
+      -1,    99,   125,   149,   126,    -1,    97,   125,   112,   126,
+      -1,    98,    -1,    98,   125,   149,   126,    -1,    -1,   176,
+      71,   177,    -1,   177,    -1,    51,    -1,    52,    -1,    54,
+      -1,    53,    -1,   108,    -1,   112,    -1,   123,   254,   124,
+      -1,    -1,   206,    -1,    -1,    74,     4,   180,   187,   182,
+     186,   181,   189,    75,    -1,    -1,   211,     4,    -1,    -1,
+      84,   253,     4,    -1,    -1,   184,    -1,   185,    -1,   184,
+     185,    -1,    86,    -1,    87,    -1,    85,    -1,    88,    -1,
+      89,    -1,    91,    -1,    93,    -1,   169,    -1,   170,    -1,
+     171,    -1,   172,    -1,   173,    -1,   174,    -1,   175,    -1,
+      76,   253,    71,   253,     4,    -1,    76,   253,     4,    -1,
+      82,   253,     4,    -1,    83,   245,     4,    -1,    83,   112,
+       4,    -1,    83,   245,    71,   253,     4,    -1,    83,   112,
+      71,   253,     4,    -1,    -1,   187,   188,     4,    -1,    10,
+     235,    -1,    -1,   189,   190,     4,    -1,    62,   245,   192,
+      -1,    -1,    29,   191,   220,   214,    -1,    -1,   192,   193,
+      -1,    17,    -1,    18,    -1,    19,    -1,    20,    -1,    20,
+     125,   112,   126,    -1,   100,    -1,    -1,    78,     4,   195,
+     198,    79,    -1,   202,    -1,    -1,    80,     4,   197,   199,
+      81,    -1,    -1,   198,     4,    -1,   198,   200,     4,    -1,
+      -1,   199,     4,    -1,   199,   201,     4,    -1,    14,   253,
+     236,    -1,    15,   253,   236,    -1,    -1,   204,   125,   203,
+     205,   126,    -1,    63,    -1,    65,    -1,    -1,   235,    -1,
+     112,    21,   253,    -1,   205,    71,   235,    -1,   205,    71,
+     112,    21,   253,    -1,   208,    -1,   206,   208,    -1,    -1,
+     207,   212,    -1,   110,     4,    -1,   119,    -1,   118,    -1,
+     142,    -1,    -1,   210,    -1,   210,   211,    -1,   211,    -1,
+     101,    -1,   209,   216,     4,    -1,     1,     4,    -1,   214,
+      -1,   213,    71,   214,    -1,   108,   215,    -1,    -1,   100,
+      -1,   222,    -1,   240,    -1,    24,   108,    -1,    25,   108,
+      -1,    -1,    29,   217,   220,   213,    -1,    30,   112,    71,
+     245,    -1,    -1,    31,   218,   220,   108,   122,   262,    -1,
+     146,    -1,    -1,    34,   219,   220,   108,   122,   262,    -1,
+      64,   232,    -1,     9,   251,    -1,   116,   246,    -1,    13,
+     253,    -1,   232,    -1,   179,    -1,   194,    -1,   196,    -1,
+      -1,    51,    -1,    52,    -1,    53,    -1,    54,    -1,   108,
+      -1,   245,   122,   253,    -1,   245,   122,   224,   253,    -1,
+     245,   122,   253,   225,   253,    -1,   245,   122,   253,   123,
+     254,   124,    -1,   245,   123,   254,   124,   122,   253,    -1,
+     245,   122,    22,   221,    71,   253,    -1,   245,   122,    22,
+     221,   123,   254,   124,    -1,   245,   122,    22,   221,    -1,
+     245,   122,    22,   253,    -1,   245,   122,    22,   160,    -1,
+     245,   122,    22,   160,    71,   253,    -1,   245,   122,    22,
+     253,    71,   253,    -1,   245,   122,    22,   253,   123,   254,
+     124,    -1,    22,   245,    71,   253,    -1,    22,   245,    71,
+     253,    71,   253,    -1,    22,   245,    71,   253,   123,   254,
+     124,    -1,   245,   122,   232,    -1,    -1,   125,   223,   239,
+     126,   122,   231,   125,   234,   126,    -1,   226,    -1,   228,
+      -1,   230,    -1,   245,   122,    13,    -1,   127,    -1,   128,
+      -1,   129,    -1,   129,    -1,   130,    -1,   131,    -1,   132,
+      -1,   133,    -1,    43,    -1,    67,    -1,   121,    -1,    56,
+      -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,    61,
+      -1,    49,    -1,    50,    -1,    68,    -1,    69,    -1,    70,
+      -1,    55,    -1,   134,    -1,   135,    -1,   128,    -1,    -1,
+      66,   227,   125,   239,   126,    -1,   245,   229,   253,    -1,
+      35,    -1,    36,    -1,    37,    -1,    38,    -1,    45,    -1,
+      44,    -1,    39,    -1,    40,    -1,    41,    -1,    42,    -1,
+      46,    -1,    47,    -1,    48,    -1,   245,   122,   116,   155,
+      -1,   108,    -1,   112,    -1,   115,    -1,   245,    -1,   245,
+     120,   250,    -1,   245,   120,   112,    -1,   245,   120,   245,
+      -1,    -1,   231,   233,   125,   234,   126,    -1,    -1,   234,
+      71,   235,    -1,   235,    -1,   234,    71,   112,    21,   253,
+      -1,   112,    21,   253,    -1,   253,   236,    -1,    -1,   236,
+     237,    -1,    16,    -1,    20,    -1,    20,   125,   112,   126,
+      -1,   245,   192,    -1,   239,    71,   238,    -1,   239,    71,
+     112,    21,   245,    -1,   238,    -1,   112,    21,   245,    -1,
+      -1,   242,    -1,   241,    -1,    12,   253,   244,   253,     9,
+     251,    -1,    12,    13,   253,     9,   251,    -1,    12,   253,
+     243,   251,    -1,    11,   253,   243,   251,    -1,    11,   253,
+     244,   253,     9,   251,    -1,    11,    13,   253,     9,   251,
+      -1,    71,    -1,     9,    -1,    56,    -1,    57,    -1,    58,
+      -1,    59,    -1,    60,    -1,    61,    -1,   117,    -1,   261,
+      -1,    -1,   247,    -1,   247,    71,   248,    -1,   248,    -1,
+     252,    -1,   245,   123,   254,   124,    -1,   123,   256,   124,
+      -1,   250,    -1,   112,    -1,   115,    -1,   108,    -1,   116,
+      -1,   108,    -1,   116,    -1,   251,    -1,   253,    -1,   245,
+      -1,   262,    -1,    -1,   255,   258,    -1,    -1,   257,   258,
+      -1,   260,    -1,   258,   136,   260,    -1,    -1,   258,    71,
+     259,   260,    -1,   253,    -1,   253,    73,   253,    -1,    73,
+     253,    -1,   253,    73,    -1,   104,    -1,   105,    -1,   106,
+      -1,   107,    -1,   109,    -1,   113,    -1,   114,    -1,   112,
+      -1,   115,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1489,36 +1484,35 @@
      891,   892,   893,   894,   895,   898,   898,   907,   906,   918,
      922,   930,   934,   938,   938,   950,   952,   956,   971,   979,
      984,   988,   991,   983,   997,   998,   999,  1012,  1012,  1016,
-    1027,  1042,  1046,  1052,  1061,  1067,  1076,  1082,  1091,  1097,
-    1106,  1114,  1123,  1135,  1138,  1143,  1151,  1152,  1153,  1154,
-    1155,  1166,  1177,  1180,  1182,  1187,  1186,  1219,  1220,  1224,
-    1225,  1229,  1230,  1234,  1235,  1239,  1240,  1241,  1242,  1243,
-    1244,  1245,  1246,  1247,  1248,  1249,  1250,  1251,  1252,  1256,
-    1261,  1265,  1270,  1274,  1278,  1283,  1292,  1293,  1297,  1302,
-    1303,  1311,  1312,  1312,  1327,  1328,  1332,  1333,  1334,  1335,
-    1336,  1337,  1342,  1342,  1345,  1353,  1353,  1359,  1360,  1365,
-    1373,  1374,  1379,  1387,  1391,  1396,  1395,  1408,  1409,  1413,
-    1414,  1424,  1428,  1438,  1446,  1447,  1459,  1463,  1465,  1466,
-    1467,  1468,  1472,  1473,  1477,  1478,  1482,  1491,  1492,  1503,
-    1510,  1519,  1529,  1530,  1535,  1536,  1537,  1538,  1539,  1539,
-    1555,  1559,  1559,  1566,  1567,  1567,  1573,  1579,  1580,  1592,
-    1593,  1594,  1595,  1596,  1597,  1601,  1602,  1603,  1604,  1608,
-    1621,  1623,  1625,  1627,  1629,  1631,  1633,  1635,  1637,  1639,
-    1641,  1643,  1645,  1647,  1649,  1653,  1655,  1657,  1660,  1667,
-    1666,  1675,  1676,  1677,  1678,  1686,  1687,  1688,  1692,  1693,
-    1694,  1695,  1696,  1697,  1698,  1699,  1700,  1701,  1702,  1703,
-    1704,  1705,  1706,  1707,  1708,  1709,  1710,  1711,  1712,  1713,
-    1714,  1720,  1719,  1731,  1738,  1739,  1740,  1741,  1742,  1743,
-    1744,  1745,  1746,  1747,  1748,  1749,  1750,  1755,  1766,  1767,
-    1768,  1769,  1775,  1787,  1793,  1799,  1798,  1807,  1808,  1818,
-    1828,  1834,  1843,  1847,  1848,  1852,  1853,  1856,  1860,  1864,
-    1874,  1879,  1889,  1894,  1898,  1899,  1903,  1907,  1911,  1918,
-    1922,  1926,  1933,  1934,  1938,  1939,  1940,  1941,  1942,  1943,
-    1947,  1948,  1952,  1953,  1957,  1958,  1962,  1963,  1970,  1977,
-    1978,  1979,  1983,  1984,  1988,  1989,  1993,  1994,  1998,  1999,
-    2003,  2003,  2016,  2016,  2029,  2030,  2035,  2035,  2044,  2050,
-    2057,  2058,  2062,  2063,  2064,  2065,  2066,  2070,  2071,  2072,
-    2073,  2077,  2078
+    1030,  1034,  1040,  1049,  1055,  1064,  1070,  1079,  1085,  1094,
+    1102,  1111,  1123,  1126,  1131,  1139,  1140,  1141,  1142,  1143,
+    1154,  1165,  1168,  1170,  1175,  1174,  1207,  1208,  1212,  1213,
+    1217,  1218,  1222,  1223,  1227,  1228,  1229,  1230,  1231,  1232,
+    1233,  1234,  1235,  1236,  1237,  1238,  1239,  1240,  1244,  1249,
+    1253,  1258,  1262,  1266,  1271,  1280,  1281,  1285,  1290,  1291,
+    1299,  1300,  1300,  1315,  1316,  1320,  1321,  1322,  1323,  1324,
+    1325,  1330,  1330,  1333,  1341,  1341,  1347,  1348,  1353,  1361,
+    1362,  1367,  1375,  1379,  1384,  1383,  1396,  1397,  1401,  1402,
+    1412,  1416,  1426,  1434,  1435,  1447,  1451,  1453,  1454,  1455,
+    1456,  1460,  1461,  1465,  1466,  1470,  1479,  1480,  1491,  1498,
+    1507,  1517,  1518,  1523,  1524,  1525,  1526,  1527,  1527,  1543,
+    1547,  1547,  1554,  1555,  1555,  1561,  1567,  1568,  1580,  1581,
+    1582,  1583,  1584,  1585,  1589,  1590,  1591,  1592,  1596,  1609,
+    1611,  1613,  1615,  1617,  1619,  1621,  1623,  1625,  1627,  1629,
+    1631,  1633,  1637,  1639,  1641,  1644,  1651,  1650,  1659,  1660,
+    1661,  1662,  1670,  1671,  1672,  1676,  1677,  1678,  1679,  1680,
+    1681,  1682,  1683,  1684,  1685,  1686,  1687,  1688,  1689,  1690,
+    1691,  1692,  1693,  1694,  1695,  1696,  1697,  1698,  1704,  1703,
+    1715,  1722,  1723,  1724,  1725,  1726,  1727,  1728,  1729,  1730,
+    1731,  1732,  1733,  1734,  1739,  1750,  1751,  1752,  1753,  1759,
+    1771,  1777,  1783,  1782,  1791,  1792,  1802,  1812,  1818,  1827,
+    1831,  1832,  1836,  1837,  1840,  1844,  1848,  1858,  1863,  1873,
+    1878,  1882,  1883,  1887,  1891,  1895,  1902,  1906,  1910,  1917,
+    1918,  1922,  1923,  1924,  1925,  1926,  1927,  1931,  1932,  1936,
+    1937,  1941,  1942,  1946,  1947,  1954,  1961,  1962,  1963,  1967,
+    1968,  1972,  1973,  1977,  1978,  1982,  1983,  1987,  1987,  2000,
+    2000,  2013,  2014,  2019,  2019,  2028,  2034,  2041,  2042,  2046,
+    2047,  2048,  2049,  2050,  2054,  2055,  2056,  2057
 };
 #endif
 
@@ -1538,8 +1532,8 @@
   "MOD_ASSIGN", "SHR_ASSIGN", "SHL_ASSIGN", "SHR_U_ASSIGN", "SHIFT_LEFT",
   "SHIFT_RIGHT", "INTV", "FLOATV", "STRINGV", "PMCV", "LOG_XOR",
   "RELOP_EQ", "RELOP_NE", "RELOP_GT", "RELOP_GTE", "RELOP_LT", "RELOP_LTE",
-  "GLOBALOP", "RESULT", "RETURN", "TAILCALL", "YIELDT", "GET_RESULTS",
-  "POW", "SHIFT_RIGHT_U", "LOG_AND", "LOG_OR", "COMMA", "ESUB", "DOTDOT",
+  "RESULT", "RETURN", "TAILCALL", "YIELDT", "GET_RESULTS", "POW",
+  "SHIFT_RIGHT_U", "LOG_AND", "LOG_OR", "COMMA", "ESUB", "DOTDOT",
   "PCC_BEGIN", "PCC_END", "PCC_CALL", "PCC_SUB", "PCC_BEGIN_RETURN",
   "PCC_END_RETURN", "PCC_BEGIN_YIELD", "PCC_END_YIELD", "NCI_CALL",
   "METH_CALL", "INVOCANT", "MAIN", "LOAD", "INIT", "IMMEDIATE", "POSTCOMP",
@@ -1571,7 +1565,7 @@
   "unless_statement", "if_statement", "comma_or_goto", "relop", "target",
   "vars", "_vars", "_var_or_i", "sub_label_op_c", "sub_label_op",
   "label_op", "var_or_i", "var", "keylist", "@22", "keylist_force", "@23",
-  "_keylist", "@24", "key", "reg", "const", "string", 0
+  "_keylist", "@24", "key", "reg", "const", 0
 };
 #endif
 
@@ -1592,50 +1586,49 @@
      344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
      354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
      364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,    61,    91,    93,    40,    41,    33,   126,
-      45,    43,    42,    47,    37,    38,   124,    59
+     374,   375,    61,    91,    93,    40,    41,    33,   126,    45,
+      43,    42,    47,    37,    38,   124,    59
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   138,   139,   140,   140,   141,   141,   141,   141,   141,
-     141,   141,   141,   142,   142,   143,   144,   144,   146,   145,
-     148,   147,   149,   147,   150,   150,   151,   151,   152,   152,
-     152,   152,   152,   152,   152,   154,   153,   155,   153,   153,
-     153,   153,   156,   158,   157,   159,   159,   160,   161,   161,
-     163,   164,   165,   162,   166,   166,   166,   168,   167,   169,
-     169,   170,   171,   171,   172,   172,   173,   173,   174,   174,
-     175,   176,   176,   177,   177,   177,   178,   178,   178,   178,
-     178,   178,   178,   179,   179,   181,   180,   182,   182,   183,
-     183,   184,   184,   185,   185,   186,   186,   186,   186,   186,
-     186,   186,   186,   186,   186,   186,   186,   186,   186,   187,
-     187,   187,   187,   187,   187,   187,   188,   188,   189,   190,
-     190,   191,   192,   191,   193,   193,   194,   194,   194,   194,
-     194,   194,   196,   195,   195,   198,   197,   199,   199,   199,
-     200,   200,   200,   201,   202,   204,   203,   205,   205,   206,
-     206,   206,   206,   206,   207,   207,   208,   209,   209,   209,
-     209,   209,   210,   210,   211,   211,   212,   213,   213,   214,
-     214,   215,   216,   216,   217,   217,   217,   217,   218,   217,
-     217,   219,   217,   217,   220,   217,   217,   217,   217,   217,
-     217,   217,   217,   217,   217,   221,   221,   221,   221,   222,
-     223,   223,   223,   223,   223,   223,   223,   223,   223,   223,
-     223,   223,   223,   223,   223,   223,   223,   223,   223,   224,
-     223,   223,   223,   223,   223,   225,   225,   225,   226,   226,
-     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
-     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
-     226,   228,   227,   229,   230,   230,   230,   230,   230,   230,
-     230,   230,   230,   230,   230,   230,   230,   231,   232,   232,
-     232,   232,   232,   232,   232,   234,   233,   235,   235,   235,
-     235,   235,   236,   237,   237,   238,   238,   238,   239,   240,
-     240,   240,   240,   240,   241,   241,   242,   242,   242,   243,
-     243,   243,   244,   244,   245,   245,   245,   245,   245,   245,
-     246,   246,   247,   247,   248,   248,   249,   249,   249,   250,
-     250,   250,   251,   251,   252,   252,   253,   253,   254,   254,
-     256,   255,   258,   257,   259,   259,   260,   259,   261,   261,
-     261,   261,   262,   262,   262,   262,   262,   263,   263,   263,
-     263,   264,   264
+       0,   137,   138,   139,   139,   140,   140,   140,   140,   140,
+     140,   140,   140,   141,   141,   142,   143,   143,   145,   144,
+     147,   146,   148,   146,   149,   149,   150,   150,   151,   151,
+     151,   151,   151,   151,   151,   153,   152,   154,   152,   152,
+     152,   152,   155,   157,   156,   158,   158,   159,   160,   160,
+     162,   163,   164,   161,   165,   165,   165,   167,   166,   168,
+     169,   170,   170,   171,   171,   172,   172,   173,   173,   174,
+     175,   175,   176,   176,   176,   177,   177,   177,   177,   177,
+     177,   177,   178,   178,   180,   179,   181,   181,   182,   182,
+     183,   183,   184,   184,   185,   185,   185,   185,   185,   185,
+     185,   185,   185,   185,   185,   185,   185,   185,   186,   186,
+     186,   186,   186,   186,   186,   187,   187,   188,   189,   189,
+     190,   191,   190,   192,   192,   193,   193,   193,   193,   193,
+     193,   195,   194,   194,   197,   196,   198,   198,   198,   199,
+     199,   199,   200,   201,   203,   202,   204,   204,   205,   205,
+     205,   205,   205,   206,   206,   207,   208,   208,   208,   208,
+     208,   209,   209,   210,   210,   211,   212,   212,   213,   213,
+     214,   215,   215,   216,   216,   216,   216,   217,   216,   216,
+     218,   216,   216,   219,   216,   216,   216,   216,   216,   216,
+     216,   216,   216,   216,   220,   220,   220,   220,   221,   222,
+     222,   222,   222,   222,   222,   222,   222,   222,   222,   222,
+     222,   222,   222,   222,   222,   222,   223,   222,   222,   222,
+     222,   222,   224,   224,   224,   225,   225,   225,   225,   225,
+     225,   225,   225,   225,   225,   225,   225,   225,   225,   225,
+     225,   225,   225,   225,   225,   225,   225,   225,   227,   226,
+     228,   229,   229,   229,   229,   229,   229,   229,   229,   229,
+     229,   229,   229,   229,   230,   231,   231,   231,   231,   231,
+     231,   231,   233,   232,   234,   234,   234,   234,   234,   235,
+     236,   236,   237,   237,   237,   238,   239,   239,   239,   239,
+     239,   240,   240,   241,   241,   241,   242,   242,   242,   243,
+     243,   244,   244,   244,   244,   244,   244,   245,   245,   246,
+     246,   247,   247,   248,   248,   248,   249,   249,   249,   250,
+     250,   251,   251,   252,   252,   253,   253,   255,   254,   257,
+     256,   258,   258,   259,   258,   260,   260,   260,   260,   261,
+     261,   261,   261,   261,   262,   262,   262,   262
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1647,36 +1640,35 @@
        1,     1,     1,     1,     1,     0,     3,     0,     4,     2,
        4,     0,     1,     0,     4,     0,     1,     3,     3,     2,
        0,     0,     0,    10,     0,     1,     3,     0,     3,     3,
-       5,     4,     4,     4,     1,     4,     1,     4,     1,     4,
-       4,     1,     4,     0,     3,     1,     1,     1,     1,     1,
-       1,     1,     3,     0,     1,     0,     9,     0,     2,     0,
-       3,     0,     1,     1,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     5,
-       3,     3,     3,     3,     5,     5,     0,     3,     2,     0,
-       3,     3,     0,     4,     0,     2,     1,     1,     1,     1,
-       4,     1,     0,     5,     1,     0,     5,     0,     2,     3,
-       0,     2,     3,     3,     3,     0,     5,     1,     1,     0,
-       1,     3,     3,     5,     1,     2,     0,     2,     2,     1,
-       1,     1,     0,     1,     2,     1,     1,     3,     2,     1,
-       3,     2,     0,     1,     1,     1,     2,     2,     0,     4,
-       4,     0,     6,     1,     0,     6,     2,     2,     2,     2,
-       1,     1,     1,     1,     0,     1,     1,     1,     1,     1,
-       3,     4,     5,     6,     6,     6,     7,     4,     4,     4,
-       6,     6,     7,     4,     4,     4,     6,     7,     3,     0,
-       9,     1,     1,     1,     3,     1,     1,     1,     1,     1,
+       4,     4,     4,     1,     4,     1,     4,     1,     4,     4,
+       1,     4,     0,     3,     1,     1,     1,     1,     1,     1,
+       1,     3,     0,     1,     0,     9,     0,     2,     0,     3,
+       0,     1,     1,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     5,     3,
+       3,     3,     3,     5,     5,     0,     3,     2,     0,     3,
+       3,     0,     4,     0,     2,     1,     1,     1,     1,     4,
+       1,     0,     5,     1,     0,     5,     0,     2,     3,     0,
+       2,     3,     3,     3,     0,     5,     1,     1,     0,     1,
+       3,     3,     5,     1,     2,     0,     2,     2,     1,     1,
+       1,     0,     1,     2,     1,     1,     3,     2,     1,     3,
+       2,     0,     1,     1,     1,     2,     2,     0,     4,     4,
+       0,     6,     1,     0,     6,     2,     2,     2,     2,     1,
+       1,     1,     1,     0,     1,     1,     1,     1,     1,     3,
+       4,     5,     6,     6,     6,     7,     4,     4,     4,     6,
+       6,     7,     4,     6,     7,     3,     0,     9,     1,     1,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     5,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     4,     1,     1,
-       1,     1,     3,     3,     3,     0,     5,     0,     3,     1,
-       5,     3,     2,     0,     2,     1,     1,     4,     2,     3,
-       5,     1,     3,     0,     1,     1,     6,     5,     4,     4,
-       6,     5,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     1,     3,     1,     1,     4,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     2,     0,     2,     1,     3,     0,     4,     1,     3,
-       2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     5,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     4,     1,     1,     1,     1,     3,
+       3,     3,     0,     5,     0,     3,     1,     5,     3,     2,
+       0,     2,     1,     1,     4,     2,     3,     5,     1,     3,
+       0,     1,     1,     6,     5,     4,     4,     6,     5,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       1,     3,     1,     1,     4,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     0,     2,     0,
+       2,     1,     3,     0,     4,     1,     3,     2,     2,     1,
+       1,     1,     1,     1,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1686,62 +1678,60 @@
 {
        0,    12,     0,     0,     0,     0,    50,    18,     0,    43,
        0,     0,     2,     3,    10,    11,     0,     6,     8,     5,
-       7,    16,     0,     0,   330,     0,     0,     0,     0,   162,
+       7,    16,     0,     0,   327,     0,     0,     0,     0,   161,
        9,     1,     4,    13,     0,     0,    49,     0,     0,    47,
-     322,   320,   321,   323,    51,   319,   195,   196,   197,   198,
-       0,    14,    20,   166,     0,    31,    30,    34,    33,   162,
-      26,     0,    32,    35,   163,   165,    17,     0,    48,     0,
-     342,   343,   344,   345,   346,   349,   347,   348,   350,   310,
-     328,   338,   331,   334,   311,   329,    91,     0,     0,     0,
-      29,    27,    44,     0,     0,    37,     0,     0,   164,    15,
-     340,   341,   336,     0,    97,    95,    96,    98,    99,    66,
-     100,     0,   101,     0,    64,     0,    71,    68,   102,   103,
-     104,   105,   106,   107,   108,     0,    92,    93,     0,     0,
-       0,    39,     0,    91,    28,   312,   339,     0,   335,     0,
-       0,    73,     0,     0,     0,     0,    52,    94,    19,   324,
-     325,   326,     0,   327,     0,     0,     0,   332,    36,   328,
-      42,   313,   315,   316,   337,    24,    25,     0,     0,     0,
-      76,    77,    79,    78,    80,    81,   330,     0,    75,     0,
+     319,   317,   318,   320,    51,   316,   194,   195,   196,   197,
+       0,    14,    20,   165,     0,    31,    30,    34,    33,   161,
+      26,     0,    32,    35,   162,   164,    17,     0,    48,     0,
+     339,   340,   341,   342,   343,   346,   344,   345,   347,   307,
+     325,   335,   328,   331,   308,   326,    90,     0,     0,     0,
+      29,    27,    44,     0,     0,    37,     0,     0,   163,    15,
+     337,   338,   333,     0,    96,    94,    95,    97,    98,    65,
+      99,     0,   100,     0,    63,     0,    70,    67,   101,   102,
+     103,   104,   105,   106,   107,     0,    91,    92,     0,     0,
+       0,    39,     0,    90,    28,   309,   336,     0,   332,     0,
+       0,    72,     0,     0,     0,     0,    52,    93,    19,   321,
+     322,   323,     0,   324,     0,     0,     0,   329,    36,   325,
+      42,   310,   312,   313,   334,    24,    25,     0,     0,     0,
+      75,    76,    78,    77,    79,    80,   327,     0,    74,     0,
        0,     0,     0,    54,     0,     0,    40,    38,     0,     0,
-     330,     0,    67,    63,    62,     0,     0,    61,    65,    70,
-      72,    69,    55,   156,    21,    23,   318,   333,     0,   314,
-      82,    74,    57,     0,   160,   159,   161,     0,     0,   156,
-       0,   154,   317,     0,   158,    56,    53,   155,     0,   194,
-     157,    58,     0,   168,     0,     0,     0,     0,     0,     0,
-       0,   178,     0,   181,   184,     0,   147,     0,   148,   251,
-       0,     0,     0,   268,   269,   270,   312,   219,   183,   191,
-     192,   193,   134,     0,     0,   174,   221,   222,   223,   275,
-     190,   175,   295,   294,   271,   124,     0,   187,     0,     0,
-       0,     0,   189,     0,   176,   177,     0,     0,     0,     0,
-     351,   352,     0,   186,   271,     0,    85,   132,   135,   188,
-     293,   145,   167,     0,   254,   255,   256,   257,   260,   261,
-     262,   263,   259,   258,   264,   265,   266,     0,     0,   330,
-       0,    59,     0,     0,   303,   304,   305,   306,   307,   308,
-     309,   302,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   293,   116,   137,   140,     0,   291,     0,
-     124,   149,   277,   273,   274,   272,   224,     0,     0,   349,
-     350,   312,   225,   226,   227,     0,   218,   328,   200,     0,
-     253,   126,   127,   128,   129,   131,   125,   124,     0,   299,
-       0,     0,   298,     0,   215,   172,   179,   169,   180,     0,
-       0,   214,     0,    89,     0,     0,     0,     0,     0,   288,
-     349,     0,   150,   283,   349,     0,   279,   199,   209,   207,
-     208,   213,   267,   201,   233,   242,   243,   247,   236,   237,
-     238,   239,   240,   241,   234,   244,   245,   246,   235,   330,
-     250,   228,   229,   230,   231,   232,   248,   249,     0,     0,
-       0,    60,   301,     0,   297,     0,     0,   330,   173,   171,
-       0,     0,     0,   252,     0,     0,     0,     0,   138,     0,
-     133,     0,   141,     0,   136,     0,   292,     0,   289,     0,
-       0,     0,   146,   282,     0,     0,   276,     0,     0,   330,
-       0,   330,     0,   202,     0,     0,   300,   296,   216,     0,
-     170,   182,   185,   118,     0,     0,     0,     0,    87,   117,
-     283,   139,   283,   142,     0,     0,   151,   349,   152,   285,
-     286,   284,   281,   349,   278,   210,   205,     0,   211,     0,
-     203,   204,   130,   217,    90,     0,     0,     0,     0,   119,
-       0,   143,   144,   290,   277,     0,     0,     0,   206,   212,
-     110,     0,   111,   113,     0,   112,     0,     0,    88,     0,
-     153,     0,   280,     0,     0,     0,   122,     0,    86,     0,
-     220,   287,   109,   115,   114,     0,   124,   120,     0,   121,
-     123
+     327,     0,    66,    62,    61,     0,     0,    60,    64,    69,
+      71,    68,    55,   155,    21,    23,   315,   330,     0,   311,
+      81,    73,    57,     0,   159,   158,   160,     0,     0,   155,
+       0,   153,   314,     0,   157,    56,    53,   154,     0,   193,
+     156,    58,     0,   167,     0,     0,     0,     0,     0,     0,
+       0,   177,     0,   180,   183,   146,     0,   147,   248,     0,
+       0,     0,   265,   266,   267,   309,   216,   182,   190,   191,
+     192,   133,     0,     0,   173,   218,   219,   220,   272,   189,
+     174,   292,   291,   268,   123,   186,     0,     0,     0,     0,
+     188,     0,   175,   176,     0,     0,     0,     0,   185,   268,
+       0,    84,   131,   134,   187,   290,   144,   166,     0,   251,
+     252,   253,   254,   257,   258,   259,   260,   256,   255,   261,
+     262,   263,     0,     0,   327,     0,    59,     0,   300,   301,
+     302,   303,   304,   305,   306,   299,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   290,   115,   136,   139,
+       0,   288,     0,   123,   148,   274,   270,   271,   269,   221,
+       0,   346,   347,   309,   222,   223,   224,     0,   215,   325,
+     199,     0,   250,   125,   126,   127,   128,   130,   124,     0,
+     296,     0,     0,   295,     0,   212,   171,   178,   168,   179,
+       0,     0,     0,    88,     0,     0,     0,     0,     0,   285,
+     346,     0,   149,   280,   346,     0,   276,   198,   208,   206,
+     207,   264,   200,   230,   239,   240,   244,   233,   234,   235,
+     236,   237,   238,   231,   241,   242,   243,   232,   327,   247,
+     225,   226,   227,   228,   229,   245,   246,     0,     0,     0,
+     298,     0,   294,     0,     0,   327,   172,   170,     0,     0,
+       0,   249,     0,     0,     0,     0,   137,     0,   132,     0,
+     140,     0,   135,     0,   289,     0,   286,     0,     0,     0,
+     145,   279,     0,     0,   273,     0,     0,   327,     0,   327,
+       0,   201,     0,     0,   297,   293,   213,     0,   169,   181,
+     184,   117,     0,     0,     0,     0,    86,   116,   280,   138,
+     280,   141,     0,     0,   150,   346,   151,   282,   283,   281,
+     278,   346,   275,   209,   204,     0,   210,     0,   202,   203,
+     129,   214,    89,     0,     0,     0,     0,   118,     0,   142,
+     143,   287,   274,     0,     0,     0,   205,   211,   109,     0,
+     110,   112,     0,   111,     0,     0,    87,     0,   152,     0,
+     277,     0,     0,     0,   121,     0,    85,     0,   217,   284,
+     108,   114,   113,     0,   123,   119,     0,   120,   122
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1751,323 +1741,319 @@
       88,    89,   167,    59,    60,    96,    97,   133,   158,    18,
       29,    61,    19,    25,    20,    26,    86,   183,   203,   217,
      223,   231,   118,   119,   120,   121,   122,   123,   124,   177,
-     178,   218,   259,   344,   529,   456,   125,   126,   127,   498,
-     393,   457,   547,   559,   565,   321,   376,   260,   345,   261,
-     346,   394,   395,   461,   465,   262,   351,   263,   401,   219,
-     220,   221,    63,    64,    65,   230,   386,   387,   449,   264,
-     286,   288,   289,    50,   409,   265,   300,   365,   438,   266,
-     295,   267,   320,   268,   269,   270,   303,   405,   406,   473,
-     511,   348,   349,   271,   272,   273,   332,   333,    80,   160,
+     178,   218,   258,   337,   517,   444,   125,   126,   127,   486,
+     383,   445,   535,   547,   553,   316,   368,   259,   338,   260,
+     339,   384,   385,   449,   453,   261,   344,   262,   391,   219,
+     220,   221,    63,    64,    65,   230,   377,   378,   437,   263,
+     284,   286,   287,    50,   399,   264,   295,   357,   427,   265,
+     290,   266,   315,   267,   268,   269,   298,   395,   396,   461,
+     499,   341,   342,   270,   271,   272,   326,   327,    80,   160,
      161,   162,    44,    45,   151,   163,   153,    37,    38,   188,
-     189,    82,   137,    83,    84,    85,   292
+     189,    82,   137,    83,    84,    85
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -442
+#define YYPACT_NINF -426
 static const yytype_int16 yypact[] =
 {
-      13,  -442,   -88,   -34,   -64,   -12,  -442,  -442,     5,  -442,
-     158,   165,    13,  -442,  -442,  -442,   179,  -442,  -442,  -442,
-    -442,  -442,    67,   139,    88,   223,   177,   172,   226,   181,
-    -442,  -442,  -442,  -442,   124,   128,  -442,   130,   296,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-     147,  -442,   145,  -442,   255,  -442,  -442,  -442,  -442,   214,
-    -442,   157,  -442,    70,   160,  -442,  -442,   268,  -442,   479,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,   199,   -42,  -442,  -442,  -442,   548,   153,   167,   171,
-    -442,  -442,  -442,   479,   174,  -442,   284,   180,  -442,  -442,
-    -442,   479,  -442,   296,  -442,  -442,  -442,  -442,  -442,   163,
-    -442,   170,  -442,   176,   182,   184,   186,   189,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,   299,   548,  -442,   207,   544,
-     544,  -442,   219,   548,  -442,   464,  -442,   296,  -442,   -46,
-      55,   105,   192,   204,   -46,   -46,  -442,  -442,  -442,  -442,
-    -442,  -442,   183,  -442,   201,   216,   228,  -442,  -442,   208,
-    -442,   259,  -442,  -442,  -442,  -442,  -442,   210,   215,   217,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,   -49,  -442,   229,
-     231,   232,   239,   331,   -46,   -46,  -442,  -442,   225,   296,
-    -442,   464,  -442,  -442,  -442,   242,   105,  -442,  -442,  -442,
-    -442,  -442,  -442,     2,  -442,  -442,  -442,   -42,   243,  -442,
-    -442,  -442,  -442,   365,  -442,  -442,  -442,   368,   300,    34,
-      23,  -442,  -442,   172,  -442,  -442,  -442,  -442,   370,   450,
-    -442,  -442,    94,  -442,   -33,   233,   247,   479,   287,   266,
-     267,  -442,   264,    82,  -442,   -85,  -442,   161,  -442,  -442,
-     382,   392,   394,  -442,  -442,  -442,   464,  -442,  -442,  -442,
-    -442,  -442,  -442,   273,   403,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,   343,  -442,   397,  -442,   479,   193,
-     479,   193,  -442,   341,  -442,  -442,   172,   347,   172,   172,
-    -442,  -442,   292,  -442,   301,   294,  -442,  -442,  -442,  -442,
-     342,  -442,  -442,   297,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,   126,    64,  -442,
-     479,    42,   317,   418,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,   -33,   479,   419,   -33,   479,   479,   320,   287,
-     321,   322,   479,   342,  -442,  -442,  -442,   413,  -442,   -26,
-    -442,   558,   572,  -442,  -442,  -442,  -442,   509,   -85,   312,
-     315,   464,  -442,  -442,  -442,   479,  -442,    65,   477,   318,
-    -442,  -442,  -442,  -442,   319,  -442,  -442,  -442,   -33,  -442,
-     435,   -33,  -442,   442,   -21,   352,   384,  -442,  -442,   345,
-     346,  -442,   -16,     6,    35,    11,   287,   380,   348,    42,
-     433,    -8,  -442,  -442,   444,    36,  -442,  -442,   398,    20,
-      22,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,   479,   350,
-     363,    42,  -442,   -33,  -442,   -33,   479,  -442,  -442,  -442,
-     320,   207,   207,  -442,   479,   479,   132,   473,  -442,   479,
-    -442,   474,  -442,   479,  -442,   478,  -442,   462,  -442,   161,
-     479,   586,  -442,   188,   479,   600,  -442,   479,   479,  -442,
-     479,  -442,   364,  -442,   479,   367,  -442,  -442,  -442,   366,
-    -442,  -442,  -442,  -442,   488,   479,   479,   614,   160,  -442,
-    -442,  -442,  -442,  -442,   287,   369,  -442,   480,  -442,  -442,
-     374,  -442,  -442,   481,  -442,  -442,  -442,   379,  -442,   385,
-    -442,  -442,  -442,  -442,  -442,     8,   501,     9,    25,  -442,
-     503,   188,   188,  -442,   572,   479,   396,   479,  -442,  -442,
-    -442,   479,  -442,  -442,   479,  -442,   479,   113,  -442,    48,
-    -442,   386,  -442,   507,   514,   515,  -442,   287,  -442,   517,
-    -442,  -442,  -442,  -442,  -442,   172,  -442,  -442,   320,    42,
-    -442
+     371,  -426,   -24,   -17,   -64,   -16,  -426,  -426,    49,  -426,
+     106,   121,   371,  -426,  -426,  -426,   120,  -426,  -426,  -426,
+    -426,  -426,    24,    98,    58,   177,   118,   332,   191,   126,
+    -426,  -426,  -426,  -426,    93,    99,  -426,    86,   365,  -426,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,
+     104,  -426,   109,  -426,   212,  -426,  -426,  -426,  -426,   208,
+    -426,   115,  -426,    13,   124,  -426,  -426,   224,  -426,   513,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,   158,   -57,  -426,  -426,  -426,   494,   113,   130,   125,
+    -426,  -426,  -426,   513,   134,  -426,   244,   135,  -426,  -426,
+    -426,   513,  -426,   365,  -426,  -426,  -426,  -426,  -426,   127,
+    -426,   131,  -426,   132,   137,   140,   142,   147,  -426,  -426,
+    -426,  -426,  -426,  -426,  -426,   246,   494,  -426,   278,   499,
+     499,  -426,   184,   494,  -426,   424,  -426,   365,  -426,   -65,
+      48,   101,   161,   162,   -65,   -65,  -426,  -426,  -426,  -426,
+    -426,  -426,   156,  -426,   163,   167,   179,  -426,  -426,   160,
+    -426,   213,  -426,  -426,  -426,  -426,  -426,   164,   168,   169,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,   -39,  -426,   171,
+     173,   188,   199,   306,   -65,   -65,  -426,  -426,   193,   365,
+    -426,   424,  -426,  -426,  -426,   204,   101,  -426,  -426,  -426,
+    -426,  -426,  -426,    20,  -426,  -426,  -426,   -57,   205,  -426,
+    -426,  -426,  -426,   326,  -426,  -426,  -426,   328,   262,    30,
+      11,  -426,  -426,   332,  -426,  -426,  -426,  -426,   334,   257,
+    -426,  -426,   228,  -426,   -79,   236,   343,   513,   154,   231,
+     238,  -426,   232,   -51,  -426,  -426,   583,  -426,  -426,   350,
+     351,   353,  -426,  -426,  -426,   424,  -426,  -426,  -426,  -426,
+    -426,  -426,   222,   354,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,  -426,  -426,   479,  -426,  -426,   513,   133,   513,   133,
+    -426,   289,  -426,  -426,   332,   296,   332,   332,  -426,   248,
+     245,  -426,  -426,  -426,  -426,   196,  -426,  -426,   251,  -426,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,  -426,   597,    59,  -426,   513,    34,   362,  -426,  -426,
+    -426,  -426,  -426,  -426,  -426,  -426,   -79,   513,   372,   -79,
+     513,   513,   272,   154,   279,   280,   196,  -426,  -426,  -426,
+     373,  -426,   -23,  -426,   527,   541,  -426,  -426,  -426,  -426,
+     444,   274,   275,   424,  -426,  -426,  -426,   513,  -426,   -47,
+     443,   273,  -426,  -426,  -426,  -426,   276,  -426,  -426,   -79,
+    -426,   394,   -79,  -426,   397,   -25,   307,   337,  -426,  -426,
+     288,   292,   -15,    -2,     7,     3,   154,   611,   293,    34,
+     390,   -12,  -426,  -426,   395,     9,  -426,  -426,   346,   -14,
+      22,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,   513,   297,   310,
+    -426,   -79,  -426,   -79,   513,  -426,  -426,  -426,   272,   278,
+     278,  -426,   513,   513,   102,   414,  -426,   513,  -426,   422,
+    -426,   513,  -426,   425,  -426,   410,  -426,   583,   513,   555,
+    -426,   203,   513,   569,  -426,   513,   513,  -426,   513,  -426,
+     308,  -426,   513,   309,  -426,  -426,  -426,   312,  -426,  -426,
+    -426,  -426,   429,   513,   513,   620,   124,  -426,  -426,  -426,
+    -426,  -426,   154,   314,  -426,   416,  -426,  -426,   315,  -426,
+    -426,   420,  -426,  -426,  -426,   318,  -426,   319,  -426,  -426,
+    -426,  -426,  -426,    12,   440,    23,    26,  -426,   447,   203,
+     203,  -426,   541,   513,   341,   513,  -426,  -426,  -426,   513,
+    -426,  -426,   513,  -426,   513,   108,  -426,    70,  -426,   333,
+    -426,   450,   457,   458,  -426,   154,  -426,   459,  -426,  -426,
+    -426,  -426,  -426,   332,  -426,  -426,   272,    34,  -426
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -442,  -442,  -442,   510,    12,   -53,  -442,  -442,  -442,   295,
-    -442,  -442,    16,  -442,   469,  -442,  -442,  -442,   162,  -442,
-    -442,  -442,    14,   173,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-     344,  -442,  -442,  -442,  -442,  -442,   406,  -442,   415,  -442,
-    -442,  -442,  -442,  -442,  -442,  -344,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,   323,   324,  -442,   -63,  -442,  -442,  -441,  -442,  -442,
-    -442,  -442,  -442,  -220,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,    74,  -236,  -442,    15,  -337,  -365,
-    -442,   154,   209,  -442,  -442,  -442,   269,   272,  -133,   298,
-    -442,   371,  -442,   244,  -226,   118,   -38,  -172,  -442,  -442,
-    -442,   375,  -442,   -65,  -442,  -123,   238
+    -426,  -426,  -426,   452,    41,  -159,  -426,  -426,  -426,   237,
+    -426,  -426,    57,  -426,   406,  -426,  -426,  -426,   122,  -426,
+    -426,  -426,   148,   138,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,
+     287,  -426,  -426,  -426,  -426,  -426,   335,  -426,   363,  -426,
+    -426,  -426,  -426,  -426,  -426,  -337,  -426,  -426,  -426,  -426,
+    -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,   271,   256,  -426,   -63,  -426,  -426,  -425,  -426,  -426,
+    -426,  -426,  -426,  -220,  -426,  -426,  -426,  -426,  -426,  -426,
+    -426,  -426,  -426,  -426,    38,  -207,  -426,   -13,  -334,  -419,
+    -426,   110,   170,  -426,  -426,  -426,   226,   229,  -133,   252,
+    -426,   331,  -426,   223,  -225,    29,   -38,  -171,  -426,  -426,
+    -426,   345,  -426,   -69,  -426,  -124
 };
 
 /* 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 -272
+#define YYTABLE_NINF -269
 static const yytype_int16 yytable[] =
 {
-      81,    98,   159,   232,   195,   148,   399,   212,   277,   490,
-       4,   293,   540,   543,   402,   462,   454,     1,   208,     2,
-       3,     4,   290,   196,   228,    21,   463,  -162,   291,   545,
-     102,   100,  -162,   441,  -162,  -162,  -162,     5,   138,   458,
-       6,    57,     4,    62,     7,  -162,   397,  -162,  -162,   459,
-      23,   446,  -162,  -162,  -162,   131,   397,  -162,   159,   371,
-     372,   373,   374,   136,   471,    81,   338,   165,   340,   341,
-     166,    57,   164,    62,   -41,   -83,   149,   356,   197,    22,
-     541,   544,   366,    93,   150,  -162,   357,  -162,  -162,  -162,
-    -162,   455,   478,   464,   480,   103,   274,   546,  -162,    81,
-      94,   398,  -162,   447,  -162,   283,   379,   -84,   475,   382,
-       8,   453,    24,   213,   294,   460,     9,   493,    28,   472,
-     475,   214,   215,   159,    10,    53,   358,   570,  -162,  -162,
-    -162,  -162,  -162,  -162,   508,   531,  -162,   532,   514,  -162,
-    -162,  -162,   556,   375,   479,   213,   481,   369,    95,  -162,
-     216,    81,   442,   214,   215,   444,   170,   171,   172,   173,
-     181,   182,    30,   476,   168,    31,   216,   350,   169,    70,
-      71,    72,    73,   253,    74,   560,   557,   359,    76,    77,
-     360,   361,    79,    33,   354,   367,   317,     2,     3,   558,
-      34,  -271,   362,   363,   364,   -22,   -20,   279,   281,   282,
-     204,   205,   324,   275,   509,     5,   388,   276,   510,   495,
-     350,    35,    52,    36,   174,   496,   497,   486,   175,   487,
-       2,     3,   569,    46,    47,    48,    49,    39,   159,   176,
-      51,    70,    71,    72,    73,    40,    74,    66,     5,   353,
-     323,    67,   334,    43,    79,    52,   278,   152,   154,   325,
-     326,   327,   328,   329,   330,    68,    87,   482,   -22,    90,
-     280,    92,    53,   466,   350,   331,    70,    71,    72,    73,
-     253,    74,    99,   101,   254,   489,   128,   255,     8,    79,
-     368,   129,   370,    53,   130,   -45,    40,   132,   134,   139,
-      41,   155,    54,    42,    43,   380,   140,   135,   383,   384,
-      55,    56,   141,   146,   391,   179,   184,   517,   142,   519,
-     143,     8,   144,   403,   403,   145,    53,   180,   -46,   410,
-      75,    76,    77,    78,   185,    54,   186,   413,   491,   492,
-     187,   191,   190,    55,    56,   202,   294,   192,    70,    71,
-      72,    73,   193,    74,   194,   568,    75,    76,    77,    78,
-     206,    79,    70,    71,    72,    73,   198,    74,   199,   200,
-      75,    76,    77,    78,   528,    79,   201,   210,   222,   224,
-      69,   533,   225,   226,   233,   284,   285,   287,   304,   305,
-     306,   307,   308,   309,   310,   311,   296,   312,   313,   314,
-     315,   316,    70,    71,    72,    73,   297,    74,   298,   301,
-     483,    70,    71,    72,    73,    79,    74,   302,   488,    75,
-      76,    77,    78,   337,    79,   342,   403,   494,   322,   339,
-     343,   500,   317,   352,   566,   502,   377,   378,   381,   385,
-     389,   390,   506,   403,   396,   530,   512,   403,  -269,   515,
-     516,  -270,   518,   439,   443,   440,   521,    70,    71,    72,
-      73,   445,    74,   448,   470,   347,   450,   525,   526,   234,
-      79,   235,   236,   237,   317,   474,   318,   319,   451,   452,
-     477,   469,   238,   484,   239,   240,   485,   499,   501,   241,
-     242,   243,   503,   504,   244,    70,    71,    72,    73,   520,
-      74,   523,   524,   467,   522,   534,   403,   550,    79,   552,
-     536,   535,   537,   553,   538,   542,   554,   548,   555,   551,
-     539,   562,   245,   561,   246,   247,   248,   249,   563,   564,
-     414,   567,    32,   412,   258,   250,   415,   416,    91,   251,
-     408,   252,   417,   418,   419,   420,   421,   422,   423,   156,
-     211,   147,   227,   505,   229,   424,   425,   426,   427,   549,
-     335,   468,   392,   336,   299,    70,    71,    72,    73,   253,
-      74,   355,   209,   254,   207,     0,   255,   256,    79,    70,
-      71,    72,    73,   149,    74,     0,   257,    75,    76,    77,
-      78,   150,    79,     0,    70,    71,    72,    73,   157,    74,
-       0,     0,    75,    76,    77,    78,   411,    79,     0,   428,
-       0,   429,     0,     0,     0,     0,   430,   431,   432,   433,
-     434,   435,   436,   437,    70,    71,    72,    73,   407,    74,
-       0,     0,    75,    76,    77,    78,     0,    79,     0,     0,
-       0,     0,     0,    24,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,     0,   115,   116,   117,    70,
-      71,    72,    73,   149,    74,     0,     0,    75,    76,    77,
-      78,   150,    79,    70,    71,    72,    73,     0,    74,     0,
-       0,   400,    76,    77,    78,     0,    79,    70,    71,    72,
-      73,     0,    74,     0,     0,   404,    76,    77,    78,     0,
-      79,    70,    71,    72,    73,     0,    74,     0,     0,   507,
+      81,    98,   159,   232,   148,   195,   389,   450,   442,   275,
+     392,   446,   228,   478,   102,  -161,   528,   -41,   451,   208,
+    -161,   447,  -161,  -161,  -161,   212,    93,   531,     4,   149,
+     533,   100,   196,  -161,   138,  -161,  -161,   150,     4,   288,
+    -161,  -161,  -161,    94,   216,  -161,   434,   165,   387,    23,
+     166,   363,   364,   365,   366,   131,   387,   466,   159,   459,
+     216,   -22,   -20,   136,   332,    81,   334,   335,   164,   519,
+      57,   520,   349,   312,  -161,  -161,  -161,  -161,  -268,   103,
+     463,   350,   443,   529,   452,  -161,   448,   197,    21,  -161,
+      95,  -161,   -82,   468,   532,    22,   273,   534,   435,    81,
+      57,   370,   -83,   388,   373,   281,   358,    24,   481,   467,
+      30,   441,    53,   289,   460,  -161,  -161,  -161,  -161,  -161,
+    -161,    31,   159,  -161,    33,   496,  -161,  -161,  -161,   502,
+     213,   558,     2,     3,   367,   464,  -161,   544,   214,   215,
+     213,   463,   318,   361,   430,   469,    34,   432,   214,   215,
+       5,    81,   170,   171,   172,   173,   168,    52,   152,   154,
+     169,    28,   343,    70,    71,    72,    73,   252,    74,    35,
+     545,   351,    76,    77,   352,   353,    79,    62,   483,   347,
+     359,    39,    36,   546,   484,   485,   354,   355,   356,   319,
+     320,   321,   322,   323,   324,    51,   548,   277,   279,   280,
+     379,   181,   182,   343,   325,    66,   474,    62,   475,   174,
+      68,    67,    87,   175,     2,     3,    90,   557,    92,   497,
+     159,   -22,     8,   498,   176,    53,    40,    53,    99,   -45,
+      41,   101,     5,    42,    43,   128,    54,   130,   317,    52,
+     328,   204,   205,   129,    55,    56,   132,   470,   134,   276,
+     146,   135,   139,   454,   343,   155,   140,   141,    70,    71,
+      72,    73,   142,    74,   477,   143,   234,   144,   235,   236,
+     237,    79,   145,   179,   180,   360,   186,   362,   184,   238,
+     187,   239,   240,   190,   191,   185,   241,   242,   243,   371,
+     192,   244,   374,   375,   193,   194,   505,   198,   507,   199,
+      70,    71,    72,    73,     8,    74,   393,   393,   340,    53,
+     202,   -46,   400,    79,   200,   479,   480,   206,    54,   402,
+     245,   246,   247,   248,   289,   201,    55,    56,   210,   222,
+     224,   249,   225,   556,   226,   250,   274,   251,   233,   282,
+      70,    71,    72,    73,   285,    74,   283,   296,    75,    76,
+      77,    78,   516,    79,   291,   292,   278,   293,   297,   521,
+     331,    70,    71,    72,    73,   252,    74,   333,   312,   253,
+     336,   369,   254,   255,    79,     1,   345,     2,     3,     4,
+     376,   372,   256,    46,    47,    48,    49,   380,   381,   471,
+      75,    76,    77,    78,   386,     5,   476,   428,     6,  -266,
+    -267,   429,     7,   431,   393,   482,   433,   436,   438,   488,
+     439,   458,   554,   490,   440,   457,   462,   465,   487,   472,
+     494,   393,   473,   518,   500,   393,   489,   503,   504,   491,
+     506,   492,   508,   512,   509,   510,   511,   523,    69,   522,
+     524,   525,   526,   527,   530,   513,   514,    70,    71,    72,
+      73,   536,    74,   539,   550,    75,    76,    77,    78,   549,
+      79,   551,   552,   555,    32,    91,   257,     8,   156,    70,
+      71,    72,    73,     9,    74,   401,   229,    75,    76,    77,
+      78,    10,    79,   211,   393,   538,   403,   540,   398,   147,
+     227,   541,   404,   405,   542,   493,   543,   456,   406,   407,
+     408,   409,   410,   411,   412,   329,   382,   294,   330,   537,
+     413,   414,   415,   416,   299,   300,   301,   302,   303,   304,
+     305,   306,   209,   307,   308,   309,   310,   311,    70,    71,
+      72,    73,   149,    74,   207,   348,    75,    76,    77,    78,
+     150,    79,     0,     0,     0,     0,     0,   157,    70,    71,
+      72,    73,   397,    74,     0,     0,    75,    76,    77,    78,
+       0,    79,     0,     0,   417,     0,   418,    24,     0,     0,
+       0,   419,   420,   421,   422,   423,   424,   425,   426,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+       0,   115,   116,   117,     0,     0,     0,     0,     0,   312,
+       0,   313,   314,    70,    71,    72,    73,   149,    74,     0,
+       0,    75,    76,    77,    78,   150,    79,    70,    71,    72,
+      73,     0,    74,     0,     0,    75,    76,    77,    78,     0,
+      79,    70,    71,    72,    73,     0,    74,     0,     0,   390,
       76,    77,    78,     0,    79,    70,    71,    72,    73,     0,
-      74,     0,     0,   513,    76,    77,    78,     0,    79,    70,
-      71,    72,    73,     0,    74,     0,     0,   527,     0,     0,
-       0,     0,    79
+      74,     0,     0,   394,    76,    77,    78,     0,    79,    70,
+      71,    72,    73,     0,    74,     0,     0,   495,    76,    77,
+      78,     0,    79,    70,    71,    72,    73,     0,    74,     0,
+       0,   501,    76,    77,    78,     0,    79,    70,    71,    72,
+      73,   252,    74,     0,     0,   253,     0,     0,   254,     0,
+      79,    70,    71,    72,    73,    40,    74,     0,     0,   346,
+       0,     0,     0,    43,    79,    70,    71,    72,    73,     0,
+      74,     0,     0,   455,    70,    71,    72,    73,    79,    74,
+       0,     0,   515,     0,     0,     0,     0,    79
 };
 
 static const yytype_int16 yycheck[] =
 {
-      38,    64,   135,   223,   176,   128,   350,     5,   234,   450,
-       8,   247,     4,     4,   351,     4,    10,     4,   190,     6,
-       7,     8,   107,    72,     1,   113,    15,     4,   113,     4,
-      72,    69,     9,   377,    11,    12,    13,    24,   103,     4,
-      27,    29,     8,    29,    31,    22,    72,    24,    25,    14,
-     114,    72,    29,    30,    31,    93,    72,    34,   191,    17,
-      18,    19,    20,   101,    72,   103,   286,   113,   288,   289,
-     116,    59,   137,    59,     4,    73,   109,    13,   127,   113,
-      72,    72,   318,    13,   117,    62,    22,    64,    65,    66,
-      67,    85,    72,    82,    72,   137,   229,    72,    75,   137,
-      30,   127,    79,   124,    81,   238,   332,    73,    72,   335,
-      97,   127,   124,   111,   247,    80,   103,   454,   113,   127,
-      72,   119,   120,   256,   111,   102,    62,   568,   105,   106,
-     107,   108,   109,   110,   471,   500,   113,   502,   475,   116,
-     117,   118,    29,   101,   124,   111,   124,   319,    78,   126,
-     203,   189,   378,   119,   120,   381,    51,    52,    53,    54,
-     144,   145,     4,   127,   109,     0,   219,   300,   113,   105,
-     106,   107,   108,   109,   110,   127,    63,   113,   114,   115,
-     116,   117,   118,     4,   317,   318,   121,     6,     7,    76,
-     123,   126,   128,   129,   130,   113,   114,   235,   236,   237,
-     184,   185,     9,   109,    16,    24,   339,   113,    20,    77,
-     343,    72,    31,   125,   109,    83,    84,   443,   113,   445,
-       6,     7,   566,    51,    52,    53,    54,     4,   361,   124,
-       4,   105,   106,   107,   108,   109,   110,   113,    24,   113,
-     278,   113,   280,   117,   118,    31,    13,   129,   130,    56,
-      57,    58,    59,    60,    61,   125,   109,   429,   113,     4,
-      13,   104,   102,   396,   397,    72,   105,   106,   107,   108,
-     109,   110,     4,    74,   113,   447,   123,   116,    97,   118,
-     318,   114,   320,   102,   113,   104,   109,   113,     4,   126,
-     113,    72,   111,   116,   117,   333,   126,   117,   336,   337,
-     119,   120,   126,     4,   342,   113,   123,   479,   126,   481,
-     126,    97,   126,   351,   352,   126,   102,   113,   104,   357,
-     113,   114,   115,   116,   123,   111,   110,   365,   451,   452,
-     102,    72,   124,   119,   120,     4,   469,   127,   105,   106,
-     107,   108,   127,   110,   127,   565,   113,   114,   115,   116,
-     125,   118,   105,   106,   107,   108,   127,   110,   127,   127,
-     113,   114,   115,   116,   497,   118,   127,   125,   125,     4,
-      74,   504,     4,    73,     4,   109,   109,   113,    35,    36,
-      37,    38,    39,    40,    41,    42,     4,    44,    45,    46,
-      47,    48,   105,   106,   107,   108,     4,   110,     4,   126,
-     438,   105,   106,   107,   108,   118,   110,     4,   446,   113,
-     114,   115,   116,    72,   118,   123,   454,   455,    21,    72,
-     126,   459,   121,   126,   557,   463,   109,     9,     9,   109,
-     109,   109,   470,   471,    21,   498,   474,   475,   126,   477,
-     478,   126,   480,   125,     9,   126,   484,   105,   106,   107,
-     108,     9,   110,   101,    21,   113,    72,   495,   496,     9,
-     118,    11,    12,    13,   121,    21,   123,   124,   123,   123,
-      72,   123,    22,   123,    24,    25,   113,     4,     4,    29,
-      30,    31,     4,    21,    34,   105,   106,   107,   108,   125,
-     110,   125,     4,   113,   127,   126,   534,   535,   118,   537,
-     126,    21,    21,   541,   125,     4,   544,     4,   546,   113,
-     125,     4,    62,   127,    64,    65,    66,    67,     4,     4,
-      43,     4,    12,   361,   229,    75,    49,    50,    59,    79,
-     357,    81,    55,    56,    57,    58,    59,    60,    61,   133,
-     196,   126,   219,   469,   220,    68,    69,    70,    71,   534,
-     281,   397,   343,   281,   256,   105,   106,   107,   108,   109,
-     110,   317,   191,   113,   189,    -1,   116,   117,   118,   105,
-     106,   107,   108,   109,   110,    -1,   126,   113,   114,   115,
-     116,   117,   118,    -1,   105,   106,   107,   108,   124,   110,
-      -1,    -1,   113,   114,   115,   116,   358,   118,    -1,   122,
-      -1,   124,    -1,    -1,    -1,    -1,   129,   130,   131,   132,
-     133,   134,   135,   136,   105,   106,   107,   108,   109,   110,
-      -1,    -1,   113,   114,   115,   116,    -1,   118,    -1,    -1,
-      -1,    -1,    -1,   124,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    -1,    98,    99,   100,   105,
-     106,   107,   108,   109,   110,    -1,    -1,   113,   114,   115,
-     116,   117,   118,   105,   106,   107,   108,    -1,   110,    -1,
-      -1,   113,   114,   115,   116,    -1,   118,   105,   106,   107,
-     108,    -1,   110,    -1,    -1,   113,   114,   115,   116,    -1,
-     118,   105,   106,   107,   108,    -1,   110,    -1,    -1,   113,
-     114,   115,   116,    -1,   118,   105,   106,   107,   108,    -1,
-     110,    -1,    -1,   113,   114,   115,   116,    -1,   118,   105,
-     106,   107,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,
-      -1,    -1,   118
+      38,    64,   135,   223,   128,   176,   343,     4,    10,   234,
+     344,     4,     1,   438,    71,     4,     4,     4,    15,   190,
+       9,    14,    11,    12,    13,     5,    13,     4,     8,   108,
+       4,    69,    71,    22,   103,    24,    25,   116,     8,   246,
+      29,    30,    31,    30,   203,    34,    71,   112,    71,   113,
+     115,    17,    18,    19,    20,    93,    71,    71,   191,    71,
+     219,   112,   113,   101,   284,   103,   286,   287,   137,   488,
+      29,   490,    13,   120,    63,    64,    65,    66,   125,   136,
+      71,    22,    84,    71,    81,    74,    79,   126,   112,    78,
+      77,    80,    72,    71,    71,   112,   229,    71,   123,   137,
+      59,   326,    72,   126,   329,   238,   313,   123,   442,   123,
+       4,   126,   101,   246,   126,   104,   105,   106,   107,   108,
+     109,     0,   255,   112,     4,   459,   115,   116,   117,   463,
+     110,   556,     6,     7,   100,   126,   125,    29,   118,   119,
+     110,    71,     9,   314,   369,   123,   122,   372,   118,   119,
+      24,   189,    51,    52,    53,    54,   108,    31,   129,   130,
+     112,   112,   295,   104,   105,   106,   107,   108,   109,    71,
+      62,   112,   113,   114,   115,   116,   117,    29,    76,   312,
+     313,     4,   124,    75,    82,    83,   127,   128,   129,    56,
+      57,    58,    59,    60,    61,     4,   126,   235,   236,   237,
+     333,   144,   145,   336,    71,   112,   431,    59,   433,   108,
+     124,   112,   108,   112,     6,     7,     4,   554,   103,    16,
+     353,   112,    96,    20,   123,   101,   108,   101,     4,   103,
+     112,    73,    24,   115,   116,   122,   110,   112,   276,    31,
+     278,   184,   185,   113,   118,   119,   112,   418,     4,    13,
+       4,   116,   125,   386,   387,    71,   125,   125,   104,   105,
+     106,   107,   125,   109,   435,   125,     9,   125,    11,    12,
+      13,   117,   125,   112,   112,   313,   109,   315,   122,    22,
+     101,    24,    25,   123,    71,   122,    29,    30,    31,   327,
+     126,    34,   330,   331,   126,   126,   467,   126,   469,   126,
+     104,   105,   106,   107,    96,   109,   344,   345,   112,   101,
+       4,   103,   350,   117,   126,   439,   440,   124,   110,   357,
+      63,    64,    65,    66,   457,   126,   118,   119,   124,   124,
+       4,    74,     4,   553,    72,    78,   108,    80,     4,   108,
+     104,   105,   106,   107,   112,   109,   108,   125,   112,   113,
+     114,   115,   485,   117,     4,     4,    13,     4,     4,   492,
+      71,   104,   105,   106,   107,   108,   109,    71,   120,   112,
+     125,     9,   115,   116,   117,     4,   125,     6,     7,     8,
+     108,     9,   125,    51,    52,    53,    54,   108,   108,   427,
+     112,   113,   114,   115,    21,    24,   434,   124,    27,   125,
+     125,   125,    31,     9,   442,   443,     9,   100,    71,   447,
+     122,    21,   545,   451,   122,   122,    21,    71,     4,   122,
+     458,   459,   112,   486,   462,   463,     4,   465,   466,     4,
+     468,    21,   124,     4,   472,   126,   124,    21,    73,   125,
+     125,    21,   124,   124,     4,   483,   484,   104,   105,   106,
+     107,     4,   109,   112,     4,   112,   113,   114,   115,   126,
+     117,     4,     4,     4,    12,    59,   229,    96,   133,   104,
+     105,   106,   107,   102,   109,   353,   220,   112,   113,   114,
+     115,   110,   117,   196,   522,   523,    43,   525,   350,   126,
+     219,   529,    49,    50,   532,   457,   534,   387,    55,    56,
+      57,    58,    59,    60,    61,   279,   336,   255,   279,   522,
+      67,    68,    69,    70,    35,    36,    37,    38,    39,    40,
+      41,    42,   191,    44,    45,    46,    47,    48,   104,   105,
+     106,   107,   108,   109,   189,   312,   112,   113,   114,   115,
+     116,   117,    -1,    -1,    -1,    -1,    -1,   123,   104,   105,
+     106,   107,   108,   109,    -1,    -1,   112,   113,   114,   115,
+      -1,   117,    -1,    -1,   121,    -1,   123,   123,    -1,    -1,
+      -1,   128,   129,   130,   131,   132,   133,   134,   135,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    98,    99,    -1,    -1,    -1,    -1,    -1,   120,
+      -1,   122,   123,   104,   105,   106,   107,   108,   109,    -1,
+      -1,   112,   113,   114,   115,   116,   117,   104,   105,   106,
+     107,    -1,   109,    -1,    -1,   112,   113,   114,   115,    -1,
+     117,   104,   105,   106,   107,    -1,   109,    -1,    -1,   112,
+     113,   114,   115,    -1,   117,   104,   105,   106,   107,    -1,
+     109,    -1,    -1,   112,   113,   114,   115,    -1,   117,   104,
+     105,   106,   107,    -1,   109,    -1,    -1,   112,   113,   114,
+     115,    -1,   117,   104,   105,   106,   107,    -1,   109,    -1,
+      -1,   112,   113,   114,   115,    -1,   117,   104,   105,   106,
+     107,   108,   109,    -1,    -1,   112,    -1,    -1,   115,    -1,
+     117,   104,   105,   106,   107,   108,   109,    -1,    -1,   112,
+      -1,    -1,    -1,   116,   117,   104,   105,   106,   107,    -1,
+     109,    -1,    -1,   112,   104,   105,   106,   107,   117,   109,
+      -1,    -1,   112,    -1,    -1,    -1,    -1,   117
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,     4,     6,     7,     8,    24,    27,    31,    97,   103,
-     111,   139,   140,   141,   142,   143,   144,   145,   157,   160,
-     162,   113,   113,   114,   124,   161,   163,   146,   113,   158,
-       4,     0,   141,     4,   123,    72,   125,   255,   256,     4,
-     109,   113,   116,   117,   250,   251,    51,    52,    53,    54,
-     221,     4,    31,   102,   111,   119,   120,   142,   147,   151,
-     152,   159,   160,   210,   211,   212,   113,   113,   125,    74,
-     105,   106,   107,   108,   110,   113,   114,   115,   116,   118,
-     246,   254,   259,   261,   262,   263,   164,   109,   148,   149,
-       4,   152,   104,    13,    30,    78,   153,   154,   212,     4,
-     254,    74,    72,   137,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    98,    99,   100,   170,   171,
-     172,   173,   174,   175,   176,   184,   185,   186,   123,   114,
-     113,   254,   113,   155,     4,   117,   254,   260,   261,   126,
-     126,   126,   126,   126,   126,   126,     4,   186,   263,   109,
-     117,   252,   253,   254,   253,    72,   184,   124,   156,   246,
-     247,   248,   249,   253,   261,   113,   116,   150,   109,   113,
-      51,    52,    53,    54,   109,   113,   124,   177,   178,   113,
-     113,   150,   150,   165,   123,   123,   110,   102,   257,   258,
-     124,    72,   127,   127,   127,   255,    72,   127,   127,   127,
-     127,   127,     4,   166,   150,   150,   125,   259,   255,   249,
-     125,   178,     5,   111,   119,   120,   143,   167,   179,   207,
-     208,   209,   125,   168,     4,     4,    73,   209,     1,   210,
-     213,   169,   221,     4,     9,    11,    12,    13,    22,    24,
-      25,    29,    30,    31,    34,    62,    64,    65,    66,    67,
-      75,    79,    81,   109,   113,   116,   117,   126,   147,   180,
-     195,   197,   203,   205,   217,   223,   227,   229,   231,   232,
-     233,   241,   242,   243,   246,   109,   113,   252,    13,   254,
-      13,   254,   254,   246,   109,   109,   218,   113,   219,   220,
-     107,   113,   264,   233,   246,   228,     4,     4,     4,   247,
-     224,   126,     4,   234,    35,    36,    37,    38,    39,    40,
-      41,    42,    44,    45,    46,    47,    48,   121,   123,   124,
-     230,   193,    21,   254,     9,    56,    57,    58,    59,    60,
-      61,    72,   244,   245,   254,   244,   245,    72,   221,    72,
-     221,   221,   123,   126,   181,   196,   198,   113,   239,   240,
-     246,   204,   126,   113,   246,   251,    13,    22,    62,   113,
-     116,   117,   128,   129,   130,   225,   233,   246,   254,   255,
-     254,    17,    18,    19,    20,   101,   194,   109,     9,   252,
-     254,     9,   252,   254,   254,   109,   214,   215,   246,   109,
-     109,   254,   240,   188,   199,   200,    21,    72,   127,   193,
-     113,   206,   236,   254,   113,   235,   236,   109,   161,   222,
-     254,   264,   156,   254,    43,    49,    50,    55,    56,    57,
-      58,    59,    60,    61,    68,    69,    70,    71,   122,   124,
-     129,   130,   131,   132,   133,   134,   135,   136,   226,   125,
-     126,   193,   252,     9,   252,     9,    72,   124,   101,   216,
-      72,   123,   123,   127,    10,    85,   183,   189,     4,    14,
-      80,   201,     4,    15,    82,   202,   246,   113,   239,   123,
-      21,    72,   127,   237,    21,    72,   127,    72,    72,   124,
-      72,   124,   255,   254,   123,   113,   252,   252,   254,   255,
-     215,   263,   263,   236,   254,    77,    83,    84,   187,     4,
-     254,     4,   254,     4,    21,   232,   254,   113,   236,    16,
-      20,   238,   254,   113,   236,   254,   254,   255,   254,   255,
-     125,   254,   127,   125,     4,   254,   254,   113,   246,   182,
-     212,   237,   237,   246,   126,    21,   126,    21,   125,   125,
-       4,    72,     4,     4,    72,     4,    72,   190,     4,   235,
-     254,   113,   254,   254,   254,   254,    29,    63,    76,   191,
-     127,   127,     4,     4,     4,   192,   246,     4,   221,   193,
-     215
+       0,     4,     6,     7,     8,    24,    27,    31,    96,   102,
+     110,   138,   139,   140,   141,   142,   143,   144,   156,   159,
+     161,   112,   112,   113,   123,   160,   162,   145,   112,   157,
+       4,     0,   140,     4,   122,    71,   124,   254,   255,     4,
+     108,   112,   115,   116,   249,   250,    51,    52,    53,    54,
+     220,     4,    31,   101,   110,   118,   119,   141,   146,   150,
+     151,   158,   159,   209,   210,   211,   112,   112,   124,    73,
+     104,   105,   106,   107,   109,   112,   113,   114,   115,   117,
+     245,   253,   258,   260,   261,   262,   163,   108,   147,   148,
+       4,   151,   103,    13,    30,    77,   152,   153,   211,     4,
+     253,    73,    71,   136,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    97,    98,    99,   169,   170,
+     171,   172,   173,   174,   175,   183,   184,   185,   122,   113,
+     112,   253,   112,   154,     4,   116,   253,   259,   260,   125,
+     125,   125,   125,   125,   125,   125,     4,   185,   262,   108,
+     116,   251,   252,   253,   252,    71,   183,   123,   155,   245,
+     246,   247,   248,   252,   260,   112,   115,   149,   108,   112,
+      51,    52,    53,    54,   108,   112,   123,   176,   177,   112,
+     112,   149,   149,   164,   122,   122,   109,   101,   256,   257,
+     123,    71,   126,   126,   126,   254,    71,   126,   126,   126,
+     126,   126,     4,   165,   149,   149,   124,   258,   254,   248,
+     124,   177,     5,   110,   118,   119,   142,   166,   178,   206,
+     207,   208,   124,   167,     4,     4,    72,   208,     1,   209,
+     212,   168,   220,     4,     9,    11,    12,    13,    22,    24,
+      25,    29,    30,    31,    34,    63,    64,    65,    66,    74,
+      78,    80,   108,   112,   115,   116,   125,   146,   179,   194,
+     196,   202,   204,   216,   222,   226,   228,   230,   231,   232,
+     240,   241,   242,   245,   108,   251,    13,   253,    13,   253,
+     253,   245,   108,   108,   217,   112,   218,   219,   232,   245,
+     227,     4,     4,     4,   246,   223,   125,     4,   233,    35,
+      36,    37,    38,    39,    40,    41,    42,    44,    45,    46,
+      47,    48,   120,   122,   123,   229,   192,   253,     9,    56,
+      57,    58,    59,    60,    61,    71,   243,   244,   253,   243,
+     244,    71,   220,    71,   220,   220,   125,   180,   195,   197,
+     112,   238,   239,   245,   203,   125,   112,   245,   250,    13,
+      22,   112,   115,   116,   127,   128,   129,   224,   232,   245,
+     253,   254,   253,    17,    18,    19,    20,   100,   193,     9,
+     251,   253,     9,   251,   253,   253,   108,   213,   214,   245,
+     108,   108,   239,   187,   198,   199,    21,    71,   126,   192,
+     112,   205,   235,   253,   112,   234,   235,   108,   160,   221,
+     253,   155,   253,    43,    49,    50,    55,    56,    57,    58,
+      59,    60,    61,    67,    68,    69,    70,   121,   123,   128,
+     129,   130,   131,   132,   133,   134,   135,   225,   124,   125,
+     251,     9,   251,     9,    71,   123,   100,   215,    71,   122,
+     122,   126,    10,    84,   182,   188,     4,    14,    79,   200,
+       4,    15,    81,   201,   245,   112,   238,   122,    21,    71,
+     126,   236,    21,    71,   126,    71,    71,   123,    71,   123,
+     254,   253,   122,   112,   251,   251,   253,   254,   214,   262,
+     262,   235,   253,    76,    82,    83,   186,     4,   253,     4,
+     253,     4,    21,   231,   253,   112,   235,    16,    20,   237,
+     253,   112,   235,   253,   253,   254,   253,   254,   124,   253,
+     126,   124,     4,   253,   253,   112,   245,   181,   211,   236,
+     236,   245,   125,    21,   125,    21,   124,   124,     4,    71,
+       4,     4,    71,     4,    71,   189,     4,   234,   253,   112,
+     253,   253,   253,   253,    29,    62,    75,   190,   126,   126,
+       4,     4,     4,   191,   245,     4,   220,   192,   214
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3237,25 +3223,12 @@
     break;
 
   case 60:
-#line 1028 "compilers/imcc/imcc.y"
-    {
-            if ((yyvsp[(5) - (5)].t) & VT_UNIQUE_REG)
-                (yyval.sr) = mk_ident_ur(interp, (yyvsp[(4) - (5)].s), (yyvsp[(1) - (5)].t));
-            else
-                (yyval.sr) = mk_ident(interp, (yyvsp[(4) - (5)].s), (yyvsp[(1) - (5)].t));
-            (yyval.sr)->type |= (yyvsp[(5) - (5)].t);
-            adv_named_set(interp, (yyvsp[(2) - (5)].s));
-            mem_sys_free((yyvsp[(4) - (5)].s));
-          }
-    break;
-
-  case 61:
-#line 1042 "compilers/imcc/imcc.y"
+#line 1030 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 62:
-#line 1047 "compilers/imcc/imcc.y"
+  case 61:
+#line 1035 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3263,8 +3236,8 @@
          }
     break;
 
-  case 63:
-#line 1053 "compilers/imcc/imcc.y"
+  case 62:
+#line 1041 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3272,8 +3245,8 @@
          }
     break;
 
-  case 64:
-#line 1062 "compilers/imcc/imcc.y"
+  case 63:
+#line 1050 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
@@ -3281,8 +3254,8 @@
          }
     break;
 
-  case 65:
-#line 1068 "compilers/imcc/imcc.y"
+  case 64:
+#line 1056 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
@@ -3290,8 +3263,8 @@
          }
     break;
 
-  case 66:
-#line 1077 "compilers/imcc/imcc.y"
+  case 65:
+#line 1065 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
@@ -3299,8 +3272,8 @@
          }
     break;
 
-  case 67:
-#line 1083 "compilers/imcc/imcc.y"
+  case 66:
+#line 1071 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
@@ -3308,8 +3281,8 @@
          }
     break;
 
-  case 68:
-#line 1092 "compilers/imcc/imcc.y"
+  case 67:
+#line 1080 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
@@ -3317,8 +3290,8 @@
          }
     break;
 
-  case 69:
-#line 1098 "compilers/imcc/imcc.y"
+  case 68:
+#line 1086 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3326,28 +3299,28 @@
          }
     break;
 
-  case 70:
-#line 1107 "compilers/imcc/imcc.y"
+  case 69:
+#line 1095 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
          }
     break;
 
-  case 71:
-#line 1115 "compilers/imcc/imcc.y"
+  case 70:
+#line 1103 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
-           /* 
+           /*
            IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid = str_dup_remove_quotes($3);
            mem_sys_free($3);
            */
          }
     break;
 
-  case 72:
-#line 1124 "compilers/imcc/imcc.y"
+  case 71:
+#line 1112 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            /* IMCC_INFO(interp)->cur_unit->subid = $3; */
@@ -3357,51 +3330,51 @@
          }
     break;
 
-  case 73:
-#line 1135 "compilers/imcc/imcc.y"
+  case 72:
+#line 1123 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
          }
     break;
 
-  case 74:
-#line 1139 "compilers/imcc/imcc.y"
+  case 73:
+#line 1127 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 75:
-#line 1144 "compilers/imcc/imcc.y"
+  case 74:
+#line 1132 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 76:
-#line 1151 "compilers/imcc/imcc.y"
+  case 75:
+#line 1139 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
-  case 77:
-#line 1152 "compilers/imcc/imcc.y"
+  case 76:
+#line 1140 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
-  case 78:
-#line 1153 "compilers/imcc/imcc.y"
+  case 77:
+#line 1141 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
-  case 79:
-#line 1154 "compilers/imcc/imcc.y"
+  case 78:
+#line 1142 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
-  case 80:
-#line 1156 "compilers/imcc/imcc.y"
+  case 79:
+#line 1144 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3414,8 +3387,8 @@
          }
     break;
 
-  case 81:
-#line 1167 "compilers/imcc/imcc.y"
+  case 80:
+#line 1155 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3428,13 +3401,13 @@
          }
     break;
 
-  case 82:
-#line 1177 "compilers/imcc/imcc.y"
+  case 81:
+#line 1165 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
-  case 85:
-#line 1187 "compilers/imcc/imcc.y"
+  case 84:
+#line 1175 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3460,174 +3433,174 @@
          }
     break;
 
-  case 86:
-#line 1215 "compilers/imcc/imcc.y"
+  case 85:
+#line 1203 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 87:
-#line 1219 "compilers/imcc/imcc.y"
+  case 86:
+#line 1207 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
-  case 88:
-#line 1220 "compilers/imcc/imcc.y"
+  case 87:
+#line 1208 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
-  case 89:
-#line 1224 "compilers/imcc/imcc.y"
+  case 88:
+#line 1212 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
-  case 90:
-#line 1225 "compilers/imcc/imcc.y"
+  case 89:
+#line 1213 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
-  case 91:
-#line 1229 "compilers/imcc/imcc.y"
+  case 90:
+#line 1217 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 93:
-#line 1234 "compilers/imcc/imcc.y"
+  case 92:
+#line 1222 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
-  case 94:
-#line 1235 "compilers/imcc/imcc.y"
+  case 93:
+#line 1223 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 95:
-#line 1239 "compilers/imcc/imcc.y"
+  case 94:
+#line 1227 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
-  case 96:
-#line 1240 "compilers/imcc/imcc.y"
+  case 95:
+#line 1228 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
-  case 97:
-#line 1241 "compilers/imcc/imcc.y"
+  case 96:
+#line 1229 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
-  case 98:
-#line 1242 "compilers/imcc/imcc.y"
+  case 97:
+#line 1230 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
-  case 99:
-#line 1243 "compilers/imcc/imcc.y"
+  case 98:
+#line 1231 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
-  case 100:
-#line 1244 "compilers/imcc/imcc.y"
+  case 99:
+#line 1232 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
-  case 101:
-#line 1245 "compilers/imcc/imcc.y"
+  case 100:
+#line 1233 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
-  case 109:
-#line 1257 "compilers/imcc/imcc.y"
+  case 108:
+#line 1245 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 110:
-#line 1262 "compilers/imcc/imcc.y"
+  case 109:
+#line 1250 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 111:
-#line 1266 "compilers/imcc/imcc.y"
+  case 110:
+#line 1254 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
          }
     break;
 
-  case 112:
-#line 1271 "compilers/imcc/imcc.y"
+  case 111:
+#line 1259 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 113:
-#line 1275 "compilers/imcc/imcc.y"
+  case 112:
+#line 1263 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
     break;
 
-  case 114:
-#line 1279 "compilers/imcc/imcc.y"
+  case 113:
+#line 1267 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 115:
-#line 1284 "compilers/imcc/imcc.y"
+  case 114:
+#line 1272 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
          }
     break;
 
-  case 116:
-#line 1292 "compilers/imcc/imcc.y"
+  case 115:
+#line 1280 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 117:
-#line 1293 "compilers/imcc/imcc.y"
+  case 116:
+#line 1281 "compilers/imcc/imcc.y"
     { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
-  case 118:
-#line 1297 "compilers/imcc/imcc.y"
+  case 117:
+#line 1285 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
-  case 119:
-#line 1302 "compilers/imcc/imcc.y"
+  case 118:
+#line 1290 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 120:
-#line 1304 "compilers/imcc/imcc.y"
+  case 119:
+#line 1292 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 121:
-#line 1311 "compilers/imcc/imcc.y"
+  case 120:
+#line 1299 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 122:
-#line 1312 "compilers/imcc/imcc.y"
+  case 121:
+#line 1300 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 123:
-#line 1313 "compilers/imcc/imcc.y"
+  case 122:
+#line 1301 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -3641,159 +3614,159 @@
          }
     break;
 
-  case 124:
-#line 1327 "compilers/imcc/imcc.y"
+  case 123:
+#line 1315 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 125:
-#line 1328 "compilers/imcc/imcc.y"
+  case 124:
+#line 1316 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 126:
-#line 1332 "compilers/imcc/imcc.y"
+  case 125:
+#line 1320 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
-  case 127:
-#line 1333 "compilers/imcc/imcc.y"
+  case 126:
+#line 1321 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
-  case 128:
-#line 1334 "compilers/imcc/imcc.y"
+  case 127:
+#line 1322 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
-  case 129:
-#line 1335 "compilers/imcc/imcc.y"
+  case 128:
+#line 1323 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 130:
-#line 1336 "compilers/imcc/imcc.y"
+  case 129:
+#line 1324 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 131:
-#line 1337 "compilers/imcc/imcc.y"
+  case 130:
+#line 1325 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
-  case 132:
-#line 1342 "compilers/imcc/imcc.y"
+  case 131:
+#line 1330 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
-  case 133:
-#line 1344 "compilers/imcc/imcc.y"
+  case 132:
+#line 1332 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
-  case 134:
-#line 1346 "compilers/imcc/imcc.y"
+  case 133:
+#line 1334 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
          }
     break;
 
-  case 135:
-#line 1353 "compilers/imcc/imcc.y"
+  case 134:
+#line 1341 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
-  case 136:
-#line 1355 "compilers/imcc/imcc.y"
+  case 135:
+#line 1343 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
-  case 137:
-#line 1359 "compilers/imcc/imcc.y"
+  case 136:
+#line 1347 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 138:
-#line 1361 "compilers/imcc/imcc.y"
+  case 137:
+#line 1349 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
-  case 139:
-#line 1366 "compilers/imcc/imcc.y"
+  case 138:
+#line 1354 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 140:
-#line 1373 "compilers/imcc/imcc.y"
+  case 139:
+#line 1361 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 141:
-#line 1375 "compilers/imcc/imcc.y"
+  case 140:
+#line 1363 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
-  case 142:
-#line 1380 "compilers/imcc/imcc.y"
+  case 141:
+#line 1368 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
-  case 143:
-#line 1387 "compilers/imcc/imcc.y"
+  case 142:
+#line 1375 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 144:
-#line 1391 "compilers/imcc/imcc.y"
+  case 143:
+#line 1379 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
-  case 145:
-#line 1396 "compilers/imcc/imcc.y"
+  case 144:
+#line 1384 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
         }
     break;
 
-  case 146:
-#line 1401 "compilers/imcc/imcc.y"
+  case 145:
+#line 1389 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
         }
     break;
 
-  case 147:
-#line 1408 "compilers/imcc/imcc.y"
+  case 146:
+#line 1396 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 148:
-#line 1409 "compilers/imcc/imcc.y"
+  case 147:
+#line 1397 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
-  case 149:
-#line 1413 "compilers/imcc/imcc.y"
+  case 148:
+#line 1401 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 150:
-#line 1415 "compilers/imcc/imcc.y"
+  case 149:
+#line 1403 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3805,15 +3778,15 @@
          }
     break;
 
-  case 151:
-#line 1425 "compilers/imcc/imcc.y"
+  case 150:
+#line 1413 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 152:
-#line 1429 "compilers/imcc/imcc.y"
+  case 151:
+#line 1417 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -3825,62 +3798,62 @@
          }
     break;
 
-  case 153:
-#line 1439 "compilers/imcc/imcc.y"
+  case 152:
+#line 1427 "compilers/imcc/imcc.y"
     {
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 156:
-#line 1459 "compilers/imcc/imcc.y"
+  case 155:
+#line 1447 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
-  case 157:
-#line 1464 "compilers/imcc/imcc.y"
+  case 156:
+#line 1452 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
+  case 157:
+#line 1453 "compilers/imcc/imcc.y"
+    { (yyval.i) = 0; }
+    break;
+
   case 158:
-#line 1465 "compilers/imcc/imcc.y"
+#line 1454 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 159:
-#line 1466 "compilers/imcc/imcc.y"
+#line 1455 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 160:
-#line 1467 "compilers/imcc/imcc.y"
+#line 1456 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 161:
-#line 1468 "compilers/imcc/imcc.y"
-    { (yyval.i) = 0; }
-    break;
-
-  case 162:
-#line 1472 "compilers/imcc/imcc.y"
+#line 1460 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
-  case 166:
-#line 1483 "compilers/imcc/imcc.y"
+  case 165:
+#line 1471 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
          }
     break;
 
-  case 167:
-#line 1491 "compilers/imcc/imcc.y"
+  case 166:
+#line 1479 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
-  case 168:
-#line 1493 "compilers/imcc/imcc.y"
+  case 167:
+#line 1481 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -3890,8 +3863,8 @@
          }
     break;
 
-  case 169:
-#line 1504 "compilers/imcc/imcc.y"
+  case 168:
+#line 1492 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -3899,8 +3872,8 @@
          }
     break;
 
-  case 170:
-#line 1511 "compilers/imcc/imcc.y"
+  case 169:
+#line 1499 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -3908,8 +3881,8 @@
          }
     break;
 
-  case 171:
-#line 1520 "compilers/imcc/imcc.y"
+  case 170:
+#line 1508 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -3918,33 +3891,33 @@
          }
     break;
 
-  case 172:
-#line 1529 "compilers/imcc/imcc.y"
+  case 171:
+#line 1517 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 173:
-#line 1530 "compilers/imcc/imcc.y"
+  case 172:
+#line 1518 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
-  case 176:
-#line 1537 "compilers/imcc/imcc.y"
+  case 175:
+#line 1525 "compilers/imcc/imcc.y"
     { push_namespace(interp, (yyvsp[(2) - (2)].s)); mem_sys_free((yyvsp[(2) - (2)].s)); }
     break;
 
-  case 177:
-#line 1538 "compilers/imcc/imcc.y"
+  case 176:
+#line 1526 "compilers/imcc/imcc.y"
     { pop_namespace(interp, (yyvsp[(2) - (2)].s)); mem_sys_free((yyvsp[(2) - (2)].s)); }
     break;
 
-  case 178:
-#line 1539 "compilers/imcc/imcc.y"
+  case 177:
+#line 1527 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 179:
-#line 1540 "compilers/imcc/imcc.y"
+  case 178:
+#line 1528 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -3962,20 +3935,20 @@
          }
     break;
 
-  case 180:
-#line 1556 "compilers/imcc/imcc.y"
+  case 179:
+#line 1544 "compilers/imcc/imcc.y"
     {
            set_lexical(interp, (yyvsp[(4) - (4)].sr), (yyvsp[(2) - (4)].s)); (yyval.i) = 0;
          }
     break;
 
-  case 181:
-#line 1559 "compilers/imcc/imcc.y"
+  case 180:
+#line 1547 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 182:
-#line 1560 "compilers/imcc/imcc.y"
+  case 181:
+#line 1548 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            is_def=0;
@@ -3983,13 +3956,13 @@
          }
     break;
 
-  case 184:
-#line 1567 "compilers/imcc/imcc.y"
+  case 183:
+#line 1555 "compilers/imcc/imcc.y"
     { is_def=1; }
     break;
 
-  case 185:
-#line 1568 "compilers/imcc/imcc.y"
+  case 184:
+#line 1556 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            is_def=0;
@@ -3997,8 +3970,8 @@
          }
     break;
 
-  case 186:
-#line 1574 "compilers/imcc/imcc.y"
+  case 185:
+#line 1562 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -4006,13 +3979,13 @@
          }
     break;
 
-  case 187:
-#line 1579 "compilers/imcc/imcc.y"
+  case 186:
+#line 1567 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
-  case 188:
-#line 1581 "compilers/imcc/imcc.y"
+  case 187:
+#line 1569 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4026,48 +3999,48 @@
          }
     break;
 
-  case 189:
-#line 1592 "compilers/imcc/imcc.y"
+  case 188:
+#line 1580 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
-  case 190:
-#line 1593 "compilers/imcc/imcc.y"
+  case 189:
+#line 1581 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
-  case 191:
-#line 1594 "compilers/imcc/imcc.y"
+  case 190:
+#line 1582 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
-  case 194:
-#line 1597 "compilers/imcc/imcc.y"
+  case 193:
+#line 1585 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
-  case 195:
-#line 1601 "compilers/imcc/imcc.y"
+  case 194:
+#line 1589 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
-  case 196:
-#line 1602 "compilers/imcc/imcc.y"
+  case 195:
+#line 1590 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
-  case 197:
-#line 1603 "compilers/imcc/imcc.y"
+  case 196:
+#line 1591 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
-  case 198:
-#line 1604 "compilers/imcc/imcc.y"
+  case 197:
+#line 1592 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
-  case 199:
-#line 1609 "compilers/imcc/imcc.y"
+  case 198:
+#line 1597 "compilers/imcc/imcc.y"
     {
            /* there'd normally be a str_dup() here, but the lexer already
             * copied the string, so it's safe to use directly */
@@ -4079,98 +4052,88 @@
          }
     break;
 
-  case 200:
-#line 1622 "compilers/imcc/imcc.y"
+  case 199:
+#line 1610 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
-  case 201:
-#line 1624 "compilers/imcc/imcc.y"
+  case 200:
+#line 1612 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
-  case 202:
-#line 1626 "compilers/imcc/imcc.y"
+  case 201:
+#line 1614 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));  }
     break;
 
-  case 203:
-#line 1628 "compilers/imcc/imcc.y"
+  case 202:
+#line 1616 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
-  case 204:
-#line 1630 "compilers/imcc/imcc.y"
+  case 203:
+#line 1618 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 205:
-#line 1632 "compilers/imcc/imcc.y"
+  case 204:
+#line 1620 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].s), (yyvsp[(6) - (6)].sr), 1); }
     break;
 
-  case 206:
-#line 1634 "compilers/imcc/imcc.y"
+  case 205:
+#line 1622 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
     break;
 
-  case 207:
-#line 1636 "compilers/imcc/imcc.y"
+  case 206:
+#line 1624 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].s), NULL, 1); }
     break;
 
-  case 208:
-#line 1638 "compilers/imcc/imcc.y"
+  case 207:
+#line 1626 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
-  case 209:
-#line 1640 "compilers/imcc/imcc.y"
+  case 208:
+#line 1628 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
-  case 210:
-#line 1642 "compilers/imcc/imcc.y"
+  case 209:
+#line 1630 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 211:
-#line 1644 "compilers/imcc/imcc.y"
+  case 210:
+#line 1632 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 212:
-#line 1646 "compilers/imcc/imcc.y"
+  case 211:
+#line 1634 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
     break;
 
-  case 213:
-#line 1648 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "find_global", 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));}
-    break;
-
-  case 214:
-#line 1650 "compilers/imcc/imcc.y"
-    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "store_global", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
-    break;
-
-  case 215:
-#line 1654 "compilers/imcc/imcc.y"
+  case 212:
+#line 1638 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
     break;
 
-  case 216:
-#line 1656 "compilers/imcc/imcc.y"
+  case 213:
+#line 1640 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
-  case 217:
-#line 1658 "compilers/imcc/imcc.y"
+  case 214:
+#line 1642 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "new", 3, (yyvsp[(2) - (7)].sr), (yyvsp[(4) - (7)].sr), (yyvsp[(6) - (7)].sr)); }
     break;
 
-  case 218:
-#line 1661 "compilers/imcc/imcc.y"
+  case 215:
+#line 1645 "compilers/imcc/imcc.y"
     {
            add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4178,160 +4141,160 @@
          }
     break;
 
-  case 219:
-#line 1667 "compilers/imcc/imcc.y"
+  case 216:
+#line 1651 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
     break;
 
-  case 220:
-#line 1671 "compilers/imcc/imcc.y"
+  case 217:
+#line 1655 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
          }
     break;
 
-  case 224:
-#line 1679 "compilers/imcc/imcc.y"
+  case 221:
+#line 1663 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
     break;
 
-  case 225:
-#line 1686 "compilers/imcc/imcc.y"
+  case 222:
+#line 1670 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
-  case 226:
-#line 1687 "compilers/imcc/imcc.y"
+  case 223:
+#line 1671 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
-  case 227:
-#line 1688 "compilers/imcc/imcc.y"
+  case 224:
+#line 1672 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
-  case 228:
-#line 1692 "compilers/imcc/imcc.y"
+  case 225:
+#line 1676 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
-  case 229:
-#line 1693 "compilers/imcc/imcc.y"
+  case 226:
+#line 1677 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
-  case 230:
-#line 1694 "compilers/imcc/imcc.y"
+  case 227:
+#line 1678 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
-  case 231:
-#line 1695 "compilers/imcc/imcc.y"
+  case 228:
+#line 1679 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
-  case 232:
-#line 1696 "compilers/imcc/imcc.y"
+  case 229:
+#line 1680 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
-  case 233:
-#line 1697 "compilers/imcc/imcc.y"
+  case 230:
+#line 1681 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
-  case 234:
-#line 1698 "compilers/imcc/imcc.y"
+  case 231:
+#line 1682 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
-  case 235:
-#line 1699 "compilers/imcc/imcc.y"
+  case 232:
+#line 1683 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
-  case 236:
-#line 1700 "compilers/imcc/imcc.y"
+  case 233:
+#line 1684 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
-  case 237:
-#line 1701 "compilers/imcc/imcc.y"
+  case 234:
+#line 1685 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
-  case 238:
-#line 1702 "compilers/imcc/imcc.y"
+  case 235:
+#line 1686 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
-  case 239:
-#line 1703 "compilers/imcc/imcc.y"
+  case 236:
+#line 1687 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
-  case 240:
-#line 1704 "compilers/imcc/imcc.y"
+  case 237:
+#line 1688 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
-  case 241:
-#line 1705 "compilers/imcc/imcc.y"
+  case 238:
+#line 1689 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
-  case 242:
-#line 1706 "compilers/imcc/imcc.y"
+  case 239:
+#line 1690 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
-  case 243:
-#line 1707 "compilers/imcc/imcc.y"
+  case 240:
+#line 1691 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
-  case 244:
-#line 1708 "compilers/imcc/imcc.y"
+  case 241:
+#line 1692 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
-  case 245:
-#line 1709 "compilers/imcc/imcc.y"
+  case 242:
+#line 1693 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
-  case 246:
-#line 1710 "compilers/imcc/imcc.y"
+  case 243:
+#line 1694 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
-  case 247:
-#line 1711 "compilers/imcc/imcc.y"
+  case 244:
+#line 1695 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
-  case 248:
-#line 1712 "compilers/imcc/imcc.y"
+  case 245:
+#line 1696 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
-  case 249:
-#line 1713 "compilers/imcc/imcc.y"
+  case 246:
+#line 1697 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
-  case 250:
-#line 1714 "compilers/imcc/imcc.y"
+  case 247:
+#line 1698 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
-  case 251:
-#line 1720 "compilers/imcc/imcc.y"
+  case 248:
+#line 1704 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -4339,85 +4302,85 @@
          }
     break;
 
-  case 252:
-#line 1725 "compilers/imcc/imcc.y"
+  case 249:
+#line 1709 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
-  case 253:
-#line 1732 "compilers/imcc/imcc.y"
+  case 250:
+#line 1716 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 254:
-#line 1738 "compilers/imcc/imcc.y"
+  case 251:
+#line 1722 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
-  case 255:
-#line 1739 "compilers/imcc/imcc.y"
+  case 252:
+#line 1723 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
-  case 256:
-#line 1740 "compilers/imcc/imcc.y"
+  case 253:
+#line 1724 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
-  case 257:
-#line 1741 "compilers/imcc/imcc.y"
+  case 254:
+#line 1725 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
-  case 258:
-#line 1742 "compilers/imcc/imcc.y"
+  case 255:
+#line 1726 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
-  case 259:
-#line 1743 "compilers/imcc/imcc.y"
+  case 256:
+#line 1727 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
-  case 260:
-#line 1744 "compilers/imcc/imcc.y"
+  case 257:
+#line 1728 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
-  case 261:
-#line 1745 "compilers/imcc/imcc.y"
+  case 258:
+#line 1729 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
-  case 262:
-#line 1746 "compilers/imcc/imcc.y"
+  case 259:
+#line 1730 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
-  case 263:
-#line 1747 "compilers/imcc/imcc.y"
+  case 260:
+#line 1731 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
-  case 264:
-#line 1748 "compilers/imcc/imcc.y"
+  case 261:
+#line 1732 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
-  case 265:
-#line 1749 "compilers/imcc/imcc.y"
+  case 262:
+#line 1733 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
-  case 266:
-#line 1750 "compilers/imcc/imcc.y"
+  case 263:
+#line 1734 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
-  case 267:
-#line 1756 "compilers/imcc/imcc.y"
+  case 264:
+#line 1740 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
                       IMCC_INFO(interp) -> regs,
@@ -4427,23 +4390,23 @@
        }
     break;
 
-  case 268:
-#line 1766 "compilers/imcc/imcc.y"
+  case 265:
+#line 1750 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 269:
-#line 1767 "compilers/imcc/imcc.y"
+  case 266:
+#line 1751 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 270:
-#line 1768 "compilers/imcc/imcc.y"
+  case 267:
+#line 1752 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 271:
-#line 1770 "compilers/imcc/imcc.y"
+  case 268:
+#line 1754 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -4451,8 +4414,8 @@
          }
     break;
 
-  case 272:
-#line 1776 "compilers/imcc/imcc.y"
+  case 269:
+#line 1760 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4466,8 +4429,8 @@
         }
     break;
 
-  case 273:
-#line 1788 "compilers/imcc/imcc.y"
+  case 270:
+#line 1772 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
@@ -4475,31 +4438,31 @@
          }
     break;
 
-  case 274:
-#line 1793 "compilers/imcc/imcc.y"
+  case 271:
+#line 1777 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
-  case 275:
-#line 1799 "compilers/imcc/imcc.y"
+  case 272:
+#line 1783 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 276:
-#line 1803 "compilers/imcc/imcc.y"
+  case 273:
+#line 1787 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
-  case 277:
-#line 1807 "compilers/imcc/imcc.y"
+  case 274:
+#line 1791 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 278:
-#line 1809 "compilers/imcc/imcc.y"
+  case 275:
+#line 1793 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4511,8 +4474,8 @@
          }
     break;
 
-  case 279:
-#line 1819 "compilers/imcc/imcc.y"
+  case 276:
+#line 1803 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4524,8 +4487,8 @@
          }
     break;
 
-  case 280:
-#line 1829 "compilers/imcc/imcc.y"
+  case 277:
+#line 1813 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
@@ -4533,8 +4496,8 @@
          }
     break;
 
-  case 281:
-#line 1835 "compilers/imcc/imcc.y"
+  case 278:
+#line 1819 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
@@ -4542,43 +4505,43 @@
          }
     break;
 
-  case 282:
-#line 1843 "compilers/imcc/imcc.y"
+  case 279:
+#line 1827 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 283:
-#line 1847 "compilers/imcc/imcc.y"
+  case 280:
+#line 1831 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 284:
-#line 1848 "compilers/imcc/imcc.y"
+  case 281:
+#line 1832 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 285:
-#line 1852 "compilers/imcc/imcc.y"
+  case 282:
+#line 1836 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT; }
     break;
 
-  case 286:
-#line 1853 "compilers/imcc/imcc.y"
+  case 283:
+#line 1837 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 287:
-#line 1856 "compilers/imcc/imcc.y"
+  case 284:
+#line 1840 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 288:
-#line 1860 "compilers/imcc/imcc.y"
+  case 285:
+#line 1844 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 289:
-#line 1865 "compilers/imcc/imcc.y"
+  case 286:
+#line 1849 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4590,16 +4553,16 @@
          }
     break;
 
-  case 290:
-#line 1875 "compilers/imcc/imcc.y"
+  case 287:
+#line 1859 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (5)].s), (yyvsp[(5) - (5)].sr));
            mem_sys_free((yyvsp[(3) - (5)].s));
          }
     break;
 
-  case 291:
-#line 1880 "compilers/imcc/imcc.y"
+  case 288:
+#line 1864 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4611,133 +4574,133 @@
          }
     break;
 
-  case 292:
-#line 1890 "compilers/imcc/imcc.y"
+  case 289:
+#line 1874 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
 
-  case 293:
-#line 1894 "compilers/imcc/imcc.y"
+  case 290:
+#line 1878 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 294:
-#line 1898 "compilers/imcc/imcc.y"
+  case 291:
+#line 1882 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 295:
-#line 1899 "compilers/imcc/imcc.y"
+  case 292:
+#line 1883 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 296:
-#line 1904 "compilers/imcc/imcc.y"
+  case 293:
+#line 1888 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 297:
-#line 1908 "compilers/imcc/imcc.y"
+  case 294:
+#line 1892 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 298:
-#line 1912 "compilers/imcc/imcc.y"
+  case 295:
+#line 1896 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 299:
-#line 1919 "compilers/imcc/imcc.y"
+  case 296:
+#line 1903 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 300:
-#line 1923 "compilers/imcc/imcc.y"
+  case 297:
+#line 1907 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 301:
-#line 1927 "compilers/imcc/imcc.y"
+  case 298:
+#line 1911 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 302:
-#line 1933 "compilers/imcc/imcc.y"
+  case 299:
+#line 1917 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 303:
-#line 1934 "compilers/imcc/imcc.y"
+  case 300:
+#line 1918 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 304:
-#line 1938 "compilers/imcc/imcc.y"
+  case 301:
+#line 1922 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
-  case 305:
-#line 1939 "compilers/imcc/imcc.y"
+  case 302:
+#line 1923 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
-  case 306:
-#line 1940 "compilers/imcc/imcc.y"
+  case 303:
+#line 1924 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
-  case 307:
-#line 1941 "compilers/imcc/imcc.y"
+  case 304:
+#line 1925 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
-  case 308:
-#line 1942 "compilers/imcc/imcc.y"
+  case 305:
+#line 1926 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
-  case 309:
-#line 1943 "compilers/imcc/imcc.y"
+  case 306:
+#line 1927 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
-  case 312:
-#line 1952 "compilers/imcc/imcc.y"
+  case 309:
+#line 1936 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 313:
-#line 1953 "compilers/imcc/imcc.y"
+  case 310:
+#line 1937 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 314:
-#line 1957 "compilers/imcc/imcc.y"
+  case 311:
+#line 1941 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
-  case 316:
-#line 1962 "compilers/imcc/imcc.y"
+  case 313:
+#line 1946 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 317:
-#line 1964 "compilers/imcc/imcc.y"
+  case 314:
+#line 1948 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -4746,54 +4709,54 @@
          }
     break;
 
-  case 318:
-#line 1971 "compilers/imcc/imcc.y"
+  case 315:
+#line 1955 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
          }
     break;
 
-  case 320:
-#line 1978 "compilers/imcc/imcc.y"
+  case 317:
+#line 1962 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 321:
-#line 1979 "compilers/imcc/imcc.y"
+  case 318:
+#line 1963 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 322:
-#line 1983 "compilers/imcc/imcc.y"
+  case 319:
+#line 1967 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 323:
-#line 1984 "compilers/imcc/imcc.y"
+  case 320:
+#line 1968 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 324:
-#line 1988 "compilers/imcc/imcc.y"
+  case 321:
+#line 1972 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 325:
-#line 1989 "compilers/imcc/imcc.y"
+  case 322:
+#line 1973 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 330:
-#line 2003 "compilers/imcc/imcc.y"
+  case 327:
+#line 1987 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 331:
-#line 2008 "compilers/imcc/imcc.y"
+  case 328:
+#line 1992 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -4801,16 +4764,16 @@
          }
     break;
 
-  case 332:
-#line 2016 "compilers/imcc/imcc.y"
+  case 329:
+#line 2000 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 333:
-#line 2021 "compilers/imcc/imcc.y"
+  case 330:
+#line 2005 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -4818,34 +4781,34 @@
          }
     break;
 
-  case 334:
-#line 2029 "compilers/imcc/imcc.y"
+  case 331:
+#line 2013 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 335:
-#line 2031 "compilers/imcc/imcc.y"
+  case 332:
+#line 2015 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 336:
-#line 2035 "compilers/imcc/imcc.y"
+  case 333:
+#line 2019 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->in_slice = 1; }
     break;
 
-  case 337:
-#line 2037 "compilers/imcc/imcc.y"
+  case 334:
+#line 2021 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(4) - (4)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 338:
-#line 2045 "compilers/imcc/imcc.y"
+  case 335:
+#line 2029 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->in_slice)
                (yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
@@ -4853,8 +4816,8 @@
          }
     break;
 
-  case 339:
-#line 2051 "compilers/imcc/imcc.y"
+  case 336:
+#line 2035 "compilers/imcc/imcc.y"
     {
            (yyvsp[(1) - (3)].sr)->type |= VT_START_SLICE;
            (yyvsp[(3) - (3)].sr)->type |= VT_END_SLICE;
@@ -4863,74 +4826,64 @@
          }
     break;
 
-  case 340:
-#line 2057 "compilers/imcc/imcc.y"
+  case 337:
+#line 2041 "compilers/imcc/imcc.y"
     { (yyvsp[(2) - (2)].sr)->type |= VT_START_ZERO | VT_END_SLICE; (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
-  case 341:
-#line 2058 "compilers/imcc/imcc.y"
+  case 338:
+#line 2042 "compilers/imcc/imcc.y"
     { (yyvsp[(1) - (2)].sr)->type |= VT_START_SLICE | VT_END_INF; (yyval.sr) = (yyvsp[(1) - (2)].sr); }
     break;
 
-  case 342:
-#line 2062 "compilers/imcc/imcc.y"
+  case 339:
+#line 2046 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
-  case 343:
-#line 2063 "compilers/imcc/imcc.y"
+  case 340:
+#line 2047 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
-  case 344:
-#line 2064 "compilers/imcc/imcc.y"
+  case 341:
+#line 2048 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
-  case 345:
-#line 2065 "compilers/imcc/imcc.y"
+  case 342:
+#line 2049 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
-  case 346:
-#line 2066 "compilers/imcc/imcc.y"
+  case 343:
+#line 2050 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 347:
-#line 2070 "compilers/imcc/imcc.y"
+  case 344:
+#line 2054 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 348:
-#line 2071 "compilers/imcc/imcc.y"
+  case 345:
+#line 2055 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 349:
-#line 2072 "compilers/imcc/imcc.y"
+  case 346:
+#line 2056 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 350:
-#line 2073 "compilers/imcc/imcc.y"
+  case 347:
+#line 2057 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 351:
-#line 2077 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
-    break;
-
-  case 352:
-#line 2078 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S');  mem_sys_free((yyvsp[(1) - (1)].s)); }
-    break;
-
 
 /* Line 1267 of yacc.c.  */
-#line 4923 "compilers/imcc/imcparser.c"
+#line 4876 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5144,7 +5097,7 @@
 }
 
 
-#line 2083 "compilers/imcc/imcc.y"
+#line 2067 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: branches/calling_conventions/compilers/imcc/imcparser.h
==============================================================================
--- branches/calling_conventions/compilers/imcc/imcparser.h	(original)
+++ branches/calling_conventions/compilers/imcc/imcparser.h	Sun Dec  7 22:37:43 2008
@@ -108,67 +108,66 @@
      RELOP_GTE = 313,
      RELOP_LT = 314,
      RELOP_LTE = 315,
-     GLOBALOP = 316,
-     RESULT = 317,
-     RETURN = 318,
-     TAILCALL = 319,
-     YIELDT = 320,
-     GET_RESULTS = 321,
-     POW = 322,
-     SHIFT_RIGHT_U = 323,
-     LOG_AND = 324,
-     LOG_OR = 325,
-     COMMA = 326,
-     ESUB = 327,
-     DOTDOT = 328,
-     PCC_BEGIN = 329,
-     PCC_END = 330,
-     PCC_CALL = 331,
-     PCC_SUB = 332,
-     PCC_BEGIN_RETURN = 333,
-     PCC_END_RETURN = 334,
-     PCC_BEGIN_YIELD = 335,
-     PCC_END_YIELD = 336,
-     NCI_CALL = 337,
-     METH_CALL = 338,
-     INVOCANT = 339,
-     MAIN = 340,
-     LOAD = 341,
-     INIT = 342,
-     IMMEDIATE = 343,
-     POSTCOMP = 344,
-     METHOD = 345,
-     ANON = 346,
-     OUTER = 347,
-     NEED_LEX = 348,
-     MULTI = 349,
-     VTABLE_METHOD = 350,
-     LOADLIB = 351,
-     SUB_INSTANCE_OF = 352,
-     SUBID = 353,
-     NS_ENTRY = 354,
-     UNIQUE_REG = 355,
-     LABEL = 356,
-     EMIT = 357,
-     EOM = 358,
-     IREG = 359,
-     NREG = 360,
-     SREG = 361,
-     PREG = 362,
-     IDENTIFIER = 363,
-     REG = 364,
-     MACRO = 365,
-     ENDM = 366,
-     STRINGC = 367,
-     INTC = 368,
-     FLOATC = 369,
-     USTRINGC = 370,
-     PARROT_OP = 371,
-     VAR = 372,
-     LINECOMMENT = 373,
-     FILECOMMENT = 374,
-     DOT = 375,
-     CONCAT = 376
+     RESULT = 316,
+     RETURN = 317,
+     TAILCALL = 318,
+     YIELDT = 319,
+     GET_RESULTS = 320,
+     POW = 321,
+     SHIFT_RIGHT_U = 322,
+     LOG_AND = 323,
+     LOG_OR = 324,
+     COMMA = 325,
+     ESUB = 326,
+     DOTDOT = 327,
+     PCC_BEGIN = 328,
+     PCC_END = 329,
+     PCC_CALL = 330,
+     PCC_SUB = 331,
+     PCC_BEGIN_RETURN = 332,
+     PCC_END_RETURN = 333,
+     PCC_BEGIN_YIELD = 334,
+     PCC_END_YIELD = 335,
+     NCI_CALL = 336,
+     METH_CALL = 337,
+     INVOCANT = 338,
+     MAIN = 339,
+     LOAD = 340,
+     INIT = 341,
+     IMMEDIATE = 342,
+     POSTCOMP = 343,
+     METHOD = 344,
+     ANON = 345,
+     OUTER = 346,
+     NEED_LEX = 347,
+     MULTI = 348,
+     VTABLE_METHOD = 349,
+     LOADLIB = 350,
+     SUB_INSTANCE_OF = 351,
+     SUBID = 352,
+     NS_ENTRY = 353,
+     UNIQUE_REG = 354,
+     LABEL = 355,
+     EMIT = 356,
+     EOM = 357,
+     IREG = 358,
+     NREG = 359,
+     SREG = 360,
+     PREG = 361,
+     IDENTIFIER = 362,
+     REG = 363,
+     MACRO = 364,
+     ENDM = 365,
+     STRINGC = 366,
+     INTC = 367,
+     FLOATC = 368,
+     USTRINGC = 369,
+     PARROT_OP = 370,
+     VAR = 371,
+     LINECOMMENT = 372,
+     FILECOMMENT = 373,
+     DOT = 374,
+     CONCAT = 375
    };
 #endif
 /* Tokens.  */
@@ -230,67 +229,66 @@
 #define RELOP_GTE 313
 #define RELOP_LT 314
 #define RELOP_LTE 315
-#define GLOBALOP 316
-#define RESULT 317
-#define RETURN 318
-#define TAILCALL 319
-#define YIELDT 320
-#define GET_RESULTS 321
-#define POW 322
-#define SHIFT_RIGHT_U 323
-#define LOG_AND 324
-#define LOG_OR 325
-#define COMMA 326
-#define ESUB 327
-#define DOTDOT 328
-#define PCC_BEGIN 329
-#define PCC_END 330
-#define PCC_CALL 331
-#define PCC_SUB 332
-#define PCC_BEGIN_RETURN 333
-#define PCC_END_RETURN 334
-#define PCC_BEGIN_YIELD 335
-#define PCC_END_YIELD 336
-#define NCI_CALL 337
-#define METH_CALL 338
-#define INVOCANT 339
-#define MAIN 340
-#define LOAD 341
-#define INIT 342
-#define IMMEDIATE 343
-#define POSTCOMP 344
-#define METHOD 345
-#define ANON 346
-#define OUTER 347
-#define NEED_LEX 348
-#define MULTI 349
-#define VTABLE_METHOD 350
-#define LOADLIB 351
-#define SUB_INSTANCE_OF 352
-#define SUBID 353
-#define NS_ENTRY 354
-#define UNIQUE_REG 355
-#define LABEL 356
-#define EMIT 357
-#define EOM 358
-#define IREG 359
-#define NREG 360
-#define SREG 361
-#define PREG 362
-#define IDENTIFIER 363
-#define REG 364
-#define MACRO 365
-#define ENDM 366
-#define STRINGC 367
-#define INTC 368
-#define FLOATC 369
-#define USTRINGC 370
-#define PARROT_OP 371
-#define VAR 372
-#define LINECOMMENT 373
-#define FILECOMMENT 374
-#define DOT 375
-#define CONCAT 376
+#define RESULT 316
+#define RETURN 317
+#define TAILCALL 318
+#define YIELDT 319
+#define GET_RESULTS 320
+#define POW 321
+#define SHIFT_RIGHT_U 322
+#define LOG_AND 323
+#define LOG_OR 324
+#define COMMA 325
+#define ESUB 326
+#define DOTDOT 327
+#define PCC_BEGIN 328
+#define PCC_END 329
+#define PCC_CALL 330
+#define PCC_SUB 331
+#define PCC_BEGIN_RETURN 332
+#define PCC_END_RETURN 333
+#define PCC_BEGIN_YIELD 334
+#define PCC_END_YIELD 335
+#define NCI_CALL 336
+#define METH_CALL 337
+#define INVOCANT 338
+#define MAIN 339
+#define LOAD 340
+#define INIT 341
+#define IMMEDIATE 342
+#define POSTCOMP 343
+#define METHOD 344
+#define ANON 345
+#define OUTER 346
+#define NEED_LEX 347
+#define MULTI 348
+#define VTABLE_METHOD 349
+#define LOADLIB 350
+#define SUB_INSTANCE_OF 351
+#define SUBID 352
+#define NS_ENTRY 353
+#define UNIQUE_REG 354
+#define LABEL 355
+#define EMIT 356
+#define EOM 357
+#define IREG 358
+#define NREG 359
+#define SREG 360
+#define PREG 361
+#define IDENTIFIER 362
+#define REG 363
+#define MACRO 364
+#define ENDM 365
+#define STRINGC 366
+#define INTC 367
+#define FLOATC 368
+#define USTRINGC 369
+#define PARROT_OP 370
+#define VAR 371
+#define LINECOMMENT 372
+#define FILECOMMENT 373
+#define DOT 374
+#define CONCAT 375
 
 
 
@@ -306,7 +304,7 @@
     Instruction *i;
 }
 /* Line 1489 of yacc.c.  */
-#line 299 "compilers/imcc/imcparser.h"
+#line 297 "compilers/imcc/imcparser.h"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1

Modified: branches/calling_conventions/compilers/imcc/parser_util.c
==============================================================================
--- branches/calling_conventions/compilers/imcc/parser_util.c	(original)
+++ branches/calling_conventions/compilers/imcc/parser_util.c	Sun Dec  7 22:37:43 2008
@@ -65,6 +65,10 @@
         __attribute__nonnull__(3)
         FUNC_MODIFIES(*error_message);
 
+static void imcc_destroy_macro_values(ARGMOD(void *value))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*value);
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static const char * try_rev_cmp(ARGIN(const char *name), ARGMOD(SymReg **r))
@@ -88,10 +92,6 @@
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*r);
 
-static void imcc_destroy_macro_values(ARGIN(void *value))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*value);
-
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -1485,7 +1485,7 @@
 */
 
 static void
-imcc_destroy_macro_values(void *value)
+imcc_destroy_macro_values(ARGMOD(void *value))
 {
     macro_t *m = (macro_t *)value;
     int      i;

Modified: branches/calling_conventions/compilers/imcc/pbc.c
==============================================================================
--- branches/calling_conventions/compilers/imcc/pbc.c	(original)
+++ branches/calling_conventions/compilers/imcc/pbc.c	Sun Dec  7 22:37:43 2008
@@ -81,11 +81,13 @@
 static int add_const_table(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-static int add_const_table_key(PARROT_INTERP, PMC *key)
-        __attribute__nonnull__(1);
+static int add_const_table_key(PARROT_INTERP, ARGIN(PMC *key))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
-static int add_const_table_pmc(PARROT_INTERP, PMC *pmc)
-        __attribute__nonnull__(1);
+static int add_const_table_pmc(PARROT_INTERP, ARGIN(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
 static opcode_t build_key(PARROT_INTERP, ARGIN(SymReg *key_reg))
         __attribute__nonnull__(1)
@@ -284,7 +286,7 @@
 */
 
 static int
-add_const_table_pmc(PARROT_INTERP, PMC *pmc)
+add_const_table_pmc(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     int newitem = add_const_table(interp);
 
@@ -306,7 +308,7 @@
 */
 
 static int
-add_const_table_key(PARROT_INTERP, PMC *key)
+add_const_table_key(PARROT_INTERP, ARGIN(PMC *key))
 {
     int newitem = add_const_table(interp);
 

Modified: branches/calling_conventions/compilers/imcc/pbc.h
==============================================================================
--- branches/calling_conventions/compilers/imcc/pbc.h	(original)
+++ branches/calling_conventions/compilers/imcc/pbc.h	Sun Dec  7 22:37:43 2008
@@ -37,13 +37,13 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-STRING * IMCC_string_from_reg(PARROT_INTERP, ARGIN(const SymReg *r))
+STRING * IMCC_string_from__STRINGC(PARROT_INTERP, ARGIN(const char *buf))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-STRING * IMCC_string_from__STRINGC(PARROT_INTERP, ARGIN(const char *buf))
+STRING * IMCC_string_from_reg(PARROT_INTERP, ARGIN(const SymReg *r))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 

Modified: branches/calling_conventions/compilers/imcc/symreg.c
==============================================================================
--- branches/calling_conventions/compilers/imcc/symreg.c	(original)
+++ branches/calling_conventions/compilers/imcc/symreg.c	Sun Dec  7 22:37:43 2008
@@ -71,7 +71,9 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static int int_overflows(const SymReg *r);
+static int int_overflows(ARGIN(const SymReg *r))
+        __attribute__nonnull__(1);
+
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static SymReg * mk_pmc_const_2(PARROT_INTERP,
@@ -735,7 +737,7 @@
 }
 
 static int
-int_overflows(const SymReg *r)
+int_overflows(ARGIN(const SymReg *r))
 {
     INTVAL i;
     errno = 0;

Modified: branches/calling_conventions/compilers/ncigen/NCIGENP6.pm
==============================================================================
--- branches/calling_conventions/compilers/ncigen/NCIGENP6.pm	(original)
+++ branches/calling_conventions/compilers/ncigen/NCIGENP6.pm	Sun Dec  7 22:37:43 2008
@@ -38,7 +38,7 @@
         $fmt ~= "\$P1 = null\ngoto has_lib\n";
     }
 
-    $fmt ~= 
+    $fmt ~=
         qq{{\$P2 = new 'Exception'
 \$P2[0] = 'error loading $libname - loadlib failed'
 throw \$P2
@@ -68,7 +68,7 @@
 =end
 
 #multi sub pir(NCIGENAST::TypeDef $node) { return ""; }
-#multi sub pir(NCIGENAST::VarDecl $node) { return ""; } 
+#multi sub pir(NCIGENAST::VarDecl $node) { return ""; }
 multi sub pir(NCIGENAST::FuncDecl $node) {
 ## return type
     my $type = param_to_code($node, 1);
@@ -93,13 +93,13 @@
         given $pt {
           when 'void' {
             if ($returncode) { return "p"; } #probably should be "V"
-            else { return "p"; } 
+            else { return "p"; }
           }
           when 'int'    { return "V"; }
           when 'long'   { return "V"; }
           when 'char'   { return "t"; }
           when 'short'  { return "V"; }
-          default { 
+          default {
 =begin
             say "ERROR";
             say $node.perl;
@@ -136,6 +136,6 @@
 #   mode: pir
 #   fill-column: 100
 # End:
-# vim: expandtab ft=perl6 shiftwidth=2 
+# vim: expandtab ft=perl6 shiftwidth=2
 
 

Modified: branches/calling_conventions/compilers/ncigen/README
==============================================================================
--- branches/calling_conventions/compilers/ncigen/README	(original)
+++ branches/calling_conventions/compilers/ncigen/README	Sun Dec  7 22:37:43 2008
@@ -1,5 +1,7 @@
 ./nci_gen.pl is currently written to run on Linux, feel free to add portability if you wish
 
+./nci_gen.pl also requires the perl module IPC::Run3
+
 EXAMPLES:
 perl ./nci_gen.pl postgres/spi.h              - PARSE SUCCESSFUL
 perl ./nci_gen.pl /usr/include/sqlite3.h      - PARSE SUCCESSFUL

Modified: branches/calling_conventions/compilers/ncigen/gen_sqlite3.pl
==============================================================================
--- branches/calling_conventions/compilers/ncigen/gen_sqlite3.pl	(original)
+++ branches/calling_conventions/compilers/ncigen/gen_sqlite3.pl	Sun Dec  7 22:37:43 2008
@@ -1,6 +1,6 @@
 #!/home/tewk/srcs/parrot/perl6
 
-# $Id: sqlite_interface_generator.pl 33506 2008-12-05 12:39:55Z tewk $
+# $Id$
 # Copyright (C) 2008, The Perl Foundation.
 
 use v6;
@@ -23,7 +23,7 @@
         my $suffix_name .= subst( /sqlite3_/, '' );
 
         my $pirname = %rename_table{$suffix_name} || $suffix_name;
-        
+
         say format_func_decl($pirname, |@result);
     }
 }

Modified: branches/calling_conventions/compilers/ncigen/k.h
==============================================================================
--- branches/calling_conventions/compilers/ncigen/k.h	(original)
+++ branches/calling_conventions/compilers/ncigen/k.h	Sun Dec  7 22:37:43 2008
@@ -1,3 +1,9 @@
+/* $Id$ *
+ * Copyright (C) 2008 The Perl Foundation
+ */
+#ifndef PARROT_COMPILERS_NCIGEN_K_GUARD
+#define PARROT_COMPILERS_NCIGEN_K_GUARD
+
 extern const char sqlite3_version[];
 const char *sqlite3_libversion(void);
 int sqlite3_libversion_number(void);
@@ -8,8 +14,8 @@
 typedef sqlite_int64 sqlite3_int64;
 typedef sqlite_uint64 sqlite3_uint64;
 int sqlite3_close(sqlite3 *);
-typedef int (*sqlite3_callback)(void*,int,char**, char**);
-int sqlite3_exec( sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg);
+typedef int (*sqlite3_callback)(void*, int, char**, char**);
+int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*, int, char**, char**), void *, char **errmsg);
 typedef struct sqlite3_mutex sqlite3_mutex;
 int sqlite3_extended_result_codes(sqlite3*, int onoff);
 sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
@@ -18,9 +24,9 @@
 void sqlite3_interrupt(sqlite3*);
 int sqlite3_complete(const char *sql);
 int sqlite3_complete16(const void *sql);
-int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
+int sqlite3_busy_handler(sqlite3*, int (*)(void*, int), void*);
 int sqlite3_busy_timeout(sqlite3*, int ms);
-int sqlite3_get_table( sqlite3*, const char *sql, char ***pResult, int *nrow, int *ncolumn, char **errmsg);
+int sqlite3_get_table(sqlite3*, const char *sql, char ***pResult, int *nrow, int *ncolumn, char **errmsg);
 void sqlite3_free_table(char **result);
 char *sqlite3_vmprintf(const char*, va_list);
 void *sqlite3_malloc(int);
@@ -29,19 +35,28 @@
 sqlite3_int64 sqlite3_memory_used(void);
 sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
 void sqlite3_randomness(int N, void *P);
-int sqlite3_set_authorizer( sqlite3*, int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), void *pUserData);
-void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
-void *sqlite3_profile(sqlite3*, void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
-void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
-int sqlite3_open( const char *filename, sqlite3 **ppDb);
-int sqlite3_open16( const void *filename, sqlite3 **ppDb);
-int sqlite3_open_v2( const char *filename, sqlite3 **ppDb, int flags, const char *zVfs);
+int sqlite3_set_authorizer(sqlite3*, int (*xAuth)(void*, int, const char*, const char*, const char*, const char*), void *pUserData);
+void *sqlite3_trace(sqlite3*, void (*xTrace)(void*, const char*), void*);
+void *sqlite3_profile(sqlite3*, void (*xProfile)(void*, const char*, sqlite3_uint64), void*);
+void sqlite3_progress_handler(sqlite3*, int, int (*)(void*), void*);
+int sqlite3_open(const char *filename, sqlite3 **ppDb);
+int sqlite3_open16(const void *filename, sqlite3 **ppDb);
+int sqlite3_open_v2(const char *filename, sqlite3 **ppDb, int flags, const char *zVfs);
 int sqlite3_errcode(sqlite3 *db);
 const char *sqlite3_errmsg(sqlite3*);
 const void *sqlite3_errmsg16(sqlite3*);
 typedef struct sqlite3_stmt sqlite3_stmt;
 int sqlite3_limit(sqlite3*, int id, int newVal);
-int sqlite3_prepare( sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail);
-int sqlite3_prepare_v2( sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail);
-int sqlite3_prepare16( sqlite3 *db, const void *zSql, int nByte, sqlite3_stmt **ppStmt, const void **pzTail);
-int sqlite3_prepare16_v2( sqlite3 *db, const void *zSql, int nByte, sqlite3_stmt **ppStmt, const void **pzTail);
+int sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail);
+int sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail);
+int sqlite3_prepare16(sqlite3 *db, const void *zSql, int nByte, sqlite3_stmt **ppStmt, const void **pzTail);
+int sqlite3_prepare16_v2(sqlite3 *db, const void *zSql, int nByte, sqlite3_stmt **ppStmt, const void **pzTail);
+
+#endif /* PARROT_COMPILERS_NCIGEN_K_GUARD */
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/calling_conventions/compilers/ncigen/kk.h
==============================================================================
--- branches/calling_conventions/compilers/ncigen/kk.h	(original)
+++ branches/calling_conventions/compilers/ncigen/kk.h	Sun Dec  7 22:37:43 2008
@@ -1,2 +1,17 @@
+/* $Id$ *
+ * Copyright (C) 2008 The Perl Foundation
+ */
+#ifndef PARROT_COMPILERS_NCIGEN_KK_GUARD
+#define PARROT_COMPILERS_NCIGEN_KK_GUARD
+
 int a(int a, int b);
 int b(int a, int b);
+
+#endif /* PARROT_COMPILERS_NCIGEN_KK_GUARD */
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/calling_conventions/compilers/pct/src/PAST/Compiler.pir
==============================================================================
--- branches/calling_conventions/compilers/pct/src/PAST/Compiler.pir	(original)
+++ branches/calling_conventions/compilers/pct/src/PAST/Compiler.pir	Sun Dec  7 22:37:43 2008
@@ -92,6 +92,16 @@
     valflags['Float']    = 'n+*:'
     set_global '%valflags', valflags
 
+    ##  %!controltypes holds the list of exception types for each
+    ##  type of exception handler we support
+    .local pmc controltypes
+    controltypes = new 'Hash'
+    $P0 = split ' ', '.CONTROL_RETURN .CONTROL_OK .CONTROL_BREAK .CONTROL_CONTINUE .CONTROL_ERROR .CONTROL_TAKE .CONTROL_LOOP_NEXT .CONTROL_LOOP_LAST .CONTROL_LOOP_REDO'
+    controltypes['CONTROL']   = $P0
+    $P0 = split ' ', '.CONTROL_TAKE'
+    controltypes['GATHER']   = $P0
+    set_global '%!controltypes', controltypes
+
     $P0 = new 'CodeString'
     set_global '%!codestring', $P0
 
@@ -556,6 +566,124 @@
     ops = self.'post_children'(node, 'signature'=>$S0)
     $P0 = ops[-1]
     ops.'result'($P0)
+    .local pmc eh, iter
+    eh = node.'handlers'()
+    unless eh, no_eh
+    ops = self.'wrap_handlers'(ops,eh,'rtype'=>rtype)
+  no_eh:
+    .return (ops)
+.end
+
+=head3 C<PAST::Control>
+
+=over 4
+
+=item as_post(PAST::Control node)
+
+Return the POST representation of a C<PAST::Control>.
+
+=cut
+
+.sub 'as_post' :method :multi(_, ['PAST';'Control'])
+    .param pmc node
+    .param pmc options         :slurpy :named
+
+    .local pmc ops, children, ishandled, nothandled
+    .local string handled
+    $P0 = get_hll_global ['POST'], 'Label'
+    $S0 = self.'unique'('handled_')
+    ishandled = $P0.'new'('result'=>$S0)
+    $S0 = self.'unique'('nothandled_')
+    nothandled = $P0.'new'('result'=>$S0)
+    $P0 = get_hll_global ['POST'], 'Ops'
+    ops = $P0.'new'('node'=>node)
+    .local string rtype
+    rtype = options['rtype']
+    $P0 = node.'list'()
+    $I0 = elements $P0
+    $S0 = repeat 'v', $I0
+    concat $S0, rtype
+    ops.'push_pirop'('.local pmc exception')
+    ops.'push_pirop'('.get_results (exception)')
+    children = self.'post_children'(node, 'signature'=>$S0)
+    ops.'push'(children)
+    handled = self.'uniquereg'('I')
+    ops.'push_pirop'('set', handled, 'exception["handled"]')
+    ops.'push_pirop'('ne', handled, 1, nothandled)
+    ops.'push'(ishandled)
+    ops.'push_pirop'('return', 'exception')
+    ops.'push'(nothandled)
+    ops.'push_pirop'('rethrow', 'exception')
+    .return (ops)
+.end
+
+.sub 'wrap_handlers' :method
+    .param pmc child
+    .param pmc ehs
+    .param pmc options         :slurpy :named
+
+    .local string rtype
+    rtype = options['rtype']
+
+    .local pmc iter, node, ops, pops, tail, skip
+    $P0 = get_hll_global ['POST'], 'Ops'
+    ops = $P0.'new'('node'=>node)
+    $P0 = get_hll_global ['POST'], 'Ops'
+    pops = $P0.'new'('node'=>node)
+    $P0 = get_hll_global ['POST'], 'Ops'
+    tail = $P0.'new'('node'=>node)
+    $P0 = get_hll_global ['POST'], 'Label'
+    $S0 = self.'unique'('skip_handler_')
+    skip = $P0.'new'('result'=>$S0)
+
+    iter = new 'Iterator', ehs
+  handler_loop:
+    unless iter, handler_loop_done
+    node = shift iter
+
+    .local pmc ehpir, types, label
+    .local string ehreg, type
+    $P0 = get_hll_global ['POST'], 'Label'
+    $S0 = self.'unique'('control_')
+    label = $P0.'new'('result'=>$S0)
+
+    ehreg = self.'uniquereg'('P')
+    ops.'push_pirop'('new', ehreg, "'ExceptionHandler'")
+    ops.'push_pirop'('set_addr', ehreg, label)
+    $P0 = get_global '%!controltypes'
+    type = node.'handle_types'()
+    unless type, no_handle_types
+    types = $P0[type]
+    unless type, no_handle_types
+    ops.'push_pirop'('callmethod', '"handle_types"', ehreg, types :flat)
+  no_handle_types:
+    type = node.'handle_types_except'()
+    unless type, no_handle_types_except
+    types = $P0[type]
+    unless type, no_handle_types_except
+    ops.'push_pirop'('callmethod', '"handle_types_except"', ehreg, types :flat)
+  no_handle_types_except:
+    ops.'push_pirop'('push_eh', ehreg)
+
+    # Add one pop_eh for every handler we push_eh
+    pops.'push_pirop'('pop_eh')
+
+    # Push the handler itself
+    tail.'push'(label)
+    ehpir = self.'as_post'(node, 'rtype'=>rtype)
+    tail.'push'(ehpir)
+
+    goto handler_loop
+  handler_loop_done:
+
+    ops.'push'(child)
+
+
+    ops.'push'(pops)
+    ops.'push_pirop'('goto', skip)
+    ops.'push'(tail)
+    ops.'push'(skip)
+
     .return (ops)
 .end
 

Modified: branches/calling_conventions/compilers/pct/src/PAST/Node.pir
==============================================================================
--- branches/calling_conventions/compilers/pct/src/PAST/Node.pir	(original)
+++ branches/calling_conventions/compilers/pct/src/PAST/Node.pir	Sun Dec  7 22:37:43 2008
@@ -22,6 +22,7 @@
     p6meta.'new_class'('PAST::Val', 'parent'=>base)
     p6meta.'new_class'('PAST::Var', 'parent'=>base)
     p6meta.'new_class'('PAST::Block', 'parent'=>base)
+    p6meta.'new_class'('PAST::Control', 'parent'=>base)
     p6meta.'new_class'('PAST::VarList', 'parent'=>base)
 
     .return ()
@@ -101,6 +102,12 @@
     .tailcall self.'attr'('flat', value, has_value)
 .end
 
+.sub 'handlers' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('handle_types', value, has_value)
+.end
+
 
 =back
 
@@ -639,6 +646,21 @@
 .end
 
 
+.namespace [ 'PAST';'Control' ]
+
+.sub 'handle_types' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('handle_types', value, has_value)
+.end
+
+.sub 'handle_types_except' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('handle_types_except', value, has_value)
+.end
+
+
 .namespace [ 'PAST';'VarList' ]
 
 .sub 'bindvalue' :method

Modified: branches/calling_conventions/compilers/pct/src/PCT/Node.pir
==============================================================================
--- branches/calling_conventions/compilers/pct/src/PCT/Node.pir	(original)
+++ branches/calling_conventions/compilers/pct/src/PCT/Node.pir	Sun Dec  7 22:37:43 2008
@@ -13,14 +13,9 @@
 
 .sub 'onload' :anon :load :init
     ##   create the PCT::Node base class
-    ##   FIXME: Eventually we want this to be a subclass of
-    ##   Capture, but as of now Capture isn't working so we
-    ##   use the Capture_PIR class for now.
-    load_bytecode 'Parrot/Capture_PIR.pbc'
-
     .local pmc p6meta
     p6meta = new 'P6metaclass'
-    p6meta.'new_class'('PCT::Node', 'parent'=>'Capture_PIR')
+    p6meta.'new_class'('PCT::Node', 'parent'=>'Capture')
 
     $P0 = box 10
     set_hll_global ['PCT';'Node'], '$!serno', $P0
@@ -222,19 +217,9 @@
 
 .sub 'node' :method
     .param pmc node
-    $I0 = isa node, ['PAST';'Node']
-    if $I0 goto clone_past
-  clone_pge:
-    $S0 = node
-    $I0 = node.'from'()
-    self['source'] = $S0
-    self['pos'] = $I0
-    .return ()
-  clone_past:
-    $P0 = node['source']
-    $P1 = node['pos']
-    self['source'] = $P0
-    self['pos'] = $P1
+     ## Do nothing for now.  When we're in a better position to
+     ## handle source line information (RT #43269 and others)
+     ## we'll figure out what to do here.
     .return ()
 .end
 
@@ -319,6 +304,17 @@
 .end
 
 
+=item VTABLE get_bool()
+
+Return true since the node is defined.
+
+=cut
+
+.sub '' :vtable('get_bool') :method
+    .return (1)
+.end
+
+
 =back
 
 =head1 AUTHOR

Modified: branches/calling_conventions/compilers/pge/PGE/Match.pir
==============================================================================
--- branches/calling_conventions/compilers/pge/PGE/Match.pir	(original)
+++ branches/calling_conventions/compilers/pge/PGE/Match.pir	Sun Dec  7 22:37:43 2008
@@ -12,11 +12,10 @@
 
 .sub '' :load
     load_bytecode 'P6object.pbc'
-    load_bytecode 'Parrot/Capture_PIR.pbc'
     load_bytecode 'PGE/Dumper.pir'                 # FIXME, XXX, etc.
     .local pmc p6meta
     p6meta = new 'P6metaclass'
-    p6meta.'new_class'('PGE::Match', 'parent'=>'Capture_PIR', 'attr'=>'$.target $.from $.pos &!corou')
+    p6meta.'new_class'('PGE::Match', 'parent'=>'Capture', 'attr'=>'$.target $.from $.pos &!corou $!item')
     .return ()
 .end
 
@@ -311,16 +310,8 @@
     null $P0
     setattribute self, '$.target', $P0
     setattribute self, '&!corou', $P0
-    setattribute self, '@!list', $P0
     setattribute self, '$!item', $P0
-    .local pmc iter
-    iter = new 'Iterator', self
-  iter_loop:
-    unless iter goto iter_end
-    $S0 = shift iter
-    delete self[$S0]
-    goto iter_loop
-  iter_end:
+    setref self, $P0
     .return ()
 .end
 

Modified: branches/calling_conventions/compilers/pge/PGE/OPTable.pir
==============================================================================
--- branches/calling_conventions/compilers/pge/PGE/OPTable.pir	(original)
+++ branches/calling_conventions/compilers/pge/PGE/OPTable.pir	Sun Dec  7 22:37:43 2008
@@ -112,9 +112,9 @@
     $P0 = new 'Iterator', args
   args_loop:
     unless $P0 goto args_end
-    $P1 = shift $P0
-    $P2 = $P0[$P1]
-    token[$P1] = $P2
+    $S1 = shift $P0
+    $P2 = $P0[$S1]
+    token[$S1] = $P2
     goto args_loop
   args_end:
 

Modified: branches/calling_conventions/compilers/pirc/README.pod
==============================================================================
--- branches/calling_conventions/compilers/pirc/README.pod	(original)
+++ branches/calling_conventions/compilers/pirc/README.pod	Sun Dec  7 22:37:43 2008
@@ -28,19 +28,9 @@
 
 =head3 Windows using Microsoft Visual Studio
 
-The Makefile doesn't work perfectly; compilation is fine, but linking doesn't work,
-so that needs to be done manually.
+To compile PIRC on windows using MSVC:
 
-To compile:
-
- cd compilers\pirc
- nmake pirc
-
-To link:
-
- link /out:pirc.exe /nodefaultlib main.obj pircompunit.obj pirlexer.obj pirparser.obj \
-   pirsymbol.obj pircompiler.obj pirmacro.obj hdocprep.obj \
-   kernel32.lib msvcrt.lib ..\..\libparrot.lib
+   nmake
 
 When running PIRC, it needs the shared library C<libparrot>; an easy way to do
 this is copy C<libparrot.dll> in the Parrot root directory to C<compilers/pirc/new>.
@@ -300,12 +290,9 @@
 is assigned a unique PASM register, that is associated with the original symbol
 or PIR register throughout the subroutine.
 
-Any further optimizations on register usage can be implemented by writing a
-register allocator that takes this initial register allocation as input, and
-generating a more optimized register usage. Research and benchmarking is needed
-to decide whether this yields more efficient bytecode. In the end it is a choice
-between compile-time overhead (register allocation) or runtime memory overhead
-(more register space needed per sub).
+PIRC has a register optimizer, which can optimize the register usage. Run PIRC
+with the C<-r> option to activate this. The register optimizer is implemented
+using a Linear Scan Register allocator.
 
 The implementation of the vanilla register allocator is done in the PIR symbol
 management module (C<pirsymbol.c>).
@@ -326,7 +313,9 @@
 
 =item doc - contains documentation.
 
-=item heredoc - contains the implementation of the heredoc preprocessor
+=item heredoc - contains the implementation of the heredoc preprocessor. This is now
+integrated with pirc/new. It now only has a driver program to build a stand-alone
+heredoc preprocessor.
 
 =item new - contains the Bison/Flex implementation of PIRC
 
@@ -340,6 +329,32 @@
 
 =back
 
+=head1 MAKING CHANGES
+
+If you want to make changes to the lexer of parser files, you will need the Flex
+and/or Bison programs. There are ports available for Windows, but I don't know
+whether they're any good. I use Cygwin's tools.
+
+=head2 Updating the lexer
+
+The heredoc preprocessor is implemented in C<hdocprep.l>, and can be regenerated
+using:
+
+   cd compilers/pirc/new
+   flex hdocprep.l
+
+PIRC's normal lexer is implemented in C<pir.l>, and can be regenerated using:
+
+   cd compilers/pirc/new
+   flex pir.l
+
+=head2 Updating the parser
+
+The parser is implemented in C<pir.y>, and can be regenerated using:
+
+   cd compilers/pirc/new
+   bison pir.y
+
 =head1 NOTES
 
 
@@ -379,11 +394,6 @@
 
 =over 4
 
-=item * PIR sub storage
-
-PIR subs are stored as PMC constants in the constant table, but it is not clear
-how exactly this is to be done.
-
 =item * bytecode generation
 
 There must be a proper bytecode API for PIRC to use.
@@ -402,19 +412,6 @@
 
 =item * how are named args/params handled/represented in bytecode?
 
-=item * the Makefile (generated from config/gen/makefiles/pirc.in) must be fixed for Windows.
-
-=back
-
-The following are some ideas for the near future:
-
-=over 4
-
-=item * when parsing is done, we know the total number of instructions (or we can easily count this,
-by incrementing a counter in the instruction constructor). Then we can create an array, and convert
-the linked list of instructions into an array of instructions. This would allow to easily index
-this array and calculate offsets (labels etc.) and such.
-
 =back
 
 

Modified: branches/calling_conventions/compilers/pirc/macro/macro.l
==============================================================================
--- branches/calling_conventions/compilers/pirc/macro/macro.l	(original)
+++ branches/calling_conventions/compilers/pirc/macro/macro.l	Sun Dec  7 22:37:43 2008
@@ -635,6 +635,7 @@
 XXX It might be worthwhile to enter the PIR directives as rules; this saves a lot
 of checking; these rules should just return TK_ANY.
 
+=cut
 
 */
 PARROT_PURE_FUNCTION

Modified: branches/calling_conventions/compilers/pirc/macro/macrolexer.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/macro/macrolexer.c	(original)
+++ branches/calling_conventions/compilers/pirc/macro/macrolexer.c	Sun Dec  7 22:37:43 2008
@@ -3528,6 +3528,7 @@
 XXX It might be worthwhile to enter the PIR directives as rules; this saves a lot
 of checking; these rules should just return TK_ANY.
 
+=cut
 
 */
 PARROT_PURE_FUNCTION

Modified: branches/calling_conventions/compilers/pirc/new/bcgen.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/bcgen.c	(original)
+++ branches/calling_conventions/compilers/pirc/new/bcgen.c	Sun Dec  7 22:37:43 2008
@@ -7,35 +7,38 @@
 #include "parrot/parrot.h"
 #include "parrot/embed.h"
 
-#include "bcgen.h"
+#include "bcgen.h" /* XXX future maybe parrot/bcgen.h */
 
 
-/* private bits of the bytecode generator */
+/*
+
+=head1 DESCRIPTION
 
+This file implements an API for generating bytecode. All gory details
+are hidden. In order to improve modularity, all bytecode generating
+functions take a C<bytecode> struct parameter, which keeps track of
+the I<state>; this includes a Parrot interpreter.
 
-typedef struct bc_const {
-    int                index; /* index into constant table */
-    PackFile_Constant *value;
-    struct bc_const   *next;  /* linked list */
+Since this state is private, the bytecode struct is declared in this
+C file, not in the header file. It is, however, declared in the header
+file as a struct, so you can use it as a type, but not touch its
+private bits. Everything you need to know should be accessible through
+accessor functions.
 
-} bc_const;
+=cut
 
+*/
 
-/* Note that typedef of struct bytecode is already done in the header file */
 
 struct bytecode {
-    int          num_constants;  /* for assigning indices to the constants, also counter. */
-    bc_const    *constants;      /* list of constants */
     PackFile    *packfile;       /* the actual packfile */
     opcode_t    *opcursor;       /* for writing ops into the code segment */
     Interp      *interp;         /* parrot interpreter */
-
 };
 
-/*typedef struct bytecode bytecode;
-*/
 
-static bc_const * new_const(bytecode * const bc);
+static int new_const(bytecode * const bc);
+
 
 /*
 
@@ -50,94 +53,135 @@
 
 /*
 
-Create a new constant node in the linked list of constants.
-A pointer to the node is returned.
+=item C<static int
+new_const(bytecode * const bc)>
+
+Add a new constant to the constant table.
+
+XXX This function needs to be cleaned up, as it's not really efficient: constant table
+is resized each time a constant is added.
+
+=cut
 
 */
-static bc_const *
+static int
 new_const(bytecode * const bc) {
-    bc_const *bcc = (bc_const *)mem_sys_allocate(sizeof (bc_const));
-    bcc->value    = PackFile_Constant_new(bc->interp);
-    bcc->index    = bc->num_constants++;
-    bcc->next     = bc->constants;
-    bc->constants = bcc;
-    return bcc;
+    Interp *interp = bc->interp;
+    size_t oldcount;
+    size_t newcount;
+    PackFile_Constant *new_constant;
+
+    oldcount = interp->code->const_table->const_count;
+    newcount = oldcount + 1;
+
+    new_constant = PackFile_Constant_new(interp);
+
+    /* Update the constant count and reallocate */
+    if (interp->code->const_table->constants)
+        interp->code->const_table->constants =
+            mem_realloc_n_typed(interp->code->const_table->constants,
+                newcount, PackFile_Constant *);
+    else
+        interp->code->const_table->constants =
+            mem_allocate_n_typed(newcount, PackFile_Constant *);
+
+    interp->code->const_table->constants[oldcount] = new_constant;
+    interp->code->const_table->const_count         = newcount;
+
+    return oldcount;
 }
 
 /*
 
-Add a PMC constant to the constants list.
+=item C<int
+add_pmc_const(bytecode * const bc, PMC * pmc)>
+
+Add the PMC constant C<pmc> to the constant table. This
+function returns the index in the constant table where C<pmc>
+is stored.
+
+=cut
 
 */
 int
 add_pmc_const(bytecode * const bc, PMC * pmc) {
-    bc_const *bcc     = new_const(bc);
-    bcc->value->type  = PFC_PMC;
-    bcc->value->u.key = pmc;
-    return bcc->index;
+    int index                   = new_const(bc);
+    PackFile_Constant *constant = bc->interp->code->const_table->constants[index];
+    constant->type              = PFC_PMC;
+    constant->u.key             = pmc;
+    return index;
 }
 
 /*
 
-Add a String constant to the constants list.
+=item C<int
+add_string_const(bytecode * const bc, char const * const str)>
+
+Add the string constant C<str> to the constant table. This function
+returns the index in the constant table where C<str> is stored.
+
+XXX what to do with encoding-thingy "ascii"? Probably should be an extra parameter?
+Or should it be a STRING at this point already?
+
+=cut
 
 */
 int
 add_string_const(bytecode * const bc, char const * const str) {
-    bc_const *bcc        = new_const(bc);
-    bcc->value->type     = PFC_STRING;
-    bcc->value->u.string = string_make(bc->interp, str, strlen(str), "ascii", PObj_constant_FLAG);
-    return bcc->index;
+    int                index    = new_const(bc);
+    PackFile_Constant *constant = bc->interp->code->const_table->constants[index];
+
+    constant->type     = PFC_STRING;
+    constant->u.string = string_make(bc->interp, str, strlen(str), "ascii", PObj_constant_FLAG);
+    return index;
 }
 
+
 /*
 
-Add a number constant to the constants list.
+=item c<int
+add_num_const(bytecode * const bc, double f)>
+
+XXX should f be a FLOATVAL?
+
+Add a number constant to the constants list. The index in the constant
+table where C<f> is stored is returned.
+
+=cut
 
 */
 int
 add_num_const(bytecode * const bc, double f) {
-    /* STRING * const str   = string_from_cstring(interp, number_cstring, 0); */
-    bc_const *bcc        = new_const(bc);
-    bcc->value->type     = PFC_NUMBER;
-    /* bcc->value->u.number = string_to_num(interp, str); */
-    bcc->value->u.number = f;
-    return bcc->index;
+    int index                   = new_const(bc);
+    PackFile_Constant *constant = bc->interp->code->const_table->constants[index];
+    constant->type              = PFC_NUMBER;
+    constant->u.number          = f;
+    return index;
 }
 
 /*
 
+=item C<int
+add_key_const(bytecode * const bc, PMC *key)>
+
 Add a key constant to the constants list.
+XXX Implement this.
+
+=cut
 
 */
 int
 add_key_const(bytecode * const bc, PMC *key) {
-    bc_const *bcc     = new_const(bc);
-    bcc->value->type  = PFC_KEY;
-    bcc->value->u.key = key;
-    return bcc->index;
+    return 0;
 }
 
-/*
-
-Get the PackFile_Constant on index C<key>.
-XXX not efficient.
-
-*/
-PackFile_Constant *
-get_const(bytecode * const bc, int key) {
-    bc_const *iter = bc->constants;
-    while (iter) {
-        if (iter->index == key)
-            return iter->value;
-        iter = iter->next;
-    }
-    return NULL;
-}
 
 /*
 
-=item new_bytecode
+=item C<bytecode *
+new_bytecode(Interp *interp, char const * const filename, int bytes, int codesize)>
+
+Create a new bytecode struct, representing the bytecode for file C<filename>
 
 Create a new bytecode struct and return a pointer to it.
 
@@ -149,20 +193,23 @@
     PMC      *self;
     bytecode *bc      = (bytecode *)mem_sys_allocate(sizeof (bytecode));
 
+    /* Create a new packfile and load it into the parrot interpreter */
     bc->packfile      = PackFile_new(interp, 0);
-    bc->constants     = NULL;
-    bc->interp        = interp;
-    bc->num_constants = 0;
-
     Parrot_loadbc(interp, bc->packfile);
 
+    /* store a pointer to the parrot interpreter, which saves passing around
+     * the interp as an extra argument.
+     */
+    bc->interp        = interp;
+
     /* create segments */
     interp->code      = PF_create_default_segs(interp, filename, 1);
 
-    /* add interpreter globals to bytecode (?) */
+    /* add interpreter globals to bytecode. XXX Why is this? */
     self              = VTABLE_get_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_INTERPRETER);
     add_pmc_const(bc, self);
 
+    /* allocate enough space. XXX I *think* bytes is /always/ codesize * 4. */
     interp->code->base.data = (opcode_t *)mem_sys_realloc(interp->code->base.data, bytes);
     interp->code->base.size = codesize;
 
@@ -174,7 +221,12 @@
 
 /*
 
-Write an op into the bytecode stream.
+=item C<void
+emit_opcode(bytecode * const bc, opcode_t op)>
+
+Write the opcode C<op> into the bytecode stream.
+
+=cut
 
 */
 void
@@ -184,7 +236,14 @@
 
 /*
 
+=item C<void
+emit_int_arg(bytecode * const bc, int intval)>
+
 Write an integer argument into the bytecode stream.
+XXX Possibly use 1 function for emitting opcodes and ints; they're
+the same anyway?
+
+=cut
 
 */
 void
@@ -194,9 +253,17 @@
 
 /*
 
+=item C<void
+emit_op_by_name(bytecode * const bc, char const * const opname)>
+
 Emit the opcode by name. C<opname> must be a valid, signatured opname.
-So, "print" is not valid, whereas "print_ic" is. The opcode of the
-opname is looked up and written into the bytecode stream.
+So, C<print> is not valid, whereas C<print_ic> is. The opcode of the
+opname is looked up and written into the bytecode stream. If C<opname>
+is not valid, an error message is written.
+
+XXX Possibly bail out if error? No need to continue.
+
+=cut
 
 */
 void
@@ -204,13 +271,14 @@
     int op = bc->interp->op_lib->op_code(opname, 1);
     if (op < 0) {
         /* error */
-        fprintf(stderr, "'%s' is not an op", opname);
+        fprintf(stderr, "Error: '%s' is not an op\n", opname);
     }
     else
         emit_opcode(bc, op);
 }
 
 static STRING *add_string_const_from_cstring(bytecode * const bc, char const * const str);
+
 /*
 
 XXX think of better name.
@@ -220,7 +288,7 @@
 static STRING *
 add_string_const_from_cstring(bytecode * const bc, char const * const str) {
     int index = add_string_const(bc, str);
-    return get_const(bc, index)->u.string;
+    return bc->interp->code->const_table->constants[index]->u.string;
 }
 
 
@@ -228,48 +296,78 @@
 
 /*
 
+=item C<void
+add_sub_pmc(bytecode * const bc,
+            char const * const subname,  -- the name of this sub
+            char const * const nsentry,  -- the value of the :nsentry flag
+            char const * const subid,    -- the value of the :subid flag
+            int vtable_index,            -- vtable index, or -1 if no :vtable
+            unsigned regs_used[],        -- register usage of this sub
+            int startoffset,             -- start offset of this sub in bytecode
+            int endoffset)>              -- end offset of this sub in bytecode
+
 Add a sub PMC to the constant table. This function initializes the sub PMC.
 
+=cut
+
 */
 void
 add_sub_pmc(bytecode * const bc,
-            char const * const subname, /* .sub foo --> "foo" */
-            char const * const nsentry, /* .sub foo :nsentry('bar') --> "bar" */
-            char const * const subid,   /* .sub foo :subid('baz') --> "baz" */
-            int vtable_index,           /* vtable entry index */
-            unsigned regs_used[],            /* register usage */
+            char const * const subname,
+            char const * const nsentry,
+            char const * const subid,
+            int vtable_index,
+            unsigned regs_used[],
             int startoffset,
             int endoffset)
 {
-    Interp     *interp    = bc->interp;
-    PMC        *sub_pmc   = pmc_new(bc->interp, enum_class_Sub);
-    Parrot_sub *sub       = PMC_sub(sub_pmc);
-    int   subconst_index;
-    int   subname_index;
-
-
-    int i;
-
-
+    PMC               *sub_pmc;
+    Parrot_sub        *sub;
+    int                subconst_index;
+    int                subname_index;
+    int                i;
     PackFile_Constant *subname_const;
 
+
+    /* The .sub is represented by a "Sub" PMC.
+     * If that should be changed into something else, fix that here (e.g. "Coroutine").
+     */
+    sub_pmc       = pmc_new(bc->interp, enum_class_Sub);
+    sub           = PMC_sub(sub_pmc);
     subname_index = add_string_const(bc, subname);
-    subname_const = get_const(bc, subname_index);
+    subname_const = bc->interp->code->const_table->constants[subname_index];
 
+    /* set start and end offset of this sub in the bytecode. This is calculated during
+     * the parsing phase.
+     */
     sub->start_offs       = startoffset;
     sub->end_offs         = endoffset;
+
+    /* XXX fix namespace stuff */
     sub->namespace_name   = NULL;
-    sub->HLL_id           = CONTEXT(interp)->current_HLL;
 
+    /* XXX does this work properly? is "current_HLL" really "current"? */
+    sub->HLL_id           = CONTEXT(bc->interp)->current_HLL;
+
+    /* XXX fix lex stuff */
     sub->lex_info         = NULL;
+
+    /* XXX fix outer stuff */
     sub->outer_sub        = NULL;
+
+    /* Set the vtable index; if this .sub was declared as :vtable, its vtable
+     * index was found during the parse; otherwise it's -1.
+     */
     sub->vtable_index     = vtable_index;
+
+    /* XXX fix multi stuff */
     sub->multi_signature  = NULL;
 
     /* store register usage of this sub. */
     for (i = 0; i < 4; ++i)
         sub->n_regs_used[i] = regs_used[i];
 
+    /* store the name of this sub; it's stored in the constant table. */
     sub->name = subname_const->u.string;
 
     /* If there was a :nsentry, add it to the constants table, and set
@@ -289,54 +387,25 @@
         sub->subid = subname_const->u.string;
 
 
-
+    /* store the sub in a namespace. XXX why, and in what namespace? sub->namespace_name?
+     * XXX must this be done always? (this w.r.t. the recent discussion about :vtable/:method
+     * and being :anon etc.
+     */
     Parrot_store_sub_in_namespace(bc->interp, sub_pmc);
     subconst_index = add_pmc_const(bc, sub_pmc);
 
-    fprintf(stderr, "subconst index: %d\n", subconst_index);
-
-    /* doesn't work?? */
-
-    /* this /does/ work in pirc/bctest.c!! Why not here??
-    */
-
-    /*
-    PackFile_FixupTable_new_entry(bc->interp, "main", enum_fixup_sub, subconst->index);
-    */
-
+    /* Add a new fixup entry in the fixup table for this sub. */
+    PackFile_FixupTable_new_entry(bc->interp, subname, enum_fixup_sub, subconst_index);
 }
 
-/*
-
-Walk the list of constants and store them in the constants segment of the packfile.
-Instead of updating the constants table one by one, it's neater to add them in one go.
-This prevents memory re-allocations, which are generally not the cheapest operations.
-
-XXX check out if we can count the number of needed constants during the parse; that
-would prevent the linked list thing. OTOH, that makes this API less flexible; client-code
-doesn't want to be so inflexible.
-
-*/
-static void
-emit_constants(bytecode * const bc) {
-    bc_const *iter = bc->constants;
-
-    /* allocate enough space */
-
-    fprintf(stderr, "allocating space for %d constants\n", bc->num_constants);
-    bc->interp->code->const_table->constants
-                                   = mem_allocate_n_typed(bc->num_constants, PackFile_Constant *);
-
-    /* walk the list and put all of them into the constant table. */
-    while (iter) {
-        bc->interp->code->const_table->constants[iter->index] = iter->value;
-        iter = iter->next;
-    }
-}
 
 /*
 
-Write the bytecode to the file C<filename>.
+=item C<void
+write_pbc_file(bytecode * const bc, char const * const filename)>
+
+Write the generated bytecode (stored somewhere in a packfile)
+to the file C<filename>.
 
 */
 void
@@ -346,9 +415,6 @@
     FILE     *fp;
     int       result;
 
-    /* store the list of constants in the constants segment */
-    emit_constants(bc);
-
     /* pack the packfile */
     size   = PackFile_pack_size(bc->interp, bc->interp->code->base.pf) * sizeof (opcode_t);
     packed = (opcode_t*) mem_sys_allocate(size);
@@ -373,32 +439,6 @@
 
 /*
 
-Test driver.
-
-*/
-/*
-int
-main(int argc, char **argv) {
-    Interp *interp = Parrot_new(NULL);
-    bytecode *bc   = new_bytecode(interp, "test.pir", 12, 3);
-    int regs_used[4] = {0,0,0,0};
-
-    add_sub_pmc(bc, "main", NULL, NULL, -1, regs_used);
-    emit_op_by_name(bc, "print_ic");
-    emit_int_arg(bc, 42);
-    emit_op_by_name(bc, "end");
-
-
-    fprintf(stderr, "writing pbc...");
-    write_pbc_file(bc, "test.pbc");
-    fprintf(stderr, "written pbc file\n");
-}
-
-*/
-
-
-/*
-
 =back
 
 =cut

Modified: branches/calling_conventions/compilers/pirc/new/bcgen.h
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/bcgen.h	(original)
+++ branches/calling_conventions/compilers/pirc/new/bcgen.h	Sun Dec  7 22:37:43 2008
@@ -41,8 +41,11 @@
 */
 
 int add_key_const(bytecode * const bc, PMC *key);
+
 int add_num_const(bytecode * const bc, double f);
+
 int add_string_const(bytecode * const bc, char const * const str);
+
 int add_pmc_const(bytecode * const bc, PMC * pmc) ;
 
 /* for adding constants */
@@ -58,20 +61,12 @@
 int add_int_const(bytecode * const bc, INTVAL i);
   */
 
-/* some functions to update constants */
-
-void update_pmc_const(bytecode * const bc, int pmc_const_index, PMC * newvalue);
-
-void update_string_const(bytecode * const bc, int str_const_index, STRING *s);
-/* XXX and other types... */
 
 /* XXX todo: define some API functions for finding values, etc. like this: */
 int get_string_const_index(bytecode * const bc, STRING *s);
 /* retrieves the index of s in the constant table */
 
-/* for sake of completeness.. */
-void remove_const(bytecode * const bc, int const_index);
-/* removes constant in slot C<const_index> from constant table */
+
 
 void add_sub_pmc(bytecode * const bc,
             char const * const subname, char const * const nsentry, char const * const subid,

Modified: branches/calling_conventions/compilers/pirc/new/hdocprep.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/hdocprep.c	(original)
+++ branches/calling_conventions/compilers/pirc/new/hdocprep.c	Sun Dec  7 22:37:43 2008
@@ -484,15 +484,15 @@
 static yyconst flex_int16_t yy_accept[118] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   21,   19,    5,   19,   19,   19,
-       19,   19,   20,    4,   20,   20,   20,   18,   15,   17,
-       15,   18,   18,   18,   20,    7,   20,   20,   20,    8,
-       20,   20,   20,    9,   20,   20,   13,   12,   13,   13,
-       13,    5,    0,    1,    0,    0,    0,    0,    2,    0,
-        0,    4,    0,    0,    1,    0,    0,   17,    0,   16,
-        0,    0,    0,    7,    0,    0,    1,    0,    0,    8,
-        0,    0,    1,    0,    0,   10,    0,    9,    0,    1,
-        0,   12,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   21,   19,    5,   19,    1,   19,
+       19,   19,   20,    4,   20,    1,   20,   18,   15,   17,
+       15,   18,    1,   18,   20,    7,   20,    1,   20,    8,
+       20,    1,   20,    9,   20,    1,   13,   12,   13,    1,
+       13,    5,    1,    1,    1,    0,    0,    0,    2,    0,
+        0,    4,    0,    1,    1,    1,    0,   17,    0,   16,
+        0,    0,    0,    7,    0,    1,    1,    1,    0,    8,
+        0,    1,    1,    1,    0,   10,    0,    9,    1,    1,
+        1,   12,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    6,    0,    0,    0,    0,   11,    0,    0,    0,
         0,    3,    0,    0,    0,   14,    0

Modified: branches/calling_conventions/compilers/pirc/new/hdocprep.l
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/hdocprep.l	(original)
+++ branches/calling_conventions/compilers/pirc/new/hdocprep.l	Sun Dec  7 22:37:43 2008
@@ -275,7 +275,7 @@
 DQ_STRING       \"(\\.|[^"\\\n])*\"
 SQ_STRING       \'[^'\n]*\'
 Q_STRING       {SQ_STRING}|{DQ_STRING}
-LINECOMMENT    [#].*{EOL}
+LINECOMMENT    [#].*{EOL}?
 
 %%
 

Modified: branches/calling_conventions/compilers/pirc/new/main.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/main.c	(original)
+++ branches/calling_conventions/compilers/pirc/new/main.c	Sun Dec  7 22:37:43 2008
@@ -212,6 +212,7 @@
     fclose(infile);
 
 
+    /* XXX just want to make sure pirc doesn't segfault when doing bytecode stuff. */
     if (TEST_FLAG(lexer->flags, LEXER_FLAG_OUTPUTPBC))
         fprintf(stderr, "pirc ok\n");
 

Modified: branches/calling_conventions/compilers/pirc/new/pir.y
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/pir.y	(original)
+++ branches/calling_conventions/compilers/pirc/new/pir.y	Sun Dec  7 22:37:43 2008
@@ -200,10 +200,10 @@
 static void undeclared_symbol(yyscan_t yyscanner, lexer_state * const lexer,
                               char const * const symbol);
 
-/* names of the Parrot types. Note that pir_type_namwes is global,
+/* names of the Parrot types. Note that pir_type_names is (file-)global,
  * but it's read-only, so that's fine.
  */
-static char const * const pir_type_names[] = { "int", "num", "string", "pmc" };
+static char const * const pir_type_names[] = { "int", "string", "pmc", "num" };
 
 
 /* enable debugging of generated parser */
@@ -2163,6 +2163,13 @@
 %%
 
 
+
+/* the order of these letters match with the pir_type enumeration.
+ * These are used for generating the full opname (set I0, 10 -> set_i_ic).
+ */
+static char const type_codes[5] = {'i', 's', 'p', 'n', '?'};
+
+
 /*
 
 =head1 FUNCTIONS
@@ -3268,10 +3275,6 @@
 }
 
 
-/* the order of these letters match with the pir_type enumeration.
- * These are used for generating the full opname (set I0, 10 -> set_i_ic).
- */
-static char const type_codes[5] = {'i', 'n', 's', 'p', '?'};
 
 
 /*

Modified: branches/calling_conventions/compilers/pirc/new/pircompiler.h
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/pircompiler.h	(original)
+++ branches/calling_conventions/compilers/pirc/new/pircompiler.h	Sun Dec  7 22:37:43 2008
@@ -104,7 +104,6 @@
     int            curregister[4]; /* for register allocation */
     int            pir_reg_generator; /* for unique PIR register allocator, for temp. PIR regs. */
 
-    unsigned       instr_counter;  /* to assign an index to each instruction */
     unsigned       stmt_counter;   /* to count "logical" statements, even if multi-line. */
 
     Interp        *interp;         /* parrot interpreter */

Modified: branches/calling_conventions/compilers/pirc/new/pircompunit.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/pircompunit.c	(original)
+++ branches/calling_conventions/compilers/pirc/new/pircompunit.c	Sun Dec  7 22:37:43 2008
@@ -387,14 +387,6 @@
     /* the codesize so far will be the offset of this instruction. */
     instr->offset = lexer->codesize;
 
-
-    /* XXX instr_counter still needed? Think so, for lin.scan.reg.alloc.
-       can instr->offset be used for that? or is it already used?
-       instr->offset is now just incremented in bigger steps...
-     */
-    lexer->instr_counter++;
-    /*instr->offset = lexer->instr_counter++;*/
-
     /*
     fprintf(stderr, "offset of %s is: %d\n", opname, instr->offset);
     */
@@ -831,12 +823,7 @@
      *     goto L3
      *
      * jumping to L1 is equivalent to jumping to L2 or L3; so when calculating
-     * branch offsets, all three labels must yield the same offset. Therefore,
-     * if no instruction was set on the current node, the instruction counter
-     * must not count that node (hence the decrement).
-     */
-    if (instr->opname == NULL)
-        --lexer->instr_counter;
+     * branch offsets, all three labels must yield the same offset.
 
     /* store the labelname and its offset */
     store_local_label(lexer, labelname, instr->offset);
@@ -1858,11 +1845,88 @@
 arguments_to_operands(lexer_state * const lexer, argument * const args) {
     argument *argiter;
 
+    /* create a FixedIntegerArray object as first argument, which encodes
+     * the number of arguments and their flags.
+     */
+
+    /* XXX in compilers/imcc/pcc.c there's a maximum number of 15 values;
+     * do the same here to Get Things To Work, but fix later.
+     */
+    int flags_arg[15];
+    int index         = 0;
+    int forindex      = 0;
+    int len;
+    char *flagsstring, *strwriter;
+
     if (args == NULL) {
         push_operand(lexer, expr_from_const(lexer, new_const(lexer, PMC_TYPE, "")));
         return;
     }
+    else {
+        int numargs = 0;
+        argiter = args;
+        do {
+            int flag = 0;
+            expression *argvalue;
+
+            argiter  = argiter->next;
+            argvalue = argiter->value;
+            /*
+            fprintf(stderr, "converting arg to operand %d\n", ++numargs);
+            */
+
+
+            switch (argvalue->type) {
+                case EXPR_TARGET:
+                    if (TEST_FLAG(argvalue->expr.t->flags, TARGET_FLAG_IS_REG))
+                        flag |= argvalue->expr.t->s.reg->type;
+                    else
+                        flag |= argvalue->expr.t->s.sym->type;
+                    break;
+                case EXPR_CONSTANT:
+                    flag |= argvalue->expr.c->type;
+                    break;
+                default:
+                    yypirerror(lexer->yyscanner, lexer, "invalid expression type for argument");
+                    break;
+            }
+            /* store the flag for this argument */
+            flags_arg[index++] = flag;
+        }
+        while (argiter != args);
+
+        /* allocate space for each flag, + commas (index - 1) and 2 quotes */
+        strwriter = flagsstring = (char *)mem_sys_allocate((index + index - 1 + 2) * sizeof (char));
+        *strwriter++ = '"';
+
+        while (forindex < index) {
+            sprintf(strwriter++, "%d", flags_arg[forindex]);
+
+            if (forindex < index - 1) {
+                *strwriter++ = ',';
+            }
+
+            ++forindex;
+        }
+        /* write closing quote and NULL character */
+        *strwriter++ = '"';
+        *strwriter++ = '\0';
+
+        /*
+        fprintf(stderr, "args2operands: [%s]\n", flagsstring);
+        */
+
+        /* don't add it now, it will break tests. */
+        /*
+        push_operand(lexer, expr_from_const(lexer, new_const(lexer, STRING_TYPE, flagsstring)));
+        */
+
+
+        /* XXX Yes, this is a hacky attempt. Cleanups will follow. */
+    }
+
 
+    /* go over the arguments again, and add them as operands */
     argiter = args;
 
     do {
@@ -1935,7 +1999,7 @@
 node. This function can be used to create an instruction of which the signature
 is known beforehand, without the need to compute the signature during runtime.
 This is useful for generating special subroutine instructions, such as
-C<get_params> etc.
+C<get_params_pc> etc.
 
 =cut
 
@@ -1946,6 +2010,8 @@
     CURRENT_INSTRUCTION(lexer)->opinfo = &lexer->interp->op_info_table[opcode];
     CURRENT_INSTRUCTION(lexer)->opcode = opcode;
 
+    /* XXX how to calculate size of var-arg ops? */
+
     /* count number of ints needed to store this instruction in bytecode */
     lexer->codesize += CURRENT_INSTRUCTION(lexer)->opinfo->op_count;
 }
@@ -1969,12 +2035,9 @@
      */
     if (instr->opinfo)
         lexer->codesize -= instr->opinfo->op_count;
-    /*
-    else
-        fprintf(stderr, "instr (%s)had no opinfo yet...\n", instr->opname);
-    */
+    /* else the instruction was already set; decrement the codesize, as it was added already */
 
-    /* now get the */
+    /* now get the opinfo structure, update the name, and update the opcode. */
     instr->opinfo = &lexer->interp->op_info_table[newop];
     instr->opname = instr->opinfo->full_name;
     instr->opcode = newop;
@@ -2016,6 +2079,16 @@
 
 Convert an C<invocation> structure into a series of instructions.
 
+XXX Some of the conversion should be done during emit_pbc(), because only at that
+point is there a bytecode object around, in which PMCs can be emitted.
+Subs are stored as PMCs, and we need to look up the PMC constant and emit
+its index as an operand. Also, the first operands of the special PCC instructions
+must be generated once the bytecode object is around, because they use a FixedIntegerArray
+to encode flags/types of the rest of the operands.
+
+One solution would be to mark these instructions, and fix them during emitting bytecode.
+This needs more thought.
+
 =cut
 
 */
@@ -2175,10 +2248,6 @@
         return;
 
     do {
-/*
-        expression *label = NULL;
-*/
-
         iter = iter->next; /* init pointer to first instruction */
 
         /* depending on what kind of branching instruction, get the right operand
@@ -2196,11 +2265,11 @@
             /* Note that since oplabelbits has at least 1 bit set (otherwise it wouldn't
              * have been evaluated as "true" in the if statement above), we can be
              * sure there's at least one operand. Don't do silly tests here anymore.
+             * (hence the do-while statement, no initial test.)
              */
             int flag = 0;
 
             do {
-
                 operand = operand->next;
 
                 if (TEST_FLAG(iter->oplabelbits, BIT(flag))) {
@@ -2209,7 +2278,6 @@
                     unsigned     offset     = find_local_label(lexer, labelid);
                     unsigned     curr_instr = iter->offset;
 
-                    /* fprintf(stderr, "operand %d is a label\n", BIT(flag)); */
                     /* convert the label identifier into a real label object */
                     operand->expr.l = new_label(lexer, labelid, offset - curr_instr);
                     operand->type   = EXPR_LABEL;
@@ -2222,7 +2290,6 @@
 
         }
 
-
     }
     while (iter != lexer->subs->statements); /* iterate over all instructions */
 }
@@ -2297,10 +2364,21 @@
 void
 close_sub(lexer_state * const lexer) {
     int opcode;
+
+    /* a :main-marked sub ends with the "end" instruction;
+     * otherwise it's this pair:
+     *
+     *    set_returns_pc
+     *    returncc
+     */
+
+
     if (TEST_FLAG(lexer->subs->flags, SUB_FLAG_MAIN)) {
         new_sub_instr(lexer, PARROT_OP_end, "end");
     }
     else {
+        /* XXX if there was already a return sequence explicitly, we shouldn't do this. */
+
         new_sub_instr(lexer, PARROT_OP_set_returns_pc, "set_returns_pc");
         new_sub_instr(lexer, PARROT_OP_returncc, "returncc");
     }

Modified: branches/calling_conventions/compilers/pirc/new/pircompunit.h
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/pircompunit.h	(original)
+++ branches/calling_conventions/compilers/pirc/new/pircompunit.h	Sun Dec  7 22:37:43 2008
@@ -13,16 +13,15 @@
 #ifndef PARROT_PIR_PIRCOMPUNIT_H_GUARD
 #define PARROT_PIR_PIRCOMPUNIT_H_GUARD
 
-/* the 4 parrot types; use explicit values, they are used to index an array,
- * so this way we can be sure that works properly.
- * (don't assume enum's start counting at 0).
+/* the 4 parrot types; use explicit values that match the values in
+ * PDD03_calling_conventions.pod.
  */
 typedef enum pir_types {
     INT_TYPE     = 0,
-    NUM_TYPE     = 1,
-    STRING_TYPE  = 2,
-    PMC_TYPE     = 3,
-    UNKNOWN_TYPE = 4  /* for uninitialized types */
+    STRING_TYPE  = 1,
+    PMC_TYPE     = 2,
+    NUM_TYPE     = 3,
+    UNKNOWN_TYPE = 4  /* for uninitialized types, handy to detect missing initializations. */
 
 } pir_type;
 

Modified: branches/calling_conventions/compilers/pirc/new/piremit.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/piremit.c	(original)
+++ branches/calling_conventions/compilers/pirc/new/piremit.c	Sun Dec  7 22:37:43 2008
@@ -13,7 +13,11 @@
 
 =head1 FUNCTIONS
 
-This file contains emit functions.
+This file contains emit functions. Depending on the requested output,
+the appropriate emit functions are used. Options are:
+
+ -p     for PASM output
+ -b     for bytecode output
 
 =over 4
 
@@ -27,7 +31,7 @@
 /* the order of these letters match with the pir_type enumeration.
  * These are used for human-readable PASM output.
  */
-static char const pir_register_types[5] = {'I', 'N', 'S', 'P', '?'};
+static char const pir_register_types[5] = {'I', 'S', 'P', 'N', '?'};
 
 static void emit_pir_statement(lexer_state * const lexer, subroutine * const sub);
 static void emit_pir_instruction(lexer_state * const lexer, instruction * const instr);
@@ -213,7 +217,7 @@
             print_expressions(lexer, ins->operands);
         }
         else {
-            fprintf(out, "%u   %s ", ins->offset, ins->opname);
+            fprintf(out, "%04u   %s ", ins->offset, ins->opname);
 
             print_expressions(lexer, ins->operands);
 
@@ -272,6 +276,7 @@
         /* set iterator to first item */
         subroutine *subiter = lexer->subs->next;
 
+
         do {
 
             /*
@@ -321,8 +326,18 @@
     }
 }
 
+static void
+emit_pir_statement(lexer_state * const lexer, subroutine * const sub) {
+    if (sub->statements != NULL) {
+        instruction *statiter = sub->statements->next;
 
-
+        do {
+            emit_pir_instruction(lexer, statiter);
+            statiter = statiter->next;
+        }
+        while (statiter != sub->statements->next);
+    }
+}
 
 void
 emit_pir_subs(lexer_state * const lexer) {
@@ -331,7 +346,6 @@
         subroutine *subiter = lexer->subs->next;
 
         do {
-
             int i;
             fprintf(out, "\n.namespace ");
             print_key(lexer, subiter->name_space);
@@ -354,13 +368,18 @@
     }
 }
 
+
+
 /*
 
+=item C<static void
+emit_pbc_const_arg(lexer_state * const lexer, constant * const c)>
+
 Emit a constant argument into the bytecode. An integer is emitted
 inline in the bytecode; other types are stored in the constant table,
 and their index in the constant table is emitted into the bytecode.
 
-XXX doesn't work yet for strings and numbers. (pmc prob. neither)
+=cut
 
 */
 static void
@@ -380,7 +399,18 @@
             emit_int_arg(lexer->bc, index);
             break;
         }
-        case PMC_TYPE:
+        case PMC_TYPE: {
+            /*
+
+            int index = add_pmc_const(lexer->bc, c->val.pval);
+
+            XXX create a new PMC here using the name in c->val.pval?
+
+            emit_int_arg(lexer->bc, index);
+
+            */
+            break;
+        }
         default:
             break;
     }
@@ -388,11 +418,16 @@
 
 /*
 
+=item C<static void
+emit_pbc_target_arg(lexer_state * const lexer, target * const t)>
+
 Emit the assigned register of target C<t>. The assigned register is
 stored in the C<color> field, of either the C<pir_reg> or C<symbol>
 structure, depending on whether C<t> is a register or a symbol,
 respectively.
 
+=cut
+
 */
 static void
 emit_pbc_target_arg(lexer_state * const lexer, target * const t) {
@@ -404,25 +439,38 @@
 
 /*
 
-XXX TODO: label offsets must be bytecode offsets, so also count arguments.
+=item C<static void
+emit_pbc_label_arg(lexer_state * const lexer, label * const l)>
+
+Emit the value of the label offset of label C<l>.
+
+=cut
 
 */
 static void
 emit_pbc_label_arg(lexer_state * const lexer, label * const l) {
     emit_int_arg(lexer->bc, l->offset);
-    /* fprintf(stderr, "labeloffset: %d\n", l->offset); */
 }
 
+
+/*
+
+=item C<static void
+emit_pbc_instr(lexer_state * const lexer, instruction * const instr)>
+
+Emit PBC for one instruction.
+
+=cut
+
+*/
 static void
 emit_pbc_instr(lexer_state * const lexer, instruction * const instr) {
-    int i;
-
+    int         i;
     expression *operand;
 
     /* emit the opcode */
 
     if (instr->opinfo) {
-        fprintf(stderr, "emit_pbc: %s\n", instr->opname);
         emit_opcode(lexer->bc, instr->opcode);
 
         /* emit the arguments */
@@ -431,6 +479,9 @@
          * so substract 1 for the op itself.
          */
         if (instr->opinfo->op_count > 1) {
+            /* operands are stored in a circular linked list; instr->operands points
+             * to the *last* operand, its next pointer points to the first operand.
+             */
             operand = instr->operands->next;
 
             for (i = 0; i < instr->opinfo->op_count - 1; ++i) {
@@ -456,32 +507,28 @@
 
 }
 
-static void
-emit_pir_statement(lexer_state * const lexer, subroutine * const sub) {
-    if (sub->statements != NULL) {
-        instruction *statiter = sub->statements->next;
 
-        do {
-            emit_pir_instruction(lexer, statiter);
-            statiter = statiter->next;
-        }
-        while (statiter != sub->statements->next);
-    }
-}
+/*
 
+=item C<static void
+emit_pbc_sub(lexer_state * const lexer, subroutine * const sub)>
 
+Emit bytecode for the subroutine C<sub>.
+
+=cut
+
+*/
 static void
-emit_pbc_instructions(lexer_state * const lexer, subroutine * const sub) {
+emit_pbc_sub(lexer_state * const lexer, subroutine * const sub) {
     instruction *iter;
+
     if (sub->statements == NULL)
         return;
 
-
+    /* initialize iter to first instruction */
     iter = sub->statements->next;
 
-    assert(iter != sub->statements->next);
     do {
-        fprintf(stderr, "pbc_instr: ");
         emit_pbc_instr(lexer, iter);
         iter = iter->next;
     }
@@ -506,7 +553,6 @@
     if (lexer->subs == NULL)
         return;
 
-
     lexer->bc = new_bytecode(lexer->interp, lexer->filename,
                              lexer->codesize * 4, lexer->codesize);
 
@@ -527,13 +573,15 @@
                     subiter->startoffset,
                     subiter->endoffset);
 
-        emit_pbc_instructions(lexer, subiter);
+        emit_pbc_sub(lexer, subiter);
         subiter = subiter->next;
     }
     while (subiter != lexer->subs->next);
 
     /* write the output to a file. */
     write_pbc_file(lexer->bc, "a.pbc");
+
+    /* XXX just make sure no seg. faults  happened */
     fprintf(stderr, "done writing pbc\n");
 }
 

Modified: branches/calling_conventions/compilers/pirc/new/pirparser.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/pirparser.c	(original)
+++ branches/calling_conventions/compilers/pirc/new/pirparser.c	Sun Dec  7 22:37:43 2008
@@ -515,10 +515,10 @@
 static void undeclared_symbol(yyscan_t yyscanner, lexer_state * const lexer,
                               char const * const symbol);
 
-/* names of the Parrot types. Note that pir_type_namwes is global,
+/* names of the Parrot types. Note that pir_type_names is (file-)global,
  * but it's read-only, so that's fine.
  */
-static char const * const pir_type_names[] = { "int", "num", "string", "pmc" };
+static char const * const pir_type_names[] = { "int", "string", "pmc", "num" };
 
 
 /* enable debugging of generated parser */
@@ -4852,6 +4852,13 @@
 
 
 
+
+/* the order of these letters match with the pir_type enumeration.
+ * These are used for generating the full opname (set I0, 10 -> set_i_ic).
+ */
+static char const type_codes[5] = {'i', 's', 'p', 'n', '?'};
+
+
 /*
 
 =head1 FUNCTIONS
@@ -5957,10 +5964,6 @@
 }
 
 
-/* the order of these letters match with the pir_type enumeration.
- * These are used for generating the full opname (set I0, 10 -> set_i_ic).
- */
-static char const type_codes[5] = {'i', 'n', 's', 'p', '?'};
 
 
 /*

Modified: branches/calling_conventions/compilers/pirc/new/pirsymbol.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/new/pirsymbol.c	(original)
+++ branches/calling_conventions/compilers/pirc/new/pirsymbol.c	Sun Dec  7 22:37:43 2008
@@ -461,7 +461,7 @@
      */
     if (reg) {
         /* update end point of interval */
-        reg->interval->endpoint = lexer->instr_counter;
+        reg->interval->endpoint = lexer->stmt_counter;
         return reg->color;
     }
 

Modified: branches/calling_conventions/compilers/pirc/src/pirout.c
==============================================================================
--- branches/calling_conventions/compilers/pirc/src/pirout.c	(original)
+++ branches/calling_conventions/compilers/pirc/src/pirout.c	Sun Dec  7 22:37:43 2008
@@ -68,10 +68,10 @@
 
 RT#48260: Not yet documented!!!
 
-=cut
-
 =back
 
+=cut
+
 */
 
 static void

Modified: branches/calling_conventions/compilers/tge/TGE/Compiler.pir
==============================================================================
--- branches/calling_conventions/compilers/tge/TGE/Compiler.pir	(original)
+++ branches/calling_conventions/compilers/tge/TGE/Compiler.pir	Sun Dec  7 22:37:43 2008
@@ -113,7 +113,8 @@
     .local pmc result
 
     .local pmc iter
-    iter = new 'Iterator', node    # setup iterator for node
+    $P0 = node.'hash'()
+    iter = new 'Iterator', $P0    # setup iterator for node
     iter = 0
   iter_loop:
     unless iter, iter_end         # while (entries) ...
@@ -135,7 +136,8 @@
     rule = new 'Hash'
 
     .local pmc iter
-    iter = new 'Iterator', node    # setup iterator for node
+    $P0 = node.'hash'()
+    iter = new 'Iterator', $P0    # setup iterator for node
     iter = 0
   iter_loop:
     unless iter, iter_end         # while (entries) ...
@@ -169,7 +171,8 @@
     decl = new 'Hash'
 
     .local pmc iter
-    iter = new 'Iterator', node    # setup iterator for node
+    $P0 = node.'hash'()
+    iter = new 'Iterator', $P0    # setup iterator for node
     iter = 0
   iter_loop:
     unless iter, iter_end         # while (entries) ...

Modified: branches/calling_conventions/config/gen/call_list/misc.in
==============================================================================
--- branches/calling_conventions/config/gen/call_list/misc.in	(original)
+++ branches/calling_conventions/config/gen/call_list/misc.in	Sun Dec  7 22:37:43 2008
@@ -17,6 +17,7 @@
 v    Jtiiipt
 p    JttPP
 P    Jtpi
+i    Vppp
 
 v
 v    Jiiip    # examples/japh/japh11.pasm

Modified: branches/calling_conventions/docs/book/ch01_overview.pod
==============================================================================
--- branches/calling_conventions/docs/book/ch01_overview.pod	(original)
+++ branches/calling_conventions/docs/book/ch01_overview.pod	Sun Dec  7 22:37:43 2008
@@ -179,7 +179,7 @@
 
 =item Compiler Developer
 
-Compiler Develoeprs develop and maintain one or more Parrot front-end
+Compiler Developers develop and maintain one or more Parrot front-end
 compilers such as IMCC, PIRC, PGE and TGE.
 
 =item High Level Language Developer
@@ -363,7 +363,7 @@
 #  Tables
 #  ......
 #  A 2x2 table with top header row looks like this:
-#  
+#
 #  =begin table An Example Table
 #  =headrow
 #  =row

Modified: branches/calling_conventions/docs/book/ch03_pir_basics.pod
==============================================================================
--- branches/calling_conventions/docs/book/ch03_pir_basics.pod	(original)
+++ branches/calling_conventions/docs/book/ch03_pir_basics.pod	Sun Dec  7 22:37:43 2008
@@ -1,4 +1,4 @@
-=pod 
+=pod
 
 =head0 Parrot Intermediate Representation
 
@@ -16,7 +16,7 @@
 number of reasons. PASM, the Parrot assembly language on which PIR is
 based, is discussed in more detail in A<CHP-5>Chapter 5.
 
-X<.pir files> As a convention, files containing pure PIR code generally 
+X<.pir files> As a convention, files containing pure PIR code generally
 have a F<.pir> extension. Parrot will treat a file with any other
 extension, besides F<.pasm> as a PIR file in mixed mode. This means that
 the file can contain PIR and PASM code interchangably, with a few caveats
@@ -31,7 +31,7 @@
 that is slowly maturing. This is a useful source of information too. The
 test suite in F<imcc/t> shows examples of proper working code. In fact,
 the test suite is the definitive PIR resource, because it shows how PIR
-I<actually works>, even when the documentation may be out of date. 
+I<actually works>, even when the documentation may be out of date.
 
 =head1 Statements
 
@@ -131,7 +131,7 @@
   $N0 = 3.14     # Numbers can have a decimal point
   $N1 = 4        # ...or they don't
   $N2 = -1.2e+4  # Numbers can also use scientific notation.
-  
+
 String literals are enclosed in single or double-quotes:
 
   $S0 = "This is a valid literal string"
@@ -147,12 +147,12 @@
 Or, if you need more flexibility, you can use a heredoc:
 
   $S2 = << "End_Token"
-  
+
   This is a multi-line string literal. Notice that
   it doesn't use quotation marks. The string continues
   until the ending token (the thing in quotes next to
   the << above) is found.
-  
+
   End_Token
 
 =head2 Named Variables
@@ -274,7 +274,7 @@
 set in X<CHP-5> Chapter 5.
 
 PIR also provides automatic assignment operators such as C<+=>, C<-=>,
-and C<<< >>= >>>. These operators help programmers to peform common
+and C<<< >>= >>>. These operators help programmers to perform common
 manipulations on a data value in place, and save a few keystrokes while
 doing them.
 
@@ -293,8 +293,8 @@
 later) are one of the primary methods to change control flow in PIR, so
 it is well worth understanding.
 
-PIR code can contain both local and global labels. Global labels start 
-with an underscore. The name of a global label has to be unique since 
+PIR code can contain both local and global labels. Global labels start
+with an underscore. The name of a global label has to be unique since
 it can be called at any point in the program. Local labels start with a
 letter. A local label is accessible only in the function where it is
 defined. The name has to be unique within that function, but the same
@@ -358,7 +358,7 @@
 If you want to do more stuff if your program, you will need to call
 other functions explicitly.
 
-A<CHP-04>Chapter 4 goes into much more detail about compilation units 
+A<CHP-04>Chapter 4 goes into much more detail about compilation units
 and their uses.
 
 =head1 Flow Control
@@ -374,9 +374,9 @@
 to the language in which they are used, so any attempt by Parrot to
 provide these structures would work for some languages but not by
 others. The only way to make sure all languages and their control
-structures can be equally accomdated is to simply give them the most
+structures can be equally accomodated is to simply give them the most
 simple and fundamental building blocks to work with. Language
-agnosticism is an important design goal in Parrot. 
+agnosticism is an important design goal in Parrot.
 
 X<goto instruction (PIR)>
 The most basic branching instruction is the unconditional branch:
@@ -561,7 +561,7 @@
 #  Tables
 #  ......
 #  A 2x2 table with top header row looks like this:
-#  
+#
 #  =begin table An Example Table
 #  =headrow
 #  =row

Modified: branches/calling_conventions/docs/book/ch04_pir_subroutines.pod
==============================================================================
--- branches/calling_conventions/docs/book/ch04_pir_subroutines.pod	(original)
+++ branches/calling_conventions/docs/book/ch04_pir_subroutines.pod	Sun Dec  7 22:37:43 2008
@@ -94,7 +94,7 @@
 
 X<.param directive>
 In addition to syntax for subroutine calls, PIR provides syntax for
-subroutine definitions. Subrtroutines are defined with the C<.sub>
+subroutine definitions. Subroutines are defined with the C<.sub>
 directive, and end with the C<.end> directive. We've already seen
 this syntax in our earlier examples. The C<.param> defines input
 parameters and creates local named variables for them:
@@ -147,6 +147,103 @@
 uses C<.param> and the C<.return> directives for retrieving parameters
 and returning results. The final printed result is 120.
 
+=head3 Named Parameters
+
+Parameters that are passed in a strict order like we've seen above are
+called '''positional arguments'''. Positional arguments are
+differentiated from one another by their position in the function call.
+Putting positional arguments in a different order will produce different
+effects, or may cause errors. Parrot supports a second type of parameter,
+a '''named parameter'''. Instead of passing parameters by their position
+in the string, parameters are passed by name and can be in any order.
+Here's an example:
+
+ .sub 'MySub'
+    .param int yrs :named("age")
+    .param string call :named("name")
+    $S0 = "Hello " . call
+    $S1 = "You are " . yrs
+    $S1 = $S1 . " years old
+    print $S0
+    print $S1
+ .end
+
+ .sub main :main
+    'MySub'("age" => 42, "name" => "Bob")
+ .end
+
+In the example above, we could have easily reversed the order too:
+
+ .sub main :main
+    'MySub'("name" => "Bob", "age" => 42)    # Same!
+ .end
+
+Named arguments can be a big help because you don't have to worry about
+the exact order of variables, especially as argument lists get very long.
+
+=head3 Optional Parameters
+
+Sometimes there are parameters to a function that don't always need to be
+passed, or values for a parameter which should be given a default value
+if a different value hasn't been explicitly provided. Parrot provides
+a mechanism for allowing optional parameters to be specifed, so an
+error won't be raised if the parameter isn't provided. Parrot also
+provides a flag value that can be tested to determine if an optional
+parameter has been provided or not, so a default value can be supplied.
+
+Optional parameters are actually treated like two parameters: The value
+that may or may not be passed, and the flag value to determine if it
+has been or not. Here's an example declaration of an optional parameter:
+
+  .param string name :optional
+  .param int has_name :opt_flag
+
+The C<:optional> flag specifies that the given parameter is optional and
+does not necessarily need to be provided. The C<:opt_flag> specifies that
+an integer parameter contains a boolean flag. This flag is true if the
+value was passed, and false otherwise. This means we can use logic like
+this to provide a default value:
+
+  .param string name :optional
+  .param int has_name :opt_flag
+  if has_name goto we_have_a_name
+    name = "Default value"
+  we_have_a_name:
+
+Optional parameters can be positional or named parameters. When using them
+with positional parameters, they must appear at the end of the list of
+postional parameters. Also, the C<:opt_flag> parameter must always appear
+directly after the C<:optional> parameter.
+
+  .sub 'Foo'
+    .param int optvalue :optional
+    .param int hasvalue :opt_flag
+    .param pmc notoptional          # WRONG!
+    ...
+
+  .sub 'Bar'
+     .param int hasvalue :opt_flag
+     .param int optvalue :optional  # WRONG!
+     ...
+
+  .sub 'Baz'
+    .param int optvalue :optional
+    .param pmc notoptional
+    .param int hasvalue :opt_flag   # WRONG!
+    ...
+
+Optional parameters can also be mixed with named parameters:
+
+  .sub 'MySub'
+    .param int value :named("answer") :optional
+    .param int has_value :opt_flag
+    ...
+
+This could be called in two ways:
+
+  'MySub'("answer" => 42)  # with a value
+  'MySub'()                # without
+
 =head2 Continuation Passing Style
 
 Continuations are snapshots, a frozen image of the current execution
@@ -154,7 +251,7 @@
 return to the point where the continuation was first created. It's
 like a magical timewarp that allows the developer to arbitrarily move
 control flow back to any previous point in the program N<there's actually
-no magic involved, just a lot of interesting ideas and involved code>. 
+no magic involved, just a lot of interesting ideas and involved code>.
 
 Continuations are not a new concept, they've been boggling the minds
 of Lisp and Scheme programmers for many years. However, despite all
@@ -180,7 +277,7 @@
 example in pseudocode:
 
  call add_two(5)
- 
+
  subroutine add_two(value)
 	 value = add_one(value)
 	 return add_one(value)
@@ -230,7 +327,7 @@
           // x, y, and z are all visible here
       }
       // only x and y are visible here
-  {
+  }
 
 The code above illustrates this idea perfectly without having to get into a
 detailed and convoluted example: In the inner block, we define the variable
@@ -252,7 +349,7 @@
       'MyInner'()
       # only x and y are visible here
   .end
-  
+
   .sub 'MyInner' :outer('MyOuter')
       .lex int z
       #x, y, and z are all visible here
@@ -268,7 +365,7 @@
 outer subroutine to give it a different--and unique--name that the lexical
 subroutines can reference in their C<:outer> declarations. Within lexical
 subroutines, the C<.lex> command defines a local variable that follows these
-scoping rules. 
+scoping rules.
 
 Sound confusing? It's not so bad. The basics are that we use C<:outer> to
 define a lexically-scoped subroutine, and we use C<.lex> to define lexically
@@ -282,7 +379,7 @@
 The example above could have been written using simple labels instead
 of separate compilation units:
 
-  .sub _main
+  .sub main
       $I1 = 5         # counter
       call fact       # same as bsr fact
       print $I0
@@ -567,14 +664,14 @@
 as VTABLE interfaces. This means we can have the following:
 
   .namespace [ "MyClass" ]
-  
+
   .sub 'ToString' :vtable('get_string') :method
       $S0 = "hello!"
       .return($S0)
   .end
-  
+
   .namespace [ "OtherClass" ]
-  
+
   .local pmc myclass = new "MyClass"
   say myclass                 # say converts to string internally
   $S0 = myclass               # Convert to a string, store in SS0
@@ -651,7 +748,7 @@
 the number and/or type of arguments passed to the function. Having
 two multisubs with the same function signature could result in a
 parsing error, or the later function could overwrite the former one
-in the multi. 
+in the multi.
 
 Multisubs are defined like this:
 
@@ -733,7 +830,7 @@
 #  Tables
 #  ......
 #  A 2x2 table with top header row looks like this:
-#  
+#
 #  =begin table An Example Table
 #  =headrow
 #  =row

Modified: branches/calling_conventions/docs/book/ch05_pasm.pod
==============================================================================
--- branches/calling_conventions/docs/book/ch05_pasm.pod	(original)
+++ branches/calling_conventions/docs/book/ch05_pasm.pod	Sun Dec  7 22:37:43 2008
@@ -370,7 +370,7 @@
 Binary opcodes have two source arguments and a destination argument.
 As we mentioned before, most binary math opcodes have a two-argument
 form in which the first argument is both a source and the destination.
-Parrot provides C<add>X<add opcode (PASM)> (addition), 
+Parrot provides C<add>X<add opcode (PASM)> (addition),
 C<sub>X<sub opcode (PASM)> (subtraction), C<mul>X<mul opcode (PASM)>
 (multiplication), C<div>X<div opcode (PASM)> (division), and C<pow>X<pow
 opcode (PASM)> (exponent) opcodes, as well as two different modulus
@@ -1101,7 +1101,7 @@
 Logical operations are implemented for integers and PMCs. Numeric
 values are false if they're 0, and true otherwise. Strings are false
 if they're the empty string or a single character "0", and true
-otherwise. PMCs are true when their 
+otherwise. PMCs are true when their
 C<get_bool>X<get_bool vtable method (PASM)> vtable method returns a
 nonzero value.
 
@@ -1142,7 +1142,7 @@
   not P0, P1
 
 The X<bitwise;opcodes (PASM)> bitwise opcodes operate on their values
-a single bit at a time. C<band>X<band opcode (PASM)>, 
+a single bit at a time. C<band>X<band opcode (PASM)>,
 C<bor>X<bor opcode (PASM)>, and C<bxor>X<bxor opcode (PASM)> return a
 value that is the logical AND, OR, or XOR of each bit in the source
 arguments. They each take a destination register and two source
@@ -1210,7 +1210,7 @@
 
 X<PMCs (Parrot Magic Cookies);arrays>
 The C<Array>X<Array PMC> PMC is an ordered aggregate with
-zero-baed integer keys. The syntax for X<keyed access to PMCs> keyed access to a
+zero-based integer keys. The syntax for X<keyed access to PMCs> keyed access to a
 PMC puts the key in square brackets after the register name:
 
   new P0, "Array"     # obtain a new array object
@@ -1234,7 +1234,7 @@
 allocation (how much storage the array provides) from the actual
 element count. The currently proposed syntax uses C<set> to set or
 retrieve the allocated size of an array, and an C<elements>
-X<elements opcode (PASM)> opcode to set or retreive the count of
+X<elements opcode (PASM)> opcode to set or retrieve the count of
 elements stored in the array.
 
   set P0, 100         # allocate store for 100 elements
@@ -1731,7 +1731,7 @@
 Z<CHP-5-SECT-6.2.1>
 
 To store a lexical variable in the current scope pad, use C<store_lex>.
-Likewise, use C<find_lex> to retrieve a variable from the current pad pad.
+Likewise, use C<find_lex> to retrieve a variable from the current pad.
 
   new P0, "Int"            # create a variable
   set P0, 10               # assign value to it
@@ -2494,9 +2494,9 @@
     invokecc
     end
 
-Subroutines marked with C<@LOAD> run as soon as they're loaded (before
+Subroutines marked with C<:load> run as soon as they're loaded (before
 C<load_bytecode> returns), rather than waiting to be called. A
-subroutine marked with C<@MAIN> will always run first, no matter what
+subroutine marked with C<:main> will always run first, no matter what
 name you give it or where you define it in the file.
 
   # file3.pasm
@@ -3140,7 +3140,7 @@
 #  Tables
 #  ......
 #  A 2x2 table with top header row looks like this:
-#  
+#
 #  =begin table An Example Table
 #  =headrow
 #  =row

Modified: branches/calling_conventions/docs/book/ch06_library.pod
==============================================================================
--- branches/calling_conventions/docs/book/ch06_library.pod	(original)
+++ branches/calling_conventions/docs/book/ch06_library.pod	Sun Dec  7 22:37:43 2008
@@ -27,7 +27,10 @@
 
 =head2 F<Config.fpmc>
 
-
+C<Config.fpmc> is generated during the build process. The file defines a
+hash PMC that contains information about the system where Parrot was
+built. By accessing the data in this PMC, you can determine how Parrot
+was compiled and what features and libraries it has available.
 
 =head1 Perl-Inspired Libraries
 
@@ -65,10 +68,17 @@
 
 =head2 PCRE
 
+PCRE is a library that implements regular expressions using Perl 5 syntax.
+
+
 =head2 NCurses
 
+NCurses is a library for manipulating the console and the cursor.
+
 =head2 OpenGL
 
+OpenGL is a 3D graphics library.
+
 =head2 Postgres SQL
 
 =head2 SDL

Modified: branches/calling_conventions/docs/book/ch11_pmcs.pod
==============================================================================
--- branches/calling_conventions/docs/book/ch11_pmcs.pod	(original)
+++ branches/calling_conventions/docs/book/ch11_pmcs.pod	Sun Dec  7 22:37:43 2008
@@ -79,7 +79,7 @@
       /* Attributes defined here */
 
       /* VTABLE and METHODs defined here. */
-  
+
   }
 
 The C<extends> keyword is optional, but allows us to specify that this
@@ -116,7 +116,7 @@
   pmclass Foo {
     ATTR INTVAL bar;
 	ATTR PMC baz;
-	
+
 	...
   }
 
@@ -128,7 +128,7 @@
   attrs->baz = pmc_new( ... )     /* It's a PMC */
 
 Notice how the type name of the attributes structure is C<Parrot_>,
-followed by the name of the PMC with the same capitalzation as is used
+followed by the name of the PMC with the same capitalization as is used
 in the C<pmclass> definition, followed by C<_Attributes>. The macro to
 return this structure is C<PARROT_> followed by the name of the PMC in
 all caps.
@@ -294,7 +294,7 @@
 #  Tables
 #  ......
 #  A 2x2 table with top header row looks like this:
-#  
+#
 #  =begin table An Example Table
 #  =headrow
 #  =row

Modified: branches/calling_conventions/docs/book/ch12_opcodes.pod
==============================================================================
--- branches/calling_conventions/docs/book/ch12_opcodes.pod	(original)
+++ branches/calling_conventions/docs/book/ch12_opcodes.pod	Sun Dec  7 22:37:43 2008
@@ -9,7 +9,7 @@
 are individual instructions that implement low-level operations in Parrot N<In the
 world of microprocessors, the word "opcode" typically refers to the numeric identifier
 for each instructions. The human-readable word used in the associated assembly language
-is called the "mnemonic". An assembler, among other tasks, is responsble for converting
+is called the "mnemonic". An assembler, among other tasks, is responsible for converting
 mnemonics into opcodes for execution. In Parrot, instead of referring to an instruction
 by different names depending on what form it's in, we just call them all "opcodes">. Of
 course the list of things that qualify as "low-level" in Parrot can be pretty advanced
@@ -35,8 +35,8 @@
 only available as optimizations in certain compilers, some are intended for general use,
 and some are just interesing flights of fancy with no practical benefits. One runcore that
 we've already seen is the debugging runcore which prompts the user for commands between
-executing each opcode. Another valuable mainteance runcore is the GC dubug core (which runs a
-full sweep of the garbage collector between each opcode). 
+executing each opcode. Another valuable maintenance runcore is the GC dubug core (which runs a
+full sweep of the garbage collector between each opcode).
 
 =over 4
 
@@ -47,7 +47,7 @@
 to be called by the core. The slow core performs bounds checking to ensure that the next
 opcode to be called is properly in bounds. Because of this modular approach where opcodes
 are treated as separate executable entities many other runcores, especially diagnostic and
-maintenance cores are based on this design. 
+maintenance cores are based on this design.
 
 =item* Fast Core
 
@@ -57,7 +57,7 @@
 =item* Computed Goto Core
 
 I<Computed Goto> is a feature of some C compilers where a label is treated as a piece of
-data that can be stored in an array. Each opcode is simply a lable in a very large
+data that can be stored in an array. Each opcode is simply a label in a very large
 function, and the labels are stored in an array. Calling an opcode is as easy as taking
 that opcode's number as the index of the label array, and calling the associated label.
 Sound complicated? It is a little, especially to C programmers who are not used to these
@@ -105,7 +105,7 @@
 
 =head3 Opcode Control Flow
 
-=head2 The Opcode Compiler 
+=head2 The Opcode Compiler
 
 =head2 Dynops
 
@@ -176,7 +176,7 @@
 #  Tables
 #  ......
 #  A 2x2 table with top header row looks like this:
-#  
+#
 #  =begin table An Example Table
 #  =headrow
 #  =row

Modified: branches/calling_conventions/examples/benchmarks/primes2.pir
==============================================================================
--- branches/calling_conventions/examples/benchmarks/primes2.pir	(original)
+++ branches/calling_conventions/examples/benchmarks/primes2.pir	Sun Dec  7 22:37:43 2008
@@ -3,7 +3,7 @@
 
 =head1 NAME
 
-examples/benchmarks/primes2.pir - Calculate prime numbers < 10000
+examples/benchmarks/primes2.pir - Calculate prime numbers < 5000
 
 =head1 SYNOPSIS
 
@@ -11,7 +11,7 @@
 
 =head1 DESCRIPTION
 
-Calculates all the prime numbers up to 10000 and prints out the number
+Calculates all the prime numbers up to 5000 and prints out the number
 of primes and the last one found. Use PMCs, not ints.
 
 =cut
@@ -23,7 +23,7 @@
   i   = new 'Integer'
   i   = 0
   max = new 'Integer'
-  max = 1000
+  max = 5000
   i6  = new 'Integer'
   i6  = 0
   i7  = new 'Integer'

Modified: branches/calling_conventions/ext/SQLite3/DBDI.pm
==============================================================================
--- branches/calling_conventions/ext/SQLite3/DBDI.pm	(original)
+++ branches/calling_conventions/ext/SQLite3/DBDI.pm	Sun Dec  7 22:37:43 2008
@@ -1,3 +1,7 @@
+# Basic Perl 6 database layer
+# $Id$
+# Copyright (C) 2008 The Perl Foundation
+
 class DBDI::DriverManager {
     method getConnection($url, $login, $password) {
         my $c1 = $url.index(":");
@@ -8,7 +12,7 @@
 
         my $c2 = $rurl.index(":");
         my $driver = "DBDI::Driver::"~substr($rurl, 0, $c2);
-        eval "use "~$driver; 
+        eval "use "~$driver;
         if ($!) { die "Couldn't load "~$driver~": "~$!; }
 
         my $r = substr($rurl, $c2+1);

Modified: branches/calling_conventions/ext/SQLite3/DBDI/Driver/SQLite3.pm
==============================================================================
--- branches/calling_conventions/ext/SQLite3/DBDI/Driver/SQLite3.pm	(original)
+++ branches/calling_conventions/ext/SQLite3/DBDI/Driver/SQLite3.pm	Sun Dec  7 22:37:43 2008
@@ -1,3 +1,7 @@
+# SQLite3 Database Backend for DBDI
+# $Id$
+# Copyright (C) 2008 The Perl Foundation
+
 use SQLite3;
 use DBDI;
 
@@ -12,11 +16,11 @@
         return $o;
     }
 
-    method createStatement() { 
-        return DBDI::Statement::SQLite3.new(:connection(self)); 
+    method createStatement() {
+        return DBDI::Statement::SQLite3.new(:connection(self));
     }
 
-    method prepareStatement($sql) { 
+    method prepareStatement($sql) {
         my $sth := SQLite::prepare($.dbHandle, $sql);
         my $p = DBDI::PreparedStatement::SQLite3.new(:connection(self), :sql($sql), :stHandle($sth));
         return $p;
@@ -24,7 +28,7 @@
 }
 
 class DBDI::Statement::SQLite3 is DBDI::Statement {
-    has $connection; 
+    has $connection;
 
     method executeQuery($sql) {
         my $temp_statement = $connection.prepareStatement($sql);
@@ -38,7 +42,7 @@
     }
 }
 
-class DBDI::PreparedStatement::SQLite3 is DBDI::PreparedStatement { 
+class DBDI::PreparedStatement::SQLite3 is DBDI::PreparedStatement {
     has $connection;
     has $stHandle;
     has @columns;
@@ -63,11 +67,11 @@
         my $cn; my $i =0;
         while ($cn = SQLite::column_name($stHandle, $i)) {
             %columns{$cn} = $i++;
-            push @columns, $cn; 
+            push @columns, $cn;
         }
     }
 
-    method next () { 
+    method next () {
         SQLite::step($stHandle);
         if (! +@columns) { self!fillColumns(); }
         my $res = self!errorCheck();
@@ -77,9 +81,9 @@
         SQLite::finalize($stHandle);
         return self!errorCheck();
     }
-    
-    method bind($num, $data) { 
-        @bind_params[$num] = $data; 
+
+    method bind($num, $data) {
+        @bind_params[$num] = $data;
         SQLite::bind_text($stHandle, $num, $data, chars($data), -1);
         return self!errorCheck();
     }

Modified: branches/calling_conventions/include/parrot/atomic/gcc_x86.h
==============================================================================
--- branches/calling_conventions/include/parrot/atomic/gcc_x86.h	(original)
+++ branches/calling_conventions/include/parrot/atomic/gcc_x86.h	Sun Dec  7 22:37:43 2008
@@ -20,10 +20,18 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
-void * parrot_i386_cmpxchg(void *volatile *ptr, void *expect, void *update);
+void * parrot_i386_cmpxchg(
+    ARGMOD(void *volatile *ptr),
+    ARGIN(void *expect),
+    ARGIN(void *update))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*ptr);
 
 PARROT_EXPORT
-long parrot_i386_xadd(volatile long *l, long amount);
+long parrot_i386_xadd(ARGIN(volatile long *l), long amount)
+        __attribute__nonnull__(1);
 
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/atomic/gcc_x86.c */

Modified: branches/calling_conventions/include/parrot/hash.h
==============================================================================
--- branches/calling_conventions/include/parrot/hash.h	(original)
+++ branches/calling_conventions/include/parrot/hash.h	Sun Dec  7 22:37:43 2008
@@ -216,7 +216,8 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*hash);
 
-void parrot_chash_destroy_values(PARROT_INTERP, ARGMOD(Hash *hash),
+void parrot_chash_destroy_values(PARROT_INTERP,
+    ARGMOD(Hash *hash),
     ARGIN(value_free func))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)

Modified: branches/calling_conventions/include/parrot/misc.h
==============================================================================
--- branches/calling_conventions/include/parrot/misc.h	(original)
+++ branches/calling_conventions/include/parrot/misc.h	Sun Dec  7 22:37:43 2008
@@ -86,8 +86,14 @@
 PARROT_CONST_FUNCTION
 INTVAL intval_mod(INTVAL i2, INTVAL i3);
 
-void Parrot_quicksort(PARROT_INTERP, void **data, UINTVAL n, PMC *cmp)
-        __attribute__nonnull__(1);
+void Parrot_quicksort(PARROT_INTERP,
+    ARGMOD(void **data),
+    UINTVAL n,
+    ARGIN(PMC *cmp))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*data);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL

Modified: branches/calling_conventions/include/parrot/multidispatch.h
==============================================================================
--- branches/calling_conventions/include/parrot/multidispatch.h	(original)
+++ branches/calling_conventions/include/parrot/multidispatch.h	Sun Dec  7 22:37:43 2008
@@ -123,46 +123,71 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 MMD_Cache * Parrot_mmd_cache_create(PARROT_INTERP)
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-void Parrot_mmd_cache_destroy(PARROT_INTERP, MMD_Cache *cache)
-        __attribute__nonnull__(1);
+void Parrot_mmd_cache_destroy(PARROT_INTERP, ARGMOD(MMD_Cache *cache))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*cache);
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_mmd_cache_lookup_by_types(PARROT_INTERP,
-    MMD_Cache *cache,
-    const char *name,
-    PMC *types)
-        __attribute__nonnull__(1);
+    ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name),
+    ARGIN(PMC *types))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*cache);
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_mmd_cache_lookup_by_values(PARROT_INTERP,
-    MMD_Cache *cache,
-    const char *name,
-    PMC *values)
-        __attribute__nonnull__(1);
+    ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name),
+    ARGIN(PMC *values))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        FUNC_MODIFIES(*cache);
 
 PARROT_EXPORT
-void Parrot_mmd_cache_mark(PARROT_INTERP, MMD_Cache *cache)
-        __attribute__nonnull__(1);
+void Parrot_mmd_cache_mark(PARROT_INTERP, ARGMOD(MMD_Cache *cache))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*cache);
 
 PARROT_EXPORT
 void Parrot_mmd_cache_store_by_types(PARROT_INTERP,
-    MMD_Cache *cache,
-    const char *name,
-    PMC *types,
-    PMC *chosen)
-        __attribute__nonnull__(1);
+    ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name),
+    ARGIN(PMC *types),
+    ARGIN(PMC *chosen))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*cache);
 
 PARROT_EXPORT
 void Parrot_mmd_cache_store_by_values(PARROT_INTERP,
-    MMD_Cache *cache,
-    const char *name,
-    PMC *values,
-    PMC *chosen)
-        __attribute__nonnull__(1);
+    ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name),
+    ARGIN(PMC *values),
+    ARGIN(PMC *chosen))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5)
+        FUNC_MODIFIES(*cache);
 
 PARROT_EXPORT
 void Parrot_mmd_destroy(PARROT_INTERP)

Modified: branches/calling_conventions/include/parrot/pmc.h
==============================================================================
--- branches/calling_conventions/include/parrot/pmc.h	(original)
+++ branches/calling_conventions/include/parrot/pmc.h	Sun Dec  7 22:37:43 2008
@@ -49,7 +49,7 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-INTVAL PMC_is_null(SHIM_INTERP, NULLOK(const PMC *pmc));
+INTVAL PMC_is_null(SHIM_INTERP, ARGIN_NULLOK(const PMC *pmc));
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
@@ -97,8 +97,10 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void temporary_pmc_free(PARROT_INTERP, PMC *pmc)
-        __attribute__nonnull__(1);
+void temporary_pmc_free(PARROT_INTERP, ARGMOD(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*pmc);
 
 PARROT_CANNOT_RETURN_NULL
 PMC * temporary_pmc_new(PARROT_INTERP, INTVAL base_type)

Modified: branches/calling_conventions/include/parrot/register.h
==============================================================================
--- branches/calling_conventions/include/parrot/register.h	(original)
+++ branches/calling_conventions/include/parrot/register.h	Sun Dec  7 22:37:43 2008
@@ -80,6 +80,7 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 Parrot_Context * Parrot_context_ref_trace(PARROT_INTERP,
     ARGMOD(Parrot_Context *ctx),
     ARGIN(const char *file),

Modified: branches/calling_conventions/include/parrot/string_funcs.h
==============================================================================
--- branches/calling_conventions/include/parrot/string_funcs.h	(original)
+++ branches/calling_conventions/include/parrot/string_funcs.h	Sun Dec  7 22:37:43 2008
@@ -473,6 +473,7 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
+PARROT_CAN_RETURN_NULL
 char * string_to_cstring_nullable(PARROT_INTERP,
     ARGIN_NULLOK(const STRING *s))
         __attribute__nonnull__(1);
@@ -522,6 +523,10 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*tc);
 
+void string_free(PARROT_INTERP, ARGIN(STRING *s))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 STRING* uint_to_str(PARROT_INTERP,

Modified: branches/calling_conventions/include/parrot/sub.h
==============================================================================
--- branches/calling_conventions/include/parrot/sub.h	(original)
+++ branches/calling_conventions/include/parrot/sub.h	Sun Dec  7 22:37:43 2008
@@ -287,7 +287,7 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(* ctx);
 
-void  mark_context_start(void);
+void mark_context_start(void);
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 Parrot_sub * new_closure(PARROT_INTERP)

Modified: branches/calling_conventions/languages/APL/Configure.pl
==============================================================================
--- branches/calling_conventions/languages/APL/Configure.pl	(original)
+++ branches/calling_conventions/languages/APL/Configure.pl	Sun Dec  7 22:37:43 2008
@@ -1,4 +1,6 @@
 #! perl
+# $Id$
+# Copyright (C) 2008 The Perl Foundation
 
 use strict;
 use warnings;

Modified: branches/calling_conventions/languages/APL/src/pmc/aplvector.pmc
==============================================================================
--- branches/calling_conventions/languages/APL/src/pmc/aplvector.pmc	(original)
+++ branches/calling_conventions/languages/APL/src/pmc/aplvector.pmc	Sun Dec  7 22:37:43 2008
@@ -19,6 +19,8 @@
 
 =item INTVAL size_of_shape(INTERP, PMC)
 
+=cut
+
 */
 
 #include "parrot/parrot.h"

Modified: branches/calling_conventions/languages/lua/src/lib/complex.pir
==============================================================================
--- branches/calling_conventions/languages/lua/src/lib/complex.pir	(original)
+++ branches/calling_conventions/languages/lua/src/lib/complex.pir	Sun Dec  7 22:37:43 2008
@@ -234,9 +234,7 @@
     .param pmc z :optional
     .param pmc extra :slurpy
     $P1 = get(1, z)
-    $N0 = $P1.'abs'()
-    new $P0, 'LuaNumber'
-    set $P0, $N0
+    $P0 = abs $P1
     .return ($P0)
 .end
 
@@ -441,7 +439,6 @@
 =cut
 
 .sub 'pow'
-    .param pmc extra :slurpy
     .param pmc z :optional
     .param pmc w :optional
     .param pmc extra :slurpy

Modified: branches/calling_conventions/languages/lua/src/lib/mathx.pir
==============================================================================
--- branches/calling_conventions/languages/lua/src/lib/mathx.pir	(original)
+++ branches/calling_conventions/languages/lua/src/lib/mathx.pir	Sun Dec  7 22:37:43 2008
@@ -264,18 +264,16 @@
     $P0 = argv[0]
     i = 1
     lua_checknumber(i, $P0)
-    m = clone $P0
+    m = $P0
   L1:
     if i >= argc goto L2
     $P0 = argv[i]
     inc i
     lua_checknumber(i, $P0)
-    y = clone $P0
-    m = m.'fmax'(y)
+    m = m.'fmax'($P0)
     goto L1
   L2:
-    $P0 = clone m
-    .return ($P0)
+    .return (m)
 .end
 
 
@@ -292,18 +290,16 @@
     $P0 = argv[0]
     i = 1
     lua_checknumber(i, $P0)
-    m = clone $P0
+    m = $P0
   L1:
     if i >= argc goto L2
     $P0 = argv[i]
     inc i
     lua_checknumber(i, $P0)
-    y = clone $P0
-    m = m.'fmin'(y)
+    m = m.'fmin'($P0)
     goto L1
   L2:
-    $P0 = clone m
-    .return ($P0)
+    .return (m)
 .end
 
 

Modified: branches/calling_conventions/languages/lua/t/complex.t
==============================================================================
--- branches/calling_conventions/languages/lua/t/complex.t	(original)
+++ branches/calling_conventions/languages/lua/t/complex.t	Sun Dec  7 22:37:43 2008
@@ -22,7 +22,7 @@
 use FindBin;
 use lib "$FindBin::Bin";
 
-use Parrot::Test tests => 7;
+use Parrot::Test tests => 25;
 use Parrot::Config;
 use Test::More;
 use Parrot::Test::Lua;
@@ -85,6 +85,154 @@
 /^[^:]+: [^:]+:\d+: bad argument #1 to 'real' \(number expected, got string\)\nstack traceback:\n/
 OUTPUT
 
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function abs' );
+require 'complex'
+z = complex.new(3, 4)
+a = z:abs()
+print(a)
+print(type(a))
+CODE
+5
+number
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function acos' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:acos())
+CODE
+0.936812-2.30551i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function acosh' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:acosh())
+CODE
+2.30551+0.936812i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function asin' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:asin())
+CODE
+0.633984+2.30551i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function asinh' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:asinh())
+CODE
+2.29991+0.917617i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function atan' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:atan())
+CODE
+1.44831+0.158997i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function atanh' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:atanh())
+CODE
+0.117501+1.40992i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function conj' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:conj())
+CODE
+3-4i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function cos' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:cos())
+CODE
+-27.0349-3.85115i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function cosh' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:cosh())
+CODE
+-6.58066-7.58155i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function exp' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:exp())
+CODE
+-13.1288-15.2008i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function log' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:log())
+CODE
+1.60944+0.927295i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function pow' );
+require 'complex'
+z = complex.new(3, 4)
+w = complex.new(2, 1)
+print(z:pow(w))
+CODE
+-9.38086-3.1341i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function sin' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:sin())
+CODE
+3.85374-27.0168i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function sinh' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:sinh())
+CODE
+-6.54812-7.61923i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function sqrt' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:sqrt())
+CODE
+2+1i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function tan' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:tan())
+CODE
+-0.000187346+0.999356i
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function tanh' );
+require 'complex'
+z = complex.new(3, 4)
+print(z:tanh())
+CODE
+1.00071+0.00490826i
+OUTPUT
+
 
 # Local Variables:
 #   mode: cperl

Modified: branches/calling_conventions/languages/lua/t/mathx.t
==============================================================================
--- branches/calling_conventions/languages/lua/t/mathx.t	(original)
+++ branches/calling_conventions/languages/lua/t/mathx.t	Sun Dec  7 22:37:43 2008
@@ -22,7 +22,7 @@
 use FindBin;
 use lib "$FindBin::Bin";
 
-use Parrot::Test tests => 23;
+use Parrot::Test tests => 37;
 use Parrot::Config;
 use Test::More;
 use Parrot::Test::Lua;
@@ -85,6 +85,13 @@
 /^1\.259/
 OUTPUT
 
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function copysign' );
+require 'mathx'
+print(math.copysign(3.14, -2))
+CODE
+/^-3\.14/
+OUTPUT
+
 language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function erf' );
 require 'mathx'
 print(math.erf(2))
@@ -113,6 +120,42 @@
 /^6\.389/
 OUTPUT
 
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function fdim' );
+require 'mathx'
+print(math.fdim(7, 3))
+CODE
+/^4$/
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function fma' );
+require 'mathx'
+print(math.fma(2, 3, 4))
+CODE
+/^10$/
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function fmax' );
+require 'mathx'
+print(math.fmax(1))
+print(math.fmax(1, 2))
+print(math.fmax(1, 2, 3, -4))
+CODE
+1
+2
+3
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function fmin' );
+require 'mathx'
+print(math.fmin(1))
+print(math.fmin(1, 2))
+print(math.fmin(1, 2, 3, -4))
+CODE
+1
+1
+-4
+OUTPUT
+
 language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function fpclassify' );
 require 'mathx'
 print(math.fpclassify(1))
@@ -197,6 +240,71 @@
 /^5$/
 OUTPUT
 
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function nearbyint' );
+require 'mathx'
+print(math.nearbyint(3.14))
+CODE
+/^3$/
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function nextafter' );
+require 'mathx'
+print(math.nextafter(3.14, 5))
+CODE
+/^3\.14$/
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function nexttoward' );
+require 'mathx'
+print(math.nexttoward(3.14, 5))
+CODE
+/^3\.14$/
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function remainder' );
+require 'mathx'
+print(math.remainder(4, 3))
+CODE
+/^1$/
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function rint' );
+require 'mathx'
+print(math.rint(3.14))
+CODE
+/^3$/
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function round' );
+require 'mathx'
+print(math.round(3.14))
+CODE
+/^3$/
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function scalbn' );
+require 'mathx'
+print(math.scalbn(2, 3))
+CODE
+/^16$/
+OUTPUT
+
+language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function signbit' );
+require 'mathx'
+print(math.signbit(3.14))
+print(math.signbit(-3.14))
+CODE
+0
+1
+OUTPUT
+
+language_output_like( 'lua', << 'CODE', << 'OUTPUT', 'function trunc' );
+require 'mathx'
+print(math.trunc(3.14))
+CODE
+/^3$/
+OUTPUT
+
 
 # Local Variables:
 #   mode: cperl

Modified: branches/calling_conventions/languages/m4/src/macro.pir
==============================================================================
--- branches/calling_conventions/languages/m4/src/macro.pir	(original)
+++ branches/calling_conventions/languages/m4/src/macro.pir	Sun Dec  7 22:37:43 2008
@@ -178,14 +178,7 @@
 TOKEN_FUNC:
   .local pmc func
   func = symbol['func']
-  # indirect call of subs, seems to need elaborate PIR syntax
-  .begin_call
-    .set_arg state
-    .set_arg arguments
-  .call func
-    ret_func_1:
-    .result text
-  .end_call
+  (text) = func( state, arguments )
 
 FINISH_CALL_MACRO:
   .return ( text )

Modified: branches/calling_conventions/languages/perl6/config/makefiles/root.in
==============================================================================
--- branches/calling_conventions/languages/perl6/config/makefiles/root.in	(original)
+++ branches/calling_conventions/languages/perl6/config/makefiles/root.in	Sun Dec  7 22:37:43 2008
@@ -42,6 +42,7 @@
   src/gen_grammar.pir \
   src/gen_actions.pir \
   src/gen_builtins.pir \
+  src/gen_metaop.pir \
   src/gen_junction.pir \
   src/parser/expression.pir \
   src/parser/quote_expression.pir \
@@ -113,7 +114,7 @@
 	$(PBC_TO_EXE) perl6.pbc
 
 # the default target
-perl6.pbc: $(PARROT) $(SOURCES)
+perl6.pbc: $(PARROT) $(SOURCES) $(BUILTINS_PIR)
 	$(PARROT) $(PARROT_ARGS) -o perl6.pbc perl6.pir
 
 installable_perl6$(EXE): perl6.pbc
@@ -131,8 +132,11 @@
 	$(PARROT) $(PARROT_ARGS) $(NQP) --output=src/gen_actions.pir \
 	    --encoding=fixed_8 --target=pir src/parser/actions.pm
 
-src/gen_builtins.pir: $(BUILTINS_PIR)
-	$(CAT) $(BUILTINS_PIR) >src/gen_builtins.pir
+src/gen_builtins.pir: build/gen_builtins_pir.pl
+	$(PERL) build/gen_builtins_pir.pl $(BUILTINS_PIR) > src/gen_builtins.pir
+
+src/gen_metaop.pir: build/gen_metaop_pir.pl
+	$(PERL) build/gen_metaop_pir.pl > src/gen_metaop.pir
 
 src/gen_junction.pir: build/gen_junction_pir.pl
 	$(PERL) build/gen_junction_pir.pl src/gen_junction.pir
@@ -243,9 +247,7 @@
   perl6$(EXE) \
   installable_perl6$(EXE) \
   Test.pir \
-  src/gen_grammar.pir \
-  src/gen_actions.pir \
-  src/gen_builtins.pir \
+  src/gen_*.pir \
   $(PMC_DIR)/*.h \
   $(PMC_DIR)/*.c \
   $(PMC_DIR)/*.dump \

Modified: branches/calling_conventions/languages/perl6/docs/spectest-progress.csv
==============================================================================
--- branches/calling_conventions/languages/perl6/docs/spectest-progress.csv	(original)
+++ branches/calling_conventions/languages/perl6/docs/spectest-progress.csv	Sun Dec  7 22:37:43 2008
@@ -197,3 +197,5 @@
 "2008-12-03 00:00",33449,227,6565,4689,10,382,1484,9112
 "2008-12-04 00:00",33477,227,6569,4703,0,384,1482,9116
 "2008-12-05 00:00",33499,228,6577,4710,0,384,1483,9121
+"2008-12-06 00:00",33539,228,6579,4708,0,370,1501,9123
+"2008-12-07 00:00",33590,231,6596,4717,0,373,1506,9140

Modified: branches/calling_conventions/languages/perl6/perl6.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/perl6.pir	(original)
+++ branches/calling_conventions/languages/perl6/perl6.pir	Sun Dec  7 22:37:43 2008
@@ -29,25 +29,23 @@
 .sub 'onload' :load :init :anon
     load_bytecode 'PCT.pbc'
 
-    .local pmc p6meta
+    .local pmc p6meta, perl6
     p6meta = get_hll_global ['Perl6Object'], '$!P6META'
-    p6meta.'new_class'('Perl6::Compiler', 'parent'=>'PCT::HLLCompiler')
-.end
+    perl6 = p6meta.'new_class'('Perl6::Compiler', 'parent'=>'PCT::HLLCompiler')
 
-.sub 'init' :vtable :method
     load_bytecode 'config.pbc'
 
-    self.'language'('Perl6')
-    self.'parsegrammar'('Perl6::Grammar')
-    self.'parseactions'('Perl6::Grammar::Actions')
+    perl6.'language'('Perl6')
+    perl6.'parsegrammar'('Perl6::Grammar')
+    perl6.'parseactions'('Perl6::Grammar::Actions')
 
     ##  set the compilation stages in the @stages attribute
     $P0 = split ' ', 'parse past check_syntax post pir evalpmc'
-    setattribute self, '@stages', $P0
+    setattribute perl6, '@stages', $P0
 
     ##  set the command line options
     $P0 = split ' ', 'c e=s help|h target=s trace|t=s encoding=s output|o=s version|v'
-    setattribute self, '@cmdoptions', $P0
+    setattribute perl6, '@cmdoptions', $P0
 
     ##  set the $usage attribute
     $P0 = new 'String'
@@ -62,7 +60,7 @@
   -o, --output=[name]  specify name of output file
   -v, --version        display version information
 USAGE
-    setattribute self, '$usage', $P0
+    setattribute perl6, '$usage', $P0
 
     ##  set the $version attribute
     .local pmc cfg
@@ -87,7 +85,7 @@
   _handler:
     pop_eh
     $P0 .= ".\n\nCopyright 2006-2008, The Perl Foundation.\n"
-    setattribute self, '$version', $P0
+    setattribute perl6, '$version', $P0
 
     ##  create a list for holding the stack of nested blocks
     $P0 = new 'List'
@@ -224,6 +222,7 @@
 .include 'src/parser/expression.pir'
 .include 'src/parser/quote_expression.pir'
 .include 'src/gen_actions.pir'
+.include 'src/gen_metaop.pir'
 .include 'src/gen_junction.pir'
 
 

Modified: branches/calling_conventions/languages/perl6/src/builtins/any-list.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/src/builtins/any-list.pir	(original)
+++ branches/calling_conventions/languages/perl6/src/builtins/any-list.pir	Sun Dec  7 22:37:43 2008
@@ -65,7 +65,6 @@
 .sub 'join' :multi('String')
     .param string sep
     .param pmc values          :slurpy
-say "in join"
     .tailcall values.'join'(sep)
 .end
 
@@ -73,7 +72,6 @@
 .sub 'join' :method :multi(_)
     .param string sep          :optional
     .param int has_sep         :opt_flag
-say "in join2"
     if has_sep goto have_sep
     sep = ' '
   have_sep:

Modified: branches/calling_conventions/languages/perl6/src/builtins/any-str.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/src/builtins/any-str.pir	(original)
+++ branches/calling_conventions/languages/perl6/src/builtins/any-str.pir	Sun Dec  7 22:37:43 2008
@@ -905,22 +905,66 @@
     global_flag = get_hll_global ['Bool'], 'False'
   have_global:
 
+    .local int times                    # how many times to substitute
+    times = 1                           # the default is to substitute once
+    unless global_flag goto check_x
+    times = -1                          # a negative number means all of them (:global)
+  check_x:
+
+    .local pmc x_opt
+    x_opt = options['x']
+    if null x_opt goto check_nth
+    times = x_opt
+    if times < 0 goto x_fail
+  check_nth:
+
+    .local pmc nth_opt
+    nth_opt = options['nth']
+    unless null nth_opt goto check_global
+    nth_opt = get_hll_global ['Bool'], 'True'
+  check_global:
+
+
     .local string result
     result = self
     result = clone result
 
-    .local int pos, substringlen, replacelen
+    if times == 0 goto subst_done
+
+    .local int startpos, pos, substringlen, replacelen
+    startpos = 0
     pos = 0
     substringlen = length substring
     replacelen = length replacement
+    .local int n_cnt, x_cnt
+    n_cnt = 0
+    x_cnt = 0
   subst_loop:
-    pos = index result, substring, pos
+    pos = index result, substring, startpos
+    startpos = pos + substringlen
     if pos < 0 goto subst_done
+
+    n_cnt += 1
+    $P0 = nth_opt.'ACCEPTS'(n_cnt)
+    unless $P0 goto subst_loop
+
+    if times < 0 goto skip_times
+
+    x_cnt += 1
+    if x_cnt > times goto subst_done
+  skip_times:
+
     substr result, pos, substringlen, replacement
-    pos += replacelen
-    if global_flag goto subst_loop
+    startpos = pos + replacelen
+    goto subst_loop
   subst_done:
     .return (result)
+
+  nth_fail:
+    die "Must pass a non-negative integer to :nth()"
+
+  x_fail:
+    die "Must pass a non-negative integer to :x()"
 .end
 
 
@@ -937,20 +981,58 @@
     global_flag = get_hll_global ['Bool'], 'False'
   have_global:
 
+
+    .local int times                    # how many times to substitute
+    times = 1                           # the default is to substitute once
+    unless global_flag goto check_x
+    times = -1                          # a negative number means all of them (:global)
+  check_x:
+
+    .local pmc x_opt
+    x_opt = options['x']
+    if null x_opt goto check_nth
+    times = x_opt
+    if times < 0 goto x_fail
+  check_nth:
+
+    .local pmc nth_opt
+    nth_opt = options['nth']
+    unless null nth_opt goto build_matches
+    nth_opt = get_hll_global ['Bool'], 'True'
+
+  build_matches:
+    .local string result
+    result = self
+    result = clone result
+
+    if times == 0 goto subst_done
+
     # build a list of matches
     .local pmc matchlist, match
-    .local string result
+    .local int n_cnt, x_cnt
+    n_cnt = 0
+    x_cnt = 0
     matchlist = new 'ResizablePMCArray'
-    result = self
     match = regex(result)
     unless match goto matchlist_done
-    push matchlist, match
-    unless global_flag goto matchlist_done
+
   matchlist_loop:
+    n_cnt += 1
+    $P0 = nth_opt.'ACCEPTS'(n_cnt)
+    unless $P0 goto skip_push
+
+    if times < 0 goto skip_times
+
+    x_cnt += 1
+    if x_cnt > times goto matchlist_done
+  skip_times:
+
+    push matchlist, match
+  skip_push:
+
     $I0 = match.'to'()
     match = regex(match, 'continue'=>$I0)
     unless match goto matchlist_done
-    push matchlist, match
     goto matchlist_loop
   matchlist_done:
 
@@ -962,7 +1044,6 @@
     # now, perform substitutions on matchlist until done
     .local int offset
     offset = 0
-    result = clone result
   subst_loop:
     unless matchlist goto subst_done
     match = shift matchlist
@@ -989,6 +1070,12 @@
     goto subst_loop
   subst_done:
     .return (result)
+
+  nth_fail:
+    die "Must pass a non-negative integer to :nth()"
+
+  x_fail:
+    die "Must pass a non-negative integer to :x()"
 .end
 
 

Modified: branches/calling_conventions/languages/perl6/src/builtins/assign.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/src/builtins/assign.pir	(original)
+++ branches/calling_conventions/languages/perl6/src/builtins/assign.pir	Sun Dec  7 22:37:43 2008
@@ -74,185 +74,56 @@
 .end
 
 
-.sub '!INIT_IF_PROTO'
-    .param pmc var
-    .param pmc val
-    $I0 = defined var
-    if $I0 goto done
-    'infix:='(var, val)
-  done:
-    .return ()
+.sub '!REDUCEMETAOP'
+    .param string opname
+    .param pmc identity
+    .param pmc args                # already :slurpy array by caller
+
+    args.'!flatten'()
+    if args goto reduce
+    if identity == 'fail' goto fail
+    .return (identity)
+
+  fail:
+    .tailcall '!FAIL'()
+
+  reduce:
+    opname = concat 'infix:', opname
+    .local pmc opfunc
+    opfunc = find_name opname
+    .local pmc result
+    result = shift args
+  reduce_loop:
+    unless args goto reduce_done
+    $P0 = shift args
+    result = opfunc(result, $P0)
+    goto reduce_loop
+  reduce_done:
+    .return (result)
 .end
 
 
-.sub 'infix:~='
+.sub '!ASSIGNMETAOP'
+    .param string opname
     .param pmc a
     .param pmc b
-    '!INIT_IF_PROTO'(a, '')
-    concat a, b
-    .return (a)
-.end
-
-
-.sub 'infix:+='
-    .param pmc a
-    .param pmc b
-    '!INIT_IF_PROTO'(a, 0)
-    a += b
-    .return (a)
-.end
-
-
-.sub 'infix:-='
-    .param pmc a
-    .param pmc b
-    '!INIT_IF_PROTO'(a, 0)
-    a -= b
-    .return (a)
-.end
 
-
-.sub 'infix:*='
-    .param pmc a
-    .param pmc b
-    '!INIT_IF_PROTO'(a, 1)
-    a *= b
-    .return (a)
-.end
-
-
-.sub 'infix:/='
-    .param pmc a
-    .param pmc b
-    a /= b
-    .return (a)
-.end
-
-
-.sub 'infix:%='
-    .param pmc a
-    .param pmc b
-    a %= b
-    .return (a)
-.end
-
-
-.sub 'infix:x='
-    .param pmc a
-    .param pmc b
-    repeat a, b
-    .return (a)
-.end
-
-
-## TODO: infix:Y=
-.sub 'infix:**='
-    .param pmc a
-    .param pmc b
-    '!INIT_IF_PROTO'(a, 1)
-    pow $P0, a, b
+    $I0 = defined a
+    if $I0 goto have_a
+    $S0 = concat 'prefix:[', opname
+    concat $S0, ']'
+    $P1 = find_name $S0
+    $P0 = $P1()
     'infix:='(a, $P0)
-    .return (a)
-.end
-
-
-## TODO: infix:xx= infix:||= infix:&&= infix://= infix:^^=
-
-
-.sub 'infix:+<='
-    .param pmc a
-    .param pmc b
-    a <<= b
-    .return (a)
-.end
-
-
-.sub 'infix:+>='
-    .param pmc a
-    .param pmc b
-    a >>= b
-    .return (a)
-.end
-
-
-.sub 'infix:+&='
-    .param pmc a
-    .param pmc b
-    band a, b
-    .return (a)
-.end
-
-
-.sub 'infix:+|='
-    .param pmc a
-    .param pmc b
-    bor a, b
-    .return (a)
-.end
+  have_a:
 
-
-.sub 'infix:+^='
-    .param pmc a
-    .param pmc b
-    bxor a, b
-    .return (a)
-.end
-
-
-.sub 'infix:~&='
-    .param pmc a
-    .param pmc b
-    a = bands a, b
-    .return (a)
-.end
-
-
-.sub 'infix:~|='
-    .param pmc a
-    .param pmc b
-    bors a, b
-    .return (a)
-.end
-
-
-.sub 'infix:~^='
-    .param pmc a
-    .param pmc b
-    bxors a, b
-    .return (a)
-.end
-
-
-.sub 'infix:?&='
-    .param pmc a
-    .param pmc b
-    band a, b
-    $I0 = istrue a
-    a = $I0
-    .return (a)
-.end
-
-
-.sub 'infix:?|='
-    .param pmc a
-    .param pmc b
-    bor a, b
-    $I0 = istrue a
-    a = $I0
-    .return (a)
-.end
-
-
-.sub 'infix:?^='
-    .param pmc a
-    .param pmc b
-    bxor a, b
-    $I0 = istrue a
-    a = $I0
+    opname = concat 'infix:', opname
+    $P1 = find_name opname
+    $P0 = $P1(a, b)
+    'infix:='(a, $P0)
     .return (a)
 .end
 
-
 =back
 
 =cut

Modified: branches/calling_conventions/languages/perl6/src/builtins/misc.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/src/builtins/misc.pir	(original)
+++ branches/calling_conventions/languages/perl6/src/builtins/misc.pir	Sun Dec  7 22:37:43 2008
@@ -30,6 +30,8 @@
 
 =back
 
+=cut
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/calling_conventions/languages/perl6/src/builtins/op.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/src/builtins/op.pir	(original)
+++ branches/calling_conventions/languages/perl6/src/builtins/op.pir	Sun Dec  7 22:37:43 2008
@@ -31,7 +31,10 @@
 .sub 'postfix:++' :multi(_)
     .param pmc a
     $P0 = clone a
-    '!INIT_IF_PROTO'(a, 0)
+    $I0 = defined a
+    if $I0 goto have_a
+    'infix:='(a, 0)
+  have_a:
     inc a
     .return ($P0)
 .end
@@ -39,7 +42,10 @@
 .sub 'postfix:--' :multi(_)
     .param pmc a
     $P0 = clone a
-    '!INIT_IF_PROTO'(a, 0)
+    $I0 = defined a
+    if $I0 goto have_a
+    'infix:='(a, 0)
+  have_a:
     dec a
     .return ($P0)
 .end
@@ -47,7 +53,10 @@
 
 .sub 'prefix:++' :multi(_)
     .param pmc a
-    '!INIT_IF_PROTO'(a, 0)
+    $I0 = defined a
+    if $I0 goto have_a
+    'infix:='(a, 0)
+  have_a:
     inc a
     .return (a)
 .end
@@ -55,7 +64,10 @@
 
 .sub 'prefix:--' :multi(_)
     .param pmc a
-    '!INIT_IF_PROTO'(a, 0)
+    $I0 = defined a
+    if $I0 goto have_a
+    'infix:='(a, 0)
+  have_a:
     dec a
     .return (a)
 .end

Modified: branches/calling_conventions/languages/perl6/src/classes/Capture.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/src/classes/Capture.pir	(original)
+++ branches/calling_conventions/languages/perl6/src/classes/Capture.pir	Sun Dec  7 22:37:43 2008
@@ -13,7 +13,7 @@
 .namespace ['Perl6Capture']
 
 .sub 'onload' :anon :init :load
-    load_bytecode 'PCT.pbc'
+    load_bytecode 'Parrot/Capture_PIR.pbc'
     .local pmc p6meta, captureproto
     p6meta = get_hll_global ['Perl6Object'], '$!P6META'
     captureproto = p6meta.'new_class'('Perl6Capture', 'parent'=>'Capture_PIR Any', 'name'=>'Capture')

Modified: branches/calling_conventions/languages/perl6/src/classes/Object.pir
==============================================================================
--- branches/calling_conventions/languages/perl6/src/classes/Object.pir	(original)
+++ branches/calling_conventions/languages/perl6/src/classes/Object.pir	Sun Dec  7 22:37:43 2008
@@ -25,7 +25,7 @@
 .namespace []
 .sub 'onload' :anon :init :load
     .local pmc p6meta
-    load_bytecode 'P6object.pbc'
+    load_bytecode 'PCT.pbc'
     $P0 = get_root_global ['parrot'], 'P6metaclass'
     $P0.'new_class'('Perl6Object', 'name'=>'Object')
     p6meta = $P0.'HOW'()

Modified: branches/calling_conventions/languages/perl6/src/parser/actions.pm
==============================================================================
--- branches/calling_conventions/languages/perl6/src/parser/actions.pm	(original)
+++ branches/calling_conventions/languages/perl6/src/parser/actions.pm	Sun Dec  7 22:37:43 2008
@@ -920,8 +920,8 @@
                         ##  get the names of the tagsets, if any, from the ast
                         my $tagsets := $( $aux<postcircumfix>[0] );
                         if $tagsets {
-                            my $tagsets_past := $( $tagsets );
-                            if         $tagsets_past.isa(PAST::Op)
+                            my $tagsets_past := $tagsets;
+                            if  $tagsets_past.isa(PAST::Op)
                                     && $tagsets_past.pasttype() eq 'call' {
                                 for @( $tagsets_past ) {
                                     unless $_.isa(PAST::Val)

Modified: branches/calling_conventions/languages/perl6/src/parser/grammar-oper.pg
==============================================================================
--- branches/calling_conventions/languages/perl6/src/parser/grammar-oper.pg	(original)
+++ branches/calling_conventions/languages/perl6/src/parser/grammar-oper.pg	Sun Dec  7 22:37:43 2008
@@ -142,34 +142,6 @@
 proto infix:<:=> is precedence('i=') is pasttype('bind') { ... }
 proto infix:<::=> is equiv(infix:<:=>) { ... }
 proto infix:<.=> is equiv(infix:<:=>) { ... }
-proto infix:<~=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<+=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<-=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<*=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:</=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<%=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<x=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<Y=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<**=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<xx=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<||=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<&&=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<//=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<^^=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:«+<=» is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:«+>=» is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<+|=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<+&=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<+^=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<~|=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<~&=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<~^=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<?|=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<?&=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<?^=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<|=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<&=> is equiv(infix:<:=>) is lvalue(1) { ... }
-proto infix:<^=> is equiv(infix:<:=>) is lvalue(1) { ... }
 proto infix:«=>» is equiv(infix:<:=>) { ... }
 
 ## loose unary
@@ -197,6 +169,10 @@
     is assoc('right')
     is lvalue(1)
     { ... }
+proto prefix:<[,]> is precedence('e=') is subname('list') {...}
+proto prefix:<[&]> is equiv(prefix:<[,]>) is subname('all') {...}
+proto prefix:<[|]> is equiv(prefix:<[,]>) is subname('any') {...}
+proto prefix:<[^]> is equiv(prefix:<[,]>) is subname('one') {...}
 
 ## loose and
 proto infix:<and> is precedence('d=')

Modified: branches/calling_conventions/languages/perl6/src/parser/grammar.pg
==============================================================================
--- branches/calling_conventions/languages/perl6/src/parser/grammar.pg	(original)
+++ branches/calling_conventions/languages/perl6/src/parser/grammar.pg	Sun Dec  7 22:37:43 2008
@@ -842,7 +842,7 @@
 token arglist {
     [
     | <?terminator>
-    | <EXPR: 'e='>                                 # EXPR(%list_assignment)
+    | <EXPR: 'd='>                                 # EXPR(%list_assignment)
     ]
     {*}
 }

Modified: branches/calling_conventions/languages/perl6/src/pmc/perl6multisub.pmc
==============================================================================
--- branches/calling_conventions/languages/perl6/src/pmc/perl6multisub.pmc	(original)
+++ branches/calling_conventions/languages/perl6/src/pmc/perl6multisub.pmc	Sun Dec  7 22:37:43 2008
@@ -286,7 +286,7 @@
         /* Get information about this candidate. */
         PMC *candidate = VTABLE_get_pmc_keyed_int(interp, candidates, i);
         PMC *proto     = VTABLE_getprop(interp, candidate, CONST_STRING(interp, "proto"));
-        
+
         /* Is it a proto? */
         if (!PMC_IS_NULL(proto) && VTABLE_get_bool(interp, proto)) {
             if (PMC_IS_NULL(found_proto))
@@ -336,7 +336,8 @@
         /* Add it to graph node, and initialize list of edges. */
         graph[insert_pos] = mem_allocate_zeroed_typed(candidate_graph_node);
         graph[insert_pos]->info = info;
-        graph[insert_pos]->edges = mem_allocate_n_zeroed_typed(num_candidates, candidate_graph_node*);
+        graph[insert_pos]->edges = mem_allocate_n_zeroed_typed(
+            num_candidates, candidate_graph_node*);
         insert_pos++;
     }
 

Modified: branches/calling_conventions/languages/perl6/t/spectest.data
==============================================================================
--- branches/calling_conventions/languages/perl6/t/spectest.data	(original)
+++ branches/calling_conventions/languages/perl6/t/spectest.data	Sun Dec  7 22:37:43 2008
@@ -52,6 +52,7 @@
 S03-operators/autoincrement.t
 S03-operators/autovivification.t
 S03-operators/binding-arrays.t
+S03-operators/binding-closure.t
 S03-operators/binding-hashes.t
 S03-operators/binding-scalars.t
 S03-operators/bit.t
@@ -126,6 +127,8 @@
 S06-multi/syntax.t
 S06-multi/type-based.t
 S06-signature/code.t
+S06-signature/defaults.t
+S06-signature/errors.t
 S06-signature/mixed-placeholders.t
 S06-signature/named-parameters.t
 S06-signature/named-placeholders.t
@@ -141,6 +144,7 @@
 S11-modules/export.t
 S12-attributes/class.t
 S12-attributes/delegation.t
+S12-attributes/instance.t
 S12-class/anonymous.t
 S12-class/attributes.t
 S12-class/basic.t
@@ -159,8 +163,9 @@
 S12-methods/calling_syntax.t
 S12-methods/default-trait.t
 S12-methods/indirect_notation.t
-S12-methods/multi.t
 S12-methods/instance.t
+S12-methods/multi.t
+S12-methods/private.t
 S12-methods/topic.t
 S12-methods/what.t
 S12-role/attributes.t

Modified: branches/calling_conventions/languages/pheme/lib/pge2past.tg
==============================================================================
--- branches/calling_conventions/languages/pheme/lib/pge2past.tg	(original)
+++ branches/calling_conventions/languages/pheme/lib/pge2past.tg	Sun Dec  7 22:37:43 2008
@@ -27,7 +27,8 @@
 
 transform past (pheme_list) :language('PIR') {
     .local pmc iter
-    iter = new 'Iterator', node
+    $P0 = node.'hash'()
+    iter = new 'Iterator', $P0
 
     .local string key_name
     key_name = shift iter
@@ -92,7 +93,8 @@
 
 transform past (list_item) :language('PIR') {
     .local pmc iter
-    iter = new 'Iterator', node
+    $P0 = node.'hash'()
+    iter = new 'Iterator', $P0
 
     .local string key_name
     key_name = shift iter
@@ -174,7 +176,8 @@
 
 transform make_cons (list) :language('PIR') {
     .local pmc iter
-    iter = new 'Iterator', node
+    $P0 = node.'hash'()
+    iter = new 'Iterator', $P0
 
     .local pmc cons
     cons = new ['PAST';'Op']

Modified: branches/calling_conventions/runtime/parrot/library/Data/Dumper/Default.pir
==============================================================================
--- branches/calling_conventions/runtime/parrot/library/Data/Dumper/Default.pir	(original)
+++ branches/calling_conventions/runtime/parrot/library/Data/Dumper/Default.pir	Sun Dec  7 22:37:43 2008
@@ -404,6 +404,76 @@
     .return ( 1 )
 .end
 
+
+=cut
+
+=item Capture dumpe
+
+Dump a capture object.
+
+=cut
+
+.namespace ['Capture']
+.sub '__dump' :method
+    .param pmc dumper
+    .param string label
+    .local int hasstuff
+    hasstuff = 0
+
+    .local string subindent, indent
+    (subindent, indent) = dumper.'newIndent'()
+
+    .local pmc hash, iter
+    hash = self.'hash'()
+    iter = new 'Iterator', hash
+  dump_hash_loop:
+    unless iter goto dump_hash_end
+    if hasstuff goto dump_hash_1
+    print " {"
+    hasstuff = 1
+  dump_hash_1:
+    print "\n"
+    print subindent
+    .local string key
+    .local pmc val
+    key = shift iter
+    val = hash[key]
+    print "<"
+    print key
+    print "> => "
+    dumper.'dump'(label, val)
+    goto dump_hash_loop
+  dump_hash_end:
+
+    .local pmc array
+    array = self.'list'()
+    if null array goto dump_array_end
+    $I1 = elements array
+    $I0 = 0
+  dump_array_loop:
+    if $I0 >= $I1 goto dump_array_end
+    if hasstuff goto dump_array_1
+    print " {"
+    hasstuff = 1
+  dump_array_1:
+    print "\n"
+    print subindent
+    val = array[$I0]
+    print "["
+    print $I0
+    print "] => "
+    dumper.'dump'(label, val)
+    inc $I0
+    goto dump_array_loop
+  dump_array_end:
+    unless hasstuff goto end
+    print "\n"
+    print indent
+    print '}'
+  end:
+    dumper.'deleteIndent'()
+.end
+
 =back
 
 =head1 AUTHOR

Modified: branches/calling_conventions/runtime/parrot/library/File/Spec/Unix.pir
==============================================================================
--- branches/calling_conventions/runtime/parrot/library/File/Spec/Unix.pir	(original)
+++ branches/calling_conventions/runtime/parrot/library/File/Spec/Unix.pir	Sun Dec  7 22:37:43 2008
@@ -47,7 +47,7 @@
 
 .sub 'VERSION' :method
     .local pmc version
-    version= global 'VERSION'
+    version= get_global 'VERSION'
     .return( version )
 .end
 

Modified: branches/calling_conventions/runtime/parrot/library/File/Spec/Win32.pir
==============================================================================
--- branches/calling_conventions/runtime/parrot/library/File/Spec/Win32.pir	(original)
+++ branches/calling_conventions/runtime/parrot/library/File/Spec/Win32.pir	Sun Dec  7 22:37:43 2008
@@ -27,7 +27,7 @@
     .local pmc tmpdir
     tmpdir= new 'ResizableStringArray'
 
-    tmpdir= global '_tmpdir'
+    tmpdir= get_global '_tmpdir'
 
     .local int size
     size= tmpdir

Modified: branches/calling_conventions/runtime/parrot/library/PGE/Hs.pir
==============================================================================
--- branches/calling_conventions/runtime/parrot/library/PGE/Hs.pir	(original)
+++ branches/calling_conventions/runtime/parrot/library/PGE/Hs.pir	Sun Dec  7 22:37:43 2008
@@ -51,8 +51,6 @@
 .namespace [ "PGE";"Hs" ]
 
 .const string PGE_FAIL = "PGE_Fail"
-.const string PGE_SUB_POS = "@!list"
-.const string PGE_SUB_NAMED = "%!hash"
 
 .sub "__onload" :load
     .local pmc load
@@ -181,8 +179,8 @@
     out .= " ["
 
   subpats:
-    capt = getattribute self, PGE_SUB_POS
-    if_null capt, subrules
+    capt = self.'list'()
+    unless capt goto subrules
     spi = 0
     spc = elements capt
     goto subpats_body

Modified: branches/calling_conventions/src/atomic/gcc_x86.c
==============================================================================
--- branches/calling_conventions/src/atomic/gcc_x86.c	(original)
+++ branches/calling_conventions/src/atomic/gcc_x86.c	Sun Dec  7 22:37:43 2008
@@ -48,8 +48,8 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 void *
-parrot_i386_cmpxchg(void *volatile *ptr, void *expect,
-                                        void *update)
+parrot_i386_cmpxchg(ARGMOD(void *volatile *ptr), ARGIN(void *expect),
+                                        ARGIN(void *update))
 {
 #if defined(PARROT_HAS_X86_64_GCC_CMPXCHG)
     __asm__ __volatile__("lock\n"
@@ -81,7 +81,7 @@
 
 PARROT_EXPORT
 long
-parrot_i386_xadd(volatile long *l, long amount)
+parrot_i386_xadd(ARGIN(volatile long *l), long amount)
 {
     long result = amount;
 #if defined(PARROT_HAS_X86_64_GCC_CMPXCHG)

Modified: branches/calling_conventions/src/encodings/utf8.c
==============================================================================
--- branches/calling_conventions/src/encodings/utf8.c	(original)
+++ branches/calling_conventions/src/encodings/utf8.c	Sun Dec  7 22:37:43 2008
@@ -378,6 +378,8 @@
 The UTF-8 implementation of the string iterator's C<get_and_advance>
 function.
 
+=cut
+
 */
 
 static UINTVAL

Modified: branches/calling_conventions/src/exceptions.c
==============================================================================
--- branches/calling_conventions/src/exceptions.c	(original)
+++ branches/calling_conventions/src/exceptions.c	Sun Dec  7 22:37:43 2008
@@ -547,7 +547,7 @@
         const int found  = dladdr(array[i], &frameInfo);
 
         /* always indent */
-        const int indent = 2 + ( 2 * i);
+        const int indent = 2 + (2 * i);
 
         fprintf(stderr, "%*s", indent, "");
 

Modified: branches/calling_conventions/src/extend.c
==============================================================================
--- branches/calling_conventions/src/extend.c	(original)
+++ branches/calling_conventions/src/extend.c	Sun Dec  7 22:37:43 2008
@@ -1162,6 +1162,8 @@
 
 Set the value of an S register.
 
+=cut
+
 */
 
 PARROT_EXPORT

Modified: branches/calling_conventions/src/gc/register.c
==============================================================================
--- branches/calling_conventions/src/gc/register.c	(original)
+++ branches/calling_conventions/src/gc/register.c	Sun Dec  7 22:37:43 2008
@@ -634,18 +634,21 @@
 */
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 Parrot_Context *
-Parrot_context_ref_trace(PARROT_INTERP,
-        ARGMOD(Parrot_Context *ctx),
+Parrot_context_ref_trace(PARROT_INTERP, ARGMOD(Parrot_Context *ctx),
         ARGIN(const char *file), int line)
 {
     if (Interp_debug_TEST(interp, PARROT_CTX_DESTROY_DEBUG_FLAG)) {
         const char *name = "unknown";
+
         if (ctx->current_sub)
             name = (char *)(PMC_sub(ctx->current_sub)->name->strstart);
+
         fprintf(stderr, "[reference to context %p ('%s') taken at %s:%d]\n",
                 (void *)ctx, name, file, line);
     }
+
     ctx->ref_count++;
     return ctx;
 }

Modified: branches/calling_conventions/src/gc/smallobject.c
==============================================================================
--- branches/calling_conventions/src/gc/smallobject.c	(original)
+++ branches/calling_conventions/src/gc/smallobject.c	Sun Dec  7 22:37:43 2008
@@ -133,7 +133,10 @@
     Small_Object_Pool * const pool = interp->arena_base->constant_pmc_pool;
     const               int   c    = contained_in_pool(pool, pmc);
 
-    /* some paranoia first */
+    /* some paranoia first. */
+    /* I wonder if it would save any machine cycles to write
+       !(PObj_constant_TEST(pmc) ^ c)
+       instead. */
     PARROT_ASSERT(!!PObj_constant_TEST(pmc) == !!c);
 
     return c;

Modified: branches/calling_conventions/src/global.c
==============================================================================
--- branches/calling_conventions/src/global.c	(original)
+++ branches/calling_conventions/src/global.c	Sun Dec  7 22:37:43 2008
@@ -33,11 +33,41 @@
 PARROT_CAN_RETURN_NULL
 static PMC * internal_ns_keyed(PARROT_INTERP,
     ARGIN(PMC *base_ns),
-    ARGIN_NULLOK(PMC *pmc_key),
-    ARGIN_NULLOK(STRING *str_key),
+    ARGIN(PMC *pmc_key),
     int flags)
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC * internal_ns_keyed_key(PARROT_INTERP,
+    ARGIN(PMC *ns),
+    ARGIN(PMC *key),
+    int flags)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC * internal_ns_keyed_str(PARROT_INTERP,
+    ARGIN(PMC *base_ns),
+    ARGIN(STRING *key),
+    int flags)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC * internal_ns_maybe_create(PARROT_INTERP,
+    ARGIN(PMC *ns),
+    ARGIN(STRING *key),
+    int flags)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 static void store_sub_in_multi(PARROT_INTERP,
     ARGIN(PMC *sub),
@@ -58,9 +88,9 @@
 
 =item C<static PMC * internal_ns_keyed>
 
-internal_ns_keyed: Internal function to do keyed namespace lookup
-relative to a given namespace PMC.  Understands STRINGs, String PMCs,
-Key pmcs, and array PMCs containing strings.
+internal_ns_keyed: Internal function to do keyed namespace lookup relative to a
+given namespace PMC.  Understands String, Key, and array PMCs containing
+strings.
 
 =cut
 
@@ -69,73 +99,143 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC *
-internal_ns_keyed(PARROT_INTERP, ARGIN(PMC *base_ns), ARGIN_NULLOK(PMC *pmc_key),
-        ARGIN_NULLOK(STRING *str_key), int flags)
+internal_ns_keyed(PARROT_INTERP, ARGIN(PMC *base_ns), ARGIN(PMC *pmc_key), int flags)
 {
-    PMC *ns, *sub_ns;
+    PMC *sub_ns;
+    PMC *ns = base_ns;
     INTVAL i, n;
     static const INTVAL max_intval = (INTVAL)((~(UINTVAL)0) >> 1); /*2s comp*/
 
-    ns = base_ns;
-
-    if (str_key)
-        n = 1;
-    else if (pmc_key->vtable->base_type == enum_class_String) {
-        str_key = VTABLE_get_string(interp, pmc_key);
-        n = 1;
+    if (pmc_key->vtable->base_type == enum_class_String) {
+        STRING *str_key = VTABLE_get_string(interp, pmc_key);
+        return internal_ns_keyed_str(interp, base_ns, str_key, flags);
     }
+
     else if (pmc_key->vtable->base_type == enum_class_Key)
-        n = max_intval;         /* we don't yet know how big the key is */
+        return internal_ns_keyed_key(interp, base_ns, pmc_key, flags);
     else
         n = VTABLE_elements(interp, pmc_key); /* array of strings */
 
     for (i = 0; i < n; ++i) {
         STRING *part;
+        if (!pmc_key)
+            Parrot_ex_throw_from_c_args(interp, NULL, 1,
+                "Passed a NULL pmc_key into VTABLE_get_string_keyed_int");
 
-        if (str_key)
-            part = str_key;
-        else if (n == max_intval) {
-            if (!pmc_key)
-                Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                    "Trying to use a NULL PMC as a key");
+        part   = VTABLE_get_string_keyed_int(interp, pmc_key, i);
+        sub_ns = VTABLE_get_pmc_keyed_str(interp, ns, part);
 
-            part    = VTABLE_get_string(interp, pmc_key);
-            pmc_key = key_next(interp, pmc_key);
+        if (PMC_IS_NULL(sub_ns) || !VTABLE_isa(interp, sub_ns, CONST_STRING(interp, "NameSpace"))) {
+            sub_ns = internal_ns_maybe_create(interp, ns, part, flags);
 
-            if (!pmc_key)
-                n = i + 1;      /* now we know how big the key is */
+            if (PMC_IS_NULL(sub_ns))
+                return PMCNULL;
         }
-        else {
-            if (!pmc_key)
-                Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                    "Passed a NULL pmc_key into VTABLE_get_string_keyed_int");
 
-            part = VTABLE_get_string_keyed_int(interp, pmc_key, i);
-        }
+        ns = sub_ns;
+    }
 
-        sub_ns = VTABLE_get_pmc_keyed_str(interp, ns, part);
+    return ns;
+}
 
-        if (PMC_IS_NULL(sub_ns)
-            /* RT#46157 - stop depending on typed namespace */
-            || sub_ns->vtable->base_type != enum_class_NameSpace)
-        {
-            if (!(flags & INTERN_NS_CREAT))
-                return PMCNULL;
 
-            /* RT#46159 - match HLL of enclosing namespace? */
-            sub_ns = pmc_new(interp,
-                             Parrot_get_ctx_HLL_type(interp,
-                                                     enum_class_NameSpace));
+/*
+
+=item C<static PMC * internal_ns_keyed_str>
+
+Internal function to do keyed namespace lookup relative to a given namespace
+PMC.  Understands STRINGs.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC *
+internal_ns_keyed_str(PARROT_INTERP, ARGIN(PMC *base_ns),
+    ARGIN(STRING *key), int flags)
+{
+    PMC *ns = VTABLE_get_pmc_keyed_str(interp, base_ns, key);
+
+    if (!PMC_IS_NULL(ns) && VTABLE_isa(interp, ns, CONST_STRING(interp, "NameSpace")))
+        return ns;
+
+    return internal_ns_maybe_create(interp, base_ns, key, flags);
+}
+
+/*
+
+=item C<static PMC * internal_ns_keyed_key>
+
+Internal function to do keyed namespace lookup relative to a given namespace
+PMC.  Understands Key PMCs.  Used from C<internal_ns_keyed>.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC *
+internal_ns_keyed_key(PARROT_INTERP, ARGIN(PMC *ns), ARGIN(PMC *key), int flags)
+{
+    while (key) {
+        STRING *part   = VTABLE_get_string(interp, key);
+        PMC    *sub_ns = VTABLE_get_pmc_keyed_str(interp, ns, part);
+
+        if (PMC_IS_NULL(sub_ns) || !VTABLE_isa(interp, sub_ns, CONST_STRING(interp, "NameSpace"))) {
+            sub_ns = internal_ns_maybe_create(interp, ns, part, flags);
+
             if (PMC_IS_NULL(sub_ns))
                 return PMCNULL;
-            VTABLE_set_pmc_keyed_str(interp, ns, part, sub_ns);
         }
-        ns = sub_ns;
-    } /* for */
+
+        ns  = sub_ns;
+        key = key_next(interp, key);
+    }
 
     return ns;
 }
 
+
+/*
+
+=item C<static PMC * internal_ns_maybe_create>
+
+Given the a namespace PMC, a STRING containing a name, and flags from
+C<internal_ns_keyed> or C<internal_ns_keyed_str>, creates and returns a new
+namespace with the given name in the given namespace.  This is an internal
+function only.
+
+=cut
+
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static PMC *
+internal_ns_maybe_create(PARROT_INTERP, ARGIN(PMC *ns), ARGIN(STRING *key), int flags)
+{
+    PMC *sub_ns;
+
+    /* RT #46157 - stop depending on typed namespace */
+    if (!(flags & INTERN_NS_CREAT))
+        return PMCNULL;
+
+    /* RT #46159 - match HLL of enclosing namespace? */
+    sub_ns = pmc_new(interp, Parrot_get_ctx_HLL_type(interp,
+                                                 enum_class_NameSpace));
+
+    if (PMC_IS_NULL(sub_ns))
+        return PMCNULL;
+
+    VTABLE_set_pmc_keyed_str(interp, ns, key, sub_ns);
+
+    return sub_ns;
+}
+
+
 /*
 
 =item C<PMC * Parrot_get_namespace_keyed>
@@ -154,7 +254,7 @@
 PMC *
 Parrot_get_namespace_keyed(PARROT_INTERP, ARGIN(PMC *base_ns), ARGIN_NULLOK(PMC *pmc_key))
 {
-    return internal_ns_keyed(interp, base_ns, pmc_key, NULL, 0);
+    return internal_ns_keyed(interp, base_ns, pmc_key, 0);
 }
 
 /*
@@ -175,7 +275,7 @@
 Parrot_get_namespace_keyed_str(PARROT_INTERP, ARGIN(PMC *base_ns),
         ARGIN_NULLOK(STRING *str_key))
 {
-    return internal_ns_keyed(interp, base_ns, PMCNULL, str_key, 0);
+    return internal_ns_keyed_str(interp, base_ns, str_key, 0);
 }
 
 /*
@@ -197,7 +297,7 @@
 Parrot_make_namespace_keyed(PARROT_INTERP, ARGIN(PMC *base_ns),
         ARGIN_NULLOK(PMC *pmc_key))
 {
-    return internal_ns_keyed(interp, base_ns, pmc_key, NULL, INTERN_NS_CREAT);
+    return internal_ns_keyed(interp, base_ns, pmc_key, INTERN_NS_CREAT);
 }
 
 /*
@@ -219,7 +319,7 @@
 Parrot_make_namespace_keyed_str(PARROT_INTERP, ARGIN(PMC *base_ns),
         ARGIN_NULLOK(STRING *str_key))
 {
-    return internal_ns_keyed(interp, base_ns, NULL, str_key, INTERN_NS_CREAT);
+    return internal_ns_keyed_str(interp, base_ns, str_key, INTERN_NS_CREAT);
 }
 
 
@@ -371,7 +471,7 @@
 Search the namespace PMC C<ns> for an object with name C<globalname>.
 Return the object, or NULL if not found.
 
-RT#46161 - For now this function prefers non-namespaces, it will eventually
+RT #46161 - For now this function prefers non-namespaces, it will eventually
 entirely use the untyped interface.
 
 =cut
@@ -395,7 +495,7 @@
         res = PMCNULL;
     else {
         /*
-         * RT#46163 - we should be able to use 'get_pmc_keyed' here,
+         * RT #46163 - we should be able to use 'get_pmc_keyed' here,
          * but we can't because Parrot's default namespaces are not
          * fully typed and there's a pseudo-typed interface that
          * distinguishes 'get_pmc_keyed' from 'get_pointer_keyed';
@@ -435,7 +535,7 @@
 an array of namespace name strings, or a string PMC, for an object
 with name C<globalname>.  Return the object, or NULL if not found.
 
-RT#46161 - For now this function prefers non-namespaces, it will eventually
+RT #46161 - For now this function prefers non-namespaces, it will eventually
 entirely use the untyped interface.
 
 =cut
@@ -463,7 +563,7 @@
 C<str_key> is NULL, for an object with name C<globalname>.  Return the
 object, or NULL if not found.
 
-RT#46161 - For now this function prefers non-namespaces, it will eventually
+RT #46161 - For now this function prefers non-namespaces, it will eventually
 entirely use the untyped interface.
 
 =cut
@@ -529,7 +629,7 @@
                           CONTEXT(interp)->current_namespace,
                           globalname, val);
 
-    /* RT#46165 - method cache invalidation should occur */
+    /* RT #46165 - method cache invalidation should occur */
 }
 
 /*
@@ -540,7 +640,7 @@
 which may be a key PMC, an array of namespace name strings, or a
 string PMC, with name C<globalname>.
 
-RT#46161 - For now this function prefers non-namespaces, it will eventually
+RT #46161 - For now this function prefers non-namespaces, it will eventually
 entirely use the untyped interface.
 
 =cut
@@ -555,7 +655,7 @@
     PMC *ns;
 
     /*
-     * RT#46167 - temporary hack to notice when key is actually a string, so that
+     * RT #46167 - temporary hack to notice when key is actually a string, so that
      * the legacy logic for invalidating method cache will be called; this is
      * not good enough but it avoids regressesions for now
      */
@@ -571,7 +671,7 @@
 
     Parrot_store_global_n(interp, ns, globalname, val);
 
-    /* RT#46165 - method cache invalidation should occur */
+    /* RT #46165 - method cache invalidation should occur */
 }
 
 /*
@@ -596,7 +696,7 @@
 
     Parrot_store_global_n(interp, ns, globalname, val);
 
-    /* RT#46169 - method cache invalidation should be a namespace function */
+    /* RT #46169 - method cache invalidation should be a namespace function */
     Parrot_invalidate_method_cache(interp, str_key, globalname);
 }
 
@@ -637,7 +737,7 @@
 
 =item C<PMC * Parrot_find_name_op>
 
-RT#46171 - THIS IS BROKEN - it doesn't walk up the scopes yet
+RT #46171 - THIS IS BROKEN - it doesn't walk up the scopes yet
 
 Find the given C<name> in lexicals, then the current namespace, then the HLL
 root namespace, and finally Parrot builtins.  If the name isn't found
@@ -662,7 +762,7 @@
     else
         g = VTABLE_get_pmc_keyed_str(interp, lex_pad, name);
 
-    /* RT#46171 - walk up the scopes!  duh!! */
+    /* RT #46171 - walk up the scopes!  duh!! */
 
     if (PMC_IS_NULL(g))
         g = Parrot_find_global_cur(interp, name);

Modified: branches/calling_conventions/src/io/buffer.c
==============================================================================
--- branches/calling_conventions/src/io/buffer.c	(original)
+++ branches/calling_conventions/src/io/buffer.c	Sun Dec  7 22:37:43 2008
@@ -703,6 +703,8 @@
 support the Strings PDD, but is left as-is for now, for a smooth transition to
 the new architecture.
 
+=cut
+
 */
 
 static INTVAL

Modified: branches/calling_conventions/src/jit/i386/exec_dep.h
==============================================================================
--- branches/calling_conventions/src/jit/i386/exec_dep.h	(original)
+++ branches/calling_conventions/src/jit/i386/exec_dep.h	Sun Dec  7 22:37:43 2008
@@ -19,18 +19,35 @@
 /* HEADERIZER BEGIN: src/exec_dep.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-void offset_fixup(Parrot_exec_objfile_t *obj);
-void Parrot_exec_cpcf_op(Parrot_jit_info_t *jit_info, PARROT_INTERP)
-        __attribute__nonnull__(2);
-
-void Parrot_exec_normal_op(Parrot_jit_info_t *jit_info, PARROT_INTERP)
-        __attribute__nonnull__(2);
-
-void Parrot_exec_normal_op(Parrot_jit_info_t *jit_info, PARROT_INTERP)
-        __attribute__nonnull__(2);
-
-void Parrot_exec_restart_op(Parrot_jit_info_t *jit_info, PARROT_INTERP)
-        __attribute__nonnull__(2);
+void offset_fixup(ARGMOD(Parrot_exec_objfile_t *obj))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*obj);
+
+void Parrot_exec_cpcf_op(ARGMOD(Parrot_jit_info_t *jit_info), PARROT_INTERP)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*jit_info);
+
+void Parrot_exec_normal_op(
+    ARGMOD(Parrot_jit_info_t *jit_info),
+    PARROT_INTERP)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*jit_info);
+
+void Parrot_exec_normal_op(
+    ARGMOD(Parrot_jit_info_t *jit_info),
+    PARROT_INTERP)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*jit_info);
+
+void Parrot_exec_restart_op(
+    ARGMOD(Parrot_jit_info_t *jit_info),
+    PARROT_INTERP)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*jit_info);
 
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/exec_dep.c */

Modified: branches/calling_conventions/src/multidispatch.c
==============================================================================
--- branches/calling_conventions/src/multidispatch.c	(original)
+++ branches/calling_conventions/src/multidispatch.c	Sun Dec  7 22:37:43 2008
@@ -52,8 +52,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 static INTVAL distance_cmp(SHIM_INTERP, INTVAL a, INTVAL b);
-static void dump_mmd(PARROT_INTERP, INTVAL function)
-        __attribute__nonnull__(1);
 
 static void mmd_add_multi_global(PARROT_INTERP,
     ARGIN(STRING *sub_name),
@@ -85,15 +83,21 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_CANNOT_RETURN_NULL
 static STRING * mmd_cache_key_from_types(PARROT_INTERP,
-    const char *name,
-    PMC *types)
-        __attribute__nonnull__(1);
+    ARGIN(const char *name),
+    ARGIN(PMC *types))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
+PARROT_CANNOT_RETURN_NULL
 static STRING * mmd_cache_key_from_values(PARROT_INTERP,
-    const char *name,
-    PMC *values)
-        __attribute__nonnull__(1);
+    ARGIN(const char *name),
+    ARGIN(PMC *values))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
@@ -147,6 +151,7 @@
     ARGIN_NULLOK(const PMC *pmc))
         __attribute__nonnull__(1);
 
+PARROT_CANNOT_RETURN_NULL
 static PMC * Parrot_mmd_get_cached_multi_sig(PARROT_INTERP, ARGIN(PMC *sub))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -183,6 +188,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+PARROT_CANNOT_RETURN_NULL
 static PMC * Parrot_mmd_sort_candidates(PARROT_INTERP,
     ARGIN(PMC *arg_tuple),
     ARGIN(PMC *cl))
@@ -196,64 +202,6 @@
 
 #define MMD_DEBUG 0
 
-#ifndef NDEBUG
-/*
-
-=item C<static void dump_mmd>
-
-RT #48260: Not yet documented!!!
-
-=cut
-
-*/
-
-static void
-dump_mmd(PARROT_INTERP, INTVAL function)
-{
-    UINTVAL x, y;
-    UINTVAL offset;
-    MMD_table * const table = interp->binop_mmd_funcs + function;
-    funcptr_t func;
-    const UINTVAL x_funcs = table->x;
-    const UINTVAL y_funcs = table->y;
-
-    printf("    ");
-    for (x = 0; x < x_funcs; ++x) {
-        if (x % 10)
-            printf(" ");
-        else
-            printf("%d", (int) x / 10);
-    }
-
-    printf("\n");
-
-    for (y = 0; y < y_funcs; ++y) {
-        printf("%3d ", (int)y);
-        for (x = 0; x < x_funcs; ++x) {
-            offset = x_funcs * y + x;
-            func   = table->mmd_funcs[offset];
-
-            printf("%c",
-                    (UINTVAL)func & 1 ?  'P' :
-                    !func  ? '0' : 'F');
-        }
-
-        printf("\n");
-    }
-
-    for (y = 0; y < y_funcs; ++y) {
-        for (x = 0; x < x_funcs; ++x) {
-            offset = x_funcs * y + x;
-            func   = table->mmd_funcs[offset];
-
-            if (func && !((UINTVAL) func & 1))
-                printf("%3d %3d: %p\n", (int)x, (int)y, (void*) func);
-        }
-    }
-}
-#endif
-
-
 /*
 
 =item C<funcptr_t get_mmd_dispatch_type>
@@ -1441,6 +1389,7 @@
     return ar;
 }
 
+PARROT_CANNOT_RETURN_NULL
 static PMC *
 Parrot_mmd_get_cached_multi_sig(PARROT_INTERP, ARGIN(PMC *sub))
 {
@@ -1610,6 +1559,7 @@
 
 */
 
+PARROT_CANNOT_RETURN_NULL
 static PMC *
 Parrot_mmd_sort_candidates(PARROT_INTERP, ARGIN(PMC *arg_tuple), ARGIN(PMC *cl))
 {
@@ -1963,6 +1913,7 @@
 */
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 MMD_Cache *
 Parrot_mmd_cache_create(PARROT_INTERP) {
     /* String hash. */
@@ -1982,8 +1933,10 @@
 
 */
 
+PARROT_CANNOT_RETURN_NULL
 static STRING *
-mmd_cache_key_from_values(PARROT_INTERP, const char *name, PMC *values)
+mmd_cache_key_from_values(PARROT_INTERP, ARGIN(const char *name),
+    ARGIN(PMC *values))
 {
     /* Build array of type IDs, which we'll then use as a string to key into
      * the hash. */
@@ -2025,8 +1978,10 @@
 */
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_mmd_cache_lookup_by_values(PARROT_INTERP, MMD_Cache *cache, const char *name, PMC *values)
+Parrot_mmd_cache_lookup_by_values(PARROT_INTERP, ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name), ARGIN(PMC *values))
 {
     STRING *key = mmd_cache_key_from_values(interp, name, values);
 
@@ -2050,8 +2005,8 @@
 
 PARROT_EXPORT
 void
-Parrot_mmd_cache_store_by_values(PARROT_INTERP,
-    MMD_Cache *cache, const char *name, PMC *values, PMC *chosen)
+Parrot_mmd_cache_store_by_values(PARROT_INTERP, ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name), ARGIN(PMC *values), ARGIN(PMC *chosen))
 {
     STRING *key = mmd_cache_key_from_values(interp, name, values);
 
@@ -2062,16 +2017,18 @@
 
 /*
 
-=item C<static STRING * mmd_cache_key_from_values>
+=item C<static STRING * mmd_cache_key_from_types>
 
-Generates an MMD cache key from an array of values.
+Generates an MMD cache key from an array of types.
 
 =cut
 
 */
 
+PARROT_CANNOT_RETURN_NULL
 static STRING *
-mmd_cache_key_from_types(PARROT_INTERP, const char *name, PMC *types)
+mmd_cache_key_from_types(PARROT_INTERP, ARGIN(const char *name),
+    ARGIN(PMC *types))
 {
     /* Build array of type IDs, which we'll then use as a string to key into
      * the hash. */
@@ -2114,9 +2071,10 @@
 */
 
 PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_mmd_cache_lookup_by_types(PARROT_INTERP, MMD_Cache *cache,
-    const char *name, PMC *types)
+Parrot_mmd_cache_lookup_by_types(PARROT_INTERP, ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name), ARGIN(PMC *types))
 {
     STRING *key = mmd_cache_key_from_types(interp, name, types);
 
@@ -2141,11 +2099,12 @@
 
 PARROT_EXPORT
 void
-Parrot_mmd_cache_store_by_types(PARROT_INTERP,
-    MMD_Cache *cache, const char *name, PMC *types, PMC *chosen)
+Parrot_mmd_cache_store_by_types(PARROT_INTERP, ARGMOD(MMD_Cache *cache),
+    ARGIN(const char *name), ARGIN(PMC *types), ARGIN(PMC *chosen))
 {
     STRING *key = mmd_cache_key_from_types(interp, name, types);
-    if (key != NULL)
+
+    if (key)
         parrot_hash_put(interp, cache, key, chosen);
 }
 
@@ -2162,11 +2121,12 @@
 
 PARROT_EXPORT
 void
-Parrot_mmd_cache_mark(PARROT_INTERP, MMD_Cache *cache)
+Parrot_mmd_cache_mark(PARROT_INTERP, ARGMOD(MMD_Cache *cache))
 {
-    /* As a small future optimization, note that we only *really* need to mark keys -
-     * the candidates will be referenced outside the cache, provided it's invalidated
-     * properly. */
+
+    /* As a small future optimization, note that we only *really* need to mark
+    * keys - the candidates will be referenced outside the cache, provided it's
+    * invalidated properly. */
     parrot_mark_hash(interp, cache);
 }
 
@@ -2183,7 +2143,7 @@
 
 PARROT_EXPORT
 void
-Parrot_mmd_cache_destroy(PARROT_INTERP, MMD_Cache *cache)
+Parrot_mmd_cache_destroy(PARROT_INTERP, ARGMOD(MMD_Cache *cache))
 {
     parrot_hash_destroy(interp, cache);
 }

Modified: branches/calling_conventions/src/parrot_debugger.c
==============================================================================
--- branches/calling_conventions/src/parrot_debugger.c	(original)
+++ branches/calling_conventions/src/parrot_debugger.c	Sun Dec  7 22:37:43 2008
@@ -244,6 +244,8 @@
 
 Adds a default exception handler to PDB.
 
+=cut
+
 */
 
 static void

Modified: branches/calling_conventions/src/pmc.c
==============================================================================
--- branches/calling_conventions/src/pmc.c	(original)
+++ branches/calling_conventions/src/pmc.c	Sun Dec  7 22:37:43 2008
@@ -36,13 +36,19 @@
     UINTVAL flags)
         __attribute__nonnull__(1);
 
-static void pmc_free(PARROT_INTERP, PMC *pmc)
-        __attribute__nonnull__(1);
+static void pmc_free(PARROT_INTERP, ARGMOD(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*pmc);
 
 static void pmc_free_to_pool(PARROT_INTERP,
-    PMC *pmc,
-    Small_Object_Pool *pool)
-        __attribute__nonnull__(1);
+    ARGMOD(PMC *pmc),
+    ARGMOD(Small_Object_Pool *pool))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*pmc)
+        FUNC_MODIFIES(*pool);
 
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -64,7 +70,7 @@
 
 PARROT_EXPORT
 INTVAL
-PMC_is_null(SHIM_INTERP, NULLOK(const PMC *pmc))
+PMC_is_null(SHIM_INTERP, ARGIN_NULLOK(const PMC *pmc))
 {
 #if PARROT_CATCH_NULL
     return pmc == PMCNULL || pmc == NULL;
@@ -458,7 +464,8 @@
 */
 
 static void
-pmc_free_to_pool(PARROT_INTERP, PMC *pmc, Small_Object_Pool *pool)
+pmc_free_to_pool(PARROT_INTERP, ARGMOD(PMC *pmc),
+    ARGMOD(Small_Object_Pool *pool))
 {
     if (PObj_active_destroy_TEST(pmc))
         VTABLE_destroy(interp, pmc);
@@ -471,15 +478,16 @@
     pool->num_free_objects++;
 }
 
+
 void
-temporary_pmc_free(PARROT_INTERP, PMC *pmc)
+temporary_pmc_free(PARROT_INTERP, ARGMOD(PMC *pmc))
 {
     Small_Object_Pool *pool = interp->arena_base->constant_pmc_pool;
     pmc_free_to_pool(interp, pmc, pool);
 }
 
 static void
-pmc_free(PARROT_INTERP, PMC *pmc)
+pmc_free(PARROT_INTERP, ARGMOD(PMC *pmc))
 {
     Small_Object_Pool *pool = interp->arena_base->pmc_pool;
     pmc_free_to_pool(interp, pmc, pool);

Modified: branches/calling_conventions/src/pmc/capture.pmc
==============================================================================
--- branches/calling_conventions/src/pmc/capture.pmc	(original)
+++ branches/calling_conventions/src/pmc/capture.pmc	Sun Dec  7 22:37:43 2008
@@ -29,7 +29,7 @@
     if (!PARROT_CAPTURE(obj)->hash) \
         PARROT_CAPTURE(obj)->hash = pmc_new((i), enum_class_Hash);
 
-pmclass Capture need_ext provides array provides hash {
+pmclass Capture need_ext {
     ATTR PMC *array;
     ATTR PMC *hash;
 
@@ -123,25 +123,29 @@
 */
 
     VTABLE FLOATVAL get_number_keyed_int(INTVAL key) {
-        CAPTURE_array_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->array))
+            return 0.0;
         return VTABLE_get_number_keyed_int(INTERP, PARROT_CAPTURE(SELF)->array,
                                            key);
     }
 
     VTABLE INTVAL get_integer_keyed_int(INTVAL key) {
-        CAPTURE_array_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->array))
+            return 0;
         return VTABLE_get_integer_keyed_int(INTERP, PARROT_CAPTURE(SELF)->array,
                                             key);
     }
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL key) {
-        CAPTURE_array_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->array))
+            return PMCNULL;
         return VTABLE_get_pmc_keyed_int(INTERP, PARROT_CAPTURE(SELF)->array,
                                         key);
     }
 
     VTABLE STRING *get_string_keyed_int(INTVAL key) {
-        CAPTURE_array_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->array))
+            return CONST_STRING(INTERP, "");
         return VTABLE_get_string_keyed_int(INTERP, PARROT_CAPTURE(SELF)->array,
                                            key);
     }
@@ -380,23 +384,27 @@
 */
 
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
-        CAPTURE_hash_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->hash))
+            return 0.0;
         return VTABLE_get_number_keyed(INTERP, PARROT_CAPTURE(SELF)->hash, key);
     }
 
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        CAPTURE_hash_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->hash))
+            return 0;
         return VTABLE_get_integer_keyed(INTERP, PARROT_CAPTURE(SELF)->hash,
                                         key);
     }
 
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        CAPTURE_hash_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->hash))
+            return PMCNULL;
         return VTABLE_get_pmc_keyed(INTERP, PARROT_CAPTURE(SELF)->hash, key);
     }
 
     VTABLE STRING *get_string_keyed(PMC *key) {
-        CAPTURE_hash_CREATE(INTERP, SELF);
+        if (!(PARROT_CAPTURE(SELF)->hash))
+            return CONST_STRING(INTERP, "");
         return VTABLE_get_string_keyed(INTERP, PARROT_CAPTURE(SELF)->hash, key);
     }
 
@@ -437,14 +445,19 @@
 
 =item C<void set_pmc(PMC *capture)>
 
-Set this capture to hold the value of another.
+Set this capture to hold the value of another.  If set to PMCNULL,
+erase the contents of the array and hash components.
 
 =cut
 
 */
 
-    void set_pmc(PMC *capture) {
-        if (VTABLE_isa(INTERP, capture, CONST_STRING(INTERP, "Capture"))) {
+    VTABLE void set_pmc(PMC *capture) {
+        if (PMC_IS_NULL(capture)) {
+            PARROT_CAPTURE(SELF)->array = NULL;
+            PARROT_CAPTURE(SELF)->hash = NULL;
+        }
+        else if (VTABLE_isa(INTERP, capture, CONST_STRING(INTERP, "Capture"))) {
             PARROT_CAPTURE(SELF)->array = PARROT_CAPTURE(capture)->array;
             PARROT_CAPTURE(SELF)->hash  = PARROT_CAPTURE(capture)->hash;
         }
@@ -455,12 +468,30 @@
 
 /*
 
+=item C<STRING get_string()>
+
+Return a string representation of the hash, showing class
+and memory address.
+
+=cut
+
+*/
+
+    VTABLE STRING *get_string() {
+        STRING *classname = VTABLE_name(INTERP, SELF);
+        return Parrot_sprintf_c(INTERP, "%S[0x%x]", classname, SELF);
+    }
+
+/*
+
 =back
 
 =head2 Methods
 
 =over 4
 
+=cut
+
 */
 
     METHOD list() {

Modified: branches/calling_conventions/src/pmc/class.pmc
==============================================================================
--- branches/calling_conventions/src/pmc/class.pmc	(original)
+++ branches/calling_conventions/src/pmc/class.pmc	Sun Dec  7 22:37:43 2008
@@ -204,8 +204,7 @@
                 "Failed to set namespace for class.");
 
         /* Set the name of the class to the name of the innermost namespace
-         * associated with the class.
-         */
+         * associated with the class.  */
         new_name = VTABLE_get_string(interp, new_namespace);
 
         if (STRING_IS_NULL(new_name) || STRING_IS_EMPTY(new_name))
@@ -1161,7 +1160,6 @@
 
     VTABLE INTVAL isa_pmc(PMC *lookup) {
         Parrot_Class_attributes * const _class    = PARROT_CLASS(SELF);
-        STRING       *classname, *self_name;
         PMC          *classobj;
         INTVAL        i, num_classes;
 
@@ -1179,21 +1177,26 @@
         /* Check if the class object is the same as self's class object */
         if (VTABLE_is_same(interp, SELF, classobj))
             return 1;
+        else {
+            STRING *classname = VTABLE_get_string(interp, classobj);
+            INTVAL  is_proxy  = SELF->vtable->base_type == enum_class_PMCProxy
+                               ? 1 : 0;
+
+            /* avoid the expensive string copy, if possible */
+            STRING *self_name = is_proxy
+                               ? VTABLE_get_string(interp, SELF)
+                               : make_class_name(interp, SELF);
+
+            /* Check if the passed name is the same as the stored short name. */
+            INTVAL name_match = string_equal(interp, classname, self_name) == 0;
+
+            string_free(interp, classname);
+            if (is_proxy)
+                string_free(interp, self_name);
 
-        classname = VTABLE_get_string(interp, classobj);
-
-        /* avoid the expensive string copy, if possible */
-        self_name = SELF->vtable->base_type != enum_class_PMCProxy
-                  ? make_class_name(interp, SELF)
-                  : VTABLE_get_string(interp, SELF);
-
-        /* Check if the passed name is the same as the stored short name. */
-        if (string_equal(interp, classname, self_name) == 0)
-            return 1;
-
-        /* Check if the passed name is the same as the fully qualified name. */
-        if (string_equal(interp, classname, VTABLE_get_string(interp, SELF)) == 0)
-            return 1;
+            if (name_match)
+                return 1;
+        }
 
         /* Iterate over all the parents and check if they respond true
          * for 'isa' on the original comparison. */

Modified: branches/calling_conventions/src/pmc/eventhandler.pmc
==============================================================================
--- branches/calling_conventions/src/pmc/eventhandler.pmc	(original)
+++ branches/calling_conventions/src/pmc/eventhandler.pmc	Sun Dec  7 22:37:43 2008
@@ -153,6 +153,8 @@
 
 Frees any memory held by this PMC.
 
+=cut
+
 */
 
     VTABLE void destroy() {

Modified: branches/calling_conventions/src/pmc/exception.pmc
==============================================================================
--- branches/calling_conventions/src/pmc/exception.pmc	(original)
+++ branches/calling_conventions/src/pmc/exception.pmc	Sun Dec  7 22:37:43 2008
@@ -176,7 +176,7 @@
 
 /*
 
-=item C<STRING *get_bool()>
+=item C<INTVAL get_bool()>
 
 Return true.
 
@@ -184,8 +184,8 @@
 
 */
 
-    VTABLE INTVAL *get_bool() {
-        return (INTVAL)1;
+    VTABLE INTVAL get_bool() {
+        return 1;
     }
 
 /*

Modified: branches/calling_conventions/src/pmc/fixedpmcarray.pmc
==============================================================================
--- branches/calling_conventions/src/pmc/fixedpmcarray.pmc	(original)
+++ branches/calling_conventions/src/pmc/fixedpmcarray.pmc	Sun Dec  7 22:37:43 2008
@@ -709,6 +709,8 @@
 This throws an exception if any of the spliced in values are out of the range
 of this array.
 
+=cut
+
 */
 
     void splice(PMC *value, INTVAL offset, INTVAL count) {

Modified: branches/calling_conventions/src/pmc/pmcproxy.pmc
==============================================================================
--- branches/calling_conventions/src/pmc/pmcproxy.pmc	(original)
+++ branches/calling_conventions/src/pmc/pmcproxy.pmc	Sun Dec  7 22:37:43 2008
@@ -47,6 +47,8 @@
 
 NOTE: No doubt we will need other things later; this is a start.
 
+=cut
+
 */
 
 #include "parrot/parrot.h"

Modified: branches/calling_conventions/src/string.c
==============================================================================
--- branches/calling_conventions/src/string.c	(original)
+++ branches/calling_conventions/src/string.c	Sun Dec  7 22:37:43 2008
@@ -222,7 +222,6 @@
         return dest;
     if (dest) { /* && dest != src */
         /* they are different, dest is not an external string */
-    /* TODO create string_free API for reusing string headers */
 #ifdef GC_IS_MALLOC
         if (!PObj_is_cowed_TESTALL(dest) && PObj_bufstart(dest)) {
             mem_sys_free(PObj_bufallocstart(dest));
@@ -235,6 +234,29 @@
     return dest;
 }
 
+
+/*
+
+=item C<void string_free>
+
+Frees the given STRING's header, accounting for reference counts for the
+STRING's buffer &c.  Use this only if you I<know> that nothing else has stored
+the STRING elsewhere.
+
+=cut
+
+*/
+
+PARROT_INLINE
+void
+string_free(PARROT_INTERP, ARGIN(STRING *s))
+{
+    if (!PObj_constant_TEST(s)) {
+        Small_Object_Pool *pool = interp->arena_base->string_header_pool;
+        pool->add_free_object(interp, pool, s);
+    }
+}
+
 /*
 
 =back
@@ -2110,6 +2132,7 @@
       return string_to_cstring_nullable(interp, s);
 }
 
+
 /*
 
 =item C<char * string_to_cstring_nullable>
@@ -2124,12 +2147,12 @@
 
 PARROT_EXPORT
 PARROT_MALLOC
+PARROT_CAN_RETURN_NULL
 char *
 string_to_cstring_nullable(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
 {
-    if (! s) {
+    if (!s)
       return NULL;
-    }
     else {
         char *p = (char *)mem_sys_allocate(s->bufused + 1);
         memcpy(p, s->strstart, s->bufused);

Modified: branches/calling_conventions/src/string_primitives.c
==============================================================================
--- branches/calling_conventions/src/string_primitives.c	(original)
+++ branches/calling_conventions/src/string_primitives.c	Sun Dec  7 22:37:43 2008
@@ -359,8 +359,8 @@
 
 =item C<char * str_dup>
 
-Duplicate a C string.  Just like strdup(), except it dies if it runs
-out of memory.
+Duplicates a C string.  Just like strdup(), except it dies if it runs out of
+memory.
 
 =cut
 
@@ -370,13 +370,17 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 char *
-str_dup_remove_quotes(ARGIN(const char * old))
+str_dup_remove_quotes(ARGIN(const char *old))
 {
     const size_t oldlen = strlen(old) + 1;
-    const size_t newlen = oldlen - 2; /* 2 for the beginning and ending quote chars */
-    char * const copy = (char *)mem_sys_allocate(newlen);
-    memcpy(copy, old+1, newlen);
+
+    /* 2 for the beginning and ending quote chars */
+    const size_t newlen = oldlen - 2;
+    char * const copy   = (char *)mem_sys_allocate(newlen);
+
+    memcpy(copy, old + 1, newlen);
     copy[newlen - 1] = 0;
+
     return copy;
 }
 

Modified: branches/calling_conventions/src/sub.c
==============================================================================
--- branches/calling_conventions/src/sub.c	(original)
+++ branches/calling_conventions/src/sub.c	Sun Dec  7 22:37:43 2008
@@ -27,7 +27,7 @@
 
 /*
 
-=item C<void  mark_context_start>
+=item C<void mark_context_start>
 
 Indicate that a new round of context marking is about to take place.
 
@@ -634,6 +634,8 @@
 
 Verifies that the provided continuation is sane.
 
+=cut
+
 */
 
 void
@@ -661,6 +663,8 @@
 
 Restores the appropriate context for the continuation.
 
+=cut
+
 */
 
 void

Modified: branches/calling_conventions/src/utils.c
==============================================================================
--- branches/calling_conventions/src/utils.c	(original)
+++ branches/calling_conventions/src/utils.c	Sun Dec  7 22:37:43 2008
@@ -49,8 +49,14 @@
 static long _mrand48(void);
 static long _nrand48(_rand_buf buf);
 static void _srand48(long seed);
-static INTVAL COMPARE(PARROT_INTERP, void *a, void *b, PMC *cmp)
-        __attribute__nonnull__(1);
+static INTVAL COMPARE(PARROT_INTERP,
+    ARGIN(void *a),
+    ARGIN(void *b),
+    ARGIN(PMC *cmp))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
 
 static void next_rand(_rand_buf X);
 static void process_cycle_without_exit(
@@ -63,7 +69,12 @@
     ARGIN(parrot_prm_context* c))
         __attribute__nonnull__(2);
 
-static void swap(void **x, void **y);
+static void swap(ARGMOD(void **x), ARGMOD(void **y))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*x)
+        FUNC_MODIFIES(*y);
+
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -840,21 +851,20 @@
 
 /* TODO: Macroize swap and COMPARE */
 static void
-swap(void **x, void **y)
+swap(ARGMOD(void **x), ARGMOD(void **y))
 {
     void *t = *x;
     *x      = *y;
     *y      =  t;
 }
 
-typedef INTVAL (*sort_func_t)(PARROT_INTERP, void*, void*);
+typedef INTVAL (*sort_func_t)(PARROT_INTERP, void *, void *);
 
 static INTVAL
-COMPARE(PARROT_INTERP, void *a, void *b, PMC *cmp)
+COMPARE(PARROT_INTERP, ARGIN(void *a), ARGIN(void *b), ARGIN(PMC *cmp))
 {
-    if (PMC_IS_NULL(cmp)) {
-        return VTABLE_cmp(interp, (PMC*)a, (PMC*)b);
-    }
+    if (PMC_IS_NULL(cmp))
+        return VTABLE_cmp(interp, (PMC *)a, (PMC *)b);
 
     if (cmp->vtable->base_type == enum_class_NCI) {
         const sort_func_t f = (sort_func_t)D2FPTR(PMC_struct_val(cmp));
@@ -866,12 +876,12 @@
 
 
 void
-Parrot_quicksort(PARROT_INTERP, void **data, UINTVAL n, PMC *cmp)
+Parrot_quicksort(PARROT_INTERP, ARGMOD(void **data), UINTVAL n, ARGIN(PMC *cmp))
 {
     while (n > 1) {
         UINTVAL i, j, ln, rn;
 
-        swap(&data[0], &data[n/2]);
+        swap(&data[0], &data[n / 2]);
 
         for (i = 0, j = n; ;) {
             do

Modified: branches/calling_conventions/t/op/calling.t
==============================================================================
--- branches/calling_conventions/t/op/calling.t	(original)
+++ branches/calling_conventions/t/op/calling.t	Sun Dec  7 22:37:43 2008
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 98;
+use Parrot::Test tests => 93;
 
 =head1 NAME
 
@@ -923,7 +923,7 @@
 .sub main :main
     .local pmc f
     $I0 = 99
-    f = global "foo"
+    f = find_global "foo"
     .begin_call
     .call f
     .get_result   $P0 :optional
@@ -1939,91 +1939,6 @@
 ok
 OUTPUT
 
-## Named
-pir_output_is( <<'CODE', <<'OUTPUT', " 'foo' => d syntax for parameters" );
-.sub main :main
-        foo ('a'=>20,'b'=>10)
-        print "ok\n"
-
-        end
-.end
-
-.sub foo
-        .param int "b" => d
-        .param int "a" => c
-
-        print d
-        print ' '
-        print c
-        print "\n"
-
-        .return ()
-.end
-CODE
-10 20
-ok
-OUTPUT
-
-## Named
-pir_output_is( <<'CODE', <<'OUTPUT', " 'foo' => d syntax for target list" );
-.sub main :main
-        ("b" => $I0 , "a" => $I1) = foo( "b" => 10 , "a" => 20)
-        print $I0
-        print ' '
-        print $I1
-        print "\n"
-        print "ok\n"
-
-        end
-.end
-
-.sub foo
-        .param int "a" => c
-        .param int "b" => d
-
-        print d
-        print ' '
-        print c
-        print "\n"
-
-        .return ( 10 :named("a"), 20 :named("b"))
-.end
-CODE
-10 20
-20 10
-ok
-OUTPUT
-
-## Named
-pir_output_is( <<'CODE', <<'OUTPUT', " 'foo' => d syntax for return" );
-.sub main :main
-        ("b" => $I0 , "a" => $I1) = foo( "b" => 10 , "a" => 20)
-        print $I0
-        print ' '
-        print $I1
-        print "\n"
-        print "ok\n"
-
-        end
-.end
-
-.sub foo
-        .param int "a" => c
-        .param int "b" => d
-
-        print d
-        print ' '
-        print c
-        print "\n"
-
-        .return ( "a" => 10, "b" => 20 )
-.end
-CODE
-10 20
-20 10
-ok
-OUTPUT
-
 pir_error_output_like( <<'CODE', <<'OUTPUT', "named => pos passing" );
 .sub main :main
         foo( "b" => 10 , "a" => 20)
@@ -2058,25 +1973,6 @@
 ok
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "named optional - set" );
-.sub main :main
-        foo ('a'=>20,'b'=>10)
-        print "ok\n"
-.end
-
-.sub foo
-        .param int 'b' => d
-        .param int 'a' => c  :optional
-        print d
-        print ' '
-        print c
-        print "\n"
-.end
-CODE
-10 20
-ok
-OUTPUT
-
 pir_output_is( <<'CODE', <<'OUTPUT', "named optional - set, :opt_flag" );
 .sub main :main
         foo ('a'=>20,'b'=>10)
@@ -2166,21 +2062,6 @@
 .end
 
 .sub foo
-        .param int "a" => c :named("foo")
-        .param int "b" => d
-.end
-CODE
-/Named parameter with more than one name/
-OUTPUT
-
-pir_error_output_like( <<'CODE', <<'OUTPUT', "param .. 'a' => v :named('foo')" );
-.sub main :main
-        foo( "b" => 10, "a" => 20)
-        print "never\n"
-        end
-.end
-
-.sub foo
         .param int  c :named("foo") :named("bar")
         .param int "b" => d
 .end

Modified: branches/calling_conventions/t/pmc/capture.t
==============================================================================
--- branches/calling_conventions/t/pmc/capture.t	(original)
+++ branches/calling_conventions/t/pmc/capture.t	Sun Dec  7 22:37:43 2008
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 
 use Test::More;
-use Parrot::Test tests => 9;
+use Parrot::Test tests => 8;
 
 =head1 NAME
 
@@ -263,12 +263,6 @@
 /get_integer\(\) not implemented in class 'Capture'/
 OUT
 
-pir_error_output_like( $PRE . <<'CODE'. $POST, <<'OUT', 'get_string not implemented' );
-    $S0 = capt
-CODE
-/get_string\(\) not implemented in class 'Capture'/
-OUT
-
 pir_error_output_like( $PRE . <<'CODE'. $POST, <<'OUT', 'get_number not implemented' );
     $N0 = capt
 CODE

Modified: branches/calling_conventions/t/pmc/eval.t
==============================================================================
--- branches/calling_conventions/t/pmc/eval.t	(original)
+++ branches/calling_conventions/t/pmc/eval.t	Sun Dec  7 22:37:43 2008
@@ -97,7 +97,7 @@
     code .= "returncc\n"
     the_sub = my_compiler("_foo", code)
     the_sub()
-    the_sub = global "_foo"
+    the_sub = find_global "_foo"
     the_sub()
 .end
 

Modified: branches/calling_conventions/t/pmc/fixedpmcarray.t
==============================================================================
--- branches/calling_conventions/t/pmc/fixedpmcarray.t	(original)
+++ branches/calling_conventions/t/pmc/fixedpmcarray.t	Sun Dec  7 22:37:43 2008
@@ -304,15 +304,15 @@
      bounds 1
      compares = new 'Integer'
      compares = 0
-     global "compares" = compares
-    cmp_fun = global "cmp_fun"
+     store_global "compares", compares
+    cmp_fun = find_global "cmp_fun"
      sort_ar()
      sort_ar(cmp_fun)
 .end
 .sub sort_ar
     .param pmc cmp_fun :optional
     .local pmc compares
-    compares = global "compares"
+    compares = find_global "compares"
     compares = 0
     .local pmc ar
     new ar, 'FixedPMCArray'
@@ -345,7 +345,7 @@
     .param pmc b
     $I0 = cmp a, b
     .local pmc compares
-    compares = global "compares"
+    compares = find_global "compares"
     inc compares
     .begin_return
     .set_return $I0

Modified: branches/calling_conventions/t/pmc/multidispatch.t
==============================================================================
--- branches/calling_conventions/t/pmc/multidispatch.t	(original)
+++ branches/calling_conventions/t/pmc/multidispatch.t	Sun Dec  7 22:37:43 2008
@@ -29,7 +29,7 @@
 
 .sub 'test' :main
     .local pmc divide
-    divide = global "Integer_divide_Integer"
+    divide = find_global "Integer_divide_Integer"
     add_multi "divide", "Integer,Integer,Integer", divide
 
     $P0 = new 'Integer'
@@ -61,7 +61,7 @@
 
 .sub _main
     .local pmc add
-    add = global "add"
+    add = find_global "add"
     add_multi "add", "Integer,Integer,Integer", add
 
     $P0 = new 'Integer'
@@ -93,7 +93,7 @@
 
 .sub _main
     .local pmc divide
-    divide = global "Integer_divide_Integer"
+    divide = find_global "Integer_divide_Integer"
     add_multi "divide", "Integer,Integer,Integer", divide
 
     $P0 = new 'Integer'
@@ -121,7 +121,7 @@
 
 .sub _main
     .local pmc comp
-    comp = global "Float_cmp_Integer"
+    comp = find_global "Float_cmp_Integer"
     add_multi "cmp", "Float,Integer", comp
 
     $P1 = new 'Float'
@@ -148,7 +148,7 @@
 
 .sub _main
     .local pmc comp
-    comp = global "Float_cmp_Integer"
+    comp = find_global "Float_cmp_Integer"
     add_multi "cmp_num", "Float,Integer", comp
     $P0 = find_multi "cmp_num", "Float,Integer"
     if_null $P0, nok
@@ -176,7 +176,7 @@
 
 .sub _main
     .local pmc comp
-    comp = global "Float_cmp_Integer"
+    comp = find_global "Float_cmp_Integer"
     add_multi "cmp_num", "Float,Integer", comp
     $P0 = find_multi "cmp_num", "Float,Integer"
     if_null $P0, nok
@@ -224,7 +224,7 @@
 .sub _main
     .local pmc divide
     load_bytecode "$temp_pir"
-    divide = global "Integer_divide_Integer"
+    divide = find_global "Integer_divide_Integer"
     add_multi "divide", "Integer,Integer,Integer", divide
 
     \$P0 = new 'Integer'
@@ -335,7 +335,7 @@
     ## push m, s
     ## s = get_global "Bar", "foo"
     ## push m, s
-    ## global "foo" = m
+    ## store_global "foo", m
     print "calling foo(f, b)\n"
     foo(f, b)
     print "calling foo(b, f)\n"

Modified: branches/calling_conventions/t/pmc/object-meths.t
==============================================================================
--- branches/calling_conventions/t/pmc/object-meths.t	(original)
+++ branches/calling_conventions/t/pmc/object-meths.t	Sun Dec  7 22:37:43 2008
@@ -727,7 +727,7 @@
     subclass cl, cl, "Bar"
     o = new "Bar"
     print o
-    $P0 = global "ok2"
+    $P0 = find_global "ok2"
     cl.'add_method'('get_string', $P0, 'vtable' => 1)
     print o
 .end

Modified: branches/calling_conventions/t/pmc/objects.t
==============================================================================
--- branches/calling_conventions/t/pmc/objects.t	(original)
+++ branches/calling_conventions/t/pmc/objects.t	Sun Dec  7 22:37:43 2008
@@ -1011,7 +1011,7 @@
     o = Foo34()
     is( o, 'Foo34', 'found global Foo34' )
 
-    f = global "Foo34"
+    f = find_global "Foo34"
     o = f()
     is( o, 'Foo34', 'found global Foo34 explicitly' )
 

Modified: branches/calling_conventions/t/pmc/sub.t
==============================================================================
--- branches/calling_conventions/t/pmc/sub.t	(original)
+++ branches/calling_conventions/t/pmc/sub.t	Sun Dec  7 22:37:43 2008
@@ -930,11 +930,11 @@
 .sub main :main
     "foo"()
     print "ok\n"
-    $P0 = global "new"
+    $P0 = find_global "new"
     $I0 = defined $P0
     print $I0
     print "\n"
-    $P0 = global "foo"
+    $P0 = find_global "foo"
     unless null $P0 goto foo
     print "nofoo\n"
   foo:

Modified: branches/calling_conventions/t/pmc/threads.t
==============================================================================
--- branches/calling_conventions/t/pmc/threads.t	(original)
+++ branches/calling_conventions/t/pmc/threads.t	Sun Dec  7 22:37:43 2008
@@ -82,7 +82,7 @@
     .local pmc threadfunc
     .local pmc thread
     $I5 = 10
-    threadfunc = global "foo"
+    threadfunc = find_global "foo"
     thread = new 'ParrotThread'
     thread.'run_clone'(threadfunc)
 
@@ -125,7 +125,7 @@
     .local pmc threadfunc
     .local pmc thread
     $I5 = 10
-    threadfunc = global "foo"
+    threadfunc = find_global "foo"
     thread = new 'ParrotThread'
     thread.'run_clone'(threadfunc)
 
@@ -171,7 +171,7 @@
     $P6 = 'from '
 
     print "ok 1\n"
-    threadsub = global "foo"
+    threadsub = find_global "foo"
     thread = new 'ParrotThread'
     thread.'run_clone'(threadsub, $P6)
     sleep 1 # to let the thread run
@@ -214,7 +214,7 @@
     .local pmc threadsub
     .local pmc thread
     bounds 1    # assert slow core -S and -g are fine too
-    threadsub = global "foo"
+    threadsub = find_global "foo"
     thread = new 'ParrotThread'
     $I0 = thread
     print 'start '
@@ -249,7 +249,7 @@
     .const int MAX = 1000
     .local pmc kid
     .local pmc Adder
-    Adder = global '_add'
+    Adder = find_global '_add'
     kid = new 'ParrotThread'
     .local pmc from
     from = new 'Integer'
@@ -302,7 +302,7 @@
     .local pmc foo
     .local pmc queue
     .local pmc thread
-    foo = global '_foo'
+    foo = find_global '_foo'
     queue = new 'TQueue' # flag for when the thread is done
     thread = new 'ParrotThread'
     thread.'run_clone'(foo, queue)
@@ -329,7 +329,7 @@
 pir_output_is( <<'CODE', <<'OUTPUT', "share a PMC" );
 .sub main :main
     .local pmc foo
-    foo = global "_foo"
+    foo = find_global "_foo"
     .local pmc to_share
     to_share = new 'Integer'
     .local pmc shared_ref
@@ -380,7 +380,7 @@
     .local pmc thread
     thread = new 'ParrotThread'
     .local pmc foo
-    foo = global '_foo'
+    foo = find_global '_foo'
     thread.'run_clone'(foo, queue)
     thread.'join'()
     print "done main\n"
@@ -467,7 +467,7 @@
     test3()
     .local pmc test4
     errorsoff .PARROT_ERRORS_GLOBALS_FLAG
-    test4 = global 'test4'
+    test4 = find_global 'test4'
     if null test4 goto okay
     print "not "
 okay:
@@ -488,7 +488,7 @@
     .local pmc thread
     thread = new 'ParrotThread'
     .local pmc thread_func
-    thread_func = global 'thread_func'
+    thread_func = find_global 'thread_func'
     $I0 = .PARROT_CLONE_CODE
     thread.'run'($I0, thread_func, test2)
     thread.'join'()
@@ -831,7 +831,7 @@
     .param pmc what
     .param pmc expect
     .local pmc number
-    number = global 'test_num'
+    number = find_global 'test_num'
     if what == expect goto okay
     print "# got:      "
     print what
@@ -866,7 +866,7 @@
 .end
 
 .sub _check_sanity
-    $P0 = global 'foo'
+    $P0 = find_global 'foo'
     $P1 = get_hll_global [ 'Foo' ], 'foo'
     is($P0, $P1)
 .end
@@ -879,7 +879,7 @@
 
 .sub check_sanity
     _check_sanity()
-    $P0 = global '_check_sanity'
+    $P0 = find_global '_check_sanity'
     $P0()
     $P0 = get_hll_global [ 'Foo' ], '_check_sanity'
     $P0()
@@ -887,14 +887,14 @@
 
 .sub _check_value
     .param int value
-    $P0 = global 'foo'
+    $P0 = find_global 'foo'
     is($P0, value)
 .end
 
 .sub check_value
     .param int value
     _check_value(value)
-    $P0 = global '_check_value'
+    $P0 = find_global '_check_value'
     $P0(value)
     $P0 = get_hll_global [ 'Foo' ], '_check_value'
     $P0(value)
@@ -1006,7 +1006,7 @@
     passed = 15
 
     .local pmc thread_func
-    thread_func = global 'test'
+    thread_func = find_global 'test'
     print "in thread:\n"
     thread.'run'(flags, thread_func, passed)
     thread.'join'()
@@ -1048,7 +1048,7 @@
     .local pmc foo
 
     thread = new 'ParrotThread'
-    foo = global '_foo'
+    foo = find_global '_foo'
     thread.'run_clone'(foo, queue)
     thread.'join'()
     print "done main\n"

Modified: branches/calling_conventions/t/stm/basic_mt.t
==============================================================================
--- branches/calling_conventions/t/stm/basic_mt.t	(original)
+++ branches/calling_conventions/t/stm/basic_mt.t	Sun Dec  7 22:37:43 2008
@@ -73,8 +73,8 @@
     a = 0
     a = new 'STMRef', a
 
-    _incr = global "incr"
-    _waiter = global "waiter"
+    _incr = find_global "incr"
+    _waiter = find_global "waiter"
 
     wThr = new 'ParrotThread'
     wThr.'run_clone'(_waiter, a)
@@ -139,8 +139,8 @@
     a = ""
     a = new 'STMRef', a
 
-    _incr = global "incr"
-    _waiter = global "waiter"
+    _incr = find_global "incr"
+    _waiter = find_global "waiter"
 
     wThr = new 'ParrotThread'
     wThr.'run_clone'(_waiter, a)

Modified: branches/calling_conventions/t/stm/runtime.t
==============================================================================
--- branches/calling_conventions/t/stm/runtime.t	(original)
+++ branches/calling_conventions/t/stm/runtime.t	Sun Dec  7 22:37:43 2008
@@ -100,7 +100,7 @@
     $P0 = new 'STMVar', $P0
     values[1] = $P0
     .local pmc _thread_main
-    _thread_main = global 'do_choice'
+    _thread_main = find_global 'do_choice'
 
     $I0 = _thread_main(values)
     $I1 = _thread_main(values)
@@ -141,7 +141,7 @@
     .local pmc transaction
     .local pmc real_sub
     transaction = get_hll_global ['STM'], 'transaction'
-    real_sub = global '_wakeup_func'
+    real_sub = find_global '_wakeup_func'
     transaction(real_sub, values)
     .return (0)
 .end
@@ -170,12 +170,12 @@
     $P0 = new 'STMVar', $P0
     values[1] = $P0
     .local pmc _thread_main
-    _thread_main = global 'do_choice'
+    _thread_main = find_global 'do_choice'
     thread_one.'run_clone'(_thread_main, values)
     thread_two.'run_clone'(_thread_main, values)
     thread_three.'run_clone'(_thread_main, values)
     .local pmc _wakeup_thread_main
-    _wakeup_thread_main = global 'wakeup_func'
+    _wakeup_thread_main = find_global 'wakeup_func'
     wakeup_thread.'run_clone'(_wakeup_thread_main, values)
     $I0 = thread_one.'join'()
     $I1 = thread_two.'join'()
@@ -288,7 +288,7 @@
     .local pmc transaction
     .local pmc real_sub
     transaction = get_hll_global ['STM'], 'transaction'
-    real_sub = global '_wakeup_func'
+    real_sub = find_global '_wakeup_func'
     transaction(real_sub, what)
     .return (0)
 .end
@@ -392,7 +392,7 @@
     .param int blockp
 
     $P0 = get_hll_global ['STM'], 'transaction'
-    $P1 = global '_fetchHead'
+    $P1 = find_global '_fetchHead'
     .tailcall $P0($P1, self, removep, blockp)
 .end
 
@@ -447,7 +447,7 @@
     .param int blockp
 
     $P0 = get_hll_global ['STM'], 'transaction'
-    $P1 = global '_addTail'
+    $P1 = find_global '_addTail'
     $P2 = $P0($P1, self, what, blockp)
     .return ($P2)
 .end
@@ -550,8 +550,8 @@
     $P0 = get_hll_global ['STMQueue'], '__onload'
     $P0()
 
-    _add = global "adder"
-    _remove = global "remover"
+    _add = find_global "adder"
+    _remove = find_global "remover"
 
     addThread = new 'ParrotThread'
     removeThread = new 'ParrotThread'
@@ -605,7 +605,7 @@
     queue = $P0.'new'('length' => SIZE)
 
     $P0 = get_hll_global ['STM'], 'transaction'
-    $P1 = global '_test'
+    $P1 = find_global '_test'
     $P0($P1, queue)
 
     print "ok\n"

Modified: branches/calling_conventions/tools/dev/mk_inno.pl
==============================================================================
--- branches/calling_conventions/tools/dev/mk_inno.pl	(original)
+++ branches/calling_conventions/tools/dev/mk_inno.pl	Sun Dec  7 22:37:43 2008
@@ -74,6 +74,7 @@
 Compression=lzma
 SolidCompression=yes
 ChangesAssociations=yes
+PrivilegesRequired=none
 
 [Files]
 Source: "$prefix\\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs

Modified: branches/calling_conventions/tools/dev/mk_language_shell.pl
==============================================================================
--- branches/calling_conventions/tools/dev/mk_language_shell.pl	(original)
+++ branches/calling_conventions/tools/dev/mk_language_shell.pl	Sun Dec  7 22:37:43 2008
@@ -364,9 +364,9 @@
     | <quote> {*}                                #= quote
 }
 
-rule integer { \d+ {*} }
+token integer { \d+ {*} }
 
-rule quote {
+token quote {
     [ \' <string_literal: '\'' > \' | \" <string_literal: '"' > \" ]
     {*}
 }
@@ -535,10 +535,11 @@
 
 __t/00-sanity.t__
 # This just checks that the basic parsing and call to builtin say() works.
-say '1..3';
+say '1..4';
 say 'ok 1';
 say 'ok ', 2;
 say 'ok ', 2 + 1;
+say 'ok', ' ', 4;
 
 __DATA__
 



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About