[Scummvm-git-logs] scummvm master -> 1e476e144647b0bcc37e1cd19a303581b6edc130

djsrv dservilla at gmail.com
Fri Aug 21 04:22:20 UTC 2020


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
07034e3b71 DIRECTOR: LINGO: Remove factoryCall declaration
20e54db2ae DIRECTOR: LINGO: Implement errors
74bb24c2e5 DIRECTOR: LINGO: Error on missing cast member
1e476e1446 DIRECTOR: LINGO: Assert cast member error in tests


Commit: 07034e3b711042317389100b05ad3206dbd5da6e
    https://github.com/scummvm/scummvm/commit/07034e3b711042317389100b05ad3206dbd5da6e
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-21T00:14:06-04:00

Commit Message:
DIRECTOR: LINGO: Remove factoryCall declaration

Was unused.

Changed paths:
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 524a0502b4..08eab3ac1c 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -320,8 +320,6 @@ public:
 	void dropStack(int nargs);
 	void drop(uint num);
 
-	void factoryCall(const Common::String &name, int nargs);
-
 	void func_mci(const Common::String &name);
 	void func_mciwait(const Common::String &name);
 	void func_beep(int repeats);


Commit: 20e54db2aedfa3b84a9462a553277c076b16edf7
    https://github.com/scummvm/scummvm/commit/20e54db2aedfa3b84a9462a553277c076b16edf7
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-21T00:20:22-04:00

Commit Message:
DIRECTOR: LINGO: Implement errors

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-code.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 27eff974b0..d80f3bb2ce 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -66,6 +66,8 @@ static struct FuncDescr {
 	const char *args;
 } funcDescr[] = {
 	{ 0,					"STOP",				""  },
+	{ LC::c_asserterror,	"c_asserterror",	"" },
+	{ LC::c_asserterrordone,"c_asserterrordone","" },
 	{ LC::c_add,			"c_add",			"" },
 	{ LC::c_putafter,		"c_putafter",		"" },	// D3
 	{ LC::c_ampersand,		"c_ampersand",		"" },
@@ -1639,4 +1641,16 @@ void LC::c_hilite() {
 		cast_id.u.i);
 }
 
+void LC::c_asserterror() {
+	g_lingo->_expectError = true;
+	g_lingo->_caughtError = false;
+}
+
+void LC::c_asserterrordone() {
+	if (!g_lingo->_caughtError) {
+		warning("BUILDBOT: c_asserterrordone: did not catch error");
+	}
+	g_lingo->_expectError = false;
+}
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 3b3916ba7d..461ccc1a92 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -132,6 +132,10 @@ void c_play();
 void c_open();
 void c_hilite();
 
+// custom instructions for testing
+void c_asserterror();
+void c_asserterrordone();
+
 // stubs for unknown instructions
 void cb_unk();
 void cb_unk1();
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index b9f6de8dc0..643a7b5a44 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -309,83 +309,85 @@ enum yysymbol_kind_t
   YYSYMBOL_tENDIF = 85,                    /* tENDIF  */
   YYSYMBOL_tENDREPEAT = 86,                /* tENDREPEAT  */
   YYSYMBOL_tENDTELL = 87,                  /* tENDTELL  */
