fixed a security bug in logging, added basic xml support to as3 compiler
authorMatthias Kramm <kramm@quiss.org>
Thu, 9 Apr 2009 16:41:24 +0000 (18:41 +0200)
committerMatthias Kramm <kramm@quiss.org>
Thu, 9 Apr 2009 16:41:24 +0000 (18:41 +0200)
33 files changed:
avi2swf/v2swf.c
installer/archive.c
lib/action/actioncompiler.c
lib/as3/abc.c
lib/as3/common.c
lib/as3/files.c
lib/as3/import.c
lib/as3/initcode.c
lib/as3/ok/extendclass.as
lib/as3/ok/namespaces1.as
lib/as3/ok/namespaces2.as
lib/as3/ok/xml.as
lib/as3/parser.tab.c
lib/as3/parser.tab.h
lib/as3/parser.y
lib/as3/registry.c
lib/as3/registry.h
lib/as3/tokenizer.h
lib/as3/tokenizer.lex
lib/as3/tokenizer.yy.c
lib/devices/opengl.c
lib/devices/ops.c
lib/devices/polyops.c
lib/devices/rescale.c
lib/log.c
lib/pdf/GFXOutputDev.cc
lib/python/gfx.c
lib/python/pyutils.c
lib/q.c
lib/q.h
src/pdf2swf.c
src/swfc-feedback.c
src/swfdump.c

index 182821a..c974bfb 100644 (file)
@@ -110,7 +110,7 @@ static void msg(char*format, ...)
     if(!verbose)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index a551759..0502845 100644 (file)
@@ -46,7 +46,7 @@ static void msg(char*format, ...)
     if(!verbose)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index 8fda071..9edc590 100644 (file)
@@ -34,7 +34,7 @@ static void print_error(const char*format,...)
     int len;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
 
     len = strlen(buf);
@@ -50,7 +50,7 @@ static void print_warn(const char*format,...)
     int len;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
 
     len = strlen(buf);
index 4ab4555..330417d 100644 (file)
@@ -119,7 +119,8 @@ abc_file_t*abc_file_new()
 abc_class_t* abc_class_new(abc_file_t*file, multiname_t*classname, multiname_t*superclass) {
     
     NEW(abc_class_t,c);
-    array_append(file->classes, NO_KEY, c);
+    if(file)
+        array_append(file->classes, NO_KEY, c);
 
     c->file = file;
     c->classname = multiname_clone(classname);
@@ -345,7 +346,7 @@ static void dump_method(FILE*fo, const char*prefix,
     if(m->return_type)
         return_type = multiname_tostring(m->return_type);
     else
-        return_type = strdup("void");
+        return_type = strdup("*");
 
     fprintf(fo, "%s", prefix);
     fprintf(fo, "%s %s ", attr, type);
@@ -647,6 +648,8 @@ void* swf_DumpABC(FILE*fo, void*code, char*prefix)
             char*supername = multiname_tostring(cls->superclass);
             fprintf(fo, " extends %s", supername);
             free(supername);
+        }
+        if(cls->interfaces) {
             multiname_list_t*ilist = cls->interfaces;
             if(ilist)
                 fprintf(fo, " implements");
@@ -1128,6 +1131,9 @@ static pool_t*writeABC(TAG*abctag, void*code, pool_t*pool)
     swf_SetU30(tag, file->scripts->num);
     for(t=0;t<file->scripts->num;t++) {
        abc_script_t*s = (abc_script_t*)array_getvalue(file->scripts, t);
+        if(!s->method->body || !s->method->body->code) {
+            fprintf(stderr, "Internal Error: initscript has no body\n");
+        }
        swf_SetU30(tag, s->method->index); //!=t!
        traits_write(pool, tag, s->traits);
     }
index 3417dd0..60f7101 100644 (file)
@@ -15,7 +15,7 @@ void as3_error(const char*format, ...)
     if(as3_verbosity<0)
         exit(1);
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     fprintf(stderr, "%s:%d:%d: error: %s\n", current_filename, current_line, current_column, buf);
     fflush(stderr);
@@ -29,7 +29,7 @@ void as3_warning(const char*format, ...)
     if(as3_verbosity<1)
         return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     fprintf(stdout, "%s:%d:%d: warning: %s\n", current_filename, current_line, current_column, buf);
     fflush(stdout);
@@ -42,7 +42,7 @@ void as3_softwarning(const char*format, ...)
     if(as3_verbosity<2)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     fprintf(stderr, "%s:%d:%d: warning: %s\n", current_filename, current_line, current_column, buf);
     fflush(stderr);
index 2d442f6..eaa5a8c 100644 (file)
@@ -37,7 +37,7 @@ static void dbg(const char*format, ...)
     if(!verbose)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index 4353202..bec20be 100644 (file)
@@ -103,7 +103,9 @@ static int compare_traits(const void*v1, const void*v2)
 static classinfo_t*resolve_class(char*filename, char*what, multiname_t*n)
 {
     if(!n) return 0;
-    if(!n->name[0] || !strcmp(n->name, "void")) return 0;
+    if(!n->name[0]) return 0;
+    if(!strcmp(n->name, "void")) 
+        return &voidclass;
 
     classinfo_t*c = 0;
     if(n->ns && n->ns->name) {
index 59d2efc..20e483a 100644 (file)
@@ -3,16 +3,91 @@
 #include "registry.h"
 #include "initcode.h"
 
-void initcode_add_classlist(abc_script_t*init, parsedclass_list_t*classes)
+int compare_lists(const void *_v1, const void *_v2)
+{
+    classinfo_t**v1 = *(classinfo_t***)_v1;
+    classinfo_t**v2 = *(classinfo_t***)_v2;
+    parsedclass_t*p1 = **(parsedclass_t***)_v1;
+    parsedclass_t*p2 = **(parsedclass_t***)_v2;
+    if((p1->cls->flags^p2->cls->flags)&FLAG_INTERFACE) {
+        return (int)(p2->cls->flags&FLAG_INTERFACE) - (int)(p1->cls->flags&FLAG_INTERFACE);
+    }
+    do {
+        v1++;v2++;
+        if(*v1<*v2) return -1;
+        else if(*v1>*v2) return 1;
+    } while(*v1 && *v2);
+    return 0;
+}
+
+/* sort classes so that 
+   (a) interfaces appear before classes
+   (b) base classes always appear before their subclasses
+   (c) neighboring elements have similar scope stacks 
+
+   Notice: we don't yet handle multiple inheritance (in interfaces) correctly.
+*/
+parsedclass_t** initcode_sort_classlist(parsedclass_list_t*classes)
+{
+    /* count classes */
+    int count = 0;
+    parsedclass_list_t*l;
+    for(l=classes;l;l=l->next) {
+        count++;
+    }
+    void***list = malloc(sizeof(void**)*count);
+
+    /* build an array for each class */
+    int i = 0;
+    for(l=classes;l;l=l->next) {
+        classinfo_t*cls = l->parsedclass->cls;
+        int len=0;
+        classinfo_t*c=cls;
+        while(c) {
+            len ++;
+            c = c->flags&FLAG_INTERFACE?c->interfaces[0]:c->superclass;
+        }
+        void**a = (void**)malloc(sizeof(void*)*(len+2));
+        a[0] = l->parsedclass;
+        a[len+1] = 0;
+        int t=len;
+        c = cls;
+        while(c) {
+            len ++;
+            a[t--] = c;
+            c = c->flags&FLAG_INTERFACE?c->interfaces[0]:c->superclass;
+        }
+        list[i++] = a;
+    }
+    
+    /* sort and flatten */
+    qsort(list, count, sizeof(void**), compare_lists);
+
+    parsedclass_t**list2 = malloc(sizeof(parsedclass_t*)*(count+1));
+    for(i=0;i<count;i++) {
+        list2[i] = (parsedclass_t*)list[i][0];
+        free(list[i]);
+    }
+    list2[count]=0;
+    free(list);
+    return list2;
+}
+
+void initcode_add_classlist(abc_script_t*init, parsedclass_list_t*_classes)
 {
     code_t*c = 0;
 
     c = abc_getlocal_0(c);
     c = abc_pushscope(c);
+  
+    parsedclass_t**classes = initcode_sort_classlist(_classes);
 
-    for(;classes;classes=classes->next) {
-        abc_class_t*abc = classes->parsedclass->abc;
-        classinfo_t*cls = classes->parsedclass->cls;
+    int t;
+    for(t=0;classes[t];t++) {
+        abc_class_t*abc = classes[t]->abc;
+        classinfo_t*cls = classes[t]->cls;
+        
+        array_append(init->file->classes, "", abc);
 
         /* write the construction code for this class to the global init
            function */
@@ -67,6 +142,8 @@ void initcode_add_classlist(abc_script_t*init, parsedclass_list_t*classes)
     }
     c = abc_returnvoid(c);
 
+    free(classes);
+
     init->method->body->code = c;
 }
 
index a6e5288..9dd3445 100644 (file)
@@ -1,17 +1,18 @@
 
-/* I can't make this work with Flash 10, with any compiler.
-
-   Error: Error #2136: The SWF file extendclass.swf
-   contains invalid data.
-*/
-
 package {
 
     import flash.display.MovieClip
     
     public class Main extends flash.display.MovieClip {
         function Main() {
-            var p = new ExtendMain();
+            if(!this instanceof ExtendMain) {
+                /* If we don't check what class we're in, we get a infinite
+                   recursion, and flash player outputs this message:
+                   Error: Error #2136: The SWF file extendclass.swf
+                   contains invalid data.
+                */
+                var p = new ExtendMain();
+            }
         }
     }
     
index e289ac3..2d969de 100644 (file)
@@ -12,7 +12,7 @@ package my.namespaces {
             trace("error");
         }
         ns2 static function test() {
-            trace("ok 2/4");
+            trace("ok 2/6");
             use namespace my.namespaces.ns2;
             (new Test()).test2()
         }
@@ -21,12 +21,15 @@ package my.namespaces {
         }
 
         ns1 function test2() {trace("error");}
-        ns2 function test2() {trace("ok 3/4");}
+        ns2 function test2() {trace("ok 3/6");}
         ns3 function test2() {trace("error");}
 
         ns4 static function test3() {
-            trace("ok 4/4");
+            trace("ok 4/6");
         }
+
+        ns1 function test4() {trace("ok 5/6");}
+        ns2 function test4() {trace("ok 6/6");}
     }
 }
     
@@ -40,7 +43,7 @@ package {
     
     public namespace ns4clone = "bla bla";
     use namespace ns4clone;
-
+    
     public class Main extends flash.display.MovieClip {
 
         use namespace my.namespaces.ns2;
@@ -59,11 +62,17 @@ package {
             } catch(e:Error) {
                 // Proxy is similar to an interface, and will throw some kind
                 // of "class not implemented" exception
-                trace("ok 1/4");
+                trace("ok 1/6");
             }
             my.namespaces.Test.test()
-
             my.namespaces.Test.test3()
+
+            use namespace my.namespaces.ns1;
+            use namespace my.namespaces.ns2;
+            var test:Test = new Test();
+            test.ns1::test4();
+            test.ns2::test4();
+
             trace("[exit]");
         }
     }
index 6354a65..6a065bd 100644 (file)
@@ -7,12 +7,7 @@ package {
        
        dynamic public class OverrideProxy extends Proxy {
             flash_proxy override function callProperty($name:*, ...$args:Array):* {
-                    var returnValue:* = _tweens[$name].apply(null, $args);
-                    realign();
-                    if (!isNaN(_pauseTime)) {
-                            pause(); //in case any tweens were added that weren't paused!
-                    }
-                    return returnValue;
+                    return none;
             }
         }
        dynamic public class Main extends flash.display.MovieClip {
index da948ed..cb9b68b 100644 (file)
@@ -142,7 +142,7 @@ package {
 
             /* ----- special characters ----- */
 
-            var x20 = <x> >&</x>;
+            var x20 = <x> > & </x>;
             assert(x20.toString() == ">&");
             var x21 = <x a="&quot;&lt;&gt;"/>;
             assert(x21.@a == "\"<>");
index 7069fc3..ddea058 100644 (file)
@@ -222,14 +222,15 @@ extern int a3_lex();
      prec_none = 352,
      below_semicolon = 353,
      below_assignment = 354,
-     below_minus = 355,
-     minusminus_prefix = 356,
-     plusplus_prefix = 357,
-     below_curly = 358,
-     new2 = 359,
-     above_identifier = 360,
-     below_else = 361,
-     above_function = 362
+     below_lt = 355,
+     below_minus = 356,
+     minusminus_prefix = 357,
+     plusplus_prefix = 358,
+     below_curly = 359,
+     new2 = 360,
+     above_identifier = 361,
+     below_else = 362,
+     above_function = 363
    };
 #endif
 
@@ -278,7 +279,7 @@ tokenunion
 
 
 /* Line 223 of skeleton.m4  */
-#line 282 "parser.tab.c"
+#line 283 "parser.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -579,7 +580,6 @@ void initialize_file(char*filename)
         if(!state->method)
             syntaxerror("internal error: skewed tokencount");
         function_initvars(state->method, 0, 0, 1);
-        global->classinit = abc_initscript(global->file);
         global->init = abc_initscript(global->file);
     }
 }
@@ -592,10 +592,9 @@ void finish_file()
     
     if(as3_pass==2) {
         dict_del(global->file2token2info, current_filename);
-
         code_t*header = method_header(state->method);
         code_t*c = wrap_function(header, 0, global->init->method->body->code);
-        global->init->method->body->code = c;
+        global->init->method->body->code = abc_returnvoid(c);
         free(state->method);state->method=0;
     }
 
@@ -610,6 +609,7 @@ void initialize_parser()
     global->file->flags &= ~ABCFILE_LAZY;
     global->file2token2info = dict_new();
     global->token2info = 0;
+    global->classinit = abc_initscript(global->file);
 }
 
 void* finish_parser()
@@ -1075,9 +1075,13 @@ static void startclass(modifiers_t* mod, char*classname, classinfo_t*extends, cl
         /* generate the abc code for this class */
         MULTINAME(classname2,state->cls->info);
         multiname_t*extends2 = sig2mname(extends);
-        state->cls->abc = abc_class_new(global->file, &classname2, extends2);
-        multiname_destroy(extends2);
 
+        /* don't add the class to the class index just yet- that will be done later
+           by initscript */
+        state->cls->abc = abc_class_new(0, &classname2, extends2);
+        state->cls->abc->file = global->file;
+
+        multiname_destroy(extends2);
         if(state->cls->info->flags&FLAG_FINAL) abc_class_final(state->cls->abc);
         if(!(state->cls->info->flags&FLAG_DYNAMIC)) abc_class_sealed(state->cls->abc);
         if(state->cls->info->flags&FLAG_INTERFACE) {
@@ -1265,7 +1269,7 @@ static methodinfo_t*registerfunction(enum yytokentype getset, modifiers_t*mod, c
             minfo = methodinfo_register_onclass(state->cls->info, ns.access, ns.name, name);
             minfo->kind = INFOTYPE_VAR; //hack
             minfo->subtype = gs;
-            minfo->return_type = return_type;
+            minfo->return_type = type;
         }
 
         /* can't assign a slot as getter and setter might have different slots */
@@ -1447,8 +1451,13 @@ static abc_method_t* endfunction(modifiers_t*mod, enum yytokentype getset, char*
         } else if(state->method->is_constructor) {
             f = abc_class_getconstructor(state->cls->abc, type2);
         } else if(!state->method->is_global) {
-            namespace_t mname_ns = modifiers2access(mod);
-            multiname_t mname = {QNAME, &mname_ns, 0, name};
+            namespace_t ns = modifiers2access(mod);
+          
+            /* deal with protected */
+            if(ns.access == ACCESS_PROTECTED && state->cls)
+                ns.name = state->cls->info->name;
+
+            multiname_t mname = {QNAME, &ns, 0, name};
 
             if(mod->flags&FLAG_STATIC)
                 f = abc_class_staticmethod(state->cls->abc, type2, &mname);
@@ -1863,11 +1872,11 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
 
 
 /* Line 273 of skeleton.m4  */
-#line 1867 "parser.tab.c"
+#line 1876 "parser.tab.c"
 /* Unqualified %code blocks.  */
 
 /* Line 274 of skeleton.m4  */
-#line 1944 "parser.y"
+#line 1952 "parser.y"
 
     char is_subtype_of(classinfo_t*type, classinfo_t*supertype)
     {
@@ -1876,7 +1885,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
 
 
 /* Line 274 of skeleton.m4  */
-#line 2393 "parser.y"
+#line 2401 "parser.y"
 
     static void state_has_imports()
     {
@@ -1899,7 +1908,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
 
 
 /* Line 274 of skeleton.m4  */
-#line 2526 "parser.y"
+#line 2534 "parser.y"
 
     static int slotstate_varconst = 0;
     static modifiers_t*slotstate_flags = 0;
@@ -1917,10 +1926,159 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
             parserassert(state->method);
         }
     }
+    static trait_t* add_abc_slot(modifiers_t* modifiers, const char*name, multiname_t*m, code_t***c)
+    {
+        int flags = modifiers->flags;
+        namespace_t ns = modifiers2access(modifiers);
+        /* deal with protected */
+        if(ns.access == ACCESS_PROTECTED && state->cls)
+            ns.name = state->cls->info->name;
+
+        /* slot name */
+        multiname_t mname = {QNAME, &ns, 0, name};
+      
+        trait_list_t**traits;
+        code_t**code=0;
+        if(!state->cls) {
+            // global variable
+            ns.name = state->package;
+            traits = &global->init->traits;
+            code = &global->init->method->body->code;
+        } else if(flags&FLAG_STATIC) {
+            // static variable
+            traits = &state->cls->abc->static_traits;
+            code = &state->cls->static_init->header;
+        } else {
+            // instance variable
+            traits = &state->cls->abc->traits;
+            code = &state->cls->init->header;
+        }
+        if(c)
+            *c = code;
+        if(m) 
+            memcpy(m, &mname, sizeof(multiname_t));
+            
+        return trait_new_member(traits, 0, multiname_clone(&mname), 0);
+    }
+
+
+/* Line 274 of skeleton.m4  */
+#line 2712 "parser.y"
+
+    static int xml_level = 0;
+
+
+/* Line 274 of skeleton.m4  */
+#line 3390 "parser.y"
+
+    node_t* resolve_identifier(char*name)
+    {
+        typedcode_t o;
+        o.t = 0;
+        o.c = 0;
+
+        slotinfo_t*a = 0;
+        memberinfo_t*f = 0;
+
+        variable_t*v;
+        /* look at variables */
+        if((v = find_variable(state, name))) {
+            // name is a local variable
+            o.c = abc_getlocal(o.c, v->index);
+            o.t = v->type;
+            return mkcodenode(o);
+        }
+        if((v = find_slot(state, name))) {
+            o.c = abc_getscopeobject(o.c, 1);
+            o.c = abc_getslot(o.c, v->index);
+            o.t = v->type;
+            return mkcodenode(o);
+        }
+
+        int i_am_static = (state->method && state->method->info)?(state->method->info->flags&FLAG_STATIC):FLAG_STATIC;
+
+        /* look at current class' members */
+        if(!state->method->inner && 
+            state->cls && 
+            (f = findmember_nsset(state->cls->info, name, 1)))
+        {
+            // name is a member or attribute in this class
+            int var_is_static = (f->flags&FLAG_STATIC);
+
+            if(f->kind == INFOTYPE_VAR && (f->flags&FLAG_CONST)) {
+                /* if the variable is a constant (and we know what is evaluates to), we
+                   can just use the value itself */
+                varinfo_t*v = (varinfo_t*)f;
+                if(v->value) {
+                    return mkconstnode(v->value);
+                }
+            }
+           
+            if(var_is_static >= i_am_static) {
+                if(f->kind == INFOTYPE_METHOD) {
+                    o.t = TYPE_FUNCTION(f);
+                } else {
+                    o.t = f->type;
+                }
+
+                if(var_is_static && !i_am_static) {
+                /* access to a static member from a non-static location.
+                   do this via findpropstrict:
+                   there doesn't seem to be any non-lookup way to access
+                   static properties of a class */
+                    state->method->late_binding = 1;
+                    o.t = f->type;
+                    namespace_t ns = {f->access, f->package};
+                    multiname_t m = {QNAME, &ns, 0, name};
+                    o.c = abc_findpropstrict2(o.c, &m);
+                    o.c = abc_getproperty2(o.c, &m);
+                    return mkcodenode(o);
+                } else if(f->slot>0) {
+                    o.c = abc_getlocal_0(o.c);
+                    o.c = abc_getslot(o.c, f->slot);
+                    return mkcodenode(o);
+                } else {
+                    namespace_t ns = {f->access, f->package};
+                    multiname_t m = {QNAME, &ns, 0, name};
+                    o.c = abc_getlocal_0(o.c);
+                    o.c = abc_getproperty2(o.c, &m);
+                    return mkcodenode(o);
+                }
+            }
+        } 
+        
+        /* look at actual classes, in the current package and imported */
+        if((a = find_class(name))) {
+            o = push_class(a);
+            return mkcodenode(o);
+        }
+
+        /* look through package prefixes */
+        if(dict_contains(state->import_toplevel_packages, name) || 
+           registry_ispackage(name)) {
+            o.c = abc___pushpackage__(o.c, name);
+            o.t = 0;
+            return mkcodenode(o); //?
+        }
+
+        /* unknown object, let the avm2 resolve it */
+        if(1) {
+            //as3_softwarning("Couldn't resolve '%s', doing late binding", name);
+            as3_warning("Couldn't resolve '%s', doing late binding", name);
+            state->method->late_binding = 1;
+                    
+            multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, name};
+
+            o.t = 0;
+            o.c = abc_findpropstrict2(o.c, &m);
+            o.c = abc_getproperty2(o.c, &m);
+            return mkcodenode(o);
+        }
+    }
 
 
 /* Line 274 of skeleton.m4  */
-#line 3414 "parser.y"
+#line 3523 "parser.y"
 
     void add_active_url(const char*url)
     {
@@ -1932,7 +2090,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
 
 
 /* Line 274 of skeleton.m4  */
-#line 1936 "parser.tab.c"
+#line 2094 "parser.tab.c"
 
 #ifdef short
 # undef short
@@ -2145,22 +2303,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  149
+#define YYFINAL  153
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3107
+#define YYLAST   3311
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  133
+#define YYNTOKENS  134
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  116
+#define YYNNTS  128
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  305
+#define YYNRULES  331
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  519
+#define YYNSTATES  570
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   362
+#define YYMAXUTOK   363
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -2171,16 +2329,16 @@ static const yytype_uint8 yytranslate[] =
        0,     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,   117,     2,     2,     2,   115,   107,     2,
-     121,   132,   114,   112,   100,   111,   126,   113,     2,     2,
+       2,     2,     2,   118,     2,     2,     2,   116,   107,     2,
+     122,   133,   115,   113,   100,   112,   127,   114,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,   104,    99,
-     108,   102,   109,   103,   127,     2,     2,     2,     2,     2,
+     109,   102,   110,   103,   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,   123,     2,   124,   106,     2,     2,     2,     2,     2,
+       2,   124,     2,   125,   106,     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,   125,   105,   131,   116,     2,     2,     2,
+       2,     2,     2,   126,   105,   132,   117,     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,
@@ -2203,8 +2361,8 @@ static const yytype_uint8 yytranslate[] =
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,   101,   110,   118,   119,   120,   122,
-     128,   129,   130
+      95,    96,    97,    98,   101,   108,   111,   119,   120,   121,
+     123,   129,   130,   131
 };
 
 #if YYDEBUG
@@ -2229,153 +2387,169 @@ static const yytype_uint16 yyprhs[] =
      378,   379,   389,   390,   399,   400,   402,   404,   407,   409,
      414,   416,   418,   420,   421,   423,   425,   428,   430,   433,
      442,   444,   446,   447,   452,   454,   458,   462,   463,   466,
-     468,   470,   472,   474,   476,   478,   480,   482,   484,   485,
-     487,   490,   495,   499,   501,   506,   509,   511,   513,   514,
-     515,   528,   530,   531,   532,   543,   545,   549,   551,   553,
-     555,   559,   561,   563,   565,   568,   569,   570,   574,   575,
-     577,   579,   581,   584,   587,   588,   593,   598,   603,   606,
-     608,   611,   613,   615,   617,   621,   623,   627,   628,   630,
-     632,   634,   638,   644,   646,   648,   650,   652,   654,   656,
-     658,   660,   664,   668,   672,   676,   680,   684,   688,   692,
-     696,   700,   704,   708,   711,   714,   718,   722,   726,   730,
-     734,   738,   742,   746,   750,   754,   758,   762,   766,   770,
-     774,   779,   782,   784,   788,   791,   796,   800,   804,   808,
-     812,   816,   820,   824,   828,   832,   836,   840,   844,   850,
-     853,   856,   859,   862,   866,   869,   874,   880,   884,   890,
-     894,   896,   899,   904,   909,   912
+     468,   470,   472,   474,   476,   478,   480,   482,   484,   486,
+     488,   490,   491,   492,   495,   498,   501,   505,   516,   523,
+     535,   536,   538,   540,   543,   547,   548,   550,   553,   558,
+     562,   564,   569,   572,   574,   576,   577,   578,   591,   593,
+     594,   595,   606,   608,   612,   614,   616,   618,   622,   624,
+     626,   628,   631,   632,   633,   637,   638,   640,   642,   644,
+     647,   650,   651,   656,   661,   666,   669,   671,   674,   676,
+     678,   680,   684,   686,   690,   691,   693,   695,   697,   701,
+     707,   709,   711,   713,   715,   717,   719,   721,   723,   725,
+     729,   733,   737,   741,   745,   749,   753,   757,   761,   765,
+     769,   773,   776,   779,   783,   787,   791,   795,   799,   803,
+     807,   811,   815,   819,   823,   827,   831,   835,   839,   844,
+     847,   849,   853,   856,   861,   865,   869,   873,   877,   881,
+     885,   889,   893,   897,   901,   905,   909,   915,   918,   921,
+     924,   927,   931,   934,   940,   942,   944,   946,   948,   954,
+     958,   964,   969,   974,   981,   988,   992,   994,   997,  1002,
+    1007,  1010
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     134,     0,    -1,   135,    -1,    -1,   136,    -1,   137,    -1,
-     136,   137,    -1,   185,    -1,   197,    -1,   195,    -1,   216,
-      -1,   206,    -1,   146,    -1,   147,   125,   135,   131,    -1,
-      99,    -1,    -1,   139,    -1,   140,    -1,   139,   140,    -1,
-     197,    -1,   195,    -1,   216,    -1,   206,    -1,   146,    -1,
-     147,   125,   138,   131,    -1,    99,    -1,   142,    -1,    -1,
-     142,   144,    -1,   144,    -1,   188,    -1,   158,    -1,   159,
-      -1,   160,    -1,   162,    -1,   170,    -1,   153,    -1,   182,
-      -1,   178,    -1,   239,    -1,   248,    -1,   247,    -1,   125,
-     142,   131,    -1,   125,   131,    -1,    99,    -1,   143,    -1,
-     149,    -1,   164,    -1,   165,    -1,   235,    -1,   180,    -1,
-     147,   125,   142,   131,    -1,   144,    99,    -1,   144,    -1,
-     143,    -1,     3,    89,     3,    -1,   102,   243,    -1,    -1,
-      45,   150,    -1,    31,   150,    -1,   151,    -1,   150,   100,
-     151,    -1,     3,   226,   148,    -1,    -1,    64,   145,    -1,
-      -1,    63,   121,   154,   237,   132,   145,   152,    -1,    -1,
-     149,    -1,   239,    -1,    45,     3,   226,    -1,     3,    -1,
-      11,   121,    -1,    11,    49,   121,    -1,   157,   155,    99,
-     237,    99,   239,   132,   145,    -1,   157,   156,    67,   237,
-     132,   145,    -1,    -1,    12,   121,   161,   237,   132,   145,
-      -1,    -1,    13,   163,   145,    12,   121,   237,   132,    -1,
+     135,     0,    -1,   136,    -1,    -1,   137,    -1,   138,    -1,
+     137,   138,    -1,   186,    -1,   198,    -1,   196,    -1,   227,
+      -1,   207,    -1,   147,    -1,   148,   126,   136,   132,    -1,
+      99,    -1,    -1,   140,    -1,   141,    -1,   140,   141,    -1,
+     198,    -1,   196,    -1,   227,    -1,   207,    -1,   147,    -1,
+     148,   126,   139,   132,    -1,    99,    -1,   143,    -1,    -1,
+     143,   145,    -1,   145,    -1,   189,    -1,   159,    -1,   160,
+      -1,   161,    -1,   163,    -1,   171,    -1,   154,    -1,   183,
+      -1,   179,    -1,   250,    -1,   261,    -1,   260,    -1,   126,
+     143,   132,    -1,   126,   132,    -1,    99,    -1,   144,    -1,
+     150,    -1,   165,    -1,   166,    -1,   246,    -1,   181,    -1,
+     148,   126,   143,   132,    -1,   145,    99,    -1,   145,    -1,
+     144,    -1,     3,    89,     3,    -1,   102,   254,    -1,    -1,
+      45,   151,    -1,    31,   151,    -1,   152,    -1,   151,   100,
+     152,    -1,     3,   237,   149,    -1,    -1,    64,   146,    -1,
+      -1,    63,   122,   155,   248,   133,   146,   153,    -1,    -1,
+     150,    -1,   250,    -1,    45,     3,   237,    -1,     3,    -1,
+      11,   122,    -1,    11,    49,   122,    -1,   158,   156,    99,
+     248,    99,   250,   133,   146,    -1,   158,   157,    67,   248,
+     133,   146,    -1,    -1,    12,   122,   162,   248,   133,   146,
+      -1,    -1,    13,   164,   146,    12,   122,   248,   133,    -1,
       65,    -1,    65,     3,    -1,    29,    -1,    29,     3,    -1,
-      -1,   167,    -1,   169,    -1,   167,   169,    -1,   168,    -1,
-     167,   168,    -1,    33,   243,   104,   141,    -1,    61,   104,
-     141,    -1,    -1,    14,   121,   171,   243,   132,   125,   166,
-     131,    -1,    -1,    32,   121,     3,   226,   132,   173,   125,
-     141,   131,    -1,    -1,    26,   125,   175,   141,   131,    -1,
-     172,    -1,   176,   172,    -1,   176,    -1,   176,   174,    -1,
-     174,    -1,    -1,    51,   125,   179,   141,   131,   177,    -1,
-      36,   237,    -1,    36,    -1,    38,   121,   237,   132,    -1,
-     181,   145,    -1,     3,    -1,    17,    -1,     4,    -1,   184,
-     126,   183,    -1,   183,    -1,    -1,    17,   184,   125,   186,
-     138,   131,    -1,    -1,    17,   125,   187,   138,   131,    -1,
-      40,   222,    -1,    40,   184,   126,   114,    -1,    -1,   190,
-      -1,   191,    -1,   190,   191,    -1,    19,    -1,    20,    -1,
+      -1,   168,    -1,   170,    -1,   168,   170,    -1,   169,    -1,
+     168,   169,    -1,    33,   254,   104,   142,    -1,    61,   104,
+     142,    -1,    -1,    14,   122,   172,   254,   133,   126,   167,
+     132,    -1,    -1,    32,   122,     3,   237,   133,   174,   126,
+     142,   132,    -1,    -1,    26,   126,   176,   142,   132,    -1,
+     173,    -1,   177,   173,    -1,   177,    -1,   177,   175,    -1,
+     175,    -1,    -1,    51,   126,   180,   142,   132,   178,    -1,
+      36,   248,    -1,    36,    -1,    38,   122,   248,   133,    -1,
+     182,   146,    -1,     3,    -1,    17,    -1,     4,    -1,   185,
+     127,   184,    -1,   184,    -1,    -1,    17,   185,   126,   187,
+     139,   132,    -1,    -1,    17,   126,   188,   139,   132,    -1,
+      40,   233,    -1,    40,   185,   127,   115,    -1,    -1,   191,
+      -1,   192,    -1,   191,   192,    -1,    19,    -1,    20,    -1,
       18,    -1,    37,    -1,    46,    -1,    48,    -1,    47,    -1,
-      24,    -1,    22,    -1,     4,    -1,    -1,    53,   223,    -1,
-      -1,    53,   224,    -1,    -1,    15,   224,    -1,    -1,   189,
-      30,     3,   192,   194,   125,   196,   199,   131,    -1,    -1,
-     189,    43,     3,   193,   125,   198,   202,   131,    -1,    -1,
-     200,    -1,   201,    -1,   200,   201,    -1,    99,    -1,   147,
-     125,   199,   131,    -1,   206,    -1,   216,    -1,   143,    -1,
-      -1,   203,    -1,   204,    -1,   203,   204,    -1,    99,    -1,
-      45,     3,    -1,   189,    25,   215,     3,   121,   212,   132,
-     226,    -1,    45,    -1,    31,    -1,    -1,   189,   205,   207,
-     208,    -1,   209,    -1,   208,   100,   209,    -1,     3,   226,
-     148,    -1,    -1,   102,   243,    -1,     8,    -1,     9,    -1,
+      24,    -1,    22,    -1,     4,    -1,    -1,    53,   234,    -1,
+      -1,    53,   235,    -1,    -1,    15,   235,    -1,    -1,   190,
+      30,     3,   193,   195,   126,   197,   200,   132,    -1,    -1,
+     190,    43,     3,   194,   126,   199,   203,   132,    -1,    -1,
+     201,    -1,   202,    -1,   201,   202,    -1,    99,    -1,   148,
+     126,   200,   132,    -1,   207,    -1,   227,    -1,   144,    -1,
+      -1,   204,    -1,   205,    -1,   204,   205,    -1,    99,    -1,
+      45,     3,    -1,   190,    25,   226,     3,   122,   223,   133,
+     237,    -1,    45,    -1,    31,    -1,    -1,   190,   206,   208,
+     209,    -1,   210,    -1,   209,   100,   210,    -1,     3,   237,
+     149,    -1,    -1,   102,   254,    -1,     8,    -1,     9,    -1,
       10,    -1,     5,    -1,    55,    -1,    54,    -1,    44,    -1,
-      27,    -1,    28,    -1,    -1,   213,    -1,    93,   214,    -1,
-     213,   100,    93,   214,    -1,   213,   100,   214,    -1,   214,
-      -1,     3,   104,   225,   210,    -1,     3,   210,    -1,    50,
-      -1,    34,    -1,    -1,    -1,   189,    25,   215,     3,   121,
-     212,   132,   226,   125,   217,   141,   131,    -1,     3,    -1,
-      -1,    -1,    25,   218,   121,   212,   132,   226,   125,   220,
-     141,   131,    -1,   183,    -1,   184,   126,   183,    -1,   222,
-      -1,   221,    -1,   223,    -1,   224,   100,   223,    -1,   223,
-      -1,   114,    -1,    35,    -1,   104,   225,    -1,    -1,    -1,
-     121,   228,   132,    -1,    -1,   229,    -1,   230,    -1,   236,
-      -1,   229,   100,    -1,   230,   236,    -1,    -1,    23,   243,
-     231,   227,    -1,   243,   121,   228,   132,    -1,    52,   121,
-     228,   132,    -1,    62,   243,    -1,    41,    -1,    41,   237,
-      -1,   243,    -1,   238,    -1,   243,    -1,   238,   100,   243,
-      -1,   243,    -1,   239,   100,   243,    -1,    -1,   242,    -1,
-       3,    -1,     5,    -1,   241,   104,   236,    -1,   242,   100,
-     241,   104,   236,    -1,   219,    -1,   244,    -1,   232,    -1,
-     234,    -1,   233,    -1,   245,    -1,   211,    -1,     6,    -1,
-     123,   228,   124,    -1,    69,   240,   131,    -1,   243,   108,
-     243,    -1,   243,   109,   243,    -1,   243,    74,   243,    -1,
-     243,    75,   243,    -1,   243,    70,   243,    -1,   243,    71,
-     243,    -1,   243,    73,   243,    -1,   243,    72,   243,    -1,
-     243,    87,   243,    -1,   243,    88,   243,    -1,   117,   243,
-      -1,   116,   243,    -1,   243,   107,   243,    -1,   243,   106,
-     243,    -1,   243,   105,   243,    -1,   243,    96,   243,    -1,
-     243,    95,   243,    -1,   243,    94,   243,    -1,   243,   113,
-     243,    -1,   243,   115,   243,    -1,   243,   112,   243,    -1,
-     243,   111,   243,    -1,   243,   114,   243,    -1,   243,    67,
-     243,    -1,   243,    68,   243,    -1,   243,    39,   243,    -1,
-     243,    66,   243,    -1,    42,   121,   243,   132,    -1,    35,
-     243,    -1,    35,    -1,   121,   238,   132,    -1,   111,   243,
-      -1,   243,   123,   243,   124,    -1,   243,    79,   243,    -1,
-     243,    78,   243,    -1,   243,    85,   243,    -1,   243,    84,
-     243,    -1,   243,    86,   243,    -1,   243,    77,   243,    -1,
-     243,    76,   243,    -1,   243,    83,   243,    -1,   243,    80,
-     243,    -1,   243,    81,   243,    -1,   243,    82,   243,    -1,
-     243,   102,   243,    -1,   243,   103,   243,   104,   243,    -1,
-     243,    91,    -1,   243,    90,    -1,    91,   243,    -1,    90,
-     243,    -1,    52,   126,     3,    -1,   127,     3,    -1,   243,
-     126,   127,     3,    -1,   243,   126,     3,    89,     3,    -1,
-     243,    92,     3,    -1,   243,   126,   121,   243,   132,    -1,
-     243,   126,     3,    -1,     3,    -1,    16,     3,    -1,    16,
-       3,   102,     3,    -1,    16,     3,   102,     5,    -1,   189,
-     246,    -1,    21,    16,   223,    -1
+      27,    -1,    28,    -1,   219,    -1,   109,    -1,   110,    -1,
+      -1,    -1,   217,     5,    -1,   217,   110,    -1,   219,   217,
+      -1,   218,   219,   217,    -1,   214,     3,   220,   215,   217,
+     109,   114,     3,   216,   110,    -1,   214,     3,   220,   114,
+     216,   110,    -1,   214,     3,   220,   215,   217,   218,   109,
+     114,     3,   216,   110,    -1,    -1,   221,    -1,   222,    -1,
+     221,   222,    -1,     3,   102,     5,    -1,    -1,   224,    -1,
+      93,   225,    -1,   224,   100,    93,   225,    -1,   224,   100,
+     225,    -1,   225,    -1,     3,   104,   236,   211,    -1,     3,
+     211,    -1,    50,    -1,    34,    -1,    -1,    -1,   190,    25,
+     226,     3,   122,   223,   133,   237,   126,   228,   142,   132,
+      -1,     3,    -1,    -1,    -1,    25,   229,   122,   223,   133,
+     237,   126,   231,   142,   132,    -1,   184,    -1,   185,   127,
+     184,    -1,   233,    -1,   232,    -1,   234,    -1,   235,   100,
+     234,    -1,   234,    -1,   115,    -1,    35,    -1,   104,   236,
+      -1,    -1,    -1,   122,   239,   133,    -1,    -1,   240,    -1,
+     241,    -1,   247,    -1,   240,   100,    -1,   241,   247,    -1,
+      -1,    23,   254,   242,   238,    -1,   254,   122,   239,   133,
+      -1,    52,   122,   239,   133,    -1,    62,   254,    -1,    41,
+      -1,    41,   248,    -1,   254,    -1,   249,    -1,   254,    -1,
+     249,   100,   254,    -1,   254,    -1,   250,   100,   254,    -1,
+      -1,   253,    -1,     3,    -1,     5,    -1,   252,   104,   247,
+      -1,   253,   100,   252,   104,   247,    -1,   230,    -1,   257,
+      -1,   243,    -1,   245,    -1,   244,    -1,   258,    -1,   212,
+      -1,   213,    -1,     6,    -1,   124,   239,   125,    -1,    69,
+     251,   132,    -1,   254,   109,   254,    -1,   254,   110,   254,
+      -1,   254,    74,   254,    -1,   254,    75,   254,    -1,   254,
+      70,   254,    -1,   254,    71,   254,    -1,   254,    73,   254,
+      -1,   254,    72,   254,    -1,   254,    87,   254,    -1,   254,
+      88,   254,    -1,   118,   254,    -1,   117,   254,    -1,   254,
+     107,   254,    -1,   254,   106,   254,    -1,   254,   105,   254,
+      -1,   254,    96,   254,    -1,   254,    95,   254,    -1,   254,
+      94,   254,    -1,   254,   114,   254,    -1,   254,   116,   254,
+      -1,   254,   113,   254,    -1,   254,   112,   254,    -1,   254,
+     115,   254,    -1,   254,    67,   254,    -1,   254,    68,   254,
+      -1,   254,    39,   254,    -1,   254,    66,   254,    -1,    42,
+     122,   254,   133,    -1,    35,   254,    -1,    35,    -1,   122,
+     249,   133,    -1,   112,   254,    -1,   254,   124,   254,   125,
+      -1,   254,    79,   254,    -1,   254,    78,   254,    -1,   254,
+      85,   254,    -1,   254,    84,   254,    -1,   254,    86,   254,
+      -1,   254,    77,   254,    -1,   254,    76,   254,    -1,   254,
+      83,   254,    -1,   254,    80,   254,    -1,   254,    81,   254,
+      -1,   254,    82,   254,    -1,   254,   102,   254,    -1,   254,
+     103,   254,   104,   254,    -1,   254,    91,    -1,   254,    90,
+      -1,    91,   254,    -1,    90,   254,    -1,    52,   127,     3,
+      -1,   128,     3,    -1,   254,   127,   122,   254,   133,    -1,
+       3,    -1,     4,    -1,     3,    -1,   115,    -1,   254,   127,
+     255,    89,   256,    -1,   254,    92,   256,    -1,   254,   127,
+     124,   254,   125,    -1,   254,   127,   128,   256,    -1,   254,
+      92,   128,   256,    -1,   254,   127,   128,   124,   254,   125,
+      -1,   254,    92,   128,   124,   254,   125,    -1,   254,   127,
+     256,    -1,     3,    -1,    16,     3,    -1,    16,     3,   102,
+       3,    -1,    16,     3,   102,     5,    -1,   190,   259,    -1,
+      21,    16,   234,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1849,  1849,  1851,  1851,  1852,  1853,  1855,  1856,  1857,
-    1858,  1859,  1860,  1861,  1862,  1864,  1864,  1865,  1866,  1868,
-    1869,  1870,  1871,  1872,  1873,  1874,  1876,  1877,  1879,  1882,
-    1885,  1886,  1887,  1888,  1889,  1890,  1891,  1892,  1893,  1894,
-    1895,  1896,  1897,  1898,  1901,  1902,  1903,  1904,  1905,  1906,
-    1907,  1908,  1920,  1921,  1925,  1932,  1951,  1952,  1954,  1955,
-    1957,  1958,  1960,  2020,  2021,  2024,  2024,  2043,  2044,  2045,
-    2050,  2054,  2059,  2060,  2062,  2082,  2130,  2130,  2149,  2149,
-    2164,  2167,  2170,  2173,  2177,  2178,  2179,  2180,  2181,  2182,
-    2184,  2195,  2198,  2198,  2229,  2229,  2254,  2254,  2270,  2271,
-    2272,  2273,  2281,  2290,  2290,  2339,  2343,  2354,  2364,  2381,
-    2382,  2383,  2385,  2386,  2388,  2388,  2390,  2390,  2413,  2427,
-    2443,  2444,  2445,  2446,  2453,  2454,  2455,  2456,  2457,  2458,
-    2459,  2460,  2461,  2462,  2466,  2467,  2469,  2470,  2472,  2473,
-    2477,  2475,  2483,  2481,  2490,  2491,  2492,  2493,  2494,  2495,
-    2496,  2497,  2499,  2505,  2506,  2507,  2508,  2509,  2510,  2513,
-    2545,  2545,  2547,  2547,  2549,  2550,  2552,  2646,  2647,  2655,
-    2656,  2659,  2660,  2661,  2662,  2663,  2664,  2665,  2680,  2684,
-    2690,  2696,  2704,  2709,  2715,  2723,  2731,  2732,  2733,  2736,
-    2735,  2752,  2753,  2755,  2754,  2778,  2797,  2811,  2812,  2814,
-    2815,  2817,  2818,  2819,  2828,  2829,  2833,  2834,  2836,  2837,
-    2838,  2840,  2844,  2845,  2850,  2851,  2888,  2938,  2959,  2981,
-    2984,  2991,  2994,  2997,  3000,  3003,  3006,  3011,  3012,  3014,
-    3015,  3017,  3023,  3032,  3033,  3034,  3035,  3036,  3037,  3039,
-    3044,  3064,  3074,  3083,  3084,  3085,  3086,  3087,  3088,  3089,
-    3090,  3091,  3092,  3093,  3094,  3095,  3096,  3097,  3098,  3099,
-    3100,  3101,  3102,  3103,  3104,  3105,  3106,  3107,  3108,  3109,
-    3110,  3111,  3112,  3113,  3114,  3115,  3116,  3117,  3118,  3119,
-    3120,  3121,  3122,  3123,  3124,  3125,  3126,  3127,  3128,  3130,
-    3131,  3132,  3133,  3135,  3150,  3156,  3162,  3168,  3174,  3187,
-    3245,  3378,  3385,  3392,  3399,  3423
+       0,  1857,  1857,  1859,  1859,  1860,  1861,  1863,  1864,  1865,
+    1866,  1867,  1868,  1869,  1870,  1872,  1872,  1873,  1874,  1876,
+    1877,  1878,  1879,  1880,  1881,  1882,  1884,  1885,  1887,  1890,
+    1893,  1894,  1895,  1896,  1897,  1898,  1899,  1900,  1901,  1902,
+    1903,  1904,  1905,  1906,  1909,  1910,  1911,  1912,  1913,  1914,
+    1915,  1916,  1928,  1929,  1933,  1940,  1959,  1960,  1962,  1963,
+    1965,  1966,  1968,  2028,  2029,  2032,  2032,  2051,  2052,  2053,
+    2058,  2062,  2067,  2068,  2070,  2090,  2138,  2138,  2157,  2157,
+    2172,  2175,  2178,  2181,  2185,  2186,  2187,  2188,  2189,  2190,
+    2192,  2203,  2206,  2206,  2237,  2237,  2262,  2262,  2278,  2279,
+    2280,  2281,  2289,  2298,  2298,  2347,  2351,  2362,  2372,  2389,
+    2390,  2391,  2393,  2394,  2396,  2396,  2398,  2398,  2421,  2435,
+    2451,  2452,  2453,  2454,  2461,  2462,  2463,  2464,  2465,  2466,
+    2467,  2468,  2469,  2470,  2474,  2475,  2477,  2478,  2480,  2481,
+    2485,  2483,  2491,  2489,  2498,  2499,  2500,  2501,  2502,  2503,
+    2504,  2505,  2507,  2513,  2514,  2515,  2516,  2517,  2518,  2521,
+    2587,  2587,  2589,  2589,  2591,  2592,  2594,  2678,  2679,  2688,
+    2689,  2692,  2693,  2694,  2695,  2696,  2697,  2698,  2716,  2718,
+    2719,  2720,  2722,  2723,  2724,  2726,  2727,  2729,  2733,  2736,
+    2741,  2742,  2743,  2744,  2745,  2755,  2759,  2765,  2771,  2779,
+    2784,  2790,  2798,  2806,  2807,  2808,  2811,  2810,  2827,  2828,
+    2830,  2829,  2853,  2872,  2886,  2887,  2889,  2890,  2892,  2893,
+    2894,  2903,  2904,  2908,  2909,  2911,  2912,  2913,  2915,  2919,
+    2920,  2925,  2926,  2963,  3013,  3034,  3056,  3059,  3066,  3069,
+    3072,  3075,  3078,  3081,  3086,  3087,  3089,  3090,  3092,  3098,
+    3107,  3108,  3109,  3110,  3111,  3112,  3114,  3118,  3131,  3151,
+    3161,  3170,  3171,  3172,  3173,  3174,  3175,  3176,  3177,  3178,
+    3179,  3180,  3181,  3182,  3183,  3184,  3185,  3186,  3187,  3188,
+    3189,  3190,  3191,  3192,  3193,  3194,  3195,  3196,  3197,  3198,
+    3199,  3200,  3201,  3202,  3203,  3204,  3205,  3206,  3207,  3208,
+    3209,  3210,  3211,  3212,  3213,  3214,  3215,  3217,  3218,  3219,
+    3220,  3222,  3237,  3244,  3251,  3252,  3253,  3254,  3256,  3274,
+    3281,  3292,  3299,  3306,  3316,  3327,  3497,  3532,  3539,  3546,
+    3553,  3575
 };
 #endif
 
@@ -2403,11 +2577,11 @@ static const char *const yytname[] =
   "\"-=\"", "\"^=\"", "\">>=\"", "\"<<=\"", "\">>>=\"", "\"||\"", "\"&&\"",
   "\"::\"", "\"--\"", "\"++\"", "\"..\"", "\"...\"", "\"<<\"", "\">>>\"",
   "\">>\"", "prec_none", "below_semicolon", "';'", "','",
-  "below_assignment", "'='", "'?'", "':'", "'|'", "'^'", "'&'", "'<'",
-  "'>'", "below_minus", "'-'", "'+'", "'/'", "'*'", "'%'", "'~'", "'!'",
-  "minusminus_prefix", "plusplus_prefix", "below_curly", "'('", "new2",
-  "'['", "']'", "'{'", "'.'", "'@'", "above_identifier", "below_else",
-  "above_function", "'}'", "')'", "$accept", "PROGRAM",
+  "below_assignment", "'='", "'?'", "':'", "'|'", "'^'", "'&'", "below_lt",
+  "'<'", "'>'", "below_minus", "'-'", "'+'", "'/'", "'*'", "'%'", "'~'",
+  "'!'", "minusminus_prefix", "plusplus_prefix", "below_curly", "'('",
+  "new2", "'['", "']'", "'{'", "'.'", "'@'", "above_identifier",
+  "below_else", "above_function", "'}'", "')'", "$accept", "PROGRAM",
   "MAYBE_PROGRAM_CODE_LIST", "PROGRAM_CODE_LIST", "PROGRAM_CODE",
   "MAYBE_INPACKAGE_CODE_LIST", "INPACKAGE_CODE_LIST", "INPACKAGE_CODE",
   "MAYBECODE", "CODE", "CODE_STATEMENT", "CODEPIECE", "CODEBLOCK",
@@ -2424,15 +2598,17 @@ static const char *const yytname[] =
   "$@11", "MAYBE_CLASS_BODY", "CLASS_BODY", "CLASS_BODY_ITEM",
   "MAYBE_INTERFACE_BODY", "INTERFACE_BODY", "IDECLARATION", "VARCONST",
   "SLOT_DECLARATION", "$@12", "SLOT_LIST", "ONE_SLOT", "MAYBECONSTANT",
-  "CONSTANT", "MAYBE_PARAM_LIST", "PARAM_LIST", "PARAM", "GETSET",
+  "CONSTANT", "XML", "OPEN", "CLOSE", "CLOSE2", "XMLTEXT", "XML2",
+  "XMLNODE", "MAYBE_XMLATTRIBUTES", "XMLATTRIBUTES", "XMLATTRIBUTE",
+  "MAYBE_PARAM_LIST", "PARAM_LIST", "PARAM", "GETSET",
   "FUNCTION_DECLARATION", "$@13", "MAYBE_IDENTIFIER", "INNERFUNCTION",
   "$@14", "CLASS", "PACKAGEANDCLASS", "CLASS_SPEC", "CLASS_SPEC_LIST",
   "TYPE", "MAYBETYPE", "MAYBE_PARAM_VALUES", "MAYBE_EXPRESSION_LIST",
   "EXPRESSION_LIST", "EXPRESSION_LIST_AND_COMMA", "XX", "NEW",
   "FUNCTIONCALL", "DELETE", "RETURN", "NONCOMMAEXPRESSION", "EXPRESSION",
   "COMMA_EXPRESSION", "VOIDEXPRESSION", "MAYBE_DICT_EXPRPAIR_LIST",
-  "DICTLH", "DICT_EXPRPAIR_LIST", "E", "MEMBER", "VAR_READ",
-  "NAMESPACE_ID", "NAMESPACE_DECLARATION", "USE_NAMESPACE", 0
+  "DICTLH", "DICT_EXPRPAIR_LIST", "E", "ID_OR_NS", "SUBNODE", "MEMBER",
+  "VAR_READ", "NAMESPACE_ID", "NAMESPACE_DECLARATION", "USE_NAMESPACE", 0
 };
 #endif
 
@@ -2451,47 +2627,50 @@ static const yytype_uint16 yytoknum[] =
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,    59,
-      44,   354,    61,    63,    58,   124,    94,    38,    60,    62,
-     355,    45,    43,    47,    42,    37,   126,    33,   356,   357,
-     358,    40,   359,    91,    93,   123,    46,    64,   360,   361,
-     362,   125,    41
+      44,   354,    61,    63,    58,   124,    94,    38,   355,    60,
+      62,   356,    45,    43,    47,    42,    37,   126,    33,   357,
+     358,   359,    40,   360,    91,    93,   123,    46,    64,   361,
+     362,   363,   125,    41
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
+static const yytype_uint16 yyr1[] =
 {
-       0,   133,   134,   135,   135,   136,   136,   137,   137,   137,
-     137,   137,   137,   137,   137,   138,   138,   139,   139,   140,
-     140,   140,   140,   140,   140,   140,   141,   141,   142,   142,
-     143,   143,   143,   143,   143,   143,   143,   143,   143,   143,
-     143,   143,   143,   143,   144,   144,   144,   144,   144,   144,
-     144,   144,   145,   145,   146,   147,   148,   148,   149,   149,
-     150,   150,   151,   152,   152,   154,   153,   155,   155,   155,
-     156,   156,   157,   157,   158,   159,   161,   160,   163,   162,
-     164,   164,   165,   165,   166,   166,   166,   166,   167,   167,
-     168,   169,   171,   170,   173,   172,   175,   174,   176,   176,
-     177,   177,   177,   179,   178,   180,   180,   181,   182,   183,
-     183,   183,   184,   184,   186,   185,   187,   185,   188,   188,
-     189,   189,   190,   190,   191,   191,   191,   191,   191,   191,
-     191,   191,   191,   191,   192,   192,   193,   193,   194,   194,
-     196,   195,   198,   197,   199,   199,   200,   200,   201,   201,
-     201,   201,   201,   202,   202,   203,   203,   204,   204,   204,
-     205,   205,   207,   206,   208,   208,   209,   210,   210,   211,
-     211,   211,   211,   211,   211,   211,   211,   211,   212,   212,
-     212,   212,   213,   213,   214,   214,   215,   215,   215,   217,
-     216,   218,   218,   220,   219,   221,   222,   223,   223,   224,
-     224,   225,   225,   225,   226,   226,   227,   227,   228,   228,
-     228,   229,   230,   229,   231,   232,   233,   233,   234,   235,
-     235,   236,   237,   238,   238,   239,   239,   240,   240,   241,
-     241,   242,   242,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   244,
-     245,   246,   246,   246,   247,   248
+       0,   134,   135,   136,   136,   137,   137,   138,   138,   138,
+     138,   138,   138,   138,   138,   139,   139,   140,   140,   141,
+     141,   141,   141,   141,   141,   141,   142,   142,   143,   143,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   145,   145,   145,   145,   145,   145,
+     145,   145,   146,   146,   147,   148,   149,   149,   150,   150,
+     151,   151,   152,   153,   153,   155,   154,   156,   156,   156,
+     157,   157,   158,   158,   159,   160,   162,   161,   164,   163,
+     165,   165,   166,   166,   167,   167,   167,   167,   168,   168,
+     169,   170,   172,   171,   174,   173,   176,   175,   177,   177,
+     178,   178,   178,   180,   179,   181,   181,   182,   183,   184,
+     184,   184,   185,   185,   187,   186,   188,   186,   189,   189,
+     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
+     192,   192,   192,   192,   193,   193,   194,   194,   195,   195,
+     197,   196,   199,   198,   200,   200,   201,   201,   202,   202,
+     202,   202,   202,   203,   203,   204,   204,   205,   205,   205,
+     206,   206,   208,   207,   209,   209,   210,   211,   211,   212,
+     212,   212,   212,   212,   212,   212,   212,   212,   213,   214,
+     215,   216,   217,   217,   217,   218,   218,   219,   219,   219,
+     220,   220,   221,   221,   222,   223,   223,   223,   223,   224,
+     224,   225,   225,   226,   226,   226,   228,   227,   229,   229,
+     231,   230,   232,   233,   234,   234,   235,   235,   236,   236,
+     236,   237,   237,   238,   238,   239,   239,   239,   240,   241,
+     240,   242,   243,   244,   244,   245,   246,   246,   247,   248,
+     249,   249,   250,   250,   251,   251,   252,   252,   253,   253,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   255,   255,   256,   256,   254,   254,
+     254,   254,   254,   254,   254,   257,   258,   259,   259,   259,
+     260,   261
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -2514,20 +2693,23 @@ static const yytype_uint8 yyr2[] =
        0,     9,     0,     8,     0,     1,     1,     2,     1,     4,
        1,     1,     1,     0,     1,     1,     2,     1,     2,     8,
        1,     1,     0,     4,     1,     3,     3,     0,     2,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
-       2,     4,     3,     1,     4,     2,     1,     1,     0,     0,
-      12,     1,     0,     0,    10,     1,     3,     1,     1,     1,
-       3,     1,     1,     1,     2,     0,     0,     3,     0,     1,
-       1,     1,     2,     2,     0,     4,     4,     4,     2,     1,
-       2,     1,     1,     1,     3,     1,     3,     0,     1,     1,
-       1,     3,     5,     1,     1,     1,     1,     1,     1,     1,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     2,     2,     3,     3,     3,     3,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     0,     2,     2,     2,     3,    10,     6,    11,
+       0,     1,     1,     2,     3,     0,     1,     2,     4,     3,
+       1,     4,     2,     1,     1,     0,     0,    12,     1,     0,
+       0,    10,     1,     3,     1,     1,     1,     3,     1,     1,
+       1,     2,     0,     0,     3,     0,     1,     1,     1,     2,
+       2,     0,     4,     4,     4,     2,     1,     2,     1,     1,
+       1,     3,     1,     3,     0,     1,     1,     1,     3,     5,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       4,     2,     1,     3,     2,     4,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     5,     2,
-       2,     2,     2,     3,     2,     4,     5,     3,     5,     3,
-       1,     2,     4,     4,     2,     3
+       3,     2,     2,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     4,     2,
+       1,     3,     2,     4,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     5,     2,     2,     2,
+       2,     3,     2,     5,     1,     1,     1,     1,     5,     3,
+       5,     4,     4,     6,     6,     3,     1,     2,     4,     4,
+       2,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2535,264 +2717,307 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-     120,   300,   133,   172,   240,   169,   170,   171,     0,     0,
+     120,   326,   133,   172,   258,   169,   170,   171,     0,     0,
       78,     0,     0,   126,   124,   125,     0,   132,     0,   131,
-     192,   176,   177,   272,   127,     0,     0,     0,   175,   128,
-     130,   129,     0,     0,   174,   173,     0,     0,   227,     0,
-       0,    14,     0,     0,     0,     0,   208,   120,     0,     0,
-       2,   120,     5,    54,    12,     0,    36,    67,    31,    32,
-      33,    34,    35,    38,   120,    37,     7,    30,     0,   121,
-     122,     9,     8,    11,   239,    10,   233,   235,   237,   236,
-      39,   225,   234,   238,    41,    40,     0,     0,    72,    76,
-     120,    92,   109,   111,   110,   116,   113,     0,     0,   300,
-     214,   191,     0,   271,     0,     0,   118,     0,   103,   208,
-       0,   218,    65,   229,   230,     0,     0,   228,   292,   291,
-     274,   254,   253,     0,   223,     0,   209,   210,   211,   221,
-      82,     0,   106,   219,     0,    80,    44,    43,   120,    45,
-      29,     0,    46,    47,    48,    50,     0,    49,   294,     1,
-       6,   120,   300,     0,    68,     0,     0,    69,    53,   108,
-       0,   188,     0,   161,     0,   160,   162,   304,   123,     0,
+     209,   176,   177,   290,   127,     0,     0,     0,   175,   128,
+     130,   129,     0,     0,   174,   173,     0,     0,   244,     0,
+       0,    14,   179,     0,     0,     0,     0,   225,   120,     0,
+       0,     2,   120,     5,    54,    12,     0,    36,    67,    31,
+      32,    33,    34,    35,    38,   120,    37,     7,    30,     0,
+     121,   122,     9,     8,    11,   256,   257,     0,   178,    10,
+     250,   252,   254,   253,    39,   242,   251,   255,    41,    40,
+       0,     0,    72,    76,   120,    92,   109,   111,   110,   116,
+     113,     0,     0,   326,   231,   208,     0,   289,     0,     0,
+     118,     0,   103,   225,     0,   235,    65,   246,   247,     0,
+       0,   245,   310,   309,   292,   272,   271,     0,   240,     0,
+     226,   227,   228,   238,    82,     0,   106,   236,     0,    80,
+      44,    43,   120,    45,    29,     0,    46,    47,    48,    50,
+       0,    49,   312,     1,     6,   120,   326,     0,    68,     0,
+       0,    69,    53,   108,     0,   205,     0,   161,     0,   160,
+     162,   330,   123,   190,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   308,   307,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   290,   289,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   208,     0,     0,    55,    73,     0,     0,     0,   120,
-     114,     0,   195,     0,   198,   197,   305,   206,   178,     0,
-     222,     0,     0,    27,     0,   293,     0,   242,     0,     0,
-       0,   273,   241,   212,   213,    83,   205,    59,    60,   105,
-     220,    58,    81,    42,    28,   120,     0,   205,     0,     0,
-      52,   301,   187,   186,     0,   134,   136,     0,   226,   268,
-     269,   266,   267,   247,   248,   250,   249,   245,   246,   282,
-     281,   277,   276,   284,   285,   286,   283,   279,   278,   280,
-     251,   252,   297,   260,   259,   258,   287,     0,   257,   256,
-     255,   243,   244,   264,   263,   261,   265,   262,     0,     0,
-     299,     0,     0,     0,     0,     0,    25,     0,   120,    17,
-      23,     0,    20,    19,    22,    21,   120,   112,     0,   208,
-     215,   167,     0,     0,   179,   183,   107,   119,   196,   270,
-       0,    26,   217,     0,   231,     0,   224,     0,    57,     0,
-     120,    13,    57,     0,     0,     0,     0,     0,   138,     0,
-       0,   205,   163,   164,     0,   216,   275,     0,     0,   295,
-     120,     0,     0,   117,    18,   120,     0,     0,     0,     0,
-     185,   180,   205,     0,     0,   120,     0,   203,   202,   201,
-     204,     0,    62,    61,    51,     0,   120,   302,   303,   178,
-     135,     0,     0,   199,   137,   142,    57,     0,   288,   296,
-     298,    77,     0,    84,     0,   115,   207,   168,   167,     0,
-       0,   182,     0,     0,    98,   102,   100,   104,    63,   232,
-      56,     0,    75,     0,   139,   140,     0,   120,   166,   165,
-      79,     0,     0,     0,    85,    88,    86,    24,   184,   193,
-     181,    96,     0,    99,   101,   120,    66,   120,   205,   120,
-     200,     0,   157,     0,     0,   120,   155,     0,    27,    93,
-      89,    87,    27,    27,   205,    64,    74,     0,   148,   152,
-       0,     0,     0,   120,   146,   150,   151,   158,   188,   143,
-     156,    27,    91,     0,     0,     0,   189,   120,   141,   147,
-       0,    90,   194,    97,    94,    27,     0,     0,     0,     0,
-     149,   178,    27,   190,     0,     0,   205,    95,   159
+       0,     0,     0,     0,     0,     0,   225,     0,     0,    55,
+      73,     0,     0,     0,   120,   114,     0,   212,     0,   215,
+     214,   331,   223,   195,     0,   239,     0,     0,    27,     0,
+     311,     0,   260,     0,     0,     0,   291,   259,   229,   230,
+      83,   222,    59,    60,   105,   237,    58,    81,    42,    28,
+     120,     0,   222,     0,     0,    52,   327,   204,   203,     0,
+     134,   136,     0,     0,     0,   191,   192,   243,   286,   287,
+     284,   285,   265,   266,   268,   267,   263,   264,   300,   299,
+     295,   294,   302,   303,   304,   301,   297,   296,   298,   269,
+     270,   316,   317,     0,   319,   278,   277,   276,   305,     0,
+     275,   274,   273,   261,   262,   282,   281,   279,   283,   280,
+       0,     0,   316,   315,     0,     0,     0,     0,   325,     0,
+       0,     0,    25,     0,   120,    17,    23,     0,    20,    19,
+      22,    21,   120,   112,     0,   225,   232,   167,     0,     0,
+     196,   200,   107,   119,   213,   288,     0,    26,   234,     0,
+     248,     0,   241,     0,    57,     0,   120,    13,    57,     0,
+       0,     0,     0,     0,   138,     0,     0,   222,   163,   164,
+       0,   180,   181,   182,   193,     0,   322,     0,   233,   293,
+       0,     0,     0,   321,     0,   120,     0,     0,   117,    18,
+     120,     0,     0,     0,     0,   202,   197,   222,     0,     0,
+     120,     0,   220,   219,   218,   221,     0,    62,    61,    51,
+       0,   120,   328,   329,   195,   135,     0,     0,   216,   137,
+     142,    57,     0,   194,     0,     0,     0,   306,   313,   320,
+       0,   318,    77,     0,    84,     0,   115,   224,   168,   167,
+       0,     0,   199,     0,     0,    98,   102,   100,   104,    63,
+     249,    56,     0,    75,     0,   139,   140,     0,   120,   166,
+     165,   188,   183,   179,   184,     0,   182,   324,   323,    79,
+       0,     0,     0,    85,    88,    86,    24,   201,   210,   198,
+      96,     0,    99,   101,   120,    66,   120,   222,   120,   217,
+       0,   157,     0,     0,   120,   155,     0,   179,   182,   185,
+       0,    27,    93,    89,    87,    27,    27,   222,    64,    74,
+       0,   148,   152,     0,     0,     0,   120,   146,   150,   151,
+     158,   205,   143,   156,   181,     0,   186,    27,    91,     0,
+       0,     0,   206,   120,   141,   147,     0,     0,   181,    90,
+     211,    97,    94,    27,     0,     0,   187,     0,     0,     0,
+     149,   195,   189,    27,   207,     0,     0,   222,    95,   159
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    49,    50,    51,    52,   317,   318,   319,   340,   341,
-     139,   140,   159,   320,   141,   392,   142,   251,   248,   456,
-      56,   236,   155,   156,    57,    58,    59,    60,   216,    61,
-      90,   143,   144,   443,   444,   445,   446,    62,   218,   424,
-     508,   425,   473,   426,   427,    63,   233,   145,    64,    65,
-     222,   223,    66,   326,   219,    67,   146,    69,    70,   358,
-     360,   402,   322,   459,   323,   437,   482,   483,   484,   464,
-     465,   466,   166,   324,   267,   362,   363,   380,    74,   333,
-     334,   335,   264,   325,   505,   102,    76,   472,   224,   225,
-     389,   404,   390,   348,   330,   125,   126,   127,   227,    77,
-      78,    79,   147,   128,   229,   230,    80,   115,   116,   117,
-      81,    82,    83,   167,    84,    85
+      -1,    50,    51,    52,    53,   333,   334,   335,   356,   357,
+     143,   144,   163,   336,   145,   417,   146,   256,   253,   495,
+      57,   241,   159,   160,    58,    59,    60,    61,   221,    62,
+      94,   147,   148,   482,   483,   484,   485,    63,   223,   455,
+     558,   456,   516,   457,   458,    64,   238,   149,    65,    66,
+     227,   228,    67,   342,   224,    68,   150,    70,    71,   374,
+     376,   427,   338,   498,   339,   468,   525,   526,   527,   503,
+     504,   505,   170,   340,   272,   378,   379,   405,    75,    76,
+      77,   383,   434,   435,   475,    78,   274,   275,   276,   349,
+     350,   351,   269,   341,   553,   106,    80,   515,   229,   230,
+     414,   429,   415,   364,   346,   129,   130,   131,   232,    81,
+      82,    83,   151,   132,   234,   235,    84,   119,   120,   121,
+      85,   327,   304,    86,    87,   171,    88,    89
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -400
+#define YYPACT_NINF -467
 static const yytype_int16 yypact[] =
 {
-    1663,   -67,  -400,  -400,  -400,  -400,  -400,  -400,   -10,   -17,
-    -400,   -16,    21,  -400,  -400,  -400,    92,  -400,  2106,  -400,
-      62,  -400,  -400,  2161,  -400,     5,   125,    13,  -400,  -400,
-    -400,  -400,    -3,   -60,  -400,  -400,  2106,    22,    90,  2106,
-    2106,  -400,  2106,  2106,  2106,  2106,  2106,   631,   122,   137,
-    -400,   502,  -400,  -400,  -400,    19,  -400,  2036,  -400,  -400,
-    -400,  -400,  -400,  -400,  1913,  -400,  -400,  -400,   186,    40,
-    -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,
-      38,  2615,  -400,  -400,  -400,  -400,   142,    26,  -400,  -400,
-    1913,  -400,  -400,  -400,  -400,  -400,  -400,   -84,   125,  -400,
-      -2,  -400,    27,   -45,  2106,    23,  -400,  2106,  -400,  2106,
-     147,   -45,  -400,  -400,  -400,    51,    76,   104,   -45,   -45,
-     356,   -45,   -45,   -57,  2615,    82,   108,  2106,  -400,  2615,
-     207,   210,  2106,  2106,   210,   211,  -400,  -400,   760,  -400,
-    -400,    93,  -400,  -400,  -400,  -400,   199,  -400,  -400,  -400,
-    -400,  1018,   155,   221,  -400,   134,   167,    38,   138,  -400,
-     235,    33,   236,  -400,   239,  -400,  -400,  -400,  -400,  2106,
-    2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,
-    2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,
-    2106,  2106,  2106,  -400,  -400,   240,  2106,  2106,  2106,  2106,
-    2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,  2106,
-    2106,  2106,  2106,    14,  -400,  -400,  2106,   232,  2106,  1147,
-    -400,   125,   130,   131,  -400,  -400,  -400,   127,    16,   126,
-     154,    95,  2219,  1788,   132,  -400,  2106,  -400,  2106,    90,
-    2106,  -400,  -400,  -400,  -400,  -400,   156,   159,  -400,  -400,
-    -400,   159,  -400,  -400,  -400,  1913,   135,   156,  2106,  2106,
-    -400,   160,  -400,  -400,   260,   219,   220,   266,  2615,   494,
-     330,   330,   330,  2981,  2981,  2981,  2981,   494,   494,  2615,
-    2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,  2615,
-    2676,  2737,  -400,   269,   269,   269,  2615,  2432,  2798,  2859,
-    2920,   494,   494,   356,   356,   -45,   -45,   -45,   143,  2493,
-     185,  2106,   277,   149,   161,  2290,  -400,   152,  1276,  -400,
-    -400,   163,  -400,  -400,  -400,  -400,  1147,  -400,   125,  2106,
-    -400,    28,   281,   157,   191,  -400,  -400,  -400,   166,  -400,
-     162,  1788,  -400,   164,  -400,   182,  2615,    67,   193,   210,
-     889,  -400,   -30,   198,   168,   128,   178,   125,   288,   125,
-     176,   156,   212,  -400,  2106,  -400,  -400,   304,  2361,  -400,
-    1913,  2106,   190,  -400,  -400,  1147,   180,   189,  2106,    67,
-    -400,  -400,   156,    17,    31,  1913,  2106,  -400,  -400,  -400,
-    -400,  2106,  -400,  -400,  -400,  2106,  1913,  -400,  -400,    16,
-    -400,   125,   192,  -400,   222,  -400,   193,   266,  2615,  -400,
-    -400,  -400,   203,     7,   194,  -400,  -400,  2615,   234,   213,
-     281,  -400,   214,   224,  -400,  -400,    31,  -400,   278,  -400,
-    2615,   -52,  -400,   209,   222,  -400,   125,   231,  -400,  -400,
-    -400,  2106,   242,   217,     7,  -400,  -400,  -400,  -400,  -400,
-    -400,  -400,   321,  -400,  -400,  1913,  -400,  1913,   156,  1405,
-    -400,   340,  -400,   324,   223,   286,  -400,  2554,  1788,  -400,
-    -400,  -400,  1788,  1788,   156,  -400,  -400,   225,  -400,  -400,
-     227,   216,   226,  1534,  -400,  -400,  -400,  -400,    33,  -400,
-    -400,  1788,  -400,   233,   237,   238,  -400,  1405,  -400,  -400,
-     350,  -400,  -400,  -400,  -400,  1788,   248,   245,   230,   255,
-    -400,    16,  1788,  -400,   256,   258,   156,  -400,  -400
+    1718,   -46,  -467,  -467,  -467,  -467,  -467,  -467,   -29,   -54,
+    -467,   -32,    60,  -467,  -467,  -467,    46,  -467,  2165,  -467,
+      99,  -467,  -467,  2236,  -467,   -10,    82,    -2,  -467,  -467,
+    -467,  -467,    22,   -61,  -467,  -467,  2165,    25,   110,  2165,
+    2165,  -467,  -467,  2165,  2165,  2165,  2165,  2165,   678,   150,
+     211,  -467,   548,  -467,  -467,  -467,    88,  -467,  2094,  -467,
+    -467,  -467,  -467,  -467,  -467,  1970,  -467,  -467,  -467,    49,
+     347,  -467,  -467,  -467,  -467,  -467,  -467,   213,  -467,  -467,
+    -467,  -467,  -467,  -467,   120,  2936,  -467,  -467,  -467,  -467,
+     220,   105,  -467,  -467,  1970,  -467,  -467,  -467,  -467,  -467,
+    -467,    92,    82,  -467,   -55,  -467,   109,   157,  2165,    94,
+    -467,  2165,  -467,  2165,   230,   157,  -467,  -467,  -467,   107,
+     130,   141,   157,   157,   397,   157,   157,   -60,  2874,   118,
+     152,  2165,  -467,  2874,   253,   254,  2165,  2165,   254,   255,
+    -467,  -467,   808,  -467,  -467,   134,  -467,  -467,  -467,  -467,
+     245,  -467,  -467,  -467,  -467,  1068,   195,   264,  -467,   176,
+     209,   120,   178,  -467,   275,    33,   277,  -467,   279,  -467,
+    -467,  -467,  -467,   280,  2165,  2165,  2165,  2165,  2165,  2165,
+    2165,  2165,  2165,  2165,  2165,  2165,  2165,  2165,  2165,  2165,
+    2165,  2165,  2165,  2165,  2165,  2165,  2165,  2165,  -467,  -467,
+      13,  2165,  2165,  2165,  2165,  2165,  2165,  2165,  2165,  2165,
+    2165,  2165,  2165,  2165,  2165,  2165,  2165,  2165,    21,  -467,
+    -467,  2165,   273,  2165,  1198,  -467,    82,   163,   164,  -467,
+    -467,  -467,   170,    39,   160,   194,   102,  2295,  1844,   167,
+    -467,  2165,  -467,  2165,   110,  2165,  -467,  -467,  -467,  -467,
+    -467,   197,   202,  -467,  -467,  -467,   202,  -467,  -467,  -467,
+    1970,   171,   197,  2165,  2165,  -467,   207,  -467,  -467,   301,
+     257,   260,   303,   212,    32,   280,  -467,  2874,  1060,   540,
+     540,   540,  3184,  3184,  3184,  3184,  1060,  1060,  2874,  2874,
+    2874,  2874,  2874,  2874,  2874,  2874,  2874,  2874,  2874,   349,
+    2998,  -467,  -467,    16,  -467,   393,   393,   393,  2874,  2502,
+    2229,  3060,  3122,  1060,  1060,   397,   397,   157,   157,   157,
+     182,  2564,   227,  -467,  2165,  2165,    36,   229,  -467,   186,
+     198,  2364,  -467,   189,  1328,  -467,  -467,   200,  -467,  -467,
+    -467,  -467,  1198,  -467,    82,  2165,  -467,    50,   320,   191,
+     231,  -467,  -467,  -467,   201,  -467,   206,  1844,  -467,   196,
+    -467,   223,  2874,    72,   238,   254,   938,  -467,   -20,   242,
+     214,   204,   208,    82,   330,    82,   222,   197,   246,  -467,
+     350,  -467,  -467,  -467,  -467,  2165,  -467,  2165,  -467,  -467,
+    2433,  2626,  2165,  -467,    15,  1970,  2165,   232,  -467,  -467,
+    1198,   224,   221,  2165,    72,  -467,  -467,   197,    41,   103,
+    1970,  2165,  -467,  -467,  -467,  -467,  2165,  -467,  -467,  -467,
+    2165,  1970,  -467,  -467,    39,  -467,    82,   233,  -467,   261,
+    -467,   238,   303,  -467,   247,    17,  2688,  2874,  -467,  -467,
+    2750,  -467,  -467,   235,    27,   241,  -467,  -467,  2874,   258,
+     236,   320,  -467,   251,   256,  -467,  -467,   103,  -467,   300,
+    -467,  2874,   -52,  -467,   243,   261,  -467,    82,   218,  -467,
+    -467,  -467,  -467,   267,  -467,   276,  -467,  -467,  -467,  -467,
+    2165,   282,   259,    27,  -467,  -467,  -467,  -467,  -467,  -467,
+    -467,   384,  -467,  -467,  1970,  -467,  1970,   197,  1458,  -467,
+     386,  -467,   367,   265,   250,  -467,   396,   290,  -467,    23,
+    2812,  1844,  -467,  -467,  -467,  1844,  1844,   197,  -467,  -467,
+     270,  -467,  -467,   281,   228,   278,  1588,  -467,  -467,  -467,
+    -467,    33,  -467,  -467,  -467,   402,    23,  1844,  -467,   286,
+     293,   294,  -467,  1458,  -467,  -467,   406,   302,  -467,  -467,
+    -467,  -467,  -467,  1844,   296,   289,  -467,   304,   287,   297,
+    -467,    39,  -467,  1844,  -467,   298,   310,   197,  -467,  -467
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -400,  -400,   205,  -400,   312,  -290,  -400,    53,  -399,   -29,
-       1,   -56,   -83,    49,     2,   -39,   334,   262,    45,  -400,
-    -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,
-    -400,  -400,  -400,  -400,  -400,   -44,   -42,  -400,  -400,   -23,
-    -400,   -20,  -400,  -400,  -400,  -400,  -400,  -400,  -400,  -400,
-       9,    77,  -400,  -400,  -400,  -400,     0,  -400,   318,  -400,
-    -400,  -400,    50,  -400,    56,  -400,   -90,  -400,   -75,  -400,
-    -400,   -55,  -400,     3,  -400,  -400,     6,    -9,  -400,  -384,
-    -400,  -304,   -77,     4,  -400,  -400,  -400,  -400,  -400,   386,
-     -92,    15,    35,  -246,  -400,   -93,  -400,  -400,  -400,  -400,
-    -400,  -400,  -400,  -115,  -119,   370,   -48,  -400,   179,  -400,
-     -13,  -400,  -400,  -400,  -400,  -400
+    -467,  -467,   271,  -467,   378,  -296,  -467,    98,  -466,   -31,
+       1,   -58,   -88,    51,     2,    18,   375,   299,    70,  -467,
+    -467,  -467,  -467,  -467,  -467,  -467,  -467,  -467,  -467,  -467,
+    -467,  -467,  -467,  -467,  -467,   -37,   -36,  -467,  -467,    -9,
+    -467,    -7,  -467,  -467,  -467,  -467,  -467,  -467,  -467,  -467,
+       9,    96,  -467,  -467,  -467,  -467,     0,  -467,   381,  -467,
+    -467,  -467,    57,  -467,    58,  -467,   -91,  -467,   -73,  -467,
+    -467,   -47,  -467,     3,  -467,  -467,    28,    20,  -467,  -467,
+    -467,  -467,  -423,  -417,  -467,  -397,  -467,  -467,   199,  -411,
+    -467,  -307,   -65,     4,  -467,  -467,  -467,  -467,  -467,   444,
+     -87,    52,    68,  -192,  -467,   -99,  -467,  -467,  -467,  -467,
+    -467,  -467,  -467,  -122,  -125,   429,   -50,  -467,   237,  -467,
+     -13,  -467,  -189,  -467,  -467,  -467,  -467,  -467
 };
 
 /* 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 -155
+#define YYTABLE_NINF -315
 static const yytype_int16 yytable[] =
 {
-      68,    53,    55,    73,    75,   100,   226,   217,   158,   157,
-     103,   352,   244,   249,   250,   433,   234,   310,   138,   331,
-     331,    96,    86,   111,    92,    93,   118,   119,   381,   120,
-     121,   122,   124,   129,   158,    96,   376,   -70,    94,    87,
-     441,   220,   221,   240,     2,   193,   194,   195,   169,    54,
-      71,    68,    53,    55,    73,    75,    72,   422,    13,    14,
-      15,   109,    17,   423,    19,   101,   110,   262,   442,   492,
-      92,    93,   391,   493,   494,   241,   211,    24,   212,   421,
-     457,   213,   254,   263,    94,   414,    29,    30,    31,    97,
-     195,   124,   501,   113,   232,   114,   129,   313,    92,    93,
-      54,    71,   387,   105,    89,    91,   509,    72,    98,   332,
-     420,    88,    94,   515,   129,   406,   450,   343,   308,   124,
-     124,   212,   108,   344,   213,   148,   104,   514,    92,    93,
-     378,   397,   379,   398,   107,   311,   419,   149,   169,   353,
-     354,   312,    94,   112,   151,   214,    95,   215,   228,   231,
-     235,    68,    53,    55,    73,    75,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     238,   388,   237,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   129,   309,
-      54,    71,   160,   124,   239,   315,   242,    72,   243,   337,
-     245,   161,   477,   246,   252,   160,   162,   163,   255,    68,
-      53,   321,   -71,   124,   257,   129,   350,   346,   495,   164,
-     327,   165,   160,   258,   259,     2,   377,   260,   261,   265,
-     338,   161,   266,   292,   314,   124,   124,   163,   329,    13,
-      14,    15,   412,    17,   240,    19,  -113,   328,   336,   349,
-     347,   165,   355,   356,   342,   400,   351,   403,    24,   361,
-     518,   429,   357,   359,   367,   365,   461,    29,    30,    31,
-     369,   370,   371,   373,   331,   254,   386,   411,   375,   382,
-       2,   383,  -112,   384,   254,   391,   385,   395,   368,   399,
-     396,   405,   428,   401,    13,    14,    15,   409,    17,   403,
-      19,   415,   407,   432,   158,   413,   129,   435,    68,    53,
-     321,   416,   436,    24,   474,   447,    68,    53,   321,   158,
-     462,   461,    29,    30,    31,   440,   378,   338,   449,   451,
-     158,   458,   455,   487,   460,   452,   468,   431,   469,   488,
-     496,   408,   497,   507,   489,   512,   256,   498,   124,   193,
-     194,   195,  -153,   150,   502,   417,   511,   438,   503,   170,
-     504,   374,   475,   129,   476,    68,    53,   321,   430,   510,
-     206,   207,   208,   209,   210,   462,   513,   168,   516,   517,
-     211,   154,   212,   247,   393,   213,  -155,  -155,  -155,   158,
-     470,   158,   471,   453,   178,   179,   454,   506,   499,   448,
-     490,   500,   106,   439,   418,   123,   434,  -154,   345,     0,
-     193,   194,   195,     0,   196,   197,   198,     0,   467,     0,
-       0,     0,     0,     0,     0,     0,     0,   463,   204,   205,
-       0,   206,   207,   208,   209,   210,   193,   194,   195,     0,
-       0,   211,     0,   212,     0,     0,   213,     0,     0,   481,
-     479,   480,   485,   486,     0,   463,     0,     0,     0,   208,
-     209,   210,     0,     0,     0,     0,     0,   211,     0,   212,
-       0,     0,   213,   481,   479,   480,   485,   486,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   481,   479,   480,
-     485,   486,    -4,     0,     0,     1,     2,     3,     4,     0,
-       5,     6,     7,     8,     9,    10,    11,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,     0,     0,    21,
-      22,     0,     0,  -155,     0,     0,     0,    23,     0,    24,
-      25,     0,    26,     0,    27,     0,    28,     0,    29,    30,
-      31,     0,     0,    32,    33,     0,    34,    35,     0,     0,
-       0,     0,     0,     0,    36,    37,     0,     0,  -155,  -155,
-       0,    38,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   193,   194,   195,     0,   196,   197,
-     198,     0,    39,    40,     0,     0,     0,     0,     0,     0,
-       0,    41,  -155,  -155,     0,   206,   207,   208,   209,   210,
-       0,     0,     0,    42,     0,   211,     0,   212,    43,    44,
-     213,     0,     0,    45,     0,    46,     0,    47,     0,    48,
-       0,     0,     0,    -4,     1,     2,     3,     4,     0,     5,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,    13,
-      14,    15,    16,    17,    18,    19,    20,     0,    21,    22,
-     130,     0,   131,     0,     0,     0,    23,   132,    24,    25,
-       0,    26,   133,    27,     0,    28,   134,    29,    30,    31,
-       0,     0,    32,    33,     0,    34,    35,     0,     0,     0,
-       0,     0,     0,    36,    37,     0,   135,     0,     0,     0,
-      38,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      69,    54,    56,    74,    79,   104,   222,   162,   161,   249,
+     107,   254,   255,   464,   239,   231,   301,   142,   301,   301,
+      91,   100,   472,   115,   322,   323,   122,   123,   472,   328,
+     124,   125,   126,   128,   133,   100,   162,   200,   476,   301,
+     245,   406,   347,    90,   347,   538,   401,   -70,   174,   539,
+     540,    55,    69,    54,    56,    74,    79,    72,    73,   509,
+     480,   113,   102,    96,    97,   164,   114,   267,    93,   217,
+     368,   549,   218,   246,   165,    96,    97,    98,   508,   166,
+     167,   496,   416,   268,   259,    96,    97,   559,   481,    98,
+      95,   536,   168,    92,   169,   128,   329,   566,   237,    98,
+     133,   452,   105,    55,   445,    96,    97,   412,   101,    72,
+      73,   547,   108,   117,   386,   118,   359,   320,   133,    98,
+     111,   360,   109,   128,   128,   557,   473,   474,   302,   453,
+     302,   302,   348,   474,   451,   454,   302,   393,   369,   370,
+     385,   303,   381,   324,   489,   325,   382,   116,   112,   326,
+     565,   302,   403,   152,   404,    69,    54,    56,    74,    79,
+     392,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   431,    99,   413,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   133,   321,   441,    55,   422,   128,   423,
+     331,   153,    72,    73,   155,   450,   173,   353,   225,   226,
+     174,   236,     2,   219,    69,    54,   337,   220,   128,   366,
+     133,   233,   362,   240,   243,   343,    13,    14,    15,   242,
+      17,   244,    19,   247,   164,   354,   402,   198,   199,   200,
+     128,   128,   248,   165,     2,    24,   250,   251,   257,   167,
+     260,   164,   -71,   500,    29,    30,    31,   262,    13,    14,
+      15,   443,    17,   169,    19,   263,   264,   265,   266,   216,
+     270,   217,   271,   273,   218,   330,   425,    24,   428,   460,
+    -113,   344,   345,   352,   245,   500,    29,    30,    31,   259,
+     358,   363,   365,   367,   372,   520,   377,   442,   259,   371,
+     373,   390,   391,   375,   380,   388,  -314,   501,   394,   395,
+     396,   398,   459,   347,   407,   541,   400,   411,  -112,   410,
+     424,   408,   133,   463,    69,    54,   337,   162,   409,   428,
+     416,   420,    69,    54,   337,   426,   432,   421,   430,   501,
+    -153,     2,   162,   354,   447,   433,   446,   471,   444,   466,
+     403,   467,   488,   162,   494,    13,    14,    15,   479,    17,
+     462,    19,   436,   486,   437,   569,   497,   490,   491,   440,
+     499,   506,  -154,   128,    24,   507,   511,   517,   175,   530,
+     448,   512,   531,    29,    30,    31,   542,   532,   133,   534,
+      69,    54,   337,   461,   535,   548,   518,   543,   519,   555,
+     544,   561,   556,   563,   562,   176,   177,   178,   550,   179,
+     180,   181,   182,   183,   184,   551,   261,   552,   560,   564,
+     154,   567,   399,   158,   252,   418,   162,   197,   162,   198,
+     199,   200,   568,   201,   202,   203,   513,   514,   492,   469,
+     493,   172,   554,   545,   206,   207,   208,   533,   209,   210,
+     470,   211,   212,   213,   214,   215,   546,   510,   502,   487,
+     110,   216,   449,   217,   384,   127,   218,     0,   465,     0,
+       0,   361,     0,   198,   199,   200,     0,   198,   199,   200,
+       0,     0,     0,     0,     0,     0,     0,     0,   524,   522,
+     523,   528,   529,     0,   502,   211,   212,   213,   214,   215,
+       0,   213,   214,   215,     0,   216,     0,   217,     0,   216,
+     218,   217,     0,     0,   218,     0,   524,   522,   523,   528,
+     529,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   524,   522,   523,   528,   529,    -4,     0,
+       0,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,    21,    22,     0,     0,   175,
+       0,     0,     0,    23,     0,    24,    25,     0,    26,     0,
+      27,     0,    28,     0,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,  -315,  -315,  -315,     0,
+      36,    37,     0,     0,   183,   184,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    39,    40,     0,     0,     0,     0,     0,     0,     0,
-     136,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    42,     0,     0,     0,     0,    43,    44,     0,
-       0,     0,    45,     0,    46,     0,    47,     0,    48,     0,
-       0,     0,   137,     1,     2,     3,     4,     0,     5,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,    13,    14,
-      15,    16,    17,    18,    19,    20,     0,    21,    22,   130,
-       0,   131,     0,     0,     0,    23,   132,    24,    25,     0,
-      26,   133,    27,     0,    28,   134,    29,    30,    31,     0,
-       0,    32,    33,     0,    34,    35,     0,     0,     0,     0,
-       0,     0,    36,    37,     0,   135,     0,     0,     0,    38,
+     198,   199,   200,     0,   201,   202,   203,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,    41,     0,   209,
+     210,     0,   211,   212,   213,   214,   215,    42,     0,     0,
+      43,     0,   216,     0,   217,    44,    45,   218,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+      -4,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,    13,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,   134,     0,   135,
+       0,     0,     0,    23,   136,    24,    25,     0,    26,   137,
+      27,     0,    28,   138,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,   139,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,   140,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+     141,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,    13,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,   134,     0,   135,
+       0,     0,     0,    23,   136,    24,    25,     0,    26,   137,
+      27,     0,    28,   138,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,   139,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      39,    40,     0,     0,     0,     0,     0,     0,     0,   136,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,   140,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+     258,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,    13,    14,    15,    16,
+      17,    18,    19,    20,     0,    21,    22,   134,     0,   135,
+       0,     0,     0,    23,   136,    24,    25,     0,    26,   137,
+      27,     0,    28,   138,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,   139,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    42,     0,     0,     0,     0,    43,    44,     0,     0,
-       0,    45,     0,    46,     0,    47,     0,    48,     0,     0,
-       0,   253,     1,     2,     3,     4,     0,     5,     6,     7,
-       8,     9,    10,    11,     0,     0,     0,    13,    14,    15,
-      16,    17,    18,    19,    20,     0,    21,    22,   130,     0,
-     131,     0,     0,     0,    23,   132,    24,    25,     0,    26,
-     133,    27,     0,    28,   134,    29,    30,    31,     0,     0,
-      32,    33,     0,    34,    35,     0,     0,     0,     0,     0,
-       0,    36,    37,     0,   135,     0,     0,     0,    38,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,   140,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+     419,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,    21,    22,     0,     0,  -315,
+       0,     0,     0,    23,     0,    24,    25,     0,    26,     0,
+      27,     0,    28,     0,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,     0,  -315,  -315,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    39,
-      40,     0,     0,     0,     0,     0,     0,     0,   136,     0,
+     198,   199,   200,     0,   201,   202,   203,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,    41,     0,  -315,
+    -315,     0,   211,   212,   213,   214,   215,    42,     0,     0,
+      43,     0,   216,     0,   217,    44,    45,   218,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+      -3,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,    21,    22,     0,     0,     0,
+       0,     0,     0,    23,     0,    24,    25,     0,    26,     0,
+      27,     0,    28,     0,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,     0,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      42,     0,     0,     0,     0,    43,    44,     0,     0,     0,
-      45,     0,    46,     0,    47,     0,    48,     0,     0,     0,
-     394,     1,     2,     3,     4,     0,     5,     6,     7,     8,
-       9,    10,    11,     0,     0,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,   332,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+     -15,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,    13,    14,    15,    16,
       17,    18,    19,     0,     0,    21,    22,     0,     0,     0,
        0,     0,     0,    23,     0,    24,    25,     0,    26,     0,
       27,     0,    28,     0,    29,    30,    31,     0,     0,    32,
@@ -2800,314 +3025,335 @@ static const yytype_int16 yytable[] =
       36,    37,     0,     0,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
-       0,     0,     0,     0,     0,     0,     0,    41,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    42,
-       0,     0,     0,     0,    43,    44,     0,     0,     0,    45,
-       0,    46,     0,    47,     0,    48,     0,     0,     0,    -3,
-       1,     2,     3,     4,     0,     5,     6,     7,     8,     9,
-      10,    11,     0,     0,     0,    13,    14,    15,    16,    17,
-      18,    19,     0,     0,    21,    22,     0,     0,     0,     0,
-       0,     0,    23,     0,    24,    25,     0,    26,     0,    27,
-       0,    28,     0,    29,    30,    31,     0,     0,    32,    33,
-       0,    34,    35,     0,     0,     0,     0,     0,     0,    36,
-      37,     0,     0,     0,     0,     0,    38,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   332,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+     -16,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,    21,    22,     0,     0,     0,
+       0,     0,     0,    23,     0,    24,    25,     0,    26,     0,
+      27,     0,    28,     0,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,     0,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    39,    40,     0,
-       0,     0,     0,     0,     0,     0,   316,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    42,     0,
-       0,     0,     0,    43,    44,     0,     0,     0,    45,     0,
-      46,     0,    47,     0,    48,     0,     0,     0,   -15,     1,
-       2,     3,     4,     0,     5,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,    21,    22,     0,     0,     0,     0,     0,
-       0,    23,     0,    24,    25,     0,    26,     0,    27,     0,
-      28,     0,    29,    30,    31,     0,     0,    32,    33,     0,
-      34,    35,     0,     0,     0,     0,     0,     0,    36,    37,
-       0,     0,     0,     0,     0,    38,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,   521,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,     0,     0,
+    -144,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,    21,    22,     0,     0,     0,
+       0,     0,     0,    23,     0,    24,    25,     0,    26,     0,
+      27,     0,    28,     0,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,     0,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    39,    40,     0,     0,
-       0,     0,     0,     0,     0,   316,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,   521,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
-       0,     0,    43,    44,     0,     0,     0,    45,     0,    46,
-       0,    47,     0,    48,     0,     0,     0,   -16,     1,     2,
-       3,     4,     0,     5,     6,     7,     8,     9,    10,    11,
-       0,     0,     0,    13,    14,    15,    16,    17,    18,    19,
-       0,     0,    21,    22,     0,     0,     0,     0,     0,     0,
-      23,     0,    24,    25,     0,    26,     0,    27,     0,    28,
-       0,    29,    30,    31,     0,     0,    32,    33,     0,    34,
-      35,     0,     0,     0,     0,     0,     0,    36,    37,     0,
-       0,     0,     0,     0,    38,     0,     0,     0,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     0,    -3,     0,
+    -145,     1,     2,     3,     4,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,    21,    22,     0,     0,     0,
+       0,     0,     0,    23,     0,    24,    25,     0,    26,     0,
+      27,     0,    28,     0,    29,    30,    31,     0,     0,    32,
+      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+      36,    37,     0,     0,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    39,    40,     0,     0,     0,
-       0,     0,     0,     0,   478,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    42,     0,     0,     0,
-       0,    43,    44,     0,     0,     0,    45,     0,    46,     0,
-      47,     0,    48,     0,     0,     0,  -144,     1,     2,     3,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,     0,     0,     0,    41,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+      43,     0,     0,     0,     0,    44,    45,     0,     0,     0,
+      46,     0,    47,     0,    48,     0,    49,     1,     2,     3,
        4,     0,     5,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,    13,    14,    15,    16,    17,    18,    19,     0,
-       0,    21,    22,     0,     0,     0,     0,     0,     0,    23,
-       0,    24,    25,     0,    26,     0,    27,     0,    28,     0,
+    -120,     0,    13,    14,    15,    16,    17,    18,    19,    20,
+       0,    21,    22,   134,     0,   135,     0,     0,     0,    23,
+     136,    24,    25,     0,    26,   137,    27,     0,    28,   138,
       29,    30,    31,     0,     0,    32,    33,     0,    34,    35,
-       0,     0,     0,     0,     0,     0,    36,    37,     0,     0,
+       0,     0,     0,     0,     0,     0,    36,    37,     0,   139,
        0,     0,     0,    38,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    39,    40,     0,     0,     0,     0,
-       0,     0,     0,   478,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    42,     0,     0,     0,     0,
-      43,    44,     0,     0,     0,    45,     0,    46,     0,    47,
-       0,    48,     0,    -3,     0,  -145,     1,     2,     3,     4,
-       0,     5,     6,     7,     8,     9,    10,    11,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-      21,    22,     0,     0,     0,     0,     0,     0,    23,     0,
-      24,    25,     0,    26,     0,    27,     0,    28,     0,    29,
-      30,    31,     0,     0,    32,    33,     0,    34,    35,     0,
-       0,     0,     0,     0,     0,    36,    37,     0,     0,     0,
-       0,     0,    38,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   140,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    42,     0,     0,    43,     0,     0,     0,
+       0,    44,    45,     0,     0,     0,    46,     0,    47,     0,
+      48,     0,    49,     1,     2,     3,     4,     0,     5,     6,
+       7,     8,     9,    10,    11,     0,     0,     0,    13,    14,
+      15,    16,    17,    18,    19,    20,     0,    21,    22,   134,
+       0,   135,     0,     0,     0,    23,   136,    24,    25,     0,
+      26,   137,    27,     0,    28,   138,    29,    30,    31,     0,
+       0,    32,    33,     0,    34,    35,     0,     0,     0,     0,
+       0,     0,    36,    37,     0,   139,     0,     0,     0,    38,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    39,    40,     0,     0,     0,     0,     0,
-       0,     0,    41,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    42,     0,     0,     0,     0,    43,
-      44,     0,     0,     0,    45,     0,    46,     0,    47,     0,
-      48,     1,     2,     3,     4,     0,     5,     6,     7,     8,
-       9,    10,    11,     0,  -120,     0,    13,    14,    15,    16,
-      17,    18,    19,    20,     0,    21,    22,   130,     0,   131,
-       0,     0,     0,    23,   132,    24,    25,     0,    26,   133,
-      27,     0,    28,   134,    29,    30,    31,     0,     0,    32,
-      33,     0,    34,    35,     0,     0,     0,     0,     0,     0,
-      36,    37,     0,   135,     0,     0,     0,    38,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
-       0,     0,     0,     0,     0,     0,     0,   136,     0,     0,
+      39,    40,     0,     0,     0,     0,     0,     0,     0,   140,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    42,
-       0,     0,     0,     0,    43,    44,     0,     0,     0,    45,
-       0,    46,     0,    47,     0,    48,     1,     2,     3,     4,
-       0,     5,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,    13,    14,    15,    16,    17,    18,    19,    20,     0,
-      21,    22,   130,     0,   131,     0,     0,     0,    23,   132,
-      24,    25,     0,    26,   133,    27,     0,    28,   134,    29,
-      30,    31,     0,     0,    32,    33,     0,    34,    35,     0,
-       0,     0,     0,     0,     0,    36,    37,     0,   135,     0,
-       0,     0,    38,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    39,    40,     0,     0,     0,     0,     0,
-       0,     0,   136,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    42,     0,     0,     0,     0,    43,
-      44,     0,     0,     0,    45,     0,    46,     0,    47,   152,
-      48,     3,     4,     0,     5,     6,     7,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    18,
-       0,    20,     0,    21,    22,     0,     0,   131,     0,     0,
-       0,    23,     0,     0,     0,     0,     0,     0,    27,     0,
-      28,   153,     0,     0,     0,     0,     0,     0,    33,     0,
-      34,    35,     0,     0,     0,     0,     0,     0,    36,     0,
-       0,     0,     0,     0,     0,    38,     0,     0,     0,    99,
+       0,     0,    43,     0,     0,     0,     0,    44,    45,     0,
+       0,     0,    46,     0,    47,     0,    48,   156,    49,     3,
+       4,     0,     5,     6,     7,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    18,     0,    20,
+       0,    21,    22,     0,     0,   135,     0,     0,     0,    23,
+       0,     0,     0,     0,     0,     0,    27,     0,    28,   157,
+       0,     0,     0,     0,     0,     0,    33,     0,    34,    35,
+       0,     0,     0,     0,     0,     0,    36,     0,     0,     0,
+       0,     0,     0,    38,     0,     0,     0,     0,   103,     0,
+       3,     4,     0,     5,     6,     7,     0,     0,     0,     0,
+       0,     0,     0,     0,    39,    40,     0,     0,    18,     0,
+      20,     0,    21,    22,     0,     0,     0,     0,     0,     0,
+      23,     0,     0,    42,     0,     0,    43,    27,     0,    28,
+       0,    44,    45,     0,     0,     0,    46,    33,    47,    34,
+      35,     0,    49,     0,     0,     0,     0,    36,     0,     0,
+       0,     0,     0,     0,    38,     0,     0,     0,     0,   103,
        0,     3,     4,     0,     5,     6,     7,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    39,    40,     0,    18,
-       0,    20,     0,    21,    22,     0,     0,     0,     0,     0,
-       0,    23,     0,     0,     0,     0,     0,    42,    27,     0,
-      28,     0,    43,    44,     0,     0,     0,    45,    33,    46,
-      34,    35,     0,    48,    99,     0,     3,     4,    36,     5,
-       6,     7,     0,     0,     0,    38,     0,     0,     0,     0,
-       0,     0,     0,     0,    18,     0,    20,     0,    21,    22,
-       0,     0,     0,     0,     0,     0,    39,    40,     0,     0,
-       0,     0,     0,     0,     0,    28,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,    34,    35,    42,     0,     0,
-       0,     0,    43,    44,     0,     0,     0,    45,     0,    46,
-      38,     0,     0,    48,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    39,    40,     0,     0,     0,     0,     0,   170,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    45,     0,    46,   171,   172,   173,    48,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,     0,   193,
-     194,   195,     0,   196,   197,   198,     0,     0,     0,     0,
-       0,   199,   200,     0,   201,   202,   203,   204,   205,   170,
-     206,   207,   208,   209,   210,     0,     0,     0,     0,     0,
-     211,     0,   212,     0,     0,   213,     0,     0,     0,     0,
-       0,   339,     0,     0,     0,     0,   171,   172,   173,     0,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,     0,
-     193,   194,   195,     0,   196,   197,   198,     0,     0,     0,
-       0,     0,   199,   200,     0,   201,   202,   203,   204,   205,
-     170,   206,   207,   208,   209,   210,     0,     0,     0,     0,
-       0,   211,     0,   212,     0,     0,   213,     0,     0,     0,
-       0,     0,   372,     0,     0,     0,     0,   171,   172,   173,
-       0,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+       0,     0,     0,     0,     0,    39,    40,     0,     0,    18,
+       0,    20,     0,    21,    22,     0,     0,     0,   175,     0,
+       0,     0,     0,     0,    42,     0,     0,    43,     0,     0,
+      28,     0,    44,    45,     0,     0,     0,    46,    33,    47,
+      34,    35,     0,    49,     0,   176,   177,   178,     0,   179,
+     180,   181,   182,   183,   184,    38,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   198,
+     199,   200,     0,   201,   202,   203,    39,    40,     0,     0,
+       0,     0,     0,     0,   175,   207,   208,     0,   209,   210,
+       0,   211,   212,   213,   214,   215,     0,     0,     0,     0,
+       0,   216,     0,   217,     0,     0,   218,     0,    46,     0,
+      47,   176,   177,   178,    49,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,     0,   198,   199,   200,     0,   201,
+     202,   203,     0,     0,     0,     0,     0,   204,   205,     0,
+     206,   207,   208,   175,   209,   210,     0,   211,   212,   213,
+     214,   215,     0,     0,     0,     0,     0,   216,     0,   217,
+       0,     0,   218,     0,     0,     0,     0,     0,   355,     0,
+     176,   177,   178,     0,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,     0,   198,   199,   200,     0,   201,   202,
+     203,     0,     0,     0,     0,     0,   204,   205,     0,   206,
+     207,   208,   175,   209,   210,     0,   211,   212,   213,   214,
+     215,     0,     0,     0,     0,     0,   216,     0,   217,     0,
+       0,   218,     0,     0,     0,     0,     0,   397,     0,   176,
+     177,   178,     0,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,     0,   198,   199,   200,     0,   201,   202,   203,
+       0,     0,     0,     0,     0,   204,   205,     0,   206,   207,
+     208,   175,   209,   210,     0,   211,   212,   213,   214,   215,
+       0,     0,     0,     0,     0,   216,     0,   217,     0,     0,
+     218,     0,     0,     0,     0,     0,   438,     0,   176,   177,
+     178,     0,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,     0,   198,   199,   200,     0,   201,   202,   203,     0,
+       0,     0,     0,   175,   204,   205,   387,   206,   207,   208,
+       0,   209,   210,     0,   211,   212,   213,   214,   215,     0,
+       0,     0,     0,     0,   216,     0,   217,     0,     0,   218,
+     176,   177,   178,     0,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,     0,   198,   199,   200,     0,   201,   202,
+     203,     0,     0,     0,     0,   175,   204,   205,     0,   206,
+     207,   208,     0,   209,   210,     0,   211,   212,   213,   214,
+     215,     0,     0,     0,     0,     0,   216,     0,   217,   389,
+       0,   218,   176,   177,   178,     0,   179,   180,   181,   182,
      183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-       0,   193,   194,   195,     0,   196,   197,   198,     0,     0,
-       0,     0,     0,   199,   200,     0,   201,   202,   203,   204,
-     205,   170,   206,   207,   208,   209,   210,     0,     0,     0,
-       0,     0,   211,     0,   212,     0,     0,   213,     0,     0,
-       0,     0,     0,   410,     0,     0,     0,     0,   171,   172,
-     173,     0,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,     0,   193,   194,   195,     0,   196,   197,   198,     0,
-       0,     0,   170,     0,   199,   200,   364,   201,   202,   203,
-     204,   205,     0,   206,   207,   208,   209,   210,     0,     0,
-       0,     0,     0,   211,     0,   212,     0,     0,   213,   171,
-     172,   173,     0,   174,   175,   176,   177,   178,   179,   180,
+     193,   194,   195,   196,   197,     0,   198,   199,   200,     0,
+     201,   202,   203,     0,     0,     0,     0,   175,   204,   205,
+       0,   206,   207,   208,     0,   209,   210,     0,   211,   212,
+     213,   214,   215,     0,     0,     0,     0,     0,   216,     0,
+     217,   439,     0,   218,   176,   177,   178,     0,   179,   180,
      181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,     0,   193,   194,   195,     0,   196,   197,   198,
-       0,     0,     0,   170,     0,   199,   200,     0,   201,   202,
-     203,   204,   205,     0,   206,   207,   208,   209,   210,     0,
-       0,     0,     0,     0,   211,     0,   212,   366,     0,   213,
-     171,   172,   173,     0,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,     0,   193,   194,   195,     0,   196,   197,
-     198,     0,     0,     0,   170,     0,   199,   200,   491,   201,
-     202,   203,   204,   205,     0,   206,   207,   208,   209,   210,
-       0,     0,     0,     0,     0,   211,     0,   212,     0,     0,
-     213,   171,   172,   173,     0,   174,   175,   176,   177,   178,
+     191,   192,   193,   194,   195,   196,   197,     0,   198,   199,
+     200,     0,   201,   202,   203,     0,     0,     0,     0,   175,
+     204,   205,     0,   206,   207,   208,     0,   209,   210,     0,
+     211,   212,   213,   214,   215,     0,     0,     0,     0,     0,
+     216,     0,   217,   477,     0,   218,   176,   177,   178,     0,
      179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,     0,   193,   194,   195,     0,   196,
-     197,   198,     0,     0,     0,   170,     0,   199,   200,     0,
-     201,   202,   203,   204,   205,     0,   206,   207,   208,   209,
-     210,     0,     0,     0,     0,     0,   211,     0,   212,     0,
-       0,   213,   171,   172,   173,     0,   174,   175,   176,   177,
-     178,   179,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   192,     0,   193,   194,   195,     0,
-     196,   197,   198,     0,     0,     0,   170,     0,     0,     0,
-       0,   201,   202,   203,   204,   205,     0,   206,   207,   208,
-     209,   210,     0,     0,     0,     0,     0,   211,     0,   212,
-       0,     0,   213,   171,   172,   173,     0,   174,   175,   176,
-     177,   178,   179,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   193,   194,   195,
-       0,   196,   197,   198,     0,     0,     0,   170,     0,     0,
-       0,     0,   201,   202,   203,   204,   205,     0,   206,   207,
-     208,   209,   210,     0,     0,     0,     0,     0,   211,     0,
-     212,     0,     0,   213,   171,   172,   173,     0,   174,   175,
-     176,   177,   178,   179,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   193,   194,
-     195,     0,   196,   197,   198,     0,     0,     0,   170,     0,
-       0,     0,     0,     0,   202,   203,   204,   205,     0,   206,
-     207,   208,   209,   210,     0,     0,     0,     0,     0,   211,
-       0,   212,     0,     0,   213,   171,   172,   173,     0,   174,
-     175,   176,   177,   178,   179,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   193,
-     194,   195,     0,   196,   197,   198,     0,     0,     0,   170,
-       0,     0,     0,     0,     0,     0,   203,   204,   205,     0,
-     206,   207,   208,   209,   210,     0,     0,     0,     0,     0,
-     211,     0,   212,     0,     0,   213,   171,   172,   173,     0,
-     174,   175,   176,   177,   178,   179,     0,     0,     0,     0,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,     0,
+     198,   199,   200,     0,   201,   202,   203,     0,     0,     0,
+       0,   175,   204,   205,     0,   206,   207,   208,     0,   209,
+     210,     0,   211,   212,   213,   214,   215,     0,     0,     0,
+       0,     0,   216,     0,   217,   478,     0,   218,   176,   177,
+     178,     0,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,     0,   198,   199,   200,     0,   201,   202,   203,     0,
+       0,     0,     0,   175,   204,   205,   537,   206,   207,   208,
+       0,   209,   210,     0,   211,   212,   213,   214,   215,     0,
+       0,     0,     0,     0,   216,     0,   217,     0,     0,   218,
+     176,   177,   178,     0,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,     0,   198,   199,   200,     0,   201,   202,
+     203,     0,     0,     0,     0,   175,   204,   205,     0,   206,
+     207,   208,     0,   209,   210,     0,   211,   212,   213,   214,
+     215,     0,     0,     0,     0,     0,   216,     0,   217,     0,
+       0,   218,   176,   177,   178,     0,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,     0,   198,   199,   200,     0,
+     201,   202,   203,     0,     0,     0,     0,   175,   204,   205,
+       0,   206,   207,   208,     0,     0,   210,     0,   211,   212,
+     213,   214,   215,     0,     0,     0,     0,     0,   216,     0,
+     217,     0,     0,   218,   176,   177,   178,     0,   179,   180,
+     181,   182,   183,   184,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   198,   199,
+     200,     0,   201,   202,   203,     0,     0,     0,     0,   175,
+       0,     0,     0,   206,   207,   208,     0,   209,   210,     0,
+     211,   212,   213,   214,   215,     0,     0,     0,     0,     0,
+     216,     0,   217,     0,     0,   218,   176,   177,   178,     0,
+     179,   180,   181,   182,   183,   184,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     198,   199,   200,     0,   201,   202,   203,     0,     0,     0,
+       0,   175,     0,     0,     0,     0,     0,   208,     0,   209,
+     210,     0,   211,   212,   213,   214,   215,     0,     0,     0,
+       0,     0,   216,     0,   217,     0,     0,   218,   176,   177,
+     178,     0,   179,   180,   181,   182,   183,   184,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     193,   194,   195,     0,   196,   197,   198,     0,     0,     0,
-     170,     0,     0,     0,     0,     0,     0,  -155,   204,   205,
-       0,   206,   207,   208,   209,   210,     0,     0,     0,     0,
-       0,   211,     0,   212,     0,     0,   213,   171,   172,   173,
-       0,  -155,  -155,  -155,  -155,   178,   179,     0,     0,     0,
+       0,     0,   198,   199,   200,     0,   201,   202,   203,     0,
+       0,     0,     0,   175,     0,     0,     0,     0,     0,  -315,
+       0,   209,   210,     0,   211,   212,   213,   214,   215,     0,
+       0,     0,     0,     0,   216,     0,   217,     0,     0,   218,
+     176,   177,   178,     0,  -315,  -315,  -315,  -315,   183,   184,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   193,   194,   195,     0,   196,   197,   198,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   204,
-     205,     0,   206,   207,   208,   209,   210,     0,     0,     0,
-       0,     0,   211,     0,   212,     0,     0,   213
+       0,     0,     0,     0,   198,   199,   200,     0,   201,   202,
+     203,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   209,   210,     0,   211,   212,   213,   214,
+     215,     0,     0,     0,     0,     0,   216,     0,   217,     0,
+       0,   218
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     0,     0,     0,     0,    18,    98,    90,    64,    57,
-      23,   257,   127,   132,   133,   399,   109,     3,    47,     3,
-       3,    12,    89,    36,     3,     4,    39,    40,   332,    42,
-      43,    44,    45,    46,    90,    26,   326,    67,    17,    49,
-      33,   125,   126,   100,     4,    90,    91,    92,   100,     0,
-       0,    51,    51,    51,    51,    51,     0,    26,    18,    19,
-      20,   121,    22,    32,    24,     3,   126,    34,    61,   468,
-       3,     4,   102,   472,   473,   132,   121,    37,   123,   383,
-     132,   126,   138,    50,    17,   375,    46,    47,    48,    12,
-      92,   104,   491,     3,   107,     5,   109,   216,     3,     4,
-      51,    51,    35,    26,   121,   121,   505,    51,    16,    93,
-      93,   121,    17,   512,   127,   361,   420,   236,   211,   132,
-     133,   123,   125,   238,   126,     3,   121,   511,     3,     4,
-     102,     3,   104,     5,   121,   121,   382,     0,   100,   258,
-     259,   127,    17,   121,   125,     3,   125,   121,   121,   126,
-       3,   151,   151,   151,   151,   151,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+       0,     0,     0,     0,     0,    18,    94,    65,    58,   131,
+      23,   136,   137,   424,   113,   102,     3,    48,     3,     3,
+      49,    12,     5,    36,     3,     4,    39,    40,     5,   218,
+      43,    44,    45,    46,    47,    26,    94,    92,   435,     3,
+     100,   348,     3,    89,     3,   511,   342,    67,   100,   515,
+     516,     0,    52,    52,    52,    52,    52,     0,     0,   476,
+      33,   122,    16,     3,     4,    16,   127,    34,   122,   124,
+     262,   537,   127,   133,    25,     3,     4,    17,   475,    30,
+      31,   133,   102,    50,   142,     3,     4,   553,    61,    17,
+     122,   508,    43,   122,    45,   108,   221,   563,   111,    17,
+     113,   408,     3,    52,   400,     3,     4,    35,    12,    52,
+      52,   534,   122,     3,   303,     5,   241,   216,   131,    17,
+     122,   243,    26,   136,   137,   548,   109,   110,   115,    26,
+     115,   115,    93,   110,    93,    32,   115,   326,   263,   264,
+     124,   128,   110,   122,   451,   124,   114,   122,   126,   128,
+     561,   115,   102,     3,   104,   155,   155,   155,   155,   155,
+     124,   174,   175,   176,   177,   178,   179,   180,   181,   182,
      183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     104,   114,   131,   196,   197,   198,   199,   200,   201,   202,
+     193,   194,   195,   196,   197,   377,   126,   115,   201,   202,
      203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     151,   151,    16,   216,   100,   218,   124,   151,   100,   114,
-       3,    25,   458,     3,     3,    16,    30,    31,   125,   219,
-     219,   219,    67,   236,     3,   238,   255,   240,   474,    43,
-     221,    45,    16,    99,    67,     4,   329,    99,     3,     3,
-     231,    25,     3,     3,    12,   258,   259,    31,   121,    18,
-      19,    20,   371,    22,   100,    24,   126,   126,   132,   100,
-     104,    45,   102,     3,   132,   357,   131,   359,    37,     3,
-     516,   386,    53,    53,    89,   132,    45,    46,    47,    48,
-       3,   132,   121,   131,     3,   341,   104,   370,   125,   132,
-       4,   100,   126,   131,   350,   102,   132,    99,   311,   121,
-     132,   125,   385,    15,    18,    19,    20,     3,    22,   401,
-      24,   131,   100,   396,   370,   125,   329,   125,   318,   318,
-     318,   132,   100,    37,     3,   131,   326,   326,   326,   385,
-      99,    45,    46,    47,    48,   132,   102,   328,   125,   125,
-     396,   132,    64,     3,   436,   121,   104,   395,   131,    25,
-     125,   364,   125,     3,   131,   125,   151,   131,   371,    90,
-      91,    92,   131,    51,   131,   378,   121,   406,   131,    39,
-     132,   318,   455,   386,   457,   375,   375,   375,   391,   131,
-     111,   112,   113,   114,   115,    99,   131,    69,   132,   131,
-     121,    57,   123,   131,   349,   126,    66,    67,    68,   455,
-     444,   457,   444,   426,    74,    75,   426,   497,   483,   418,
-     465,   488,    26,   407,   379,    45,   401,   131,   239,    -1,
-      90,    91,    92,    -1,    94,    95,    96,    -1,   441,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   437,   108,   109,
-      -1,   111,   112,   113,   114,   115,    90,    91,    92,    -1,
-      -1,   121,    -1,   123,    -1,    -1,   126,    -1,    -1,   459,
-     459,   459,   459,   459,    -1,   465,    -1,    -1,    -1,   113,
-     114,   115,    -1,    -1,    -1,    -1,    -1,   121,    -1,   123,
-      -1,    -1,   126,   483,   483,   483,   483,   483,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   497,   497,   497,
-     497,   497,     0,    -1,    -1,     3,     4,     5,     6,    -1,
-       8,     9,    10,    11,    12,    13,    14,    -1,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    -1,    -1,    27,
-      28,    -1,    -1,    39,    -1,    -1,    -1,    35,    -1,    37,
-      38,    -1,    40,    -1,    42,    -1,    44,    -1,    46,    47,
-      48,    -1,    -1,    51,    52,    -1,    54,    55,    -1,    -1,
-      -1,    -1,    -1,    -1,    62,    63,    -1,    -1,    74,    75,
-      -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    90,    91,    92,    -1,    94,    95,
-      96,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    99,   108,   109,    -1,   111,   112,   113,   114,   115,
-      -1,    -1,    -1,   111,    -1,   121,    -1,   123,   116,   117,
-     126,    -1,    -1,   121,    -1,   123,    -1,   125,    -1,   127,
-      -1,    -1,    -1,   131,     3,     4,     5,     6,    -1,     8,
-       9,    10,    11,    12,    13,    14,    -1,    -1,    -1,    18,
-      19,    20,    21,    22,    23,    24,    25,    -1,    27,    28,
-      29,    -1,    31,    -1,    -1,    -1,    35,    36,    37,    38,
-      -1,    40,    41,    42,    -1,    44,    45,    46,    47,    48,
-      -1,    -1,    51,    52,    -1,    54,    55,    -1,    -1,    -1,
-      -1,    -1,    -1,    62,    63,    -1,    65,    -1,    -1,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     213,   214,   215,   216,   217,   394,   155,     3,   221,     5,
+     223,     0,   155,   155,   126,   407,     3,   115,   126,   127,
+     100,   127,     4,     3,   224,   224,   224,   122,   241,   260,
+     243,   122,   245,     3,   104,   226,    18,    19,    20,   132,
+      22,   100,    24,   125,    16,   236,   345,    90,    91,    92,
+     263,   264,   100,    25,     4,    37,     3,     3,     3,    31,
+     126,    16,    67,    45,    46,    47,    48,     3,    18,    19,
+      20,   396,    22,    45,    24,    99,    67,    99,     3,   122,
+       3,   124,     3,     3,   127,    12,   373,    37,   375,   411,
+     127,   127,   122,   133,   100,    45,    46,    47,    48,   357,
+     133,   104,   100,   132,     3,   497,     3,   395,   366,   102,
+      53,   324,   325,    53,   102,   133,    89,    99,    89,   133,
+     122,   132,   410,     3,   133,   517,   126,   104,   127,   133,
+     122,   100,   345,   421,   334,   334,   334,   395,   132,   426,
+     102,    99,   342,   342,   342,    15,   100,   133,   126,    99,
+     132,     4,   410,   344,   133,     5,   132,   110,   126,   126,
+     102,   100,   126,   421,    64,    18,    19,    20,   133,    22,
+     420,    24,   385,   132,   387,   567,   133,   126,   122,   392,
+     467,   114,   132,   396,    37,   109,   104,     3,    39,     3,
+     403,   132,    25,    46,    47,    48,   126,   132,   411,     3,
+     400,   400,   400,   416,   114,     3,   494,   126,   496,     3,
+     132,   122,   110,   126,   110,    66,    67,    68,   132,    70,
+      71,    72,    73,    74,    75,   132,   155,   133,   132,   132,
+      52,   133,   334,    58,   135,   365,   494,    88,   496,    90,
+      91,    92,   132,    94,    95,    96,   483,   483,   457,   431,
+     457,    70,   543,   526,   105,   106,   107,   504,   109,   110,
+     432,   112,   113,   114,   115,   116,   531,   480,   468,   449,
+      26,   122,   404,   124,   275,    46,   127,    -1,   426,    -1,
+      -1,   244,    -1,    90,    91,    92,    -1,    90,    91,    92,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   498,   498,
+     498,   498,   498,    -1,   504,   112,   113,   114,   115,   116,
+      -1,   114,   115,   116,    -1,   122,    -1,   124,    -1,   122,
+     127,   124,    -1,    -1,   127,    -1,   526,   526,   526,   526,
+     526,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   543,   543,   543,   543,   543,     0,    -1,
+      -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    17,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    27,    28,    -1,    -1,    39,
+      -1,    -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,
+      42,    -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    66,    67,    68,    -1,
+      62,    63,    -1,    -1,    74,    75,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,   116,   117,    -1,
-      -1,    -1,   121,    -1,   123,    -1,   125,    -1,   127,    -1,
-      -1,    -1,   131,     3,     4,     5,     6,    -1,     8,     9,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    -1,    27,    28,    29,
-      -1,    31,    -1,    -1,    -1,    35,    36,    37,    38,    -1,
-      40,    41,    42,    -1,    44,    45,    46,    47,    48,    -1,
-      -1,    51,    52,    -1,    54,    55,    -1,    -1,    -1,    -1,
-      -1,    -1,    62,    63,    -1,    65,    -1,    -1,    -1,    69,
+      90,    91,    92,    -1,    94,    95,    96,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,   109,
+     110,    -1,   112,   113,   114,   115,   116,   109,    -1,    -1,
+     112,    -1,   122,    -1,   124,   117,   118,   127,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    -1,    27,    28,    29,    -1,    31,
+      -1,    -1,    -1,    35,    36,    37,    38,    -1,    40,    41,
+      42,    -1,    44,    45,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    65,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    -1,    27,    28,    29,    -1,    31,
+      -1,    -1,    -1,    35,    36,    37,    38,    -1,    40,    41,
+      42,    -1,    44,    45,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    65,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    -1,    27,    28,    29,    -1,    31,
+      -1,    -1,    -1,    35,    36,    37,    38,    -1,    40,    41,
+      42,    -1,    44,    45,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    65,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   111,    -1,    -1,    -1,    -1,   116,   117,    -1,    -1,
-      -1,   121,    -1,   123,    -1,   125,    -1,   127,    -1,    -1,
-      -1,   131,     3,     4,     5,     6,    -1,     8,     9,    10,
-      11,    12,    13,    14,    -1,    -1,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    -1,    27,    28,    29,    -1,
-      31,    -1,    -1,    -1,    35,    36,    37,    38,    -1,    40,
-      41,    42,    -1,    44,    45,    46,    47,    48,    -1,    -1,
-      51,    52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,
-      -1,    62,    63,    -1,    65,    -1,    -1,    -1,    69,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    17,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    27,    28,    -1,    -1,    39,
+      -1,    -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,
+      42,    -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    -1,    74,    75,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
-      91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,
+      90,    91,    92,    -1,    94,    95,    96,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,   109,
+     110,    -1,   112,   113,   114,   115,   116,   109,    -1,    -1,
+     112,    -1,   122,    -1,   124,   117,   118,   127,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    27,    28,    -1,    -1,    -1,
+      -1,    -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,
+      42,    -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,   116,   117,    -1,    -1,    -1,
-     121,    -1,   123,    -1,   125,    -1,   127,    -1,    -1,    -1,
-     131,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
-      12,    13,    14,    -1,    -1,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    18,    19,    20,    21,
       22,    23,    24,    -1,    -1,    27,    28,    -1,    -1,    -1,
       -1,    -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,
       42,    -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,
@@ -3116,263 +3362,258 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-      -1,    -1,    -1,    -1,   116,   117,    -1,    -1,    -1,   121,
-      -1,   123,    -1,   125,    -1,   127,    -1,    -1,    -1,   131,
-       3,     4,     5,     6,    -1,     8,     9,    10,    11,    12,
-      13,    14,    -1,    -1,    -1,    18,    19,    20,    21,    22,
-      23,    24,    -1,    -1,    27,    28,    -1,    -1,    -1,    -1,
-      -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,    42,
-      -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,    52,
-      -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,    62,
-      63,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    27,    28,    -1,    -1,    -1,
+      -1,    -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,
+      42,    -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-      -1,    -1,    -1,   116,   117,    -1,    -1,    -1,   121,    -1,
-     123,    -1,   125,    -1,   127,    -1,    -1,    -1,   131,     3,
-       4,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
-      14,    -1,    -1,    -1,    18,    19,    20,    21,    22,    23,
-      24,    -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,
-      -1,    35,    -1,    37,    38,    -1,    40,    -1,    42,    -1,
-      44,    -1,    46,    47,    48,    -1,    -1,    51,    52,    -1,
-      54,    55,    -1,    -1,    -1,    -1,    -1,    -1,    62,    63,
-      -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,    -1,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    27,    28,    -1,    -1,    -1,
+      -1,    -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,
+      42,    -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-      -1,    -1,   116,   117,    -1,    -1,    -1,   121,    -1,   123,
-      -1,   125,    -1,   127,    -1,    -1,    -1,   131,     3,     4,
-       5,     6,    -1,     8,     9,    10,    11,    12,    13,    14,
-      -1,    -1,    -1,    18,    19,    20,    21,    22,    23,    24,
-      -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
-      35,    -1,    37,    38,    -1,    40,    -1,    42,    -1,    44,
-      -1,    46,    47,    48,    -1,    -1,    51,    52,    -1,    54,
-      55,    -1,    -1,    -1,    -1,    -1,    -1,    62,    63,    -1,
-      -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,    -1,     0,    -1,
+     132,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    14,    -1,    -1,    17,    18,    19,    20,    21,
+      22,    23,    24,    -1,    -1,    27,    28,    -1,    -1,    -1,
+      -1,    -1,    -1,    35,    -1,    37,    38,    -1,    40,    -1,
+      42,    -1,    44,    -1,    46,    47,    48,    -1,    -1,    51,
+      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-      -1,   116,   117,    -1,    -1,    -1,   121,    -1,   123,    -1,
-     125,    -1,   127,    -1,    -1,    -1,   131,     3,     4,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,
+     112,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+     122,    -1,   124,    -1,   126,    -1,   128,     3,     4,     5,
        6,    -1,     8,     9,    10,    11,    12,    13,    14,    -1,
-      -1,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
-      -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    35,
-      -1,    37,    38,    -1,    40,    -1,    42,    -1,    44,    -1,
+      16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
+      -1,    27,    28,    29,    -1,    31,    -1,    -1,    -1,    35,
+      36,    37,    38,    -1,    40,    41,    42,    -1,    44,    45,
       46,    47,    48,    -1,    -1,    51,    52,    -1,    54,    55,
-      -1,    -1,    -1,    -1,    -1,    -1,    62,    63,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    62,    63,    -1,    65,
       -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-     116,   117,    -1,    -1,    -1,   121,    -1,   123,    -1,   125,
-      -1,   127,    -1,     0,    -1,   131,     3,     4,     5,     6,
-      -1,     8,     9,    10,    11,    12,    13,    14,    -1,    -1,
-      17,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
-      27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    35,    -1,
-      37,    38,    -1,    40,    -1,    42,    -1,    44,    -1,    46,
-      47,    48,    -1,    -1,    51,    52,    -1,    54,    55,    -1,
-      -1,    -1,    -1,    -1,    -1,    62,    63,    -1,    -1,    -1,
-      -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,   116,
-     117,    -1,    -1,    -1,   121,    -1,   123,    -1,   125,    -1,
-     127,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
-      12,    13,    14,    -1,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    25,    -1,    27,    28,    29,    -1,    31,
-      -1,    -1,    -1,    35,    36,    37,    38,    -1,    40,    41,
-      42,    -1,    44,    45,    46,    47,    48,    -1,    -1,    51,
-      52,    -1,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
-      62,    63,    -1,    65,    -1,    -1,    -1,    69,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,    -1,   112,    -1,    -1,    -1,
+      -1,   117,   118,    -1,    -1,    -1,   122,    -1,   124,    -1,
+     126,    -1,   128,     3,     4,     5,     6,    -1,     8,     9,
+      10,    11,    12,    13,    14,    -1,    -1,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    -1,    27,    28,    29,
+      -1,    31,    -1,    -1,    -1,    35,    36,    37,    38,    -1,
+      40,    41,    42,    -1,    44,    45,    46,    47,    48,    -1,
+      -1,    51,    52,    -1,    54,    55,    -1,    -1,    -1,    -1,
+      -1,    -1,    62,    63,    -1,    65,    -1,    -1,    -1,    69,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-      -1,    -1,    -1,    -1,   116,   117,    -1,    -1,    -1,   121,
-      -1,   123,    -1,   125,    -1,   127,     3,     4,     5,     6,
-      -1,     8,     9,    10,    11,    12,    13,    14,    -1,    -1,
-      -1,    18,    19,    20,    21,    22,    23,    24,    25,    -1,
-      27,    28,    29,    -1,    31,    -1,    -1,    -1,    35,    36,
-      37,    38,    -1,    40,    41,    42,    -1,    44,    45,    46,
-      47,    48,    -1,    -1,    51,    52,    -1,    54,    55,    -1,
-      -1,    -1,    -1,    -1,    -1,    62,    63,    -1,    65,    -1,
-      -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,   116,
-     117,    -1,    -1,    -1,   121,    -1,   123,    -1,   125,     3,
-     127,     5,     6,    -1,     8,     9,    10,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    23,
-      -1,    25,    -1,    27,    28,    -1,    -1,    31,    -1,    -1,
-      -1,    35,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,
-      44,    45,    -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,
-      54,    55,    -1,    -1,    -1,    -1,    -1,    -1,    62,    -1,
-      -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,     3,
+      90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    99,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,    -1,   112,    -1,    -1,    -1,    -1,   117,   118,    -1,
+      -1,    -1,   122,    -1,   124,    -1,   126,     3,   128,     5,
+       6,    -1,     8,     9,    10,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,    25,
+      -1,    27,    28,    -1,    -1,    31,    -1,    -1,    -1,    35,
+      -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    44,    45,
+      -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,    54,    55,
+      -1,    -1,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,
+      -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,     3,    -1,
+       5,     6,    -1,     8,     9,    10,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    23,    -1,
+      25,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
+      35,    -1,    -1,   109,    -1,    -1,   112,    42,    -1,    44,
+      -1,   117,   118,    -1,    -1,    -1,   122,    52,   124,    54,
+      55,    -1,   128,    -1,    -1,    -1,    -1,    62,    -1,    -1,
+      -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,     3,
       -1,     5,     6,    -1,     8,     9,    10,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    23,
-      -1,    25,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,
-      -1,    35,    -1,    -1,    -1,    -1,    -1,   111,    42,    -1,
-      44,    -1,   116,   117,    -1,    -1,    -1,   121,    52,   123,
-      54,    55,    -1,   127,     3,    -1,     5,     6,    62,     8,
-       9,    10,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    23,    -1,    25,    -1,    27,    28,
-      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    52,    -1,    54,    55,   111,    -1,    -1,
-      -1,    -1,   116,   117,    -1,    -1,    -1,   121,    -1,   123,
-      69,    -1,    -1,   127,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   121,    -1,   123,    66,    67,    68,   127,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    -1,    90,
-      91,    92,    -1,    94,    95,    96,    -1,    -1,    -1,    -1,
-      -1,   102,   103,    -1,   105,   106,   107,   108,   109,    39,
-     111,   112,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,
-     121,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,
-      -1,   132,    -1,    -1,    -1,    -1,    66,    67,    68,    -1,
+      -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    23,
+      -1,    25,    -1,    27,    28,    -1,    -1,    -1,    39,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,    -1,   112,    -1,    -1,
+      44,    -1,   117,   118,    -1,    -1,    -1,   122,    52,   124,
+      54,    55,    -1,   128,    -1,    66,    67,    68,    -1,    70,
+      71,    72,    73,    74,    75,    69,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
+      91,    92,    -1,    94,    95,    96,    90,    91,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,   106,   107,    -1,   109,   110,
+      -1,   112,   113,   114,   115,   116,    -1,    -1,    -1,    -1,
+      -1,   122,    -1,   124,    -1,    -1,   127,    -1,   122,    -1,
+     124,    66,    67,    68,   128,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    -1,    90,    91,    92,    -1,    94,
+      95,    96,    -1,    -1,    -1,    -1,    -1,   102,   103,    -1,
+     105,   106,   107,    39,   109,   110,    -1,   112,   113,   114,
+     115,   116,    -1,    -1,    -1,    -1,    -1,   122,    -1,   124,
+      -1,    -1,   127,    -1,    -1,    -1,    -1,    -1,   133,    -1,
+      66,    67,    68,    -1,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    -1,    90,    91,    92,    -1,    94,    95,
+      96,    -1,    -1,    -1,    -1,    -1,   102,   103,    -1,   105,
+     106,   107,    39,   109,   110,    -1,   112,   113,   114,   115,
+     116,    -1,    -1,    -1,    -1,    -1,   122,    -1,   124,    -1,
+      -1,   127,    -1,    -1,    -1,    -1,    -1,   133,    -1,    66,
+      67,    68,    -1,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    -1,    90,    91,    92,    -1,    94,    95,    96,
+      -1,    -1,    -1,    -1,    -1,   102,   103,    -1,   105,   106,
+     107,    39,   109,   110,    -1,   112,   113,   114,   115,   116,
+      -1,    -1,    -1,    -1,    -1,   122,    -1,   124,    -1,    -1,
+     127,    -1,    -1,    -1,    -1,    -1,   133,    -1,    66,    67,
+      68,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    -1,    90,    91,    92,    -1,    94,    95,    96,    -1,
+      -1,    -1,    -1,    39,   102,   103,   104,   105,   106,   107,
+      -1,   109,   110,    -1,   112,   113,   114,   115,   116,    -1,
+      -1,    -1,    -1,    -1,   122,    -1,   124,    -1,    -1,   127,
+      66,    67,    68,    -1,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    -1,    90,    91,    92,    -1,    94,    95,
+      96,    -1,    -1,    -1,    -1,    39,   102,   103,    -1,   105,
+     106,   107,    -1,   109,   110,    -1,   112,   113,   114,   115,
+     116,    -1,    -1,    -1,    -1,    -1,   122,    -1,   124,   125,
+      -1,   127,    66,    67,    68,    -1,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    -1,    90,    91,    92,    -1,
+      94,    95,    96,    -1,    -1,    -1,    -1,    39,   102,   103,
+      -1,   105,   106,   107,    -1,   109,   110,    -1,   112,   113,
+     114,   115,   116,    -1,    -1,    -1,    -1,    -1,   122,    -1,
+     124,   125,    -1,   127,    66,    67,    68,    -1,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
+      92,    -1,    94,    95,    96,    -1,    -1,    -1,    -1,    39,
+     102,   103,    -1,   105,   106,   107,    -1,   109,   110,    -1,
+     112,   113,   114,   115,   116,    -1,    -1,    -1,    -1,    -1,
+     122,    -1,   124,   125,    -1,   127,    66,    67,    68,    -1,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    88,    -1,
       90,    91,    92,    -1,    94,    95,    96,    -1,    -1,    -1,
-      -1,    -1,   102,   103,    -1,   105,   106,   107,   108,   109,
-      39,   111,   112,   113,   114,   115,    -1,    -1,    -1,    -1,
-      -1,   121,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,
-      -1,    -1,   132,    -1,    -1,    -1,    -1,    66,    67,    68,
-      -1,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      -1,    90,    91,    92,    -1,    94,    95,    96,    -1,    -1,
-      -1,    -1,    -1,   102,   103,    -1,   105,   106,   107,   108,
-     109,    39,   111,   112,   113,   114,   115,    -1,    -1,    -1,
-      -1,    -1,   121,    -1,   123,    -1,    -1,   126,    -1,    -1,
-      -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    66,    67,
+      -1,    39,   102,   103,    -1,   105,   106,   107,    -1,   109,
+     110,    -1,   112,   113,   114,   115,   116,    -1,    -1,    -1,
+      -1,    -1,   122,    -1,   124,   125,    -1,   127,    66,    67,
       68,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
       88,    -1,    90,    91,    92,    -1,    94,    95,    96,    -1,
-      -1,    -1,    39,    -1,   102,   103,   104,   105,   106,   107,
-     108,   109,    -1,   111,   112,   113,   114,   115,    -1,    -1,
-      -1,    -1,    -1,   121,    -1,   123,    -1,    -1,   126,    66,
-      67,    68,    -1,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    -1,    90,    91,    92,    -1,    94,    95,    96,
-      -1,    -1,    -1,    39,    -1,   102,   103,    -1,   105,   106,
-     107,   108,   109,    -1,   111,   112,   113,   114,   115,    -1,
-      -1,    -1,    -1,    -1,   121,    -1,   123,   124,    -1,   126,
+      -1,    -1,    -1,    39,   102,   103,   104,   105,   106,   107,
+      -1,   109,   110,    -1,   112,   113,   114,   115,   116,    -1,
+      -1,    -1,    -1,    -1,   122,    -1,   124,    -1,    -1,   127,
       66,    67,    68,    -1,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
       86,    87,    88,    -1,    90,    91,    92,    -1,    94,    95,
-      96,    -1,    -1,    -1,    39,    -1,   102,   103,   104,   105,
-     106,   107,   108,   109,    -1,   111,   112,   113,   114,   115,
-      -1,    -1,    -1,    -1,    -1,   121,    -1,   123,    -1,    -1,
-     126,    66,    67,    68,    -1,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    -1,    90,    91,    92,    -1,    94,
-      95,    96,    -1,    -1,    -1,    39,    -1,   102,   103,    -1,
-     105,   106,   107,   108,   109,    -1,   111,   112,   113,   114,
-     115,    -1,    -1,    -1,    -1,    -1,   121,    -1,   123,    -1,
-      -1,   126,    66,    67,    68,    -1,    70,    71,    72,    73,
-      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    88,    -1,    90,    91,    92,    -1,
-      94,    95,    96,    -1,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,   105,   106,   107,   108,   109,    -1,   111,   112,   113,
-     114,   115,    -1,    -1,    -1,    -1,    -1,   121,    -1,   123,
-      -1,    -1,   126,    66,    67,    68,    -1,    70,    71,    72,
-      73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,
-      -1,    94,    95,    96,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,   105,   106,   107,   108,   109,    -1,   111,   112,
-     113,   114,   115,    -1,    -1,    -1,    -1,    -1,   121,    -1,
-     123,    -1,    -1,   126,    66,    67,    68,    -1,    70,    71,
+      96,    -1,    -1,    -1,    -1,    39,   102,   103,    -1,   105,
+     106,   107,    -1,   109,   110,    -1,   112,   113,   114,   115,
+     116,    -1,    -1,    -1,    -1,    -1,   122,    -1,   124,    -1,
+      -1,   127,    66,    67,    68,    -1,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    -1,    90,    91,    92,    -1,
+      94,    95,    96,    -1,    -1,    -1,    -1,    39,   102,   103,
+      -1,   105,   106,   107,    -1,    -1,   110,    -1,   112,   113,
+     114,   115,   116,    -1,    -1,    -1,    -1,    -1,   122,    -1,
+     124,    -1,    -1,   127,    66,    67,    68,    -1,    70,    71,
       72,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
-      92,    -1,    94,    95,    96,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,   106,   107,   108,   109,    -1,   111,
-     112,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,   121,
-      -1,   123,    -1,    -1,   126,    66,    67,    68,    -1,    70,
-      71,    72,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
-      91,    92,    -1,    94,    95,    96,    -1,    -1,    -1,    39,
-      -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,    -1,
-     111,   112,   113,   114,   115,    -1,    -1,    -1,    -1,    -1,
-     121,    -1,   123,    -1,    -1,   126,    66,    67,    68,    -1,
+      92,    -1,    94,    95,    96,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,   105,   106,   107,    -1,   109,   110,    -1,
+     112,   113,   114,   115,   116,    -1,    -1,    -1,    -1,    -1,
+     122,    -1,   124,    -1,    -1,   127,    66,    67,    68,    -1,
       70,    71,    72,    73,    74,    75,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       90,    91,    92,    -1,    94,    95,    96,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,
-      -1,   111,   112,   113,   114,   115,    -1,    -1,    -1,    -1,
-      -1,   121,    -1,   123,    -1,    -1,   126,    66,    67,    68,
-      -1,    70,    71,    72,    73,    74,    75,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,   107,    -1,   109,
+     110,    -1,   112,   113,   114,   115,   116,    -1,    -1,    -1,
+      -1,    -1,   122,    -1,   124,    -1,    -1,   127,    66,    67,
+      68,    -1,    70,    71,    72,    73,    74,    75,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    90,    91,    92,    -1,    94,    95,    96,    -1,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,   107,
+      -1,   109,   110,    -1,   112,   113,   114,   115,   116,    -1,
+      -1,    -1,    -1,    -1,   122,    -1,   124,    -1,    -1,   127,
+      66,    67,    68,    -1,    70,    71,    72,    73,    74,    75,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    90,    91,    92,    -1,    94,    95,    96,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,
-     109,    -1,   111,   112,   113,   114,   115,    -1,    -1,    -1,
-      -1,    -1,   121,    -1,   123,    -1,    -1,   126
+      -1,    -1,    -1,    -1,    90,    91,    92,    -1,    94,    95,
+      96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,   110,    -1,   112,   113,   114,   115,
+     116,    -1,    -1,    -1,    -1,    -1,   122,    -1,   124,    -1,
+      -1,   127
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
+static const yytype_uint16 yystos[] =
 {
        0,     3,     4,     5,     6,     8,     9,    10,    11,    12,
       13,    14,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    27,    28,    35,    37,    38,    40,    42,    44,    46,
       47,    48,    51,    52,    54,    55,    62,    63,    69,    90,
-      91,    99,   111,   116,   117,   121,   123,   125,   127,   134,
-     135,   136,   137,   143,   146,   147,   153,   157,   158,   159,
-     160,   162,   170,   178,   181,   182,   185,   188,   189,   190,
-     191,   195,   197,   206,   211,   216,   219,   232,   233,   234,
-     239,   243,   244,   245,   247,   248,    89,    49,   121,   121,
-     163,   121,     3,     4,    17,   125,   183,   184,    16,     3,
-     243,     3,   218,   243,   121,   184,   222,   121,   125,   121,
-     126,   243,   121,     3,     5,   240,   241,   242,   243,   243,
-     243,   243,   243,   238,   243,   228,   229,   230,   236,   243,
-      29,    31,    36,    41,    45,    65,    99,   131,   142,   143,
-     144,   147,   149,   164,   165,   180,   189,   235,     3,     0,
-     137,   125,     3,    45,   149,   155,   156,   239,   144,   145,
-      16,    25,    30,    31,    43,    45,   205,   246,   191,   100,
-      39,    66,    67,    68,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    90,    91,    92,    94,    95,    96,   102,
-     103,   105,   106,   107,   108,   109,   111,   112,   113,   114,
-     115,   121,   123,   126,     3,   121,   161,   145,   171,   187,
-     125,   126,   183,   184,   221,   222,   223,   231,   121,   237,
-     238,   126,   243,   179,   228,     3,   154,   131,   104,   100,
-     100,   132,   124,   100,   236,     3,     3,   150,   151,   237,
-     237,   150,     3,   131,   144,   125,   135,     3,    99,    67,
-      99,     3,    34,    50,   215,     3,     3,   207,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,     3,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   228,   243,
-       3,   121,   127,   237,    12,   243,    99,   138,   139,   140,
-     146,   147,   195,   197,   206,   216,   186,   183,   126,   121,
-     227,     3,    93,   212,   213,   214,   132,   114,   183,   132,
-     141,   142,   132,   237,   236,   241,   243,   104,   226,   100,
-     142,   131,   226,   237,   237,   102,     3,    53,   192,    53,
-     193,     3,   208,   209,   104,   132,   124,    89,   243,     3,
-     132,   121,   132,   131,   140,   125,   138,   228,   102,   104,
-     210,   214,   132,   100,   131,   132,   104,    35,   114,   223,
-     225,   102,   148,   151,   131,    99,   132,     3,     5,   121,
-     223,    15,   194,   223,   224,   125,   226,   100,   243,     3,
-     132,   145,   237,   125,   138,   131,   132,   243,   225,   226,
-      93,   214,    26,    32,   172,   174,   176,   177,   145,   236,
-     243,   239,   145,   212,   224,   125,   100,   198,   148,   209,
-     132,    33,    61,   166,   167,   168,   169,   131,   210,   125,
-     214,   125,   121,   172,   174,    64,   152,   132,   132,   196,
-     223,    45,    99,   189,   202,   203,   204,   243,   104,   131,
-     168,   169,   220,   175,     3,   145,   145,   226,    99,   143,
-     147,   189,   199,   200,   201,   206,   216,     3,    25,   131,
-     204,   104,   141,   141,   141,   226,   125,   125,   131,   201,
-     215,   141,   131,   131,   132,   217,   199,     3,   173,   141,
-     131,   121,   125,   131,   212,   141,   132,   131,   226
+      91,    99,   109,   112,   117,   118,   122,   124,   126,   128,
+     135,   136,   137,   138,   144,   147,   148,   154,   158,   159,
+     160,   161,   163,   171,   179,   182,   183,   186,   189,   190,
+     191,   192,   196,   198,   207,   212,   213,   214,   219,   227,
+     230,   243,   244,   245,   250,   254,   257,   258,   260,   261,
+      89,    49,   122,   122,   164,   122,     3,     4,    17,   126,
+     184,   185,    16,     3,   254,     3,   229,   254,   122,   185,
+     233,   122,   126,   122,   127,   254,   122,     3,     5,   251,
+     252,   253,   254,   254,   254,   254,   254,   249,   254,   239,
+     240,   241,   247,   254,    29,    31,    36,    41,    45,    65,
+      99,   132,   143,   144,   145,   148,   150,   165,   166,   181,
+     190,   246,     3,     0,   138,   126,     3,    45,   150,   156,
+     157,   250,   145,   146,    16,    25,    30,    31,    43,    45,
+     206,   259,   192,     3,   100,    39,    66,    67,    68,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    90,    91,
+      92,    94,    95,    96,   102,   103,   105,   106,   107,   109,
+     110,   112,   113,   114,   115,   116,   122,   124,   127,     3,
+     122,   162,   146,   172,   188,   126,   127,   184,   185,   232,
+     233,   234,   242,   122,   248,   249,   127,   254,   180,   239,
+       3,   155,   132,   104,   100,   100,   133,   125,   100,   247,
+       3,     3,   151,   152,   248,   248,   151,     3,   132,   145,
+     126,   136,     3,    99,    67,    99,     3,    34,    50,   226,
+       3,     3,   208,     3,   220,   221,   222,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     254,     3,   115,   128,   256,   254,   254,   254,   254,   254,
+     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
+     239,   254,     3,     4,   122,   124,   128,   255,   256,   248,
+      12,   254,    99,   139,   140,   141,   147,   148,   196,   198,
+     207,   227,   187,   184,   127,   122,   238,     3,    93,   223,
+     224,   225,   133,   115,   184,   133,   142,   143,   133,   248,
+     247,   252,   254,   104,   237,   100,   143,   132,   237,   248,
+     248,   102,     3,    53,   193,    53,   194,     3,   209,   210,
+     102,   110,   114,   215,   222,   124,   256,   104,   133,   125,
+     254,   254,   124,   256,    89,   133,   122,   133,   132,   141,
+     126,   139,   239,   102,   104,   211,   225,   133,   100,   132,
+     133,   104,    35,   115,   234,   236,   102,   149,   152,   132,
+      99,   133,     3,     5,   122,   234,    15,   195,   234,   235,
+     126,   237,   100,     5,   216,   217,   254,   254,   133,   125,
+     254,   256,   146,   248,   126,   139,   132,   133,   254,   236,
+     237,    93,   225,    26,    32,   173,   175,   177,   178,   146,
+     247,   254,   250,   146,   223,   235,   126,   100,   199,   149,
+     210,   110,     5,   109,   110,   218,   219,   125,   125,   133,
+      33,    61,   167,   168,   169,   170,   132,   211,   126,   225,
+     126,   122,   173,   175,    64,   153,   133,   133,   197,   234,
+      45,    99,   190,   203,   204,   205,   114,   109,   219,   217,
+     254,   104,   132,   169,   170,   231,   176,     3,   146,   146,
+     237,    99,   144,   148,   190,   200,   201,   202,   207,   227,
+       3,    25,   132,   205,     3,   114,   217,   104,   142,   142,
+     142,   237,   126,   126,   132,   202,   226,   216,     3,   142,
+     132,   132,   133,   228,   200,     3,   110,   216,   174,   142,
+     132,   122,   110,   126,   132,   223,   142,   133,   132,   237
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -4188,7 +4429,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1861 "parser.y"
+#line 1869 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
     }
     break;
@@ -4199,7 +4440,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1873 "parser.y"
+#line 1881 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
     }
     break;
@@ -4210,7 +4451,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1876 "parser.y"
+#line 1884 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4221,7 +4462,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1877 "parser.y"
+#line 1885 "parser.y"
     {(yyval.code)=code_new();}
     }
     break;
@@ -4232,7 +4473,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1879 "parser.y"
+#line 1887 "parser.y"
     {
     (yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));
 }
@@ -4245,7 +4486,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1882 "parser.y"
+#line 1890 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4256,7 +4497,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1897 "parser.y"
+#line 1905 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (3)].code);}
     }
     break;
@@ -4267,7 +4508,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1898 "parser.y"
+#line 1906 "parser.y"
     {(yyval.code)=0;}
     }
     break;
@@ -4278,7 +4519,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1901 "parser.y"
+#line 1909 "parser.y"
     {(yyval.code)=0;}
     }
     break;
@@ -4289,7 +4530,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1908 "parser.y"
+#line 1916 "parser.y"
     {
     PASS_ALWAYS 
     if(as3_pass) {
@@ -4308,7 +4549,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1920 "parser.y"
+#line 1928 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (2)].code);}
     }
     break;
@@ -4319,7 +4560,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1921 "parser.y"
+#line 1929 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4330,7 +4571,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1925 "parser.y"
+#line 1933 "parser.y"
     {
     code_t**cc = &global->init->method->body->code;
     *cc = code_append(*cc, (yyvsp[(1) - (1)].code));
@@ -4344,7 +4585,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1932 "parser.y"
+#line 1940 "parser.y"
     {
     PASS12
     (yyval.number_int)=as3_pass;
@@ -4363,7 +4604,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1951 "parser.y"
+#line 1959 "parser.y"
     {(yyval.node)=(yyvsp[(2) - (2)].node);}
     }
     break;
@@ -4374,7 +4615,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1952 "parser.y"
+#line 1960 "parser.y"
     {(yyval.node)=mkdummynode();}
     }
     break;
@@ -4385,7 +4626,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1954 "parser.y"
+#line 1962 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
     }
     break;
@@ -4396,7 +4637,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1955 "parser.y"
+#line 1963 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
     }
     break;
@@ -4407,7 +4648,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1957 "parser.y"
+#line 1965 "parser.y"
     {(yyval.code) = (yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4418,7 +4659,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1958 "parser.y"
+#line 1966 "parser.y"
     {(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));}
     }
     break;
@@ -4429,7 +4670,7 @@ yyreduce:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 1961 "parser.y"
+#line 1969 "parser.y"
     {
 PASS12
     if(variable_exists((yyvsp[(1) - (3)].id)))
@@ -4495,7 +4736,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2020 "parser.y"
+#line 2028 "parser.y"
     {(yyval.code) = code_new();}
     }
     break;
@@ -4506,7 +4747,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2021 "parser.y"
+#line 2029 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
     }
     break;
@@ -4517,7 +4758,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2024 "parser.y"
+#line 2032 "parser.y"
     {PASS12 new_state();}
     }
     break;
@@ -4528,7 +4769,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2024 "parser.y"
+#line 2032 "parser.y"
     {
      
     (yyval.code) = code_new();
@@ -4556,7 +4797,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2043 "parser.y"
+#line 2051 "parser.y"
     {(yyval.code)=code_new();}
     }
     break;
@@ -4567,7 +4808,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2050 "parser.y"
+#line 2058 "parser.y"
     {
     PASS1 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),0,1,0);
     PASS2 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].classinfo),1,0);
@@ -4581,7 +4822,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2054 "parser.y"
+#line 2062 "parser.y"
     {
     PASS12
     (yyval.id)=(yyvsp[(1) - (1)].id);
@@ -4595,7 +4836,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2059 "parser.y"
+#line 2067 "parser.y"
     {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (2)].id);(yyval.for_start).each=0;}
     }
     break;
@@ -4606,7 +4847,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2060 "parser.y"
+#line 2068 "parser.y"
     {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (3)].id);(yyval.for_start).each=1;}
     }
     break;
@@ -4617,7 +4858,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2062 "parser.y"
+#line 2070 "parser.y"
     {
     if((yyvsp[(1) - (8)].for_start).each) syntaxerror("invalid syntax: ; not allowed in for each statement");
     (yyval.code) = code_new();
@@ -4646,7 +4887,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2082 "parser.y"
+#line 2090 "parser.y"
     {
     variable_t*var = find_variable(state, (yyvsp[(2) - (6)].id));
     if(!var) {
@@ -4703,7 +4944,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2130 "parser.y"
+#line 2138 "parser.y"
     {PASS12 new_state();}
     }
     break;
@@ -4714,7 +4955,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2130 "parser.y"
+#line 2138 "parser.y"
     {
 
     (yyval.code) = code_new();
@@ -4742,7 +4983,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2149 "parser.y"
+#line 2157 "parser.y"
     {PASS12 new_state();}
     }
     break;
@@ -4753,7 +4994,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2149 "parser.y"
+#line 2157 "parser.y"
     {
     (yyval.code) = code_new();
     code_t*loopstart = (yyval.code) = abc_label((yyval.code));
@@ -4777,7 +5018,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2164 "parser.y"
+#line 2172 "parser.y"
     {
     (yyval.code) = abc___break__(0, "");
 }
@@ -4790,7 +5031,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2167 "parser.y"
+#line 2175 "parser.y"
     {
     (yyval.code) = abc___break__(0, (yyvsp[(2) - (2)].id));
 }
@@ -4803,7 +5044,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2170 "parser.y"
+#line 2178 "parser.y"
     {
     (yyval.code) = abc___continue__(0, "");
 }
@@ -4816,7 +5057,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2173 "parser.y"
+#line 2181 "parser.y"
     {
     (yyval.code) = abc___continue__(0, (yyvsp[(2) - (2)].id));
 }
@@ -4829,7 +5070,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2177 "parser.y"
+#line 2185 "parser.y"
     {(yyval.code)=0;}
     }
     break;
@@ -4840,7 +5081,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2178 "parser.y"
+#line 2186 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4851,7 +5092,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2179 "parser.y"
+#line 2187 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4862,7 +5103,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2180 "parser.y"
+#line 2188 "parser.y"
     {(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));}
     }
     break;
@@ -4873,7 +5114,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2181 "parser.y"
+#line 2189 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4884,7 +5125,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2182 "parser.y"
+#line 2190 "parser.y"
     {(yyval.code)=code_append((yyval.code),(yyvsp[(2) - (2)].code));}
     }
     break;
@@ -4895,7 +5136,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2184 "parser.y"
+#line 2192 "parser.y"
     {
     (yyval.code) = abc_getlocal(0, state->switch_var);
     (yyval.code) = code_append((yyval.code), node_read((yyvsp[(2) - (4)].node)).c);
@@ -4916,7 +5157,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2195 "parser.y"
+#line 2203 "parser.y"
     {
     (yyval.code) = (yyvsp[(3) - (3)].code);
 }
@@ -4929,7 +5170,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2198 "parser.y"
+#line 2206 "parser.y"
     {PASS12 new_state();state->switch_var=alloc_local();}
     }
     break;
@@ -4940,7 +5181,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2198 "parser.y"
+#line 2206 "parser.y"
     {
     (yyval.code) = node_read((yyvsp[(4) - (8)].node)).c;
     (yyval.code) = abc_setlocal((yyval.code), state->switch_var);
@@ -4978,7 +5219,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2229 "parser.y"
+#line 2237 "parser.y"
     {PASS12 new_state();
                                                       state->exception_name=(yyvsp[(3) - (5)].id);
                                                PASS1 new_variable((yyvsp[(3) - (5)].id), 0, 0, 0);
@@ -4993,7 +5234,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2234 "parser.y"
+#line 2242 "parser.y"
     {
     namespace_t name_ns = {ACCESS_PACKAGE, ""};
     multiname_t name = {QNAME, &name_ns, 0, (yyvsp[(3) - (9)].id)};
@@ -5023,7 +5264,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2254 "parser.y"
+#line 2262 "parser.y"
     {PASS12 new_state();state->exception_name=0;}
     }
     break;
@@ -5034,7 +5275,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2254 "parser.y"
+#line 2262 "parser.y"
     {
     (yyvsp[(4) - (5)].code) = var_block((yyvsp[(4) - (5)].code));
     if(!(yyvsp[(4) - (5)].code)) {
@@ -5059,7 +5300,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2270 "parser.y"
+#line 2278 "parser.y"
     {(yyval.catch_list).l=list_new();(yyval.catch_list).finally=0;list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception));}
     }
     break;
@@ -5070,7 +5311,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2271 "parser.y"
+#line 2279 "parser.y"
     {(yyval.catch_list)=(yyvsp[(1) - (2)].catch_list);list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));}
     }
     break;
@@ -5081,7 +5322,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2272 "parser.y"
+#line 2280 "parser.y"
     {(yyval.catch_list)=(yyvsp[(1) - (1)].catch_list);}
     }
     break;
@@ -5092,7 +5333,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2273 "parser.y"
+#line 2281 "parser.y"
     {
     (yyval.catch_list) = (yyvsp[(1) - (2)].catch_list);
     (yyval.catch_list).finally = 0;
@@ -5110,7 +5351,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2281 "parser.y"
+#line 2289 "parser.y"
     {
     (yyval.catch_list).l=list_new();
     (yyval.catch_list).finally = 0;
@@ -5128,7 +5369,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2290 "parser.y"
+#line 2298 "parser.y"
     {PASS12 new_state();
                  state->method->has_exceptions=1;
                  state->method->late_binding=1;//for invariant scope_code
@@ -5142,7 +5383,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2293 "parser.y"
+#line 2301 "parser.y"
     {
     code_t*out = abc_nop(0);
 
@@ -5195,7 +5436,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2339 "parser.y"
+#line 2347 "parser.y"
     {
     (yyval.code)=(yyvsp[(2) - (2)].value).c;
     (yyval.code)=abc_throw((yyval.code));
@@ -5209,7 +5450,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2343 "parser.y"
+#line 2351 "parser.y"
     {
     if(!state->exception_name)
         syntaxerror("re-throw only possible within a catch block");
@@ -5227,7 +5468,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2354 "parser.y"
+#line 2362 "parser.y"
     {
      new_state();
      if(state->method->has_exceptions) {
@@ -5247,7 +5488,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2364 "parser.y"
+#line 2372 "parser.y"
     {
      /* remove getlocal;pushwith from scope code again */
      state->method->scope_code = code_cutlast(code_cutlast(state->method->scope_code));
@@ -5271,7 +5512,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2382 "parser.y"
+#line 2390 "parser.y"
     {PASS12 (yyval.id)="package";}
     }
     break;
@@ -5282,7 +5523,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2383 "parser.y"
+#line 2391 "parser.y"
     {PASS12 (yyval.id)=(yyvsp[(1) - (1)].id);}
     }
     break;
@@ -5293,7 +5534,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2385 "parser.y"
+#line 2393 "parser.y"
     {PASS12 (yyval.id) = concat3((yyvsp[(1) - (3)].id),".",(yyvsp[(3) - (3)].id));free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0;}
     }
     break;
@@ -5304,7 +5545,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2386 "parser.y"
+#line 2394 "parser.y"
     {PASS12 (yyval.id)=strdup((yyvsp[(1) - (1)].id));}
     }
     break;
@@ -5315,7 +5556,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2388 "parser.y"
+#line 2396 "parser.y"
     {PASS12 startpackage((yyvsp[(2) - (3)].id));free((yyvsp[(2) - (3)].id));(yyvsp[(2) - (3)].id)=0;}
     }
     break;
@@ -5326,7 +5567,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2389 "parser.y"
+#line 2397 "parser.y"
     {PASS12 endpackage();(yyval.code)=0;}
     }
     break;
@@ -5337,7 +5578,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2390 "parser.y"
+#line 2398 "parser.y"
     {PASS12 startpackage("");}
     }
     break;
@@ -5348,7 +5589,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2391 "parser.y"
+#line 2399 "parser.y"
     {PASS12 endpackage();(yyval.code)=0;}
     }
     break;
@@ -5359,7 +5600,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2413 "parser.y"
+#line 2421 "parser.y"
     {
        PASS12
        slotinfo_t*s = registry_find((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name);
@@ -5383,7 +5624,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2427 "parser.y"
+#line 2435 "parser.y"
     {
        PASS12
        if(strncmp("flash.", (yyvsp[(2) - (4)].id), 6) && as3_pass==1) {
@@ -5406,7 +5647,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2443 "parser.y"
+#line 2451 "parser.y"
     {PASS12 (yyval.flags).flags=0;(yyval.flags).ns=0;}
     }
     break;
@@ -5417,7 +5658,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2444 "parser.y"
+#line 2452 "parser.y"
     {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
     }
     break;
@@ -5428,7 +5669,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2445 "parser.y"
+#line 2453 "parser.y"
     {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
     }
     break;
@@ -5439,7 +5680,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2446 "parser.y"
+#line 2454 "parser.y"
     {
     PASS12 
     (yyval.flags).flags=(yyvsp[(1) - (2)].flags).flags|(yyvsp[(2) - (2)].flags).flags;
@@ -5456,7 +5697,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2453 "parser.y"
+#line 2461 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PUBLIC;(yyval.flags).ns=0;}
     }
     break;
@@ -5467,7 +5708,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2454 "parser.y"
+#line 2462 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PRIVATE;(yyval.flags).ns=0;}
     }
     break;
@@ -5478,7 +5719,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2455 "parser.y"
+#line 2463 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PROTECTED;(yyval.flags).ns=0;}
     }
     break;
@@ -5489,7 +5730,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2456 "parser.y"
+#line 2464 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_STATIC;(yyval.flags).ns=0;}
     }
     break;
@@ -5500,7 +5741,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2457 "parser.y"
+#line 2465 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_DYNAMIC;(yyval.flags).ns=0;}
     }
     break;
@@ -5511,7 +5752,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2458 "parser.y"
+#line 2466 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_FINAL;(yyval.flags).ns=0;}
     }
     break;
@@ -5522,7 +5763,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2459 "parser.y"
+#line 2467 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_OVERRIDE;(yyval.flags).ns=0;}
     }
     break;
@@ -5533,7 +5774,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2460 "parser.y"
+#line 2468 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_NATIVE;(yyval.flags).ns=0;}
     }
     break;
@@ -5544,7 +5785,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2461 "parser.y"
+#line 2469 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PACKAGEINTERNAL;(yyval.flags).ns=0;}
     }
     break;
@@ -5555,7 +5796,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2462 "parser.y"
+#line 2470 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_NAMESPACE;
                                (yyval.flags).ns=(yyvsp[(1) - (1)].id);
                        }
@@ -5568,7 +5809,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2466 "parser.y"
+#line 2474 "parser.y"
     {PASS12 (yyval.classinfo)=0;}
     }
     break;
@@ -5579,7 +5820,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2467 "parser.y"
+#line 2475 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
     }
     break;
@@ -5590,7 +5831,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2469 "parser.y"
+#line 2477 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();}
     }
     break;
@@ -5601,7 +5842,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2470 "parser.y"
+#line 2478 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
     }
     break;
@@ -5612,7 +5853,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2472 "parser.y"
+#line 2480 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();}
     }
     break;
@@ -5623,7 +5864,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2473 "parser.y"
+#line 2481 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
     }
     break;
@@ -5634,7 +5875,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2477 "parser.y"
+#line 2485 "parser.y"
     {PASS12 startclass(&(yyvsp[(1) - (6)].flags),(yyvsp[(3) - (6)].id),(yyvsp[(4) - (6)].classinfo),(yyvsp[(5) - (6)].classinfo_list));}
     }
     break;
@@ -5645,7 +5886,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2479 "parser.y"
+#line 2487 "parser.y"
     {PASS12 endclass();(yyval.code)=0;}
     }
     break;
@@ -5656,7 +5897,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2483 "parser.y"
+#line 2491 "parser.y"
     {PASS12 (yyvsp[(1) - (5)].flags).flags|=FLAG_INTERFACE;
                                           startclass(&(yyvsp[(1) - (5)].flags),(yyvsp[(3) - (5)].id),0,(yyvsp[(4) - (5)].classinfo_list));}
     }
@@ -5668,7 +5909,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2486 "parser.y"
+#line 2494 "parser.y"
     {PASS12 endclass();(yyval.code)=0;}
     }
     break;
@@ -5679,7 +5920,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2495 "parser.y"
+#line 2503 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
     }
     break;
@@ -5690,7 +5931,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2499 "parser.y"
+#line 2507 "parser.y"
     {
     code_t*c = state->cls->static_init->header;
     c = code_append(c, (yyvsp[(1) - (1)].code));  
@@ -5705,7 +5946,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2510 "parser.y"
+#line 2518 "parser.y"
     {
     syntaxerror("variable declarations not allowed in interfaces");
 }
@@ -5718,7 +5959,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2513 "parser.y"
+#line 2521 "parser.y"
     {
     PASS12
     (yyvsp[(1) - (8)].flags).flags |= FLAG_PUBLIC;
@@ -5738,7 +5979,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2547 "parser.y"
+#line 2589 "parser.y"
     {PASS12 setslotstate(&(yyvsp[(1) - (2)].flags),(yyvsp[(2) - (2)].token));}
     }
     break;
@@ -5749,7 +5990,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2547 "parser.y"
+#line 2589 "parser.y"
     {PASS12 (yyval.code)=(yyvsp[(4) - (4)].code);setslotstate(0, 0);}
     }
     break;
@@ -5760,7 +6001,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2549 "parser.y"
+#line 2591 "parser.y"
     {PASS12 (yyval.code)=0;}
     }
     break;
@@ -5771,7 +6012,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2550 "parser.y"
+#line 2592 "parser.y"
     {PASS12 (yyval.code)=0;}
     }
     break;
@@ -5782,7 +6023,7 @@ PASS2
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2553 "parser.y"
+#line 2595 "parser.y"
     {
 PASS12
     int flags = slotstate_flags->flags;
@@ -5817,34 +6058,20 @@ PASS12
     if(as3_pass == 2) {
         varinfo_t*info = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
 
-        /* slot name */
-        multiname_t mname = {QNAME, &ns, 0, (yyvsp[(1) - (3)].id)};
-      
-        trait_list_t**traits;
+        multiname_t mname;
         code_t**code;
-        if(!state->cls) {
-            // global variable
-            ns.name = state->package;
-            traits = &global->init->traits;
-            code = &global->init->method->body->code;
-        } else if(flags&FLAG_STATIC) {
-            // static variable
-            traits = &state->cls->abc->static_traits;
-            code = &state->cls->static_init->header;
-        } else {
-            // instance variable
-            traits = &state->cls->abc->traits;
-            code = &state->cls->init->header;
-        }
-        
-        trait_t*t=0;
+        trait_t*t = add_abc_slot(slotstate_flags, (yyvsp[(1) - (3)].id), &mname, &code);
+
         if((yyvsp[(2) - (3)].classinfo)) {
             MULTINAME(m, (yyvsp[(2) - (3)].classinfo));
-            t = trait_new_member(traits, multiname_clone(&m), multiname_clone(&mname), 0);
-        } else {
-            t = trait_new_member(traits, 0, multiname_clone(&mname), 0);
+            t->type_name = multiname_clone(&m);
         }
         info->slot = t->slot_id;
+        
+        /* workaround for "VerifyError: Error #1053: Illegal override of ::test2 in C1" 
+           FIXME: is there a way to use slots and still don't have conflicting overrides?
+        */
+        info->slot = t->slot_id = 0;
        
         constant_t cval = (yyvsp[(3) - (3)].node)->type->eval((yyvsp[(3) - (3)].node));
         if(cval.type!=CONSTANT_UNKNOWN) {
@@ -5860,7 +6087,11 @@ PASS12
                 c = abc_getlocal_0(c);
                 c = code_append(c, v.c);
                 c = converttype(c, v.t, (yyvsp[(2) - (3)].classinfo));
-                c = abc_setslot(c, t->slot_id);
+                if(!t->slot_id) {
+                    c = abc_setproperty2(c, &mname);
+                } else {
+                    c = abc_setslot(c, t->slot_id);
+                }
             }
             *code = code_append(*code, c);
         }
@@ -5882,7 +6113,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2646 "parser.y"
+#line 2678 "parser.y"
     {(yyval.constant)=0;}
     }
     break;
@@ -5893,12 +6124,13 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2647 "parser.y"
+#line 2679 "parser.y"
     {
   (yyval.constant) = malloc(sizeof(constant_t));
   *(yyval.constant) = node_eval((yyvsp[(2) - (2)].node));
-  if((yyval.constant)->type == CONSTANT_UNKNOWN)
+  if((yyval.constant)->type == CONSTANT_UNKNOWN) {
     syntaxerror("can't evaluate default parameter value (needs to be a compile-time constant)");
+  }
 }
     }
     break;
@@ -5909,7 +6141,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2655 "parser.y"
+#line 2688 "parser.y"
     {(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_int));}
     }
     break;
@@ -5920,7 +6152,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2656 "parser.y"
+#line 2689 "parser.y"
     {
     (yyval.constant) = constant_new_uint((yyvsp[(1) - (1)].number_uint));
 }
@@ -5933,7 +6165,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2659 "parser.y"
+#line 2692 "parser.y"
     {(yyval.constant) = constant_new_float((yyvsp[(1) - (1)].number_float));}
     }
     break;
@@ -5944,7 +6176,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2660 "parser.y"
+#line 2693 "parser.y"
     {(yyval.constant) = constant_new_string2((yyvsp[(1) - (1)].str).str,(yyvsp[(1) - (1)].str).len);free((char*)(yyvsp[(1) - (1)].str).str);}
     }
     break;
@@ -5955,7 +6187,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2661 "parser.y"
+#line 2694 "parser.y"
     {(yyval.constant) = constant_new_true((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -5966,7 +6198,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2662 "parser.y"
+#line 2695 "parser.y"
     {(yyval.constant) = constant_new_false((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -5977,7 +6209,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2663 "parser.y"
+#line 2696 "parser.y"
     {(yyval.constant) = constant_new_null((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -5988,7 +6220,7 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2664 "parser.y"
+#line 2697 "parser.y"
     {(yyval.constant) = constant_new_undefined((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -5999,18 +6231,207 @@ PASS12
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2665 "parser.y"
+#line 2698 "parser.y"
     {(yyval.constant) = constant_new_float(__builtin_nan(""));}
     }
     break;
 
 
   
-    case 178:
+    case 179:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2718 "parser.y"
+    {PASS_ALWAYS tokenizer_begin_xml();xml_level++;}
+    }
+    break;
+
+
+  
+    case 180:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2719 "parser.y"
+    {PASS_ALWAYS tokenizer_begin_xmltext();}
+    }
+    break;
+
+
+  
+    case 181:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2720 "parser.y"
+    {PASS_ALWAYS if(!--xml_level) tokenizer_end_xml(); else tokenizer_begin_xmltext();}
+    }
+    break;
+
+
+  
+    case 182:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2722 "parser.y"
+    {(yyval.id)="";}
+    }
+    break;
+
+
+  
+    case 183:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2723 "parser.y"
+    {(yyval.id)=concat2((yyvsp[(1) - (2)].id), string_cstr(&(yyvsp[(2) - (2)].str)));}
+    }
+    break;
+
+
+  
+    case 184:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2724 "parser.y"
+    {(yyval.id)=concat2((yyvsp[(1) - (2)].id), ">");}
+    }
+    break;
+
+
+  
+    case 185:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2726 "parser.y"
+    {(yyval.id)=concat2((yyvsp[(1) - (2)].id),(yyvsp[(2) - (2)].id));}
+    }
+    break;
+
+
+  
+    case 186:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2727 "parser.y"
+    {(yyval.id)=concat3((yyvsp[(1) - (3)].id),(yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].id));free((yyvsp[(1) - (3)].id));free((yyvsp[(2) - (3)].id));free((yyvsp[(3) - (3)].id));}
+    }
+    break;
+
+
+  
+    case 187:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2729 "parser.y"
+    {
+    (yyval.id) = allocprintf("<%s%s>%s</%s>", (yyvsp[(2) - (10)].id), (yyvsp[(3) - (10)].id), (yyvsp[(5) - (10)].id), (yyvsp[(8) - (10)].id));
+    free((yyvsp[(2) - (10)].id));free((yyvsp[(3) - (10)].id));free((yyvsp[(5) - (10)].id));free((yyvsp[(8) - (10)].id));
+}
+    }
+    break;
+
+
+  
+    case 188:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2733 "parser.y"
+    {
+    (yyval.id) = allocprintf("<%s%s/>", (yyvsp[(2) - (6)].id), (yyvsp[(3) - (6)].id));
+}
+    }
+    break;
+
+
+  
+    case 189:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2736 "parser.y"
+    {
+    (yyval.id) = allocprintf("<%s%s>%s%s</%s>", (yyvsp[(2) - (11)].id), (yyvsp[(3) - (11)].id), (yyvsp[(5) - (11)].id), (yyvsp[(6) - (11)].id), (yyvsp[(9) - (11)].id));
+    free((yyvsp[(2) - (11)].id));free((yyvsp[(3) - (11)].id));free((yyvsp[(5) - (11)].id));free((yyvsp[(6) - (11)].id));free((yyvsp[(6) - (11)].id));free((yyvsp[(9) - (11)].id));
+}
+    }
+    break;
+
+
+  
+    case 190:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2741 "parser.y"
+    {(yyval.id)=strdup("");}
+    }
+    break;
+
+
+  
+    case 191:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2742 "parser.y"
+    {(yyval.id)=concat2(" ",(yyvsp[(1) - (1)].id));}
+    }
+    break;
+
+
+  
+    case 192:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2743 "parser.y"
+    {(yyval.id)=(yyvsp[(1) - (1)].id);}
+    }
+    break;
+
+
+  
+    case 193:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2744 "parser.y"
+    {(yyval.id)=concat3((yyvsp[(1) - (2)].id)," ",(yyvsp[(2) - (2)].id));free((yyvsp[(1) - (2)].id));free((yyvsp[(2) - (2)].id));}
+    }
+    break;
+
+
+  
+    case 194:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 2745 "parser.y"
+    {
+    char* str = string_cstr(&(yyvsp[(3) - (3)].str));
+    (yyval.id)=allocprintf("%s=\"%s\"", (yyvsp[(1) - (3)].id),str);
+    free(str);
+    free((yyvsp[(1) - (3)].id));free((char*)(yyvsp[(3) - (3)].str).str);
+}
+    }
+    break;
+
+
+  
+    case 195:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2680 "parser.y"
+#line 2755 "parser.y"
     {
     PASS12
     memset(&(yyval.params),0,sizeof((yyval.params)));
@@ -6020,11 +6441,11 @@ PASS12
 
 
   
-    case 179:
+    case 196:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2684 "parser.y"
+#line 2759 "parser.y"
     {
     PASS12
     (yyval.params)=(yyvsp[(1) - (1)].params);
@@ -6034,11 +6455,11 @@ PASS12
 
 
   
-    case 180:
+    case 197:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2690 "parser.y"
+#line 2765 "parser.y"
     {
     PASS12
     memset(&(yyval.params),0,sizeof((yyval.params)));
@@ -6050,11 +6471,11 @@ PASS12
 
 
   
-    case 181:
+    case 198:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2696 "parser.y"
+#line 2771 "parser.y"
     {
     PASS12
     (yyval.params) =(yyvsp[(1) - (4)].params);
@@ -6066,11 +6487,11 @@ PASS12
 
 
   
-    case 182:
+    case 199:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2704 "parser.y"
+#line 2779 "parser.y"
     {
     PASS12
     (yyval.params) = (yyvsp[(1) - (3)].params);
@@ -6081,11 +6502,11 @@ PASS12
 
 
   
-    case 183:
+    case 200:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2709 "parser.y"
+#line 2784 "parser.y"
     {
     PASS12
     memset(&(yyval.params),0,sizeof((yyval.params)));
@@ -6096,11 +6517,11 @@ PASS12
 
 
   
-    case 184:
+    case 201:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2715 "parser.y"
+#line 2790 "parser.y"
     {
      PASS12
      (yyval.param) = rfx_calloc(sizeof(param_t));
@@ -6114,11 +6535,11 @@ PASS12
 
 
   
-    case 185:
+    case 202:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2723 "parser.y"
+#line 2798 "parser.y"
     {
      PASS12
      (yyval.param) = rfx_calloc(sizeof(param_t));
@@ -6132,33 +6553,33 @@ PASS12
 
 
   
-    case 188:
+    case 205:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2733 "parser.y"
+#line 2808 "parser.y"
     {PASS12 (yyval.token)=0;}
     }
     break;
 
 
   
-    case 189:
+    case 206:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2736 "parser.y"
+#line 2811 "parser.y"
     {PASS12 startfunction(&(yyvsp[(1) - (9)].flags),(yyvsp[(3) - (9)].token),(yyvsp[(4) - (9)].id),&(yyvsp[(6) - (9)].params),(yyvsp[(8) - (9)].classinfo));}
     }
     break;
 
 
   
-    case 190:
+    case 207:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2737 "parser.y"
+#line 2812 "parser.y"
     {
     PASS1 
     endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),0,0);
@@ -6178,33 +6599,33 @@ PASS12
 
 
   
-    case 192:
+    case 209:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2753 "parser.y"
+#line 2828 "parser.y"
     {PASS12 (yyval.id)=0;}
     }
     break;
 
 
   
-    case 193:
+    case 210:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2755 "parser.y"
+#line 2830 "parser.y"
     {PASS12 innerfunction((yyvsp[(2) - (7)].id),&(yyvsp[(4) - (7)].params),(yyvsp[(6) - (7)].classinfo));}
     }
     break;
 
 
   
-    case 194:
+    case 211:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2756 "parser.y"
+#line 2831 "parser.y"
     {
     PASS1
     endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),0,0);
@@ -6228,11 +6649,11 @@ PASS12
 
 
   
-    case 195:
+    case 212:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2778 "parser.y"
+#line 2853 "parser.y"
     {
     PASS1 NEW(unresolvedinfo_t,c);
           memset(c, 0, sizeof(*c));
@@ -6256,11 +6677,11 @@ PASS12
 
 
   
-    case 196:
+    case 213:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2797 "parser.y"
+#line 2872 "parser.y"
     {
     PASS1 NEW(unresolvedinfo_t,c);
           memset(c, 0, sizeof(*c));
@@ -6279,121 +6700,121 @@ PASS12
 
 
   
-    case 199:
+    case 216:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2814 "parser.y"
+#line 2889 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();list_append((yyval.classinfo_list), (yyvsp[(1) - (1)].classinfo));}
     }
     break;
 
 
   
-    case 200:
+    case 217:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2815 "parser.y"
+#line 2890 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(1) - (3)].classinfo_list);list_append((yyval.classinfo_list),(yyvsp[(3) - (3)].classinfo));}
     }
     break;
 
 
   
-    case 201:
+    case 218:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2817 "parser.y"
+#line 2892 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);}
     }
     break;
 
 
   
-    case 202:
+    case 219:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2818 "parser.y"
+#line 2893 "parser.y"
     {PASS12 (yyval.classinfo)=TYPE_ANY;}
     }
     break;
 
 
   
-    case 203:
+    case 220:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2819 "parser.y"
-    {PASS12 (yyval.classinfo)=TYPE_ANY;}
+#line 2894 "parser.y"
+    {PASS12 (yyval.classinfo)=TYPE_VOID;}
     }
     break;
 
 
   
-    case 204:
+    case 221:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2828 "parser.y"
+#line 2903 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
     }
     break;
 
 
   
-    case 205:
+    case 222:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2829 "parser.y"
+#line 2904 "parser.y"
     {PASS12 (yyval.classinfo)=0;}
     }
     break;
 
 
   
-    case 206:
+    case 223:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2833 "parser.y"
+#line 2908 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
     }
     break;
 
 
   
-    case 207:
+    case 224:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2834 "parser.y"
+#line 2909 "parser.y"
     {(yyval.value_list)=(yyvsp[(2) - (3)].value_list);}
     }
     break;
 
 
   
-    case 208:
+    case 225:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2836 "parser.y"
+#line 2911 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
     }
     break;
 
 
   
-    case 211:
+    case 228:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2840 "parser.y"
+#line 2915 "parser.y"
     {(yyval.value_list).number=1;
                                                   (yyval.value_list).cc = (yyvsp[(1) - (1)].value).c;
                                                  }
@@ -6402,22 +6823,22 @@ PASS12
 
 
   
-    case 212:
+    case 229:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2844 "parser.y"
+#line 2919 "parser.y"
     {(yyval.value_list) = (yyvsp[(1) - (2)].value_list);}
     }
     break;
 
 
   
-    case 213:
+    case 230:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2845 "parser.y"
+#line 2920 "parser.y"
     {
                                                   (yyval.value_list).number= (yyvsp[(1) - (2)].value_list).number+1;
                                                   (yyval.value_list).cc = code_append((yyvsp[(1) - (2)].value_list).cc, (yyvsp[(2) - (2)].value).c);
@@ -6427,11 +6848,11 @@ PASS12
 
 
   
-    case 215:
+    case 232:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2851 "parser.y"
+#line 2926 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(2) - (4)].node));
     (yyval.value).c = v.c;
@@ -6469,11 +6890,11 @@ PASS12
 
 
   
-    case 216:
+    case 233:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2888 "parser.y"
+#line 2963 "parser.y"
     {
    
     typedcode_t v = node_read((yyvsp[(1) - (4)].node));
@@ -6528,11 +6949,11 @@ PASS12
 
 
   
-    case 217:
+    case 234:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2938 "parser.y"
+#line 3013 "parser.y"
     {
     if(!state->cls) syntaxerror("super() not allowed outside of a class");
     if(!state->method) syntaxerror("super() not allowed outside of a function");
@@ -6558,11 +6979,11 @@ PASS12
 
 
   
-    case 218:
+    case 235:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2959 "parser.y"
+#line 3034 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(2) - (2)].node));
     (yyval.value).c = v.c;
@@ -6589,11 +7010,11 @@ PASS12
 
 
   
-    case 219:
+    case 236:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2981 "parser.y"
+#line 3056 "parser.y"
     {
     (yyval.code) = abc_returnvoid(0);
 }
@@ -6602,11 +7023,11 @@ PASS12
 
 
   
-    case 220:
+    case 237:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2984 "parser.y"
+#line 3059 "parser.y"
     {
     (yyval.code) = (yyvsp[(2) - (2)].value).c;
     (yyval.code) = abc_returnvalue((yyval.code));
@@ -6616,11 +7037,11 @@ PASS12
 
 
   
-    case 221:
+    case 238:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2991 "parser.y"
+#line 3066 "parser.y"
     {
     (yyval.value) = node_read((yyvsp[(1) - (1)].node));
 }
@@ -6629,11 +7050,11 @@ PASS12
 
 
   
-    case 222:
+    case 239:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2994 "parser.y"
+#line 3069 "parser.y"
     {
     (yyval.value) = node_read((yyvsp[(1) - (1)].node));
 }
@@ -6642,11 +7063,11 @@ PASS12
 
 
   
-    case 223:
+    case 240:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 2997 "parser.y"
+#line 3072 "parser.y"
     {
     (yyval.node) = mkmultinode(&node_comma, (yyvsp[(1) - (1)].node));
 }
@@ -6655,11 +7076,11 @@ PASS12
 
 
   
-    case 224:
+    case 241:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3000 "parser.y"
+#line 3075 "parser.y"
     {
     (yyval.node) = multinode_extend((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
 }
@@ -6668,11 +7089,11 @@ PASS12
 
 
   
-    case 225:
+    case 242:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3003 "parser.y"
+#line 3078 "parser.y"
     { 
     (yyval.code) = node_exec((yyvsp[(1) - (1)].node)); 
 }
@@ -6681,11 +7102,11 @@ PASS12
 
 
   
-    case 226:
+    case 243:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3006 "parser.y"
+#line 3081 "parser.y"
     { 
     (yyval.code) = (yyvsp[(1) - (3)].code);
     (yyval.code) = code_append((yyval.code), node_exec((yyvsp[(3) - (3)].node))); 
@@ -6695,55 +7116,55 @@ PASS12
 
 
   
-    case 227:
+    case 244:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3011 "parser.y"
+#line 3086 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
     }
     break;
 
 
   
-    case 228:
+    case 245:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3012 "parser.y"
+#line 3087 "parser.y"
     {(yyval.value_list)=(yyvsp[(1) - (1)].value_list);}
     }
     break;
 
 
   
-    case 229:
+    case 246:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3014 "parser.y"
+#line 3089 "parser.y"
     {(yyval.code)=abc_pushstring(0,(yyvsp[(1) - (1)].id));}
     }
     break;
 
 
   
-    case 230:
+    case 247:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3015 "parser.y"
+#line 3090 "parser.y"
     {(yyval.code)=abc_pushstring2(0,&(yyvsp[(1) - (1)].str));}
     }
     break;
 
 
   
-    case 231:
+    case 248:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3017 "parser.y"
+#line 3092 "parser.y"
     {
     (yyval.value_list).cc = 0;
     (yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(1) - (3)].code));
@@ -6755,11 +7176,11 @@ PASS12
 
 
   
-    case 232:
+    case 249:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3023 "parser.y"
+#line 3098 "parser.y"
     {
     (yyval.value_list).cc = (yyvsp[(1) - (5)].value_list).cc;
     (yyval.value_list).number = (yyvsp[(1) - (5)].value_list).number+2;
@@ -6771,77 +7192,77 @@ PASS12
 
 
   
-    case 233:
+    case 250:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3032 "parser.y"
+#line 3107 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
 
 
   
-    case 234:
+    case 251:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3033 "parser.y"
+#line 3108 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
 
 
   
-    case 235:
+    case 252:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3034 "parser.y"
+#line 3109 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
 
 
   
-    case 236:
+    case 253:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3035 "parser.y"
+#line 3110 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
 
 
   
-    case 237:
+    case 254:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3036 "parser.y"
+#line 3111 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
 
 
   
-    case 238:
+    case 255:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3037 "parser.y"
+#line 3112 "parser.y"
     {(yyval.node) = (yyvsp[(1) - (1)].node);}
     }
     break;
 
 
   
-    case 239:
+    case 256:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3039 "parser.y"
+#line 3114 "parser.y"
     { 
     (yyval.node) = mkconstnode((yyvsp[(1) - (1)].constant));
 }
@@ -6850,11 +7271,32 @@ PASS12
 
 
   
-    case 240:
+    case 257:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3118 "parser.y"
+    {
+    typedcode_t v;
+    v.c = 0;
+    namespace_t ns = {ACCESS_PACKAGE, ""};
+    multiname_t m = {QNAME, &ns, 0, "XML"};
+    v.c = abc_getlex2(v.c, &m);
+    v.c = abc_pushstring(v.c, (yyvsp[(1) - (1)].id));
+    v.c = abc_construct(v.c, 1);
+    v.t = TYPE_XML;
+    (yyval.node) = mkcodenode(v);
+}
+    }
+    break;
+
+
+  
+    case 258:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3044 "parser.y"
+#line 3131 "parser.y"
     {
     typedcode_t v;
     v.c = 0;
@@ -6878,11 +7320,11 @@ PASS12
 
 
   
-    case 241:
+    case 259:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3064 "parser.y"
+#line 3151 "parser.y"
     {
     typedcode_t v;
     v.c = code_new();
@@ -6896,11 +7338,11 @@ PASS12
 
 
   
-    case 242:
+    case 260:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3074 "parser.y"
+#line 3161 "parser.y"
     {
     typedcode_t v;
     v.c = code_new();
@@ -6914,561 +7356,561 @@ PASS12
 
 
   
-    case 243:
+    case 261:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3083 "parser.y"
+#line 3170 "parser.y"
     {(yyval.node) = mknode2(&node_lt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 244:
+    case 262:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3084 "parser.y"
+#line 3171 "parser.y"
     {(yyval.node) = mknode2(&node_gt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 245:
+    case 263:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3085 "parser.y"
+#line 3172 "parser.y"
     {(yyval.node) = mknode2(&node_le,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 246:
+    case 264:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3086 "parser.y"
+#line 3173 "parser.y"
     {(yyval.node) = mknode2(&node_ge,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 247:
+    case 265:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3087 "parser.y"
+#line 3174 "parser.y"
     {(yyval.node) = mknode2(&node_eqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 248:
+    case 266:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3088 "parser.y"
+#line 3175 "parser.y"
     {(yyval.node) = mknode2(&node_eqeqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 249:
+    case 267:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3089 "parser.y"
+#line 3176 "parser.y"
     {(yyval.node) = mknode2(&node_noteqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 250:
+    case 268:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3090 "parser.y"
+#line 3177 "parser.y"
     {(yyval.node) = mknode2(&node_noteq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 251:
+    case 269:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3091 "parser.y"
+#line 3178 "parser.y"
     {(yyval.node) = mknode2(&node_oror,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 252:
+    case 270:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3092 "parser.y"
+#line 3179 "parser.y"
     {(yyval.node) = mknode2(&node_andand,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 253:
+    case 271:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3093 "parser.y"
+#line 3180 "parser.y"
     {(yyval.node) = mknode1(&node_not, (yyvsp[(2) - (2)].node));}
     }
     break;
 
 
   
-    case 254:
+    case 272:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3094 "parser.y"
+#line 3181 "parser.y"
     {(yyval.node) = mknode1(&node_bitnot, (yyvsp[(2) - (2)].node));}
     }
     break;
 
 
   
-    case 255:
+    case 273:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3095 "parser.y"
+#line 3182 "parser.y"
     {(yyval.node) = mknode2(&node_bitand, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 256:
+    case 274:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3096 "parser.y"
+#line 3183 "parser.y"
     {(yyval.node) = mknode2(&node_bitxor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 257:
+    case 275:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3097 "parser.y"
+#line 3184 "parser.y"
     {(yyval.node) = mknode2(&node_bitor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 258:
+    case 276:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3098 "parser.y"
+#line 3185 "parser.y"
     {(yyval.node) = mknode2(&node_shr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 259:
+    case 277:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3099 "parser.y"
+#line 3186 "parser.y"
     {(yyval.node) = mknode2(&node_ushr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 260:
+    case 278:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3100 "parser.y"
+#line 3187 "parser.y"
     {(yyval.node) = mknode2(&node_shl, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 261:
+    case 279:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3101 "parser.y"
+#line 3188 "parser.y"
     {(yyval.node) = mknode2(&node_div, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 262:
+    case 280:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3102 "parser.y"
+#line 3189 "parser.y"
     {(yyval.node) = mknode2(&node_mod, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 263:
+    case 281:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3103 "parser.y"
+#line 3190 "parser.y"
     {(yyval.node) = mknode2(&node_plus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 264:
+    case 282:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3104 "parser.y"
+#line 3191 "parser.y"
     {(yyval.node) = mknode2(&node_minus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 265:
+    case 283:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3105 "parser.y"
+#line 3192 "parser.y"
     {(yyval.node) = mknode2(&node_multiply, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 266:
+    case 284:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3106 "parser.y"
+#line 3193 "parser.y"
     {(yyval.node) = mknode2(&node_in, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 267:
+    case 285:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3107 "parser.y"
+#line 3194 "parser.y"
     {(yyval.node) = mknode2(&node_as, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 268:
+    case 286:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3108 "parser.y"
+#line 3195 "parser.y"
     {(yyval.node) = mknode2(&node_instanceof, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 269:
+    case 287:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3109 "parser.y"
+#line 3196 "parser.y"
     {(yyval.node) = mknode2(&node_is, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 270:
+    case 288:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3110 "parser.y"
+#line 3197 "parser.y"
     {(yyval.node) = mknode1(&node_typeof, (yyvsp[(3) - (4)].node));}
     }
     break;
 
 
   
-    case 271:
+    case 289:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3111 "parser.y"
+#line 3198 "parser.y"
     {(yyval.node) = mknode1(&node_void, (yyvsp[(2) - (2)].node));}
     }
     break;
 
 
   
-    case 272:
+    case 290:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3112 "parser.y"
+#line 3199 "parser.y"
     { (yyval.node) = mkconstnode(constant_new_undefined());}
     }
     break;
 
 
   
-    case 273:
+    case 291:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3113 "parser.y"
+#line 3200 "parser.y"
     { (yyval.node)=(yyvsp[(2) - (3)].node);}
     }
     break;
 
 
   
-    case 274:
+    case 292:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3114 "parser.y"
+#line 3201 "parser.y"
     {(yyval.node) = mknode1(&node_neg, (yyvsp[(2) - (2)].node));}
     }
     break;
 
 
   
-    case 275:
+    case 293:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3115 "parser.y"
+#line 3202 "parser.y"
     {(yyval.node) = mknode2(&node_arraylookup, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node));}
     }
     break;
 
 
   
-    case 276:
+    case 294:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3116 "parser.y"
+#line 3203 "parser.y"
     {(yyval.node) = mknode2(&node_muleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 277:
+    case 295:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3117 "parser.y"
+#line 3204 "parser.y"
     {(yyval.node) = mknode2(&node_modeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 278:
+    case 296:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3118 "parser.y"
+#line 3205 "parser.y"
     {(yyval.node) = mknode2(&node_shleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 279:
+    case 297:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3119 "parser.y"
+#line 3206 "parser.y"
     {(yyval.node) = mknode2(&node_shreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 280:
+    case 298:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3120 "parser.y"
+#line 3207 "parser.y"
     {(yyval.node) = mknode2(&node_ushreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 281:
+    case 299:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3121 "parser.y"
+#line 3208 "parser.y"
     { (yyval.node) = mknode2(&node_diveq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 282:
+    case 300:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3122 "parser.y"
+#line 3209 "parser.y"
     { (yyval.node) = mknode2(&node_bitoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 283:
+    case 301:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3123 "parser.y"
+#line 3210 "parser.y"
     { (yyval.node) = mknode2(&node_bitxoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 284:
+    case 302:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3124 "parser.y"
+#line 3211 "parser.y"
     { (yyval.node) = mknode2(&node_bitandeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 285:
+    case 303:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3125 "parser.y"
+#line 3212 "parser.y"
     { (yyval.node) = mknode2(&node_pluseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 286:
+    case 304:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3126 "parser.y"
+#line 3213 "parser.y"
     { (yyval.node) = mknode2(&node_minuseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 287:
+    case 305:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3127 "parser.y"
+#line 3214 "parser.y"
     { (yyval.node) = mknode2(&node_assign, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
 
 
   
-    case 288:
+    case 306:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3128 "parser.y"
+#line 3215 "parser.y"
     { (yyval.node) = mknode3(&node_tenary, (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));}
     }
     break;
 
 
   
-    case 289:
+    case 307:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3130 "parser.y"
+#line 3217 "parser.y"
     { (yyval.node) = mknode1(&node_rplusplus, (yyvsp[(1) - (2)].node));}
     }
     break;
 
 
   
-    case 290:
+    case 308:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3131 "parser.y"
+#line 3218 "parser.y"
     { (yyval.node) = mknode1(&node_rminusminus, (yyvsp[(1) - (2)].node));}
     }
     break;
 
 
   
-    case 291:
+    case 309:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3132 "parser.y"
+#line 3219 "parser.y"
     {(yyval.node) = mknode1(&node_lplusplus, (yyvsp[(2) - (2)].node)); }
     }
     break;
 
 
   
-    case 292:
+    case 310:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3133 "parser.y"
+#line 3220 "parser.y"
     {(yyval.node) = mknode1(&node_lminusminus, (yyvsp[(2) - (2)].node)); }
     }
     break;
 
 
   
-    case 293:
+    case 311:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3136 "parser.y"
+#line 3223 "parser.y"
     { if(!state->cls->info)
                   syntaxerror("super keyword not allowed outside a class");
               classinfo_t*t = state->cls->info->superclass;
@@ -7487,86 +7929,215 @@ PASS12
 
 
   
-    case 294:
+    case 312:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3150 "parser.y"
+#line 3237 "parser.y"
     {
-              // attribute TODO
-              (yyval.node) = mkdummynode();
-              as3_warning("ignored @ operator");
-           }
+    // attribute occuring in .() loops 
+    // TODO
+    (yyval.node) = mkdummynode();
+    as3_warning("ignored @ operator");
+}
     }
     break;
 
 
   
-    case 295:
+    case 313:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3156 "parser.y"
+#line 3244 "parser.y"
     {
-              // child attribute  TODO
-              (yyval.node) = mkdummynode();
-              as3_warning("ignored .@ operator");
-           }
+    // filter 
+    // TODO: this needs to be implemented using a loop
+    (yyval.node) = mkdummynode();
+    as3_warning("ignored .() operator");
+}
     }
     break;
 
 
   
-    case 296:
+    case 314:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3251 "parser.y"
+    {(yyval.id)=(yyvsp[(1) - (1)].id);}
+    }
+    break;
+
+
+  
+    case 315:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3252 "parser.y"
+    {(yyval.id)=(char*)(yyvsp[(1) - (1)].id);}
+    }
+    break;
+
+
+  
+    case 317:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3254 "parser.y"
+    {(yyval.id)="*";}
+    }
+    break;
+
+
+  
+    case 318:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3162 "parser.y"
+#line 3256 "parser.y"
     {
-              // namespace declaration TODO
-              (yyval.node) = mkdummynode();
-              as3_warning("ignored :: operator");
-           }
+    typedcode_t v = node_read((yyvsp[(1) - (5)].node));
+    typedcode_t w = node_read(resolve_identifier((yyvsp[(3) - (5)].id)));
+    v.c = code_append(v.c, w.c);
+    if(!TYPE_IS_NAMESPACE(w.t)) {
+        as3_softwarning("%s might not be a namespace", (yyvsp[(3) - (5)].id));
+    }
+    v.c = converttype(v.c, w.t, TYPE_NAMESPACE);
+    multiname_t m = {RTQNAME, 0, 0, (yyvsp[(5) - (5)].id)};
+    v.c = abc_getproperty2(v.c, &m);
+    if(TYPE_IS_XML(v.t)) {
+        v.t = TYPE_XMLLIST;
+    } else {
+        v.c = abc_coerce_a(v.c);
+        v.t = TYPE_ANY;
+    }
+    (yyval.node) = mkcodenode(v);
+}
     }
     break;
 
 
   
-    case 297:
+    case 319:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3168 "parser.y"
+#line 3274 "parser.y"
     {
-              // descendants TODO
-              (yyval.node) = mkdummynode();
-              as3_warning("ignored .. operator");
-           }
+    typedcode_t v = node_read((yyvsp[(1) - (3)].node));
+    multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)};
+    v.c = abc_getdescendants2(v.c, &m);
+    v.t = TYPE_XMLLIST;
+    (yyval.node) = mkcodenode(v);
+}
     }
     break;
 
 
   
-    case 298:
+    case 320:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3174 "parser.y"
+#line 3281 "parser.y"
     {
-              // filter TODO
-              (yyval.node) = mkdummynode();
-              as3_warning("ignored .() operator");
-           }
+    typedcode_t v = node_read((yyvsp[(1) - (5)].node));
+    typedcode_t w = node_read((yyvsp[(4) - (5)].node));
+    multiname_t m = {MULTINAMEL, 0, &nopackage_namespace_set, 0};
+    v.c = code_append(v.c, w.c);
+    v.c = converttype(w.c, w.t, TYPE_STRING);
+    v.c = abc_getproperty2(v.c, &m);
+    v.t = TYPE_XMLLIST;
+    (yyval.node) = mkcodenode(v);
+}
     }
     break;
 
 
   
-    case 299:
+    case 321:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3187 "parser.y"
+#line 3292 "parser.y"
+    {
+    typedcode_t v = node_read((yyvsp[(1) - (4)].node));
+    multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
+    v.c = abc_getproperty2(v.c, &m);
+    v.t = TYPE_STRING;
+    (yyval.node) = mkcodenode(v);
+}
+    }
+    break;
+
+
+  
+    case 322:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3299 "parser.y"
+    {
+    typedcode_t v = node_read((yyvsp[(1) - (4)].node));
+    multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
+    v.c = abc_getdescendants2(v.c, &m);
+    v.t = TYPE_STRING;
+    (yyval.node) = mkcodenode(v);
+}
+    }
+    break;
+
+
+  
+    case 323:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3306 "parser.y"
+    {
+    typedcode_t v = node_read((yyvsp[(1) - (6)].node));
+    typedcode_t w = node_read((yyvsp[(5) - (6)].node));
+    multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0};
+    v.c = code_append(v.c, w.c);
+    v.c = converttype(w.c, w.t, TYPE_STRING);
+    v.c = abc_getproperty2(v.c, &m);
+    v.t = TYPE_STRING;
+    (yyval.node) = mkcodenode(v);
+}
+    }
+    break;
+
+
+  
+    case 324:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3316 "parser.y"
+    {
+    typedcode_t v = node_read((yyvsp[(1) - (6)].node));
+    typedcode_t w = node_read((yyvsp[(5) - (6)].node));
+    multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0};
+    v.c = code_append(v.c, w.c);
+    v.c = converttype(w.c, w.t, TYPE_STRING);
+    v.c = abc_getdescendants2(v.c, &m);
+    v.t = TYPE_STRING;
+    (yyval.node) = mkcodenode(v);
+}
+    }
+    break;
+
+
+  
+    case 325:
+    if(as3_pass==2) {
+
+/* Line 1464 of skeleton.m4  */
+#line 3327 "parser.y"
     {
     typedcode_t v1 = node_read((yyvsp[(1) - (3)].node));
     (yyval.value).c = v1.c;
@@ -7576,7 +8147,12 @@ PASS12
         t = t->data;
         is_static = 1;
     }
-    if(t) {
+    if(TYPE_IS_XML(t)) {
+        multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)};
+        (yyval.value).c = abc_getproperty2((yyval.value).c, &m);
+        (yyval.value).c = abc_coerce_a((yyval.value).c);
+        (yyval.value).t = TYPE_XMLLIST;
+    } else if(t) {
         if(t->subtype==INFOTYPE_UNRESOLVED) {
             syntaxerror("syntaxerror: trying to resolve property '%s' on incomplete object '%s'", (yyvsp[(3) - (3)].id), t->name);
         }
@@ -7629,11 +8205,11 @@ PASS12
 
 
   
-    case 300:
+    case 326:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3245 "parser.y"
+#line 3497 "parser.y"
     {
     PASS1
     /* Queue unresolved identifiers for checking against the parent
@@ -7643,137 +8219,30 @@ PASS12
        etc. which is *correct* because local variables of the parent function
        would shadow those.
        */
-    if(state->method->inner && !find_variable(state, (yyvsp[(1) - (1)].id))) {
-        unknown_variable((yyvsp[(1) - (1)].id));
+    if(!find_variable(state, (yyvsp[(1) - (1)].id))) {
+        if(state->method->inner) {
+            unknown_variable((yyvsp[(1) - (1)].id));
+        }
+        /* let the compiler know that it might want to check the current directory/package
+           for this identifier- maybe there's a file $1.as defining $1. */
+        as3_schedule_class_noerror(state->package, (yyvsp[(1) - (1)].id));
     }
    
-    /* let the compiler know that it might want to check the current directory/package
-       for this identifier- maybe there's a file $1.as defining $1. */
-    as3_schedule_class_noerror(state->package, (yyvsp[(1) - (1)].id));
-    PASS2
-
-    typedcode_t o;
-    o.t = 0;
-    o.c = 0;
     (yyval.node) = 0;
+    PASS2
 
-    slotinfo_t*a = 0;
-    memberinfo_t*f = 0;
-
-    variable_t*v;
-    /* look at variables */
-    if((v = find_variable(state, (yyvsp[(1) - (1)].id)))) {
-        // $1 is a local variable
-        o.c = abc_getlocal(o.c, v->index);
-        o.t = v->type;
-        (yyval.node) = mkcodenode(o);
-        break;
-    }
-    if((v = find_slot(state, (yyvsp[(1) - (1)].id)))) {
-        o.c = abc_getscopeobject(o.c, 1);
-        o.c = abc_getslot(o.c, v->index);
-        o.t = v->type;
-        (yyval.node) = mkcodenode(o);
-        break;
-    }
-
-    int i_am_static = (state->method && state->method->info)?(state->method->info->flags&FLAG_STATIC):FLAG_STATIC;
-
-    /* look at current class' members */
-    if(!state->method->inner && 
-        state->cls && 
-        (f = findmember_nsset(state->cls->info, (yyvsp[(1) - (1)].id), 1)))
-    {
-        // $1 is a member or attribute in this class
-        int var_is_static = (f->flags&FLAG_STATIC);
-
-        if(f->kind == INFOTYPE_VAR && (f->flags&FLAG_CONST)) {
-            /* if the variable is a constant (and we know what is evaluates to), we
-               can just use the value itself */
-            varinfo_t*v = (varinfo_t*)f;
-            if(v->value) {
-                (yyval.node) = mkconstnode(v->value);
-                break;
-            }
-        }
-       
-        if(var_is_static >= i_am_static) {
-            if(f->kind == INFOTYPE_METHOD) {
-                o.t = TYPE_FUNCTION(f);
-            } else {
-                o.t = f->type;
-            }
-
-            if(var_is_static && !i_am_static) {
-            /* access to a static member from a non-static location.
-               do this via findpropstrict:
-               there doesn't seem to be any non-lookup way to access
-               static properties of a class */
-                state->method->late_binding = 1;
-                o.t = f->type;
-                namespace_t ns = {f->access, f->package};
-                multiname_t m = {QNAME, &ns, 0, (yyvsp[(1) - (1)].id)};
-                o.c = abc_findpropstrict2(o.c, &m);
-                o.c = abc_getproperty2(o.c, &m);
-                (yyval.node) = mkcodenode(o);
-                break;
-            } else if(f->slot>0) {
-                o.c = abc_getlocal_0(o.c);
-                o.c = abc_getslot(o.c, f->slot);
-                (yyval.node) = mkcodenode(o);
-                break;
-            } else {
-                namespace_t ns = {f->access, f->package};
-                multiname_t m = {QNAME, &ns, 0, (yyvsp[(1) - (1)].id)};
-                o.c = abc_getlocal_0(o.c);
-                o.c = abc_getproperty2(o.c, &m);
-                (yyval.node) = mkcodenode(o);
-                break;
-            }
-        }
-    } 
-    
-    /* look at actual classes, in the current package and imported */
-    if((a = find_class((yyvsp[(1) - (1)].id)))) {
-        o = push_class(a);
-        (yyval.node) = mkcodenode(o);
-        break;
-    }
-
-    /* look through package prefixes */
-    if(dict_contains(state->import_toplevel_packages, (yyvsp[(1) - (1)].id)) || 
-       registry_ispackage((yyvsp[(1) - (1)].id))) {
-        o.c = abc___pushpackage__(o.c, (yyvsp[(1) - (1)].id));
-        o.t = 0;
-        (yyval.node) = mkcodenode(o); //?
-        break;
-    }
-
-    /* unknown object, let the avm2 resolve it */
-    if(1) {
-        //as3_softwarning("Couldn't resolve '%s', doing late binding", $1);
-        as3_warning("Couldn't resolve '%s', doing late binding", (yyvsp[(1) - (1)].id));
-        state->method->late_binding = 1;
-                
-        multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(1) - (1)].id)};
-
-        o.t = 0;
-        o.c = abc_findpropstrict2(o.c, &m);
-        o.c = abc_getproperty2(o.c, &m);
-        (yyval.node) = mkcodenode(o);
-        break;
-    }
+    (yyval.node) = resolve_identifier((yyvsp[(1) - (1)].id));
 }
     }
     break;
 
 
   
-    case 301:
+    case 327:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3378 "parser.y"
+#line 3532 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -7786,11 +8255,11 @@ PASS12
 
 
   
-    case 302:
+    case 328:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3385 "parser.y"
+#line 3539 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -7803,11 +8272,11 @@ PASS12
 
 
   
-    case 303:
+    case 329:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3392 "parser.y"
+#line 3546 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -7820,11 +8289,11 @@ PASS12
 
 
   
-    case 304:
+    case 330:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3399 "parser.y"
+#line 3553 "parser.y"
     {
     PASS12
     trie_put(active_namespaces, (yyvsp[(2) - (2)].namespace_decl)->name, (void*)(yyvsp[(2) - (2)].namespace_decl)->url);
@@ -7836,6 +8305,13 @@ PASS12
     ns.access = ACCESS_NAMESPACE;
     ns.name = (yyvsp[(2) - (2)].namespace_decl)->url;
     var->value = constant_new_namespace(&ns);
+      
+    if(as3_pass==2) {
+        MULTINAME(m, TYPE_NAMESPACE);
+        trait_t*t = add_abc_slot(&(yyvsp[(1) - (2)].flags), (yyvsp[(2) - (2)].namespace_decl)->name, 0, 0);
+        t->value = var->value;
+        t->type_name = multiname_clone(&m);
+    }
 
     (yyval.code)=0;
 }
@@ -7844,11 +8320,11 @@ PASS12
 
 
   
-    case 305:
+    case 331:
     if(as3_pass==2) {
 
 /* Line 1464 of skeleton.m4  */
-#line 3423 "parser.y"
+#line 3575 "parser.y"
     {
     PASS12
     const char*url = (yyvsp[(3) - (3)].classinfo)->name;
@@ -7877,7 +8353,7 @@ PASS12
 
 
 /* Line 1464 of skeleton.m4  */
-#line 7881 "parser.tab.c"
+#line 8357 "parser.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 591877e..c0ec10c 100644 (file)
      prec_none = 352,
      below_semicolon = 353,
      below_assignment = 354,
-     below_minus = 355,
-     minusminus_prefix = 356,
-     plusplus_prefix = 357,
-     below_curly = 358,
-     new2 = 359,
-     above_identifier = 360,
-     below_else = 361,
-     above_function = 362
+     below_lt = 355,
+     below_minus = 356,
+     minusminus_prefix = 357,
+     plusplus_prefix = 358,
+     below_curly = 359,
+     new2 = 360,
+     above_identifier = 361,
+     below_else = 362,
+     above_function = 363
    };
 #endif
 
@@ -192,7 +193,7 @@ tokenunion
 
 
 /* Line 1685 of skeleton.m4  */
-#line 196 "parser.tab.h"
+#line 197 "parser.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 96b9b59..8342309 100644 (file)
@@ -176,7 +176,7 @@ extern int a3_lex();
 
 %type <number_int> CONDITIONAL_COMPILATION
 %type <for_start> FOR_START
-%type <id> X_IDENTIFIER PACKAGE FOR_IN_INIT MAYBE_IDENTIFIER
+%type <id> X_IDENTIFIER PACKAGE FOR_IN_INIT MAYBE_IDENTIFIER ID_OR_NS SUBNODE
 %type <namespace_decl>  NAMESPACE_ID
 %type <token> VARCONST
 %type <code> CODE
@@ -213,10 +213,9 @@ extern int a3_lex();
 %type <classinfo_list> IMPLEMENTS_LIST
 %type <classinfo> EXTENDS CLASS_SPEC
 %type <classinfo_list> EXTENDS_LIST
-
 %type <classinfo> CLASS PACKAGEANDCLASS
 %type <classinfo_list> CLASS_SPEC_LIST
-
+%type <id> XML XML2 XMLNODE XMLATTRIBUTE XMLATTRIBUTES MAYBE_XMLATTRIBUTES XMLTEXT
 %type <classinfo> TYPE
 //%type <token> VARIABLE
 %type <value> MEMBER
@@ -244,6 +243,7 @@ extern int a3_lex();
 %nonassoc '&'
 %nonassoc "==" "!=" "===" "!=="
 %nonassoc "is" "as" "in"
+%left below_lt
 %nonassoc "<=" '<' ">=" '>' "instanceof" // TODO: support "a < b < c" syntax?
 %left "<<" ">>" ">>>" 
 %left below_minus
@@ -559,7 +559,6 @@ void initialize_file(char*filename)
         if(!state->method)
             syntaxerror("internal error: skewed tokencount");
         function_initvars(state->method, 0, 0, 1);
-        global->classinit = abc_initscript(global->file);
         global->init = abc_initscript(global->file);
     }
 }
@@ -572,10 +571,9 @@ void finish_file()
     
     if(as3_pass==2) {
         dict_del(global->file2token2info, current_filename);
-
         code_t*header = method_header(state->method);
         code_t*c = wrap_function(header, 0, global->init->method->body->code);
-        global->init->method->body->code = c;
+        global->init->method->body->code = abc_returnvoid(c);
         free(state->method);state->method=0;
     }
 
@@ -590,6 +588,7 @@ void initialize_parser()
     global->file->flags &= ~ABCFILE_LAZY;
     global->file2token2info = dict_new();
     global->token2info = 0;
+    global->classinit = abc_initscript(global->file);
 }
 
 void* finish_parser()
@@ -1055,9 +1054,13 @@ static void startclass(modifiers_t* mod, char*classname, classinfo_t*extends, cl
         /* generate the abc code for this class */
         MULTINAME(classname2,state->cls->info);
         multiname_t*extends2 = sig2mname(extends);
-        state->cls->abc = abc_class_new(global->file, &classname2, extends2);
-        multiname_destroy(extends2);
 
+        /* don't add the class to the class index just yet- that will be done later
+           by initscript */
+        state->cls->abc = abc_class_new(0, &classname2, extends2);
+        state->cls->abc->file = global->file;
+
+        multiname_destroy(extends2);
         if(state->cls->info->flags&FLAG_FINAL) abc_class_final(state->cls->abc);
         if(!(state->cls->info->flags&FLAG_DYNAMIC)) abc_class_sealed(state->cls->abc);
         if(state->cls->info->flags&FLAG_INTERFACE) {
@@ -1245,7 +1248,7 @@ static methodinfo_t*registerfunction(enum yytokentype getset, modifiers_t*mod, c
             minfo = methodinfo_register_onclass(state->cls->info, ns.access, ns.name, name);
             minfo->kind = INFOTYPE_VAR; //hack
             minfo->subtype = gs;
-            minfo->return_type = return_type;
+            minfo->return_type = type;
         }
 
         /* can't assign a slot as getter and setter might have different slots */
@@ -1427,8 +1430,13 @@ static abc_method_t* endfunction(modifiers_t*mod, enum yytokentype getset, char*
         } else if(state->method->is_constructor) {
             f = abc_class_getconstructor(state->cls->abc, type2);
         } else if(!state->method->is_global) {
-            namespace_t mname_ns = modifiers2access(mod);
-            multiname_t mname = {QNAME, &mname_ns, 0, name};
+            namespace_t ns = modifiers2access(mod);
+          
+            /* deal with protected */
+            if(ns.access == ACCESS_PROTECTED && state->cls)
+                ns.name = state->cls->info->name;
+
+            multiname_t mname = {QNAME, &ns, 0, name};
 
             if(mod->flags&FLAG_STATIC)
                 f = abc_class_staticmethod(state->cls->abc, type2, &mname);
@@ -2540,6 +2548,40 @@ IDECLARATION : MAYBE_MODIFIERS "function" GETSET T_IDENTIFIER '(' MAYBE_PARAM_LI
             parserassert(state->method);
         }
     }
+    static trait_t* add_abc_slot(modifiers_t* modifiers, const char*name, multiname_t*m, code_t***c)
+    {
+        int flags = modifiers->flags;
+        namespace_t ns = modifiers2access(modifiers);
+        /* deal with protected */
+        if(ns.access == ACCESS_PROTECTED && state->cls)
+            ns.name = state->cls->info->name;
+
+        /* slot name */
+        multiname_t mname = {QNAME, &ns, 0, name};
+      
+        trait_list_t**traits;
+        code_t**code=0;
+        if(!state->cls) {
+            // global variable
+            ns.name = state->package;
+            traits = &global->init->traits;
+            code = &global->init->method->body->code;
+        } else if(flags&FLAG_STATIC) {
+            // static variable
+            traits = &state->cls->abc->static_traits;
+            code = &state->cls->static_init->header;
+        } else {
+            // instance variable
+            traits = &state->cls->abc->traits;
+            code = &state->cls->init->header;
+        }
+        if(c)
+            *c = code;
+        if(m) 
+            memcpy(m, &mname, sizeof(multiname_t));
+            
+        return trait_new_member(traits, 0, multiname_clone(&mname), 0);
+    }
 };
 
 VARCONST: "var" | "const"
@@ -2584,34 +2626,20 @@ PASS12
     if(as3_pass == 2) {
         varinfo_t*info = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
 
-        /* slot name */
-        multiname_t mname = {QNAME, &ns, 0, $1};
-      
-        trait_list_t**traits;
+        multiname_t mname;
         code_t**code;
-        if(!state->cls) {
-            // global variable
-            ns.name = state->package;
-            traits = &global->init->traits;
-            code = &global->init->method->body->code;
-        } else if(flags&FLAG_STATIC) {
-            // static variable
-            traits = &state->cls->abc->static_traits;
-            code = &state->cls->static_init->header;
-        } else {
-            // instance variable
-            traits = &state->cls->abc->traits;
-            code = &state->cls->init->header;
-        }
-        
-        trait_t*t=0;
+        trait_t*t = add_abc_slot(slotstate_flags, $1, &mname, &code);
+
         if($2) {
             MULTINAME(m, $2);
-            t = trait_new_member(traits, multiname_clone(&m), multiname_clone(&mname), 0);
-        } else {
-            t = trait_new_member(traits, 0, multiname_clone(&mname), 0);
+            t->type_name = multiname_clone(&m);
         }
         info->slot = t->slot_id;
+        
+        /* workaround for "VerifyError: Error #1053: Illegal override of ::test2 in C1" 
+           FIXME: is there a way to use slots and still don't have conflicting overrides?
+        */
+        info->slot = t->slot_id = 0;
        
         constant_t cval = $3->type->eval($3);
         if(cval.type!=CONSTANT_UNKNOWN) {
@@ -2627,7 +2655,11 @@ PASS12
                 c = abc_getlocal_0(c);
                 c = code_append(c, v.c);
                 c = converttype(c, v.t, $2);
-                c = abc_setslot(c, t->slot_id);
+                if(!t->slot_id) {
+                    c = abc_setproperty2(c, &mname);
+                } else {
+                    c = abc_setslot(c, t->slot_id);
+                }
             }
             *code = code_append(*code, c);
         }
@@ -2647,8 +2679,9 @@ MAYBECONSTANT: {$$=0;}
 MAYBECONSTANT: '=' E {
   $$ = malloc(sizeof(constant_t));
   *$$ = node_eval($2);
-  if($$->type == CONSTANT_UNKNOWN)
+  if($$->type == CONSTANT_UNKNOWN) {
     syntaxerror("can't evaluate default parameter value (needs to be a compile-time constant)");
+  }
 }
 
 //CONSTANT : T_NAMESPACE {$$ = constant_new_namespace($1);}
@@ -2674,6 +2707,48 @@ CONSTANT : T_IDENTIFIER {
     }
 }*/
 
+/* ---------------------------xml ------------------------------ */
+
+%code {
+    static int xml_level = 0;
+};
+
+XML: XMLNODE
+
+OPEN : '<' {PASS_ALWAYS tokenizer_begin_xml();xml_level++;}
+CLOSE : '>' {PASS_ALWAYS tokenizer_begin_xmltext();}
+CLOSE2 : {PASS_ALWAYS if(!--xml_level) tokenizer_end_xml(); else tokenizer_begin_xmltext();}
+
+XMLTEXT : {$$="";}
+XMLTEXT : XMLTEXT T_STRING {$$=concat2($1, string_cstr(&$2));}
+XMLTEXT : XMLTEXT '>' {$$=concat2($1, ">");}
+
+XML2 : XMLNODE XMLTEXT {$$=concat2($1,$2);}
+XML2 : XML2 XMLNODE XMLTEXT {$$=concat3($1,$2,$3);free($1);free($2);free($3);}
+
+XMLNODE : OPEN T_IDENTIFIER MAYBE_XMLATTRIBUTES CLOSE XMLTEXT '<' '/' T_IDENTIFIER CLOSE2 '>' {
+    $$ = allocprintf("<%s%s>%s</%s>", $2, $3, $5, $8);
+    free($2);free($3);free($5);free($8);
+}
+XMLNODE : OPEN T_IDENTIFIER MAYBE_XMLATTRIBUTES '/' CLOSE2 '>' {
+    $$ = allocprintf("<%s%s/>", $2, $3);
+}
+XMLNODE : OPEN T_IDENTIFIER MAYBE_XMLATTRIBUTES CLOSE XMLTEXT XML2 '<' '/' T_IDENTIFIER CLOSE2 '>' {
+    $$ = allocprintf("<%s%s>%s%s</%s>", $2, $3, $5, $6, $9);
+    free($2);free($3);free($5);free($6);free($6);free($9);
+}
+
+MAYBE_XMLATTRIBUTES:                      {$$=strdup("");}
+MAYBE_XMLATTRIBUTES: XMLATTRIBUTES        {$$=concat2(" ",$1);}
+XMLATTRIBUTES: XMLATTRIBUTE               {$$=$1;}
+XMLATTRIBUTES: XMLATTRIBUTES XMLATTRIBUTE {$$=concat3($1," ",$2);free($1);free($2);}
+XMLATTRIBUTE: T_IDENTIFIER '=' T_STRING {
+    char* str = string_cstr(&$3);
+    $$=allocprintf("%s=\"%s\"", $1,str);
+    free(str);
+    free($1);free((char*)$3.str);
+}
+
 /* ------------ classes and interfaces (body, functions) ------- */
 
 // non-vararg version
@@ -2816,7 +2891,7 @@ CLASS_SPEC_LIST : CLASS_SPEC_LIST ',' CLASS_SPEC {PASS12 $$=$1;list_append($$,$3
 
 TYPE : CLASS_SPEC {PASS12 $$=$1;}
      | '*'        {PASS12 $$=TYPE_ANY;}
-     | "void"     {PASS12 $$=TYPE_ANY;}
+     | "void"     {PASS12 $$=TYPE_VOID;}
     /*
      |  "String"  {$$=registry_getstringclass();}
      |  "int"     {$$=registry_getintclass();}
@@ -2988,22 +3063,22 @@ RETURN: "return" EXPRESSION {
 
 // ----------------------- expression types -------------------------------------
 
-NONCOMMAEXPRESSION : E %prec below_minus {
+NONCOMMAEXPRESSION : E %prec below_lt {
     $$ = node_read($1);
 }
 EXPRESSION : COMMA_EXPRESSION {
     $$ = node_read($1);
 }
-COMMA_EXPRESSION : E %prec below_minus {
+COMMA_EXPRESSION : E %prec below_lt {
     $$ = mkmultinode(&node_comma, $1);
 }
-COMMA_EXPRESSION : COMMA_EXPRESSION ',' E %prec below_minus {
+COMMA_EXPRESSION : COMMA_EXPRESSION ',' E %prec below_lt {
     $$ = multinode_extend($1, $3);
 }
 VOIDEXPRESSION : E %prec below_minus { 
     $$ = node_exec($1); 
 }
-VOIDEXPRESSION : VOIDEXPRESSION ',' E %prec below_minus { 
+VOIDEXPRESSION : VOIDEXPRESSION ',' E %prec below_lt { 
     $$ = $1;
     $$ = code_append($$, node_exec($3)); 
 }
@@ -3040,6 +3115,18 @@ E : CONSTANT {
     $$ = mkconstnode($1);
 }
 
+E : XML {
+    typedcode_t v;
+    v.c = 0;
+    namespace_t ns = {ACCESS_PACKAGE, ""};
+    multiname_t m = {QNAME, &ns, 0, "XML"};
+    v.c = abc_getlex2(v.c, &m);
+    v.c = abc_pushstring(v.c, $1);
+    v.c = abc_construct(v.c, 1);
+    v.t = TYPE_XML;
+    $$ = mkcodenode(v);
+}
+
 /* regexp */
 E : T_REGEXP {
     typedcode_t v;
@@ -3148,43 +3235,96 @@ E : "super" '.' T_IDENTIFIER
            }
 
 E : '@' T_IDENTIFIER {
-              // attribute TODO
-              $$ = mkdummynode();
-              as3_warning("ignored @ operator");
-           }
-
-E : E '.' '@' T_IDENTIFIER {
-              // child attribute  TODO
-              $$ = mkdummynode();
-              as3_warning("ignored .@ operator");
-           }
+    // attribute occuring in .() loops 
+    // TODO
+    $$ = mkdummynode();
+    as3_warning("ignored @ operator");
+}
 
-E : E '.' T_IDENTIFIER "::" T_IDENTIFIER {
-              // namespace declaration TODO
-              $$ = mkdummynode();
-              as3_warning("ignored :: operator");
-           }
+E : E '.' '(' E ')' {
+    // filter 
+    // TODO: this needs to be implemented using a loop
+    $$ = mkdummynode();
+    as3_warning("ignored .() operator");
+}
 
-E : E ".." T_IDENTIFIER {
-              // descendants TODO
-              $$ = mkdummynode();
-              as3_warning("ignored .. operator");
-           }
+ID_OR_NS : T_IDENTIFIER {$$=$1;}
+ID_OR_NS : T_NAMESPACE {$$=(char*)$1;}
+SUBNODE: T_IDENTIFIER
+       | '*' {$$="*";}
 
-E : E '.' '(' E ')' {
-              // filter TODO
-              $$ = mkdummynode();
-              as3_warning("ignored .() operator");
-           }
+E : E '.' ID_OR_NS "::" SUBNODE {
+    typedcode_t v = node_read($1);
+    typedcode_t w = node_read(resolve_identifier($3));
+    v.c = code_append(v.c, w.c);
+    if(!TYPE_IS_NAMESPACE(w.t)) {
+        as3_softwarning("%s might not be a namespace", $3);
+    }
+    v.c = converttype(v.c, w.t, TYPE_NAMESPACE);
+    multiname_t m = {RTQNAME, 0, 0, $5};
+    v.c = abc_getproperty2(v.c, &m);
+    if(TYPE_IS_XML(v.t)) {
+        v.t = TYPE_XMLLIST;
+    } else {
+        v.c = abc_coerce_a(v.c);
+        v.t = TYPE_ANY;
+    }
+    $$ = mkcodenode(v);
+}
+E : E ".." SUBNODE {
+    typedcode_t v = node_read($1);
+    multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, $3};
+    v.c = abc_getdescendants2(v.c, &m);
+    v.t = TYPE_XMLLIST;
+    $$ = mkcodenode(v);
+}
+E : E '.' '[' E ']' {
+    typedcode_t v = node_read($1);
+    typedcode_t w = node_read($4);
+    multiname_t m = {MULTINAMEL, 0, &nopackage_namespace_set, 0};
+    v.c = code_append(v.c, w.c);
+    v.c = converttype(w.c, w.t, TYPE_STRING);
+    v.c = abc_getproperty2(v.c, &m);
+    v.t = TYPE_XMLLIST;
+    $$ = mkcodenode(v);
+}
 
-//E : E "::" '[' E ']' {
-//              // qualified expression TODO
-//              $$.c = abc_pushundefined(0);
-//              $$.t = 0;
-//              as3_warning("ignored ::[] operator");
-//           }
+E : E '.' '@' SUBNODE {
+    typedcode_t v = node_read($1);
+    multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, $4};
+    v.c = abc_getproperty2(v.c, &m);
+    v.t = TYPE_STRING;
+    $$ = mkcodenode(v);
+}
+E : E ".." '@' SUBNODE {
+    typedcode_t v = node_read($1);
+    multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, $4};
+    v.c = abc_getdescendants2(v.c, &m);
+    v.t = TYPE_STRING;
+    $$ = mkcodenode(v);
+}
+E : E '.' '@' '[' E ']' {
+    typedcode_t v = node_read($1);
+    typedcode_t w = node_read($5);
+    multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0};
+    v.c = code_append(v.c, w.c);
+    v.c = converttype(w.c, w.t, TYPE_STRING);
+    v.c = abc_getproperty2(v.c, &m);
+    v.t = TYPE_STRING;
+    $$ = mkcodenode(v);
+}
+E : E ".." '@' '[' E ']' {
+    typedcode_t v = node_read($1);
+    typedcode_t w = node_read($5);
+    multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0};
+    v.c = code_append(v.c, w.c);
+    v.c = converttype(w.c, w.t, TYPE_STRING);
+    v.c = abc_getdescendants2(v.c, &m);
+    v.t = TYPE_STRING;
+    $$ = mkcodenode(v);
+}
 
-MEMBER : E '.' T_IDENTIFIER {
+MEMBER : E '.' SUBNODE {
     typedcode_t v1 = node_read($1);
     $$.c = v1.c;
     classinfo_t*t = v1.t;
@@ -3193,7 +3333,12 @@ MEMBER : E '.' T_IDENTIFIER {
         t = t->data;
         is_static = 1;
     }
-    if(t) {
+    if(TYPE_IS_XML(t)) {
+        multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, $3};
+        $$.c = abc_getproperty2($$.c, &m);
+        $$.c = abc_coerce_a($$.c);
+        $$.t = TYPE_XMLLIST;
+    } else if(t) {
         if(t->subtype==INFOTYPE_UNRESOLVED) {
             syntaxerror("syntaxerror: trying to resolve property '%s' on incomplete object '%s'", $3, t->name);
         }
@@ -3242,6 +3387,113 @@ MEMBER : E '.' T_IDENTIFIER {
     }
 }
 
+%code {
+    node_t* resolve_identifier(char*name)
+    {
+        typedcode_t o;
+        o.t = 0;
+        o.c = 0;
+
+        slotinfo_t*a = 0;
+        memberinfo_t*f = 0;
+
+        variable_t*v;
+        /* look at variables */
+        if((v = find_variable(state, name))) {
+            // name is a local variable
+            o.c = abc_getlocal(o.c, v->index);
+            o.t = v->type;
+            return mkcodenode(o);
+        }
+        if((v = find_slot(state, name))) {
+            o.c = abc_getscopeobject(o.c, 1);
+            o.c = abc_getslot(o.c, v->index);
+            o.t = v->type;
+            return mkcodenode(o);
+        }
+
+        int i_am_static = (state->method && state->method->info)?(state->method->info->flags&FLAG_STATIC):FLAG_STATIC;
+
+        /* look at current class' members */
+        if(!state->method->inner && 
+            state->cls && 
+            (f = findmember_nsset(state->cls->info, name, 1)))
+        {
+            // name is a member or attribute in this class
+            int var_is_static = (f->flags&FLAG_STATIC);
+
+            if(f->kind == INFOTYPE_VAR && (f->flags&FLAG_CONST)) {
+                /* if the variable is a constant (and we know what is evaluates to), we
+                   can just use the value itself */
+                varinfo_t*v = (varinfo_t*)f;
+                if(v->value) {
+                    return mkconstnode(v->value);
+                }
+            }
+           
+            if(var_is_static >= i_am_static) {
+                if(f->kind == INFOTYPE_METHOD) {
+                    o.t = TYPE_FUNCTION(f);
+                } else {
+                    o.t = f->type;
+                }
+
+                if(var_is_static && !i_am_static) {
+                /* access to a static member from a non-static location.
+                   do this via findpropstrict:
+                   there doesn't seem to be any non-lookup way to access
+                   static properties of a class */
+                    state->method->late_binding = 1;
+                    o.t = f->type;
+                    namespace_t ns = {f->access, f->package};
+                    multiname_t m = {QNAME, &ns, 0, name};
+                    o.c = abc_findpropstrict2(o.c, &m);
+                    o.c = abc_getproperty2(o.c, &m);
+                    return mkcodenode(o);
+                } else if(f->slot>0) {
+                    o.c = abc_getlocal_0(o.c);
+                    o.c = abc_getslot(o.c, f->slot);
+                    return mkcodenode(o);
+                } else {
+                    namespace_t ns = {f->access, f->package};
+                    multiname_t m = {QNAME, &ns, 0, name};
+                    o.c = abc_getlocal_0(o.c);
+                    o.c = abc_getproperty2(o.c, &m);
+                    return mkcodenode(o);
+                }
+            }
+        } 
+        
+        /* look at actual classes, in the current package and imported */
+        if((a = find_class(name))) {
+            o = push_class(a);
+            return mkcodenode(o);
+        }
+
+        /* look through package prefixes */
+        if(dict_contains(state->import_toplevel_packages, name) || 
+           registry_ispackage(name)) {
+            o.c = abc___pushpackage__(o.c, name);
+            o.t = 0;
+            return mkcodenode(o); //?
+        }
+
+        /* unknown object, let the avm2 resolve it */
+        if(1) {
+            //as3_softwarning("Couldn't resolve '%s', doing late binding", name);
+            as3_warning("Couldn't resolve '%s', doing late binding", name);
+            state->method->late_binding = 1;
+                    
+            multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, name};
+
+            o.t = 0;
+            o.c = abc_findpropstrict2(o.c, &m);
+            o.c = abc_getproperty2(o.c, &m);
+            return mkcodenode(o);
+        }
+    }
+};
+
 VAR_READ : T_IDENTIFIER {
     PASS1
     /* Queue unresolved identifiers for checking against the parent
@@ -3251,129 +3503,31 @@ VAR_READ : T_IDENTIFIER {
        etc. which is *correct* because local variables of the parent function
        would shadow those.
        */
-    if(state->method->inner && !find_variable(state, $1)) {
-        unknown_variable($1);
+    if(!find_variable(state, $1)) {
+        if(state->method->inner) {
+            unknown_variable($1);
+        }
+        /* let the compiler know that it might want to check the current directory/package
+           for this identifier- maybe there's a file $1.as defining $1. */
+        as3_schedule_class_noerror(state->package, $1);
     }
    
-    /* let the compiler know that it might want to check the current directory/package
-       for this identifier- maybe there's a file $1.as defining $1. */
-    as3_schedule_class_noerror(state->package, $1);
-    PASS2
-
-    typedcode_t o;
-    o.t = 0;
-    o.c = 0;
     $$ = 0;
+    PASS2
 
-    slotinfo_t*a = 0;
-    memberinfo_t*f = 0;
-
-    variable_t*v;
-    /* look at variables */
-    if((v = find_variable(state, $1))) {
-        // $1 is a local variable
-        o.c = abc_getlocal(o.c, v->index);
-        o.t = v->type;
-        $$ = mkcodenode(o);
-        break;
-    }
-    if((v = find_slot(state, $1))) {
-        o.c = abc_getscopeobject(o.c, 1);
-        o.c = abc_getslot(o.c, v->index);
-        o.t = v->type;
-        $$ = mkcodenode(o);
-        break;
-    }
+    $$ = resolve_identifier($1);
+}
 
-    int i_am_static = (state->method && state->method->info)?(state->method->info->flags&FLAG_STATIC):FLAG_STATIC;
+// ----------------- namespaces -------------------------------------------------
 
-    /* look at current class' members */
-    if(!state->method->inner && 
-        state->cls && 
-        (f = findmember_nsset(state->cls->info, $1, 1)))
+%code {
+    void add_active_url(const char*url)
     {
-        // $1 is a member or attribute in this class
-        int var_is_static = (f->flags&FLAG_STATIC);
-
-        if(f->kind == INFOTYPE_VAR && (f->flags&FLAG_CONST)) {
-            /* if the variable is a constant (and we know what is evaluates to), we
-               can just use the value itself */
-            varinfo_t*v = (varinfo_t*)f;
-            if(v->value) {
-                $$ = mkconstnode(v->value);
-                break;
-            }
-        }
-       
-        if(var_is_static >= i_am_static) {
-            if(f->kind == INFOTYPE_METHOD) {
-                o.t = TYPE_FUNCTION(f);
-            } else {
-                o.t = f->type;
-            }
-
-            if(var_is_static && !i_am_static) {
-            /* access to a static member from a non-static location.
-               do this via findpropstrict:
-               there doesn't seem to be any non-lookup way to access
-               static properties of a class */
-                state->method->late_binding = 1;
-                o.t = f->type;
-                namespace_t ns = {f->access, f->package};
-                multiname_t m = {QNAME, &ns, 0, $1};
-                o.c = abc_findpropstrict2(o.c, &m);
-                o.c = abc_getproperty2(o.c, &m);
-                $$ = mkcodenode(o);
-                break;
-            } else if(f->slot>0) {
-                o.c = abc_getlocal_0(o.c);
-                o.c = abc_getslot(o.c, f->slot);
-                $$ = mkcodenode(o);
-                break;
-            } else {
-                namespace_t ns = {f->access, f->package};
-                multiname_t m = {QNAME, &ns, 0, $1};
-                o.c = abc_getlocal_0(o.c);
-                o.c = abc_getproperty2(o.c, &m);
-                $$ = mkcodenode(o);
-                break;
-            }
-        }
-    } 
-    
-    /* look at actual classes, in the current package and imported */
-    if((a = find_class($1))) {
-        o = push_class(a);
-        $$ = mkcodenode(o);
-        break;
-    }
-
-    /* look through package prefixes */
-    if(dict_contains(state->import_toplevel_packages, $1) || 
-       registry_ispackage($1)) {
-        o.c = abc___pushpackage__(o.c, $1);
-        o.t = 0;
-        $$ = mkcodenode(o); //?
-        break;
-    }
-
-    /* unknown object, let the avm2 resolve it */
-    if(1) {
-        //as3_softwarning("Couldn't resolve '%s', doing late binding", $1);
-        as3_warning("Couldn't resolve '%s', doing late binding", $1);
-        state->method->late_binding = 1;
-                
-        multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, $1};
-
-        o.t = 0;
-        o.c = abc_findpropstrict2(o.c, &m);
-        o.c = abc_getproperty2(o.c, &m);
-        $$ = mkcodenode(o);
-        break;
+        NEW(namespace_t,n);
+        n->name = url;
+        list_append(state->active_namespace_urls, n);
     }
-}
-
-// ----------------- namespaces -------------------------------------------------
+};
 
 NAMESPACE_ID : "namespace" T_IDENTIFIER {
     PASS12
@@ -3407,19 +3561,17 @@ NAMESPACE_DECLARATION : MAYBE_MODIFIERS NAMESPACE_ID {
     ns.access = ACCESS_NAMESPACE;
     ns.name = $2->url;
     var->value = constant_new_namespace(&ns);
+      
+    if(as3_pass==2) {
+        MULTINAME(m, TYPE_NAMESPACE);
+        trait_t*t = add_abc_slot(&$1, $2->name, 0, 0);
+        t->value = var->value;
+        t->type_name = multiname_clone(&m);
+    }
 
     $$=0;
 }
 
-%code {
-    void add_active_url(const char*url)
-    {
-        NEW(namespace_t,n);
-        n->name = url;
-        list_append(state->active_namespace_urls, n);
-    }
-};
-
 USE_NAMESPACE : "use" "namespace" CLASS_SPEC {
     PASS12
     const char*url = $3->name;
index 9a6acb8..5b6d552 100644 (file)
@@ -435,6 +435,16 @@ classinfo_t* registry_getregexpclass() {
     if(!c) c = (classinfo_t*)registry_safefind("", "RegExp");
     return c;
 }
+classinfo_t* registry_getxmlclass() {
+    static classinfo_t*c = 0;
+    if(!c) c = (classinfo_t*)registry_safefind("", "XML");
+    return c;
+}
+classinfo_t* registry_getxmllistclass() {
+    static classinfo_t*c = 0;
+    if(!c) c = (classinfo_t*)registry_safefind("", "XMLList");
+    return c;
+}
 classinfo_t* registry_getnamespaceclass() {
     static classinfo_t*c = 0;
     if(!c) c = (classinfo_t*)registry_safefind("", "Namespace");
@@ -453,6 +463,12 @@ classinfo_t nullclass = {
 classinfo_t* registry_getnullclass() {
     return &nullclass;
 }
+classinfo_t voidclass = {
+    INFOTYPE_CLASS,0,0,ACCESS_PACKAGE, "", "void", 0, 0, 0
+};
+classinfo_t* registry_getvoidclass() {
+    return &voidclass;
+}
 
 namespace_t access2namespace(U8 access, char*package)
 {
index c51bf2a..1f5c767 100644 (file)
@@ -158,11 +158,15 @@ classinfo_t* registry_getstringclass();
 classinfo_t* registry_getintclass();
 classinfo_t* registry_getuintclass();
 classinfo_t* registry_getnullclass();
+classinfo_t* registry_getvoidclass();
 classinfo_t* registry_getregexpclass();
+classinfo_t* registry_getxmlclass();
+classinfo_t* registry_getxmllistclass();
 classinfo_t* registry_getbooleanclass();
 classinfo_t* registry_getMovieClip();
 classinfo_t* registry_getclassclass(classinfo_t*a);
 classinfo_t* registry_getnamespaceclass();
+extern classinfo_t voidclass;
 
 char* infotypename(slotinfo_t*s);
 void slotinfo_dump(slotinfo_t*s);
@@ -196,6 +200,12 @@ void slotinfo_dump(slotinfo_t*s);
 #define TYPE_IS_CLASS(t)     registry_isclassclass(t)
 #define TYPE_NULL            registry_getnullclass()
 #define TYPE_IS_NULL(t)      ((t) == registry_getnullclass())
+#define TYPE_VOID            registry_getvoidclass()
+#define TYPE_IS_VOID(t)      ((t) == registry_getvoidclass())
+#define TYPE_XML            registry_getxmlclass()
+#define TYPE_IS_XML(t)      ((t) == registry_getxmlclass())
+#define TYPE_XMLLIST        registry_getxmllistclass()
+#define TYPE_IS_XMLLIST(t)  ((t) == registry_getxmllistclass())
         
 #define TYPE_IS_BUILTIN_SIMPLE(type) (TYPE_IS_INT(type) || \
                                       TYPE_IS_UINT(type) || \
index 9f66120..6d6e147 100644 (file)
@@ -86,6 +86,11 @@ extern unsigned int as3_tokencount;
 void as3_buffer_input(void*buffer, int len);
 void as3_file_input(FILE*fi);
 
+void tokenizer_begin_xml();
+void tokenizer_begin_xmltext();
+void tokenizer_end_xmltext();
+void tokenizer_end_xml();
+
 #define T_EOF 0
 
 extern int avm2_lex();
index 127379a..7557a88 100644 (file)
@@ -42,7 +42,7 @@ static void dbg(const char*format, ...)
     if(as3_verbosity<3)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
@@ -123,7 +123,7 @@ void handleInclude(char*text, int len, char quotes)
     }
 
     yy_switch_to_buffer(yy_create_buffer( yyin, YY_BUF_SIZE ) );
-    //BEGIN(INITIAL); keep context
+    //BEGIN(DEFAULT); keep context
 }
 
 static int do_unescape(const char*s, const char*end, char*n) 
@@ -252,6 +252,12 @@ static void handleCData(char*s, int len)
     a3_lval.str.str = strdup_n(a3_lval.str.str, a3_lval.str.len);
 }
 
+static void handleRaw(char*s, int len)
+{
+    a3_lval.str.len = len;
+    a3_lval.str.str = strdup_n(s, a3_lval.str.len);
+}
+
 static void handleString(char*s, int len)
 {
     if(s[0]=='"') {
@@ -276,7 +282,6 @@ static inline int m(int type)
     return type;
 }
 
-
 static char numberbuf[64];
 static char*nrbuf()
 {
@@ -471,7 +476,7 @@ void tokenizer_unregister_namespace(const char*id)
 {
     trie_remove(namespaces, id);
 }*/
-static inline tokenizer_is_namespace(const char*id)
+static inline char tokenizer_is_namespace(const char*id)
 {
     return trie_contains(active_namespaces, id);
 }
@@ -487,17 +492,23 @@ static inline int handleIdentifier()
     else
         return T_IDENTIFIER;
 }
+static int tokenerror();
 
 
 //Boolean                      {c();return m(KW_BOOLEAN);}
 //int                          {c();return m(KW_INT);}
 //uint                         {c();return m(KW_UINT);}
 //Number                       {c();return m(KW_NUMBER);}
+//XMLCOMMENT  <!--([^->]|(-/[^-])|(--/[^>]))*-->
 
+//{XMLCOMMENT}                 
 %}
 
 %s REGEXPOK
 %s BEGINNING
+%s DEFAULT
+%x XMLTEXT
+%x XML
 
 NAME    [a-zA-Z_][a-zA-Z0-9_\\]*
 _        [^a-zA-Z0-9_\\]
@@ -512,7 +523,10 @@ HEXFLOATWITHSIGN [+-]?({HEXFLOAT})
 INTWITHSIGN [+-]?({INT})
 FLOATWITHSIGN [+-]?({FLOAT})
 
-CDATA    <!\[CDATA\[([^]]|\][^]]|\]\][^>])*\]*\]\]\>
+CDATA       <!\[CDATA\[([^]]|\][^]]|\]\][^>])*\]*\]\]\>
+XMLCOMMENT  <!--([^->]|[-]+[^>-]|>)*-*-->
+XML         <[^>]+{S}>
+
 STRING   ["](\\[\x00-\xff]|[^\\"\n])*["]|['](\\[\x00-\xff]|[^\\'\n])*[']
 S       [ \n\r\t]
 MULTILINE_COMMENT [/][*]+([*][^/]|[^/*]|[^*][/]|[\x00-\x1f])*[*]+[/]
@@ -527,40 +541,64 @@ REGEXP   [/]([^/\n]|\\[/])*[/][a-zA-Z]*
 
 ^include{S}+{STRING}{S}*/\n    {l();handleInclude(yytext, yyleng, 1);}
 ^include{S}+[^" \t\r\n][\x20-\xff]*{S}*/\n    {l();handleInclude(yytext, yyleng, 0);}
-{STRING}                     {l(); BEGIN(INITIAL);handleString(yytext, yyleng);return T_STRING;}
-{CDATA}                      {l(); BEGIN(INITIAL);handleCData(yytext, yyleng);return T_STRING;}
+{STRING}                     {l(); BEGIN(DEFAULT);handleString(yytext, yyleng);return T_STRING;}
+{CDATA}                      {l(); BEGIN(DEFAULT);handleCData(yytext, yyleng);return T_STRING;}
+
+<DEFAULT,BEGINNING,REGEXPOK>{
+{XMLCOMMENT}                 {l(); BEGIN(DEFAULT);handleRaw(yytext, yyleng);return T_STRING;}
+}
+
+<XML>{
+{STRING}                     {l(); handleString(yytext, yyleng);return T_STRING;}
+[<]                          {c(); return m('<');}
+[/]                          {c(); return m('/');}
+[>]                          {c(); return m('>');}
+[=]                          {c(); return m('=');}
+{NAME}                       {c(); handleRaw(yytext, yyleng);return T_IDENTIFIER;}
+{S}                          {l();}
+<<EOF>>                      {syntaxerror("unexpected end of file");}
+}
+
+<XMLTEXT>{
+[^<>]+                       {l(); BEGIN(DEFAULT);handleRaw(yytext, yyleng);return T_STRING;}
+[<]                          {c(); BEGIN(XML);return m('<');}
+[>]                          {c(); return m('>');}
+{XMLCOMMENT}                 {l(); handleRaw(yytext, yyleng);return T_STRING;}
+{CDATA}                      {l(); handleRaw(yytext, yyleng);return T_STRING;}
+<<EOF>>                      {syntaxerror("unexpected end of file");}
+}
 
 <BEGINNING,REGEXPOK>{
-{REGEXP}                     {c(); BEGIN(INITIAL);return handleregexp();} 
-{HEXWITHSIGN}/{_}            {c(); BEGIN(INITIAL);return handlehex();}
-{HEXFLOATWITHSIGN}/{_}       {c(); BEGIN(INITIAL);return handlehexfloat();}
-{INTWITHSIGN}/{_}            {c(); BEGIN(INITIAL);return handleint();}
-{FLOATWITHSIGN}/{_}          {c(); BEGIN(INITIAL);return handlefloat();}
+{REGEXP}                     {c(); BEGIN(DEFAULT);return handleregexp();} 
+{HEXWITHSIGN}/{_}            {c(); BEGIN(DEFAULT);return handlehex();}
+{HEXFLOATWITHSIGN}/{_}       {c(); BEGIN(DEFAULT);return handlehexfloat();}
+{INTWITHSIGN}/{_}            {c(); BEGIN(DEFAULT);return handleint();}
+{FLOATWITHSIGN}/{_}          {c(); BEGIN(DEFAULT);return handlefloat();}
 }
 
 <REGEXPOK>[\{]               {c(); BEGIN(REGEXPOK);return m(T_DICTSTART);}
-[\{]                         {c(); BEGIN(INITIAL); return m('{');}
+[\{]                         {c(); BEGIN(DEFAULT); return m('{');}
 
 \xef\xbb\xbf                 {/* utf 8 bom */}
 {S}                          {l();}
 
-{HEXINT}/{_}                 {c(); BEGIN(INITIAL);return handlehex();}
-{HEXFLOAT}/{_}               {c(); BEGIN(INITIAL);return handlehexfloat();}
-{INT}/{_}                    {c(); BEGIN(INITIAL);return handleint();}
-{FLOAT}/{_}                  {c(); BEGIN(INITIAL);return handlefloat();}
-NaN                          {c(); BEGIN(INITIAL);return m(KW_NAN);}
+{HEXINT}/{_}                 {c(); BEGIN(DEFAULT);return handlehex();}
+{HEXFLOAT}/{_}               {c(); BEGIN(DEFAULT);return handlehexfloat();}
+{INT}/{_}                    {c(); BEGIN(DEFAULT);return handleint();}
+{FLOAT}/{_}                  {c(); BEGIN(DEFAULT);return handlefloat();}
+NaN                          {c(); BEGIN(DEFAULT);return m(KW_NAN);}
 
 3rr0r                        {/* for debugging: generates a tokenizer-level error */
                               syntaxerror("3rr0r");}
 
-{NAME}{S}*:{S}*for/{_}       {l();BEGIN(INITIAL);handleLabel(yytext, yyleng-3);return T_FOR;}
-{NAME}{S}*:{S}*do/{_}        {l();BEGIN(INITIAL);handleLabel(yytext, yyleng-2);return T_DO;}
-{NAME}{S}*:{S}*while/{_}     {l();BEGIN(INITIAL);handleLabel(yytext, yyleng-5);return T_WHILE;}
-{NAME}{S}*:{S}*switch/{_}    {l();BEGIN(INITIAL);handleLabel(yytext, yyleng-6);return T_SWITCH;}
-for                          {c();BEGIN(INITIAL);a3_lval.id="";return T_FOR;}
-do                           {c();BEGIN(INITIAL);a3_lval.id="";return T_DO;}
-while                        {c();BEGIN(INITIAL);a3_lval.id="";return T_WHILE;}
-switch                       {c();BEGIN(INITIAL);a3_lval.id="";return T_SWITCH;}
+{NAME}{S}*:{S}*for/{_}       {l();BEGIN(DEFAULT);handleLabel(yytext, yyleng-3);return T_FOR;}
+{NAME}{S}*:{S}*do/{_}        {l();BEGIN(DEFAULT);handleLabel(yytext, yyleng-2);return T_DO;}
+{NAME}{S}*:{S}*while/{_}     {l();BEGIN(DEFAULT);handleLabel(yytext, yyleng-5);return T_WHILE;}
+{NAME}{S}*:{S}*switch/{_}    {l();BEGIN(DEFAULT);handleLabel(yytext, yyleng-6);return T_SWITCH;}
+for                          {c();BEGIN(DEFAULT);a3_lval.id="";return T_FOR;}
+do                           {c();BEGIN(DEFAULT);a3_lval.id="";return T_DO;}
+while                        {c();BEGIN(DEFAULT);a3_lval.id="";return T_WHILE;}
+switch                       {c();BEGIN(DEFAULT);a3_lval.id="";return T_SWITCH;}
 
 [&][&]                       {c();BEGIN(REGEXPOK);return m(T_ANDAND);}
 [|][|]                       {c();BEGIN(REGEXPOK);return m(T_OROR);}
@@ -570,8 +608,8 @@ switch                       {c();BEGIN(INITIAL);a3_lval.id="";return T_SWITCH;}
 [=][=]                       {c();BEGIN(REGEXPOK);return m(T_EQEQ);}
 [>][=]                       {c();BEGIN(REGEXPOK);return m(T_GE);}
 [<][=]                       {c();BEGIN(REGEXPOK);return m(T_LE);}
-[-][-]                       {c();BEGIN(INITIAL);return m(T_MINUSMINUS);}
-[+][+]                       {c();BEGIN(INITIAL);return m(T_PLUSPLUS);}
+[-][-]                       {c();BEGIN(DEFAULT);return m(T_MINUSMINUS);}
+[+][+]                       {c();BEGIN(DEFAULT);return m(T_PLUSPLUS);}
 [+][=]                       {c();BEGIN(REGEXPOK);return m(T_PLUSBY);}
 [\^][=]                      {c();BEGIN(REGEXPOK);return m(T_XORBY);}
 [-][=]                       {c();BEGIN(REGEXPOK);return m(T_MINUSBY);}
@@ -593,78 +631,61 @@ switch                       {c();BEGIN(INITIAL);a3_lval.id="";return T_SWITCH;}
 :                            {c();BEGIN(REGEXPOK);return m(':');}
 instanceof                   {c();BEGIN(REGEXPOK);return m(KW_INSTANCEOF);}
 implements                   {c();BEGIN(REGEXPOK);return m(KW_IMPLEMENTS);}
-interface                    {c();BEGIN(INITIAL);return m(KW_INTERFACE);}
-namespace                    {c();BEGIN(INITIAL);return m(KW_NAMESPACE);}
-protected                    {c();BEGIN(INITIAL);return m(KW_PROTECTED);}
-undefined                    {c();BEGIN(INITIAL);return m(KW_UNDEFINED);}
-continue                     {c();BEGIN(INITIAL);return m(KW_CONTINUE);}
-override                     {c();BEGIN(INITIAL);return m(KW_OVERRIDE);}
-internal                     {c();BEGIN(INITIAL);return m(KW_INTERNAL);}
-function                     {c();BEGIN(INITIAL);return m(KW_FUNCTION);}
-finally                      {c();BEGIN(INITIAL);return m(KW_FINALLY);}
-default                      {c();BEGIN(INITIAL);return m(KW_DEFAULT);}
-package                      {c();BEGIN(INITIAL);return m(KW_PACKAGE);}
-private                      {c();BEGIN(INITIAL);return m(KW_PRIVATE);}
-dynamic                      {c();BEGIN(INITIAL);return m(KW_DYNAMIC);}
-extends                      {c();BEGIN(INITIAL);return m(KW_EXTENDS);}
+interface                    {c();BEGIN(DEFAULT);return m(KW_INTERFACE);}
+namespace                    {c();BEGIN(DEFAULT);return m(KW_NAMESPACE);}
+protected                    {c();BEGIN(DEFAULT);return m(KW_PROTECTED);}
+undefined                    {c();BEGIN(DEFAULT);return m(KW_UNDEFINED);}
+continue                     {c();BEGIN(DEFAULT);return m(KW_CONTINUE);}
+override                     {c();BEGIN(DEFAULT);return m(KW_OVERRIDE);}
+internal                     {c();BEGIN(DEFAULT);return m(KW_INTERNAL);}
+function                     {c();BEGIN(DEFAULT);return m(KW_FUNCTION);}
+finally                      {c();BEGIN(DEFAULT);return m(KW_FINALLY);}
+default                      {c();BEGIN(DEFAULT);return m(KW_DEFAULT);}
+package                      {c();BEGIN(DEFAULT);return m(KW_PACKAGE);}
+private                      {c();BEGIN(DEFAULT);return m(KW_PRIVATE);}
+dynamic                      {c();BEGIN(DEFAULT);return m(KW_DYNAMIC);}
+extends                      {c();BEGIN(DEFAULT);return m(KW_EXTENDS);}
 delete                       {c();BEGIN(REGEXPOK);return m(KW_DELETE);}
 return                       {c();BEGIN(REGEXPOK);return m(KW_RETURN);}
-public                       {c();BEGIN(INITIAL);return m(KW_PUBLIC);}
-native                       {c();BEGIN(INITIAL);return m(KW_NATIVE);}
-static                       {c();BEGIN(INITIAL);return m(KW_STATIC);}
+public                       {c();BEGIN(DEFAULT);return m(KW_PUBLIC);}
+native                       {c();BEGIN(DEFAULT);return m(KW_NATIVE);}
+static                       {c();BEGIN(DEFAULT);return m(KW_STATIC);}
 import                       {c();BEGIN(REGEXPOK);return m(KW_IMPORT);}
 typeof                       {c();BEGIN(REGEXPOK);return m(KW_TYPEOF);}
 throw                        {c();BEGIN(REGEXPOK);return m(KW_THROW);}
-class                        {c();BEGIN(INITIAL);return m(KW_CLASS);}
-const                        {c();BEGIN(INITIAL);return m(KW_CONST);}
-catch                        {c();BEGIN(INITIAL);return m(KW_CATCH);}
-final                        {c();BEGIN(INITIAL);return m(KW_FINAL);}
-false                        {c();BEGIN(INITIAL);return m(KW_FALSE);}
-break                        {c();BEGIN(INITIAL);return m(KW_BREAK);}
-super                        {c();BEGIN(INITIAL);return m(KW_SUPER);}
-each                         {c();BEGIN(INITIAL);return m(KW_EACH);}
-void                         {c();BEGIN(INITIAL);return m(KW_VOID);}
-true                         {c();BEGIN(INITIAL);return m(KW_TRUE);}
-null                         {c();BEGIN(INITIAL);return m(KW_NULL);}
-else                         {c();BEGIN(INITIAL);return m(KW_ELSE);}
+class                        {c();BEGIN(DEFAULT);return m(KW_CLASS);}
+const                        {c();BEGIN(DEFAULT);return m(KW_CONST);}
+catch                        {c();BEGIN(DEFAULT);return m(KW_CATCH);}
+final                        {c();BEGIN(DEFAULT);return m(KW_FINAL);}
+false                        {c();BEGIN(DEFAULT);return m(KW_FALSE);}
+break                        {c();BEGIN(DEFAULT);return m(KW_BREAK);}
+super                        {c();BEGIN(DEFAULT);return m(KW_SUPER);}
+each                         {c();BEGIN(DEFAULT);return m(KW_EACH);}
+void                         {c();BEGIN(DEFAULT);return m(KW_VOID);}
+true                         {c();BEGIN(DEFAULT);return m(KW_TRUE);}
+null                         {c();BEGIN(DEFAULT);return m(KW_NULL);}
+else                         {c();BEGIN(DEFAULT);return m(KW_ELSE);}
 case                         {c();BEGIN(REGEXPOK);return m(KW_CASE);}
 with                         {c();BEGIN(REGEXPOK);return m(KW_WITH);}
 use                          {c();BEGIN(REGEXPOK);return m(KW_USE);}
 new                          {c();BEGIN(REGEXPOK);return m(KW_NEW);}
-get                          {c();BEGIN(INITIAL);return m(KW_GET);}
-set                          {c();BEGIN(INITIAL);return m(KW_SET);}
-var                          {c();BEGIN(INITIAL);return m(KW_VAR);}
-try                          {c();BEGIN(INITIAL);return m(KW_TRY);}
+get                          {c();BEGIN(DEFAULT);return m(KW_GET);}
+set                          {c();BEGIN(DEFAULT);return m(KW_SET);}
+var                          {c();BEGIN(DEFAULT);return m(KW_VAR);}
+try                          {c();BEGIN(DEFAULT);return m(KW_TRY);}
 is                           {c();BEGIN(REGEXPOK);return m(KW_IS) ;}
 in                           {c();BEGIN(REGEXPOK);return m(KW_IN) ;}
-if                           {c();BEGIN(INITIAL);return m(KW_IF) ;}
+if                           {c();BEGIN(DEFAULT);return m(KW_IF) ;}
 as                           {c();BEGIN(REGEXPOK);return m(KW_AS);}
-$?{NAME}                       {c();BEGIN(INITIAL);return handleIdentifier();}
+$?{NAME}                       {c();BEGIN(DEFAULT);return handleIdentifier();}
 
-[\]\}*]                       {c();BEGIN(INITIAL);return m(yytext[0]);}
+[\]\}*]                       {c();BEGIN(DEFAULT);return m(yytext[0]);}
 [+-\/^~@$!%&\(=\[|?:;,<>]   {c();BEGIN(REGEXPOK);return m(yytext[0]);}
-[\)\]]                           {c();BEGIN(INITIAL);return m(yytext[0]);}
-
-.                           {/* ERROR */
-                              char c1=yytext[0];
-                              char buf[128];
-                              buf[0] = yytext[0];
-                              int t;
-                              for(t=1;t<128;t++) {
-                                 char c = buf[t]=input();
-                                 if(c=='\n' || c==EOF)  {
-                                      buf[t] = 0;
-                                     break;
-                                  }
-                             }
-                             if(c1>='0' && c1<='9')
-                                 syntaxerror("syntax error: %s (identifiers must not start with a digit)");
-                              else
-                                 syntaxerror("syntax error: %s", buf);
-                             printf("\n");
-                             exit(1);
-                             yyterminate();
-                            }
+[\)\]]                           {c();BEGIN(DEFAULT);return m(yytext[0]);}
+
+<DEFAULT,BEGINNING,REGEXPOK,XML,XMLTEXT>{
+.                           {tokenerror();}
+}
 <<EOF>>                             {l();
                               void*b = leave_file();
                              if (!b) {
@@ -684,6 +705,29 @@ int yywrap()
     return 1;
 }
 
+static int tokenerror()
+{
+    char c1=yytext[0];
+    char buf[128];
+    buf[0] = yytext[0];
+    int t;
+    for(t=1;t<128;t++) {
+        char c = buf[t]=input();
+        if(c=='\n' || c==EOF)  {
+            buf[t] = 0;
+            break;
+        }
+    }
+    if(c1>='0' && c1<='9')
+        syntaxerror("syntax error: %s (identifiers must not start with a digit)");
+    else
+        syntaxerror("syntax error: %s", buf);
+    printf("\n");
+    exit(1);
+    yyterminate();
+}
+
+
 static char mbuf[256];
 char*token2string(enum yytokentype nr, YYSTYPE v)
 {
@@ -751,6 +795,23 @@ char*token2string(enum yytokentype nr, YYSTYPE v)
     }
 }
 
+void tokenizer_begin_xml()
+{
+    BEGIN(XML);
+}
+void tokenizer_begin_xmltext()
+{
+    BEGIN(XMLTEXT);
+}
+void tokenizer_end_xmltext()
+{
+    BEGIN(XML);
+}
+void tokenizer_end_xml()
+{
+    BEGIN(DEFAULT);
+}
+
 void initialize_scanner()
 {
     BEGIN(BEGINNING);
index c693c04..4b44d94 100644 (file)
@@ -379,8 +379,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 113
-#define YY_END_OF_BUFFER 114
+#define YY_NUM_RULES 126
+#define YY_END_OF_BUFFER 127
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -388,65 +388,76 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[516] =
+static yyconst flex_int16_t yy_accept[617] =
     {   0,
-        0,    0,    0,    0,    0,    0,  114,  112,   16,   16,
-      110,  112,  110,  110,  110,  112,  110,  111,  109,  110,
-      110,   57,  110,  112,  112,  112,   59,  110,  110,  110,
-      108,  108,  109,  110,  108,  108,  108,  108,  108,  108,
-      108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
-      108,   14,  110,  109,  112,  108,  110,  110,   57,  110,
-      112,  112,  112,   13,   33,    0,    6,    0,  108,   45,
-       31,   48,    0,    0,   46,   40,   41,   39,   43,   56,
-        0,    3,    0,   44,   19,   19,    0,    0,    0,    0,
-       58,    0,   52,   38,   36,   37,   54,    0,  108,    0,
-
-      108,   42,  107,  108,  108,  108,  108,  108,   28,  108,
-      108,  108,  108,  108,  108,  108,  108,  108,  106,  108,
-      105,  104,  108,  108,  108,  108,  108,  108,  108,  108,
-      108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
-      108,  108,  108,   47,   32,    0,  105,    0,    0,    0,
-        0,    0,    3,    8,   44,    0,   11,   11,    0,    0,
-        0,   34,  108,   55,   20,    0,    0,    0,    0,    0,
-        1,    0,    0,    0,    0,    0,    0,   50,   35,   49,
-       53,    0,    0,    0,    0,    0,   21,  108,  108,  108,
-      108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
-
-       27,  108,  100,  108,  108,  108,  108,  108,   99,  108,
-      108,  108,  108,  108,  108,  108,  101,  108,  108,  108,
-      108,  108,  103,  108,  108,   98,  102,  108,  108,  108,
-       15,  108,    0,   11,   11,    0,    0,   12,    8,    0,
-        0,    0,    8,    0,    8,    8,    0,    0,    0,    0,
-        0,    0,    0,    2,    0,   18,    0,   17,   17,    0,
-        0,   51,    0,    0,    0,    0,  108,   96,  108,  108,
-      108,  108,  108,  108,  108,   91,   95,  108,  108,  108,
-      108,  108,  108,  108,  108,  108,  108,   94,  108,  108,
-      108,  108,  108,  108,  108,  108,  108,  108,   93,  108,
-
-      108,   92,  108,   97,  108,   12,    0,    0,    0,    0,
-        8,    0,    8,    0,    0,    2,    0,    8,    8,   10,
-        0,    9,    9,    0,    2,   22,    0,   24,    0,    0,
-        0,   89,   86,   84,   85,  108,  108,  108,  108,  108,
-       88,   87,  108,  108,  108,  108,  108,  108,  108,  108,
-      108,  108,  108,  108,  108,  108,   90,  108,   83,  108,
-      108,   29,  108,   10,    0,    9,    9,    0,    0,    2,
-        0,    8,    8,    0,   23,    0,    0,  108,  108,   76,
-      108,  108,  108,  108,  108,   81,  108,  108,  108,  108,
-       79,  108,  108,  108,  108,   78,   77,   80,   30,   82,
-
-      108,  108,    8,    0,    0,    0,  108,   71,   74,   75,
-       70,  108,  108,  108,  108,  108,  108,  108,   72,   73,
-      108,  108,  108,    8,    0,    0,   25,   66,   69,  108,
-      108,  108,   68,  108,   67,  108,  108,    0,    0,   26,
-      108,  108,   62,   63,   64,   65,    0,    0,    0,    0,
-        0,    0,   61,   60,    0,    5,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    5,    0,
-        0,    0,    0,    0,    0,    0,    4,    0,    0,    4,
-        0,    5,    0,    0,    0,    0,    7,    0,   24,    5,
-       24,   24,    0,    0,    0,    7,    0,   23,    5,   23,
-
-       23,    0,    0,    0,    0,    0,   25,    5,   25,   25,
-       26,    5,   26,   26,    0
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  127,  126,   29,  123,  126,  123,  123,  123,
+      126,  123,  124,  122,  123,  123,   70,  123,  126,  126,
+      126,   72,  123,  123,  123,  121,  121,  122,  123,  121,
+      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
+      121,  121,  121,  121,  121,  121,   27,  123,  122,  126,
+      121,  125,   29,  123,  125,  123,  123,  123,  125,  123,
+      124,  122,  123,  123,   70,  123,  125,  125,  125,   72,
+      123,  123,  123,  121,  121,  122,  123,  121,  121,  121,
+      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
+
+      121,  121,  121,  121,   26,  123,  122,  125,  121,   27,
+      123,  123,   70,  123,  125,  125,  125,   16,   16,   17,
+       18,   15,   15,  125,  125,   11,   10,   13,   12,   14,
+       46,    0,    6,    0,  121,   58,   44,   61,    0,    0,
+       59,   53,   54,   52,   56,   69,    0,    3,    0,   57,
+       32,   32,    0,    0,    0,    0,   71,    0,   65,   51,
+       49,   50,   67,    0,  121,    0,  121,   55,  120,  121,
+      121,  121,  121,  121,   41,  121,  121,  121,  121,  121,
+      121,  121,  121,  121,  119,  121,  118,  117,  121,  121,
+      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
+
+      121,  121,  121,  121,  121,  121,  121,  121,  121,   60,
+       45,    0,  118,    0,    0,    0,    0,    0,    3,   21,
+       57,    0,   24,   24,    0,    0,    0,    0,   16,    0,
+        0,    9,    0,    0,    0,   14,   47,  121,   68,   33,
+        0,    0,    0,    0,    0,    1,    0,    0,    0,    0,
+        0,    0,   63,   48,   62,   66,    0,    0,    0,    0,
+        0,   34,  121,  121,  121,  121,  121,  121,  121,  121,
+      121,  121,  121,  121,  121,   40,  121,  113,  121,  121,
+      121,  121,  121,  112,  121,  121,  121,  121,  121,  121,
+      121,  114,  121,  121,  121,  121,  121,  116,  121,  121,
+
+      111,  115,  121,  121,  121,   28,  121,    0,   24,   24,
+        0,    0,   25,   21,    0,    0,    0,   21,    0,   21,
+       21,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    2,    0,   31,    0,   30,   30,    0,    0,   64,
+        0,    0,    0,    0,  121,  109,  121,  121,  121,  121,
+      121,  121,  121,  104,  108,  121,  121,  121,  121,  121,
+      121,  121,  121,  121,  121,  107,  121,  121,  121,  121,
+      121,  121,  121,  121,  121,  121,  106,  121,  121,  105,
+      121,  110,  121,   25,    0,    0,    0,    0,   21,    0,
+       21,    0,    0,    2,    0,   21,   21,   23,    0,   22,
+
+       22,    0,    0,    0,    0,    2,   35,    0,   37,    0,
+        0,    0,  102,   99,   97,   98,  121,  121,  121,  121,
+      121,  101,  100,  121,  121,  121,  121,  121,  121,  121,
+      121,  121,  121,  121,  121,  121,  121,  103,  121,   96,
+      121,  121,   42,  121,   23,    0,   22,   22,    0,    0,
+        2,    0,   21,   21,    0,    0,    0,    0,    0,    0,
+       36,    0,    0,  121,  121,   89,  121,  121,  121,  121,
+      121,   94,  121,  121,  121,  121,   92,  121,  121,  121,
+      121,   91,   90,   93,   43,   95,  121,  121,   21,    0,
+        0,    0,    0,    0,    0,  121,   84,   87,   88,   83,
+
+      121,  121,  121,  121,  121,  121,  121,   85,   86,  121,
+      121,  121,   21,    8,   19,    0,    0,    0,   38,   79,
+       82,  121,  121,  121,   81,  121,   80,  121,  121,    0,
+        0,    0,   39,  121,  121,   75,   76,   77,   78,    0,
+        0,    0,    0,    0,    0,    0,   74,   73,    0,    5,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    5,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    4,    0,    0,    4,    0,    5,    0,    0,
+        0,    0,    0,    7,    0,   37,    5,   37,   37,    0,
+        0,    0,   20,    0,    7,    0,   36,    5,   36,   36,
+
+        0,    0,   20,    0,    0,    0,    0,   38,    5,   38,
+       38,   39,    5,   39,   39,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -485,474 +496,541 @@ static yyconst flex_int32_t yy_meta[67] =
     {   0,
         1,    2,    3,    2,    2,    4,    4,    4,    4,    4,
         4,    4,    4,    4,    4,    4,    4,    5,    4,    6,
-        6,    6,    2,    4,    4,    4,    7,    7,    7,    7,
-        7,    7,    4,    8,    4,    4,    9,    7,    7,    7,
-        7,   10,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,   11,    7,
+        6,    6,    2,    7,    4,    7,    8,    8,    8,    8,
+        8,    8,    4,    9,    4,    4,   10,    8,    8,    8,
+        8,   11,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,   12,    8,
         4,    4,    4,    4,    4,    4
     } ;
 
-static yyconst flex_int16_t yy_base[549] =
+static yyconst flex_int16_t yy_base[658] =
     {   0,
-        0,  517,   51,   58,   65,   72,  558, 2918, 2918, 2918,
-      525,   88,    0,  522,   85,   86, 2918, 2918,  520,   81,
-       82,   93,  102,  108,  113,  118,  520,   99,  517,   75,
-      139,  143, 2918,  511,  171,  180,  184,  153,  158,  113,
-      160,  180,  198,  142,  199,  200,  215,  224,  238,  176,
-      245, 2918,   91, 2918,  470,  256,  293,  299,  136,  307,
-      223,  238,  307, 2918,  499,  118, 2918,  519,    0, 2918,
-     2918, 2918,  158,  517, 2918, 2918, 2918, 2918, 2918,  500,
-      281,  332,   99, 2918, 2918,  317,  322,  199,  498,  458,
-     2918,  475,  477, 2918,  471, 2918,   83,  350,  230,  365,
-
-      327, 2918,  247,  334,  336,  341,  345,  356,  350,  362,
-      376,  367,  382,  384,  388,  393,  402,  407,  409,  413,
-      418,  429,  430,  436,  438,  450,  455,  459,  461,  466,
-      475,  477,  481,  489,  493,  500,  501,  516,  517,  523,
-      524,  531,  535, 2918, 2918,  426,  540,  341,  578,  583,
-      586,  144,  611,  643,  178,  181, 2918,  589,  601,  596,
-      465, 2918,    0, 2918, 2918,  637,  647,  703,  463,  327,
-     2918,  612,  635,  722,  788,  450,  434, 2918, 2918, 2918,
-      429,  814,  398,  397,  385,  397,  615,  777,  784,  789,
-      782,  793,  808,  822,  823,  831,  839,  846,  845,  827,
-
-      847,  862,  853,  867,  868,  869,  883,  876,  888,  890,
-      892,  899,  904,  911,  906,  920,  922,  926,  927,  934,
-      942,  946,  948,  953,  960,  962,  967,  968,  969,  976,
-     2918,  974, 1008, 2918, 1011,  647,  410, 2918,    0, 1033,
-     1039, 1059,  398, 1067,    0, 1083, 1024, 1035, 1143, 1209,
-      293, 1088, 1235,  392, 1245, 2918,    0, 2918,    0,  356,
-      373, 2918,    0,  344,  340,  310, 1037, 1049, 1214, 1215,
-     1229, 1058, 1230, 1241, 1192, 1057, 1247, 1249, 1263, 1255,
-     1264, 1275, 1256, 1270, 1282, 1286, 1290, 1291, 1298, 1305,
-     1306, 1310, 1317, 1321, 1329, 1328, 1322, 1340, 1344, 1345,
-
-     1346, 1352, 1363, 1361, 1368, 2918, 1365, 1400, 1442, 1508,
-        0,  456, 1574, 1534, 1640,  327, 1645, 1679,    0, 2918,
-        0, 2918,    0, 1544, 2918, 2918,  318, 2918,    0,  245,
-      239, 1375, 1377, 1379, 1491, 1514, 1614, 1615, 1708, 1620,
-     1709, 1710, 1717, 1724, 1726, 1728, 1742, 1746, 1753, 1761,
-     1762, 1767, 1776, 1781, 1785, 1790, 1796, 1801, 1802, 1813,
-     1817, 1819, 1821, 2918,    0, 2918,    0, 1872, 1877,    0,
-     1882,    0,    0,  247, 2918,  234,  225, 1851, 1857, 1852,
-     1875, 1866, 1871, 1886, 1887, 1892, 1901, 1894, 1906, 1908,
-     1910, 1912, 1924, 1926, 1931, 1932, 1933, 1940, 1947, 1949,
-
-     1951, 1965,  245,  199,  171,    0, 1966, 1958, 1967, 1972,
-     1973, 1981, 1987, 1988, 2002, 1995, 2007, 2006, 2011, 2013,
-     2018, 2025, 2075,  191,  172,    0, 2918, 2033, 2034, 2045,
-     2050, 2057, 2056, 2064, 2071, 2073, 2079, 2129,  144, 2918,
-     2091, 2100, 2099, 2106, 2108, 2115,  706,  343, 2166, 2170,
-      133,  130, 2138, 2139,  710, 1253, 1429, 1433,  395, 1552,
-      146,  227, 2180, 2192, 2204, 1673, 1748, 2215, 2227, 2237,
-     2231, 2241, 1784, 2245,  322, 2087, 2249,  134, 2257, 2261,
-     2272, 2284, 2318, 2295, 2299, 2303, 2918,  345, 2307, 2311,
-     2353, 2357, 2384, 2361, 2365,   97,  399, 2369, 2373, 2419,
-
-     2423, 2427, 2431, 2435, 2480, 2546, 2439, 2449, 2453, 2457,
-     2461, 2466, 2472, 2505, 2918, 2612, 2617, 2628, 2639, 2649,
-     2660, 2671, 2677, 2688, 2698, 2709, 2716, 2727, 2738, 2748,
-     2755, 2766, 2777, 2783, 2788, 2799, 2810, 2821, 2826, 2837,
-     2842, 2847, 2852, 2863, 2873, 2884, 2895, 2906
+        0, 1116,   66, 1104, 1076,   87,  118,  125,  146,  149,
+      186,    0, 1116, 3306, 3306, 1089,  143,    0, 1088,  140,
+      142, 3306, 3306, 1087,  137,  138,  138,  142,  235,  240,
+      245, 1087,  158, 1082,  143,  266,  270, 3306, 1056,  298,
+      307,  311,  280,  285,  240,  287,  307,  325,  269,  326,
+      327,  342,  351,  365,  303,  372, 3306,  265, 3306, 1016,
+      383, 3306, 3306, 1054,  247,    0, 1005,  155,  271, 3306,
+     3306, 1002,  420,  426,  350,  434,  365,  434,  442,  969,
+      318,  966,  159,  357,  374, 3306,  965,  419,  427,    0,
+      439,  423,  454,  456,  465,  479,  474,  485,  486,  501,
+
+      502,  494,  458,  520, 3306,  270, 3306,  924,  526, 3306,
+      260,  267,  561,  464,  566,  571,  576,    0,    0,  981,
+     3306, 3306, 3306,  272,  285, 3306, 3306, 3306, 3306,    0,
+      924,  332, 3306,  937,    0, 3306, 3306, 3306,  380,  936,
+     3306, 3306, 3306, 3306, 3306,  915,  408,  600,  343, 3306,
+     3306,  585,  602,  589,  906,  862, 3306,  867,  870, 3306,
+      866, 3306,  460,  629,  522,  634,  609, 3306,  603,  607,
+      608,  628,  630,  646,  634,  645,  660,  653,  661,  667,
+      672,  676,  683,  687,  688,  692,  699,  707,  708,  713,
+      714,  728,  729,  735,  736,  734,  740,  752,  754,  761,
+
+      760,  766,  772,  777,  789,  781,  795,  801,  800, 3306,
+     3306,  817,  816,  649,  839,  854,  857,  372,  882,  914,
+      375,  492, 3306,  867,  872,  882,  862,  247,    0,  320,
+      432, 3306,  870,  457,  866,    0, 3306,    0, 3306, 3306,
+      904,  919,  974,  849,  596, 3306,  890,  905,  993, 1059,
+      845,  833, 3306, 3306, 3306,  833, 1085,  799,  794,  784,
+      791,  815,  900, 1055, 1060, 1048, 1079, 1053, 1067, 1081,
+     1093, 1098, 1109, 1104, 1097, 1115, 1116, 1121, 1123, 1127,
+     1135, 1142, 1141, 1143, 1147, 1158, 1165, 1166, 1167, 1159,
+     1181, 1182, 1183, 1197, 1198, 1203, 1214, 1209, 1221, 1226,
+
+     1228, 1232, 1237, 1233, 1244, 3306, 1248,  908, 3306, 1280,
+      915,  798, 3306,    0, 1302, 1308, 1328,  782, 1336,    0,
+     1352, 1293, 1304, 1412, 1478,  780,  779,  765,  159, 1357,
+     1504,  774, 1514, 3306,    0, 3306,    0,  715,  730, 3306,
+        0,  696,  702,  671, 1306, 1318, 1483, 1484, 1498, 1327,
+     1499, 1510, 1461, 1326, 1516, 1518, 1532, 1524, 1533, 1544,
+     1525, 1539, 1551, 1555, 1559, 1560, 1567, 1574, 1575, 1579,
+     1586, 1590, 1598, 1597, 1591, 1609, 1613, 1614, 1615, 1621,
+     1632, 1630, 1637, 3306, 1634, 1669, 1711, 1777,    0, 1796,
+     1843, 1803, 1909,  694, 1914, 1948,    0, 3306,    0, 3306,
+
+        0,  689,  686,  672, 1919, 3306, 3306,  663, 3306,    0,
+      632,  638, 1644, 1646, 1648, 1776, 1778, 1783, 1888, 1889,
+     1977, 1785, 1893, 1978, 1982, 1984, 1996, 2000, 1894, 2007,
+     2014, 2015, 2016, 2030, 2034, 2038, 2039, 1989, 2046, 2045,
+     2057, 2061, 2063, 2065, 3306,    0, 3306,    0, 2116, 2121,
+        0, 2126,    0,    0,  650,  471,  636,  503,  623,  611,
+     3306,  602,  586, 2095, 2101, 2096, 2119, 2110, 2115, 2130,
+     2131, 2136, 2145, 2138, 2150, 2152, 2154, 2156, 2168, 2170,
+     2175, 2176, 2177, 2184, 2191, 2193, 2195, 2209,  597,  537,
+      595,  582,  568,  540,    0, 2210, 2202, 2211, 2216, 2217,
+
+     2225, 2231, 2232, 2246, 2239, 2251, 2250, 2255, 2257, 2262,
+     2269, 2319,  553, 3306, 3306,  540,  528,    0, 3306, 2277,
+     2278, 2289, 2294, 2301, 2300, 2308, 2315, 2317, 2323, 2373,
+      513,  483, 3306, 2335, 2344, 2343, 2350, 2352, 2359,  977,
+      544, 2410, 2414,  437,  423,  400, 2382, 2383,  981, 1197,
+     1222, 1522,  583, 1698,  424,  614, 2424, 2436, 2448, 1702,
+     2460, 2471, 2476, 2481, 2485, 2489, 2493, 2497,  366,  353,
+      638, 2331, 2501,  345, 2505, 2541, 2545, 2550, 2584, 2561,
+     2565, 2569,  639, 3306,  693, 2554, 2573, 2577, 2619, 2650,
+     2623, 2629, 3306,  706,  224,  795, 2633, 2637, 2677, 2685,
+
+     2689, 2693,  146,  809, 2697, 2742, 2808, 2701, 2705, 2715,
+     2719, 2723, 2728, 2734, 2767, 3306, 2874, 2886, 2891, 2903,
+     2915, 2926, 2938, 2950, 2962, 2974, 2986, 2993, 3000, 3012,
+     3023, 3035, 3043, 3055, 3067, 3078, 3086, 3098, 3110, 3117,
+     3122, 3134, 3146, 3158, 3165, 3177, 3189, 3201, 3208, 3215,
+     3222, 3234, 3245, 3257, 3269, 3281, 3293
     } ;
 
-static yyconst flex_int16_t yy_def[549] =
+static yyconst flex_int16_t yy_def[658] =
     {   0,
-      515,    1,    1,    1,    1,    1,  515,  515,  515,  515,
-      515,  516,  517,  515,  515,  518,  515,  515,  515,  515,
-      515,  515,  515,  519,  519,  519,  515,  515,  515,  515,
-      520,  520,  515,  515,  520,  520,  520,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,  515,  515,  515,  515,   37,  515,  515,  515,  521,
-      522,  522,  522,  515,  515,  516,  515,  516,  523,  515,
-      515,  515,  518,  518,  515,  515,  515,  515,  515,  515,
-      524,  525,  526,  515,  515,  524,  519,  515,  527,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,   37,  515,
-
-       37,  515,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,  515,  515,  515,   37,  515,  528,  528,
-      529,  521,  530,  526,  521,  521,  515,  529,  522,  515,
-      531,  515,  523,  515,  515,  525,  525,  532,  515,  526,
-      515,  524,  524,  515,  527,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-      515,   37,  533,  515,  533,  515,  534,  515,  535,  530,
-      530,  536,  535,  530,  154,  521,  529,  529,  515,  531,
-      537,  525,  532,  515,  525,  515,  174,  515,  174,  515,
-      515,  515,  538,  515,  515,  515,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-
-       37,   37,   37,   37,   37,  515,  533,  533,  515,  534,
-      535,  539,  515,  530,  536,  535,  530,  515,  246,  515,
-      249,  515,  249,  525,  515,  515,  515,  515,  540,  515,
-      515,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,  515,  309,  515,  309,  530,  530,  535,
-      530,  313,  318,  515,  515,  515,  515,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-
-       37,   37,  246,  515,  515,  541,   37,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
-       37,   37,   37,  313,  515,  542,  515,   37,   37,   37,
-       37,   37,   37,   37,   37,   37,   37,  543,  544,  515,
-       37,   37,   37,   37,   37,   37,  545,  546,  547,  545,
-      544,  544,   37,   37,  515,  515,  545,  545,  546,  515,
-      546,  548,  548,  547,  547,  545,  547,  515,  515,  545,
-      545,  545,  545,  545,  544,  515,  515,  548,  515,  515,
-      545,  548,  545,  545,  545,  545,  515,  544,  515,  515,
-      545,  545,  545,  545,  545,  544,  544,  515,  515,  545,
-
-      545,  545,  545,  545,  545,  545,  515,  515,  545,  545,
-      515,  515,  545,  545,    0,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515
+      616,    1,  616,    3,    3,    3,    3,    3,  617,  617,
+      616,   11,  616,  616,  616,  616,  618,  619,  616,  616,
+      620,  616,  616,  616,  616,  616,  616,  616,  621,  621,
+      621,  616,  616,  616,  616,  622,  622,  616,  616,  622,
+      622,  622,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,  616,  616,  616,  616,
+       42,  616,  616,  616,  618,  619,  616,  616,  620,  616,
+      616,  616,  616,  616,  616,  623,  624,  624,  624,  616,
+      616,  616,  616,   42,   42,  616,  616,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+
+       42,   42,   42,   42,  616,  616,  616,  616,   42,  616,
+      616,  616,  616,  616,  621,  621,  621,  625,  625,  616,
+      616,  616,  616,  626,  627,  616,  616,  616,  616,  628,
+      616,  618,  616,  618,  629,  616,  616,  616,  620,  620,
+      616,  616,  616,  616,  616,  616,  630,  631,  632,  616,
+      616,  630,  621,  616,  633,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,   42,  616,   42,  616,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  616,
+      616,  616,   42,  616,  634,  634,  635,  623,  636,  632,
+      623,  623,  616,  635,  624,  616,  637,  616,  625,  616,
+      626,  616,  626,  627,  627,  628,  616,  629,  616,  616,
+      631,  631,  638,  616,  632,  616,  630,  630,  616,  633,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+
+       42,   42,   42,   42,   42,  616,   42,  639,  616,  639,
+      616,  640,  616,  641,  636,  636,  642,  641,  636,  220,
+      623,  635,  635,  616,  637,  616,  616,  616,  643,  631,
+      638,  616,  631,  616,  249,  616,  249,  616,  616,  616,
+      644,  616,  616,  616,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,  616,  639,  639,  616,  640,  641,  645,
+      616,  636,  642,  641,  636,  616,  321,  616,  324,  616,
+
+      324,  646,  647,  616,  631,  616,  616,  616,  616,  648,
+      616,  616,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,  616,  387,  616,  387,  636,  636,
+      641,  636,  391,  396,  646,  646,  647,  647,  616,  616,
+      616,  616,  616,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,  321,  646,
+      647,  616,  616,  616,  649,   42,   42,   42,   42,   42,
+
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,  391,  616,  616,  616,  616,  650,  616,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  651,
+      616,  652,  616,   42,   42,   42,   42,   42,   42,  653,
+      654,  655,  653,  656,  652,  652,   42,   42,  616,  616,
+      653,  653,  654,  616,  654,  657,  657,  655,  655,  653,
+      655,  616,  616,  653,  653,  653,  653,  653,  656,  656,
+      652,  616,  616,  657,  616,  616,  653,  657,  653,  653,
+      653,  653,  656,  616,  652,  616,  616,  653,  653,  653,
+      653,  653,  616,  656,  652,  652,  616,  616,  653,  653,
+
+      653,  653,  656,  656,  653,  653,  653,  616,  616,  653,
+      653,  616,  616,  653,  653,    0,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616
     } ;
 
-static yyconst flex_int16_t yy_nxt[2985] =
+static yyconst flex_int16_t yy_nxt[3373] =
     {   0,
-        8,    9,   10,    9,    9,   11,   12,    8,   13,   14,
-       15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
-       25,   26,   27,   28,   29,   30,   31,   31,   31,   31,
-       32,   31,   17,    8,   33,   34,   31,   35,   36,   37,
-       38,   39,   40,   41,   31,   42,   31,   31,   31,   43,
-       44,   45,   46,   47,   48,   49,   50,   51,   31,   31,
-       52,   53,   54,    8,    8,   55,   57,   58,   59,   60,
-       61,   62,   63,   57,   58,   59,   60,   61,   62,   63,
-       57,   58,   59,   60,   61,   62,   63,   57,   58,   59,
-       60,   61,   62,   63,   67,   71,   76,   67,   78,   96,
-
-       97,  171,  171,   56,   92,   77,   79,  180,  181,   72,
-       80,   64,   81,   81,   81,  144,   82,   56,   64,   74,
-       83,   68,   93,   94,   67,   86,   84,   87,   87,   87,
-       86,  452,   87,   87,   87,   86,  462,   87,   87,   87,
-       98,   98,   98,   98,   98,   98,   98,   98,  459,   88,
-      114,   68,  145,   80,   88,  151,  151,  151,  115,   88,
-       99,  100,  239,  116,  475,  100,   89,  452,  117,   67,
-       90,  515,   98,   98,   98,   98,  515,  156,  452,   99,
-      101,   98,   98,   98,   98,   98,   98,   98,   98,   99,
-       99,   74,   99,  100,  108,  111,  239,   99,  126,  246,
-
-       99,  118,  100,  109,  439,  112,  100,   99,   99,  169,
-       99,  156,  110,  140,  156,  426,  113,   99,  173,  173,
-      173,  105,  119,   99,  103,  425,  141,   99,  120,  121,
-       99,  106,  104,  122,  107,  123,  127,   99,  460,  124,
-      158,  130,  159,  159,  159,   99,   99,   99,   99,   99,
-       99,  128,   99,  125,  129,  158,  131,  159,  159,  159,
-      478,   99,   99,  424,  160,   99,  406,   99,  135,  132,
-      133,   99,  134,  405,   99,   99,  136,   99,  404,  160,
-       99,  161,   99,  137,   99,   99,  377,  138,   99,  142,
-      143,  139,   99,   99,   99,   99,  515,   99,  119,  376,
-
-       81,   81,   81,   99,  120,  147,   99,  324,   76,  122,
-      148,  325,  149,  150,  150,   78,  148,   77,  149,  150,
-      150,  153,   88,   79,  158,  154,  159,  159,  159,  171,
-      171,  155,  166,  166,  166,  166,  172,  172,  172,   86,
-      156,   87,   87,   87,  374,  255,  168,  487,  160,  460,
-      169,   98,   98,   98,   98,  331,  488,  187,   88,   90,
-      233,  233,  233,   88,   99,  515,  182,  182,  182,  182,
-      496,   99,  100,   99,   99,  188,  461,   99,  191,  497,
-      515,   99,   99,   99,   99,  330,   99,   99,   99,  189,
-      190,   99,   99,   99,  192,   99,  329,   99,  193,   99,
-
-       99,  460,  327,  194,   99,  183,   99,  184,  326,   99,
-      255,  195,   99,   99,   99,  196,  255,   99,  185,   99,
-      197,   99,  186,   99,  496,   99,   99,  309,  461,   99,
-       99,  199,   99,  475,   99,   99,  198,  200,   99,   99,
-       99,  266,  265,   99,   99,  201,   99,  264,  263,   99,
-       99,  202,   99,  262,   99,   99,   99,   99,  255,   99,
-       99,  203,  261,   99,  204,   99,   99,   99,   99,  260,
-      369,  205,  206,   99,  370,   99,   99,   99,  207,   99,
-       99,  255,  249,   99,  208,  210,   99,   99,   99,  371,
-      231,  211,   99,  209,  212,  179,   99,   99,   99,  215,
-
-       99,  178,   99,   99,  213,   99,   99,  177,   99,  214,
-      176,   99,   99,   99,  218,  174,   99,  164,   99,   73,
-      216,   66,   99,  162,   99,   99,   99,   99,   99,  217,
-       99,   99,  219,  146,  220,  102,   99,   99,   99,   99,
-       99,   95,   91,   99,   75,  221,   70,   99,   99,   65,
-       99,   99,  224,   99,   99,  222,  225,  515,  226,  223,
-       99,   99,   56,   99,   99,  515,   99,   99,   99,  228,
-       99,   99,   99,   99,   99,  227,  229,   99,   99,  232,
-      515,   99,   99,  515,  515,   99,  515,   99,  515,  230,
-       99,  515,  515,  205,  206,  235,  515,  150,  150,  150,
-
-      235,  515,  150,  150,  150,  151,  151,  151,  247,  247,
-      247,  240,  240,  166,  240,  248,  248,  248,  158,  236,
-      159,  159,  159,  515,  236,  242,  515,  160,  515,  243,
-      160,  172,  172,  172,  515,  515,  237,  166,  166,  166,
-      166,  515,  160,  515,  244,  171,  171,  166,  166,  166,
-      166,  251,   99,   88,  173,  173,  173,  515,  515,  515,
-      515,  251,   99,  515,  515,   99,  308,  308,  308,  245,
-      245,  245,  245,  245,  245,  515,  515,  515,  515,  515,
-      245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
-      245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
-
-      245,  245,  245,  252,  252,  252,  252,  455,  456,  455,
-      457,  455,  456,  455,  455,  515,  515,  253,  515,  515,
-      515,  254,  256,  256,  256,  256,  256,  256,  256,  256,
-      256,  256,  256,  256,  256,  256,  256,  256,  256,  256,
-      256,  257,  257,  257,  256,  256,  256,  256,  257,  257,
-      257,  257,  257,  257,  256,  515,  256,  256,  515,  257,
-      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
-      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
-      257,  257,  256,  256,  256,  256,  256,  256,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-
-      258,  258,  258,  258,  258,  259,  258,  515,  515,  515,
-      258,  258,  258,  258,  267,  182,  182,  182,  182,   99,
-      258,   99,  258,  258,   99,  268,   99,   99,  269,   99,
-       99,   99,   99,  515,   99,  270,   99,  515,  515,   99,
-       99,  515,  515,   99,  515,  273,  271,  272,  258,  258,
-      258,  258,  258,  258,  183,   99,  184,  515,   99,   99,
-      275,  515,  515,  274,  280,  515,  515,  185,   99,   99,
-       99,  186,   99,   99,   99,  276,   99,   99,   99,  515,
-      277,   99,   99,   99,   99,  515,   99,  278,  515,   99,
-       99,  515,   99,   99,   99,   99,   99,   99,  279,   99,
-
-       99,  281,  515,   99,   99,   99,   99,  515,  515,   99,
-      285,  515,   99,   99,  282,   99,   99,  283,   99,   99,
-       99,  287,  284,   99,  286,   99,   99,   99,  515,   99,
-       99,  515,  515,   99,  515,   99,   99,  288,   99,   99,
-       99,   99,   99,   99,  289,  290,   99,  515,   99,   99,
-      515,   99,  515,  293,   99,  515,   99,   99,   99,   99,
-      291,   99,  515,   99,   99,  292,  515,   99,  296,   99,
-       99,   99,   99,   99,   99,  294,   99,   99,  515,   99,
-      295,   99,  515,   99,   99,   99,  515,  299,  297,   99,
-       99,  515,  298,   99,  300,   99,   99,   99,   99,   99,
-
-       99,  301,  515,   99,   99,   99,   99,   99,  302,   99,
-       99,   99,   99,   99,   99,   99,  303,   99,   99,   99,
-      304,  305,  515,   99,   99,  515,   99,  233,  233,  233,
-      307,  307,  307,  240,  240,  166,  240,  515,  515,  240,
-      240,  166,  240,  247,  247,  247,  515,  312,  515,  236,
-      515,  313,  236,  312,  248,  248,  248,  313,  515,  314,
-      314,  252,  314,  515,  515,  160,  244,  240,  240,  166,
-      240,  515,  244,  315,   99,  515,  515,  316,  515,  515,
-      515,  312,  515,  332,   99,  318,   99,   99,  166,  166,
-      166,  166,  317,  515,   99,   99,   99,  515,  515,   99,
-
-      244,  239,  251,  336,   99,   99,  515,   99,   99,  319,
-      319,  319,  319,  319,  319,  515,  156,  515,  515,  515,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  320,  320,  320,  320,  320,  320,  320,
+       14,   15,   15,   15,   15,   16,   17,   14,   18,   19,
+       20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
+       30,   31,   32,   33,   34,   35,   36,   36,   36,   36,
+       37,   36,   22,   14,   38,   39,   36,   40,   41,   42,
+       43,   44,   45,   46,   36,   47,   36,   36,   36,   48,
+       49,   50,   51,   52,   53,   54,   55,   56,   36,   36,
+       57,   58,   59,   14,   14,   60,   62,   63,   15,   63,
+       63,   64,   65,   62,   66,   67,   68,   69,   70,   71,
+       72,   73,   74,   75,   76,   77,   78,   79,   80,   81,
+       82,   83,   84,   84,   84,   84,   85,   84,   70,   62,
+
+       86,   87,   84,   88,   89,   90,   91,   92,   93,   94,
+       84,   95,   84,   84,   84,   96,   97,   98,   99,  100,
+      101,  102,  103,  104,   84,   84,  105,  106,  107,   62,
+       62,  108,  109,  111,  112,  113,  114,  115,  116,  117,
+      111,  112,  113,  114,  115,  116,  117,  110,  119,  133,
+      137,  119,  142,  133,  144,  146,  148,  147,  147,  147,
+      149,  143,  145,  158,  138,  137,  150,  162,  163,  120,
+      109,  121,  120,  405,  121,  140,  134,  406,  110,  138,
+      570,  159,  160,  162,  163,  110,   62,  122,  123,  122,
+      122,   62,  124,   62,   62,   62,   62,  125,   62,   62,
+
+       62,   62,   62,   62,  126,   62,   62,   62,   62,  127,
+      128,  129,  130,  130,  130,  130,  130,  130,   62,   62,
+       62,   62,  130,  130,  130,  130,  130,  130,  130,  130,
+      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
+      130,  130,  130,  130,  130,  130,   62,   62,   62,   62,
+       62,   62,  152,  133,  153,  153,  153,  152,  546,  153,
+      153,  153,  152,  326,  153,  153,  153,  164,  164,  164,
+      164,  164,  164,  164,  164,  142,  154,  180,  232,  252,
+      134,  154,  133,  144,  143,  181,  154,  165,  166,  210,
+      182,  145,  166,  155,  210,  183,  232,  156,  616,  164,
+
+      164,  164,  164,  616,  140,  233,  165,  167,  164,  164,
+      164,  164,  164,  164,  164,  164,  165,  165,  235,  165,
+      166,  174,  177,  228,  165,  192,  211,  165,  184,  166,
+      175,  211,  178,  166,  165,  165,  327,  165,  133,  176,
+      206,  159,  160,  179,  165,  246,  246,  556,  171,  185,
+      165,  169,  328,  207,  165,  186,  187,  165,  172,  170,
+      188,  173,  189,  193,  165,  134,  190,  146,  196,  217,
+      217,  217,  165,  165,  165,  165,  165,  165,  194,  165,
+      191,  195,  224,  197,  225,  225,  225,  583,  165,  165,
+      314,  133,  165,  314,  165,  201,  198,  199,  165,  200,
+
+      570,  165,  165,  202,  165,  222,  226,  165,  222,  165,
+      203,  167,  165,  140,  204,  165,  208,  209,  205,  165,
+      165,  165,  165,  227,  165,  185,  553,  147,  147,  147,
+      165,  186,  213,  165,  571,  142,  188,  214,  232,  215,
+      216,  216,  144,  214,  143,  215,  216,  216,  219,  154,
+      145,  224,  220,  225,  225,  225,  165,  546,  221,  224,
+      177,  225,  225,  225,  165,  233,  165,  222,  232,  165,
+      178,  570,  169,  165,  165,  226,  165,  165,  148,  170,
+      174,  179,  149,  226,  255,  256,  165,  490,  150,  175,
+      235,  180,  616,  165,  156,  206,  616,  184,  176,  181,
+
+      616,  165,  165,  165,  182,  165,  165,  185,  207,  183,
+      321,  165,  165,  186,  187,  165,  189,  546,  188,  491,
+      190,  165,  193,  165,  165,  222,  165,  196,  616,  165,
+      192,  165,  165,  165,  191,  165,  165,  194,  165,  165,
+      195,  165,  197,  204,  165,  544,  201,  205,  165,  165,
+      554,  165,  165,  490,  202,  198,  199,  165,  200,  165,
+      532,  203,  514,  165,  208,  209,  531,  165,  185,  165,
+      165,  244,  165,  165,  186,  213,  165,  555,  146,  188,
+      147,  147,  147,  152,  518,  153,  153,  153,  152,  554,
+      153,  153,  153,  152,  517,  153,  153,  153,  246,  246,
+
+      241,  241,  241,  241,  247,  247,  247,  154,  248,  248,
+      248,  491,  154,  516,  243,  513,  555,  154,  244,  152,
+      515,  153,  153,  153,  155,  554,  154,  495,  156,  616,
+      164,  164,  164,  164,  616,  257,  257,  257,  257,  262,
+      165,  494,  493,  154,  165,  165,  165,  574,  263,  492,
+      165,  166,  458,  165,  165,  165,  165,  165,  165,  165,
+      616,  264,  265,  584,  593,  266,  456,  165,  308,  308,
+      308,  165,  585,  594,  258,  165,  259,  165,  165,  267,
+      165,  165,  165,  165,  165,  463,  462,  260,  268,  460,
+      165,  261,  165,  269,  270,  165,  165,  165,  165,  271,
+
+      165,  459,  458,  165,  165,  456,  272,  165,  165,  165,
+      165,  165,  333,  165,  274,  273,  412,  165,  595,  165,
+      165,  275,  165,  165,  165,  165,  165,  596,  276,  165,
+      165,  603,  277,  165,  165,  165,  165,  165,  165,  165,
+      604,  278,  165,  279,  165,  165,  165,  411,  410,  165,
+      165,  165,  280,  281,  165,  165,  282,  165,  165,  408,
+      165,  285,  283,  165,  165,  165,  165,  407,  287,  286,
+      284,  165,  165,  165,  290,  165,  165,  165,  165,  165,
+      288,  165,  165,  165,  165,  289,  165,  165,  291,  293,
+      165,  165,  333,  404,  292,  403,  402,  165,  165,  165,
+
+      333,  165,  165,  165,  165,  294,  295,  165,  165,  165,
+      165,  165,  296,  165,  165,  387,  165,  300,  165,  165,
+      595,  297,  165,  299,  165,  298,  165,  165,  165,  571,
+      301,  165,  165,  302,  603,  344,  165,  165,  165,  165,
+      303,  343,  165,  583,  342,  165,  304,  165,  165,  341,
+      165,  165,  165,  165,  305,  307,  310,  340,  216,  216,
+      216,  339,  165,  165,  338,  165,  165,  333,  234,  280,
+      281,  310,  231,  216,  216,  216,  217,  217,  217,  324,
+      311,  306,  315,  315,  241,  315,  322,  322,  322,  224,
+      254,  225,  225,  225,  253,  311,  317,  312,  226,  252,
+
+      318,  323,  323,  323,  241,  241,  241,  241,  226,  247,
+      247,  247,  616,  226,  251,  319,  246,  246,  329,  241,
+      241,  241,  241,  249,  248,  248,  248,  308,  308,  308,
+      616,  154,  239,  329,  386,  386,  386,  345,  139,  132,
+      320,  320,  320,  320,  320,  320,  616,  165,  237,  311,
+      165,  320,  320,  320,  320,  320,  320,  320,  320,  320,
       320,  320,  320,  320,  320,  320,  320,  320,  320,  320,
-      320,  320,  321,  321,  321,  320,  320,  320,  320,  321,
-      321,  321,  321,  321,  321,  320,  515,  320,  320,  515,
-      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
-      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
-
-      321,  321,  321,  320,  320,  320,  320,  320,  320,  322,
-      322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
-      322,  322,  322,  322,  322,  322,  323,  322,  515,   99,
-      515,  322,  322,  322,  322,  252,  252,  252,  252,   99,
-      339,  322,   99,  322,  322,  166,  166,  166,  166,  253,
-      515,   99,   99,  254,  455,  456,  455,  455,  333,  251,
-      515,   99,   99,  169,   99,   99,   99,   99,  334,  322,
-      322,  322,  322,  322,  322,  515,   99,   99,   99,   99,
-       99,  515,  515,  335,   99,  337,   99,  515,   99,  515,
-      515,   99,   99,   99,   99,  338,   99,   99,  340,   99,
-
-       99,   99,  342,   99,  341,   99,   99,  346,  345,  515,
-       99,   99,   99,   99,   99,  515,  344,   99,  343,   99,
-       99,  515,   99,   99,  515,   99,  515,   99,   99,   99,
-      515,  515,   99,   99,  347,   99,   99,   99,   99,  348,
-       99,   99,  351,  352,  515,   99,  349,   99,   99,  515,
-      350,  353,   99,   99,   99,   99,   99,   99,   99,   99,
-       99,  358,  354,  515,   99,   99,   99,   99,   99,   99,
-      515,   99,   99,  355,  356,   99,   99,   99,   99,   99,
-      357,   99,   99,   99,  307,  307,  307,   99,  361,   99,
-       99,   99,   99,   99,   99,  360,   99,  359,   99,   99,
-
-       99,  515,   99,  515,  362,   99,  236,  515,   99,  515,
-       99,   99,   99,   99,   99,   99,   99,  515,   99,  308,
-      308,  308,   99,  363,   99,   99,   99,   99,  515,   99,
-      455,  456,  455,  457,  455,  456,  455,  457,  515,  515,
-      515,  515,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  365,  365,  365,  364,  364,  364,  364,  365,  365,
-      365,  365,  365,  365,  364,  515,  364,  364,  515,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-
-      365,  365,  364,  364,  364,  364,  364,  364,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  367,  366,  515,   99,  515,
-      366,  366,  366,  366,  240,  240,  166,  240,   99,  515,
-      366,   99,  366,  366,  166,  166,  166,  166,  312,  515,
-      515,   99,  313,  476,  477,  476,  476,  515,  251,  515,
-      515,   99,  254,  378,   99,  515,  515,  244,  366,  366,
-      366,  366,  366,  366,  166,  166,  166,  166,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  251,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-
-      372,  372,  372,  372,  372,  372,  167,  167,  167,  167,
-      167,  372,  372,  372,  372,  372,  372,  372,  372,  372,
-      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
-      372,  372,  372,  372,  167,  167,  167,  167,  167,  167,
-      314,  314,  252,  314,  515,  240,  240,  166,  240,  515,
-      515,   99,   99,  515,  315,  515,  380,   99,  316,  312,
-      382,  379,   99,  318,   99,   99,  515,   99,  515,  515,
-       99,  515,  515,  317,  479,  480,  479,  481,  244,  240,
-      240,  166,  240,  241,  241,  241,  241,  241,  241,  241,
-      241,  241,  241,  312,  241,  241,  241,  313,  241,  241,
-
-      241,  241,  241,  241,  241,  373,  373,  373,  373,  373,
-      373,  241,  244,  241,  241,  241,  373,  373,  373,  373,
-      373,  373,  373,  373,  373,  373,  373,  373,  373,  373,
-      373,  373,  373,  373,  373,  373,  373,  373,  373,  241,
-      241,  241,  241,  241,  241,   99,   99,   99,  462,  463,
-      482,  463,  464,  381,   99,   99,   99,  383,   99,   99,
-       99,   99,  384,   99,   99,   99,  515,   99,  515,  515,
-      515,   99,  385,   99,   99,   99,   99,  387,   99,   99,
-      386,  515,  515,   99,  388,  455,  456,  455,  457,   99,
-       99,  389,   99,   99,  391,  515,   99,  390,   99,   99,
-
-       99,  515,  515,   99,   99,  393,  392,  515,   99,   99,
-      515,   99,   99,   99,   99,  395,  515,   99,   99,  515,
-      396,  394,   99,   99,  515,  515,   99,   99,   99,  398,
-      515,   99,   99,   99,  397,   99,  515,   99,   99,   99,
-       99,  485,  515,   99,  515,  399,   99,  515,   99,   99,
-       99,   99,   99,  515,   99,  400,   99,  515,   99,  515,
-       99,  402,  401,   99,   99,  515,   99,   99,   99,   99,
-      515,   99,  240,  240,  166,  240,  515,  240,  240,  166,
-      240,  515,  240,  240,  166,  240,  312,  515,   99,   99,
-      243,  312,  515,  515,   99,  316,  312,  515,   99,   99,
-
-      403,   99,   99,   99,   99,  244,  407,   99,   99,  515,
-      244,  408,   99,   99,  409,  244,   99,  515,   99,  410,
-      515,   99,   99,   99,   99,   99,  515,  515,  413,   99,
-      411,  415,  515,   99,   99,  515,  412,   99,   99,   99,
-      414,   99,   99,  416,   99,  417,  515,   99,   99,   99,
-      515,   99,  418,   99,  515,   99,   99,   99,   99,   99,
-       99,   99,   99,   99,  515,  419,  515,  420,   99,   99,
-       99,   99,  515,   99,   99,  515,   99,   99,   99,   99,
-       99,   99,   99,   99,   99,  421,   99,   99,   99,  515,
-       99,  515,  515,  515,   99,   99,   99,   99,   99,   99,
-
-      422,   99,   99,   99,   99,   99,  423,  428,   99,   99,
-       99,  515,   99,   99,   99,   99,   99,   99,   99,   99,
-       99,  515,   99,   99,   99,   99,  515,  515,   99,  431,
-      429,   99,   99,  515,   99,   99,  430,   99,   99,   99,
-      515,  432,  433,   99,   99,   99,  434,  435,   99,   99,
-       99,  515,   99,   99,   99,   99,   99,   99,   99,  436,
-       99,   99,   99,   99,  515,   99,  437,  515,   99,  515,
-       99,   99,   99,  515,  515,   99,  438,  438,  438,  438,
-       99,   99,   99,   99,   99,  515,  515,   99,  476,  477,
-      476,  476,   99,   99,   99,   99,  515,   99,  443,  441,
-
-      442,   99,  515,   99,   99,  444,   99,   99,   99,  515,
-       99,   99,   99,  445,   99,  515,   99,  515,   99,  446,
-       99,   99,   99,   99,  515,   99,   99,  515,   99,   99,
-      438,  438,  438,  438,  515,  448,   99,   99,   99,  515,
-      449,   99,  454,   99,  453,   99,   99,   99,  515,   99,
-       99,  450,   99,   99,  515,   99,   99,  515,   99,  515,
-      515,  515,   99,  515,  515,   99,  462,  463,  456,  463,
-      464,  468,  469,  468,  470,   99,   99,  466,  515,  515,
-      515,  463,  456,  463,  463,   99,   99,  515,   99,   99,
-      515,  460,  462,  463,  456,  463,  464,  515,  515,  467,
-
-      515,  515,  515,  466,  462,  463,  456,  463,  464,  515,
-      471,  515,  472,  478,  515,  466,  468,  469,  468,  468,
-      515,  515,  515,  473,  515,  467,  515,  474,  468,  469,
-      468,  468,  455,  456,  455,  457,  515,  467,  468,  469,
-      468,  470,  455,  456,  455,  457,  455,  456,  455,  457,
-      476,  477,  476,  476,  515,  183,  515,  184,  479,  480,
-      479,  479,  479,  480,  479,  479,  515,  183,  185,  184,
-      515,  515,  186,  479,  480,  479,  481,  471,  515,  472,
-      185,  483,  515,  515,  186,  463,  456,  463,  463,  486,
-      473,  484,  515,  515,  474,  460,  455,  456,  455,  457,
-
-      455,  456,  455,  457,  455,  456,  455,  457,  455,  456,
-      455,  455,  455,  456,  455,  455,  515,  478,  328,  489,
-      490,  489,  491,  492,  492,  492,  492,  492,  492,  492,
-      492,  492,  492,  492,  492,  492,  492,  515,  515,  515,
-      492,  492,  492,  492,  494,  515,  515,  493,  495,  515,
-      492,  515,  492,  492,  455,  456,  455,  457,  455,  456,
-      455,  457,  455,  456,  455,  457,  455,  456,  455,  457,
-      455,  456,  455,  455,  455,  456,  455,  455,  492,  492,
-      492,  492,  492,  492,  375,  498,  499,  498,  500,  501,
-      501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
-
-      501,  501,  501,  515,  515,  515,  501,  501,  501,  501,
-      515,  515,  503,  515,  515,  502,  501,  515,  501,  501,
-      455,  456,  455,  457,  455,  456,  455,  457,  455,  456,
-      455,  457,  455,  456,  455,  457,  455,  456,  455,  457,
-      455,  456,  455,  455,  501,  501,  501,  501,  501,  501,
-      455,  456,  455,  455,  455,  456,  455,  457,  455,  456,
-      455,  457,  455,  456,  455,  455,  504,  455,  456,  455,
-      455,  515,  505,  455,  456,  455,  457,  515,  515,  506,
-      427,  507,  508,  507,  509,  510,  510,  510,  510,  510,
-      510,  510,  510,  510,  510,  510,  510,  510,  510,  515,
-
-      515,  515,  510,  510,  510,  510,  455,  456,  455,  457,
-      515,  515,  510,  515,  510,  510,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      510,  510,  510,  510,  510,  510,  440,  511,  512,  511,
-      513,  514,  514,  514,  514,  514,  514,  514,  514,  514,
-      514,  514,  514,  514,  514,  515,  515,  515,  514,  514,
-      514,  514,  515,  515,  515,  515,  515,  515,  514,  515,
-      514,  514,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-
-      515,  515,  515,  515,  515,  515,  514,  514,  514,  514,
-      514,  514,   66,   66,  515,   66,   66,   66,   66,   66,
-       66,   66,   66,   69,  515,   69,   69,   69,   73,   73,
-      515,   73,   73,   73,   73,   73,   73,   73,   73,   85,
-       85,   85,   85,   85,   85,  515,  515,  515,   85,   85,
-       99,   99,  515,  515,   99,   99,   99,   99,   99,   99,
-      152,  152,  515,  152,  152,  152,  152,  152,  152,  152,
-      152,  157,  157,  157,  157,  157,  157,  515,  515,  515,
-      157,  157,  163,  163,  163,  163,  163,  163,  165,  165,
-      165,  165,  165,  165,  515,  515,  515,  165,  167,  167,
-
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  170,
-      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
-      175,  175,  175,  515,  515,  175,  175,  234,  234,  234,
-      234,  234,  234,  515,  515,  515,  234,  234,  238,  238,
-      238,  238,  238,  238,  515,  515,  515,  238,  241,  241,
-      241,  241,  241,  241,  241,  241,  241,  241,  241,  250,
-      250,  250,  515,  515,  250,  250,  166,  166,  166,  166,
-      166,  166,  166,  166,  166,  166,  166,  306,  306,  306,
-      306,  306,  306,  515,  515,  515,  306,  310,  310,  310,
-      515,  515,  310,  310,  311,  515,  515,  311,  311,  240,
-
-      240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  328,  328,  328,  328,  328,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  375,  375,  375,
-      375,  375,  427,  427,  427,  427,  427,  440,  440,  440,
-      440,  440,  447,  447,  447,  447,  447,  447,  447,  447,
-      447,  447,  447,  451,  451,  451,  451,  451,  451,  451,
-      451,  451,  451,  451,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  459,  459,  515,  459,  459,  459,
-      459,  459,  459,  459,  459,  465,  465,  465,  465,  465,
-
-      465,  465,  465,  465,  465,  465,  462,  462,  515,  462,
-      462,  462,  462,  462,  462,  462,  462,    7,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515
+      320,  320,  320,  320,  330,  330,  330,  330,  549,  550,
+      549,  551,  549,  550,  549,  549,  230,  212,  331,  168,
+      161,  157,  332,  334,  334,  334,  334,  334,  334,  334,
+
+      334,  334,  334,  334,  334,  334,  334,  334,  334,  334,
+      334,  334,  335,  335,  335,  334,  334,  334,  334,  335,
+      335,  335,  335,  335,  335,  334,  141,  334,  334,  136,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  334,  334,  334,  334,  334,  334,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  337,  336,  131,  212,
+      168,  336,  336,  336,  336,  165,  257,  257,  257,  257,
+      351,  336,  165,  336,  336,  165,  346,  165,  165,  347,
+
+      165,  348,  165,  165,  165,  165,  161,  165,  352,  157,
+      165,  141,  136,  131,  165,  616,  165,  165,  353,  336,
+      336,  336,  336,  336,  336,  258,  165,  259,  165,  165,
+      165,  165,  349,  350,  358,  165,  110,  354,  260,  355,
+      165,  165,  261,  165,  165,  165,  165,  165,  165,  109,
+      356,  165,  165,  165,  165,  359,  165,  357,  165,  165,
+      165,   61,  165,  165,  165,  165,  165,  616,  165,  616,
+      360,  165,  165,  361,  165,  616,  363,  165,  165,  165,
+      165,  362,  165,  364,  165,  165,  365,  616,  165,  165,
+      165,  165,  165,  165,  366,  165,  165,  165,  549,  550,
+
+      549,  549,  165,  165,  165,  165,  371,  616,  165,  165,
+      367,  368,  165,  165,  165,  165,  165,  165,  165,  165,
+      165,  370,  369,  549,  550,  549,  551,  616,  165,  165,
+      165,  165,  165,  165,  165,  165,  372,  373,  374,  616,
+      165,  616,  616,  616,  165,  165,  165,  165,  165,  616,
+      165,  165,  375,  376,  616,  377,  165,  616,  165,  165,
+      616,  165,  378,  165,  165,  165,  616,  379,  165,  165,
+      165,  165,  616,  165,  165,  165,  165,  380,  165,  165,
+      381,  165,  165,  165,  165,  165,  616,  165,  382,  616,
+      616,  165,  616,  616,  165,  383,  616,  616,  165,  385,
+
+      385,  385,  315,  315,  241,  315,  616,  616,  315,  315,
+      241,  315,  322,  322,  322,  616,  390,  616,  616,  616,
+      391,  311,  390,  323,  323,  323,  391,  616,  392,  392,
+      330,  392,  616,  616,  226,  319,  315,  315,  241,  315,
+      616,  319,  393,  165,  616,  616,  394,  616,  616,  616,
+      390,  616,  413,  165,  396,  165,  165,  241,  241,  241,
+      241,  395,  616,  165,  165,  165,  616,  616,  165,  319,
+      314,  329,  417,  165,  165,  616,  165,  165,  397,  397,
+      397,  397,  397,  397,  616,  222,  616,  616,  616,  397,
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+
+      397,  397,  397,  397,  397,  397,  397,  397,  397,  397,
+      397,  397,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  399,  399,  399,  398,  398,  398,  398,  399,  399,
+      399,  399,  399,  399,  398,  616,  398,  398,  616,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  398,  398,  398,  398,  398,  398,  400,  400,
+      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
+      400,  400,  400,  400,  400,  401,  400,  616,  165,  616,
+
+      400,  400,  400,  400,  330,  330,  330,  330,  165,  420,
+      400,  165,  400,  400,  241,  241,  241,  241,  331,  616,
+      165,  165,  332,  549,  550,  549,  551,  414,  329,  616,
+      165,  165,  244,  165,  165,  165,  165,  415,  400,  400,
+      400,  400,  400,  400,  616,  165,  165,  165,  165,  165,
+      616,  616,  416,  165,  418,  165,  616,  165,  616,  616,
+      165,  165,  165,  165,  419,  165,  165,  421,  165,  165,
+      165,  423,  165,  422,  165,  165,  427,  426,  616,  165,
+      165,  165,  165,  165,  616,  425,  165,  424,  165,  165,
+      616,  165,  165,  616,  165,  616,  165,  165,  165,  616,
+
+      616,  165,  165,  428,  165,  165,  165,  165,  429,  165,
+      165,  432,  433,  616,  165,  430,  165,  165,  616,  431,
+      434,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+      439,  435,  616,  165,  165,  165,  165,  165,  165,  616,
+      165,  165,  436,  437,  165,  165,  165,  165,  165,  438,
+      165,  165,  165,  385,  385,  385,  165,  442,  165,  165,
+      165,  165,  165,  165,  441,  165,  440,  165,  165,  165,
+      616,  165,  616,  443,  165,  311,  616,  165,  616,  165,
+      165,  165,  165,  165,  165,  165,  616,  165,  386,  386,
+      386,  165,  444,  165,  165,  165,  165,  616,  165,  572,
+
+      573,  572,  572,  575,  576,  575,  577,  616,  616,  616,
+      616,  445,  445,  445,  445,  445,  445,  445,  445,  445,
+      445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
+      446,  446,  446,  445,  445,  445,  445,  446,  446,  446,
+      446,  446,  446,  445,  616,  445,  445,  616,  446,  446,
+      446,  446,  446,  446,  446,  446,  446,  446,  446,  446,
+      446,  446,  446,  446,  446,  446,  446,  446,  446,  446,
+      446,  445,  445,  445,  445,  445,  445,  447,  447,  447,
+      447,  447,  447,  447,  447,  447,  447,  447,  447,  447,
+      447,  447,  447,  447,  448,  447,  616,  616,  333,  447,
+
+      447,  447,  447,  315,  315,  241,  315,  616,  616,  447,
+      450,  447,  447,  165,  451,  165,  616,  390,  616,  616,
+      165,  391,  165,  165,  616,  165,  165,  464,  165,  452,
+      465,  616,  165,  165,  616,  165,  319,  447,  447,  447,
+      447,  447,  447,  241,  241,  241,  241,  242,  242,  242,
+      242,  242,  242,  242,  242,  242,  242,  329,  242,  242,
+      242,  242,  242,  242,  242,  242,  242,  242,  242,  453,
+      453,  453,  453,  453,  453,  242,  242,  242,  242,  242,
+      453,  453,  453,  453,  453,  453,  453,  453,  453,  453,
+      453,  453,  453,  453,  453,  453,  453,  453,  453,  453,
+
+      453,  453,  453,  242,  242,  242,  242,  242,  242,  392,
+      392,  330,  392,  616,  315,  315,  241,  315,  616,  241,
+      241,  241,  241,  393,  616,  165,  165,  394,  390,  466,
+      165,  165,  396,  329,  467,  165,  165,  332,  165,  165,
+      469,  165,  395,  165,  165,  476,  616,  319,  315,  315,
+      241,  315,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  390,  316,  316,  316,  391,  316,  316,  316,
+      316,  316,  316,  316,  454,  454,  454,  454,  454,  454,
+      316,  319,  316,  316,  316,  454,  454,  454,  454,  454,
+      454,  454,  454,  454,  454,  454,  454,  454,  454,  454,
+
+      454,  454,  454,  454,  454,  454,  454,  454,  316,  316,
+      316,  316,  316,  316,  165,  165,  616,  468,  616,  165,
+      616,  165,  616,  470,  165,  165,  165,  165,  165,  165,
+      471,  165,  165,  165,  165,  616,  165,  165,  472,  165,
+      616,  616,  474,  165,  165,  473,  165,  165,  477,  475,
+      165,  165,  165,  165,  165,  616,  616,  165,  479,  478,
+      616,  165,  165,  165,  165,  165,  165,  165,  616,  481,
+      480,  165,  616,  482,  616,  165,  165,  165,  484,  616,
+      165,  165,  165,  165,  165,  165,  165,  483,  165,  165,
+      485,  616,  165,  165,  165,  165,  165,  616,  165,  486,
+
+      165,  616,  165,  616,  165,  488,  487,  165,  165,  616,
+      165,  165,  165,  165,  616,  165,  315,  315,  241,  315,
+      616,  315,  315,  241,  315,  616,  315,  315,  241,  315,
+      390,  616,  165,  165,  318,  390,  616,  616,  165,  394,
+      390,  616,  165,  165,  489,  165,  165,  165,  165,  319,
+      496,  165,  165,  616,  319,  497,  165,  165,  498,  319,
+      165,  616,  165,  499,  616,  165,  165,  165,  165,  165,
+      616,  616,  502,  165,  500,  504,  616,  165,  165,  616,
+      501,  165,  165,  165,  503,  165,  165,  505,  165,  506,
+      616,  165,  165,  165,  616,  165,  507,  165,  616,  165,
+
+      165,  165,  165,  165,  165,  165,  165,  165,  616,  508,
+      616,  509,  165,  165,  165,  165,  616,  165,  165,  616,
+      165,  165,  165,  165,  165,  165,  165,  165,  165,  510,
+      165,  165,  165,  616,  165,  616,  616,  616,  165,  165,
+      165,  165,  165,  165,  511,  165,  165,  165,  165,  165,
+      512,  520,  165,  165,  165,  616,  165,  165,  165,  165,
+      165,  165,  165,  165,  165,  616,  165,  165,  165,  165,
+      616,  616,  165,  523,  521,  165,  165,  616,  165,  165,
+      522,  165,  165,  165,  616,  524,  525,  165,  165,  165,
+      526,  527,  165,  165,  165,  616,  165,  165,  165,  165,
+
+      165,  165,  165,  528,  165,  165,  165,  165,  616,  165,
+      529,  616,  165,  616,  165,  165,  165,  616,  616,  165,
+      530,  530,  530,  530,  165,  165,  165,  165,  165,  616,
+      616,  165,  572,  573,  572,  572,  165,  165,  165,  165,
+      616,  165,  536,  534,  535,  165,  616,  165,  165,  537,
+      165,  165,  165,  616,  165,  165,  165,  538,  165,  616,
+      165,  616,  165,  539,  165,  165,  165,  165,  616,  165,
+      165,  616,  165,  165,  530,  530,  530,  530,  616,  541,
+      165,  165,  165,  616,  542,  165,  548,  165,  547,  165,
+      165,  165,  616,  165,  165,  543,  165,  165,  616,  165,
+
+      165,  616,  165,  616,  616,  616,  165,  616,  616,  165,
+      556,  557,  550,  557,  558,  562,  563,  562,  564,  165,
+      165,  560,  616,  616,  616,  557,  550,  557,  557,  165,
+      165,  616,  165,  165,  616,  554,  556,  557,  550,  557,
+      558,  616,  616,  561,  616,  616,  616,  560,  556,  557,
+      550,  557,  558,  616,  565,  616,  566,  574,  616,  560,
+      556,  557,  578,  557,  558,  616,  616,  567,  616,  561,
+      616,  568,  562,  563,  562,  562,  616,  562,  563,  562,
+      562,  561,  562,  563,  562,  564,  549,  550,  549,  551,
+      549,  550,  549,  551,  549,  550,  549,  551,  549,  550,
+
+      549,  551,  572,  573,  572,  572,  575,  576,  575,  575,
+      616,  258,  616,  259,  616,  616,  258,  616,  259,  616,
+      616,  565,  616,  566,  260,  616,  616,  616,  261,  260,
+      616,  616,  616,  261,  567,  579,  616,  616,  568,  580,
+      616,  582,  575,  576,  575,  575,  575,  576,  575,  577,
+      581,  557,  550,  557,  557,  549,  550,  549,  549,  616,
+      616,  554,  549,  550,  549,  551,  549,  550,  549,  551,
+      549,  550,  549,  551,  549,  550,  549,  549,  549,  550,
+      549,  551,  616,  574,  409,  586,  587,  586,  588,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+
+      589,  589,  589,  616,  616,  616,  589,  589,  589,  589,
+      591,  616,  616,  590,  592,  616,  589,  616,  589,  589,
+      549,  550,  549,  551,  549,  550,  549,  551,  616,  616,
+      549,  550,  549,  551,  549,  550,  549,  549,  549,  550,
+      549,  549,  616,  616,  589,  589,  589,  589,  589,  589,
+      461,  597,  598,  597,  599,  600,  600,  600,  600,  600,
+      600,  600,  600,  600,  600,  600,  600,  600,  600,  616,
+      616,  616,  600,  600,  600,  600,  602,  601,  549,  550,
+      549,  551,  600,  616,  600,  600,  549,  550,  549,  551,
+      549,  550,  549,  551,  549,  550,  549,  551,  549,  550,
+
+      549,  551,  549,  550,  549,  549,  549,  550,  549,  549,
+      600,  600,  600,  600,  600,  600,  549,  550,  549,  551,
+      549,  550,  549,  551,  549,  550,  549,  549,  605,  549,
+      550,  549,  549,  616,  606,  549,  550,  549,  551,  616,
+      616,  607,  519,  608,  609,  608,  610,  611,  611,  611,
+      611,  611,  611,  611,  611,  611,  611,  611,  611,  611,
+      611,  616,  616,  616,  611,  611,  611,  611,  549,  550,
+      549,  551,  616,  616,  611,  616,  611,  611,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+
+      616,  616,  611,  611,  611,  611,  611,  611,  533,  612,
+      613,  612,  614,  615,  615,  615,  615,  615,  615,  615,
+      615,  615,  615,  615,  615,  615,  615,  616,  616,  616,
+      615,  615,  615,  615,  616,  616,  616,  616,  616,  616,
+      615,  616,  615,  615,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  615,  615,
+      615,  615,  615,  615,  118,  118,  118,  118,  118,  118,
+      118,  118,  118,  118,  118,  118,  132,  132,  616,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  135,  616,
+
+      135,  135,  135,  139,  139,  616,  139,  139,  139,  139,
+      139,  139,  139,  139,  139,  151,  151,  151,  151,  151,
+      151,  151,  616,  616,  616,  151,  151,  165,  165,  616,
+      616,  165,  616,  165,  165,  165,  165,  165,  218,  218,
+      616,  218,  218,  218,  218,  218,  218,  218,  218,  218,
+      223,  223,  223,  223,  223,  223,  223,  616,  616,  616,
+      223,  223,  229,  229,  229,  229,  229,  229,  616,  229,
+      229,  229,  229,  229,  231,  231,  616,  231,  231,  231,
+      231,  231,  231,  231,  231,  231,  234,  234,  616,  234,
+      234,  234,  234,  234,  234,  234,  234,  234,  236,  616,
+
+      236,  236,  236,  236,  236,  238,  616,  238,  238,  238,
+      238,  238,  240,  240,  240,  240,  240,  240,  240,  616,
+      616,  616,  240,  242,  242,  242,  242,  242,  242,  242,
+      242,  242,  242,  242,  242,  245,  245,  245,  245,  245,
+      245,  245,  245,  245,  245,  245,  245,  250,  250,  616,
+      250,  616,  616,  250,  250,  309,  309,  309,  309,  309,
+      309,  309,  616,  616,  616,  309,  309,  313,  313,  313,
+      313,  313,  313,  313,  616,  616,  616,  313,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      325,  325,  616,  325,  616,  616,  325,  325,  241,  241,
+
+      241,  241,  241,  241,  241,  241,  241,  241,  241,  241,
+      384,  384,  384,  384,  384,  384,  384,  616,  616,  616,
+      384,  388,  388,  616,  388,  616,  616,  388,  388,  389,
+      616,  616,  389,  389,  315,  315,  315,  315,  315,  315,
+      315,  315,  315,  315,  315,  315,  333,  333,  333,  333,
+      333,  333,  333,  333,  333,  333,  333,  333,  409,  409,
+      409,  409,  409,  616,  409,  449,  449,  449,  449,  449,
+      449,  449,  449,  449,  449,  449,  449,  455,  455,  455,
+      455,  455,  455,  455,  455,  455,  455,  455,  455,  457,
+      457,  457,  457,  457,  457,  457,  457,  457,  457,  457,
+
+      457,  461,  461,  461,  461,  461,  616,  461,  519,  519,
+      519,  519,  519,  616,  519,  533,  533,  533,  533,  533,
+      616,  533,  540,  540,  540,  540,  540,  540,  540,  540,
+      540,  540,  540,  540,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  553,  553,  616,
+      553,  553,  553,  553,  553,  553,  553,  553,  553,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  569,  569,  569,  569,  569,  569,  569,  569,  569,
+      569,  569,  569,  556,  556,  616,  556,  556,  556,  556,
+
+      556,  556,  556,  556,  556,   13,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616
     } ;
 
-static yyconst flex_int16_t yy_chk[2985] =
+static yyconst flex_int16_t yy_chk[3373] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -961,327 +1039,370 @@ static yyconst flex_int16_t yy_chk[2985] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    3,    3,    3,    3,
-        3,    3,    3,    4,    4,    4,    4,    4,    4,    4,
-        5,    5,    5,    5,    5,    5,    5,    6,    6,    6,
-        6,    6,    6,    6,   12,   15,   20,   16,   21,   30,
-
-       30,   83,   83,    4,   28,   20,   21,   97,   97,   15,
-       22,    3,   22,   22,   22,   53,   23,    6,    4,   16,
-       23,   12,   28,   28,   66,   24,   23,   24,   24,   24,
-       25,  496,   25,   25,   25,   26,  478,   26,   26,   26,
-       31,   31,   31,   31,   32,   32,   32,   32,  461,   24,
-       40,   66,   53,   59,   25,   59,   59,   59,   40,   26,
-       40,   31,  152,   40,  452,   32,   24,  451,   40,   73,
-       26,   25,   35,   35,   35,   35,   26,  152,  439,   44,
-       32,   36,   36,   36,   36,   37,   37,   37,   37,   44,
-       38,   73,   44,   35,   38,   39,  155,   41,   44,  156,
-
-       38,   41,   36,   38,  425,   39,   37,   41,   39,  424,
-       41,  155,   38,   50,  156,  405,   39,   42,   88,   88,
-       88,   37,   42,   50,   35,  404,   50,   42,   42,   42,
-       42,   37,   36,   42,   37,   43,   45,   46,  462,   43,
-       61,   46,   61,   61,   61,   43,   45,   46,   43,   45,
-       46,   45,   47,   43,   45,   62,   47,   62,   62,   62,
-      462,   48,   47,  403,   61,   47,  377,   99,   48,   47,
-       47,   48,   47,  376,   48,   49,   48,   99,  374,   62,
-       99,   61,   51,   48,  103,   49,  331,   49,   49,   51,
-       51,   49,   51,   56,  103,   51,   62,  103,   56,  330,
-
-       81,   81,   81,   56,   56,   56,   56,  251,   57,   56,
-       57,  251,   57,   57,   57,   58,   58,   57,   58,   58,
-       58,   60,   81,   58,   63,   60,   63,   63,   63,  170,
-      170,   60,   82,   82,   82,   82,   86,   86,   86,   87,
-       60,   87,   87,   87,  327,  316,   82,  475,   63,  448,
-       82,   98,   98,   98,   98,  266,  475,  101,   86,   63,
-      148,  148,  148,   87,  101,   63,  100,  100,  100,  100,
-      488,  104,   98,  105,  101,  104,  448,  101,  106,  488,
-       87,  104,  107,  105,  104,  265,  105,  109,  106,  105,
-      105,  106,  107,  108,  107,  107,  264,  109,  108,  110,
-
-      109,  459,  261,  108,  112,  100,  108,  100,  260,  110,
-      254,  110,  110,  111,  112,  111,  243,  112,  100,  113,
-      112,  114,  100,  111,  497,  115,  111,  237,  459,  113,
-      116,  114,  113,  497,  114,  115,  113,  115,  115,  117,
-      116,  186,  185,  116,  118,  116,  119,  184,  183,  117,
-      120,  117,  117,  181,  118,  121,  119,  118,  312,  119,
-      120,  118,  177,  120,  120,  121,  122,  123,  121,  176,
-      312,  121,  121,  124,  312,  125,  122,  123,  123,  122,
-      123,  169,  161,  124,  123,  125,  124,  126,  125,  312,
-      146,  126,  127,  124,  127,   95,  128,  126,  129,  129,
-
-      126,   93,  127,  130,  128,  127,  128,   92,  129,  128,
-       90,  129,  131,  130,  132,   89,  130,   80,  133,   74,
-      130,   68,  131,   65,  132,  131,  134,  132,  133,  131,
-      135,  133,  133,   55,  134,   34,  134,  136,  137,  134,
-      135,   29,   27,  135,   19,  135,   14,  136,  137,   11,
-      136,  137,  137,  138,  139,  136,  138,    7,  139,  136,
-      140,  141,    2,  138,  139,    0,  138,  139,  142,  141,
-      140,  141,  143,  140,  141,  140,  142,  147,  142,  147,
-        0,  142,  143,    0,    0,  143,    0,  147,    0,  143,
-      147,    0,    0,  147,  147,  149,    0,  149,  149,  149,
-
-      150,    0,  150,  150,  150,  151,  151,  151,  158,  158,
-      158,  153,  153,  153,  153,  160,  160,  160,  159,  149,
-      159,  159,  159,    0,  150,  153,    0,  151,    0,  153,
-      158,  172,  172,  172,    0,    0,  149,  166,  166,  166,
-      166,  150,  159,    0,  153,  154,  154,  167,  167,  167,
-      167,  166,  187,  172,  173,  173,  173,    0,    0,  159,
-        0,  167,  187,    0,    0,  187,  236,  236,  236,  154,
-      154,  154,  154,  154,  154,    0,  173,    0,    0,    0,
-      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
-      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
-
-      154,  154,  154,  168,  168,  168,  168,  447,  447,  447,
-      447,  455,  455,  455,  455,    0,    0,  168,    0,    0,
-        0,  168,  174,  174,  174,  174,  174,  174,  174,  174,
-      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
-      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
-      174,  174,  174,  174,  174,    0,  174,  174,    0,  174,
-      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
-      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
-      174,  174,  174,  174,  174,  174,  174,  174,  175,  175,
-      175,  175,  175,  175,  175,  175,  175,  175,  175,  175,
-
-      175,  175,  175,  175,  175,  175,  175,    0,    0,    0,
-      175,  175,  175,  175,  188,  182,  182,  182,  182,  191,
-      175,  189,  175,  175,  188,  189,  190,  188,  190,  191,
-      192,  189,  191,    0,  189,  191,  190,    0,    0,  190,
-      192,    0,    0,  192,    0,  193,  192,  192,  175,  175,
-      175,  175,  175,  175,  182,  193,  182,    0,  193,  194,
-      195,    0,    0,  194,  200,    0,    0,  182,  196,  194,
-      195,  182,  194,  195,  200,  196,  197,  200,  196,    0,
-      197,  196,  199,  198,  201,    0,  197,  198,    0,  197,
-      203,    0,  199,  198,  201,  199,  198,  201,  199,  202,
-
-      203,  202,    0,  203,  204,  205,  206,    0,    0,  202,
-      206,    0,  202,  208,  204,  205,  206,  204,  205,  206,
-      207,  208,  205,  208,  207,  209,  208,  210,    0,  211,
-      207,    0,    0,  207,    0,  209,  212,  210,  209,  211,
-      210,  213,  211,  215,  211,  212,  212,    0,  214,  212,
-        0,  213,    0,  215,  213,    0,  215,  216,  214,  217,
-      213,  214,    0,  218,  219,  214,    0,  216,  219,  217,
-      216,  220,  217,  218,  219,  216,  218,  219,    0,  221,
-      218,  220,    0,  222,  220,  223,    0,  222,  220,  221,
-      224,    0,  221,  222,  224,  223,  222,  225,  223,  226,
-
-      224,  225,    0,  224,  227,  228,  229,  225,  228,  226,
-      225,  232,  226,  230,  227,  228,  229,  227,  228,  229,
-      230,  232,    0,  230,  232,    0,  230,  233,  233,  233,
-      235,  235,  235,  240,  240,  240,  240,    0,    0,  241,
-      241,  241,  241,  247,  247,  247,    0,  240,    0,  233,
-        0,  240,  235,  241,  248,  248,  248,  241,    0,  242,
-      242,  242,  242,    0,    0,  247,  240,  244,  244,  244,
-      244,    0,  241,  242,  267,    0,  248,  242,    0,    0,
-        0,  244,    0,  267,  267,  244,  268,  267,  252,  252,
-      252,  252,  242,    0,  276,  272,  268,    0,    0,  268,
-
-      244,  246,  252,  272,  276,  272,    0,  276,  272,  246,
-      246,  246,  246,  246,  246,    0,  246,    0,    0,    0,
-      246,  246,  246,  246,  246,  246,  246,  246,  246,  246,
-      246,  246,  246,  246,  246,  246,  246,  246,  246,  246,
-      246,  246,  246,  249,  249,  249,  249,  249,  249,  249,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    6,    7,    7,    7,    7,    7,    7,    7,
+        8,    8,    8,    8,    8,    8,    8,    6,    9,   17,
+       20,   10,   25,   21,   26,   27,   28,   27,   27,   27,
+       28,   25,   26,   33,   20,   68,   28,   35,   35,    9,
+        8,    9,   10,  329,   10,   21,   17,  329,    7,   68,
+      603,   33,   33,   83,   83,    8,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   29,   65,   29,   29,   29,   30,  595,   30,
+       30,   30,   31,  228,   31,   31,   31,   36,   36,   36,
+       36,   37,   37,   37,   37,  111,   29,   45,  124,  228,
+       65,   30,   69,  112,  111,   45,   31,   45,   36,   58,
+       45,  112,   37,   29,  106,   45,  125,   31,   30,   40,
+
+       40,   40,   40,   31,   69,  124,   49,   37,   41,   41,
+       41,   41,   42,   42,   42,   42,   49,   43,  125,   49,
+       40,   43,   44,   81,   46,   49,   58,   43,   46,   41,
+       43,  106,   44,   42,   46,   44,  230,   46,  132,   43,
+       55,   81,   81,   44,   47,  149,  149,  574,   42,   47,
+       55,   40,  230,   55,   47,   47,   47,   47,   42,   41,
+       47,   42,   48,   50,   51,  132,   48,   75,   51,   75,
+       75,   75,   48,   50,   51,   48,   50,   51,   50,   52,
+       48,   50,   77,   52,   77,   77,   77,  570,   53,   52,
+      218,  139,   52,  221,   84,   53,   52,   52,   53,   52,
+
+      569,   53,   54,   53,   84,  218,   77,   84,  221,   56,
+       53,   85,   54,  139,   54,   54,   56,   56,   54,   56,
+       61,   85,   56,   77,   85,   61,  555,  147,  147,  147,
+       61,   61,   61,   61,  546,   73,   61,   73,  231,   73,
+       73,   73,   74,   74,   73,   74,   74,   74,   76,  147,
+       74,   78,   76,   78,   78,   78,   88,  545,   76,   79,
+       92,   79,   79,   79,   89,  231,   88,   76,  234,   88,
+       92,  544,   88,   92,   89,   78,   91,   89,  114,   89,
+       91,   92,  114,   79,  163,  163,   91,  456,  114,   91,
+      234,   93,   78,   94,   79,  103,  456,   94,   91,   93,
+
+       79,   93,   95,   94,   93,  103,   94,   95,  103,   93,
+      222,   97,   95,   95,   95,   95,   96,  532,   95,  458,
+       96,   97,   98,   99,   97,  222,   96,   99,  458,   96,
+       97,  102,   98,   99,   96,   98,   99,   98,  100,  101,
+       98,  102,  100,  102,  102,  531,  101,  102,  100,  101,
+      541,  100,  101,  490,  101,  100,  100,  104,  100,  165,
+      517,  101,  490,  109,  104,  104,  516,  104,  109,  165,
+      104,  513,  165,  109,  109,  109,  109,  541,  113,  109,
+      113,  113,  113,  115,  494,  115,  115,  115,  116,  553,
+      116,  116,  116,  117,  493,  117,  117,  117,  245,  245,
+
+      148,  148,  148,  148,  152,  152,  152,  115,  154,  154,
+      154,  491,  116,  492,  148,  489,  553,  117,  148,  153,
+      491,  153,  153,  153,  115,  556,  152,  463,  117,  116,
+      164,  164,  164,  164,  117,  166,  166,  166,  166,  167,
+      169,  462,  460,  153,  170,  171,  167,  556,  170,  459,
+      169,  164,  457,  169,  170,  171,  167,  170,  171,  167,
+      153,  171,  171,  571,  583,  172,  455,  173,  214,  214,
+      214,  175,  571,  583,  166,  172,  166,  173,  172,  173,
+      173,  175,  176,  174,  175,  412,  411,  166,  174,  408,
+      178,  166,  176,  174,  176,  176,  174,  177,  179,  177,
+
+      178,  404,  403,  178,  180,  402,  178,  177,  179,  181,
+      177,  179,  394,  182,  180,  179,  344,  180,  585,  181,
+      183,  181,  181,  182,  184,  185,  182,  585,  182,  186,
+      183,  594,  183,  183,  184,  185,  187,  184,  185,  186,
+      594,  184,  186,  186,  188,  189,  187,  343,  342,  187,
+      190,  191,  187,  187,  188,  189,  189,  188,  189,  339,
+      190,  191,  189,  190,  191,  192,  193,  338,  193,  192,
+      190,  196,  194,  195,  195,  192,  193,  197,  192,  193,
+      194,  196,  194,  195,  196,  194,  195,  197,  196,  198,
+      197,  199,  332,  328,  197,  327,  326,  201,  200,  198,
+
+      318,  199,  198,  202,  199,  199,  200,  201,  200,  203,
+      201,  200,  201,  202,  204,  312,  202,  204,  206,  203,
+      596,  202,  203,  203,  204,  202,  205,  204,  206,  596,
+      205,  206,  207,  206,  604,  261,  205,  209,  208,  205,
+      207,  260,  207,  604,  259,  207,  208,  209,  208,  258,
+      209,  208,  262,  213,  209,  213,  215,  256,  215,  215,
+      215,  252,  262,  213,  251,  262,  213,  244,  235,  213,
+      213,  216,  233,  216,  216,  216,  217,  217,  217,  227,
+      215,  212,  219,  219,  219,  219,  224,  224,  224,  225,
+      161,  225,  225,  225,  159,  216,  219,  215,  217,  158,
+
+      219,  226,  226,  226,  241,  241,  241,  241,  224,  247,
+      247,  247,  216,  225,  156,  219,  220,  220,  241,  242,
+      242,  242,  242,  155,  248,  248,  248,  308,  308,  308,
+      225,  247,  146,  242,  311,  311,  311,  263,  140,  134,
+      220,  220,  220,  220,  220,  220,  248,  263,  131,  308,
+      263,  220,  220,  220,  220,  220,  220,  220,  220,  220,
+      220,  220,  220,  220,  220,  220,  220,  220,  220,  220,
+      220,  220,  220,  220,  243,  243,  243,  243,  540,  540,
+      540,  540,  549,  549,  549,  549,  120,  108,  243,   87,
+       82,   80,  243,  249,  249,  249,  249,  249,  249,  249,
+
       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
-      249,  249,  249,  249,  249,  249,    0,  249,  249,    0,
+      249,  249,  249,  249,  249,  249,   72,  249,  249,   67,
       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
-
       249,  249,  249,  249,  249,  249,  249,  249,  249,  250,
       250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,    0,  275,
-        0,  250,  250,  250,  250,  253,  253,  253,  253,  275,
-      275,  250,  275,  250,  250,  255,  255,  255,  255,  253,
-        0,  269,  270,  253,  456,  456,  456,  456,  269,  255,
-        0,  269,  270,  255,  269,  270,  271,  273,  270,  250,
-      250,  250,  250,  250,  250,    0,  271,  273,  274,  271,
-      273,    0,    0,  271,  277,  273,  278,    0,  274,    0,
-        0,  274,  280,  283,  277,  274,  278,  277,  278,  278,
-
-      279,  281,  280,  283,  279,  280,  283,  284,  283,    0,
-      279,  281,  282,  279,  281,    0,  282,  284,  281,  285,
-      284,    0,  282,  286,    0,  282,    0,  287,  288,  285,
-        0,    0,  285,  286,  285,  289,  286,  287,  288,  286,
-      287,  288,  290,  291,    0,  289,  287,  292,  289,    0,
-      289,  292,  290,  291,  293,  290,  291,  292,  294,  297,
-      292,  297,  293,    0,  293,  296,  295,  293,  294,  297,
-        0,  294,  297,  294,  295,  296,  295,  298,  296,  295,
-      296,  299,  300,  301,  307,  307,  307,  298,  301,  302,
-      298,  299,  300,  301,  299,  300,  301,  298,  304,  302,
-
-      303,    0,  302,    0,  303,  305,  307,    0,  304,    0,
-      303,  304,  332,  303,  333,  305,  334,    0,  305,  308,
-      308,  308,  332,  305,  333,  332,  334,  333,    0,  334,
-      457,  457,  457,  457,  458,  458,  458,  458,    0,    0,
-        0,  308,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,    0,  309,  309,    0,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-
-      309,  309,  309,  309,  309,  309,  309,  309,  310,  310,
-      310,  310,  310,  310,  310,  310,  310,  310,  310,  310,
-      310,  310,  310,  310,  310,  310,  310,    0,  335,    0,
-      310,  310,  310,  310,  314,  314,  314,  314,  335,    0,
-      310,  335,  310,  310,  324,  324,  324,  324,  314,    0,
-        0,  336,  314,  460,  460,  460,  460,    0,  324,    0,
-        0,  336,  324,  336,  336,    0,    0,  314,  310,  310,
-      310,  310,  310,  310,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      315,  315,  315,  315,    0,  317,  317,  317,  317,    0,
-        0,  337,  338,    0,  315,    0,  338,  340,  315,  317,
-      340,  337,  338,  317,  337,  338,    0,  340,    0,    0,
-      340,    0,    0,  315,  466,  466,  466,  466,  317,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-      318,  318,  318,  318,  318,  339,  341,  342,  467,  467,
-      467,  467,  467,  339,  343,  339,  341,  342,  339,  341,
-      342,  344,  343,  345,  343,  346,    0,  343,    0,    0,
-        0,  344,  344,  345,  344,  346,  345,  346,  346,  347,
-      345,    0,    0,  348,  347,  473,  473,  473,  473,  347,
-      349,  347,  347,  348,  349,    0,  348,  348,  350,  351,
-
-      349,    0,    0,  349,  352,  351,  350,    0,  350,  351,
-        0,  350,  351,  353,  352,  353,    0,  352,  354,    0,
-      354,  352,  355,  353,    0,    0,  353,  356,  354,  356,
-        0,  354,  355,  357,  355,  355,    0,  356,  358,  359,
-      356,  473,    0,  357,    0,  358,  357,    0,  358,  359,
-      360,  358,  359,    0,  361,  360,  362,    0,  363,    0,
-      360,  363,  361,  360,  361,    0,  362,  361,  363,  362,
-        0,  363,  368,  368,  368,  368,    0,  369,  369,  369,
-      369,    0,  371,  371,  371,  371,  368,    0,  378,  380,
-      368,  369,    0,    0,  379,  369,  371,    0,  378,  380,
-
-      371,  378,  380,  382,  379,  368,  378,  379,  383,    0,
-      369,  379,  381,  382,  381,  371,  382,    0,  383,  382,
-        0,  383,  381,  384,  385,  381,    0,    0,  385,  386,
-      383,  388,    0,  384,  385,    0,  384,  385,  387,  386,
-      387,  388,  386,  389,  388,  390,    0,  391,  387,  392,
-        0,  387,  392,  389,    0,  390,  389,  391,  390,  392,
-      391,  393,  392,  394,    0,  393,    0,  394,  395,  396,
-      397,  393,    0,  394,  393,    0,  394,  398,  395,  396,
-      397,  395,  396,  397,  399,  395,  400,  398,  401,    0,
-      398,    0,    0,    0,  399,  408,  400,  399,  401,  400,
-
-      401,  401,  402,  407,  409,  408,  402,  407,  408,  410,
-      411,    0,  402,  407,  409,  402,  407,  409,  412,  410,
-      411,    0,  410,  411,  413,  414,    0,    0,  412,  414,
-      412,  412,  416,    0,  413,  414,  413,  413,  414,  415,
-        0,  415,  416,  418,  417,  416,  417,  418,  419,  415,
-      420,    0,  415,  418,  417,  421,  418,  417,  419,  421,
-      420,  419,  422,  420,    0,  421,  422,    0,  421,    0,
-      428,  429,  422,    0,    0,  422,  423,  423,  423,  423,
-      428,  429,  430,  428,  429,    0,    0,  431,  476,  476,
-      476,  476,  430,  433,  432,  430,    0,  431,  432,  430,
-
-      431,  434,    0,  433,  432,  434,  433,  432,  435,    0,
-      436,  434,  423,  436,  434,    0,  437,    0,  435,  437,
-      436,  435,  423,  436,    0,  423,  437,    0,  441,  437,
-      438,  438,  438,  438,    0,  438,  443,  442,  441,    0,
-      438,  441,  442,  444,  441,  445,  443,  442,    0,  443,
-      442,  438,  446,  444,    0,  445,  444,    0,  445,    0,
-        0,    0,  446,    0,    0,  446,  449,  449,  449,  449,
-      449,  450,  450,  450,  450,  453,  454,  449,    0,    0,
-        0,  463,  463,  463,  463,  453,  454,    0,  453,  454,
-        0,  463,  464,  464,  464,  464,  464,    0,    0,  449,
-
-        0,    0,    0,  464,  465,  465,  465,  465,  465,    0,
-      450,    0,  450,  463,    0,  465,  468,  468,  468,  468,
-        0,    0,    0,  450,    0,  464,    0,  450,  469,  469,
-      469,  469,  471,  471,  471,  471,    0,  465,  470,  470,
-      470,  470,  472,  472,  472,  472,  474,  474,  474,  474,
-      477,  477,  477,  477,    0,  468,    0,  468,  479,  479,
-      479,  479,  480,  480,  480,  480,    0,  469,  468,  469,
-        0,    0,  468,  481,  481,  481,  481,  470,    0,  470,
-      469,  471,    0,    0,  469,  482,  482,  482,  482,  474,
-      470,  472,    0,    0,  470,  482,  484,  484,  484,  484,
-
-      485,  485,  485,  485,  486,  486,  486,  486,  489,  489,
-      489,  489,  490,  490,  490,  490,    0,  482,  483,  483,
-      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
-      483,  483,  483,  483,  483,  483,  483,    0,    0,    0,
-      483,  483,  483,  483,  485,    0,    0,  484,  486,    0,
-      483,    0,  483,  483,  491,  491,  491,  491,  492,  492,
-      492,  492,  494,  494,  494,  494,  495,  495,  495,  495,
-      498,  498,  498,  498,  499,  499,  499,  499,  483,  483,
-      483,  483,  483,  483,  493,  493,  493,  493,  493,  493,
-      493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
-
-      493,  493,  493,    0,    0,    0,  493,  493,  493,  493,
-        0,    0,  495,    0,    0,  494,  493,    0,  493,  493,
-      500,  500,  500,  500,  501,  501,  501,  501,  502,  502,
-      502,  502,  503,  503,  503,  503,  504,  504,  504,  504,
-      507,  507,  507,  507,  493,  493,  493,  493,  493,  493,
-      508,  508,  508,  508,  509,  509,  509,  509,  510,  510,
-      510,  510,  511,  511,  511,  511,  502,  512,  512,  512,
-      512,    0,  503,  513,  513,  513,  513,    0,    0,  504,
-      505,  505,  505,  505,  505,  505,  505,  505,  505,  505,
-      505,  505,  505,  505,  505,  505,  505,  505,  505,    0,
-
-        0,    0,  505,  505,  505,  505,  514,  514,  514,  514,
-        0,    0,  505,    0,  505,  505,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      250,  250,  250,  250,  250,  250,  250,  250,   64,   60,
+       39,  250,  250,  250,  250,  266,  257,  257,  257,  257,
+      268,  250,  264,  250,  250,  266,  264,  265,  266,  265,
+
+      268,  266,  264,  268,  269,  264,   34,  265,  269,   32,
+      265,   24,   19,   16,  269,   13,  267,  269,  270,  250,
+      250,  250,  250,  250,  250,  257,  267,  257,  270,  267,
+      271,  270,  267,  267,  275,  272,    5,  271,  257,  272,
+      271,  274,  257,  271,  275,  272,  273,  275,  272,    4,
+      273,  274,  276,  277,  274,  277,  273,  274,  278,  273,
+      279,    2,  276,  277,  280,  276,  277,    0,  278,    0,
+      279,  278,  281,  279,  280,    0,  281,  280,  283,  282,
+      284,  280,  281,  282,  285,  281,  283,    0,  283,  282,
+      284,  283,  282,  284,  285,  286,  290,  285,  550,  550,
+
+      550,  550,  287,  288,  289,  286,  290,    0,  286,  290,
+      286,  287,  287,  288,  289,  287,  288,  289,  291,  292,
+      293,  289,  288,  551,  551,  551,  551,    0,  291,  292,
+      293,  291,  292,  293,  294,  295,  291,  293,  294,    0,
+      296,    0,    0,    0,  294,  295,  298,  294,  295,    0,
+      296,  297,  295,  296,    0,  297,  298,    0,  299,  298,
+        0,  297,  299,  300,  297,  301,    0,  300,  299,  302,
+      304,  299,    0,  300,  303,  301,  300,  303,  301,  302,
+      304,  305,  302,  304,  303,  307,    0,  303,  305,    0,
+        0,  305,    0,    0,  305,  307,    0,    0,  307,  310,
+
+      310,  310,  315,  315,  315,  315,    0,    0,  316,  316,
+      316,  316,  322,  322,  322,    0,  315,    0,    0,    0,
+      315,  310,  316,  323,  323,  323,  316,    0,  317,  317,
+      317,  317,    0,    0,  322,  315,  319,  319,  319,  319,
+        0,  316,  317,  345,    0,  323,  317,    0,    0,    0,
+      319,    0,  345,  345,  319,  346,  345,  330,  330,  330,
+      330,  317,    0,  354,  350,  346,    0,    0,  346,  319,
+      321,  330,  350,  354,  350,    0,  354,  350,  321,  321,
+      321,  321,  321,  321,    0,  321,    0,    0,    0,  321,
+      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
+
+      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
+      321,  321,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,    0,  324,  324,    0,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  325,  325,
+      325,  325,  325,  325,  325,  325,  325,  325,  325,  325,
+      325,  325,  325,  325,  325,  325,  325,    0,  353,    0,
+
+      325,  325,  325,  325,  331,  331,  331,  331,  353,  353,
+      325,  353,  325,  325,  333,  333,  333,  333,  331,    0,
+      347,  348,  331,  552,  552,  552,  552,  347,  333,    0,
+      347,  348,  333,  347,  348,  349,  351,  348,  325,  325,
+      325,  325,  325,  325,    0,  349,  351,  352,  349,  351,
+        0,    0,  349,  355,  351,  356,    0,  352,    0,    0,
+      352,  358,  361,  355,  352,  356,  355,  356,  356,  357,
+      359,  358,  361,  357,  358,  361,  362,  361,    0,  357,
+      359,  360,  357,  359,    0,  360,  362,  359,  363,  362,
+        0,  360,  364,    0,  360,    0,  365,  366,  363,    0,
+
+        0,  363,  364,  363,  367,  364,  365,  366,  364,  365,
+      366,  368,  369,    0,  367,  365,  370,  367,    0,  367,
+      370,  368,  369,  371,  368,  369,  370,  372,  375,  370,
+      375,  371,    0,  371,  374,  373,  371,  372,  375,    0,
+      372,  375,  372,  373,  374,  373,  376,  374,  373,  374,
+      377,  378,  379,  385,  385,  385,  376,  379,  380,  376,
+      377,  378,  379,  377,  378,  379,  376,  382,  380,  381,
+        0,  380,    0,  381,  383,  385,    0,  382,    0,  381,
+      382,  413,  381,  414,  383,  415,    0,  383,  386,  386,
+      386,  413,  383,  414,  413,  415,  414,    0,  415,  554,
+
+      554,  554,  554,  560,  560,  560,  560,    0,    0,    0,
+      386,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,    0,  387,  387,    0,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,    0,    0,  390,  388,
+
+      388,  388,  388,  392,  392,  392,  392,    0,    0,  388,
+      390,  388,  388,  416,  390,  417,    0,  392,    0,    0,
+      418,  392,  422,  416,    0,  417,  416,  417,  417,  390,
+      418,    0,  422,  418,    0,  422,  392,  388,  388,  388,
+      388,  388,  388,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  391,
+
+      391,  391,  391,  391,  391,  391,  391,  391,  391,  393,
+      393,  393,  393,    0,  395,  395,  395,  395,    0,  405,
+      405,  405,  405,  393,    0,  419,  420,  393,  395,  419,
+      423,  429,  395,  405,  420,  419,  420,  405,  419,  420,
+      423,  429,  393,  423,  429,  429,    0,  395,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  421,  424,    0,  421,    0,  425,
+        0,  426,    0,  424,  421,  424,  438,  421,  424,  425,
+      425,  426,  425,  427,  426,    0,  438,  428,  426,  438,
+        0,    0,  428,  427,  430,  427,  427,  428,  430,  428,
+      428,  431,  432,  433,  430,    0,    0,  430,  432,  431,
+        0,  431,  432,  433,  431,  432,  433,  434,    0,  434,
+      433,  435,    0,  435,    0,  436,  437,  434,  437,    0,
+      434,  435,  440,  439,  435,  436,  437,  436,  436,  437,
+      439,    0,  440,  439,  441,  440,  439,    0,  442,  441,
+
+      443,    0,  444,    0,  441,  444,  442,  441,  442,    0,
+      443,  442,  444,  443,    0,  444,  449,  449,  449,  449,
+        0,  450,  450,  450,  450,    0,  452,  452,  452,  452,
+      449,    0,  464,  466,  449,  450,    0,    0,  465,  450,
+      452,    0,  464,  466,  452,  464,  466,  468,  465,  449,
+      464,  465,  469,    0,  450,  465,  467,  468,  467,  452,
+      468,    0,  469,  468,    0,  469,  467,  470,  471,  467,
+        0,    0,  471,  472,  469,  474,    0,  470,  471,    0,
+      470,  471,  473,  472,  473,  474,  472,  475,  474,  476,
+        0,  477,  473,  478,    0,  473,  478,  475,    0,  476,
+
+      475,  477,  476,  478,  477,  479,  478,  480,    0,  479,
+        0,  480,  481,  482,  483,  479,    0,  480,  479,    0,
+      480,  484,  481,  482,  483,  481,  482,  483,  485,  481,
+      486,  484,  487,    0,  484,    0,    0,    0,  485,  497,
+      486,  485,  487,  486,  487,  487,  488,  496,  498,  497,
+      488,  496,  497,  499,  500,    0,  488,  496,  498,  488,
+      496,  498,  501,  499,  500,    0,  499,  500,  502,  503,
+        0,    0,  501,  503,  501,  501,  505,    0,  502,  503,
+      502,  502,  503,  504,    0,  504,  505,  507,  506,  505,
+      506,  507,  508,  504,  509,    0,  504,  507,  506,  510,
+
+      507,  506,  508,  510,  509,  508,  511,  509,    0,  510,
+      511,    0,  510,    0,  520,  521,  511,    0,    0,  511,
+      512,  512,  512,  512,  520,  521,  522,  520,  521,    0,
+        0,  523,  572,  572,  572,  572,  522,  525,  524,  522,
+        0,  523,  524,  522,  523,  526,    0,  525,  524,  526,
+      525,  524,  527,    0,  528,  526,  512,  528,  526,    0,
+      529,    0,  527,  529,  528,  527,  512,  528,    0,  512,
+      529,    0,  534,  529,  530,  530,  530,  530,    0,  530,
+      536,  535,  534,    0,  530,  534,  535,  537,  534,  538,
+      536,  535,    0,  536,  535,  530,  539,  537,    0,  538,
+
+      537,    0,  538,    0,    0,    0,  539,    0,    0,  539,
+      542,  542,  542,  542,  542,  543,  543,  543,  543,  547,
+      548,  542,    0,    0,    0,  557,  557,  557,  557,  547,
+      548,    0,  547,  548,    0,  557,  558,  558,  558,  558,
+      558,    0,    0,  542,    0,    0,    0,  558,  559,  559,
+      559,  559,  559,    0,  543,    0,  543,  557,    0,  559,
+      561,  561,  561,  561,  561,    0,    0,  543,    0,  558,
+        0,  543,  562,  562,  562,  562,    0,  563,  563,  563,
+      563,  559,  564,  564,  564,  564,  565,  565,  565,  565,
+      566,  566,  566,  566,  567,  567,  567,  567,  568,  568,
+
+      568,  568,  573,  573,  573,  573,  575,  575,  575,  575,
+        0,  562,    0,  562,    0,    0,  563,    0,  563,    0,
+        0,  564,    0,  564,  562,    0,    0,    0,  562,  563,
+        0,    0,    0,  563,  564,  565,    0,    0,  564,  566,
+        0,  568,  576,  576,  576,  576,  577,  577,  577,  577,
+      567,  578,  578,  578,  578,  586,  586,  586,  586,    0,
+        0,  578,  580,  580,  580,  580,  581,  581,  581,  581,
+      582,  582,  582,  582,  587,  587,  587,  587,  588,  588,
+      588,  588,    0,  578,  579,  579,  579,  579,  579,  579,
+      579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
+
+      579,  579,  579,    0,    0,    0,  579,  579,  579,  579,
+      581,    0,    0,  580,  582,    0,  579,    0,  579,  579,
+      589,  589,  589,  589,  591,  591,  591,  591,    0,    0,
+      592,  592,  592,  592,  597,  597,  597,  597,  598,  598,
+      598,  598,    0,    0,  579,  579,  579,  579,  579,  579,
+      590,  590,  590,  590,  590,  590,  590,  590,  590,  590,
+      590,  590,  590,  590,  590,  590,  590,  590,  590,    0,
+        0,    0,  590,  590,  590,  590,  592,  591,  599,  599,
+      599,  599,  590,    0,  590,  590,  600,  600,  600,  600,
+      601,  601,  601,  601,  602,  602,  602,  602,  605,  605,
+
+      605,  605,  608,  608,  608,  608,  609,  609,  609,  609,
+      590,  590,  590,  590,  590,  590,  610,  610,  610,  610,
+      611,  611,  611,  611,  612,  612,  612,  612,  601,  613,
+      613,  613,  613,    0,  602,  614,  614,  614,  614,    0,
+        0,  605,  606,  606,  606,  606,  606,  606,  606,  606,
+      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
+      606,    0,    0,    0,  606,  606,  606,  606,  615,  615,
+      615,  615,    0,    0,  606,    0,  606,  606,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      505,  505,  505,  505,  505,  505,  506,  506,  506,  506,
-      506,  506,  506,  506,  506,  506,  506,  506,  506,  506,
-      506,  506,  506,  506,  506,    0,    0,    0,  506,  506,
-      506,  506,    0,    0,    0,    0,    0,    0,  506,    0,
-      506,  506,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,  506,  506,  506,  506,
-      506,  506,  516,  516,    0,  516,  516,  516,  516,  516,
-      516,  516,  516,  517,    0,  517,  517,  517,  518,  518,
-        0,  518,  518,  518,  518,  518,  518,  518,  518,  519,
-      519,  519,  519,  519,  519,    0,    0,    0,  519,  519,
-      520,  520,    0,    0,  520,  520,  520,  520,  520,  520,
-      521,  521,    0,  521,  521,  521,  521,  521,  521,  521,
-      521,  522,  522,  522,  522,  522,  522,    0,    0,    0,
-      522,  522,  523,  523,  523,  523,  523,  523,  524,  524,
-      524,  524,  524,  524,    0,    0,    0,  524,  525,  525,
-
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  526,
-      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
-      527,  527,  527,    0,    0,  527,  527,  528,  528,  528,
-      528,  528,  528,    0,    0,    0,  528,  528,  529,  529,
-      529,  529,  529,  529,    0,    0,    0,  529,  530,  530,
-      530,  530,  530,  530,  530,  530,  530,  530,  530,  531,
-      531,  531,    0,    0,  531,  531,  532,  532,  532,  532,
-      532,  532,  532,  532,  532,  532,  532,  533,  533,  533,
-      533,  533,  533,    0,    0,    0,  533,  534,  534,  534,
-        0,    0,  534,  534,  535,    0,    0,  535,  535,  536,
-
-      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
-      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
-      537,  538,  538,  538,  538,  538,  539,  539,  539,  539,
-      539,  539,  539,  539,  539,  539,  539,  540,  540,  540,
-      540,  540,  541,  541,  541,  541,  541,  542,  542,  542,
-      542,  542,  543,  543,  543,  543,  543,  543,  543,  543,
-      543,  543,  543,  544,  544,  544,  544,  544,  544,  544,
-      544,  544,  544,  544,  545,  545,  545,  545,  545,  545,
-      545,  545,  545,  545,  546,  546,    0,  546,  546,  546,
-      546,  546,  546,  546,  546,  547,  547,  547,  547,  547,
-
-      547,  547,  547,  547,  547,  547,  548,  548,    0,  548,
-      548,  548,  548,  548,  548,  548,  548,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
-      515,  515,  515,  515
+        0,    0,  606,  606,  606,  606,  606,  606,  607,  607,
+      607,  607,  607,  607,  607,  607,  607,  607,  607,  607,
+      607,  607,  607,  607,  607,  607,  607,    0,    0,    0,
+      607,  607,  607,  607,    0,    0,    0,    0,    0,    0,
+      607,    0,  607,  607,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  607,  607,
+      607,  607,  607,  607,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  618,  618,    0,  618,
+      618,  618,  618,  618,  618,  618,  618,  618,  619,    0,
+
+      619,  619,  619,  620,  620,    0,  620,  620,  620,  620,
+      620,  620,  620,  620,  620,  621,  621,  621,  621,  621,
+      621,  621,    0,    0,    0,  621,  621,  622,  622,    0,
+        0,  622,    0,  622,  622,  622,  622,  622,  623,  623,
+        0,  623,  623,  623,  623,  623,  623,  623,  623,  623,
+      624,  624,  624,  624,  624,  624,  624,    0,    0,    0,
+      624,  624,  625,  625,  625,  625,  625,  625,    0,  625,
+      625,  625,  625,  625,  626,  626,    0,  626,  626,  626,
+      626,  626,  626,  626,  626,  626,  627,  627,    0,  627,
+      627,  627,  627,  627,  627,  627,  627,  627,  628,    0,
+
+      628,  628,  628,  628,  628,  629,    0,  629,  629,  629,
+      629,  629,  630,  630,  630,  630,  630,  630,  630,    0,
+        0,    0,  630,  631,  631,  631,  631,  631,  631,  631,
+      631,  631,  631,  631,  631,  632,  632,  632,  632,  632,
+      632,  632,  632,  632,  632,  632,  632,  633,  633,    0,
+      633,    0,    0,  633,  633,  634,  634,  634,  634,  634,
+      634,  634,    0,    0,    0,  634,  634,  635,  635,  635,
+      635,  635,  635,  635,    0,    0,    0,  635,  636,  636,
+      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
+      637,  637,    0,  637,    0,    0,  637,  637,  638,  638,
+
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+      639,  639,  639,  639,  639,  639,  639,    0,    0,    0,
+      639,  640,  640,    0,  640,    0,    0,  640,  640,  641,
+        0,    0,  641,  641,  642,  642,  642,  642,  642,  642,
+      642,  642,  642,  642,  642,  642,  643,  643,  643,  643,
+      643,  643,  643,  643,  643,  643,  643,  643,  644,  644,
+      644,  644,  644,    0,  644,  645,  645,  645,  645,  645,
+      645,  645,  645,  645,  645,  645,  645,  646,  646,  646,
+      646,  646,  646,  646,  646,  646,  646,  646,  646,  647,
+      647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
+
+      647,  648,  648,  648,  648,  648,    0,  648,  649,  649,
+      649,  649,  649,    0,  649,  650,  650,  650,  650,  650,
+        0,  650,  651,  651,  651,  651,  651,  651,  651,  651,
+      651,  651,  651,  651,  652,  652,  652,  652,  652,  652,
+      652,  652,  652,  652,  652,  652,  653,  653,  653,  653,
+      653,  653,  653,  653,  653,  653,  653,  654,  654,    0,
+      654,  654,  654,  654,  654,  654,  654,  654,  654,  655,
+      655,  655,  655,  655,  655,  655,  655,  655,  655,  655,
+      655,  656,  656,  656,  656,  656,  656,  656,  656,  656,
+      656,  656,  656,  657,  657,    0,  657,  657,  657,  657,
+
+      657,  657,  657,  657,  657,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
+      616,  616
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1343,7 +1464,7 @@ static void dbg(const char*format, ...)
     if(as3_verbosity<3)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
@@ -1424,7 +1545,7 @@ void handleInclude(char*text, int len, char quotes)
     }
 
     as3__switch_to_buffer(as3__create_buffer(as3_in,YY_BUF_SIZE ) );
-    //BEGIN(INITIAL); keep context
+    //BEGIN(DEFAULT); keep context
 }
 
 static int do_unescape(const char*s, const char*end, char*n) 
@@ -1553,6 +1674,12 @@ static void handleCData(char*s, int len)
     a3_lval.str.str = strdup_n(a3_lval.str.str, a3_lval.str.len);
 }
 
+static void handleRaw(char*s, int len)
+{
+    a3_lval.str.len = len;
+    a3_lval.str.str = strdup_n(s, a3_lval.str.len);
+}
+
 static void handleString(char*s, int len)
 {
     if(s[0]=='"') {
@@ -1577,7 +1704,6 @@ static inline int m(int type)
     return type;
 }
 
-
 static char numberbuf[64];
 static char*nrbuf()
 {
@@ -1772,7 +1898,7 @@ void tokenizer_unregister_namespace(const char*id)
 {
     trie_remove(namespaces, id);
 }*/
-static inline tokenizer_is_namespace(const char*id)
+static inline char tokenizer_is_namespace(const char*id)
 {
     return trie_contains(active_namespaces, id);
 }
@@ -1788,20 +1914,29 @@ static inline int handleIdentifier()
     else
         return T_IDENTIFIER;
 }
+static int tokenerror();
 
 
 //Boolean                      {c();return m(KW_BOOLEAN);}
 //int                          {c();return m(KW_INT);}
 //uint                         {c();return m(KW_UINT);}
 //Number                       {c();return m(KW_NUMBER);}
+//XMLCOMMENT  <!--([^->]|(-/[^-])|(--/[^>]))*-->
+
+//{XMLCOMMENT}                 
+
 
 
 
-#line 1801 "tokenizer.yy.c"
+
+#line 1933 "tokenizer.yy.c"
 
 #define INITIAL 0
 #define REGEXPOK 1
 #define BEGINNING 2
+#define DEFAULT 3
+#define XMLTEXT 4
+#define XML 5
 
 #ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -1984,11 +2119,11 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 521 "tokenizer.lex"
+#line 535 "tokenizer.lex"
 
 
 
-#line 1992 "tokenizer.yy.c"
+#line 2127 "tokenizer.yy.c"
 
        if ( !(yy_init) )
                {
@@ -2042,13 +2177,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 516 )
+                               if ( yy_current_state >= 617 )
                                        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 != 515 );
+               while ( yy_current_state != 616 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2071,18 +2206,18 @@ do_action:      /* This label is used only to access EOF actions. */
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 524 "tokenizer.lex"
+#line 538 "tokenizer.lex"
 {l(); /* single line comment */}
        YY_BREAK
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 525 "tokenizer.lex"
+#line 539 "tokenizer.lex"
 {l(); /* multi line comment */}
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 526 "tokenizer.lex"
+#line 540 "tokenizer.lex"
 {syntaxerror("syntax error: unterminated comment", as3_text);}
        YY_BREAK
 case 4:
@@ -2091,7 +2226,7 @@ case 4:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 528 "tokenizer.lex"
+#line 542 "tokenizer.lex"
 {l();handleInclude(as3_text, as3_leng, 1);}
        YY_BREAK
 case 5:
@@ -2100,131 +2235,120 @@ case 5:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 529 "tokenizer.lex"
+#line 543 "tokenizer.lex"
 {l();handleInclude(as3_text, as3_leng, 0);}
        YY_BREAK
 case 6:
 /* rule 6 can match eol */
 YY_RULE_SETUP
-#line 530 "tokenizer.lex"
-{l(); BEGIN(INITIAL);handleString(as3_text, as3_leng);return T_STRING;}
+#line 544 "tokenizer.lex"
+{l(); BEGIN(DEFAULT);handleString(as3_text, as3_leng);return T_STRING;}
        YY_BREAK
 case 7:
 /* rule 7 can match eol */
 YY_RULE_SETUP
-#line 531 "tokenizer.lex"
-{l(); BEGIN(INITIAL);handleCData(as3_text, as3_leng);return T_STRING;}
+#line 545 "tokenizer.lex"
+{l(); BEGIN(DEFAULT);handleCData(as3_text, as3_leng);return T_STRING;}
        YY_BREAK
 
 case 8:
+/* rule 8 can match eol */
 YY_RULE_SETUP
-#line 534 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handleregexp();} 
+#line 548 "tokenizer.lex"
+{l(); BEGIN(DEFAULT);handleRaw(as3_text, as3_leng);return T_STRING;}
        YY_BREAK
+
+
 case 9:
 /* rule 9 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 535 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handlehex();}
+#line 552 "tokenizer.lex"
+{l(); handleString(as3_text, as3_leng);return T_STRING;}
        YY_BREAK
 case 10:
-/* rule 10 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 536 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handlehexfloat();}
+#line 553 "tokenizer.lex"
+{c(); return m('<');}
        YY_BREAK
 case 11:
-/* rule 11 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 537 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handleint();}
+#line 554 "tokenizer.lex"
+{c(); return m('/');}
        YY_BREAK
 case 12:
-/* rule 12 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 538 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handlefloat();}
+#line 555 "tokenizer.lex"
+{c(); return m('>');}
        YY_BREAK
-
 case 13:
 YY_RULE_SETUP
-#line 541 "tokenizer.lex"
-{c(); BEGIN(REGEXPOK);return m(T_DICTSTART);}
+#line 556 "tokenizer.lex"
+{c(); return m('=');}
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 542 "tokenizer.lex"
-{c(); BEGIN(INITIAL); return m('{');}
+#line 557 "tokenizer.lex"
+{c(); handleRaw(as3_text, as3_leng);return T_IDENTIFIER;}
        YY_BREAK
 case 15:
+/* rule 15 can match eol */
 YY_RULE_SETUP
-#line 544 "tokenizer.lex"
-{/* utf 8 bom */}
+#line 558 "tokenizer.lex"
+{l();}
+       YY_BREAK
+case YY_STATE_EOF(XML):
+#line 559 "tokenizer.lex"
+{syntaxerror("unexpected end of file");}
        YY_BREAK
+
+
 case 16:
 /* rule 16 can match eol */
 YY_RULE_SETUP
-#line 545 "tokenizer.lex"
-{l();}
+#line 563 "tokenizer.lex"
+{l(); BEGIN(DEFAULT);handleRaw(as3_text, as3_leng);return T_STRING;}
        YY_BREAK
 case 17:
-/* rule 17 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 547 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handlehex();}
+#line 564 "tokenizer.lex"
+{c(); BEGIN(XML);return m('<');}
        YY_BREAK
 case 18:
-/* rule 18 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 548 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handlehexfloat();}
+#line 565 "tokenizer.lex"
+{c(); return m('>');}
        YY_BREAK
 case 19:
 /* rule 19 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 549 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handleint();}
+#line 566 "tokenizer.lex"
+{l(); handleRaw(as3_text, as3_leng);return T_STRING;}
        YY_BREAK
 case 20:
 /* rule 20 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 550 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return handlefloat();}
+#line 567 "tokenizer.lex"
+{l(); handleRaw(as3_text, as3_leng);return T_STRING;}
        YY_BREAK
+case YY_STATE_EOF(XMLTEXT):
+#line 568 "tokenizer.lex"
+{syntaxerror("unexpected end of file");}
+       YY_BREAK
+
+
 case 21:
 YY_RULE_SETUP
-#line 551 "tokenizer.lex"
-{c(); BEGIN(INITIAL);return m(KW_NAN);}
+#line 572 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handleregexp();} 
        YY_BREAK
 case 22:
+/* rule 22 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 553 "tokenizer.lex"
-{/* for debugging: generates a tokenizer-level error */
-                              syntaxerror("3rr0r");}
+#line 573 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handlehex();}
        YY_BREAK
 case 23:
 /* rule 23 can match eol */
@@ -2232,8 +2356,8 @@ case 23:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 556 "tokenizer.lex"
-{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-3);return T_FOR;}
+#line 574 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handlehexfloat();}
        YY_BREAK
 case 24:
 /* rule 24 can match eol */
@@ -2241,8 +2365,8 @@ case 24:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 557 "tokenizer.lex"
-{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-2);return T_DO;}
+#line 575 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handleint();}
        YY_BREAK
 case 25:
 /* rule 25 can match eol */
@@ -2250,471 +2374,551 @@ case 25:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 558 "tokenizer.lex"
-{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-5);return T_WHILE;}
+#line 576 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handlefloat();}
        YY_BREAK
+
 case 26:
-/* rule 26 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 559 "tokenizer.lex"
-{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-6);return T_SWITCH;}
+#line 579 "tokenizer.lex"
+{c(); BEGIN(REGEXPOK);return m(T_DICTSTART);}
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 560 "tokenizer.lex"
-{c();BEGIN(INITIAL);a3_lval.id="";return T_FOR;}
+#line 580 "tokenizer.lex"
+{c(); BEGIN(DEFAULT); return m('{');}
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 561 "tokenizer.lex"
-{c();BEGIN(INITIAL);a3_lval.id="";return T_DO;}
+#line 582 "tokenizer.lex"
+{/* utf 8 bom */}
        YY_BREAK
 case 29:
+/* rule 29 can match eol */
 YY_RULE_SETUP
-#line 562 "tokenizer.lex"
-{c();BEGIN(INITIAL);a3_lval.id="";return T_WHILE;}
+#line 583 "tokenizer.lex"
+{l();}
        YY_BREAK
 case 30:
+/* rule 30 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 563 "tokenizer.lex"
-{c();BEGIN(INITIAL);a3_lval.id="";return T_SWITCH;}
+#line 585 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handlehex();}
        YY_BREAK
 case 31:
+/* rule 31 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 565 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_ANDAND);}
+#line 586 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handlehexfloat();}
        YY_BREAK
 case 32:
+/* rule 32 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 566 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_OROR);}
+#line 587 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handleint();}
        YY_BREAK
 case 33:
+/* rule 33 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 567 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_NE);}
+#line 588 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return handlefloat();}
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 568 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_NEE);}
+#line 589 "tokenizer.lex"
+{c(); BEGIN(DEFAULT);return m(KW_NAN);}
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 569 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_EQEQEQ);}
+#line 591 "tokenizer.lex"
+{/* for debugging: generates a tokenizer-level error */
+                              syntaxerror("3rr0r");}
        YY_BREAK
 case 36:
+/* rule 36 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 570 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_EQEQ);}
+#line 594 "tokenizer.lex"
+{l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-3);return T_FOR;}
        YY_BREAK
 case 37:
+/* rule 37 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 571 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_GE);}
+#line 595 "tokenizer.lex"
+{l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-2);return T_DO;}
        YY_BREAK
 case 38:
+/* rule 38 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 572 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_LE);}
+#line 596 "tokenizer.lex"
+{l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-5);return T_WHILE;}
        YY_BREAK
 case 39:
+/* rule 39 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up as3_text again */
 YY_RULE_SETUP
-#line 573 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(T_MINUSMINUS);}
+#line 597 "tokenizer.lex"
+{l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-6);return T_SWITCH;}
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 574 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(T_PLUSPLUS);}
+#line 598 "tokenizer.lex"
+{c();BEGIN(DEFAULT);a3_lval.id="";return T_FOR;}
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 575 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_PLUSBY);}
+#line 599 "tokenizer.lex"
+{c();BEGIN(DEFAULT);a3_lval.id="";return T_DO;}
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 576 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_XORBY);}
+#line 600 "tokenizer.lex"
+{c();BEGIN(DEFAULT);a3_lval.id="";return T_WHILE;}
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 577 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_MINUSBY);}
+#line 601 "tokenizer.lex"
+{c();BEGIN(DEFAULT);a3_lval.id="";return T_SWITCH;}
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 578 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_DIVBY);}
+#line 603 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_ANDAND);}
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 579 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_MODBY);}
+#line 604 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_OROR);}
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 580 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_MULBY);}
+#line 605 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_NE);}
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 581 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_ORBY);}
+#line 606 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_NEE);}
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 582 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_ANDBY);}
+#line 607 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_EQEQEQ);}
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 583 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_SHRBY);}
+#line 608 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_EQEQ);}
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 584 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_SHLBY);}
+#line 609 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_GE);}
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 585 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_USHRBY);}
+#line 610 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_LE);}
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 586 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_SHL);}
+#line 611 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(T_MINUSMINUS);}
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 587 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_USHR);}
+#line 612 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(T_PLUSPLUS);}
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 588 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_SHR);}
+#line 613 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_PLUSBY);}
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 589 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_DOTDOTDOT);}
+#line 614 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_XORBY);}
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 590 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_DOTDOT);}
+#line 615 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_MINUSBY);}
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 591 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m('.');}
+#line 616 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_DIVBY);}
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 592 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(T_COLONCOLON);}
+#line 617 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_MODBY);}
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 593 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(':');}
+#line 618 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_MULBY);}
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 594 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_INSTANCEOF);}
+#line 619 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_ORBY);}
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 595 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_IMPLEMENTS);}
+#line 620 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_ANDBY);}
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 596 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_INTERFACE);}
+#line 621 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_SHRBY);}
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 597 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_NAMESPACE);}
+#line 622 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_SHLBY);}
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 598 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_PROTECTED);}
+#line 623 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_USHRBY);}
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 599 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_UNDEFINED);}
+#line 624 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_SHL);}
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 600 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_CONTINUE);}
+#line 625 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_USHR);}
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 601 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_OVERRIDE);}
+#line 626 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_SHR);}
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 602 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_INTERNAL);}
+#line 627 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_DOTDOTDOT);}
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 603 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_FUNCTION);}
+#line 628 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_DOTDOT);}
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 604 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_FINALLY);}
+#line 629 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m('.');}
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 605 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_DEFAULT);}
+#line 630 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(T_COLONCOLON);}
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 606 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_PACKAGE);}
+#line 631 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(':');}
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 607 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_PRIVATE);}
+#line 632 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_INSTANCEOF);}
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 608 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_DYNAMIC);}
+#line 633 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_IMPLEMENTS);}
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 609 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_EXTENDS);}
+#line 634 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_INTERFACE);}
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 610 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_DELETE);}
+#line 635 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_NAMESPACE);}
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 611 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_RETURN);}
+#line 636 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_PROTECTED);}
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 612 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_PUBLIC);}
+#line 637 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_UNDEFINED);}
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 613 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_NATIVE);}
+#line 638 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_CONTINUE);}
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 614 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_STATIC);}
+#line 639 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_OVERRIDE);}
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 615 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_IMPORT);}
+#line 640 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_INTERNAL);}
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 616 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_TYPEOF);}
+#line 641 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_FUNCTION);}
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 617 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_THROW);}
+#line 642 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_FINALLY);}
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 618 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_CLASS);}
+#line 643 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_DEFAULT);}
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 619 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_CONST);}
+#line 644 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_PACKAGE);}
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 620 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_CATCH);}
+#line 645 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_PRIVATE);}
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 621 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_FINAL);}
+#line 646 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_DYNAMIC);}
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 622 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_FALSE);}
+#line 647 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_EXTENDS);}
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 623 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_BREAK);}
+#line 648 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_DELETE);}
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 624 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_SUPER);}
+#line 649 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_RETURN);}
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 625 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_EACH);}
+#line 650 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_PUBLIC);}
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 626 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_VOID);}
+#line 651 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_NATIVE);}
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 627 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_TRUE);}
+#line 652 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_STATIC);}
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 628 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_NULL);}
+#line 653 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_IMPORT);}
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 629 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_ELSE);}
+#line 654 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_TYPEOF);}
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 630 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_CASE);}
+#line 655 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_THROW);}
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 631 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_WITH);}
+#line 656 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_CLASS);}
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 632 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_USE);}
+#line 657 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_CONST);}
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 633 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_NEW);}
+#line 658 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_CATCH);}
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 634 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_GET);}
+#line 659 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_FINAL);}
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 635 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_SET);}
+#line 660 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_FALSE);}
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 636 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_VAR);}
+#line 661 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_BREAK);}
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 637 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_TRY);}
+#line 662 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_SUPER);}
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 638 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_IS) ;}
+#line 663 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_EACH);}
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 639 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_IN) ;}
+#line 664 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_VOID);}
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 640 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(KW_IF) ;}
+#line 665 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_TRUE);}
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 641 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(KW_AS);}
+#line 666 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_NULL);}
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 642 "tokenizer.lex"
-{c();BEGIN(INITIAL);return handleIdentifier();}
+#line 667 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_ELSE);}
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 644 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(as3_text[0]);}
+#line 668 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_CASE);}
        YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 645 "tokenizer.lex"
-{c();BEGIN(REGEXPOK);return m(as3_text[0]);}
+#line 669 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_WITH);}
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 646 "tokenizer.lex"
-{c();BEGIN(INITIAL);return m(as3_text[0]);}
+#line 670 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_USE);}
        YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 648 "tokenizer.lex"
-{/* ERROR */
-                              char c1=as3_text[0];
-                              char buf[128];
-                              buf[0] = as3_text[0];
-                              int t;
-                              for(t=1;t<128;t++) {
-                                 char c = buf[t]=input();
-                                 if(c=='\n' || c==EOF)  {
-                                      buf[t] = 0;
-                                     break;
-                                  }
-                             }
-                             if(c1>='0' && c1<='9')
-                                 syntaxerror("syntax error: %s (identifiers must not start with a digit)");
-                              else
-                                 syntaxerror("syntax error: %s", buf);
-                             printf("\n");
-                             exit(1);
-                             yyterminate();
-                            }
+#line 671 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_NEW);}
+       YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 672 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_GET);}
+       YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 673 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_SET);}
+       YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 674 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_VAR);}
        YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 675 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_TRY);}
+       YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 676 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_IS) ;}
+       YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 677 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_IN) ;}
+       YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 678 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(KW_IF) ;}
+       YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 679 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(KW_AS);}
+       YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 680 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return handleIdentifier();}
+       YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 682 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(as3_text[0]);}
+       YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 683 "tokenizer.lex"
+{c();BEGIN(REGEXPOK);return m(as3_text[0]);}
+       YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 684 "tokenizer.lex"
+{c();BEGIN(DEFAULT);return m(as3_text[0]);}
+       YY_BREAK
+
+case 125:
+YY_RULE_SETUP
+#line 687 "tokenizer.lex"
+{tokenerror();}
+       YY_BREAK
+
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(REGEXPOK):
 case YY_STATE_EOF(BEGINNING):
-#line 668 "tokenizer.lex"
+case YY_STATE_EOF(DEFAULT):
+#line 689 "tokenizer.lex"
 {l();
                               void*b = leave_file();
                              if (!b) {
@@ -2727,12 +2931,12 @@ case YY_STATE_EOF(BEGINNING):
                              }
                             }
        YY_BREAK
-case 113:
+case 126:
 YY_RULE_SETUP
-#line 680 "tokenizer.lex"
+#line 701 "tokenizer.lex"
 ECHO;
        YY_BREAK
-#line 2736 "tokenizer.yy.c"
+#line 2940 "tokenizer.yy.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -3024,7 +3228,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 516 )
+                       if ( yy_current_state >= 617 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3052,11 +3256,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 516 )
+               if ( yy_current_state >= 617 )
                        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 == 515);
+       yy_is_jam = (yy_current_state == 616);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3742,7 +3946,7 @@ void as3_free (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 680 "tokenizer.lex"
+#line 701 "tokenizer.lex"
 
 
 
@@ -3751,6 +3955,29 @@ int as3_wrap()
     return 1;
 }
 
+static int tokenerror()
+{
+    char c1=as3_text[0];
+    char buf[128];
+    buf[0] = as3_text[0];
+    int t;
+    for(t=1;t<128;t++) {
+        char c = buf[t]=input();
+        if(c=='\n' || c==EOF)  {
+            buf[t] = 0;
+            break;
+        }
+    }
+    if(c1>='0' && c1<='9')
+        syntaxerror("syntax error: %s (identifiers must not start with a digit)");
+    else
+        syntaxerror("syntax error: %s", buf);
+    printf("\n");
+    exit(1);
+    yyterminate();
+}
+
+
 static char mbuf[256];
 char*token2string(enum yytokentype nr, YYSTYPE v)
 {
@@ -3818,6 +4045,23 @@ char*token2string(enum yytokentype nr, YYSTYPE v)
     }
 }
 
+void tokenizer_begin_xml()
+{
+    BEGIN(XML);
+}
+void tokenizer_begin_xmltext()
+{
+    BEGIN(XMLTEXT);
+}
+void tokenizer_end_xmltext()
+{
+    BEGIN(XML);
+}
+void tokenizer_end_xml()
+{
+    BEGIN(DEFAULT);
+}
+
 void initialize_scanner()
 {
     BEGIN(BEGINNING);
index 5570815..fd1b745 100644 (file)
@@ -47,7 +47,7 @@ static void dbg(char*format, ...)
     if(!verbose)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index cb0c6f1..7b5f1c7 100644 (file)
@@ -46,7 +46,7 @@ static void dbg(char*format, ...)
     int l;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index b5bb1d3..fa0b7f4 100644 (file)
@@ -60,7 +60,7 @@ static void dbg(char*format, ...)
     int l;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index 17750a3..649601f 100644 (file)
@@ -54,7 +54,7 @@ static void dbg(char*format, ...)
     int l;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index 1f7b96c..e75148f 100644 (file)
--- a/lib/log.c
+++ b/lib/log.c
@@ -205,7 +205,7 @@ void msg(const char* format, ...)
                return;
     }
 
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
        va_end(arglist);
     strcat(buf, "\n");
     log_str(buf);
index 573719e..7bd0860 100644 (file)
@@ -132,7 +132,7 @@ static void dbg(const char*format, ...)
     if(!verbose)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
index cbb4eb0..98cc6cb 100644 (file)
@@ -72,7 +72,7 @@ static char* strf(char*format, ...)
     int l;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     return strdup(buf);
 }
index a89b287..f5362fc 100644 (file)
@@ -10,7 +10,7 @@ char* setError(char*format, ...)
     int l;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
@@ -29,7 +29,7 @@ void mylog(char*format, ...)
     if(!verbose)
        return;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     l = strlen(buf);
     while(l && buf[l-1]=='\n') {
diff --git a/lib/q.c b/lib/q.c
index 0a9cb9f..615f2fe 100644 (file)
--- a/lib/q.c
+++ b/lib/q.c
@@ -21,6 +21,7 @@
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <stdarg.h>
 #include <string.h>
 #include <assert.h>
 #include <memory.h>
@@ -47,6 +48,21 @@ char*qstrndup(const char*string, int len)
 {
     return strdup_n(string, len);
 }
+char* allocprintf(const char*format, ...)
+{
+    va_list arglist1;
+    va_start(arglist1, format);
+    char dummy;
+    int l = vsnprintf(&dummy, 1, format, arglist1);
+    va_end(arglist1);
+
+    va_list arglist2;
+    va_start(arglist2, format);
+    char*buf = malloc(l+1);
+    vsnprintf(buf, l+1, format, arglist2);
+    va_end(arglist2);
+    return buf;
+}
 
 // ------------------------------- mem_t --------------------------------------
 
diff --git a/lib/q.h b/lib/q.h
index 997b470..4674cf4 100644 (file)
--- a/lib/q.h
+++ b/lib/q.h
@@ -132,6 +132,7 @@ typedef struct _trie {
 } trie_t;
 
 char* strdup_n(const char*str, int size);
+char* allocprintf(const char*str, ...);
 
 unsigned int crc32_add_byte(unsigned int crc32, unsigned char b);
 unsigned int crc32_add_string(unsigned int crc32, const char*s);
index 5422e7d..0e9e3e5 100644 (file)
@@ -88,7 +88,7 @@ int systemf(const char* format, ...)
     int ret;
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
 
     if(!system_quiet) {
@@ -439,23 +439,6 @@ int args_callback_option(char*name,char*val) {
     return 0;
 }
 
-/*struct docoptions_t options[] =
-{{"o","output","filename::Specify output file"},
- {"V","version","Print program version"},
- {"i","ignore","Ignore draw order (makes the SWF file smaller, but may produce graphic errors)"},
- {"z","zlib","Use Flash 6 (MX) zlib compression (Needs at least Flash 6 Plugin to play)"},
- {"s","shapes","Don't use SWF Fonts, but store everything as shape"},
- {"j","jpegquality","Set quality of embedded jpeg pictures (default: 85)"},
- {"p","pages","Convert only pages in range. (E.g. 3-85)"},
- {"w","samewindow","Don't open a new browser window for links in the SWF"},
- {"f","fonts","Stroe full fonts in SWF. (Don't reduce to used characters)"},
- {"F","fontpath","path::Add directory to font search path"},
- {"B","viewer","name::Link viewer \"name\" to the pdf"},
- {"L","preloader","file.swf::Link preloader \"file.swf\" to the pdf"},
- {"b","defaultviewer","Link default viewer to the pdf"},
- {"l","defaultpreloader","Link default preloader to the pdf"}
- {0,0}
-};*/
 static struct options_t options[] = {
 {"h", "help"},
 {"V", "version"},
@@ -512,7 +495,7 @@ void args_callback_usage(char *name)
     printf("\n");
     printf("-h , --help                    Print short help message and exit\n");
     printf("-V , --version                 Print version info and exit\n");
-    printf("-o , --output file.swf         Direct output to file.swf. If file.swf contains '%d' (file%d.swf), then each page \n");
+    printf("-o , --output file.swf         Direct output to file.swf. If file.swf contains '%%' (file%%.swf), then each page goes to a seperate file.\n");
     printf("-p , --pages range             Convert only pages in range with range e.g. 1-20 or 1,4,6,9-11 or\n");
     printf("-P , --password password       Use password for deciphering the pdf.\n");
     printf("-v , --verbose                 Be verbose. Use more than one -v for greater effect.\n");
index d4919ea..51c5663 100644 (file)
@@ -29,7 +29,7 @@ void syntaxerror(char*format, ...)
     char buf[1024];
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     fprintf(stderr, "\"%s\", line %d column %d: error- %s\n", filename, line, column, buf);
     if (cleanUp)
@@ -42,7 +42,7 @@ void warning(char*format, ...)
     char buf[1024];
     va_list arglist;
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
     fprintf(stderr, "\"%s\", line %d column %d: warning- %s\n", filename, line, column, buf);
 }
index 0020661..d65e625 100644 (file)
@@ -954,7 +954,7 @@ void dumperror(const char* format, ...)
     va_list arglist;
 
     va_start(arglist, format);
-    vsprintf(buf, format, arglist);
+    vsnprintf(buf, sizeof(buf)-1, format, arglist);
     va_end(arglist);
 
     if(!html && !xy)