* DiagnosticsConfigurationHandler.cs: Make DiagnosticsConfiguration.Settings
[mono.git] / mcs / bmcs / mb-parser.cs
1 // created by jay 0.7 (c) 1998 Axel.Schreiner@informatik.uni-osnabrueck.de
2
3 #line 2 "mb-parser.jay"
4 //
5 // Mono.MonoBASIC.Parser.cs (from .jay): The Parser for the MonoBASIC compiler
6 //
7 // Authors: A Rafael D Teixeira (rafaelteixeirabr@hotmail.com)
8 //          Anirban Bhattacharjee (banirban@novell.com)
9 //          Jambunathan K (kjambunathan@novell.com)
10 //
11 // Licensed under the terms of the GNU GPL
12 //
13 // Copyright (C) 2001, 2002, 2003, 2004 A Rafael D Teixeira
14 // Copyright (C) 2003, 2004 Novell
15 //
16 //
17
18 namespace Mono.CSharp
19 {
20         using System.Text;
21         using System;
22         using System.Reflection;
23         using System.Collections;
24         using Mono.CSharp;
25
26         /// <summary>
27         ///    The MonoBASIC Parser
28         /// </summary>
29 //      [DefaultParser]
30 //      public class Parser : GenericParser
31 //      {
32         
33
34 //              /// <summary>
35 //              ///   Current block is used to add statements as we find
36 //              ///   them.  
37 //              /// </summary>
38 //              Block      current_block;
39                 
40 //              /// <summary>
41 //              ///   Tmp block is used to store block endings in if/select's
42 //              /// </summary>
43 //              Block      tmp_block;           
44
45 //              /// <summary>
46 //              ///   Tmp block is used to store tmp copies of expressions
47 //              /// </summary>
48 //              Expression      tmp_expr;       
49                 
50 //              /// <summary>
51 //              ///   Tmp catch is used to store catch clauses in try..catch..finally
52 //              /// </summary>
53 //              ArrayList      tmp_catch_clauses;                       
54                 
55 //              /// <summary>
56 //              ///   Current interface is used by the various declaration
57 //              ///   productions in the interface declaration to "add"
58 //              ///   the interfaces as we find them.
59 //              /// </summary>
60 //              Interface  current_interface;
61
62 //              /// <summary>
63 //              ///   This is used by the unary_expression code to resolve
64 //              ///   a name against a parameter.  
65 //              /// </summary>
66 //              Parameters current_local_parameters;
67                 
68 //              /// <summary>
69 //              ///   This are used when parsing parameters in property
70 //              ///   declarations.
71 //              /// </summary>          
72 //              Parameters set_parameters;
73 //              Parameters get_parameters;
74                 
75 //              /// <summary>
76 //              ///   This is used by the sub_header parser to store modifiers
77 //              ///   to be passed to sub/constructor  
78 //              /// </summary>
79 //              int current_modifiers;          
80                         
81 //              /// <summary>
82 //              ///   This is used by the sub_header parser to store attributes
83 //              ///   to be passed to sub/constructor  
84 //              /// </summary>
85 //              Attributes current_attributes;                          
86
87 //              /// <summary>
88 //              ///   Using during property parsing to describe the implicit
89 //              ///   value parameter that is passed to the "set" accessor
90 //              ///   method
91 //              /// </summary>
92 //              string get_implicit_value_parameter_name;
93                 
94 //              // <summary>
95 //              //   Using during property parsing to describe the implicit
96 //              //   value parameter that is passed to the "set" and "get"accesor
97 //              //   methods (properties and indexers).
98 //              // </summary>
99 //              Expression get_implicit_value_parameter_type;
100                 
101 //              /// <summary>
102 //              ///   Using during property parsing to describe the implicit
103 //              ///   value parameter that is passed to the "set" accessor
104 //              ///   method
105 //              /// </summary>
106 //              string set_implicit_value_parameter_name;
107                 
108 //              // <summary>
109 //              //   Using during property parsing to describe the implicit
110 //              //   value parameter that is passed to the "set" and "get"accesor
111 //              //   methods (properties and indexers).
112 //              // </summary>
113 //              Expression set_implicit_value_parameter_type;           
114                 
115 //              Location member_location;
116                 
117 //              // An out-of-band stack.
118 //              //
119 //              Stack oob_stack;
120                 
121 //              ArrayList current_rank_specifiers;
122
123 //              DoOptions do_type;
124 //              //
125 //              // Switch stack.
126 //              //
127 //              Stack switch_stack;
128                 
129 //              // Expression stack for nested ifs
130 //              Stack expr_stack; 
131                 
132 //              Stack tmp_blocks;
133 //              Stack statement_stack;
134
135 //              // A stack for With expressions.
136 //              //
137 //              Stack with_stack;
138         
139                 
140 //              static public bool InitialOptionExplicit = false;
141 //              static public bool InitialOptionStrict = false;
142 //              static public bool InitialOptionCompareBinary = true;
143 //              static public ArrayList ImportsList = null;
144
145 //              bool OptionExplicit;
146 //              bool OptionStrict;
147 //              bool OptionCompareBinary;
148
149 //              static public bool UseExtendedSyntax; // for ".mbs" files
150
151 //              bool implicit_modifiers;
152                 
153 //              public override string[] extensions()
154 //              {
155 //                      string [] list = { ".vb", ".mbs" };
156 //                      return list;
157 //              }
158
159
160         /// <summary>
161         ///    The C# Parser
162         /// </summary>
163         public class CSharpParser {
164                 NamespaceEntry  current_namespace;
165                 TypeContainer   current_container;
166                 TypeContainer   current_class;
167         
168                 IIteratorContainer iterator_container;
169
170                 /// <summary>
171                 ///   Current block is used to add statements as we find
172                 ///   them.  
173                 /// </summary>
174                 Block      current_block, top_current_block;
175
176                 /// <summary>
177                 ///   This is used by the unary_expression code to resolve
178                 ///   a name against a parameter.  
179                 /// </summary>
180                 Parameters current_local_parameters;
181
182                 /// <summary>
183                 ///   Using during property parsing to describe the implicit
184                 ///   value parameter that is passed to the "set" and "get"accesor
185                 ///   methods (properties and indexers).
186                 /// </summary>
187                 Expression implicit_value_parameter_type;
188                 Parameters indexer_parameters;
189
190                 /// <summary>
191                 ///   Used to determine if we are parsing the get/set pair
192                 ///   of an indexer or a property
193                 /// </summmary>
194                 bool  parsing_indexer;
195
196                 ///
197                 /// An out-of-band stack.
198                 ///
199                 Stack oob_stack;
200
201                 ///
202                 /// Switch stack.
203                 ///
204                 Stack switch_stack;
205
206                 static public int yacc_verbose_flag;
207
208                 // Name of the file we are parsing
209                 public string name;
210
211                 ///
212                 /// The current file.
213                 ///
214                 SourceFile file;
215                 
216                 ///   This is used by the sub_header parser to store modifiers
217                 ///   to be passed to sub/constructor  
218                 int current_modifiers;          
219                         
220                 ///   This is used by the sub_header parser to store attributes
221                 ///   to be passed to sub/constructor  
222                 Attributes current_attributes;                          
223
224                 ///   This is used by the attributes parser to syntactically
225                 ///   validate the attribute rules  
226                 bool allow_global_attribs = true;
227
228                 bool expecting_global_attribs = false;
229                 bool expecting_local_attribs = false;
230
231                 bool local_attrib_section_added = false;
232
233                 ///FIXME
234                 ArrayList current_rank_specifiers;
235
236                 /// <summary>
237                 ///   Using during property parsing to describe the implicit
238                 ///   value parameter that is passed to the "set" accessor
239                 ///   method
240                 /// </summary>
241                 string get_implicit_value_parameter_name;
242                 
243                 // <summary>
244                 //   Using during property parsing to describe the implicit
245                 //   value parameter that is passed to the "set" and "get"accesor
246                 //   methods (properties and indexers).
247                 // </summary>
248                 Expression get_implicit_value_parameter_type;
249                 
250                 /// <summary>
251                 ///   Using during property parsing to describe the implicit
252                 ///   value parameter that is passed to the "set" accessor
253                 ///   method
254                 /// </summary>
255                 string set_implicit_value_parameter_name;
256                 
257                 // <summary>
258                 //   Using during property parsing to describe the implicit
259                 //   value parameter that is passed to the "set" and "get"accesor
260                 //   methods (properties and indexers).
261                 // </summary>
262                 Expression set_implicit_value_parameter_type;           
263
264                 /// <summary>
265                 ///   This are used when parsing parameters in property
266                 ///   declarations.
267                 /// </summary>          
268                 Parameters set_parameters;
269                 Parameters get_parameters;
270
271 //              static public ArrayList ImportsList = null;
272
273                 bool implicit_modifiers;
274
275
276                 /// <summary>
277                 ///   This is used as a helper class for handling of
278                 ///   pre-processor statements.
279                 /// </summary>          
280
281                 // FIXME: This class MBASException is actually a kludge 
282                 // It can be done away with a more elegant replacement.
283
284                 public class MBASException : ApplicationException
285                 {
286                         public int code;
287                         public Location loc;
288
289                         public MBASException(int code, Location loc, string text) : base(text)
290                         {
291                                 this.code = code;
292                                 this.loc = loc;
293                         }
294                 }
295
296
297
298                 public class IfElseStateMachine {
299                         
300                         public enum State {
301                                 START,
302                                 IF_SEEN,
303                                 ELSEIF_SEEN,
304                                 ELSE_SEEN,
305                                 ENDIF_SEEN,
306                                 MAX
307                         }
308                 
309                         public enum Token {
310                                 START,
311                                 IF,
312                                 ELSEIF,
313                                 ELSE,
314                                 ENDIF,
315                                 EOF,
316                                 MAX
317                         }
318
319                         State state;
320                         Stack stateStack;
321
322                         public static Hashtable errStrings = new Hashtable();
323
324                         int err=0;
325                         static int[,] errTable = new int[(int)State.MAX, (int)Token.MAX];
326                 
327                         static IfElseStateMachine()
328                         {
329                                 // FIXME: Fix both the error nos and the error strings. 
330                                 // Currently the error numbers and the error strings are 
331                                 // just placeholders for getting the state-machine going.
332
333                                 errStrings.Add(0, "");
334                                 errStrings.Add(30012, "#If must end with a matching #End If");
335                                 errStrings.Add(30013, "#ElseIf, #Else or #End If must be preceded by a matching #If");
336                                 errStrings.Add(30014, "#ElseIf must be preceded by a matching #If or #ElseIf");
337                                 errStrings.Add(30028, "#Else must be preceded by a matching #If or #ElseIf");
338                                 errStrings.Add(32030, "#ElseIf cannot follow #Else as part of #If block");
339
340                                 errTable[(int)State.START, (int)Token.IF] = 0;
341                                 errTable[(int)State.START, (int)Token.ELSEIF] = 30014;
342                                 errTable[(int)State.START, (int)Token.ELSE] = 30028;
343                                 errTable[(int)State.START, (int)Token.ENDIF] = 30013;
344                                 errTable[(int)State.START, (int)Token.EOF] = 0;
345
346                                 errTable[(int)State.IF_SEEN, (int)Token.IF] = 0;
347                                 errTable[(int)State.IF_SEEN, (int)Token.ELSEIF] = 0;
348                                 errTable[(int)State.IF_SEEN, (int)Token.ELSE] = 0;
349                                 errTable[(int)State.IF_SEEN, (int)Token.ENDIF] = 0;
350                                 errTable[(int)State.IF_SEEN, (int)Token.EOF] = 30012;
351
352                                 errTable[(int)State.ELSEIF_SEEN, (int)Token.IF] = 0;
353                                 errTable[(int)State.ELSEIF_SEEN, (int)Token.ELSEIF] = 0;
354                                 errTable[(int)State.ELSEIF_SEEN, (int)Token.ELSE] = 0;
355                                 errTable[(int)State.ELSEIF_SEEN, (int)Token.ENDIF] = 0;
356                                 errTable[(int)State.ELSEIF_SEEN, (int)Token.EOF] = 30012;
357
358                                 errTable[(int)State.ELSE_SEEN, (int)Token.IF] = 0;
359                                 errTable[(int)State.ELSE_SEEN, (int)Token.ELSEIF] = 32030;
360                                 errTable[(int)State.ELSE_SEEN, (int)Token.ELSE] = 32030;
361                                 errTable[(int)State.ELSE_SEEN, (int)Token.ENDIF] = 0;
362                                 errTable[(int)State.ELSE_SEEN, (int)Token.EOF] = 30012;
363
364                                 errTable[(int)State.ENDIF_SEEN, (int)Token.IF] = 0;
365                                 errTable[(int)State.ENDIF_SEEN, (int)Token.ELSEIF] = 30014;
366                                 errTable[(int)State.ENDIF_SEEN, (int)Token.ELSE] = 30028;
367                                 errTable[(int)State.ENDIF_SEEN, (int)Token.ENDIF] = 30013;
368                                 errTable[(int)State.ENDIF_SEEN, (int)Token.EOF] = 0;
369                         }
370
371                         public IfElseStateMachine()
372                         {
373                                 state = State.START;
374
375                                 stateStack = new Stack();
376                                 stateStack.Push(state);
377                         }
378
379                         // The parameter here need not be qualified with IfElseStateMachine
380                         // But it hits a bug in mcs. So temporarily scoping it so that builds
381                         // are not broken.
382
383                         public void HandleToken(IfElseStateMachine.Token tok)
384                         {       
385                                 err = (int) errTable[(int)state, (int)tok];
386
387                                 if(err != 0)
388                                         throw new ApplicationException("Unexpected pre-processor directive #"+tok); 
389                                 
390                                 if(tok == Token.IF) {
391                                         stateStack.Push(state);
392                                         state = (State) tok;
393                                 }
394                                 else if(tok == Token.ENDIF) {
395                                         state = (State)stateStack.Pop();
396                                 }
397                                 else
398                                         state = (State)tok;
399                         }
400
401                         public int Error {
402                                 get {
403                                         return err;
404                                 }
405                         }
406
407                         public string ErrString {
408                                 get {
409                                         return (string) errStrings[err];
410                                 }
411                         }
412                 }
413
414                 
415                 public class TokenizerController {
416                         
417                         struct State
418                         {
419                                 public bool CanAcceptTokens;
420                                 public bool CanSelectBlock;
421
422                         }
423
424                         State currentState;
425                         Stack stateStack;
426                         Tokenizer lexer;
427
428                         public TokenizerController(Tokenizer lexer)
429                         {
430                                 this.lexer = lexer;
431                                 stateStack = new Stack();
432
433                                 currentState.CanAcceptTokens = true;
434                                 currentState.CanSelectBlock = true;
435
436                                 stateStack.Push(currentState);
437                         }
438
439                         State parentState {
440                                 get {
441                                         return (State)stateStack.Peek();
442                                 }
443                         }
444
445                         public bool IsAcceptingTokens {
446                                 get {
447                                         return currentState.CanAcceptTokens;
448                                 }
449                         }
450
451                         public void PositionCursorAtNextPreProcessorDirective()
452                         {
453                                 lexer.PositionCursorAtNextPreProcessorDirective();
454                         }
455
456                         public void PositionTokenizerCursor(IfElseStateMachine.Token tok, BoolLiteral expr)
457                         {
458                                 if(tok == IfElseStateMachine.Token.ENDIF) {
459                                         currentState = (State)stateStack.Pop();
460
461                                         if(currentState.CanAcceptTokens)
462                                                 return;
463                                         else {
464                                                 PositionCursorAtNextPreProcessorDirective();
465                                                 return;
466                                         }
467                                 }
468                                 
469                                 if(tok == IfElseStateMachine.Token.IF) {
470                                         stateStack.Push(currentState);
471                                         
472                                         currentState.CanAcceptTokens = parentState.CanAcceptTokens;
473                                         currentState.CanSelectBlock = true;
474                                 }
475                         
476                                 if(parentState.CanAcceptTokens && 
477                                    currentState.CanSelectBlock && (bool)(expr.GetValue()) ) {
478                                     
479                                         currentState.CanAcceptTokens = true;
480                                         currentState.CanSelectBlock = false; 
481                                         return;
482                                 }
483                                 else {
484                                         currentState.CanAcceptTokens = false;
485                                         PositionCursorAtNextPreProcessorDirective();
486                                         return;
487                                 }
488                         }
489                 }
490
491                 bool in_external_source = false;
492                 int in_marked_region = 0;
493
494                 TokenizerController tokenizerController;
495                 IfElseStateMachine ifElseStateMachine;
496
497
498
499 #line default
500
501   /** error output stream.
502       It should be changeable.
503     */
504   public System.IO.TextWriter ErrorOutput = System.Console.Out;
505
506   /** simplified error message.
507       @see <a href="#yyerror(java.lang.String, java.lang.String[])">yyerror</a>
508     */
509   public void yyerror (string message) {
510     yyerror(message, null);
511   }
512
513   /** (syntax) error message.
514       Can be overwritten to control message format.
515       @param message text to be displayed.
516       @param expected vector of acceptable tokens, if available.
517     */
518   public void yyerror (string message, string[] expected) {
519     if ((yacc_verbose_flag > 0) && (expected != null) && (expected.Length  > 0)) {
520       ErrorOutput.Write (message+", expecting");
521       for (int n = 0; n < expected.Length; ++ n)
522         ErrorOutput.Write (" "+expected[n]);
523         ErrorOutput.WriteLine ();
524     } else
525       ErrorOutput.WriteLine (message);
526   }
527
528   /** debugging support, requires the package jay.yydebug.
529       Set to null to suppress debugging messages.
530     */
531   internal yydebug.yyDebug debug;
532
533   protected static  int yyFinal = 2;
534   public static  string [] yyRule = {
535     "$accept : compilation_unit",
536     "end_of_stmt : logical_end_of_line",
537     "end_of_stmt : COLON",
538     "logical_end_of_line : EOL",
539     "logical_end_of_line : logical_end_of_line pp_directive",
540     "compilation_unit : logical_end_of_line opt_option_directives opt_imports_directives declarations EOF",
541     "compilation_unit : logical_end_of_line opt_option_directives opt_imports_directives opt_attributes EOF",
542     "opt_option_directives :",
543     "opt_option_directives : option_directives",
544     "option_directives : option_directive",
545     "option_directives : option_directives option_directive",
546     "option_directive : option_explicit_directive",
547     "option_directive : option_strict_directive",
548     "option_directive : option_compare_directive",
549     "on_off :",
550     "on_off : ON",
551     "on_off : OFF",
552     "text_or_binary : BINARY",
553     "text_or_binary : TEXT",
554     "option_explicit_directive : OPTION EXPLICIT on_off logical_end_of_line",
555     "option_strict_directive : OPTION STRICT on_off logical_end_of_line",
556     "option_compare_directive : OPTION COMPARE text_or_binary logical_end_of_line",
557     "opt_declarations :",
558     "opt_declarations : declarations",
559     "declarations : declaration",
560     "declarations : declarations declaration",
561     "$$1 :",
562     "declaration : declaration_qualifiers $$1 namespace_declaration",
563     "$$2 :",
564     "declaration : declaration_qualifiers $$2 type_spec_declaration",
565     "identifier : IDENTIFIER",
566     "identifier : BINARY",
567     "identifier : TEXT",
568     "identifier : COMPARE",
569     "identifier : EXPLICIT",
570     "identifier : OFF",
571     "type_character : PERCENT",
572     "type_character : LONGTYPECHAR",
573     "type_character : AT_SIGN",
574     "type_character : SINGLETYPECHAR",
575     "type_character : NUMBER_SIGN",
576     "type_character : DOLAR_SIGN",
577     "opt_type_character :",
578     "opt_type_character : type_character",
579     "qualified_identifier : identifier",
580     "qualified_identifier : qualified_identifier DOT identifier",
581     "opt_imports_directives :",
582     "opt_imports_directives : imports_directives",
583     "imports_directives : imports_directive",
584     "imports_directives : imports_directives imports_directive",
585     "imports_directive : IMPORTS imports_terms logical_end_of_line",
586     "imports_terms : imports_term",
587     "imports_terms : imports_terms COMMA imports_term",
588     "imports_term : namespace_or_type_name",
589     "imports_term : identifier ASSIGN namespace_or_type_name",
590     "opt_params :",
591     "opt_params : OPEN_PARENS CLOSE_PARENS",
592     "opt_params : OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS",
593     "opt_attributes :",
594     "opt_attributes : attribute_sections",
595     "attribute_sections : attribute_section",
596     "$$3 :",
597     "attribute_sections : attribute_sections $$3 attribute_section",
598     "attribute_section : OP_LT attribute_list OP_GT opt_end_of_stmt",
599     "opt_end_of_stmt :",
600     "opt_end_of_stmt : end_of_stmt",
601     "attribute_list : attribute",
602     "attribute_list : attribute_list COMMA attribute",
603     "$$4 :",
604     "attribute : namespace_or_type_name $$4 opt_attribute_arguments",
605     "$$5 :",
606     "$$6 :",
607     "attribute : attribute_target_specifier $$5 COLON namespace_or_type_name $$6 opt_attribute_arguments",
608     "attribute_target_specifier : ASSEMBLY",
609     "attribute_target_specifier : MODULE",
610     "attribute_target_specifier : namespace_or_type_name",
611     "opt_attribute_arguments :",
612     "opt_attribute_arguments : OPEN_PARENS opt_attribute_arguments_list CLOSE_PARENS",
613     "opt_attribute_arguments_list :",
614     "opt_attribute_arguments_list : attribute_arguments_list",
615     "attribute_arguments_list : positional_argument_list",
616     "attribute_arguments_list : positional_argument_list COMMA named_argument_list",
617     "attribute_arguments_list : named_argument_list",
618     "positional_argument_list : constant_expression",
619     "positional_argument_list : positional_argument_list COMMA constant_expression",
620     "named_argument_list : named_argument",
621     "named_argument_list : named_argument_list COMMA named_argument",
622     "named_argument : identifier ATTR_ASSIGN constant_expression",
623     "$$7 :",
624     "namespace_declaration : NAMESPACE qualified_identifier logical_end_of_line $$7 opt_declarations END NAMESPACE logical_end_of_line",
625     "declaration_qualifiers : opt_attributes opt_modifiers",
626     "type_spec_declaration : class_declaration",
627     "type_spec_declaration : module_declaration",
628     "type_spec_declaration : interface_declaration",
629     "type_spec_declaration : delegate_declaration",
630     "type_spec_declaration : struct_declaration",
631     "type_spec_declaration : enum_declaration",
632     "$$8 :",
633     "$$9 :",
634     "class_declaration : CLASS identifier logical_end_of_line $$8 opt_inherits opt_implements $$9 opt_class_member_declarations END CLASS logical_end_of_line",
635     "opt_inherits :",
636     "opt_inherits : INHERITS type_list logical_end_of_line",
637     "opt_implements :",
638     "opt_implements : IMPLEMENTS type_list logical_end_of_line",
639     "opt_modifiers :",
640     "opt_modifiers : modifiers",
641     "modifiers : modifier",
642     "modifiers : modifiers modifier",
643     "modifier : PUBLIC",
644     "modifier : PROTECTED",
645     "modifier : PRIVATE",
646     "modifier : SHARED",
647     "modifier : FRIEND",
648     "modifier : NOTINHERITABLE",
649     "modifier : OVERRIDABLE",
650     "modifier : NOTOVERRIDABLE",
651     "modifier : OVERRIDES",
652     "modifier : OVERLOADS",
653     "modifier : SHADOWS",
654     "modifier : MUSTINHERIT",
655     "modifier : READONLY",
656     "modifier : DEFAULT",
657     "modifier : WRITEONLY",
658     "$$10 :",
659     "module_declaration : MODULE identifier logical_end_of_line $$10 opt_module_member_declarations END MODULE logical_end_of_line",
660     "opt_module_member_declarations :",
661     "opt_module_member_declarations : module_member_declarations",
662     "module_member_declarations : module_member_declaration",
663     "module_member_declarations : module_member_declarations module_member_declaration",
664     "$$11 :",
665     "module_member_declaration : opt_attributes opt_modifiers $$11 module_member_declarator",
666     "module_member_declarator : constructor_declaration",
667     "module_member_declarator : method_declaration",
668     "module_member_declarator : field_declaration",
669     "module_member_declarator : constant_declaration",
670     "module_member_declarator : property_declaration",
671     "module_member_declarator : event_declaration",
672     "module_member_declarator : type_spec_declaration",
673     "constant_declaration : CONST constant_declarators logical_end_of_line",
674     "opt_class_member_declarations :",
675     "opt_class_member_declarations : class_member_declarations",
676     "class_member_declarations : class_member_declaration",
677     "class_member_declarations : class_member_declarations class_member_declaration",
678     "class_member_declaration : opt_attributes opt_modifiers class_member_declarator",
679     "class_member_declarator : field_declaration",
680     "class_member_declarator : constant_declaration",
681     "class_member_declarator : method_declaration",
682     "class_member_declarator : constructor_declaration",
683     "class_member_declarator : property_declaration",
684     "class_member_declarator : event_declaration",
685     "class_member_declarator : type_spec_declaration",
686     "method_declaration : sub_declaration",
687     "method_declaration : func_declaration",
688     "$$12 :",
689     "sub_declaration : SUB identifier opt_params $$12 opt_evt_handler opt_implement_clause logical_end_of_line begin_block opt_statement_list end_block END SUB logical_end_of_line",
690     "$$13 :",
691     "$$14 :",
692     "func_declaration : FUNCTION identifier opt_type_character opt_params opt_type_with_ranks $$13 opt_implement_clause logical_end_of_line begin_block $$14 opt_statement_list end_block END FUNCTION logical_end_of_line",
693     "$$15 :",
694     "$$16 :",
695     "struct_declaration : STRUCTURE identifier logical_end_of_line opt_implement_clause $$15 opt_struct_member_declarations $$16 END STRUCTURE logical_end_of_line",
696     "opt_logical_end_of_line :",
697     "opt_logical_end_of_line : logical_end_of_line",
698     "opt_struct_member_declarations :",
699     "opt_struct_member_declarations : struct_member_declarations",
700     "struct_member_declarations : struct_member_declaration",
701     "struct_member_declarations : struct_member_declarations struct_member_declaration",
702     "struct_member_declaration : opt_modifiers struct_member_declarator",
703     "struct_member_declarator : field_declaration",
704     "struct_member_declarator : constant_declaration",
705     "struct_member_declarator : constructor_declaration",
706     "struct_member_declarator : method_declaration",
707     "struct_member_declarator : event_declaration",
708     "struct_member_declarator : type_spec_declaration",
709     "event_declaration : EVENT identifier AS type opt_implement_clause logical_end_of_line",
710     "$$17 :",
711     "enum_declaration : ENUM identifier opt_type_spec logical_end_of_line opt_enum_member_declarations $$17 END ENUM logical_end_of_line",
712     "opt_enum_member_declarations :",
713     "opt_enum_member_declarations : enum_member_declarations",
714     "enum_member_declarations : enum_member_declaration",
715     "enum_member_declarations : enum_member_declarations enum_member_declaration",
716     "enum_member_declaration : opt_attributes identifier logical_end_of_line",
717     "$$18 :",
718     "enum_member_declaration : opt_attributes identifier $$18 ASSIGN expression logical_end_of_line",
719     "interface_property_declaration : PROPERTY identifier opt_type_character opt_property_parameters opt_type_with_ranks logical_end_of_line",
720     "$$19 :",
721     "$$20 :",
722     "$$21 :",
723     "interface_declaration : INTERFACE identifier logical_end_of_line $$19 opt_interface_base $$20 interface_body $$21 END INTERFACE logical_end_of_line",
724     "opt_interface_base :",
725     "opt_interface_base : interface_bases",
726     "interface_bases : interface_base",
727     "interface_bases : interface_bases interface_base",
728     "interface_base : INHERITS type_list logical_end_of_line",
729     "interface_body : opt_interface_member_declarations",
730     "opt_interface_member_declarations :",
731     "opt_interface_member_declarations : interface_member_declarations",
732     "interface_member_declarations : interface_member_declaration",
733     "interface_member_declarations : interface_member_declarations interface_member_declaration",
734     "interface_member_declaration : opt_attributes opt_modifiers interface_member_declarator",
735     "interface_member_declarator : interface_method_declaration",
736     "interface_member_declarator : interface_property_declaration",
737     "interface_method_declaration : SUB identifier opt_params logical_end_of_line",
738     "interface_method_declaration : FUNCTION identifier opt_type_character opt_params opt_type_with_ranks logical_end_of_line",
739     "property_declaration : non_abstract_propery_declaration",
740     "$$22 :",
741     "non_abstract_propery_declaration : PROPERTY identifier opt_type_character opt_property_parameters opt_type_with_ranks opt_implement_clause logical_end_of_line $$22 accessor_declarations END PROPERTY logical_end_of_line",
742     "opt_property_parameters :",
743     "opt_property_parameters : OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS",
744     "opt_implement_clause :",
745     "opt_implement_clause : IMPLEMENTS implement_clause_list",
746     "implement_clause_list : qualified_identifier",
747     "implement_clause_list : implement_clause_list COMMA qualified_identifier",
748     "accessor_declarations : get_accessor_declaration opt_set_accessor_declaration",
749     "accessor_declarations : set_accessor_declaration opt_get_accessor_declaration",
750     "opt_get_accessor_declaration :",
751     "opt_get_accessor_declaration : get_accessor_declaration",
752     "opt_set_accessor_declaration :",
753     "opt_set_accessor_declaration : set_accessor_declaration",
754     "$$23 :",
755     "$$24 :",
756     "get_accessor_declaration : opt_attributes GET logical_end_of_line $$23 begin_block $$24 opt_statement_list end_block END GET logical_end_of_line",
757     "$$25 :",
758     "set_accessor_declaration : opt_attributes SET opt_set_parameter logical_end_of_line $$25 begin_block opt_statement_list end_block END SET logical_end_of_line",
759     "opt_set_parameter :",
760     "opt_set_parameter : OPEN_PARENS CLOSE_PARENS",
761     "opt_set_parameter : OPEN_PARENS opt_parameter_modifier opt_identifier opt_type_with_ranks CLOSE_PARENS",
762     "field_declaration : opt_dim_stmt variable_declarators logical_end_of_line",
763     "opt_dim_stmt :",
764     "opt_dim_stmt : DIM",
765     "delegate_declaration : DELEGATE SUB identifier OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS logical_end_of_line",
766     "delegate_declaration : DELEGATE FUNCTION identifier OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS opt_type_with_ranks logical_end_of_line",
767     "opt_evt_handler :",
768     "$$26 :",
769     "$$27 :",
770     "constructor_declaration : SUB NEW opt_params logical_end_of_line $$26 begin_block opt_statement_list end_block $$27 END SUB logical_end_of_line",
771     "opt_formal_parameter_list :",
772     "opt_formal_parameter_list : formal_parameter_list",
773     "formal_parameter_list : parameters",
774     "parameters : parameter",
775     "parameters : parameters COMMA parameter",
776     "parameter : opt_attributes opt_parameter_modifier identifier opt_type_character opt_rank_specifiers opt_type_with_ranks opt_variable_initializer",
777     "opt_parameter_modifier :",
778     "opt_parameter_modifier : parameter_modifiers",
779     "parameter_modifiers : parameter_modifiers parameter_modifier",
780     "parameter_modifiers : parameter_modifier",
781     "parameter_modifier : BYREF",
782     "parameter_modifier : BYVAL",
783     "parameter_modifier : OPTIONAL",
784     "parameter_modifier : PARAM_ARRAY",
785     "opt_statement_list :",
786     "opt_statement_list : statement_list end_of_stmt",
787     "statement_list : statement",
788     "statement_list : statement_list end_of_stmt statement",
789     "block : begin_block opt_statement_list end_block",
790     "begin_block :",
791     "end_block :",
792     "statement : declaration_statement",
793     "statement : embedded_statement",
794     "statement : ADDHANDLER prefixed_unary_expression COMMA ADDRESSOF expression",
795     "statement : REMOVEHANDLER prefixed_unary_expression COMMA ADDRESSOF expression",
796     "statement : RAISEEVENT identifier opt_raise_event_args",
797     "opt_raise_event_args :",
798     "opt_raise_event_args : OPEN_PARENS opt_argument_list CLOSE_PARENS",
799     "embedded_statement : expression_statement",
800     "embedded_statement : selection_statement",
801     "embedded_statement : try_statement",
802     "embedded_statement : synclock_statement",
803     "embedded_statement : jump_statement",
804     "jump_statement : return_statement",
805     "jump_statement : goto_statement",
806     "jump_statement : throw_statement",
807     "goto_statement : GOTO label_name",
808     "throw_statement : THROW opt_expression",
809     "return_statement : RETURN opt_expression",
810     "synclock_statement : SYNCLOCK expression end_of_stmt block END SYNCLOCK",
811     "try_statement : try_catch",
812     "try_statement : try_catch_finally",
813     "try_catch : TRY end_of_stmt block opt_catch_clauses END TRY",
814     "try_catch_finally : TRY end_of_stmt block opt_catch_clauses FINALLY end_of_stmt block END TRY",
815     "opt_catch_clauses :",
816     "opt_catch_clauses : catch_clauses",
817     "catch_clauses : catch_clause",
818     "catch_clauses : catch_clauses catch_clause",
819     "opt_identifier :",
820     "opt_identifier : identifier",
821     "$$28 :",
822     "catch_clause : CATCH opt_catch_args end_of_stmt $$28 block",
823     "opt_catch_args :",
824     "opt_catch_args : catch_args",
825     "catch_args : identifier AS type",
826     "$$29 :",
827     "while_statement : WHILE $$29 boolean_expression end_of_stmt begin_block opt_statement_list end_block END WHILE",
828     "selection_statement : if_statement",
829     "if_statement : IF boolean_expression opt_then end_of_stmt block END IF",
830     "if_statement : IF boolean_expression opt_then end_of_stmt block ELSE end_of_stmt block END IF",
831     "if_statement : IF boolean_expression opt_then end_of_stmt block else_if_statement_rest",
832     "else_if_statement_rest : ELSEIF boolean_expression opt_then end_of_stmt block END IF",
833     "else_if_statement_rest : ELSEIF boolean_expression opt_then end_of_stmt block ELSE end_of_stmt block END IF",
834     "else_if_statement_rest : ELSEIF boolean_expression opt_then end_of_stmt block else_if_statement_rest",
835     "opt_then :",
836     "opt_then : THEN",
837     "case_clauses : case_clause",
838     "case_clauses : case_clauses COMMA case_clause",
839     "case_clause : opt_is comparison_operator expression",
840     "case_clause : expression",
841     "opt_is :",
842     "opt_is : IS",
843     "comparison_operator : OP_LT",
844     "comparison_operator : OP_GT",
845     "comparison_operator : OP_LE",
846     "comparison_operator : OP_NE",
847     "opt_case :",
848     "opt_case : CASE",
849     "expression_statement : statement_expression",
850     "statement_expression : invocation_expression",
851     "statement_expression : object_creation_expression",
852     "statement_expression : assignment_expression",
853     "object_creation_expression : NEW type OPEN_PARENS opt_argument_list CLOSE_PARENS",
854     "object_creation_expression : NEW type",
855     "new_expression : object_creation_expression",
856     "declaration_statement : local_variable_declaration",
857     "declaration_statement : local_constant_declaration",
858     "local_variable_declaration : DIM variable_declarators",
859     "local_constant_declaration : CONST constant_declarators",
860     "constant_declarators : constant_declarator",
861     "constant_declarators : constant_declarators COMMA constant_declarator",
862     "constant_declarator : variable_name opt_type_decl opt_variable_initializer",
863     "variable_declarators : variable_declarator",
864     "variable_declarators : variable_declarators COMMA variable_declarator",
865     "variable_declarator : variable_names opt_type_decl opt_variable_initializer",
866     "variable_names : variable_name",
867     "variable_names : variable_names COMMA variable_name",
868     "variable_name : identifier opt_type_character opt_array_name_modifier",
869     "opt_type_spec :",
870     "opt_type_spec : AS type",
871     "opt_type_with_ranks : opt_type_spec",
872     "opt_type_decl : opt_type_with_ranks",
873     "opt_type_decl : AS NEW type",
874     "opt_type_decl : AS NEW type OPEN_PARENS opt_argument_list CLOSE_PARENS",
875     "opt_array_name_modifier :",
876     "opt_variable_initializer :",
877     "opt_variable_initializer : ASSIGN variable_initializer",
878     "variable_initializer : expression",
879     "variable_initializer : array_initializer",
880     "array_initializer : OPEN_BRACE CLOSE_BRACE",
881     "array_initializer : OPEN_BRACE variable_initializer_list CLOSE_BRACE",
882     "variable_initializer_list : variable_initializer",
883     "variable_initializer_list : variable_initializer_list COMMA variable_initializer",
884     "opt_rank_specifiers :",
885     "opt_rank_specifiers : rank_specifiers",
886     "rank_specifiers : rank_specifier",
887     "rank_specifiers : rank_specifiers rank_specifier",
888     "rank_specifier : OPEN_PARENS opt_dim_specifiers CLOSE_PARENS",
889     "opt_dim_specifiers :",
890     "opt_dim_specifiers : expression",
891     "opt_dim_specifiers : opt_dim_specifiers COMMA expression",
892     "opt_dim_specifiers : opt_dim_specifiers COMMA",
893     "primary_expression : literal",
894     "primary_expression : parenthesized_expression",
895     "primary_expression : this_access",
896     "primary_expression : base_access",
897     "primary_expression : qualified_identifier",
898     "primary_expression : get_type_expression",
899     "primary_expression : member_access",
900     "primary_expression : invocation_expression",
901     "primary_expression : new_expression",
902     "primary_expression : cast_expression",
903     "literal : boolean_literal",
904     "literal : integer_literal",
905     "literal : real_literal",
906     "literal : LITERAL_CHARACTER",
907     "literal : LITERAL_STRING",
908     "literal : NOTHING",
909     "real_literal : LITERAL_SINGLE",
910     "real_literal : LITERAL_DOUBLE",
911     "real_literal : LITERAL_DECIMAL",
912     "integer_literal : LITERAL_INTEGER",
913     "boolean_literal : TRUE",
914     "boolean_literal : FALSE",
915     "parenthesized_expression : OPEN_PARENS expression CLOSE_PARENS",
916     "member_access : primary_expression DOT identifier",
917     "member_access : predefined_type DOT identifier",
918     "predefined_type : builtin_types",
919     "invocation_expression : primary_expression OPEN_PARENS opt_argument_list CLOSE_PARENS",
920     "invocation_expression : CALL primary_expression OPEN_PARENS opt_argument_list CLOSE_PARENS",
921     "base_access : MYBASE DOT IDENTIFIER",
922     "opt_argument_list : argument_list",
923     "argument_list : argument",
924     "argument_list : argument_list COMMA argument",
925     "argument : expression",
926     "argument : BYREF variable_reference",
927     "argument :",
928     "argument : ADDRESSOF expression",
929     "variable_reference : expression",
930     "expression : conditional_xor_expression",
931     "opt_expression :",
932     "opt_expression : expression",
933     "this_access : ME",
934     "this_access : MYCLASS",
935     "cast_expression : DIRECTCAST OPEN_PARENS expression COMMA type CLOSE_PARENS",
936     "cast_expression : CTYPE OPEN_PARENS expression COMMA type CLOSE_PARENS",
937     "cast_expression : cast_operator OPEN_PARENS expression CLOSE_PARENS",
938     "cast_operator : CBOOL",
939     "cast_operator : CBYTE",
940     "cast_operator : CCHAR",
941     "cast_operator : CDBL",
942     "cast_operator : CDEC",
943     "cast_operator : CINT",
944     "cast_operator : CLNG",
945     "cast_operator : COBJ",
946     "cast_operator : CSHORT",
947     "cast_operator : CSNG",
948     "cast_operator : CSTR",
949     "get_type_expression : GETTYPE OPEN_PARENS type CLOSE_PARENS",
950     "exponentiation_expression : primary_expression",
951     "exponentiation_expression : exponentiation_expression OP_EXP primary_expression",
952     "prefixed_unary_expression : exponentiation_expression",
953     "prefixed_unary_expression : PLUS prefixed_unary_expression",
954     "prefixed_unary_expression : MINUS prefixed_unary_expression",
955     "multiplicative_expression : prefixed_unary_expression",
956     "multiplicative_expression : multiplicative_expression STAR prefixed_unary_expression",
957     "multiplicative_expression : multiplicative_expression DIV prefixed_unary_expression",
958     "integer_division_expression : multiplicative_expression",
959     "integer_division_expression : integer_division_expression OP_IDIV multiplicative_expression",
960     "mod_expression : integer_division_expression",
961     "mod_expression : mod_expression MOD integer_division_expression",
962     "additive_expression : mod_expression",
963     "additive_expression : additive_expression PLUS mod_expression",
964     "additive_expression : additive_expression MINUS mod_expression",
965     "concat_expression : additive_expression",
966     "concat_expression : concat_expression OP_CONCAT additive_expression",
967     "shift_expression : concat_expression",
968     "shift_expression : shift_expression OP_SHIFT_LEFT concat_expression",
969     "shift_expression : shift_expression OP_SHIFT_RIGHT concat_expression",
970     "relational_expression : shift_expression",
971     "relational_expression : relational_expression ASSIGN shift_expression",
972     "relational_expression : relational_expression OP_NE shift_expression",
973     "relational_expression : relational_expression OP_LT shift_expression",
974     "relational_expression : relational_expression OP_GT shift_expression",
975     "relational_expression : relational_expression OP_LE shift_expression",
976     "relational_expression : relational_expression OP_GE shift_expression",
977     "relational_expression : relational_expression IS shift_expression",
978     "relational_expression : TYPEOF shift_expression IS type",
979     "negation_expression : relational_expression",
980     "negation_expression : NOT negation_expression",
981     "conditional_and_expression : negation_expression",
982     "conditional_and_expression : conditional_and_expression AND negation_expression",
983     "conditional_and_expression : conditional_and_expression ANDALSO negation_expression",
984     "conditional_or_expression : conditional_and_expression",
985     "conditional_or_expression : conditional_or_expression OR conditional_and_expression",
986     "conditional_or_expression : conditional_or_expression ORELSE conditional_and_expression",
987     "conditional_xor_expression : conditional_or_expression",
988     "conditional_xor_expression : conditional_xor_expression XOR conditional_or_expression",
989     "assignment_expression : prefixed_unary_expression ASSIGN expression",
990     "assignment_expression : prefixed_unary_expression STAR ASSIGN expression",
991     "assignment_expression : prefixed_unary_expression DIV ASSIGN expression",
992     "assignment_expression : prefixed_unary_expression PLUS ASSIGN expression",
993     "assignment_expression : prefixed_unary_expression MINUS ASSIGN expression",
994     "assignment_expression : prefixed_unary_expression OP_SHIFT_LEFT ASSIGN expression",
995     "assignment_expression : prefixed_unary_expression OP_SHIFT_RIGHT ASSIGN expression",
996     "assignment_expression : prefixed_unary_expression OP_CONCAT ASSIGN expression",
997     "assignment_expression : prefixed_unary_expression OP_EXP ASSIGN expression",
998     "assignment_expression : prefixed_unary_expression ASSIGN ADDRESSOF expression",
999     "constant_expression : expression",
1000     "boolean_expression : expression",
1001     "type : namespace_or_type_name",
1002     "type : builtin_types",
1003     "type_list : type",
1004     "type_list : type_list COMMA type",
1005     "namespace_or_type_name : qualified_identifier",
1006     "builtin_types : OBJECT",
1007     "builtin_types : primitive_type",
1008     "primitive_type : numeric_type",
1009     "primitive_type : BOOLEAN",
1010     "primitive_type : CHAR",
1011     "primitive_type : STRING",
1012     "numeric_type : integral_type",
1013     "numeric_type : floating_point_type",
1014     "numeric_type : DECIMAL",
1015     "integral_type :",
1016     "integral_type : BYTE",
1017     "integral_type : SHORT",
1018     "integral_type : INTEGER",
1019     "integral_type : LONG",
1020     "floating_point_type : SINGLE",
1021     "floating_point_type : DOUBLE",
1022     "pp_directive : HASH IDENTIFIER OPEN_PARENS LITERAL_STRING COMMA LITERAL_INTEGER CLOSE_PARENS EOL",
1023     "pp_directive : HASH IDENTIFIER LITERAL_STRING EOL",
1024     "pp_directive : HASH END IDENTIFIER EOL",
1025     "pp_directive : HASH CONST IDENTIFIER ASSIGN boolean_literal EOL",
1026     "$$30 :",
1027     "pp_directive : HASH IF $$30 boolean_literal opt_then EOL",
1028     "$$31 :",
1029     "pp_directive : HASH ELSEIF $$31 boolean_literal opt_then EOL",
1030     "$$32 :",
1031     "pp_directive : HASH ELSE $$32 EOL",
1032     "$$33 :",
1033     "pp_directive : HASH END IF $$33 EOL",
1034     "pp_directive : HASH error EOL",
1035   };
1036   protected static  string [] yyNames = {    
1037     "end-of-file",null,null,null,null,null,null,null,null,null,null,null,
1038     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1039     null,null,null,null,null,null,null,"'!'",null,"'#'","'$'","'%'","'&'",
1040     null,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",null,null,null,
1041     null,null,null,null,null,null,null,"':'",null,"'<'","'='","'>'","'?'",
1042     "'@'",null,null,null,null,null,null,null,null,null,null,null,null,
1043     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1044     "'['","'\\\\'","']'","'^'",null,null,null,null,null,null,null,null,
1045     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1046     null,null,null,null,null,null,"'{'",null,"'}'",null,null,null,null,
1047     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1048     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1049     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1050     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1051     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1052     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1053     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1054     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1055     null,null,null,null,null,null,null,null,null,null,null,null,null,null,
1056     null,"EOF","NONE","ERROR","ADDHANDLER","ADDRESSOF","ALIAS","AND",
1057     "ANDALSO","ANSI","AS","ASSEMBLY","AUTO","BINARY","BOOLEAN","BYREF",
1058     "BYTE","BYVAL","CALL","CASE","CATCH","CBOOL","CBYTE","CCHAR","CDATE",
1059     "CDEC","CDBL","CHAR","CINT","CLASS","CLNG","COBJ","COMPARE","CONST",
1060     "CSHORT","CSNG","CSTR","CTYPE","DATE","DECIMAL","DECLARE","DEFAULT",
1061     "DELEGATE","DIM","DIRECTCAST","DO","DOUBLE","EACH","ELSE","ELSEIF",
1062     "END","ENDIF","ENUM","EOL","ERASE","EVENT","EXIT","EXPLICIT","FALSE",
1063     "FINALLY","FOR","FRIEND","FUNCTION","GET","GETTYPE","GOSUB","GOTO",
1064     "HANDLES","IF","IMPLEMENTS","IMPORTS","IN","INHERITS","INTEGER",
1065     "INTERFACE","IS","LET","LIB","LIKE","LONG","LOOP","ME","MOD","MODULE",
1066     "MUSTINHERIT","MUSTOVERRIDE","MYBASE","MYCLASS","NAMESPACE","NEW",
1067     "NEXT","NOT","NOTHING","NOTINHERITABLE","NOTOVERRIDABLE","OBJECT",
1068     "OFF","ON","OPTION","OPTIONAL","OR","ORELSE","OVERLOADS",
1069     "OVERRIDABLE","OVERRIDES","PARAM_ARRAY","PRESERVE","PRIVATE",
1070     "PROPERTY","PROTECTED","PUBLIC","RAISEEVENT","READONLY","REDIM","REM",
1071     "REMOVEHANDLER","RESUME","RETURN","SELECT","SET","SHADOWS","SHARED",
1072     "SHORT","SINGLE","SIZEOF","STATIC","STEP","STOP","STRICT","STRING",
1073     "STRUCTURE","SUB","SYNCLOCK","TEXT","THEN","THROW","TO","TRUE","TRY",
1074     "TYPEOF","UNICODE","UNTIL","VARIANT","WEND","WHEN","WHILE","WITH",
1075     "WITHEVENTS","WRITEONLY","XOR","YIELD","HASH","OPEN_BRACKET",
1076     "CLOSE_BRACKET","OPEN_PARENS","OPEN_BRACE","CLOSE_BRACE",
1077     "CLOSE_PARENS","DOT","COMMA","COLON","PLUS","MINUS","ASSIGN","OP_LT",
1078     "OP_GT","STAR","DIV","OP_EXP","INTERR","OP_IDIV","OP_CONCAT",
1079     "EXCLAMATION","PERCENT","LONGTYPECHAR","AT_SIGN","SINGLETYPECHAR",
1080     "NUMBER_SIGN","DOLAR_SIGN","ATTR_ASSIGN","\":=\"","OP_LE","\"<=\"",
1081     "OP_GE","\">=\"","OP_NE","\"<>\"","OP_XOR","\"xor\"","OP_SHIFT_LEFT",
1082     "\"<<\"","OP_SHIFT_RIGHT","\">>\"","LITERAL_INTEGER",
1083     "\"int literal\"","LITERAL_SINGLE","\"float literal\"",
1084     "LITERAL_DOUBLE","\"double literal\"","LITERAL_DECIMAL",
1085     "\"decimal literal\"","LITERAL_CHARACTER","\"character literal\"",
1086     "LITERAL_STRING","\"string literal\"","LITERAL_DATE",
1087     "\"datetime literal\"","IDENTIFIER","LOWPREC","OP_OR","OP_AND",
1088     "BITWISE_OR","BITWISE_AND","BITWISE_NOT","CARRET","UMINUS","OP_INC",
1089     "OP_DEC","HIGHPREC","label_name",
1090   };
1091
1092   /** index-checked interface to yyNames[].
1093       @param token single character or %token value.
1094       @return token name or [illegal] or [unknown].
1095     */
1096   public static string yyname (int token) {
1097     if ((token < 0) || (token > yyNames.Length)) return "[illegal]";
1098     string name;
1099     if ((name = yyNames[token]) != null) return name;
1100     return "[unknown]";
1101   }
1102
1103   /** computes list of expected tokens on error by tracing the tables.
1104       @param state for which to compute the list.
1105       @return list of token names.
1106     */
1107   protected string[] yyExpecting (int state) {
1108     int token, n, len = 0;
1109     bool[] ok = new bool[yyNames.Length];
1110
1111     if ((n = yySindex[state]) != 0)
1112       for (token = n < 0 ? -n : 0;
1113            (token < yyNames.Length) && (n+token < yyTable.Length); ++ token)
1114         if (yyCheck[n+token] == token && !ok[token] && yyNames[token] != null) {
1115           ++ len;
1116           ok[token] = true;
1117         }
1118     if ((n = yyRindex[state]) != 0)
1119       for (token = n < 0 ? -n : 0;
1120            (token < yyNames.Length) && (n+token < yyTable.Length); ++ token)
1121         if (yyCheck[n+token] == token && !ok[token] && yyNames[token] != null) {
1122           ++ len;
1123           ok[token] = true;
1124         }
1125
1126     string [] result = new string[len];
1127     for (n = token = 0; n < len;  ++ token)
1128       if (ok[token]) result[n++] = yyNames[token];
1129     return result;
1130   }
1131
1132   /** the generated parser, with debugging messages.
1133       Maintains a state and a value stack, currently with fixed maximum size.
1134       @param yyLex scanner.
1135       @param yydebug debug message writer implementing yyDebug, or null.
1136       @return result of the last reduction, if any.
1137       @throws yyException on irrecoverable parse error.
1138     */
1139   internal Object yyparse (yyParser.yyInput yyLex, Object yyd)
1140                                  {
1141     this.debug = (yydebug.yyDebug)yyd;
1142     return yyparse(yyLex);
1143   }
1144
1145   /** initial size and increment of the state/value stack [default 256].
1146       This is not final so that it can be overwritten outside of invocations
1147       of yyparse().
1148     */
1149   protected int yyMax;
1150
1151   /** executed at the beginning of a reduce action.
1152       Used as $$ = yyDefault($1), prior to the user-specified action, if any.
1153       Can be overwritten to provide deep copy, etc.
1154       @param first value for $1, or null.
1155       @return first.
1156     */
1157   protected Object yyDefault (Object first) {
1158     return first;
1159   }
1160
1161   /** the generated parser.
1162       Maintains a state and a value stack, currently with fixed maximum size.
1163       @param yyLex scanner.
1164       @return result of the last reduction, if any.
1165       @throws yyException on irrecoverable parse error.
1166     */
1167   internal Object yyparse (yyParser.yyInput yyLex)
1168                                 {
1169     if (yyMax <= 0) yyMax = 256;                        // initial size
1170     int yyState = 0;                                   // state stack ptr
1171     int [] yyStates = new int[yyMax];                   // state stack 
1172     Object yyVal = null;                               // value stack ptr
1173     Object [] yyVals = new Object[yyMax];               // value stack
1174     int yyToken = -1;                                   // current input
1175     int yyErrorFlag = 0;                                // #tks to shift
1176
1177     int yyTop = 0;
1178     goto skip;
1179     yyLoop:
1180     yyTop++;
1181     skip:
1182     for (;; ++ yyTop) {
1183       if (yyTop >= yyStates.Length) {                   // dynamically increase
1184         int[] i = new int[yyStates.Length+yyMax];
1185         yyStates.CopyTo (i, 0);
1186         yyStates = i;
1187         Object[] o = new Object[yyVals.Length+yyMax];
1188         yyVals.CopyTo (o, 0);
1189         yyVals = o;
1190       }
1191       yyStates[yyTop] = yyState;
1192       yyVals[yyTop] = yyVal;
1193       if (debug != null) debug.push(yyState, yyVal);
1194
1195       yyDiscarded: for (;;) {   // discarding a token does not change stack
1196         int yyN;
1197         if ((yyN = yyDefRed[yyState]) == 0) {   // else [default] reduce (yyN)
1198           if (yyToken < 0) {
1199             yyToken = yyLex.advance() ? yyLex.token() : 0;
1200             if (debug != null)
1201               debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value());
1202           }
1203           if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0)
1204               && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) {
1205             if (debug != null)
1206               debug.shift(yyState, yyTable[yyN], yyErrorFlag-1);
1207             yyState = yyTable[yyN];             // shift to yyN
1208             yyVal = yyLex.value();
1209             yyToken = -1;
1210             if (yyErrorFlag > 0) -- yyErrorFlag;
1211             goto yyLoop;
1212           }
1213           if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
1214               && yyN < yyTable.Length && yyCheck[yyN] == yyToken)
1215             yyN = yyTable[yyN];                 // reduce (yyN)
1216           else
1217             switch (yyErrorFlag) {
1218   
1219             case 0:
1220               yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState));
1221               if (debug != null) debug.error("syntax error");
1222               goto case 1;
1223             case 1: case 2:
1224               yyErrorFlag = 3;
1225               do {
1226                 if ((yyN = yySindex[yyStates[yyTop]]) != 0
1227                     && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length
1228                     && yyCheck[yyN] == Token.yyErrorCode) {
1229                   if (debug != null)
1230                     debug.shift(yyStates[yyTop], yyTable[yyN], 3);
1231                   yyState = yyTable[yyN];
1232                   yyVal = yyLex.value();
1233                   goto yyLoop;
1234                 }
1235                 if (debug != null) debug.pop(yyStates[yyTop]);
1236               } while (-- yyTop >= 0);
1237               if (debug != null) debug.reject();
1238               throw new yyParser.yyException("irrecoverable syntax error");
1239   
1240             case 3:
1241               if (yyToken == 0) {
1242                 if (debug != null) debug.reject();
1243                 throw new yyParser.yyException("irrecoverable syntax error at end-of-file");
1244               }
1245               if (debug != null)
1246                 debug.discard(yyState, yyToken, yyname(yyToken),
1247                                                         yyLex.value());
1248               yyToken = -1;
1249               goto yyDiscarded;         // leave stack alone
1250             }
1251         }
1252         int yyV = yyTop + 1-yyLen[yyN];
1253         if (debug != null)
1254           debug.reduce(yyState, yyStates[yyV-1], yyN, yyRule[yyN], yyLen[yyN]);
1255         yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
1256         switch (yyN) {
1257 case 5:
1258 #line 753 "mb-parser.jay"
1259   {
1260                 yyVal=yyVals[-1+yyTop];
1261           }
1262   break;
1263 case 6:
1264 #line 761 "mb-parser.jay"
1265   {
1266                 /* ????? */ ;
1267           }
1268   break;
1269 case 14:
1270 #line 784 "mb-parser.jay"
1271   {
1272                   yyVal = (object)true;
1273           }
1274   break;
1275 case 15:
1276 #line 788 "mb-parser.jay"
1277   {
1278                   yyVal = (object)true;
1279           }
1280   break;
1281 case 16:
1282 #line 792 "mb-parser.jay"
1283   {
1284                   yyVal = (object)false;
1285           }
1286   break;
1287 case 17:
1288 #line 799 "mb-parser.jay"
1289   {
1290                   yyVal = (object)true;
1291           }
1292   break;
1293 case 18:
1294 #line 803 "mb-parser.jay"
1295   {
1296                   yyVal = (object)false;
1297           }
1298   break;
1299 case 19:
1300 #line 810 "mb-parser.jay"
1301   {
1302 /*              if (!UseExtendedSyntax)*/
1303 /*                      OptionExplicit = (bool)$3;*/
1304 /*              else*/
1305 /*                      Report.Warning (*/
1306 /*                              9999, lexer.Location, */
1307 /*                              "In MonoBASIC extended syntax explicit declaration is always required. So OPTION EXPLICIT is deprecated");*/
1308           }
1309   break;
1310 case 20:
1311 #line 823 "mb-parser.jay"
1312   {
1313 /*              if (!UseExtendedSyntax)*/
1314 /*                      OptionStrict = (bool)$3;*/
1315 /*              else*/
1316 /*                      Report.Warning (*/
1317 /*                              9999, lexer.Location, */
1318 /*                              "In MonoBASIC extended syntax strict assignability is always required. So OPTION STRICT is deprecated");*/
1319           }
1320   break;
1321 case 21:
1322 #line 835 "mb-parser.jay"
1323   {
1324 /*              OptionCompareBinary = (bool)$3;*/
1325           }
1326   break;
1327 case 26:
1328 #line 852 "mb-parser.jay"
1329   {
1330 /*              FIXME: Need to check declaration qualifiers for multi-file compilation*/
1331 /*              FIXME: Qualifiers cannot be applied to namespaces*/
1332                 allow_global_attribs = false;
1333           }
1334   break;
1335 case 27:
1336 #line 858 "mb-parser.jay"
1337   {
1338                 current_namespace.DeclarationFound = true;
1339           }
1340   break;
1341 case 28:
1342 #line 862 "mb-parser.jay"
1343   {
1344                   /* FIXME: Need to check declaration qualifiers for multi-file compilation*/
1345                   allow_global_attribs = false;
1346           }
1347   break;
1348 case 29:
1349 #line 867 "mb-parser.jay"
1350   {
1351                 string name = "";
1352                 int mod_flags;
1353
1354                 if (yyVals[0+yyTop] is Class){
1355                         Class c = (Class) yyVals[0+yyTop];
1356                         mod_flags = c.ModFlags;
1357                         name = c.Name;
1358                 } else if (yyVals[0+yyTop] is Struct){
1359                         Struct s = (Struct) yyVals[0+yyTop];
1360                         mod_flags = s.ModFlags;
1361                         name = s.Name;
1362                 } else
1363                         break;
1364
1365                 if ((mod_flags & (Modifiers.PRIVATE|Modifiers.PROTECTED)) != 0){
1366                         Report.Error (
1367                                 1527, lexer.Location, 
1368                                 "Namespace elements cant be explicitly " +
1369                                 "declared private or protected in `" + name + "'");
1370                 }
1371                 current_namespace.DeclarationFound = true;
1372           }
1373   break;
1374 case 36:
1375 #line 902 "mb-parser.jay"
1376   { yyVal = TypeManager.system_int32_expr; }
1377   break;
1378 case 37:
1379 #line 903 "mb-parser.jay"
1380   { yyVal = TypeManager.system_int64_expr; }
1381   break;
1382 case 38:
1383 #line 904 "mb-parser.jay"
1384   { yyVal = TypeManager.system_decimal_expr; }
1385   break;
1386 case 39:
1387 #line 905 "mb-parser.jay"
1388   { yyVal = TypeManager.system_single_expr; }
1389   break;
1390 case 40:
1391 #line 906 "mb-parser.jay"
1392   { yyVal = TypeManager.system_double_expr; }
1393   break;
1394 case 41:
1395 #line 907 "mb-parser.jay"
1396   { yyVal = TypeManager.system_string_expr; }
1397   break;
1398 case 42:
1399 #line 911 "mb-parser.jay"
1400   { yyVal = null; }
1401   break;
1402 case 43:
1403 #line 912 "mb-parser.jay"
1404   { yyVal = yyVals[0+yyTop]; }
1405   break;
1406 case 44:
1407 #line 918 "mb-parser.jay"
1408   {
1409                 yyVal = new MemberName ((string) yyVals[0+yyTop]);
1410         }
1411   break;
1412 case 45:
1413 #line 922 "mb-parser.jay"
1414   {
1415                 yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], (string) yyVals[0+yyTop], null);
1416           }
1417   break;
1418 case 53:
1419 #line 948 "mb-parser.jay"
1420   {
1421                 string name = ((MemberName) yyVals[0+yyTop]).GetName ();
1422                 current_namespace.Using (name, lexer.Location);
1423         }
1424   break;
1425 case 54:
1426 #line 953 "mb-parser.jay"
1427   {
1428                   current_namespace.UsingAlias ((string) yyVals[-2+yyTop], (MemberName) yyVals[0+yyTop], lexer.Location);
1429         }
1430   break;
1431 case 55:
1432 #line 960 "mb-parser.jay"
1433   { yyVal = Parameters.EmptyReadOnlyParameters; }
1434   break;
1435 case 56:
1436 #line 961 "mb-parser.jay"
1437   { yyVal = Parameters.EmptyReadOnlyParameters; }
1438   break;
1439 case 57:
1440 #line 962 "mb-parser.jay"
1441   { yyVal = yyVals[-1+yyTop]; }
1442   break;
1443 case 58:
1444 #line 967 "mb-parser.jay"
1445   { 
1446                   current_attributes = null;
1447           }
1448   break;
1449 case 59:
1450 #line 971 "mb-parser.jay"
1451   { 
1452                 yyVal = yyVals[0+yyTop]; 
1453                 local_attrib_section_added = false;
1454                 current_attributes = (Attributes) yyVals[0+yyTop];
1455           }
1456   break;
1457 case 60:
1458 #line 980 "mb-parser.jay"
1459   { 
1460                 yyVal = yyVals[0+yyTop];
1461                 if (yyVals[0+yyTop] == null) {
1462                         expecting_local_attribs = false;
1463                         expecting_global_attribs = false;
1464                         break;
1465                 }
1466                 
1467                 if (expecting_local_attribs) {
1468                         local_attrib_section_added = true;
1469                         allow_global_attribs = false;
1470
1471                         yyVal = new Attributes ((ArrayList) yyVals[0+yyTop]);
1472                 }       
1473
1474                 if (expecting_global_attribs) {
1475                         yyVal = null;
1476                         CodeGen.AddGlobalAttributes ((ArrayList) yyVals[0+yyTop]);
1477                 }
1478
1479                 expecting_local_attribs = false;
1480                 expecting_global_attribs = false;
1481           }
1482   break;
1483 case 61:
1484 #line 1004 "mb-parser.jay"
1485   {
1486                 yyVal = lexer.Location;
1487            }
1488   break;
1489 case 62:
1490 #line 1008 "mb-parser.jay"
1491   {
1492                 yyVal = yyVals[-2+yyTop];
1493                 if (yyVals[0+yyTop] != null) {
1494                         ArrayList attrs = (ArrayList) yyVals[0+yyTop];
1495
1496                         if (expecting_local_attribs) {
1497                                 if (local_attrib_section_added) {
1498                                         expecting_local_attribs = false;
1499                                         expecting_global_attribs = false;
1500                                         Report.Error (30205, (Location) yyVals[-1+yyTop], "Multiple attribute sections may not be used; Coalesce multiple attribute sections in to a single attribute section");
1501                                         break;
1502                                 }
1503
1504                                 if (yyVals[-2+yyTop] == null)
1505                                         yyVal = new Attributes (attrs);
1506                                 else 
1507                                         ((Attributes) yyVals[-2+yyTop]).AddAttributes (attrs);
1508
1509                                 local_attrib_section_added = true;
1510                                 allow_global_attribs = false;
1511                         }
1512
1513                         if (expecting_global_attribs) {
1514                                 yyVal = null;
1515                                 CodeGen.AddGlobalAttributes ((ArrayList) yyVals[0+yyTop]);
1516                         }
1517                 }       
1518
1519                 expecting_local_attribs = false;
1520                 expecting_global_attribs = false;
1521           }
1522   break;
1523 case 63:
1524 #line 1043 "mb-parser.jay"
1525   {
1526                 yyVal = null;
1527                 if (yyVals[-2+yyTop] != null) {
1528                         if (expecting_global_attribs && !(bool) yyVals[0+yyTop]) {
1529                                 Report.Error (30205, lexer.Location, "End of statement expected");
1530                                 break;
1531                         }
1532                         
1533                         if (expecting_local_attribs)  {
1534                                 if ((bool) yyVals[0+yyTop]) {
1535                                         Report.Error (32035, lexer.Location, "Use a line continuation after the attribute specifier to apply it to the following statement.");
1536                                         break;
1537                                 }
1538                         }
1539
1540                         yyVal = yyVals[-2+yyTop];
1541                 }
1542           }
1543   break;
1544 case 64:
1545 #line 1064 "mb-parser.jay"
1546   { yyVal = false; }
1547   break;
1548 case 65:
1549 #line 1065 "mb-parser.jay"
1550   { yyVal = true; }
1551   break;
1552 case 66:
1553 #line 1070 "mb-parser.jay"
1554   {
1555                 ArrayList attrs = null;
1556                 if (yyVals[0+yyTop] != null) {
1557                         attrs = new ArrayList ();
1558                         attrs.Add (yyVals[0+yyTop]);
1559                 }
1560                 yyVal = attrs;
1561           }
1562   break;
1563 case 67:
1564 #line 1079 "mb-parser.jay"
1565   {
1566                 ArrayList attrs = null;
1567                 
1568                 if (yyVals[0+yyTop] != null) {
1569                         attrs = (yyVals[-2+yyTop] == null) ? new ArrayList () : (ArrayList) yyVals[-2+yyTop];
1570                         attrs.Add (yyVals[0+yyTop]);
1571                 }
1572
1573                 yyVal = attrs;
1574           }
1575   break;
1576 case 68:
1577 #line 1093 "mb-parser.jay"
1578   {
1579                 yyVal = lexer.Location;
1580            }
1581   break;
1582 case 69:
1583 #line 1097 "mb-parser.jay"
1584   {
1585                 yyVal = null;
1586                 
1587                 if (expecting_global_attribs)
1588                         Report.Error (32015, (Location) yyVals[-1+yyTop], "Expecting Assembly or Module attribute specifiers");
1589                 else {
1590                         expecting_local_attribs = true;
1591                         MemberName mname = (MemberName) yyVals[-2+yyTop];
1592                         string name = mname.GetName ();
1593
1594                         yyVal = new Attribute (null, name, (ArrayList) yyVals[0+yyTop],
1595                                             (Location) yyVals[-1+yyTop]);
1596                 }
1597            }
1598   break;
1599 case 70:
1600 #line 1112 "mb-parser.jay"
1601   {
1602                 yyVal = lexer.Location;
1603             }
1604   break;
1605 case 71:
1606 #line 1117 "mb-parser.jay"
1607   {
1608                   yyVal = lexer.Location;
1609            }
1610   break;
1611 case 72:
1612 #line 1121 "mb-parser.jay"
1613   {
1614                 yyVal = null;
1615
1616                 string attribute_target = (string) yyVals[-5+yyTop];
1617                 if (attribute_target != "assembly" && attribute_target != "module") {
1618                         Report.Error (29999, lexer.Location, "`" + (string)yyVals[-5+yyTop] + "' is an invalid attribute modifier");
1619                         break;
1620                 }
1621                 if (!allow_global_attribs) {
1622                         Report.Error (30637, (Location) yyVals[-4+yyTop], "Global attribute statements must precede any declarations in a file");
1623                         break;
1624                 }
1625
1626                 if (expecting_local_attribs) {
1627                         Report.Error (30183, (Location) yyVals[-4+yyTop], "Global attributes cannot be combined with local attributes");
1628                         break;
1629                 }                       
1630
1631                 expecting_global_attribs = true;
1632
1633                 MemberName mname = (MemberName) yyVals[-2+yyTop];
1634                 string aname = mname.GetName ();
1635
1636                 yyVal = new Attribute (attribute_target, aname, (ArrayList) yyVals[0+yyTop], (Location) yyVals[-1+yyTop]);
1637             }
1638   break;
1639 case 73:
1640 #line 1150 "mb-parser.jay"
1641   { yyVal = "assembly"; }
1642   break;
1643 case 74:
1644 #line 1151 "mb-parser.jay"
1645   { yyVal = "module"; }
1646   break;
1647 case 76:
1648 #line 1157 "mb-parser.jay"
1649   { yyVal = null; }
1650   break;
1651 case 77:
1652 #line 1159 "mb-parser.jay"
1653   {
1654                 yyVal = yyVals[-1+yyTop];
1655           }
1656   break;
1657 case 80:
1658 #line 1171 "mb-parser.jay"
1659   {
1660                 ArrayList args = new ArrayList (4);
1661                 args.Add (yyVals[0+yyTop]);
1662         
1663                 yyVal = args;
1664           }
1665   break;
1666 case 81:
1667 #line 1178 "mb-parser.jay"
1668   {
1669                 ArrayList args = new ArrayList (4);
1670                 args.Add (yyVals[-2+yyTop]);
1671                 args.Add (yyVals[0+yyTop]);
1672
1673                 yyVal = args;
1674           }
1675   break;
1676 case 82:
1677 #line 1186 "mb-parser.jay"
1678   {
1679                 ArrayList args = new ArrayList (4);
1680                 args.Add (null);
1681                 args.Add (yyVals[0+yyTop]);
1682                 
1683                 yyVal = args;
1684           }
1685   break;
1686 case 83:
1687 #line 1197 "mb-parser.jay"
1688   {
1689                 ArrayList args = new ArrayList ();
1690                 args.Add (new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression));
1691
1692                 yyVal = args;
1693           }
1694   break;
1695 case 84:
1696 #line 1204 "mb-parser.jay"
1697   {
1698                 ArrayList args = (ArrayList) yyVals[-2+yyTop];
1699                 args.Add (new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression));
1700
1701                 yyVal = args;
1702          }
1703   break;
1704 case 85:
1705 #line 1214 "mb-parser.jay"
1706   {
1707                 ArrayList args = new ArrayList ();
1708                 args.Add (yyVals[0+yyTop]);
1709
1710                 yyVal = args;
1711           }
1712   break;
1713 case 86:
1714 #line 1221 "mb-parser.jay"
1715   {       
1716                 ArrayList args = (ArrayList) yyVals[-2+yyTop];
1717                 args.Add (yyVals[0+yyTop]);
1718
1719                 yyVal = args;
1720           }
1721   break;
1722 case 87:
1723 #line 1231 "mb-parser.jay"
1724   {
1725                 yyVal = new DictionaryEntry (
1726                         (string) yyVals[-2+yyTop], 
1727                         new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression));
1728           }
1729   break;
1730 case 88:
1731 #line 1240 "mb-parser.jay"
1732   {
1733                 if (current_attributes != null) {
1734                         Report.Error(1518, Lexer.Location, "Attributes cannot be applied to namespaces."
1735                                         + " Expected class, delegate, enum, interface, or struct");
1736                 }
1737
1738                 MemberName name = (MemberName) yyVals[-1+yyTop];
1739
1740                 if ((current_namespace.Parent != null) && (name.Left != null)) {
1741                         Report.Error (134, lexer.Location,
1742                                       "Cannot use qualified namespace names in nested " +
1743                                       "namespace declarations");
1744                 }
1745
1746                 current_namespace = new NamespaceEntry (
1747                         current_namespace, file, name.GetName (), lexer.Location);
1748           }
1749   break;
1750 case 89:
1751 #line 1259 "mb-parser.jay"
1752   { 
1753                 current_namespace = current_namespace.Parent;
1754           }
1755   break;
1756 case 97:
1757 #line 1280 "mb-parser.jay"
1758   {
1759                 if (implicit_modifiers && ((current_modifiers & Modifiers.STATIC) != 0))
1760                         current_modifiers = (current_modifiers & ~Modifiers.STATIC);
1761
1762                 MemberName name = MakeName (new MemberName ((string) yyVals[-1+yyTop]));
1763                 int mod_flags = current_modifiers;
1764
1765
1766                 current_class = new Class (current_namespace, current_container, name,
1767                                            mod_flags, (Attributes) current_attributes, lexer.Location);
1768
1769
1770                 current_container = current_class;
1771                 RootContext.Tree.RecordDecl (name.GetName (true), current_class);
1772           }
1773   break;
1774 case 98:
1775 #line 1297 "mb-parser.jay"
1776   {
1777                 ArrayList bases = (ArrayList) yyVals[-1+yyTop];
1778                 ArrayList ifaces = (ArrayList) yyVals[0+yyTop];
1779
1780                 if (ifaces != null){
1781                         if (bases != null)      
1782                                 bases.AddRange(ifaces);
1783                         else
1784                                 bases = ifaces;
1785                 }
1786
1787                 if (bases != null) {
1788                         if (current_class.Name == "System.Object") {
1789                                 Report.Error (537, current_class.Location,
1790                                               "The class System.Object cannot have a base " +
1791                                               "class or implement an interface.");
1792                         }
1793                         current_class.Bases = (ArrayList) bases;
1794                 }
1795
1796                 current_class.Register ();
1797           }
1798   break;
1799 case 99:
1800 #line 1321 "mb-parser.jay"
1801   {
1802                 yyVal = current_class;
1803
1804                 current_container = current_container.Parent;
1805                 current_class = current_container;
1806           }
1807   break;
1808 case 100:
1809 #line 1330 "mb-parser.jay"
1810   { yyVal = null; }
1811   break;
1812 case 101:
1813 #line 1331 "mb-parser.jay"
1814   { yyVal = yyVals[-1+yyTop]; }
1815   break;
1816 case 102:
1817 #line 1335 "mb-parser.jay"
1818   { yyVal = null; }
1819   break;
1820 case 103:
1821 #line 1336 "mb-parser.jay"
1822   { yyVal = yyVals[-1+yyTop]; }
1823   break;
1824 case 104:
1825 #line 1341 "mb-parser.jay"
1826   { 
1827                 yyVal = (int) 0; 
1828                 current_modifiers = 0; 
1829         }
1830   break;
1831 case 105:
1832 #line 1346 "mb-parser.jay"
1833   { 
1834                 yyVal = yyVals[0+yyTop]; 
1835                 current_modifiers = (int) yyVals[0+yyTop]; 
1836         }
1837   break;
1838 case 107:
1839 #line 1355 "mb-parser.jay"
1840   { 
1841                 int m1 = (int) yyVals[-1+yyTop];
1842                 int m2 = (int) yyVals[0+yyTop];
1843
1844                 if ((m1 & m2) != 0) {
1845                         Location l = lexer.Location;
1846                         Report.Error (1004, l, "Duplicate modifier: `" + Modifiers.Name (m2) + "'");
1847                 }
1848                 yyVal = (int) (m1 | m2);
1849           }
1850   break;
1851 case 108:
1852 #line 1368 "mb-parser.jay"
1853   { yyVal = Modifiers.PUBLIC; }
1854   break;
1855 case 109:
1856 #line 1369 "mb-parser.jay"
1857   { yyVal = Modifiers.PROTECTED; }
1858   break;
1859 case 110:
1860 #line 1370 "mb-parser.jay"
1861   { yyVal = Modifiers.PRIVATE; }
1862   break;
1863 case 111:
1864 #line 1371 "mb-parser.jay"
1865   { yyVal = Modifiers.STATIC; }
1866   break;
1867 case 112:
1868 #line 1372 "mb-parser.jay"
1869   { yyVal = Modifiers.INTERNAL; }
1870   break;
1871 case 113:
1872 #line 1373 "mb-parser.jay"
1873   { yyVal = Modifiers.SEALED; }
1874   break;
1875 case 114:
1876 #line 1374 "mb-parser.jay"
1877   { yyVal = Modifiers.VIRTUAL; }
1878   break;
1879 case 115:
1880 #line 1375 "mb-parser.jay"
1881   { yyVal = Modifiers.NONVIRTUAL; }
1882   break;
1883 case 116:
1884 #line 1376 "mb-parser.jay"
1885   { yyVal = Modifiers.OVERRIDE; }
1886   break;
1887 case 117:
1888 #line 1377 "mb-parser.jay"
1889   { yyVal = Modifiers.NEW; }
1890   break;
1891 case 118:
1892 #line 1378 "mb-parser.jay"
1893   { yyVal = Modifiers.SHADOWS; }
1894   break;
1895 case 119:
1896 #line 1379 "mb-parser.jay"
1897   { yyVal = Modifiers.ABSTRACT; }
1898   break;
1899 case 120:
1900 #line 1380 "mb-parser.jay"
1901   { yyVal = Modifiers.READONLY; }
1902   break;
1903 case 121:
1904 #line 1381 "mb-parser.jay"
1905   { yyVal = Modifiers.DEFAULT; }
1906   break;
1907 case 122:
1908 #line 1382 "mb-parser.jay"
1909   { yyVal = Modifiers.WRITEONLY; }
1910   break;
1911 case 123:
1912 #line 1387 "mb-parser.jay"
1913   { 
1914                 MemberName name = MakeName(new MemberName ((string) yyVals[-1+yyTop]));
1915                 current_class = new VBModule (current_namespace, current_container, name, 
1916                                             current_modifiers, current_attributes, lexer.Location);
1917
1918                 current_container = current_class;
1919                 RootContext.Tree.RecordDecl(name.GetName (true), current_class);
1920
1921                 current_class.Register ();
1922           }
1923   break;
1924 case 124:
1925 #line 1399 "mb-parser.jay"
1926   {
1927                 yyVal = current_class;
1928 /*              FIXME: ?????*/
1929 /*              TypeManager.AddStandardModule (current_class);*/
1930
1931                 current_container = current_container.Parent;
1932                 current_class = current_container;
1933           }
1934   break;
1935 case 129:
1936 #line 1422 "mb-parser.jay"
1937   { 
1938                 current_modifiers = ((int)yyVals[0+yyTop]) | Modifiers.STATIC; 
1939                 bool explicit_static = (((int) yyVals[0+yyTop] & Modifiers.STATIC) > 0);
1940                 implicit_modifiers = (!explicit_static);
1941            }
1942   break;
1943 case 130:
1944 #line 1429 "mb-parser.jay"
1945   {
1946                 implicit_modifiers = false;
1947                 yyVal = yyVals[-1+yyTop];
1948            }
1949   break;
1950 case 138:
1951 #line 1449 "mb-parser.jay"
1952   {
1953                 if (implicit_modifiers && ((current_modifiers & Modifiers.STATIC) != 0))
1954                         current_modifiers = (current_modifiers & ~Modifiers.STATIC);
1955                 
1956                 int modflags = (int) current_modifiers;
1957                 
1958                 /* Structure members are Public by default                      */
1959                 if ((current_container is Struct) && (modflags == 0))
1960                         modflags = Modifiers.PUBLIC;                    
1961
1962                 ArrayList consts = (ArrayList) yyVals[-1+yyTop];
1963                 if(consts.Count > 0) 
1964                 {
1965                         VariableDeclaration.FixupTypes ((ArrayList) yyVals[-1+yyTop]);
1966                         VariableDeclaration.FixupArrayTypes ((ArrayList) yyVals[-1+yyTop]);
1967
1968                         foreach (VariableDeclaration constant in (ArrayList) yyVals[-1+yyTop]){
1969                                 Location l = constant.Location;
1970                                 Const c = new Const (current_class, 
1971                                                      (Expression) constant.type, 
1972                                                      (String) constant.identifier, 
1973                                                      (Expression) constant.expression_or_array_initializer, 
1974                                                      modflags, current_attributes, l);
1975
1976                                 current_container.AddConstant (c);
1977                         }
1978                 }
1979         }
1980   break;
1981 case 143:
1982 #line 1493 "mb-parser.jay"
1983   {
1984                 yyVal = yyVals[0+yyTop];
1985            }
1986   break;
1987 case 153:
1988 #line 1571 "mb-parser.jay"
1989   {
1990                 MemberName name = new MemberName ((string) yyVals[-1+yyTop]);
1991
1992                 if ((current_container is Struct) && (current_modifiers == 0))
1993                         current_modifiers = Modifiers.PUBLIC;           
1994
1995
1996                 GenericMethod generic = null;
1997                 Method method = new Method (current_class, generic, TypeManager.system_void_expr,
1998                                             (int) current_modifiers, false, name, 
1999                                             (Parameters) yyVals[0+yyTop], (Attributes) current_attributes, 
2000                                             lexer.Location);
2001
2002                 current_local_parameters = (Parameters) yyVals[0+yyTop];
2003                 yyVal = method;
2004
2005                 iterator_container = (IIteratorContainer) method;
2006           }
2007   break;
2008 case 154:
2009 #line 1595 "mb-parser.jay"
2010   {
2011                 Method method = (Method) yyVals[-9+yyTop];
2012                 Block b = (Block) yyVals[-3+yyTop];
2013                 const int extern_abstract = (Modifiers.EXTERN | Modifiers.ABSTRACT);
2014
2015                 if (b == null){
2016                         if ((method.ModFlags & extern_abstract) == 0){
2017                                 Report.Error (
2018                                         501, lexer.Location,  current_container.MakeName (method.Name) +
2019                                         "must declare a body because it is not marked abstract or extern");
2020                         }
2021                 } else {
2022                         if ((method.ModFlags & Modifiers.EXTERN) != 0){
2023                                 Report.Error (
2024                                         179, lexer.Location, current_container.MakeName (method.Name) +
2025                                         " is declared extern, but has a body");
2026                         }
2027                 }
2028
2029                 method.Block = (ToplevelBlock) yyVals[-3+yyTop];
2030                 current_container.AddMethod (method);
2031
2032                 current_local_parameters = null;
2033                 iterator_container = null;
2034           }
2035   break;
2036 case 155:
2037 #line 1625 "mb-parser.jay"
2038   {
2039                 MemberName name =  new MemberName ((string) yyVals[-3+yyTop]);
2040                 Expression rettype = (yyVals[0+yyTop] == null) ? ((yyVals[-2+yyTop] == null) ? TypeManager.system_object_expr : (Expression) yyVals[-2+yyTop] ) : (Expression) yyVals[0+yyTop];
2041
2042                 GenericMethod generic = null;
2043
2044                 Method method = new Method (current_class, generic, rettype, current_modifiers,
2045                                             false, name,  (Parameters) yyVals[-1+yyTop], current_attributes,
2046                                             lexer.Location);
2047
2048                 current_local_parameters = (Parameters) yyVals[-1+yyTop];
2049
2050                 yyVal = method;
2051                 iterator_container = method;
2052           }
2053   break;
2054 case 156:
2055 #line 1643 "mb-parser.jay"
2056   { 
2057                 Method method = (Method) yyVals[-3+yyTop];
2058
2059                 ArrayList retval = new ArrayList ();
2060                 retval.Add (new VariableDeclaration ((string) yyVals[-7+yyTop], method.Type, lexer.Location));
2061                 declare_local_variables (method.Type, retval, lexer.Location);
2062           }
2063   break;
2064 case 157:
2065 #line 1653 "mb-parser.jay"
2066   {
2067                 Method method = (Method) yyVals[-9+yyTop];
2068                 Block b = (Block) yyVals[-3+yyTop];
2069                 const int extern_abstract = (Modifiers.EXTERN | Modifiers.ABSTRACT);
2070
2071                 if (b == null){
2072                         if ((method.ModFlags & extern_abstract) == 0){
2073                                 Report.Error (
2074                                         501, lexer.Location,  current_container.MakeName (method.Name) +
2075                                         "must declare a body because it is not marked abstract or extern");
2076                         }
2077                 } else {
2078                         if ((method.ModFlags & Modifiers.EXTERN) != 0){
2079                                 Report.Error (
2080                                         179, lexer.Location, current_container.MakeName (method.Name) +
2081                                         " is declared extern, but has a body");
2082                         }
2083                 }
2084
2085                 method.Block = (ToplevelBlock) b;
2086                 current_container.AddMethod (method);
2087
2088                 current_local_parameters = null;
2089                 iterator_container = null;
2090           }
2091   break;
2092 case 158:
2093 #line 1683 "mb-parser.jay"
2094   { 
2095                 MemberName name = MakeName (new MemberName ((string) yyVals[-2+yyTop]));
2096
2097                 if (implicit_modifiers && ((current_modifiers & Modifiers.STATIC) != 0))
2098                         current_modifiers = (current_modifiers & ~Modifiers.STATIC);
2099
2100                 current_class = new Struct (current_namespace, current_container, name, current_modifiers,
2101                                             current_attributes, lexer.Location);
2102
2103                 current_container = current_class;
2104                 RootContext.Tree.RecordDecl (name.GetName (true), current_class);
2105
2106                 if (yyVals[0+yyTop] != null)
2107                         current_class.Bases = (ArrayList) yyVals[0+yyTop];
2108
2109                 current_class.Register ();
2110           }
2111   break;
2112 case 159:
2113 #line 1701 "mb-parser.jay"
2114   {
2115                 yyVal = current_class;
2116
2117                 current_container = current_container.Parent;
2118                 current_class = current_container;
2119           }
2120   break;
2121 case 174:
2122 #line 1806 "mb-parser.jay"
2123   {
2124                 VariableDeclaration var = new VariableDeclaration ((string) yyVals[-4+yyTop], (Expression) yyVals[-2+yyTop], lexer.Location);
2125
2126                 MemberName name = new MemberName ((string) yyVals[-4+yyTop]);
2127
2128                 Event e = new EventField (current_class, (Expression) yyVals[-2+yyTop], current_modifiers, false, name,
2129                                           var.expression_or_array_initializer, current_attributes,
2130                                           lexer.Location);
2131
2132                 current_container.AddEvent (e);
2133           }
2134   break;
2135 case 175:
2136 #line 1860 "mb-parser.jay"
2137   { 
2138                 Location enum_location = lexer.Location;
2139
2140                 Expression base_type = TypeManager.system_int32_expr;
2141                 if ((Expression) yyVals[-2+yyTop] != null)
2142                         base_type = (Expression) yyVals[-2+yyTop];
2143
2144                 ArrayList enum_members = (ArrayList) yyVals[0+yyTop];
2145                 if (enum_members.Count == 0)
2146                         Report.Error (30280, enum_location,
2147                                       "Enum can not have empty member list");
2148
2149
2150                 if (implicit_modifiers && ((current_modifiers & Modifiers.STATIC) != 0))
2151                         current_modifiers = (current_modifiers & ~Modifiers.STATIC);
2152                         
2153                 MemberName full_name = MakeName (new MemberName ((string) yyVals[-3+yyTop]));
2154                 Enum e = new Enum (current_namespace, current_container, base_type, 
2155                                    (int) current_modifiers, full_name, 
2156                                    (Attributes) current_attributes, enum_location);
2157                 
2158                 foreach (VariableDeclaration ev in (ArrayList) yyVals[0+yyTop]) {
2159                         e.AddEnumMember (ev.identifier, 
2160                                          (Expression) ev.expression_or_array_initializer,
2161                                          ev.Location, ev.OptAttributes, ev.DocComment);
2162                 }
2163
2164                 string name = full_name.GetName ();
2165                 current_container.AddEnum (e);
2166                 RootContext.Tree.RecordDecl (name, e);
2167
2168           }
2169   break;
2170 case 177:
2171 #line 1896 "mb-parser.jay"
2172   { yyVal = new ArrayList (4); }
2173   break;
2174 case 178:
2175 #line 1897 "mb-parser.jay"
2176   { yyVal = yyVals[0+yyTop]; }
2177   break;
2178 case 179:
2179 #line 1902 "mb-parser.jay"
2180   {
2181                 ArrayList l = new ArrayList ();
2182
2183                 l.Add (yyVals[0+yyTop]);
2184                 yyVal = l;
2185           }
2186   break;
2187 case 180:
2188 #line 1909 "mb-parser.jay"
2189   {
2190                 ArrayList l = (ArrayList) yyVals[-1+yyTop];
2191
2192                 l.Add (yyVals[0+yyTop]);
2193
2194                 yyVal = l;
2195           }
2196   break;
2197 case 181:
2198 #line 1920 "mb-parser.jay"
2199   {
2200                 yyVal = new VariableDeclaration ((string) yyVals[-1+yyTop], null, lexer.Location, (Attributes) yyVals[-2+yyTop]);
2201           }
2202   break;
2203 case 182:
2204 #line 1924 "mb-parser.jay"
2205   {
2206                   yyVal = lexer.Location;
2207           }
2208   break;
2209 case 183:
2210 #line 1928 "mb-parser.jay"
2211   { 
2212                 yyVal = new VariableDeclaration ((string) yyVals[-4+yyTop], yyVals[-1+yyTop], lexer.Location, (Attributes) yyVals[-5+yyTop]);
2213           }
2214   break;
2215 case 184:
2216 #line 2019 "mb-parser.jay"
2217   {
2218                 get_implicit_value_parameter_type  = 
2219                         (yyVals[-1+yyTop] == null) ? ((yyVals[-3+yyTop] == null) ? 
2220                                 TypeManager.system_object_expr : (Expression) yyVals[-3+yyTop] ) : (Expression) yyVals[-1+yyTop];
2221
2222                 current_local_parameters = (Parameters) yyVals[-2+yyTop];
2223                 if (current_local_parameters != Parameters.EmptyReadOnlyParameters) { 
2224                         get_parameters = current_local_parameters.Copy (lexer.Location);
2225                         set_parameters = current_local_parameters.Copy (lexer.Location);
2226                         
2227                         Parameter implicit_value_parameter = new Parameter (
2228                                         get_implicit_value_parameter_type, "Value", Parameter.Modifier.NONE, null);
2229                         
2230                         set_parameters.AppendParameter (implicit_value_parameter);
2231                 }
2232                 else
2233                 {
2234                         get_parameters = Parameters.EmptyReadOnlyParameters;
2235                         set_parameters = new Parameters (null, null ,lexer.Location); 
2236                         
2237                         Parameter implicit_value_parameter = new Parameter (
2238                                         get_implicit_value_parameter_type, "Value", Parameter.Modifier.NONE, null);
2239                         
2240                         set_parameters.AppendParameter (implicit_value_parameter);
2241                 }
2242                 lexer.PropertyParsing = true;
2243                 
2244                 Location loc = lexer.Location;
2245                 MemberName name = new MemberName ((string) yyVals[-4+yyTop]);
2246
2247                 Accessor get_block = new Accessor (null, 0, null, loc); 
2248                 Accessor set_block = new Accessor (null, 0, null, loc); 
2249
2250                 Property prop = new Property (current_class, get_implicit_value_parameter_type, 
2251                                      (int) current_modifiers, true,
2252                                      name, current_attributes, 
2253                                      get_parameters, get_block, 
2254                                      set_parameters, set_block, lexer.Location);
2255                 
2256                 current_container.AddProperty (prop);
2257                 
2258                 get_implicit_value_parameter_type = null;
2259                 set_implicit_value_parameter_type = null;
2260                 get_parameters = null;
2261                 set_parameters = null;
2262                 current_local_parameters = null;                        
2263           }
2264   break;
2265 case 185:
2266 #line 2105 "mb-parser.jay"
2267   {
2268                 MemberName name = new MemberName ((string) yyVals[-1+yyTop]);
2269
2270                 current_class = new Interface (current_namespace, current_container, 
2271                                                name, (int) current_modifiers, 
2272                                                (Attributes) current_attributes, lexer.Location);
2273
2274                 current_container = current_class;
2275                 RootContext.Tree.RecordDecl (name.GetName (true), current_class);
2276
2277           }
2278   break;
2279 case 186:
2280 #line 2117 "mb-parser.jay"
2281   {
2282                 current_class.Bases = (ArrayList) yyVals[0+yyTop];
2283                 current_class.Register ();
2284           }
2285   break;
2286 case 187:
2287 #line 2122 "mb-parser.jay"
2288   {
2289                 yyVal = current_class;
2290
2291                 current_container = current_container.Parent;
2292                 current_class = current_container;
2293           }
2294   break;
2295 case 189:
2296 #line 2132 "mb-parser.jay"
2297   { yyVal = null; }
2298   break;
2299 case 190:
2300 #line 2133 "mb-parser.jay"
2301   { yyVal = yyVals[0+yyTop]; }
2302   break;
2303 case 192:
2304 #line 2139 "mb-parser.jay"
2305   {
2306                 ArrayList bases = (ArrayList) yyVals[-1+yyTop];
2307                 bases.AddRange ((ArrayList) yyVals[0+yyTop]);
2308                 yyVal = bases;
2309           }
2310   break;
2311 case 193:
2312 #line 2147 "mb-parser.jay"
2313   { yyVal = yyVals[-1+yyTop]; }
2314   break;
2315 case 200:
2316 #line 2170 "mb-parser.jay"
2317   { 
2318                 Method m = (Method) yyVals[0+yyTop];
2319
2320                 current_container.AddMethod (m);
2321           }
2322   break;
2323 case 202:
2324 #line 2181 "mb-parser.jay"
2325   {
2326                 MemberName name = (MemberName) new MemberName ((string) yyVals[-2+yyTop]);
2327
2328                 GenericMethod generic = null;
2329
2330                 yyVal = new Method (current_class, generic, TypeManager.system_void_expr, 
2331                                  (int) current_modifiers, true, name, (Parameters) yyVals[-1+yyTop],  
2332                                  (Attributes) current_attributes, lexer.Location);
2333           }
2334   break;
2335 case 203:
2336 #line 2192 "mb-parser.jay"
2337   {
2338                 MemberName name = new MemberName ((string) yyVals[-4+yyTop]);
2339                 Expression return_type = (yyVals[-1+yyTop] == null) ? 
2340                         ((yyVals[-3+yyTop] == null) ? TypeManager.system_object_expr : (Expression) yyVals[-3+yyTop] ) 
2341                         : (Expression) yyVals[-1+yyTop];
2342
2343                 GenericMethod generic = null;
2344                 yyVal = new Method (current_class, generic, return_type, (int) current_modifiers, 
2345                                  true, name, (Parameters) yyVals[-2+yyTop], (Attributes) current_attributes,
2346                                  lexer.Location);
2347           }
2348   break;
2349 case 205:
2350 #line 2268 "mb-parser.jay"
2351   {
2352                 get_implicit_value_parameter_type  = 
2353                         (yyVals[-2+yyTop] == null) ? ((yyVals[-4+yyTop] == null) ? 
2354                                 TypeManager.system_object_expr : (Expression) yyVals[-4+yyTop] ) : (Expression) yyVals[-2+yyTop];
2355                 get_implicit_value_parameter_name = (string) yyVals[-5+yyTop];
2356                 
2357                 current_local_parameters = (Parameters) yyVals[-3+yyTop];
2358                 if (current_local_parameters != Parameters.EmptyReadOnlyParameters) { 
2359                         get_parameters = current_local_parameters.Copy (lexer.Location);
2360                         set_parameters = current_local_parameters.Copy (lexer.Location);
2361                 }
2362                 else
2363                 {
2364                         get_parameters = Parameters.EmptyReadOnlyParameters;
2365                         set_parameters = new Parameters (null, null ,lexer.Location);           
2366                 }
2367                 lexer.PropertyParsing = true;
2368
2369                 yyVal = lexer.Location;
2370           }
2371   break;
2372 case 206:
2373 #line 2290 "mb-parser.jay"
2374   {
2375                 lexer.PropertyParsing = false;
2376
2377                 Property prop;
2378                 Pair pair = (Pair) yyVals[-3+yyTop];
2379                 
2380                 Accessor get_block = (Accessor) pair.First; 
2381                 Accessor set_block = (Accessor) pair.Second; 
2382                 
2383                 Location loc = lexer.Location;
2384                 MemberName name = new MemberName ((string) yyVals[-10+yyTop]);
2385
2386                 /* FIXME: Implements Clause needs to be taken care of.*/
2387
2388                 if ((current_container is Struct) && (current_modifiers == 0))
2389                         current_modifiers = Modifiers.PUBLIC;                           
2390
2391
2392                 prop = new Property (current_class, get_implicit_value_parameter_type, 
2393                                      (int) current_modifiers, false,
2394                                      name, (Attributes) current_attributes, 
2395                                      get_parameters, get_block, 
2396                                      set_parameters, set_block, lexer.Location);
2397                 
2398                 current_container.AddProperty (prop);
2399                 get_implicit_value_parameter_type = null;
2400                 set_implicit_value_parameter_type = null;
2401                 get_parameters = null;
2402                 set_parameters = null;
2403                 current_local_parameters = null;
2404           }
2405   break;
2406 case 207:
2407 #line 2325 "mb-parser.jay"
2408   {
2409                 yyVal = Parameters.EmptyReadOnlyParameters;
2410           }
2411   break;
2412 case 208:
2413 #line 2329 "mb-parser.jay"
2414   {
2415                 yyVal = yyVals[-1+yyTop];
2416           }
2417   break;
2418 case 209:
2419 #line 2336 "mb-parser.jay"
2420   {
2421                 yyVal = null;
2422           }
2423   break;
2424 case 210:
2425 #line 2340 "mb-parser.jay"
2426   {
2427                 yyVal = yyVals[0+yyTop];
2428           }
2429   break;
2430 case 211:
2431 #line 2347 "mb-parser.jay"
2432   {
2433                   MemberName mname = (MemberName) yyVals[0+yyTop];
2434                   ArrayList impl_list = new ArrayList ();
2435                   impl_list.Add (mname.GetTypeExpression (lexer.Location));
2436                   yyVal = impl_list;
2437           }
2438   break;
2439 case 212:
2440 #line 2354 "mb-parser.jay"
2441   {
2442                   MemberName mname = (MemberName) yyVals[0+yyTop];
2443                   ArrayList impl_list = (ArrayList) yyVals[-2+yyTop];
2444                   impl_list.Add (mname.GetTypeExpression (lexer.Location));
2445                   yyVal = impl_list;
2446           }
2447   break;
2448 case 213:
2449 #line 2364 "mb-parser.jay"
2450   { 
2451                 yyVal = new Pair (yyVals[-1+yyTop], yyVals[0+yyTop]);
2452           }
2453   break;
2454 case 214:
2455 #line 2368 "mb-parser.jay"
2456   {
2457                 yyVal = new Pair (yyVals[0+yyTop], yyVals[-1+yyTop]);
2458           }
2459   break;
2460 case 215:
2461 #line 2374 "mb-parser.jay"
2462   { yyVal = null; }
2463   break;
2464 case 217:
2465 #line 2379 "mb-parser.jay"
2466   { yyVal = null; }
2467   break;
2468 case 219:
2469 #line 2385 "mb-parser.jay"
2470   {
2471                 if ((current_modifiers & Modifiers.WRITEONLY) != 0)
2472                         Report.Error (30023, "'WriteOnly' properties cannot have a 'Get' accessor");
2473           
2474                 current_local_parameters = get_parameters;
2475                 
2476                 lexer.PropertyParsing = false;
2477                 
2478           }
2479   break;
2480 case 220:
2481 #line 2395 "mb-parser.jay"
2482   {
2483                 ArrayList retval = new ArrayList ();
2484                 retval.Add (new VariableDeclaration (get_implicit_value_parameter_name, get_implicit_value_parameter_type, lexer.Location));
2485                 declare_local_variables (get_implicit_value_parameter_type, retval, lexer.Location);    
2486           }
2487   break;
2488 case 221:
2489 #line 2403 "mb-parser.jay"
2490   {
2491                 yyVal = new Accessor ((ToplevelBlock) yyVals[-3+yyTop], (int) current_modifiers, 
2492                                    (Attributes) yyVals[-10+yyTop], lexer.Location);
2493
2494                 current_local_parameters = null;
2495                 lexer.PropertyParsing = true;
2496           }
2497   break;
2498 case 222:
2499 #line 2416 "mb-parser.jay"
2500   {
2501         if ((current_modifiers & Modifiers.READONLY) != 0)
2502                         Report.Error (30022, "'ReadOnly' properties cannot have a 'Set' accessor");
2503                         
2504                 Parameter implicit_value_parameter = new Parameter (
2505                         set_implicit_value_parameter_type, 
2506                         set_implicit_value_parameter_name, 
2507                         Parameter.Modifier.NONE, null);
2508
2509                 set_parameters.AppendParameter (implicit_value_parameter);
2510                 current_local_parameters = set_parameters;
2511
2512                 lexer.PropertyParsing = false;
2513           }
2514   break;
2515 case 223:
2516 #line 2434 "mb-parser.jay"
2517   {
2518                 yyVal = new Accessor ((ToplevelBlock) yyVals[-3+yyTop], (int) current_modifiers, 
2519                                    (Attributes) yyVals[-10+yyTop], lexer.Location);
2520                 current_local_parameters = null;
2521                 lexer.PropertyParsing = true;
2522           }
2523   break;
2524 case 224:
2525 #line 2444 "mb-parser.jay"
2526   {
2527                 set_implicit_value_parameter_type = (Expression) get_implicit_value_parameter_type; /* TypeManager.system_object_expr;*/
2528                 set_implicit_value_parameter_name = "Value";
2529         }
2530   break;
2531 case 225:
2532 #line 2449 "mb-parser.jay"
2533   {
2534                 set_implicit_value_parameter_type = (Expression) get_implicit_value_parameter_type;
2535                 set_implicit_value_parameter_name = "Value";
2536         }
2537   break;
2538 case 226:
2539 #line 2454 "mb-parser.jay"
2540   {
2541                 Parameter.Modifier pm = (Parameter.Modifier)yyVals[-3+yyTop];
2542                 if ((pm | Parameter.Modifier.VAL) != 0)
2543                         Report.Error (31065, 
2544                                 lexer.Location, 
2545                                 "Set cannot have a paremeter modifier other than 'ByVal'");
2546                                 
2547                 set_implicit_value_parameter_type = (Expression) yyVals[-1+yyTop];
2548                 
2549                 if (set_implicit_value_parameter_type.ToString () != get_implicit_value_parameter_type.ToString ())
2550                         Report.Error (31064, 
2551                                 lexer.Location, 
2552                                 "Set value parameter type can not be different from property type");
2553                                 
2554                 if (yyVals[-3+yyTop] != null)
2555                         set_implicit_value_parameter_name = (string) yyVals[-2+yyTop];
2556                 else
2557                         set_implicit_value_parameter_name = "Value";
2558         }
2559   break;
2560 case 227:
2561 #line 2478 "mb-parser.jay"
2562   {               
2563                 int mod = (int) current_modifiers;
2564
2565                 VariableDeclaration.FixupTypes ((ArrayList) yyVals[-1+yyTop]);
2566                 VariableDeclaration.FixupArrayTypes ((ArrayList) yyVals[-1+yyTop]);
2567                 
2568 /*              if (current_container is Module)*/
2569 /*                      mod = mod | Modifiers.STATIC;*/
2570                         
2571                 /* Structure members are Public by default                      */
2572                 if ((current_container is Struct) && (mod == 0))
2573                         mod = Modifiers.PUBLIC;                 
2574                 
2575                 if ((mod & Modifiers.Accessibility) == 0)
2576                         mod |= Modifiers.PRIVATE;
2577                                         
2578                 foreach (VariableDeclaration var in (ArrayList) yyVals[-1+yyTop]){
2579                         Location l = var.Location;
2580                         Field field = new Field (current_class, var.type, mod, 
2581                                                  var.identifier, var.expression_or_array_initializer, 
2582                                                  (Attributes) null, l);
2583
2584                         current_container.AddField (field);
2585                 }
2586           }
2587   break;
2588 case 230:
2589 #line 2555 "mb-parser.jay"
2590   {
2591                 Location l = lexer.Location;
2592                 MemberName name = MakeName (new MemberName ((string) yyVals[-4+yyTop]));
2593
2594                 if (implicit_modifiers && ((current_modifiers & Modifiers.STATIC) != 0))
2595                         current_modifiers = (current_modifiers & ~Modifiers.STATIC);
2596
2597                 Delegate del = new Delegate (current_namespace, current_container, TypeManager.system_void_expr,
2598                                              current_modifiers, name, (Parameters) yyVals[-2+yyTop], current_attributes, l);
2599
2600                 current_container.AddDelegate (del);
2601                 RootContext.Tree.RecordDecl (name.GetName (true), del);
2602           }
2603   break;
2604 case 231:
2605 #line 2573 "mb-parser.jay"
2606   {
2607                 Location l = lexer.Location;
2608                 MemberName name = MakeName (new MemberName ((string) yyVals[-5+yyTop]));
2609
2610                 if (implicit_modifiers && ((current_modifiers & Modifiers.STATIC) != 0))
2611                         current_modifiers = (current_modifiers & ~Modifiers.STATIC);
2612
2613                 Expression rettype = (yyVals[-1+yyTop] == null) ? TypeManager.system_object_expr : (Expression) yyVals[-1+yyTop];
2614                 Delegate del = new Delegate (current_namespace, current_container, rettype,
2615                                              current_modifiers, name, (Parameters) yyVals[-3+yyTop], current_attributes, l);
2616
2617                 current_container.AddDelegate (del);
2618                 RootContext.Tree.RecordDecl (name.GetName (true), del);
2619           }
2620   break;
2621 case 232:
2622 #line 2592 "mb-parser.jay"
2623   {     yyVal = null; }
2624   break;
2625 case 233:
2626 #line 2619 "mb-parser.jay"
2627   {
2628                 current_local_parameters = (Parameters) yyVals[-1+yyTop];
2629                 yyVal = new Constructor (current_class, current_container.Basename, 0, (Parameters) yyVals[-1+yyTop], 
2630                                       (ConstructorInitializer) null, lexer.Location);
2631           }
2632   break;
2633 case 234:
2634 #line 2627 "mb-parser.jay"
2635   { 
2636                 Constructor c = (Constructor) yyVals[-3+yyTop];
2637                 c.Block = (ToplevelBlock) yyVals[0+yyTop];
2638                 c.ModFlags = (int) current_modifiers;
2639                 c.OptAttributes = current_attributes;
2640
2641                 /* FIXME: Some more error checking from mcs needs to be merged here ???*/
2642                 
2643                 c.Initializer = CheckConstructorInitializer (ref c.Block.statements);
2644
2645                 current_container.AddConstructor(c);
2646                 current_local_parameters = null;
2647           }
2648   break;
2649 case 236:
2650 #line 2645 "mb-parser.jay"
2651   { 
2652                 yyVal = Parameters.EmptyReadOnlyParameters; 
2653           }
2654   break;
2655 case 237:
2656 #line 2649 "mb-parser.jay"
2657   { 
2658                 yyVal = yyVals[0+yyTop];        
2659           }
2660   break;
2661 case 238:
2662 #line 2656 "mb-parser.jay"
2663   { 
2664                 ArrayList pars_list = (ArrayList) yyVals[0+yyTop];
2665                 Parameter [] pars = null; 
2666                 Parameter array_parameter = null;
2667                 int non_array_count = pars_list.Count;
2668                 if (pars_list.Count > 0 && (((Parameter) pars_list [pars_list.Count - 1]).ModFlags & Parameter.Modifier.PARAMS) != 0) {
2669                         array_parameter = (Parameter) pars_list [pars_list.Count - 1];
2670                         non_array_count = pars_list.Count - 1;
2671                 }
2672                 foreach (Parameter par in pars_list)
2673                         if (par != array_parameter && (par.ModFlags & Parameter.Modifier.PARAMS) != 0) {
2674                                 Report.Error (30192, lexer.Location, "ParamArray parameters must be last");
2675                                 non_array_count = 0; 
2676                                 array_parameter = null;
2677                                 break;
2678                         }
2679                 if (non_array_count > 0) {
2680                         pars = new Parameter [non_array_count];
2681                         pars_list.CopyTo (0, pars, 0, non_array_count);
2682                 }
2683                 yyVal = new Parameters (pars, array_parameter, lexer.Location); 
2684           }
2685   break;
2686 case 239:
2687 #line 2682 "mb-parser.jay"
2688   {
2689                 ArrayList pars = new ArrayList ();
2690
2691                 pars.Add (yyVals[0+yyTop]);
2692                 yyVal = pars;
2693           }
2694   break;
2695 case 240:
2696 #line 2689 "mb-parser.jay"
2697   {
2698                 ArrayList pars = (ArrayList) yyVals[-2+yyTop];
2699
2700                 pars.Add (yyVals[0+yyTop]);
2701                 yyVal = yyVals[-2+yyTop];
2702           }
2703   break;
2704 case 241:
2705 #line 2701 "mb-parser.jay"
2706   {
2707                 Parameter.Modifier pm = (Parameter.Modifier)yyVals[-5+yyTop];
2708                 bool opt_parm = ((pm & Parameter.Modifier.OPTIONAL) != 0);
2709                 Expression ptype;
2710                 
2711                 if (opt_parm && (yyVals[0+yyTop] == null))
2712                         Report.Error (30812, lexer.Location, "Optional parameters must have a default value");
2713
2714                 if (!opt_parm && (yyVals[0+yyTop] != null))
2715                         Report.Error (32024, lexer.Location, "Non-Optional parameters should not have a default value");
2716
2717                 if ((pm & Parameter.Modifier.PARAMS) != 0) {
2718                         if ((pm & ~Parameter.Modifier.PARAMS) != 0)
2719                                 Report.Error (30667, lexer.Location, "ParamArray parameters must be ByVal");
2720                 }
2721                 
2722                 if ((pm & Parameter.Modifier.REF) !=0)
2723                         pm |= Parameter.Modifier.ISBYREF;
2724                 
2725                 if (yyVals[-3+yyTop] != null && yyVals[-1+yyTop] != null && yyVals[-3+yyTop] != yyVals[-1+yyTop])
2726                         Report.Error (30302, lexer.Location, "Type character conflicts with declared type."); /* TODO: Correct error number and message text*/
2727
2728                 ptype = (Expression)((yyVals[-1+yyTop] == null) ? ((yyVals[-3+yyTop] == null) ? TypeManager.system_object_expr : yyVals[-3+yyTop]) : yyVals[-1+yyTop]);
2729                 if (yyVals[-2+yyTop] != null)   {
2730                         string t = ptype.ToString ();
2731                         if (t.IndexOf('[') >= 0)
2732                                 Report.Error (31087, lexer.Location, "Array types specified in too many places");
2733                         else    
2734                                 ptype = DecomposeQI (t + VariableDeclaration.BuildRanks ((ArrayList) yyVals[-2+yyTop], true, lexer.Location), lexer.Location);
2735                 }
2736                 if ((pm & Parameter.Modifier.PARAMS) != 0 && ptype.ToString ().IndexOf('[') < 0)
2737                         Report.Error (30050, lexer.Location, "ParamArray parameters must be an array type");
2738                 yyVal = new Parameter (ptype, (string) yyVals[-4+yyTop], pm,
2739                                         (Attributes) yyVals[-6+yyTop], (Expression) yyVals[0+yyTop], opt_parm);
2740           }
2741   break;
2742 case 242:
2743 #line 2739 "mb-parser.jay"
2744   { yyVal = Parameter.Modifier.VAL;     }
2745   break;
2746 case 243:
2747 #line 2740 "mb-parser.jay"
2748   { yyVal = yyVals[0+yyTop];                    }
2749   break;
2750 case 244:
2751 #line 2744 "mb-parser.jay"
2752   { yyVal = (Parameter.Modifier)yyVals[-1+yyTop] | (Parameter.Modifier)yyVals[0+yyTop]; }
2753   break;
2754 case 245:
2755 #line 2745 "mb-parser.jay"
2756   { yyVal = yyVals[0+yyTop];    }
2757   break;
2758 case 246:
2759 #line 2749 "mb-parser.jay"
2760   { yyVal = Parameter.Modifier.REF | Parameter.Modifier.ISBYREF; }
2761   break;
2762 case 247:
2763 #line 2750 "mb-parser.jay"
2764   { yyVal = Parameter.Modifier.VAL; }
2765   break;
2766 case 248:
2767 #line 2751 "mb-parser.jay"
2768   { yyVal = Parameter.Modifier.OPTIONAL; }
2769   break;
2770 case 249:
2771 #line 2752 "mb-parser.jay"
2772   { yyVal = Parameter.Modifier.PARAMS; }
2773   break;
2774 case 254:
2775 #line 2768 "mb-parser.jay"
2776   { yyVal = yyVals[0+yyTop]; }
2777   break;
2778 case 255:
2779 #line 2773 "mb-parser.jay"
2780   {
2781                   if (current_block == null){
2782                           current_block = new ToplevelBlock ((ToplevelBlock) top_current_block, current_local_parameters, lexer.Location);
2783                           top_current_block = current_block;
2784                   } else {
2785                   current_block = new Block (current_block, current_local_parameters,
2786                                                  lexer.Location, Location.Null);
2787                   }
2788         }
2789   break;
2790 case 256:
2791 #line 2787 "mb-parser.jay"
2792   { 
2793                 while (current_block.Implicit)
2794                         current_block = current_block.Parent;
2795                 yyVal = current_block;
2796                 current_block.SetEndLocation (lexer.Location);
2797                 current_block = current_block.Parent;
2798                 if (current_block == null)
2799                         top_current_block = null;
2800           }
2801   break;
2802 case 257:
2803 #line 2800 "mb-parser.jay"
2804   {
2805                   if (yyVals[0+yyTop] != null && (Block) yyVals[0+yyTop] != current_block){
2806                         current_block.AddStatement ((Statement) yyVals[0+yyTop]);
2807                         current_block = (Block) yyVals[0+yyTop];
2808                   }
2809             }
2810   break;
2811 case 258:
2812 #line 2807 "mb-parser.jay"
2813   {
2814                   Statement s = (Statement) yyVals[0+yyTop];
2815
2816                   current_block.AddStatement ((Statement) yyVals[0+yyTop]);
2817             }
2818   break;
2819 case 259:
2820 #line 2814 "mb-parser.jay"
2821   {
2822                 Location loc = lexer.Location;
2823
2824                 ExpressionStatement expr = new CompoundAssign (Binary.Operator.Addition, 
2825                                          (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], loc);
2826
2827                 Statement stmt = new StatementExpression (expr, loc); 
2828
2829                 current_block.AddStatement (stmt);
2830
2831             }
2832   break;
2833 case 260:
2834 #line 2827 "mb-parser.jay"
2835   {
2836                 Location loc = lexer.Location;
2837
2838                 ExpressionStatement expr = new CompoundAssign (Binary.Operator.Subtraction, 
2839                                          (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], loc);
2840
2841                 Statement stmt = new StatementExpression (expr, loc); 
2842
2843                 current_block.AddStatement (stmt);
2844
2845             }
2846   break;
2847 case 261:
2848 #line 2839 "mb-parser.jay"
2849   {
2850               Location loc = lexer.Location;
2851               MemberName mname = new MemberName ((string) yyVals[-1+yyTop]);
2852               Expression expr = mname.GetTypeExpression (loc);
2853
2854               Invocation inv_expr = new Invocation (expr, (ArrayList) yyVals[0+yyTop], loc);
2855               Statement stmt = new StatementExpression (inv_expr, loc); 
2856               current_block.AddStatement (stmt);        
2857             }
2858   break;
2859 case 262:
2860 #line 2860 "mb-parser.jay"
2861   { yyVal = null; }
2862   break;
2863 case 263:
2864 #line 2862 "mb-parser.jay"
2865   {
2866                 yyVal = yyVals[-1+yyTop];
2867           }
2868   break;
2869 case 272:
2870 #line 3027 "mb-parser.jay"
2871   {
2872                 yyVal = new Goto (current_block, (string) yyVals[0+yyTop], lexer.Location);
2873           }
2874   break;
2875 case 273:
2876 #line 3034 "mb-parser.jay"
2877   {
2878                 yyVal = new Throw ((Expression) yyVals[0+yyTop], lexer.Location);
2879           }
2880   break;
2881 case 274:
2882 #line 3059 "mb-parser.jay"
2883   {       
2884                 yyVal = new Return ((Expression) yyVals[0+yyTop], lexer.Location);
2885           }
2886   break;
2887 case 275:
2888 #line 3185 "mb-parser.jay"
2889   {
2890                 yyVal = new Lock ((Expression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], lexer.Location);
2891           }
2892   break;
2893 case 278:
2894 #line 3198 "mb-parser.jay"
2895   {
2896                 Catch g = null;
2897                 
2898                 ArrayList c = (ArrayList)yyVals[-2+yyTop];
2899                 for (int i = 0; i < c.Count; ++i) {
2900                         Catch cc = (Catch) c [i];
2901                         if (cc.IsGeneral) {
2902                                 if (i != c.Count - 1)
2903                                         Report.Error (1017, cc.loc, "Empty catch block must be the last in a series of catch blocks");
2904                                 g = cc;
2905                                 c.RemoveAt (i);
2906                                 i--;
2907                         }
2908                 }
2909
2910                 /* Now s contains the list of specific catch clauses*/
2911                 /* and g contains the general one.*/
2912                 
2913                 yyVal = new Try ((Block) yyVals[-3+yyTop], c, g, null, ((Block) yyVals[-3+yyTop]).loc);
2914           }
2915   break;
2916 case 279:
2917 #line 3227 "mb-parser.jay"
2918   {
2919                 Catch g = null;
2920                 ArrayList s = new ArrayList (4);
2921                 ArrayList catch_list = (ArrayList) yyVals[-5+yyTop];
2922
2923                 if (catch_list != null){
2924                         foreach (Catch cc in catch_list) {
2925                                 if (cc.IsGeneral)
2926                                         g = cc;
2927                                 else
2928                                         s.Add (cc);
2929                         }
2930                 }
2931
2932                 yyVal = new Try ((Block) yyVals[-6+yyTop], s, g, (Block) yyVals[-2+yyTop], ((Block) yyVals[-6+yyTop]).loc);
2933           }
2934   break;
2935 case 280:
2936 #line 3246 "mb-parser.jay"
2937   {  yyVal = null;  }
2938   break;
2939 case 282:
2940 #line 3252 "mb-parser.jay"
2941   {
2942                 ArrayList l = new ArrayList (4);
2943
2944                 l.Add (yyVals[0+yyTop]);
2945                 yyVal = l;
2946           }
2947   break;
2948 case 283:
2949 #line 3259 "mb-parser.jay"
2950   {
2951                 ArrayList l = (ArrayList) yyVals[-1+yyTop];
2952
2953                 l.Add (yyVals[0+yyTop]);
2954                 yyVal = l;
2955           }
2956   break;
2957 case 284:
2958 #line 3268 "mb-parser.jay"
2959   {  yyVal = null;  }
2960   break;
2961 case 286:
2962 #line 3281 "mb-parser.jay"
2963   {
2964                 /* FIXME: opt_when needs to be hnadled*/
2965                 Expression type = null;
2966                 string id = null;
2967                 
2968                 if (yyVals[-1+yyTop] != null) {
2969                         DictionaryEntry cc = (DictionaryEntry) yyVals[-1+yyTop];
2970                         type = (Expression) cc.Key;
2971                         id   = (string) cc.Value;
2972
2973                         if (id != null){
2974                                 ArrayList one = new ArrayList (4);
2975                                 Location loc = lexer.Location;
2976
2977                                 one.Add (new VariableDeclaration (id, type, loc));
2978
2979                                 yyVals[-2+yyTop] = current_block;
2980                                 current_block = new Block (current_block);
2981                                 Block b = declare_local_variables (type, one, loc);
2982                                 current_block = b;
2983                         }
2984                 }
2985         }
2986   break;
2987 case 287:
2988 #line 3305 "mb-parser.jay"
2989   {
2990                 Expression type = null;
2991                 string id = null;
2992
2993                 if (yyVals[-3+yyTop] != null){
2994                         DictionaryEntry cc = (DictionaryEntry) yyVals[-3+yyTop];
2995                         type = (Expression) cc.Key;
2996                         id   = (string) cc.Value;
2997
2998                         if (yyVals[-4+yyTop] != null){
2999                                 /**/
3000                                 /* FIXME: I can change this for an assignment.*/
3001                                 /**/
3002                                 while (current_block != (Block) yyVals[-4+yyTop])
3003                                         current_block = current_block.Parent;
3004                         }
3005                 }
3006
3007
3008                 yyVal = new Catch (type, id , (Block) yyVals[0+yyTop], ((Block) yyVals[0+yyTop]).loc);
3009         }
3010   break;
3011 case 288:
3012 #line 3329 "mb-parser.jay"
3013   {  yyVal = null; }
3014   break;
3015 case 290:
3016 #line 3335 "mb-parser.jay"
3017   {
3018                  yyVal = new DictionaryEntry (yyVals[0+yyTop], yyVals[-2+yyTop]); 
3019         }
3020   break;
3021 case 291:
3022 #line 3388 "mb-parser.jay"
3023   {
3024                 oob_stack.Push (lexer.Location);
3025         }
3026   break;
3027 case 292:
3028 #line 3396 "mb-parser.jay"
3029   {
3030                 Location l = (Location) oob_stack.Pop ();
3031                 yyVal = new While ((Expression) yyVals[-6+yyTop], (Statement) yyVals[-2+yyTop], l);
3032         }
3033   break;
3034 case 294:
3035 #line 3471 "mb-parser.jay"
3036   { 
3037                 oob_stack.Push (lexer.Location);          
3038                 Location l = (Location) oob_stack.Pop ();
3039
3040                 yyVal = new If ((Expression) yyVals[-5+yyTop], (Statement) yyVals[-2+yyTop], l);
3041
3042                 if (RootContext.WarningLevel >= 3){
3043                         if (yyVals[-2+yyTop] == EmptyStatement.Value)
3044                                 Report.Warning (642, lexer.Location, "Possible mistaken empty statement");
3045                 }
3046
3047           }
3048   break;
3049 case 295:
3050 #line 3489 "mb-parser.jay"
3051   {
3052                 oob_stack.Push (lexer.Location);          
3053                 Location l = (Location) oob_stack.Pop ();
3054
3055                 yyVal = new If ((Expression) yyVals[-8+yyTop], (Statement) yyVals[-5+yyTop], (Statement) yyVals[-2+yyTop], l);
3056           }
3057   break;
3058 case 296:
3059 #line 3499 "mb-parser.jay"
3060   {
3061                 oob_stack.Push (lexer.Location);          
3062                 Location l = (Location) oob_stack.Pop ();
3063
3064                 yyVal = new If ((Expression) yyVals[-4+yyTop], (Statement) yyVals[-1+yyTop], (Statement) yyVals[0+yyTop], l);
3065           }
3066   break;
3067 case 297:
3068 #line 3511 "mb-parser.jay"
3069   { 
3070                 oob_stack.Push (lexer.Location);          
3071                 Location l = (Location) oob_stack.Pop ();
3072
3073                 yyVal = new If ((Expression) yyVals[-5+yyTop], (Statement) yyVals[-2+yyTop], l);
3074
3075                 if (RootContext.WarningLevel >= 3){
3076                         if (yyVals[-2+yyTop] == EmptyStatement.Value)
3077                                 Report.Warning (642, lexer.Location, "Possible mistaken empty statement");
3078                 }
3079
3080           }
3081   break;
3082 case 298:
3083 #line 3529 "mb-parser.jay"
3084   {
3085                 oob_stack.Push (lexer.Location);          
3086                 Location l = (Location) oob_stack.Pop ();
3087
3088                 yyVal = new If ((Expression) yyVals[-8+yyTop], (Statement) yyVals[-5+yyTop], (Statement) yyVals[-2+yyTop], l);
3089           }
3090   break;
3091 case 299:
3092 #line 3539 "mb-parser.jay"
3093   {
3094                 oob_stack.Push (lexer.Location);          
3095                 Location l = (Location) oob_stack.Pop ();
3096
3097                 yyVal = new If ((Expression) yyVals[-4+yyTop], (Statement) yyVals[-1+yyTop], (Statement) yyVals[0+yyTop], l);
3098           }
3099   break;
3100 case 302:
3101 #line 3667 "mb-parser.jay"
3102   {
3103                 ArrayList labels = new ArrayList ();
3104
3105                 labels.Add (yyVals[0+yyTop]);
3106                 yyVal = labels;
3107           }
3108   break;
3109 case 303:
3110 #line 3674 "mb-parser.jay"
3111   {
3112                 ArrayList labels = (ArrayList) (yyVals[-2+yyTop]);
3113                 labels.Add (yyVals[-1+yyTop]);
3114
3115                 yyVal = labels;
3116           }
3117   break;
3118 case 305:
3119 #line 3685 "mb-parser.jay"
3120   {
3121                 yyVal = new SwitchLabel ((Expression) yyVals[0+yyTop], lexer.Location);
3122           }
3123   break;
3124 case 314:
3125 #line 3710 "mb-parser.jay"
3126   {
3127                  yyVal = yyVals[0+yyTop]; 
3128           }
3129   break;
3130 case 315:
3131 #line 3717 "mb-parser.jay"
3132   { yyVal = new StatementExpression ((ExpressionStatement) yyVals[0+yyTop], lexer.Location);  }
3133   break;
3134 case 316:
3135 #line 3718 "mb-parser.jay"
3136   { yyVal = new StatementExpression ((ExpressionStatement) yyVals[0+yyTop], lexer.Location);  }
3137   break;
3138 case 317:
3139 #line 3719 "mb-parser.jay"
3140   { yyVal = new StatementExpression ((ExpressionStatement) yyVals[0+yyTop], lexer.Location);  }
3141   break;
3142 case 318:
3143 #line 3724 "mb-parser.jay"
3144   {
3145                 yyVal = new New ((Expression) yyVals[-3+yyTop], (ArrayList) yyVals[-1+yyTop], lexer.Location);
3146           }
3147   break;
3148 case 319:
3149 #line 3728 "mb-parser.jay"
3150   {
3151                 yyVal = new New ((Expression) yyVals[0+yyTop], new ArrayList(), lexer.Location);
3152           }
3153   break;
3154 case 321:
3155 #line 3775 "mb-parser.jay"
3156   {
3157                 if (yyVals[0+yyTop] != null){
3158                         DictionaryEntry de = (DictionaryEntry) yyVals[0+yyTop];
3159
3160                         yyVal = declare_local_variables ((Expression) de.Key, (ArrayList) de.Value, lexer.Location);
3161                 }
3162           }
3163   break;
3164 case 322:
3165 #line 3783 "mb-parser.jay"
3166   {
3167                 if (yyVals[0+yyTop] != null){
3168                         DictionaryEntry de = (DictionaryEntry) yyVals[0+yyTop];
3169
3170                         yyVal = declare_local_constant ((Expression) de.Key, (ArrayList) de.Value);
3171                 }
3172           }
3173   break;
3174 case 323:
3175 #line 3794 "mb-parser.jay"
3176   {
3177                 yyVal = new DictionaryEntry (DecomposeQI("_local_vars_", lexer.Location), yyVals[0+yyTop]);             
3178           }
3179   break;
3180 case 324:
3181 #line 3802 "mb-parser.jay"
3182   {
3183                 if (yyVals[0+yyTop] != null)
3184                         yyVal = new DictionaryEntry (DecomposeQI("_local_consts_", lexer.Location), yyVals[0+yyTop]);
3185                 else
3186                         yyVal = null;
3187           }
3188   break;
3189 case 325:
3190 #line 3812 "mb-parser.jay"
3191   {
3192                 ArrayList decl = new ArrayList ();
3193                 if (yyVals[0+yyTop] != null) 
3194                         decl.Add (yyVals[0+yyTop]);
3195                         
3196                 yyVal = decl;
3197           }
3198   break;
3199 case 326:
3200 #line 3820 "mb-parser.jay"
3201   {
3202                 ArrayList decls = (ArrayList) yyVals[-2+yyTop];
3203                 if (yyVals[0+yyTop] != null)
3204                         decls.Add (yyVals[0+yyTop]);
3205
3206                 yyVal = yyVals[-2+yyTop];
3207           }
3208   break;
3209 case 327:
3210 #line 3831 "mb-parser.jay"
3211   {
3212                 VarName vname = (VarName) yyVals[-2+yyTop];
3213                 string varname = (string) vname.Name;
3214                 current_rank_specifiers = (ArrayList) vname.Rank;
3215                 object varinit = yyVals[0+yyTop];
3216                 ArrayList a_dims = null;
3217
3218                 if (varinit == null)
3219                         Report.Error (
3220                                 30438, lexer.Location, "Constant should have a value"
3221                                 );
3222
3223                 if (vname.Type != null && yyVals[-1+yyTop] != null)
3224                         Report.Error (
3225                                 30302, lexer.Location, 
3226                                 "Type character cannot be used with explicit type declaration" );
3227
3228                 Expression vartype = (yyVals[-1+yyTop] == null) ? ((vname.Type == null) ? TypeManager.system_object_expr : (Expression) vname.Type ) : (Expression) yyVals[-1+yyTop];
3229
3230                 if (current_rank_specifiers != null) 
3231                 {
3232                         Report.Error (30424, lexer.Location, "Constant doesn't support array");
3233                         yyVal = null;
3234                 }
3235                 else
3236                         yyVal = new VariableDeclaration (varname, vartype, varinit, lexer.Location, null);
3237           }
3238   break;
3239 case 328:
3240 #line 3862 "mb-parser.jay"
3241   {
3242                 ArrayList decl = new ArrayList ();
3243                 decl.AddRange ((ArrayList) yyVals[0+yyTop]);
3244                 yyVal = decl;
3245           }
3246   break;
3247 case 329:
3248 #line 3868 "mb-parser.jay"
3249   {
3250                 ArrayList decls = (ArrayList) yyVals[-2+yyTop];
3251                 decls.AddRange ((ArrayList) yyVals[0+yyTop]);
3252                 yyVal = yyVals[-2+yyTop];
3253           }
3254   break;
3255 case 330:
3256 #line 3877 "mb-parser.jay"
3257   {
3258             ArrayList names = (ArrayList) yyVals[-2+yyTop];
3259                 object varinit = yyVals[0+yyTop];
3260                 ArrayList VarDeclarations = new ArrayList();
3261                 Expression vartype;
3262                 ArrayList a_dims = null;
3263
3264                 if ((names.Count > 1) && (varinit != null)) 
3265                         Report.Error (
3266                                 30671, lexer.Location, 
3267                                 "Multiple variables with single type can not have " +
3268                                 "a explicit initialization" );
3269
3270                                 
3271                 foreach (VarName vname in names)
3272                 {
3273                         string varname = (string) vname.Name;
3274                         current_rank_specifiers = (ArrayList) vname.Rank;
3275                         a_dims = null;
3276                         varinit = yyVals[0+yyTop];
3277
3278                         if(vname.Type != null && yyVals[-1+yyTop] != null)
3279                                 Report.Error (
3280                                         30302, lexer.Location, 
3281                                         "Type character cannot be used with explicit type declaration" );
3282
3283                         /* Some checking is required for particularly weird declarations*/
3284                         /* like Dim a As Integer(,)*/
3285                         if (yyVals[-1+yyTop] is Pair) {
3286                                 vartype = (Expression) ((Pair) yyVals[-1+yyTop]).First;
3287                                 
3288                                 /*if ($3 != null && $3 is ArrayList)
3289                                         Report.Error (205, "End of statement expected.");*/
3290                                         
3291                                 ArrayList args = (ArrayList) ((Pair) yyVals[-1+yyTop]).Second;
3292                                 if (current_rank_specifiers != null)
3293                                         Report.Error (31087, lexer.Location,
3294                                                  "Array types specified in too many places");   
3295                                 
3296                                 if (VariableDeclaration.IndexesSpecifiedInRank (args))            
3297                                         Report.Error (30638, "Array bounds cannot appear in type specifiers."); 
3298                                 
3299                                 current_rank_specifiers = new ArrayList ();
3300                                 current_rank_specifiers.Add (args);                             
3301                         }
3302                         else
3303                                 vartype = (yyVals[-1+yyTop] == null) ? ((vname.Type == null) ? TypeManager.system_object_expr : (Expression) vname.Type ) : (Expression) yyVals[-1+yyTop];
3304
3305                         /* if the variable is an array with explicit bound*/
3306                         /* and having explicit initialization throw exception*/
3307                         if (current_rank_specifiers != null && varinit != null) 
3308                         {
3309                                 bool broken = false;
3310                                 foreach (ArrayList exprs in current_rank_specifiers)
3311                                 {
3312                                         foreach (Expression expr in exprs)
3313                                         {
3314                                                 if (!((Expression)expr is EmptyExpression ))
3315                                                 {
3316                                                         Report.Error (
3317                                                                 30672, lexer.Location, 
3318                                                                 "Array declared with explicit bound " +
3319                                                                 " can not have explicit initialization");
3320                                                         broken = true;
3321                                                         break;
3322                                                 }
3323                                         }
3324                                         if (broken)
3325                                                 break;
3326                                 }
3327                         }
3328                         
3329                         /*
3330                         Check for a declaration like Dim a(2) or Dim a(2,3)
3331                         If this is the case, we must generate an ArrayCreationExpression
3332                         and, in case, add the initializer after the array has been created.
3333                         */
3334 /*                      if (VariableDeclaration.IsArrayDecl (this)) {   */
3335 /*                              if (VariableDeclaration.IndexesSpecified(current_rank_specifiers)) {   */
3336 /*                                      a_dims = (ArrayList) current_rank_specifiers;*/
3337 /*                                      VariableDeclaration.VBFixIndexLists (ref a_dims);*/
3338 /*                                      varinit = VariableDeclaration.BuildArrayCreator(vartype, a_dims, (ArrayList) varinit, lexer.Location);*/
3339 /*                              }*/
3340 /*                              vartype = DecomposeQI (vartype.ToString() + VariableDeclaration.BuildRanks (current_rank_specifiers, false, lexer.Location), lexer.Location);*/
3341 /*                      }*/
3342
3343                         if (vartype is New) {
3344                                 if (varinit != null) {
3345                                         Report.Error (30205, lexer.Location, "End of statement expected");
3346                                         yyVal = null;
3347                                 }
3348                                 else
3349                                 {
3350                                         varinit = vartype;
3351                                         vartype = ((New)vartype).RequestedType;
3352                                 }
3353                         }
3354                         VarDeclarations.Add (new VariableDeclaration (varname, vartype, varinit, lexer.Location, null));
3355             }/* end of for*/
3356             yyVal = VarDeclarations;
3357           }
3358   break;
3359 case 331:
3360 #line 3982 "mb-parser.jay"
3361   {
3362                 ArrayList list = new ArrayList ();
3363                 list.Add (yyVals[0+yyTop]);
3364                 yyVal = list;
3365           }
3366   break;
3367 case 332:
3368 #line 3988 "mb-parser.jay"
3369   {
3370                 ArrayList list = (ArrayList) yyVals[-2+yyTop];
3371                 list.Add (yyVals[0+yyTop]);
3372                 yyVal = list;
3373           }
3374   break;
3375 case 333:
3376 #line 3997 "mb-parser.jay"
3377   {
3378                 yyVal = new VarName (yyVals[-2+yyTop], yyVals[-1+yyTop], yyVals[0+yyTop]);
3379           }
3380   break;
3381 case 334:
3382 #line 4004 "mb-parser.jay"
3383   { 
3384                 yyVal = null;           
3385           }
3386   break;
3387 case 335:
3388 #line 4008 "mb-parser.jay"
3389   { 
3390                 yyVal = (Expression) yyVals[0+yyTop];
3391           }
3392   break;
3393 case 337:
3394 #line 4023 "mb-parser.jay"
3395   {
3396                 yyVal = yyVals[0+yyTop];
3397           }
3398   break;
3399 case 338:
3400 #line 4027 "mb-parser.jay"
3401   {
3402                 New n = new New ((Expression)yyVals[0+yyTop], null, lexer.Location);
3403                 yyVal = (Expression) n;
3404           }
3405   break;
3406 case 339:
3407 #line 4032 "mb-parser.jay"
3408   {
3409                 New n = new New ((Expression)yyVals[-3+yyTop], (ArrayList) yyVals[-1+yyTop], lexer.Location);
3410                 yyVal = (Expression) n;
3411           }
3412   break;
3413 case 340:
3414 #line 4048 "mb-parser.jay"
3415   { yyVal = null; }
3416   break;
3417 case 341:
3418 #line 4057 "mb-parser.jay"
3419   { yyVal = null; }
3420   break;
3421 case 342:
3422 #line 4058 "mb-parser.jay"
3423   { yyVal = yyVals[0+yyTop]; }
3424   break;
3425 case 343:
3426 #line 4063 "mb-parser.jay"
3427   {
3428                 yyVal = yyVals[0+yyTop];
3429           }
3430   break;
3431 case 344:
3432 #line 4067 "mb-parser.jay"
3433   {
3434                 yyVal = yyVals[0+yyTop];
3435           }
3436   break;
3437 case 345:
3438 #line 4075 "mb-parser.jay"
3439   {
3440                 ArrayList list = new ArrayList ();
3441                 yyVal = list;
3442           }
3443   break;
3444 case 346:
3445 #line 4080 "mb-parser.jay"
3446   {
3447                 yyVal = (ArrayList) yyVals[-1+yyTop];
3448           }
3449   break;
3450 case 347:
3451 #line 4087 "mb-parser.jay"
3452   {
3453                 ArrayList list = new ArrayList ();
3454                 list.Add (yyVals[0+yyTop]);
3455                 yyVal = list;
3456           }
3457   break;
3458 case 348:
3459 #line 4093 "mb-parser.jay"
3460   {
3461                 ArrayList list = (ArrayList) yyVals[-2+yyTop];
3462                 list.Add (yyVals[0+yyTop]);
3463                 yyVal = list;
3464           }
3465   break;
3466 case 349:
3467 #line 4102 "mb-parser.jay"
3468   {
3469                   /* $$ = "";*/
3470                   yyVal = null;
3471           }
3472   break;
3473 case 350:
3474 #line 4107 "mb-parser.jay"
3475   {
3476                         yyVal = yyVals[0+yyTop];
3477           }
3478   break;
3479 case 351:
3480 #line 4114 "mb-parser.jay"
3481   {
3482                   ArrayList rs = new ArrayList();
3483                   rs.Add (yyVals[0+yyTop]);
3484                   yyVal = rs;
3485           }
3486   break;
3487 case 352:
3488 #line 4120 "mb-parser.jay"
3489   {
3490                   ArrayList rs = (ArrayList) yyVals[-1+yyTop];
3491                   rs.Add (yyVals[0+yyTop]);
3492                   yyVal = rs;
3493           }
3494   break;
3495 case 353:
3496 #line 4129 "mb-parser.jay"
3497   {
3498                 yyVal = yyVals[-1+yyTop];
3499           }
3500   break;
3501 case 354:
3502 #line 4136 "mb-parser.jay"
3503   {
3504                 ArrayList ds = new ArrayList();
3505                 ds.Add (new EmptyExpression());
3506                 yyVal = ds;
3507           }
3508   break;
3509 case 355:
3510 #line 4142 "mb-parser.jay"
3511   {
3512                 ArrayList ds = new ArrayList();
3513                 ds.Add ((Expression) yyVals[0+yyTop]);
3514                 yyVal = ds;
3515           }
3516   break;
3517 case 356:
3518 #line 4148 "mb-parser.jay"
3519   {
3520                 ArrayList ds = (ArrayList) yyVals[-2+yyTop];
3521                 ds.Add ((Expression) yyVals[0+yyTop]);
3522                 yyVal = ds;             
3523           }
3524   break;
3525 case 357:
3526 #line 4154 "mb-parser.jay"
3527   {
3528                 ArrayList ds = (ArrayList) yyVals[-1+yyTop];
3529                 ds.Add (new EmptyExpression());
3530                 yyVal = ds;             
3531           }
3532   break;
3533 case 358:
3534 #line 4184 "mb-parser.jay"
3535   {
3536                 /*TODO*/
3537           }
3538   break;
3539 case 362:
3540 #line 4191 "mb-parser.jay"
3541   {
3542                 yyVal = ((MemberName) yyVals[0+yyTop]).GetTypeExpression (lexer.Location);
3543           }
3544   break;
3545 case 371:
3546 #line 4209 "mb-parser.jay"
3547   { yyVal = new CharLiteral ((char) lexer.Value); }
3548   break;
3549 case 372:
3550 #line 4210 "mb-parser.jay"
3551   { yyVal = new StringLiteral ((string) lexer.Value); }
3552   break;
3553 case 373:
3554 #line 4211 "mb-parser.jay"
3555   { yyVal = NullLiteral.Null; }
3556   break;
3557 case 374:
3558 #line 4215 "mb-parser.jay"
3559   { yyVal = new FloatLiteral ((float) lexer.Value); }
3560   break;
3561 case 375:
3562 #line 4216 "mb-parser.jay"
3563   { yyVal = new DoubleLiteral ((double) lexer.Value); }
3564   break;
3565 case 376:
3566 #line 4217 "mb-parser.jay"
3567   { yyVal = new DecimalLiteral ((decimal) lexer.Value); }
3568   break;
3569 case 377:
3570 #line 4221 "mb-parser.jay"
3571   {
3572                 object v = lexer.Value;
3573
3574                 if (v is int)
3575                         yyVal = new IntLiteral ((Int32)v); 
3576 /*              else if (v is short)*/
3577 /*                      $$ = new ShortLiteral ((Int16)v);*/
3578                 else if (v is long)
3579                         yyVal = new LongLiteral ((Int64)v);
3580                 else
3581                         Console.WriteLine ("OOPS.  Unexpected result from scanner");
3582                         
3583           }
3584   break;
3585 case 378:
3586 #line 4237 "mb-parser.jay"
3587   { yyVal = new BoolLiteral (true); }
3588   break;
3589 case 379:
3590 #line 4238 "mb-parser.jay"
3591   { yyVal = new BoolLiteral (false); }
3592   break;
3593 case 380:
3594 #line 4243 "mb-parser.jay"
3595   { yyVal = yyVals[-1+yyTop]; }
3596   break;
3597 case 381:
3598 #line 4248 "mb-parser.jay"
3599   {
3600                 if (yyVals[-2+yyTop] != null) {
3601                         string id_name = (string)yyVals[0+yyTop];
3602                         if (id_name.ToUpper() == "NEW")
3603                                 id_name = ".ctor";
3604                         yyVal = new MemberAccess ((Expression) yyVals[-2+yyTop], id_name, lexer.Location);
3605                 }
3606                 else
3607                 {
3608 /*                      if (with_stack.Count > 0) {*/
3609 /*                              Expression e = (Expression) with_stack.Peek();*/
3610 /*                              $$ = new MemberAccess (e, (string) $3, lexer.Location);*/
3611 /*                      }*/
3612 /*                      else*/
3613 /*                      {*/
3614 /*                              // OOps*/
3615 /*                      }*/
3616                 }
3617           }
3618   break;
3619 case 382:
3620 #line 4272 "mb-parser.jay"
3621   {
3622                 if (yyVals[-2+yyTop] != null)
3623                         yyVal = new MemberAccess ((Expression) yyVals[-2+yyTop], (string) yyVals[0+yyTop], lexer.Location);
3624                 else
3625                 {
3626 /*                      if (with_stack.Count > 0) {*/
3627 /*                              Expression e = (Expression) with_stack.Peek();*/
3628 /*                              $$ = new MemberAccess (e, (string) $3, lexer.Location);*/
3629 /*                      }*/
3630 /*                      else*/
3631 /*                      {*/
3632 /*                              // OOps*/
3633 /*                      }*/
3634                 }
3635           }
3636   break;
3637 case 384:
3638 #line 4295 "mb-parser.jay"
3639   {
3640                 if (yyVals[-3+yyTop] == null) {
3641                         Location l = lexer.Location;
3642                         Report.Error (1, l, "Parse error");
3643                 }
3644                 yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (ArrayList) yyVals[-1+yyTop], lexer.Location);
3645           }
3646   break;
3647 case 385:
3648 #line 4303 "mb-parser.jay"
3649   {
3650                 if (yyVals[-3+yyTop] == null) {
3651                         Location l = lexer.Location;
3652                         Report.Error (1, l, "THIS IS CRAZY");
3653                 }
3654                 yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (ArrayList) yyVals[-2+yyTop], lexer.Location);
3655 /*              Console.WriteLine ("Invocation: {0} with {1} arguments", $2, ($3 != null) ? ((ArrayList) $3).Count : 0);*/
3656           }
3657   break;
3658 case 386:
3659 #line 4315 "mb-parser.jay"
3660   {
3661                 string id_name = (string) yyVals[0+yyTop];
3662                 if (id_name.ToUpper() == "NEW")
3663                         id_name = "New";
3664                 yyVal = new BaseAccess (id_name, lexer.Location);
3665           }
3666   break;
3667 case 387:
3668 #line 4329 "mb-parser.jay"
3669   { 
3670                 /*
3671                    The 'argument' rule returns an 'empty' argument
3672                    of type NoArg (used for default arguments in invocations)
3673                    if no arguments are actually passed.
3674
3675                    If there is only one argument and it is o type NoArg,
3676                    we return a null (empty) list
3677                 */
3678                 ArrayList args = (ArrayList) yyVals[0+yyTop];
3679                 if (args.Count == 1 &&
3680                     ((Argument)args[0]).ArgType == Argument.AType.NoArg)
3681                         yyVal = null;
3682                 else
3683                         yyVal = yyVals[0+yyTop];
3684           }
3685   break;
3686 case 388:
3687 #line 4349 "mb-parser.jay"
3688   {
3689                 ArrayList list = new ArrayList ();
3690                 list.Add (yyVals[0+yyTop]);
3691                 yyVal = list;
3692           }
3693   break;
3694 case 389:
3695 #line 4355 "mb-parser.jay"
3696   {
3697                 ArrayList list = (ArrayList) yyVals[-2+yyTop];
3698                 list.Add (yyVals[0+yyTop]);
3699                 yyVal = list;
3700           }
3701   break;
3702 case 390:
3703 #line 4364 "mb-parser.jay"
3704   {
3705                 yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression);
3706           }
3707   break;
3708 case 391:
3709 #line 4368 "mb-parser.jay"
3710   {
3711                 yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref);
3712           }
3713   break;
3714 case 392:
3715 #line 4372 "mb-parser.jay"
3716   {
3717                 yyVal = new Argument (new EmptyExpression (), Argument.AType.NoArg);
3718           }
3719   break;
3720 case 393:
3721 #line 4376 "mb-parser.jay"
3722   {
3723                 yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.AddressOf);
3724           }
3725   break;
3726 case 394:
3727 #line 4382 "mb-parser.jay"
3728   {/* note ("section 5.4"); */  yyVal = yyVals[0+yyTop];  }
3729   break;
3730 case 395:
3731 #line 4387 "mb-parser.jay"
3732   { yyVal = yyVals[0+yyTop]; }
3733   break;
3734 case 398:
3735 #line 4398 "mb-parser.jay"
3736   {
3737                 yyVal = new This (current_block, lexer.Location);
3738           }
3739   break;
3740 case 399:
3741 #line 4402 "mb-parser.jay"
3742   {
3743                 /* FIXME: This is actually somewhat different from Me*/
3744                 /* because it is for accessing static (classifier) methods/properties/fields*/
3745                 yyVal = new This (current_block, lexer.Location);
3746           }
3747   break;
3748 case 400:
3749 #line 4411 "mb-parser.jay"
3750   {
3751                 /* TODO*/
3752           }
3753   break;
3754 case 401:
3755 #line 4415 "mb-parser.jay"
3756   {
3757                   yyVal = new Cast ((Expression) yyVals[-1+yyTop], (Expression) yyVals[-3+yyTop], lexer.Location);
3758           }
3759   break;
3760 case 402:
3761 #line 4419 "mb-parser.jay"
3762   {
3763                   yyVal = new Cast ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], lexer.Location);
3764           }
3765   break;
3766 case 403:
3767 #line 4425 "mb-parser.jay"
3768   { yyVal = TypeManager.system_boolean_expr;    }
3769   break;
3770 case 404:
3771 #line 4426 "mb-parser.jay"
3772   { yyVal = TypeManager.system_byte_expr;               }
3773   break;
3774 case 405:
3775 #line 4427 "mb-parser.jay"
3776   { yyVal = TypeManager.system_char_expr;               }
3777   break;
3778 case 406:
3779 #line 4429 "mb-parser.jay"
3780   { yyVal = TypeManager.system_double_expr;             }
3781   break;
3782 case 407:
3783 #line 4430 "mb-parser.jay"
3784   { yyVal = TypeManager.system_decimal_expr;    }
3785   break;
3786 case 408:
3787 #line 4431 "mb-parser.jay"
3788   { yyVal = TypeManager.system_int32_expr;              }
3789   break;
3790 case 409:
3791 #line 4432 "mb-parser.jay"
3792   { yyVal = TypeManager.system_int64_expr;              }
3793   break;
3794 case 410:
3795 #line 4433 "mb-parser.jay"
3796   { yyVal = TypeManager.system_object_expr;             }
3797   break;
3798 case 411:
3799 #line 4434 "mb-parser.jay"
3800   { yyVal = TypeManager.system_int16_expr;              }
3801   break;
3802 case 412:
3803 #line 4435 "mb-parser.jay"
3804   { yyVal = TypeManager.system_single_expr;             }
3805   break;
3806 case 413:
3807 #line 4436 "mb-parser.jay"
3808   { yyVal = TypeManager.system_string_expr;     }
3809   break;
3810 case 414:
3811 #line 4441 "mb-parser.jay"
3812   {
3813                 yyVal = new TypeOf ((Expression) yyVals[-1+yyTop], lexer.Location);
3814           }
3815   break;
3816 case 416:
3817 #line 4449 "mb-parser.jay"
3818   {
3819                 /*TODO*/
3820           }
3821   break;
3822 case 418:
3823 #line 4457 "mb-parser.jay"
3824   {
3825                 /*FIXME: Is this rule correctly defined ?*/
3826                 yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], lexer.Location);
3827           }
3828   break;
3829 case 419:
3830 #line 4462 "mb-parser.jay"
3831   {
3832                 /*FIXME: Is this rule correctly defined ?*/
3833                 yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], lexer.Location);
3834           }
3835   break;
3836 case 421:
3837 #line 4471 "mb-parser.jay"
3838   {
3839                 yyVal = new Binary (Binary.Operator.Multiply,
3840                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3841           }
3842   break;
3843 case 422:
3844 #line 4476 "mb-parser.jay"
3845   {
3846                 yyVal = new Binary (Binary.Operator.Division,
3847                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3848           }
3849   break;
3850 case 424:
3851 #line 4485 "mb-parser.jay"
3852   {
3853                 /*FIXME: Is this right ?*/
3854                 yyVal = new Binary (Binary.Operator.Division,
3855                            (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3856           }
3857   break;
3858 case 426:
3859 #line 4495 "mb-parser.jay"
3860   {
3861               yyVal = new Binary (Binary.Operator.Modulus,
3862                                (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3863           }
3864   break;
3865 case 428:
3866 #line 4504 "mb-parser.jay"
3867   {
3868                 yyVal = new Binary (Binary.Operator.Addition,
3869                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3870           }
3871   break;
3872 case 429:
3873 #line 4509 "mb-parser.jay"
3874   {
3875                 yyVal = new Binary (Binary.Operator.Subtraction,
3876                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3877           }
3878   break;
3879 case 431:
3880 #line 4518 "mb-parser.jay"
3881   {
3882               /* FIXME: This should only work for String expressions*/
3883               /* We probably need to use something from the runtime*/
3884               yyVal = new Binary (Binary.Operator.Addition,
3885                                (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3886           }
3887   break;
3888 case 433:
3889 #line 4529 "mb-parser.jay"
3890   {
3891                 /* TODO*/
3892           }
3893   break;
3894 case 434:
3895 #line 4533 "mb-parser.jay"
3896   {
3897                 /*TODO*/
3898           }
3899   break;
3900 case 436:
3901 #line 4541 "mb-parser.jay"
3902   {
3903                 yyVal = new Binary (Binary.Operator.Equality,
3904                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3905           }
3906   break;
3907 case 437:
3908 #line 4546 "mb-parser.jay"
3909   {
3910                 yyVal = new Binary (Binary.Operator.Inequality, 
3911                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3912           }
3913   break;
3914 case 438:
3915 #line 4551 "mb-parser.jay"
3916   {
3917                 yyVal = new Binary (Binary.Operator.LessThan,
3918                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3919           }
3920   break;
3921 case 439:
3922 #line 4556 "mb-parser.jay"
3923   {
3924                 yyVal = new Binary (Binary.Operator.GreaterThan,
3925                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3926           }
3927   break;
3928 case 440:
3929 #line 4561 "mb-parser.jay"
3930   {
3931                 yyVal = new Binary (Binary.Operator.LessThanOrEqual,
3932                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3933           }
3934   break;
3935 case 441:
3936 #line 4566 "mb-parser.jay"
3937   {
3938                 yyVal = new Binary (Binary.Operator.GreaterThanOrEqual,
3939                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3940           }
3941   break;
3942 case 442:
3943 #line 4571 "mb-parser.jay"
3944   {
3945                 /*FIXME: Should be a different op for reference equality but allows tests to use Is*/
3946                 yyVal = new Binary (Binary.Operator.Equality,
3947                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3948           }
3949   break;
3950 case 443:
3951 #line 4577 "mb-parser.jay"
3952   {
3953                 /*FIXME: Is this rule correctly defined ?*/
3954                 yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3955           }
3956   break;
3957 case 445:
3958 #line 4586 "mb-parser.jay"
3959   {
3960                 /*FIXME: Is this rule correctly defined ?*/
3961                 yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], lexer.Location);
3962           }
3963   break;
3964 case 447:
3965 #line 4595 "mb-parser.jay"
3966   {
3967                 yyVal = new Binary (Binary.Operator.LogicalAnd,
3968                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3969           }
3970   break;
3971 case 448:
3972 #line 4600 "mb-parser.jay"
3973   {     /* FIXME: this is likely to be broken*/
3974                 yyVal = new Binary (Binary.Operator.LogicalAnd,
3975                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3976           }
3977   break;
3978 case 450:
3979 #line 4609 "mb-parser.jay"
3980   {
3981                 yyVal = new Binary (Binary.Operator.LogicalOr,
3982                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3983           }
3984   break;
3985 case 451:
3986 #line 4614 "mb-parser.jay"
3987   {     /* FIXME: this is likely to be broken*/
3988                 yyVal = new Binary (Binary.Operator.LogicalOr,
3989                                  (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3990           }
3991   break;
3992 case 453:
3993 #line 4623 "mb-parser.jay"
3994   {
3995               yyVal = new Binary (Binary.Operator.ExclusiveOr,
3996                                (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
3997         }
3998   break;
3999 case 454:
4000 #line 4631 "mb-parser.jay"
4001   { 
4002                 yyVal = new Assign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
4003           }
4004   break;
4005 case 455:
4006 #line 4635 "mb-parser.jay"
4007   {
4008                 Location l = lexer.Location;
4009
4010                 yyVal = new CompoundAssign (
4011                         Binary.Operator.Multiply, (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], l);
4012           }
4013   break;
4014 case 456:
4015 #line 4642 "mb-parser.jay"
4016   {
4017                 Location l = lexer.Location;
4018
4019                 yyVal = new CompoundAssign (
4020                         Binary.Operator.Division, (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], l);
4021           }
4022   break;
4023 case 457:
4024 #line 4649 "mb-parser.jay"
4025   {
4026                 Location l = lexer.Location;
4027
4028                 yyVal = new CompoundAssign (
4029                         Binary.Operator.Addition, (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], l);
4030           }
4031   break;
4032 case 458:
4033 #line 4656 "mb-parser.jay"
4034   {
4035                 Location l = lexer.Location;
4036
4037                 yyVal = new CompoundAssign (
4038                         Binary.Operator.Subtraction, (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], l);
4039           }
4040   break;
4041 case 459:
4042 #line 4663 "mb-parser.jay"
4043   {
4044                 Location l = lexer.Location;
4045
4046                 yyVal = new CompoundAssign (
4047                         Binary.Operator.LeftShift, (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], l);
4048           }
4049   break;
4050 case 460:
4051 #line 4670 "mb-parser.jay"
4052   {
4053                 Location l = lexer.Location;
4054
4055                 yyVal = new CompoundAssign (
4056                         Binary.Operator.RightShift, (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], l);
4057           }
4058   break;
4059 case 461:
4060 #line 4677 "mb-parser.jay"
4061   {
4062                 Location l = lexer.Location;
4063
4064                 /* FIXME should be strings only*/
4065                 yyVal = new CompoundAssign (
4066                         Binary.Operator.Addition, (Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], l);
4067           }
4068   break;
4069 case 462:
4070 #line 4685 "mb-parser.jay"
4071   {
4072                 Location l = lexer.Location;
4073
4074                 /* TODO: $$ = new CompoundAssign (
4075                         Binary.Operator.ExclusiveOr, (Expression) $1, (Expression) $4, l); */
4076           }
4077   break;
4078 case 463:
4079 #line 4692 "mb-parser.jay"
4080   { 
4081 /*              ArrayList args = new ArrayList();*/
4082 /*              Argument arg = new Argument ((Expression) $4, Argument.AType.Expression);*/
4083 /*              args.Add (arg);*/
4084                 
4085 /*              New n = new New ((Expression) $1, (ArrayList) args, lexer.Location);*/
4086 /*              n.isDelegate = true;*/
4087                 yyVal = new Assign ((Expression) yyVals[-3+yyTop], (Expression) yyVals[0+yyTop], lexer.Location);
4088           }
4089   break;
4090 case 466:
4091 #line 4713 "mb-parser.jay"
4092   {     
4093                 yyVal = ((MemberName) yyVals[0+yyTop]).GetTypeExpression (lexer.Location);
4094           }
4095   break;
4096 case 468:
4097 #line 4722 "mb-parser.jay"
4098   {
4099                 ArrayList types = new ArrayList ();
4100
4101                 types.Add (yyVals[0+yyTop]);
4102                 yyVal = types;
4103           }
4104   break;
4105 case 469:
4106 #line 4729 "mb-parser.jay"
4107   {
4108                 ArrayList types = (ArrayList) yyVals[-2+yyTop];
4109
4110                 types.Add (yyVals[0+yyTop]);
4111                 yyVal = types;
4112           }
4113   break;
4114 case 471:
4115 #line 4742 "mb-parser.jay"
4116   { yyVal = TypeManager.system_object_expr; }
4117   break;
4118 case 474:
4119 #line 4748 "mb-parser.jay"
4120   { yyVal = TypeManager.system_boolean_expr; }
4121   break;
4122 case 475:
4123 #line 4750 "mb-parser.jay"
4124   { yyVal = TypeManager.system_char_expr; }
4125   break;
4126 case 476:
4127 #line 4751 "mb-parser.jay"
4128   { yyVal = TypeManager.system_string_expr; }
4129   break;
4130 case 479:
4131 #line 4758 "mb-parser.jay"
4132   { yyVal = TypeManager.system_decimal_expr; }
4133   break;
4134 case 481:
4135 #line 4763 "mb-parser.jay"
4136   { yyVal = TypeManager.system_byte_expr; }
4137   break;
4138 case 482:
4139 #line 4764 "mb-parser.jay"
4140   { yyVal = TypeManager.system_int16_expr; }
4141   break;
4142 case 483:
4143 #line 4765 "mb-parser.jay"
4144   { yyVal = TypeManager.system_int32_expr; }
4145   break;
4146 case 484:
4147 #line 4766 "mb-parser.jay"
4148   { yyVal = TypeManager.system_int64_expr; }
4149   break;
4150 case 485:
4151 #line 4770 "mb-parser.jay"
4152   { yyVal = TypeManager.system_single_expr; }
4153   break;
4154 case 486:
4155 #line 4771 "mb-parser.jay"
4156   { yyVal = TypeManager.system_double_expr; }
4157   break;
4158 case 487:
4159 #line 4776 "mb-parser.jay"
4160   { 
4161 /*              if(tokenizerController.IsAcceptingTokens)*/
4162 /*              {*/
4163 /*                      if(in_external_source) */
4164 /*                              Report.Error (30580, lexer.Location, "#ExternalSource directives may not be nested");*/
4165 /*                      else {*/
4166 /*                              in_external_source = true;*/
4167                         
4168 /*                              lexer.EffectiveSource = (string) $4;*/
4169 /*                              lexer.EffectiveLine = (int) $6;*/
4170 /*                      }*/
4171 /*              }*/
4172           }
4173   break;
4174 case 488:
4175 #line 4790 "mb-parser.jay"
4176   {
4177                 if(tokenizerController.IsAcceptingTokens) 
4178                 {
4179                         string id = (yyVals[-2+yyTop] as string);
4180                 
4181                         if(!(yyVals[-2+yyTop] as string).ToLower().Equals("region"))
4182                                 Report.Error (30205, lexer.Location, "Invalid Pre-processor directive");
4183                         else
4184                         {
4185                                 ++in_marked_region;
4186                         }
4187                 }
4188           }
4189   break;
4190 case 489:
4191 #line 4804 "mb-parser.jay"
4192   {
4193                 if(tokenizerController.IsAcceptingTokens)
4194                 {
4195 /*                      if( ($3 as string).ToLower().Equals("externalsource")) {*/
4196 /*                              if(!in_external_source)*/
4197 /*                                      Report.Error (30578, lexer.Location, "'#End ExternalSource' must be preceded by a matching '#ExternalSource'");*/
4198 /*                              else {*/
4199 /*                                      in_external_source = false;*/
4200 /*                                      lexer.EffectiveSource = lexer.Source;*/
4201 /*                                      lexer.EffectiveLine = lexer.Line;*/
4202 /*                              }*/
4203 /*                      }*/
4204                         /* else */if((yyVals[-1+yyTop] as string).ToLower().Equals("region")) {
4205                                 if(in_marked_region > 0)
4206                                         --in_marked_region;
4207                                 else
4208                                         Report.Error (30205, lexer.Location, "'#End Region' must be preceded  by a matching '#Region'");
4209                         }
4210                         else {
4211                                 Report.Error (29999, lexer.Location, "Unrecognized Pre-Processor statement");
4212                         }       
4213                 }
4214           }
4215   break;
4216 case 490:
4217 #line 4828 "mb-parser.jay"
4218   {
4219                 if(tokenizerController.IsAcceptingTokens)
4220                 {
4221                         /*TODO;*/
4222                 }
4223           }
4224   break;
4225 case 491:
4226 #line 4835 "mb-parser.jay"
4227   {
4228                 IfElseStateMachine.Token tok = IfElseStateMachine.Token.IF;
4229
4230                 try {
4231                         ifElseStateMachine.HandleToken(tok);
4232                 }
4233                 catch(ApplicationException) {
4234                         throw new MBASException(ifElseStateMachine.Error, lexer.Location, ifElseStateMachine.ErrString);
4235                 }
4236           }
4237   break;
4238 case 492:
4239 #line 4846 "mb-parser.jay"
4240   {
4241                 HandleConditionalDirective(IfElseStateMachine.Token.IF, (BoolLiteral)yyVals[-2+yyTop]);
4242           }
4243   break;
4244 case 493:
4245 #line 4850 "mb-parser.jay"
4246   {
4247                       IfElseStateMachine.Token tok = IfElseStateMachine.Token.ELSEIF;
4248                       try {
4249                               ifElseStateMachine.HandleToken(tok);
4250                       }
4251                       catch(ApplicationException) {
4252                               throw new MBASException(ifElseStateMachine.Error, lexer.Location, ifElseStateMachine.ErrString);
4253                       }
4254           }
4255   break;
4256 case 494:
4257 #line 4860 "mb-parser.jay"
4258   { 
4259                   HandleConditionalDirective(IfElseStateMachine.Token.ELSEIF, (BoolLiteral)yyVals[-2+yyTop]);
4260           }
4261   break;
4262 case 495:
4263 #line 4864 "mb-parser.jay"
4264   {
4265                     IfElseStateMachine.Token tok = IfElseStateMachine.Token.ELSE;
4266                     try {
4267                             ifElseStateMachine.HandleToken(tok);
4268                     }
4269                     catch(ApplicationException) {
4270                             throw new MBASException(ifElseStateMachine.Error, lexer.Location, ifElseStateMachine.ErrString);
4271                     }
4272           }
4273   break;
4274 case 496:
4275 #line 4874 "mb-parser.jay"
4276   { 
4277                 HandleConditionalDirective(IfElseStateMachine.Token.ELSE, new BoolLiteral(true));
4278           }
4279   break;
4280 case 497:
4281 #line 4878 "mb-parser.jay"
4282   {
4283                   IfElseStateMachine.Token tok = IfElseStateMachine.Token.ENDIF;
4284                   try {
4285                           ifElseStateMachine.HandleToken(tok);
4286                   }
4287                   catch(ApplicationException) {
4288                           throw new MBASException(ifElseStateMachine.Error, lexer.Location, ifElseStateMachine.ErrString);
4289                   }
4290           }
4291   break;
4292 case 498:
4293 #line 4888 "mb-parser.jay"
4294   { 
4295                 HandleConditionalDirective(IfElseStateMachine.Token.ENDIF, new BoolLiteral(false));
4296           }
4297   break;
4298 case 499:
4299 #line 4892 "mb-parser.jay"
4300   {
4301                 if(tokenizerController.IsAcceptingTokens)
4302                         Report.Error(2999, lexer.Location, "Unrecognized Pre-Processor statement");
4303                 else
4304                         Report.Warning (9999, lexer.Location,   "Unrecognized Pre-Processor statement");
4305         }
4306   break;
4307 #line default
4308         }
4309         yyTop -= yyLen[yyN];
4310         yyState = yyStates[yyTop];
4311         int yyM = yyLhs[yyN];
4312         if (yyState == 0 && yyM == 0) {
4313           if (debug != null) debug.shift(0, yyFinal);
4314           yyState = yyFinal;
4315           if (yyToken < 0) {
4316             yyToken = yyLex.advance() ? yyLex.token() : 0;
4317             if (debug != null)
4318                debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value());
4319           }
4320           if (yyToken == 0) {
4321             if (debug != null) debug.accept(yyVal);
4322             return yyVal;
4323           }
4324           goto yyLoop;
4325         }
4326         if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0)
4327             && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState))
4328           yyState = yyTable[yyN];
4329         else
4330           yyState = yyDgoto[yyM];
4331         if (debug != null) debug.shift(yyStates[yyTop], yyState);
4332          goto yyLoop;
4333       }
4334     }
4335   }
4336
4337    static  short [] yyLhs  = {              -1,
4338     1,    1,    2,    2,    0,    0,    4,    4,    8,    8,
4339     9,    9,    9,   13,   13,   13,   14,   14,   10,   11,
4340    12,   15,   15,    6,    6,   19,   16,   21,   16,   22,
4341    22,   22,   22,   22,   22,   23,   23,   23,   23,   23,
4342    23,   24,   24,   25,   25,    5,    5,   26,   26,   27,
4343    28,   28,   29,   29,   31,   31,   31,    7,    7,   33,
4344    35,   33,   34,   37,   37,   36,   36,   40,   38,   42,
4345    43,   38,   41,   41,   41,   39,   39,   44,   44,   45,
4346    45,   45,   46,   46,   47,   47,   49,   50,   18,   17,
4347    20,   20,   20,   20,   20,   20,   59,   62,   52,   58,
4348    58,   60,   60,   51,   51,   64,   64,   65,   65,   65,
4349    65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
4350    65,   65,   67,   53,   66,   66,   68,   68,   71,   69,
4351    70,   70,   70,   70,   70,   70,   70,   75,   61,   61,
4352    79,   79,   80,   81,   81,   81,   81,   81,   81,   81,
4353    73,   73,   85,   82,   91,   92,   83,   94,   95,   56,
4354    96,   96,   93,   93,   97,   97,   98,   99,   99,   99,
4355    99,   99,   99,   77,  103,   57,  102,  102,  104,  104,
4356   105,  106,  105,  108,  111,  113,  114,   54,  110,  110,
4357   115,  115,  116,  112,  117,  117,  118,  118,  119,  120,
4358   120,  121,  121,   76,  124,  122,  109,  109,   86,   86,
4359   125,  125,  123,  123,  129,  129,  127,  127,  130,  131,
4360   126,  133,  128,  132,  132,  132,   74,  136,  136,   55,
4361    55,   84,  138,  139,   72,   32,   32,  140,  141,  141,
4362   142,  134,  134,  145,  145,  146,  146,  146,  146,   88,
4363    88,  147,  147,  149,   87,   89,  148,  148,  148,  148,
4364   148,  153,  153,  151,  151,  151,  151,  151,  159,  159,
4365   159,  161,  162,  160,  158,  157,  157,  164,  165,  166,
4366   166,  167,  167,  135,  135,  170,  168,  169,  169,  171,
4367   174,  172,  156,  175,  175,  175,  177,  177,  177,  176,
4368   176,  178,  178,  179,  179,  180,  180,  181,  181,  181,
4369   181,  182,  182,  155,  183,  183,  183,  185,  185,  187,
4370   150,  150,  188,  189,   78,   78,  190,  137,  137,  193,
4371   194,  194,  191,  101,  101,   90,  192,  192,  192,  195,
4372   144,  144,  196,  196,  197,  197,  198,  198,  143,  143,
4373   199,  199,  200,  201,  201,  201,  201,  202,  202,  202,
4374   202,  202,  202,  202,  202,  202,  202,  203,  203,  203,
4375   203,  203,  203,  212,  212,  212,  211,  210,  210,  204,
4376   208,  208,  213,  184,  184,  206,  154,  215,  215,  216,
4377   216,  216,  216,  217,  107,  163,  163,  205,  205,  209,
4378   209,  209,  219,  219,  219,  219,  219,  219,  219,  219,
4379   219,  219,  219,  207,  220,  220,  152,  152,  152,  221,
4380   221,  221,  222,  222,  223,  223,  224,  224,  224,  225,
4381   225,  226,  226,  226,  227,  227,  227,  227,  227,  227,
4382   227,  227,  227,  228,  228,  229,  229,  229,  230,  230,
4383   230,  218,  218,  186,  186,  186,  186,  186,  186,  186,
4384   186,  186,  186,   48,  173,  100,  100,   63,   63,   30,
4385   214,  214,  231,  231,  231,  231,  232,  232,  232,  233,
4386   233,  233,  233,  233,  234,  234,    3,    3,    3,    3,
4387   235,    3,  236,    3,  237,    3,  238,    3,    3,
4388   };
4389    static  short [] yyLen = {           2,
4390     1,    1,    1,    2,    5,    5,    0,    1,    1,    2,
4391     1,    1,    1,    0,    1,    1,    1,    1,    4,    4,
4392     4,    0,    1,    1,    2,    0,    3,    0,    3,    1,
4393     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
4394     1,    0,    1,    1,    3,    0,    1,    1,    2,    3,
4395     1,    3,    1,    3,    0,    2,    3,    0,    1,    1,
4396     0,    3,    4,    0,    1,    1,    3,    0,    3,    0,
4397     0,    6,    1,    1,    1,    0,    3,    0,    1,    1,
4398     3,    1,    1,    3,    1,    3,    3,    0,    8,    2,
4399     1,    1,    1,    1,    1,    1,    0,    0,   11,    0,
4400     3,    0,    3,    0,    1,    1,    2,    1,    1,    1,
4401     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
4402     1,    1,    0,    8,    0,    1,    1,    2,    0,    4,
4403     1,    1,    1,    1,    1,    1,    1,    3,    0,    1,
4404     1,    2,    3,    1,    1,    1,    1,    1,    1,    1,
4405     1,    1,    0,   13,    0,    0,   15,    0,    0,   10,
4406     0,    1,    0,    1,    1,    2,    2,    1,    1,    1,
4407     1,    1,    1,    6,    0,    9,    0,    1,    1,    2,
4408     3,    0,    6,    6,    0,    0,    0,   11,    0,    1,
4409     1,    2,    3,    1,    0,    1,    1,    2,    3,    1,
4410     1,    4,    6,    1,    0,   12,    0,    3,    0,    2,
4411     1,    3,    2,    2,    0,    1,    0,    1,    0,    0,
4412    11,    0,   11,    0,    2,    5,    3,    0,    1,    7,
4413     8,    0,    0,    0,   12,    0,    1,    1,    1,    3,
4414     7,    0,    1,    2,    1,    1,    1,    1,    1,    0,
4415     2,    1,    3,    3,    0,    0,    1,    1,    5,    5,
4416     3,    0,    3,    1,    1,    1,    1,    1,    1,    1,
4417     1,    2,    2,    2,    6,    1,    1,    6,    9,    0,
4418     1,    1,    2,    0,    1,    0,    5,    0,    1,    3,
4419     0,    9,    1,    7,   10,    6,    7,   10,    6,    0,
4420     1,    1,    3,    3,    1,    0,    1,    1,    1,    1,
4421     1,    0,    1,    1,    1,    1,    1,    5,    2,    1,
4422     1,    1,    2,    2,    1,    3,    3,    1,    3,    3,
4423     1,    3,    3,    0,    2,    1,    1,    3,    6,    0,
4424     0,    2,    1,    1,    2,    3,    1,    3,    0,    1,
4425     1,    2,    3,    0,    1,    3,    2,    1,    1,    1,
4426     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
4427     1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
4428     3,    3,    1,    4,    5,    3,    1,    1,    3,    1,
4429     2,    0,    2,    1,    1,    0,    1,    1,    1,    6,
4430     6,    4,    1,    1,    1,    1,    1,    1,    1,    1,
4431     1,    1,    1,    4,    1,    3,    1,    2,    2,    1,
4432     3,    3,    1,    3,    1,    3,    1,    3,    3,    1,
4433     3,    1,    3,    3,    1,    3,    3,    3,    3,    3,
4434     3,    3,    4,    1,    2,    1,    3,    3,    1,    3,
4435     3,    1,    3,    3,    4,    4,    4,    4,    4,    4,
4436     4,    4,    4,    1,    1,    1,    1,    1,    3,    1,
4437     1,    1,    1,    1,    1,    1,    1,    1,    1,    0,
4438     1,    1,    1,    1,    1,    1,    8,    4,    4,    6,
4439     0,    6,    0,    6,    0,    4,    0,    5,    3,
4440   };
4441    static  short [] yyDefRed = {            0,
4442     3,    0,    0,    0,    0,    4,    0,    0,    9,   11,
4443    12,   13,    0,    0,    0,    0,    0,  495,  493,    0,
4444   491,    0,    0,    0,    0,   48,   10,   17,   18,    0,
4445    16,   15,    0,    0,  499,    0,    0,    0,  497,    0,
4446     0,    0,    0,   31,   33,   34,   35,   32,   30,    0,
4447     0,    0,   51,   53,    0,    0,    0,   24,    0,    0,
4448    60,   49,    0,    0,    0,    0,  496,  379,  378,    0,
4449     0,  489,    0,    0,  488,    0,    0,    0,    0,   73,
4450    74,   44,    0,    0,   66,   70,    5,    0,   25,    6,
4451   121,  112,  119,  113,  115,  117,  114,  116,  110,  109,
4452   108,  120,  118,  111,  122,   90,    0,  106,    0,    0,
4453     0,    0,  301,    0,  498,    0,    0,   54,   45,   52,
4454     0,    0,    0,    0,  107,    0,   27,    0,    0,    0,
4455     0,    0,    0,   29,   91,   92,   93,   94,   95,   96,
4456    62,  490,  494,  492,    0,    0,   69,   67,    2,   65,
4457     0,   63,    0,    0,    0,    0,    0,    0,    0,    0,
4458     0,    0,  474,  481,    0,  403,  404,  405,  407,  406,
4459   475,  408,  409,  410,  411,  412,  413,    0,  479,    0,
4460   486,    0,  483,  484,  398,    0,  399,    0,    0,  373,
4461   471,  482,  485,  476,    0,    0,    0,    0,  377,  374,
4462   375,  376,  371,  372,    0,    0,    0,   79,    0,    0,
4463    83,   85,  464,  420,  365,  320,  366,    0,  358,  359,
4464   360,  361,  363,  364,  367,  368,  369,  370,    0,  383,
4465     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4466   446,    0,    0,  472,  473,  477,  478,   71,    0,    0,
4467     0,    0,    0,    0,    0,    0,    0,  487,    0,    0,
4468     0,    0,    0,  466,    0,  467,  445,    0,    0,  418,
4469   419,    0,   77,    0,    0,    0,    0,    0,    0,    0,
4470     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4471     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4472     0,    0,    0,    0,    0,    0,  335,    0,    0,    0,
4473     0,  158,    0,    0,    0,    0,  386,    0,    0,  380,
4474    87,    0,   84,    0,   86,    0,    0,  390,    0,    0,
4475   388,  381,  382,    0,    0,    0,  421,  422,    0,    0,
4476     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4477     0,    0,  447,  448,    0,    0,   72,    0,    0,    0,
4478     0,    0,    0,  237,    0,  239,    0,    0,  175,    0,
4479   179,    0,  186,    0,  191,    0,    0,    0,  127,    0,
4480     0,    0,    0,    0,    0,  414,    0,  443,  393,  394,
4481   391,  384,    0,  402,    0,    0,  468,    0,   98,  246,
4482   247,  248,  249,    0,    0,  245,    0,    0,    0,    0,
4483     0,  180,    0,    0,  192,  129,    0,  128,    0,    0,
4484   159,    0,  165,    0,    0,    0,  318,  389,    0,    0,
4485     0,    0,    0,    0,  244,    0,  336,  240,    0,    0,
4486     0,    0,    0,    0,  187,  194,    0,  197,    0,    0,
4487     0,    0,  229,    0,    0,    0,  173,  170,  171,  168,
4488   169,  172,  151,  152,  167,    0,    0,  166,  401,  400,
4489     0,  469,    0,    0,    0,    0,  141,   36,   37,   38,
4490    39,   40,   41,   43,    0,    0,    0,    0,    0,    0,
4491   198,    0,  137,  130,  131,  132,  133,  134,  135,  136,
4492   204,    0,    0,    0,  325,    0,    0,    0,    0,    0,
4493     0,  331,  328,    0,    0,    0,    0,  142,    0,    0,
4494     0,  351,    0,    0,    0,    0,    0,  201,  199,  200,
4495     0,    0,  340,    0,    0,    0,  337,    0,    0,    0,
4496     0,    0,  153,    0,    0,    0,    0,    0,  150,  147,
4497   146,  144,  145,  148,  149,  143,    0,  355,    0,    0,
4498   352,    0,    0,    0,    0,    0,    0,  333,  326,    0,
4499     0,  327,    0,    0,   56,    0,    0,  232,  329,  332,
4500   330,    0,    0,  353,    0,  241,    0,    0,    0,    0,
4501     0,    0,    0,    0,  343,  342,  344,    0,  155,   57,
4502   255,    0,  356,    0,    0,    0,    0,    0,    0,  345,
4503   347,    0,    0,    0,    0,    0,    0,    0,  208,    0,
4504     0,  346,    0,    0,    0,    0,    0,    0,    0,    0,
4505     0,    0,    0,    0,    0,  256,    0,  252,  257,  258,
4506     0,  264,  265,  266,  267,  268,  269,  270,  271,  276,
4507   277,  293,  314,    0,    0,  317,  321,  322,    0,    0,
4508     0,    0,  339,  348,    0,    0,    0,    0,  272,  465,
4509     0,    0,    0,  397,  274,    0,  273,  255,  234,    0,
4510     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4511     0,  156,    0,    0,    0,  261,    0,  255,    0,    0,
4512     0,  253,    0,    0,    0,  454,    0,    0,    0,    0,
4513     0,    0,  256,    0,    0,    0,    0,    0,    0,  255,
4514     0,    0,    0,  256,    0,    0,    0,  282,    0,  457,
4515   458,  463,  455,  456,  462,  461,  459,  460,    0,    0,
4516     0,    0,    0,  213,  218,    0,  216,  214,  256,  259,
4517     0,  263,  260,    0,  254,    0,    0,  289,    0,    0,
4518   283,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4519     0,  296,  275,    0,  286,  278,  255,    0,    0,  255,
4520   225,    0,    0,    0,    0,  255,    0,  294,  290,  255,
4521     0,    0,  220,  285,    0,  255,    0,    0,    0,  287,
4522     0,    0,    0,    0,    0,    0,  255,  279,  256,  226,
4523   256,  295,    0,    0,    0,    0,    0,  299,    0,    0,
4524   255,  297,    0,    0,    0,    0,    0,    0,  298,
4525   };
4526   protected static  short [] yyDgoto  = {             2,
4527   150,  151,    6,    7,   24,   56,  362,    8,    9,   10,
4528    11,   12,   33,   30,  359,   58,   59,  127,  109,  134,
4529   110,   82,  484,  485,  206,   25,   26,   52,   53,  264,
4530   542,  363,   60,   61,  111,   84,  152,   85,  147,  121,
4531    86,  124,  302,  207,  208,  209,  210,  211,  212,  303,
4532   106,  135,  136,  137,  138,  139,  140,  361,  304,  399,
4533   475,  433,  396,  107,  108,  377,  310,  378,  379,  494,
4534   449,  458,  459,  460,  461,  499,  462,  504,  476,  477,
4535   556,  463,  464,  602,  578,  312,  699,  636,  679,  537,
4536   614,  718,  421,  382,  467,    0,  422,  423,  465,  397,
4537   437,  369,  411,  370,  371,  441,  328,  528,  592,  373,
4538   309,  445,  414,  490,  374,  375,  446,  447,  448,  529,
4539   530,  501,  715,  691,  381,  716,  744,  717,  748,  780,
4540   802,  766,  796,  404,  795,  466,  511,  601,  701,  364,
4541   365,  366,  520,  572,  405,  406,  637,  638,  700,  639,
4542   640,  214,  696,  329,  642,  643,  644,  645,  646,  647,
4543   648,  649,  675,  650,  651,  726,  727,  728,  757,  790,
4544   758,    0,  671,    0,  652,  114,  772,    0,    0,    0,
4545     0,    0,  653,  215,  216,  656,  217,  657,  658,  505,
4546   506,  538,  513,  514,  568,  596,  597,  612,  521,  522,
4547   559,  218,  219,  220,  221,  222,  223,  224,  225,  226,
4548   227,  228,  229,  230,  330,  331,  391,  231,  232,  233,
4549   234,  235,  236,  237,  238,  239,  240,  241,  242,  243,
4550   244,  245,  246,  247,   41,   38,   37,   71,
4551   };
4552   protected static  short [] yySindex = {         -277,
4553     0,    0,  -42, -263, -240,    0, -236, -244,    0,    0,
4554     0,    0, -254, -100, -100, -207, -165,    0,    0, -312,
4555     0, -383,    9,  -51, -236,    0,    0,    0,    0, -277,
4556     0,    0, -277, -277,    0,  -33,   92, -274,    0,  100,
4557  -274,  -41,  125,    0,    0,    0,    0,    0,    0,   29,
4558    59, -250,    0,    0, -230, -247, 3240,    0,    0,    0,
4559     0,    0,   86,   86,   86, -274,    0,    0,    0,   88,
4560   188,    0,   88,   93,    0,    9,    9,    9,   86,    0,
4561     0,    0,    0,  -78,    0,    0,    0, 2192,    0,    0,
4562     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4563     0,    0,    0,    0,    0,    0, 2192,    0,  177,  736,
4564   -51,  223,    0,  243,    0,  256,  119,    0,    0,    0,
4565   165, -230, -223,  179,    0,    9,    0,    9,  -72,    9,
4566     9,    9,    9,    0,    0,    0,    0,    0,    0,    0,
4567     0,    0,    0,    0,  187, 3081,    0,    0,    0,    0,
4568    86,    0,    9,  -91, -277,    9,    9,  343, -277, -277,
4569  -277,  304,    0,    0, 3385,    0,    0,    0,    0,    0,
4570     0,    0,    0,    0,    0,    0,    0,  206,    0,  231,
4571     0,  258,    0,    0,    0,  248,    0, 1614, 3081,    0,
4572     0,    0,    0,    0, 3233, 3081, 3233, 3233,    0,    0,
4573     0,    0,    0,    0,  238,   59,  265,    0,  270,  277,
4574     0,    0,    0,    0,    0,    0,    0, -354,    0,    0,
4575     0,    0,    0,    0,    0,    0,    0,    0,  288,    0,
4576   310,  309,  298, -113,  303,  413,   97,  312,   34,  323,
4577     0,  373,  289,    0,    0,    0,    0,    0,   86,   86,
4578   347,  348, 1614, -277,   86,   86, -299,    0, -133, 3081,
4579  3081, 1614,  290,    0,  359,    0,    0, -235,  358,    0,
4580     0, 3081,    0, 3081,    9, 2473,    9,    9, 3081, 3081,
4581  3385, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
4582  3233, 3233, 3233, 3233, 3233, 3233, 3233, 3081, 3081, 3081,
4583  3081,  165,  -51,  449,  -51,  -51,    0, -239,  450,  -51,
4584     9,    0, 2473,  372,  381,  375,    0, 2473, 1614,    0,
4585     0,  277,    0,  238,    0, 3081, 3081,    0,  386,  385,
4586     0,    0,    0,  289,  390, -354,    0,    0, -113,  303,
4587   413,  413,   97,  312,  312,   34,   34,   34,   34,   34,
4588    34,   34,    0,    0,  373,  373,    0,  -51,  500, 1614,
4589   482,  195,  397,    0,  398,    0,  399,    9,    0,  -51,
4590     0, 1614,    0,  450,    0, 2192,  517,  -51,    0,   59,
4591   417, 2192,  424, 1614, 1614,    0,  438,    0,    0,    0,
4592     0,    0, 2473,    0,  509, -217,    0, 1614,    0,    0,
4593     0,    0,    0,    9,  195,    0,  343,  -51, -277, -277,
4594   554,    0, -217,  -51,    0,    0,  525,    0,    9, 2149,
4595     0, 2192,    0,    0,  453,  454,    0,    0, -277, 1614,
4596    86, -217,  -51,  731,    0, -277,    0,    0,   86,   86,
4597   463,  561,   86, 2192,    0,    0,  -51,    0, 1957, -277,
4598    59,    9,    0,    9,    9, -116,    0,    0,    0,    0,
4599     0,    0,    0,    0,    0,    9,  567,    0,    0,    0,
4600    86,    0,   86, 2192,  574,  -51,    0,    0,    0,    0,
4601     0,    0,    0,    0,  478,   86, 3081, -277,   99,  584,
4602     0,    9,    0,    0,    0,    0,    0,    0,    0,    0,
4603     0,   86,  731, -184,    0,  625,  629,  731,  488,  488,
4604  -161,    0,    0, -252,  518, 1957,  618,    0, 3081,  343,
4605   478,    0, -277,   86,    9,    9,    9,    0,    0,    0,
4606   581,  731,    0,    9,   86,  218,    0,  491, 1614,  488,
4607    87, -277,    0,    9,   86,    9,  491, -277,    0,    0,
4608     0,    0,    0,    0,    0,    0, -277,    0,  114,  491,
4609     0,   86,  731,  731,  488, -277,  503,    0,    0, 1614,
4610  2929,    0,  589,  343,    0,  506,   86,    0,    0,    0,
4611     0,   86,   86,    0, 3081,    0,  488,  503, -277,   86,
4612   -51,  343,  519, 2777,    0,    0,    0, -277,    0,    0,
4613     0,  589,    0,  343,  343,   86,  513,  589, 2473,    0,
4614     0,  -80,   86,  589, 2321, -277, -277, -277,    0, -277,
4615   514,    0, 2929, -277, 3233,    9,    9,  456, 3081,    9,
4616  3233, 3081, 3081, 3081, -223,    0, -223,    0,    0,    0,
4617   919,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4618     0,    0,    0,    0,    0,    0,    0,    0,   86,   86,
4619    86,   86,    0,    0,   86,  522,  523,  526,    0,    0,
4620    88,  530,  532,    0,    0, -223,    0,    0,    0, 2321,
4621   538,  541, 2625,  547,  551,  553,  560,  563,  577, 2321,
4622   -51,    0,  688, -223, 2473,    0,  712,    0, 2321,  704,
4623   691,    0, 3081, 3081, 3081,    0, 3081, 3081, 3081, 3081,
4624  3081, 3081,    0, -272,  692,  -51,  -51, 2321, 3081,    0,
4625   591, 3081,  699,    0,    9,  126,  704,    0,  620,    0,
4626     0,    0,    0,    0,    0,    0,    0,    0,  705, -277,
4627   613,  661,  656,    0,    0,  713,    0,    0,    0,    0,
4628   486,    0,    0,  645,    0,  769, -223,    0,  643, -223,
4629     0, -277,  652,   86,  -31, -277, -277,  739, -223, 3081,
4630   718,    0,    0, 1614,    0,    0,    0,   86, -277,    0,
4631     0,    9,   86,   86,  733,    0,   88,    0,    0,    0,
4632   740,   86,    0,    0,  343,    0, -277,  744, -223,    0,
4633   658, 2321,  640, 2321,   86,  737,    0,    0,    0,    0,
4634     0,    0,  516,  749,  757, -223,  741,    0,  745,  693,
4635     0,    0, -277, -277,  767,   86,   86,  753,    0,
4636   };
4637   protected static  short [] yyRindex = {            0,
4638     0,    0, 7141,    0,    0,    0, 7429, 7213,    0,    0,
4639     0,    0,    0,  772,  772,    0,    0,    0,    0,    0,
4640     0,    0,    0, 3449, 7501,    0,    0,    0,    0,    0,
4641     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4642     0,    0,    0,    0,    0,    0,    0,    0,    0, -288,
4643  5251,    0,    0,    0,    0, 8024,  728,    0,  732,  730,
4644     0,    0, 6925, 6997, 7069,    0,    0,    0,    0,  774,
4645     0,    0,  774,    0,    0,    0,    0,    0, 7285,    0,
4646     0,    0,  468,    0,    0,    0,    0,  728,    0,    0,
4647     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4648     0,    0,    0,    0,    0,    0,  -19,    0,    0,    0,
4649     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4650    44,    0,  840,    0,    0,    0,    0,    0,    0,    0,
4651     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4652     0,    0,    0,    0,    0,  252,    0,    0,    0,    0,
4653   557,    0,    0,    0,    0,    0,    0,  775,    0,    0,
4654     0,    0,    0,    0,  664,    0,    0,    0,    0,    0,
4655     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4656     0,    0,    0,    0,    0,    0,    0, 5324,  664,    0,
4657     0,    0,    0,    0,  664,  664,  664,  664,    0,    0,
4658     0,    0,    0,    0, 5776, 5447,    0,    0,  673,  674,
4659     0,    0,    0,    0,    0,    0,    0, 5582,    0,    0,
4660     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4661   403,    0, 5729, 5826, 5948, 6043, 6212, 6331, 6468,  360,
4662     0,  333,  189,    0,    0,    0,    0,    0, 7573, 3558,
4663     0,    0,  122,    0, 7602, 3807, 5253,    0,    0,  664,
4664   664,  679,    0,    0, 5544,    0,    0,    0,    0,    0,
4665     0,  664,    0,  664,    0,  539,    0,    0,  664,  664,
4666   664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
4667   664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
4668   664,   44, 7912, 3640,   91,   91,    0, -122, 7697, 4834,
4669     0,    0,  539,    0,    0,    0,    0,  539, 6503,    0,
4670     0,  686,    0,    0,    0,  664,  664,    0,    0,  687,
4671     0,    0,    0,  389,    0, 5679,    0,    0, 5876, 5991,
4672  6093, 6162, 6262, 6381, 6431, 6540, 6590, 6627, 6640, 6706,
4673  6749, 6819,    0,    0, 1572, 1686,    0, 7952,    0, -159,
4674  3892,   60,    0,    0,  689,    0,    0,    0,    0, -117,
4675     0, -159,    0, 7732,    0,  395,    0, 4919,    0, 3974,
4676  5001,  422,    0,  679,  679,    0,    0,    0,    0,    0,
4677     0,    0,  539,    0,    0,    0,    0, -159,    0,    0,
4678     0,    0,    0,    0, -246,    0,  775,  103,    0,  682,
4679     0,    0,    0, 1808,    0,    0,    0,    0,    0,   71,
4680     0,  670,    0, 5374,    0,    0,    0,    0,    0, -159,
4681  3725,    0, 5086, -233,    0,    0,    0,    0,  925, -206,
4682     0,    0, 7667,  152,    0,    0, 2000,    0,   71,    0,
4683  4084,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4684     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4685  7357,    0, 4166,  395,    0, 5168,    0,    0,    0,    0,
4686     0,    0,    0,    0, -181, 1009,  664,    0,    0,    0,
4687     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4688     0, 1093,  -88,    0,    0,  -38,    0, -186,  794,  -65,
4689     0,    0,    0, -114,    0,   71,    0,    0,  550,  286,
4690  -112,    0,    0, 1177,    0,    0,    0,    0,    0,    0,
4691     0, -186,    0,    0, 4251,  -23,    0, -189,   30,  319,
4692   103,    0,    0,    0, 4333,    0, -189,    0,    0,    0,
4693     0,    0,    0,    0,    0,    0,    0,    0,    0,  207,
4694     0, -195, -218, -218,  794,    0,  461,    0,    0,   10,
4695   664,    0,  795,   90,    0,    0, 1553,    0,    0,    0,
4696     0, 1261, 1345,    0,  571,    0, -237,   48,    0, 1429,
4697    91,   90,   80,  664,    0,    0,    0,    0,    0,    0,
4698     0,  795,    0,  775,  775, 7762,    0,  795,  539,    0,
4699     0,    0, 4418,  795, -282,    0,    0,    0,    0,    0,
4700     0,    0,  664,    0,  664,    0,    0,    0,  664,    0,
4701   664, -151,  664, -151,    0,    0,    0,    0,    0,    0,
4702     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4703     0,    0,    0,  216,  835,    0,    0,    0, 1745, 7797,
4704  7827,   25,    0,    0, 1745,    0,  -90,  -45,    0,    0,
4705   -14,  -13,    0,    0,    0,    0,    0,    0,    0,  268,
4706     0,    0,  664,    0,    0,    0,    0,    0,    0, -282,
4707  -262,    0,    0,    0,  539,    0,    0,    0,  371,  240,
4708     0,    0,  664,  664,  664,    0,  664,  664,  664,  664,
4709   664,  664,    0,    0,    0, -251,  156, -282,  664,    0,
4710     0,  664,    0,    0,    8,    0,  245,    0,    0,    0,
4711     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4712   799,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4713     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4714     0,    0,    0, 1937, -215,    0,    0,    0,    0,  664,
4715     0,    0,    0,   12,    0,    0,    0, 4500,    0,    0,
4716     0, -249, 2129, 4585,    0,    0,  -14,    0,    0,    0,
4717     0, 4667,    0,    0,  697,    0,    0,    0,    0,    0,
4718     0, -282,    0, -282, 4752,    0,    0,    0,    0,    0,
4719     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4720     0,    0,    0,    0,    0, -287, -278,    0,    0,
4721   };
4722   protected static  short [] yyGindex = {            0,
4723  -394,    1,    0,    0,    0,  809,  -20,    0, 1107,    0,
4724     0,    0, 1105,    0,    0,  -50,    0,    0,    0, -136,
4725     0,  -16,    0,  192,   23,    0, 1096,    0, 1045,  462,
4726   139, -304,    0, 1013,    0,    0,    0, 1004,  825,    0,
4727     0,    0,    0,    0,    0,    0,  856,  355,  857,    0,
4728   580,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4729     0,    0, -327,    0, 1024,    0,    0,    0,  758,    0,
4730     0, -419, -411, -210, -200,  619, -198,  515,    0,  666,
4731     0,    0,    0,    0,    0,  181, -590, -216, -137, -389,
4732     0,    0,    0,    0,    0,    0,    0,  721,    0, -183,
4733   982,    0,    0,    0,  776,    0,  -52,    0,  559,    0,
4734     0,    0,    0,    0,    0,  771,    0,    0,  702,    0,
4735     0,    0,    0,    0,    0,  435,    0,  439,    0,    0,
4736     0,    0,    0,  391,    0,    0,  527,    0,    0,    0,
4737     0,  759,    0, -211,    0,  761,    0,  489, -229,    0,
4738     0, -154,    0, -305,    0,    0,    0,    0,    0,    0,
4739     0,    0,  534,    0,    0,    0,    0,  444,    0,    0,
4740     0,    0,  402,    0,    0,  -73,  361,    0,    0,    0,
4741     0,    0,    0, -511, -196,    0,    0,    0,    0,  639,
4742  -457,  662,  631,    0,    0, -542,    0,    0,    0,  657,
4743     0, -143,    0,    0,    0,    0,    0,    0,    0,  416,
4744     0,    0,    0, -185,    0,  784,    0,    0,    0,    0,
4745   897,  898,  401,  899,  442,  698,    0,  -94,  436,  906,
4746     0,    0,    0,    0,    0,    0,    0,    0,
4747   };
4748   protected static  short [] yyTable = {           116,
4749     3,  367,  266,   57,  265,   89,   50,  383,  512,   87,
4750   615,   39,  387,  536,   28,   16,  284,  436,  221,  243,
4751    44,  259,  243,  250,   13,  311,   42,  223,   55,  495,
4752    63,    1,   42,   64,   65,   88,   80,  496,   44,   68,
4753   223,  243,  270,  271,  413,   51,  740,   42,   17,   14,
4754   242,  611,   79,  242,  217,  276,   58,   45,    1,  277,
4755   119,   50,  181,   18,   19,   20,  243,  266,  690,  307,
4756   432,   55,  242,  183,  692,   43,  266,   51,  316,   42,
4757   664,  181,   46,   21,  349,    1,  512,  221,  580,   23,
4758    42,    1,  183,  213,  267,  319,  550,  242,   51,  181,
4759    51,   35,  741,  654,  551,  243,  181,    5,   81,    4,
4760   183,  155,   58,  158,  159,  160,  161,  183,   69,  341,
4761    15,   47,   42,   58,    1,   44,   44,  337,  338,  205,
4762   560,  480,  221,  266,   29,  388,  242,  336,   42,  251,
4763   252,  223,  243,  269,   51,  181,   58,    1,  154,  480,
4764    40,   58,   44,  350,  249,  250,  183,  396,   48,  255,
4765   256,  257,  546,  284,   78,   58,  243,    5,  654,  512,
4766    58,   45,   55,  242,  266,   51,   42,   42,  654,   42,
4767    55,   42,  181,  177,  599,   42,  266,  654,  178,  793,
4768    58,   42,  149,  183,  334,   58,   46,  430,  266,  266,
4769   425,  426,  608,  353,  354,  804,  654,  314,  315,  289,
4770    51,  290,  266,  181,  617,  618,  243,    1,  324,  213,
4771    42,  213,   22,   42,  183,  341,  341,  335,  509,   58,
4772   534,  349,   49,  349,   58,   47,  576,  349,  497,  400,
4773   678,  401,  680,   55,  266,  156,  472,  242,  498,  105,
4774   500,   31,   32,  544,  308,  480,  181,  205,  324,   55,
4775   332,  333,  480,  323,  396,  105,   58,  183,  105,  105,
4776   334,   58,   48,  389,  390,   51,  313,   44,  105,  105,
4777   277,  698,   88,  457,   51,  480,  607,  368,  105,  376,
4778   654,  105,  654,  105,  300,  262,   45,   36,  105,  720,
4779   350,  334,  350,  621,  334,  552,  350,   89,  282,  283,
4780   105,    4,  493,  207,  157,  553,  288,  555,  480,  105,
4781   480,   46,   77,  402,  105,  324,   42,   42,  242,  403,
4782    42,  622,  105,  380,  623,  581,  122,   88,  480,  228,
4783    58,   51,  123,  205,  105,   58,   49,  242,  586,  368,
4784   266,  410,  307,  266,  480,  573,  207,  376,  228,   58,
4785    47,   58,  775,   58,    5,  777,  105,  105,   55,  105,
4786   323,   58,  242,   58,  786,   58,  334,  334,   58,  549,
4787   334,  781,   51,  228,  266,   66,  593,  434,  338,  721,
4788    58,  480,  480,  444,   51,  480,  431,   48,  334,  205,
4789    67,  300,  262,   58,  807,  803,   51,   51,   72,  439,
4790   440,  242,  474,  443,  334,   58,  525,   74,  655,  480,
4791    51,  821,  228,  288,  480,  480,  444,  480,  480,  471,
4792   480,  759,  473,   75,  523,  503,  486,  507,  508,  510,
4793   760,  451,   58,  105,  205,   58,  480,   76,  242,  503,
4794   502,   58,   51,   70,   58,  474,   73,   58,   76,  228,
4795   641,  215,  526,   58,   76,  400,  558,  401,  723,  104,
4796   666,   49,   77,  713,   58,  532,  673,  113,  289,   58,
4797   290,  112,  724,  655,   54,  527,   44,  163,  524,  164,
4798   751,   58,    5,  655,  338,  338,  115,  452,  338,  575,
4799   171,  749,  655,  236,  535,   45,   55,  117,  563,  564,
4800   565,  545,  179,  286,  287,  104,   83,  503,  595,  181,
4801   126,  655,  242,  562,  315,  641,  584,  503,  585,  503,
4802    46,  142,  603,  228,  480,  641,  480,  118,  104,   54,
4803   480,  595,  577,  251,  641,  280,  183,  791,  582,  402,
4804   281,  143,  184,   58,  280,  403,  798,  583,   51,  281,
4805   800,   51,  570,  641,  144,   58,  590,  145,  191,   47,
4806   595,  251,  251,  251,  146,  739,  670,  813,  452,  674,
4807   676,  674,  251,   83,   55,  809,  755,  811,  266,  606,
4808   789,  825,   51,  452,  153,  192,  193,  694,  613,  162,
4809   452,  452,  194,  452,  452,  655,   48,  655,  253,  503,
4810   503,  768,  258,  672,  248,  260,  659,  660,  661,  341,
4811   662,  341,  444,  444,  665,  365,  321,   55,  323,  365,
4812   706,  315,  365,  365,  365,  298,  299,  365,  365,  365,
4813   261,  449,  365,   55,  300,  301,  250,  641,  543,  641,
4814   730,  731,  732,  291,  733,  734,  735,  736,  737,  738,
4815   365,  263,  365,  104,   78,  480,  750,  262,  444,  753,
4816   714,  814,  272,  815,  250,  250,  250,  273,  574,  104,
4817    49,  480,  104,  104,  274,  250,  341,  342,  449,  449,
4818   104,  275,  104,  104,  533,  743,  746,  453,  334,  540,
4819   334,  278,  104,  589,  334,  104,  104,  104,  756,  104,
4820   104,  395,  104,  799,  279,  444,  444,  670,  280,  104,
4821   104,  281,  449,  567,  104,  604,  207,  163,  284,  104,
4822   344,  345,  104,  104,  104,  355,  356,  449,  288,  104,
4823   764,  292,  293,  294,  449,  449,  104,  449,  449,  444,
4824   285,  104,  317,  598,  587,  588,  305,  306,  104,  295,
4825   104,  296,  778,  297,  444,  794,  783,  784,  318,  207,
4826   320,  444,  444,  104,  444,  444,  360,  372,  453,  792,
4827   104,  104,  616,  104,  480,  207,  384,  386,  620,  769,
4828   770,  771,  395,  453,  624,  385,   51,  805,  392,  393,
4829   453,  453,  394,  453,  453,  395,  398,  104,  104,  407,
4830   104,  409,  408,    1,  395,  395,    1,  395,  395,  816,
4831   770,  817,  417,  826,  827,    1,    1,    1,    1,    1,
4832     1,  419,    1,    1,    1,    1,  424,    1,    1,    1,
4833     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
4834   427,    1,  429,    1,    1,    1,    1,  104,    1,  442,
4835     1,    1,    1,  450,    1,  469,  470,    1,  488,    1,
4836     1,    1,  515,    1,    1,    1,    1,   68,    1,  517,
4837     1,  487,   68,   75,  104,    1,    1,  519,   68,  531,
4838   536,    1,  268,    1,  539,    1,    1,  541,    1,    1,
4839     1,    1,  557,  548,    1,    1,    1,    1,    1,  571,
4840   566,    1,  591,  311,    1,    1,    1,    1,  600,    1,
4841     1,    1,    1,    1,    1,  619,  663,    1,  609,    1,
4842   669,    1,    1,    1,    1,    1,  693,  534,  104,  695,
4843   544,    1,    1,    1,    1,    1,  697,    1,  719,    1,
4844     1,  392,  480,  392,  104,  416,  703,  104,  104,  704,
4845     1,  420,  354,  480,  354,  707,    1,  104,  104,  708,
4846     1,  709,  722,    1,    1,  164,    1,  104,  710,  725,
4847   104,  711,  104,  357,  480,  357,   59,  104,  346,  347,
4848   348,  349,  350,  351,  352,  712,  729,  742,   59,  104,
4849    59,  420,   59,  752,  754,    1,  762,    1,  104,    1,
4850   763,    1,  104,    1,   59,    1,   28,   59,   59,    1,
4851   128,  104,  765,  489,  767,  104,   59,   59,   59,   28,
4852   741,  740,  773,  129,  774,  104,  776,   59,  779,   28,
4853    59,  788,   59,  130,  785,  801,   59,   59,   59,  806,
4854   797,  808,  810,  516,  819,  104,  104,  104,  104,   59,
4855   812,   28,  820,  823,  822,  131,  104,  824,   59,   59,
4856    28,  104,  828,   59,  132,   26,  829,  480,   59,   59,
4857    14,   59,  300,  334,   59,   80,   82,   59,   59,   59,
4858    59,  480,   59,   59,   59,   59,   64,   59,   81,  387,
4859   182,  238,   55,  209,   59,   59,   59,  224,   64,  334,
4860    64,  358,   64,  104,   27,   59,   59,   28,   59,   34,
4861    62,  133,  120,  141,   64,  148,  357,   64,   64,  322,
4862   125,  325,  104,   59,  554,  418,   64,   64,   64,  254,
4863   667,  518,  468,  316,  415,  412,  605,   64,  491,   61,
4864    64,  747,   64,  668,  745,  782,   64,   64,   64,  478,
4865   479,  480,  481,  482,  483,  435,  438,  677,  702,   64,
4866   761,  787,  569,  818,  579,  547,  428,  561,   64,   64,
4867   339,  230,  340,   64,  334,    0,  343,    0,   64,   64,
4868     0,   64,   59,  230,   64,    0,    0,   64,   64,   64,
4869    64,    0,   64,   64,   64,   64,    0,   64,    0,  230,
4870     0,    0,  230,  230,   64,   64,   64,    0,    0,    0,
4871     0,  230,  230,  230,    0,   64,   64,    0,   64,    0,
4872   230,    0,  230,    0,    0,  230,    0,  230,    0,    0,
4873     0,  230,  230,   64,  320,    0,    0,    0,  320,    0,
4874   316,  320,  320,  320,  230,    0,  320,  320,  320,   64,
4875     0,  320,    0,  230,  230,  231,    0,    0,  230,    0,
4876     0,    0,    0,  230,  230,    0,  230,  231,    0,  320,
4877     0,  320,  230,  230,  230,    0,    0,  230,  230,  230,
4878   230,    0,  230,  231,    0,    0,  231,  231,    0,    0,
4879   230,  230,   64,    0,    0,  231,  231,  231,    0,    0,
4880   230,  230,    0,  230,  231,    0,  231,    0,    0,  231,
4881     0,  231,    0,    0,    0,  231,  231,    0,  230,    0,
4882     0,    0,    0,    0,    0,  681,  682,  683,  231,    0,
4883   684,  685,  686,    0,  230,  687,    0,  231,  231,  124,
4884     0,    0,  231,    0,    0,    0,    0,  231,  231,    0,
4885   231,  124,    0,  688,    0,  689,  231,  231,  231,    0,
4886     0,  231,  231,  231,  231,    0,  231,  124,    0,    0,
4887   124,  124,    0,    0,  231,  231,    0,  230,    0,  124,
4888   124,  124,    0,    0,  231,  231,    0,  231,  124,    0,
4889   124,    0,    0,  124,    0,  124,    0,    0,    0,  124,
4890   124,    0,  231,    0,    0,    0,    0,    0,    0,    0,
4891     0,    0,  124,    0,    0,    0,    0,    0,  231,    0,
4892     0,  124,  124,  176,    0,    0,  124,    0,    0,    0,
4893     0,  124,  124,    0,  124,  176,    0,    0,    0,    0,
4894   124,  124,  124,    0,    0,  124,  124,  124,  124,    0,
4895   124,  176,    0,    0,  176,  176,    0,    0,  124,  124,
4896     0,  231,    0,  176,  176,  176,    0,    0,  124,  124,
4897     0,  124,  176,    0,  176,    0,    0,  176,    0,  176,
4898     0,    0,    0,  176,  176,    0,  124,    0,    0,    0,
4899     0,    0,    0,    0,    0,    0,  176,    0,    0,    0,
4900     0,    0,  124,    0,    0,  176,  176,  160,    0,    0,
4901   176,    0,    0,    0,    0,  176,  176,    0,  176,  160,
4902     0,    0,    0,    0,  176,  176,  176,    0,    0,  176,
4903   176,  176,  176,    0,  176,  160,    0,    0,  160,  160,
4904     0,    0,  176,  176,    0,  124,    0,  160,  160,  160,
4905     0,    0,  176,  176,    0,  176,  160,    0,  160,    0,
4906     0,  160,    0,  160,    0,    0,    0,  160,  160,    0,
4907   176,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4908   160,    0,    0,    0,    0,    0,  176,    0,    0,  160,
4909   160,   99,    0,    0,  160,    0,    0,    0,    0,  160,
4910   160,    0,  160,   99,    0,    0,    0,    0,  160,  160,
4911   160,    0,    0,  160,  160,  160,  160,    0,  160,   99,
4912     0,    0,   99,   99,    0,    0,  160,  160,    0,  176,
4913     0,   99,   99,   99,    0,    0,  160,  160,    0,  160,
4914    99,    0,   99,    0,    0,   99,    0,   99,    0,    0,
4915     0,   99,   99,    0,  160,    0,    0,    0,    0,    0,
4916     0,    0,    0,    0,   99,    0,    0,    0,    0,    0,
4917   160,    0,    0,   99,   99,  188,    0,    0,   99,    0,
4918     0,    0,    0,   99,   99,    0,   99,  188,    0,    0,
4919     0,    0,   99,   99,   99,    0,    0,   99,   99,   99,
4920    99,    0,   99,  188,    0,    0,  188,  188,    0,    0,
4921    99,   99,    0,  160,    0,  188,  188,  188,    0,    0,
4922    99,   99,    0,   99,  188,    0,  188,    0,    0,  188,
4923     0,  188,    0,    0,    0,  188,  188,    0,   99,    0,
4924     0,    0,    0,    0,    0,    0,    0,    0,  188,    0,
4925     0,    0,    0,    0,   99,    0,    0,  188,  188,    0,
4926     0,    0,  188,    0,    0,    0,    0,  188,  188,    0,
4927   188,    0,    0,    0,    0,    0,  188,  188,  188,    0,
4928     0,  188,  188,  188,  188,    0,  188,    0,    0,    0,
4929     0,    0,    0,    0,  188,  188,    0,   99,    0,    0,
4930     0,    0,  233,    0,  188,  188,    0,  188,    0,    0,
4931     0,  233,  233,    0,  233,    0,  233,    0,    0,  233,
4932   233,  233,  188,  233,  233,  233,  233,    0,  233,  233,
4933   233,  233,  233,  233,  233,  233,    0,  233,  188,    0,
4934     0,  233,  233,    0,  233,    0,    0,    0,  233,    0,
4935     0,    0,    0,    0,    0,  233,  233,    0,    0,    0,
4936     0,    0,  233,    0,  233,    0,  233,    0,    0,    0,
4937   450,  233,   44,  163,    0,  164,    0,  233,    0,  233,
4938     0,  188,    0,    0,  233,  233,  171,  233,    0,    0,
4939   233,   45,    0,  233,  233,    0,    0,    0,  179,    0,
4940     0,    0,    0,    0,    0,  181,    0,    0,    0,  233,
4941     0,    0,    0,  233,    0,  233,   46,  450,  450,    0,
4942   233,  233,    0,    0,    0,    0,    0,  233,    0,    0,
4943   233,  233,  183,  233,    0,  233,  233,    0,  184,    0,
4944     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
4945     0,  450,  233,    0,  191,   47,  233,    0,    0,  233,
4946   233,    0,    0,    0,    0,    0,  450,    0,    0,    0,
4947     0,    0,    0,  450,  450,    0,  450,  450,    0,    0,
4948     0,  192,  193,    0,  451,    0,    0,    0,  194,    0,
4949     0,  233,   48,  233,  255,  233,    0,  233,    0,  233,
4950     0,  233,    0,  255,  255,  233,  255,    0,  255,    0,
4951     0,  255,  255,  255,    0,  255,  255,  255,  255,    0,
4952   255,  255,  255,  255,  255,  255,  255,  255,    0,  255,
4953     0,  451,  451,  255,  255,    0,  255,    0,    0,    0,
4954   255,    0,    0,    0,    0,    0,    0,  255,  255,    0,
4955     0,    0,    0,    0,  255,    0,  255,    0,  255,    0,
4956     0,    0,    0,  255,    0,  451,   49,    0,    0,  255,
4957     0,  255,    0,    0,    0,    0,  255,  255,    0,  255,
4958   451,    0,  255,    0,    0,  255,  255,  451,  451,    0,
4959   451,  451,    0,    0,   58,    0,    0,    0,    0,    0,
4960     0,  255,    0,  195,    0,  255,    0,  255,    0,    0,
4961     0,    0,  255,  255,   58,   58,    0,    0,    0,  255,
4962     0,    0,  255,  255,    0,  255,    0,  255,  255,    0,
4963     0,    0,    0,    0,    0,    0,    0,   58,    0,    0,
4964     0,    0,    0,    0,  255,    0,   58,   58,  255,    0,
4965     0,  255,  255,    0,    0,   58,   58,   58,    0,    0,
4966    58,   58,   58,   58,    0,   58,    0,    0,    0,    0,
4967     0,    0,    0,   58,   58,    0,    0,    0,    0,    0,
4968     0,    0,    0,  255,   58,  255,  219,  255,    0,  255,
4969     0,  255,    0,  255,    0,  219,  219,  255,  219,    0,
4970   219,   58,    0,  219,  219,  219,    0,  219,  219,  219,
4971   219,    0,  219,  219,  219,  219,  219,  219,  219,  219,
4972     0,  219,    0,    0,    0,  219,  219,    0,  219,    0,
4973     0,  128,  219,    0,    0,  452,    0,    0,    0,  219,
4974   219,    0,    0,    0,  129,  453,  219,    0,  219,    0,
4975   219,    0,    0,    0,  130,  219,    0,  454,    0,    0,
4976     0,  219,    0,  219,  455,    0,    0,    0,  219,  219,
4977     0,  219,    0,    0,  219,    0,  131,  219,  219,    0,
4978     0,    0,    0,    0,    0,  132,   58,    0,    0,    0,
4979     0,    0,    0,  219,    0,  196,    0,  219,    0,  219,
4980     0,    0,    0,    0,  219,  219,   58,   58,    0,    0,
4981   492,  219,    0,    0,  219,  219,    0,  219,    0,  219,
4982   219,    0,    0,    0,    0,    0,    0,    0,    0,   58,
4983     0,    0,  133,  456,    0,    0,  219,    0,   58,   58,
4984   219,    0,    0,  219,  219,    0,    0,   58,   58,   58,
4985     0,    0,   58,   58,   58,   58,    0,   58,    0,    0,
4986     0,    0,    0,    0,    0,   58,   58,    0,    0,    0,
4987     0,    0,    0,    0,    0,  219,   58,  219,  222,  219,
4988     0,  219,    0,  219,    0,  219,    0,  222,  222,  219,
4989   222,    0,  222,   58,    0,  222,  222,  222,    0,  222,
4990   222,  222,  222,    0,  222,  222,  222,  222,  222,  222,
4991   222,  222,    0,  222,    0,    0,    0,  222,  222,    0,
4992   222,    0,    0,  128,  222,    0,    0,  452,    0,    0,
4993     0,  222,  222,    0,    0,    0,  129,  453,  222,    0,
4994   222,    0,  222,    0,    0,    0,  130,  222,    0,  454,
4995     0,    0,    0,  222,    0,  222,  455,    0,    0,    0,
4996   222,  222,    0,  222,    0,    0,  222,    0,  131,  222,
4997   222,    0,    0,    0,    0,    0,    0,  132,   91,    0,
4998     0,    0,    0,    0,    0,  222,    0,    0,    0,  222,
4999     0,  222,    0,    0,    0,    0,  222,  222,   92,    0,
5000     0,    0,    0,  222,    0,    0,  222,  222,    0,  222,
5001     0,  222,  222,    0,    0,    0,    0,    0,    0,    0,
5002     0,   93,    0,    0,  133,  456,    0,    0,  222,    0,
5003    94,   95,  222,    0,    0,  222,  222,    0,    0,   96,
5004    97,   98,    0,    0,   99,    0,  100,  101,    0,  102,
5005     0,    0,    0,    0,    0,    0,    0,  103,  104,    0,
5006     0,    0,    0,    0,    0,    0,    0,  222,    0,  222,
5007   625,  222,    0,  222,    0,  222,    0,  222,    0,   44,
5008   163,  222,  164,    0,  165,  105,    0,  166,  167,  168,
5009     0,  169,  170,  171,  172,    0,  173,  174,   45,  626,
5010   175,  176,  177,  178,    0,  179,    0,    0,    0,  627,
5011   180,    0,  181,    0,    0,    0,    0,    0,    0,    0,
5012     0,    0,    0,   46,   68,    0,    0,    0,    0,    0,
5013   182,    0,  628,    0,  629,    0,    0,    0,    0,  183,
5014     0,    0,    0,    0,    0,  184,    0,  185,    0,    0,
5015     0,    0,  186,  187,    0,  188,    0,    0,  190,    0,
5016     0,  191,   47,    0,    0,    0,    0,    0,    0,    0,
5017     0,    0,    0,    0,    0,    0,    0,  630,    0,    0,
5018     0,  631,    0,  632,    0,    0,    0,    0,  192,  193,
5019     0,    0,    0,    0,    0,  194,    0,    0,  633,   48,
5020     0,  634,    0,   69,  635,    0,    0,    0,    0,    0,
5021     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5022   196,    0,    0,  326,    0,    0,    0,  197,  198,    0,
5023     0,   44,  163,  327,  164,    0,  165,    0,    0,  166,
5024   167,  168,    0,  169,  170,  171,  172,    0,  173,  174,
5025    45,    0,  175,  176,  177,  178,    0,  179,    0,  199,
5026     0,  200,  180,  201,  181,  202,    0,  203,    0,  204,
5027     0,    0,    0,   49,    0,   46,   68,    0,    0,    0,
5028     0,    0,  182,    0,    0,    0,    0,    0,    0,    0,
5029     0,  183,    0,    0,    0,    0,    0,  184,    0,  185,
5030     0,    0,    0,    0,  186,  187,    0,  188,    0,  189,
5031   190,    0,    0,  191,   47,    0,    0,    0,    0,    0,
5032     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5033     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5034   192,  193,    0,    0,    0,    0,    0,  194,    0,    0,
5035     0,   48,    0,    0,    0,   69,    0,  195,    0,    0,
5036     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5037     0,    0,  196,    0,    0,  705,    0,    0,    0,  197,
5038   198,    0,    0,   44,  163,    0,  164,    0,  165,    0,
5039     0,  166,  167,  168,    0,  169,  170,  171,  172,    0,
5040   173,  174,   45,    0,  175,  176,  177,  178,    0,  179,
5041     0,  199,    0,  200,  180,  201,  181,  202,    0,  203,
5042     0,  204,    0,    0,    0,   49,    0,   46,   68,    0,
5043     0,    0,    0,    0,  182,    0,    0,    0,    0,    0,
5044     0,    0,    0,  183,    0,    0,    0,    0,    0,  184,
5045     0,  185,    0,    0,    0,    0,  186,  187,    0,  188,
5046     0,  189,  190,    0,    0,  191,   47,    0,    0,    0,
5047     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5048     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5049     0,    0,  192,  193,    0,    0,    0,    0,    0,  194,
5050     0,    0,    0,   48,    0,    0,    0,   69,    0,  195,
5051     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5052     0,    0,    0,    0,  196,    0,    0,    0,    0,    0,
5053     0,  197,  198,    0,    0,   44,  163,    0,  164,    0,
5054   165,    0,    0,  166,  167,  168,    0,  169,  170,  171,
5055   172,    0,  173,  174,   45,    0,  175,  176,  177,  178,
5056     0,  179,    0,  199,    0,  200,  180,  201,  181,  202,
5057     0,  203,    0,  204,    0,    0,    0,   49,    0,   46,
5058    68,    0,    0,    0,    0,    0,  182,    0,    0,    0,
5059     0,    0,    0,    0,    0,  183,    0,    0,    0,    0,
5060     0,  184,    0,  185,    0,    0,    0,    0,  186,  187,
5061     0,  188,    0,  189,  190,    0,    0,  191,   47,    0,
5062     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5063     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5064     0,    0,    0,    0,  192,  193,    0,    0,    0,    0,
5065     0,  194,    0,    0,    0,   48,    0,    0,    0,   69,
5066     0,  195,    0,    0,    0,    0,    0,    0,    0,    0,
5067     0,    0,    0,    0,    0,    0,  196,  594,  610,    0,
5068     0,    0,    0,  197,  198,    0,    0,   44,  163,    0,
5069   164,    0,  165,    0,    0,  166,  167,  168,    0,  169,
5070   170,  171,  172,    0,  173,  174,   45,    0,  175,  176,
5071   177,  178,    0,  179,    0,  199,    0,  200,  180,  201,
5072   181,  202,    0,  203,    0,  204,    0,    0,    0,   49,
5073     0,   46,   68,    0,    0,    0,    0,    0,  182,    0,
5074     0,    0,    0,    0,    0,    0,    0,  183,    0,    0,
5075     0,    0,    0,  184,    0,  185,    0,    0,    0,    0,
5076   186,  187,    0,  188,    0,  189,  190,    0,    0,  191,
5077    47,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5078     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5079     0,    0,    0,    0,    0,    0,  192,  193,    0,    0,
5080     0,    0,    0,  194,    0,    0,    0,   48,    0,    0,
5081     0,   69,    0,  195,    0,    0,    0,    0,    0,    0,
5082     0,    0,    0,    0,    0,    0,    0,    0,  196,  594,
5083     0,    0,    0,    0,    0,  197,  198,    0,    0,   44,
5084   163,    0,  164,    0,  165,    0,    0,  166,  167,  168,
5085     0,  169,  170,  171,  172,    0,  173,  174,   45,    0,
5086   175,  176,  177,  178,    0,  179,    0,  199,    0,  200,
5087   180,  201,  181,  202,    0,  203,    0,  204,    0,    0,
5088     0,   49,    0,   46,   68,    0,    0,    0,    0,    0,
5089   182,    0,    0,    0,    0,    0,    0,    0,    0,  183,
5090     0,    0,    0,    0,    0,  184,    0,  185,    0,    0,
5091     0,    0,  186,  187,    0,  188,    0,  189,  190,    0,
5092     0,  191,   47,    0,    0,    0,    0,    0,    0,    0,
5093     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5094     0,    0,    0,    0,    0,    0,    0,    0,  192,  193,
5095     0,    0,    0,    0,    0,  194,    0,    0,    0,   48,
5096     0,    0,    0,   69,    0,  195,    0,    0,    0,    0,
5097     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5098   196,    0,    0,    0,    0,    0,   90,  197,  198,    0,
5099     0,   44,  163,    0,  164,    0,  165,    0,    0,  166,
5100   167,  168,    0,  169,  170,  171,  172,    0,  173,  174,
5101    45,    0,  175,  176,  177,  178,    0,  179,    0,  199,
5102     0,  200,  180,  201,  181,  202,   91,  203,    0,  204,
5103     0,    0,    0,   49,    0,   46,   68,    0,    0,    0,
5104     0,    0,  182,    0,    0,    0,   92,    0,    0,    0,
5105     0,  183,    0,    0,    0,    0,    0,  184,    0,  185,
5106     0,    0,    0,    0,  186,  187,    0,  188,    0,   93,
5107   190,    0,    0,  191,   47,    0,    0,    0,   94,   95,
5108     0,    0,    0,    0,    0,    0,    0,   96,   97,   98,
5109     0,    0,   99,    0,  100,  101,    0,  102,    0,    0,
5110   192,  193,    0,    0,    0,  103,  104,  194,    0,    0,
5111     0,   48,    0,    0,    0,   69,    0,    0,    0,    0,
5112     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5113     0,    0,  196,  105,    0,    0,    0,    0,    0,  197,
5114   198,    0,    0,   44,  163,    0,  164,    0,  165,    0,
5115     0,  166,  167,  168,    0,  169,  170,  171,  172,    0,
5116   173,  174,   45,    0,  175,  176,  177,  178,    0,  179,
5117     0,  199,    0,  200,  180,  201,  181,  202,    0,  203,
5118     0,  204,    0,    0,    0,   49,    0,   46,   68,    0,
5119     0,    0,    0,    0,  182,   58,    0,    0,    0,    0,
5120     0,    0,    0,  183,    0,    0,    0,    0,    0,  184,
5121     0,  185,    0,    0,    0,    0,  186,  187,    0,  188,
5122     0,    0,  190,   58,    0,  191,   47,    0,    0,    0,
5123     0,    0,    0,    0,    0,   58,   58,    0,    0,    0,
5124     0,    0,    0,    0,    0,    0,   58,    0,    0,    0,
5125     0,    0,  192,  193,    0,   58,    0,    0,    0,  194,
5126     0,    0,    0,   48,    0,    0,    0,   69,   58,    0,
5127     0,    0,    0,    0,    0,    0,    0,   58,   58,    0,
5128     0,    0,   58,    0,  196,    0,    0,   58,   58,    0,
5129     0,    0,    0,    0,    0,    0,   58,   58,   58,    0,
5130     0,   58,    0,   58,   58,    0,   58,    0,    0,    0,
5131     0,    0,    0,    0,   58,   58,   97,    0,    0,    0,
5132     0,    0,    0,  199,   58,  200,    0,  201,    0,  202,
5133     0,  203,   97,  204,    0,   97,   97,   49,    0,    0,
5134     0,    0,   58,    0,   97,   97,   97,    0,    0,    0,
5135     0,    0,    0,   97,    0,   97,    0,    0,   97,    0,
5136    97,    0,    0,    0,   97,   97,    0,    0,    0,    0,
5137     0,    0,   97,    0,    0,   97,    0,   97,    0,    0,
5138     0,    0,    0,    0,    0,    0,   97,   97,    0,    0,
5139     0,    0,    0,    0,    0,    0,   97,   97,  100,   97,
5140     0,    0,    0,    0,    0,   97,   97,   97,    0,    0,
5141    97,   97,   97,   97,  100,   97,    0,  100,  100,    0,
5142     0,    0,    0,   97,   97,    0,  100,  100,  100,    0,
5143     0,    0,    0,   97,   97,  100,   97,  100,    0,    0,
5144   100,    0,  100,    0,    0,    0,  100,  100,    0,    0,
5145     0,   97,    0,    0,  100,    0,    0,    0,    0,  100,
5146     0,    0,    0,    0,    0,    0,    0,   97,  100,  100,
5147     0,    0,    0,    0,    0,    0,    0,    0,  100,  100,
5148     0,  100,    0,  101,    0,    0,    0,  100,  100,  100,
5149     0,    0,  100,  100,  100,  100,    0,  100,    0,  101,
5150     0,    0,  101,  101,    0,  100,  100,    0,    0,    0,
5151    97,  101,  101,  101,    0,  100,  100,    0,  100,    0,
5152   101,    0,  101,    0,    0,  101,    0,  101,    0,    0,
5153     0,  101,  101,  100,    0,    0,    0,    0,    0,  101,
5154     0,    0,    0,    0,  101,    0,    0,    0,    0,  100,
5155     0,    0,    0,  101,  101,    0,    0,    0,    0,    0,
5156     0,    0,    0,  101,  101,  123,  101,    0,    0,    0,
5157     0,    0,  101,  101,  101,    0,    0,  101,  101,  101,
5158   101,  123,  101,    0,  123,  123,    0,    0,    0,    0,
5159   101,  101,  100,  123,  123,  123,    0,    0,    0,    0,
5160   101,  101,  123,  101,  123,    0,    0,  123,    0,  123,
5161     0,    0,    0,  123,  123,    0,    0,    0,  101,    0,
5162     0,    0,    0,    0,    0,    0,  123,    0,    0,    0,
5163     0,    0,    0,    0,  101,  123,  123,    0,    0,    0,
5164     0,    0,    0,    0,    0,  123,  123,    0,  123,    0,
5165   102,    0,    0,    0,  123,  123,  123,    0,    0,  123,
5166   123,  123,  123,    0,  123,    0,  102,    0,    0,  102,
5167   102,    0,  123,  123,    0,    0,    0,  101,  102,  102,
5168   102,    0,  123,  123,    0,  123,    0,  102,    0,  102,
5169     0,    0,  102,    0,  102,    0,    0,    0,  102,  102,
5170   123,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5171     0,  102,    0,    0,    0,    0,  123,    0,    0,    0,
5172   102,  102,    0,    0,    0,    0,    0,    0,    0,    0,
5173   102,  102,  211,  102,    0,    0,    0,    0,    0,  102,
5174   102,  102,    0,    0,  102,  102,  102,  102,  211,  102,
5175     0,  211,  211,    0,    0,    0,    0,  102,  102,  123,
5176   211,  211,  211,    0,    0,    0,    0,  102,  102,  211,
5177   102,  211,  211,    0,  211,    0,  211,    0,    0,    0,
5178   211,  211,    0,    0,    0,  102,    0,    0,    0,    0,
5179     0,    0,    0,  211,    0,    0,    0,    0,    0,    0,
5180     0,  102,  211,  211,    0,    0,    0,    0,    0,    0,
5181     0,    0,  211,  211,    0,  211,    0,    0,    0,    0,
5182     0,  211,  211,  211,    0,    0,  211,    0,  211,  211,
5183     0,  211,    0,    0,    0,    0,    0,    0,    0,  211,
5184   211,    0,  212,    0,  102,    0,    0,    0,    0,  211,
5185   211,    0,  211,    0,    0,    0,    0,    0,  212,    0,
5186     0,  212,  212,    0,    0,    0,    0,  211,    0,    0,
5187   212,  212,  212,    0,    0,    0,    0,    0,  211,  212,
5188     0,  212,  212,    0,  212,    0,  212,    0,    0,    0,
5189   212,  212,    0,    0,    0,    0,    0,    0,    0,    0,
5190     0,    0,    0,  212,    0,    0,    0,    0,    0,    0,
5191     0,    0,  212,  212,    0,    0,    0,    0,    0,    0,
5192     0,    0,  212,  212,  103,  212,  211,    0,    0,    0,
5193     0,  212,  212,  212,    0,    0,  212,    0,  212,  212,
5194   103,  212,    0,  103,  103,    0,    0,    0,    0,  212,
5195   212,    0,  103,  103,  103,    0,    0,    0,    0,  212,
5196   212,  103,  212,  103,    0,    0,  103,    0,  103,    0,
5197     0,    0,  103,  103,    0,    0,    0,  212,    0,    0,
5198     0,    0,    0,    0,    0,  103,    0,    0,  212,    0,
5199     0,    0,    0,    0,  103,  103,    0,    0,    0,    0,
5200     0,    0,    0,    0,  103,  103,    0,  103,    0,  138,
5201     0,    0,    0,  103,  103,  103,    0,    0,  103,  103,
5202   103,  103,    0,  103,    0,  138,    0,    0,  138,  138,
5203     0,  103,  103,    0,    0,    0,  212,  138,  138,  138,
5204     0,  103,  103,    0,  103,    0,  138,    0,  138,    0,
5205     0,  138,    0,  138,    0,    0,    0,  138,  138,  103,
5206     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5207   138,    0,    0,    0,    0,  103,    0,    0,    0,  138,
5208   138,    0,    0,    0,    0,    0,    0,    0,    0,  138,
5209   138,  227,  138,    0,    0,    0,    0,    0,  138,  138,
5210   138,    0,    0,  138,  138,  138,  138,  227,  138,    0,
5211   227,  227,    0,    0,    0,    0,  138,  138,  103,  227,
5212   227,  227,    0,    0,    0,    0,  138,  138,  227,  138,
5213   227,    0,    0,  227,    0,  227,    0,    0,    0,  227,
5214   227,    0,    0,    0,  138,    0,    0,    0,    0,    0,
5215     0,    0,  227,    0,    0,    0,    0,    0,    0,    0,
5216   138,  227,  227,    0,    0,    0,    0,    0,    0,    0,
5217     0,  227,  227,    0,  227,    0,  174,    0,    0,    0,
5218   227,  227,  227,    0,    0,  227,  227,  227,  227,    0,
5219   227,    0,  174,    0,    0,  174,  174,    0,  227,  227,
5220     0,    0,    0,  138,  174,  174,  174,    0,  227,  227,
5221     0,  227,    0,  174,    0,  174,    0,    0,  174,    0,
5222   174,    0,    0,    0,  174,  174,  227,    0,    0,    0,
5223     0,    0,    0,    0,    0,    0,    0,  174,    0,    0,
5224     0,    0,  227,    0,    0,    0,  174,  174,    0,    0,
5225     0,    0,    0,    0,    0,    0,  174,  174,  235,  174,
5226     0,    0,    0,    0,    0,  174,  174,  174,    0,    0,
5227   174,  174,  174,  174,  235,  174,    0,  235,  235,    0,
5228     0,    0,    0,  174,  174,  227,  235,  235,  235,    0,
5229     0,    0,    0,  174,  174,  235,  174,  235,    0,    0,
5230   235,    0,  235,    0,    0,    0,  235,  235,    0,    0,
5231     0,  174,    0,    0,    0,    0,    0,    0,    0,  235,
5232     0,    0,    0,    0,    0,    0,    0,  174,  235,  235,
5233     0,    0,    0,    0,    0,    0,    0,    0,  235,  235,
5234     0,  235,    0,  206,    0,    0,    0,  235,  235,  235,
5235     0,    0,  235,  235,  235,  235,    0,  235,    0,  206,
5236     0,    0,  206,  206,    0,  235,  235,    0,    0,    0,
5237   174,  206,  206,  206,    0,  235,  235,    0,  235,    0,
5238   206,    0,  206,    0,    0,  206,    0,  206,    0,    0,
5239     0,  206,  206,  235,    0,    0,    0,    0,    0,    0,
5240     0,    0,    0,    0,  206,    0,    0,    0,    0,  235,
5241     0,    0,    0,  206,  206,    0,    0,    0,    0,    0,
5242     0,    0,    0,  206,  206,  154,  206,    0,    0,    0,
5243     0,    0,  206,  206,  206,    0,    0,  206,  206,  206,
5244   206,  154,  206,    0,  154,  154,    0,    0,    0,    0,
5245   206,  206,  235,  154,  154,  154,    0,    0,    0,    0,
5246   206,  206,  154,  206,  154,    0,    0,  154,    0,  154,
5247     0,    0,    0,  154,  154,    0,    0,    0,  206,    0,
5248     0,    0,    0,    0,    0,    0,  154,    0,    0,    0,
5249     0,    0,    0,    0,  206,  154,  154,    0,    0,    0,
5250     0,    0,    0,    0,    0,  154,  154,    0,  154,    0,
5251   157,    0,    0,    0,  154,  154,  154,    0,    0,  154,
5252   154,  154,  154,    0,  154,    0,  157,    0,    0,  157,
5253   157,    0,  154,  154,    0,    0,    0,  206,  157,  157,
5254   157,    0,  154,  154,    0,  154,    0,  157,    0,  157,
5255     0,    0,  157,    0,  157,    0,    0,    0,  157,  157,
5256   154,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5257     0,  157,    0,    0,    0,    0,  154,    0,    0,    0,
5258   157,  157,    0,    0,    0,    0,    0,    0,    0,    0,
5259   157,  157,   58,  157,    0,    0,    0,    0,    0,  157,
5260   157,  157,    0,    0,  157,  157,  157,  157,   58,  157,
5261     0,   58,   58,    0,    0,    0,    0,  157,  157,  154,
5262    58,   58,   58,    0,    0,    0,    0,  157,  157,  125,
5263   157,   58,    0,    0,   58,    0,   58,    0,    0,    0,
5264    58,   58,    0,    0,    0,  157,    0,    0,    0,    0,
5265     0,    0,    0,   58,    0,    0,    0,    0,    0,    0,
5266     0,  157,   58,   58,    0,    0,    0,    0,    0,    0,
5267     0,    0,   58,   58,    0,   58,    0,   58,    0,    0,
5268     0,   58,   58,   58,    0,    0,   58,   58,   58,   58,
5269     0,   58,    0,   58,    0,    0,   58,   58,    0,   58,
5270    58,    0,    0,    0,  157,   58,   58,   58,    0,   58,
5271    58,    0,   58,    0,  126,    0,   58,    0,    0,   58,
5272     0,   58,    0,    0,    0,   58,   58,   58,    0,    0,
5273     0,    0,    0,    0,    0,    0,    0,    0,   58,    0,
5274     0,    0,    0,    0,    0,    0,    0,   58,   58,    0,
5275     0,    0,    0,    0,    0,    0,    0,   58,   58,  210,
5276    58,    0,    0,    0,    0,    0,   58,   58,   58,    0,
5277     0,   58,   58,   58,   58,  210,   58,    0,  210,  210,
5278     0,    0,    0,    0,   58,   58,   58,  210,  210,  210,
5279     0,    0,    0,    0,   58,   58,  210,   58,  210,  210,
5280     0,  210,    0,  210,    0,    0,    0,  210,  210,    0,
5281     0,    0,   58,    0,    0,    0,    0,    0,    0,    0,
5282   210,    0,    0,    0,    0,    0,    0,    0,    0,  210,
5283   210,    0,    0,    0,    0,    0,    0,    0,    0,  210,
5284   210,    0,  210,    0,   58,    0,    0,    0,  210,  210,
5285   210,    0,    0,  210,    0,  210,  210,    0,  210,    0,
5286    58,    0,    0,   58,   58,    0,  210,  210,    0,    0,
5287     0,   58,   58,   58,   58,    0,  210,  210,    0,  210,
5288     0,  139,    0,   58,    0,    0,   58,    0,   58,    0,
5289     0,    0,   58,   58,  210,    0,    0,    0,    0,    0,
5290     0,    0,    0,    0,    0,   58,    0,    0,    0,    0,
5291     0,    0,    0,    0,   58,   58,    0,    0,    0,    0,
5292     0,    0,    0,    0,   58,   58,   58,   58,    0,    0,
5293     0,    0,    0,   58,   58,   58,    0,    0,   58,   58,
5294    58,   58,   58,   58,    0,   58,   58,    0,    0,    0,
5295     0,   58,   58,  210,   58,   58,   58,    0,    0,    0,
5296     0,   58,   58,  140,   58,   58,    0,    0,   58,    0,
5297    58,    0,    0,    0,   58,   58,    0,    0,    0,   58,
5298     0,    0,    0,    0,    0,    0,    0,   58,    0,    0,
5299     0,    0,    0,    0,    0,    0,   58,   58,    0,    0,
5300     0,    0,    0,  470,  470,    0,   58,   58,    0,   58,
5301     0,  209,    0,    0,    0,   58,   58,   58,    0,    0,
5302    58,   58,   58,   58,    0,   58,    0,  209,    0,    0,
5303   209,  209,    0,   58,   58,    0,    0,    0,   58,  209,
5304   209,  209,    0,   58,   58,    0,   58,    0,  209,  470,
5305   209,    0,    0,  209,    0,  209,    0,    0,    0,  209,
5306   209,   58,    0,    0,    0,  470,    0,    0,    0,    0,
5307     0,  470,  209,    0,    0,    0,  480,  480,  470,    0,
5308     0,  209,  209,    0,    0,    0,    0,    0,    0,    0,
5309     0,  209,  209,    0,  209,    0,  470,  470,    0,    0,
5310   209,  209,  209,    0,    0,  209,    0,  209,  209,    0,
5311   209,    0,    0,    0,    0,    0,    0,    0,  209,  209,
5312    58,    0,  480,    0,    0,    0,  385,  385,  209,  209,
5313   470,  209,    0,    0,    0,    0,    0,    0,    0,    0,
5314     0,    0,    0,    0,  480,  470,  209,    0,    0,    0,
5315   470,  480,  470,  470,    0,  470,  470,  470,  470,  470,
5316   470,  470,  470,  470,  470,    0,  470,  470,    0,  480,
5317   480,    0,  385,    0,    0,    0,    0,  470,    0,  470,
5318     0,  470,    0,    0,    0,  470,    0,  470,    0,    0,
5319     0,    0,    0,    0,  385,    0,    0,    0,    0,  362,
5320   362,  385,    0,  480,    0,  209,    0,    0,    0,    0,
5321     0,    0,    0,    0,    0,    0,    0,    0,  480,  385,
5322   385,    0,    0,  480,    0,  480,  480,  480,  480,  480,
5323   480,  480,  480,  480,  480,  480,  480,  480,    0,  480,
5324   480,    0,    0,    0,    0,  362,    0,    0,    0,    0,
5325   480,    0,  480,  385,  480,    0,    0,    0,  480,    0,
5326   480,    0,    0,    0,    0,    0,    0,  362,  385,    0,
5327     0,    0,    0,  384,  362,  385,  385,  384,  385,  385,
5328   385,  385,  385,  385,  385,  385,  385,  385,    0,  385,
5329   385,    0,  362,  362,    0,    0,  319,  319,    0,    0,
5330   385,    0,  385,    0,  385,    0,    0,    0,  385,    0,
5331   385,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5332     0,    0,    0,    0,    0,    0,  362,    0,    0,    0,
5333     0,    0,    0,    0,  415,  415,    0,    0,    0,    0,
5334     0,  362,  319,    0,    0,    0,  362,    0,  362,  362,
5335     0,  362,  362,  362,  362,  362,  362,  362,  362,  362,
5336   362,    0,  362,  362,  319,    0,    0,    0,    0,    0,
5337     0,  319,    0,  362,    0,  362,    0,  362,    0,    0,
5338   415,  362,    0,  362,    0,    0,    0,    0,    0,  319,
5339   319,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5340     0,    0,  415,    0,    0,    0,    0,    0,    0,  415,
5341     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5342     0,    0,    0,  319,    0,    0,    0,  415,  415,    0,
5343     0,  416,  416,    0,    0,    0,    0,    0,  319,    0,
5344     0,    0,    0,    0,    0,  319,  319,  319,  319,  319,
5345   319,  319,  319,  319,  319,  319,  319,  319,    0,  319,
5346   319,  415,    0,    0,    0,    0,    0,    0,    0,    0,
5347   319,    0,  319,    0,  319,    0,  415,  416,  319,    0,
5348   319,  417,  417,  415,  415,    0,  415,  415,  415,  415,
5349   415,  415,  415,  415,  415,  415,    0,  415,  415,  416,
5350     0,    0,    0,    0,    0,    0,  416,    0,  415,    0,
5351   415,    0,  415,    0,    0,    0,  415,    0,  415,    0,
5352     0,    0,    0,    0,  416,  416,    0,  417,   44,   44,
5353     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5354     0,    0,    0,    0,    0,    0,    0,    0,    0,  417,
5355     0,    0,    0,    0,    0,    0,  417,    0,  416,    0,
5356     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5357     0,    0,    0,  416,  417,  417,    0,    0,  423,  423,
5358   416,  416,    0,  416,  416,  416,  416,  416,  416,  416,
5359   416,  416,  416,    0,  416,  416,   44,    0,    0,    0,
5360     0,    0,    0,   44,    0,  416,    0,  416,  417,  416,
5361     0,    0,    0,  416,    0,  416,    0,    0,    0,    0,
5362     0,   44,   44,  417,  423,    0,    0,    0,  424,  424,
5363   417,  417,    0,  417,  417,  417,  417,  417,  417,  417,
5364   417,  417,    0,    0,  417,  417,  423,    0,    0,    0,
5365     0,    0,    0,  423,    0,  417,    0,  417,    0,  417,
5366     0,    0,    0,  417,    0,  417,    0,    0,    0,    0,
5367    44,  423,  423,    0,  424,   44,    0,    0,   44,   44,
5368    44,    0,   44,   44,   44,   44,   44,   44,   44,   44,
5369     0,   44,   44,    0,    0,    0,  424,    0,    0,    0,
5370   425,  425,   44,  424,   44,  423,   44,    0,    0,    0,
5371    44,    0,   44,    0,    0,    0,    0,    0,    0,    0,
5372   423,  424,  424,    0,    0,    0,    0,  423,  423,    0,
5373   423,  423,  423,  423,  423,  423,  423,    0,    0,    0,
5374     0,  423,  423,  426,  426,    0,  425,    0,    0,    0,
5375     0,    0,  423,    0,  423,  424,  423,    0,    0,    0,
5376   423,    0,  423,    0,    0,    0,    0,    0,  425,    0,
5377   424,    0,    0,    0,    0,  425,    0,  424,  424,    0,
5378   424,  424,  424,  424,  424,  424,  424,    0,    0,  426,
5379     0,  424,  424,  425,  425,  427,  427,    0,    0,    0,
5380     0,    0,  424,    0,  424,    0,  424,    0,    0,    0,
5381   424,  426,  424,    0,    0,    0,    0,    0,  426,    0,
5382     0,    0,    0,    0,    0,    0,    0,  425,    0,    0,
5383     0,    0,    0,    0,    0,    0,  426,  426,    0,    0,
5384     0,  427,  425,    0,    0,  428,  428,    0,    0,  425,
5385   425,    0,  425,  425,  425,  425,  425,  425,  425,    0,
5386     0,    0,    0,  427,  425,    0,    0,    0,    0,    0,
5387   426,    0,    0,    0,  425,    0,  425,    0,  425,    0,
5388     0,    0,  425,    0,  425,  426,    0,    0,  427,  427,
5389     0,  428,  426,  426,    0,  426,  426,  426,  426,  426,
5390   426,  426,    0,    0,    0,    0,    0,  426,    0,    0,
5391     0,    0,    0,  428,  429,  429,    0,  426,    0,  426,
5392     0,  426,  427,    0,    0,  426,    0,  426,    0,    0,
5393     0,    0,    0,    0,    0,    0,    0,  427,  428,  428,
5394     0,    0,    0,    0,  427,  427,    0,  427,  427,  427,
5395   427,  427,  427,  427,    0,    0,    0,    0,    0,  427,
5396   429,    0,    0,    0,  430,  430,    0,    0,    0,  427,
5397     0,  427,  428,  427,    0,    0,    0,  427,    0,  427,
5398     0,    0,  429,    0,    0,    0,    0,  428,    0,    0,
5399     0,    0,    0,    0,  428,  428,    0,  428,  428,  428,
5400   428,  428,  428,  428,    0,    0,    0,  429,  429,  428,
5401   430,    0,    0,    0,  431,  431,    0,    0,    0,  428,
5402     0,  428,    0,  428,    0,    0,    0,  428,    0,  428,
5403     0,    0,  430,    0,    0,    0,    0,    0,    0,    0,
5404     0,  429,    0,    0,    0,    0,    0,    0,    0,    0,
5405     0,    0,    0,    0,    0,    0,  429,  430,  430,    0,
5406   431,    0,    0,  429,  429,    0,  429,  429,  429,  429,
5407   429,  429,  429,    0,    0,    0,    0,    0,  429,    0,
5408     0,    0,  431,  432,  432,    0,    0,    0,  429,    0,
5409   429,  430,  429,    0,    0,    0,  429,    0,  429,    0,
5410     0,    0,    0,    0,    0,    0,  430,  431,  431,    0,
5411     0,    0,    0,  430,  430,    0,  430,  430,    0,    0,
5412   430,  430,  430,    0,    0,    0,    0,    0,  430,  432,
5413     0,    0,    0,  433,  433,    0,    0,    0,  430,    0,
5414   430,  431,  430,    0,    0,    0,  430,    0,  430,    0,
5415     0,  432,    0,    0,    0,    0,  431,    0,    0,    0,
5416     0,    0,    0,  431,  431,    0,  431,  431,    0,    0,
5417   431,  431,  431,    0,    0,    0,  432,  432,  431,  433,
5418     0,    0,    0,  434,  434,    0,    0,    0,  431,    0,
5419   431,    0,  431,    0,    0,    0,  431,    0,  431,    0,
5420     0,  433,    0,    0,    0,    0,    0,    0,    0,    0,
5421   432,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5422   435,  435,    0,    0,    0,  432,  433,  433,    0,  434,
5423     0,    0,  432,  432,    0,  432,  432,    0,    0,  432,
5424   432,  432,    0,    0,    0,    0,    0,    0,    0,    0,
5425     0,  434,    0,    0,    0,  480,  480,  432,    0,  432,
5426   433,  432,    0,    0,    0,  432,  435,  432,    0,    0,
5427     0,    0,    0,    0,    0,  433,  434,  434,    0,    0,
5428     0,    0,  433,  433,    0,  433,  433,    0,  435,  433,
5429   433,  433,  442,  442,    0,    0,    0,    0,    0,    0,
5430     0,  480,    0,    0,    0,    0,    0,  433,    0,  433,
5431   434,  433,    0,  435,  435,  433,    0,  433,    0,    0,
5432     0,    0,    0,  480,    0,  434,    0,    0,    0,    0,
5433     0,    0,  434,  434,    0,  434,  434,    0,  442,  434,
5434   434,  434,  436,  436,    0,    0,    0,  435,  480,  480,
5435     0,    0,    0,    0,    0,    0,    0,  434,    0,  434,
5436   442,  434,  435,    0,    0,  434,    0,  434,    0,  435,
5437   435,    0,  435,  435,    0,    0,  435,  435,  435,  438,
5438   438,    0,  480,    0,    0,  442,  442,    0,  436,    0,
5439     0,    0,  439,  439,  435,    0,  435,  480,  435,    0,
5440     0,    0,    0,    0,  480,  480,    0,  480,  480,    0,
5441   436,  480,  480,  480,    0,    0,    0,    0,    0,  442,
5442     0,    0,    0,    0,    0,  438,    0,    0,    0,  480,
5443     0,  480,    0,  480,  442,  436,  436,    0,  439,    0,
5444     0,  442,  442,    0,  442,  442,    0,  438,  442,  442,
5445   442,    0,    0,    0,    0,    0,    0,    0,  440,  440,
5446   439,    0,    0,    0,    0,    0,  442,    0,  442,  436,
5447   442,    0,  438,  438,    0,    0,    0,    0,    0,    0,
5448     0,    0,    0,    0,  436,  439,  439,    0,    0,    0,
5449     0,  436,  436,    0,  436,  436,    0,    0,  436,  436,
5450   436,  441,  441,    0,  440,    0,  438,    0,    0,    0,
5451     0,    0,    0,    0,    0,    0,  436,    0,  436,  439,
5452   436,  438,    0,    0,    0,    0,  440,    0,  438,  438,
5453     0,  438,  438,    0,  439,  438,  438,  438,    0,    0,
5454     0,  439,  439,    0,  439,  439,    0,  441,  439,  439,
5455   439,  440,  440,  438,    0,  438,    0,  438,    0,    0,
5456     0,    0,    0,    0,    0,    0,  439,    0,  439,  441,
5457   439,  437,  437,    0,    0,    0,    0,    0,    0,    0,
5458     0,    0,    0,    0,    0,  440,    0,    0,    0,    0,
5459     0,    0,    0,    0,  441,  441,    0,    0,    0,    0,
5460   440,    0,    0,    0,    0,    0,    0,  440,  440,    0,
5461   440,  440,    0,    0,  440,  440,  440,  437,    0,    0,
5462     0,    0,    0,    0,    0,    0,    0,    0,  441,    0,
5463     0,    0,  440,    0,  440,    0,  440,    0,    0,  437,
5464     0,    0,    0,  441,    0,    0,    0,    0,    0,    0,
5465   441,  441,    0,  441,  441,    0,    0,  441,  441,  441,
5466     0,    0,    0,    0,  437,  437,    0,    0,    0,    0,
5467     0,   21,    0,    0,    0,  441,    0,  441,    0,  441,
5468     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5469     0,    0,    0,    0,    0,    0,    0,    0,  437,   21,
5470     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5471     0,   21,   21,  437,    0,    0,    0,    0,    0,    0,
5472   437,  437,   21,  437,  437,    0,    0,  437,  437,  437,
5473     0,   21,    0,    0,    0,    0,    0,    0,    0,    0,
5474    21,    0,    0,   19,   21,  437,    0,  437,    0,  437,
5475     0,    0,    0,   21,   21,    0,    0,    0,   21,    0,
5476     0,    0,    0,   21,   21,    0,    0,    0,   21,    0,
5477     0,   19,   21,   21,   21,    0,    0,   21,    0,   21,
5478    21,    0,   21,   19,   19,    0,    0,    0,    0,    0,
5479    21,   21,    0,    0,   19,    0,    0,    0,    0,    0,
5480    21,    0,    0,   19,    0,    0,    0,    0,    0,    0,
5481     0,    0,   19,    0,    0,   20,   19,    0,   21,    0,
5482     0,    0,    0,    0,    0,   19,   19,    0,    0,    0,
5483    19,    0,    0,    0,   21,   19,   19,    0,    0,    0,
5484    19,    0,    0,   20,   19,   19,   19,    0,    0,   19,
5485     0,   19,   19,    0,   19,   20,   20,    0,    0,    0,
5486     0,    0,   19,   19,    0,    0,   20,    0,    0,    0,
5487     0,    0,   19,    0,    0,   20,    0,    0,    0,    0,
5488     0,    0,    0,    0,   20,    0,    0,    7,   20,    0,
5489    19,    0,    0,    0,    0,    0,    0,   20,   20,    0,
5490     0,    0,   20,    0,    0,    0,   19,   20,   20,    0,
5491     0,    0,   20,    0,    0,    7,   20,   20,   20,    0,
5492     0,   20,    0,   20,   20,    0,   20,    7,    7,    0,
5493     0,    0,    0,    0,   20,   20,    0,    0,    7,    0,
5494     0,    0,    0,    0,   20,    0,    0,    7,    0,    0,
5495     0,    0,    0,    0,    0,    0,    7,    0,    0,    8,
5496     7,    0,   20,    0,    0,    0,    0,    0,    0,    7,
5497     7,    0,    0,    0,    7,    0,    0,    0,   20,    7,
5498     7,    0,    0,    0,    0,    0,    0,    8,    7,    7,
5499     7,    0,    0,    7,    0,    7,    7,    0,    7,    8,
5500     8,    0,    0,    0,    0,    0,    7,    7,    0,    0,
5501     8,    0,    0,    0,    0,    0,    7,    0,    0,    8,
5502     0,    0,    0,    0,    0,    0,    0,    0,    8,    0,
5503     0,   50,    8,    0,    7,    0,    0,    0,    0,    0,
5504     0,    8,    8,    0,    0,    0,    8,    0,    0,    0,
5505     7,    8,    8,    0,    0,    0,    0,    0,    0,   50,
5506     8,    8,    8,    0,    0,    8,    0,    8,    8,    0,
5507     8,   50,   50,    0,    0,    0,    0,    0,    8,    8,
5508     0,    0,   50,    0,    0,    0,    0,    0,    8,    0,
5509     0,   50,    0,    0,    0,    0,    0,    0,    0,    0,
5510    50,    0,    0,   89,   50,    0,    8,    0,    0,    0,
5511     0,    0,    0,   50,   50,    0,    0,    0,   50,    0,
5512     0,    0,    8,   50,   50,    0,    0,    0,    0,    0,
5513     0,   89,   50,   50,   50,    0,    0,   50,    0,   50,
5514    50,    0,   50,   89,   89,    0,    0,    0,    0,    0,
5515    50,   50,   89,    0,   89,    0,    0,    0,    0,    0,
5516    50,    0,    0,   89,    0,    0,    0,    0,    0,    0,
5517     0,    0,    0,    0,    0,   46,   89,    0,   50,    0,
5518     0,    0,    0,    0,    0,   89,   89,    0,    0,    0,
5519    89,    0,    0,    0,   50,   89,   89,    0,    0,    0,
5520     0,    0,    0,   46,   89,   89,   89,    0,    0,   89,
5521     0,   89,   89,    0,   89,   46,   46,    0,    0,    0,
5522     0,    0,   89,   89,    0,    0,   46,    0,    0,    0,
5523     0,    0,   89,    0,    0,   46,    0,    0,    0,    0,
5524     0,    0,    0,    0,    0,    0,    0,   47,   46,    0,
5525    89,    0,    0,    0,    0,    0,    0,   46,   46,    0,
5526     0,    0,   46,    0,    0,    0,   89,   46,   46,    0,
5527     0,    0,    0,    0,    0,   47,   46,   46,   46,    0,
5528     0,   46,    0,   46,   46,    0,   46,   47,   47,    0,
5529     0,    0,    0,    0,   46,   46,    0,    0,   47,    0,
5530     0,    0,    0,    0,   46,    0,    0,   47,    0,    0,
5531     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5532    47,    0,   46,    0,    0,    0,    0,    0,    0,   47,
5533    47,    0,    0,    0,   47,    0,    0,    0,   46,   47,
5534    47,    0,    0,    0,    0,    0,    0,   88,   47,   47,
5535    47,    0,    0,   47,    0,   47,   47,    0,   47,   88,
5536    88,    0,    0,    0,    0,    0,   47,   47,   88,    0,
5537    88,    0,    0,    0,    0,    0,   47,    0,    0,   88,
5538     0,    0,    0,    0,    0,    0,    0,    0,  185,    0,
5539     0,    0,   88,    0,   47,    0,    0,  185,    0,    0,
5540     0,   88,   88,    0,    0,    0,   88,    0,  185,  185,
5541    47,   88,   88,    0,    0,    0,    0,    0,    0,  185,
5542    88,   88,   88,    0,    0,   88,    0,   88,   88,    0,
5543    88,  185,    0,    0,    0,    0,    0,    0,   88,   88,
5544   185,  185,    0,    0,    0,    0,    0,    0,   88,  185,
5545   185,  185,    0,  193,  185,  185,  185,  185,    0,  185,
5546     0,    0,  193,    0,    0,    0,   88,  185,  185,    0,
5547     0,    0,    0,  193,  193,    0,    0,    0,  185,    0,
5548     0,    0,   88,  189,  193,    0,    0,    0,    0,    0,
5549     0,    0,  189,    0,    0,  185,  193,    0,    0,    0,
5550     0,    0,    0,  189,  189,  193,  193,    0,    0,    0,
5551     0,  185,    0,    0,  193,  193,  193,    0,  190,  193,
5552   193,  193,  193,    0,  193,    0,  189,  190,    0,    0,
5553     0,    0,  193,  193,    0,  189,  189,    0,  190,  190,
5554     0,    0,    0,  193,  189,  189,  189,    0,  202,  189,
5555   189,  189,  189,    0,  189,    0,    0,  202,    0,    0,
5556   193,  190,  189,  189,    0,    0,    0,    0,  202,  202,
5557   190,  190,    0,  189,    0,    0,  193,    0,    0,  190,
5558   190,  190,    0,  203,  190,  190,  190,  190,    0,  190,
5559   189,  202,  203,    0,    0,    0,    0,  190,  190,    0,
5560   202,  202,    0,  203,  203,    0,  189,    0,  190,  202,
5561   202,  202,    0,  184,  202,  202,  202,  202,    0,  202,
5562     0,    0,  184,    0,    0,  190,  203,  202,  202,    0,
5563     0,    0,    0,  184,  184,  203,  203,    0,  202,    0,
5564     0,  190,    0,    0,  203,  203,  203,    0,    0,  203,
5565   203,  203,  203,    0,  203,  202,  184,    0,    0,    0,
5566     0,    0,  203,  203,    0,  184,  184,    0,    0,    0,
5567     0,  202,    0,  203,  184,  184,  184,    0,    0,  184,
5568   184,  184,  184,    0,  184,    0,   58,    0,    0,    0,
5569   203,    0,  184,  184,    0,    0,    0,    0,   58,   58,
5570     0,    0,    0,  184,    0,    0,  203,   22,    0,   58,
5571     0,    0,    0,    0,    0,    0,    0,    0,   58,    0,
5572   184,    0,    0,    0,    0,    0,   58,    0,    0,    0,
5573     0,   58,    0,    0,    0,    0,  184,    0,   58,   58,
5574    58,   58,    0,    0,    0,   58,    0,   23,    0,   58,
5575    58,   58,    0,    0,    0,    0,    0,    0,   58,   58,
5576    58,   58,    0,    0,   58,    0,   58,   58,    0,   58,
5577     0,   58,    0,    0,    0,    0,    0,   58,   58,    0,
5578    58,   58,    0,    0,    0,   58,    0,   58,    0,    0,
5579    58,   58,    0,    0,    0,    0,    0,    0,   58,   58,
5580    58,   58,    0,    0,   58,   58,   58,   58,    0,   58,
5581    58,   58,    0,    0,    0,    0,    0,   58,   58,    0,
5582     0,   58,    0,    0,    0,    0,    0,   58,    0,    0,
5583    58,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5584     0,    0,    0,   58,    0,   58,    0,    0,    0,    0,
5585     0,    0,   58,   58,    0,    0,    0,   58,    0,    0,
5586     0,    0,   58,   58,    0,    0,    0,    0,    0,    0,
5587     0,   58,   58,   58,    0,    0,   58,    0,   58,   58,
5588     0,   58,    0,    0,    0,    0,    0,    0,    0,   58,
5589    58,    0,    0,    0,    0,    0,    0,    0,    0,   58,
5590     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
5591     0,    0,    0,    0,    0,    0,    0,   58,
5592   };
5593   protected static  short [] yyCheck = {            73,
5594     0,  306,  188,   24,  188,   56,   23,  313,  466,  257,
5595   601,  324,  318,  266,  269,  256,  266,  407,  306,  266,
5596   309,  165,  269,  306,  288,  325,  410,  306,  266,  449,
5597    30,  309,  266,   33,   34,   56,  267,  449,  269,  314,
5598   319,  288,  197,  198,  372,   23,  319,  266,  289,  313,
5599   266,  594,   52,  269,  306,  410,  319,  288,  309,  414,
5600    77,   78,  269,  304,  305,  306,  313,  253,  659,  253,
5601   398,  309,  288,  269,  665,  459,  262,   55,  262,  266,
5602   623,  288,  313,  324,  266,  309,  544,  375,  546,  326,
5603   309,  309,  288,  146,  189,  331,  516,  313,   76,  306,
5604    78,  309,  375,  615,  516,  352,  313,  407,  339,  354,
5605   306,  128,  375,  130,  131,  132,  133,  313,  393,  309,
5606   384,  352,  309,  375,  309,  414,  415,  282,  283,  146,
5607   520,  414,  420,  319,  389,  319,  352,  281,  325,  156,
5608   157,  420,  389,  196,  122,  352,  269,  309,  126,  309,
5609   463,  269,  269,  266,  154,  155,  352,  309,  389,  159,
5610   160,  161,  415,  413,  415,  288,  413,  407,  680,  627,
5611   288,  288,  420,  389,  360,  153,  410,  266,  690,  413,
5612   420,  415,  389,  306,  574,  419,  372,  699,  306,  780,
5613   313,  410,  416,  389,  309,  313,  313,  415,  384,  385,
5614   384,  385,  592,  298,  299,  796,  718,  260,  261,  445,
5615   188,  447,  398,  420,  604,  605,  463,  309,  309,  272,
5616   309,  274,  463,  410,  420,  415,  416,  280,  345,  352,
5617   415,  413,  463,  415,  352,  352,  541,  419,  449,  271,
5618   635,  273,  637,  309,  430,  318,  430,  463,  449,  269,
5619   449,  352,  353,  415,  254,  415,  463,  274,  275,  325,
5620   277,  278,  414,  309,  416,  285,  389,  463,  288,  289,
5621   309,  389,  389,  326,  327,  253,  410,  269,  298,  299,
5622   414,  676,  303,  420,  262,  309,  591,  308,  308,  310,
5623   802,  311,  804,  313,  309,  309,  288,  463,  318,  694,
5624   413,  416,  415,  609,  419,  516,  419,  358,  422,  423,
5625   330,  354,  449,  266,  387,  516,  309,  516,  309,  339,
5626   309,  313,  414,  355,  344,  416,  415,  416,  269,  361,
5627   419,  412,  352,  311,  415,  547,  415,  358,  309,  269,
5628   463,  319,  421,  319,  364,  463,  463,  288,  560,  370,
5629   536,  368,  536,  539,  325,  539,  309,  378,  288,  269,
5630   352,  271,  757,  273,  407,  760,  386,  387,  420,  389,
5631   416,  269,  313,  271,  769,  273,  415,  416,  288,  516,
5632   419,  413,  360,  313,  570,  419,  570,  404,  309,  695,
5633   288,  415,  416,  414,  372,  419,  396,  389,  309,  375,
5634   309,  416,  416,  313,  799,  795,  384,  385,  309,  409,
5635   410,  352,  433,  413,  325,  313,  318,  459,  615,  410,
5636   398,  816,  352,  416,  415,  416,  447,  416,  419,  429,
5637   309,  306,  432,  309,  487,  452,  436,  454,  455,  456,
5638   315,  419,  352,  463,  420,  355,  325,  419,  389,  466,
5639   450,  361,  430,   38,  352,  476,   41,  355,  415,  389,
5640   615,  306,  364,  361,  421,  271,  519,  273,  698,  318,
5641   625,  463,  414,  690,  319,  492,  631,  390,  445,  389,
5642   447,   66,  699,  680,   23,  387,  269,  270,  488,  272,
5643   720,  389,  407,  690,  415,  416,  309,  309,  419,  413,
5644   283,  718,  699,  413,  504,  288,  420,  415,  525,  526,
5645   527,  511,  295,  417,  418,  364,   55,  534,  571,  302,
5646   344,  718,  463,  523,  309,  680,  413,  544,  415,  546,
5647   313,  309,  585,  463,  413,  690,  415,   76,  387,   78,
5648   419,  594,  542,  276,  699,  306,  329,  777,  548,  355,
5649   306,  309,  335,  463,  315,  361,  786,  557,  536,  315,
5650   790,  539,  345,  718,  309,  463,  566,  449,  351,  352,
5651   623,  304,  305,  306,  410,  713,  629,  807,  390,  632,
5652   633,  634,  315,  122,  266,  802,  724,  804,  774,  589,
5653   774,  821,  570,  405,  416,  378,  379,  671,  598,  413,
5654   412,  413,  385,  415,  416,  802,  389,  804,  266,  626,
5655   627,  749,  309,  630,  153,  410,  616,  617,  618,  413,
5656   620,  415,  263,  264,  624,  410,  272,  309,  274,  414,
5657   683,  416,  417,  418,  419,  263,  264,  422,  423,  424,
5658   410,  309,  427,  325,  356,  357,  276,  802,  510,  804,
5659   703,  704,  705,  331,  707,  708,  709,  710,  711,  712,
5660   445,  414,  447,  269,  413,  414,  719,  410,  309,  722,
5661   691,  809,  435,  811,  304,  305,  306,  413,  540,  285,
5662   463,  414,  288,  289,  415,  315,  286,  287,  356,  357,
5663   269,  415,  298,  299,  503,  716,  717,  309,  413,  508,
5664   415,  414,  308,  565,  419,  311,  285,  313,  725,  288,
5665   289,  309,  318,  787,  405,  356,  357,  770,  410,  298,
5666   299,  424,  390,  532,  330,  587,  266,  306,  426,  308,
5667   289,  290,  311,  339,  313,  300,  301,  405,  427,  318,
5668   740,  419,  420,  421,  412,  413,  352,  415,  416,  390,
5669   338,  330,  463,  573,  563,  564,  410,  410,  364,  437,
5670   339,  439,  762,  441,  405,  782,  766,  767,  410,  309,
5671   413,  412,  413,  352,  415,  416,  328,  328,  390,  779,
5672   386,  387,  602,  389,  414,  325,  415,  413,  608,  304,
5673   305,  306,  390,  405,  614,  415,  774,  797,  413,  415,
5674   412,  413,  413,  415,  416,  306,  325,  386,  387,  413,
5675   389,  413,  415,  257,  412,  413,  260,  415,  416,  304,
5676   305,  306,  306,  823,  824,  269,  270,  271,  272,  273,
5677   274,  415,  276,  277,  278,  279,  413,  281,  282,  283,
5678   284,  285,  286,  287,  288,  289,  290,  291,  292,  293,
5679   413,  295,  344,  297,  298,  299,  300,  463,  302,  306,
5680   304,  305,  306,  339,  308,  413,  413,  311,  308,  313,
5681   314,  315,  306,  317,  318,  319,  320,  410,  322,  306,
5682   324,  419,  415,  416,  463,  329,  330,  410,  421,  306,
5683   266,  335,  195,  337,  266,  339,  340,  410,  342,  343,
5684   344,  345,  285,  386,  348,  349,  350,  351,  352,  419,
5685   330,  355,  410,  325,  358,  359,  360,  361,  413,  363,
5686   364,  365,  366,  367,  368,  413,  413,  371,  410,  373,
5687   475,  375,  376,  377,  378,  379,  415,  415,  269,  410,
5688   415,  385,  386,  387,  388,  389,  415,  391,  261,  393,
5689   394,  413,  414,  415,  285,  376,  419,  288,  289,  419,
5690   404,  382,  413,  414,  415,  419,  410,  298,  299,  419,
5691   414,  419,  261,  417,  418,  306,  420,  308,  419,  276,
5692   311,  419,  313,  413,  414,  415,  257,  318,  291,  292,
5693   293,  294,  295,  296,  297,  419,  306,  306,  269,  330,
5694   271,  422,  273,  413,  306,  449,  387,  451,  339,  453,
5695   306,  455,  285,  457,  285,  459,  285,  288,  289,  463,
5696   285,  352,  410,  444,  364,  298,  297,  298,  299,  298,
5697   375,  319,  388,  298,  266,  308,  394,  308,  387,  308,
5698   311,  324,  313,  308,  306,  306,  317,  318,  319,  306,
5699   318,  394,  413,  474,  306,  386,  387,  330,  389,  330,
5700   324,  330,  306,  319,  324,  330,  339,  375,  339,  340,
5701   339,  344,  306,  344,  339,  344,  324,  414,  349,  350,
5702   309,  352,  309,  309,  355,  413,  413,  358,  359,  360,
5703   361,  413,  363,  364,  365,  366,  257,  368,  413,  413,
5704   419,  413,  309,  309,  375,  376,  377,  309,  269,  413,
5705   271,  303,  273,  386,    8,  386,  387,  386,  389,   15,
5706    25,  386,   78,  111,  285,  122,  302,  288,  289,  274,
5707   107,  275,  463,  404,  516,  378,  297,  298,  299,  158,
5708   626,  476,  422,  309,  374,  370,  588,  308,  447,  420,
5709   311,  717,  313,  627,  716,  765,  317,  318,  319,  429,
5710   430,  431,  432,  433,  434,  405,  408,  634,  680,  330,
5711   727,  770,  534,  813,  544,  514,  393,  521,  339,  340,
5712   284,  257,  285,  344,  279,   -1,  288,   -1,  349,  350,
5713    -1,  352,  463,  269,  355,   -1,   -1,  358,  359,  360,
5714   361,   -1,  363,  364,  365,  366,   -1,  368,   -1,  285,
5715    -1,   -1,  288,  289,  375,  376,  377,   -1,   -1,   -1,
5716    -1,  297,  298,  299,   -1,  386,  387,   -1,  389,   -1,
5717   306,   -1,  308,   -1,   -1,  311,   -1,  313,   -1,   -1,
5718    -1,  317,  318,  404,  410,   -1,   -1,   -1,  414,   -1,
5719   416,  417,  418,  419,  330,   -1,  422,  423,  424,  420,
5720    -1,  427,   -1,  339,  340,  257,   -1,   -1,  344,   -1,
5721    -1,   -1,   -1,  349,  350,   -1,  352,  269,   -1,  445,
5722    -1,  447,  358,  359,  360,   -1,   -1,  363,  364,  365,
5723   366,   -1,  368,  285,   -1,   -1,  288,  289,   -1,   -1,
5724   376,  377,  463,   -1,   -1,  297,  298,  299,   -1,   -1,
5725   386,  387,   -1,  389,  306,   -1,  308,   -1,   -1,  311,
5726    -1,  313,   -1,   -1,   -1,  317,  318,   -1,  404,   -1,
5727    -1,   -1,   -1,   -1,   -1,  417,  418,  419,  330,   -1,
5728   422,  423,  424,   -1,  420,  427,   -1,  339,  340,  257,
5729    -1,   -1,  344,   -1,   -1,   -1,   -1,  349,  350,   -1,
5730   352,  269,   -1,  445,   -1,  447,  358,  359,  360,   -1,
5731    -1,  363,  364,  365,  366,   -1,  368,  285,   -1,   -1,
5732   288,  289,   -1,   -1,  376,  377,   -1,  463,   -1,  297,
5733   298,  299,   -1,   -1,  386,  387,   -1,  389,  306,   -1,
5734   308,   -1,   -1,  311,   -1,  313,   -1,   -1,   -1,  317,
5735   318,   -1,  404,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5736    -1,   -1,  330,   -1,   -1,   -1,   -1,   -1,  420,   -1,
5737    -1,  339,  340,  257,   -1,   -1,  344,   -1,   -1,   -1,
5738    -1,  349,  350,   -1,  352,  269,   -1,   -1,   -1,   -1,
5739   358,  359,  360,   -1,   -1,  363,  364,  365,  366,   -1,
5740   368,  285,   -1,   -1,  288,  289,   -1,   -1,  376,  377,
5741    -1,  463,   -1,  297,  298,  299,   -1,   -1,  386,  387,
5742    -1,  389,  306,   -1,  308,   -1,   -1,  311,   -1,  313,
5743    -1,   -1,   -1,  317,  318,   -1,  404,   -1,   -1,   -1,
5744    -1,   -1,   -1,   -1,   -1,   -1,  330,   -1,   -1,   -1,
5745    -1,   -1,  420,   -1,   -1,  339,  340,  257,   -1,   -1,
5746   344,   -1,   -1,   -1,   -1,  349,  350,   -1,  352,  269,
5747    -1,   -1,   -1,   -1,  358,  359,  360,   -1,   -1,  363,
5748   364,  365,  366,   -1,  368,  285,   -1,   -1,  288,  289,
5749    -1,   -1,  376,  377,   -1,  463,   -1,  297,  298,  299,
5750    -1,   -1,  386,  387,   -1,  389,  306,   -1,  308,   -1,
5751    -1,  311,   -1,  313,   -1,   -1,   -1,  317,  318,   -1,
5752   404,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5753   330,   -1,   -1,   -1,   -1,   -1,  420,   -1,   -1,  339,
5754   340,  257,   -1,   -1,  344,   -1,   -1,   -1,   -1,  349,
5755   350,   -1,  352,  269,   -1,   -1,   -1,   -1,  358,  359,
5756   360,   -1,   -1,  363,  364,  365,  366,   -1,  368,  285,
5757    -1,   -1,  288,  289,   -1,   -1,  376,  377,   -1,  463,
5758    -1,  297,  298,  299,   -1,   -1,  386,  387,   -1,  389,
5759   306,   -1,  308,   -1,   -1,  311,   -1,  313,   -1,   -1,
5760    -1,  317,  318,   -1,  404,   -1,   -1,   -1,   -1,   -1,
5761    -1,   -1,   -1,   -1,  330,   -1,   -1,   -1,   -1,   -1,
5762   420,   -1,   -1,  339,  340,  257,   -1,   -1,  344,   -1,
5763    -1,   -1,   -1,  349,  350,   -1,  352,  269,   -1,   -1,
5764    -1,   -1,  358,  359,  360,   -1,   -1,  363,  364,  365,
5765   366,   -1,  368,  285,   -1,   -1,  288,  289,   -1,   -1,
5766   376,  377,   -1,  463,   -1,  297,  298,  299,   -1,   -1,
5767   386,  387,   -1,  389,  306,   -1,  308,   -1,   -1,  311,
5768    -1,  313,   -1,   -1,   -1,  317,  318,   -1,  404,   -1,
5769    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  330,   -1,
5770    -1,   -1,   -1,   -1,  420,   -1,   -1,  339,  340,   -1,
5771    -1,   -1,  344,   -1,   -1,   -1,   -1,  349,  350,   -1,
5772   352,   -1,   -1,   -1,   -1,   -1,  358,  359,  360,   -1,
5773    -1,  363,  364,  365,  366,   -1,  368,   -1,   -1,   -1,
5774    -1,   -1,   -1,   -1,  376,  377,   -1,  463,   -1,   -1,
5775    -1,   -1,  260,   -1,  386,  387,   -1,  389,   -1,   -1,
5776    -1,  269,  270,   -1,  272,   -1,  274,   -1,   -1,  277,
5777   278,  279,  404,  281,  282,  283,  284,   -1,  286,  287,
5778   288,  289,  290,  291,  292,  293,   -1,  295,  420,   -1,
5779    -1,  299,  300,   -1,  302,   -1,   -1,   -1,  306,   -1,
5780    -1,   -1,   -1,   -1,   -1,  313,  314,   -1,   -1,   -1,
5781    -1,   -1,  320,   -1,  322,   -1,  324,   -1,   -1,   -1,
5782   309,  329,  269,  270,   -1,  272,   -1,  335,   -1,  337,
5783    -1,  463,   -1,   -1,  342,  343,  283,  345,   -1,   -1,
5784   348,  288,   -1,  351,  352,   -1,   -1,   -1,  295,   -1,
5785    -1,   -1,   -1,   -1,   -1,  302,   -1,   -1,   -1,  367,
5786    -1,   -1,   -1,  371,   -1,  373,  313,  356,  357,   -1,
5787   378,  379,   -1,   -1,   -1,   -1,   -1,  385,   -1,   -1,
5788   388,  389,  329,  391,   -1,  393,  394,   -1,  335,   -1,
5789    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5790    -1,  390,  410,   -1,  351,  352,  414,   -1,   -1,  417,
5791   418,   -1,   -1,   -1,   -1,   -1,  405,   -1,   -1,   -1,
5792    -1,   -1,   -1,  412,  413,   -1,  415,  416,   -1,   -1,
5793    -1,  378,  379,   -1,  309,   -1,   -1,   -1,  385,   -1,
5794    -1,  449,  389,  451,  260,  453,   -1,  455,   -1,  457,
5795    -1,  459,   -1,  269,  270,  463,  272,   -1,  274,   -1,
5796    -1,  277,  278,  279,   -1,  281,  282,  283,  284,   -1,
5797   286,  287,  288,  289,  290,  291,  292,  293,   -1,  295,
5798    -1,  356,  357,  299,  300,   -1,  302,   -1,   -1,   -1,
5799   306,   -1,   -1,   -1,   -1,   -1,   -1,  313,  314,   -1,
5800    -1,   -1,   -1,   -1,  320,   -1,  322,   -1,  324,   -1,
5801    -1,   -1,   -1,  329,   -1,  390,  463,   -1,   -1,  335,
5802    -1,  337,   -1,   -1,   -1,   -1,  342,  343,   -1,  345,
5803   405,   -1,  348,   -1,   -1,  351,  352,  412,  413,   -1,
5804   415,  416,   -1,   -1,  297,   -1,   -1,   -1,   -1,   -1,
5805    -1,  367,   -1,  306,   -1,  371,   -1,  373,   -1,   -1,
5806    -1,   -1,  378,  379,  317,  318,   -1,   -1,   -1,  385,
5807    -1,   -1,  388,  389,   -1,  391,   -1,  393,  394,   -1,
5808    -1,   -1,   -1,   -1,   -1,   -1,   -1,  340,   -1,   -1,
5809    -1,   -1,   -1,   -1,  410,   -1,  349,  350,  414,   -1,
5810    -1,  417,  418,   -1,   -1,  358,  359,  360,   -1,   -1,
5811   363,  364,  365,  366,   -1,  368,   -1,   -1,   -1,   -1,
5812    -1,   -1,   -1,  376,  377,   -1,   -1,   -1,   -1,   -1,
5813    -1,   -1,   -1,  449,  387,  451,  260,  453,   -1,  455,
5814    -1,  457,   -1,  459,   -1,  269,  270,  463,  272,   -1,
5815   274,  404,   -1,  277,  278,  279,   -1,  281,  282,  283,
5816   284,   -1,  286,  287,  288,  289,  290,  291,  292,  293,
5817    -1,  295,   -1,   -1,   -1,  299,  300,   -1,  302,   -1,
5818    -1,  285,  306,   -1,   -1,  289,   -1,   -1,   -1,  313,
5819   314,   -1,   -1,   -1,  298,  299,  320,   -1,  322,   -1,
5820   324,   -1,   -1,   -1,  308,  329,   -1,  311,   -1,   -1,
5821    -1,  335,   -1,  337,  318,   -1,   -1,   -1,  342,  343,
5822    -1,  345,   -1,   -1,  348,   -1,  330,  351,  352,   -1,
5823    -1,   -1,   -1,   -1,   -1,  339,  297,   -1,   -1,   -1,
5824    -1,   -1,   -1,  367,   -1,  306,   -1,  371,   -1,  373,
5825    -1,   -1,   -1,   -1,  378,  379,  317,  318,   -1,   -1,
5826   364,  385,   -1,   -1,  388,  389,   -1,  391,   -1,  393,
5827   394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  340,
5828    -1,   -1,  386,  387,   -1,   -1,  410,   -1,  349,  350,
5829   414,   -1,   -1,  417,  418,   -1,   -1,  358,  359,  360,
5830    -1,   -1,  363,  364,  365,  366,   -1,  368,   -1,   -1,
5831    -1,   -1,   -1,   -1,   -1,  376,  377,   -1,   -1,   -1,
5832    -1,   -1,   -1,   -1,   -1,  449,  387,  451,  260,  453,
5833    -1,  455,   -1,  457,   -1,  459,   -1,  269,  270,  463,
5834   272,   -1,  274,  404,   -1,  277,  278,  279,   -1,  281,
5835   282,  283,  284,   -1,  286,  287,  288,  289,  290,  291,
5836   292,  293,   -1,  295,   -1,   -1,   -1,  299,  300,   -1,
5837   302,   -1,   -1,  285,  306,   -1,   -1,  289,   -1,   -1,
5838    -1,  313,  314,   -1,   -1,   -1,  298,  299,  320,   -1,
5839   322,   -1,  324,   -1,   -1,   -1,  308,  329,   -1,  311,
5840    -1,   -1,   -1,  335,   -1,  337,  318,   -1,   -1,   -1,
5841   342,  343,   -1,  345,   -1,   -1,  348,   -1,  330,  351,
5842   352,   -1,   -1,   -1,   -1,   -1,   -1,  339,  297,   -1,
5843    -1,   -1,   -1,   -1,   -1,  367,   -1,   -1,   -1,  371,
5844    -1,  373,   -1,   -1,   -1,   -1,  378,  379,  317,   -1,
5845    -1,   -1,   -1,  385,   -1,   -1,  388,  389,   -1,  391,
5846    -1,  393,  394,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5847    -1,  340,   -1,   -1,  386,  387,   -1,   -1,  410,   -1,
5848   349,  350,  414,   -1,   -1,  417,  418,   -1,   -1,  358,
5849   359,  360,   -1,   -1,  363,   -1,  365,  366,   -1,  368,
5850    -1,   -1,   -1,   -1,   -1,   -1,   -1,  376,  377,   -1,
5851    -1,   -1,   -1,   -1,   -1,   -1,   -1,  449,   -1,  451,
5852   260,  453,   -1,  455,   -1,  457,   -1,  459,   -1,  269,
5853   270,  463,  272,   -1,  274,  404,   -1,  277,  278,  279,
5854    -1,  281,  282,  283,  284,   -1,  286,  287,  288,  289,
5855   290,  291,  292,  293,   -1,  295,   -1,   -1,   -1,  299,
5856   300,   -1,  302,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5857    -1,   -1,   -1,  313,  314,   -1,   -1,   -1,   -1,   -1,
5858   320,   -1,  322,   -1,  324,   -1,   -1,   -1,   -1,  329,
5859    -1,   -1,   -1,   -1,   -1,  335,   -1,  337,   -1,   -1,
5860    -1,   -1,  342,  343,   -1,  345,   -1,   -1,  348,   -1,
5861    -1,  351,  352,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5862    -1,   -1,   -1,   -1,   -1,   -1,   -1,  367,   -1,   -1,
5863    -1,  371,   -1,  373,   -1,   -1,   -1,   -1,  378,  379,
5864    -1,   -1,   -1,   -1,   -1,  385,   -1,   -1,  388,  389,
5865    -1,  391,   -1,  393,  394,   -1,   -1,   -1,   -1,   -1,
5866    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5867   410,   -1,   -1,  261,   -1,   -1,   -1,  417,  418,   -1,
5868    -1,  269,  270,  271,  272,   -1,  274,   -1,   -1,  277,
5869   278,  279,   -1,  281,  282,  283,  284,   -1,  286,  287,
5870   288,   -1,  290,  291,  292,  293,   -1,  295,   -1,  449,
5871    -1,  451,  300,  453,  302,  455,   -1,  457,   -1,  459,
5872    -1,   -1,   -1,  463,   -1,  313,  314,   -1,   -1,   -1,
5873    -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5874    -1,  329,   -1,   -1,   -1,   -1,   -1,  335,   -1,  337,
5875    -1,   -1,   -1,   -1,  342,  343,   -1,  345,   -1,  347,
5876   348,   -1,   -1,  351,  352,   -1,   -1,   -1,   -1,   -1,
5877    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5878    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5879   378,  379,   -1,   -1,   -1,   -1,   -1,  385,   -1,   -1,
5880    -1,  389,   -1,   -1,   -1,  393,   -1,  395,   -1,   -1,
5881    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5882    -1,   -1,  410,   -1,   -1,  261,   -1,   -1,   -1,  417,
5883   418,   -1,   -1,  269,  270,   -1,  272,   -1,  274,   -1,
5884    -1,  277,  278,  279,   -1,  281,  282,  283,  284,   -1,
5885   286,  287,  288,   -1,  290,  291,  292,  293,   -1,  295,
5886    -1,  449,   -1,  451,  300,  453,  302,  455,   -1,  457,
5887    -1,  459,   -1,   -1,   -1,  463,   -1,  313,  314,   -1,
5888    -1,   -1,   -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
5889    -1,   -1,   -1,  329,   -1,   -1,   -1,   -1,   -1,  335,
5890    -1,  337,   -1,   -1,   -1,   -1,  342,  343,   -1,  345,
5891    -1,  347,  348,   -1,   -1,  351,  352,   -1,   -1,   -1,
5892    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5893    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5894    -1,   -1,  378,  379,   -1,   -1,   -1,   -1,   -1,  385,
5895    -1,   -1,   -1,  389,   -1,   -1,   -1,  393,   -1,  395,
5896    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5897    -1,   -1,   -1,   -1,  410,   -1,   -1,   -1,   -1,   -1,
5898    -1,  417,  418,   -1,   -1,  269,  270,   -1,  272,   -1,
5899   274,   -1,   -1,  277,  278,  279,   -1,  281,  282,  283,
5900   284,   -1,  286,  287,  288,   -1,  290,  291,  292,  293,
5901    -1,  295,   -1,  449,   -1,  451,  300,  453,  302,  455,
5902    -1,  457,   -1,  459,   -1,   -1,   -1,  463,   -1,  313,
5903   314,   -1,   -1,   -1,   -1,   -1,  320,   -1,   -1,   -1,
5904    -1,   -1,   -1,   -1,   -1,  329,   -1,   -1,   -1,   -1,
5905    -1,  335,   -1,  337,   -1,   -1,   -1,   -1,  342,  343,
5906    -1,  345,   -1,  347,  348,   -1,   -1,  351,  352,   -1,
5907    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5908    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5909    -1,   -1,   -1,   -1,  378,  379,   -1,   -1,   -1,   -1,
5910    -1,  385,   -1,   -1,   -1,  389,   -1,   -1,   -1,  393,
5911    -1,  395,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5912    -1,   -1,   -1,   -1,   -1,   -1,  410,  411,  412,   -1,
5913    -1,   -1,   -1,  417,  418,   -1,   -1,  269,  270,   -1,
5914   272,   -1,  274,   -1,   -1,  277,  278,  279,   -1,  281,
5915   282,  283,  284,   -1,  286,  287,  288,   -1,  290,  291,
5916   292,  293,   -1,  295,   -1,  449,   -1,  451,  300,  453,
5917   302,  455,   -1,  457,   -1,  459,   -1,   -1,   -1,  463,
5918    -1,  313,  314,   -1,   -1,   -1,   -1,   -1,  320,   -1,
5919    -1,   -1,   -1,   -1,   -1,   -1,   -1,  329,   -1,   -1,
5920    -1,   -1,   -1,  335,   -1,  337,   -1,   -1,   -1,   -1,
5921   342,  343,   -1,  345,   -1,  347,  348,   -1,   -1,  351,
5922   352,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5923    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5924    -1,   -1,   -1,   -1,   -1,   -1,  378,  379,   -1,   -1,
5925    -1,   -1,   -1,  385,   -1,   -1,   -1,  389,   -1,   -1,
5926    -1,  393,   -1,  395,   -1,   -1,   -1,   -1,   -1,   -1,
5927    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  410,  411,
5928    -1,   -1,   -1,   -1,   -1,  417,  418,   -1,   -1,  269,
5929   270,   -1,  272,   -1,  274,   -1,   -1,  277,  278,  279,
5930    -1,  281,  282,  283,  284,   -1,  286,  287,  288,   -1,
5931   290,  291,  292,  293,   -1,  295,   -1,  449,   -1,  451,
5932   300,  453,  302,  455,   -1,  457,   -1,  459,   -1,   -1,
5933    -1,  463,   -1,  313,  314,   -1,   -1,   -1,   -1,   -1,
5934   320,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  329,
5935    -1,   -1,   -1,   -1,   -1,  335,   -1,  337,   -1,   -1,
5936    -1,   -1,  342,  343,   -1,  345,   -1,  347,  348,   -1,
5937    -1,  351,  352,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5938    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5939    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  378,  379,
5940    -1,   -1,   -1,   -1,   -1,  385,   -1,   -1,   -1,  389,
5941    -1,   -1,   -1,  393,   -1,  395,   -1,   -1,   -1,   -1,
5942    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5943   410,   -1,   -1,   -1,   -1,   -1,  257,  417,  418,   -1,
5944    -1,  269,  270,   -1,  272,   -1,  274,   -1,   -1,  277,
5945   278,  279,   -1,  281,  282,  283,  284,   -1,  286,  287,
5946   288,   -1,  290,  291,  292,  293,   -1,  295,   -1,  449,
5947    -1,  451,  300,  453,  302,  455,  297,  457,   -1,  459,
5948    -1,   -1,   -1,  463,   -1,  313,  314,   -1,   -1,   -1,
5949    -1,   -1,  320,   -1,   -1,   -1,  317,   -1,   -1,   -1,
5950    -1,  329,   -1,   -1,   -1,   -1,   -1,  335,   -1,  337,
5951    -1,   -1,   -1,   -1,  342,  343,   -1,  345,   -1,  340,
5952   348,   -1,   -1,  351,  352,   -1,   -1,   -1,  349,  350,
5953    -1,   -1,   -1,   -1,   -1,   -1,   -1,  358,  359,  360,
5954    -1,   -1,  363,   -1,  365,  366,   -1,  368,   -1,   -1,
5955   378,  379,   -1,   -1,   -1,  376,  377,  385,   -1,   -1,
5956    -1,  389,   -1,   -1,   -1,  393,   -1,   -1,   -1,   -1,
5957    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
5958    -1,   -1,  410,  404,   -1,   -1,   -1,   -1,   -1,  417,
5959   418,   -1,   -1,  269,  270,   -1,  272,   -1,  274,   -1,
5960    -1,  277,  278,  279,   -1,  281,  282,  283,  284,   -1,
5961   286,  287,  288,   -1,  290,  291,  292,  293,   -1,  295,
5962    -1,  449,   -1,  451,  300,  453,  302,  455,   -1,  457,
5963    -1,  459,   -1,   -1,   -1,  463,   -1,  313,  314,   -1,
5964    -1,   -1,   -1,   -1,  320,  257,   -1,   -1,   -1,   -1,
5965    -1,   -1,   -1,  329,   -1,   -1,   -1,   -1,   -1,  335,
5966    -1,  337,   -1,   -1,   -1,   -1,  342,  343,   -1,  345,
5967    -1,   -1,  348,  285,   -1,  351,  352,   -1,   -1,   -1,
5968    -1,   -1,   -1,   -1,   -1,  297,  298,   -1,   -1,   -1,
5969    -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,   -1,   -1,
5970    -1,   -1,  378,  379,   -1,  317,   -1,   -1,   -1,  385,
5971    -1,   -1,   -1,  389,   -1,   -1,   -1,  393,  330,   -1,
5972    -1,   -1,   -1,   -1,   -1,   -1,   -1,  339,  340,   -1,
5973    -1,   -1,  344,   -1,  410,   -1,   -1,  349,  350,   -1,
5974    -1,   -1,   -1,   -1,   -1,   -1,  358,  359,  360,   -1,
5975    -1,  363,   -1,  365,  366,   -1,  368,   -1,   -1,   -1,
5976    -1,   -1,   -1,   -1,  376,  377,  269,   -1,   -1,   -1,
5977    -1,   -1,   -1,  449,  386,  451,   -1,  453,   -1,  455,
5978    -1,  457,  285,  459,   -1,  288,  289,  463,   -1,   -1,
5979    -1,   -1,  404,   -1,  297,  298,  299,   -1,   -1,   -1,
5980    -1,   -1,   -1,  306,   -1,  308,   -1,   -1,  311,   -1,
5981   313,   -1,   -1,   -1,  317,  318,   -1,   -1,   -1,   -1,
5982    -1,   -1,  325,   -1,   -1,  328,   -1,  330,   -1,   -1,
5983    -1,   -1,   -1,   -1,   -1,   -1,  339,  340,   -1,   -1,
5984    -1,   -1,   -1,   -1,   -1,   -1,  349,  350,  269,  352,
5985    -1,   -1,   -1,   -1,   -1,  358,  359,  360,   -1,   -1,
5986   363,  364,  365,  366,  285,  368,   -1,  288,  289,   -1,
5987    -1,   -1,   -1,  376,  377,   -1,  297,  298,  299,   -1,
5988    -1,   -1,   -1,  386,  387,  306,  389,  308,   -1,   -1,
5989   311,   -1,  313,   -1,   -1,   -1,  317,  318,   -1,   -1,
5990    -1,  404,   -1,   -1,  325,   -1,   -1,   -1,   -1,  330,
5991    -1,   -1,   -1,   -1,   -1,   -1,   -1,  420,  339,  340,
5992    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  349,  350,
5993    -1,  352,   -1,  269,   -1,   -1,   -1,  358,  359,  360,
5994    -1,   -1,  363,  364,  365,  366,   -1,  368,   -1,  285,
5995    -1,   -1,  288,  289,   -1,  376,  377,   -1,   -1,   -1,
5996   463,  297,  298,  299,   -1,  386,  387,   -1,  389,   -1,
5997   306,   -1,  308,   -1,   -1,  311,   -1,  313,   -1,   -1,
5998    -1,  317,  318,  404,   -1,   -1,   -1,   -1,   -1,  325,
5999    -1,   -1,   -1,   -1,  330,   -1,   -1,   -1,   -1,  420,
6000    -1,   -1,   -1,  339,  340,   -1,   -1,   -1,   -1,   -1,
6001    -1,   -1,   -1,  349,  350,  269,  352,   -1,   -1,   -1,
6002    -1,   -1,  358,  359,  360,   -1,   -1,  363,  364,  365,
6003   366,  285,  368,   -1,  288,  289,   -1,   -1,   -1,   -1,
6004   376,  377,  463,  297,  298,  299,   -1,   -1,   -1,   -1,
6005   386,  387,  306,  389,  308,   -1,   -1,  311,   -1,  313,
6006    -1,   -1,   -1,  317,  318,   -1,   -1,   -1,  404,   -1,
6007    -1,   -1,   -1,   -1,   -1,   -1,  330,   -1,   -1,   -1,
6008    -1,   -1,   -1,   -1,  420,  339,  340,   -1,   -1,   -1,
6009    -1,   -1,   -1,   -1,   -1,  349,  350,   -1,  352,   -1,
6010   269,   -1,   -1,   -1,  358,  359,  360,   -1,   -1,  363,
6011   364,  365,  366,   -1,  368,   -1,  285,   -1,   -1,  288,
6012   289,   -1,  376,  377,   -1,   -1,   -1,  463,  297,  298,
6013   299,   -1,  386,  387,   -1,  389,   -1,  306,   -1,  308,
6014    -1,   -1,  311,   -1,  313,   -1,   -1,   -1,  317,  318,
6015   404,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6016    -1,  330,   -1,   -1,   -1,   -1,  420,   -1,   -1,   -1,
6017   339,  340,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6018   349,  350,  269,  352,   -1,   -1,   -1,   -1,   -1,  358,
6019   359,  360,   -1,   -1,  363,  364,  365,  366,  285,  368,
6020    -1,  288,  289,   -1,   -1,   -1,   -1,  376,  377,  463,
6021   297,  298,  299,   -1,   -1,   -1,   -1,  386,  387,  306,
6022   389,  308,  309,   -1,  311,   -1,  313,   -1,   -1,   -1,
6023   317,  318,   -1,   -1,   -1,  404,   -1,   -1,   -1,   -1,
6024    -1,   -1,   -1,  330,   -1,   -1,   -1,   -1,   -1,   -1,
6025    -1,  420,  339,  340,   -1,   -1,   -1,   -1,   -1,   -1,
6026    -1,   -1,  349,  350,   -1,  352,   -1,   -1,   -1,   -1,
6027    -1,  358,  359,  360,   -1,   -1,  363,   -1,  365,  366,
6028    -1,  368,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  376,
6029   377,   -1,  269,   -1,  463,   -1,   -1,   -1,   -1,  386,
6030   387,   -1,  389,   -1,   -1,   -1,   -1,   -1,  285,   -1,
6031    -1,  288,  289,   -1,   -1,   -1,   -1,  404,   -1,   -1,
6032   297,  298,  299,   -1,   -1,   -1,   -1,   -1,  415,  306,
6033    -1,  308,  309,   -1,  311,   -1,  313,   -1,   -1,   -1,
6034   317,  318,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6035    -1,   -1,   -1,  330,   -1,   -1,   -1,   -1,   -1,   -1,
6036    -1,   -1,  339,  340,   -1,   -1,   -1,   -1,   -1,   -1,
6037    -1,   -1,  349,  350,  269,  352,  463,   -1,   -1,   -1,
6038    -1,  358,  359,  360,   -1,   -1,  363,   -1,  365,  366,
6039   285,  368,   -1,  288,  289,   -1,   -1,   -1,   -1,  376,
6040   377,   -1,  297,  298,  299,   -1,   -1,   -1,   -1,  386,
6041   387,  306,  389,  308,   -1,   -1,  311,   -1,  313,   -1,
6042    -1,   -1,  317,  318,   -1,   -1,   -1,  404,   -1,   -1,
6043    -1,   -1,   -1,   -1,   -1,  330,   -1,   -1,  415,   -1,
6044    -1,   -1,   -1,   -1,  339,  340,   -1,   -1,   -1,   -1,
6045    -1,   -1,   -1,   -1,  349,  350,   -1,  352,   -1,  269,
6046    -1,   -1,   -1,  358,  359,  360,   -1,   -1,  363,  364,
6047   365,  366,   -1,  368,   -1,  285,   -1,   -1,  288,  289,
6048    -1,  376,  377,   -1,   -1,   -1,  463,  297,  298,  299,
6049    -1,  386,  387,   -1,  389,   -1,  306,   -1,  308,   -1,
6050    -1,  311,   -1,  313,   -1,   -1,   -1,  317,  318,  404,
6051    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6052   330,   -1,   -1,   -1,   -1,  420,   -1,   -1,   -1,  339,
6053   340,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  349,
6054   350,  269,  352,   -1,   -1,   -1,   -1,   -1,  358,  359,
6055   360,   -1,   -1,  363,  364,  365,  366,  285,  368,   -1,
6056   288,  289,   -1,   -1,   -1,   -1,  376,  377,  463,  297,
6057   298,  299,   -1,   -1,   -1,   -1,  386,  387,  306,  389,
6058   308,   -1,   -1,  311,   -1,  313,   -1,   -1,   -1,  317,
6059   318,   -1,   -1,   -1,  404,   -1,   -1,   -1,   -1,   -1,
6060    -1,   -1,  330,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6061   420,  339,  340,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6062    -1,  349,  350,   -1,  352,   -1,  269,   -1,   -1,   -1,
6063   358,  359,  360,   -1,   -1,  363,  364,  365,  366,   -1,
6064   368,   -1,  285,   -1,   -1,  288,  289,   -1,  376,  377,
6065    -1,   -1,   -1,  463,  297,  298,  299,   -1,  386,  387,
6066    -1,  389,   -1,  306,   -1,  308,   -1,   -1,  311,   -1,
6067   313,   -1,   -1,   -1,  317,  318,  404,   -1,   -1,   -1,
6068    -1,   -1,   -1,   -1,   -1,   -1,   -1,  330,   -1,   -1,
6069    -1,   -1,  420,   -1,   -1,   -1,  339,  340,   -1,   -1,
6070    -1,   -1,   -1,   -1,   -1,   -1,  349,  350,  269,  352,
6071    -1,   -1,   -1,   -1,   -1,  358,  359,  360,   -1,   -1,
6072   363,  364,  365,  366,  285,  368,   -1,  288,  289,   -1,
6073    -1,   -1,   -1,  376,  377,  463,  297,  298,  299,   -1,
6074    -1,   -1,   -1,  386,  387,  306,  389,  308,   -1,   -1,
6075   311,   -1,  313,   -1,   -1,   -1,  317,  318,   -1,   -1,
6076    -1,  404,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  330,
6077    -1,   -1,   -1,   -1,   -1,   -1,   -1,  420,  339,  340,
6078    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  349,  350,
6079    -1,  352,   -1,  269,   -1,   -1,   -1,  358,  359,  360,
6080    -1,   -1,  363,  364,  365,  366,   -1,  368,   -1,  285,
6081    -1,   -1,  288,  289,   -1,  376,  377,   -1,   -1,   -1,
6082   463,  297,  298,  299,   -1,  386,  387,   -1,  389,   -1,
6083   306,   -1,  308,   -1,   -1,  311,   -1,  313,   -1,   -1,
6084    -1,  317,  318,  404,   -1,   -1,   -1,   -1,   -1,   -1,
6085    -1,   -1,   -1,   -1,  330,   -1,   -1,   -1,   -1,  420,
6086    -1,   -1,   -1,  339,  340,   -1,   -1,   -1,   -1,   -1,
6087    -1,   -1,   -1,  349,  350,  269,  352,   -1,   -1,   -1,
6088    -1,   -1,  358,  359,  360,   -1,   -1,  363,  364,  365,
6089   366,  285,  368,   -1,  288,  289,   -1,   -1,   -1,   -1,
6090   376,  377,  463,  297,  298,  299,   -1,   -1,   -1,   -1,
6091   386,  387,  306,  389,  308,   -1,   -1,  311,   -1,  313,
6092    -1,   -1,   -1,  317,  318,   -1,   -1,   -1,  404,   -1,
6093    -1,   -1,   -1,   -1,   -1,   -1,  330,   -1,   -1,   -1,
6094    -1,   -1,   -1,   -1,  420,  339,  340,   -1,   -1,   -1,
6095    -1,   -1,   -1,   -1,   -1,  349,  350,   -1,  352,   -1,
6096   269,   -1,   -1,   -1,  358,  359,  360,   -1,   -1,  363,
6097   364,  365,  366,   -1,  368,   -1,  285,   -1,   -1,  288,
6098   289,   -1,  376,  377,   -1,   -1,   -1,  463,  297,  298,
6099   299,   -1,  386,  387,   -1,  389,   -1,  306,   -1,  308,
6100    -1,   -1,  311,   -1,  313,   -1,   -1,   -1,  317,  318,
6101   404,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6102    -1,  330,   -1,   -1,   -1,   -1,  420,   -1,   -1,   -1,
6103   339,  340,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6104   349,  350,  269,  352,   -1,   -1,   -1,   -1,   -1,  358,
6105   359,  360,   -1,   -1,  363,  364,  365,  366,  285,  368,
6106    -1,  288,  289,   -1,   -1,   -1,   -1,  376,  377,  463,
6107   297,  298,  299,   -1,   -1,   -1,   -1,  386,  387,  306,
6108   389,  308,   -1,   -1,  311,   -1,  313,   -1,   -1,   -1,
6109   317,  318,   -1,   -1,   -1,  404,   -1,   -1,   -1,   -1,
6110    -1,   -1,   -1,  330,   -1,   -1,   -1,   -1,   -1,   -1,
6111    -1,  420,  339,  340,   -1,   -1,   -1,   -1,   -1,   -1,
6112    -1,   -1,  349,  350,   -1,  352,   -1,  269,   -1,   -1,
6113    -1,  358,  359,  360,   -1,   -1,  363,  364,  365,  366,
6114    -1,  368,   -1,  285,   -1,   -1,  288,  289,   -1,  376,
6115   377,   -1,   -1,   -1,  463,  297,  298,  299,   -1,  386,
6116   387,   -1,  389,   -1,  306,   -1,  308,   -1,   -1,  311,
6117    -1,  313,   -1,   -1,   -1,  317,  318,  404,   -1,   -1,
6118    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  330,   -1,
6119    -1,   -1,   -1,   -1,   -1,   -1,   -1,  339,  340,   -1,
6120    -1,   -1,   -1,   -1,   -1,   -1,   -1,  349,  350,  269,
6121   352,   -1,   -1,   -1,   -1,   -1,  358,  359,  360,   -1,
6122    -1,  363,  364,  365,  366,  285,  368,   -1,  288,  289,
6123    -1,   -1,   -1,   -1,  376,  377,  463,  297,  298,  299,
6124    -1,   -1,   -1,   -1,  386,  387,  306,  389,  308,  309,
6125    -1,  311,   -1,  313,   -1,   -1,   -1,  317,  318,   -1,
6126    -1,   -1,  404,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6127   330,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  339,
6128   340,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  349,
6129   350,   -1,  352,   -1,  269,   -1,   -1,   -1,  358,  359,
6130   360,   -1,   -1,  363,   -1,  365,  366,   -1,  368,   -1,
6131   285,   -1,   -1,  288,  289,   -1,  376,  377,   -1,   -1,
6132    -1,  463,  297,  298,  299,   -1,  386,  387,   -1,  389,
6133    -1,  306,   -1,  308,   -1,   -1,  311,   -1,  313,   -1,
6134    -1,   -1,  317,  318,  404,   -1,   -1,   -1,   -1,   -1,
6135    -1,   -1,   -1,   -1,   -1,  330,   -1,   -1,   -1,   -1,
6136    -1,   -1,   -1,   -1,  339,  340,   -1,   -1,   -1,   -1,
6137    -1,   -1,   -1,   -1,  349,  350,  269,  352,   -1,   -1,
6138    -1,   -1,   -1,  358,  359,  360,   -1,   -1,  363,  364,
6139   365,  366,  285,  368,   -1,  288,  289,   -1,   -1,   -1,
6140    -1,  376,  377,  463,  297,  298,  299,   -1,   -1,   -1,
6141    -1,  386,  387,  306,  389,  308,   -1,   -1,  311,   -1,
6142   313,   -1,   -1,   -1,  317,  318,   -1,   -1,   -1,  404,
6143    -1,   -1,   -1,   -1,   -1,   -1,   -1,  330,   -1,   -1,
6144    -1,   -1,   -1,   -1,   -1,   -1,  339,  340,   -1,   -1,
6145    -1,   -1,   -1,  263,  264,   -1,  349,  350,   -1,  352,
6146    -1,  269,   -1,   -1,   -1,  358,  359,  360,   -1,   -1,
6147   363,  364,  365,  366,   -1,  368,   -1,  285,   -1,   -1,
6148   288,  289,   -1,  376,  377,   -1,   -1,   -1,  463,  297,
6149   298,  299,   -1,  386,  387,   -1,  389,   -1,  306,  309,
6150   308,   -1,   -1,  311,   -1,  313,   -1,   -1,   -1,  317,
6151   318,  404,   -1,   -1,   -1,  325,   -1,   -1,   -1,   -1,
6152    -1,  331,  330,   -1,   -1,   -1,  263,  264,  338,   -1,
6153    -1,  339,  340,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6154    -1,  349,  350,   -1,  352,   -1,  356,  357,   -1,   -1,
6155   358,  359,  360,   -1,   -1,  363,   -1,  365,  366,   -1,
6156   368,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  376,  377,
6157   463,   -1,  309,   -1,   -1,   -1,  263,  264,  386,  387,
6158   390,  389,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6159    -1,   -1,   -1,   -1,  331,  405,  404,   -1,   -1,   -1,
6160   410,  338,  412,  413,   -1,  415,  416,  417,  418,  419,
6161   420,  421,  422,  423,  424,   -1,  426,  427,   -1,  356,
6162   357,   -1,  309,   -1,   -1,   -1,   -1,  437,   -1,  439,
6163    -1,  441,   -1,   -1,   -1,  445,   -1,  447,   -1,   -1,
6164    -1,   -1,   -1,   -1,  331,   -1,   -1,   -1,   -1,  263,
6165   264,  338,   -1,  390,   -1,  463,   -1,   -1,   -1,   -1,
6166    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  405,  356,
6167   357,   -1,   -1,  410,   -1,  412,  413,  414,  415,  416,
6168   417,  418,  419,  420,  421,  422,  423,  424,   -1,  426,
6169   427,   -1,   -1,   -1,   -1,  309,   -1,   -1,   -1,   -1,
6170   437,   -1,  439,  390,  441,   -1,   -1,   -1,  445,   -1,
6171   447,   -1,   -1,   -1,   -1,   -1,   -1,  331,  405,   -1,
6172    -1,   -1,   -1,  410,  338,  412,  413,  414,  415,  416,
6173   417,  418,  419,  420,  421,  422,  423,  424,   -1,  426,
6174   427,   -1,  356,  357,   -1,   -1,  263,  264,   -1,   -1,
6175   437,   -1,  439,   -1,  441,   -1,   -1,   -1,  445,   -1,
6176   447,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6177    -1,   -1,   -1,   -1,   -1,   -1,  390,   -1,   -1,   -1,
6178    -1,   -1,   -1,   -1,  263,  264,   -1,   -1,   -1,   -1,
6179    -1,  405,  309,   -1,   -1,   -1,  410,   -1,  412,  413,
6180    -1,  415,  416,  417,  418,  419,  420,  421,  422,  423,
6181   424,   -1,  426,  427,  331,   -1,   -1,   -1,   -1,   -1,
6182    -1,  338,   -1,  437,   -1,  439,   -1,  441,   -1,   -1,
6183   309,  445,   -1,  447,   -1,   -1,   -1,   -1,   -1,  356,
6184   357,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6185    -1,   -1,  331,   -1,   -1,   -1,   -1,   -1,   -1,  338,
6186    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6187    -1,   -1,   -1,  390,   -1,   -1,   -1,  356,  357,   -1,
6188    -1,  263,  264,   -1,   -1,   -1,   -1,   -1,  405,   -1,
6189    -1,   -1,   -1,   -1,   -1,  412,  413,  414,  415,  416,
6190   417,  418,  419,  420,  421,  422,  423,  424,   -1,  426,
6191   427,  390,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6192   437,   -1,  439,   -1,  441,   -1,  405,  309,  445,   -1,
6193   447,  263,  264,  412,  413,   -1,  415,  416,  417,  418,
6194   419,  420,  421,  422,  423,  424,   -1,  426,  427,  331,
6195    -1,   -1,   -1,   -1,   -1,   -1,  338,   -1,  437,   -1,
6196   439,   -1,  441,   -1,   -1,   -1,  445,   -1,  447,   -1,
6197    -1,   -1,   -1,   -1,  356,  357,   -1,  309,  263,  264,
6198    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6199    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  331,
6200    -1,   -1,   -1,   -1,   -1,   -1,  338,   -1,  390,   -1,
6201    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6202    -1,   -1,   -1,  405,  356,  357,   -1,   -1,  263,  264,
6203   412,  413,   -1,  415,  416,  417,  418,  419,  420,  421,
6204   422,  423,  424,   -1,  426,  427,  331,   -1,   -1,   -1,
6205    -1,   -1,   -1,  338,   -1,  437,   -1,  439,  390,  441,
6206    -1,   -1,   -1,  445,   -1,  447,   -1,   -1,   -1,   -1,
6207    -1,  356,  357,  405,  309,   -1,   -1,   -1,  263,  264,
6208   412,  413,   -1,  415,  416,  417,  418,  419,  420,  421,
6209   422,  423,   -1,   -1,  426,  427,  331,   -1,   -1,   -1,
6210    -1,   -1,   -1,  338,   -1,  437,   -1,  439,   -1,  441,
6211    -1,   -1,   -1,  445,   -1,  447,   -1,   -1,   -1,   -1,
6212   405,  356,  357,   -1,  309,  410,   -1,   -1,  413,  414,
6213   415,   -1,  417,  418,  419,  420,  421,  422,  423,  424,
6214    -1,  426,  427,   -1,   -1,   -1,  331,   -1,   -1,   -1,
6215   263,  264,  437,  338,  439,  390,  441,   -1,   -1,   -1,
6216   445,   -1,  447,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6217   405,  356,  357,   -1,   -1,   -1,   -1,  412,  413,   -1,
6218   415,  416,  417,  418,  419,  420,  421,   -1,   -1,   -1,
6219    -1,  426,  427,  263,  264,   -1,  309,   -1,   -1,   -1,
6220    -1,   -1,  437,   -1,  439,  390,  441,   -1,   -1,   -1,
6221   445,   -1,  447,   -1,   -1,   -1,   -1,   -1,  331,   -1,
6222   405,   -1,   -1,   -1,   -1,  338,   -1,  412,  413,   -1,
6223   415,  416,  417,  418,  419,  420,  421,   -1,   -1,  309,
6224    -1,  426,  427,  356,  357,  263,  264,   -1,   -1,   -1,
6225    -1,   -1,  437,   -1,  439,   -1,  441,   -1,   -1,   -1,
6226   445,  331,  447,   -1,   -1,   -1,   -1,   -1,  338,   -1,
6227    -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,   -1,   -1,
6228    -1,   -1,   -1,   -1,   -1,   -1,  356,  357,   -1,   -1,
6229    -1,  309,  405,   -1,   -1,  263,  264,   -1,   -1,  412,
6230   413,   -1,  415,  416,  417,  418,  419,  420,  421,   -1,
6231    -1,   -1,   -1,  331,  427,   -1,   -1,   -1,   -1,   -1,
6232   390,   -1,   -1,   -1,  437,   -1,  439,   -1,  441,   -1,
6233    -1,   -1,  445,   -1,  447,  405,   -1,   -1,  356,  357,
6234    -1,  309,  412,  413,   -1,  415,  416,  417,  418,  419,
6235   420,  421,   -1,   -1,   -1,   -1,   -1,  427,   -1,   -1,
6236    -1,   -1,   -1,  331,  263,  264,   -1,  437,   -1,  439,
6237    -1,  441,  390,   -1,   -1,  445,   -1,  447,   -1,   -1,
6238    -1,   -1,   -1,   -1,   -1,   -1,   -1,  405,  356,  357,
6239    -1,   -1,   -1,   -1,  412,  413,   -1,  415,  416,  417,
6240   418,  419,  420,  421,   -1,   -1,   -1,   -1,   -1,  427,
6241   309,   -1,   -1,   -1,  263,  264,   -1,   -1,   -1,  437,
6242    -1,  439,  390,  441,   -1,   -1,   -1,  445,   -1,  447,
6243    -1,   -1,  331,   -1,   -1,   -1,   -1,  405,   -1,   -1,
6244    -1,   -1,   -1,   -1,  412,  413,   -1,  415,  416,  417,
6245   418,  419,  420,  421,   -1,   -1,   -1,  356,  357,  427,
6246   309,   -1,   -1,   -1,  263,  264,   -1,   -1,   -1,  437,
6247    -1,  439,   -1,  441,   -1,   -1,   -1,  445,   -1,  447,
6248    -1,   -1,  331,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6249    -1,  390,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6250    -1,   -1,   -1,   -1,   -1,   -1,  405,  356,  357,   -1,
6251   309,   -1,   -1,  412,  413,   -1,  415,  416,  417,  418,
6252   419,  420,  421,   -1,   -1,   -1,   -1,   -1,  427,   -1,
6253    -1,   -1,  331,  263,  264,   -1,   -1,   -1,  437,   -1,
6254   439,  390,  441,   -1,   -1,   -1,  445,   -1,  447,   -1,
6255    -1,   -1,   -1,   -1,   -1,   -1,  405,  356,  357,   -1,
6256    -1,   -1,   -1,  412,  413,   -1,  415,  416,   -1,   -1,
6257   419,  420,  421,   -1,   -1,   -1,   -1,   -1,  427,  309,
6258    -1,   -1,   -1,  263,  264,   -1,   -1,   -1,  437,   -1,
6259   439,  390,  441,   -1,   -1,   -1,  445,   -1,  447,   -1,
6260    -1,  331,   -1,   -1,   -1,   -1,  405,   -1,   -1,   -1,
6261    -1,   -1,   -1,  412,  413,   -1,  415,  416,   -1,   -1,
6262   419,  420,  421,   -1,   -1,   -1,  356,  357,  427,  309,
6263    -1,   -1,   -1,  263,  264,   -1,   -1,   -1,  437,   -1,
6264   439,   -1,  441,   -1,   -1,   -1,  445,   -1,  447,   -1,
6265    -1,  331,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6266   390,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6267   263,  264,   -1,   -1,   -1,  405,  356,  357,   -1,  309,
6268    -1,   -1,  412,  413,   -1,  415,  416,   -1,   -1,  419,
6269   420,  421,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6270    -1,  331,   -1,   -1,   -1,  263,  264,  437,   -1,  439,
6271   390,  441,   -1,   -1,   -1,  445,  309,  447,   -1,   -1,
6272    -1,   -1,   -1,   -1,   -1,  405,  356,  357,   -1,   -1,
6273    -1,   -1,  412,  413,   -1,  415,  416,   -1,  331,  419,
6274   420,  421,  263,  264,   -1,   -1,   -1,   -1,   -1,   -1,
6275    -1,  309,   -1,   -1,   -1,   -1,   -1,  437,   -1,  439,
6276   390,  441,   -1,  356,  357,  445,   -1,  447,   -1,   -1,
6277    -1,   -1,   -1,  331,   -1,  405,   -1,   -1,   -1,   -1,
6278    -1,   -1,  412,  413,   -1,  415,  416,   -1,  309,  419,
6279   420,  421,  263,  264,   -1,   -1,   -1,  390,  356,  357,
6280    -1,   -1,   -1,   -1,   -1,   -1,   -1,  437,   -1,  439,
6281   331,  441,  405,   -1,   -1,  445,   -1,  447,   -1,  412,
6282   413,   -1,  415,  416,   -1,   -1,  419,  420,  421,  263,
6283   264,   -1,  390,   -1,   -1,  356,  357,   -1,  309,   -1,
6284    -1,   -1,  263,  264,  437,   -1,  439,  405,  441,   -1,
6285    -1,   -1,   -1,   -1,  412,  413,   -1,  415,  416,   -1,
6286   331,  419,  420,  421,   -1,   -1,   -1,   -1,   -1,  390,
6287    -1,   -1,   -1,   -1,   -1,  309,   -1,   -1,   -1,  437,
6288    -1,  439,   -1,  441,  405,  356,  357,   -1,  309,   -1,
6289    -1,  412,  413,   -1,  415,  416,   -1,  331,  419,  420,
6290   421,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  263,  264,
6291   331,   -1,   -1,   -1,   -1,   -1,  437,   -1,  439,  390,
6292   441,   -1,  356,  357,   -1,   -1,   -1,   -1,   -1,   -1,
6293    -1,   -1,   -1,   -1,  405,  356,  357,   -1,   -1,   -1,
6294    -1,  412,  413,   -1,  415,  416,   -1,   -1,  419,  420,
6295   421,  263,  264,   -1,  309,   -1,  390,   -1,   -1,   -1,
6296    -1,   -1,   -1,   -1,   -1,   -1,  437,   -1,  439,  390,
6297   441,  405,   -1,   -1,   -1,   -1,  331,   -1,  412,  413,
6298    -1,  415,  416,   -1,  405,  419,  420,  421,   -1,   -1,
6299    -1,  412,  413,   -1,  415,  416,   -1,  309,  419,  420,
6300   421,  356,  357,  437,   -1,  439,   -1,  441,   -1,   -1,
6301    -1,   -1,   -1,   -1,   -1,   -1,  437,   -1,  439,  331,
6302   441,  263,  264,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6303    -1,   -1,   -1,   -1,   -1,  390,   -1,   -1,   -1,   -1,
6304    -1,   -1,   -1,   -1,  356,  357,   -1,   -1,   -1,   -1,
6305   405,   -1,   -1,   -1,   -1,   -1,   -1,  412,  413,   -1,
6306   415,  416,   -1,   -1,  419,  420,  421,  309,   -1,   -1,
6307    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,   -1,
6308    -1,   -1,  437,   -1,  439,   -1,  441,   -1,   -1,  331,
6309    -1,   -1,   -1,  405,   -1,   -1,   -1,   -1,   -1,   -1,
6310   412,  413,   -1,  415,  416,   -1,   -1,  419,  420,  421,
6311    -1,   -1,   -1,   -1,  356,  357,   -1,   -1,   -1,   -1,
6312    -1,  257,   -1,   -1,   -1,  437,   -1,  439,   -1,  441,
6313    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6314    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  390,  285,
6315    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6316    -1,  297,  298,  405,   -1,   -1,   -1,   -1,   -1,   -1,
6317   412,  413,  308,  415,  416,   -1,   -1,  419,  420,  421,
6318    -1,  317,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6319   326,   -1,   -1,  257,  330,  437,   -1,  439,   -1,  441,
6320    -1,   -1,   -1,  339,  340,   -1,   -1,   -1,  344,   -1,
6321    -1,   -1,   -1,  349,  350,   -1,   -1,   -1,  354,   -1,
6322    -1,  285,  358,  359,  360,   -1,   -1,  363,   -1,  365,
6323   366,   -1,  368,  297,  298,   -1,   -1,   -1,   -1,   -1,
6324   376,  377,   -1,   -1,  308,   -1,   -1,   -1,   -1,   -1,
6325   386,   -1,   -1,  317,   -1,   -1,   -1,   -1,   -1,   -1,
6326    -1,   -1,  326,   -1,   -1,  257,  330,   -1,  404,   -1,
6327    -1,   -1,   -1,   -1,   -1,  339,  340,   -1,   -1,   -1,
6328   344,   -1,   -1,   -1,  420,  349,  350,   -1,   -1,   -1,
6329   354,   -1,   -1,  285,  358,  359,  360,   -1,   -1,  363,
6330    -1,  365,  366,   -1,  368,  297,  298,   -1,   -1,   -1,
6331    -1,   -1,  376,  377,   -1,   -1,  308,   -1,   -1,   -1,
6332    -1,   -1,  386,   -1,   -1,  317,   -1,   -1,   -1,   -1,
6333    -1,   -1,   -1,   -1,  326,   -1,   -1,  257,  330,   -1,
6334   404,   -1,   -1,   -1,   -1,   -1,   -1,  339,  340,   -1,
6335    -1,   -1,  344,   -1,   -1,   -1,  420,  349,  350,   -1,
6336    -1,   -1,  354,   -1,   -1,  285,  358,  359,  360,   -1,
6337    -1,  363,   -1,  365,  366,   -1,  368,  297,  298,   -1,
6338    -1,   -1,   -1,   -1,  376,  377,   -1,   -1,  308,   -1,
6339    -1,   -1,   -1,   -1,  386,   -1,   -1,  317,   -1,   -1,
6340    -1,   -1,   -1,   -1,   -1,   -1,  326,   -1,   -1,  257,
6341   330,   -1,  404,   -1,   -1,   -1,   -1,   -1,   -1,  339,
6342   340,   -1,   -1,   -1,  344,   -1,   -1,   -1,  420,  349,
6343   350,   -1,   -1,   -1,   -1,   -1,   -1,  285,  358,  359,
6344   360,   -1,   -1,  363,   -1,  365,  366,   -1,  368,  297,
6345   298,   -1,   -1,   -1,   -1,   -1,  376,  377,   -1,   -1,
6346   308,   -1,   -1,   -1,   -1,   -1,  386,   -1,   -1,  317,
6347    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  326,   -1,
6348    -1,  257,  330,   -1,  404,   -1,   -1,   -1,   -1,   -1,
6349    -1,  339,  340,   -1,   -1,   -1,  344,   -1,   -1,   -1,
6350   420,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,  285,
6351   358,  359,  360,   -1,   -1,  363,   -1,  365,  366,   -1,
6352   368,  297,  298,   -1,   -1,   -1,   -1,   -1,  376,  377,
6353    -1,   -1,  308,   -1,   -1,   -1,   -1,   -1,  386,   -1,
6354    -1,  317,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6355   326,   -1,   -1,  257,  330,   -1,  404,   -1,   -1,   -1,
6356    -1,   -1,   -1,  339,  340,   -1,   -1,   -1,  344,   -1,
6357    -1,   -1,  420,  349,  350,   -1,   -1,   -1,   -1,   -1,
6358    -1,  285,  358,  359,  360,   -1,   -1,  363,   -1,  365,
6359   366,   -1,  368,  297,  298,   -1,   -1,   -1,   -1,   -1,
6360   376,  377,  306,   -1,  308,   -1,   -1,   -1,   -1,   -1,
6361   386,   -1,   -1,  317,   -1,   -1,   -1,   -1,   -1,   -1,
6362    -1,   -1,   -1,   -1,   -1,  257,  330,   -1,  404,   -1,
6363    -1,   -1,   -1,   -1,   -1,  339,  340,   -1,   -1,   -1,
6364   344,   -1,   -1,   -1,  420,  349,  350,   -1,   -1,   -1,
6365    -1,   -1,   -1,  285,  358,  359,  360,   -1,   -1,  363,
6366    -1,  365,  366,   -1,  368,  297,  298,   -1,   -1,   -1,
6367    -1,   -1,  376,  377,   -1,   -1,  308,   -1,   -1,   -1,
6368    -1,   -1,  386,   -1,   -1,  317,   -1,   -1,   -1,   -1,
6369    -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  330,   -1,
6370   404,   -1,   -1,   -1,   -1,   -1,   -1,  339,  340,   -1,
6371    -1,   -1,  344,   -1,   -1,   -1,  420,  349,  350,   -1,
6372    -1,   -1,   -1,   -1,   -1,  285,  358,  359,  360,   -1,
6373    -1,  363,   -1,  365,  366,   -1,  368,  297,  298,   -1,
6374    -1,   -1,   -1,   -1,  376,  377,   -1,   -1,  308,   -1,
6375    -1,   -1,   -1,   -1,  386,   -1,   -1,  317,   -1,   -1,
6376    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6377   330,   -1,  404,   -1,   -1,   -1,   -1,   -1,   -1,  339,
6378   340,   -1,   -1,   -1,  344,   -1,   -1,   -1,  420,  349,
6379   350,   -1,   -1,   -1,   -1,   -1,   -1,  285,  358,  359,
6380   360,   -1,   -1,  363,   -1,  365,  366,   -1,  368,  297,
6381   298,   -1,   -1,   -1,   -1,   -1,  376,  377,  306,   -1,
6382   308,   -1,   -1,   -1,   -1,   -1,  386,   -1,   -1,  317,
6383    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,   -1,
6384    -1,   -1,  330,   -1,  404,   -1,   -1,  306,   -1,   -1,
6385    -1,  339,  340,   -1,   -1,   -1,  344,   -1,  317,  318,
6386   420,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,  328,
6387   358,  359,  360,   -1,   -1,  363,   -1,  365,  366,   -1,
6388   368,  340,   -1,   -1,   -1,   -1,   -1,   -1,  376,  377,
6389   349,  350,   -1,   -1,   -1,   -1,   -1,   -1,  386,  358,
6390   359,  360,   -1,  297,  363,  364,  365,  366,   -1,  368,
6391    -1,   -1,  306,   -1,   -1,   -1,  404,  376,  377,   -1,
6392    -1,   -1,   -1,  317,  318,   -1,   -1,   -1,  387,   -1,
6393    -1,   -1,  420,  297,  328,   -1,   -1,   -1,   -1,   -1,
6394    -1,   -1,  306,   -1,   -1,  404,  340,   -1,   -1,   -1,
6395    -1,   -1,   -1,  317,  318,  349,  350,   -1,   -1,   -1,
6396    -1,  420,   -1,   -1,  358,  359,  360,   -1,  297,  363,
6397   364,  365,  366,   -1,  368,   -1,  340,  306,   -1,   -1,
6398    -1,   -1,  376,  377,   -1,  349,  350,   -1,  317,  318,
6399    -1,   -1,   -1,  387,  358,  359,  360,   -1,  297,  363,
6400   364,  365,  366,   -1,  368,   -1,   -1,  306,   -1,   -1,
6401   404,  340,  376,  377,   -1,   -1,   -1,   -1,  317,  318,
6402   349,  350,   -1,  387,   -1,   -1,  420,   -1,   -1,  358,
6403   359,  360,   -1,  297,  363,  364,  365,  366,   -1,  368,
6404   404,  340,  306,   -1,   -1,   -1,   -1,  376,  377,   -1,
6405   349,  350,   -1,  317,  318,   -1,  420,   -1,  387,  358,
6406   359,  360,   -1,  297,  363,  364,  365,  366,   -1,  368,
6407    -1,   -1,  306,   -1,   -1,  404,  340,  376,  377,   -1,
6408    -1,   -1,   -1,  317,  318,  349,  350,   -1,  387,   -1,
6409    -1,  420,   -1,   -1,  358,  359,  360,   -1,   -1,  363,
6410   364,  365,  366,   -1,  368,  404,  340,   -1,   -1,   -1,
6411    -1,   -1,  376,  377,   -1,  349,  350,   -1,   -1,   -1,
6412    -1,  420,   -1,  387,  358,  359,  360,   -1,   -1,  363,
6413   364,  365,  366,   -1,  368,   -1,  285,   -1,   -1,   -1,
6414   404,   -1,  376,  377,   -1,   -1,   -1,   -1,  297,  298,
6415    -1,   -1,   -1,  387,   -1,   -1,  420,  306,   -1,  308,
6416    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  317,   -1,
6417   404,   -1,   -1,   -1,   -1,   -1,  285,   -1,   -1,   -1,
6418    -1,  330,   -1,   -1,   -1,   -1,  420,   -1,  297,  298,
6419   339,  340,   -1,   -1,   -1,  344,   -1,  306,   -1,  308,
6420   349,  350,   -1,   -1,   -1,   -1,   -1,   -1,  317,  358,
6421   359,  360,   -1,   -1,  363,   -1,  365,  366,   -1,  368,
6422    -1,  330,   -1,   -1,   -1,   -1,   -1,  376,  377,   -1,
6423   339,  340,   -1,   -1,   -1,  344,   -1,  386,   -1,   -1,
6424   349,  350,   -1,   -1,   -1,   -1,   -1,   -1,  285,  358,
6425   359,  360,   -1,   -1,  363,  404,  365,  366,   -1,  368,
6426   297,  298,   -1,   -1,   -1,   -1,   -1,  376,  377,   -1,
6427    -1,  308,   -1,   -1,   -1,   -1,   -1,  386,   -1,   -1,
6428   317,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6429    -1,   -1,   -1,  330,   -1,  404,   -1,   -1,   -1,   -1,
6430    -1,   -1,  339,  340,   -1,   -1,   -1,  344,   -1,   -1,
6431    -1,   -1,  349,  350,   -1,   -1,   -1,   -1,   -1,   -1,
6432    -1,  358,  359,  360,   -1,   -1,  363,   -1,  365,  366,
6433    -1,  368,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  376,
6434   377,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  386,
6435    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
6436    -1,   -1,   -1,   -1,   -1,   -1,   -1,  404,
6437   };
6438
6439 #line 4902 "mb-parser.jay"
6440
6441
6442 Tokenizer lexer;
6443
6444 public Tokenizer Lexer {
6445         get {
6446                 return lexer;
6447         }
6448 }                  
6449
6450 public static Expression DecomposeQI (string name, Location loc)
6451 {
6452         Expression o;
6453
6454         if (name.IndexOf ('.') == -1){
6455                 return new SimpleName (name, loc);
6456         } else {
6457                 int pos = name.LastIndexOf (".");
6458                 string left = name.Substring (0, pos);
6459                 string right = name.Substring (pos + 1);
6460
6461                 o = DecomposeQI (left, loc);
6462
6463                 return new MemberAccess (o, right, loc);
6464         }
6465 }
6466
6467 Block declare_local_variables (Expression dummy_type, ArrayList variable_declarators, Location loc)
6468 {
6469         Block implicit_block;
6470         ArrayList inits = null;
6471
6472         //
6473         // We use the `Used' property to check whether statements
6474         // have been added to the current block.  If so, we need
6475         // to create another block to contain the new declaration
6476         // otherwise, as an optimization, we use the same block to
6477         // add the declaration.
6478         //
6479         // FIXME: A further optimization is to check if the statements
6480         // that were added were added as part of the initialization
6481         // below.  In which case, no other statements have been executed
6482         // and we might be able to reduce the number of blocks for
6483         // situations like this:
6484         //
6485         // int j = 1;  int k = j + 1;
6486         //
6487         
6488         VariableDeclaration.FixupTypes (variable_declarators);
6489         // FIXME: Should VariableDeclaration.FixupArrayTypes be called here
6490
6491         if (current_block.Used)
6492                 implicit_block = new Block (current_block, Block.Flags.Implicit, loc, Location.Null);
6493         else
6494                 implicit_block = current_block;
6495
6496
6497         foreach (VariableDeclaration decl in variable_declarators){
6498                 Expression type = decl.type;
6499                 if (implicit_block.AddVariable (type, decl.identifier, current_local_parameters, decl.Location) != null) {
6500                         if (decl.expression_or_array_initializer != null){
6501                                 if (inits == null)
6502                                         inits = new ArrayList ();
6503                                 inits.Add (decl);
6504                         }
6505                 }
6506         }
6507
6508         if (inits == null)
6509                 return implicit_block;
6510
6511         foreach (VariableDeclaration decl in inits){
6512                 Assign assign;
6513                 Expression expr;
6514                 Expression type = decl.type;
6515                 
6516                 if ((decl.expression_or_array_initializer is Expression) || 
6517                     (decl.expression_or_array_initializer is New)) {
6518                         expr = (Expression) decl.expression_or_array_initializer;
6519                 } else {
6520                         ArrayList init = (ArrayList) decl.expression_or_array_initializer;
6521                         
6522                         expr = new ArrayCreation (type, "", init, decl.Location);
6523                 }
6524
6525                 LocalVariableReference var;
6526                 var = new LocalVariableReference (implicit_block, decl.identifier, loc);
6527
6528                 assign = new Assign (var, expr, decl.Location);
6529
6530                 implicit_block.AddStatement (new StatementExpression (assign, lexer.Location));
6531         }
6532         
6533         return implicit_block;
6534 }
6535
6536 Block declare_local_constant (Expression dummy_type, ArrayList variable_declarators)
6537 {
6538         Block implicit_block;
6539         VariableDeclaration.FixupTypes (variable_declarators);
6540
6541         if (current_block.Used)
6542                 implicit_block = new Block (current_block, Block.Flags.Implicit);
6543         else
6544                 implicit_block = current_block;
6545
6546         foreach (VariableDeclaration decl in variable_declarators){
6547                 Expression type = decl.type;
6548                 implicit_block.AddConstant (type, decl.identifier, (Expression) decl.expression_or_array_initializer,
6549                                           current_local_parameters, decl.Location);
6550         }
6551         
6552         return implicit_block;
6553 }
6554
6555
6556
6557 struct VarName {
6558                 public object Name;
6559                 public object Type;
6560                 public object Rank;
6561                                                                                 
6562                 public VarName (object n, object t, object r)
6563                 {
6564                         Name = n;
6565                         Type = t;
6566                         Rank = r;
6567                 }
6568         }
6569
6570
6571 // <summary>
6572 //   A class used to pass around variable declarations and constants
6573 // </summary>
6574 public class VariableDeclaration {
6575         public string identifier;
6576         public object expression_or_array_initializer;
6577         public Location Location;
6578         public Attributes OptAttributes;
6579         public string DocComment;
6580         public Expression type;
6581         public ArrayList dims;
6582                 
6583         public VariableDeclaration (string id, Expression t, object eoai, Location l, Attributes opt_attrs)
6584         {
6585                 this.identifier = id;
6586                 this.expression_or_array_initializer = eoai;
6587                 this.Location = l;
6588                 this.OptAttributes = opt_attrs;
6589                 this.type = t;
6590                 this.dims = null;
6591         }       
6592
6593         public VariableDeclaration (string id, object eoai, Location l) : this (id, eoai, l, null)
6594         {
6595         }
6596         
6597         public VariableDeclaration (string id, Expression t, Location l) : this (id, t, null, l, null)
6598         {
6599         }       
6600         
6601         public VariableDeclaration (string id, object eoai, Location l, Attributes opt_attrs) : this 
6602                                         (id, TypeManager.system_object_expr, eoai, l, opt_attrs)
6603         {
6604         }       
6605         
6606         public static ArrayCreation BuildArrayCreator (Expression vartype, ArrayList a_dims, ArrayList varinit, Location l)
6607         {       
6608                 // FIXME : This is broken: only the first rank is parsed
6609                 return new ArrayCreation (vartype, (ArrayList) a_dims[0], "", varinit, l);
6610         }
6611         
6612         public static void FixupTypes (ArrayList vars)
6613         {
6614                 int varcount =  vars.Count;
6615                 VariableDeclaration last_var = (VariableDeclaration) vars[varcount - 1];
6616                         
6617                 if (last_var.type == null)
6618                         last_var.type = TypeManager.system_object_expr;
6619                         
6620                 Expression cur_type = last_var.type;
6621                 int n = varcount - 1;
6622                 
6623                 while (n >= 0) {
6624                         VariableDeclaration var = (VariableDeclaration) vars[n--];
6625                         if (var.type == null)
6626                                 var.type = cur_type;
6627                         else
6628                                 cur_type = var.type;
6629                 }
6630         }
6631         
6632         public static bool IndexesSpecifiedInRank (ArrayList IndexList)
6633         {
6634                 bool res = false;
6635                 
6636                 if (IndexList != null) {
6637                         foreach (Expression e in IndexList)
6638                                 if (!(e is EmptyExpression)) {
6639                                         res = true;
6640                                         break;
6641                                 }       
6642                 }
6643                 return (res);
6644         }       
6645         
6646         
6647         public static bool IndexesSpecified (ArrayList ranks)
6648         {
6649                 bool res = false;
6650                 
6651                 if (ranks != null) {
6652                         foreach (ArrayList IndexList in ranks) {
6653                                 if (IndexesSpecifiedInRank (IndexList)) {
6654                                         res = true;
6655                                         break;
6656                                 }       
6657                         }       
6658                 }
6659                 return (res);
6660         }
6661         
6662         public static string StripDims (string varname, ref string d)
6663         {
6664                 string res = varname;
6665                 string dres = "";
6666                 
6667                 if (varname.IndexOf("[") >= 0) {
6668                         dres = varname.Substring(varname.IndexOf("["), (varname.LastIndexOf("]") - varname.IndexOf("["))+1);
6669                         res = varname.Substring(0, varname.IndexOf("["));
6670                 }
6671                 d = dres;
6672                 return (res);
6673         }       
6674         
6675         public static string StripDims (string varname)
6676         {
6677                 string dres = "";
6678                 
6679                 return (StripDims(varname, ref dres));
6680         }       
6681         
6682         public static string StripIndexesFromDims (string dims)
6683         {
6684                 StringBuilder sb = new StringBuilder();
6685
6686                 foreach (char c in dims) 
6687                         if (c == ',' || c == ']' || c == '[')
6688                                 sb.Append (c);
6689                                 
6690                 return sb.ToString();                           
6691         }
6692         
6693         public static string BuildRank (ArrayList rank)
6694         {
6695                 bool allEmpty;
6696                 return BuildRank(rank, out allEmpty);
6697         }
6698             
6699         public static string BuildRank (ArrayList rank, out bool allEmpty)
6700         {
6701                 string res = "";
6702
6703                 res += "[";
6704                 allEmpty = true;
6705                 bool first = true;
6706                 foreach (object e in rank) {
6707                         if (!(e is EmptyExpression))
6708                                 allEmpty = false;
6709                         if (!first)
6710                                 res += ",";
6711                         first = false;
6712                 }
6713                         
6714                 res += "]";
6715                 return res;
6716         }
6717                 
6718         public static string BuildRanks (ArrayList rank_specifiers, bool mustBeEmpty, Location loc)
6719         {
6720                 string res = "";
6721
6722                 bool allEmpty = true;
6723                 foreach (ArrayList rank in rank_specifiers) {
6724                         bool tmp;
6725                         res = BuildRank (rank, out tmp) + res;
6726                         if (!tmp)
6727                                 allEmpty = false;
6728                 }
6729                 if (!allEmpty && mustBeEmpty)
6730                         Report.Error (30638, loc, "Array bounds cannot appear in type specifiers.");    
6731
6732                 return res;
6733         }       
6734         
6735         public static void VBFixIndexList (ref ArrayList IndexList)
6736         {
6737                 if (IndexList != null) {
6738                         for (int x = 0; x < IndexList.Count; x++) {
6739                                 Expression e = (Expression) IndexList[x];
6740                                 if (!(e is EmptyExpression)) {
6741                                         IndexList[x] = new Binary (Binary.Operator.Addition, e, new IntLiteral(1), Location.Null);
6742                                 }
6743                         }
6744                 }
6745         }               
6746         
6747 //      public static bool IsArrayDecl (Parser t)
6748 //      {
6749 //              // return (varname.IndexOf("[") >= 0);
6750 //              return (t.current_rank_specifiers != null);
6751 //      }                       
6752         
6753         public static void VBFixIndexLists (ref ArrayList ranks)
6754         {       
6755                 if (ranks != null) {
6756                         for (int x = 0; x < ranks.Count; x++) {
6757                                 ArrayList IndexList = (ArrayList) ranks[x];
6758                                 VBFixIndexList (ref IndexList);
6759                         }       
6760                 }       
6761         }
6762                 
6763         public static void FixupArrayTypes (ArrayList vars)
6764         {
6765                 int varcount =  vars.Count;
6766                 string dims;
6767                 
6768                 foreach (VariableDeclaration var in vars) {
6769                         if (var.identifier.EndsWith(",")) {
6770                                 dims = "[" + var.identifier.Substring(var.identifier.IndexOf (","), 
6771                                                                 var.identifier.LastIndexOf(",")) + "]";
6772                                 var.identifier = var.identifier.Substring (0, var.identifier.IndexOf (","));
6773                                 var.type = new ComposedCast (var.type, (string) dims, var.Location);
6774                         }
6775                 }
6776         }                               
6777 }
6778
6779
6780 // public Property BuildSimpleProperty (Expression p_type, string name, 
6781 //                                      Field p_fld, int mod_flags,
6782 //                                      Attributes attrs, Location loc) 
6783 // {
6784 //      Property p;
6785 //      Block get_block, set_block;
6786 //      Accessor acc_set, acc_get;
6787 //      StatementExpression a_set;
6788 //      Statement a_get;
6789 //      Parameter [] args;
6790         
6791 //      // Build SET Block
6792 //      Parameter implicit_value_parameter = new Parameter (p_type, "value", Parameter.Modifier.NONE, null);    
6793 //      args  = new Parameter [1];
6794 //      args [0] = implicit_value_parameter;
6795                 
6796 //      Parameters set_params = new Parameters (args, null, loc);
6797 //      a_set = new StatementExpression ((ExpressionStatement) new Assign ((Expression) DecomposeQI(p_fld.Name, loc), 
6798 //                          (Expression) new SimpleName("value", loc), loc), loc);
6799                             
6800 //      set_block = new Block (current_block, set_params, loc, Location.Null);
6801 //      set_block.AddStatement ((Statement) a_set);                                         
6802 //      acc_set = new Accessor (set_block, attrs);
6803         
6804 //      // Build GET Block
6805 //      a_get = (Statement) new Return ((Expression) DecomposeQI(p_fld.Name, loc), loc);
6806 //      get_block = new Block (current_block, null, loc, Location.Null);
6807 //      get_block.AddStatement ((Statement) a_get);                                         
6808 //      acc_get = new Accessor (get_block, attrs);
6809                 
6810 //      p = new Property (p_type, name, mod_flags, (Accessor) acc_get, (Accessor) acc_set, attrs, loc);
6811         
6812 //      return (p);
6813 // }
6814         
6815 void start_block () 
6816 {
6817           if (current_block == null){
6818                   current_block = new ToplevelBlock ((ToplevelBlock) top_current_block, 
6819                                              current_local_parameters, lexer.Location);
6820                   top_current_block = current_block;
6821           } else {
6822                   current_block = new Block (current_block, current_local_parameters,
6823                                                  lexer.Location, Location.Null);
6824           }
6825
6826
6827
6828 Block end_block ()
6829
6830         Block res;
6831
6832         while (current_block.Implicit)
6833                 current_block = current_block.Parent;
6834         res = current_block;
6835         current_block.SetEndLocation (lexer.Location);
6836         current_block = current_block.Parent;
6837         if (current_block == null)
6838                 top_current_block = null;
6839
6840         return res;
6841 }
6842
6843 // private void AddHandler (Expression evt_definition, Expression handler_exp)
6844 // {
6845 //      AddHandler (current_block, evt_definition, handler_exp);
6846 // }
6847
6848 void CheckAttributeTarget (string a)
6849 {
6850         switch (a) {
6851
6852         case "assembly" : case "field" : case "method" : case "param" : case "property" : case "type" :
6853                 return;
6854                 
6855         default :
6856                 Location l = lexer.Location;
6857                 Report.Error (658, l, "`" + a + "' is an invalid attribute target");
6858                 break;
6859         }
6860 }
6861
6862 // private void AddHandler (Block b, Expression evt_id, Expression handles_exp)
6863 // {
6864 //      Expression evt_target;
6865 //      Location loc = lexer.Location;
6866         
6867 //      Statement addhnd = (Statement) new AddHandler (evt_id, 
6868 //                                                                                                      handles_exp, 
6869 //                                                                                                      loc);                                                                                                   
6870                                                                                                         
6871 //      b.AddStatement (addhnd);
6872 // }
6873
6874 // private void RaiseEvent (string evt_name, ArrayList args)
6875 // {
6876 //      Location loc = lexer.Location;
6877         
6878 //      Invocation evt_call = new Invocation (DecomposeQI(evt_name, loc), args, lexer.Location);
6879 //      Statement s = (Statement)(new StatementExpression ((ExpressionStatement) evt_call, loc)); 
6880 //      current_block.AddStatement (s); 
6881 // }
6882
6883 // private void RemoveHandler (Block b, Expression evt_definition, Expression handler_exp)
6884 // {
6885 //      Expression evt_target;
6886 //      Location loc = lexer.Location;
6887         
6888 //      Statement rmhnd = (Statement) new RemoveHandler (evt_definition, 
6889 //                                                                                                      handler_exp, 
6890 //                                                                                                      loc);
6891 //      b.AddStatement (rmhnd);
6892 // }
6893
6894 // <summary>
6895 //  This method is used to get at the complete string representation of
6896 //  a fully-qualified type name, hiding inside a MemberAccess ;-)
6897 //  This is necessary because local_variable_type admits primary_expression
6898 //  as the type of the variable. So we do some extra checking
6899 // </summary>
6900 string GetQualifiedIdentifier (Expression expr)
6901 {
6902         if (expr is SimpleName)
6903                 return ((SimpleName)expr).Name;
6904         else if (expr is MemberAccess)
6905                 return GetQualifiedIdentifier (((MemberAccess)expr).Expr) + "." + ((MemberAccess) expr).Identifier;
6906         else 
6907                 throw new Exception ("Expr has to be either SimpleName or MemberAccess! (" + expr + ")");
6908         
6909 }
6910
6911 // private void RemoveHandler (Expression evt_definition, Expression handler_exp)
6912 // {
6913 //      RemoveHandler (current_block, evt_definition, handler_exp);
6914 // }
6915
6916 // FIXME: This needs to be fixed for This and Base access because the way the name of the
6917 // mbas' constructor is changed from "New" to current_container.Basename
6918
6919 private ConstructorInitializer CheckConstructorInitializer (ref ArrayList s)
6920 {
6921         ConstructorInitializer ci = null;
6922         
6923         if (s.Count > 0) {
6924                 if (s[0] is StatementExpression && ((StatementExpression) s[0]).expr is Invocation) {
6925                         Invocation i = (Invocation) ((StatementExpression) s[0]).expr;
6926                         
6927                         if (i.expr is BaseAccess) {
6928                                 BaseAccess ba = (BaseAccess) i.expr;
6929                                 if (ba.member == "New" || ba.member == ".ctor") {
6930                                         ci = new ConstructorBaseInitializer (i.Arguments, current_local_parameters, lexer.Location);
6931                                         s.RemoveAt(0);
6932                                 }
6933                         }
6934                         if (i.expr.ToString() == "Mono.MonoBASIC.This..ctor") {
6935                                 ci = new ConstructorThisInitializer (i.Arguments, current_local_parameters, lexer.Location); 
6936                                 s.RemoveAt(0);
6937                         }
6938                 }
6939         }
6940         return ci;
6941 }
6942
6943 void Error_ExpectingTypeName (Location l, Expression expr)
6944 {
6945         if (expr is Invocation){
6946                 Report.Error (1002, l, "; expected");
6947         } else {
6948                 Report.Error (-1, l, "Invalid Type definition");
6949         }
6950 }
6951
6952 static bool AlwaysAccept (MemberInfo m, object filterCriteria) {
6953         return true;
6954 }
6955
6956 private void ReportError9998()
6957 {
6958         Report.Error (29998, lexer.Location, "This construct is only available in MonoBASIC extended syntax.");
6959 }
6960
6961 public CSharpParser (SeekableStreamReader reader, SourceFile file, ArrayList defines)
6962 {
6963         current_namespace = new NamespaceEntry (null, file, null, Location.Null);
6964         this.name = file.Name;
6965         this.file = file;
6966         current_container = RootContext.Tree.Types;
6967         current_container.NamespaceEntry = current_namespace;
6968         oob_stack = new Stack ();
6969         switch_stack = new Stack ();
6970
6971         lexer = new Tokenizer (reader, file, defines);
6972
6973         ifElseStateMachine = new IfElseStateMachine();
6974         tokenizerController = new TokenizerController(lexer);
6975 }
6976
6977 public void parse ()
6978 {
6979         try {
6980                 if (yacc_verbose_flag > 1)
6981                         yyparse (lexer, new yydebug.yyDebugSimple ());
6982                 else
6983                         yyparse (lexer);
6984                 Tokenizer tokenizer = lexer as Tokenizer;
6985                 tokenizer.cleanup ();           
6986         } catch (Exception e){
6987                 // 
6988                 // Removed for production use, use parser verbose to get the output.
6989                 //
6990                 // Console.WriteLine (e);
6991                 Report.Error (-25, lexer.Location, "Parsing error");
6992                 if (yacc_verbose_flag > 0)
6993                         Console.WriteLine (e);
6994         }
6995 }
6996
6997
6998 // protected override int parse ()
6999 // {
7000 //      RootContext.InitializeImports(ImportsList);
7001 //      current_namespace = new Namespace (null, RootContext.RootNamespace);
7002 //      current_container = RootContext.Tree.Types;
7003 //      current_container.Namespace = current_namespace;
7004 //      oob_stack = new Stack ();
7005 //      switch_stack = new Stack ();
7006 //      expr_stack = new Stack ();      
7007 //      tmp_blocks = new Stack(); 
7008 //      with_stack = new Stack();
7009 //      statement_stack = new Stack();  
7010
7011 //      allow_global_attribs = true;
7012 //      expecting_global_attribs = false;
7013 //      expecting_local_attribs = false;
7014 //      local_attrib_section_added = false;
7015
7016 //      UseExtendedSyntax = name.EndsWith(".mbs");
7017 //      OptionExplicit = InitialOptionExplicit || UseExtendedSyntax;
7018 //      OptionStrict = InitialOptionStrict || UseExtendedSyntax;
7019 //      OptionCompareBinary = InitialOptionCompareBinary;
7020
7021 //      lexer = new Tokenizer (input, name, defines);
7022         
7023 //      ifElseStateMachine = new IfElseStateMachine();
7024 //      tokenizerController = new TokenizerController(lexer);
7025         
7026 //      StringBuilder value = new StringBuilder ();
7027 //      try {
7028 //              if (yacc_verbose_flag > 0)
7029 //                      yyparse (lexer, new yydebug.yyDebugSimple ());
7030 //              else {
7031 //                      yyparse (lexer);
7032 //                      cleanup();
7033 //              }
7034 //      } 
7035 //      catch(MBASException e) {
7036 //              Report.Error(e.code, e.loc, e.Message);
7037 //      }
7038 //      catch (Exception e) {
7039 //              if (Report.Stacktrace)
7040 //                      Console.WriteLine(e);
7041 //              Report.Error (29999, lexer.Location, "Parsing error");
7042 //      }
7043
7044 //      RootContext.VerifyImports();
7045
7046 //      return Report.Errors;
7047 // }
7048
7049 // void cleanup()
7050 // {
7051 //      try {
7052 //              ifElseStateMachine.HandleToken(IfElseStateMachine.Token.EOF);
7053 //      }
7054 //      catch(ApplicationException) {
7055 //              throw new MBASException(ifElseStateMachine.Error, lexer.Location, ifElseStateMachine.ErrString);
7056 //      }
7057
7058 //      if(in_external_source) 
7059 //              Report.Error (30579, lexer.Location, "'#ExternalSource' directives must end with matching '#End ExternalSource'");
7060
7061 //      if(in_marked_region > 0)
7062 //              Report.Error (30205, lexer.Location, "'#Region' directive must be followed by a matching '#End Region'");
7063 // }
7064
7065 void HandleConditionalDirective(IfElseStateMachine.Token tok, BoolLiteral expr)
7066 {
7067         try {
7068                 tokenizerController.PositionTokenizerCursor(tok, expr);
7069         }
7070         catch(ApplicationException) {
7071                 tok = IfElseStateMachine.Token.EOF;
7072                 try {
7073                         ifElseStateMachine.HandleToken(tok);
7074                 }
7075                 catch(ApplicationException) {
7076                         throw new MBASException(ifElseStateMachine.Error, lexer.Location, ifElseStateMachine.ErrString);
7077                 }
7078         }
7079 }
7080 /* end end end */
7081
7082 // <summary>
7083 //   Given the @class_name name, it creates a fully qualified name
7084 //   based on the containing declaration space
7085 // </summary>
7086 MemberName
7087 MakeName (MemberName class_name)
7088 {
7089         string ns = current_namespace.FullName;
7090
7091         if (current_container.Name == ""){
7092                 if (ns != "")
7093                         return new MemberName (new MemberName (ns), class_name);
7094                 else
7095                         return class_name;
7096         } else {
7097                 return new MemberName (current_container.MemberName, class_name);
7098         }
7099 }
7100
7101 }
7102 #line default
7103 namespace yydebug {
7104         using System;
7105          internal interface yyDebug {
7106                  void push (int state, Object value);
7107                  void lex (int state, int token, string name, Object value);
7108                  void shift (int from, int to, int errorFlag);
7109                  void pop (int state);
7110                  void discard (int state, int token, string name, Object value);
7111                  void reduce (int from, int to, int rule, string text, int len);
7112                  void shift (int from, int to);
7113                  void accept (Object value);
7114                  void error (string message);
7115                  void reject ();
7116          }
7117          
7118          class yyDebugSimple : yyDebug {
7119                  void println (string s){
7120                          Console.Error.WriteLine (s);
7121                  }
7122                  
7123                  public void push (int state, Object value) {
7124                          println ("push\tstate "+state+"\tvalue "+value);
7125                  }
7126                  
7127                  public void lex (int state, int token, string name, Object value) {
7128                          println("lex\tstate "+state+"\treading "+name+"\tvalue "+value);
7129                  }
7130                  
7131                  public void shift (int from, int to, int errorFlag) {
7132                          switch (errorFlag) {
7133                          default:                               // normally
7134                                  println("shift\tfrom state "+from+" to "+to);
7135                                  break;
7136                          case 0: case 1: case 2:                // in error recovery
7137                                  println("shift\tfrom state "+from+" to "+to
7138                                              +"\t"+errorFlag+" left to recover");
7139                                  break;
7140                          case 3:                                // normally
7141                                  println("shift\tfrom state "+from+" to "+to+"\ton error");
7142                                  break;
7143                          }
7144                  }
7145                  
7146                  public void pop (int state) {
7147                          println("pop\tstate "+state+"\ton error");
7148                  }
7149                  
7150                  public void discard (int state, int token, string name, Object value) {
7151                          println("discard\tstate "+state+"\ttoken "+name+"\tvalue "+value);
7152                  }
7153                  
7154                  public void reduce (int from, int to, int rule, string text, int len) {
7155                          println("reduce\tstate "+from+"\tuncover "+to
7156                                      +"\trule ("+rule+") "+text);
7157                  }
7158                  
7159                  public void shift (int from, int to) {
7160                          println("goto\tfrom state "+from+" to "+to);
7161                  }
7162                  
7163                  public void accept (Object value) {
7164                          println("accept\tvalue "+value);
7165                  }
7166                  
7167                  public void error (string message) {
7168                          println("error\t"+message);
7169                  }
7170                  
7171                  public void reject () {
7172                          println("reject");
7173                  }
7174                  
7175          }
7176 }
7177 // %token constants
7178  class Token {
7179   public const int EOF = 257;
7180   public const int NONE = 258;
7181   public const int ERROR = 259;
7182   public const int ADDHANDLER = 260;
7183   public const int ADDRESSOF = 261;
7184   public const int ALIAS = 262;
7185   public const int AND = 263;
7186   public const int ANDALSO = 264;
7187   public const int ANSI = 265;
7188   public const int AS = 266;
7189   public const int ASSEMBLY = 267;
7190   public const int AUTO = 268;
7191   public const int BINARY = 269;
7192   public const int BOOLEAN = 270;
7193   public const int BYREF = 271;
7194   public const int BYTE = 272;
7195   public const int BYVAL = 273;
7196   public const int CALL = 274;
7197   public const int CASE = 275;
7198   public const int CATCH = 276;
7199   public const int CBOOL = 277;
7200   public const int CBYTE = 278;
7201   public const int CCHAR = 279;
7202   public const int CDATE = 280;
7203   public const int CDEC = 281;
7204   public const int CDBL = 282;
7205   public const int CHAR = 283;
7206   public const int CINT = 284;
7207   public const int CLASS = 285;
7208   public const int CLNG = 286;
7209   public const int COBJ = 287;
7210   public const int COMPARE = 288;
7211   public const int CONST = 289;
7212   public const int CSHORT = 290;
7213   public const int CSNG = 291;
7214   public const int CSTR = 292;
7215   public const int CTYPE = 293;
7216   public const int DATE = 294;
7217   public const int DECIMAL = 295;
7218   public const int DECLARE = 296;
7219   public const int DEFAULT = 297;
7220   public const int DELEGATE = 298;
7221   public const int DIM = 299;
7222   public const int DIRECTCAST = 300;
7223   public const int DO = 301;
7224   public const int DOUBLE = 302;
7225   public const int EACH = 303;
7226   public const int ELSE = 304;
7227   public const int ELSEIF = 305;
7228   public const int END = 306;
7229   public const int ENDIF = 307;
7230   public const int ENUM = 308;
7231   public const int EOL = 309;
7232   public const int ERASE = 310;
7233   public const int EVENT = 311;
7234   public const int EXIT = 312;
7235   public const int EXPLICIT = 313;
7236   public const int FALSE = 314;
7237   public const int FINALLY = 315;
7238   public const int FOR = 316;
7239   public const int FRIEND = 317;
7240   public const int FUNCTION = 318;
7241   public const int GET = 319;
7242   public const int GETTYPE = 320;
7243   public const int GOSUB = 321;
7244   public const int GOTO = 322;
7245   public const int HANDLES = 323;
7246   public const int IF = 324;
7247   public const int IMPLEMENTS = 325;
7248   public const int IMPORTS = 326;
7249   public const int IN = 327;
7250   public const int INHERITS = 328;
7251   public const int INTEGER = 329;
7252   public const int INTERFACE = 330;
7253   public const int IS = 331;
7254   public const int LET = 332;
7255   public const int LIB = 333;
7256   public const int LIKE = 334;
7257   public const int LONG = 335;
7258   public const int LOOP = 336;
7259   public const int ME = 337;
7260   public const int MOD = 338;
7261   public const int MODULE = 339;
7262   public const int MUSTINHERIT = 340;
7263   public const int MUSTOVERRIDE = 341;
7264   public const int MYBASE = 342;
7265   public const int MYCLASS = 343;
7266   public const int NAMESPACE = 344;
7267   public const int NEW = 345;
7268   public const int NEXT = 346;
7269   public const int NOT = 347;
7270   public const int NOTHING = 348;
7271   public const int NOTINHERITABLE = 349;
7272   public const int NOTOVERRIDABLE = 350;
7273   public const int OBJECT = 351;
7274   public const int OFF = 352;
7275   public const int ON = 353;
7276   public const int OPTION = 354;
7277   public const int OPTIONAL = 355;
7278   public const int OR = 356;
7279   public const int ORELSE = 357;
7280   public const int OVERLOADS = 358;
7281   public const int OVERRIDABLE = 359;
7282   public const int OVERRIDES = 360;
7283   public const int PARAM_ARRAY = 361;
7284   public const int PRESERVE = 362;
7285   public const int PRIVATE = 363;
7286   public const int PROPERTY = 364;
7287   public const int PROTECTED = 365;
7288   public const int PUBLIC = 366;
7289   public const int RAISEEVENT = 367;
7290   public const int READONLY = 368;
7291   public const int REDIM = 369;
7292   public const int REM = 370;
7293   public const int REMOVEHANDLER = 371;
7294   public const int RESUME = 372;
7295   public const int RETURN = 373;
7296   public const int SELECT = 374;
7297   public const int SET = 375;
7298   public const int SHADOWS = 376;
7299   public const int SHARED = 377;
7300   public const int SHORT = 378;
7301   public const int SINGLE = 379;
7302   public const int SIZEOF = 380;
7303   public const int STATIC = 381;
7304   public const int STEP = 382;
7305   public const int STOP = 383;
7306   public const int STRICT = 384;
7307   public const int STRING = 385;
7308   public const int STRUCTURE = 386;
7309   public const int SUB = 387;
7310   public const int SYNCLOCK = 388;
7311   public const int TEXT = 389;
7312   public const int THEN = 390;
7313   public const int THROW = 391;
7314   public const int TO = 392;
7315   public const int TRUE = 393;
7316   public const int TRY = 394;
7317   public const int TYPEOF = 395;
7318   public const int UNICODE = 396;
7319   public const int UNTIL = 397;
7320   public const int VARIANT = 398;
7321   public const int WEND = 399;
7322   public const int WHEN = 400;
7323   public const int WHILE = 401;
7324   public const int WITH = 402;
7325   public const int WITHEVENTS = 403;
7326   public const int WRITEONLY = 404;
7327   public const int XOR = 405;
7328   public const int YIELD = 406;
7329   public const int HASH = 407;
7330   public const int OPEN_BRACKET = 408;
7331   public const int CLOSE_BRACKET = 409;
7332   public const int OPEN_PARENS = 410;
7333   public const int OPEN_BRACE = 411;
7334   public const int CLOSE_BRACE = 412;
7335   public const int CLOSE_PARENS = 413;
7336   public const int DOT = 414;
7337   public const int COMMA = 415;
7338   public const int COLON = 416;
7339   public const int PLUS = 417;
7340   public const int MINUS = 418;
7341   public const int ASSIGN = 419;
7342   public const int OP_LT = 420;
7343   public const int OP_GT = 421;
7344   public const int STAR = 422;
7345   public const int DIV = 423;
7346   public const int OP_EXP = 424;
7347   public const int INTERR = 425;
7348   public const int OP_IDIV = 426;
7349   public const int OP_CONCAT = 427;
7350   public const int EXCLAMATION = 428;
7351   public const int PERCENT = 429;
7352   public const int LONGTYPECHAR = 430;
7353   public const int AT_SIGN = 431;
7354   public const int SINGLETYPECHAR = 432;
7355   public const int NUMBER_SIGN = 433;
7356   public const int DOLAR_SIGN = 434;
7357   public const int ATTR_ASSIGN = 435;
7358   public const int OP_LE = 437;
7359   public const int OP_GE = 439;
7360   public const int OP_NE = 441;
7361   public const int OP_XOR = 443;
7362   public const int xor = 444;
7363   public const int OP_SHIFT_LEFT = 445;
7364   public const int OP_SHIFT_RIGHT = 447;
7365   public const int LITERAL_INTEGER = 449;
7366   public const int LITERAL_SINGLE = 451;
7367   public const int LITERAL_DOUBLE = 453;
7368   public const int LITERAL_DECIMAL = 455;
7369   public const int LITERAL_CHARACTER = 457;
7370   public const int LITERAL_STRING = 459;
7371   public const int LITERAL_DATE = 461;
7372   public const int IDENTIFIER = 463;
7373   public const int LOWPREC = 464;
7374   public const int OP_OR = 465;
7375   public const int OP_AND = 466;
7376   public const int BITWISE_OR = 467;
7377   public const int BITWISE_AND = 468;
7378   public const int BITWISE_NOT = 469;
7379   public const int CARRET = 470;
7380   public const int UMINUS = 471;
7381   public const int OP_INC = 472;
7382   public const int OP_DEC = 473;
7383   public const int HIGHPREC = 474;
7384   public const int label_name = 475;
7385   public const int yyErrorCode = 256;
7386  }
7387  namespace yyParser {
7388   using System;
7389   /** thrown for irrecoverable syntax errors and stack overflow.
7390     */
7391   internal class yyException : System.Exception {
7392     public yyException (string message) : base (message) {
7393     }
7394   }
7395
7396   /** must be implemented by a scanner object to supply input to the parser.
7397     */
7398   internal interface yyInput {
7399     /** move on to next token.
7400         @return false if positioned beyond tokens.
7401         @throws IOException on input error.
7402       */
7403     bool advance (); // throws java.io.IOException;
7404     /** classifies current token.
7405         Should not be called if advance() returned false.
7406         @return current %token or single character.
7407       */
7408     int token ();
7409     /** associated with current token.
7410         Should not be called if advance() returned false.
7411         @return value for token().
7412       */
7413     Object value ();
7414   }
7415  }
7416 } // close outermost namespace, that MUST HAVE BEEN opened in the prolog