-  YYSYMBOL_88_ = 88,                       /* '<'  */
-  YYSYMBOL_89_ = 89,                       /* '>'  */
-  YYSYMBOL_90_ = 90,                       /* '&'  */
-  YYSYMBOL_91_ = 91,                       /* '+'  */
-  YYSYMBOL_92_ = 92,                       /* '-'  */
-  YYSYMBOL_93_ = 93,                       /* '*'  */
-  YYSYMBOL_94_ = 94,                       /* '/'  */
-  YYSYMBOL_95_ = 95,                       /* '%'  */
-  YYSYMBOL_96_n_ = 96,                     /* '\n'  */
-  YYSYMBOL_97_ = 97,                       /* '('  */
-  YYSYMBOL_98_ = 98,                       /* ')'  */
-  YYSYMBOL_99_ = 99,                       /* ','  */
-  YYSYMBOL_100_ = 100,                     /* '['  */
-  YYSYMBOL_101_ = 101,                     /* ']'  */
-  YYSYMBOL_102_ = 102,                     /* ':'  */
-  YYSYMBOL_YYACCEPT = 103,                 /* $accept  */
-  YYSYMBOL_program = 104,                  /* program  */
-  YYSYMBOL_programline = 105,              /* programline  */
-  YYSYMBOL_ID = 106,                       /* ID  */
-  YYSYMBOL_asgn = 107,                     /* asgn  */
-  YYSYMBOL_stmtoneliner = 108,             /* stmtoneliner  */
-  YYSYMBOL_stmt = 109,                     /* stmt  */
-  YYSYMBOL_110_1 = 110,                    /* $@1  */
-  YYSYMBOL_111_2 = 111,                    /* $@2  */
-  YYSYMBOL_112_3 = 112,                    /* $@3  */
-  YYSYMBOL_113_4 = 113,                    /* $@4  */
-  YYSYMBOL_114_5 = 114,                    /* $@5  */
-  YYSYMBOL_115_6 = 115,                    /* $@6  */
-  YYSYMBOL_116_7 = 116,                    /* $@7  */
-  YYSYMBOL_117_8 = 117,                    /* $@8  */
-  YYSYMBOL_118_9 = 118,                    /* $@9  */
-  YYSYMBOL_startrepeat = 119,              /* startrepeat  */
-  YYSYMBOL_tellstart = 120,                /* tellstart  */
-  YYSYMBOL_ifstmt = 121,                   /* ifstmt  */
-  YYSYMBOL_elseifstmtlist = 122,           /* elseifstmtlist  */
-  YYSYMBOL_elseifstmt = 123,               /* elseifstmt  */
-  YYSYMBOL_jumpifz = 124,                  /* jumpifz  */
-  YYSYMBOL_jump = 125,                     /* jump  */
-  YYSYMBOL_varassign = 126,                /* varassign  */
-  YYSYMBOL_if = 127,                       /* if  */
-  YYSYMBOL_lbl = 128,                      /* lbl  */
-  YYSYMBOL_stmtlist = 129,                 /* stmtlist  */
-  YYSYMBOL_stmtlistline = 130,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 131,       /* simpleexprnoparens  */
-  YYSYMBOL_132_10 = 132,                   /* $@10  */
-  YYSYMBOL_simpleexpr = 133,               /* simpleexpr  */
-  YYSYMBOL_expr = 134,                     /* expr  */
-  YYSYMBOL_chunkexpr = 135,                /* chunkexpr  */
-  YYSYMBOL_reference = 136,                /* reference  */
-  YYSYMBOL_proc = 137,                     /* proc  */
-  YYSYMBOL_138_11 = 138,                   /* $@11  */
-  YYSYMBOL_139_12 = 139,                   /* $@12  */
-  YYSYMBOL_140_13 = 140,                   /* $@13  */
-  YYSYMBOL_141_14 = 141,                   /* $@14  */
-  YYSYMBOL_globallist = 142,               /* globallist  */
-  YYSYMBOL_propertylist = 143,             /* propertylist  */
-  YYSYMBOL_instancelist = 144,             /* instancelist  */
-  YYSYMBOL_gotofunc = 145,                 /* gotofunc  */
-  YYSYMBOL_gotomovie = 146,                /* gotomovie  */
-  YYSYMBOL_playfunc = 147,                 /* playfunc  */
-  YYSYMBOL_148_15 = 148,                   /* $@15  */
-  YYSYMBOL_defn = 149,                     /* defn  */
-  YYSYMBOL_150_16 = 150,                   /* $@16  */
-  YYSYMBOL_151_17 = 151,                   /* $@17  */
-  YYSYMBOL_on = 152,                       /* on  */
-  YYSYMBOL_153_18 = 153,                   /* $@18  */
-  YYSYMBOL_argname = 154,                  /* argname  */
-  YYSYMBOL_argdef = 155,                   /* argdef  */
-  YYSYMBOL_endargdef = 156,                /* endargdef  */
-  YYSYMBOL_argstore = 157,                 /* argstore  */
-  YYSYMBOL_arglist = 158,                  /* arglist  */
-  YYSYMBOL_nonemptyarglist = 159,          /* nonemptyarglist  */
-  YYSYMBOL_list = 160,                     /* list  */
-  YYSYMBOL_valuelist = 161,                /* valuelist  */
-  YYSYMBOL_linearlist = 162,               /* linearlist  */
-  YYSYMBOL_proplist = 163,                 /* proplist  */
-  YYSYMBOL_proppair = 164                  /* proppair  */
+  YYSYMBOL_tASSERTERROR = 88,              /* tASSERTERROR  */
+  YYSYMBOL_89_ = 89,                       /* '<'  */
+  YYSYMBOL_90_ = 90,                       /* '>'  */
+  YYSYMBOL_91_ = 91,                       /* '&'  */
+  YYSYMBOL_92_ = 92,                       /* '+'  */
+  YYSYMBOL_93_ = 93,                       /* '-'  */
+  YYSYMBOL_94_ = 94,                       /* '*'  */
+  YYSYMBOL_95_ = 95,                       /* '/'  */
+  YYSYMBOL_96_ = 96,                       /* '%'  */
+  YYSYMBOL_97_n_ = 97,                     /* '\n'  */
+  YYSYMBOL_98_ = 98,                       /* '('  */
+  YYSYMBOL_99_ = 99,                       /* ')'  */
+  YYSYMBOL_100_ = 100,                     /* ','  */
+  YYSYMBOL_101_ = 101,                     /* '['  */
+  YYSYMBOL_102_ = 102,                     /* ']'  */
+  YYSYMBOL_103_ = 103,                     /* ':'  */
+  YYSYMBOL_YYACCEPT = 104,                 /* $accept  */
+  YYSYMBOL_program = 105,                  /* program  */
+  YYSYMBOL_programline = 106,              /* programline  */
+  YYSYMBOL_ID = 107,                       /* ID  */
+  YYSYMBOL_asgn = 108,                     /* asgn  */
+  YYSYMBOL_stmtoneliner = 109,             /* stmtoneliner  */
+  YYSYMBOL_stmt = 110,                     /* stmt  */
+  YYSYMBOL_111_1 = 111,                    /* $@1  */
+  YYSYMBOL_112_2 = 112,                    /* $@2  */
+  YYSYMBOL_113_3 = 113,                    /* $@3  */
+  YYSYMBOL_114_4 = 114,                    /* $@4  */
+  YYSYMBOL_115_5 = 115,                    /* $@5  */
+  YYSYMBOL_116_6 = 116,                    /* $@6  */
+  YYSYMBOL_117_7 = 117,                    /* $@7  */
+  YYSYMBOL_118_8 = 118,                    /* $@8  */
+  YYSYMBOL_119_9 = 119,                    /* $@9  */
+  YYSYMBOL_startrepeat = 120,              /* startrepeat  */
+  YYSYMBOL_tellstart = 121,                /* tellstart  */
+  YYSYMBOL_asserterrorstart = 122,         /* asserterrorstart  */
+  YYSYMBOL_ifstmt = 123,                   /* ifstmt  */
+  YYSYMBOL_elseifstmtlist = 124,           /* elseifstmtlist  */
+  YYSYMBOL_elseifstmt = 125,               /* elseifstmt  */
+  YYSYMBOL_jumpifz = 126,                  /* jumpifz  */
+  YYSYMBOL_jump = 127,                     /* jump  */
+  YYSYMBOL_varassign = 128,                /* varassign  */
+  YYSYMBOL_if = 129,                       /* if  */
+  YYSYMBOL_lbl = 130,                      /* lbl  */
+  YYSYMBOL_stmtlist = 131,                 /* stmtlist  */
+  YYSYMBOL_stmtlistline = 132,             /* stmtlistline  */
+  YYSYMBOL_simpleexprnoparens = 133,       /* simpleexprnoparens  */
+  YYSYMBOL_134_10 = 134,                   /* $@10  */
+  YYSYMBOL_simpleexpr = 135,               /* simpleexpr  */
+  YYSYMBOL_expr = 136,                     /* expr  */
+  YYSYMBOL_chunkexpr = 137,                /* chunkexpr  */
+  YYSYMBOL_reference = 138,                /* reference  */
+  YYSYMBOL_proc = 139,                     /* proc  */
+  YYSYMBOL_140_11 = 140,                   /* $@11  */
+  YYSYMBOL_141_12 = 141,                   /* $@12  */
+  YYSYMBOL_142_13 = 142,                   /* $@13  */
+  YYSYMBOL_143_14 = 143,                   /* $@14  */
+  YYSYMBOL_globallist = 144,               /* globallist  */
+  YYSYMBOL_propertylist = 145,             /* propertylist  */
+  YYSYMBOL_instancelist = 146,             /* instancelist  */
+  YYSYMBOL_gotofunc = 147,                 /* gotofunc  */
+  YYSYMBOL_gotomovie = 148,                /* gotomovie  */
+  YYSYMBOL_playfunc = 149,                 /* playfunc  */
+  YYSYMBOL_150_15 = 150,                   /* $@15  */
+  YYSYMBOL_defn = 151,                     /* defn  */
+  YYSYMBOL_152_16 = 152,                   /* $@16  */
+  YYSYMBOL_153_17 = 153,                   /* $@17  */
+  YYSYMBOL_on = 154,                       /* on  */
+  YYSYMBOL_155_18 = 155,                   /* $@18  */
+  YYSYMBOL_argname = 156,                  /* argname  */
+  YYSYMBOL_argdef = 157,                   /* argdef  */
+  YYSYMBOL_endargdef = 158,                /* endargdef  */
+  YYSYMBOL_argstore = 159,                 /* argstore  */
+  YYSYMBOL_arglist = 160,                  /* arglist  */
+  YYSYMBOL_nonemptyarglist = 161,          /* nonemptyarglist  */
+  YYSYMBOL_list = 162,                     /* list  */
+  YYSYMBOL_valuelist = 163,                /* valuelist  */
+  YYSYMBOL_linearlist = 164,               /* linearlist  */
+  YYSYMBOL_proplist = 165,                 /* proplist  */
+  YYSYMBOL_proppair = 166                  /* proppair  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -693,21 +695,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  100
+#define YYFINAL  102
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1886
+#define YYLAST   1980
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  103
+#define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  62
+#define YYNNTS  63
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  195
+#define YYNRULES  197
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  391
+#define YYNSTATES  394
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   342
+#define YYMAXUTOK   343
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -722,15 +724,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      96,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      97,     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,    95,    90,     2,
-      97,    98,    93,    91,    99,    92,     2,    94,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   102,     2,
-      88,     2,    89,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    96,    91,     2,
+      98,    99,    94,    92,   100,    93,     2,    95,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   103,     2,
+      89,     2,    90,     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,   100,     2,   101,     2,     2,     2,     2,     2,     2,
+       2,   101,     2,   102,     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,     2,     2,     2,
@@ -755,33 +757,33 @@ static const yytype_int8 yytranslate[] =
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87
+      85,    86,    87,    88
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   235,   235,   236,   238,   239,   240,   242,   243,   244,
-     245,   246,   248,   255,   259,   270,   277,   280,   287,   290,
-     297,   304,   311,   318,   324,   331,   342,   353,   360,   368,
-     369,   371,   372,   377,   390,   394,   397,   389,   424,   428,
-     431,   423,   458,   465,   471,   457,   501,   509,   512,   513,
-     514,   516,   518,   520,   527,   535,   536,   538,   544,   548,
-     552,   556,   559,   561,   562,   564,   565,   567,   570,   573,
-     577,   581,   582,   583,   584,   585,   593,   599,   602,   605,
-     611,   612,   613,   614,   620,   620,   625,   628,   637,   638,
-     640,   641,   642,   643,   644,   645,   646,   647,   648,   649,
-     650,   651,   652,   653,   654,   655,   656,   657,   659,   662,
-     665,   666,   667,   668,   669,   670,   671,   672,   674,   675,
-     678,   682,   685,   686,   687,   695,   696,   696,   697,   697,
-     698,   698,   699,   702,   705,   711,   711,   716,   719,   723,
-     724,   727,   731,   732,   735,   739,   740,   743,   754,   755,
-     756,   757,   761,   765,   770,   771,   773,   777,   781,   785,
-     785,   815,   815,   821,   822,   822,   832,   840,   846,   846,
-     848,   850,   851,   852,   854,   855,   856,   858,   860,   861,
-     862,   864,   865,   866,   868,   870,   871,   872,   873,   875,
-     876,   878,   879,   881,   885,   889
+       0,   236,   236,   237,   239,   240,   241,   243,   244,   245,
+     246,   247,   249,   256,   260,   271,   278,   281,   288,   291,
+     298,   305,   312,   319,   325,   332,   343,   354,   361,   369,
+     370,   372,   373,   378,   391,   395,   398,   390,   425,   429,
+     432,   424,   459,   466,   472,   458,   502,   510,   513,   514,
+     515,   516,   518,   520,   522,   524,   531,   539,   540,   542,
+     548,   552,   556,   560,   563,   565,   566,   568,   569,   571,
+     574,   577,   581,   585,   586,   587,   588,   589,   597,   603,
+     606,   609,   615,   616,   617,   618,   624,   624,   629,   632,
+     641,   642,   644,   645,   646,   647,   648,   649,   650,   651,
+     652,   653,   654,   655,   656,   657,   658,   659,   660,   661,
+     663,   666,   669,   670,   671,   672,   673,   674,   675,   676,
+     678,   679,   682,   686,   689,   690,   691,   699,   700,   700,
+     701,   701,   702,   702,   703,   706,   709,   715,   715,   720,
+     723,   727,   728,   731,   735,   736,   739,   743,   744,   747,
+     758,   759,   760,   761,   765,   769,   774,   775,   777,   781,
+     785,   789,   789,   819,   819,   825,   826,   826,   836,   844,
+     850,   850,   852,   854,   855,   856,   858,   859,   860,   862,
+     864,   865,   866,   868,   869,   870,   872,   874,   875,   876,
+     877,   879,   880,   882,   883,   885,   889,   893
 };
 #endif
 
@@ -811,18 +813,19 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "tAND", "tOR", "tNOT", "tMOD", "tAFTER", "tBEFORE", "tCONCAT",
   "tCONTAINS", "tSTARTS", "tCHAR", "tITEM", "tLINE", "tWORD", "tSPRITE",
   "tINTERSECTS", "tWITHIN", "tTELL", "tPROPERTY", "tON", "tENDIF",
-  "tENDREPEAT", "tENDTELL", "'<'", "'>'", "'&'", "'+'", "'-'", "'*'",
-  "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'", "':'",
-  "$accept", "program", "programline", "ID", "asgn", "stmtoneliner",
+  "tENDREPEAT", "tENDTELL", "tASSERTERROR", "'<'", "'>'", "'&'", "'+'",
+  "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'",
+  "':'", "$accept", "program", "programline", "ID", "asgn", "stmtoneliner",
   "stmt", "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9",
-  "startrepeat", "tellstart", "ifstmt", "elseifstmtlist", "elseifstmt",
-  "jumpifz", "jump", "varassign", "if", "lbl", "stmtlist", "stmtlistline",
-  "simpleexprnoparens", "$@10", "simpleexpr", "expr", "chunkexpr",
-  "reference", "proc", "$@11", "$@12", "$@13", "$@14", "globallist",
-  "propertylist", "instancelist", "gotofunc", "gotomovie", "playfunc",
-  "$@15", "defn", "$@16", "$@17", "on", "$@18", "argname", "argdef",
-  "endargdef", "argstore", "arglist", "nonemptyarglist", "list",
-  "valuelist", "linearlist", "proplist", "proppair", YY_NULLPTR
+  "startrepeat", "tellstart", "asserterrorstart", "ifstmt",
+  "elseifstmtlist", "elseifstmt", "jumpifz", "jump", "varassign", "if",
+  "lbl", "stmtlist", "stmtlistline", "simpleexprnoparens", "$@10",
+  "simpleexpr", "expr", "chunkexpr", "reference", "proc", "$@11", "$@12",
+  "$@13", "$@14", "globallist", "propertylist", "instancelist", "gotofunc",
+  "gotomovie", "playfunc", "$@15", "defn", "$@16", "$@17", "on", "$@18",
+  "argname", "argdef", "endargdef", "argstore", "arglist",
+  "nonemptyarglist", "list", "valuelist", "linearlist", "proplist",
+  "proppair", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -841,18 +844,18 @@ static const yytype_int16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,    60,    62,
-      38,    43,    45,    42,    47,    37,    10,    40,    41,    44,
-      91,    93,    58
+     335,   336,   337,   338,   339,   340,   341,   342,   343,    60,
+      62,    38,    43,    45,    42,    47,    37,    10,    40,    41,
+      44,    91,    93,    58
 };
 #endif
 
-#define YYPACT_NINF (-357)
+#define YYPACT_NINF (-329)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-66)
+#define YYTABLE_NINF (-68)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -861,46 +864,46 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     362,   -82,  -357,  -357,  -357,  -357,  -357,  -357,  -357,   -34,
-    -357,   892,  -357,  -357,  -357,   -30,  1012,   -14,   188,    55,
-      55,  1038,   931,  -357,  1038,  -357,  -357,     8,  -357,  1119,
-    -357,  -357,  -357,  -357,  1038,  -357,  -357,  -357,  -357,  -357,
-    -357,  1038,  -357,  -357,    55,  -357,  -357,  1038,  -357,   -12,
-    1038,  -357,  -357,  -357,  1145,  1145,  1145,  1145,  1038,  -357,
-      17,  -357,  1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,
-    1038,   148,   -63,  -357,  -357,  1230,  -357,  -357,  -357,  -357,
-      55,  -357,    55,  1197,    55,  -357,     5,  1038,  1038,     6,
-      27,     1,  -357,  1607,  1230,  -357,    55,  1527,    55,    55,
-    -357,   362,  1038,  1658,  -357,  1779,    55,  -357,    55,    -9,
-    -357,  -357,  1038,  -357,  -357,  -357,  -357,  -357,  1779,  1038,
-    -357,  1263,  1296,  1329,  1362,  1746,  -357,  -357,  1709,    11,
-      12,  -357,   -87,  1779,    19,    23,    24,  -357,  1038,  1038,
-    1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,
-    1038,  1038,  1038,  1038,  1038,  1038,  -357,  -357,  1038,    -2,
-      -2,    -2,   -31,  1038,  1038,  1038,  1568,    78,  1038,  1038,
-    1038,  1038,  1038,  1038,  -357,    29,  -357,  -357,  -357,    35,
-    -357,  -357,  -357,   -32,  1620,     9,  1038,    83,  -357,    41,
-      46,    48,    55,  -357,  1779,  1038,  1038,  1038,  1038,  1038,
-    1038,  1038,  1038,  1038,  1038,  -357,  1038,  1038,  1038,  -357,
-    1038,   204,    59,    47,   -45,   -45,   -45,   -45,  1792,  1792,
-    -357,   -53,   -45,   -45,   -45,   -45,   -53,   -43,   -43,  -357,
-    -357,    55,   103,  -357,  -357,  -357,  -357,  -357,  -357,  1038,
-    1038,  1779,  1779,  1779,  1038,  1038,    55,  1779,  1779,  1779,
-    1779,  1779,  1779,    55,   493,   716,    55,  -357,  -357,  -357,
-    -357,   650,    55,  -357,  -357,  -357,  -357,  1395,  -357,  1428,
-    -357,  1461,  -357,  1494,  -357,  -357,  1779,  1779,  1779,  1779,
-      11,    12,    51,  -357,  -357,  -357,  -357,    53,  1038,  1779,
-    1164,  -357,  1779,    25,  1038,  -357,  -357,  -357,  -357,    67,
-    -357,  1038,  -357,  -357,   563,   616,  1038,  1038,  1038,  1038,
-    1038,  -357,  1779,  -357,  -357,  -357,   750,    31,  -357,    80,
-     455,  1671,    70,  -357,   156,  -357,  -357,  -357,  -357,  -357,
-      86,   616,  -357,  -357,  -357,  -357,  1038,  1038,  -357,  -357,
-    1038,  -357,    56,    55,  -357,  -357,  -357,   131,   151,   101,
-    1779,  1779,  -357,   816,  1038,  -357,   104,  -357,    91,  -357,
-    1038,   137,  -357,  -357,  1779,  -357,    55,  -357,  1779,  1038,
-     113,   146,  -357,   750,  -357,  1779,  -357,   650,   116,  -357,
-    -357,  -357,  -357,   750,  -357,  -357,   117,   750,  -357,   118,
-    -357
+     586,   -84,  -329,  -329,  -329,  -329,  -329,  -329,  -329,   -34,
+    -329,  1054,  -329,  -329,  -329,   -26,  1175,    21,   262,   156,
+     156,  1257,  1136,  -329,  1257,  -329,  -329,  -329,     5,  -329,
+    1284,  -329,  -329,  -329,  -329,  1257,  -329,  -329,  -329,  -329,
+    -329,  -329,  1257,  -329,  -329,   156,  -329,  -329,  1257,  -329,
+     -17,  1257,  -329,  -329,  -329,  1366,  1366,  1366,  1366,  1257,
+    -329,    -3,  -329,  1257,  1257,  1257,  1257,  1257,  1257,  1257,
+    1257,  1257,  1015,   -65,  -329,  -329,  1357,  -329,  -329,  -329,
+    -329,   156,  -329,   156,   508,   156,  -329,   -38,  1257,  1257,
+     -32,     7,    -7,  -329,  1714,  1357,  -329,   156,  1658,   156,
+     156,   406,  -329,   586,  1257,  1761,  -329,  1885,   156,  -329,
+     156,   -30,  -329,  -329,  1257,  -329,  -329,  -329,  -329,  -329,
+    1885,  1257,  -329,  1406,  1440,  1474,  1508,  1851,  -329,  -329,
+    1813,   -37,   -28,  -329,   -74,  1885,   -29,    -8,    -2,  -329,
+    1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,
+    1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  -329,  -329,
+    1257,   160,   160,   160,   -20,  1257,  1257,  1257,  1700,    63,
+    1257,  1257,  1257,  1257,  1257,  1257,  -329,    12,  -329,  -329,
+    -329,    14,  -329,  -329,  -329,  -329,   -12,  1748,    25,  1257,
+      73,  -329,    32,    37,    39,   156,  -329,  1885,  1257,  1257,
+    1257,  1257,  1257,  1257,  1257,  1257,  1257,  1257,  -329,  1257,
+    1257,  1257,  -329,  1257,    97,    -4,    43,   -57,   -57,   -57,
+     -57,   268,   268,  -329,   -41,   -57,   -57,   -57,   -57,   -41,
+     -55,   -55,  -329,  -329,   156,    94,  -329,  -329,  -329,  -329,
+    -329,  -329,  1257,  1257,  1885,  1885,  1885,  1257,  1257,   156,
+    1885,  1885,  1885,  1885,  1885,  1885,   156,   406,   816,   156,
+    -329,  -329,  -329,  -329,   754,   156,  -329,  -329,  -329,  -329,
+    1542,  -329,  1576,  -329,  1610,  -329,  1644,  -329,  -329,  1885,
+    1885,  1885,  1885,   -37,   -28,    41,  -329,  -329,  -329,  -329,
+      48,  1257,  1885,   134,  -329,  1885,    79,  1257,  -329,  -329,
+    -329,  -329,    49,  -329,  1257,  -329,  -329,   648,   701,  1257,
+    1257,  1257,  1257,  1257,  -329,  1885,  -329,  -329,  -329,   877,
+      20,  -329,    62,   479,  1800,    51,  -329,   125,  -329,  -329,
+    -329,  -329,  -329,    54,   701,  -329,  -329,  -329,  -329,  1257,
+    1257,  -329,  -329,  1257,  -329,    53,   156,  -329,  -329,  -329,
+     101,   121,    74,  1885,  1885,  -329,   938,  1257,  -329,    82,
+    -329,    59,  -329,  1257,   114,  -329,  -329,  1885,  -329,   156,
+    -329,  1885,  1257,    90,   129,  -329,   877,  -329,  1885,  -329,
+     754,    92,  -329,  -329,  -329,  -329,   877,  -329,  -329,   116,
+     877,  -329,   118,  -329
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -908,70 +911,70 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,     7,   159,   164,     8,     9,    10,    11,   125,
-     126,     0,   148,    61,   161,     0,     0,     0,     0,     0,
-       0,     0,     0,   130,     0,   128,   168,     0,     2,   178,
-      29,    31,     6,    32,     0,    30,   122,   123,     5,    62,
-      50,   178,    62,   124,   139,    67,    75,     0,    68,     0,
-       0,    70,    69,    79,     8,     9,    10,    11,     0,   149,
-       0,   150,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   185,    87,    88,    90,   151,   118,    74,   153,    82,
-       0,    46,     0,   121,     0,    62,     0,     0,     0,     0,
-       0,     0,   163,   133,   156,   158,   145,     0,   142,     0,
-       1,     0,   178,   179,   138,    58,   171,   160,   171,   140,
-     127,    76,     0,    77,   109,   108,   119,   120,   155,     0,
-      73,     0,     0,     0,     0,     0,    71,    72,     0,    70,
-      69,   186,    87,   189,     0,   188,   187,   191,   178,     0,
+       0,     0,     7,   161,   166,     8,     9,    10,    11,   127,
+     128,     0,   150,    63,   163,     0,     0,     0,     0,     0,
+       0,     0,     0,   132,     0,   130,   170,    54,     0,     2,
+     180,    29,    31,     6,    32,     0,    30,   124,   125,     5,
+      64,    51,   180,    64,   126,   141,    69,    77,     0,    70,
+       0,     0,    72,    71,    81,     8,     9,    10,    11,     0,
+     151,     0,   152,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   187,    89,    90,    92,   153,   120,    76,   155,
+      84,     0,    46,     0,   123,     0,    64,     0,     0,     0,
+       0,     0,     0,   165,   135,   158,   160,   147,     0,   144,
+       0,     0,     1,     0,   180,   181,   140,    60,   173,   162,
+     173,   142,   129,    78,     0,    79,   111,   110,   121,   122,
+     157,     0,    75,     0,     0,     0,     0,     0,    73,    74,
+       0,    72,    71,   188,    89,   191,     0,   190,   189,   193,
+     180,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   154,    64,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   152,    62,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   157,   146,   131,    52,    52,   143,
-     129,   169,     3,    87,     0,     0,   178,     0,   170,   172,
-       0,     0,   139,    78,   154,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    89,     0,     0,     0,   184,
-       0,     0,    87,     0,   100,   101,    98,    99,   102,   103,
-      95,   105,   106,   107,    97,    96,   104,    91,    92,    93,
-      94,   171,     0,    12,    13,    15,    16,    17,    18,     0,
-       0,    58,    22,    20,     0,     0,     0,    27,    28,    21,
-      19,    47,   132,   145,     0,     0,   142,   134,   135,   137,
-     180,     0,   171,   177,   177,   141,   110,     0,   112,     0,
-     114,     0,   116,     0,    80,    81,   194,   193,   195,   190,
-       0,     0,     0,   192,    83,    84,    86,     0,     0,    42,
-      34,    51,    23,    98,     0,   147,    62,    66,    62,    63,
-     144,     0,    59,   173,     0,     0,     0,     0,     0,     0,
-       0,   177,    14,    62,    60,    60,     0,     0,    49,     0,
-       0,   181,     0,    55,   167,   165,   111,   113,   115,   117,
-       0,     0,    43,    35,    39,    59,     0,     0,    48,    64,
-     182,   136,    62,   174,    85,   162,    58,     0,     0,     0,
-      25,    26,   183,     0,     0,    56,     0,   175,   166,    44,
-       0,     0,    33,    62,    58,    53,     0,    51,    36,     0,
-       0,     0,   176,     0,    58,    40,    54,     0,     0,    51,
-      58,    59,    45,     0,    51,    57,     0,     0,    37,     0,
-      41
+       0,     0,     0,     0,     0,     0,   159,   148,   133,    53,
+      53,   145,   131,   171,    50,     3,    89,     0,     0,   180,
+       0,   172,   174,     0,     0,   141,    80,   156,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    91,     0,
+       0,     0,   186,     0,     0,    89,     0,   102,   103,   100,
+     101,   104,   105,    97,   107,   108,   109,    99,    98,   106,
+      93,    94,    95,    96,   173,     0,    12,    13,    15,    16,
+      17,    18,     0,     0,    60,    22,    20,     0,     0,     0,
+      27,    28,    21,    19,    47,   134,   147,     0,     0,   144,
+     136,   137,   139,   182,     0,   173,   179,   179,   143,   112,
+       0,   114,     0,   116,     0,   118,     0,    82,    83,   196,
+     195,   197,   192,     0,     0,     0,   194,    85,    86,    88,
+       0,     0,    42,    34,    52,    23,   100,     0,   149,    64,
+      68,    64,    65,   146,     0,    61,   175,     0,     0,     0,
+       0,     0,     0,     0,   179,    14,    64,    62,    62,     0,
+       0,    49,     0,     0,   183,     0,    57,   169,   167,   113,
+     115,   117,   119,     0,     0,    43,    35,    39,    61,     0,
+       0,    48,    66,   184,   138,    64,   176,    87,   164,    60,
+       0,     0,     0,    25,    26,   185,     0,     0,    58,     0,
+     177,   168,    44,     0,     0,    33,    64,    60,    55,     0,
+      52,    36,     0,     0,     0,   178,     0,    60,    40,    56,
+       0,     0,    52,    60,    61,    45,     0,    52,    59,     0,
+       0,    37,     0,    41
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -357,  -357,   107,     0,  -357,   -44,     2,  -357,  -357,  -357,
-    -357,  -357,  -357,  -357,  -357,  -357,  -356,    36,  -357,  -357,
-    -357,  -237,  -326,  -106,  -357,    -7,  -248,  -357,    76,  -357,
-     277,   130,    16,  -357,  -357,  -357,  -357,  -357,  -357,    21,
-     -41,   -20,  -357,   -17,  -357,  -357,  -357,  -357,  -357,  -357,
-    -357,  -357,  -107,  -357,  -258,   -38,  -303,  -357,  -357,  -357,
-    -357,    30
+    -329,  -329,   102,     0,  -329,  -100,     6,  -329,  -329,  -329,
+    -329,  -329,  -329,  -329,  -329,  -329,  -320,    29,  -329,  -329,
+    -329,  -329,  -242,  -328,  -108,  -329,   -39,  -243,  -329,     2,
+    -329,   -21,   250,   -44,  -329,  -329,  -329,  -329,  -329,  -329,
+      16,   -47,   -43,  -329,   -13,  -329,  -329,  -329,  -329,  -329,
+    -329,  -329,  -329,  -107,  -329,  -259,   -35,  -302,  -329,  -329,
+    -329,  -329,     1
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    27,    28,    72,    30,    31,   297,   314,   347,   374,
-     315,   348,   380,   313,   346,   367,   316,   254,    33,   342,
-     355,   187,   323,   333,    34,   106,   298,   299,    73,   310,
-      74,   103,    76,    77,    35,    44,    98,    96,   301,   110,
-     180,   176,    36,    78,    37,    41,    38,    80,    42,    39,
-      99,   189,   190,   358,   304,   104,   322,    79,   134,   135,
-     136,   137
+      -1,    28,    29,    73,    31,    32,   300,   317,   350,   377,
+     318,   351,   383,   316,   349,   370,   319,   257,   101,    34,
+     345,   358,   190,   326,   336,    35,   108,   301,   302,    74,
+     313,    75,   105,    77,    78,    36,    45,    99,    97,   304,
+     112,   182,   178,    37,    79,    38,    42,    39,    81,    43,
+      40,   100,   192,   193,   361,   307,   106,   325,    80,   136,
+     137,   138,   139
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -979,388 +982,408 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      29,   191,    32,   107,   291,    95,   305,   330,   100,   349,
-     138,   373,   239,   302,    40,   208,   145,    43,    90,    91,
-      92,    81,     2,   383,   145,   -24,   145,   146,   387,    54,
-      55,     7,     8,   240,   138,   108,   112,   352,   152,   153,
-     154,   155,    84,    85,   109,   151,   152,   153,   154,   155,
-     154,   155,   -24,   331,   172,   385,   324,   325,   156,   164,
-     168,   -24,   -24,   119,   185,   138,   257,   258,   335,   165,
-     169,   132,   339,    63,    64,    65,    66,   174,   163,     2,
-     157,   170,   158,   345,   162,   336,     5,     6,     7,     8,
-     192,   171,   353,   354,   145,   337,   175,   146,   179,   181,
-     213,    29,   183,    32,   101,   363,   188,   259,   188,   359,
-     -24,   -24,   -24,   206,   207,   151,   152,   153,   154,   155,
-     209,   -24,   210,   211,   287,   378,   246,   371,   253,   381,
-     114,   115,   116,   117,   256,   386,   261,   379,   212,   389,
-     262,    75,   263,   384,   264,   286,    83,   288,   260,   311,
-     231,    93,    94,   208,    97,   303,   138,   284,   285,   233,
-     235,   237,    45,   320,   105,    46,    47,   338,   341,    48,
-      49,    50,     2,   129,   130,   234,   236,   238,    53,    54,
-      55,    56,    57,   343,   344,   360,   361,   362,   118,   365,
-     366,   369,   109,   121,   122,   123,   124,   125,   376,   377,
-     128,   133,   382,   388,   390,    86,    87,    88,   182,   334,
-     296,   282,     2,   265,   255,   300,    62,   166,    89,     5,
-       6,     7,     8,    63,    64,    65,    66,    67,     2,   280,
-     281,   188,   184,   295,     0,     5,     6,     7,     8,    68,
-      69,   283,     0,     0,     0,    70,   294,     0,    71,   194,
-     131,     0,     0,   175,    29,    29,   179,     0,     0,     0,
-       0,    29,   188,     0,     0,     0,     0,     0,     0,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,     0,     0,     0,   318,
-       0,   319,     0,   241,   242,   243,     0,     0,   247,   248,
-     249,   250,   251,   252,    29,    29,   332,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    29,     0,     0,     0,
-      29,     0,     0,     0,   111,     0,   267,   113,   269,     0,
-     271,    29,   273,     0,     0,   356,   276,   277,   278,   120,
-     279,     0,     0,   357,     0,   126,   127,     0,     0,     0,
-       0,     0,     0,    29,     0,     0,   370,     0,     0,     0,
-       0,     0,    -4,     1,     0,   167,   372,     0,     0,   289,
-     290,     0,     0,    29,   292,   293,     0,    29,     0,     0,
-       0,     0,     0,    29,     0,     0,     2,    29,     0,   193,
-       3,     4,     0,     5,     6,     7,     8,     0,     0,     0,
-       9,    10,    11,    12,    13,     0,     0,    14,     0,    15,
-       0,     0,    16,    17,    18,     0,     0,    19,   312,     0,
-      20,    21,    22,    23,     0,     0,     0,     0,     0,     0,
-       0,   321,     0,     0,     0,   232,     0,     0,     0,     0,
-     321,     0,     0,     0,    24,    25,    26,     0,     0,     0,
-       0,     0,     0,     0,     0,   -65,     1,     0,    -4,     0,
-       0,     0,     0,     0,     0,     0,   350,   351,     0,     0,
-     321,     0,   266,     0,   268,     0,   270,     0,   272,     2,
-     274,   275,   -65,     3,   364,     0,     5,     6,     7,     8,
-     368,   -65,   -65,     9,    10,    11,    12,    13,     0,   375,
-       0,     0,    15,     0,     0,    16,    17,    18,     0,     0,
-      19,     0,     0,     0,    21,    22,    23,     2,     0,     0,
-       0,     3,     0,     0,     5,     6,     7,     8,     0,     0,
-       0,     9,    10,    11,    12,     0,     0,    24,    25,     0,
-     -65,   -65,   -65,    16,     0,    18,     0,     0,     0,     0,
-       0,   -65,    21,    22,    23,     0,     0,     0,     0,     0,
-       0,     0,     0,   -65,     1,     0,     0,     0,     0,     0,
-       0,   317,     0,     0,     0,     0,    25,     0,     0,     0,
-       0,     0,     0,   326,   327,   328,   329,     2,     0,     0,
-     -65,     3,     0,     0,     5,     6,     7,     8,     0,     0,
-       0,     9,    10,    11,    12,    13,     0,     0,     0,     0,
-      15,     0,     0,    16,    17,    18,   -65,     1,    19,     0,
-       0,     0,    21,    22,    23,     0,     0,     0,     0,     0,
+      30,   184,   294,   194,   110,   102,    33,   109,   308,    96,
+     352,   333,   147,    41,   147,   148,   166,    44,    91,    92,
+      93,   305,   170,   242,   140,    82,   167,   113,   147,   211,
+     115,   114,   171,   140,   153,   154,   155,   156,   157,   156,
+     157,   355,   122,   121,   243,   111,   174,   165,   128,   129,
+     376,   154,   155,   156,   157,   334,   388,   116,   117,   118,
+     119,   172,   386,   158,   327,   328,   209,   390,   169,   188,
+     195,   173,   134,   212,   339,   210,   338,    85,    86,   -24,
+     342,   159,   176,   160,   340,   164,   140,   260,   261,   356,
+     357,   348,   213,   196,   140,   287,   288,   177,   214,   181,
+     183,    30,   103,    30,   186,   216,   -24,   362,   191,    33,
+     191,   249,   256,   366,   259,   -24,   -24,   237,   239,   241,
+     234,     2,   283,   284,   262,   374,   264,   290,     5,     6,
+       7,     8,   265,   381,   266,   382,   267,   384,   291,   235,
+     215,   387,   289,   389,   211,   314,   323,   392,   147,   341,
+     344,   148,   346,   347,   263,   363,   364,   299,   306,   369,
+     365,   236,   238,   240,   -24,   -24,   -24,   368,   372,   -38,
+     153,   154,   155,   156,   157,   379,   -24,   269,   385,   271,
+       2,   273,   380,   275,     2,   277,   278,     5,     6,     7,
+       8,    55,    56,     7,     8,   111,   141,   142,   143,   144,
+     145,   146,   391,   147,   393,   185,   148,   149,   150,   258,
+     337,   268,   303,   298,   285,   286,     0,     0,     0,     0,
+       0,     0,     0,   151,   152,   153,   154,   155,   156,   157,
+       0,     0,     0,     0,   191,    64,    65,    66,    67,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   297,
+       0,     0,     0,     0,     0,     0,   177,    30,    30,   181,
+     321,    76,   322,     0,    30,   191,    84,     0,     0,     0,
+       0,    94,    95,     0,    98,     0,   320,   335,     0,    87,
+      88,    89,     0,     0,     0,   107,     2,     0,   329,   330,
+     331,   332,    90,     5,     6,     7,     8,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   359,    30,    30,   120,
+       0,     0,     0,     0,   123,   124,   125,   126,   127,    30,
+       0,   130,   135,    30,     0,     0,     0,   373,     0,     0,
+     141,   142,   143,   144,    30,     0,     0,   147,   168,     0,
+     148,   149,   150,     0,     0,     0,   360,     0,     0,     0,
+       0,     0,     0,     0,   187,     0,    30,   151,   152,   153,
+     154,   155,   156,   157,     0,     0,     0,     0,     0,   375,
+       0,   197,     0,     0,     0,     0,    30,     0,     0,     0,
+      30,     0,     0,     0,     0,     0,    30,     0,     0,     0,
+      30,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,     0,     0,
+       0,     0,     0,     0,     0,   244,   245,   246,     0,     0,
+     250,   251,   252,   253,   254,   255,     0,     0,     0,     0,
+       2,     0,     0,     0,     3,     0,     0,     5,     6,     7,
+       8,     0,     0,     0,     9,    10,    11,    12,     0,   270,
+       0,   272,     0,   274,     0,   276,    16,     0,    18,   279,
+     280,   281,     0,   282,     0,    21,    22,    23,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   -67,
+       1,     0,     0,     0,     0,     0,     0,     0,     0,    25,
+       0,     0,   292,   293,     0,     0,     0,   295,   296,     0,
+       0,     0,     0,     2,     0,     0,   -67,     3,     0,     0,
+       5,     6,     7,     8,     0,   -67,   -67,     9,    10,    11,
+      12,    13,     0,     0,     0,     0,    15,     0,     0,    16,
+      17,    18,     0,     0,    19,     0,     0,     0,    21,    22,
+      23,   315,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   161,     0,   324,     0,     0,     0,     0,     0,
+       0,    24,    25,   324,   -67,   -67,   -67,    27,     0,     0,
+     141,   142,   143,   144,   145,   146,   -67,   147,   162,   163,
+     148,   149,   150,     0,     0,     0,    -4,     1,     0,   353,
+     354,     0,     0,   324,     0,     0,     0,   151,   152,   153,
+     154,   155,   156,   157,     0,     0,     0,   367,     0,     0,
+       2,     0,     0,   371,     3,     4,     0,     5,     6,     7,
+       8,     0,   378,     0,     9,    10,    11,    12,    13,     0,
+       0,    14,     0,    15,     0,     0,    16,    17,    18,     0,
+       0,    19,     0,     0,    20,    21,    22,    23,   -67,     1,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       2,     0,     0,     0,     3,    24,    25,     5,     6,     7,
-       8,     1,     0,     0,     9,    10,    11,    12,    13,   -65,
-       0,     0,     0,    15,     0,     0,    16,    17,    18,     0,
-       0,    19,     0,     0,     2,    21,    22,    23,     3,     0,
-       0,     5,     6,     7,     8,     0,   -65,   -65,     9,    10,
-      11,    12,    13,     0,     0,     0,     0,    15,    24,    25,
-      16,    17,    18,     0,     0,    19,     0,     0,     0,    21,
-      22,    23,   -65,     0,     0,     0,     0,     1,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    24,    25,
+      26,     0,     2,     0,    27,   -67,     3,     0,     0,     5,
+       6,     7,     8,    -4,     0,     0,     9,    10,    11,    12,
+      13,     0,     0,     0,     0,    15,     0,     0,    16,    17,
+      18,   -67,     1,    19,     0,     0,     0,    21,    22,    23,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    24,    25,     0,   -65,     0,     0,     0,     0,
-       2,     0,     0,     0,     3,     0,   -65,     5,     6,     7,
-       8,     1,     0,     0,     9,    10,    11,    12,    13,     0,
-       0,     0,     0,    15,     0,     0,    16,    17,    18,     0,
-       0,    19,     0,     0,     2,    21,    22,    23,     3,     0,
-       0,     5,     6,     7,     8,     0,     0,     0,     9,    10,
-      11,    12,    13,     0,     0,     0,     0,    15,    24,    25,
-      16,    17,    18,   -65,     0,    19,     0,     0,     0,    21,
-      22,    23,   -65,     0,     0,     0,     0,     1,     0,     0,
+       0,     0,     0,     0,     0,     2,     0,     0,     0,     3,
+      24,    25,     5,     6,     7,     8,    27,     0,     0,     9,
+      10,    11,    12,    13,     0,   -67,     0,     0,    15,     0,
+       0,    16,    17,    18,     0,     1,    19,     0,     0,     0,
+      21,    22,    23,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     2,     0,
+       0,     0,     3,    24,    25,     5,     6,     7,     8,    27,
+     -67,   -67,     9,    10,    11,    12,    13,     0,   -67,     0,
+       0,    15,     0,     0,    16,    17,    18,     0,     0,    19,
+       0,     0,     0,    21,    22,    23,     0,     1,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    24,    25,     0,     0,   -65,     0,     0,     0,
-       2,     0,     0,     0,     3,     0,   -65,     5,     6,     7,
-       8,     0,     0,     0,     9,    10,    11,    12,    13,     0,
+       0,     0,     0,     0,     0,     0,    24,    25,     0,   -67,
+       2,     0,    27,     0,     3,     0,     0,     5,     6,     7,
+       8,   -67,     0,     0,     9,    10,    11,    12,    13,     0,
        0,     0,     0,    15,     0,     0,    16,    17,    18,     0,
-       0,    19,     0,     0,     0,    21,    22,    23,     0,     0,
+       0,    19,     0,     0,     0,    21,    22,    23,     1,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    24,    25,
-       0,   -65,     0,     0,     0,     0,    45,     0,     0,    46,
-      47,     0,   -65,    48,    49,    50,     2,    51,    52,     0,
-       0,     0,    53,    54,    55,    56,    57,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    58,    59,
-      60,    61,     0,     0,     0,    45,     0,     0,    46,    47,
-       0,     0,    48,    49,    50,     2,    51,    52,     0,     0,
-      62,    53,    54,    55,    56,    57,     0,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,     0,    58,     0,    60,
-       0,     0,     0,    68,    69,     0,     0,     0,     0,    70,
-       0,     0,    71,     0,     0,     0,     0,     0,     0,    62,
-       0,     0,     0,     0,     0,     0,    63,    64,    65,    66,
-      67,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    68,    69,     0,     0,    45,     0,    70,    46,
-      47,    71,    82,    48,    49,    50,     2,    51,    52,     0,
-       0,     0,    53,    54,    55,    56,    57,     0,     0,     0,
-       0,     0,    45,     0,     0,    46,    47,     0,     0,    48,
-      49,    50,     2,    51,    52,     0,     0,     0,    53,    54,
-      55,    56,    57,     0,     0,     0,     0,     0,     0,     0,
-      62,     0,     0,     0,     0,     0,     0,    63,    64,    65,
-      66,    67,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    68,    69,     0,    62,     0,     0,    70,
-       0,     0,    71,    63,    64,    65,    66,    67,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    68,
-      69,     0,     0,    45,     0,    70,    46,    47,    71,     0,
-      48,    49,    50,     2,    51,    52,     0,     0,     0,    53,
-      54,    55,    56,    57,     0,     0,     0,     0,     0,    45,
-       0,     0,    46,    47,     0,     0,    48,    49,    50,     2,
-      51,    52,     0,     0,     0,    53,    54,    55,    56,    57,
-       0,     0,     0,     0,     0,     0,     0,    62,     0,     0,
-       0,     0,     0,     0,    63,    64,    65,    66,    67,   -38,
+       0,     2,     0,   -67,    27,     3,     0,     0,     5,     6,
+       7,     8,     0,   -67,     0,     9,    10,    11,    12,    13,
+       0,     0,     0,     0,    15,     0,     0,    16,    17,    18,
+       0,     0,    19,     0,     0,     0,    21,    22,    23,     1,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    24,
+      25,     0,     2,   -67,     0,    27,     3,     0,     0,     5,
+       6,     7,     8,     0,   -67,     0,     9,    10,    11,    12,
+      13,     0,     0,     0,     0,    15,     0,     0,    16,    17,
+      18,     0,     0,    19,     0,     0,     0,    21,    22,    23,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      68,    69,     0,    62,     0,     0,   102,     0,     0,    71,
-      63,    64,    65,    66,    67,     0,   139,   140,   141,   142,
-     143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
-       0,   159,     0,     0,     0,    71,     0,     0,     0,     0,
-       0,     0,   149,   150,   151,   152,   153,   154,   155,   139,
-     140,   141,   142,   143,   144,     0,   145,   160,   161,   146,
-     147,   148,     0,     0,     0,     0,    58,     0,    60,     0,
-       0,     0,     0,     0,     0,   149,   150,   151,   152,   153,
-     154,   155,   139,   140,   141,   142,   143,   144,     0,   145,
-       0,     0,   146,   147,   148,     0,     0,     0,     0,     0,
-       0,   195,     0,     0,     0,     0,     0,   196,   149,   150,
-     151,   152,   153,   154,   155,   139,   140,   141,   142,   143,
-     144,     0,   145,     0,     0,   146,   147,   148,     0,     0,
-       0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
-     198,   149,   150,   151,   152,   153,   154,   155,   139,   140,
-     141,   142,   143,   144,     0,   145,     0,     0,   146,   147,
-     148,     0,     0,     0,     0,     0,     0,   199,     0,     0,
-       0,     0,     0,   200,   149,   150,   151,   152,   153,   154,
-     155,   139,   140,   141,   142,   143,   144,     0,   145,     0,
-       0,   146,   147,   148,     0,     0,     0,     0,     0,     0,
-     201,     0,     0,     0,     0,     0,   202,   149,   150,   151,
-     152,   153,   154,   155,   139,   140,   141,   142,   143,   144,
-       0,   145,     0,     0,   146,   147,   148,     0,     0,     0,
-       0,     0,     0,   306,     0,     0,     0,     0,     0,     0,
-     149,   150,   151,   152,   153,   154,   155,   139,   140,   141,
-     142,   143,   144,     0,   145,     0,     0,   146,   147,   148,
-       0,     0,     0,     0,     0,     0,   307,     0,     0,     0,
-       0,     0,     0,   149,   150,   151,   152,   153,   154,   155,
-     139,   140,   141,   142,   143,   144,     0,   145,     0,     0,
-     146,   147,   148,     0,     0,     0,     0,     0,     0,   308,
-       0,     0,     0,     0,     0,     0,   149,   150,   151,   152,
-     153,   154,   155,   139,   140,   141,   142,   143,   144,     0,
-     145,     0,     0,   146,   147,   148,     0,     0,     0,     0,
-       0,     0,   309,     0,     0,     0,     0,     0,     0,   149,
-     150,   151,   152,   153,   154,   155,   139,   140,   141,   142,
-     143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
+      24,    25,     0,   -67,     0,     0,    27,     0,     0,    46,
+       0,     0,    47,    48,     0,   -67,    49,    50,    51,     2,
+     131,   132,     0,     0,     0,    54,    55,    56,    57,    58,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   177,   149,   150,   151,   152,   153,   154,   155,   139,
-     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
-     147,   148,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   149,   150,   151,   152,   153,
-     154,   155,   244,   178,     0,     0,     0,     0,     0,     0,
-     139,   140,   245,   142,   143,   144,     0,   145,     0,     0,
-     146,   147,   148,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   149,   150,   151,   152,
-     153,   154,   155,   173,     0,     0,     0,     0,     0,   139,
-     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
-     147,   148,   139,   140,   141,   142,   143,   144,     0,   145,
-       0,     0,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,     0,     0,     0,     0,     0,     0,   149,   150,
-     151,   152,   153,   154,   155,     0,     0,     0,   205,   186,
-     139,   140,   141,   142,   143,   144,     0,   145,     0,     0,
-     146,   147,   148,   139,   140,   141,   142,   143,   144,     0,
-     145,     0,     0,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,     0,     0,     0,     0,   186,     0,   149,
-     150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
-     340,   139,   140,   141,   142,   143,   144,     0,   145,     0,
-       0,   146,   147,   148,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   149,   150,   151,
-     152,   153,   154,   155,     0,     0,     0,   205,   139,   140,
-     141,   142,   143,   144,     0,   145,     0,     0,   146,   147,
-     148,     0,     0,     0,     0,     0,   203,   204,     0,     0,
-       0,     0,     0,     0,   149,   150,   151,   152,   153,   154,
-     155,   139,   140,   141,   142,   143,   144,     0,   145,     0,
-       0,   146,   147,   148,   139,   140,   141,   142,     0,     0,
-       0,   145,     0,     0,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,     0,     0,     0,     0,     0,     0,
-     149,   150,   151,   152,   153,   154,   155
+       0,     0,     0,     0,     0,     0,     0,     0,    46,     0,
+       0,    47,    48,     0,     0,    49,    50,    51,     2,    52,
+      53,     0,     0,    63,    54,    55,    56,    57,    58,     0,
+      64,    65,    66,    67,    68,     0,     0,     0,     0,     0,
+      59,    60,    61,    62,     0,     0,     0,    69,    70,     0,
+       0,     0,     0,    71,     0,     0,    72,     0,   133,     0,
+       0,     0,    63,     0,     0,     0,     0,     0,     0,    64,
+      65,    66,    67,    68,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    69,    70,     0,     0,
+      46,     0,    71,    47,    48,    72,     0,    49,    50,    51,
+       2,    52,    53,     0,     0,     0,    54,    55,    56,    57,
+      58,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    59,     0,    61,     0,     0,     0,     0,    46,
+       0,     0,    47,    48,     0,    83,    49,    50,    51,     2,
+      52,    53,     0,     0,    63,    54,    55,    56,    57,    58,
+       0,    64,    65,    66,    67,    68,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    69,    70,
+       0,     0,     0,     0,    71,     0,     0,    72,     0,     0,
+       0,     0,     0,    63,     0,     0,     0,     0,     0,     0,
+      64,    65,    66,    67,    68,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    69,    70,     0,
+       0,    46,     0,    71,    47,    48,    72,     0,    49,    50,
+      51,     2,    52,    53,     0,     0,     0,    54,    55,    56,
+      57,    58,     0,     0,     0,     0,     0,     0,    46,     0,
+       0,    47,    48,     0,     0,    49,    50,    51,     2,    52,
+      53,     0,     0,     0,    54,    55,    56,    57,    58,     0,
+       0,     0,     0,     0,     0,    63,     0,     0,     0,     0,
+       0,     0,    64,    65,    66,    67,    68,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+      70,     0,    63,     0,     0,    71,     0,     0,    72,    64,
+      65,    66,    67,    68,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    69,    70,     0,     0,
+      46,     0,   104,    47,    48,    72,     0,    49,    50,    51,
+       2,    52,    53,     0,     0,     0,    54,    55,    56,    57,
+      58,     0,     0,    59,     0,    61,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   141,
+     142,   143,   144,   145,   146,     0,   147,     0,     0,   148,
+     149,   150,     0,     0,    63,     0,     0,     0,     0,     0,
+       0,    64,    65,    66,    67,    68,   151,   152,   153,   154,
+     155,   156,   157,     0,   198,     0,     0,     0,     0,     0,
+     199,     0,     0,     0,     0,     0,     0,    72,   141,   142,
+     143,   144,   145,   146,     0,   147,     0,     0,   148,   149,
+     150,     0,     0,     0,     0,     0,     0,     0,   200,     0,
+       0,     0,     0,     0,   201,   151,   152,   153,   154,   155,
+     156,   157,   141,   142,   143,   144,   145,   146,     0,   147,
+       0,     0,   148,   149,   150,     0,     0,     0,     0,     0,
+       0,     0,   202,     0,     0,     0,     0,     0,   203,   151,
+     152,   153,   154,   155,   156,   157,   141,   142,   143,   144,
+     145,   146,     0,   147,     0,     0,   148,   149,   150,     0,
+       0,     0,     0,     0,     0,     0,   204,     0,     0,     0,
+       0,     0,   205,   151,   152,   153,   154,   155,   156,   157,
+     141,   142,   143,   144,   145,   146,     0,   147,     0,     0,
+     148,   149,   150,     0,     0,     0,     0,     0,     0,     0,
+     309,     0,     0,     0,     0,     0,     0,   151,   152,   153,
+     154,   155,   156,   157,   141,   142,   143,   144,   145,   146,
+       0,   147,     0,     0,   148,   149,   150,     0,     0,     0,
+       0,     0,     0,     0,   310,     0,     0,     0,     0,     0,
+       0,   151,   152,   153,   154,   155,   156,   157,   141,   142,
+     143,   144,   145,   146,     0,   147,     0,     0,   148,   149,
+     150,     0,     0,     0,     0,     0,     0,     0,   311,     0,
+       0,     0,     0,     0,     0,   151,   152,   153,   154,   155,
+     156,   157,   141,   142,   143,   144,   145,   146,     0,   147,
+       0,     0,   148,   149,   150,     0,     0,     0,     0,     0,
+       0,     0,   312,     0,     0,     0,     0,     0,     0,   151,
+     152,   153,   154,   155,   156,   157,   141,   142,   143,   144,
+     145,   146,   179,   147,     0,     0,   148,   149,   150,     0,
+     141,   142,   143,   144,   145,   146,     0,   147,     0,     0,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+       0,     0,     0,     0,     0,     0,     0,   151,   152,   153,
+     154,   155,   156,   157,   247,   180,     0,     0,     0,     0,
+       0,     0,   141,   142,   248,   144,   145,   146,     0,   147,
+     175,     0,   148,   149,   150,     0,   141,   142,   143,   144,
+     145,   146,     0,   147,     0,     0,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,     0,     0,     0,     0,
+       0,     0,     0,   151,   152,   153,   154,   155,   156,   157,
+     141,   142,   143,   144,   145,   146,     0,   147,     0,     0,
+     148,   149,   150,   141,   142,   143,   144,   145,   146,     0,
+     147,     0,     0,   148,   149,   150,     0,   151,   152,   153,
+     154,   155,   156,   157,     0,     0,     0,   208,   189,     0,
+     151,   152,   153,   154,   155,   156,   157,     0,     0,     0,
+       0,   189,   141,   142,   143,   144,   145,   146,     0,   147,
+       0,     0,   148,   149,   150,   141,   142,   143,   144,   145,
+     146,     0,   147,     0,     0,   148,   149,   150,     0,   151,
+     152,   153,   154,   155,   156,   157,     0,     0,     0,     0,
+     343,     0,   151,   152,   153,   154,   155,   156,   157,     0,
+       0,     0,   208,   141,   142,   143,   144,   145,   146,     0,
+     147,     0,     0,   148,   149,   150,     0,     0,     0,     0,
+       0,   206,   207,     0,     0,     0,     0,     0,     0,     0,
+     151,   152,   153,   154,   155,   156,   157,   141,   142,   143,
+     144,   145,   146,     0,   147,     0,     0,   148,   149,   150,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   151,   152,   153,   154,   155,   156,
+     157
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   108,     0,    41,   241,    22,   264,   310,     0,   335,
-      97,   367,    43,   261,    96,   102,    69,    51,    18,    19,
-      20,    51,    24,   379,    69,     0,    69,    72,   384,    31,
-      32,    33,    34,    64,    97,    42,    48,   340,    91,    92,
-      93,    94,    56,    57,    44,    90,    91,    92,    93,    94,
-      93,    94,    27,   311,    53,   381,   304,   305,    75,    54,
-      54,    36,    37,    46,   102,    97,    98,    99,   316,    64,
-      64,    71,   320,    75,    76,    77,    78,    94,    85,    24,
-      80,    54,    82,   331,    84,    54,    31,    32,    33,    34,
-      99,    64,    36,    37,    69,    64,    96,    72,    98,    99,
-     138,   101,   102,   101,    96,   353,   106,    98,   108,   346,
-      85,    86,    87,   102,   102,    90,    91,    92,    93,    94,
-     101,    96,    99,    99,   231,   373,    48,   364,    99,   377,
-      54,    55,    56,    57,    99,   383,    53,   374,   138,   387,
-      99,    11,    96,   380,    96,    98,    16,    44,   186,    96,
-     157,    21,    22,   102,    24,   262,    97,    98,    99,   159,
-     160,   161,    14,    96,    34,    17,    18,    87,    98,    21,
-      22,    23,    24,    25,    26,   159,   160,   161,    30,    31,
-      32,    33,    34,    27,    98,    54,    35,    86,    58,    85,
-      99,    54,   192,    63,    64,    65,    66,    67,    85,    53,
-      70,    71,    86,    86,    86,    17,    18,    19,   101,   315,
-     254,   211,    24,   192,   178,   256,    68,    87,    30,    31,
-      32,    33,    34,    75,    76,    77,    78,    79,    24,    25,
-      26,   231,   102,   253,    -1,    31,    32,    33,    34,    91,
-      92,   211,    -1,    -1,    -1,    97,   246,    -1,   100,   119,
-     102,    -1,    -1,   253,   254,   255,   256,    -1,    -1,    -1,
-      -1,   261,   262,    -1,    -1,    -1,    -1,    -1,    -1,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,    -1,    -1,    -1,   296,
-      -1,   298,    -1,   163,   164,   165,    -1,    -1,   168,   169,
-     170,   171,   172,   173,   304,   305,   313,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   316,    -1,    -1,    -1,
-     320,    -1,    -1,    -1,    47,    -1,   196,    50,   198,    -1,
-     200,   331,   202,    -1,    -1,   342,   206,   207,   208,    62,
-     210,    -1,    -1,   343,    -1,    68,    69,    -1,    -1,    -1,
-      -1,    -1,    -1,   353,    -1,    -1,   363,    -1,    -1,    -1,
-      -1,    -1,     0,     1,    -1,    88,   366,    -1,    -1,   239,
-     240,    -1,    -1,   373,   244,   245,    -1,   377,    -1,    -1,
-      -1,    -1,    -1,   383,    -1,    -1,    24,   387,    -1,   112,
-      28,    29,    -1,    31,    32,    33,    34,    -1,    -1,    -1,
-      38,    39,    40,    41,    42,    -1,    -1,    45,    -1,    47,
-      -1,    -1,    50,    51,    52,    -1,    -1,    55,   288,    -1,
-      58,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   301,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
-     310,    -1,    -1,    -1,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     0,     1,    -1,    96,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   336,   337,    -1,    -1,
-     340,    -1,   195,    -1,   197,    -1,   199,    -1,   201,    24,
-     203,   204,    27,    28,   354,    -1,    31,    32,    33,    34,
-     360,    36,    37,    38,    39,    40,    41,    42,    -1,   369,
-      -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,
-      55,    -1,    -1,    -1,    59,    60,    61,    24,    -1,    -1,
-      -1,    28,    -1,    -1,    31,    32,    33,    34,    -1,    -1,
-      -1,    38,    39,    40,    41,    -1,    -1,    82,    83,    -1,
-      85,    86,    87,    50,    -1,    52,    -1,    -1,    -1,    -1,
-      -1,    96,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     0,     1,    -1,    -1,    -1,    -1,    -1,
-      -1,   294,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,
-      -1,    -1,    -1,   306,   307,   308,   309,    24,    -1,    -1,
-      27,    28,    -1,    -1,    31,    32,    33,    34,    -1,    -1,
-      -1,    38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,
-      47,    -1,    -1,    50,    51,    52,     0,     1,    55,    -1,
-      -1,    -1,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,
+       0,   101,   244,   110,    43,     0,     0,    42,   267,    22,
+     338,   313,    69,    97,    69,    72,    54,    51,    18,    19,
+      20,   264,    54,    43,    98,    51,    64,    48,    69,   103,
+      51,    48,    64,    98,    91,    92,    93,    94,    95,    94,
+      95,   343,    63,    46,    64,    45,    53,    86,    69,    70,
+     370,    92,    93,    94,    95,   314,   384,    55,    56,    57,
+      58,    54,   382,    76,   307,   308,   103,   387,    89,   104,
+     100,    64,    72,   102,    54,   103,   319,    56,    57,     0,
+     323,    81,    95,    83,    64,    85,    98,    99,   100,    36,
+      37,   334,   100,   114,    98,    99,   100,    97,   100,    99,
+     100,   101,    97,   103,   104,   140,    27,   349,   108,   103,
+     110,    48,   100,   356,   100,    36,    37,   161,   162,   163,
+     159,    24,    25,    26,    99,   367,    53,   234,    31,    32,
+      33,    34,   100,   376,    97,   377,    97,   380,    44,   160,
+     140,   383,    99,   386,   103,    97,    97,   390,    69,    87,
+      99,    72,    27,    99,   189,    54,    35,   257,   265,   100,
+      86,   161,   162,   163,    85,    86,    87,    85,    54,    35,
+      91,    92,    93,    94,    95,    85,    97,   198,    86,   200,
+      24,   202,    53,   204,    24,   206,   207,    31,    32,    33,
+      34,    31,    32,    33,    34,   195,    62,    63,    64,    65,
+      66,    67,    86,    69,    86,   103,    72,    73,    74,   180,
+     318,   195,   259,   256,   214,   214,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,   234,    75,    76,    77,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   249,
+      -1,    -1,    -1,    -1,    -1,    -1,   256,   257,   258,   259,
+     299,    11,   301,    -1,   264,   265,    16,    -1,    -1,    -1,
+      -1,    21,    22,    -1,    24,    -1,   297,   316,    -1,    17,
+      18,    19,    -1,    -1,    -1,    35,    24,    -1,   309,   310,
+     311,   312,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   345,   307,   308,    59,
+      -1,    -1,    -1,    -1,    64,    65,    66,    67,    68,   319,
+      -1,    71,    72,   323,    -1,    -1,    -1,   366,    -1,    -1,
+      62,    63,    64,    65,   334,    -1,    -1,    69,    88,    -1,
+      72,    73,    74,    -1,    -1,    -1,   346,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,    -1,   356,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,   369,
+      -1,   121,    -1,    -1,    -1,    -1,   376,    -1,    -1,    -1,
+     380,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,    -1,
+     390,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   165,   166,   167,    -1,    -1,
+     170,   171,   172,   173,   174,   175,    -1,    -1,    -1,    -1,
+      24,    -1,    -1,    -1,    28,    -1,    -1,    31,    32,    33,
+      34,    -1,    -1,    -1,    38,    39,    40,    41,    -1,   199,
+      -1,   201,    -1,   203,    -1,   205,    50,    -1,    52,   209,
+     210,   211,    -1,   213,    -1,    59,    60,    61,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
+       1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
+      -1,    -1,   242,   243,    -1,    -1,    -1,   247,   248,    -1,
+      -1,    -1,    -1,    24,    -1,    -1,    27,    28,    -1,    -1,
+      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
+      41,    42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,
+      51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,
+      61,   291,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    44,    -1,   304,    -1,    -1,    -1,    -1,    -1,
+      -1,    82,    83,   313,    85,    86,    87,    88,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    97,    69,    70,    71,
+      72,    73,    74,    -1,    -1,    -1,     0,     1,    -1,   339,
+     340,    -1,    -1,   343,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,   357,    -1,    -1,
+      24,    -1,    -1,   363,    28,    29,    -1,    31,    32,    33,
+      34,    -1,   372,    -1,    38,    39,    40,    41,    42,    -1,
+      -1,    45,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
+      -1,    55,    -1,    -1,    58,    59,    60,    61,     0,     1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      24,    -1,    -1,    -1,    28,    82,    83,    31,    32,    33,
-      34,     1,    -1,    -1,    38,    39,    40,    41,    42,    96,
-      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
-      -1,    55,    -1,    -1,    24,    59,    60,    61,    28,    -1,
-      -1,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
-      40,    41,    42,    -1,    -1,    -1,    -1,    47,    82,    83,
-      50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,
-      60,    61,    96,    -1,    -1,    -1,    -1,     1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
+      84,    -1,    24,    -1,    88,    27,    28,    -1,    -1,    31,
+      32,    33,    34,    97,    -1,    -1,    38,    39,    40,    41,
+      42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,
+      52,     0,     1,    55,    -1,    -1,    -1,    59,    60,    61,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    -1,    85,    -1,    -1,    -1,    -1,
-      24,    -1,    -1,    -1,    28,    -1,    96,    31,    32,    33,
-      34,     1,    -1,    -1,    38,    39,    40,    41,    42,    -1,
-      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
-      -1,    55,    -1,    -1,    24,    59,    60,    61,    28,    -1,
-      -1,    31,    32,    33,    34,    -1,    -1,    -1,    38,    39,
-      40,    41,    42,    -1,    -1,    -1,    -1,    47,    82,    83,
-      50,    51,    52,    87,    -1,    55,    -1,    -1,    -1,    59,
-      60,    61,    96,    -1,    -1,    -1,    -1,     1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    28,
+      82,    83,    31,    32,    33,    34,    88,    -1,    -1,    38,
+      39,    40,    41,    42,    -1,    97,    -1,    -1,    47,    -1,
+      -1,    50,    51,    52,    -1,     1,    55,    -1,    -1,    -1,
+      59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    -1,
+      -1,    -1,    28,    82,    83,    31,    32,    33,    34,    88,
+      36,    37,    38,    39,    40,    41,    42,    -1,    97,    -1,
+      -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,    55,
+      -1,    -1,    -1,    59,    60,    61,    -1,     1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    -1,    -1,    86,    -1,    -1,    -1,
-      24,    -1,    -1,    -1,    28,    -1,    96,    31,    32,    33,
-      34,    -1,    -1,    -1,    38,    39,    40,    41,    42,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    -1,    85,
+      24,    -1,    88,    -1,    28,    -1,    -1,    31,    32,    33,
+      34,    97,    -1,    -1,    38,    39,    40,    41,    42,    -1,
       -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
-      -1,    55,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,
+      -1,    55,    -1,    -1,    -1,    59,    60,    61,     1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      -1,    85,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,
-      18,    -1,    96,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    -1,    -1,    -1,    14,    -1,    -1,    17,    18,
-      -1,    -1,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      68,    30,    31,    32,    33,    34,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    -1,    -1,    -1,    46,    -1,    48,
-      -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,
-      -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    68,
-      -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    92,    -1,    -1,    14,    -1,    97,    17,
-      18,   100,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    14,    -1,    -1,    17,    18,    -1,    -1,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    -1,    68,    -1,    -1,    97,
-      -1,    -1,   100,    75,    76,    77,    78,    79,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    -1,    -1,    14,    -1,    97,    17,    18,   100,    -1,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    -1,    30,
-      31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    14,
-      -1,    -1,    17,    18,    -1,    -1,    21,    22,    23,    24,
+      -1,    24,    -1,    87,    88,    28,    -1,    -1,    31,    32,
+      33,    34,    -1,    97,    -1,    38,    39,    40,    41,    42,
+      -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,
+      -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,     1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      83,    -1,    24,    86,    -1,    88,    28,    -1,    -1,    31,
+      32,    33,    34,    -1,    97,    -1,    38,    39,    40,    41,
+      42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,
+      52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    83,    -1,    85,    -1,    -1,    88,    -1,    -1,    14,
+      -1,    -1,    17,    18,    -1,    97,    21,    22,    23,    24,
       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,    35,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      91,    92,    -1,    68,    -1,    -1,    97,    -1,    -1,   100,
-      75,    76,    77,    78,    79,    -1,    62,    63,    64,    65,
-      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
-      -1,    44,    -1,    -1,    -1,   100,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    62,
-      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
-      73,    74,    -1,    -1,    -1,    -1,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    62,    63,    64,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    88,    89,
-      90,    91,    92,    93,    94,    62,    63,    64,    65,    66,
-      67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,
-      -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-      54,    88,    89,    90,    91,    92,    93,    94,    62,    63,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    14,    -1,
+      -1,    17,    18,    -1,    -1,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    68,    30,    31,    32,    33,    34,    -1,
+      75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
+      46,    47,    48,    49,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    98,    -1,    -1,   101,    -1,   103,    -1,
+      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
+      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,
+      14,    -1,    98,    17,    18,   101,    -1,    21,    22,    23,
+      24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
+      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,    14,
+      -1,    -1,    17,    18,    -1,    20,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    68,    30,    31,    32,    33,    34,
+      -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      -1,    -1,    -1,    -1,    98,    -1,    -1,   101,    -1,    -1,
+      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+      75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    14,    -1,    98,    17,    18,   101,    -1,    21,    22,
+      23,    24,    25,    26,    -1,    -1,    -1,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    14,    -1,
+      -1,    17,    18,    -1,    -1,    21,    22,    23,    24,    25,
+      26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
+      93,    -1,    68,    -1,    -1,    98,    -1,    -1,   101,    75,
+      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,
+      14,    -1,    98,    17,    18,   101,    -1,    21,    22,    23,
+      24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
+      34,    -1,    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,
+      -1,    75,    76,    77,    78,    79,    89,    90,    91,    92,
+      93,    94,    95,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,   101,    62,    63,
       64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    54,    88,    89,    90,    91,    92,    93,
-      94,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
-      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    -1,    -1,    -1,    -1,    -1,    54,    88,    89,    90,
-      91,    92,    93,    94,    62,    63,    64,    65,    66,    67,
-      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    89,    90,    91,    92,    93,    94,    62,    63,    64,
-      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    62,    63,    64,    65,    66,    67,    -1,
-      69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    93,    94,    62,    63,    64,    65,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    54,    89,    90,    91,    92,    93,
+      94,    95,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    89,
+      90,    91,    92,    93,    94,    95,    62,    63,    64,    65,
       66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    54,    88,    89,    90,    91,    92,    93,    94,    62,
-      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
-      73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    54,    96,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
+      -1,    -1,    54,    89,    90,    91,    92,    93,    94,    95,
       62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
       72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    56,    -1,    -1,    -1,    -1,    -1,    62,
-      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
-      73,    74,    62,    63,    64,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    88,    89,    90,    91,    92,
-      93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
-      90,    91,    92,    93,    94,    -1,    -1,    -1,    98,    99,
+      48,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    62,    63,    64,    65,    66,    67,
+      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      -1,    89,    90,    91,    92,    93,    94,    95,    62,    63,
+      64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    95,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    62,    63,    64,    65,
+      66,    67,    54,    69,    -1,    -1,    72,    73,    74,    -1,
+      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
+      72,    73,    74,    89,    90,    91,    92,    93,    94,    95,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    54,    97,    -1,    -1,    -1,    -1,
+      -1,    -1,    62,    63,    64,    65,    66,    67,    -1,    69,
+      56,    -1,    72,    73,    74,    -1,    62,    63,    64,    65,
+      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
       62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
       72,    73,    74,    62,    63,    64,    65,    66,    67,    -1,
-      69,    -1,    -1,    72,    73,    74,    88,    89,    90,    91,
-      92,    93,    94,    -1,    -1,    -1,    -1,    99,    -1,    88,
-      89,    90,    91,    92,    93,    94,    -1,    -1,    -1,    -1,
-      99,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
-      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94,    -1,    -1,    -1,    98,    62,    63,
-      64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    80,    81,    -1,    -1,
-      -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
-      94,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
-      -1,    72,    73,    74,    62,    63,    64,    65,    -1,    -1,
-      -1,    69,    -1,    -1,    72,    73,    74,    88,    89,    90,
-      91,    92,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    89,    90,    91,    92,    93,    94
+      69,    -1,    -1,    72,    73,    74,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    99,   100,    -1,
+      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
+      -1,   100,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    62,    63,    64,    65,    66,
+      67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
+     100,    -1,    89,    90,    91,    92,    93,    94,    95,    -1,
+      -1,    -1,    99,    62,    63,    64,    65,    66,    67,    -1,
+      69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
+      -1,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      89,    90,    91,    92,    93,    94,    95,    62,    63,    64,
+      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1369,69 +1392,69 @@ static const yytype_uint8 yystos[] =
 {
        0,     1,    24,    28,    29,    31,    32,    33,    34,    38,
       39,    40,    41,    42,    45,    47,    50,    51,    52,    55,
-      58,    59,    60,    61,    82,    83,    84,   104,   105,   106,
-     107,   108,   109,   121,   127,   137,   145,   147,   149,   152,
-      96,   148,   151,    51,   138,    14,    17,    18,    21,    22,
-      23,    25,    26,    30,    31,    32,    33,    34,    46,    47,
-      48,    49,    68,    75,    76,    77,    78,    79,    91,    92,
-      97,   100,   106,   131,   133,   134,   135,   136,   146,   160,
-     150,    51,    20,   134,    56,    57,    17,    18,    19,    30,
-     106,   106,   106,   134,   134,   146,   140,   134,   139,   153,
-       0,    96,    97,   134,   158,   134,   128,   158,   128,   106,
-     142,   133,    48,   133,   131,   131,   131,   131,   134,    46,
-     133,   134,   134,   134,   134,   134,   133,   133,   134,    25,
-      26,   102,   106,   134,   161,   162,   163,   164,    97,    62,
-      63,    64,    65,    66,    67,    69,    72,    73,    74,    88,
-      89,    90,    91,    92,    93,    94,   146,   106,   106,    44,
-      70,    71,   106,   128,    54,    64,   134,   133,    54,    64,
-      54,    64,    53,    56,   146,   106,   144,    54,    96,   106,
-     143,   106,   105,   106,   134,   158,    99,   124,   106,   154,
-     155,   155,    99,   133,   134,    48,    54,    48,    54,    48,
-      54,    48,    54,    80,    81,    98,   102,   102,   102,   101,
-      99,    99,   106,   158,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   128,   133,   106,   135,   106,   135,   106,   135,    43,
-      64,   134,   134,   134,    54,    64,    48,   134,   134,   134,
-     134,   134,   134,    99,   120,   120,    99,    98,    99,    98,
-     158,    53,    99,    96,    96,   142,   133,   134,   133,   134,
-     133,   134,   133,   134,   133,   133,   134,   134,   134,   134,
-      25,    26,   106,   164,    98,    99,    98,   155,    44,   134,
-     134,   124,   134,   134,   106,   144,   108,   109,   129,   130,
-     143,   141,   129,   155,   157,   157,    48,    48,    48,    48,
-     132,    96,   134,   116,   110,   113,   119,   133,   128,   128,
-      96,   134,   159,   125,   129,   129,   133,   133,   133,   133,
-     159,   157,   128,   126,   126,   129,    54,    64,    87,   129,
-      99,    98,   122,    27,    98,   129,   117,   111,   114,   125,
-     134,   134,   159,    36,    37,   123,   128,   106,   156,   124,
-      54,    35,    86,   129,   134,    85,    99,   118,   134,    54,
-     128,   124,   106,   119,   112,   134,    85,    53,   129,   124,
-     115,   129,    86,   119,   124,   125,   129,   119,    86,   129,
-      86
+      58,    59,    60,    61,    82,    83,    84,    88,   105,   106,
+     107,   108,   109,   110,   123,   129,   139,   147,   149,   151,
+     154,    97,   150,   153,    51,   140,    14,    17,    18,    21,
+      22,    23,    25,    26,    30,    31,    32,    33,    34,    46,
+      47,    48,    49,    68,    75,    76,    77,    78,    79,    92,
+      93,    98,   101,   107,   133,   135,   136,   137,   138,   148,
+     162,   152,    51,    20,   136,    56,    57,    17,    18,    19,
+      30,   107,   107,   107,   136,   136,   148,   142,   136,   141,
+     155,   122,     0,    97,    98,   136,   160,   136,   130,   160,
+     130,   107,   144,   135,    48,   135,   133,   133,   133,   133,
+     136,    46,   135,   136,   136,   136,   136,   136,   135,   135,
+     136,    25,    26,   103,   107,   136,   163,   164,   165,   166,
+      98,    62,    63,    64,    65,    66,    67,    69,    72,    73,
+      74,    89,    90,    91,    92,    93,    94,    95,   148,   107,
+     107,    44,    70,    71,   107,   130,    54,    64,   136,   135,
+      54,    64,    54,    64,    53,    56,   148,   107,   146,    54,
+      97,   107,   145,   107,   109,   106,   107,   136,   160,   100,
+     126,   107,   156,   157,   157,   100,   135,   136,    48,    54,
+      48,    54,    48,    54,    48,    54,    80,    81,    99,   103,
+     103,   103,   102,   100,   100,   107,   160,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   130,   135,   107,   137,   107,   137,
+     107,   137,    43,    64,   136,   136,   136,    54,    64,    48,
+     136,   136,   136,   136,   136,   136,   100,   121,   121,   100,
+      99,   100,    99,   160,    53,   100,    97,    97,   144,   135,
+     136,   135,   136,   135,   136,   135,   136,   135,   135,   136,
+     136,   136,   136,    25,    26,   107,   166,    99,   100,    99,
+     157,    44,   136,   136,   126,   136,   136,   107,   146,   109,
+     110,   131,   132,   145,   143,   131,   157,   159,   159,    48,
+      48,    48,    48,   134,    97,   136,   117,   111,   114,   120,
+     135,   130,   130,    97,   136,   161,   127,   131,   131,   135,
+     135,   135,   135,   161,   159,   130,   128,   128,   131,    54,
+      64,    87,   131,   100,    99,   124,    27,    99,   131,   118,
+     112,   115,   127,   136,   136,   161,    36,    37,   125,   130,
+     107,   158,   126,    54,    35,    86,   131,   136,    85,   100,
+     119,   136,    54,   130,   126,   107,   120,   113,   136,    85,
+      53,   131,   126,   116,   131,    86,   120,   126,   127,   131,
+     120,    86,   131,    86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   103,   104,   104,   105,   105,   105,   106,   106,   106,
-     106,   106,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   107,   107,   108,
-     108,   109,   109,   109,   110,   111,   112,   109,   113,   114,
-     115,   109,   116,   117,   118,   109,   109,   109,   109,   109,
-     109,   119,   120,   121,   121,   122,   122,   123,   124,   125,
-     126,   127,   128,   129,   129,   130,   130,   131,   131,   131,
-     131,   131,   131,   131,   131,   131,   131,   131,   131,   131,
-     131,   131,   131,   131,   132,   131,   131,   131,   133,   133,
-     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
-     134,   134,   134,   134,   134,   134,   134,   134,   135,   135,
-     135,   135,   135,   135,   135,   135,   135,   135,   136,   136,
-     136,   137,   137,   137,   137,   137,   138,   137,   139,   137,
-     140,   137,   137,   137,   137,   141,   137,   137,   137,   142,
-     142,   142,   143,   143,   143,   144,   144,   144,   145,   145,
-     145,   145,   145,   145,   146,   146,   147,   147,   147,   148,
-     147,   150,   149,   149,   151,   149,   149,   149,   153,   152,
-     154,   155,   155,   155,   156,   156,   156,   157,   158,   158,
-     158,   159,   159,   159,   160,   161,   161,   161,   161,   162,
-     162,   163,   163,   164,   164,   164
+       0,   104,   105,   105,   106,   106,   106,   107,   107,   107,
+     107,   107,   108,   108,   108,   108,   108,   108,   108,   108,
+     108,   108,   108,   108,   108,   108,   108,   108,   108,   109,
+     109,   110,   110,   110,   111,   112,   113,   110,   114,   115,
+     116,   110,   117,   118,   119,   110,   110,   110,   110,   110,
+     110,   110,   120,   121,   122,   123,   123,   124,   124,   125,
+     126,   127,   128,   129,   130,   131,   131,   132,   132,   133,
+     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
+     133,   133,   133,   133,   133,   133,   134,   133,   133,   133,
+     135,   135,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     137,   137,   137,   137,   137,   137,   137,   137,   137,   137,
+     138,   138,   138,   139,   139,   139,   139,   139,   140,   139,
+     141,   139,   142,   139,   139,   139,   139,   143,   139,   139,
+     139,   144,   144,   144,   145,   145,   145,   146,   146,   146,
+     147,   147,   147,   147,   147,   147,   148,   148,   149,   149,
+     149,   150,   149,   152,   151,   151,   153,   151,   151,   151,
+     155,   154,   156,   157,   157,   157,   158,   158,   158,   159,
+     160,   160,   160,   161,   161,   161,   162,   163,   163,   163,
+     163,   164,   164,   165,   165,   166,   166,   166
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1442,21 +1465,21 @@ static const yytype_int8 yyr2[] =
        4,     4,     4,     5,     5,     8,     8,     4,     4,     1,
        1,     1,     1,     9,     0,     0,     0,    15,     0,     0,
        0,    16,     0,     0,     0,    13,     2,     4,     7,     6,
-       2,     0,     0,     9,    11,     0,     2,     6,     0,     0,
-       0,     1,     0,     1,     3,     0,     1,     1,     1,     1,
-       1,     2,     2,     2,     1,     1,     2,     2,     3,     1,
-       4,     4,     1,     4,     0,     7,     4,     1,     1,     3,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     2,     2,
-       4,     6,     4,     6,     4,     6,     4,     6,     1,     2,
-       2,     2,     1,     1,     2,     1,     0,     3,     0,     3,
-       0,     3,     4,     2,     4,     0,     7,     4,     2,     0,
-       1,     3,     0,     1,     3,     0,     1,     3,     1,     2,
-       2,     2,     3,     2,     3,     2,     2,     3,     2,     0,
-       3,     0,     8,     2,     0,     7,     8,     6,     0,     3,
-       1,     0,     1,     3,     0,     1,     3,     0,     0,     1,
-       3,     1,     2,     3,     3,     0,     1,     1,     1,     1,
-       3,     1,     3,     3,     3,     3
+       3,     2,     0,     0,     0,     9,    11,     0,     2,     6,
+       0,     0,     0,     1,     0,     1,     3,     0,     1,     1,
+       1,     1,     1,     2,     2,     2,     1,     1,     2,     2,
+       3,     1,     4,     4,     1,     4,     0,     7,     4,     1,
+       1,     3,     1,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       2,     2,     4,     6,     4,     6,     4,     6,     4,     6,
+       1,     2,     2,     2,     1,     1,     2,     1,     0,     3,
+       0,     3,     0,     3,     4,     2,     4,     0,     7,     4,
+       2,     0,     1,     3,     0,     1,     3,     0,     1,     3,
+       1,     2,     2,     2,     3,     2,     3,     2,     2,     3,
+       2,     0,     3,     0,     8,     2,     0,     7,     8,     6,
+       0,     3,     1,     0,     1,     3,     0,     1,     3,     0,
+       0,     1,     3,     1,     2,     3,     3,     0,     1,     1,
+       1,     1,     3,     1,     3,     3,     3,     3
 };
 
 
@@ -1728,63 +1751,63 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_THEFUNC: /* THEFUNC  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1734 "engines/director/lingo/lingo-gr.cpp"
+#line 1757 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_THEFUNCINOF: /* THEFUNCINOF  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1740 "engines/director/lingo/lingo-gr.cpp"
+#line 1763 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_VARID: /* VARID  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1746 "engines/director/lingo/lingo-gr.cpp"
+#line 1769 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_STRING: /* STRING  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1752 "engines/director/lingo/lingo-gr.cpp"
+#line 1775 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_SYMBOL: /* SYMBOL  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1758 "engines/director/lingo/lingo-gr.cpp"
+#line 1781 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ENDCLAUSE: /* ENDCLAUSE  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1764 "engines/director/lingo/lingo-gr.cpp"
+#line 1787 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1770 "engines/director/lingo/lingo-gr.cpp"
+#line 1793 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tMETHOD: /* tMETHOD  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1776 "engines/director/lingo/lingo-gr.cpp"
+#line 1799 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1782 "engines/director/lingo/lingo-gr.cpp"
+#line 1805 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_on: /* on  */
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1788 "engines/director/lingo/lingo-gr.cpp"
+#line 1811 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2050,31 +2073,31 @@ yyreduce:
   switch (yyn)
     {
   case 8: /* ID: tCAST  */
-#line 243 "engines/director/lingo/lingo-gr.y"
+#line 244 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2056 "engines/director/lingo/lingo-gr.cpp"
+#line 2079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9: /* ID: tFIELD  */
-#line 244 "engines/director/lingo/lingo-gr.y"
+#line 245 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2062 "engines/director/lingo/lingo-gr.cpp"
+#line 2085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* ID: tSCRIPT  */
-#line 245 "engines/director/lingo/lingo-gr.y"
+#line 246 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2068 "engines/director/lingo/lingo-gr.cpp"
+#line 2091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* ID: tWINDOW  */
-#line 246 "engines/director/lingo/lingo-gr.y"
+#line 247 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2074 "engines/director/lingo/lingo-gr.cpp"
+#line 2097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* asgn: tPUT expr tINTO ID  */
-#line 248 "engines/director/lingo/lingo-gr.y"
+#line 249 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2082,19 +2105,19 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2086 "engines/director/lingo/lingo-gr.cpp"
+#line 2109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* asgn: tPUT expr tINTO chunkexpr  */
-#line 255 "engines/director/lingo/lingo-gr.y"
+#line 256 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2094 "engines/director/lingo/lingo-gr.cpp"
+#line 2117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14: /* asgn: tPUT THEMENUITEMSENTITY ID simpleexpr tINTO expr  */
-#line 259 "engines/director/lingo/lingo-gr.y"
+#line 260 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2106,11 +2129,11 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2110 "engines/director/lingo/lingo-gr.cpp"
+#line 2133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* asgn: tPUT expr tAFTER ID  */
-#line 270 "engines/director/lingo/lingo-gr.y"
+#line 271 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2118,19 +2141,19 @@ yyreduce:
 		g_lingo->code1(LC::c_putafter);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2122 "engines/director/lingo/lingo-gr.cpp"
+#line 2145 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* asgn: tPUT expr tAFTER chunkexpr  */
-#line 277 "engines/director/lingo/lingo-gr.y"
+#line 278 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_putafter);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2130 "engines/director/lingo/lingo-gr.cpp"
+#line 2153 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* asgn: tPUT expr tBEFORE ID  */
-#line 280 "engines/director/lingo/lingo-gr.y"
+#line 281 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2138,19 +2161,19 @@ yyreduce:
 		g_lingo->code1(LC::c_putbefore);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2142 "engines/director/lingo/lingo-gr.cpp"
+#line 2165 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18: /* asgn: tPUT expr tBEFORE chunkexpr  */
-#line 287 "engines/director/lingo/lingo-gr.y"
+#line 288 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_putbefore);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2150 "engines/director/lingo/lingo-gr.cpp"
+#line 2173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* asgn: tSET ID tEQ expr  */
-#line 290 "engines/director/lingo/lingo-gr.y"
+#line 291 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2158,11 +2181,11 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2162 "engines/director/lingo/lingo-gr.cpp"
+#line 2185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* asgn: tSET THEENTITY tEQ expr  */
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 298 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2170,11 +2193,11 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2174 "engines/director/lingo/lingo-gr.cpp"
+#line 2197 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 21: /* asgn: tSET ID tTO expr  */
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 305 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2182,11 +2205,11 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2186 "engines/director/lingo/lingo-gr.cpp"
+#line 2209 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* asgn: tSET THEENTITY tTO expr  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2194,33 +2217,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2198 "engines/director/lingo/lingo-gr.cpp"
+#line 2221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* asgn: tSET THEENTITYWITHID expr tTO expr  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2209 "engines/director/lingo/lingo-gr.cpp"
+#line 2232 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 24: /* asgn: tSET THEENTITYWITHID expr tEQ expr  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 325 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2220 "engines/director/lingo/lingo-gr.cpp"
+#line 2243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tTO expr  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2232,11 +2255,11 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2236 "engines/director/lingo/lingo-gr.cpp"
+#line 2259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tEQ expr  */
-#line 342 "engines/director/lingo/lingo-gr.y"
+#line 343 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2248,11 +2271,11 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2252 "engines/director/lingo/lingo-gr.cpp"
+#line 2275 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* asgn: tSET THEOBJECTPROP tTO expr  */
-#line 353 "engines/director/lingo/lingo-gr.y"
+#line 354 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_objectpropassign);
 		g_lingo->codeString((yyvsp[-2].objectprop).obj->c_str());
@@ -2260,11 +2283,11 @@ yyreduce:
 		delete (yyvsp[-2].objectprop).obj;
 		delete (yyvsp[-2].objectprop).prop;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2264 "engines/director/lingo/lingo-gr.cpp"
+#line 2287 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* asgn: tSET THEOBJECTPROP tEQ expr  */
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 361 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_objectpropassign);
 		g_lingo->codeString((yyvsp[-2].objectprop).obj->c_str());
@@ -2272,11 +2295,11 @@ yyreduce:
 		delete (yyvsp[-2].objectprop).obj;
 		delete (yyvsp[-2].objectprop).prop;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2276 "engines/director/lingo/lingo-gr.cpp"
+#line 2299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* stmt: tREPEAT tWHILE lbl expr jumpifz startrepeat stmtlist jump tENDREPEAT  */
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
                                                                                                 {
 		inst start = 0, end = 0;
 		WRITE_UINT32(&start, (yyvsp[-6].code) - (yyvsp[-1].code) + 1);
@@ -2284,32 +2307,32 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
 		(*g_lingo->_currentAssembly)[(yyvsp[-1].code)] = start;	/* looping back */
 		endRepeat((yyvsp[-1].code) + 1, (yyvsp[-6].code));	}
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* $@1: %empty  */
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 391 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2296 "engines/director/lingo/lingo-gr.cpp"
+#line 2319 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* $@2: %empty  */
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_eval);
 				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2303 "engines/director/lingo/lingo-gr.cpp"
+#line 2326 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* $@3: %empty  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_le); }
-#line 2309 "engines/director/lingo/lingo-gr.cpp"
+#line 2332 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* stmt: tREPEAT tWITH ID tEQ expr $@1 varassign $@2 tTO expr $@3 jumpifz startrepeat stmtlist tENDREPEAT  */
-#line 397 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                                                                       {
 
 		int nextPos = g_lingo->_currentAssembly->size();
@@ -2330,32 +2353,32 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
 		endRepeat(pos + 1, nextPos); }
-#line 2334 "engines/director/lingo/lingo-gr.cpp"
+#line 2357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* $@4: %empty  */
-#line 424 "engines/director/lingo/lingo-gr.y"
+#line 425 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2342 "engines/director/lingo/lingo-gr.cpp"
+#line 2365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* $@5: %empty  */
-#line 428 "engines/director/lingo/lingo-gr.y"
+#line 429 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_eval);
 				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2349 "engines/director/lingo/lingo-gr.cpp"
+#line 2372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* $@6: %empty  */
-#line 431 "engines/director/lingo/lingo-gr.y"
+#line 432 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_ge); }
-#line 2355 "engines/director/lingo/lingo-gr.cpp"
+#line 2378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* stmt: tREPEAT tWITH ID tEQ expr $@4 varassign $@5 tDOWN tTO expr $@6 jumpifz startrepeat stmtlist tENDREPEAT  */
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                                 {
 
 		int nextPos = g_lingo->_currentAssembly->size();
@@ -2376,32 +2399,32 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
 		endRepeat(pos + 1, nextPos); }
-#line 2380 "engines/director/lingo/lingo-gr.cpp"
+#line 2403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* $@7: %empty  */
-#line 458 "engines/director/lingo/lingo-gr.y"
+#line 459 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_stackpeek);
 				  g_lingo->codeInt(0);
 				  Common::String count("count");
 				  g_lingo->codeFunc(&count, 1);
 				  g_lingo->code1(LC::c_intpush);	// start counter
 				  g_lingo->codeInt(1); }
-#line 2391 "engines/director/lingo/lingo-gr.cpp"
+#line 2414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* $@8: %empty  */
-#line 465 "engines/director/lingo/lingo-gr.y"
+#line 466 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_stackpeek);	// get counter
 				  g_lingo->codeInt(0);
 				  g_lingo->code1(LC::c_stackpeek);	// get array size
 				  g_lingo->codeInt(2);
 				  g_lingo->code1(LC::c_le); }
-#line 2401 "engines/director/lingo/lingo-gr.cpp"
+#line 2424 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* $@9: %empty  */
-#line 471 "engines/director/lingo/lingo-gr.y"
+#line 472 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_stackpeek);	// get list
 				  g_lingo->codeInt(2);
 				  g_lingo->code1(LC::c_stackpeek);	// get counter
@@ -2412,11 +2435,11 @@ yyreduce:
 				  g_lingo->codeString((yyvsp[-6].s)->c_str());
 				  mVar((yyvsp[-6].s), globalCheck());
 				  g_lingo->code1(LC::c_assign); }
-#line 2416 "engines/director/lingo/lingo-gr.cpp"
+#line 2439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* stmt: tREPEAT tWITH ID tIN expr $@7 lbl $@8 jumpifz $@9 startrepeat stmtlist tENDREPEAT  */
-#line 481 "engines/director/lingo/lingo-gr.y"
+#line 482 "engines/director/lingo/lingo-gr.y"
                                                         {
 
 		int nextPos = g_lingo->_currentAssembly->size();
@@ -2436,11 +2459,11 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[jump + 1] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
 		endRepeat(end2, nextPos); }
-#line 2440 "engines/director/lingo/lingo-gr.cpp"
+#line 2463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* stmt: tNEXT tREPEAT  */
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
                                         {
 		if (g_lingo->_repeatStack.size()) {
 			g_lingo->code2(LC::c_jump, 0);
@@ -2449,49 +2472,61 @@ yyreduce:
 		} else {
 			warning("# LINGO: next repeat not inside repeat block");
 		} }
-#line 2453 "engines/director/lingo/lingo-gr.cpp"
+#line 2476 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* stmt: tWHEN ID tTHEN expr  */
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_whencode);
 		g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2461 "engines/director/lingo/lingo-gr.cpp"
+#line 2484 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* stmt: tTELL expr '\n' tellstart stmtlist lbl tENDTELL  */
-#line 512 "engines/director/lingo/lingo-gr.y"
+#line 513 "engines/director/lingo/lingo-gr.y"
                                                           { g_lingo->code1(LC::c_telldone); }
-#line 2467 "engines/director/lingo/lingo-gr.cpp"
+#line 2490 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* stmt: tTELL expr tTO tellstart stmtoneliner lbl  */
-#line 513 "engines/director/lingo/lingo-gr.y"
+#line 514 "engines/director/lingo/lingo-gr.y"
                                                     { g_lingo->code1(LC::c_telldone); }
-#line 2473 "engines/director/lingo/lingo-gr.cpp"
+#line 2496 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50: /* stmt: error '\n'  */
-#line 514 "engines/director/lingo/lingo-gr.y"
-                                        { yyerrok; }
-#line 2479 "engines/director/lingo/lingo-gr.cpp"
+  case 50: /* stmt: tASSERTERROR asserterrorstart stmtoneliner  */
+#line 515 "engines/director/lingo/lingo-gr.y"
+                                                     { g_lingo->code1(LC::c_asserterrordone); }
+#line 2502 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51: /* startrepeat: %empty  */
+  case 51: /* stmt: error '\n'  */
 #line 516 "engines/director/lingo/lingo-gr.y"
-                                { startRepeat(); }
-#line 2485 "engines/director/lingo/lingo-gr.cpp"
+                                        { yyerrok; }
+#line 2508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 52: /* tellstart: %empty  */
+  case 52: /* startrepeat: %empty  */
 #line 518 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_tell); }
-#line 2491 "engines/director/lingo/lingo-gr.cpp"
+                                { startRepeat(); }
+#line 2514 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 53: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist lbl tENDIF  */
+  case 53: /* tellstart: %empty  */
 #line 520 "engines/director/lingo/lingo-gr.y"
+                                { g_lingo->code1(LC::c_tell); }
+#line 2520 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 54: /* asserterrorstart: %empty  */
+#line 522 "engines/director/lingo/lingo-gr.y"
+                                        { g_lingo->code1(LC::c_asserterror); }
+#line 2526 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 55: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist lbl tENDIF  */
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                                                          {
 		inst else1 = 0, end3 = 0;
 		WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2499,11 +2534,11 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-6].code)] = else1;		/* elsepart */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end3;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2503 "engines/director/lingo/lingo-gr.cpp"
+#line 2538 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist tELSE stmtlist lbl tENDIF  */
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 56: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist tELSE stmtlist lbl tENDIF  */
+#line 531 "engines/director/lingo/lingo-gr.y"
                                                                                                           {
 		inst else1 = 0, end = 0;
 		WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2511,110 +2546,110 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-8].code)] = else1;		/* elsepart */
 		(*g_lingo->_currentAssembly)[(yyvsp[-5].code)] = end;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+#line 2550 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57: /* elseifstmt: tELSIF expr jumpifz tTHEN stmtlist jump  */
-#line 538 "engines/director/lingo/lingo-gr.y"
+  case 59: /* elseifstmt: tELSIF expr jumpifz tTHEN stmtlist jump  */
+#line 542 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		inst else1 = 0;
 		WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = else1;	/* end, if cond fails */
 		g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58: /* jumpifz: %empty  */
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 60: /* jumpifz: %empty  */
+#line 548 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code2(LC::c_jumpifz, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2533 "engines/director/lingo/lingo-gr.cpp"
+#line 2568 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59: /* jump: %empty  */
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 61: /* jump: %empty  */
+#line 552 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code2(LC::c_jump, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2541 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60: /* varassign: %empty  */
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 62: /* varassign: %empty  */
+#line 556 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2549 "engines/director/lingo/lingo-gr.cpp"
+#line 2584 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61: /* if: tIF  */
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 63: /* if: tIF  */
+#line 560 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeLabel(0); }
-#line 2556 "engines/director/lingo/lingo-gr.cpp"
+#line 2591 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62: /* lbl: %empty  */
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 64: /* lbl: %empty  */
+#line 563 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentAssembly->size(); }
-#line 2562 "engines/director/lingo/lingo-gr.cpp"
+#line 2597 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 67: /* simpleexprnoparens: INT  */
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 69: /* simpleexprnoparens: INT  */
+#line 571 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2605 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 68: /* simpleexprnoparens: FLOAT  */
-#line 570 "engines/director/lingo/lingo-gr.y"
+  case 70: /* simpleexprnoparens: FLOAT  */
+#line 574 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2578 "engines/director/lingo/lingo-gr.cpp"
+#line 2613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 69: /* simpleexprnoparens: SYMBOL  */
-#line 573 "engines/director/lingo/lingo-gr.y"
+  case 71: /* simpleexprnoparens: SYMBOL  */
+#line 577 "engines/director/lingo/lingo-gr.y"
                         {											// D3
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 2622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 70: /* simpleexprnoparens: STRING  */
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 72: /* simpleexprnoparens: STRING  */
+#line 581 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2596 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71: /* simpleexprnoparens: '+' simpleexpr  */
-#line 581 "engines/director/lingo/lingo-gr.y"
+  case 73: /* simpleexprnoparens: '+' simpleexpr  */
+#line 585 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[0].code); }
-#line 2602 "engines/director/lingo/lingo-gr.cpp"
+#line 2637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72: /* simpleexprnoparens: '-' simpleexpr  */
-#line 582 "engines/director/lingo/lingo-gr.y"
+  case 74: /* simpleexprnoparens: '-' simpleexpr  */
+#line 586 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2608 "engines/director/lingo/lingo-gr.cpp"
+#line 2643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73: /* simpleexprnoparens: tNOT simpleexpr  */
-#line 583 "engines/director/lingo/lingo-gr.y"
+  case 75: /* simpleexprnoparens: tNOT simpleexpr  */
+#line 587 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_not); }
-#line 2614 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75: /* simpleexprnoparens: THEENTITY  */
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 77: /* simpleexprnoparens: THEENTITY  */
+#line 589 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2623,95 +2658,95 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2627 "engines/director/lingo/lingo-gr.cpp"
+#line 2662 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76: /* simpleexprnoparens: THEENTITYWITHID simpleexpr  */
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 78: /* simpleexprnoparens: THEENTITYWITHID simpleexpr  */
+#line 597 "engines/director/lingo/lingo-gr.y"
                                      {
 		(yyval.code) = g_lingo->code1(LC::c_theentitypush);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2638 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77: /* simpleexprnoparens: THEFUNCINOF simpleexpr  */
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 79: /* simpleexprnoparens: THEFUNCINOF simpleexpr  */
+#line 603 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2646 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78: /* simpleexprnoparens: THEFUNC tOF simpleexpr  */
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 80: /* simpleexprnoparens: THEFUNC tOF simpleexpr  */
+#line 606 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2654 "engines/director/lingo/lingo-gr.cpp"
+#line 2689 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79: /* simpleexprnoparens: THEOBJECTPROP  */
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 81: /* simpleexprnoparens: THEOBJECTPROP  */
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_objectproppush);
 		g_lingo->codeString((yyvsp[0].objectprop).obj->c_str());
 		g_lingo->codeString((yyvsp[0].objectprop).prop->c_str());
 		delete (yyvsp[0].objectprop).obj;
 		delete (yyvsp[0].objectprop).prop; }
-#line 2665 "engines/director/lingo/lingo-gr.cpp"
+#line 2700 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80: /* simpleexprnoparens: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 82: /* simpleexprnoparens: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 615 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_intersects); }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81: /* simpleexprnoparens: tSPRITE expr tWITHIN simpleexpr  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+  case 83: /* simpleexprnoparens: tSPRITE expr tWITHIN simpleexpr  */
+#line 616 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_within); }
-#line 2677 "engines/director/lingo/lingo-gr.cpp"
+#line 2712 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83: /* simpleexprnoparens: ID '(' ID ')'  */
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 85: /* simpleexprnoparens: ID '(' ID ')'  */
+#line 618 "engines/director/lingo/lingo-gr.y"
                                       {
 			g_lingo->code1(LC::c_varpush);
 			g_lingo->codeString((yyvsp[-1].s)->c_str());
 			g_lingo->codeFunc((yyvsp[-3].s), 1);
 			delete (yyvsp[-3].s);
 			delete (yyvsp[-1].s); }
-#line 2688 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84: /* $@10: %empty  */
-#line 620 "engines/director/lingo/lingo-gr.y"
+  case 86: /* $@10: %empty  */
+#line 624 "engines/director/lingo/lingo-gr.y"
                                       { g_lingo->code1(LC::c_varpush); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2694 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85: /* simpleexprnoparens: ID '(' ID ',' $@10 nonemptyarglist ')'  */
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 87: /* simpleexprnoparens: ID '(' ID ',' $@10 nonemptyarglist ')'  */
+#line 625 "engines/director/lingo/lingo-gr.y"
                                                     {
 			g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
 			delete (yyvsp[-6].s);
 			delete (yyvsp[-4].s); }
-#line 2703 "engines/director/lingo/lingo-gr.cpp"
+#line 2738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86: /* simpleexprnoparens: ID '(' arglist ')'  */
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 88: /* simpleexprnoparens: ID '(' arglist ')'  */
+#line 629 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2746 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87: /* simpleexprnoparens: ID  */
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 89: /* simpleexprnoparens: ID  */
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if (g_lingo->_builtinConsts.contains(*(yyvsp[0].s))) {
 			(yyval.code) = g_lingo->code1(LC::c_constpush);
@@ -2720,213 +2755,213 @@ yyreduce:
 		}
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2724 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89: /* simpleexpr: '(' expr ')'  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+  case 91: /* simpleexpr: '(' expr ')'  */
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2730 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90: /* expr: simpleexpr  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 92: /* expr: simpleexpr  */
+#line 644 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2736 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91: /* expr: expr '+' expr  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 93: /* expr: expr '+' expr  */
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2742 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92: /* expr: expr '-' expr  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 94: /* expr: expr '-' expr  */
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2748 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93: /* expr: expr '*' expr  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 95: /* expr: expr '*' expr  */
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2754 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94: /* expr: expr '/' expr  */
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 96: /* expr: expr '/' expr  */
+#line 648 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2760 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95: /* expr: expr tMOD expr  */
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 97: /* expr: expr tMOD expr  */
+#line 649 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2766 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96: /* expr: expr '>' expr  */
-#line 646 "engines/director/lingo/lingo-gr.y"
+  case 98: /* expr: expr '>' expr  */
+#line 650 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2772 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97: /* expr: expr '<' expr  */
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 99: /* expr: expr '<' expr  */
+#line 651 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2778 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98: /* expr: expr tEQ expr  */
-#line 648 "engines/director/lingo/lingo-gr.y"
+  case 100: /* expr: expr tEQ expr  */
+#line 652 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2784 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99: /* expr: expr tNEQ expr  */
-#line 649 "engines/director/lingo/lingo-gr.y"
+  case 101: /* expr: expr tNEQ expr  */
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2790 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100: /* expr: expr tGE expr  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 102: /* expr: expr tGE expr  */
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2796 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101: /* expr: expr tLE expr  */
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 103: /* expr: expr tLE expr  */
+#line 655 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2802 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102: /* expr: expr tAND expr  */
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 104: /* expr: expr tAND expr  */
+#line 656 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103: /* expr: expr tOR expr  */
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 105: /* expr: expr tOR expr  */
+#line 657 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2814 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104: /* expr: expr '&' expr  */
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 106: /* expr: expr '&' expr  */
+#line 658 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2820 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105: /* expr: expr tCONCAT expr  */
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 107: /* expr: expr tCONCAT expr  */
+#line 659 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2826 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106: /* expr: expr tCONTAINS expr  */
-#line 656 "engines/director/lingo/lingo-gr.y"
+  case 108: /* expr: expr tCONTAINS expr  */
+#line 660 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2832 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107: /* expr: expr tSTARTS expr  */
-#line 657 "engines/director/lingo/lingo-gr.y"
+  case 109: /* expr: expr tSTARTS expr  */
+#line 661 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108: /* chunkexpr: tFIELD simpleexprnoparens  */
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 110: /* chunkexpr: tFIELD simpleexprnoparens  */
+#line 663 "engines/director/lingo/lingo-gr.y"
                                         {
 		Common::String field("field");
 		g_lingo->codeFunc(&field, 1); }
-#line 2846 "engines/director/lingo/lingo-gr.cpp"
+#line 2881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109: /* chunkexpr: tCAST simpleexprnoparens  */
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 111: /* chunkexpr: tCAST simpleexprnoparens  */
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                 {
 		Common::String cast("cast");
 		g_lingo->codeFunc(&cast, 1); }
-#line 2854 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110: /* chunkexpr: tCHAR expr tOF simpleexpr  */
-#line 665 "engines/director/lingo/lingo-gr.y"
+  case 112: /* chunkexpr: tCHAR expr tOF simpleexpr  */
+#line 669 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_charOf); }
-#line 2860 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111: /* chunkexpr: tCHAR expr tTO expr tOF simpleexpr  */
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 113: /* chunkexpr: tCHAR expr tTO expr tOF simpleexpr  */
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charToOf); }
-#line 2866 "engines/director/lingo/lingo-gr.cpp"
+#line 2901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112: /* chunkexpr: tITEM expr tOF simpleexpr  */
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 114: /* chunkexpr: tITEM expr tOF simpleexpr  */
+#line 671 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_itemOf); }
-#line 2872 "engines/director/lingo/lingo-gr.cpp"
+#line 2907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113: /* chunkexpr: tITEM expr tTO expr tOF simpleexpr  */
-#line 668 "engines/director/lingo/lingo-gr.y"
+  case 115: /* chunkexpr: tITEM expr tTO expr tOF simpleexpr  */
+#line 672 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemToOf); }
-#line 2878 "engines/director/lingo/lingo-gr.cpp"
+#line 2913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114: /* chunkexpr: tLINE expr tOF simpleexpr  */
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 116: /* chunkexpr: tLINE expr tOF simpleexpr  */
+#line 673 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_lineOf); }
-#line 2884 "engines/director/lingo/lingo-gr.cpp"
+#line 2919 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115: /* chunkexpr: tLINE expr tTO expr tOF simpleexpr  */
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 117: /* chunkexpr: tLINE expr tTO expr tOF simpleexpr  */
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineToOf); }
-#line 2890 "engines/director/lingo/lingo-gr.cpp"
+#line 2925 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116: /* chunkexpr: tWORD expr tOF simpleexpr  */
-#line 671 "engines/director/lingo/lingo-gr.y"
+  case 118: /* chunkexpr: tWORD expr tOF simpleexpr  */
+#line 675 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_wordOf); }
-#line 2896 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117: /* chunkexpr: tWORD expr tTO expr tOF simpleexpr  */
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 119: /* chunkexpr: tWORD expr tTO expr tOF simpleexpr  */
+#line 676 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordToOf); }
-#line 2902 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119: /* reference: tSCRIPT simpleexprnoparens  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+  case 121: /* reference: tSCRIPT simpleexprnoparens  */
+#line 679 "engines/director/lingo/lingo-gr.y"
                                         {
 		Common::String script("script");
 		g_lingo->codeFunc(&script, 1); }
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120: /* reference: tWINDOW simpleexprnoparens  */
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 122: /* reference: tWINDOW simpleexprnoparens  */
+#line 682 "engines/director/lingo/lingo-gr.y"
                                         {
 		Common::String window("window");
 		g_lingo->codeFunc(&window, 1); }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+#line 2953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121: /* proc: tPUT expr  */
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 123: /* proc: tPUT expr  */
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                 {
 		Common::String put("put");
 		g_lingo->codeCmd(&put, 1); }
-#line 2926 "engines/director/lingo/lingo-gr.cpp"
+#line 2961 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124: /* proc: tEXIT tREPEAT  */
-#line 687 "engines/director/lingo/lingo-gr.y"
+  case 126: /* proc: tEXIT tREPEAT  */
+#line 691 "engines/director/lingo/lingo-gr.y"
                                                 {
 		if (g_lingo->_repeatStack.size()) {
 			g_lingo->code2(LC::c_jump, 0);
@@ -2935,289 +2970,289 @@ yyreduce:
 		} else {
 			warning("# LINGO: exit repeat not inside repeat block");
 		} }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125: /* proc: tEXIT  */
-#line 695 "engines/director/lingo/lingo-gr.y"
+  case 127: /* proc: tEXIT  */
+#line 699 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_procret); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126: /* $@11: %empty  */
-#line 696 "engines/director/lingo/lingo-gr.y"
+  case 128: /* $@11: %empty  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 2986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127: /* proc: tGLOBAL $@11 globallist  */
-#line 696 "engines/director/lingo/lingo-gr.y"
+  case 129: /* proc: tGLOBAL $@11 globallist  */
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                                                  { inLast(); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 2992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128: /* $@12: %empty  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 130: /* $@12: %empty  */
+#line 701 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2963 "engines/director/lingo/lingo-gr.cpp"
+#line 2998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129: /* proc: tPROPERTY $@12 propertylist  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+  case 131: /* proc: tPROPERTY $@12 propertylist  */
+#line 701 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 3004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130: /* $@13: %empty  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+  case 132: /* $@13: %empty  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 3010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131: /* proc: tINSTANCE $@13 instancelist  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+  case 133: /* proc: tINSTANCE $@13 instancelist  */
+#line 702 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 3016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132: /* proc: tOPEN expr tWITH expr  */
-#line 699 "engines/director/lingo/lingo-gr.y"
+  case 134: /* proc: tOPEN expr tWITH expr  */
+#line 703 "engines/director/lingo/lingo-gr.y"
                                         {
 		Common::String open("open");
 		g_lingo->codeCmd(&open, 2); }
-#line 2989 "engines/director/lingo/lingo-gr.cpp"
+#line 3024 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133: /* proc: tOPEN expr  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 135: /* proc: tOPEN expr  */
+#line 706 "engines/director/lingo/lingo-gr.y"
                                                 {
 		Common::String open("open");
 		g_lingo->codeCmd(&open, 1); }
-#line 2997 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134: /* proc: ID '(' ID ')'  */
-#line 705 "engines/director/lingo/lingo-gr.y"
+  case 136: /* proc: ID '(' ID ')'  */
+#line 709 "engines/director/lingo/lingo-gr.y"
                                       {
 			g_lingo->code1(LC::c_varpush);
 			g_lingo->codeString((yyvsp[-1].s)->c_str());
 			g_lingo->codeCmd((yyvsp[-3].s), 1);
 			delete (yyvsp[-3].s);
 			delete (yyvsp[-1].s); }
-#line 3008 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135: /* $@14: %empty  */
-#line 711 "engines/director/lingo/lingo-gr.y"
+  case 137: /* $@14: %empty  */
+#line 715 "engines/director/lingo/lingo-gr.y"
                                       { g_lingo->code1(LC::c_varpush); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 3014 "engines/director/lingo/lingo-gr.cpp"
+#line 3049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136: /* proc: ID '(' ID ',' $@14 nonemptyarglist ')'  */
-#line 712 "engines/director/lingo/lingo-gr.y"
+  case 138: /* proc: ID '(' ID ',' $@14 nonemptyarglist ')'  */
+#line 716 "engines/director/lingo/lingo-gr.y"
                                                     {
 			g_lingo->codeCmd((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
 			delete (yyvsp[-6].s);
 			delete (yyvsp[-4].s); }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137: /* proc: ID '(' arglist ')'  */
-#line 716 "engines/director/lingo/lingo-gr.y"
+  case 139: /* proc: ID '(' arglist ')'  */
+#line 720 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeCmd((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 3031 "engines/director/lingo/lingo-gr.cpp"
+#line 3066 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138: /* proc: ID arglist  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 140: /* proc: ID arglist  */
+#line 723 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeCmd((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 3039 "engines/director/lingo/lingo-gr.cpp"
+#line 3074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140: /* globallist: ID  */
-#line 724 "engines/director/lingo/lingo-gr.y"
+  case 142: /* globallist: ID  */
+#line 728 "engines/director/lingo/lingo-gr.y"
                                                         {
 		mVar((yyvsp[0].s), kVarGlobal);
 		delete (yyvsp[0].s); }
-#line 3047 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141: /* globallist: ID ',' globallist  */
-#line 727 "engines/director/lingo/lingo-gr.y"
+  case 143: /* globallist: ID ',' globallist  */
+#line 731 "engines/director/lingo/lingo-gr.y"
                                                 {
 		mVar((yyvsp[-2].s), kVarGlobal);
 		delete (yyvsp[-2].s); }
-#line 3055 "engines/director/lingo/lingo-gr.cpp"
+#line 3090 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143: /* propertylist: ID  */
-#line 732 "engines/director/lingo/lingo-gr.y"
+  case 145: /* propertylist: ID  */
+#line 736 "engines/director/lingo/lingo-gr.y"
                                                         {
 		mVar((yyvsp[0].s), kVarProperty);
 		delete (yyvsp[0].s); }
-#line 3063 "engines/director/lingo/lingo-gr.cpp"
+#line 3098 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144: /* propertylist: ID ',' propertylist  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+  case 146: /* propertylist: ID ',' propertylist  */
+#line 739 "engines/director/lingo/lingo-gr.y"
                                         {
 		mVar((yyvsp[-2].s), kVarProperty);
 		delete (yyvsp[-2].s); }
-#line 3071 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146: /* instancelist: ID  */
-#line 740 "engines/director/lingo/lingo-gr.y"
+  case 148: /* instancelist: ID  */
+#line 744 "engines/director/lingo/lingo-gr.y"
                                                         {
 		mVar((yyvsp[0].s), kVarInstance);
 		delete (yyvsp[0].s); }
-#line 3079 "engines/director/lingo/lingo-gr.cpp"
+#line 3114 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147: /* instancelist: ID ',' instancelist  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 149: /* instancelist: ID ',' instancelist  */
+#line 747 "engines/director/lingo/lingo-gr.y"
                                         {
 		mVar((yyvsp[-2].s), kVarInstance);
 		delete (yyvsp[-2].s); }
-#line 3087 "engines/director/lingo/lingo-gr.cpp"
+#line 3122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148: /* gotofunc: tGOLOOP  */
-#line 754 "engines/director/lingo/lingo-gr.y"
+  case 150: /* gotofunc: tGOLOOP  */
+#line 758 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3093 "engines/director/lingo/lingo-gr.cpp"
+#line 3128 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149: /* gotofunc: tGO tNEXT  */
-#line 755 "engines/director/lingo/lingo-gr.y"
+  case 151: /* gotofunc: tGO tNEXT  */
+#line 759 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3099 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150: /* gotofunc: tGO tPREVIOUS  */
-#line 756 "engines/director/lingo/lingo-gr.y"
+  case 152: /* gotofunc: tGO tPREVIOUS  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3105 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151: /* gotofunc: tGO expr  */
-#line 757 "engines/director/lingo/lingo-gr.y"
+  case 153: /* gotofunc: tGO expr  */
+#line 761 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3114 "engines/director/lingo/lingo-gr.cpp"
+#line 3149 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152: /* gotofunc: tGO expr gotomovie  */
-#line 761 "engines/director/lingo/lingo-gr.y"
+  case 154: /* gotofunc: tGO expr gotomovie  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3123 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153: /* gotofunc: tGO gotomovie  */
-#line 765 "engines/director/lingo/lingo-gr.y"
+  case 155: /* gotofunc: tGO gotomovie  */
+#line 769 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3132 "engines/director/lingo/lingo-gr.cpp"
+#line 3167 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156: /* playfunc: tPLAY expr  */
-#line 773 "engines/director/lingo/lingo-gr.y"
+  case 158: /* playfunc: tPLAY expr  */
+#line 777 "engines/director/lingo/lingo-gr.y"
                                         { // "play #done" is also caught by this
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-#line 3141 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157: /* playfunc: tPLAY expr gotomovie  */
-#line 777 "engines/director/lingo/lingo-gr.y"
+  case 159: /* playfunc: tPLAY expr gotomovie  */
+#line 781 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3150 "engines/director/lingo/lingo-gr.cpp"
+#line 3185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158: /* playfunc: tPLAY gotomovie  */
-#line 781 "engines/director/lingo/lingo-gr.y"
+  case 160: /* playfunc: tPLAY gotomovie  */
+#line 785 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3159 "engines/director/lingo/lingo-gr.cpp"
+#line 3194 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159: /* $@15: %empty  */
-#line 785 "engines/director/lingo/lingo-gr.y"
+  case 161: /* $@15: %empty  */
+#line 789 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3165 "engines/director/lingo/lingo-gr.cpp"
+#line 3200 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160: /* playfunc: tPLAYACCEL $@15 arglist  */
-#line 785 "engines/director/lingo/lingo-gr.y"
+  case 162: /* playfunc: tPLAYACCEL $@15 arglist  */
+#line 789 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeCmd((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3174 "engines/director/lingo/lingo-gr.cpp"
+#line 3209 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161: /* $@16: %empty  */
-#line 815 "engines/director/lingo/lingo-gr.y"
+  case 163: /* $@16: %empty  */
+#line 819 "engines/director/lingo/lingo-gr.y"
              { startDef(); }
-#line 3180 "engines/director/lingo/lingo-gr.cpp"
+#line 3215 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162: /* defn: tMACRO $@16 ID lbl argdef '\n' argstore stmtlist  */
-#line 816 "engines/director/lingo/lingo-gr.y"
+  case 164: /* defn: tMACRO $@16 ID lbl argdef '\n' argstore stmtlist  */
+#line 820 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3190 "engines/director/lingo/lingo-gr.cpp"
+#line 3225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163: /* defn: tFACTORY ID  */
-#line 821 "engines/director/lingo/lingo-gr.y"
+  case 165: /* defn: tFACTORY ID  */
+#line 825 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3196 "engines/director/lingo/lingo-gr.cpp"
+#line 3231 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164: /* $@17: %empty  */
-#line 822 "engines/director/lingo/lingo-gr.y"
+  case 166: /* $@17: %empty  */
+#line 826 "engines/director/lingo/lingo-gr.y"
                   {
 			startDef();
 			Common::String me("me");
 			g_lingo->codeArg(&me);
 			mVar(&me, kVarArgument);
 		}
-#line 3207 "engines/director/lingo/lingo-gr.cpp"
+#line 3242 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165: /* defn: tMETHOD $@17 lbl argdef '\n' argstore stmtlist  */
-#line 827 "engines/director/lingo/lingo-gr.y"
+  case 167: /* defn: tMETHOD $@17 lbl argdef '\n' argstore stmtlist  */
+#line 831 "engines/director/lingo/lingo-gr.y"
                                                     {
 			g_lingo->code1(LC::c_procret);
 			g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1);
 			endDef();
 			delete (yyvsp[-6].s); }
-#line 3217 "engines/director/lingo/lingo-gr.cpp"
+#line 3252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166: /* defn: on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef  */
-#line 832 "engines/director/lingo/lingo-gr.y"
+  case 168: /* defn: on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef  */
+#line 836 "engines/director/lingo/lingo-gr.y"
                                                                    {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3226,192 +3261,192 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3230 "engines/director/lingo/lingo-gr.cpp"
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167: /* defn: on lbl argdef '\n' argstore stmtlist  */
-#line 840 "engines/director/lingo/lingo-gr.y"
+  case 169: /* defn: on lbl argdef '\n' argstore stmtlist  */
+#line 844 "engines/director/lingo/lingo-gr.y"
                                                {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3240 "engines/director/lingo/lingo-gr.cpp"
+#line 3275 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168: /* $@18: %empty  */
-#line 846 "engines/director/lingo/lingo-gr.y"
+  case 170: /* $@18: %empty  */
+#line 850 "engines/director/lingo/lingo-gr.y"
          { startDef(); }
-#line 3246 "engines/director/lingo/lingo-gr.cpp"
+#line 3281 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169: /* on: tON $@18 ID  */
-#line 846 "engines/director/lingo/lingo-gr.y"
+  case 171: /* on: tON $@18 ID  */
+#line 850 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = (yyvsp[0].s); }
-#line 3252 "engines/director/lingo/lingo-gr.cpp"
+#line 3287 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170: /* argname: ID  */
-#line 848 "engines/director/lingo/lingo-gr.y"
+  case 172: /* argname: ID  */
+#line 852 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); delete (yyvsp[0].s); }
-#line 3258 "engines/director/lingo/lingo-gr.cpp"
+#line 3293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171: /* argdef: %empty  */
-#line 850 "engines/director/lingo/lingo-gr.y"
+  case 173: /* argdef: %empty  */
+#line 854 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3264 "engines/director/lingo/lingo-gr.cpp"
+#line 3299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172: /* argdef: argname  */
-#line 851 "engines/director/lingo/lingo-gr.y"
+  case 174: /* argdef: argname  */
+#line 855 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3270 "engines/director/lingo/lingo-gr.cpp"
+#line 3305 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173: /* argdef: argname ',' argdef  */
-#line 852 "engines/director/lingo/lingo-gr.y"
+  case 175: /* argdef: argname ',' argdef  */
+#line 856 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3276 "engines/director/lingo/lingo-gr.cpp"
+#line 3311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175: /* endargdef: ID  */
-#line 855 "engines/director/lingo/lingo-gr.y"
+  case 177: /* endargdef: ID  */
+#line 859 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 3282 "engines/director/lingo/lingo-gr.cpp"
+#line 3317 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176: /* endargdef: endargdef ',' ID  */
-#line 856 "engines/director/lingo/lingo-gr.y"
+  case 178: /* endargdef: endargdef ',' ID  */
+#line 860 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3288 "engines/director/lingo/lingo-gr.cpp"
+#line 3323 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177: /* argstore: %empty  */
-#line 858 "engines/director/lingo/lingo-gr.y"
+  case 179: /* argstore: %empty  */
+#line 862 "engines/director/lingo/lingo-gr.y"
                                         { inDef(); }
-#line 3294 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 178: /* arglist: %empty  */
-#line 860 "engines/director/lingo/lingo-gr.y"
+  case 180: /* arglist: %empty  */
+#line 864 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3300 "engines/director/lingo/lingo-gr.cpp"
+#line 3335 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 179: /* arglist: expr  */
-#line 861 "engines/director/lingo/lingo-gr.y"
+  case 181: /* arglist: expr  */
+#line 865 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3306 "engines/director/lingo/lingo-gr.cpp"
+#line 3341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 180: /* arglist: expr ',' arglist  */
-#line 862 "engines/director/lingo/lingo-gr.y"
+  case 182: /* arglist: expr ',' arglist  */
+#line 866 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3312 "engines/director/lingo/lingo-gr.cpp"
+#line 3347 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 181: /* nonemptyarglist: expr  */
-#line 864 "engines/director/lingo/lingo-gr.y"
+  case 183: /* nonemptyarglist: expr  */
+#line 868 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3318 "engines/director/lingo/lingo-gr.cpp"
+#line 3353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 182: /* nonemptyarglist: expr ','  */
-#line 865 "engines/director/lingo/lingo-gr.y"
+  case 184: /* nonemptyarglist: expr ','  */
+#line 869 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3324 "engines/director/lingo/lingo-gr.cpp"
+#line 3359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 183: /* nonemptyarglist: expr ',' nonemptyarglist  */
-#line 866 "engines/director/lingo/lingo-gr.y"
+  case 185: /* nonemptyarglist: expr ',' nonemptyarglist  */
+#line 870 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3330 "engines/director/lingo/lingo-gr.cpp"
+#line 3365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 184: /* list: '[' valuelist ']'  */
-#line 868 "engines/director/lingo/lingo-gr.y"
+  case 186: /* list: '[' valuelist ']'  */
+#line 872 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[-1].code); }
-#line 3336 "engines/director/lingo/lingo-gr.cpp"
+#line 3371 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 185: /* valuelist: %empty  */
-#line 870 "engines/director/lingo/lingo-gr.y"
+  case 187: /* valuelist: %empty  */
+#line 874 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3342 "engines/director/lingo/lingo-gr.cpp"
+#line 3377 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 186: /* valuelist: ':'  */
-#line 871 "engines/director/lingo/lingo-gr.y"
+  case 188: /* valuelist: ':'  */
+#line 875 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3348 "engines/director/lingo/lingo-gr.cpp"
+#line 3383 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 187: /* valuelist: proplist  */
-#line 872 "engines/director/lingo/lingo-gr.y"
+  case 189: /* valuelist: proplist  */
+#line 876 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3354 "engines/director/lingo/lingo-gr.cpp"
+#line 3389 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 188: /* valuelist: linearlist  */
-#line 873 "engines/director/lingo/lingo-gr.y"
+  case 190: /* valuelist: linearlist  */
+#line 877 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3360 "engines/director/lingo/lingo-gr.cpp"
+#line 3395 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 189: /* linearlist: expr  */
-#line 875 "engines/director/lingo/lingo-gr.y"
+  case 191: /* linearlist: expr  */
+#line 879 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3366 "engines/director/lingo/lingo-gr.cpp"
+#line 3401 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 190: /* linearlist: linearlist ',' expr  */
-#line 876 "engines/director/lingo/lingo-gr.y"
+  case 192: /* linearlist: linearlist ',' expr  */
+#line 880 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3372 "engines/director/lingo/lingo-gr.cpp"
+#line 3407 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 191: /* proplist: proppair  */
-#line 878 "engines/director/lingo/lingo-gr.y"
+  case 193: /* proplist: proppair  */
+#line 882 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3378 "engines/director/lingo/lingo-gr.cpp"
+#line 3413 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 192: /* proplist: proplist ',' proppair  */
-#line 879 "engines/director/lingo/lingo-gr.y"
+  case 194: /* proplist: proplist ',' proppair  */
+#line 883 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3384 "engines/director/lingo/lingo-gr.cpp"
+#line 3419 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 193: /* proppair: SYMBOL ':' expr  */
-#line 881 "engines/director/lingo/lingo-gr.y"
+  case 195: /* proppair: SYMBOL ':' expr  */
+#line 885 "engines/director/lingo/lingo-gr.y"
                           {
 		g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3393 "engines/director/lingo/lingo-gr.cpp"
+#line 3428 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 194: /* proppair: STRING ':' expr  */
-#line 885 "engines/director/lingo/lingo-gr.y"
+  case 196: /* proppair: STRING ':' expr  */
+#line 889 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3402 "engines/director/lingo/lingo-gr.cpp"
+#line 3437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 195: /* proppair: ID ':' expr  */
-#line 889 "engines/director/lingo/lingo-gr.y"
+  case 197: /* proppair: ID ':' expr  */
+#line 893 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3411 "engines/director/lingo/lingo-gr.cpp"
+#line 3446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3415 "engines/director/lingo/lingo-gr.cpp"
+#line 3450 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3610,7 +3645,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 895 "engines/director/lingo/lingo-gr.y"
+#line 899 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index e4a04faa74..b5d69d4d89 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -138,7 +138,8 @@ extern int yydebug;
     tON = 339,                     /* tON  */
     tENDIF = 340,                  /* tENDIF  */
     tENDREPEAT = 341,              /* tENDREPEAT  */
-    tENDTELL = 342                 /* tENDTELL  */
+    tENDTELL = 342,                /* tENDTELL  */
+    tASSERTERROR = 343             /* tASSERTERROR  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -162,7 +163,7 @@ union YYSTYPE
 		Common::String *prop;
 	} objectprop;
 
-#line 166 "engines/director/lingo/lingo-gr.h"
+#line 167 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 47950975d1..c85ab28623 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -213,6 +213,7 @@ static void mVar(Common::String *s, VarType type) {
 %token tAFTER tBEFORE tCONCAT tCONTAINS tSTARTS tCHAR tITEM tLINE tWORD
 %token tSPRITE tINTERSECTS tWITHIN tTELL tPROPERTY
 %token tON tENDIF tENDREPEAT tENDTELL
+%token tASSERTERROR
 
 %type<code> asgn lbl expr if chunkexpr simpleexprnoparens
 %type<code> tellstart reference simpleexpr list valuelist
@@ -511,12 +512,15 @@ stmt: stmtoneliner
 		g_lingo->codeString($ID->c_str()); }
 	| tTELL expr '\n' tellstart stmtlist lbl tENDTELL { g_lingo->code1(LC::c_telldone); }
 	| tTELL expr tTO tellstart stmtoneliner lbl { g_lingo->code1(LC::c_telldone); }
+	| tASSERTERROR asserterrorstart stmtoneliner { g_lingo->code1(LC::c_asserterrordone); }
 	| error	'\n'			{ yyerrok; }
 
 startrepeat:	/* nothing */	{ startRepeat(); }
 
 tellstart:	  /* empty */	{ g_lingo->code1(LC::c_tell); }
 
+asserterrorstart:	/* empty */	{ g_lingo->code1(LC::c_asserterror); }
+
 ifstmt: if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist lbl[end3] tENDIF {
 		inst else1 = 0, end3 = 0;
 		WRITE_UINT32(&else1, $else1 + 1 - $then + 1);
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 00ec28d7df..61439ea7b2 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -355,8 +355,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 74
-#define YY_END_OF_BUFFER 75
+#define YY_NUM_RULES 75
+#define YY_END_OF_BUFFER 76
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -364,43 +364,45 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[317] =
+static const flex_int16_t yy_accept[333] =
     {   0,
-        0,    0,   75,   73,    1,   71,   71,   73,   73,   70,
-       70,   69,   70,   66,   70,   67,   67,   67,   67,   67,
-       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
-       67,   67,   67,    1,   67,    1,   71,    0,   72,    2,
-       65,   68,   69,   64,   62,   63,   67,   67,   67,   67,
-       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
-       10,   24,   67,   67,   67,   67,   67,   67,   67,   33,
-       34,   67,   36,   67,   67,   67,   67,   67,   67,   67,
-       67,   67,   67,   54,   67,   67,   67,    1,    0,   67,
-        2,   68,   67,    4,   67,   67,   67,   67,   67,   67,
-
-       13,   67,   67,   67,   19,   67,   67,   67,   67,   67,
-       67,   29,   67,   67,   32,   67,   67,   67,   67,   42,
-       67,   67,   45,   67,   67,   67,   67,   67,   67,   67,
-       67,   67,    0,   67,   67,   67,    6,    7,   67,    9,
-       12,    0,   15,   67,   67,    0,    0,    0,   67,   67,
-       23,   25,   26,   67,   67,   67,   31,   35,   38,   67,
-       67,   67,   67,   67,   67,   47,    0,   53,   58,   67,
-       67,   56,   61,    0,   67,    3,   67,   67,    0,   13,
-       16,   67,    0,    0,   19,   67,   67,   27,   67,   30,
-        0,   67,   67,   67,   67,   67,   67,   67,   52,   52,
-
-       52,   59,   67,   67,    0,   67,    5,   67,    0,   13,
-       17,    0,    0,    0,   67,   67,   67,    0,   67,   67,
-       67,   43,   44,   55,   46,    0,   52,   52,   60,   57,
-        0,   67,   67,   11,    0,   20,   67,   67,    0,    0,
-       67,   67,   67,    0,    0,    0,   52,   52,    0,   14,
-        8,   18,   21,   67,   28,    0,   67,   40,   41,    0,
-        0,    0,   52,   52,   14,   67,   28,    0,   39,    0,
-        0,    0,    0,   52,   22,   37,   51,   50,   51,    0,
-        0,    0,    0,   52,   50,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   51,   50,
-
-       50,   51,    0,   49,   50,   50,    0,   50,    0,   50,
-        0,    0,    0,    0,   48,    0
+        0,    0,   76,   74,    1,   72,   72,   74,   74,   71,
+       71,   70,   71,   67,   71,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,    1,   68,    1,   72,    0,   73,    2,
+       66,   69,   70,   65,   63,   64,   68,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       10,   24,   68,   68,   68,   68,   68,   68,   68,   33,
+       34,   68,   36,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   54,   68,   68,   68,    1,    0,   68,
+        2,   69,   68,    4,   68,   68,   68,   68,   68,   68,
+
+       13,   68,   68,   68,   19,   68,   68,   68,   68,   68,
+       68,   29,   68,   68,   32,   68,   68,   68,   68,   42,
+       68,   68,   68,   45,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,    0,   68,   68,   68,    6,    7,   68,
+        9,   12,    0,   15,   68,   68,    0,    0,    0,   68,
+       68,   23,   25,   26,   68,   68,   68,   31,   35,   38,
+       68,   68,   68,   68,   68,   68,   68,   47,    0,   53,
+       59,   68,   68,   57,   62,    0,   68,    3,   68,   68,
+        0,   13,   16,   68,    0,    0,   19,   68,   68,   27,
+       68,   30,    0,   68,   68,   68,   68,   68,   68,   68,
+
+       68,   52,   52,   52,   60,   68,   68,    0,   68,    5,
+       68,    0,   13,   17,    0,    0,    0,   68,   68,   68,
+        0,   68,   68,   68,   43,   44,   68,   56,   46,    0,
+       52,   52,   61,   58,    0,   68,   68,   11,    0,   20,
+       68,   68,    0,    0,   68,   68,   68,   68,    0,    0,
+        0,   52,   52,    0,   14,    8,   18,   21,   68,   28,
+        0,   68,   40,   41,   68,    0,    0,    0,   52,   52,
+       14,   68,   28,    0,   39,   68,    0,    0,    0,    0,
+       52,   22,   37,   68,   51,   50,   51,    0,    0,    0,
+        0,   52,   68,   50,    0,    0,    0,    0,    0,   68,
+
+        0,    0,    0,    0,    0,    0,   68,    0,    0,   51,
+       50,   50,   51,    0,   68,   49,   50,   50,    0,   68,
+       50,   68,    0,   50,   68,    0,    0,   55,    0,    0,
+       48,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -429,7 +431,7 @@ static const YY_CHAR yy_ec[256] =
 
         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,    2,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1
@@ -445,87 +447,91 @@ static const YY_CHAR yy_meta[60] =
         5,    5,    5,    5,    5,    5,    5,    5,    5
     } ;
 
-static const flex_int16_t yy_base[331] =
+static const flex_int16_t yy_base[347] =
     {   0,
-        0,   58,  630,  704,   59,  704,  704,  624,    0,  704,
-      620,   55,   54,  704,  615,   49,   51,   57,   46,   50,
+        0,   58,  663,  735,   59,  735,  735,  657,    0,  735,
+      653,   55,   54,  735,  647,   49,   51,   57,   46,   50,
        48,   56,    0,   85,   59,   95,   73,   98,  106,   68,
-      124,  138,   98,  165,  148,   85,  704,  621,  704,    0,
-      704,  615,  122,  704,  704,  704,    0,  120,   73,   93,
-      124,  143,  146,  139,  146,  146,  157,  164,  162,  621,
+      124,  138,   98,  165,  148,   85,  735,  651,  735,    0,
+      735,  645,  122,  735,  735,  735,    0,  120,   73,   93,
+      124,  143,  146,  139,  146,  146,  157,  164,  162,  650,
         0,  160,  167,  166,  177,  166,  183,  163,  171,    0,
-        0,  186,    0,  191,  192,  176,  190,  193,  192,  197,
-      197,  203,  213,    0,  214,  212,  211,  249,  219,  231,
-        0,  612,  230,    0,  217,  223,  229,  228,  236,  246,
-
-      618,  239,  249,  250,  267,  243,  257,  253,  258,  250,
-      259,    0,  265,  252,    0,  264,  258,  262,  275,    0,
-      287,  286,    0,  287,  283,  291,  314,  293,  296,  305,
-      302,  307,  309,  296,  299,  301,    0,    0,  317,    0,
-      614,  613,    0,  317,  322,  310,  314,  317,  323,  316,
-        0,    0,    0,  325,  327,  338,    0,    0,  355,  337,
-      347,  352,  343,  341,  342,    0,  374,    0,    0,  360,
-      347,  357,    0,  350,  355,    0,  366,  363,  384,    0,
-        0,  363,  374,  364,  611,  366,  369,    0,  384,    0,
-      405,  395,  386,  387,  386,  387,  401,  396,  610,  418,
-
-      425,    0,  394,  403,  404,  408,    0,  412,  415,    0,
-        0,  417,  416,  431,  429,  428,  609,  424,  431,  423,
-      428,    0,    0,    0,    0,  460,  462,  461,    0,    0,
-      437,  436,  443,  704,  457,  704,  461,  465,  605,  469,
-      466,  458,  454,  479,  475,  475,  496,  504,  464,    0,
-        0,  704,    0,  471,    0,  487,  492,    0,    0,  491,
-      604,  499,  556,  502,  704,  496,    0,  510,    0,  511,
-      531,  512,  529,  530,    0,  704,  704,    0,  704,  483,
-      534,  532,  535,  466,    0,  539,  536,  368,  538,  560,
-      516,  545,  553,  571,  566,  557,  235,  199,  169,  543,
-
-      559,  158,  144,  127,  119,  116,  572,  594,  597,  595,
-      554,  575,   80,   77,   70,  704,  647,  649,  652,  655,
-      660,  665,  667,  672,  675,  680,  685,  687,  692,  697
+        0,  186,    0,  191,  192,  176,  190,  194,  191,  198,
+      197,  207,  214,    0,  215,  217,  207,  249,  224,  224,
+        0,  640,  237,    0,  217,  216,  229,  229,  237,  247,
+
+      644,  241,  249,  254,  275,  243,  258,  250,  260,  251,
+      266,    0,  266,  251,    0,  258,  254,  258,  273,    0,
+      286,  287,  290,    0,  288,  287,  293,  317,  295,  299,
+      308,  305,  310,  314,  301,  306,  307,    0,    0,  323,
+        0,  643,  638,    0,  324,  331,  318,  321,  325,  339,
+      327,    0,    0,    0,  330,  333,  344,    0,    0,  362,
+      341,  349,  354,  344,  348,  343,  347,    0,  379,    0,
+        0,  364,  357,  363,    0,  357,  362,    0,  372,  371,
+      396,    0,    0,  375,  394,  375,  637,  378,  380,    0,
+      396,    0,  417,  399,  393,  392,  392,  393,  396,  398,
+
+      400,  622,  436,  429,    0,  400,  409,  414,  416,    0,
+      422,  430,    0,    0,  429,  427,  457,  435,  438,  579,
+      433,  447,  433,  435,    0,    0,  442,    0,    0,  477,
+      467,  468,    0,    0,  443,  446,  453,  735,  468,  735,
+      473,  482,  512,  485,  483,  466,  467,  495,  497,  493,
+      491,  490,  515,  488,    0,    0,  735,    0,  497,    0,
+      504,  508,    0,    0,  504,  507,  505,  514,  500,  538,
+      735,  511,    0,  524,    0,  515,  525,  479,  528,  546,
+      547,    0,  735,  532,  735,    0,  735,  392,  551,  567,
+      556,  340,  530,    0,  570,  573,  329,  558,  588,  540,
+
+      558,  560,  583,  586,  591,  579,  593,  318,  199,  169,
+      565,  598,  158,  144,  566,  127,  119,  116,  610,  592,
+      621,  599,  626,  641,  605,  611,  611,    0,   80,   77,
+       70,  735,  678,  680,  683,  686,  691,  696,  698,  703,
+      706,  711,  716,  718,  723,  728
     } ;
 
-static const flex_int16_t yy_def[331] =
+static const flex_int16_t yy_def[347] =
     {   0,
-      316,    1,  316,  316,  316,  316,  316,  317,  318,  316,
-      316,  316,  316,  316,  316,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  316,  319,  316,  316,  317,  316,  320,
-      316,  316,  316,  316,  316,  316,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  316,  316,  319,
-      320,  316,  319,  319,  319,  319,  319,  319,  319,  319,
-
-      319,  319,  319,  319,  316,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  316,  319,  319,  319,  319,  319,  319,  319,
-      319,  321,  319,  319,  319,  316,  316,  316,  319,  319,
-      319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
-      319,  319,  319,  319,  319,  319,  322,  319,  319,  319,
-      319,  319,  319,  316,  319,  319,  319,  319,  316,  323,
-      319,  319,  316,  316,  316,  319,  319,  319,  319,  319,
-      316,  319,  319,  319,  319,  319,  319,  319,  322,  322,
-
-      322,  319,  319,  319,  316,  319,  319,  319,  316,  323,
-      319,  316,  316,  316,  319,  319,  319,  316,  319,  319,
-      319,  319,  319,  319,  319,  316,  322,  322,  319,  319,
-      316,  319,  319,  316,  316,  316,  319,  319,  324,  316,
-      319,  319,  319,  316,  316,  316,  322,  322,  316,  319,
-      319,  316,  319,  319,  325,  316,  319,  319,  319,  316,
-      316,  316,  322,  322,  316,  319,  325,  316,  319,  316,
-      326,  316,  327,  322,  319,  316,  316,  328,  316,  327,
-      327,  327,  327,  322,  328,  316,  327,  327,  327,  316,
-      316,  316,  327,  326,  327,  316,  316,  316,  327,  328,
-
-      328,  327,  316,  316,  328,  328,  329,  330,  316,  330,
-      316,  316,  316,  316,  316,    0,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316
+      332,    1,  332,  332,  332,  332,  332,  333,  334,  332,
+      332,  332,  332,  332,  332,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  332,  335,  332,  332,  333,  332,  336,
+      332,  332,  332,  332,  332,  332,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  332,  332,  335,
+      336,  332,  335,  335,  335,  335,  335,  335,  335,  335,
+
+      335,  335,  335,  335,  332,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  332,  335,  335,  335,  335,  335,  335,
+      335,  335,  337,  335,  335,  335,  332,  332,  332,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
+      335,  335,  335,  335,  335,  335,  335,  335,  338,  335,
+      335,  335,  335,  335,  335,  332,  335,  335,  335,  335,
+      332,  339,  335,  335,  332,  332,  332,  335,  335,  335,
+      335,  335,  332,  335,  335,  335,  335,  335,  335,  335,
+
+      335,  338,  338,  338,  335,  335,  335,  332,  335,  335,
+      335,  332,  339,  335,  332,  332,  332,  335,  335,  335,
+      332,  335,  335,  335,  335,  335,  335,  335,  335,  332,
+      338,  338,  335,  335,  332,  335,  335,  332,  332,  332,
+      335,  335,  340,  332,  335,  335,  335,  335,  332,  332,
+      332,  338,  338,  332,  335,  335,  332,  335,  335,  341,
+      332,  335,  335,  335,  335,  332,  332,  332,  338,  338,
+      332,  335,  341,  332,  335,  335,  332,  342,  332,  343,
+      338,  335,  332,  335,  332,  344,  332,  343,  343,  343,
+      343,  338,  335,  344,  332,  343,  343,  343,  332,  335,
+
+      332,  332,  343,  342,  343,  332,  335,  332,  332,  343,
+      344,  344,  343,  332,  335,  332,  344,  344,  345,  335,
+      346,  335,  332,  346,  335,  332,  332,  335,  332,  332,
+      332,    0,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332
     } ;
 
-static const flex_int16_t yy_nxt[764] =
+static const flex_int16_t yy_nxt[795] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,    4,   12,
        13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
@@ -534,86 +540,90 @@ static const flex_int16_t yy_nxt[764] =
        19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
        29,   30,   31,   32,   23,   23,   33,   23,   23,   34,
        36,   37,   37,   42,   43,   44,   45,   48,   50,   58,
-       51,  315,   54,   55,   49,   56,   35,   52,  315,   59,
-       64,  315,   60,   53,   57,   77,   36,   37,   37,   94,
+       51,  331,   54,   55,   49,   56,   35,   52,  331,   59,
+       64,  331,   60,   53,   57,   77,   36,   37,   37,   94,
        68,   48,   50,   58,   51,   54,   55,   49,   56,   69,
 
        35,   52,   59,   61,   64,   60,   53,   57,   65,   77,
-       62,   95,   66,   94,   68,   63,   70,  304,   85,   86,
-      304,   67,   69,   71,   87,   72,   73,   61,  304,   74,
+       62,   95,   66,   94,   68,   63,   70,  316,   85,   86,
+      316,   67,   69,   71,   87,   72,   73,   61,  316,   74,
        42,   43,   65,   62,   75,   95,   66,   76,   63,   78,
-       70,   79,   85,   86,   67,  307,   71,   87,   72,   73,
-       93,   80,   74,   96,   81,   82,   97,   75,   83,  286,
+       70,   79,   85,   86,   67,  319,   71,   87,   72,   73,
+       93,   80,   74,   96,   81,   82,   97,   75,   83,  295,
        76,   90,  101,   78,   84,   79,   88,   37,   37,   58,
-      286,   98,   99,   93,   80,  100,   96,   81,  102,   82,
+      295,   98,   99,   93,   80,  100,   96,   81,  102,   82,
        97,  103,   83,   89,  108,   90,  101,   84,  104,  106,
       107,  109,  110,   58,   98,   99,  111,  114,  100,  112,
 
-      304,  115,  102,  116,  117,  103,  120,   89,  108,  118,
-      125,  104,  106,  107,  109,  113,  110,  121,  119,  111,
-      114,  122,  123,  112,  115,  124,  126,  116,  117,  120,
-      127,  128,  133,  118,  125,  129,  304,  130,  113,  132,
-      121,  119,  131,  136,  122,  123,  134,  135,  124,  126,
-       88,   37,   37,  137,  127,  128,  133,  138,  139,  129,
-      130,  140,  132,  141,  145,  131,  136,   89,  105,  143,
-      134,  135,  144,  149,  150,  153,  137,  152,  154,  155,
-      138,  139,  157,  151,  140,  146,  156,  141,  145,  158,
-      147,   89,  143,  159,  160,  144,  149,  148,  150,  153,
-
-      152,  154,  161,  155,  162,  157,  151,  163,  164,  146,
-      156,  165,  158,  147,  166,  167,  159,  160,  169,  170,
-      148,  171,  172,  173,  174,  161,  175,  176,  162,  177,
-      178,  163,  164,  181,  165,  182,  186,  166,  183,  168,
-      184,  169,  170,  185,  187,  171,  172,  173,  174,  175,
-      176,  188,  177,  189,  178,  190,  191,  181,  193,  182,
-      186,  183,  168,  184,  194,  195,  185,  187,  192,  294,
-      196,  197,  198,  203,  188,  167,  189,  202,  204,  190,
-      205,  206,  193,  207,  208,  179,  211,  212,  194,  195,
-      213,  215,  192,  196,  197,  198,  203,  200,  216,  201,
-
-      217,  202,  204,  205,  206,  209,  191,  207,  208,  211,
-      219,  212,  220,  213,  215,  221,  222,  223,  224,  226,
-      200,  216,  201,  218,  217,  225,  226,  229,  230,  209,
-      231,  227,  214,  234,  219,  220,  232,  233,  221,  222,
-      223,  235,  224,  236,  237,  238,  241,  218,  225,  146,
-      229,  230,  240,  231,  242,  227,  228,  234,  243,  232,
-      233,  226,  226,  226,  235,  249,  236,  290,  237,  238,
-      241,  250,  251,  146,  252,  240,  244,  242,  253,  228,
-      254,  243,  256,  257,  286,  248,  245,  258,  249,  259,
-      246,  247,  260,  261,  250,  251,  262,  226,  252,  265,
-
-      244,  266,  253,  226,  254,  226,  256,  257,  248,  245,
-      258,  268,  259,  246,  247,  269,  260,  261,  264,  274,
-      262,  270,  265,  272,  266,  275,  263,  276,  277,  279,
-      273,  226,  271,  286,  268,  286,  286,  286,  269,  286,
-      286,  297,  264,  274,  270,  281,  272,  287,  275,  263,
-      288,  276,  277,  279,  286,  282,  289,  273,  284,  283,
-      291,  290,  295,  298,  297,  292,  293,  286,  305,  281,
-      299,  287,  294,  307,  288,  303,  244,  306,  282,  313,
-      289,  284,  283,  302,  291,  295,  296,  298,  292,  293,
-      246,  305,  300,  314,  299,  309,  309,  301,  309,  303,
-
-      244,  306,  313,  285,  285,  271,  239,  302,  278,  296,
-      239,  226,  214,  246,  142,  179,  300,  314,  311,  142,
-      301,   92,  105,  312,   92,   39,   46,   41,   39,  316,
-      285,  285,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  311,  316,  316,  316,  312,   38,   38,  316,
-       38,   38,   38,   40,   40,   47,   47,   47,   91,   91,
-       91,  180,  316,  316,  180,  180,  199,  316,  316,  199,
-      210,  210,  210,  255,  316,  316,  255,  255,  267,  267,
-      267,  278,  316,  316,  278,  278,  280,  316,  316,  280,
-      285,  285,  285,  308,  316,  316,  308,  308,  310,  316,
-
-      310,  310,  310,    3,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316
+      316,  115,  102,  116,  117,  103,  120,   89,  108,  118,
+      126,  104,  106,  107,  109,  113,  110,  121,  119,  111,
+      114,  124,  122,  112,  115,  123,  125,  116,  117,  120,
+      127,  128,  129,  118,  126,  133,  130,  134,  113,  135,
+      121,  119,  131,  137,  124,  122,  138,  132,  123,  125,
+       88,   37,   37,  127,  136,  128,  129,  139,  133,  140,
+      130,  134,  141,  135,  142,  131,  137,   89,  146,  138,
+      132,  144,  145,  150,  153,  151,  105,  154,  136,  155,
+      139,  158,  140,  159,  152,  141,  156,  157,  142,  160,
+      161,   89,  146,  147,  144,  145,  150,  153,  148,  151,
+
+      162,  154,  155,  163,  158,  149,  159,  152,  164,  166,
+      156,  157,  160,  161,  165,  167,  168,  147,  169,  316,
+      171,  148,  172,  162,  173,  174,  175,  163,  149,  176,
+      304,  177,  164,  166,  178,  179,  180,  165,  167,  168,
+      183,  299,  170,  171,  184,  172,  185,  186,  173,  174,
+      175,  187,  188,  176,  177,  189,  190,  178,  179,  191,
+      180,  192,  195,  193,  183,  170,  196,  197,  184,  185,
+      186,  198,  199,  200,  187,  194,  188,  201,  189,  190,
+      169,  205,  191,  206,  207,  192,  195,  208,  209,  210,
+      196,  197,  211,  295,  198,  199,  200,  181,  214,  194,
+
+      201,  216,  203,  218,  204,  205,  206,  215,  207,  219,
+      208,  209,  220,  210,  222,  228,  211,  212,  193,  223,
+      224,  214,  225,  226,  216,  203,  218,  204,  227,  229,
+      230,  215,  219,  233,  234,  221,  220,  230,  222,  228,
+      235,  212,  223,  224,  236,  225,  226,  237,  238,  231,
+      241,  227,  229,  239,  240,  242,  233,  234,  217,  221,
+      232,  244,  245,  235,  246,  247,  248,  236,  230,  230,
+      237,  254,  238,  231,  241,  147,  239,  240,  230,  242,
+      278,  255,  256,  232,  244,  257,  245,  246,  247,  248,
+      258,  230,  253,  249,  254,  263,  252,  259,  261,  147,
+
+      262,  280,  264,  250,  255,  256,  278,  251,  265,  257,
+      266,  267,  268,  243,  258,  253,  230,  249,  263,  252,
+      269,  259,  261,  271,  262,  264,  250,  272,  274,  270,
+      251,  275,  265,  276,  266,  267,  268,  277,  279,  230,
+      282,  283,  285,  269,  284,  287,  271,  280,  230,  293,
+      272,  274,  295,  270,  275,  281,  276,  295,  300,  295,
+      277,  279,  289,  282,  296,  283,  285,  284,  295,  287,
+      307,  295,  290,  293,  295,  292,  291,  298,  309,  281,
+      243,  300,  305,  308,  295,  297,  289,  304,  296,  299,
+      317,  301,  295,  307,  320,  290,  302,  314,  292,  291,
+
+      310,  298,  309,  303,  249,  305,  308,  311,  313,  297,
+      315,  319,  312,  317,  306,  301,  318,  320,  251,  302,
+      322,  314,  323,  230,  310,  325,  303,  323,  249,  330,
+      294,  311,  313,  328,  315,  312,  329,  306,  217,  143,
+      318,  251,  323,  322,  181,  143,  286,  326,  325,   92,
+      294,  105,  327,  330,   92,   39,  328,  294,   46,  329,
+       41,   39,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  326,  332,  332,  332,  327,  332,  294,   38,   38,
+      332,   38,   38,   38,   40,   40,   47,   47,   47,   91,
+       91,   91,  182,  332,  332,  182,  182,  202,  332,  332,
+
+      202,  213,  213,  213,  260,  332,  332,  260,  260,  273,
+      273,  273,  286,  332,  332,  286,  286,  288,  332,  332,
+      288,  294,  294,  294,  321,  332,  332,  321,  321,  324,
+      332,  324,  324,  324,    3,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332
+
     } ;
 
-static const flex_int16_t yy_chk[764] =
+static const flex_int16_t yy_chk[795] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -622,83 +632,87 @@ static const flex_int16_t yy_chk[764] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
         5,    5,    5,   12,   12,   13,   13,   16,   17,   21,
-       18,  315,   19,   20,   16,   20,    2,   18,  314,   22,
-       25,  313,   22,   18,   20,   30,   36,   36,   36,   49,
+       18,  331,   19,   20,   16,   20,    2,   18,  330,   22,
+       25,  329,   22,   18,   20,   30,   36,   36,   36,   49,
        27,   16,   17,   21,   18,   19,   20,   16,   20,   27,
 
         2,   18,   22,   24,   25,   22,   18,   20,   26,   30,
-       24,   50,   26,   49,   27,   24,   28,  306,   33,   33,
-      305,   26,   27,   28,   33,   28,   28,   24,  304,   29,
+       24,   50,   26,   49,   27,   24,   28,  318,   33,   33,
+      317,   26,   27,   28,   33,   28,   28,   24,  316,   29,
        43,   43,   26,   24,   29,   50,   26,   29,   24,   31,
-       28,   31,   33,   33,   26,  303,   28,   33,   28,   28,
-       48,   31,   29,   51,   31,   32,   52,   29,   32,  302,
+       28,   31,   33,   33,   26,  314,   28,   33,   28,   28,
+       48,   31,   29,   51,   31,   32,   52,   29,   32,  313,
        29,   35,   56,   31,   32,   31,   34,   34,   34,   35,
-      299,   53,   54,   48,   31,   55,   51,   31,   57,   32,
+      310,   53,   54,   48,   31,   55,   51,   31,   57,   32,
        52,   58,   32,   34,   63,   35,   56,   32,   59,   62,
        62,   64,   65,   35,   53,   54,   66,   68,   55,   67,
 
-      298,   69,   57,   72,   74,   58,   76,   34,   63,   75,
+      309,   69,   57,   72,   74,   58,   76,   34,   63,   75,
        81,   59,   62,   62,   64,   67,   65,   77,   75,   66,
-       68,   78,   79,   67,   69,   80,   82,   72,   74,   76,
-       83,   85,   89,   75,   81,   85,  297,   86,   67,   87,
-       77,   75,   86,   95,   78,   79,   90,   93,   80,   82,
-       88,   88,   88,   96,   83,   85,   89,   97,   98,   85,
-       86,   99,   87,  100,  104,   86,   95,   88,  105,  102,
-       90,   93,  103,  106,  107,  109,   96,  108,  110,  111,
-       97,   98,  114,  107,   99,  105,  113,  100,  104,  116,
-      105,   88,  102,  117,  118,  103,  106,  105,  107,  109,
-
-      108,  110,  119,  111,  121,  114,  107,  122,  124,  105,
-      113,  125,  116,  105,  126,  127,  117,  118,  128,  129,
-      105,  130,  131,  132,  133,  119,  134,  135,  121,  136,
-      139,  122,  124,  144,  125,  145,  149,  126,  146,  127,
-      147,  128,  129,  148,  150,  130,  131,  132,  133,  134,
-      135,  154,  136,  155,  139,  156,  159,  144,  160,  145,
-      149,  146,  127,  147,  161,  162,  148,  150,  159,  288,
-      163,  164,  165,  171,  154,  167,  155,  170,  172,  156,
-      174,  175,  160,  177,  178,  179,  182,  183,  161,  162,
-      184,  186,  159,  163,  164,  165,  171,  167,  187,  167,
-
-      189,  170,  172,  174,  175,  179,  191,  177,  178,  182,
-      192,  183,  193,  184,  186,  194,  195,  196,  197,  200,
-      167,  187,  167,  191,  189,  198,  201,  203,  204,  179,
-      205,  200,  214,  209,  192,  193,  206,  208,  194,  195,
-      196,  212,  197,  213,  215,  216,  219,  191,  198,  214,
-      203,  204,  218,  205,  220,  200,  201,  209,  221,  206,
-      208,  226,  228,  227,  212,  231,  213,  284,  215,  216,
-      219,  232,  233,  214,  235,  218,  226,  220,  237,  201,
-      238,  221,  240,  241,  280,  228,  226,  242,  231,  243,
-      226,  227,  244,  245,  232,  233,  246,  247,  235,  249,
-
-      226,  254,  237,  264,  238,  248,  240,  241,  228,  226,
-      242,  256,  243,  226,  227,  257,  244,  245,  248,  264,
-      246,  260,  249,  262,  254,  266,  247,  268,  270,  272,
-      273,  274,  271,  282,  256,  281,  283,  287,  257,  289,
-      286,  291,  248,  264,  260,  273,  262,  281,  266,  247,
-      282,  268,  270,  272,  293,  273,  283,  263,  274,  273,
-      286,  290,  289,  292,  291,  286,  287,  295,  300,  273,
-      293,  281,  294,  307,  282,  296,  290,  301,  273,  311,
-      283,  274,  273,  295,  286,  289,  290,  292,  286,  287,
-      290,  300,  294,  312,  293,  308,  310,  294,  309,  296,
-
-      290,  301,  311,  308,  310,  261,  239,  295,  307,  290,
-      217,  199,  185,  290,  142,  141,  294,  312,  309,  101,
-      294,   92,   60,  309,   42,   38,   15,   11,    8,    3,
-      308,  310,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  309,    0,    0,    0,  309,  317,  317,    0,
-      317,  317,  317,  318,  318,  319,  319,  319,  320,  320,
-      320,  321,    0,    0,  321,  321,  322,    0,    0,  322,
-      323,  323,  323,  324,    0,    0,  324,  324,  325,  325,
-      325,  326,    0,    0,  326,  326,  327,    0,    0,  327,
-      328,  328,  328,  329,    0,    0,  329,  329,  330,    0,
-
-      330,  330,  330,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316
+       68,   79,   78,   67,   69,   78,   80,   72,   74,   76,
+       82,   83,   85,   75,   81,   87,   85,   89,   67,   90,
+       77,   75,   86,   95,   79,   78,   96,   86,   78,   80,
+       88,   88,   88,   82,   93,   83,   85,   97,   87,   98,
+       85,   89,   99,   90,  100,   86,   95,   88,  104,   96,
+       86,  102,  103,  106,  108,  107,  105,  109,   93,  110,
+       97,  114,   98,  116,  107,   99,  111,  113,  100,  117,
+      118,   88,  104,  105,  102,  103,  106,  108,  105,  107,
+
+      119,  109,  110,  121,  114,  105,  116,  107,  122,  125,
+      111,  113,  117,  118,  123,  126,  127,  105,  128,  308,
+      129,  105,  130,  119,  131,  132,  133,  121,  105,  134,
+      297,  135,  122,  125,  136,  137,  140,  123,  126,  127,
+      145,  292,  128,  129,  146,  130,  147,  148,  131,  132,
+      133,  149,  150,  134,  135,  151,  155,  136,  137,  156,
+      140,  157,  161,  160,  145,  128,  162,  163,  146,  147,
+      148,  164,  165,  166,  149,  160,  150,  167,  151,  155,
+      169,  172,  156,  173,  174,  157,  161,  176,  177,  179,
+      162,  163,  180,  288,  164,  165,  166,  181,  184,  160,
+
+      167,  186,  169,  188,  169,  172,  173,  185,  174,  189,
+      176,  177,  191,  179,  194,  200,  180,  181,  193,  195,
+      196,  184,  197,  198,  186,  169,  188,  169,  199,  201,
+      204,  185,  189,  206,  207,  193,  191,  203,  194,  200,
+      208,  181,  195,  196,  209,  197,  198,  211,  212,  203,
+      218,  199,  201,  215,  216,  219,  206,  207,  217,  193,
+      204,  221,  222,  208,  223,  224,  227,  209,  231,  232,
+      211,  235,  212,  203,  218,  217,  215,  216,  230,  219,
+      278,  236,  237,  204,  221,  239,  222,  223,  224,  227,
+      241,  252,  232,  230,  235,  246,  231,  242,  244,  217,
+
+      245,  269,  247,  230,  236,  237,  267,  230,  248,  239,
+      249,  250,  251,  243,  241,  232,  253,  230,  246,  231,
+      252,  242,  244,  254,  245,  247,  230,  259,  261,  253,
+      230,  262,  248,  265,  249,  250,  251,  266,  268,  270,
+      272,  274,  277,  252,  276,  279,  254,  280,  281,  284,
+      259,  261,  289,  253,  262,  270,  265,  291,  293,  298,
+      266,  268,  280,  272,  289,  274,  277,  276,  290,  279,
+      300,  295,  280,  284,  296,  281,  280,  291,  302,  270,
+      220,  293,  298,  301,  303,  290,  280,  304,  289,  299,
+      311,  295,  305,  300,  315,  280,  295,  306,  281,  280,
+
+      303,  291,  302,  296,  299,  298,  301,  304,  305,  290,
+      307,  319,  304,  311,  299,  295,  312,  315,  299,  295,
+      320,  306,  321,  202,  303,  322,  296,  323,  299,  327,
+      321,  304,  305,  325,  307,  304,  326,  299,  187,  143,
+      312,  299,  324,  320,  142,  101,  319,  323,  322,   92,
+      324,   60,  323,  327,   42,   38,  325,  321,   15,  326,
+       11,    8,    3,    0,    0,    0,    0,    0,    0,    0,
+        0,  323,    0,    0,    0,  323,    0,  324,  333,  333,
+        0,  333,  333,  333,  334,  334,  335,  335,  335,  336,
+      336,  336,  337,    0,    0,  337,  337,  338,    0,    0,
+
+      338,  339,  339,  339,  340,    0,    0,  340,  340,  341,
+      341,  341,  342,    0,    0,  342,  342,  343,    0,    0,
+      343,  344,  344,  344,  345,    0,    0,  345,  345,  346,
+        0,  346,  346,  346,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332,  332,  332,  332,  332,  332,  332,
+      332,  332,  332,  332
+
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -824,8 +838,8 @@ static int varCheck(int token, const char *name) {
 	return token;
 }
 
-#line 827 "engines/director/lingo/lingo-lex.cpp"
-#line 828 "engines/director/lingo/lingo-lex.cpp"
+#line 841 "engines/director/lingo/lingo-lex.cpp"
+#line 842 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1048,7 +1062,7 @@ YY_DECL
 #line 126 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1051 "engines/director/lingo/lingo-lex.cpp"
+#line 1065 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1076,13 +1090,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 >= 317 )
+				if ( yy_current_state >= 333 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 316 );
+		while ( yy_current_state != 332 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1592,66 +1606,71 @@ YY_RULE_SETUP
 case 55:
 YY_RULE_SETUP
 #line 401 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tSPRITE, "sprite"); }
+{ count(); return varCheck(tASSERTERROR, "scummvmAssertError"); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 402 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWITH, "with"); }
+{ count(); return varCheck(tSPRITE, "sprite"); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 403 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWITHIN, "within"); }
+{ count(); return varCheck(tWITH, "with"); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 404 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWHEN, "when"); }
+{ count(); return varCheck(tWITHIN, "within"); }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 405 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWHILE, "while"); }
+{ count(); return varCheck(tWHEN, "when"); }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 406 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWINDOW; }
+{ count(); return varCheck(tWHILE, "while"); }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 407 "engines/director/lingo/lingo-lex.l"
-{ count(); return varCheck(tWORD, "word"); }
+{ count(); return tWINDOW; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 409 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+#line 408 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tWORD, "word"); }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 410 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tNEQ; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 411 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tGE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 412 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+{ count(); return tLE; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 413 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEQ; }
+{ count(); return tCONCAT; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 415 "engines/director/lingo/lingo-lex.l"
+#line 414 "engines/director/lingo/lingo-lex.l"
+{ count(); return tEQ; }
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 416 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1659,43 +1678,43 @@ YY_RULE_SETUP
 		return VARID;
 	}
 	YY_BREAK
-case 68:
-YY_RULE_SETUP
-#line 421 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return FLOAT; }
-	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 422 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
+{ count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 423 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 71:
-/* rule 71 can match eol */
 YY_RULE_SETUP
 #line 424 "engines/director/lingo/lingo-lex.l"
-{ count(); return '\n'; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 72:
+/* rule 72 can match eol */
 YY_RULE_SETUP
 #line 425 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
+{ count(); return '\n'; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 426 "engines/director/lingo/lingo-lex.l"
-{ count(); }
+{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 428 "engines/director/lingo/lingo-lex.l"
+#line 427 "engines/director/lingo/lingo-lex.l"
+{ count(); }
+	YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 429 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1698 "engines/director/lingo/lingo-lex.cpp"
+#line 1717 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1994,7 +2013,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 >= 317 )
+			if ( yy_current_state >= 333 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2022,11 +2041,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 >= 317 )
+		if ( yy_current_state >= 333 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 316);
+	yy_is_jam = (yy_current_state == 332);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2704,7 +2723,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 428 "engines/director/lingo/lingo-lex.l"
+#line 429 "engines/director/lingo/lingo-lex.l"
 
 
 extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 97bb7015eb..3e5a3768d1 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -398,6 +398,7 @@ the{spc}+[[:alpha:]]+		{
 	}
 then			{ count(); return tTHEN; }
 to				{ count(); return varCheck(tTO, "to"); }
+scummvmAssertError	{ count(); return varCheck(tASSERTERROR, "scummvmAssertError"); }
 sprite			{ count(); return varCheck(tSPRITE, "sprite"); }
 with			{ count(); return varCheck(tWITH, "with"); }
 within			{ count(); return varCheck(tWITHIN, "within"); }
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index db15d3ebea..2df093b4a3 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -156,6 +156,8 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_indef = kStateNone;
 	_indef = kStateNone;
 	_immediateMode = false;
+	_expectError = false;
+	_caughtError = false;
 
 	_linenumber = _colnumber = _bytenumber = 0;
 	_lines[0] = _lines[1] = _lines[2] = nullptr;
@@ -661,6 +663,23 @@ void Lingo::executeHandler(const Common::String &name) {
 	execute(_pc);
 }
 
+void Lingo::lingoError(const char *s, ...) {
+	char buf[1024];
+	va_list va;
+
+	va_start(va, s);
+	vsnprintf(buf, 1024, s, va);
+	va_end(va);
+
+	if (_expectError) {
+		warning("Caught Lingo error: %s", buf);
+		_caughtError = true;
+	} else {
+		warning("BUILDBOT: Uncaught Lingo error: %s", buf);
+		_abort = true;
+	}
+}
+
 void Lingo::resetLingo() {
 	debugC(3, kDebugLingoExec, "Resetting Lingo!");
 
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 08eab3ac1c..1b6f289478 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -320,6 +320,8 @@ public:
 	void dropStack(int nargs);
 	void drop(uint num);
 
+	void lingoError(const char *s, ...);
+
 	void func_mci(const Common::String &name);
 	void func_mciwait(const Common::String &name);
 	void func_beep(int repeats);
@@ -408,6 +410,8 @@ public:
 
 	bool _abort;
 	bool _immediateMode;
+	bool _expectError;
+	bool _caughtError;
 
 	Common::Array<CFrame *> _callstack;
 	TheEntityHash _theEntities;


Commit: 74bb24c2e5a2991cc8dbc4a2103c8e8df63bbe1d
    https://github.com/scummvm/scummvm/commit/74bb24c2e5a2991cc8dbc4a2103c8e8df63bbe1d
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-21T00:20:26-04:00

Commit Message:
DIRECTOR: LINGO: Error on missing cast member

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index e2ffc1ff64..adada4c892 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1632,7 +1632,7 @@ void LB::b_installMenu(int nargs) {
 	const Stxt *stxt = g_director->getCurrentMovie()->getStxt(castId);
 
 	if (!stxt) {
-		warning("installMenu: Unknown cast number #%d", castId);
+		g_lingo->lingoError("installMenu: Unknown cast number #%d", castId);
 		return;
 	}
 
@@ -2317,22 +2317,14 @@ void LB::b_version(int nargs) {
 ///////////////////
 void LB::b_cast(int nargs) {
 	Datum d = g_lingo->pop();
-	if (d.type == STRING) {
-		d = d.asCastId();
-	}
-
-	Datum res = d.asInt();
+	Datum res = d.asCastId();
 	res.type = CASTREF;
 	g_lingo->push(res);
 }
 
 void LB::b_field(int nargs) {
 	Datum d = g_lingo->pop();
-	if (d.type == STRING) {
-		d = d.asCastId();
-	}
-
-	Datum res = d.asInt();
+	Datum res = d.asCastId();
 	res.type = FIELDREF;
 	g_lingo->push(res);
 }
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index e94ca7fb7d..8d156c46ed 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1478,7 +1478,7 @@ Datum Lingo::getTheCast(Datum &id1, int field) {
 		if (field == kTheLoaded) {
 			d = 0;
 		} else {
-			warning("Lingo::getTheCast(): CastMember %s not found", id1.asString().c_str());
+			g_lingo->lingoError("Lingo::getTheCast(): CastMember %s not found", id1.asString().c_str());
 		}
 		return d;
 	}
@@ -1504,7 +1504,7 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
 
 	CastMember *member = movie->getCastMember(id);
 	if (!member) {
-		warning("Lingo::setTheCast(): CastMember %d not found", id);
+		g_lingo->lingoError("Lingo::setTheCast(): CastMember %d not found", id);
 		return;
 	}
 
@@ -1532,12 +1532,12 @@ Datum Lingo::getTheField(Datum &id1, int field) {
 		if (field == kTheLoaded) {
 			d = 0;
 		} else {
-			warning("Lingo::getTheField(): CastMember %d not found", id);
+			g_lingo->lingoError("Lingo::getTheField(): CastMember %d not found", id);
 		}
 		return d;
 	}
 	if (member->_type != kCastText) {
-		warning("Lingo::getTheField(): CastMember %d is not a field", id);
+		g_lingo->lingoError("Lingo::getTheField(): CastMember %d is not a field", id);
 		return d;
 	}
 
@@ -1562,11 +1562,11 @@ void Lingo::setTheField(Datum &id1, int field, Datum &d) {
 
 	CastMember *member = movie->getCastMember(id);
 	if (!member) {
-		warning("Lingo::setTheField(): CastMember %d not found", id);
+		g_lingo->lingoError("Lingo::setTheField(): CastMember %d not found", id);
 		return;
 	}
 	if (member->_type != kCastText) {
-		warning("Lingo::setTheField(): CastMember %d is not a field", id);
+		g_lingo->lingoError("Lingo::setTheField(): CastMember %d is not a field", id);
 		return;
 	}
 
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 2df093b4a3..28ff1ef2f4 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1033,7 +1033,7 @@ int Datum::asCastId() const {
 			if (member)
 				return member->getID();
 			
-			warning("Datum::asCastId: reference to non-existent cast member: %s", asString().c_str());
+			g_lingo->lingoError("Datum::asCastId: reference to non-existent cast member: %s", asString().c_str());
 			return 0;
 		}
 		break;
@@ -1051,9 +1051,6 @@ int Datum::asCastId() const {
 		error("Datum::asCastId: unsupported cast ID type %s", type2str());
 	}
 
-	if (!g_director->getCurrentMovie()->getCastMember(castId))
-		warning("Datum::asCastId: reference to non-existent cast ID: %d", castId);
-
 	return castId;
 }
 


Commit: 1e476e144647b0bcc37e1cd19a303581b6edc130
    https://github.com/scummvm/scummvm/commit/1e476e144647b0bcc37e1cd19a303581b6edc130
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-21T00:20:26-04:00

Commit Message:
DIRECTOR: LINGO: Assert cast member error in tests

Changed paths:
    engines/director/lingo/tests/reference.lingo


diff --git a/engines/director/lingo/tests/reference.lingo b/engines/director/lingo/tests/reference.lingo
index ee4bffe762..a0e06f2682 100644
--- a/engines/director/lingo/tests/reference.lingo
+++ b/engines/director/lingo/tests/reference.lingo
@@ -27,8 +27,8 @@ scummvmAssert(not the loaded of cast 500)
 set test to cast 500
 scummvmAssert(not the loaded of test)
 
-put the loaded of cast "fake" -- should error
-set test to cast "fake" -- should error
+scummvmAssertError put the loaded of cast "fake"
+scummvmAssertError set test to cast "fake"
 
 -- user-defined handlers/factories w/ reference name
 -- (mainly to test grammar, so no factory definition)




More information about the Scummvm-git-logs mailing list