diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index 4c02842b4c..55ad8d9231 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -299,23 +299,36 @@ namespace ICSharpCode.NRefactory.CSharp public override void Visit (NamespaceContainer nspace) { NamespaceDeclaration nDecl = null; + var loc = LocationsBag.GetLocations (nspace); + if (nspace.NS != null && !string.IsNullOrEmpty (nspace.NS.Name)) { nDecl = new NamespaceDeclaration (); -// nDecl.AddChild (new CSharpTokenNode (Convert (nspace.NamespaceLocation), "namespace".Length), NamespaceDeclaration.Roles.Keyword); - ConvertNamespaceName (nspace.NS.MemberName, nDecl); -// nDecl.AddChild (new CSharpTokenNode (Convert (nspace.OpenBrace), 1), NamespaceDeclaration.Roles.LBrace); + if (loc != null) + nDecl.AddChild (new CSharpTokenNode (Convert (loc[0]), "namespace".Length), NamespaceDeclaration.Roles.Keyword); + ConvertNamespaceName (nspace.RealMemberName, nDecl); + if (loc != null && loc.Count > 1) + nDecl.AddChild (new CSharpTokenNode (Convert (loc[1]), 1), NamespaceDeclaration.Roles.LBrace); AddToNamespace (nDecl); namespaceStack.Push (nDecl); } + if (nspace.Usings != null) { + foreach (var us in nspace.Usings) { + us.Accept (this); + } + } - foreach (var container in nspace.Containers) { - container.Accept (this); + if (nspace.Containers != null) { + foreach (var container in nspace.Containers) { + Console.WriteLine ("add container:"+ container); + container.Accept (this); + } } if (nDecl != null) { -// nDecl.AddChild (new CSharpTokenNode (Convert (nspace.CloseBrace), 1), NamespaceDeclaration.Roles.RBrace); -// if (!nspace.OptSemicolon.IsNull) -// nDecl.AddChild (new CSharpTokenNode (Convert (nspace.OptSemicolon), 1), NamespaceDeclaration.Roles.Semicolon); + if (loc != null && loc.Count > 2) + nDecl.AddChild (new CSharpTokenNode (Convert (loc[2]), 1), NamespaceDeclaration.Roles.RBrace); + if (loc != null && loc.Count > 3) + nDecl.AddChild (new CSharpTokenNode (Convert (loc[3]), 1), NamespaceDeclaration.Roles.Semicolon); namespaceStack.Pop (); } @@ -347,35 +360,44 @@ namespace ICSharpCode.NRefactory.CSharp } } -// public override void Visit (UsingsBag.Using u) -// { -// UsingDeclaration ud = new UsingDeclaration (); -// ud.AddChild (new CSharpTokenNode (Convert (u.UsingLocation), "using".Length), UsingDeclaration.Roles.Keyword); -// ud.AddChild (ConvertToType (u.NSpace), UsingDeclaration.ImportRole); -// ud.AddChild (new CSharpTokenNode (Convert (u.SemicolonLocation), 1), UsingDeclaration.Roles.Semicolon); -// AddToNamespace (ud); -// } - -// public override void Visit (UsingsBag.AliasUsing u) -// { -// UsingAliasDeclaration ud = new UsingAliasDeclaration (); -// ud.AddChild (new CSharpTokenNode (Convert (u.UsingLocation), "using".Length), UsingAliasDeclaration.Roles.Keyword); -// ud.AddChild (Identifier.Create (u.Identifier.Value, Convert (u.Identifier.Location)), UsingAliasDeclaration.AliasRole); -// ud.AddChild (new CSharpTokenNode (Convert (u.AssignLocation), 1), UsingAliasDeclaration.Roles.Assign); -// ud.AddChild (ConvertToType (u.Nspace), UsingAliasDeclaration.ImportRole); -// ud.AddChild (new CSharpTokenNode (Convert (u.SemicolonLocation), 1), UsingAliasDeclaration.Roles.Semicolon); -// AddToNamespace (ud); -// } -// -// public override void Visit (UsingsBag.ExternAlias u) -// { -// var ud = new ExternAliasDeclaration (); -// ud.AddChild (new CSharpTokenNode (Convert (u.ExternLocation), "extern".Length), ExternAliasDeclaration.Roles.Keyword); -// ud.AddChild (new CSharpTokenNode (Convert (u.AliasLocation), "alias".Length), ExternAliasDeclaration.AliasRole); -// ud.AddChild (Identifier.Create (u.Identifier.Value, Convert (u.Identifier.Location)), ExternAliasDeclaration.Roles.Identifier); -// ud.AddChild (new CSharpTokenNode (Convert (u.SemicolonLocation), 1), UsingAliasDeclaration.Roles.Semicolon); -// AddToNamespace (ud); -// } + public override void Visit (UsingNamespace un) + { + var ud = new UsingDeclaration (); + var loc = LocationsBag.GetLocations (un); + ud.AddChild (new CSharpTokenNode (Convert (un.Location), "using".Length), UsingDeclaration.Roles.Keyword); + ud.AddChild (ConvertToType (un.NamespaceExpression), UsingDeclaration.ImportRole); + if (loc != null) + ud.AddChild (new CSharpTokenNode (Convert (loc[0]), 1), UsingDeclaration.Roles.Semicolon); + AddToNamespace (ud); + } + + public override void Visit (UsingAliasNamespace uan) + { + var ud = new UsingAliasDeclaration (); + var loc = LocationsBag.GetLocations (uan); + + ud.AddChild (new CSharpTokenNode (Convert (uan.Location), "using".Length), UsingAliasDeclaration.Roles.Keyword); + ud.AddChild (Identifier.Create (uan.Alias.Value, Convert (uan.Alias.Location)), UsingAliasDeclaration.AliasRole); + if (loc != null) + ud.AddChild (new CSharpTokenNode (Convert (loc[0]), 1), UsingAliasDeclaration.Roles.Assign); + ud.AddChild (ConvertToType (uan.NamespaceExpression), UsingAliasDeclaration.ImportRole); + if (loc != null && loc.Count > 1) + ud.AddChild (new CSharpTokenNode (Convert (loc[1]), 1), UsingAliasDeclaration.Roles.Semicolon); + AddToNamespace (ud); + } + + public override void Visit (UsingExternAlias uea) + { + var ud = new ExternAliasDeclaration (); + var loc = LocationsBag.GetLocations (uea); + ud.AddChild (new CSharpTokenNode (Convert (uea.Location), "extern".Length), ExternAliasDeclaration.Roles.Keyword); + if (loc != null) + ud.AddChild (new CSharpTokenNode (Convert (loc[0]), "alias".Length), ExternAliasDeclaration.AliasRole); + ud.AddChild (Identifier.Create (uea.Alias.Value, Convert (uea.Alias.Location)), ExternAliasDeclaration.Roles.Identifier); + if (loc != null && loc.Count > 1) + ud.AddChild (new CSharpTokenNode (Convert (loc[1]), 1), UsingAliasDeclaration.Roles.Semicolon); + AddToNamespace (ud); + } AstType ConvertImport (MemberName memberName) { @@ -613,7 +635,7 @@ namespace ICSharpCode.NRefactory.CSharp newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.LBrace); typeStack.Push (newType); - foreach (EnumMember member in e.OrderedAllMembers) { + foreach (EnumMember member in e.Members) { Visit (member); if (location != null && curLoc < location.Count - 1) //last one is closing brace newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.Comma); @@ -3517,6 +3539,7 @@ namespace ICSharpCode.NRefactory.CSharp }; var unit = Parse (top, fileName, lineModifier); unit.Errors.AddRange (errorReportPrinter.Errors); + CompilerCallableEntryPoint.Reset (); return unit; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs index 141a04570c..5afead6a68 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs @@ -183,7 +183,6 @@ namespace Mono.CSharp { // Unique storey ID public readonly int ID; - static int unique_id; public readonly Block OriginalSourceBlock; @@ -202,11 +201,11 @@ namespace Mono.CSharp { public Expression Instance; public AnonymousMethodStorey (Block block, TypeDefinition parent, MemberBase host, TypeParameters tparams, string name) - : base (parent, MakeMemberName (host, name, unique_id, tparams, block.StartLocation), + : base (parent, MakeMemberName (host, name, parent.Module.CounterAnonymousContainers, tparams, block.StartLocation), tparams, Modifiers.SEALED) { OriginalSourceBlock = block; - ID = unique_id++; + ID = parent.Module.CounterAnonymousContainers++; } public void AddCapturedThisField (EmitContext ec) @@ -497,8 +496,10 @@ namespace Mono.CSharp { } } - public override void EmitContainer () + public override void Emit () { + base.Emit (); + SymbolWriter.DefineAnonymousScope (ID); if (hoisted_this != null) @@ -519,8 +520,6 @@ namespace Mono.CSharp { SymbolWriter.DefineCapturedScope (ID, sf.Storey.ID, sf.Field.Name); } } - - base.EmitContainer (); } // @@ -597,11 +596,6 @@ namespace Mono.CSharp { public IList ReferencesFromChildrenBlock { get { return children_references; } } - - public static void Reset () - { - unique_id = 0; - } } public abstract class HoistedVariable @@ -1337,7 +1331,7 @@ namespace Mono.CSharp { this.Storey = storey; this.RealName = real_name; - Parent.PartialContainer.AddMethod (this); + Parent.PartialContainer.Members.Add (this); Block = new ToplevelBlock (am.block, parameters); } @@ -1496,8 +1490,6 @@ namespace Mono.CSharp { string block_name; TypeInferenceContext return_inference; - static int unique_id; - public AnonymousMethodBody (ParametersCompiled parameters, ParametersBlock block, TypeSpec return_type, TypeSpec delegate_type, Location loc) @@ -1587,7 +1579,7 @@ namespace Mono.CSharp { MemberCore mc = ec.MemberContext as MemberCore; string name = CompilerGeneratedClass.MakeName (parent != storey ? block_name : null, - "m", null, unique_id++); + "m", null, ec.Module.CounterAnonymousMethods++); MemberName member_name; if (storey == null && ec.CurrentTypeParameters != null) { @@ -1643,7 +1635,7 @@ namespace Mono.CSharp { // if (!method.MemberName.IsGeneric) { var parent = method.Parent.PartialContainer; - int id = parent.Fields == null ? 0 : parent.Fields.Count; + int id = parent.AnonymousMethodsCounter++; var cache_type = storey != null && storey.Mutator != null ? storey.Mutator.Mutate (type) : type; am_cache = new Field (parent, new TypeExpression (cache_type, loc), @@ -1752,11 +1744,6 @@ namespace Mono.CSharp { { return TypeManager.CSharpName (type); } - - public static void Reset () - { - unique_id = 0; - } } // @@ -1764,7 +1751,6 @@ namespace Mono.CSharp { // public class AnonymousTypeClass : CompilerGeneratedClass { - static int types_counter; public const string ClassNamePrefix = "<>__AnonType"; public const string SignatureForError = "anonymous type"; @@ -1778,7 +1764,7 @@ namespace Mono.CSharp { public static AnonymousTypeClass Create (TypeContainer parent, IList parameters, Location loc) { - string name = ClassNamePrefix + types_counter++; + string name = ClassNamePrefix + parent.Module.CounterAnonymousTypes++; ParametersCompiled all_parameters; TypeParameters tparams = null; @@ -1850,7 +1836,7 @@ namespace Mono.CSharp { new MemberName (p.Name, p.Location), null); prop.Get = new Property.GetMethod (prop, 0, null, p.Location); prop.Get.Block = get_block; - a_type.AddProperty (prop); + a_type.AddMember (prop); } if (error) @@ -1860,11 +1846,6 @@ namespace Mono.CSharp { return a_type; } - public static void Reset () - { - types_counter = 0; - } - protected override bool DoDefineMembers () { if (!base.DoDefineMembers ()) @@ -1911,7 +1892,7 @@ namespace Mono.CSharp { Expression rs_hashcode = new IntConstant (Compiler.BuiltinTypes, -2128831035, loc); for (int i = 0; i < parameters.Count; ++i) { var p = parameters [i]; - var f = Fields [i]; + var f = (Field) Members [i * 2]; MemberAccess equality_comparer = new MemberAccess (new MemberAccess ( system_collections_generic, "EqualityComparer", @@ -1988,7 +1969,7 @@ namespace Mono.CSharp { equals.Block = equals_block; equals.Define (); - AddMethod (equals); + Members.Add (equals); // // GetHashCode () override @@ -2042,7 +2023,7 @@ namespace Mono.CSharp { hashcode_block.AddStatement (new Return (hash_variable, loc)); hashcode.Block = hashcode_top; hashcode.Define (); - AddMethod (hashcode); + Members.Add (hashcode); // // ToString () override @@ -2052,7 +2033,7 @@ namespace Mono.CSharp { tostring_block.AddStatement (new Return (string_concat, loc)); tostring.Block = tostring_block; tostring.Define (); - AddMethod (tostring); + Members.Add (tostring); return true; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs index e24d8394f8..dd75b1bbf7 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs @@ -675,10 +675,12 @@ namespace Mono.CSharp builder = AddCompilerGeneratedField ("$builder", new TypeExpression (bt, Location)); + var ctor = DefineDefaultConstructor (false); + if (!base.DoDefineMembers ()) return false; - var block = instance_constructors[0].Block; + Block block = ctor.Block; var mg = MethodGroupExpr.CreatePredefined (builder_factory, bt, Location); block.AddStatement ( diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs index 8b226c7332..babad42806 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs @@ -19,6 +19,7 @@ using System.Security; using System.Security.Permissions; using System.Linq; using System.Text; +using System.Diagnostics; #if NET_2_1 using XmlElement = System.Object; @@ -45,7 +46,6 @@ namespace Mono.CSharp public readonly string Basename; protected List containers; - protected List compiler_generated; TypeDefinition main_container; @@ -84,18 +84,15 @@ namespace Mono.CSharp } } - public void AddCompilerGeneratedClass (CompilerGeneratedClass c) + public virtual void AddCompilerGeneratedClass (CompilerGeneratedClass c) { - if (compiler_generated == null) - compiler_generated = new List (); - - compiler_generated.Add (c); + containers.Add (c); } public virtual void AddPartial (TypeDefinition next_part) { MemberCore mc; - defined_names.TryGetValue (next_part.Basename, out mc); + (PartialContainer ?? this).defined_names.TryGetValue (next_part.Basename, out mc); AddPartial (next_part, mc as TypeDefinition); } @@ -175,7 +172,11 @@ namespace Mono.CSharp } next_part.PartialContainer = existing; - existing.AddPartialPart (next_part); + + if (containers == null) + containers = new List (); + + containers.Add (next_part); } public virtual void AddTypeContainer (TypeContainer tc) @@ -190,7 +191,7 @@ namespace Mono.CSharp if (tp.MemberName == null) continue; - td.AddMember (tp, tp.Name); + td.AddNameToContainer (tp, tp.Name); } } } @@ -202,10 +203,6 @@ namespace Mono.CSharp tc.CloseContainer (); } } - - if (compiler_generated != null) - foreach (CompilerGeneratedClass c in compiler_generated) - c.CloseContainer (); } public virtual void CreateMetadataName (StringBuilder sb) @@ -231,11 +228,7 @@ namespace Mono.CSharp { if (containers != null) { foreach (TypeContainer tc in containers) { - try { - tc.Define (); - } catch (Exception e) { - throw new InternalErrorException (tc, e); - } + tc.Define (); } } @@ -272,6 +265,9 @@ namespace Mono.CSharp try { tc.DefineContainer (); } catch (Exception e) { + if (MemberName == MemberName.Null) + throw; + throw new InternalErrorException (tc, e); } } @@ -300,16 +296,8 @@ namespace Mono.CSharp public virtual void EmitContainer () { if (containers != null) { - foreach (TypeContainer t in containers) - t.EmitContainer (); - } - - if (Report.Errors > 0) - return; - - if (compiler_generated != null) { - for (int i = 0; i < compiler_generated.Count; ++i) - compiler_generated[i].EmitContainer (); + for (int i = 0; i < containers.Count; ++i) + containers[i].EmitContainer (); } } @@ -336,12 +324,12 @@ namespace Mono.CSharp return MemberName.GetSignatureForError (); } - public virtual void RemoveContainer (TypeContainer next_part) + public virtual void RemoveContainer (TypeContainer cont) { if (containers != null) - containers.Remove (next_part); + containers.Remove (cont); - defined_names.Remove (next_part.Basename); + defined_names.Remove (cont.Basename); } public virtual void VerifyMembers () @@ -443,17 +431,7 @@ namespace Mono.CSharp HasStaticFieldInitializer = 1 << 2 } - List ordered_explicit_member_list; - List ordered_member_list; - - // Holds the list of properties - List properties; - - // Holds the list of constructors - protected List instance_constructors; - - // Holds the list of fields - protected List fields; + readonly List members; // Holds a list of fields that have initializers protected List initialized_fields; @@ -461,38 +439,17 @@ namespace Mono.CSharp // Holds a list of static fields that have initializers protected List initialized_static_fields; - // Holds the list of constants - protected List constants; - - // Holds the methods. - List methods; - - // Holds the events - protected List events; - - // Holds the indexers - List indexers; - - // Holds the operators - List operators; - Dictionary hoisted_base_call_proxies; Dictionary Cache = new Dictionary (); - // - // Pointers to the default constructor and the default static constructor - // - protected Constructor default_constructor; - protected Constructor default_static_constructor; - // // Points to the first non-static field added to the container. // // This is an arbitrary choice. We are interested in looking at _some_ non-static field, // and the first one's as good as any. // - FieldBase first_nonstatic_field; + protected FieldBase first_nonstatic_field; // // This one is computed after we can distinguish interfaces @@ -516,21 +473,21 @@ namespace Mono.CSharp public const string DefaultIndexerName = "Item"; - private bool seen_normal_indexers = false; - private string indexer_name = DefaultIndexerName; + bool has_normal_indexers; + string indexer_name; protected bool requires_delayed_unmanagedtype_check; bool error; bool members_defined; bool members_defined_ok; + protected bool has_static_constructor; private CachedMethods cached_method; protected TypeSpec spec; TypeSpec current_type; - List partial_parts; - public int DynamicSitesCounter; + public int AnonymousMethodsCounter; static readonly string[] attribute_targets = new string[] { "type" }; @@ -544,13 +501,7 @@ namespace Mono.CSharp : base (parent, name, attrs, kind) { PartialContainer = this; - } - - List orderedAllMembers = new List (); - public List OrderedAllMembers { - get { - return this.orderedAllMembers; - } + members = new List (); } #region Properties @@ -625,6 +576,35 @@ namespace Mono.CSharp } } + public bool HasInstanceConstructor { + get { + return (caching_flags & Flags.HasInstanceConstructor) != 0; + } + set { + caching_flags |= Flags.HasInstanceConstructor; + } + } + + // Indicated whether container has StructLayout attribute set Explicit + public bool HasExplicitLayout { + get { return (caching_flags & Flags.HasExplicitLayout) != 0; } + set { caching_flags |= Flags.HasExplicitLayout; } + } + + public bool HasOperators { + get { + return (caching_flags & Flags.HasUserOperators) != 0; + } + set { + caching_flags |= Flags.HasUserOperators; + } + } + + public bool HasStructLayout { + get { return (caching_flags & Flags.HasStructLayout) != 0; } + set { caching_flags |= Flags.HasStructLayout; } + } + public TypeSpec[] Interfaces { get { return iface_exprs; @@ -643,6 +623,27 @@ namespace Mono.CSharp } } + // + // Returns true for secondary partial containers + // + bool IsPartialPart { + get { + return PartialContainer != this; + } + } + + public MemberCache MemberCache { + get { + return spec.MemberCache; + } + } + + public List Members { + get { + return members; + } + } + string ITypeDefinition.Namespace { get { var p = Parent; @@ -689,71 +690,66 @@ namespace Mono.CSharp visitor.Visit (this); } - public bool AddMember (MemberCore symbol) + public void AddMember (MemberCore symbol) { - return AddToContainer (symbol, symbol.MemberName.Basename); - } + if (symbol.MemberName.ExplicitInterface != null) { + if (!(Kind == MemberKind.Class || Kind == MemberKind.Struct)) { + Report.Error (541, symbol.Location, + "`{0}': explicit interface declaration can only be declared in a class or struct", + symbol.GetSignatureForError ()); + } + } - public bool AddMember (MemberCore symbol, string name) - { - return AddToContainer (symbol, name); + AddNameToContainer (symbol, symbol.MemberName.Basename); + members.Add (symbol); } - public void AddConstant (Const constant) + public override void AddTypeContainer (TypeContainer tc) { - orderedAllMembers.Add (constant); - if (!AddMember (constant)) - return; - - if (constants == null) - constants = new List (); - constants.Add (constant); - } + AddNameToContainer (tc, tc.Basename); - public void AddPartialPart (TypeDefinition part) - { - if (partial_parts == null) - partial_parts = new List (1); + if (containers == null) + containers = new List (); - partial_parts.Add (part); + members.Add (tc); + base.AddTypeContainer (tc); } - public override void AddTypeContainer (TypeContainer tc) + public override void AddCompilerGeneratedClass (CompilerGeneratedClass c) { - if (!AddToContainer (tc, tc.Basename)) - return; + members.Add (c); if (containers == null) containers = new List (); - base.AddTypeContainer (tc); + base.AddCompilerGeneratedClass (c); } // // Adds the member to defined_names table. It tests for duplications and enclosing name conflicts // - protected virtual bool AddToContainer (MemberCore symbol, string name) + public virtual void AddNameToContainer (MemberCore symbol, string name) { if (((ModFlags | symbol.ModFlags) & Modifiers.COMPILER_GENERATED) != 0) - return true; + return; MemberCore mc; - if (!defined_names.TryGetValue (name, out mc)) { - defined_names.Add (name, symbol); - return true; + if (!PartialContainer.defined_names.TryGetValue (name, out mc)) { + PartialContainer.defined_names.Add (name, symbol); + return; } if (symbol.EnableOverloadChecks (mc)) - return true; + return; InterfaceMemberBase im = mc as InterfaceMemberBase; if (im != null && im.IsExplicitImpl) - return true; + return; Report.SymbolRelatedToPreviousError (mc); if ((mc.ModFlags & Modifiers.PARTIAL) != 0 && (symbol is ClassOrStruct || symbol is Interface)) { Error_MissingPartialModifier (symbol); - return false; + return; } if (symbol is TypeParameter) { @@ -765,43 +761,7 @@ namespace Mono.CSharp GetSignatureForError (), name); } - return false; - } - - - private void AddMemberToList (InterfaceMemberBase mc, List alist) - { - if (ordered_explicit_member_list == null) { - ordered_explicit_member_list = new List (); - ordered_member_list = new List (); - } - - if (mc.IsExplicitImpl) { - if (Kind == MemberKind.Interface) { - Report.Error (541, mc.Location, - "`{0}': explicit interface declaration can only be declared in a class or struct", - mc.GetSignatureForError ()); - } - - ordered_explicit_member_list.Add (mc); - alist.Insert (0, mc); - } else { - ordered_member_list.Add (mc); - alist.Add (mc); - } - - } - - public void AddMethod (MethodOrOperator method) - { - orderedAllMembers.Add (method); - if (!AddToContainer (method, method.MemberName.Basename)) - return; - - if (methods == null) - methods = new List (); - - AddMemberToList (method, methods); + return; } public void AddConstructor (Constructor c) @@ -812,108 +772,59 @@ namespace Mono.CSharp public void AddConstructor (Constructor c, bool isDefault) { bool is_static = (c.ModFlags & Modifiers.STATIC) != 0; - if (!isDefault && !AddToContainer (c, is_static ? Constructor.ConstructorName : Constructor.TypeConstructorName)) - return; - - if (is_static && c.ParameterInfo.IsEmpty){ - if (default_static_constructor != null) { - Report.SymbolRelatedToPreviousError (default_static_constructor); - Report.Error (111, c.Location, - "A member `{0}' is already defined. Rename this member or use different parameter types", - c.GetSignatureForError ()); - return; - } + if (!isDefault) + AddNameToContainer (c, is_static ? Constructor.TypeConstructorName : Constructor.ConstructorName); - default_static_constructor = c; + if (is_static && c.ParameterInfo.IsEmpty) { + PartialContainer.has_static_constructor = true; } else { - if (c.ParameterInfo.IsEmpty) - default_constructor = c; - if (instance_constructors == null) - instance_constructors = new List (); - - instance_constructors.Add (c); + PartialContainer.HasInstanceConstructor = true; } + + members.Add (c); } public bool AddField (FieldBase field) { - orderedAllMembers.Add (field); - if (!AddMember (field)) - return false; - if (fields == null) - fields = new List (); - - fields.Add (field); + AddMember (field); if ((field.ModFlags & Modifiers.STATIC) != 0) return true; - if (first_nonstatic_field == null) { - first_nonstatic_field = field; + var first_field = PartialContainer.first_nonstatic_field; + if (first_field == null) { + PartialContainer.first_nonstatic_field = field; return true; } - if (Kind == MemberKind.Struct && first_nonstatic_field.Parent != field.Parent) { - Report.SymbolRelatedToPreviousError (first_nonstatic_field.Parent); + if (Kind == MemberKind.Struct && first_field.Parent != field.Parent) { + Report.SymbolRelatedToPreviousError (first_field.Parent); Report.Warning (282, 3, field.Location, "struct instance field `{0}' found in different declaration from instance field `{1}'", - field.GetSignatureForError (), first_nonstatic_field.GetSignatureForError ()); + field.GetSignatureForError (), first_field.GetSignatureForError ()); } return true; } - public void AddProperty (Property prop) - { - orderedAllMembers.Add (prop); - if (!AddMember (prop)) - return; - if (properties == null) - properties = new List (); - - AddMemberToList (prop, properties); - } - - public void AddEvent (Event e) - { - orderedAllMembers.Add (e); - if (!AddMember (e)) - return; - if (events == null) - events = new List (); - - events.Add (e); - } - /// /// Indexer has special handling in constrast to other AddXXX because the name can be driven by IndexerNameAttribute /// public void AddIndexer (Indexer i) { - orderedAllMembers.Add (i); - if (indexers == null) - indexers = new List (); - - AddMemberToList (i, indexers); + members.Add (i); } public void AddOperator (Operator op) { - orderedAllMembers.Add (op); - if (!AddMember (op)) - return; - if (operators == null) - operators = new List (); - - operators.Add (op); + PartialContainer.HasOperators = true; + AddMember (op); } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { - if (a.Type == pa.DefaultMember) { - if (Indexers != null) { - Report.Error (646, a.Location, "Cannot specify the `DefaultMember' attribute on type containing an indexer"); - return; - } + if (has_normal_indexers && a.Type == pa.DefaultMember) { + Report.Error (646, a.Location, "Cannot specify the `DefaultMember' attribute on type containing an indexer"); + return; } if (a.Type == pa.Required) { @@ -930,60 +841,12 @@ namespace Mono.CSharp } } - public IList Methods { - get { - return methods; - } - } - - public IList Constants { - get { - return constants; - } - } - public TypeSpec BaseType { get { return spec.BaseType; } } - public IList Fields { - get { - return fields; - } - } - - public IList InstanceConstructors { - get { - return instance_constructors; - } - } - - public IList Properties { - get { - return properties; - } - } - - public IList Events { - get { - return events; - } - } - - public IList Indexers { - get { - return indexers; - } - } - - public IList Operators { - get { - return operators; - } - } - protected virtual TypeAttributes TypeAttr { get { return ModifiersExtensions.TypeAttr (ModFlags, IsTopLevel); @@ -1004,7 +867,7 @@ namespace Mono.CSharp public string GetAttributeDefaultMember () { - return indexers == null ? DefaultIndexerName : indexer_name; + return indexer_name ?? DefaultIndexerName; } public bool IsComImport { @@ -1018,9 +881,12 @@ namespace Mono.CSharp public virtual void RegisterFieldForInitialization (MemberCore field, FieldInitializer expression) { + if (IsPartialPart) + PartialContainer.RegisterFieldForInitialization (field, expression); + if ((field.ModFlags & Modifiers.STATIC) != 0){ if (initialized_static_fields == null) { - PartialContainer.HasStaticFieldInitializer = true; + HasStaticFieldInitializer = true; initialized_static_fields = new List (4); } @@ -1035,16 +901,8 @@ namespace Mono.CSharp public void ResolveFieldInitializers (BlockContext ec) { - if (partial_parts != null) { - foreach (var part in partial_parts) { - part.DoResolveFieldInitializers (ec); - } - } - DoResolveFieldInitializers (ec); - } + Debug.Assert (!IsPartialPart); - void DoResolveFieldInitializers (BlockContext ec) - { if (ec.IsStatic) { if (initialized_static_fields == null) return; @@ -1119,44 +977,8 @@ namespace Mono.CSharp { base.GenerateDocComment (builder); - if (DefaultStaticConstructor != null) - DefaultStaticConstructor.GenerateDocComment (builder); - - if (InstanceConstructors != null) - foreach (Constructor c in InstanceConstructors) - c.GenerateDocComment (builder); - - if (Containers != null) - foreach (TypeContainer tc in Containers) - tc.GenerateDocComment (builder); - - if (Constants != null) - foreach (Const c in Constants) - c.GenerateDocComment (builder); - - if (Fields != null) - foreach (FieldBase f in Fields) - f.GenerateDocComment (builder); - - if (Events != null) - foreach (Event e in Events) - e.GenerateDocComment (builder); - - if (Indexers != null) - foreach (Indexer ix in Indexers) - ix.GenerateDocComment (builder); - - if (Properties != null) - foreach (Property p in Properties) - p.GenerateDocComment (builder); - - if (Methods != null) - foreach (MethodOrOperator m in Methods) - m.GenerateDocComment (builder); - - if (Operators != null) - foreach (Operator o in Operators) - o.GenerateDocComment (builder); + foreach (var member in members) + member.GenerateDocComment (builder); } public TypeSpec GetAttributeCoClass () @@ -1264,44 +1086,6 @@ namespace Mono.CSharp return ifaces; } - TypeSpec[] GetNormalPartialBases () - { - var ifaces = new List (0); - if (iface_exprs != null) - ifaces.AddRange (iface_exprs); - - foreach (var part in partial_parts) { - FullNamedExpression new_base_class; - var new_ifaces = part.ResolveBaseTypes (out new_base_class); - if (new_base_class != null) { - if (base_type_expr != null && part.base_type != base_type) { - Report.SymbolRelatedToPreviousError (new_base_class.Location, ""); - Report.Error (263, part.Location, - "Partial declarations of `{0}' must not specify different base classes", - part.GetSignatureForError ()); - } else { - base_type_expr = new_base_class; - base_type = part.base_type; - } - } - - if (new_ifaces == null) - continue; - - foreach (var iface in new_ifaces) { - if (ifaces.Contains (iface)) - continue; - - ifaces.Add (iface); - } - } - - if (ifaces.Count == 0) - return null; - - return ifaces.ToArray (); - } - // // Checks that some operators come in pairs: // == and != @@ -1314,26 +1098,28 @@ namespace Mono.CSharp void CheckPairedOperators () { bool has_equality_or_inequality = false; - var operators = this.operators.ToArray (); - bool[] has_pair = new bool[operators.Length]; + List found_matched = new List (); - for (int i = 0; i < operators.Length; ++i) { - if (operators[i] == null) + for (int i = 0; i < members.Count; ++i) { + var o_a = members[i] as Operator; + if (o_a == null) continue; - Operator o_a = (Operator) operators[i]; - Operator.OpType o_type = o_a.OperatorType; + var o_type = o_a.OperatorType; if (o_type == Operator.OpType.Equality || o_type == Operator.OpType.Inequality) has_equality_or_inequality = true; - Operator.OpType matching_type = o_a.GetMatchingOperator (); + if (found_matched.Contains (o_type)) + continue; + + var matching_type = o_a.GetMatchingOperator (); if (matching_type == Operator.OpType.TOP) { - operators[i] = null; continue; } - for (int ii = 0; ii < operators.Length; ++ii) { - Operator o_b = (Operator) operators[ii]; + bool pair_found = false; + for (int ii = i + 1; ii < members.Count; ++ii) { + var o_b = members[ii] as Operator; if (o_b == null || o_b.OperatorType != matching_type) continue; @@ -1343,31 +1129,24 @@ namespace Mono.CSharp if (!TypeSpecComparer.Equals (o_a.ParameterTypes, o_b.ParameterTypes)) continue; - operators[i] = null; - - // - // Used to ignore duplicate user conversions - // - has_pair[ii] = true; + found_matched.Add (matching_type); + pair_found = true; + break; } - } - - for (int i = 0; i < operators.Length; ++i) { - if (operators[i] == null || has_pair[i]) - continue; - Operator o = (Operator) operators [i]; - Report.Error (216, o.Location, - "The operator `{0}' requires a matching operator `{1}' to also be defined", - o.GetSignatureForError (), Operator.GetName (o.GetMatchingOperator ())); + if (!pair_found) { + Report.Error (216, o_a.Location, + "The operator `{0}' requires a matching operator `{1}' to also be defined", + o_a.GetSignatureForError (), Operator.GetName (matching_type)); + } } if (has_equality_or_inequality) { - if (Methods == null || !HasEquals) + if (!HasEquals) Report.Warning (660, 2, Location, "`{0}' defines operator == or operator != but does not override Object.Equals(object o)", GetSignatureForError ()); - if (Methods == null || !HasGetHashCode) + if (!HasGetHashCode) Report.Warning (661, 2, Location, "`{0}' defines operator == or operator != but does not override Object.GetHashCode()", GetSignatureForError ()); } @@ -1553,7 +1332,7 @@ namespace Mono.CSharp block.AddStatement (statement); proxy_method.Block = block; - methods.Add (proxy_method); + members.Add (proxy_method); proxy_method.Define (); hoisted_base_call_proxies.Add (method, proxy_method); @@ -1565,8 +1344,52 @@ namespace Mono.CSharp protected bool DefineBaseTypes () { iface_exprs = ResolveBaseTypes (out base_type_expr); - if (partial_parts != null) { - iface_exprs = GetNormalPartialBases (); + bool set_base_type; + + if (IsPartialPart) { + set_base_type = false; + + if (base_type_expr != null) { + if (PartialContainer.base_type_expr != null && PartialContainer.base_type != base_type) { + Report.SymbolRelatedToPreviousError (base_type_expr.Location, ""); + Report.Error (263, Location, + "Partial declarations of `{0}' must not specify different base classes", + GetSignatureForError ()); + } else { + PartialContainer.base_type_expr = base_type_expr; + PartialContainer.base_type = base_type; + set_base_type = true; + } + } + + if (iface_exprs != null) { + if (PartialContainer.iface_exprs == null) + PartialContainer.iface_exprs = iface_exprs; + else { + var ifaces = new List (PartialContainer.iface_exprs); + foreach (var iface_partial in iface_exprs) { + if (ifaces.Contains (iface_partial)) + continue; + + ifaces.Add (iface_partial); + } + + PartialContainer.iface_exprs = ifaces.ToArray (); + } + } + + PartialContainer.members.AddRange (members); + if (containers != null) { + if (PartialContainer.containers == null) + PartialContainer.containers = new List (); + + PartialContainer.containers.AddRange (containers); + } + + members_defined = members_defined_ok = true; + caching_flags |= Flags.CloseTypeCreated; + } else { + set_base_type = true; } var cycle = CheckRecursiveDefinition (this); @@ -1625,13 +1448,15 @@ namespace Mono.CSharp return true; } - if (base_type != null) { - spec.BaseType = base_type; + if (set_base_type) { + if (base_type != null) { + spec.BaseType = base_type; - // Set base type after type creation - TypeBuilder.SetParent (base_type.GetMetaInfo ()); - } else { - TypeBuilder.SetParent (null); + // Set base type after type creation + TypeBuilder.SetParent (base_type.GetMetaInfo ()); + } else { + TypeBuilder.SetParent (null); + } } return true; @@ -1639,34 +1464,20 @@ namespace Mono.CSharp public override void DefineConstants () { - if (constants != null) { - foreach (Const c in constants) { - c.DefineValue (); - } - } + foreach (var member in members) { + var pm = member as IParametersMember; + if (pm != null) { - if (instance_constructors != null) { - foreach (MethodCore m in instance_constructors) { - var p = m.ParameterInfo; - if (!p.IsEmpty) { - p.ResolveDefaultValues (m); - } - } - } + var p = pm.Parameters; + if (p.IsEmpty) + continue; - if (methods != null) { - foreach (MethodCore m in methods) { - var p = m.ParameterInfo; - if (!p.IsEmpty) { - p.ResolveDefaultValues (m); - } + ((ParametersCompiled) p).ResolveDefaultValues (member); } - } - if (indexers != null) { - foreach (Indexer i in indexers) { - i.ParameterInfo.ResolveDefaultValues (i); - } + var c = member as Const; + if (c != null) + c.DefineValue (); } base.DefineConstants (); @@ -1683,21 +1494,15 @@ namespace Mono.CSharp if (error) return false; - if (!CreateTypeBuilder ()) { - error = true; - return false; - } - - if (partial_parts != null) { - foreach (var part in partial_parts) { - part.spec = spec; - part.current_type = current_type; - part.TypeBuilder = TypeBuilder; - part.all_type_parameters = all_type_parameters; - part.all_tp_builders = all_tp_builders; - part.members_defined = true; - part.is_defined = true; - part.error = error; + if (IsPartialPart) { + spec = PartialContainer.spec; + TypeBuilder = PartialContainer.TypeBuilder; + all_tp_builders = PartialContainer.all_tp_builders; + all_type_parameters = PartialContainer.all_type_parameters; + } else { + if (!CreateTypeBuilder ()) { + error = true; + return false; } } @@ -1708,7 +1513,7 @@ namespace Mono.CSharp { DefineBaseTypes (); - ResolveTypeParameters (); + DoResolveTypeParameters (); } // @@ -1746,24 +1551,11 @@ namespace Mono.CSharp } } - bool ResolveTypeParameters () + public override void RemoveContainer (TypeContainer cont) { - if (!DoResolveTypeParameters ()) - return false; - - if (compiler_generated != null) { - foreach (CompilerGeneratedClass c in compiler_generated) - if (!c.ResolveTypeParameters ()) - return false; - } - - return true; - } - - public override void RemoveContainer (TypeContainer next_part) - { - base.RemoveContainer (next_part); - Cache.Remove (next_part.Basename); + base.RemoveContainer (cont); + Members.Remove (cont); + Cache.Remove (cont.Basename); } protected virtual bool DoResolveTypeParameters () @@ -1772,9 +1564,6 @@ namespace Mono.CSharp if (tparams == null) return true; - if (PartialContainer != this) - throw new InternalErrorException (); - var base_context = new BaseContext (this); for (int i = 0; i < tparams.Count; ++i) { var tp = tparams[i]; @@ -1785,9 +1574,8 @@ namespace Mono.CSharp } } - if (partial_parts != null) { - foreach (var part in partial_parts) - UpdateTypeParameterConstraints (part); + if (IsPartialPart) { + PartialContainer.UpdateTypeParameterConstraints (this); } return true; @@ -1842,6 +1630,8 @@ namespace Mono.CSharp protected virtual bool DoDefineMembers () { + Debug.Assert (!IsPartialPart); + if (iface_exprs != null) { foreach (var iface_type in iface_exprs) { if (iface_type == null) @@ -1922,37 +1712,57 @@ namespace Mono.CSharp } } - DefineContainerMembers (constants); - DefineContainerMembers (fields); - if (Kind == MemberKind.Struct || Kind == MemberKind.Class) { pending = PendingImplementation.GetPendingImplementations (this); + } - if (requires_delayed_unmanagedtype_check) { - requires_delayed_unmanagedtype_check = false; - foreach (FieldBase f in fields) { - if (f.MemberType != null && f.MemberType.IsPointer) - TypeManager.VerifyUnmanaged (Module, f.MemberType, f.Location); - } + var count = members.Count; + for (int i = 0; i < count; ++i) { + var mc = members[i] as InterfaceMemberBase; + if (mc == null || !mc.IsExplicitImpl) + continue; + + try { + mc.Define (); + } catch (Exception e) { + throw new InternalErrorException (mc, e); + } + } + + for (int i = 0; i < count; ++i) { + var mc = members[i] as InterfaceMemberBase; + if (mc != null && mc.IsExplicitImpl) + continue; + + if (members[i] is TypeContainer) + continue; + + try { + members[i].Define (); + } catch (Exception e) { + throw new InternalErrorException (members[i], e); } } - - // - // Constructors are not in the defined_names array - // - DefineContainerMembers (instance_constructors); - - DefineContainerMembers (events); - DefineContainerMembers (ordered_explicit_member_list); - DefineContainerMembers (ordered_member_list); - if (operators != null) { - DefineContainerMembers (operators); + if (HasOperators) { CheckPairedOperators (); } + if (requires_delayed_unmanagedtype_check) { + requires_delayed_unmanagedtype_check = false; + foreach (var member in members) { + var f = member as Field; + if (f != null && f.MemberType != null && f.MemberType.IsPointer) + TypeManager.VerifyUnmanaged (Module, f.MemberType, f.Location); + } + } + ComputeIndexerName(); - CheckEqualsAndGetHashCode(); + + if (HasEquals && !HasGetHashCode) { + Report.Warning (659, 3, Location, + "`{0}' overrides Object.Equals(object) but does not override Object.GetHashCode()", GetSignatureForError ()); + } if (Kind == MemberKind.Interface && iface_exprs != null) { MemberCache.RemoveHiddenMembers (spec); @@ -1961,59 +1771,34 @@ namespace Mono.CSharp return true; } - protected virtual void DefineContainerMembers (System.Collections.IList mcal) // IList - { - if (mcal != null) { - for (int i = 0; i < mcal.Count; ++i) { - MemberCore mc = (MemberCore) mcal[i]; - try { - mc.Define (); - } catch (Exception e) { - throw new InternalErrorException (mc, e); - } - } - } - } - - protected virtual void ComputeIndexerName () + void ComputeIndexerName () { + var indexers = MemberCache.FindMembers (spec, MemberCache.IndexerNameAlias, true); if (indexers == null) return; string class_indexer_name = null; + has_normal_indexers = true; // - // If there's both an explicit and an implicit interface implementation, the - // explicit one actually implements the interface while the other one is just - // a normal indexer. See bug #37714. + // Check normal indexers for consistent name, explicit interface implementation + // indexers are ignored // - - // Invariant maintained by AddIndexer(): All explicit interface indexers precede normal indexers - foreach (Indexer i in indexers) { - if (i.InterfaceType != null) { - if (seen_normal_indexers) - throw new Exception ("Internal Error: 'Indexers' array not sorted properly."); - continue; - } - - seen_normal_indexers = true; - + foreach (var indexer in indexers) { if (class_indexer_name == null) { - class_indexer_name = i.ShortName; + indexer_name = class_indexer_name = indexer.Name; continue; } - if (i.ShortName != class_indexer_name) - Report.Error (668, i.Location, "Two indexers have different names; the IndexerName attribute must be used with the same name on every indexer within a type"); + if (indexer.Name != class_indexer_name) + Report.Error (668, ((Indexer)indexer.MemberDefinition).Location, + "Two indexers have different names; the IndexerName attribute must be used with the same name on every indexer within a type"); } - - if (class_indexer_name != null) - indexer_name = class_indexer_name; } void EmitIndexerName () { - if (!seen_normal_indexers) + if (!has_normal_indexers) return; var ctor = Module.PredefinedMembers.DefaultMemberAttributeCtor.Get (); @@ -2027,118 +1812,80 @@ namespace Mono.CSharp TypeBuilder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); } - protected virtual void CheckEqualsAndGetHashCode () - { - if (methods == null) - return; - - if (HasEquals && !HasGetHashCode) { - Report.Warning (659, 3, this.Location, "`{0}' overrides Object.Equals(object) but does not override Object.GetHashCode()", this.GetSignatureForError ()); - } - } - - // Indicated whether container has StructLayout attribute set Explicit - public bool HasExplicitLayout { - get { return (caching_flags & Flags.HasExplicitLayout) != 0; } - set { caching_flags |= Flags.HasExplicitLayout; } - } - - public bool HasStructLayout { - get { return (caching_flags & Flags.HasStructLayout) != 0; } - set { caching_flags |= Flags.HasStructLayout; } - } - - public MemberCache MemberCache { - get { - return spec.MemberCache; - } - } - - void CheckMemberUsage (List al, string member_type) - { - if (al == null) - return; - - foreach (MemberCore mc in al) { - if ((mc.ModFlags & Modifiers.AccessibilityMask) != Modifiers.PRIVATE) - continue; - - if ((mc.ModFlags & Modifiers.PARTIAL) != 0) - continue; - - if (!mc.IsUsed && (mc.caching_flags & Flags.Excluded) == 0) { - Report.Warning (169, 3, mc.Location, "The private {0} `{1}' is never used", member_type, mc.GetSignatureForError ()); - } - } - } - public override void VerifyMembers () { // // Check for internal or private fields that were never assigned // - if (Report.WarningLevel >= 3) { - if (Compiler.Settings.EnhancedWarnings) { - CheckMemberUsage (properties, "property"); - CheckMemberUsage (methods, "method"); - CheckMemberUsage (constants, "constant"); - } - - if (fields != null){ - bool is_type_exposed = Kind == MemberKind.Struct || IsExposedFromAssembly (); - foreach (FieldBase f in fields) { - if ((f.ModFlags & Modifiers.AccessibilityMask) != Modifiers.PRIVATE) { - if (is_type_exposed) - continue; - - f.SetIsUsed (); - } - - if (!f.IsUsed){ - if ((f.caching_flags & Flags.IsAssigned) == 0) - Report.Warning (169, 3, f.Location, "The private field `{0}' is never used", f.GetSignatureForError ()); - else { - Report.Warning (414, 3, f.Location, "The private field `{0}' is assigned but its value is never used", - f.GetSignatureForError ()); - } - continue; - } - - if ((f.caching_flags & Flags.IsAssigned) != 0) - continue; - + if (!IsCompilerGenerated && Report.WarningLevel >= 3) { + bool is_type_exposed = Kind == MemberKind.Struct || IsExposedFromAssembly (); + foreach (var member in members) { + if (member is Event) { // - // Only report 649 on level 4 + // An event can be assigned from same class only, so we can report + // this warning for all accessibility modes // - if (Report.WarningLevel < 4) - continue; + if (!member.IsUsed) + Report.Warning (67, 3, member.Location, "The event `{0}' is never used", member.GetSignatureForError ()); - // - // Don't be pendatic over serializable attributes - // - if (f.OptAttributes != null || PartialContainer.HasStructLayout) + continue; + } + + if ((member.ModFlags & Modifiers.AccessibilityMask) != Modifiers.PRIVATE) { + if (is_type_exposed) continue; - - Constant c = New.Constantify (f.MemberType, f.Location); - string value; - if (c != null) { - value = c.GetValueAsLiteral (); - } else if (TypeSpec.IsReferenceType (f.MemberType)) { - value = "null"; - } else { - // Ignore this warning for struct value fields (they are always initialized) - if (f.MemberType.IsStruct) - continue; - value = null; + member.SetIsUsed (); + } + + var f = member as Field; + if (f == null) + continue; + + if (!member.IsUsed) { + if ((member.caching_flags & Flags.IsAssigned) == 0) { + Report.Warning (169, 3, member.Location, "The private field `{0}' is never used", member.GetSignatureForError ()); + } else { + Report.Warning (414, 3, member.Location, "The private field `{0}' is assigned but its value is never used", + member.GetSignatureForError ()); } + continue; + } - if (value != null) - value = " `" + value + "'"; + if ((f.caching_flags & Flags.IsAssigned) != 0) + continue; - Report.Warning (649, 4, f.Location, "Field `{0}' is never assigned to, and will always have its default value{1}", - f.GetSignatureForError (), value); + // + // Only report 649 on level 4 + // + if (Report.WarningLevel < 4) + continue; + + // + // Don't be pendatic over serializable attributes + // + if (f.OptAttributes != null || PartialContainer.HasStructLayout) + continue; + + Constant c = New.Constantify (f.MemberType, f.Location); + string value; + if (c != null) { + value = c.GetValueAsLiteral (); + } else if (TypeSpec.IsReferenceType (f.MemberType)) { + value = "null"; + } else { + // Ignore this warning for struct value fields (they are always initialized) + if (f.MemberType.IsStruct) + continue; + + value = null; } + + if (value != null) + value = " `" + value + "'"; + + Report.Warning (649, 4, f.Location, "Field `{0}' is never assigned to, and will always have its default value{1}", + f.GetSignatureForError (), value); } } @@ -2147,6 +1894,9 @@ namespace Mono.CSharp public override void Emit () { + if (OptAttributes != null) + OptAttributes.Emit (); + if (!IsTopLevel) { MemberSpec candidate; bool overrides = false; @@ -2205,99 +1955,41 @@ namespace Mono.CSharp #endif base.Emit (); + + for (int i = 0; i < members.Count; i++) + members[i].Emit (); + + EmitIndexerName (); + CheckAttributeClsCompliance (); + + if (pending != null) + pending.VerifyPendingMethods (); } - // TODO: move to ClassOrStruct - void EmitConstructors () + + void CheckAttributeClsCompliance () { - if (instance_constructors == null) + if (!spec.IsAttribute || !IsExposedFromAssembly () || !Compiler.Settings.VerifyClsCompliance || !IsClsComplianceRequired ()) return; - if (spec.IsAttribute && IsExposedFromAssembly () && Compiler.Settings.VerifyClsCompliance && IsClsComplianceRequired ()) { - bool has_compliant_args = false; - - foreach (Constructor c in instance_constructors) { - try { - c.Emit (); - } - catch (Exception e) { - throw new InternalErrorException (c, e); - } - - if (has_compliant_args) - continue; + foreach (var m in members) { + var c = m as Constructor; + if (c == null) + continue; - has_compliant_args = c.HasCompliantArgs; - } - if (!has_compliant_args) - Report.Warning (3015, 1, Location, "`{0}' has no accessible constructors which use only CLS-compliant types", GetSignatureForError ()); - } else { - foreach (Constructor c in instance_constructors) { - try { - c.Emit (); - } - catch (Exception e) { - throw new InternalErrorException (c, e); - } - } + if (c.HasCompliantArgs) + return; } + + Report.Warning (3015, 1, Location, "`{0}' has no accessible constructors which use only CLS-compliant types", GetSignatureForError ()); } - /// - /// Emits the code, this step is performed after all - /// the types, enumerations, constructors - /// - public override void EmitContainer () + public sealed override void EmitContainer () { if ((caching_flags & Flags.CloseTypeCreated) != 0) return; - if (OptAttributes != null) - OptAttributes.Emit (); - Emit (); - - EmitConstructors (); - - if (constants != null) - foreach (Const con in constants) - con.Emit (); - - if (default_static_constructor != null) - default_static_constructor.Emit (); - - if (operators != null) - foreach (Operator o in operators) - o.Emit (); - - if (properties != null) - foreach (Property p in properties) - p.Emit (); - - if (indexers != null) { - foreach (Indexer indx in indexers) - indx.Emit (); - EmitIndexerName (); - } - - if (events != null){ - foreach (Event e in Events) - e.Emit (); - } - - if (methods != null) { - for (int i = 0; i < methods.Count; ++i) - ((MethodOrOperator) methods [i]).Emit (); - } - - if (fields != null) - foreach (FieldBase f in fields) - f.Emit (); - - if (pending != null) - pending.VerifyPendingMethods (); - - base.EmitContainer (); } public override void CloseContainer () @@ -2319,12 +2011,10 @@ namespace Mono.CSharp try { caching_flags |= Flags.CloseTypeCreated; TypeBuilder.CreateType (); - } catch (TypeLoadException){ + } catch (TypeLoadException) { // // This is fine, the code still created the type // -// Report.Warning (-20, "Exception while creating class: " + TypeBuilder.Name); -// Console.WriteLine (e.Message); } catch (Exception e) { throw new InternalErrorException (this, e); } @@ -2334,16 +2024,6 @@ namespace Mono.CSharp containers = null; initialized_fields = null; initialized_static_fields = null; - constants = null; - ordered_explicit_member_list = null; - ordered_member_list = null; - methods = null; - events = null; - indexers = null; - operators = null; - compiler_generated = null; - default_constructor = null; - default_static_constructor = null; type_bases = null; OptAttributes = null; } @@ -2424,10 +2104,6 @@ namespace Mono.CSharp return ok; } - public Constructor DefaultStaticConstructor { - get { return default_static_constructor; } - } - protected override bool VerifyClsCompliance () { if (!base.VerifyClsCompliance ()) @@ -2488,7 +2164,7 @@ namespace Mono.CSharp public override bool IsClsComplianceRequired () { - if (PartialContainer != this) + if (IsPartialPart) return PartialContainer.IsClsComplianceRequired (); return base.IsClsComplianceRequired (); @@ -2552,21 +2228,12 @@ namespace Mono.CSharp TypeSpec LookupNestedTypeInHierarchy (string name, int arity) { - // TODO: GenericMethod only - if (PartialContainer == null) - return null; - // Has any nested type // Does not work, because base type can have //if (PartialContainer.Types == null) // return null; var container = PartialContainer.CurrentType; - - // Is not Root container - if (container == null) - return null; - return MemberCache.FindNestedType (container, name, arity); } @@ -2624,14 +2291,20 @@ namespace Mono.CSharp { } - protected override bool AddToContainer (MemberCore symbol, string name) + protected override TypeAttributes TypeAttr { + get { + return has_static_constructor ? base.TypeAttr : base.TypeAttr | TypeAttributes.BeforeFieldInit; + } + } + + public override void AddNameToContainer (MemberCore symbol, string name) { if (!(symbol is Constructor) && symbol.MemberName.Name == MemberName.Name) { if (symbol is TypeParameter) { Report.Error (694, symbol.Location, "Type parameter `{0}' has same name as containing type, or method", symbol.GetSignatureForError ()); - return false; + return; } InterfaceMemberBase imb = symbol as InterfaceMemberBase; @@ -2639,26 +2312,17 @@ namespace Mono.CSharp Report.SymbolRelatedToPreviousError (this); Report.Error (542, symbol.Location, "`{0}': member names cannot be the same as their enclosing type", symbol.GetSignatureForError ()); - return false; + return; } } - return base.AddToContainer (symbol, name); + base.AddNameToContainer (symbol, name); } public override void VerifyMembers () { base.VerifyMembers (); - if ((events != null) && Report.WarningLevel >= 3) { - foreach (Event e in events){ - // Note: The event can be assigned from same class only, so we can report - // this warning for all accessibility modes - if ((e.caching_flags & Flags.IsUsed) == 0) - Report.Warning (67, 3, e.Location, "The event `{0}' is never used", e.GetSignatureForError ()); - } - } - if (containers != null) { foreach (var t in containers) t.VerifyMembers (); @@ -2689,7 +2353,7 @@ namespace Mono.CSharp /// /// Defines the default constructors /// - protected void DefineDefaultConstructor (bool is_static) + protected Constructor DefineDefaultConstructor (bool is_static) { // The default instance constructor is public // If the class is abstract, the default constructor is protected @@ -2708,6 +2372,7 @@ namespace Mono.CSharp AddConstructor (c, true); c.Block = new ToplevelBlock (Compiler, ParametersCompiled.EmptyReadOnlyParameters, Location); + return c; } protected override bool DoDefineMembers () @@ -2716,17 +2381,14 @@ namespace Mono.CSharp base.DoDefineMembers (); - if (default_static_constructor != null) - default_static_constructor.Define (); - return true; } public override void Emit () { - if (default_static_constructor == null && PartialContainer.HasStaticFieldInitializer) { - DefineDefaultConstructor (true); - default_static_constructor.Define (); + if (!has_static_constructor && HasStaticFieldInitializer) { + var c = DefineDefaultConstructor (true); + c.Define (); } base.Emit (); @@ -2741,15 +2403,6 @@ namespace Mono.CSharp } } } - - protected override TypeAttributes TypeAttr { - get { - if (default_static_constructor == null) - return base.TypeAttr | TypeAttributes.BeforeFieldInit; - - return base.TypeAttr; - } - } } @@ -2826,46 +2479,6 @@ namespace Mono.CSharp } } - protected override void DefineContainerMembers (System.Collections.IList list) - { - if (list == null) - return; - - if (!IsStatic) { - base.DefineContainerMembers (list); - return; - } - - foreach (MemberCore m in list) { - if (m is Operator) { - Report.Error (715, m.Location, "`{0}': Static classes cannot contain user-defined operators", m.GetSignatureForError ()); - continue; - } - - if (m is Destructor) { - Report.Error (711, m.Location, "`{0}': Static classes cannot contain destructor", GetSignatureForError ()); - continue; - } - - if (m is Indexer) { - Report.Error (720, m.Location, "`{0}': cannot declare indexers in a static class", m.GetSignatureForError ()); - continue; - } - - if ((m.ModFlags & Modifiers.STATIC) != 0 || m is Enum || m is Delegate) - continue; - - if (m is Constructor) { - Report.Error (710, m.Location, "`{0}': Static classes cannot have instance constructors", GetSignatureForError ()); - continue; - } - - Report.Error (708, m.Location, "`{0}': cannot declare instance members in a static class", m.GetSignatureForError ()); - } - - base.DefineContainerMembers (list); - } - protected override bool DoDefineMembers () { if ((ModFlags & Modifiers.ABSTRACT) == Modifiers.ABSTRACT && (ModFlags & (Modifiers.SEALED | Modifiers.STATIC)) != 0) { @@ -2876,8 +2489,37 @@ namespace Mono.CSharp Report.Error (441, Location, "`{0}': a class cannot be both static and sealed", GetSignatureForError ()); } - if (InstanceConstructors == null && !IsStatic) - DefineDefaultConstructor (false); + if (IsStatic) { + foreach (var m in Members) { + if (m is Operator) { + Report.Error (715, m.Location, "`{0}': Static classes cannot contain user-defined operators", m.GetSignatureForError ()); + continue; + } + + if (m is Destructor) { + Report.Error (711, m.Location, "`{0}': Static classes cannot contain destructor", GetSignatureForError ()); + continue; + } + + if (m is Indexer) { + Report.Error (720, m.Location, "`{0}': cannot declare indexers in a static class", m.GetSignatureForError ()); + continue; + } + + if ((m.ModFlags & Modifiers.STATIC) != 0 || m is TypeContainer) + continue; + + if (m is Constructor) { + Report.Error (710, m.Location, "`{0}': Static classes cannot have instance constructors", GetSignatureForError ()); + continue; + } + + Report.Error (708, m.Location, "`{0}': cannot declare instance members in a static class", m.GetSignatureForError ()); + } + } else { + if (!PartialContainer.HasInstanceConstructor) + DefineDefaultConstructor (false); + } return base.DoDefineMembers (); } @@ -3031,13 +2673,13 @@ namespace Mono.CSharp // set CharSet, its value has to be propagated to compiler generated // fixed types // - if (a.Type == pa.StructLayout && Fields != null) { + if (a.Type == pa.StructLayout) { var value = a.GetNamedValue ("CharSet"); if (value == null) return; - for (int i = 0; i < Fields.Count; ++i) { - FixedField ff = Fields [i] as FixedField; + for (int i = 0; i < Members.Count; ++i) { + FixedField ff = Members [i] as FixedField; if (ff == null) continue; @@ -3046,16 +2688,17 @@ namespace Mono.CSharp } } - bool CheckStructCycles (Struct s) + bool CheckStructCycles () { - if (s.Fields == null) - return true; - - if (s.InTransit) + if (InTransit) return false; - s.InTransit = true; - foreach (FieldBase field in s.Fields) { + InTransit = true; + foreach (var member in Members) { + var field = member as Field; + if (field == null) + continue; + TypeSpec ftype = field.Spec.MemberType; if (!ftype.IsStruct) continue; @@ -3075,7 +2718,7 @@ namespace Mono.CSharp // // Static fields of exactly same type are allowed // - if (field.IsStatic && ftype == s.CurrentType) + if (field.IsStatic && ftype == CurrentType) continue; if (!CheckFieldTypeCycle (ftype)) { @@ -3086,22 +2729,22 @@ namespace Mono.CSharp } } - s.InTransit = false; + InTransit = false; return true; } - bool CheckFieldTypeCycle (TypeSpec ts) + static bool CheckFieldTypeCycle (TypeSpec ts) { var fts = ts.MemberDefinition as Struct; if (fts == null) return true; - return CheckStructCycles (fts); + return fts.CheckStructCycles (); } public override void Emit () { - CheckStructCycles (this); + CheckStructCycles (); base.Emit (); } @@ -3120,10 +2763,14 @@ namespace Mono.CSharp return false; } - if (fields != null) { + if (first_nonstatic_field != null) { requires_delayed_unmanagedtype_check = true; - foreach (FieldBase f in fields) { + foreach (var member in Members) { + var f = member as Field; + if (f == null) + continue; + if (f.IsStatic) continue; @@ -3307,7 +2954,7 @@ namespace Mono.CSharp // // If true, this is an explicit interface implementation // - public bool IsExplicitImpl; + public readonly bool IsExplicitImpl; protected bool is_external_implementation; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs index d48092ca86..7f91ce5eac 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs @@ -63,12 +63,12 @@ namespace Mono.CSharp { if (declarators != null) { var t = new TypeExpression (MemberType, TypeExpression.Location); - int index = Parent.PartialContainer.Constants.IndexOf (this); foreach (var d in declarators) { var c = new Const (Parent, t, ModFlags & ~Modifiers.STATIC, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); c.initializer = d.Initializer; ((ConstInitializer) c.initializer).Name = d.Name.Value; - Parent.PartialContainer.Constants.Insert (++index, c); + c.Define (); + Parent.PartialContainer.Members.Add (c); } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index 284d15676a..20cc531a0f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -88,7 +88,7 @@ namespace Mono.CSharp /// /// Controls the verbosity of the errors produced by the parser /// - static public int yacc_verbose_flag; + int yacc_verbose_flag; /// /// Used by the interactive shell, flags whether EOF was reached @@ -1075,17 +1075,17 @@ namespace Mono.CSharp //t "nested_from_clause : FROM identifier_inside_body IN expression", //t "nested_from_clause : FROM type identifier_inside_body IN expression", //t "$$99 :", -//t "from_clause : FROM identifier_inside_body IN $$99 expression", +//t "from_clause : FROM identifier_inside_body IN $$99 expression_or_error", //t "$$100 :", -//t "from_clause : FROM type identifier_inside_body IN $$100 expression", +//t "from_clause : FROM type identifier_inside_body IN $$100 expression_or_error", //t "query_body : opt_query_body_clauses select_or_group_clause opt_query_continuation", //t "query_body : opt_query_body_clauses COMPLETE_COMPLETION", //t "query_body : error", //t "$$101 :", -//t "select_or_group_clause : SELECT $$101 expression", +//t "select_or_group_clause : SELECT $$101 expression_or_error", //t "$$102 :", //t "$$103 :", -//t "select_or_group_clause : GROUP $$102 expression $$103 BY expression", +//t "select_or_group_clause : GROUP $$102 expression_or_error $$103 BY expression_or_error", //t "opt_query_body_clauses :", //t "opt_query_body_clauses : query_body_clauses", //t "query_body_clauses : query_body_clause", @@ -1096,17 +1096,17 @@ namespace Mono.CSharp //t "query_body_clause : join_clause", //t "query_body_clause : orderby_clause", //t "$$104 :", -//t "let_clause : LET identifier_inside_body ASSIGN $$104 expression", +//t "let_clause : LET identifier_inside_body ASSIGN $$104 expression_or_error", //t "$$105 :", -//t "where_clause : WHERE $$105 expression", +//t "where_clause : WHERE $$105 expression_or_error", //t "$$106 :", //t "$$107 :", //t "$$108 :", -//t "join_clause : JOIN identifier_inside_body IN $$106 expression ON $$107 expression EQUALS $$108 expression opt_join_into", +//t "join_clause : JOIN identifier_inside_body IN $$106 expression_or_error ON $$107 expression_or_error EQUALS $$108 expression_or_error opt_join_into", //t "$$109 :", //t "$$110 :", //t "$$111 :", -//t "join_clause : JOIN type identifier_inside_body IN $$109 expression ON $$110 expression EQUALS $$111 expression opt_join_into", +//t "join_clause : JOIN type identifier_inside_body IN $$109 expression_or_error ON $$110 expression_or_error EQUALS $$111 expression_or_error opt_join_into", //t "opt_join_into :", //t "opt_join_into : INTO identifier_inside_body", //t "$$112 :", @@ -3464,11 +3464,11 @@ case 766: case_766(); break; case 767: -#line 5071 "cs-parser.jay" +#line 5073 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 768: -#line 5072 "cs-parser.jay" +#line 5074 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 769: @@ -3490,7 +3490,7 @@ case 776: case_776(); break; case 777: -#line 5147 "cs-parser.jay" +#line 5149 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); } @@ -3514,13 +3514,13 @@ case 784: case_784(); break; case 785: -#line 5198 "cs-parser.jay" +#line 5200 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; case 786: -#line 5202 "cs-parser.jay" +#line 5204 "cs-parser.jay" { yyVal = new SwitchSection ((List) yyVals[-2+yyTop], current_block); } @@ -3535,7 +3535,7 @@ case 789: case_789(); break; case 790: -#line 5231 "cs-parser.jay" +#line 5233 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } @@ -3559,25 +3559,25 @@ case 800: case_800(); break; case 801: -#line 5291 "cs-parser.jay" +#line 5293 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 802: -#line 5299 "cs-parser.jay" +#line 5301 "cs-parser.jay" { ((For) yyVals[-2+yyTop]).Initializer = (Statement) yyVals[-1+yyTop]; } break; case 803: -#line 5303 "cs-parser.jay" +#line 5305 "cs-parser.jay" { ((For) yyVals[-5+yyTop]).Condition = (BooleanExpression) yyVals[-1+yyTop]; } break; case 804: -#line 5307 "cs-parser.jay" +#line 5309 "cs-parser.jay" { ((For) yyVals[-8+yyTop]).Iterator = (Statement) yyVals[-1+yyTop]; } @@ -3589,7 +3589,7 @@ case 806: case_806(); break; case 807: -#line 5327 "cs-parser.jay" +#line 5329 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 809: @@ -3599,11 +3599,11 @@ case 810: case_810(); break; case 812: -#line 5348 "cs-parser.jay" +#line 5350 "cs-parser.jay" { yyVal = null; } break; case 814: -#line 5353 "cs-parser.jay" +#line 5355 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 818: @@ -3655,7 +3655,7 @@ case 839: case_839(); break; case 842: -#line 5554 "cs-parser.jay" +#line 5556 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } @@ -3676,7 +3676,7 @@ case 847: case_847(); break; case 850: -#line 5603 "cs-parser.jay" +#line 5605 "cs-parser.jay" { yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3685,7 +3685,7 @@ case 851: case_851(); break; case 852: -#line 5622 "cs-parser.jay" +#line 5624 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } @@ -3694,13 +3694,13 @@ case 853: case_853(); break; case 854: -#line 5640 "cs-parser.jay" +#line 5642 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 855: -#line 5647 "cs-parser.jay" +#line 5649 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3709,7 +3709,7 @@ case 856: case_856(); break; case 857: -#line 5657 "cs-parser.jay" +#line 5659 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } @@ -3748,7 +3748,7 @@ case 869: case_869(); break; case 870: -#line 5762 "cs-parser.jay" +#line 5764 "cs-parser.jay" { Error_MissingInitializer (lexer.Location); } @@ -3781,7 +3781,7 @@ case 879: case_879(); break; case 880: -#line 5863 "cs-parser.jay" +#line 5865 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3790,7 +3790,7 @@ case 881: case_881(); break; case 882: -#line 5878 "cs-parser.jay" +#line 5880 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3805,7 +3805,7 @@ case 886: case_886(); break; case 887: -#line 5923 "cs-parser.jay" +#line 5925 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3826,7 +3826,7 @@ case 895: case_895(); break; case 901: -#line 5982 "cs-parser.jay" +#line 5984 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3835,7 +3835,7 @@ case 902: case_902(); break; case 903: -#line 6001 "cs-parser.jay" +#line 6003 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3868,13 +3868,13 @@ case 912: case_912(); break; case 914: -#line 6145 "cs-parser.jay" +#line 6147 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 915: -#line 6152 "cs-parser.jay" +#line 6154 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3895,7 +3895,7 @@ case 922: case_922(); break; case 923: -#line 6198 "cs-parser.jay" +#line 6200 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } @@ -3907,7 +3907,7 @@ case 925: case_925(); break; case 926: -#line 6215 "cs-parser.jay" +#line 6217 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } @@ -3931,13 +3931,13 @@ case 935: case_935(); break; case 943: -#line 6337 "cs-parser.jay" +#line 6339 "cs-parser.jay" { module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; } break; case 944: -#line 6344 "cs-parser.jay" +#line 6346 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; } @@ -3949,13 +3949,13 @@ case 946: case_946(); break; case 947: -#line 6361 "cs-parser.jay" +#line 6363 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); } break; case 948: -#line 6365 "cs-parser.jay" +#line 6367 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3973,25 +3973,25 @@ case 952: case_952(); break; case 954: -#line 6401 "cs-parser.jay" +#line 6403 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; case 956: -#line 6409 "cs-parser.jay" +#line 6411 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 957: -#line 6413 "cs-parser.jay" +#line 6415 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 958: -#line 6420 "cs-parser.jay" +#line 6422 "cs-parser.jay" { yyVal = new List (0); } @@ -4474,7 +4474,7 @@ void case_101() var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var mod = (Modifiers) yyVals[-3+yyTop]; current_field = new Const (current_type, (FullNamedExpression) yyVals[-1+yyTop], mod, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]); - current_container.PartialContainer.AddConstant ((Const) current_field); + current_type.AddMember (current_field); if ((mod & Modifiers.STATIC) != 0) { report.Error (504, current_field.Location, "The constant `{0}' cannot be marked static", current_field.GetSignatureForError ()); @@ -4530,7 +4530,7 @@ void case_113() var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; current_field = new Field (current_type, type, (Modifiers) yyVals[-2+yyTop], new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-3+yyTop]); - current_container.PartialContainer.AddField (current_field); + current_type.AddField (current_field); yyVal = current_field; } @@ -4557,7 +4557,7 @@ void case_115() current_field = new FixedField (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]); - current_container.PartialContainer.AddField (current_field); + current_type.AddField (current_field); } void case_116() @@ -4649,7 +4649,7 @@ void case_139() /* Add it early in the case of body being eof for full ast*/ Method m = (Method) yyVals[0+yyTop]; async_block = (m.ModFlags & Modifiers.ASYNC) != 0; - current_container.PartialContainer.AddMethod (m); + current_type.AddMember (m); } void case_140() @@ -5055,7 +5055,7 @@ void case_185() if (type.Type != null && type.Type.Kind == MemberKind.Void) report.Error (547, GetLocation (yyVals[-3+yyTop]), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); - current_container.PartialContainer.AddProperty ((Property)current_property); + current_type.AddMember (current_property); lbag.AddMember (current_property, GetModifierLocations (), GetLocation (yyVals[0+yyTop])); lexer.PropertyParsing = true; @@ -5086,7 +5086,7 @@ void case_189() current_property = indexer; - current_container.PartialContainer.AddIndexer (indexer); + current_type.AddIndexer (indexer); lbag.AddMember (current_property, GetModifierLocations (), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); if (type.Type != null && type.Type.Kind == MemberKind.Void) @@ -5302,7 +5302,7 @@ void case_224() } /* Note again, checking is done in semantic analysis*/ - current_container.PartialContainer.AddOperator (op); + current_type.AddOperator (op); lbag.AddMember (op, GetModifierLocations (), lbag.GetLocations (decl)); if (yyVals[0+yyTop] == null) { /* Semicolon*/ @@ -5457,7 +5457,7 @@ void case_262() } } - current_container.PartialContainer.AddConstructor (c); + current_type.AddConstructor (c); lbag.AddMember (c, GetModifierLocations (), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); yyVal = c; @@ -5543,7 +5543,7 @@ void case_275() d.DocComment = ConsumeStoredComment (); d.Block = (ToplevelBlock) yyVals[0+yyTop]; - current_container.PartialContainer.AddMethod (d); + current_type.AddMember (d); lbag.AddMember (d, GetModifierLocations (), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[-1+yyTop])); current_local_parameters = null; @@ -5553,7 +5553,7 @@ void case_276() #line 2300 "cs-parser.jay" { current_event_field = new EventField (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], (MemberName) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop]); - current_container.PartialContainer.AddEvent (current_event_field); + current_type.AddMember (current_event_field); if (current_event_field.MemberName.ExplicitInterface != null) { report.Error (71, current_event_field.Location, "`{0}': An explicit interface implementation of an event must use property syntax", @@ -5579,7 +5579,7 @@ void case_278() #line 2327 "cs-parser.jay" { current_event = new EventProperty (current_type, (FullNamedExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-4+yyTop], (MemberName) yyVals[-1+yyTop], (Attributes) yyVals[-5+yyTop]); - current_container.PartialContainer.AddEvent (current_event); + current_type.AddMember (current_event); lbag.AddMember (current_event, GetModifierLocations (), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); lexer.EventParsing = true; @@ -5862,7 +5862,7 @@ void case_320() p.CheckParameters (del); - (current_container.PartialContainer ?? current_container).AddTypeContainer (del); + current_container.AddTypeContainer (del); current_delegate = del; lexer.ConstraintsParsing = true; @@ -7798,12 +7798,14 @@ void case_764() void case_766() #line 5064 "cs-parser.jay" { - yyVal = yyVals[-1+yyTop]; - report.Error (1525, "Unexpected symbol '}', expecting ';'"); - } + yyVal = yyVals[-1+yyTop]; + lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); + report.Error (1525, "Unexpected symbol '}' after statement, expecting ';'"); + lexer.putback ('}'); + } void case_769() -#line 5081 "cs-parser.jay" +#line 5083 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { @@ -7815,7 +7817,7 @@ void case_769() } void case_770() -#line 5094 "cs-parser.jay" +#line 5096 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; ExpressionStatement s; @@ -7825,14 +7827,14 @@ void case_770() } void case_771() -#line 5102 "cs-parser.jay" +#line 5104 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } void case_774() -#line 5116 "cs-parser.jay" +#line 5118 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7842,7 +7844,7 @@ void case_774() } void case_775() -#line 5125 "cs-parser.jay" +#line 5127 "cs-parser.jay" { yyVal = new If ((BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); @@ -7854,7 +7856,7 @@ void case_775() } void case_776() -#line 5135 "cs-parser.jay" +#line 5137 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7863,7 +7865,7 @@ void case_776() } void case_778() -#line 5149 "cs-parser.jay" +#line 5151 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, (List) yyVals[-1+yyTop], GetLocation (yyVals[-7+yyTop])); end_block (GetLocation (yyVals[0+yyTop])); @@ -7871,7 +7873,7 @@ void case_778() } void case_779() -#line 5155 "cs-parser.jay" +#line 5157 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7880,14 +7882,14 @@ void case_779() } void case_780() -#line 5165 "cs-parser.jay" +#line 5167 "cs-parser.jay" { report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); yyVal = new List (); } void case_782() -#line 5174 "cs-parser.jay" +#line 5176 "cs-parser.jay" { var sections = new List (4); @@ -7896,7 +7898,7 @@ void case_782() } void case_783() -#line 5181 "cs-parser.jay" +#line 5183 "cs-parser.jay" { var sections = (List) yyVals[-1+yyTop]; @@ -7905,14 +7907,14 @@ void case_783() } void case_784() -#line 5188 "cs-parser.jay" +#line 5190 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new List (); } void case_787() -#line 5207 "cs-parser.jay" +#line 5209 "cs-parser.jay" { var labels = new List (2); @@ -7921,7 +7923,7 @@ void case_787() } void case_788() -#line 5214 "cs-parser.jay" +#line 5216 "cs-parser.jay" { var labels = (List) (yyVals[-1+yyTop]); labels.Add ((SwitchLabel) yyVals[0+yyTop]); @@ -7930,14 +7932,14 @@ void case_788() } void case_789() -#line 5224 "cs-parser.jay" +#line 5226 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_795() -#line 5243 "cs-parser.jay" +#line 5245 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7947,7 +7949,7 @@ void case_795() } void case_796() -#line 5251 "cs-parser.jay" +#line 5253 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7956,21 +7958,21 @@ void case_796() } void case_797() -#line 5261 "cs-parser.jay" +#line 5263 "cs-parser.jay" { yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_798() -#line 5266 "cs-parser.jay" +#line 5268 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } void case_799() -#line 5271 "cs-parser.jay" +#line 5273 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7979,7 +7981,7 @@ void case_799() } void case_800() -#line 5281 "cs-parser.jay" +#line 5283 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); current_block.IsCompilerGenerated = true; @@ -7989,7 +7991,7 @@ void case_800() } void case_805() -#line 5309 "cs-parser.jay" +#line 5311 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8002,14 +8004,14 @@ void case_805() } void case_806() -#line 5320 "cs-parser.jay" +#line 5322 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = end_block (current_block.StartLocation); } void case_809() -#line 5333 "cs-parser.jay" +#line 5335 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -8018,14 +8020,14 @@ void case_809() } void case_810() -#line 5340 "cs-parser.jay" +#line 5342 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_818() -#line 5364 "cs-parser.jay" +#line 5366 "cs-parser.jay" { var sl = yyVals[-2+yyTop] as StatementList; if (sl == null) { @@ -8040,7 +8042,7 @@ void case_818() } void case_819() -#line 5380 "cs-parser.jay" +#line 5382 "cs-parser.jay" { report.Error (230, GetLocation (yyVals[-3+yyTop]), "Type and identifier are both required in a foreach statement"); @@ -8055,7 +8057,7 @@ void case_819() } void case_820() -#line 5393 "cs-parser.jay" +#line 5395 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8074,7 +8076,7 @@ void case_820() } void case_821() -#line 5410 "cs-parser.jay" +#line 5412 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -8085,7 +8087,7 @@ void case_821() } void case_822() -#line 5419 "cs-parser.jay" +#line 5421 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8098,7 +8100,7 @@ void case_822() } void case_823() -#line 5430 "cs-parser.jay" +#line 5432 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); current_block.IsCompilerGenerated = true; @@ -8113,7 +8115,7 @@ void case_823() } void case_824() -#line 5443 "cs-parser.jay" +#line 5445 "cs-parser.jay" { Foreach f = new Foreach ((Expression) yyVals[-1+yyTop], null, null, null, GetLocation (yyVals[-3+yyTop])); current_block.AddStatement (f); @@ -8123,21 +8125,21 @@ void case_824() } void case_831() -#line 5463 "cs-parser.jay" +#line 5465 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_832() -#line 5471 "cs-parser.jay" +#line 5473 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_833() -#line 5479 "cs-parser.jay" +#line 5481 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); @@ -8145,35 +8147,35 @@ void case_833() } void case_834() -#line 5485 "cs-parser.jay" +#line 5487 "cs-parser.jay" { yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_835() -#line 5490 "cs-parser.jay" +#line 5492 "cs-parser.jay" { yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_836() -#line 5498 "cs-parser.jay" +#line 5500 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_837() -#line 5506 "cs-parser.jay" +#line 5508 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_838() -#line 5514 "cs-parser.jay" +#line 5516 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -8191,7 +8193,7 @@ void case_838() } void case_839() -#line 5530 "cs-parser.jay" +#line 5532 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -8207,28 +8209,28 @@ void case_839() } void case_843() -#line 5556 "cs-parser.jay" +#line 5558 "cs-parser.jay" { yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (Block) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_844() -#line 5561 "cs-parser.jay" +#line 5563 "cs-parser.jay" { yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop]), true), (Block) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_845() -#line 5566 "cs-parser.jay" +#line 5568 "cs-parser.jay" { Error_SyntaxError (1524, yyToken); yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); } void case_846() -#line 5574 "cs-parser.jay" +#line 5576 "cs-parser.jay" { var l = new List (2); @@ -8237,7 +8239,7 @@ void case_846() } void case_847() -#line 5581 "cs-parser.jay" +#line 5583 "cs-parser.jay" { var l = (List) yyVals[-1+yyTop]; @@ -8251,7 +8253,7 @@ void case_847() } void case_851() -#line 5605 "cs-parser.jay" +#line 5607 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch (current_block, GetLocation (yyVals[-4+yyTop])); @@ -8268,7 +8270,7 @@ void case_851() } void case_853() -#line 5624 "cs-parser.jay" +#line 5626 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -8281,14 +8283,14 @@ void case_853() } void case_856() -#line 5652 "cs-parser.jay" +#line 5654 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } void case_858() -#line 5662 "cs-parser.jay" +#line 5664 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8298,7 +8300,7 @@ void case_858() } void case_859() -#line 5670 "cs-parser.jay" +#line 5672 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8307,7 +8309,7 @@ void case_859() } void case_860() -#line 5680 "cs-parser.jay" +#line 5682 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8319,14 +8321,14 @@ void case_860() } void case_861() -#line 5690 "cs-parser.jay" +#line 5692 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_862() -#line 5695 "cs-parser.jay" +#line 5697 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8338,7 +8340,7 @@ void case_862() } void case_863() -#line 5708 "cs-parser.jay" +#line 5710 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8350,14 +8352,14 @@ void case_863() } void case_864() -#line 5718 "cs-parser.jay" +#line 5720 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_865() -#line 5723 "cs-parser.jay" +#line 5725 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8369,7 +8371,7 @@ void case_865() } void case_866() -#line 5733 "cs-parser.jay" +#line 5735 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8379,7 +8381,7 @@ void case_866() } void case_867() -#line 5741 "cs-parser.jay" +#line 5743 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8388,14 +8390,14 @@ void case_867() } void case_869() -#line 5752 "cs-parser.jay" +#line 5754 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); } void case_871() -#line 5764 "cs-parser.jay" +#line 5766 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); @@ -8403,7 +8405,7 @@ void case_871() } void case_872() -#line 5776 "cs-parser.jay" +#line 5778 "cs-parser.jay" { lexer.query_parsing = false; @@ -8417,7 +8419,7 @@ void case_872() } void case_873() -#line 5788 "cs-parser.jay" +#line 5790 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -8429,7 +8431,7 @@ void case_873() } void case_874() -#line 5799 "cs-parser.jay" +#line 5801 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -8439,7 +8441,7 @@ void case_874() } void case_875() -#line 5806 "cs-parser.jay" +#line 5808 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); @@ -8447,7 +8449,7 @@ void case_875() } void case_876() -#line 5815 "cs-parser.jay" +#line 5817 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8457,7 +8459,7 @@ void case_876() } void case_877() -#line 5823 "cs-parser.jay" +#line 5825 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8471,7 +8473,7 @@ void case_877() } void case_878() -#line 5838 "cs-parser.jay" +#line 5840 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8481,7 +8483,7 @@ void case_878() } void case_879() -#line 5846 "cs-parser.jay" +#line 5848 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8495,7 +8497,7 @@ void case_879() } void case_881() -#line 5865 "cs-parser.jay" +#line 5867 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8508,7 +8510,7 @@ void case_881() } void case_883() -#line 5880 "cs-parser.jay" +#line 5882 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8524,7 +8526,7 @@ void case_883() } void case_884() -#line 5897 "cs-parser.jay" +#line 5899 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -8541,14 +8543,14 @@ void case_884() } void case_886() -#line 5913 "cs-parser.jay" +#line 5915 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_888() -#line 5925 "cs-parser.jay" +#line 5927 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8557,7 +8559,7 @@ void case_888() } void case_889() -#line 5932 "cs-parser.jay" +#line 5934 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8567,7 +8569,7 @@ void case_889() } void case_890() -#line 5940 "cs-parser.jay" +#line 5942 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8576,7 +8578,7 @@ void case_890() } void case_891() -#line 5947 "cs-parser.jay" +#line 5949 "cs-parser.jay" { yyVal = new Linq.GroupBy ((Linq.QueryBlock)current_block, (Expression)yyVals[-3+yyTop], linq_clause_blocks.Pop (), (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); @@ -8586,14 +8588,14 @@ void case_891() } void case_895() -#line 5964 "cs-parser.jay" +#line 5966 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_902() -#line 5984 "cs-parser.jay" +#line 5986 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8607,7 +8609,7 @@ void case_902() } void case_904() -#line 6003 "cs-parser.jay" +#line 6005 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8616,7 +8618,7 @@ void case_904() } void case_905() -#line 6013 "cs-parser.jay" +#line 6015 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8626,7 +8628,7 @@ void case_905() } void case_906() -#line 6021 "cs-parser.jay" +#line 6023 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8636,7 +8638,7 @@ void case_906() } void case_907() -#line 6029 "cs-parser.jay" +#line 6031 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8646,7 +8648,7 @@ void case_907() } void case_908() -#line 6037 "cs-parser.jay" +#line 6039 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8686,7 +8688,7 @@ void case_908() } void case_909() -#line 6075 "cs-parser.jay" +#line 6077 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8696,7 +8698,7 @@ void case_909() } void case_910() -#line 6083 "cs-parser.jay" +#line 6085 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8706,7 +8708,7 @@ void case_910() } void case_911() -#line 6091 "cs-parser.jay" +#line 6093 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8716,7 +8718,7 @@ void case_911() } void case_912() -#line 6099 "cs-parser.jay" +#line 6101 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8758,7 +8760,7 @@ void case_912() } void case_916() -#line 6154 "cs-parser.jay" +#line 6156 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8767,7 +8769,7 @@ void case_916() } void case_918() -#line 6165 "cs-parser.jay" +#line 6167 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8776,14 +8778,14 @@ void case_918() } void case_919() -#line 6172 "cs-parser.jay" +#line 6174 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } void case_921() -#line 6181 "cs-parser.jay" +#line 6183 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8792,42 +8794,42 @@ void case_921() } void case_922() -#line 6188 "cs-parser.jay" +#line 6190 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } void case_924() -#line 6200 "cs-parser.jay" +#line 6202 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_925() -#line 6205 "cs-parser.jay" +#line 6207 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_927() -#line 6217 "cs-parser.jay" +#line 6219 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_928() -#line 6222 "cs-parser.jay" +#line 6224 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_930() -#line 6232 "cs-parser.jay" +#line 6234 "cs-parser.jay" { /* query continuation block is not linked with query block but with block*/ /* before. This means each query can use same range variable names for*/ @@ -8845,7 +8847,7 @@ void case_930() } void case_931() -#line 6248 "cs-parser.jay" +#line 6250 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -8856,7 +8858,7 @@ void case_931() } void case_934() -#line 6275 "cs-parser.jay" +#line 6277 "cs-parser.jay" { current_container = current_type = new Class (current_container, new MemberName (""), Modifiers.PUBLIC, null); @@ -8878,7 +8880,7 @@ void case_934() pars, null /* attributes */); - current_container.PartialContainer.AddMethod (method); + current_type.AddMember (method); oob_stack.Push (method); ++lexer.parsing_block; @@ -8886,7 +8888,7 @@ void case_934() } void case_935() -#line 6303 "cs-parser.jay" +#line 6305 "cs-parser.jay" { --lexer.parsing_block; Method method = (Method) oob_stack.Pop (); @@ -8898,7 +8900,7 @@ void case_935() } void case_945() -#line 6346 "cs-parser.jay" +#line 6348 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -8906,7 +8908,7 @@ void case_945() } void case_946() -#line 6352 "cs-parser.jay" +#line 6354 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -8915,14 +8917,14 @@ void case_946() } void case_949() -#line 6367 "cs-parser.jay" +#line 6369 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], MemberCache.IndexerNameAlias, Location.Null); } void case_950() -#line 6372 "cs-parser.jay" +#line 6374 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8932,7 +8934,7 @@ void case_950() } void case_951() -#line 6380 "cs-parser.jay" +#line 6382 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8942,7 +8944,7 @@ void case_951() } void case_952() -#line 6388 "cs-parser.jay" +#line 6390 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); module.DocumentationBuilder.ParsedParameters = p; @@ -8951,7 +8953,7 @@ void case_952() } void case_960() -#line 6426 "cs-parser.jay" +#line 6428 "cs-parser.jay" { var parameters = new List (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); @@ -8959,7 +8961,7 @@ void case_960() } void case_961() -#line 6432 "cs-parser.jay" +#line 6434 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); @@ -8967,7 +8969,7 @@ void case_961() } void case_962() -#line 6441 "cs-parser.jay" +#line 6443 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -9255,17 +9257,17 @@ void case_962() 685, 674, 675, 673, 681, 602, 608, 601, 0, 0, 331, 597, 0, 0, 0, 539, 838, 724, 428, 422, 426, 421, 526, 463, 462, 461, 458, 457, 0, 452, - 417, 418, 429, 0, 0, 745, 0, 0, 904, 880, - 0, 905, 0, 901, 0, 916, 0, 0, 0, 0, - 884, 19, 328, 671, 670, 0, 669, 0, 346, 962, - 173, 957, 0, 0, 52, 0, 0, 0, 0, 0, - 0, 353, 0, 628, 0, 0, 78, 77, 0, 469, - 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, - 0, 809, 802, 0, 820, 0, 0, 858, 493, 492, - 443, 0, 0, 941, 942, 432, 438, 0, 441, 0, - 467, 0, 0, 0, 0, 0, 777, 853, 0, 844, - 0, 521, 516, 0, 0, 512, 0, 866, 0, 795, - 879, 877, 0, 530, 0, 610, 606, 605, 604, 334, + 417, 418, 429, 0, 0, 745, 0, 0, 606, 605, + 904, 880, 0, 905, 0, 901, 0, 916, 0, 0, + 0, 0, 884, 19, 328, 671, 670, 0, 669, 0, + 346, 962, 173, 957, 0, 0, 52, 0, 0, 0, + 0, 0, 0, 353, 0, 628, 0, 0, 78, 77, + 0, 469, 0, 0, 0, 0, 0, 534, 0, 0, + 0, 0, 0, 809, 802, 0, 820, 0, 0, 858, + 493, 492, 443, 0, 0, 941, 942, 432, 438, 0, + 441, 0, 467, 0, 0, 0, 0, 0, 777, 853, + 0, 844, 0, 521, 516, 0, 0, 512, 0, 866, + 0, 795, 879, 877, 0, 530, 0, 610, 604, 334, 596, 595, 612, 460, 0, 450, 449, 582, 138, 0, 761, 743, 0, 0, 0, 750, 0, 882, 0, 909, 0, 924, 925, 918, 888, 890, 930, 349, 348, 961, @@ -9329,17 +9331,17 @@ void case_962() }; protected static readonly short [] yyDgoto = { 7, 8, 49, 9, 50, 10, 11, 51, 232, 690, 430, - 12, 13, 52, 22, 23, 321, 235, 675, 840, 1032, - 1150, 1488, 837, 236, 237, 238, 239, 240, 241, 242, - 243, 668, 445, 669, 670, 942, 671, 672, 946, 838, - 1027, 1028, 1029, 266, 592, 1122, 110, 849, 1218, 1219, + 12, 13, 52, 22, 23, 321, 235, 675, 842, 1032, + 1150, 1488, 839, 236, 237, 238, 239, 240, 241, 242, + 243, 668, 445, 669, 670, 942, 671, 672, 946, 840, + 1027, 1028, 1029, 266, 592, 1122, 110, 851, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 464, 679, 1301, 956, 1129, 1094, 1162, 1186, 1245, 1312, 1157, 1362, 1339, 1387, 1388, 1389, 958, 1385, 959, 735, 1278, 1350, 1325, 1375, 515, 1368, 1344, 1404, 921, 1373, 1376, 1377, 1472, 1405, 1406, 1402, 1230, 1285, 1257, 1302, 691, 1352, 1451, 1322, 1408, 1481, 465, 267, 692, 693, - 694, 695, 696, 655, 569, 1134, 656, 657, 855, 1304, + 694, 695, 696, 655, 569, 1134, 656, 657, 857, 1304, 1329, 1419, 1380, 1453, 1305, 1355, 1477, 1501, 1420, 1421, 1499, 1485, 1486, 954, 1093, 1185, 1242, 1287, 1243, 1244, 1279, 1336, 1308, 1280, 324, 223, 1384, 1282, 1369, 1366, @@ -9348,606 +9350,623 @@ void case_962() 1399, 1480, 1435, 1393, 1394, 1490, 1478, 1479, 951, 1036, 1153, 1127, 1179, 1154, 1155, 1194, 1090, 1177, 1206, 534, 193, 112, 350, 195, 563, 440, 224, 1317, 653, 654, - 826, 842, 325, 407, 533, 303, 1158, 1159, 45, 114, + 828, 844, 325, 407, 533, 303, 1158, 1159, 45, 114, 304, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 252, 803, 994, 511, 722, 876, 723, 724, + 135, 136, 252, 803, 994, 511, 722, 878, 723, 724, 987, 137, 198, 728, 594, 595, 596, 597, 797, 473, 474, 297, 992, 730, 408, 299, 498, 499, 500, 501, - 504, 737, 310, 753, 754, 893, 263, 479, 768, 264, + 504, 737, 310, 753, 754, 895, 263, 479, 768, 264, 478, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 572, 573, 574, 777, - 778, 909, 779, 153, 560, 770, 351, 1010, 548, 1073, + 778, 811, 779, 153, 560, 770, 351, 1010, 548, 1073, 154, 493, 952, 1092, 1183, 1283, 466, 1163, 1164, 1213, - 1214, 827, 552, 336, 774, 1172, 553, 554, 268, 269, + 1214, 829, 552, 336, 774, 1172, 553, 554, 268, 269, 270, 157, 158, 159, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 171, 283, 578, 172, - 173, 317, 808, 632, 924, 852, 686, 962, 922, 925, + 173, 317, 808, 632, 924, 854, 686, 962, 922, 925, 1052, 926, 963, 964, 284, 174, 175, 176, 1063, 998, 1064, 1065, 1066, 1108, 1067, 177, 178, 179, 180, 703, 486, 704, 1055, 980, 1169, 1137, 1202, 705, 979, 706, 1171, 1104, 181, 182, 183, 184, 185, 186, 305, 524, - 525, 1000, 1110, 313, 978, 861, 1136, 1007, 899, 1111, - 187, 418, 188, 419, 927, 1017, 420, 644, 821, 818, - 819, 1022, 421, 422, 423, 424, 425, 426, 931, 634, - 929, 1115, 1189, 1248, 1019, 1146, 1205, 816, 640, 817, + 525, 1000, 1110, 313, 978, 863, 1136, 1007, 901, 1111, + 187, 418, 188, 419, 927, 1017, 420, 644, 823, 820, + 821, 1022, 421, 422, 423, 424, 425, 426, 931, 634, + 929, 1115, 1189, 1248, 1019, 1146, 1205, 818, 640, 819, 1081, 1021, 1082, 1147, 1023, 17, 19, 46, 47, 227, - 658, 834, 441, 659, 660, + 658, 836, 441, 659, 660, }; - protected static readonly short [] yySindex = { -56, - 0, -191, -121, -213, -63,12109, 0, 51, 0, 0, - -63, -213, 0, 0, -51, 0, 6843, -63, 0, -184, - -250, 0, 0, 0, 0, 0, 0, 0, 200, 0, - 389, 0, 0, 0, 3579, 0, 0, 0, 0, 0, - 0, 0, 0, -25, 0, 0, 611, 0, 0, 51, - 18, -63, 0, 225, 0, 338, 422, 210,11609, 439, - -249, 398, 7000, 0, -249, -249, -249, -177, -249, -249, - 648, 0,10712, -249, -249, 0,10712, 0, 409, 0, - 210, 0, -249, 437, -249, 0,12128,12128, 477, -249, - -249, -172,11392, 0,10712, 0,11392,11392,11392,11392, -11392,11392,11392,11392, 0, 126, 0, 8254, 0, 69, - 0, 457, 484, 649, 166, 0, 0, 506, 0, 0, + protected static readonly short [] yySindex = { 74, + 0, -197, -141, 10, 8,11797, 0, 178, 0, 0, + 8, 10, 0, 0, -145, 0, 6588, 8, 0, -185, + -1, 0, 0, 0, 0, 0, 0, 0, 103, 0, + 215, 0, 0, 0, 3619, 0, 0, 0, 0, 0, + 0, 0, 0, 554, 0, 0, 703, 0, 0, 178, + 133, 8, 0, 163, 0, 313, 224, 320,11297, 323, + 291, 297, 6745, 0, 291, 291, 291, -174, 291, 291, + 680, 0,10400, 291, 291, 0,10400, 0, 361, 0, + 320, 0, 291, 454, 291, 0,11816,11816, 456, 291, + 291, -179,11080, 0,10400, 0,11080,11080,11080,11080, +11080,11080,11080,11080, 0, 151, 0, 8451, 0, 197, + 0, 442, 492, 388, -243, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 801, 687, - -174, 233, 568, 526, 523, 625, 608, 575, 390, 650, - 0, 0, 0, 0, 0, 0, 3439, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1724, 776, + 73, 299, 550, -264, 536, 487, 560, 567, 441, 587, + 0, 0, 0, 0, 0, 0, 3320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -283, 694, 20, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -193, -143, 18, 0, - 425, 424, 0, 652, 0, 0, 0, 0, 8254, 8254, + 0, 61, 624, -279, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -187, -172, 133, 0, + 434, 528, 0, 610, 0, 0, 0, 0, 8451, 8451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 696, 668, 0, 670, 0, 2, 0, 0, - 0, 18,12743, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 835, 685,10848, 0, 0, 0, - 0,10712, -249, -249, 831, 393, 649, 0, -283, 0, - 8254, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 697, 583, 0, 646, 0, 47, 0, 0, + 0, 133,12471, 133, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 827, 672,10536, 0, 0, 0, + 0,10400, 291, 291, 841, 400, 388, 0, 61, 0, + 8451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 63, 173,11609, 0, 8254,10712, 736, 0, - 0, 745,10712,10712, 9160, 470, -195, 760, 8549,11392, - 126, 0, 767, 0, 773, 8254,10712, 820, 561, -249, - 0,10712, 409,10168, 0, 0, 437,10712, 437, 314, - 503, 865, -283, 0, 694, 166, 874, -283,10712,10712, -10712, 398, 0, 857, 0, 7157, -279, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3845, 0, 0, -12038, 314, 847, 845,10712, 0, 811, 0, 435, 0, - 0, 444, 0, 0, 805, 8689, 9896, 0, 0,11392, -10712,10712,10712,10712,10712,10712,10712,10712,10712,10712, -10712,11392,11392,11392, 8254, 8254,11392,11392,11392,11392, -11392,11392,11392,11392,11392,11392,11392,11392,11392,11392, -11392,11392,10712, 0, 0, 0, 0, 694, 0, 0, - 0, 0,12128,12128, -283, 0, 0, 0, 0, -247, - 792, 0, 0, 0, 0, 0, 0, 0, 18, 18, - 813, 0, 814, 0, 811, 696, 696, 0, -179, 0, - 454, 696, 860, 0, -198,12743, 0, 0, 0, 0, - -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 40,12786, 0, 0, 0, 811, 0, - 0, 861, 588, 0, 867, 0, 868, 72, 409, 0, - -249, 0, 0, 0, -283, 8237, -186, 0, 869, 0, - 0, 0, -141, -109, 0, 342, 0, 878, 0, 876, - 0, 0, 0, 662, 0, 8373, 669,10712, 760, 9896, - 0, 7628, 0, 437, 0, 0, 0, 879, -102, 0, - 0, 210, 409, 234, 0, 968, 880, 0, -81, -283, - 0, -73, 0, 0, 0,10712, 954, 0, 0, 0, -10712, 959, 885, 0, 889, 890, 0,12038, 0, 0, - -170, -261, 7157, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 252, 0, 0, 0, 437, 314, -283, 8706, - 0, 891, 0, 895,11392, 0, 893, 7157, 0, -280, - 0, 336, 0, 811, 0, 42,10712,10712, 899, 1015, - 0, 0, -52, 900, 0, 0, 0, 687, 0, 0, + 0, 0, -165, 155,11297, 0, 8451,10400, 766, 0, + 0, 774,10400,10400, 4587, -261, -156, 770, 8608,11080, + 151, 0, 780, 0, 785, 8451,10400, 824, 530, 291, + 0,10400, 361, 9856, 0, 0, 454,10400, 454, 450, + 496, 946, 61, 0, 624, -243, 949, 61,10400,10400, +10400, 297, 0, 902, 0, 6902, -24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4203, 0, 0, +11726, 450, 889, 888,10400, 0, 859, 0, 270, 0, + 0, 445, 0, 0, 858, 8434, 9584, 0, 0,11080, +10400,10400,10400,10400,10400,10400,10400,10400,10400,10400, +10400,11080,11080,11080, 8451, 8451,11080,11080,11080,11080, +11080,11080,11080,11080,11080,11080,11080,11080,11080,11080, +11080,11080,10400, 0, 0, 0, 0, 624, 0, 0, + 0, 0,11816,11816, 61, 0, 0, 0, 0, 122, + 775, 0, 0, 0, 0, 0, 0, 0, 133, 133, + 861, 0, 864, 0, 859, 697, 697, 0, -168, 0, + 594, 697, 906, 0, -135,12471, 0, 0, 0, 0, + -177, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 231,12501, 0, 0, 0, 859, 0, + 0, 909, 190, 0, 905, 0, 914, 144, 361, 0, + 291, 0, 0, 0, 61, 7982, -186, 0, 911, 0, + 0, 0, -189, -182, 0, 357, 0, 913, 0, 915, + 0, 0, 0, 609, 0, 8118, 635,10400, 770, 9584, + 0, 7373, 0, 454, 0, 0, 0, 918, -102, 0, + 0, 320, 361, 497, 0, 757, 920, 0, -46, 61, + 0, 67, 0, 0, 0,10400, 1000, 0, 0, 0, +10400, 1002, 924, 0, 927, 928, 0,11726, 0, 0, + -192, -253, 6902, 0, 0, 0, 0, 0, 0, 361, + 0, 0, 285, 0, 0, 0, 454, 450, 61,11870, + 0, 929, 0, 930,11080, 0, 936, 6902, 0, 350, + 0, 424, 0, 859, 0, 42,10400,10400, 933, 1049, + 0, 0, 162, 939, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 687, 687, -174, -174, 233, 233, - 233, 233, 568, 568, 526, 523, 625, 608, 575, 0, - 898, -175, 0,10712, 981, -283, 982, -283, 901,10712, - 0, 0, 0, 923, 0, 542, 811, 0, 0, 0, - 0, 273, 367, 0, 8706, 454, 0, 909, 911, 0, - 0, 0, 0, 0, 0, 314, 914, 0, 913, 915, - 0, 0, 0, 0, 919, 8863, 882, 0, 310, 0, - 0, 590, 0,10848, 0, 916, 0, 0, 0, 512, - 924, 0, 929, 930, 932, 0, 0,10712, 0, 0, - -283, 0, 0, 931, 0, 934, 0, -125, 0, 0, - 7000, 0, 7000, 8532, 0, 9160, 0, 0,10304, 137, - 0, -248, -182, 0, 883, 886, 0, 54, 0, 0, - 939, 0, 0, 0, 0, 0, 940, 0, 0, 946, - 0, 4163, 0, 409, 0, 0, 437, 548, 897, 0, - -38, 0, 957, 960, 0, 0, 7000, 0, 0, 7000, - 0,10712, 0,10712, 8254, 0, 0, 409, 958, 409, - 0, 0, 0, 0, 0, 0, 0, 0, 8846, 8254, - 0, 0, -283,12038, 991, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9760, 0, - 0, 0, 0,10032,10712, 0, 7785, 961, 0, 0, - 1042, 0, 1043, 0, 547, 0, 964,10712,10712, -283, - 0, 0, 0, 0, 0, 921, 0, -179, 0, 0, - 0, 0, 454, 454, 0, 813, 970, 971, 925, 974, - 882, 0, 969, 0, 1091, 1092, 0, 0,10712, 0, -10440, 975, 512, 8706, 8254, 0, 296, 1095, 1096, 60, - 972, 0, 0,10712, 0,10712, 1074, 0, 0, 0, - 0, 47,10576, 0, 0, 0, 0, 7921, 0, 1099, - 0, 694,10712, 990, 8532, 992, 0, 0, -283, 0, - 115, 0, 0, 811, 897, 0, -283, 0, -169, 0, - 0, 0, 987, 0, 1018, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 657, 0, 0, 0, 0, 8549, - 0, 0, -283, 986, 961, 0,10712, 0,10712, 0, -10712, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 993, 813, 0, 0,10984, 0, 0, 0, 994, 4322, - 0, 882, 0, 882, 0, 882, 0, 0, 0, 0, - -283, 988, 975, 0, 0, 0, -166, -162, 995, 996, - 0, 0, 0, 0, 0, 998, 8532, 961, -175,10712, - 0, 999, 7000, 0, 0, 0, 0, 0, 0, 997, - 0, 760, 0, 0, 0, 0, 0, -204, 0, 1003, - 811, 897, 0, 897, 0, 961, 1004, 0, 0, 409, - 0, 943, 1000, 0, 0, 0,10712, 1030,10712, 0, -10712, 1027, 186, 0, 915, 243, 690, 0, 0, 0, - 0, -213, 0, 0, 0, 1013, 0, 0, 0, 1001, - 0, 0, 0, 267, 0, 1006, 1132, 1134, 0, 0, - 961, 1031, 961, 0, 1026, 0, 0, 0, 0, 0, -10712, 0, 1036, -215, 0, -215, 0, 0, 0, 0, - 0, 0, 409, 0,10712, 8080, 0, 0, 1058, 586, - 1032, 0,10712, 0, 1037, 0, 0,10984, -63, 72, - 0, 1033, 1033, 1033,10440, 1039, 0,10712, 0, 0, - 0, 0, 0, 7000, 1035, 0, 0, 7157, 0, 1047, - 7000, 0, 1046, 0,10712, 0, 0, 0, 0, 0, - 0,10712, 0, 0, 18, 1040, 18, 7645, -150, -150, - -150, 0, 0,10712, 0, 7000,10712, 0, 0, 7157, - 0, 0, 0, 0, 1075,10712,10712, 0, 18, 1056, - 0, 1007, 0, 1052, 0, 0, 0, 1053, 0, 0, - 1010, 0, 1097, 0, 0, 0, 0, 0, 1059, 934, - 0, 7157, 0, 1082, 0, 1061, -150, 0, 1067, 18, - 7645, 1063, 1072, 0, 1073, 1076, 0, 1077,10712, 0, - 0, 0, 0, 1060, 1061, 0, 0,11688, 53, 18, - 0, 7000, 0, 1088,10712, 1070,10712, 0, 0, 1078, - 0, 0, 1079, 0, 0,12786, 0, 1080, 53, 0, + 0, 0, 0, 0, 776, 776, 73, 73, 299, 299, + 299, 299, 550, 550, -264, 536, 487, 560, 567, 0, + 942, -164, 0, 8591, 1020, 61, 1029, 61, 944,10400, + 0, 0, 0, 971, 0, 580, 859, 0, 0, 0, + 0, 630, 382, 0,11870, 594, 0, 956, 955, 0, + 0, 0, 0, 0, 0, 450, 958, 0, 957, 960, + 0, 0, 0, 0, 962,11887, 922, 0, 377, 0, + 0, 255, 0,10536, 0, 963, 0, 0, 0, 573, + 966, 0, 967, 969, 974, 0, 0,10400, 0, 0, + 61, 0, 0, 973, 0, 976, 0, 409, 0, 0, + 6745, 0, 6745, 8277, 0, 4587, 0, 0, 9992, 202, + 0, 9, -148, 0, 925, 932, 0, 88, 0, 0, + 979, 0, 0, 0, 0, 0, 983, 0, 0, 992, + 0, 7390, 0, 361, 0, 0, 454, 498, 940, 0, + 104, 0, 988, 989, 0, 0, 6745, 0, 0, 6745, + 0,10400, 0,10400, 8451, 0, 0, 361, 993, 361, + 0, 0, 0, 0, 0, 0, 0, 0, 8591, 8451, + 0, 0, 61,11726, 1021, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9448, 0, + 0, 0, 0, 9720,10400, 0, 7530, 995, 0, 0, + 0, 0, 1072, 0, 1073, 0, 852, 0, 996, 8591, + 8591, 61, 0, 0, 0, 0, 0, 954, 0, -168, + 0, 0, 0, 0, 594, 594, 0, 861, 1003, 1004, + 964, 1007, 922, 0, 1001, 0, 1125, 1127, 0, 0, +10400, 0,10128, 1010, 573,11870, 8451, 0, -230, 1130, + 1131, 111, 1008, 0, 0,10400, 0,10400, 1108, 0, + 0, 0, 0, 16,10264, 0, 0, 0, 0, 7666, + 0, 1135, 0, 624,10400, 1025, 8277, 1026, 0, 0, + 61, 0, 189, 0, 0, 859, 940, 0, 61, 0, + -96, 0, 0, 0, 1024, 0, 1050, 0, 0, 0, + 0, 0, 0, 0, 729, 0, 0, 0, 0, 8608, + 0, 0, 61, 1032, 995, 0, 8591, 0, 8591, 0, + 8591, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1040, 861, 0, 0,10672, 0, 0, 0, 1041, 7547, + 0, 922, 0, 922, 0, 922, 0, 0, 0, 0, + 61, 1035, 1010, 0, 0, 0, -173, -166, 1039, 1043, + 0, 0, 0, 0, 0, 1038, 8277, 995, -164,10400, + 0, 1048, 6745, 0, 0, 0, 0, 0, 0, 1045, + 0, 770, 0, 0, 0, 0, 0, -203, 0, 1052, + 859, 940, 0, 940, 0, 995, 1056, 0, 0, 361, + 0, 999, 1053, 0, 0, 0, 8591, 1082, 8591, 0, +10400, 1079, 292, 0, 960, 223, 741, 0, 0, 0, + 0, 10, 0, 0, 0, 1064, 0, 0, 0, 1054, + 0, 0, 0, 581, 0, 1057, 1183, 1188, 0, 0, + 995, 1074, 995, 0, 1071, 0, 0, 0, 0, 0, +10400, 0, 1080, -226, 0, -226, 0, 0, 0, 0, + 0, 0, 361, 0,10400, 7825, 0, 0, 1103, 857, + 1083, 0, 8591, 0, 1084, 0, 0,10672, 8, 144, + 0, 1081, 1081, 1081,10128, 1088, 0,10400, 0, 0, + 0, 0, 0, 6745, 1085, 0, 0, 6902, 0, 1096, + 6745, 0, 1097, 0, 8591, 0, 0, 0, 0, 0, + 0,10400, 0, 0, 133, 1098, 133, 7842, -144, -144, + -144, 0, 0,10400, 0, 6745,10400, 0, 0, 6902, + 0, 0, 0, 0, 1120, 8591,10400, 0, 133, 1101, + 0, 1061, 0, 1100, 0, 0, 0, 1109, 0, 0, + 1066, 0, 1136, 0, 0, 0, 0, 0, 1110, 976, + 0, 6902, 0, 1137, 0, 1111, -144, 0, 1122, 133, + 7842, 1113, 1124, 0, 1129, 1152, 0, 1126, 8591, 0, + 0, 0, 0, 1121, 1111, 0, 0,11376, -53, 133, + 0, 6745, 0, 1141, 8591, 1144,10400, 0, 0, 1150, + 0, 0, 1148, 0, 0,12501, 0, 1155, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 334,12786, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1083, 18, 0, 53, 0, -283, 0, 1088, 0, - 0, 1084,11688,11854, 0, 0, 373, 0, 0, 0, -11886, 0, 0, 1086, 0, 0, 0, 0, 8254, 8254, - 162, 8549, 229, 437, 1113, 0, 314, 1150, 0, 1153, - 0, 0, 1061, 0, 0, 0, 1061, 0, 1050, 1051, - 0, 8254, -158, 0, 8254, 0, 1062, 1093, 0, 314, - 0, 1105, 9196, 0, 1094, 1064, 16, 488, 3579, 0, - 0, 1061, 0, 314, 0, 1103, 1066, 1108, 1109, 0, - 1110, 1051, 1116, 72, 1111, 1117, 0, 1118, 1124, 0, - 811, 0, 532, 0, 0, 0, 1122, 0, -152, 0, - 1114, 0, 0, 1127, 0, 1126, 1128, 1129, 0, 1125, - 0, 72, 72, 0, 72, 1130, 1133, 0, 0, 0, - 0, 1131, 78, 0, 1136, 72, 1246, 1139, 72, 0, - 373, 0, 8532, 1089, 1140, 1125, 0, 1143, 1145, 84, - 1149, 0, 0, 72,10440, 1102, 1146, 1131, 0, 0, -12786, 0, 18, 18, 0, 1107, 1147, 1136, 0, 1154, - 0,10712, 1112, 1151, 1139, 0, 1157, 72, 0, -91, - 0, 1156, 0, 0, 0, 0, 0,12786, 0, 84, - 84, 1164, 1160, 0, -152, 0, 0, 248, 1167,12786, - 0,12786, 0, 0, 8532, 1161, 0, 0, 0, 1171, - 1127, 0, 0, 0, 1173, 0, -147, 0, 0, 0, - -150, 604, 1175, 0, 0, 0, 0, 0, 0, 0, - 0, 1235, 1288, 0, 0, 0, 0, 0, 0, 1181, - 1184, 8532, 0, 0, 0, 0, 84, 528, 528, 0, - -150, 0, 0, 0, -61, -61, 0, 0, 0, 0, - 0, 0, 0, 9896, 9896, 0, 0, 0, 0, 0, - 1188, 1185, 1187, 0, 0, 0, + 443,12501, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1156, 133, 0, -53, 0, 61, 0, 1141, 0, + 0, 1153,11376,11542, 0, 0, 597, 0, 0, 0, +11574, 0, 0, 1158, 0, 0, 0, 0, 8451, 8451, + -183, 8608, 428, 454, 1190, 0, 450, 9354, 0, 1223, + 0, 0, 1111, 0, 0, 0, 1111, 0, 1112, 1114, + 0, 8451, -163, 0, 8451, 0, 1115, 1163, 0, 450, + 0, 1164, 9384, 0, 1160, 1119, 62, 602, 3619, 0, + 0, 1111, 0, 450, 0, 1171, 1138, 1168, 1166, 0, + 1169, 1114, 1184, 144, 1176, 1185, 0, 1191, 1192, 0, + 859, 0, 681, 0, 0, 0, 1203, 0, -70, 0, + 1180, 0, 0, 1194, 0, 1206, 1212, 1213, 0, 1214, + 0, 144, 144, 0, 144, 1216, 1217, 0, 0, 0, + 0, 1226, 68, 0, 1227, 144, 1347, 1230, 144, 0, + 597, 0, 8277, 1187, 1233, 1214, 0, 1234, 1239, 120, + 1242, 0, 0, 144,10128, 1196, 1240, 1226, 0, 0, +12501, 0, 133, 133, 0, 1200, 1243, 1227, 0, 1249, + 0,10400, 1207, 1248, 1230, 0, 1255, 144, 0, -169, + 0, 1247, 0, 0, 0, 0, 0,12501, 0, 120, + 120, 1262, 1259, 0, -70, 0, 0, 263, 1264,12501, + 0,12501, 0, 0, 8277, 1252, 0, 0, 0, 1265, + 1194, 0, 0, 0, 1266, 0, -157, 0, 0, 0, + -144, 863, 1269, 0, 0, 0, 0, 0, 0, 0, + 0, 1324, 1377, 0, 0, 0, 0, 0, 0, 1270, + 1271, 8277, 0, 0, 0, 0, 120, 613, 613, 0, + -144, 0, 0, 0, -85, -85, 0, 0, 0, 0, + 0, 0, 0, 9584, 9584, 0, 0, 0, 0, 0, + 1277, 1274, 1275, 0, 0, 0, }; - protected static readonly short [] yyRindex = { 1379, - 0, 0, 7314, 1379, 0, 0, 0, 1561, 0, 0, - 3136, 2909, 0, 0, 0, 0, 0, 3136, 0, 0, + protected static readonly short [] yyRindex = { 2805, + 0, 0, 7059, 2805, 0, 0, 0, 1649, 0, 0, + 2958, 1776, 0, 0, 0, 0, 0, 2958, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1562, 0, 0, 1562, 0, 0, 1561, - 1237, 2978, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, - 9020, 0, 1189, 0, 0, 0, 1189, 0, 0, 0, - 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4545, 0, 0, 0, 0, - 0, 0, 235, 4704, 3915, 0, 0, 4480, 0, 0, + 0, 0, 0, 1650, 0, 0, 1650, 0, 0, 1649, + 3001, 2852, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1285, 0, 0, 0, 0, 0, 0, 0, 0, +11941, 0, 1278, 0, 0, 0, 1278, 0, 0, 0, + 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, + 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4426, 0, 0, 0, 0, + 0, 0, 309, 4585, 3796, 0, 0, 4361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4860, 4928, - 5272, 5476, 5816, 6020, 6156, 6292, 6428, 6564, 4638, 3647, + 0, 0, 0, 0, 0, 0, 0, 0, 4741, 4809, + 5153, 5357, 5697, 5901, 6037, 541, 1051, 6309, 1811, 3687, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 674, 674, 3199, 0, - 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 884, 884, 3068, 0, + 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1562, 123, 0, 0, 0, 0, 0, 0, - 0, 3246, 436, 3293, 0, 0, 0, 0, 0, 0, + 0, 0, 1650, 279, 0, 0, 0, 0, 0, 0, + 0, 3131, 524, 3178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3526, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, - 3526, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2041, 0, 2575, 297, - 2171, 0, 0, 0, 2318, 2171, 0, 0, 0, 0, - 0, 1196, 0, 0, 0, 27, 0, 0, 0, 0, + 0, 0, 0, 0, 1291, 0, 0, 0, 0, 0, + 3407, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2204, 0, 1623, 256, + 2334, 0, 0, 0, 2464, 2334, 0, 0, 0, 0, + 0, 1285, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1192, 2422, 0, 0, 1189, 0, 3526, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, + 1288, 1197, 0, 0, 1278, 0, 3407, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1422, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -231, 0, 0, 0, 0, 0, 0, 0, 3360, 2733, - 0, 0, 0, 0, 1888, 1562, 1562, 0, -151, 0, - 7802, 1562, 1567, 0, 0, 193, 0, 0, 0, 0, + 168, 0, 0, 0, 0, 0, 0, 0, 3241, 2629, + 0, 0, 0, 0, 2058, 1650, 1650, 0, -112, 0, + 7999, 1650, 1661, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 404,11541, 0, 0, 0, 3526, 0, - 0, 0, 0, 0, 0, 0, 0,11930, 0, 0, - 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 351, 645, 0, 0, 1203, - 0, 0, 0, 0, 0, 114, 0, 0, 4003, 1202, - 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1590, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 399,11229, 0, 0, 0, 3407, 0, + 0, 0, 0, 0, 0, 0, 0,11618, 0, 0, + 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1069, 1545, 0, 0, 1296, + 0, 0, 0, 0, 0, 148, 0, 0, 3884, 1294, + 0, 0, 0, -167, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1192, 0, 0, - 6683, 0, 124, 0, 0, 0, 0, 0, 0, 9003, - 0, 0, 0, 0, 0, 0, 109, 570, 0, 0, - 0, 1204, 0, 0, 0, 0, 0, 0, 0, 3526, - 0, 3526, 0, 4162, 0, 0, 0, 0, 192, 0, - 0, 0, 0, 25, 0, 0, 0, 5032, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1288, 0, 0, + 6428, 0, 191, 0, 0, 0, 0, 0, 0, 8748, + 0, 0, 0, 0, 0, 0, 114, 449, 0, 0, + 0, 1297, 0, 0, 0, 0, 0, 0, 0, 3407, + 0, 3407, 0, 4043, 0, 0, 0, 0, 261, 0, + 0, 0, 0, 183, 0, 0, 0, 4913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5100, 5204, 5340, 5408, 5544, 5612, - 5680, 5748, 5884, 5952, 6088, 6224, 6360, 6496, 6620, 0, - 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1045, 0, 0, 1888, 0, 0, 0, - 0, 1159, 0, 0, 0,12182, 0, 0, 724, 0, - 0, 0, 0, 0, 0, 676, 638, 0, 0, 1208, - 0, 0, 0, 0, 1213, 0, 0, 0, 0, 0, - 0,11120, 0, 0, 0, 723, 0, 0, 0,12199, - 0, 0, 737, 778, 783, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1215, 0, 0, 0, 2482, - 0, 0, 133, 0, 77, 3685, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 220, -211, 0, 0, - 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9003, + 0, 0, 0, 0, 4981, 5085, 5221, 5289, 5425, 5493, + 5561, 5629, 5765, 5833, 5969, 6105, 6173, 6241, 6365, 0, + 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4005, 0, 0, 2058, 0, 0, 0, + 0, 1250, 0, 0, 0,11965, 0, 0, 777, 0, + 0, 0, 0, 0, 0, 736, 532, 0, 0, 1300, + 0, 0, 0, 0, 1305, 0, 0, 0, 0, 0, + 0,10808, 0, 0, 0, 792, 0, 0, 0,12015, + 0, 0, 807, 810, 811, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1298, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1307, 0, 0, 0, 3473, + 0, 0, 212, 0, 53, 3566, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1308, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 181, 693, 0, 0, + 0, 0, 0, 1301, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 8748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 0, 0, 0, 1209, 0, 0, - 0, 0, 0, 0, 244, 0, 538, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -151, 0, 0, - 0, 0,12199, 8097, 0, 1217, 0, 678, 0, 0, - 0, 0, 1221, 0, 1174, 1177, 0, 0, 0, 0, - 0, 1220,12253, 0, 0, 0,12006, 0, 0, 0, - 809, 0, 0, 0, 0, 0, 1759, 0, 0, 0, + 0, 0, 0, 284, 0, 0, 0, 1302, 0, 0, + 0, 0, 0, 0, 0, 0, 622, 0, 668, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, + 0, 0, 0, 0,12015, 8294, 0, 1311, 0, 676, + 0, 0, 0, 0, 1310, 0, 1268, 1287, 0, 0, + 0, 0, 0, 1313,12039, 0, 0, 0,11694, 0, + 0, 0, 815, 0, 0, 0, 0, 0, 1932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3844, 0, 4321, 1223, 0, 0, 0, 1225, 0, - 0, 0, 0, 305, 0, 0, 0, 0, 809, 0, + 0, 0, 0, 3725, 0, 4202, 1319, 0, 0, 0, + 1332, 0, 0, 0, 0, 171, 0, 0, 0, 0, + 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1227, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, + 0, 0, 1334, 0, 0, 0, 0, 0, 823, 826, + 0, 0, 0, 0, 0, 0, 0, 1339, 764, 1336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1228, 0, 0, 0, 0, 0, 821, 822, - 0, 0, 0, 0, 0, 0, 0, 1229, 708, 1233, + 0, 3884, 0, 0, 0, 0, 0, 1355, 0, 0, + 171, 0, 0, 875, 0, 1339, 0, 0, 0, 8748, + 0, 663, 728, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 180, 0, 1300, 8798, 0, 0, 0, 0, + 0,12090, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 761, 0, 762, 0, 0, 0, 0, + 1343, 0, 1302, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1358, 0, 7216, 0, 0, 0, 0, + 0, 0, 8748, 0, 0, 0, 0, 0, 0, 802, + 821, 0, 0, 0, 0, 0, 0, 0,12133,11618, + 0, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4003, 0, 0, 0, 0, 0, 1232, 0, 0, - 305, 0, 0, 626, 0, 1229, 0, 0, 0, 9003, - 0, 730, 746, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 196, 0, 1208, 9197, 0, 0, 0, 0, - 0,12295, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 765, 0, 784, 0, 0, 0, 0, - 1238, 0, 1209, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1259, 0, 7471, 0, 0, 0, 0, - 0, 0, 9003, 0, 0, 0, 0, 0, 0, 306, - 567, 0, 0, 0, 0, 0, 0, 0,12371,11930, - 0, -159, -159, -159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,12202, 0, 230, 0, 1370, 1370, + 1370, 0, 0, 0, 0, 0, 1388, 0, 0, -210, + 0, 0, 0, 0, 0, 0, 0, 0,12245, 0, + 0, 0, 0, 1393, 0, 0, 0, 166, 0, 0, + 0, 0, 627, 0, 0, 0, 0, 0, 0, 1391, + 0, 1397, 0, 0, 0, 2915, 1392, 584, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,12476, 0, 43, 0, 1222, 1222, - 1222, 0, 0, 0, 0, 0, 1256, 0, 0, -142, - 0, 0, 0, 0, 0, 0, 0, 0,12519, 0, - 0, 0, 0, 1261, 0, 0, 0, 68, 0, 0, - 0, 0, 533, 0, 0, 0, 0, 0, 0, 1258, - 0, 1263, 0, 0, 0, 3047, 1257, 497, 0, 311, + 0, 0, 0, 0, 2742, 0, 0, 0, 8952, 9150, + 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, + 0, 0, 387, 0, 0,11400, 0, 0, 9051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2846, 0, 0, 0, 9351, 9549, - 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, - 0, 0, -210, 0, 0,11712, 0, 0, 9450, 0, + 0,11468, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9244, 0, 8952, 0, 0, 0, 886, 0, + 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, + 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4358, 411, 0, 9286, 0, 0, 0, + 4715, 0, 2742, 0, 0, 0, 2742, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, + 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2742, 0, 667, 0, 649, 0, 0, 0, 0, + 0, 0, 0,11618, 825, 0, 0, 0, 0, 0, + 1398, 0, 696, 0, 0, 0, 0, 0, 0, 0, + 829, 0, 0, 0, 0, 0, 0, 0, 0, 1394, + 0,11618,11618, 0,11650, 0, 0, 0, 0, 0, + 0, 1396,12431, 0, 1401,11618,10944, 1402,11618, 0, + 0, 0, 0, 0, 0, 1405, 0, 0, 0,12401, + 0, 0, 0,11618, 0, 0, 0, 1406, 0, 0, + 325, 0, 408,12363, 0, 0, 0, 1407, 0, 0, + 0, 0, 0, 0, 1408, 0, 0,11618, 0, 632, + 0, 847, 0, 0, 0, 0, 0, 887, 0,12287, +12325, 0, 0, 0, 0, 0, 0, 0, 0, 1458, + 0, 1511, 0, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,11780, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9643, 0, 9351, 0, 0, 0, 627, 0, - 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4477, 416, 0, 9685, 0, 0, 0, - 4834, 0, 2846, 0, 0, 0, 2846, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, - 0, 1226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2846, 0, 752, 0, 493, 0, 0, 0, 0, - 0, 0, 0,11930, 825, 0, 0, 0, 0, 0, - 1262, 0, 654, 0, 0, 0, 0, 0, 0, 0, - 839, 0, 0, 0, 0, 0, 0, 0, 0, 1265, - 0,11930,11930, 0,11962, 0, 0, 0, 0, 0, - 0, 1266, 3089, 0, 1267,11930,11256, 1268,11930, 0, - 0, 0, 0, 0, 0, 1269, 0, 0, 0,12713, - 0, 0, 0,11930, 0, 0, 0, 1270, 0, 0, - 326, 0,12637,12675, 0, 0, 0, 1271, 0, 0, - 0, 0, 0, 0, 1272, 0, 0,11930, 0, 556, - 0, 840, 0, 0, 0, 0, 0, 642, 0,12561, -12599, 0, 0, 0, 0, 0, 0, 0, 0, 1290, - 0, 1369, 0, 0, 0, 844, 0, 0, 0, 0, + 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,12713,11428,12413, 0, - 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1202, 1202, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,12401, 1009,11116, 0, + 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1294, 1294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; protected static readonly short [] yyGindex = { 0, - 0, 1584, 0, 0, 0, 1, -9, -176, -48, 1586, - 0, 1626, 1634, 118, 0, -5, 0, 0, 0, 0, - 0, -883, -694, -218, -407, 0, 0, 0, 0, 0, - -187, 0, 0, 0, 707, 0, 816, 0, 0, 0, - 0, 562, 571, -17, -229, 0, -62, 0, 410, 0, - 438, -816, -757, -580, -568, -497, -491, -466, -462, 0, --1149, 0, 5, 0, 82, 0,-1076, 0, 0, 0, - 24, 237, 0, 0, 0, 270,-1056, 0, -253, -296, - 989, 0, 0, 0, -884, 223, 0, 0, -500, 0, - 0, 290, 0, 0, 262, 0, 0, 300, 0, -494, - -840, 0, 0, 0, 0, 0, 395, -13, 0, 0, - 817, 828, 830, 978, -528, 0, 0, -311, 824, 392, - 0, -848, 0, 0, 0, 0, 0, 0, 0, 0, - 207, 0, 0, 0, 0, 0, 0, 0, 0, 451, - 0, 0, 0, 0, -332, 370, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 466, 0, -503, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, - 301, 0, 0, 307, 312, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 524, 0, 0, 0, 0, -44, - 0, -12, -190, 0, 0, 374, 0, 430, 0, 881, - 0, 1190, -289, -266, -64, 400, 0, 529, 0, -30, - 62, 0, 0, 510, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -258, 0, 920, 0, 0, -119, 0, 0, 0, 833, - 0, -291, -130, 1009, 926, 0, 918, 0, 1135, 1347, - 1034, 0, 0, 734, 1664, 0, 0, 0, 0, 1020, - 0, 0, 0, 0, 0, -502, 1405, 0, 0, 0, - 0, 0, 1224, 463, 664, 770, 832, 1341, 1342, 1343, - 1344, 1345, 0, 1348, 0, 0, 0, 965, 1197, -736, + 0, 1735, 0, 0, 0, 1, -4, -176, -41, 1738, + 0, 1774, 1785, 504, 0, -5, 0, 0, 0, 0, + 0, -830, -697, -215, -450, 0, 0, 0, 0, 0, + -180, 0, 0, 0, 849, 0, 965, 0, 0, 0, + 0, 704, 705, -17, -229, 0, -62, 0, 549, 0, + 593, -868, -860, -573, -539, -534, -476, -468, -449, 0, +-1099, 0, 3, 0, 160, 0,-1082, 0, 0, 0, + -7, 375, 0, 0, 0, 425,-1056, 0, -259, -286, + 1139, 0, 0, 0, -877, 373, 0, 0, -496, 0, + 0, 448, 0, 0, 412, 0, 0, 457, 0, -538, + -935, 0, 0, 0, 0, 0, 547, -13, 0, 0, + 968, 970, 977, 1142, -519, 0, 0, -314, 982, 548, + 0,-1316, 0, 0, 0, 0, 0, 0, 0, 0, + 353, 0, 0, 0, 0, 0, 0, 0, 0, 598, + 0, 0, 0, 0, -310, 531, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 0, -503, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, + 453, 0, 0, 452, 455, 390, 0, 0, 0, 0, + 0, 0, 0, 0, 674, 0, 0, 0, 0, -58, + 0, -12, -188, 0, 0, 519, 0, 589, 0, 1044, + 0, 1344, -288, -263, -52, 923, 0, 699, 0, -37, + 161, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -290, 0, 0, 0, 0, -449, 0, 589, 0, - 498, 0, 581, 0, 0, 0, 646, -521, 6, -314, - 7, 0, 1599, 0, 45, 0, 65, 83, 91, 97, - 111, 116, 121, 132, 135, 139, 0, -665, 0, -26, - 0, 0, 785, 0, 704, 0, 0, 0, 686, -286, - 757, -852, 0, 802, -465, 0, 0, 0, 0, 0, - 0, 703, 0, 0, 713, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, - 0, 0, 0, 0, 0, 0, 0, 0, -33, 0, - 1264, 0, 0, 0, 884, 0, 0, 0, 0, 0, - 0, -171, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1360, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, - 0, 0, 635, 0, 0, 0, 0, 0, 0, -6, - 953, 0, 0, 0, 980, + -260, 0, 520, 0, 0, -43, 0, 0, 0, 997, + 0, -298, -129, 1159, 1087, 0, 1077, 0, 1295, 1516, + 1204, 0, 0, 892, 1816, 0, 0, 0, 0, 1173, + 0, 0, 0, 0, 0, -512, 1563, 0, 0, 0, + 0, 0, 1116, 535, 866, 662, 872, 1499, 1502, 1498, + 1501, 1503, 0, 1510, 0, 0, 0, 1143, 1357, -726, + 0, -702, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -295, 0, 0, 0, 0, -446, 0, 740, 0, + 661, 0, 748, 0, 0, 0, 814, -532, -16, -316, + -15, 0, 1768, 0, 86, 0, 89, 106, 121, 129, + 132, 136, 139, 145, 146, 153, 0, -675, 0, -26, + 0, 0, 947, 0, 876, 0, 0, 0, 854, -199, + 934, -853, 0, 972, -462, 0, 0, 0, 0, 0, + 0, 867, 0, 0, 862, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 796, + 0, 0, 0, 0, 0, 0, 0, 0, -30, 0, + 1410, 0, 0, 0, 1042, 0, 0, 0, 0, 0, + 0, -161, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1515, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, + 0, 0, 794, 0, 0, 0, 0, 0, 0, 5, + 1106, 0, 0, 0, 1117, }; protected static readonly short [] yyTable = { 109, - 432, 513, 233, 111, 18, 292, 731, 194, 189, 516, - 43, 736, 429, 447, 192, 680, 428, 471, 571, 316, - 702, 556, 155, 156, 322, 327, 404, 532, 257, 334, - 509, 775, 259, 906, 489, 1012, 497, 543, 1132, 570, - 229, 783, 886, 308, 251, 867, 467, 868, 361, 939, - 369, 1060, 1061, 1165, 1166, 302, 788, 663, 538, 302, - 505, 160, 411, 1061, 14, 309, 1254, 311, 360, 707, - 368, 190, 1015, 877, 194, 194, 651, 337, 115, 290, - 806, 161, 1261, 664, 20, 771, 1005, 385, 673, 1043, - 288, 898, 558, 1045, 900, 194, 654, 1319, 289, 162, - 1193, 641, 642, 1360, 332, 1160, 772, 163, 1469, 406, - 323, 328, 411, 164, 710, 665, 1470, 893, 893, 874, - 115, 249, 345, 386, 115, 786, 830, 165, 661, 432, - 865, 353, 166, 348, 291, 16, 471, 167, 197, 109, - 233, 633, 46, 111, 2, 412, 712, 789, 168, 559, - 413, 169, 414, 739, 46, 170, 661, 323, 415, 416, - 323, 432, 155, 156, 1446, 661, 579, 773, 866, 197, - 250, 506, 346, 507, 756, 249, 290, 1471, 196, 654, - 875, 643, 759, 446, 472, 290, 194, 194, 1161, 231, - 290, 878, 6, 750, 1496, 412, 476, 893, 1015, 1, - 413, 160, 414, 387, 388, 807, 1062, 654, 415, 416, - 447, 977, 729, 869, 725, 571, 438, 1062, 115, 666, - 347, 161, 436, 437, 250, 786, 15, 508, 1361, 470, - 711, 291, 444, 191, 475, 417, 570, 571, 556, 162, - 291, 1428, 467, 348, 648, 291, 333, 163, 194, 1126, - 674, 1044, 531, 164, 257, 1046, 535, 349, 485, 1320, - 537, 540, 713, 556, 257, 542, 46, 165, 1452, 740, - 488, 20, 166, 1074, 194, 492, 494, 167, 681, 786, - 1462, 539, 1463, 1447, 477, 427, 194, 530, 168, 519, - 757, 169, 1192, 194, 527, 170, 529, 794, 760, 528, - 492, 2, 881, 472, 472, 94, 939, 48, 1215, 881, - 487, 1208, 545, 546, 1497, 975, 676, 1057, 480, 801, - 677, 577, 571, 655, 290, 967, 443, 688, 1424, 518, - 1085, 446, 939, 1390, 354, 194, 1112, 302, 194, 1417, - 1332, 555, 557, 750, 831, 225, 115, 226, 470, 591, + 155, 156, 432, 111, 18, 292, 731, 194, 43, 233, + 516, 513, 429, 189, 192, 736, 447, 471, 680, 556, + 775, 257, 532, 702, 322, 327, 428, 404, 489, 334, + 543, 316, 259, 509, 497, 869, 570, 870, 1132, 888, + 571, 1061, 1012, 908, 251, 788, 308, 1165, 1166, 939, + 783, 229, 1060, 467, 360, 302, 368, 786, 14, 302, + 361, 538, 369, 771, 1061, 309, 710, 311, 411, 707, + 190, 1015, 1291, 712, 194, 194, 909, 337, 673, 323, + 328, 900, 1043, 411, 902, 258, 1446, 651, 357, 1045, + 480, 806, 1319, 288, 1193, 194, 409, 332, 1469, 505, + 353, 289, 160, 1454, 1455, 161, 1470, 879, 502, 406, + 969, 1160, 503, 358, 772, 16, 1254, 935, 936, 258, + 663, 1292, 162, 258, 258, 258, 258, 258, 258, 258, + 258, 432, 1261, 395, 396, 832, 471, 163, 231, 109, + 155, 156, 315, 111, 633, 164, 664, 233, 165, 410, + 346, 412, 166, 739, 1126, 167, 413, 786, 414, 1005, + 1487, 168, 169, 432, 415, 416, 412, 1471, 579, 170, + 1496, 413, 6, 414, 481, 773, 290, 115, 665, 415, + 416, 46, 711, 290, 472, 1360, 194, 194, 290, 713, + 446, 436, 437, 46, 1161, 1062, 476, 1015, 347, 357, + 231, 357, 1215, 357, 357, 1447, 357, 725, 357, 756, + 506, 786, 507, 447, 249, 750, 807, 871, 1062, 115, + 15, 348, 729, 115, 1016, 880, 1018, 438, 1020, 470, + 444, 291, 191, 570, 475, 349, 556, 571, 291, 333, + 674, 417, 160, 291, 1044, 161, 648, 257, 194, 467, + 357, 1046, 357, 477, 1320, 357, 427, 257, 485, 571, + 537, 556, 162, 250, 531, 542, 508, 539, 535, 740, + 488, 883, 54, 540, 194, 492, 494, 163, 345, 487, + 681, 94, 666, 1074, 977, 164, 194, 530, 165, 519, + 1497, 1428, 166, 194, 527, 167, 529, 794, 518, 528, + 492, 168, 169, 472, 472, 46, 939, 1057, 939, 170, + 1361, 258, 545, 546, 1077, 231, 1079, 115, 1452, 555, + 557, 258, 759, 1390, 577, 757, 258, 1085, 1424, 1, + 1462, 1234, 1463, 20, 385, 194, 967, 302, 194, 1235, + 562, 833, 20, 883, 571, 1192, 1112, 558, 470, 591, 635, 637, 639, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 359, 737, 54, 3, 4, 5, - 6, 562, 194, 194, 1473, 115, 802, 432, 345, 894, - 233, 678, 355, 1234, 996, 631, 231, 1293, 446, 790, - 652, 792, 1003, 793, 678, 409, 447, 115, 981, 1310, - 194, 194, 481, 1311, 1493, 44, 655, 860, 613, 614, - 311, 795, 689, 737, 984, 684, 113, 1291, 194, 42, - 883, 231, 699, 882, 708, 646, 1234, 883, 1338, 649, - 650, 976, 194, 1333, 655, 661, 636, 638, 1138, 667, - 231, 411, 1235, 356, 939, 1143, 231, 472, 410, 6, - 939, 571, 231, 447, 471, 678, 823, 497, 113, 701, - 46, 345, 113, 749, 635, 697, 1292, 758, 346, 635, - 1168, 359, 570, 635, 737, 432, 1050, 290, 359, 346, - 359, 434, 359, 1348, 1294, 1235, 326, 326, 635, 345, - 727, 679, 591, 345, 734, 345, 345, 345, 345, 1069, - 435, 1070, 522, 345, 199, 725, 782, 326, 741, 743, - 1459, 1378, 1379, 751, 1381, 635, 347, 873, 761, 744, - 748, 571, 358, 763, 412, 1400, 359, 347, 1407, 413, - 357, 414, 1001, 1295, 635, 194, 1246, 415, 416, 348, - 482, 965, 434, 1423, 892, 892, 776, 115, 483, 732, - 348, 315, 679, 349, 960, 732, 113, 194, 555, 557, - 725, 435, 1460, 622, 349, 622, 824, 1445, 258, 796, - 796, 1454, 1455, 811, 916, 813, 94, 451, 825, 451, - 249, 844, 923, 555, 557, 346, 725, 923, 635, 923, - 736, 352, 923, 923, 879, 923, 923, 323, 326, 326, - 244, 484, 258, 323, 732, 845, 258, 258, 258, 258, - 258, 258, 258, 258, 115, 991, 809, 923, 775, 1236, - 622, 472, 815, 1086, 892, 780, 389, 390, 1487, 250, - 516, 1237, 846, 347, 451, 1096, 969, 352, 862, 115, - 635, 357, 194, 357, 926, 357, 357, 1097, 357, 926, - 357, 926, 323, 330, 926, 926, 348, 926, 926, 330, - 326, 330, 1236, 194, 231, 330, 470, 781, 330, 330, - 349, 702, 923, 330, 1237, 633, 330, 330, 313, 926, - 492, 843, 330, 535, 113, 257, 326, 634, 895, 1054, - 330, 1051, 357, 200, 357, 729, 734, 357, 326, 633, - 1141, 727, 1238, 648, 347, 326, 245, 635, 1239, 1258, - 246, 634, 635, 113, 330, 1031, 635, 736, 494, 1051, - 911, 330, 714, 330, 494, 736, 633, 348, 46, 194, - 890, 635, 347, 1240, 926, 113, 472, 1241, 634, 94, - 828, 472, 330, 330, 901, 1238, 902, 326, 1284, 348, - 326, 1239, 194, 986, 904, 348, 776, 937, 635, 564, - 247, 908, 330, 791, 995, 889, 565, 194, 262, 349, - 330, 194, 115, 330, 115, 94, 1240, 635, 566, 652, - 1241, 591, 829, 347, 326, 326, 591, 918, 903, 734, - 401, 1217, 1233, 556, 258, 1315, 433, 248, 960, 434, - 935, 936, 402, 910, 258, 431, 348, 1105, 1328, 258, - 823, 1217, 326, 326, 260, 347, 521, 564, 115, 853, - 349, 115, 315, 194, 565, 556, 999, 1346, 1002, 522, - 667, 957, 598, 488, 1004, 1233, 566, 1217, 348, 502, - 358, 194, 194, 503, 1135, 949, 523, 329, 982, 615, - 616, 1084, 580, 680, 94, 985, 359, 556, 1031, 358, - 1013, 582, 581, 1334, 316, 993, 276, 734, 276, 315, - 316, 583, 1411, 276, 357, 433, 917, 317, 968, 258, - 1167, 917, 472, 917, 370, 113, 917, 917, 315, 917, - 917, 258, 258, 258, 94, 847, 258, 258, 1040, 657, - 932, 933, 848, 1191, 358, 919, 397, 194, 657, 1016, - 919, 1018, 919, 1020, 433, 919, 919, 822, 919, 919, - 891, 1281, 266, 395, 396, 326, 330, 1030, 1281, 194, - 447, 266, 330, 315, 1464, 656, 667, 194, 330, 1117, - 1118, 598, 330, 598, 656, 348, 439, 326, 1149, 391, - 392, 330, 113, 1251, 330, 330, 1037, 683, 1038, 734, - 1039, 684, 492, 393, 394, 913, 917, 1474, 1475, 326, - 913, 1484, 913, 1035, 400, 913, 913, 113, 913, 913, - 261, 225, 516, 228, 285, 286, 287, 330, 293, 294, - 1502, 1503, 399, 306, 307, 919, 776, 518, 518, 1077, - 312, 1079, 314, 1080, 318, 635, 635, 63, 63, 330, - 331, 63, 495, 398, 295, 409, 296, 409, 495, 249, - 345, 362, 892, 892, 345, 472, 330, 345, 1011, 345, - 804, 717, 1089, 367, 345, 718, 409, 409, 726, 403, - 363, 364, 503, 488, 115, 330, 330, 64, 330, 330, - 55, 64, 617, 618, 326, 913, 409, 1113, 734, 776, - 365, 1087, 296, 1088, 409, 1120, 225, 409, 250, 435, - 1030, 366, 382, 383, 384, 326, 233, 488, 1152, 1125, - 488, 742, 439, 742, 258, 335, 432, 442, 960, 335, - 468, 330, 113, 959, 113, 959, 754, 1145, 754, 113, - 233, 763, 469, 763, 1148, 763, 153, 332, 153, 1326, - 113, 490, 113, 555, 557, 194, 488, 752, 335, 752, - 491, 752, 335, 1326, 330, 335, 512, 335, 1174, 1080, - 412, 1152, 335, 335, 165, 413, 165, 414, 165, 359, - 1356, 326, 1357, 415, 416, 555, 557, 160, 517, 160, - 1216, 1232, 161, 177, 161, 177, 113, 177, 536, 113, - 619, 620, 621, 622, 326, 115, 335, 541, 194, 115, - 1216, 1204, 115, 312, 1130, 1131, 367, 555, 557, 326, - 870, 371, 870, 326, 1265, 194, 66, 1249, 66, 488, - 183, 154, 183, 154, 1232, 520, 1216, 115, 118, 549, - 118, 115, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 281, 125, 281, 125, 510, 288, 575, 288, - 576, 1212, 584, 746, 348, 258, 623, 624, 662, 526, - 352, 647, 24, 115, 25, 682, 5, 26, 685, 687, - 194, 194, 27, 1286, 709, 715, 28, 762, 194, 716, - 738, 755, 764, 326, 326, 30, 194, 194, 765, 194, - 766, 767, 32, 115, 784, 1306, 785, 33, 787, 799, - 800, 34, 805, 804, 810, 812, 1212, 1306, 820, 194, - 832, 814, 194, 36, 833, 37, 433, 835, 836, 38, - 1306, 839, 1289, 1290, 1335, 856, 851, 39, 40, 42, - 929, 41, 857, 858, 747, 859, 863, 864, 880, 1306, - 884, 196, 887, 885, 1391, 1318, 335, 892, 1321, 326, - 338, 339, 340, 341, 342, 343, 344, 345, 896, 905, - 290, 1418, 897, 913, 923, 928, 930, 934, 938, 944, - 948, 945, 947, 950, 1430, 1432, 953, 955, 961, 326, - 973, 974, 977, 983, 990, 734, 506, 1286, 1008, 997, - 1009, 1014, 1024, 1041, 1033, 1075, 1058, 488, 1047, 1048, - 1056, 1418, 1418, 1049, 1068, 1072, 1078, 1083, 33, 1091, - 1076, 1095, 113, 929, 1440, 320, 1098, 1099, 929, 1100, - 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, - 698, 1103, 1101, 1106, 1116, 1119, 1121, 1128, 1133, 1139, - 448, 1151, 929, 1141, 929, 1144, 929, 734, 929, 929, - 929, 499, 1173, 1176, 1178, 1180, 1181, 1182, 1418, 1190, - 1187, 472, 472, 449, 1195, 1161, 1191, 1198, 1199, 1200, - 1207, 742, 1201, 1247, 1203, 1250, 450, 1255, 1252, 1296, - 1262, 452, 1253, 1288, 734, 1267, 453, 1309, 454, 455, - 456, 457, 1330, 1324, 1489, 1489, 458, 1313, 1314, 1340, - 459, 1498, 1498, 929, 1299, 1327, 591, 591, 1342, 1323, - 1345, 1331, 460, 1333, 1343, 461, 1347, 462, 1353, 1351, - 1354, 1349, 1359, 5, 1364, 1367, 1370, 46, 1374, 1371, - 1372, 1401, 1382, 113, 1386, 1383, 1412, 113, 46, 1396, - 113, 463, 1403, 46, 1415, 1413, 1416, 46, 1422, 1425, - 46, 1426, 1437, 335, 1436, 1439, 1442, 326, 1444, 1441, - 1456, 1457, 46, 46, 1461, 113, 1450, 46, 46, 113, - 1466, 1465, 1476, 46, 1468, 46, 46, 46, 46, 1460, - 1459, 1482, 544, 46, 1483, 1504, 1505, 46, 1506, 46, - 9, 955, 531, 599, 840, 489, 947, 1300, 807, 46, - 490, 113, 46, 446, 46, 600, 668, 29, 46, 21, - 326, 811, 488, 29, 746, 514, 30, 308, 656, 842, - 30, 204, 337, 544, 94, 756, 848, 326, 46, 780, - 748, 113, 747, 757, 635, 610, 611, 612, 812, 749, - 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 781, 814, 312, 816, - 678, 635, 656, 230, 330, 33, 234, 53, 21, 33, - 121, 103, 284, 128, 122, 104, 285, 129, 1025, 1123, - 33, 943, 326, 326, 1264, 33, 1256, 1427, 1124, 33, - 326, 1458, 33, 1467, 841, 1414, 1443, 854, 326, 326, - 1409, 326, 1303, 970, 33, 33, 966, 499, 1337, 33, - 33, 1316, 499, 499, 971, 33, 972, 33, 33, 33, - 33, 326, 1500, 1263, 326, 33, 1260, 1492, 1438, 33, - 1433, 33, 1491, 1196, 1431, 499, 1358, 1307, 939, 1197, - 989, 33, 586, 33, 33, 752, 33, 850, 499, 499, - 33, 917, 798, 499, 915, 1059, 499, 872, 499, 544, - 499, 499, 499, 499, 298, 870, 547, 625, 499, 626, - 33, 627, 499, 628, 769, 629, 499, 33, 912, 630, - 1268, 1184, 1188, 1140, 499, 405, 1102, 499, 774, 499, - 499, 1114, 1071, 1053, 1042, 499, 1107, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, 1109, 1170, - 645, 1175, 1006, 499, 499, 1266, 941, 745, 499, 499, - 0, 499, 499, 499, 499, 499, 499, 499, 786, 499, - 499, 0, 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 940, 499, 499, 499, 499, 499, 499, 499, + 606, 607, 608, 609, 1208, 750, 975, 2, 1473, 359, + 386, 443, 194, 194, 1234, 1417, 876, 613, 614, 432, + 1120, 678, 1235, 984, 1003, 631, 1332, 233, 1348, 885, + 996, 790, 654, 792, 1293, 793, 258, 652, 1493, 688, + 194, 194, 862, 981, 559, 636, 638, 199, 258, 258, + 258, 795, 1145, 258, 258, 684, 1378, 1379, 194, 1381, + 939, 655, 699, 290, 708, 646, 939, 196, 1138, 6, + 1400, 2, 194, 1407, 48, 1143, 231, 877, 760, 667, + 649, 650, 678, 1174, 635, 115, 661, 472, 1423, 635, + 387, 388, 1310, 635, 471, 497, 1311, 884, 825, 701, + 1168, 885, 354, 749, 42, 697, 290, 758, 635, 570, + 641, 642, 1445, 571, 115, 654, 359, 432, 291, 1333, + 1050, 1338, 976, 359, 689, 359, 1204, 359, 231, 1069, + 727, 1070, 591, 346, 734, 635, 115, 3, 4, 5, + 6, 231, 1249, 654, 655, 737, 782, 676, 741, 743, + 355, 677, 231, 751, 635, 434, 893, 893, 761, 200, + 748, 896, 482, 763, 197, 1459, 1246, 330, 892, 892, + 483, 359, 655, 801, 345, 194, 555, 557, 244, 330, + 965, 347, 330, 330, 346, 571, 776, 411, 446, 736, + 643, 290, 352, 737, 447, 197, 330, 194, 679, 683, + 849, 555, 557, 684, 348, 346, 960, 850, 725, 796, + 796, 356, 678, 813, 916, 815, 434, 1460, 349, 435, + 261, 725, 875, 484, 285, 286, 287, 635, 293, 294, + 802, 736, 347, 306, 307, 881, 893, 311, 352, 248, + 312, 258, 314, 1086, 318, 446, 1001, 775, 892, 330, + 331, 447, 330, 347, 737, 348, 810, 345, 330, 679, + 991, 472, 817, 725, 330, 313, 1236, 330, 330, 349, + 412, 516, 622, 367, 622, 413, 348, 414, 864, 635, + 435, 330, 194, 415, 416, 345, 115, 46, 846, 345, + 349, 345, 345, 345, 345, 451, 732, 451, 780, 345, + 1237, 249, 732, 194, 867, 1238, 470, 262, 46, 1236, + 633, 323, 847, 330, 702, 46, 736, 323, 257, 845, + 492, 245, 634, 1294, 1054, 246, 94, 580, 897, 622, + 249, 46, 389, 390, 633, 535, 734, 581, 260, 848, + 781, 727, 868, 1237, 46, 729, 634, 648, 1238, 46, + 250, 732, 451, 115, 46, 1031, 46, 46, 46, 46, + 911, 633, 46, 1239, 46, 661, 323, 94, 46, 194, + 892, 1240, 1295, 634, 891, 247, 472, 714, 115, 250, + 46, 472, 258, 46, 903, 46, 904, 347, 1217, 1233, + 1241, 1315, 194, 661, 906, 830, 776, 905, 249, 937, + 362, 810, 661, 348, 1328, 522, 1239, 194, 1217, 46, + 348, 194, 910, 312, 1240, 295, 367, 789, 1051, 363, + 364, 591, 744, 1346, 349, 521, 591, 918, 652, 734, + 347, 556, 1233, 1241, 1217, 635, 573, 831, 522, 365, + 635, 1105, 810, 810, 635, 330, 1051, 250, 960, 1141, + 366, 330, 825, 348, 431, 523, 510, 330, 1258, 635, + 598, 330, 598, 556, 347, 194, 329, 349, 999, 526, + 1002, 986, 667, 957, 330, 488, 1004, 348, 1135, 315, + 347, 401, 995, 194, 194, 949, 635, 348, 358, 968, + 982, 791, 358, 402, 358, 556, 680, 985, 1031, 357, + 1013, 1084, 582, 348, 359, 635, 330, 993, 433, 734, + 893, 115, 583, 115, 1167, 398, 1411, 315, 564, 573, + 855, 315, 472, 315, 573, 565, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 566, 1040, 564, + 433, 63, 63, 434, 598, 63, 565, 194, 573, 810, + 573, 810, 573, 810, 573, 573, 573, 115, 566, 397, + 115, 615, 616, 826, 225, 573, 226, 1030, 44, 194, + 573, 391, 392, 447, 370, 827, 667, 194, 1464, 113, + 573, 573, 1035, 1281, 399, 393, 394, 1251, 1149, 1096, + 1281, 316, 433, 573, 1037, 824, 1038, 316, 1039, 734, + 923, 1097, 492, 94, 317, 923, 400, 923, 94, 573, + 923, 923, 1284, 923, 923, 1484, 403, 1334, 717, 94, + 335, 113, 718, 516, 335, 113, 330, 113, 1191, 113, + 1502, 1503, 296, 657, 113, 923, 776, 439, 266, 810, + 698, 810, 657, 1080, 726, 656, 917, 266, 503, 326, + 326, 917, 746, 917, 656, 330, 917, 917, 330, 917, + 917, 24, 276, 25, 276, 472, 26, 435, 335, 276, + 326, 27, 1089, 335, 763, 28, 763, 335, 763, 330, + 335, 742, 335, 488, 30, 64, 295, 335, 296, 64, + 923, 32, 619, 620, 621, 622, 33, 1113, 734, 776, + 34, 323, 345, 442, 323, 810, 345, 225, 330, 345, + 1030, 345, 36, 225, 37, 228, 345, 488, 38, 113, + 488, 335, 468, 233, 1125, 1152, 39, 40, 432, 469, + 41, 555, 557, 747, 348, 439, 917, 810, 960, 752, + 1011, 752, 804, 752, 1148, 330, 330, 233, 330, 330, + 55, 1326, 1087, 412, 1088, 194, 488, 332, 413, 290, + 414, 326, 326, 555, 557, 1326, 415, 416, 810, 1080, + 165, 177, 165, 177, 165, 177, 512, 742, 1152, 742, + 926, 490, 1356, 115, 1357, 926, 959, 926, 959, 491, + 926, 926, 359, 926, 926, 555, 557, 1216, 1232, 919, + 517, 382, 383, 384, 919, 754, 919, 754, 194, 919, + 919, 810, 919, 919, 320, 926, 153, 1216, 153, 160, + 161, 160, 161, 326, 1265, 194, 870, 810, 870, 488, + 1212, 66, 183, 66, 183, 154, 330, 154, 118, 520, + 118, 1232, 281, 1216, 281, 932, 933, 113, 335, 326, + 1117, 1118, 338, 339, 340, 341, 342, 343, 344, 345, + 125, 326, 125, 288, 913, 288, 1474, 1475, 326, 913, + 926, 913, 892, 892, 913, 913, 113, 913, 913, 536, + 194, 194, 541, 1286, 549, 1212, 518, 518, 194, 919, + 635, 635, 1130, 1131, 617, 618, 194, 194, 113, 194, + 575, 1289, 1290, 576, 115, 1306, 623, 624, 115, 27, + 326, 115, 348, 326, 662, 584, 685, 1306, 352, 194, + 715, 647, 194, 682, 1318, 687, 709, 1321, 716, 738, + 1306, 755, 27, 762, 1335, 764, 115, 765, 766, 767, + 115, 785, 784, 799, 800, 27, 575, 326, 326, 1306, + 27, 787, 804, 812, 913, 27, 805, 27, 27, 27, + 27, 1391, 814, 27, 816, 27, 822, 834, 835, 27, + 433, 837, 115, 838, 841, 326, 326, 858, 1418, 42, + 859, 27, 860, 853, 27, 499, 27, 861, 865, 866, + 886, 1430, 1432, 196, 882, 734, 887, 1286, 889, 898, + 894, 899, 115, 913, 907, 928, 930, 488, 923, 934, + 27, 938, 944, 948, 945, 950, 27, 27, 1418, 1418, + 953, 947, 955, 961, 1440, 973, 974, 983, 977, 575, + 990, 506, 1009, 997, 575, 1008, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 1014, 113, 1024, + 1041, 1033, 1047, 1049, 1058, 335, 1048, 734, 575, 1056, + 575, 1075, 575, 1068, 575, 575, 575, 1072, 1078, 1083, + 1091, 472, 472, 1076, 1095, 1418, 494, 1098, 1099, 330, + 575, 330, 494, 1100, 544, 1101, 1103, 1106, 326, 1116, + 575, 575, 330, 1121, 734, 1128, 1119, 1133, 330, 1139, + 330, 330, 1141, 575, 1489, 1489, 1144, 1173, 1176, 1151, + 326, 1498, 1498, 1180, 1161, 113, 591, 591, 1178, 575, + 330, 1187, 1181, 1182, 1190, 544, 1191, 1198, 330, 1195, + 1199, 330, 326, 1203, 330, 1200, 1247, 610, 611, 612, + 113, 1207, 544, 544, 544, 544, 544, 544, 544, 544, + 544, 544, 544, 544, 544, 544, 544, 544, 1201, 1250, + 1252, 1253, 1255, 1262, 1267, 1288, 1296, 1309, 1330, 1313, + 842, 1314, 1323, 1324, 1327, 330, 1331, 1340, 1342, 1345, + 330, 1343, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 1347, 1333, 1349, 1351, 1354, 330, + 1364, 1353, 1367, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 1359, 330, 330, 1370, 326, 330, 330, + 330, 330, 330, 1371, 1372, 330, 330, 1374, 1382, 1383, + 330, 330, 330, 330, 330, 330, 330, 330, 326, 1386, + 1396, 499, 1401, 1403, 1412, 1415, 499, 499, 1413, 330, + 1416, 1422, 330, 1425, 330, 1426, 330, 1436, 1437, 330, + 1439, 544, 355, 1442, 1441, 330, 1444, 1450, 1456, 499, + 1457, 1461, 1465, 113, 1466, 113, 1476, 1468, 1460, 1459, + 1482, 1483, 499, 499, 1504, 1505, 1506, 499, 9, 955, + 499, 531, 499, 840, 499, 499, 499, 499, 489, 599, + 947, 807, 499, 490, 326, 446, 499, 668, 600, 29, + 499, 21, 514, 811, 488, 29, 308, 746, 499, 113, + 30, 499, 113, 499, 499, 204, 30, 326, 756, 499, + 786, 499, 499, 499, 499, 499, 499, 499, 499, 499, + 499, 499, 326, 848, 94, 747, 326, 499, 499, 757, + 748, 812, 499, 499, 749, 499, 499, 499, 499, 499, + 499, 499, 780, 499, 499, 781, 499, 499, 499, 499, + 499, 499, 499, 499, 499, 499, 656, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 0, 0, 499, 0, 499, - 0, 499, 0, 0, 499, 842, 842, 0, 0, 0, - 499, 0, 0, 842, 842, 842, 842, 842, 0, 842, - 842, 0, 842, 842, 842, 842, 842, 842, 842, 842, - 0, 0, 0, 0, 842, 0, 842, 842, 842, 842, - 842, 842, 0, 0, 842, 0, 0, 330, 842, 842, - 0, 842, 842, 842, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 842, 0, 842, 0, 842, 842, 0, - 0, 842, 0, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 0, 842, 0, 0, 842, - 842, 0, 0, 842, 842, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 842, 842, - 842, 842, 842, 0, 0, 0, 842, 842, 0, 0, - 842, 0, 0, 0, 0, 842, 842, 842, 842, 842, - 0, 0, 0, 842, 0, 842, 0, 0, 0, 0, - 0, 842, 842, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 842, 842, 842, 842, - 0, 842, 0, 0, 774, 774, 0, 0, 842, 0, - 0, 0, 774, 774, 774, 774, 774, 0, 774, 774, - 0, 774, 774, 774, 774, 774, 774, 774, 0, 0, - 733, 0, 0, 774, 0, 774, 774, 774, 774, 774, - 774, 0, 0, 774, 0, 0, 0, 774, 774, 0, - 774, 774, 774, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 774, 0, 774, 0, 774, 774, 0, 0, - 774, 0, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 0, 774, 0, 0, 774, 774, - 0, 544, 774, 774, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 774, 774, 774, - 774, 774, 0, 0, 0, 774, 774, 0, 0, 774, - 0, 0, 0, 0, 774, 774, 774, 774, 774, 0, - 0, 0, 774, 330, 774, 0, 0, 0, 330, 330, - 774, 774, 0, 0, 0, 0, 0, 0, 0, 0, + 499, 499, 499, 499, 499, 499, 499, 499, 499, 814, + 312, 499, 816, 499, 678, 499, 337, 656, 499, 121, + 330, 103, 635, 635, 499, 34, 284, 128, 326, 326, + 122, 104, 285, 129, 230, 53, 842, 842, 234, 21, + 1025, 1123, 1124, 1264, 842, 842, 842, 842, 842, 1458, + 842, 842, 943, 842, 842, 842, 842, 842, 842, 842, + 842, 1256, 1427, 1467, 843, 842, 1443, 842, 842, 842, + 842, 842, 842, 1414, 1303, 842, 970, 1409, 971, 842, + 842, 856, 842, 842, 842, 972, 966, 1316, 1500, 1337, + 1263, 1260, 326, 1492, 842, 1433, 842, 1431, 842, 842, + 1438, 1358, 842, 1196, 842, 842, 842, 842, 842, 842, + 842, 842, 842, 842, 842, 842, 1307, 842, 1491, 752, + 842, 842, 326, 939, 842, 842, 989, 874, 355, 1197, + 917, 586, 798, 1059, 355, 915, 298, 852, 872, 842, + 842, 842, 842, 842, 547, 625, 627, 842, 842, 626, + 628, 842, 1184, 629, 769, 113, 842, 842, 842, 842, + 842, 630, 495, 1268, 842, 409, 842, 409, 495, 1188, + 355, 1140, 842, 842, 405, 1053, 912, 1109, 1102, 1114, + 1107, 774, 1170, 745, 1042, 645, 409, 409, 1266, 1071, + 1175, 941, 1006, 0, 0, 0, 0, 842, 842, 842, + 842, 940, 842, 0, 0, 0, 409, 0, 0, 842, + 0, 355, 0, 0, 409, 0, 355, 409, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 0, + 0, 0, 0, 0, 0, 355, 0, 0, 0, 355, + 355, 0, 355, 355, 355, 544, 355, 355, 355, 0, + 355, 355, 0, 0, 355, 355, 355, 355, 0, 0, + 0, 355, 355, 0, 0, 0, 355, 355, 355, 355, + 355, 355, 355, 355, 0, 0, 113, 0, 0, 0, + 113, 0, 34, 113, 0, 355, 34, 0, 355, 0, + 355, 0, 0, 0, 0, 0, 0, 34, 0, 0, + 326, 355, 34, 0, 0, 0, 34, 330, 113, 34, + 0, 0, 113, 0, 0, 0, 579, 0, 0, 0, + 0, 34, 34, 0, 0, 0, 34, 34, 0, 0, + 0, 0, 34, 0, 34, 34, 34, 34, 0, 0, + 0, 0, 34, 0, 113, 0, 34, 0, 34, 0, + 0, 0, 0, 326, 371, 0, 0, 0, 34, 0, + 34, 34, 0, 34, 0, 0, 0, 34, 0, 0, + 326, 0, 0, 0, 113, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 0, 0, 34, 0, 0, + 0, 0, 0, 34, 34, 0, 0, 0, 0, 579, + 0, 0, 0, 0, 579, 0, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 0, 0, 0, + 0, 0, 0, 0, 0, 326, 326, 0, 579, 0, + 579, 0, 579, 326, 579, 579, 579, 774, 774, 0, + 0, 326, 326, 0, 326, 774, 774, 774, 774, 774, + 579, 774, 774, 733, 774, 774, 774, 774, 774, 774, + 774, 0, 0, 0, 326, 0, 774, 326, 774, 774, + 774, 774, 774, 774, 0, 0, 774, 0, 0, 0, + 774, 774, 0, 774, 774, 774, 0, 0, 0, 579, + 0, 0, 0, 0, 0, 774, 0, 774, 0, 774, + 774, 0, 0, 774, 0, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 0, 774, 0, + 0, 774, 774, 0, 0, 774, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 323, 330, 0, 0, 0, 774, 774, 774, 774, 0, - 774, 0, 0, 0, 330, 330, 0, 774, 0, 330, - 0, 0, 330, 0, 330, 0, 330, 330, 330, 330, + 774, 774, 774, 774, 774, 0, 0, 0, 774, 774, + 0, 0, 774, 0, 0, 0, 0, 774, 774, 774, + 774, 774, 0, 330, 0, 774, 0, 774, 330, 330, + 0, 0, 0, 774, 774, 0, 0, 0, 0, 0, + 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, + 0, 330, 0, 0, 0, 0, 0, 0, 774, 774, + 774, 774, 0, 774, 330, 330, 0, 0, 0, 330, + 774, 0, 330, 0, 330, 0, 330, 330, 330, 330, 0, 0, 0, 0, 330, 0, 0, 0, 330, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 330, 0, 330, 330, 0, 0, 0, @@ -9956,750 +9975,703 @@ void case_962() 330, 0, 0, 0, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, 330, 330, 0, 0, 330, 330, 330, 330, 330, 0, 0, 330, 330, 0, 0, - 0, 330, 330, 330, 330, 330, 330, 330, 330, 0, - 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, - 330, 733, 733, 330, 0, 330, 0, 330, 0, 0, - 330, 0, 0, 0, 0, 0, 330, 360, 0, 0, - 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 733, 733, 0, - 0, 0, 733, 0, 0, 733, 0, 733, 0, 733, - 733, 733, 733, 0, 0, 0, 0, 733, 0, 0, - 0, 733, 0, 0, 0, 733, 0, 0, 0, 0, - 0, 0, 0, 733, 0, 0, 733, 0, 733, 733, - 0, 0, 0, 0, 733, 0, 733, 733, 733, 733, - 733, 733, 733, 733, 733, 733, 733, 0, 0, 0, - 0, 0, 733, 733, 0, 0, 0, 733, 733, 733, - 733, 733, 733, 0, 733, 733, 733, 0, 733, 733, - 0, 330, 733, 733, 733, 733, 323, 0, 0, 733, - 733, 323, 323, 0, 733, 733, 733, 733, 733, 733, - 733, 733, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 733, 323, 0, 733, 0, 733, 0, - 733, 0, 0, 733, 0, 0, 0, 323, 323, 733, - 0, 0, 323, 0, 0, 323, 0, 323, 0, 323, - 323, 323, 323, 0, 0, 0, 0, 323, 0, 0, - 0, 323, 0, 0, 0, 323, 0, 0, 0, 0, - 0, 0, 0, 323, 0, 0, 323, 0, 323, 323, - 0, 0, 0, 0, 323, 0, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 0, 0, 0, - 0, 0, 323, 323, 0, 0, 0, 323, 323, 323, - 323, 323, 323, 0, 323, 323, 323, 0, 323, 323, - 0, 0, 323, 323, 323, 323, 0, 0, 0, 323, - 323, 0, 0, 0, 323, 323, 323, 323, 323, 323, - 323, 323, 0, 360, 355, 0, 0, 0, 360, 360, - 0, 0, 0, 323, 0, 0, 323, 0, 323, 0, - 323, 0, 0, 323, 0, 0, 0, 0, 0, 323, - 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 360, 360, 0, 0, 0, 360, - 0, 0, 360, 0, 360, 0, 360, 360, 360, 360, - 0, 0, 0, 0, 360, 0, 0, 0, 360, 0, - 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, - 360, 0, 0, 360, 0, 360, 360, 0, 0, 0, - 0, 360, 0, 360, 360, 360, 360, 360, 360, 360, - 360, 360, 360, 360, 0, 0, 0, 330, 0, 360, - 360, 0, 0, 330, 360, 360, 0, 360, 360, 360, - 0, 360, 360, 360, 0, 360, 360, 0, 0, 360, - 360, 360, 360, 0, 0, 0, 360, 360, 0, 0, - 0, 360, 360, 360, 360, 360, 360, 360, 360, 330, + 0, 330, 330, 330, 330, 330, 330, 330, 330, 733, + 0, 0, 0, 360, 733, 733, 0, 0, 0, 0, + 330, 0, 0, 330, 0, 330, 0, 330, 0, 0, + 330, 0, 0, 0, 0, 0, 330, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 360, 0, 47, 360, 0, 360, 0, 330, 0, 0, - 0, 0, 0, 330, 0, 0, 360, 0, 0, 0, + 733, 733, 0, 0, 0, 733, 0, 0, 733, 0, + 733, 0, 733, 733, 733, 733, 0, 0, 0, 0, + 733, 0, 0, 0, 733, 0, 0, 0, 733, 0, + 0, 0, 0, 0, 0, 0, 733, 0, 0, 733, + 0, 733, 733, 0, 0, 0, 0, 733, 0, 733, + 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, + 0, 0, 0, 0, 0, 733, 733, 0, 0, 0, + 733, 733, 733, 733, 733, 733, 0, 733, 733, 733, + 0, 733, 733, 0, 0, 733, 733, 733, 733, 323, + 0, 0, 733, 733, 323, 323, 0, 733, 733, 733, + 733, 733, 733, 733, 733, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 733, 323, 0, 733, + 0, 733, 0, 733, 0, 0, 733, 0, 47, 0, + 323, 323, 733, 0, 0, 323, 0, 0, 323, 0, + 323, 0, 323, 323, 323, 323, 0, 0, 0, 0, + 323, 0, 0, 0, 323, 0, 0, 0, 323, 0, + 0, 0, 0, 0, 0, 0, 323, 0, 0, 323, + 0, 323, 323, 0, 0, 0, 0, 323, 0, 323, + 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + 0, 0, 0, 0, 0, 323, 323, 0, 0, 0, + 323, 323, 323, 323, 323, 323, 0, 323, 323, 323, + 0, 323, 323, 0, 0, 323, 323, 323, 323, 360, + 0, 0, 323, 323, 360, 360, 0, 323, 323, 323, + 323, 323, 323, 323, 323, 0, 0, 0, 0, 0, + 0, 27, 0, 0, 0, 0, 323, 360, 0, 323, + 0, 323, 0, 323, 0, 0, 323, 0, 0, 0, + 360, 360, 323, 0, 0, 360, 0, 0, 360, 0, + 360, 0, 360, 360, 360, 360, 0, 0, 0, 0, + 360, 0, 0, 0, 360, 0, 0, 0, 360, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 0, 360, + 0, 360, 360, 0, 33, 0, 0, 360, 0, 360, + 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, + 0, 0, 0, 0, 0, 360, 360, 0, 0, 0, + 360, 360, 0, 360, 360, 360, 0, 360, 360, 360, + 0, 360, 360, 0, 0, 360, 360, 360, 360, 0, + 0, 32, 360, 360, 0, 0, 0, 360, 360, 360, + 360, 360, 360, 360, 360, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360, 0, 0, 360, + 0, 360, 0, 0, 0, 47, 0, 0, 0, 47, + 0, 47, 360, 47, 0, 47, 0, 0, 47, 0, + 47, 47, 0, 47, 0, 47, 0, 47, 0, 47, + 47, 47, 47, 0, 27, 47, 47, 0, 0, 0, + 0, 47, 47, 47, 47, 47, 0, 0, 47, 47, + 47, 0, 47, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 0, 47, 47, 47, 47, 0, 0, 47, + 47, 47, 0, 47, 0, 0, 0, 31, 47, 47, + 0, 47, 47, 0, 47, 47, 47, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 330, 0, 0, 0, 0, 330, 0, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 0, 0, 0, 0, 330, 0, 0, 0, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 0, 330, - 330, 0, 0, 330, 330, 330, 330, 330, 0, 0, - 330, 330, 0, 0, 0, 330, 330, 330, 330, 330, - 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, - 355, 0, 0, 0, 330, 0, 355, 330, 0, 330, - 0, 330, 0, 0, 330, 27, 0, 0, 0, 330, - 330, 0, 330, 0, 330, 330, 0, 0, 0, 330, - 330, 0, 0, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 355, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 330, 330, 0, 0, 0, 0, 0, - 0, 330, 0, 0, 330, 0, 0, 0, 34, 0, - 330, 0, 0, 355, 0, 0, 0, 0, 355, 0, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 0, 0, 0, 0, 0, 0, 355, 0, 0, - 0, 355, 355, 0, 355, 355, 355, 0, 355, 355, - 355, 0, 355, 355, 0, 0, 355, 355, 355, 355, - 0, 0, 0, 355, 355, 0, 0, 0, 355, 355, - 355, 355, 355, 355, 355, 355, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 355, 0, 47, - 355, 0, 355, 47, 0, 47, 0, 47, 0, 47, - 0, 0, 47, 355, 47, 47, 0, 47, 0, 47, - 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, - 47, 0, 0, 0, 0, 47, 47, 47, 47, 47, - 0, 0, 47, 47, 47, 0, 47, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 27, 47, 47, 47, - 47, 0, 0, 47, 47, 47, 0, 47, 0, 0, - 0, 0, 47, 47, 0, 47, 47, 0, 47, 47, - 47, 0, 0, 0, 47, 0, 0, 0, 0, 0, + 47, 0, 47, 47, 0, 0, 0, 27, 27, 0, + 5, 0, 27, 0, 0, 47, 27, 0, 27, 0, + 0, 27, 0, 27, 27, 0, 27, 0, 27, 0, + 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, + 0, 0, 0, 0, 27, 0, 27, 27, 27, 0, + 0, 27, 27, 27, 0, 27, 47, 0, 27, 0, + 27, 27, 27, 27, 0, 0, 0, 27, 27, 27, + 0, 33, 27, 27, 27, 33, 0, 937, 0, 0, + 0, 27, 27, 0, 27, 27, 33, 27, 27, 27, + 0, 33, 0, 27, 0, 33, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 47, 47, 0, 0, - 0, 27, 27, 0, 0, 0, 27, 0, 0, 47, - 27, 0, 27, 0, 0, 27, 0, 27, 27, 0, - 27, 0, 27, 0, 27, 0, 27, 27, 27, 27, - 0, 0, 27, 27, 0, 31, 0, 0, 27, 0, - 27, 27, 27, 0, 0, 27, 27, 27, 0, 27, - 47, 0, 27, 0, 27, 27, 27, 27, 0, 0, - 0, 27, 27, 27, 0, 34, 27, 27, 27, 34, - 0, 0, 0, 0, 0, 27, 27, 0, 27, 27, - 34, 27, 27, 27, 0, 34, 0, 27, 0, 34, - 0, 0, 34, 0, 0, 0, 0, 0, 937, 0, - 0, 0, 0, 0, 34, 34, 0, 27, 0, 34, - 34, 0, 0, 27, 27, 34, 0, 34, 34, 34, - 34, 0, 27, 0, 0, 34, 0, 0, 0, 34, - 0, 34, 0, 0, 32, 0, 0, 0, 32, 0, - 0, 34, 0, 34, 34, 46, 34, 0, 0, 32, - 34, 0, 0, 0, 32, 0, 0, 0, 32, 0, - 0, 32, 0, 27, 0, 0, 0, 0, 0, 0, - 34, 0, 0, 32, 32, 0, 34, 34, 32, 32, - 0, 0, 0, 0, 32, 0, 32, 32, 32, 32, - 0, 0, 7, 0, 32, 0, 0, 0, 32, 0, - 32, 0, 0, 27, 0, 0, 0, 27, 0, 0, - 32, 0, 0, 32, 0, 32, 0, 0, 27, 32, - 0, 0, 0, 27, 0, 0, 0, 27, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 27, 27, 0, 32, 32, 27, 27, 46, - 0, 46, 0, 27, 0, 27, 27, 27, 27, 938, - 0, 0, 0, 27, 0, 0, 0, 27, 0, 27, - 0, 0, 46, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 27, 0, 27, 46, 0, 0, 27, 0, - 46, 0, 31, 0, 0, 46, 31, 46, 46, 46, - 46, 0, 0, 46, 0, 46, 0, 31, 27, 46, - 0, 0, 31, 0, 27, 27, 31, 0, 0, 31, - 0, 46, 0, 0, 46, 0, 46, 0, 0, 0, - 0, 31, 31, 0, 0, 0, 31, 31, 0, 0, - 0, 0, 31, 0, 31, 31, 31, 31, 0, 0, - 46, 0, 31, 0, 0, 937, 31, 0, 31, 46, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, - 46, 31, 0, 31, 0, 46, 0, 31, 0, 46, - 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 46, 46, 0, 31, 0, 46, - 46, 0, 46, 0, 31, 46, 46, 46, 46, 46, - 46, 0, 0, 0, 0, 46, 0, 46, 0, 46, - 0, 46, 46, 0, 0, 0, 46, 0, 0, 46, - 0, 46, 0, 0, 46, 0, 46, 0, 0, 0, - 46, 46, 46, 0, 0, 0, 46, 46, 0, 7, - 0, 0, 46, 47, 46, 46, 46, 46, 0, 0, - 46, 0, 46, 0, 47, 0, 46, 0, 46, 47, - 0, 0, 0, 47, 0, 0, 47, 0, 46, 0, - 0, 46, 0, 46, 0, 0, 0, 46, 47, 47, - 0, 0, 0, 47, 47, 0, 0, 0, 0, 47, - 0, 47, 47, 47, 47, 0, 0, 46, 0, 47, - 0, 0, 0, 47, 0, 47, 938, 0, 0, 0, - 46, 0, 0, 0, 0, 47, 0, 0, 47, 0, - 47, 46, 0, 0, 47, 0, 46, 0, 0, 0, - 46, 0, 0, 46, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 46, 46, 0, 0, 0, - 46, 46, 0, 0, 0, 0, 46, 0, 46, 46, - 46, 46, 0, 0, 0, 0, 46, 0, 0, 0, - 46, 0, 46, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 46, 0, 55, 46, 0, 46, 0, 0, - 0, 46, 56, 24, 57, 25, 0, 0, 26, 58, - 0, 59, 60, 27, 61, 62, 63, 28, 0, 0, - 0, 46, 0, 64, 0, 65, 30, 66, 67, 68, - 69, 0, 0, 32, 0, 0, 0, 70, 33, 0, - 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 73, 0, 36, 0, 37, 74, 0, 0, - 38, 0, 75, 76, 77, 78, 79, 80, 39, 40, - 81, 82, 41, 83, 0, 84, 0, 0, 85, 86, - 0, 330, 87, 88, 0, 0, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, - 92, 93, 0, 0, 0, 94, 0, 0, 0, 95, - 0, 0, 0, 0, 96, 97, 98, 99, 100, 0, - 0, 0, 101, 330, 102, 0, 0, 0, 0, 0, - 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 33, 0, 27, 0, 33, 33, 0, 32, 27, + 27, 33, 32, 33, 33, 33, 33, 0, 27, 0, + 0, 33, 0, 32, 0, 33, 0, 33, 32, 0, + 46, 0, 32, 0, 0, 32, 0, 33, 0, 33, + 33, 0, 33, 0, 0, 0, 33, 32, 32, 0, + 0, 0, 32, 32, 0, 0, 0, 0, 32, 27, + 32, 32, 32, 32, 0, 0, 33, 0, 32, 0, + 0, 27, 32, 33, 32, 27, 0, 7, 0, 0, + 0, 0, 0, 0, 32, 0, 27, 32, 0, 32, + 0, 27, 0, 32, 0, 27, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 105, 106, 107, 108, 0, - 0, 0, 0, 201, 330, 0, 0, 196, 0, 330, - 0, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 0, 0, 0, 0, 0, 330, 0, - 0, 0, 0, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 581, 330, 330, 202, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 0, 330, 330, 330, + 27, 27, 0, 32, 31, 27, 27, 0, 31, 32, + 32, 27, 0, 27, 27, 27, 27, 0, 0, 31, + 0, 27, 0, 0, 31, 27, 0, 27, 31, 0, + 938, 31, 0, 0, 0, 0, 0, 27, 0, 0, + 27, 0, 27, 31, 31, 0, 27, 5, 31, 31, + 0, 46, 0, 0, 31, 0, 31, 31, 31, 31, + 0, 0, 46, 0, 31, 0, 27, 46, 31, 0, + 31, 46, 27, 27, 46, 0, 0, 0, 0, 0, + 31, 0, 0, 31, 0, 31, 46, 46, 0, 31, + 0, 46, 46, 0, 0, 0, 0, 46, 0, 46, + 46, 46, 46, 0, 0, 0, 0, 46, 0, 31, + 0, 46, 0, 46, 937, 0, 31, 0, 46, 0, + 0, 0, 0, 46, 0, 0, 46, 0, 46, 46, + 0, 0, 46, 0, 46, 0, 0, 0, 46, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 46, 46, 46, 0, 0, 0, 46, 46, + 0, 0, 0, 0, 46, 0, 46, 46, 46, 46, + 0, 0, 0, 0, 46, 0, 0, 46, 46, 0, + 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 0, 46, 46, 0, 46, 0, 46, 0, 46, + 0, 46, 0, 0, 46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 46, 0, 46, + 0, 46, 46, 0, 7, 0, 0, 46, 47, 46, + 46, 46, 46, 0, 0, 0, 0, 46, 0, 47, + 0, 46, 0, 46, 47, 0, 0, 0, 47, 0, + 0, 47, 0, 46, 0, 0, 46, 0, 46, 0, + 0, 0, 46, 47, 47, 0, 0, 0, 47, 47, + 0, 0, 0, 0, 47, 0, 47, 47, 47, 47, + 0, 0, 46, 0, 47, 0, 0, 938, 47, 0, + 47, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 46, 47, 0, 47, 0, 46, 0, 47, + 0, 46, 0, 0, 46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 46, 0, 47, + 0, 46, 46, 0, 0, 0, 0, 46, 0, 46, + 46, 46, 46, 0, 0, 0, 0, 46, 0, 0, + 0, 46, 0, 46, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 46, 0, 55, 46, 0, 46, 0, + 0, 0, 46, 56, 24, 57, 25, 0, 0, 26, + 58, 0, 59, 60, 27, 61, 62, 63, 28, 0, + 0, 0, 46, 0, 64, 0, 65, 30, 66, 67, + 68, 69, 0, 0, 32, 0, 0, 0, 70, 33, + 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 36, 0, 37, 74, 0, + 0, 38, 0, 75, 76, 77, 78, 79, 80, 39, + 40, 81, 82, 41, 83, 0, 84, 0, 0, 85, + 86, 0, 330, 87, 88, 0, 0, 0, 330, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, + 91, 92, 93, 0, 0, 0, 94, 0, 0, 0, + 95, 0, 0, 0, 0, 96, 97, 98, 99, 100, + 0, 0, 0, 101, 330, 102, 0, 0, 0, 0, + 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, + 0, 0, 0, 0, 330, 0, 105, 106, 107, 108, + 0, 0, 0, 0, 0, 330, 0, 0, 196, 0, + 330, 0, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 0, 0, 0, 0, 0, 330, + 330, 0, 0, 0, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 0, 330, 330, 0, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 0, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, - 501, 0, 0, 330, 0, 330, 501, 0, 330, 0, - 0, 0, 0, 0, 330, 203, 204, 205, 206, 0, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 0, 501, 0, 0, 330, 0, 330, 501, 0, 330, + 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, + 330, 0, 0, 330, 0, 330, 330, 0, 0, 0, + 330, 330, 0, 0, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 501, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 330, 330, 0, 0, 0, 0, + 0, 0, 330, 0, 0, 330, 0, 0, 0, 0, + 0, 330, 0, 201, 501, 0, 0, 0, 0, 501, + 0, 501, 501, 501, 501, 501, 501, 501, 501, 501, + 501, 501, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 501, 501, 501, 501, 501, 501, 501, 501, + 501, 501, 581, 501, 501, 202, 501, 501, 501, 501, + 501, 501, 501, 501, 501, 501, 0, 501, 501, 501, + 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, + 501, 501, 501, 501, 501, 501, 501, 501, 501, 0, + 497, 0, 0, 0, 0, 501, 497, 0, 0, 0, + 0, 0, 0, 0, 501, 203, 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, 0, 0, 215, 216, 217, 218, 219, 220, 221, 222, 0, 0, - 0, 0, 501, 0, 0, 581, 0, 0, 0, 0, + 0, 0, 497, 0, 0, 581, 0, 0, 0, 0, 581, 0, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 581, 0, 581, 0, 581, 0, - 581, 581, 581, 501, 0, 0, 0, 0, 501, 0, - 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, - 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 501, 501, 501, 501, 501, 501, 501, 501, - 501, 0, 501, 501, 0, 501, 501, 501, 501, 501, - 501, 501, 501, 501, 501, 581, 501, 501, 501, 501, - 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, - 501, 501, 501, 501, 501, 501, 501, 501, 0, 497, - 561, 0, 0, 0, 501, 497, 0, 0, 0, 24, - 0, 25, 0, 501, 26, 0, 0, 0, 0, 27, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, - 0, 497, 0, 0, 33, 0, 0, 0, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, - 387, 0, 0, 0, 39, 40, 387, 0, 41, 0, - 0, 319, 497, 0, 0, 0, 0, 497, 0, 497, + 0, 387, 0, 0, 581, 0, 581, 387, 581, 0, + 581, 581, 581, 497, 0, 0, 0, 0, 497, 0, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 497, 497, 387, 497, 497, 497, 497, 497, 497, 497, - 0, 497, 497, 0, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 0, 497, 497, 497, 497, 497, + 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 497, 497, 387, 497, 497, 497, 497, 497, 497, + 497, 0, 497, 497, 0, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 581, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 497, 0, 505, 0, - 0, 0, 352, 497, 505, 0, 497, 0, 0, 0, - 0, 0, 497, 0, 0, 0, 0, 323, 0, 0, - 0, 0, 387, 323, 0, 387, 387, 387, 387, 0, - 387, 0, 387, 387, 0, 387, 387, 387, 387, 387, - 505, 387, 387, 387, 387, 0, 387, 387, 387, 387, + 497, 497, 497, 497, 497, 497, 497, 497, 0, 505, + 0, 0, 0, 0, 497, 505, 0, 497, 0, 0, + 0, 0, 0, 497, 0, 0, 0, 0, 323, 0, + 0, 0, 0, 387, 323, 0, 387, 387, 387, 387, + 0, 387, 0, 387, 387, 0, 387, 387, 387, 387, + 387, 505, 387, 387, 387, 387, 0, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, - 387, 387, 387, 387, 387, 387, 387, 387, 0, 0, - 0, 0, 323, 0, 387, 0, 0, 387, 0, 0, - 0, 505, 0, 387, 0, 0, 505, 0, 505, 505, - 505, 505, 505, 505, 505, 505, 505, 505, 505, 0, + 387, 387, 387, 387, 387, 387, 387, 387, 387, 0, + 0, 0, 0, 323, 0, 387, 0, 0, 387, 0, + 0, 0, 505, 0, 387, 0, 0, 505, 0, 505, + 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 505, 0, 505, 505, 505, 505, 505, 505, 505, 0, - 505, 505, 0, 505, 505, 505, 505, 505, 505, 505, - 505, 505, 505, 0, 505, 505, 505, 505, 505, 505, + 0, 505, 0, 505, 505, 505, 505, 505, 505, 505, + 929, 505, 505, 0, 505, 505, 505, 505, 505, 505, + 505, 505, 505, 505, 0, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, - 505, 505, 505, 505, 505, 505, 0, 330, 888, 0, - 0, 0, 505, 330, 0, 505, 0, 24, 0, 25, - 0, 505, 26, 0, 0, 0, 0, 27, 0, 0, + 505, 505, 505, 505, 505, 505, 505, 0, 330, 0, + 0, 0, 0, 505, 330, 0, 505, 0, 0, 0, + 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 330, 0, 0, 929, 0, 0, 0, 0, 929, 0, + 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 929, 0, 929, 0, 929, 0, 929, 929, + 929, 330, 0, 0, 0, 0, 330, 0, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 330, 0, 330, 330, 330, 330, 330, 330, 330, 0, + 330, 330, 0, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 929, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 0, 430, 561, 0, + 0, 0, 330, 430, 0, 330, 0, 24, 0, 25, + 0, 330, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 330, + 30, 0, 0, 0, 0, 0, 0, 32, 0, 430, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, 319, - 330, 0, 0, 0, 0, 330, 0, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, - 0, 330, 330, 330, 330, 330, 330, 330, 0, 330, - 330, 0, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 0, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 0, 430, 1034, 0, 0, - 352, 330, 430, 0, 330, 0, 24, 0, 25, 0, - 330, 26, 0, 0, 0, 0, 27, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 430, 0, - 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, - 0, 39, 40, 0, 0, 41, 0, 0, 319, 430, - 0, 0, 0, 0, 430, 0, 430, 430, 430, 430, - 430, 430, 430, 430, 430, 430, 430, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, - 430, 430, 430, 430, 430, 430, 430, 0, 430, 430, - 0, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 0, 0, 0, 0, 430, 0, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, + 0, 430, 430, 430, 430, 430, 430, 430, 0, 430, 430, 0, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 430, 0, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 430, 430, 0, 390, 0, 352, 0, 352, - 430, 390, 0, 430, 0, 0, 0, 0, 0, 430, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 352, 0, 0, 0, 390, 352, 0, - 0, 228, 0, 352, 0, 352, 352, 352, 352, 0, - 0, 0, 0, 352, 0, 0, 0, 352, 0, 0, - 330, 352, 0, 0, 0, 0, 330, 0, 0, 352, - 736, 0, 352, 0, 352, 0, 0, 0, 390, 0, - 0, 0, 0, 390, 0, 390, 390, 390, 390, 390, - 390, 390, 390, 390, 390, 390, 0, 0, 352, 0, - 0, 0, 330, 0, 0, 0, 0, 390, 0, 390, - 390, 390, 390, 390, 390, 390, 0, 390, 736, 0, - 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 430, 430, 430, 430, 430, 0, 390, 0, 352, 0, + 352, 430, 390, 0, 430, 0, 0, 0, 0, 0, + 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 352, 0, 0, 0, 390, 352, + 0, 0, 228, 0, 352, 0, 352, 352, 352, 352, + 0, 0, 0, 0, 352, 0, 0, 0, 352, 0, + 0, 330, 352, 0, 0, 0, 0, 330, 0, 0, + 352, 736, 0, 352, 0, 352, 0, 0, 0, 390, + 0, 0, 0, 0, 390, 0, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 0, 0, 352, + 0, 0, 0, 330, 0, 0, 0, 0, 390, 0, + 390, 390, 390, 390, 390, 390, 390, 0, 390, 736, 0, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 0, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, - 390, 390, 390, 579, 352, 0, 0, 0, 0, 390, - 0, 330, 390, 0, 0, 0, 0, 330, 390, 0, - 0, 0, 330, 330, 330, 330, 330, 330, 330, 736, - 330, 0, 330, 330, 0, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 0, 330, 330, 330, 330, + 390, 390, 390, 390, 0, 352, 0, 0, 0, 0, + 390, 0, 330, 390, 0, 0, 0, 0, 330, 390, + 0, 0, 0, 330, 330, 330, 330, 330, 330, 330, + 736, 330, 0, 330, 330, 0, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 0, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 0, 536, - 0, 0, 330, 0, 330, 536, 0, 330, 0, 0, - 0, 0, 0, 330, 0, 0, 579, 0, 0, 0, - 0, 579, 0, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 0, 0, 0, 0, 0, 0, - 0, 536, 0, 0, 0, 579, 0, 579, 0, 579, - 0, 579, 579, 579, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 536, 0, 0, 0, 0, 536, 0, 536, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, + 536, 0, 495, 330, 0, 330, 536, 0, 330, 0, + 56, 24, 0, 25, 330, 0, 26, 253, 0, 0, + 0, 27, 61, 62, 0, 28, 0, 0, 0, 0, + 0, 64, 0, 0, 30, 0, 0, 0, 0, 0, + 0, 32, 536, 0, 0, 0, 33, 0, 71, 72, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, + 0, 76, 0, 78, 0, 80, 39, 40, 254, 0, + 41, 0, 0, 536, 0, 0, 0, 0, 536, 0, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, - 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, - 0, 536, 0, 536, 0, 536, 0, 536, 536, 536, - 0, 536, 536, 0, 536, 536, 536, 536, 536, 536, - 536, 536, 536, 536, 351, 0, 0, 536, 536, 536, + 536, 0, 0, 0, 0, 89, 90, 91, 255, 0, + 0, 0, 536, 0, 536, 0, 536, 95, 536, 536, + 536, 0, 536, 536, 0, 536, 536, 536, 536, 536, + 536, 536, 536, 536, 536, 351, 0, 0, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, - 536, 536, 536, 536, 536, 548, 536, 351, 0, 0, - 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, - 351, 0, 536, 0, 0, 351, 0, 0, 227, 0, - 351, 0, 351, 351, 351, 351, 0, 0, 0, 0, - 351, 0, 0, 0, 351, 0, 0, 548, 351, 0, - 0, 0, 0, 0, 0, 0, 351, 0, 0, 351, - 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 351, 0, 0, 548, 0, - 0, 0, 0, 548, 0, 548, 548, 548, 548, 548, - 548, 548, 548, 548, 548, 548, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 552, 0, 548, 0, 548, - 0, 548, 0, 548, 548, 548, 0, 548, 548, 0, - 0, 548, 548, 548, 548, 548, 548, 548, 548, 548, - 0, 351, 0, 548, 548, 548, 548, 548, 548, 548, - 548, 0, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 552, 548, 552, 552, 552, 552, 552, 552, 552, - 552, 552, 552, 552, 0, 0, 0, 555, 548, 0, - 0, 0, 0, 555, 0, 552, 0, 552, 0, 552, - 0, 552, 552, 552, 0, 552, 552, 0, 0, 552, - 552, 552, 552, 0, 0, 0, 552, 552, 0, 0, - 0, 552, 552, 552, 552, 552, 552, 552, 552, 555, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 553, 552, 0, 0, 0, - 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, - 555, 0, 0, 0, 0, 555, 0, 555, 555, 555, - 555, 555, 555, 555, 555, 555, 555, 555, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 553, 0, 555, - 0, 555, 0, 555, 0, 555, 555, 555, 0, 555, - 555, 0, 0, 555, 555, 555, 555, 0, 0, 0, - 555, 555, 0, 0, 0, 555, 555, 555, 555, 555, - 555, 555, 555, 0, 0, 0, 0, 0, 553, 0, - 0, 0, 0, 553, 555, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 0, 0, 0, 554, - 555, 0, 0, 0, 0, 554, 0, 553, 0, 553, - 0, 553, 0, 553, 553, 553, 0, 553, 553, 0, - 0, 553, 553, 553, 553, 0, 0, 0, 553, 553, - 0, 0, 0, 553, 553, 553, 553, 553, 553, 553, - 553, 554, 0, 0, 0, 0, 0, 0, 0, 0, + 536, 536, 536, 536, 536, 536, 548, 536, 351, 0, + 0, 0, 548, 105, 496, 0, 0, 0, 0, 0, + 0, 351, 0, 536, 0, 0, 351, 0, 0, 227, + 0, 351, 0, 351, 351, 351, 351, 0, 0, 0, + 0, 351, 0, 0, 0, 351, 0, 0, 548, 351, + 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, + 351, 0, 351, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, + 552, 0, 0, 0, 0, 0, 351, 0, 0, 548, + 0, 0, 0, 0, 548, 0, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 552, 0, 548, 0, + 548, 0, 548, 0, 548, 548, 548, 0, 548, 548, + 0, 0, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 0, 351, 0, 548, 548, 548, 548, 548, 548, + 548, 548, 0, 0, 0, 0, 0, 552, 0, 0, + 0, 0, 552, 548, 552, 552, 552, 552, 552, 552, + 552, 552, 552, 552, 552, 0, 0, 0, 555, 548, + 0, 0, 0, 0, 555, 0, 552, 0, 552, 0, + 552, 0, 552, 552, 552, 0, 552, 552, 0, 0, + 552, 552, 552, 552, 0, 0, 0, 552, 552, 0, + 0, 0, 552, 552, 552, 552, 552, 552, 552, 552, + 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 553, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 558, 553, 0, + 0, 555, 0, 0, 0, 0, 555, 0, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, + 555, 0, 555, 0, 555, 0, 555, 555, 555, 0, + 555, 555, 0, 0, 555, 555, 555, 555, 0, 0, + 0, 555, 555, 0, 0, 0, 555, 555, 555, 555, + 555, 555, 555, 555, 0, 0, 0, 0, 0, 553, + 0, 0, 0, 0, 553, 555, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 0, 0, 0, + 554, 555, 0, 0, 0, 0, 554, 0, 553, 0, + 553, 0, 553, 0, 553, 553, 553, 0, 553, 553, + 0, 0, 553, 553, 553, 553, 0, 0, 0, 553, + 553, 0, 0, 0, 553, 553, 553, 553, 553, 553, + 553, 553, 554, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 558, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 554, 0, 0, 0, 0, 554, 0, 554, + 0, 0, 0, 554, 0, 0, 0, 0, 554, 0, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 554, 0, 554, 0, 554, 0, 554, 554, 554, - 0, 554, 554, 0, 0, 554, 554, 554, 554, 0, - 0, 0, 554, 554, 0, 559, 0, 554, 554, 554, - 554, 554, 554, 554, 554, 0, 0, 0, 0, 0, - 558, 0, 0, 0, 0, 558, 554, 558, 558, 558, - 558, 558, 558, 558, 558, 558, 558, 558, 0, 0, - 0, 0, 554, 0, 0, 0, 0, 0, 0, 558, - 0, 558, 0, 558, 0, 558, 558, 558, 0, 0, - 0, 0, 0, 558, 558, 558, 558, 0, 0, 0, - 558, 558, 0, 560, 0, 558, 558, 558, 558, 558, - 558, 558, 558, 0, 0, 0, 0, 0, 559, 0, - 0, 0, 0, 559, 558, 559, 559, 559, 559, 559, - 559, 559, 559, 559, 559, 559, 0, 0, 0, 0, - 558, 0, 0, 0, 0, 0, 0, 559, 0, 559, - 0, 559, 0, 559, 559, 559, 0, 0, 0, 0, - 0, 559, 559, 559, 559, 0, 0, 0, 559, 559, - 0, 561, 0, 559, 559, 559, 559, 559, 559, 559, - 559, 0, 0, 0, 0, 0, 560, 0, 0, 0, - 0, 560, 559, 560, 560, 560, 560, 560, 560, 560, - 560, 560, 560, 560, 0, 0, 0, 0, 559, 0, - 0, 0, 0, 0, 0, 560, 0, 560, 0, 560, - 0, 560, 560, 560, 0, 0, 0, 0, 0, 560, - 560, 560, 560, 0, 0, 0, 560, 560, 0, 562, - 0, 560, 560, 560, 560, 560, 560, 560, 560, 0, - 0, 0, 0, 0, 561, 0, 0, 0, 0, 561, - 560, 561, 561, 561, 561, 561, 561, 561, 561, 561, - 561, 561, 0, 0, 0, 0, 560, 0, 0, 0, - 0, 0, 0, 561, 0, 561, 0, 561, 0, 561, - 561, 561, 0, 0, 0, 0, 0, 561, 561, 561, - 561, 0, 0, 0, 561, 561, 0, 563, 0, 0, - 0, 561, 561, 561, 561, 561, 561, 0, 0, 0, - 0, 0, 562, 0, 0, 0, 0, 562, 561, 562, + 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 554, 0, 554, 0, 554, 0, 554, 554, + 554, 0, 554, 554, 0, 0, 554, 554, 554, 554, + 0, 0, 0, 554, 554, 0, 559, 0, 554, 554, + 554, 554, 554, 554, 554, 554, 0, 0, 0, 0, + 0, 558, 0, 0, 0, 0, 558, 554, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 0, + 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, + 558, 0, 558, 0, 558, 0, 558, 558, 558, 0, + 0, 0, 0, 0, 558, 558, 558, 558, 0, 0, + 0, 558, 558, 0, 560, 0, 558, 558, 558, 558, + 558, 558, 558, 558, 0, 0, 0, 0, 0, 559, + 0, 0, 0, 0, 559, 558, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 0, 0, 0, + 0, 558, 0, 0, 0, 0, 0, 0, 559, 0, + 559, 0, 559, 0, 559, 559, 559, 0, 0, 0, + 0, 0, 559, 559, 559, 559, 0, 0, 0, 559, + 559, 0, 561, 0, 559, 559, 559, 559, 559, 559, + 559, 559, 0, 0, 0, 0, 0, 560, 0, 0, + 0, 0, 560, 559, 560, 560, 560, 560, 560, 560, + 560, 560, 560, 560, 560, 0, 0, 0, 0, 559, + 0, 0, 0, 0, 0, 0, 560, 0, 560, 0, + 560, 0, 560, 560, 560, 0, 0, 0, 0, 0, + 560, 560, 560, 560, 0, 0, 0, 560, 560, 0, + 562, 0, 560, 560, 560, 560, 560, 560, 560, 560, + 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, + 561, 560, 561, 561, 561, 561, 561, 561, 561, 561, + 561, 561, 561, 0, 0, 0, 0, 560, 0, 0, + 0, 0, 0, 0, 561, 0, 561, 0, 561, 0, + 561, 561, 561, 0, 0, 0, 0, 0, 561, 561, + 561, 561, 0, 0, 0, 561, 561, 0, 563, 0, + 0, 0, 561, 561, 561, 561, 561, 561, 0, 0, + 0, 0, 0, 562, 0, 0, 0, 0, 562, 561, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, - 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 562, 0, 562, 0, 562, 0, 562, 562, 562, - 0, 0, 0, 0, 0, 562, 562, 562, 562, 0, - 0, 0, 562, 562, 0, 564, 0, 0, 0, 562, - 562, 562, 562, 562, 562, 0, 0, 0, 0, 0, - 563, 0, 0, 0, 0, 563, 562, 563, 563, 563, - 563, 563, 563, 563, 563, 563, 563, 563, 0, 0, - 0, 0, 562, 0, 0, 0, 0, 0, 0, 563, - 0, 563, 0, 563, 0, 563, 563, 563, 0, 0, - 0, 0, 0, 563, 563, 563, 563, 0, 0, 0, - 563, 563, 0, 565, 0, 0, 0, 563, 563, 563, - 563, 563, 563, 0, 0, 0, 0, 0, 564, 0, - 0, 0, 0, 564, 563, 564, 564, 564, 564, 564, - 564, 564, 564, 564, 564, 564, 0, 0, 0, 0, - 563, 0, 0, 0, 0, 0, 0, 564, 0, 564, - 0, 564, 0, 564, 564, 564, 0, 0, 0, 0, - 0, 564, 564, 564, 564, 0, 0, 0, 564, 564, - 0, 566, 0, 0, 0, 564, 564, 564, 564, 564, - 564, 0, 0, 0, 0, 0, 565, 0, 0, 0, - 0, 565, 564, 565, 565, 565, 565, 565, 565, 565, - 565, 565, 565, 565, 0, 0, 0, 0, 564, 0, - 0, 0, 0, 0, 0, 565, 0, 565, 0, 565, - 0, 565, 565, 565, 0, 0, 0, 0, 0, 565, - 565, 565, 565, 0, 0, 0, 565, 565, 0, 567, - 0, 0, 0, 565, 565, 565, 565, 565, 565, 0, - 0, 0, 0, 0, 566, 0, 0, 0, 0, 566, - 565, 566, 566, 566, 566, 566, 566, 566, 566, 566, - 566, 566, 0, 0, 0, 0, 565, 0, 0, 0, - 0, 0, 0, 566, 0, 566, 0, 566, 0, 566, - 566, 566, 0, 0, 0, 0, 0, 0, 0, 566, - 566, 0, 0, 0, 566, 566, 0, 568, 0, 0, - 0, 0, 0, 566, 566, 566, 566, 0, 0, 0, - 0, 0, 567, 0, 0, 0, 0, 567, 566, 567, + 562, 0, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 0, 562, 0, 562, 0, 562, 0, 562, 562, + 562, 0, 0, 0, 0, 0, 562, 562, 562, 562, + 0, 0, 0, 562, 562, 0, 564, 0, 0, 0, + 562, 562, 562, 562, 562, 562, 0, 0, 0, 0, + 0, 563, 0, 0, 0, 0, 563, 562, 563, 563, + 563, 563, 563, 563, 563, 563, 563, 563, 563, 0, + 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, + 563, 0, 563, 0, 563, 0, 563, 563, 563, 0, + 0, 0, 0, 0, 563, 563, 563, 563, 0, 0, + 0, 563, 563, 0, 565, 0, 0, 0, 563, 563, + 563, 563, 563, 563, 0, 0, 0, 0, 0, 564, + 0, 0, 0, 0, 564, 563, 564, 564, 564, 564, + 564, 564, 564, 564, 564, 564, 564, 0, 0, 0, + 0, 563, 0, 0, 0, 0, 0, 0, 564, 0, + 564, 0, 564, 0, 564, 564, 564, 0, 0, 0, + 0, 0, 564, 564, 564, 564, 0, 0, 0, 564, + 564, 0, 566, 0, 0, 0, 564, 564, 564, 564, + 564, 564, 0, 0, 0, 0, 0, 565, 0, 0, + 0, 0, 565, 564, 565, 565, 565, 565, 565, 565, + 565, 565, 565, 565, 565, 0, 0, 0, 0, 564, + 0, 0, 0, 0, 0, 0, 565, 0, 565, 0, + 565, 0, 565, 565, 565, 0, 0, 0, 0, 0, + 565, 565, 565, 565, 0, 0, 0, 565, 565, 0, + 567, 0, 0, 0, 565, 565, 565, 565, 565, 565, + 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, + 566, 565, 566, 566, 566, 566, 566, 566, 566, 566, + 566, 566, 566, 0, 0, 0, 0, 565, 0, 0, + 0, 0, 0, 0, 566, 0, 566, 0, 566, 0, + 566, 566, 566, 0, 0, 0, 0, 0, 0, 0, + 566, 566, 0, 0, 0, 566, 566, 0, 568, 0, + 0, 0, 0, 0, 566, 566, 566, 566, 0, 0, + 0, 0, 0, 567, 0, 0, 0, 0, 567, 566, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, - 0, 567, 0, 567, 0, 567, 0, 567, 567, 567, - 0, 0, 0, 0, 0, 0, 0, 567, 567, 0, - 0, 0, 567, 567, 0, 569, 0, 0, 0, 0, - 0, 567, 567, 567, 567, 0, 0, 0, 0, 0, - 568, 0, 0, 0, 0, 568, 567, 568, 568, 568, - 568, 568, 568, 568, 568, 568, 568, 568, 0, 0, - 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, - 0, 568, 0, 568, 0, 568, 568, 568, 0, 0, - 0, 0, 0, 0, 0, 568, 568, 0, 0, 0, - 568, 568, 0, 570, 0, 0, 0, 0, 0, 568, - 568, 568, 568, 0, 0, 0, 0, 0, 569, 0, - 0, 0, 0, 569, 568, 569, 569, 569, 569, 569, - 569, 569, 569, 569, 569, 569, 0, 0, 0, 0, - 568, 0, 0, 0, 0, 0, 0, 569, 0, 569, - 0, 569, 0, 569, 569, 569, 0, 0, 0, 0, - 0, 0, 0, 569, 569, 0, 0, 0, 569, 569, - 0, 571, 0, 0, 0, 0, 0, 0, 0, 569, - 569, 0, 0, 0, 0, 0, 570, 0, 0, 0, - 0, 570, 569, 570, 570, 570, 570, 570, 570, 570, - 570, 570, 570, 570, 0, 0, 0, 0, 569, 0, - 0, 0, 0, 0, 0, 570, 0, 570, 0, 570, - 0, 570, 570, 570, 0, 0, 0, 0, 0, 0, - 0, 570, 570, 0, 0, 0, 570, 570, 0, 572, - 0, 0, 0, 0, 0, 0, 0, 570, 570, 0, - 0, 0, 0, 0, 571, 0, 0, 0, 0, 571, - 570, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 0, 0, 0, 0, 570, 0, 0, 0, - 0, 0, 0, 571, 0, 571, 0, 571, 0, 571, - 571, 571, 0, 0, 0, 0, 0, 0, 0, 0, - 571, 0, 0, 0, 571, 571, 0, 573, 0, 0, - 0, 0, 0, 0, 0, 571, 571, 0, 0, 0, - 0, 0, 572, 0, 0, 0, 0, 572, 571, 572, + 567, 0, 0, 0, 0, 566, 0, 0, 0, 0, + 0, 0, 567, 0, 567, 0, 567, 0, 567, 567, + 567, 0, 0, 0, 0, 0, 0, 0, 567, 567, + 0, 0, 0, 567, 567, 0, 569, 0, 0, 0, + 0, 0, 567, 567, 567, 567, 0, 0, 0, 0, + 0, 568, 0, 0, 0, 0, 568, 567, 568, 568, + 568, 568, 568, 568, 568, 568, 568, 568, 568, 0, + 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, + 568, 0, 568, 0, 568, 0, 568, 568, 568, 0, + 0, 0, 0, 0, 0, 0, 568, 568, 0, 0, + 0, 568, 568, 0, 570, 0, 0, 0, 0, 0, + 568, 568, 568, 568, 0, 0, 0, 0, 0, 569, + 0, 0, 0, 0, 569, 568, 569, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 0, 0, 0, + 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, + 569, 0, 569, 0, 569, 569, 569, 0, 0, 0, + 0, 0, 0, 0, 569, 569, 0, 0, 0, 569, + 569, 0, 571, 0, 0, 0, 0, 0, 0, 0, + 569, 569, 0, 0, 0, 0, 0, 570, 0, 0, + 0, 0, 570, 569, 570, 570, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 0, 0, 0, 0, 569, + 0, 0, 0, 0, 0, 0, 570, 0, 570, 0, + 570, 0, 570, 570, 570, 0, 0, 0, 0, 0, + 0, 0, 570, 570, 0, 0, 0, 570, 570, 0, + 572, 0, 0, 0, 0, 0, 0, 0, 570, 570, + 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, + 571, 570, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 0, 0, 0, 0, 570, 0, 0, + 0, 0, 0, 0, 571, 0, 571, 0, 571, 0, + 571, 571, 571, 0, 0, 0, 0, 0, 0, 0, + 0, 571, 0, 0, 0, 571, 571, 0, 574, 0, + 0, 0, 0, 0, 0, 0, 571, 571, 0, 0, + 0, 0, 0, 572, 0, 0, 0, 0, 572, 571, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, - 0, 572, 0, 572, 0, 572, 0, 572, 572, 572, - 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, - 0, 0, 572, 572, 0, 574, 0, 0, 0, 0, - 0, 0, 0, 572, 572, 0, 0, 0, 0, 0, - 573, 0, 0, 0, 0, 573, 572, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 0, 0, - 0, 0, 572, 0, 0, 0, 0, 0, 0, 573, - 0, 573, 0, 573, 0, 573, 573, 573, 0, 0, - 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, - 0, 573, 0, 575, 0, 0, 0, 0, 0, 0, - 0, 573, 573, 0, 0, 0, 0, 0, 574, 0, - 0, 0, 0, 574, 573, 574, 574, 574, 574, 574, - 574, 574, 574, 574, 574, 574, 0, 0, 0, 0, - 573, 0, 0, 0, 0, 0, 0, 574, 0, 574, - 0, 574, 0, 574, 574, 574, 0, 0, 0, 0, - 0, 0, 0, 0, 574, 0, 0, 0, 0, 574, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 574, - 574, 0, 0, 0, 0, 0, 575, 0, 0, 0, - 0, 575, 574, 575, 575, 575, 575, 575, 575, 575, - 575, 575, 575, 575, 0, 0, 0, 0, 574, 0, - 0, 0, 0, 0, 0, 575, 0, 575, 0, 575, - 0, 575, 575, 575, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 575, 0, 577, - 0, 0, 0, 0, 0, 0, 0, 575, 575, 0, - 0, 0, 0, 0, 576, 0, 0, 0, 0, 576, - 575, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 0, 0, 0, 0, 575, 0, 0, 0, - 0, 0, 0, 576, 0, 576, 0, 576, 0, 576, - 576, 576, 0, 0, 0, 578, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 576, 576, 0, 0, 0, - 0, 0, 577, 0, 0, 0, 0, 577, 576, 577, - 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, - 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, - 0, 577, 0, 577, 0, 577, 0, 577, 577, 577, - 0, 0, 0, 0, 330, 0, 0, 0, 736, 0, - 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, - 0, 0, 0, 578, 577, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 578, 577, 0, 0, 0, - 330, 0, 0, 0, 0, 0, 0, 578, 0, 578, - 0, 578, 577, 578, 578, 578, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 572, 0, 0, 0, 0, 571, 0, 0, 0, 0, + 0, 0, 572, 0, 572, 0, 572, 0, 572, 572, + 572, 0, 0, 0, 0, 0, 0, 0, 0, 572, + 0, 0, 0, 572, 572, 0, 576, 0, 0, 0, + 0, 0, 0, 0, 572, 572, 0, 0, 0, 0, + 0, 574, 0, 0, 0, 0, 574, 572, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 0, + 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, + 574, 0, 574, 0, 574, 0, 574, 574, 574, 0, + 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, + 0, 0, 574, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 574, 574, 0, 0, 0, 0, 0, 576, + 0, 0, 0, 0, 576, 574, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 0, 0, 0, + 0, 574, 0, 0, 0, 0, 0, 0, 576, 0, + 576, 0, 576, 0, 576, 576, 576, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 578, 0, 0, 0, 0, 0, 0, 330, - 0, 0, 0, 0, 0, 330, 0, 0, 578, 0, - 330, 330, 0, 330, 0, 330, 0, 736, 330, 0, - 330, 330, 0, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 0, 330, 330, 330, 330, 330, 330, + 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 576, 576, 0, 0, 0, 0, 0, 577, 0, 0, + 0, 0, 577, 576, 577, 577, 577, 577, 577, 577, + 577, 577, 577, 577, 577, 0, 0, 0, 0, 576, + 0, 0, 0, 0, 0, 0, 577, 0, 577, 0, + 577, 0, 577, 577, 577, 0, 0, 0, 0, 330, + 0, 0, 0, 736, 0, 0, 0, 0, 577, 0, + 0, 0, 0, 578, 0, 0, 0, 0, 578, 577, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 577, 0, 0, 0, 330, 0, 0, 0, 0, + 0, 0, 578, 0, 578, 0, 578, 577, 578, 578, + 578, 736, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, + 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, + 330, 0, 0, 578, 0, 330, 330, 0, 330, 0, + 330, 0, 736, 330, 0, 330, 330, 0, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 0, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 0, 0, 55, 0, - 330, 0, 330, 0, 0, 330, 56, 24, 57, 25, - 0, 330, 26, 58, 0, 59, 60, 27, 61, 62, - 63, 28, 0, 0, 0, 0, 0, 64, 0, 65, - 30, 66, 67, 68, 69, 0, 0, 32, 0, 0, - 0, 70, 33, 0, 71, 72, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 73, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 75, 76, 77, 78, - 79, 80, 39, 40, 81, 82, 41, 83, 0, 84, - 0, 0, 85, 86, 0, 0, 87, 88, 0, 0, + 330, 0, 0, 55, 0, 330, 0, 330, 0, 0, + 330, 56, 24, 57, 25, 0, 330, 26, 58, 0, + 59, 60, 27, 61, 62, 63, 28, 0, 0, 0, + 0, 0, 64, 0, 65, 30, 66, 67, 68, 69, + 0, 0, 32, 0, 0, 0, 70, 33, 0, 71, + 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 73, 0, 36, 0, 37, 74, 0, 0, 38, + 0, 75, 76, 77, 78, 79, 80, 39, 40, 81, + 82, 41, 83, 0, 84, 0, 0, 85, 86, 0, + 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, + 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, + 0, 0, 0, 96, 97, 98, 99, 100, 0, 0, + 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 92, 93, 0, 0, 0, 94, - 0, 0, 0, 95, 0, 0, 0, 0, 96, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, - 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, + 265, 0, 0, 0, 105, 106, 107, 108, 56, 24, + 57, 25, 0, 0, 26, 58, 0, 59, 60, 27, + 61, 62, 63, 28, 0, 0, 0, 0, 0, 64, + 0, 65, 30, 66, 67, 68, 69, 0, 0, 32, + 0, 0, 0, 70, 33, 0, 71, 72, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, + 36, 0, 37, 74, 0, 0, 38, 0, 75, 76, + 77, 78, 79, 80, 39, 40, 81, 82, 41, 83, + 0, 84, 0, 0, 85, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 265, 0, 0, 0, 105, - 106, 107, 108, 56, 24, 57, 25, 0, 0, 26, - 58, 0, 59, 60, 27, 61, 62, 63, 28, 0, - 0, 0, 0, 0, 64, 0, 65, 30, 66, 67, - 68, 69, 0, 0, 32, 0, 0, 0, 70, 33, - 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 73, 0, 36, 0, 37, 74, 0, - 0, 38, 0, 75, 76, 77, 78, 79, 80, 39, - 40, 81, 82, 41, 83, 0, 84, 0, 0, 85, - 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, - 91, 92, 93, 0, 0, 0, 94, 0, 0, 0, - 95, 0, 0, 0, 0, 96, 97, 98, 99, 100, - 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, - 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 89, 90, 91, 92, 93, 0, 0, + 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, + 96, 97, 98, 99, 100, 0, 0, 0, 101, 0, + 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 550, 0, 0, 0, 105, 106, 107, 108, - 56, 24, 57, 25, 0, 0, 26, 58, 0, 59, - 60, 27, 61, 62, 63, 28, 0, 0, 0, 0, - 0, 64, 0, 65, 30, 66, 67, 68, 69, 0, - 0, 32, 0, 0, 0, 70, 33, 0, 71, 72, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 36, 0, 37, 74, 0, 0, 38, 0, - 75, 76, 77, 78, 79, 80, 39, 40, 81, 82, - 41, 83, 0, 84, 0, 0, 85, 86, 0, 0, - 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, - 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, - 0, 0, 96, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, + 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, + 0, 105, 106, 107, 108, 56, 24, 57, 25, 0, + 0, 26, 58, 0, 59, 60, 27, 61, 62, 63, + 28, 0, 0, 0, 0, 0, 64, 0, 65, 30, + 66, 67, 68, 69, 0, 0, 32, 0, 0, 0, + 70, 33, 0, 71, 72, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 73, 0, 36, 0, 37, + 74, 0, 0, 38, 0, 75, 76, 77, 78, 79, + 80, 39, 40, 81, 82, 41, 83, 0, 84, 0, + 0, 85, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 934, - 0, 0, 0, 105, 551, 107, 108, 934, 934, 934, - 934, 0, 0, 934, 934, 0, 934, 934, 934, 934, - 934, 934, 934, 0, 0, 0, 0, 0, 934, 0, - 934, 934, 934, 934, 934, 934, 0, 0, 934, 0, - 0, 0, 934, 934, 0, 934, 934, 934, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 934, 0, 934, - 0, 934, 934, 0, 0, 934, 0, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, 934, 0, - 934, 0, 0, 934, 934, 0, 0, 934, 934, 0, + 89, 90, 91, 92, 93, 0, 0, 0, 94, 0, + 0, 0, 95, 0, 0, 0, 0, 96, 97, 98, + 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, + 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 934, 934, 934, 934, 934, 0, 0, 0, - 934, 0, 0, 0, 934, 0, 0, 0, 0, 934, - 934, 934, 934, 934, 0, 0, 0, 934, 0, 934, - 0, 0, 0, 0, 0, 934, 934, 0, 0, 0, + 0, 0, 0, 0, 934, 0, 0, 0, 105, 551, + 107, 108, 934, 934, 934, 934, 0, 0, 934, 934, + 0, 934, 934, 934, 934, 934, 934, 934, 0, 0, + 0, 0, 0, 934, 0, 934, 934, 934, 934, 934, + 934, 0, 0, 934, 0, 0, 0, 934, 934, 0, + 934, 934, 934, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 934, 0, 934, 0, 934, 934, 0, 0, + 934, 0, 934, 934, 934, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 0, 934, 0, 0, 934, 934, + 0, 0, 934, 934, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 934, 934, 934, + 934, 934, 0, 0, 0, 934, 0, 0, 0, 934, + 0, 0, 0, 0, 934, 934, 934, 934, 934, 0, + 0, 0, 934, 0, 934, 0, 0, 0, 0, 0, + 934, 934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, - 934, 934, 934, 934, 785, 785, 785, 785, 0, 0, - 785, 785, 0, 785, 785, 785, 785, 785, 785, 785, - 0, 0, 0, 0, 0, 785, 0, 785, 785, 785, - 785, 785, 785, 0, 0, 785, 0, 0, 0, 785, - 785, 0, 785, 785, 785, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 785, 0, 785, 0, 785, 785, - 0, 0, 785, 0, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 0, 785, 0, 0, - 785, 785, 0, 0, 785, 785, 0, 0, 0, 0, + 0, 785, 0, 0, 0, 934, 934, 934, 934, 785, + 785, 785, 785, 0, 0, 785, 785, 0, 785, 785, + 785, 785, 785, 785, 785, 0, 0, 0, 0, 0, + 785, 0, 785, 785, 785, 785, 785, 785, 0, 0, + 785, 0, 0, 0, 785, 785, 0, 785, 785, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, - 785, 785, 785, 785, 0, 0, 0, 785, 0, 0, - 0, 785, 0, 0, 0, 0, 785, 785, 785, 785, - 785, 0, 0, 0, 785, 0, 785, 0, 0, 0, - 0, 0, 785, 785, 0, 0, 0, 0, 0, 0, + 0, 785, 0, 785, 785, 0, 0, 785, 0, 785, + 785, 785, 785, 785, 785, 785, 785, 785, 785, 785, + 785, 0, 785, 0, 0, 785, 785, 0, 0, 785, + 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 785, 785, 785, 785, 785, 0, + 0, 0, 785, 0, 0, 0, 785, 0, 0, 0, + 0, 785, 785, 785, 785, 785, 0, 0, 0, 785, + 0, 785, 0, 0, 0, 0, 0, 785, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 732, 0, 0, 0, 785, 785, 785, - 785, 56, 24, 0, 25, 0, 0, 26, 253, 0, - 1156, 0, 27, 61, 62, 0, 28, 0, 0, 24, - 0, 25, 64, 0, 26, 30, 0, 0, 0, 27, - 0, 0, 32, 28, 0, 0, 0, 33, 0, 71, - 72, 34, 30, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 36, 33, 37, 74, 0, 34, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, - 36, 41, 37, 0, 0, 0, 38, 0, 86, 0, - 0, 87, 88, 0, 39, 40, 0, 0, 41, 0, - 0, 319, 0, 0, 0, 0, 89, 90, 91, 92, - 300, 0, 0, 0, 512, 733, 0, 0, 95, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, - 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 919, 0, 0, 0, 105, 301, 107, 108, 56, 24, - 0, 25, 0, 0, 26, 253, 0, 0, 0, 27, - 61, 62, 352, 28, 0, 0, 170, 0, 170, 64, - 0, 170, 30, 0, 0, 0, 170, 0, 0, 32, - 170, 0, 0, 0, 33, 0, 71, 72, 34, 170, - 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, - 36, 170, 37, 74, 920, 170, 38, 0, 0, 76, - 0, 78, 0, 80, 39, 40, 254, 170, 41, 170, - 0, 0, 0, 170, 0, 86, 0, 0, 87, 88, - 0, 170, 170, 0, 0, 170, 0, 0, 170, 0, - 0, 0, 0, 89, 90, 91, 92, 300, 0, 0, - 0, 512, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, - 102, 0, 0, 958, 0, 0, 103, 104, 0, 0, - 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, - 26, 253, 0, 0, 0, 27, 61, 62, 0, 28, - 0, 105, 301, 107, 108, 64, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 170, - 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, - 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, - 39, 40, 254, 0, 41, 0, 0, 0, 0, 0, - 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, - 90, 91, 92, 300, 0, 0, 0, 719, 988, 0, - 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, - 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, + 0, 0, 785, 785, 785, 785, 56, 24, 0, 25, + 0, 0, 26, 253, 0, 890, 0, 27, 61, 62, + 0, 28, 0, 0, 24, 0, 25, 64, 0, 26, + 30, 0, 0, 0, 27, 0, 0, 32, 28, 0, + 0, 0, 33, 0, 71, 72, 34, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 36, 33, + 37, 74, 0, 34, 38, 0, 0, 76, 0, 78, + 0, 80, 39, 40, 254, 36, 41, 37, 0, 0, + 0, 38, 0, 86, 0, 0, 87, 88, 0, 39, + 40, 0, 0, 41, 0, 0, 319, 0, 0, 0, + 0, 89, 90, 91, 92, 300, 0, 0, 0, 512, + 733, 0, 0, 95, 0, 0, 0, 0, 0, 97, + 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, + 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 732, 0, 105, 720, 107, - 108, 0, 0, 56, 24, 0, 25, 0, 721, 26, - 253, 0, 0, 0, 27, 61, 62, 0, 28, 0, - 0, 170, 0, 170, 64, 0, 170, 30, 0, 0, - 0, 170, 0, 0, 32, 170, 0, 0, 0, 33, - 0, 71, 72, 34, 170, 0, 0, 0, 0, 0, - 0, 170, 0, 0, 0, 36, 170, 37, 74, 920, - 170, 38, 0, 0, 76, 0, 78, 0, 80, 39, - 40, 254, 170, 41, 170, 0, 0, 0, 170, 0, - 86, 0, 0, 87, 88, 0, 170, 170, 0, 0, - 170, 0, 0, 170, 0, 0, 0, 0, 89, 90, + 0, 0, 0, 0, 0, 919, 0, 0, 0, 105, + 301, 107, 108, 56, 24, 0, 25, 0, 0, 26, + 253, 0, 1034, 0, 27, 61, 62, 352, 28, 0, + 0, 24, 0, 25, 64, 0, 26, 30, 0, 0, + 0, 27, 0, 0, 32, 28, 0, 0, 0, 33, + 0, 71, 72, 34, 30, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 36, 33, 37, 74, 920, + 34, 38, 0, 0, 76, 0, 78, 0, 80, 39, + 40, 254, 36, 41, 37, 0, 0, 0, 38, 0, + 86, 0, 0, 87, 88, 0, 39, 40, 0, 0, + 41, 0, 0, 319, 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, 0, 0, 512, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, - 0, 0, 0, 101, 0, 102, 958, 0, 0, 0, - 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, + 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, + 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, + 27, 61, 62, 0, 28, 0, 105, 301, 107, 108, + 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 352, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 700, 0, 0, 0, 105, 301, 107, 108, - 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, - 0, 27, 61, 62, 170, 28, 0, 0, 24, 0, - 25, 64, 0, 26, 30, 0, 0, 0, 27, 0, - 0, 32, 28, 0, 0, 0, 33, 0, 71, 72, - 34, 30, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 36, 33, 37, 74, 0, 34, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 254, 36, - 41, 37, 0, 84, 0, 38, 0, 86, 0, 0, - 87, 88, 0, 39, 40, 0, 0, 41, 0, 0, - 319, 0, 0, 0, 0, 89, 90, 91, 92, 300, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, - 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, - 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, - 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, - 0, 28, 0, 105, 301, 107, 108, 64, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 352, 33, 0, 71, 72, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, - 0, 80, 39, 40, 254, 0, 41, 0, 0, 0, - 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, + 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, + 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, + 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, + 0, 0, 719, 988, 0, 0, 95, 0, 0, 0, + 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, + 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 91, 92, 300, 0, 0, 0, 719, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, - 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, - 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 732, 0, 105, - 720, 107, 108, 0, 0, 56, 24, 0, 25, 0, - 721, 26, 253, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 0, 24, 0, 25, 64, 0, 26, 30, - 0, 0, 0, 27, 0, 0, 32, 28, 0, 0, - 0, 33, 0, 71, 72, 34, 30, 0, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 36, 33, 37, - 74, 0, 34, 38, 0, 0, 76, 0, 78, 0, - 80, 39, 40, 254, 36, 41, 37, 0, 0, 0, - 38, 0, 86, 0, 0, 87, 88, 0, 39, 40, - 0, 0, 41, 0, 0, 514, 0, 0, 0, 0, - 89, 90, 91, 92, 300, 0, 0, 0, 512, 0, + 732, 0, 105, 720, 107, 108, 0, 0, 56, 24, + 0, 25, 0, 721, 26, 253, 0, 1156, 0, 27, + 61, 62, 0, 28, 0, 0, 24, 0, 25, 64, + 0, 26, 30, 0, 0, 0, 27, 0, 0, 32, + 28, 0, 0, 0, 33, 0, 71, 72, 34, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 36, 33, 37, 74, 920, 34, 38, 0, 0, 76, + 0, 78, 0, 80, 39, 40, 254, 36, 41, 37, + 0, 0, 0, 38, 0, 86, 0, 0, 87, 88, + 0, 39, 40, 0, 0, 41, 0, 0, 319, 0, + 0, 0, 0, 89, 90, 91, 92, 300, 0, 0, + 0, 512, 0, 0, 0, 95, 0, 0, 0, 0, + 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, + 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, + 0, 105, 301, 107, 108, 56, 24, 0, 25, 0, + 0, 26, 253, 0, 0, 0, 27, 61, 62, 352, + 28, 0, 0, 170, 0, 170, 64, 0, 170, 30, + 0, 0, 0, 170, 0, 0, 32, 170, 0, 0, + 0, 33, 0, 71, 72, 34, 170, 0, 0, 0, + 0, 0, 0, 170, 0, 0, 0, 36, 170, 37, + 74, 0, 170, 38, 0, 0, 76, 0, 78, 0, + 80, 39, 40, 254, 170, 41, 170, 0, 84, 0, + 170, 0, 86, 0, 0, 87, 88, 0, 170, 170, + 0, 0, 170, 0, 0, 170, 0, 0, 0, 0, + 89, 90, 91, 92, 300, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, - 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, + 958, 0, 0, 103, 104, 0, 0, 0, 0, 0, + 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, + 0, 0, 27, 61, 62, 0, 28, 0, 105, 301, + 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 170, 33, 0, 71, + 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, + 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, + 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, + 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, + 300, 0, 0, 0, 719, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, + 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 585, 0, 0, 0, 105, 301, - 107, 108, 56, 24, 0, 25, 0, 0, 26, 253, - 0, 0, 0, 27, 61, 62, 352, 28, 0, 0, - 24, 0, 25, 64, 0, 26, 30, 0, 0, 0, - 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, - 71, 72, 34, 30, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 36, 33, 37, 74, 0, 34, - 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, - 254, 36, 41, 37, 0, 0, 0, 38, 0, 86, - 0, 0, 87, 88, 0, 39, 40, 0, 0, 41, - 0, 0, 567, 0, 0, 0, 0, 89, 90, 91, - 92, 93, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, - 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, - 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 732, 0, 105, 720, 107, 108, 0, 0, + 56, 24, 0, 25, 0, 721, 26, 253, 0, 0, + 0, 27, 61, 62, 0, 28, 0, 0, 170, 0, + 170, 64, 0, 170, 30, 0, 0, 0, 170, 0, + 0, 32, 170, 0, 0, 0, 33, 0, 71, 72, + 34, 170, 0, 0, 0, 0, 0, 0, 170, 0, + 0, 0, 36, 170, 37, 74, 0, 170, 38, 0, + 0, 76, 0, 78, 0, 80, 39, 40, 254, 170, + 41, 170, 0, 0, 0, 170, 0, 86, 0, 0, + 87, 88, 0, 170, 170, 0, 0, 170, 0, 0, + 170, 0, 0, 0, 0, 89, 90, 91, 92, 300, + 0, 0, 0, 512, 0, 0, 0, 95, 0, 0, + 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, + 101, 0, 102, 958, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 907, 0, 0, 0, 105, 106, 107, 108, 56, - 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, - 27, 61, 62, 352, 28, 0, 0, 24, 0, 25, - 64, 0, 26, 30, 0, 0, 0, 27, 0, 0, - 32, 28, 0, 0, 0, 33, 0, 71, 72, 34, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 36, 33, 37, 74, 0, 34, 38, 0, 0, - 76, 0, 78, 0, 80, 39, 40, 254, 36, 41, - 37, 0, 0, 0, 38, 0, 86, 0, 0, 87, - 88, 0, 39, 40, 0, 0, 41, 0, 0, 747, - 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, - 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, - 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, + 0, 0, 0, 105, 301, 107, 108, 56, 24, 0, + 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, + 62, 170, 28, 0, 0, 24, 0, 25, 64, 0, + 26, 30, 0, 0, 0, 27, 0, 0, 32, 28, + 0, 0, 0, 33, 0, 71, 72, 34, 30, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 36, + 33, 37, 74, 0, 34, 38, 0, 0, 76, 0, + 78, 0, 80, 39, 40, 254, 36, 41, 37, 0, + 0, 0, 38, 0, 86, 0, 0, 87, 88, 0, + 39, 40, 0, 0, 41, 0, 0, 319, 0, 0, + 0, 0, 89, 90, 91, 92, 93, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, + 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, + 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, - 0, 0, 105, 301, 107, 108, 603, 603, 0, 603, - 0, 0, 603, 603, 0, 0, 0, 603, 603, 603, - 352, 603, 0, 0, 484, 0, 484, 603, 0, 484, - 603, 0, 0, 0, 484, 0, 0, 603, 484, 0, - 0, 0, 603, 0, 603, 603, 603, 484, 0, 0, - 0, 0, 0, 0, 484, 0, 0, 0, 603, 484, - 603, 603, 0, 484, 603, 0, 0, 603, 0, 603, - 0, 603, 603, 603, 603, 484, 603, 484, 0, 0, - 0, 484, 0, 603, 0, 0, 603, 603, 0, 484, - 484, 0, 0, 484, 0, 0, 484, 0, 0, 0, - 0, 603, 603, 603, 603, 603, 0, 0, 0, 0, - 0, 0, 0, 603, 0, 0, 0, 0, 0, 603, - 603, 603, 603, 0, 0, 0, 603, 0, 603, 0, - 0, 0, 0, 0, 603, 603, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 809, 0, 0, 0, + 105, 106, 107, 108, 56, 24, 0, 25, 0, 0, + 26, 253, 0, 0, 0, 27, 61, 62, 352, 28, + 0, 0, 24, 0, 25, 64, 0, 26, 30, 0, + 0, 0, 27, 0, 0, 32, 28, 0, 0, 0, + 33, 0, 71, 72, 34, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 36, 33, 37, 74, + 0, 34, 38, 0, 0, 76, 0, 78, 0, 80, + 39, 40, 254, 36, 41, 37, 0, 0, 0, 38, + 0, 86, 0, 0, 87, 88, 0, 39, 40, 0, + 0, 41, 0, 0, 514, 0, 0, 0, 0, 89, + 90, 91, 92, 300, 0, 0, 0, 0, 0, 0, + 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, + 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, + 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 495, 0, 0, 0, 603, - 603, 603, 603, 56, 24, 0, 25, 0, 0, 26, - 253, 0, 0, 0, 27, 61, 62, 484, 28, 0, - 0, 0, 0, 0, 64, 0, 0, 30, 0, 0, - 0, 0, 0, 0, 32, 0, 448, 0, 330, 33, - 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 74, 449, - 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, - 40, 254, 450, 41, 330, 0, 0, 452, 0, 0, - 0, 0, 453, 0, 454, 455, 456, 457, 0, 0, - 0, 0, 458, 0, 0, 0, 459, 0, 89, 90, - 91, 255, 0, 0, 0, 0, 0, 0, 460, 0, - 95, 461, 0, 462, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 603, 0, 0, 0, 105, 301, 107, + 108, 603, 603, 0, 603, 0, 0, 603, 603, 0, + 0, 0, 603, 603, 603, 352, 603, 0, 0, 0, + 0, 0, 603, 0, 0, 603, 0, 0, 0, 0, + 0, 0, 603, 0, 0, 0, 0, 603, 0, 603, + 603, 603, 0, 0, 0, 0, 0, 0, 0, 330, + 0, 0, 0, 603, 0, 603, 603, 0, 0, 603, + 0, 0, 603, 0, 603, 0, 603, 603, 603, 603, + 0, 603, 0, 0, 0, 0, 0, 0, 603, 0, + 0, 603, 603, 0, 0, 330, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 603, 603, 603, 603, + 603, 0, 0, 0, 0, 0, 0, 0, 603, 0, + 0, 0, 0, 0, 603, 603, 603, 603, 0, 0, + 0, 603, 0, 603, 0, 0, 0, 0, 0, 603, + 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 330, 330, 330, - 330, 736, 0, 0, 330, 330, 105, 496, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 0, 330, 330, + 0, 0, 0, 0, 603, 603, 603, 603, 330, 330, + 330, 330, 736, 0, 0, 330, 330, 0, 0, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 0, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 0, 46, 0, 1314, 0, 46, 330, 46, 0, 330, - 46, 0, 46, 46, 0, 46, 0, 46, 0, 46, + 330, 0, 46, 0, 0, 0, 46, 330, 46, 0, + 330, 46, 0, 46, 46, 0, 46, 0, 46, 0, + 46, 0, 46, 46, 46, 46, 0, 0, 46, 46, + 0, 0, 0, 0, 46, 0, 46, 46, 46, 0, + 0, 46, 0, 46, 0, 46, 0, 0, 46, 0, + 46, 46, 46, 46, 0, 0, 0, 46, 46, 46, + 0, 0, 46, 46, 46, 0, 0, 0, 0, 0, + 0, 46, 46, 0, 46, 46, 0, 46, 46, 46, + 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 46, 0, 46, 0, 46, 0, 46, 0, 79, + 46, 0, 46, 46, 0, 46, 0, 46, 46, 46, 0, 46, 46, 46, 46, 0, 0, 46, 46, 0, 0, 0, 0, 46, 0, 46, 46, 46, 0, 0, 46, 0, 46, 0, 46, 0, 0, 46, 0, 46, - 46, 46, 46, 0, 0, 0, 46, 46, 46, 0, + 46, 46, 46, 0, 0, 0, 46, 46, 46, 46, 0, 46, 46, 46, 0, 0, 0, 0, 0, 0, 46, 46, 0, 46, 46, 0, 46, 46, 46, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 0, 46, 0, 46, 0, 46, 0, 79, 46, + 46, 0, 46, 0, 46, 0, 46, 0, 80, 46, 0, 46, 46, 0, 46, 0, 46, 46, 46, 0, 46, 46, 46, 46, 0, 0, 46, 46, 0, 0, 0, 0, 46, 0, 46, 46, 46, 0, 0, 46, @@ -10708,80 +10680,106 @@ void case_962() 46, 46, 46, 0, 0, 0, 0, 0, 0, 46, 46, 0, 46, 46, 0, 46, 46, 46, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 0, 46, 0, 46, 0, 46, 0, 80, 46, 0, - 46, 46, 0, 46, 0, 46, 46, 46, 0, 46, - 46, 46, 46, 0, 0, 46, 46, 0, 0, 0, - 0, 46, 0, 46, 46, 46, 0, 0, 46, 0, - 46, 0, 46, 0, 0, 46, 0, 46, 46, 46, - 46, 0, 0, 0, 46, 46, 46, 46, 0, 46, - 46, 46, 0, 0, 0, 0, 0, 0, 46, 46, - 0, 46, 46, 0, 46, 46, 46, 0, 0, 0, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 46, 0, 0, 0, 46, 0, 46, - 46, 0, 46, 0, 46, 46, 210, 46, 0, 46, - 0, 46, 0, 46, 46, 46, 46, 0, 0, 46, - 46, 0, 0, 0, 0, 46, 0, 46, 46, 46, - 0, 0, 46, 0, 46, 330, 46, 0, 0, 46, - 0, 46, 46, 46, 46, 0, 0, 0, 46, 46, - 46, 0, 0, 46, 46, 46, 46, 0, 330, 0, - 0, 0, 46, 46, 0, 46, 46, 0, 46, 46, - 46, 330, 0, 0, 46, 0, 330, 0, 0, 330, - 0, 330, 0, 330, 330, 330, 330, 0, 0, 0, - 0, 330, 0, 0, 46, 330, 0, 0, 0, 330, - 211, 0, 0, 0, 0, 0, 0, 330, 0, 0, - 330, 0, 330, 56, 24, 0, 25, 0, 0, 26, + 0, 0, 0, 0, 46, 0, 0, 0, 46, 0, + 46, 46, 0, 46, 0, 46, 46, 210, 46, 0, + 46, 0, 46, 0, 46, 46, 46, 46, 0, 0, + 46, 46, 0, 0, 0, 0, 46, 0, 46, 46, + 46, 0, 0, 46, 0, 46, 330, 46, 0, 0, + 46, 0, 46, 46, 46, 46, 0, 0, 0, 46, + 46, 46, 0, 0, 46, 46, 46, 46, 0, 330, + 0, 0, 0, 46, 46, 0, 46, 46, 0, 46, + 46, 46, 330, 0, 0, 46, 0, 330, 0, 0, + 330, 0, 330, 0, 330, 330, 330, 330, 0, 0, + 0, 0, 330, 0, 0, 46, 330, 0, 0, 0, + 330, 211, 0, 0, 448, 0, 0, 0, 330, 0, + 0, 330, 0, 330, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, + 0, 0, 330, 0, 448, 0, 0, 330, 0, 0, + 450, 0, 0, 0, 330, 452, 261, 0, 330, 0, + 453, 46, 454, 455, 456, 457, 0, 449, 0, 0, + 458, 330, 0, 0, 459, 0, 0, 0, 1299, 0, + 450, 0, 0, 0, 0, 452, 460, 0, 0, 461, + 453, 462, 454, 455, 456, 457, 0, 0, 0, 0, + 458, 0, 0, 330, 459, 0, 0, 0, 0, 0, + 0, 56, 24, 0, 25, 463, 460, 26, 253, 461, + 0, 462, 27, 61, 62, 0, 28, 0, 0, 0, + 0, 0, 64, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 463, 0, 33, 0, 71, + 72, 34, 0, 587, 0, 0, 0, 0, 0, 0, + 588, 0, 0, 36, 0, 37, 74, 0, 0, 38, + 0, 1300, 76, 0, 78, 0, 80, 39, 40, 254, + 0, 41, 0, 0, 0, 0, 0, 0, 589, 0, + 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 1314, 0, 0, 0, 0, 89, 90, 91, 92, + 93, 0, 0, 0, 0, 0, 0, 0, 95, 914, + 0, 590, 0, 0, 97, 98, 99, 100, 0, 0, + 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, + 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, + 62, 0, 28, 0, 105, 106, 107, 108, 64, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 71, 72, 34, 0, 587, + 0, 0, 0, 0, 0, 0, 588, 0, 0, 36, + 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, + 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, + 0, 0, 0, 0, 589, 0, 0, 87, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 89, 90, 91, 92, 93, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 590, 0, 0, + 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, + 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, + 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, 28, 0, - 0, 330, 0, 0, 64, 0, 330, 30, 0, 0, - 0, 0, 0, 330, 32, 261, 0, 330, 0, 33, - 46, 71, 72, 34, 0, 587, 0, 0, 0, 0, - 330, 0, 588, 0, 0, 36, 0, 37, 74, 0, + 105, 106, 107, 108, 64, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 71, 72, 34, 0, 587, 0, 0, 0, 0, + 0, 0, 588, 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, 0, 0, 0, 0, - 589, 0, 330, 87, 88, 0, 0, 0, 0, 0, + 589, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, - 95, 914, 0, 590, 0, 0, 97, 98, 99, 100, + 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, 28, 0, 105, 106, 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, - 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, - 0, 0, 0, 0, 0, 0, 589, 0, 0, 87, + 0, 0, 84, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 90, 91, 92, 93, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 590, + 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 105, 106, 107, 108, 64, 0, 0, 30, + 28, 0, 105, 301, 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 71, 72, 34, 0, 587, 0, 0, - 0, 0, 0, 0, 588, 0, 0, 36, 0, 37, + 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, 0, 0, - 0, 0, 589, 0, 0, 87, 88, 0, 0, 0, + 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, + 89, 90, 91, 92, 300, 0, 0, 0, 0, 873, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, - 0, 0, 27, 61, 62, 0, 28, 0, 105, 106, + 0, 0, 27, 61, 62, 0, 28, 0, 105, 301, 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, - 0, 41, 0, 0, 84, 0, 0, 0, 86, 0, + 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, - 300, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 300, 0, 0, 0, 512, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, @@ -10795,7 +10793,7 @@ void case_962() 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, 0, 0, - 0, 871, 0, 0, 95, 0, 0, 0, 0, 0, + 506, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, @@ -10808,7 +10806,7 @@ void case_962() 40, 254, 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, - 91, 92, 300, 0, 0, 0, 512, 0, 0, 0, + 91, 92, 300, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, @@ -10821,13 +10819,13 @@ void case_962() 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, - 0, 0, 506, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 91, 92, 93, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 105, 301, 107, 108, 64, 0, 0, 30, + 28, 0, 105, 106, 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, @@ -10835,436 +10833,429 @@ void case_962() 80, 39, 40, 254, 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 90, 91, 92, 300, 0, 0, 0, 0, 0, + 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, - 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, - 0, 0, 27, 61, 62, 0, 28, 0, 105, 301, - 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, - 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, - 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, - 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, - 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, - 93, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, - 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, - 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, - 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, - 62, 0, 28, 0, 105, 106, 107, 108, 64, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, - 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, - 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, + 0, 76, 76, 0, 76, 0, 0, 76, 76, 0, + 0, 0, 76, 76, 76, 0, 76, 0, 105, 1026, + 107, 108, 76, 0, 0, 76, 0, 0, 0, 0, + 0, 0, 76, 0, 0, 0, 0, 76, 0, 76, + 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 76, 0, 76, 76, 0, 0, 76, + 0, 0, 76, 0, 76, 0, 76, 76, 76, 76, + 0, 76, 0, 0, 0, 0, 0, 0, 76, 0, + 0, 76, 76, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, + 76, 0, 0, 0, 0, 0, 0, 0, 76, 0, + 0, 0, 0, 0, 76, 76, 76, 76, 0, 0, + 0, 76, 0, 76, 0, 0, 0, 0, 0, 76, + 76, 0, 0, 0, 0, 0, 0, 133, 133, 0, + 133, 0, 0, 133, 133, 0, 0, 0, 133, 133, + 133, 0, 133, 0, 76, 76, 76, 76, 133, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 133, 0, + 0, 0, 0, 133, 0, 133, 133, 133, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, + 0, 133, 133, 0, 0, 133, 0, 0, 133, 0, + 133, 0, 133, 133, 133, 133, 0, 133, 0, 0, + 0, 0, 0, 0, 133, 0, 0, 133, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 90, 91, 92, 93, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, - 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, - 0, 0, 0, 76, 76, 0, 76, 0, 0, 76, - 76, 0, 0, 0, 76, 76, 76, 0, 76, 0, - 105, 1026, 107, 108, 76, 0, 0, 76, 0, 0, - 0, 0, 0, 0, 76, 0, 0, 0, 0, 76, - 0, 76, 76, 76, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 76, 0, 76, 76, 0, - 0, 76, 0, 0, 76, 0, 76, 0, 76, 76, - 76, 76, 0, 76, 0, 0, 0, 0, 0, 0, - 76, 0, 0, 76, 76, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, - 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, - 76, 0, 0, 0, 0, 0, 76, 76, 76, 76, - 0, 0, 0, 76, 0, 76, 0, 0, 0, 0, - 0, 76, 76, 0, 0, 0, 0, 0, 0, 133, - 133, 0, 133, 0, 0, 133, 133, 0, 0, 0, - 133, 133, 133, 0, 133, 0, 76, 76, 76, 76, - 133, 0, 0, 133, 0, 0, 0, 0, 0, 0, - 133, 0, 0, 0, 0, 133, 0, 133, 133, 133, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 133, 0, 133, 133, 0, 0, 133, 0, 0, - 133, 0, 133, 0, 133, 133, 133, 133, 0, 133, - 0, 0, 0, 0, 0, 0, 133, 0, 0, 133, - 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 133, 133, 133, 133, 133, 0, - 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, - 0, 0, 133, 133, 133, 133, 0, 0, 0, 133, - 0, 133, 0, 0, 0, 0, 0, 133, 133, 0, - 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, - 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, - 28, 0, 133, 133, 133, 133, 64, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 27, 0, - 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 74, 27, 0, 38, 0, 0, 76, 0, 78, 0, - 80, 39, 40, 254, 27, 41, 0, 0, 0, 27, - 0, 0, 0, 0, 27, 0, 27, 27, 27, 27, - 0, 0, 27, 0, 27, 0, 0, 0, 27, 0, - 89, 90, 91, 255, 300, 0, 0, 0, 0, 0, - 27, 0, 95, 27, 0, 27, 0, 0, 97, 98, - 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, - 0, 0, 0, 103, 104, 0, 0, 0, 0, 27, - 0, 0, 0, 0, 0, 27, 27, 0, 0, 0, - 0, 0, 0, 636, 0, 636, 0, 636, 105, 256, - 636, 108, 636, 636, 0, 636, 0, 636, 0, 636, - 0, 636, 636, 636, 0, 0, 0, 636, 636, 0, - 0, 0, 0, 636, 0, 636, 636, 0, 0, 0, - 636, 0, 0, 0, 636, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 636, 636, 0, 636, 0, - 0, 0, 636, 636, 0, 0, 0, 0, 0, 0, - 636, 636, 56, 24, 636, 25, 0, 636, 26, 253, - 0, 0, 636, 27, 61, 62, 0, 28, 0, 0, - 0, 0, 0, 64, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 32, 636, 636, 0, 0, 33, 0, - 71, 72, 34, 0, 0, 0, 0, 636, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, - 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, - 254, 0, 41, 0, 0, 84, 0, 0, 0, 0, - 0, 0, 24, 0, 25, 0, 0, 26, 636, 1209, - 0, 0, 27, 0, 0, 0, 28, 89, 90, 91, - 255, 0, 0, 0, 0, 30, 635, 0, 635, 95, - 0, 635, 32, 635, 635, 0, 635, 33, 635, 1210, - 635, 34, 635, 635, 635, 0, 0, 0, 635, 635, - 0, 0, 0, 36, 635, 37, 635, 635, 0, 38, - 1211, 635, 0, 0, 0, 635, 0, 39, 40, 0, - 0, 41, 0, 0, 319, 105, 256, 635, 0, 635, - 0, 0, 0, 635, 635, 0, 0, 0, 0, 0, - 0, 635, 635, 0, 635, 635, 635, 0, 635, 635, - 0, 635, 635, 635, 635, 0, 635, 0, 635, 0, + 0, 0, 133, 133, 133, 133, 133, 0, 0, 0, + 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, + 133, 133, 133, 133, 0, 0, 0, 133, 0, 133, + 0, 0, 0, 0, 0, 133, 133, 0, 0, 0, + 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, + 253, 0, 0, 0, 27, 61, 62, 0, 28, 0, + 133, 133, 133, 133, 64, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 27, 0, 27, 33, + 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 74, 27, + 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, + 40, 254, 27, 41, 0, 0, 0, 27, 0, 0, + 0, 0, 27, 0, 27, 27, 27, 27, 0, 0, + 0, 0, 27, 0, 0, 0, 27, 0, 89, 90, + 91, 255, 300, 0, 0, 0, 0, 0, 27, 0, + 95, 27, 0, 27, 0, 0, 97, 98, 99, 100, + 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, + 0, 103, 104, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 27, 27, 0, 0, 0, 0, 0, + 0, 636, 0, 636, 0, 636, 105, 256, 636, 108, + 636, 636, 0, 636, 0, 636, 0, 636, 0, 636, + 636, 636, 0, 0, 0, 636, 636, 0, 0, 0, + 0, 636, 0, 636, 636, 0, 0, 0, 636, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 636, 636, 0, 636, 0, 0, 0, + 636, 636, 0, 0, 0, 0, 0, 0, 636, 636, + 56, 24, 636, 25, 0, 636, 26, 253, 0, 0, + 636, 27, 61, 62, 0, 28, 0, 0, 0, 0, + 0, 64, 0, 0, 30, 0, 0, 0, 0, 0, + 0, 32, 636, 636, 0, 0, 33, 0, 71, 72, + 34, 0, 0, 0, 0, 636, 0, 0, 0, 0, + 0, 0, 36, 0, 37, 74, 0, 0, 38, 0, + 0, 76, 0, 78, 0, 80, 39, 40, 254, 0, + 41, 0, 0, 84, 0, 0, 0, 0, 0, 0, + 24, 0, 25, 0, 0, 26, 636, 1209, 0, 0, + 27, 0, 0, 0, 28, 89, 90, 91, 255, 0, + 0, 0, 0, 30, 635, 0, 635, 95, 0, 635, + 32, 635, 635, 0, 635, 33, 635, 1210, 635, 34, 635, 635, 635, 0, 0, 0, 635, 635, 0, 0, - 0, 0, 635, 0, 635, 635, 0, 0, 0, 635, - 0, 0, 0, 635, 0, 0, 0, 0, 635, 0, - 0, 0, 0, 0, 0, 635, 0, 635, 0, 0, - 0, 635, 635, 0, 0, 352, 0, 0, 0, 635, - 635, 0, 0, 635, 0, 0, 635, 0, 24, 0, - 25, 635, 0, 26, 0, 0, 1269, 0, 27, 635, - 676, 0, 28, 0, 677, 1270, 1271, 0, 0, 0, - 1272, 30, 0, 0, 0, 0, 1273, 0, 32, 0, - 24, 0, 25, 33, 0, 26, 0, 34, 1269, 0, - 27, 0, 676, 0, 28, 0, 677, 1270, 1271, 36, - 0, 37, 1272, 30, 0, 38, 0, 0, 1273, 0, - 32, 0, 0, 39, 40, 33, 0, 41, 0, 34, - 1274, 0, 0, 0, 46, 1275, 46, 635, 0, 46, - 0, 36, 0, 37, 46, 0, 0, 38, 46, 0, - 0, 0, 0, 0, 0, 39, 40, 46, 0, 41, - 0, 0, 1274, 0, 46, 0, 46, 1275, 46, 46, - 1276, 46, 0, 46, 0, 46, 46, 46, 0, 0, - 46, 0, 46, 0, 0, 46, 0, 46, 0, 46, - 0, 46, 0, 0, 46, 0, 46, 0, 0, 46, - 46, 46, 0, 46, 0, 46, 46, 46, 0, 46, - 46, 1277, 46, 0, 46, 46, 0, 46, 0, 46, - 46, 0, 0, 46, 46, 0, 46, 0, 0, 0, - 0, 46, 46, 46, 0, 46, 0, 0, 46, 0, - 46, 151, 24, 1277, 25, 46, 0, 26, 0, 46, - 0, 46, 27, 46, 0, 0, 28, 0, 46, 0, - 0, 46, 0, 46, 0, 30, 0, 46, 0, 0, - 46, 151, 32, 0, 0, 46, 46, 33, 0, 46, - 0, 34, 46, 564, 0, 0, 0, 46, 0, 0, - 565, 0, 0, 36, 0, 37, 0, 0, 0, 38, - 0, 0, 566, 0, 0, 0, 0, 39, 40, 0, - 0, 41, 0, 24, 567, 25, 0, 0, 26, 46, - 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, - 0, 29, 24, 0, 25, 0, 30, 26, 0, 0, - 0, 31, 27, 32, 0, 0, 28, 0, 33, 0, - 0, 0, 34, 35, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 46, 36, 0, 37, 33, 0, 0, - 38, 34, 0, 0, 0, 0, 0, 0, 39, 40, - 0, 0, 41, 36, 0, 37, 171, 0, 171, 38, - 0, 171, 0, 0, 0, 568, 171, 39, 40, 0, - 171, 41, 0, 170, 319, 170, 0, 0, 170, 171, - 0, 0, 0, 170, 0, 0, 171, 170, 0, 0, - 0, 171, 0, 0, 0, 171, 170, 0, 0, 0, - 290, 0, 0, 170, 0, 0, 0, 171, 170, 171, - 0, 0, 170, 171, 0, 0, 0, 0, 0, 0, - 0, 171, 171, 0, 170, 171, 170, 180, 171, 180, - 170, 0, 180, 0, 0, 0, 42, 180, 170, 170, - 0, 180, 170, 0, 0, 170, 0, 0, 0, 0, - 180, 0, 0, 0, 0, 320, 0, 180, 0, 0, - 0, 0, 180, 0, 0, 33, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 33, 0, 180, 0, - 180, 33, 0, 0, 180, 33, 0, 0, 33, 0, - 0, 0, 180, 180, 0, 0, 180, 0, 0, 180, - 33, 33, 0, 0, 0, 33, 33, 0, 0, 171, - 0, 33, 0, 33, 33, 33, 33, 0, 0, 0, - 0, 33, 0, 0, 0, 33, 170, 33, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 33, - 33, 31, 33, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 31, 0, 0, - 0, 31, 0, 0, 31, 0, 33, 0, 0, 0, - 0, 0, 33, 33, 0, 0, 31, 31, 0, 0, - 180, 31, 31, 27, 0, 27, 0, 31, 0, 31, - 31, 31, 31, 0, 0, 0, 0, 31, 0, 0, - 0, 31, 0, 31, 0, 0, 27, 0, 0, 0, - 0, 0, 0, 31, 0, 0, 31, 0, 31, 27, - 0, 0, 31, 0, 27, 0, 0, 0, 0, 27, - 0, 27, 27, 27, 27, 0, 0, 0, 0, 27, - 0, 0, 31, 27, 0, 0, 46, 0, 31, 31, - 0, 0, 0, 0, 0, 27, 0, 46, 27, 0, - 27, 0, 46, 0, 0, 0, 46, 0, 0, 46, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 46, 46, 0, 27, 0, 46, 46, 0, 46, - 27, 27, 46, 0, 46, 46, 46, 46, 0, 0, - 46, 0, 46, 0, 0, 46, 46, 0, 46, 46, - 0, 0, 46, 0, 0, 0, 0, 0, 46, 0, - 0, 46, 0, 46, 46, 46, 0, 46, 0, 46, - 46, 46, 0, 0, 0, 46, 0, 46, 46, 46, - 46, 0, 0, 0, 0, 46, 0, 46, 0, 46, - 0, 46, 0, 35, 46, 0, 0, 0, 0, 0, - 0, 46, 0, 0, 46, 0, 46, 46, 0, 46, - 46, 0, 46, 0, 0, 0, 0, 46, 0, 46, - 46, 46, 46, 0, 0, 0, 0, 46, 0, 0, - 46, 46, 46, 0, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 46, 0, 46, 46, 46, 46, 0, - 46, 0, 0, 0, 0, 46, 0, 46, 46, 46, - 46, 0, 0, 0, 0, 46, 0, 0, 0, 46, - 46, 0, 46, 0, 46, 46, 0, 0, 192, 0, - 0, 46, 0, 46, 46, 46, 46, 46, 46, 0, + 0, 36, 635, 37, 635, 635, 0, 38, 1211, 635, + 0, 0, 0, 635, 0, 39, 40, 0, 0, 41, + 0, 0, 319, 105, 256, 635, 0, 635, 0, 0, + 0, 635, 635, 0, 0, 0, 0, 0, 0, 635, + 635, 0, 635, 635, 635, 0, 635, 635, 0, 635, + 635, 635, 635, 0, 635, 0, 635, 0, 635, 635, + 635, 0, 0, 0, 635, 635, 0, 0, 0, 0, + 635, 0, 635, 635, 0, 0, 0, 635, 0, 0, + 0, 635, 0, 0, 0, 0, 635, 0, 0, 0, + 0, 0, 0, 635, 0, 635, 0, 0, 0, 635, + 635, 0, 0, 352, 0, 0, 0, 635, 635, 0, + 0, 635, 0, 0, 635, 0, 24, 0, 25, 635, + 0, 26, 0, 0, 1269, 0, 27, 635, 676, 0, + 28, 0, 677, 1270, 1271, 0, 0, 0, 1272, 30, + 0, 0, 0, 0, 1273, 0, 32, 0, 24, 0, + 25, 33, 0, 26, 0, 34, 1269, 0, 27, 0, + 676, 0, 28, 0, 677, 1270, 1271, 36, 0, 37, + 1272, 30, 0, 38, 0, 0, 1273, 0, 32, 0, + 0, 39, 40, 33, 0, 41, 0, 34, 1274, 0, + 0, 0, 46, 1275, 46, 635, 0, 46, 0, 36, + 0, 37, 46, 0, 0, 38, 46, 0, 0, 0, + 0, 0, 0, 39, 40, 46, 0, 41, 0, 0, + 1274, 0, 46, 0, 46, 1275, 46, 46, 1276, 46, + 0, 46, 0, 46, 46, 46, 0, 0, 46, 0, + 46, 0, 0, 46, 0, 46, 0, 46, 0, 46, + 0, 0, 46, 0, 46, 0, 0, 46, 46, 46, + 0, 46, 0, 46, 46, 46, 0, 46, 46, 1277, + 46, 0, 46, 46, 0, 46, 0, 46, 46, 0, + 0, 46, 46, 0, 46, 0, 0, 0, 0, 46, + 46, 46, 0, 46, 0, 0, 46, 0, 46, 151, + 24, 1277, 25, 46, 0, 26, 0, 46, 0, 46, + 27, 46, 0, 0, 28, 0, 46, 0, 0, 46, + 0, 46, 0, 30, 0, 46, 0, 0, 46, 151, + 32, 0, 0, 46, 46, 33, 0, 46, 0, 34, + 46, 564, 0, 0, 0, 46, 0, 0, 565, 0, + 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, + 566, 0, 0, 0, 0, 39, 40, 0, 0, 41, + 0, 24, 567, 25, 0, 0, 26, 46, 0, 0, + 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, + 24, 0, 25, 0, 30, 26, 0, 0, 0, 31, + 27, 32, 0, 0, 28, 0, 33, 0, 0, 0, + 34, 35, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 46, 36, 0, 37, 33, 0, 0, 38, 34, + 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, + 41, 36, 0, 37, 24, 0, 25, 38, 0, 26, + 0, 0, 0, 568, 27, 39, 40, 0, 28, 41, + 0, 24, 319, 25, 0, 0, 26, 30, 0, 0, + 0, 27, 0, 0, 32, 28, 0, 0, 0, 33, + 0, 0, 0, 34, 30, 0, 0, 0, 290, 0, + 0, 32, 0, 0, 0, 36, 33, 37, 0, 0, + 34, 38, 0, 0, 0, 0, 0, 0, 0, 39, + 40, 0, 36, 41, 37, 484, 567, 484, 38, 0, + 484, 0, 0, 0, 42, 484, 39, 40, 0, 484, + 41, 0, 0, 747, 0, 0, 0, 0, 484, 171, + 0, 171, 0, 320, 171, 484, 0, 0, 0, 171, + 484, 0, 0, 171, 484, 0, 0, 0, 0, 0, + 0, 0, 171, 0, 0, 0, 484, 0, 484, 171, + 0, 0, 484, 0, 171, 0, 0, 0, 171, 0, + 484, 484, 0, 0, 484, 0, 0, 484, 0, 170, + 171, 170, 171, 0, 170, 0, 171, 352, 0, 170, + 0, 0, 0, 170, 171, 171, 0, 0, 171, 0, + 0, 171, 170, 180, 352, 180, 0, 0, 180, 170, + 0, 0, 0, 180, 170, 0, 0, 180, 170, 0, + 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, + 170, 0, 170, 180, 0, 0, 170, 0, 180, 0, + 0, 0, 180, 0, 170, 170, 0, 0, 170, 0, + 33, 170, 0, 0, 180, 0, 180, 0, 484, 0, + 180, 33, 0, 0, 0, 0, 33, 0, 180, 180, + 33, 0, 180, 33, 0, 180, 0, 0, 0, 0, + 0, 0, 171, 0, 0, 33, 33, 0, 0, 0, + 33, 33, 0, 31, 0, 0, 33, 0, 33, 33, + 33, 33, 0, 0, 31, 0, 33, 0, 0, 31, + 33, 0, 33, 31, 0, 0, 31, 0, 0, 0, + 0, 0, 33, 0, 33, 33, 0, 33, 31, 31, + 0, 33, 170, 31, 31, 0, 0, 0, 0, 31, + 0, 31, 31, 31, 31, 0, 0, 0, 0, 31, + 0, 33, 0, 31, 0, 31, 180, 33, 33, 0, + 0, 0, 46, 0, 0, 31, 0, 0, 31, 0, + 31, 0, 0, 46, 31, 0, 0, 0, 46, 0, + 0, 0, 46, 0, 0, 46, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 0, 0, 46, 46, 0, + 31, 31, 46, 46, 0, 46, 0, 0, 46, 0, + 46, 46, 46, 46, 0, 0, 46, 0, 46, 0, + 0, 46, 46, 0, 46, 46, 0, 0, 46, 0, + 0, 0, 0, 0, 46, 0, 0, 46, 0, 46, + 46, 46, 0, 46, 0, 46, 46, 46, 0, 0, + 0, 46, 0, 46, 46, 46, 46, 0, 0, 0, + 0, 46, 0, 46, 0, 46, 0, 46, 0, 35, + 46, 0, 0, 0, 0, 0, 0, 46, 0, 0, + 46, 0, 46, 46, 0, 46, 46, 0, 46, 0, 0, 0, 0, 46, 0, 46, 46, 46, 46, 0, - 0, 46, 0, 46, 0, 0, 0, 46, 46, 0, - 46, 0, 46, 46, 0, 0, 194, 0, 0, 46, - 0, 46, 46, 46, 46, 0, 46, 0, 0, 0, + 0, 0, 0, 46, 0, 0, 46, 46, 46, 0, + 0, 0, 36, 0, 0, 0, 0, 0, 0, 46, + 0, 46, 46, 46, 46, 46, 46, 0, 0, 0, 0, 46, 0, 46, 46, 46, 46, 0, 0, 0, 0, 46, 0, 0, 0, 46, 46, 0, 46, 0, - 0, 0, 0, 448, 295, 0, 0, 46, 0, 46, - 46, 0, 46, 0, 46, 0, 0, 0, 0, 46, - 0, 46, 46, 46, 46, 0, 449, 0, 0, 46, - 0, 0, 0, 46, 0, 0, 46, 0, 0, 450, - 0, 0, 296, 451, 452, 46, 448, 0, 46, 453, - 46, 454, 455, 456, 457, 0, 0, 0, 0, 458, - 0, 0, 0, 459, 0, 0, 0, 0, 0, 449, - 0, 0, 0, 0, 46, 460, 46, 46, 461, 0, - 462, 0, 450, 0, 0, 0, 0, 452, 0, 0, - 0, 0, 453, 0, 454, 455, 456, 457, 0, 0, - 0, 0, 458, 0, 463, 0, 459, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, - 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, + 46, 46, 0, 0, 192, 0, 0, 46, 0, 46, + 46, 46, 46, 0, 46, 0, 0, 0, 0, 46, + 0, 46, 46, 46, 46, 0, 0, 0, 0, 46, + 0, 0, 0, 46, 46, 0, 46, 0, 46, 46, + 0, 46, 194, 46, 0, 46, 0, 46, 46, 0, + 46, 0, 46, 0, 0, 0, 0, 46, 0, 46, + 46, 46, 46, 0, 46, 0, 0, 46, 0, 0, + 0, 46, 0, 0, 46, 0, 0, 46, 0, 0, + 296, 448, 46, 46, 0, 0, 46, 46, 46, 46, + 46, 46, 46, 0, 0, 46, 0, 46, 0, 0, + 0, 46, 0, 0, 449, 0, 0, 0, 0, 0, + 0, 448, 46, 46, 46, 46, 46, 450, 46, 0, + 0, 451, 452, 0, 0, 0, 0, 453, 0, 454, + 455, 456, 457, 0, 449, 0, 0, 458, 0, 0, + 0, 459, 46, 0, 0, 0, 0, 450, 0, 0, + 0, 0, 452, 460, 0, 0, 461, 453, 462, 454, + 455, 456, 457, 0, 0, 0, 0, 458, 0, 0, + 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 463, 460, 0, 0, 461, 0, 462, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 463, + 0, 0, 463, }; protected static readonly short [] yyCheck = { 17, - 191, 298, 51, 17, 4, 68, 510, 20, 18, 299, - 6, 512, 189, 232, 20, 465, 188, 247, 351, 84, - 486, 336, 17, 17, 87, 88, 157, 318, 59, 92, - 297, 553, 59, 770, 288, 920, 295, 329, 1095, 351, - 47, 570, 737, 77, 58, 711, 234, 713, 113, 0, - 115, 256, 268, 1130, 1131, 73, 578, 256, 325, 77, - 256, 17, 256, 268, 256, 79, 1216, 81, 113, 256, - 115, 256, 925, 256, 87, 88, 256, 95, 17, 363, - 256, 17, 1232, 282, 335, 256, 256, 262, 256, 256, - 268, 757, 372, 256, 760, 108, 256, 256, 276, 17, - 1177, 349, 350, 256, 277, 256, 368, 17, 256, 172, - 87, 88, 256, 17, 256, 314, 264, 349, 350, 368, - 59, 371, 0, 298, 63, 268, 655, 17, 339, 320, - 256, 108, 17, 414, 418, 257, 366, 17, 21, 157, - 189, 408, 294, 157, 358, 339, 256, 428, 17, 429, - 344, 17, 346, 256, 306, 17, 367, 369, 352, 353, - 372, 352, 157, 157, 256, 376, 357, 429, 294, 52, - 420, 367, 343, 369, 256, 371, 363, 325, 429, 339, - 429, 429, 256, 232, 247, 363, 199, 200, 339, 369, - 363, 374, 0, 526, 256, 339, 259, 429, 1051, 256, - 344, 157, 346, 378, 379, 381, 422, 367, 352, 353, - 429, 381, 509, 714, 506, 548, 223, 422, 157, 418, - 391, 157, 199, 200, 420, 368, 418, 423, 381, 247, - 372, 418, 228, 418, 252, 429, 548, 570, 553, 157, - 418, 1391, 430, 414, 435, 418, 419, 157, 261, 1090, - 418, 418, 317, 157, 285, 418, 321, 428, 285, 418, - 323, 326, 372, 578, 295, 328, 418, 157, 1418, 372, - 288, 335, 157, 1010, 287, 293, 294, 157, 469, 422, - 1430, 326, 1432, 375, 261, 429, 299, 314, 157, 307, - 372, 157, 1176, 306, 312, 157, 314, 256, 372, 313, - 318, 358, 256, 366, 367, 367, 257, 257, 256, 256, - 287, 1195, 330, 331, 376, 256, 277, 983, 256, 372, - 281, 355, 655, 256, 363, 854, 325, 256, 1385, 306, - 1025, 372, 256, 256, 266, 348, 1073, 355, 351, 256, - 325, 336, 336, 676, 656, 371, 285, 373, 366, 367, + 17, 17, 191, 17, 4, 68, 510, 20, 6, 51, + 299, 298, 189, 18, 20, 512, 232, 247, 465, 336, + 553, 59, 318, 486, 87, 88, 188, 157, 288, 92, + 329, 84, 59, 297, 295, 711, 351, 713, 1095, 737, + 351, 268, 920, 770, 58, 578, 77, 1130, 1131, 0, + 570, 47, 256, 234, 113, 73, 115, 268, 256, 77, + 113, 325, 115, 256, 268, 79, 256, 81, 256, 256, + 256, 925, 256, 256, 87, 88, 779, 95, 256, 87, + 88, 757, 256, 256, 760, 59, 256, 256, 256, 256, + 256, 256, 256, 268, 1177, 108, 376, 277, 256, 256, + 108, 276, 17, 1420, 1421, 17, 264, 256, 370, 172, + 341, 256, 374, 357, 368, 257, 1216, 820, 821, 93, + 256, 305, 17, 97, 98, 99, 100, 101, 102, 103, + 104, 320, 1232, 398, 399, 655, 366, 17, 369, 157, + 157, 157, 386, 157, 408, 17, 282, 189, 17, 429, + 343, 339, 17, 256, 1090, 17, 344, 368, 346, 256, + 1477, 17, 17, 352, 352, 353, 339, 325, 357, 17, + 256, 344, 0, 346, 340, 429, 363, 17, 314, 352, + 353, 294, 372, 363, 247, 256, 199, 200, 363, 372, + 232, 199, 200, 306, 339, 422, 259, 1051, 391, 367, + 369, 369, 256, 371, 372, 375, 374, 506, 376, 256, + 367, 422, 369, 429, 371, 526, 381, 714, 422, 59, + 418, 414, 509, 63, 927, 374, 929, 223, 931, 247, + 228, 418, 418, 548, 252, 428, 553, 548, 418, 419, + 418, 429, 157, 418, 418, 157, 435, 285, 261, 430, + 418, 418, 420, 261, 418, 423, 429, 295, 285, 570, + 323, 578, 157, 420, 317, 328, 423, 326, 321, 372, + 288, 256, 418, 326, 287, 293, 294, 157, 0, 287, + 469, 367, 418, 1010, 381, 157, 299, 314, 157, 307, + 376, 1391, 157, 306, 312, 157, 314, 256, 306, 313, + 318, 157, 157, 366, 367, 418, 257, 983, 256, 157, + 381, 285, 330, 331, 1017, 369, 1019, 157, 1418, 336, + 336, 295, 256, 256, 355, 372, 300, 1025, 1385, 256, + 1430, 1200, 1432, 335, 262, 348, 856, 355, 351, 1200, + 348, 656, 335, 256, 655, 1176, 1073, 372, 366, 367, 413, 414, 415, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 256, 266, 418, 424, 425, 426, - 427, 348, 385, 386, 1451, 314, 429, 568, 256, 418, - 429, 342, 314, 1200, 885, 403, 369, 1272, 429, 580, - 439, 582, 895, 584, 368, 376, 372, 336, 864, 1283, - 413, 414, 340, 1287, 1481, 6, 339, 698, 385, 386, - 368, 370, 341, 314, 368, 374, 17, 256, 431, 418, - 374, 369, 485, 370, 487, 431, 1243, 374, 1312, 436, - 437, 372, 445, 418, 367, 442, 413, 414, 1104, 445, - 369, 256, 1200, 375, 368, 1111, 369, 510, 429, 257, - 374, 784, 369, 429, 684, 429, 647, 716, 59, 486, - 418, 339, 63, 526, 272, 479, 305, 530, 343, 277, - 1136, 363, 784, 281, 375, 666, 977, 363, 370, 343, - 372, 368, 374, 1324, 256, 1243, 87, 88, 296, 367, - 508, 368, 510, 371, 512, 373, 374, 375, 376, 1002, - 368, 1004, 269, 381, 305, 363, 569, 108, 522, 523, - 263, 1352, 1353, 526, 1355, 323, 391, 381, 536, 286, - 526, 854, 357, 541, 339, 1366, 418, 391, 1369, 344, - 256, 346, 418, 305, 342, 548, 1202, 352, 353, 414, - 368, 853, 429, 1384, 349, 350, 560, 486, 376, 363, - 414, 386, 429, 428, 851, 369, 157, 570, 553, 553, - 418, 429, 315, 372, 428, 374, 294, 1408, 59, 587, - 588, 1420, 1421, 636, 804, 638, 367, 372, 306, 374, - 371, 272, 339, 578, 578, 343, 878, 344, 263, 346, - 294, 372, 349, 350, 725, 352, 353, 363, 199, 200, - 376, 429, 93, 369, 418, 296, 97, 98, 99, 100, - 101, 102, 103, 104, 553, 882, 634, 374, 1140, 1200, - 429, 684, 640, 381, 429, 374, 394, 395, 1477, 420, - 920, 1200, 323, 391, 429, 369, 341, 418, 701, 578, - 315, 367, 655, 369, 339, 371, 372, 381, 374, 344, - 376, 346, 418, 357, 349, 350, 414, 352, 353, 363, - 261, 357, 1243, 676, 369, 369, 684, 416, 372, 373, - 428, 1137, 429, 369, 1243, 272, 372, 373, 368, 374, - 698, 677, 386, 748, 285, 716, 287, 272, 751, 980, - 386, 978, 418, 305, 420, 992, 714, 423, 299, 296, - 367, 719, 1200, 894, 391, 306, 369, 272, 1200, 376, - 373, 296, 277, 314, 418, 945, 281, 421, 368, 1006, - 783, 371, 381, 373, 374, 421, 323, 414, 418, 742, - 744, 296, 391, 1200, 429, 336, 799, 1200, 323, 367, - 374, 804, 392, 393, 762, 1243, 764, 348, 376, 414, - 351, 1243, 765, 873, 768, 414, 770, 820, 323, 306, - 423, 779, 412, 428, 884, 742, 313, 780, 371, 428, - 420, 784, 711, 423, 713, 367, 1243, 342, 325, 828, - 1243, 799, 416, 391, 385, 386, 804, 805, 765, 807, - 401, 1199, 1200, 1108, 285, 1290, 373, 376, 1095, 376, - 818, 819, 413, 780, 295, 381, 414, 1061, 1303, 300, - 1001, 1219, 413, 414, 376, 391, 256, 306, 757, 308, - 428, 760, 386, 836, 313, 1140, 889, 1322, 891, 269, - 836, 849, 370, 851, 897, 1243, 325, 1245, 414, 370, - 357, 854, 855, 374, 1098, 841, 286, 371, 866, 387, - 388, 1023, 418, 1303, 367, 873, 373, 1172, 1088, 357, - 923, 418, 428, 376, 368, 883, 374, 885, 376, 386, - 374, 428, 1373, 381, 418, 373, 339, 381, 855, 370, - 1134, 344, 945, 346, 379, 486, 349, 350, 386, 352, - 353, 382, 383, 384, 367, 306, 387, 388, 961, 367, - 354, 355, 313, 376, 357, 339, 384, 920, 376, 927, - 344, 929, 346, 931, 373, 349, 350, 376, 352, 353, - 373, 1254, 367, 398, 399, 526, 357, 945, 1261, 942, - 1149, 376, 363, 386, 1435, 367, 942, 950, 369, 354, - 355, 372, 373, 374, 376, 414, 415, 548, 1125, 382, - 383, 373, 553, 1207, 376, 386, 952, 370, 954, 977, - 956, 374, 980, 396, 397, 339, 429, 364, 365, 570, - 344, 1472, 346, 950, 400, 349, 350, 578, 352, 353, - 61, 371, 1272, 373, 65, 66, 67, 418, 69, 70, - 1494, 1495, 385, 74, 75, 429, 1010, 372, 373, 1017, - 81, 1019, 83, 1021, 85, 364, 365, 370, 371, 90, - 91, 374, 368, 389, 367, 371, 369, 373, 374, 371, - 367, 373, 349, 350, 371, 1088, 373, 374, 372, 376, - 374, 370, 1032, 114, 381, 374, 392, 393, 370, 390, - 392, 393, 374, 1061, 983, 370, 371, 370, 373, 374, - 375, 374, 389, 390, 655, 429, 412, 1075, 1076, 1073, - 412, 372, 369, 374, 420, 1083, 371, 423, 420, 418, - 1088, 423, 386, 387, 388, 676, 1125, 1095, 1127, 1089, - 1098, 374, 415, 376, 575, 367, 1277, 418, 1385, 371, - 256, 373, 374, 370, 376, 372, 374, 1115, 376, 381, - 1149, 372, 418, 374, 1122, 376, 370, 277, 372, 1300, - 711, 376, 713, 1108, 1108, 1128, 1134, 372, 367, 374, - 376, 376, 371, 1314, 373, 374, 367, 376, 1146, 1147, - 339, 1180, 381, 415, 370, 344, 372, 346, 374, 373, - 1331, 742, 1333, 352, 353, 1140, 1140, 370, 376, 372, - 1199, 1200, 370, 370, 372, 372, 757, 374, 294, 760, - 391, 392, 393, 394, 765, 1104, 415, 294, 1181, 1108, - 1219, 1189, 1111, 254, 1093, 1094, 257, 1172, 1172, 780, - 372, 381, 374, 784, 1247, 1198, 372, 1205, 374, 1207, - 370, 370, 372, 372, 1243, 376, 1245, 1136, 374, 343, - 376, 1140, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 374, 374, 376, 376, 297, 374, 372, 376, - 376, 1198, 418, 256, 414, 716, 395, 396, 369, 310, - 418, 418, 265, 1172, 267, 375, 0, 270, 372, 372, - 1253, 1254, 275, 1257, 376, 368, 279, 294, 1261, 374, - 372, 372, 294, 854, 855, 288, 1269, 1270, 374, 1272, - 372, 372, 295, 1202, 374, 1278, 372, 300, 376, 371, - 256, 304, 375, 374, 294, 294, 1253, 1290, 356, 1292, - 372, 381, 1295, 316, 374, 318, 373, 375, 374, 322, - 1303, 373, 1269, 1270, 1308, 372, 381, 330, 331, 418, - 256, 334, 374, 374, 337, 374, 376, 374, 423, 1322, - 372, 429, 367, 374, 1363, 1292, 93, 421, 1295, 920, - 97, 98, 99, 100, 101, 102, 103, 104, 372, 372, - 363, 1380, 373, 343, 374, 294, 294, 374, 418, 370, - 367, 371, 418, 375, 1393, 1394, 256, 256, 374, 950, - 256, 256, 381, 280, 256, 1373, 367, 1371, 372, 368, - 343, 376, 370, 376, 371, 423, 370, 1385, 374, 374, - 372, 1420, 1421, 376, 372, 372, 347, 351, 0, 367, - 381, 381, 983, 339, 1402, 418, 381, 256, 344, 256, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 481, 376, 372, 368, 347, 374, 370, 375, 370, 375, - 261, 372, 368, 367, 370, 370, 372, 1435, 374, 375, - 376, 0, 348, 368, 418, 374, 374, 418, 1477, 348, - 372, 1494, 1495, 284, 368, 339, 376, 375, 367, 367, - 381, 522, 367, 356, 368, 376, 297, 368, 371, 337, - 368, 302, 374, 368, 1472, 372, 307, 305, 309, 310, - 311, 312, 369, 371, 1478, 1479, 317, 418, 418, 367, - 321, 1485, 1486, 429, 325, 371, 1494, 1495, 371, 418, - 371, 418, 333, 418, 376, 336, 371, 338, 371, 373, - 367, 381, 371, 257, 381, 369, 371, 261, 374, 372, - 372, 256, 373, 1104, 374, 373, 418, 1108, 272, 374, - 1111, 362, 374, 277, 372, 376, 372, 281, 370, 418, - 284, 376, 376, 300, 418, 372, 376, 1128, 372, 418, - 367, 372, 296, 297, 368, 1136, 381, 301, 302, 1140, - 370, 381, 368, 307, 372, 309, 310, 311, 312, 315, - 263, 371, 329, 317, 371, 368, 372, 321, 372, 323, - 0, 0, 367, 372, 376, 368, 0, 418, 376, 333, - 368, 1172, 336, 372, 338, 372, 418, 370, 342, 367, - 1181, 376, 368, 368, 376, 372, 370, 367, 367, 0, - 368, 418, 367, 370, 418, 376, 372, 1198, 362, 368, - 372, 1202, 376, 376, 315, 382, 383, 384, 376, 372, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 368, 372, 368, 372, - 368, 263, 376, 50, 373, 257, 51, 12, 5, 261, - 376, 376, 376, 376, 376, 376, 376, 376, 942, 1088, - 272, 836, 1253, 1254, 1245, 277, 1219, 1388, 1088, 281, - 1261, 1425, 284, 1441, 676, 1376, 1405, 690, 1269, 1270, - 1371, 1272, 1278, 857, 296, 297, 853, 256, 1309, 301, - 302, 1290, 261, 262, 857, 307, 857, 309, 310, 311, - 312, 1292, 1486, 1243, 1295, 317, 1231, 1480, 1398, 321, - 1394, 323, 1479, 1180, 1393, 284, 1333, 1278, 828, 1181, - 878, 333, 366, 335, 336, 526, 338, 684, 297, 298, - 342, 804, 588, 302, 799, 992, 305, 719, 307, 506, - 309, 310, 311, 312, 71, 716, 332, 397, 317, 398, - 362, 399, 321, 400, 548, 401, 325, 369, 784, 402, - 1253, 1163, 1172, 1108, 333, 157, 1053, 336, 0, 338, - 339, 1076, 1006, 979, 963, 344, 1064, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 1066, 1137, - 421, 1147, 899, 362, 363, 1249, 834, 524, 367, 368, - -1, 370, 371, 372, 373, 374, 375, 376, 575, 378, - 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 833, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, -1, -1, 416, -1, 418, - -1, 420, -1, -1, 423, 256, 257, -1, -1, -1, - 429, -1, -1, 264, 265, 266, 267, 268, -1, 270, - 271, -1, 273, 274, 275, 276, 277, 278, 279, 280, - -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, - 291, 292, -1, -1, 295, -1, -1, 0, 299, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, - -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, -1, -1, - 371, -1, -1, -1, -1, 376, 377, 378, 379, 380, - -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, - -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 417, 418, 419, 420, - -1, 422, -1, -1, 256, 257, -1, -1, 429, -1, - -1, -1, 264, 265, 266, 267, 268, -1, 270, 271, - -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, - 0, -1, -1, 285, -1, 287, 288, 289, 290, 291, - 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 314, -1, 316, -1, 318, 319, -1, -1, - 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, - -1, 878, 344, 345, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, -1, -1, 371, - -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, - -1, -1, 384, 256, 386, -1, -1, -1, 261, 262, - 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, + 378, 379, 380, 381, 1195, 676, 256, 358, 1451, 256, + 298, 325, 385, 386, 1243, 256, 368, 385, 386, 568, + 1083, 368, 1243, 368, 897, 403, 325, 429, 1324, 374, + 887, 580, 256, 582, 1272, 584, 370, 439, 1481, 256, + 413, 414, 698, 866, 429, 413, 414, 305, 382, 383, + 384, 370, 1115, 387, 388, 374, 1352, 1353, 431, 1355, + 368, 256, 485, 363, 487, 431, 374, 429, 1104, 257, + 1366, 358, 445, 1369, 257, 1111, 369, 429, 372, 445, + 436, 437, 429, 1146, 272, 285, 442, 510, 1384, 277, + 378, 379, 1283, 281, 684, 716, 1287, 370, 647, 486, + 1136, 374, 266, 526, 418, 479, 363, 530, 296, 784, + 349, 350, 1408, 784, 314, 339, 363, 666, 418, 418, + 977, 1312, 372, 370, 341, 372, 1189, 374, 369, 1002, + 508, 1004, 510, 343, 512, 323, 336, 424, 425, 426, + 427, 369, 1205, 367, 339, 266, 569, 277, 522, 523, + 314, 281, 369, 526, 342, 368, 349, 350, 536, 305, + 526, 418, 368, 541, 21, 263, 1202, 357, 349, 350, + 376, 418, 367, 372, 256, 548, 553, 553, 376, 369, + 855, 391, 372, 373, 343, 856, 560, 256, 372, 294, + 429, 363, 372, 314, 372, 52, 386, 570, 368, 370, + 306, 578, 578, 374, 414, 343, 853, 313, 363, 587, + 588, 375, 342, 636, 804, 638, 429, 315, 428, 368, + 61, 880, 381, 429, 65, 66, 67, 263, 69, 70, + 429, 421, 391, 74, 75, 725, 429, 368, 418, 376, + 81, 575, 83, 381, 85, 429, 418, 1140, 429, 90, + 91, 429, 357, 391, 375, 414, 634, 339, 363, 429, + 884, 684, 640, 418, 369, 368, 1200, 372, 373, 428, + 339, 920, 372, 114, 374, 344, 414, 346, 701, 315, + 429, 386, 655, 352, 353, 367, 486, 418, 272, 371, + 428, 373, 374, 375, 376, 372, 363, 374, 374, 381, + 1200, 371, 369, 676, 256, 1200, 684, 371, 261, 1243, + 272, 363, 296, 418, 1137, 418, 421, 369, 716, 677, + 698, 369, 272, 256, 980, 373, 367, 418, 751, 429, + 371, 284, 394, 395, 296, 748, 714, 428, 376, 323, + 416, 719, 294, 1243, 297, 992, 296, 896, 1243, 302, + 420, 418, 429, 553, 307, 945, 309, 310, 311, 312, + 783, 323, 315, 1200, 317, 339, 418, 367, 321, 742, + 744, 1200, 305, 323, 742, 423, 799, 381, 578, 420, + 333, 804, 716, 336, 762, 338, 764, 391, 1199, 1200, + 1200, 1290, 765, 367, 768, 374, 770, 765, 371, 822, + 373, 779, 376, 414, 1303, 269, 1243, 780, 1219, 362, + 414, 784, 780, 254, 1243, 368, 257, 428, 978, 392, + 393, 799, 286, 1322, 428, 256, 804, 805, 830, 807, + 391, 1108, 1243, 1243, 1245, 272, 256, 416, 269, 412, + 277, 1061, 820, 821, 281, 357, 1006, 420, 1095, 367, + 423, 363, 1001, 414, 381, 286, 297, 369, 376, 296, + 372, 373, 374, 1140, 391, 838, 371, 428, 891, 310, + 893, 875, 838, 851, 386, 853, 899, 414, 1098, 386, + 391, 401, 886, 856, 857, 843, 323, 414, 357, 857, + 868, 428, 357, 413, 357, 1172, 1303, 875, 1088, 418, + 923, 1023, 418, 414, 373, 342, 418, 885, 373, 887, + 373, 711, 428, 713, 1134, 389, 1373, 386, 306, 339, + 308, 386, 945, 386, 344, 313, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 325, 961, 306, + 373, 370, 371, 376, 370, 374, 313, 920, 368, 927, + 370, 929, 372, 931, 374, 375, 376, 757, 325, 384, + 760, 387, 388, 294, 371, 385, 373, 945, 6, 942, + 390, 382, 383, 1149, 379, 306, 942, 950, 1435, 17, + 400, 401, 950, 1254, 385, 396, 397, 1207, 1125, 369, + 1261, 368, 373, 413, 952, 376, 954, 374, 956, 977, + 339, 381, 980, 367, 381, 344, 400, 346, 367, 429, + 349, 350, 376, 352, 353, 1472, 390, 376, 370, 367, + 367, 59, 374, 1272, 371, 63, 373, 374, 376, 376, + 1494, 1495, 369, 367, 381, 374, 1010, 415, 367, 1017, + 481, 1019, 376, 1021, 370, 367, 339, 376, 374, 87, + 88, 344, 256, 346, 376, 373, 349, 350, 376, 352, + 353, 265, 374, 267, 376, 1088, 270, 418, 415, 381, + 108, 275, 1032, 367, 372, 279, 374, 371, 376, 373, + 374, 522, 376, 1061, 288, 370, 367, 381, 369, 374, + 429, 295, 391, 392, 393, 394, 300, 1075, 1076, 1073, + 304, 369, 367, 418, 372, 1083, 371, 371, 373, 374, + 1088, 376, 316, 371, 318, 373, 381, 1095, 322, 157, + 1098, 415, 256, 1125, 1089, 1127, 330, 331, 1277, 418, + 334, 1108, 1108, 337, 414, 415, 429, 1115, 1385, 372, + 372, 374, 374, 376, 1122, 370, 371, 1149, 373, 374, + 375, 1300, 372, 339, 374, 1128, 1134, 277, 344, 363, + 346, 199, 200, 1140, 1140, 1314, 352, 353, 1146, 1147, + 370, 370, 372, 372, 374, 374, 367, 374, 1180, 376, + 339, 376, 1331, 983, 1333, 344, 370, 346, 372, 376, + 349, 350, 373, 352, 353, 1172, 1172, 1199, 1200, 339, + 376, 386, 387, 388, 344, 374, 346, 376, 1181, 349, + 350, 1189, 352, 353, 418, 374, 370, 1219, 372, 370, + 370, 372, 372, 261, 1247, 1198, 372, 1205, 374, 1207, + 1198, 372, 370, 374, 372, 370, 0, 372, 374, 376, + 376, 1243, 374, 1245, 376, 354, 355, 285, 93, 287, + 354, 355, 97, 98, 99, 100, 101, 102, 103, 104, + 374, 299, 376, 374, 339, 376, 364, 365, 306, 344, + 429, 346, 349, 350, 349, 350, 314, 352, 353, 294, + 1253, 1254, 294, 1257, 343, 1253, 372, 373, 1261, 429, + 364, 365, 1093, 1094, 389, 390, 1269, 1270, 336, 1272, + 372, 1269, 1270, 376, 1104, 1278, 395, 396, 1108, 261, + 348, 1111, 414, 351, 369, 418, 372, 1290, 418, 1292, + 368, 418, 1295, 375, 1292, 372, 376, 1295, 374, 372, + 1303, 372, 284, 294, 1308, 294, 1136, 374, 372, 372, + 1140, 372, 374, 371, 256, 297, 256, 385, 386, 1322, + 302, 376, 374, 294, 429, 307, 375, 309, 310, 311, + 312, 1363, 294, 315, 381, 317, 356, 372, 374, 321, + 373, 375, 1172, 374, 373, 413, 414, 372, 1380, 418, + 374, 333, 374, 381, 336, 0, 338, 374, 376, 374, + 372, 1393, 1394, 429, 423, 1373, 374, 1371, 367, 372, + 421, 373, 1202, 343, 372, 294, 294, 1385, 374, 374, + 362, 418, 370, 367, 371, 375, 368, 369, 1420, 1421, + 256, 418, 256, 374, 1402, 256, 256, 280, 381, 339, + 256, 367, 343, 368, 344, 372, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 376, 486, 370, + 376, 371, 374, 376, 370, 300, 374, 1435, 368, 372, + 370, 423, 372, 372, 374, 375, 376, 372, 347, 351, + 367, 1494, 1495, 381, 381, 1477, 368, 381, 256, 371, + 390, 373, 374, 256, 329, 372, 376, 368, 526, 347, + 400, 401, 256, 370, 1472, 375, 374, 370, 262, 375, + 392, 393, 367, 413, 1478, 1479, 370, 348, 368, 372, + 548, 1485, 1486, 374, 339, 553, 1494, 1495, 418, 429, + 412, 372, 374, 418, 348, 370, 376, 375, 420, 368, + 367, 423, 570, 368, 298, 367, 356, 382, 383, 384, + 578, 381, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 367, 376, + 371, 374, 368, 368, 372, 368, 337, 305, 369, 418, + 0, 418, 418, 371, 371, 339, 418, 367, 371, 371, + 344, 376, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 371, 418, 381, 373, 367, 363, + 381, 371, 369, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 371, 378, 379, 371, 655, 382, 383, + 384, 385, 386, 372, 372, 389, 390, 374, 373, 373, + 394, 395, 396, 397, 398, 399, 400, 401, 676, 374, + 374, 256, 256, 374, 418, 372, 261, 262, 376, 413, + 372, 370, 416, 418, 418, 376, 420, 418, 376, 423, + 372, 506, 0, 376, 418, 429, 372, 381, 367, 284, + 372, 368, 381, 711, 370, 713, 368, 372, 315, 263, + 371, 371, 297, 298, 368, 372, 372, 302, 0, 0, + 305, 367, 307, 376, 309, 310, 311, 312, 368, 372, + 0, 376, 317, 368, 742, 372, 321, 418, 372, 370, + 325, 367, 372, 376, 368, 368, 367, 376, 333, 757, + 370, 336, 760, 338, 339, 418, 368, 765, 376, 344, + 575, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 780, 372, 418, 376, 784, 362, 363, 376, + 372, 376, 367, 368, 372, 370, 371, 372, 373, 374, + 375, 376, 368, 378, 379, 368, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 367, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 372, + 368, 416, 372, 418, 368, 420, 367, 376, 423, 376, + 373, 376, 315, 263, 429, 0, 376, 376, 856, 857, + 376, 376, 376, 376, 50, 12, 256, 257, 51, 5, + 942, 1088, 1088, 1245, 264, 265, 266, 267, 268, 1425, + 270, 271, 838, 273, 274, 275, 276, 277, 278, 279, + 280, 1219, 1388, 1441, 676, 285, 1405, 287, 288, 289, + 290, 291, 292, 1376, 1278, 295, 859, 1371, 859, 299, + 300, 690, 302, 303, 304, 859, 855, 1290, 1486, 1309, + 1243, 1231, 920, 1480, 314, 1394, 316, 1393, 318, 319, + 1398, 1333, 322, 1180, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 1278, 337, 1479, 526, + 340, 341, 950, 830, 344, 345, 880, 719, 256, 1181, + 804, 366, 588, 992, 262, 799, 71, 684, 716, 359, + 360, 361, 362, 363, 332, 397, 399, 367, 368, 398, + 400, 371, 1163, 401, 548, 983, 376, 377, 378, 379, + 380, 402, 368, 1253, 384, 371, 386, 373, 374, 1172, + 298, 1108, 392, 393, 157, 979, 784, 1066, 1053, 1076, + 1064, 0, 1137, 524, 963, 421, 392, 393, 1249, 1006, + 1147, 836, 901, -1, -1, -1, -1, 417, 418, 419, + 420, 835, 422, -1, -1, -1, 412, -1, -1, 429, + -1, 339, -1, -1, 420, -1, 344, 423, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, 363, -1, -1, -1, 367, + 368, -1, 370, 371, 372, 880, 374, 375, 376, -1, + 378, 379, -1, -1, 382, 383, 384, 385, -1, -1, + -1, 389, 390, -1, -1, -1, 394, 395, 396, 397, + 398, 399, 400, 401, -1, -1, 1104, -1, -1, -1, + 1108, -1, 257, 1111, -1, 413, 261, -1, 416, -1, + 418, -1, -1, -1, -1, -1, -1, 272, -1, -1, + 1128, 429, 277, -1, -1, -1, 281, 0, 1136, 284, + -1, -1, 1140, -1, -1, -1, 256, -1, -1, -1, + -1, 296, 297, -1, -1, -1, 301, 302, -1, -1, + -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, 1172, -1, 321, -1, 323, -1, + -1, -1, -1, 1181, 381, -1, -1, -1, 333, -1, + 335, 336, -1, 338, -1, -1, -1, 342, -1, -1, + 1198, -1, -1, -1, 1202, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 362, -1, -1, + -1, -1, -1, 368, 369, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, -1, -1, -1, 1253, 1254, -1, 368, -1, + 370, -1, 372, 1261, 374, 375, 376, 256, 257, -1, + -1, 1269, 1270, -1, 1272, 264, 265, 266, 267, 268, + 390, 270, 271, 0, 273, 274, 275, 276, 277, 278, + 279, -1, -1, -1, 1292, -1, 285, 1295, 287, 288, + 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, + 299, 300, -1, 302, 303, 304, -1, -1, -1, 429, + -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, + 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, + -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 0, 284, -1, -1, -1, 417, 418, 419, 420, -1, - 422, -1, -1, -1, 297, 298, -1, 429, -1, 302, - -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, + 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, + -1, -1, 371, -1, -1, -1, -1, 376, 377, 378, + 379, 380, -1, 256, -1, 384, -1, 386, 261, 262, + -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, + -1, 284, -1, -1, -1, -1, -1, -1, 417, 418, + 419, 420, -1, 422, 297, 298, -1, -1, -1, 302, + 429, -1, 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, -1, -1, -1, @@ -11273,218 +11264,205 @@ void case_962() 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, -1, -1, 382, 383, 384, 385, 386, -1, -1, 389, 390, -1, -1, - -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, - -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 413, 261, 262, 416, -1, 418, -1, 420, -1, -1, - 423, -1, -1, -1, -1, -1, 429, 0, -1, -1, - -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 297, 298, -1, - -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, - -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, -1, 374, 375, 376, -1, 378, 379, - -1, 0, 382, 383, 384, 385, 256, -1, -1, 389, - 390, 261, 262, -1, 394, 395, 396, 397, 398, 399, - 400, 401, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 413, 284, -1, 416, -1, 418, -1, - 420, -1, -1, 423, -1, -1, -1, 297, 298, 429, - -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, - -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, -1, 374, 375, 376, -1, 378, 379, - -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, - 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, - 400, 401, -1, 256, 0, -1, -1, -1, 261, 262, - -1, -1, -1, 413, -1, -1, 416, -1, 418, -1, - 420, -1, -1, 423, -1, -1, -1, -1, -1, 429, - -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 297, 298, -1, -1, -1, 302, - -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, - -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, - -1, -1, 325, -1, -1, -1, -1, -1, -1, -1, - 333, -1, -1, 336, -1, 338, 339, -1, -1, -1, - -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, 256, -1, 362, - 363, -1, -1, 262, 367, 368, -1, 370, 371, 372, - -1, 374, 375, 376, -1, 378, 379, -1, -1, 382, - 383, 384, 385, -1, -1, -1, 389, 390, -1, -1, - -1, 394, 395, 396, 397, 398, 399, 400, 401, 298, + -1, 394, 395, 396, 397, 398, 399, 400, 401, 256, + -1, -1, -1, 0, 261, 262, -1, -1, -1, -1, + 413, -1, -1, 416, -1, 418, -1, 420, -1, -1, + 423, -1, -1, -1, -1, -1, 429, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 413, -1, 0, 416, -1, 418, -1, 256, -1, -1, - -1, -1, -1, 262, -1, -1, 429, -1, -1, -1, + 297, 298, -1, -1, -1, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 339, -1, -1, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, -1, -1, 362, 363, -1, -1, -1, + 367, 368, 369, 370, 371, 372, -1, 374, 375, 376, + -1, 378, 379, -1, -1, 382, 383, 384, 385, 256, + -1, -1, 389, 390, 261, 262, -1, 394, 395, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 413, 284, -1, 416, + -1, 418, -1, 420, -1, -1, 423, -1, 0, -1, + 297, 298, 429, -1, -1, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 339, -1, -1, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, -1, -1, 362, 363, -1, -1, -1, + 367, 368, 369, 370, 371, 372, -1, 374, 375, 376, + -1, 378, 379, -1, -1, 382, 383, 384, 385, 256, + -1, -1, 389, 390, 261, 262, -1, 394, 395, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, -1, 413, 284, -1, 416, + -1, 418, -1, 420, -1, -1, 423, -1, -1, -1, + 297, 298, 429, -1, -1, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 339, -1, 0, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, -1, -1, 362, 363, -1, -1, -1, + 367, 368, -1, 370, 371, 372, -1, 374, 375, 376, + -1, 378, 379, -1, -1, 382, 383, 384, 385, -1, + -1, 0, 389, 390, -1, -1, -1, 394, 395, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 413, -1, -1, 416, + -1, 418, -1, -1, -1, 257, -1, -1, -1, 261, + -1, 263, 429, 265, -1, 267, -1, -1, 270, -1, + 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, + 282, 283, 284, -1, 0, 287, 288, -1, -1, -1, + -1, 293, 294, 295, 296, 297, -1, -1, 300, 301, + 302, -1, 304, -1, 306, 307, 308, 309, 310, 311, + 312, 313, -1, 315, 316, 317, 318, -1, -1, 321, + 322, 323, -1, 325, -1, -1, -1, 0, 330, 331, + -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 298, - -1, -1, -1, -1, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, -1, 378, - 379, -1, -1, 382, 383, 384, 385, 386, -1, -1, - 389, 390, -1, -1, -1, 394, 395, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, -1, -1, - 256, -1, -1, -1, 413, -1, 262, 416, -1, 418, - -1, 420, -1, -1, 423, 0, -1, -1, -1, 368, - 429, -1, 371, -1, 373, 374, -1, -1, -1, 378, - 379, -1, -1, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 298, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 412, 413, -1, -1, -1, -1, -1, - -1, 420, -1, -1, 423, -1, -1, -1, 0, -1, - 429, -1, -1, 339, -1, -1, -1, -1, 344, -1, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, -1, -1, 363, -1, -1, - -1, 367, 368, -1, 370, 371, 372, -1, 374, 375, - 376, -1, 378, 379, -1, -1, 382, 383, 384, 385, - -1, -1, -1, 389, 390, -1, -1, -1, 394, 395, - 396, 397, 398, 399, 400, 401, -1, 0, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 413, -1, 257, - 416, -1, 418, 261, -1, 263, -1, 265, -1, 267, - -1, -1, 270, 429, 272, 273, -1, 275, -1, 277, - -1, 279, -1, 281, 282, 283, 284, -1, -1, 287, - 288, -1, -1, -1, -1, 293, 294, 295, 296, 297, - -1, -1, 300, 301, 302, -1, 304, -1, 306, 307, - 308, 309, 310, 311, 312, 313, 0, 315, 316, 317, - 318, -1, -1, 321, 322, 323, -1, 325, -1, -1, - -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, - 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, + 362, -1, 364, 365, -1, -1, -1, 256, 257, -1, + 0, -1, 261, -1, -1, 377, 265, -1, 267, -1, + -1, 270, -1, 272, 273, -1, 275, -1, 277, -1, + 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, + -1, -1, -1, -1, 293, -1, 295, 296, 297, -1, + -1, 300, 301, 302, -1, 304, 418, -1, 307, -1, + 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, + -1, 257, 321, 322, 323, 261, -1, 0, -1, -1, + -1, 330, 331, -1, 333, 334, 272, 336, 337, 338, + -1, 277, -1, 342, -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 362, -1, 364, 365, -1, -1, - -1, 256, 257, -1, -1, -1, 261, -1, -1, 377, - 265, -1, 267, -1, -1, 270, -1, 272, 273, -1, - 275, -1, 277, -1, 279, -1, 281, 282, 283, 284, - -1, -1, 287, 288, -1, 0, -1, -1, 293, -1, - 295, 296, 297, -1, -1, 300, 301, 302, -1, 304, - 418, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, 316, 317, 318, -1, 257, 321, 322, 323, 261, - -1, -1, -1, -1, -1, 330, 331, -1, 333, 334, - 272, 336, 337, 338, -1, 277, -1, 342, -1, 281, - -1, -1, 284, -1, -1, -1, -1, -1, 0, -1, - -1, -1, -1, -1, 296, 297, -1, 362, -1, 301, - 302, -1, -1, 368, 369, 307, -1, 309, 310, 311, - 312, -1, 377, -1, -1, 317, -1, -1, -1, 321, - -1, 323, -1, -1, 257, -1, -1, -1, 261, -1, - -1, 333, -1, 335, 336, 0, 338, -1, -1, 272, - 342, -1, -1, -1, 277, -1, -1, -1, 281, -1, - -1, 284, -1, 418, -1, -1, -1, -1, -1, -1, - 362, -1, -1, 296, 297, -1, 368, 369, 301, 302, - -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 0, -1, 317, -1, -1, -1, 321, -1, - 323, -1, -1, 257, -1, -1, -1, 261, -1, -1, - 333, -1, -1, 336, -1, 338, -1, -1, 272, 342, - -1, -1, -1, 277, -1, -1, -1, 281, -1, -1, - 284, -1, -1, -1, -1, -1, -1, -1, -1, 362, - -1, -1, 296, 297, -1, 368, 369, 301, 302, 261, - -1, 263, -1, 307, -1, 309, 310, 311, 312, 0, - -1, -1, -1, 317, -1, -1, -1, 321, -1, 323, - -1, -1, 284, -1, -1, -1, -1, -1, -1, 333, - -1, -1, 336, -1, 338, 297, -1, -1, 342, -1, - 302, -1, 257, -1, -1, 307, 261, 309, 310, 311, - 312, -1, -1, 315, -1, 317, -1, 272, 362, 321, - -1, -1, 277, -1, 368, 369, 281, -1, -1, 284, - -1, 333, -1, -1, 336, -1, 338, -1, -1, -1, - -1, 296, 297, -1, -1, -1, 301, 302, -1, -1, - -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - 362, -1, 317, -1, -1, 257, 321, -1, 323, 261, - -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, - 272, 336, -1, 338, -1, 277, -1, 342, -1, 281, - -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 296, 297, -1, 362, -1, 301, - 302, -1, 257, -1, 369, 307, 261, 309, 310, 311, - 312, -1, -1, -1, -1, 317, -1, 272, -1, 321, - -1, 323, 277, -1, -1, -1, 281, -1, -1, 284, - -1, 333, -1, -1, 336, -1, 338, -1, -1, -1, - 342, 296, 297, -1, -1, -1, 301, 302, -1, 257, - -1, -1, 307, 261, 309, 310, 311, 312, -1, -1, - 362, -1, 317, -1, 272, -1, 321, -1, 323, 277, - -1, -1, -1, 281, -1, -1, 284, -1, 333, -1, - -1, 336, -1, 338, -1, -1, -1, 342, 296, 297, - -1, -1, -1, 301, 302, -1, -1, -1, -1, 307, - -1, 309, 310, 311, 312, -1, -1, 362, -1, 317, - -1, -1, -1, 321, -1, 323, 257, -1, -1, -1, - 261, -1, -1, -1, -1, 333, -1, -1, 336, -1, - 338, 272, -1, -1, 342, -1, 277, -1, -1, -1, - 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 362, 296, 297, -1, -1, -1, - 301, 302, -1, -1, -1, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, - 321, -1, 323, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 333, -1, 256, 336, -1, 338, -1, -1, - -1, 342, 264, 265, 266, 267, -1, -1, 270, 271, - -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, - -1, 362, -1, 285, -1, 287, 288, 289, 290, 291, - 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 314, -1, 316, -1, 318, 319, -1, -1, - 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, - -1, 256, 344, 345, -1, -1, -1, 262, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, - -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, - -1, -1, 384, 298, 386, -1, -1, -1, -1, -1, - 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, + 296, 297, -1, 362, -1, 301, 302, -1, 257, 368, + 369, 307, 261, 309, 310, 311, 312, -1, 377, -1, + -1, 317, -1, 272, -1, 321, -1, 323, 277, -1, + 0, -1, 281, -1, -1, 284, -1, 333, -1, 335, + 336, -1, 338, -1, -1, -1, 342, 296, 297, -1, + -1, -1, 301, 302, -1, -1, -1, -1, 307, 418, + 309, 310, 311, 312, -1, -1, 362, -1, 317, -1, + -1, 257, 321, 369, 323, 261, -1, 0, -1, -1, + -1, -1, -1, -1, 333, -1, 272, 336, -1, 338, + -1, 277, -1, 342, -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 417, 418, 419, 420, -1, - -1, -1, -1, 285, 339, -1, -1, 429, -1, 344, + 296, 297, -1, 362, 257, 301, 302, -1, 261, 368, + 369, 307, -1, 309, 310, 311, 312, -1, -1, 272, + -1, 317, -1, -1, 277, 321, -1, 323, 281, -1, + 0, 284, -1, -1, -1, -1, -1, 333, -1, -1, + 336, -1, 338, 296, 297, -1, 342, 257, 301, 302, + -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, 272, -1, 317, -1, 362, 277, 321, -1, + 323, 281, 368, 369, 284, -1, -1, -1, -1, -1, + 333, -1, -1, 336, -1, 338, 296, 297, -1, 342, + -1, 301, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, 362, + -1, 321, -1, 323, 257, -1, 369, -1, 261, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, 272, + -1, -1, 342, -1, 277, -1, -1, -1, 281, -1, + -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 362, 296, 297, -1, -1, -1, 301, 302, + -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, -1, 257, 321, -1, + 323, 261, -1, -1, -1, -1, -1, -1, -1, -1, + 333, -1, 272, 336, -1, 338, -1, 277, -1, 342, + -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 296, 297, -1, 362, + -1, 301, 302, -1, 257, -1, -1, 307, 261, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, 272, + -1, 321, -1, 323, 277, -1, -1, -1, 281, -1, + -1, 284, -1, 333, -1, -1, 336, -1, 338, -1, + -1, -1, 342, 296, 297, -1, -1, -1, 301, 302, + -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, 362, -1, 317, -1, -1, 257, 321, -1, + 323, 261, -1, -1, -1, -1, -1, -1, -1, -1, + 333, -1, 272, 336, -1, 338, -1, 277, -1, 342, + -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 296, 297, -1, 362, + -1, 301, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, 323, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 333, -1, 256, 336, -1, 338, -1, + -1, -1, 342, 264, 265, 266, 267, -1, -1, 270, + 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, + -1, -1, 362, -1, 285, -1, 287, 288, 289, 290, + 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, + -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, + 341, -1, 256, 344, 345, -1, -1, -1, 262, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, + 371, -1, -1, -1, -1, 376, 377, 378, 379, 380, + -1, -1, -1, 384, 298, 386, -1, -1, -1, -1, + -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + -1, -1, -1, -1, 262, -1, 417, 418, 419, 420, + -1, -1, -1, -1, -1, 339, -1, -1, 429, -1, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, -1, -1, -1, -1, 363, + 298, -1, -1, -1, 368, 369, 370, 371, 372, 373, + 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + -1, 256, -1, -1, 418, -1, 420, 262, -1, 423, + -1, -1, -1, -1, -1, 429, -1, -1, -1, -1, + 368, -1, -1, 371, -1, 373, 374, -1, -1, -1, + 378, 379, -1, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 298, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 412, 413, -1, -1, -1, -1, + -1, -1, 420, -1, -1, 423, -1, -1, -1, -1, + -1, 429, -1, 285, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, -1, -1, -1, -1, 363, -1, - -1, -1, -1, 368, 369, 370, 371, 372, 373, 374, + 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 256, 378, 379, 327, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, - 256, -1, -1, 418, -1, 420, 262, -1, 423, -1, + 256, -1, -1, -1, -1, 420, 262, -1, -1, -1, -1, -1, -1, -1, 429, 377, 378, 379, 380, -1, 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, 396, 397, 398, 399, -1, -1, -1, -1, 298, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + -1, 256, -1, -1, 368, -1, 370, 262, 372, -1, 374, 375, 376, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + -1, 367, 368, 298, 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 429, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, 256, - 256, -1, -1, -1, 420, 262, -1, -1, -1, 265, - -1, 267, -1, 429, 270, -1, -1, -1, -1, 275, - -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, - -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, - -1, 298, -1, -1, 300, -1, -1, -1, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 316, -1, 318, -1, -1, -1, 322, -1, -1, -1, - 256, -1, -1, -1, 330, 331, 262, -1, 334, -1, - -1, 337, 339, -1, -1, -1, -1, 344, -1, 346, + -1, -1, -1, -1, 420, 262, -1, 423, -1, -1, + -1, -1, -1, 429, -1, -1, -1, -1, 363, -1, + -1, -1, -1, 368, 369, -1, 371, 372, 373, 374, + -1, 376, -1, 378, 379, -1, 381, 382, 383, 384, + 385, 298, 387, 388, 389, 390, -1, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, + -1, -1, -1, 418, -1, 420, -1, -1, 423, -1, + -1, -1, 339, -1, 429, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 367, 368, 298, 370, 371, 372, 373, 374, 375, 376, - -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, + -1, 368, -1, 370, 371, 372, 373, 374, 375, 376, + 256, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, 256, -1, - -1, -1, 418, 420, 262, -1, 423, -1, -1, -1, - -1, -1, 429, -1, -1, -1, -1, 363, -1, -1, - -1, -1, 368, 369, -1, 371, 372, 373, 374, -1, - 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, - 298, 387, 388, 389, 390, -1, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, -1, -1, - -1, -1, 418, -1, 420, -1, -1, 423, -1, -1, - -1, 339, -1, 429, -1, -1, 344, -1, 346, 347, + -1, -1, -1, 420, 262, -1, 423, -1, -1, -1, + -1, -1, 429, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 298, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, + 388, 389, 390, 429, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, 256, 256, -1, -1, -1, 420, 262, -1, 423, -1, 265, -1, 267, @@ -11502,356 +11480,356 @@ void case_962() 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, -1, 256, 256, -1, -1, - 418, 420, 262, -1, 423, -1, 265, -1, 267, -1, - 429, 270, -1, -1, -1, -1, 275, -1, -1, -1, - 279, -1, -1, -1, -1, -1, -1, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, 298, -1, - -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, - -1, 330, 331, -1, -1, 334, -1, -1, 337, 339, + 409, 410, 411, 412, 413, -1, 256, -1, 261, -1, + 418, 420, 262, -1, 423, -1, -1, -1, -1, -1, + 429, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 297, -1, -1, -1, 298, 302, + -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, + -1, 256, 325, -1, -1, -1, -1, 262, -1, -1, + 333, 266, -1, 336, -1, 338, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 368, -1, - 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + 350, 351, 352, 353, 354, 355, 356, -1, -1, 362, + -1, -1, -1, 298, -1, -1, -1, -1, 368, -1, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 314, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, -1, 256, -1, 261, -1, 418, - 420, 262, -1, 423, -1, -1, -1, -1, -1, 429, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 297, -1, -1, -1, 298, 302, -1, - -1, 305, -1, 307, -1, 309, 310, 311, 312, -1, - -1, -1, -1, 317, -1, -1, -1, 321, -1, -1, - 256, 325, -1, -1, -1, -1, 262, -1, -1, 333, - 266, -1, 336, -1, 338, -1, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, 362, -1, - -1, -1, 298, -1, -1, -1, -1, 368, -1, 370, - 371, 372, 373, 374, 375, 376, -1, 378, 314, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 256, 418, -1, -1, -1, -1, 420, - -1, 357, 423, -1, -1, -1, -1, 363, 429, -1, - -1, -1, 368, 369, 370, 371, 372, 373, 374, 375, + 410, 411, 412, 413, -1, 418, -1, -1, -1, -1, + 420, -1, 357, 423, -1, -1, -1, -1, 363, 429, + -1, -1, -1, 368, 369, 370, 371, 372, 373, 374, + 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, + 256, -1, 256, 418, -1, 420, 262, -1, 423, -1, + 264, 265, -1, 267, 429, -1, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, + -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, + -1, 295, 298, -1, -1, -1, 300, -1, 302, 303, + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, + 334, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 359, 360, 361, 362, -1, + -1, -1, 368, -1, 370, -1, 372, 371, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, + 386, 387, 388, 389, 390, 261, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, -1, 256, - -1, -1, 418, -1, 420, 262, -1, 423, -1, -1, - -1, -1, -1, 429, -1, -1, 339, -1, -1, -1, - -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, - -1, 298, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 390, -1, -1, + 406, 407, 408, 409, 410, 411, 256, 413, 284, -1, + -1, -1, 262, 417, 418, -1, -1, -1, -1, -1, + -1, 297, -1, 429, -1, -1, 302, -1, -1, 305, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, -1, -1, 321, -1, -1, 298, 325, + -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, + 336, -1, 338, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, -1, -1, -1, -1, -1, + 262, -1, -1, -1, -1, -1, 362, -1, -1, 339, + -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 298, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, + -1, -1, 382, 383, 384, 385, 386, 387, 388, 389, + 390, -1, 418, -1, 394, 395, 396, 397, 398, 399, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, 256, 429, + -1, -1, -1, -1, 262, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, 378, 379, -1, -1, + 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, + -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, + 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 413, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 256, 429, -1, -1, + -1, -1, 262, -1, -1, -1, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 298, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + 378, 379, -1, -1, 382, 383, 384, 385, -1, -1, + -1, 389, 390, -1, -1, -1, 394, 395, 396, 397, + 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + 256, 429, -1, -1, -1, -1, 262, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, + -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, + 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, + 400, 401, 298, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 413, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, 429, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, -1, -1, 429, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 261, -1, -1, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 256, 413, 284, -1, -1, - -1, 262, -1, -1, -1, -1, -1, -1, -1, -1, - 297, -1, 429, -1, -1, 302, -1, -1, 305, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, -1, -1, 298, 325, -1, - -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, - -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, -1, -1, 262, - -1, -1, -1, -1, -1, 362, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 298, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, - -1, 382, 383, 384, 385, 386, 387, 388, 389, 390, - -1, 418, -1, 394, 395, 396, 397, 398, 399, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, 256, 429, -1, - -1, -1, -1, 262, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, 378, 379, -1, -1, 382, - 383, 384, 385, -1, -1, -1, 389, 390, -1, -1, - -1, 394, 395, 396, 397, 398, 399, 400, 401, 298, + -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, 378, 379, -1, -1, 382, 383, 384, 385, + -1, -1, -1, 389, 390, -1, 256, -1, 394, 395, + 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, + -1, 389, 390, -1, 256, -1, 394, 395, 396, 397, + 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, + -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, + 390, -1, 256, -1, 394, 395, 396, 397, 398, 399, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, + 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, 394, 395, 396, 397, 398, 399, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, -1, 382, 383, + 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, + -1, -1, 396, 397, 398, 399, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, 382, 383, 384, 385, + -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, + 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, + -1, 389, 390, -1, 256, -1, -1, -1, 396, 397, + 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, + -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, + 390, -1, 256, -1, -1, -1, 396, 397, 398, 399, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, + 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, -1, -1, 396, 397, 398, 399, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, + -1, -1, -1, -1, 398, 399, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, 384, 385, + -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, + -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, 384, 385, -1, -1, + -1, 389, 390, -1, 256, -1, -1, -1, -1, -1, + 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, + -1, -1, -1, -1, 384, 385, -1, -1, -1, 389, + 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, + -1, -1, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + -1, 385, -1, -1, -1, 389, 390, -1, 256, -1, + -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, -1, 385, + -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, + -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, -1, 385, -1, -1, + -1, -1, 390, -1, 256, -1, -1, -1, -1, -1, + -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, + 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 390, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, + -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, + 372, -1, 374, 375, 376, -1, -1, -1, -1, 262, + -1, -1, -1, 266, -1, -1, -1, -1, 390, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 401, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 413, -1, -1, -1, 298, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, 429, 374, 375, + 376, 314, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 390, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 401, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 413, -1, -1, + -1, -1, -1, -1, 357, -1, -1, -1, -1, -1, + 363, -1, -1, 429, -1, 368, 369, -1, 371, -1, + 373, -1, 375, 376, -1, 378, 379, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, -1, -1, 256, -1, 418, -1, 420, -1, -1, + 423, 264, 265, 266, 267, -1, 429, 270, 271, -1, + 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, + -1, -1, 285, -1, 287, 288, 289, 290, 291, 292, + -1, -1, 295, -1, -1, -1, 299, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 314, -1, 316, -1, 318, 319, -1, -1, 322, + -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, -1, 337, -1, -1, 340, 341, -1, + -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, + -1, -1, -1, 376, 377, 378, 379, 380, -1, -1, + -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, + 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 413, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, 429, -1, -1, -1, - -1, 262, -1, -1, -1, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 298, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, 378, - 379, -1, -1, 382, 383, 384, 385, -1, -1, -1, - 389, 390, -1, -1, -1, 394, 395, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, 256, - 429, -1, -1, -1, -1, 262, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, - -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, - -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, - 401, 298, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 413, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, 429, -1, + 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, + 266, 267, -1, -1, 270, 271, -1, 273, 274, 275, + 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, + -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, + -1, -1, -1, 299, 300, -1, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, + 316, -1, 318, 319, -1, -1, 322, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, + 376, 377, 378, 379, 380, -1, -1, -1, 384, -1, + 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, 378, 379, -1, -1, 382, 383, 384, 385, -1, - -1, -1, 389, 390, -1, 256, -1, 394, 395, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, - -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, - 389, 390, -1, 256, -1, 394, 395, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, - -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, - -1, 256, -1, 394, 395, 396, 397, 398, 399, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, 382, - 383, 384, 385, -1, -1, -1, 389, 390, -1, 256, - -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, - -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, - 375, 376, -1, -1, -1, -1, -1, 382, 383, 384, - 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, - -1, 396, 397, 398, 399, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, -1, 382, 383, 384, 385, -1, - -1, -1, 389, 390, -1, 256, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, - -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, - 389, 390, -1, 256, -1, -1, -1, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, - -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, - -1, 256, -1, -1, -1, 396, 397, 398, 399, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, 382, - 383, 384, 385, -1, -1, -1, 389, 390, -1, 256, - -1, -1, -1, 396, 397, 398, 399, 400, 401, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, - -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, - 375, 376, -1, -1, -1, -1, -1, -1, -1, 384, - 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, - -1, -1, -1, 398, 399, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, -1, -1, -1, 384, 385, -1, - -1, -1, 389, 390, -1, 256, -1, -1, -1, -1, - -1, 398, 399, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, - -1, -1, -1, -1, -1, 384, 385, -1, -1, -1, - 389, 390, -1, 256, -1, -1, -1, -1, -1, 398, - 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, - -1, -1, -1, 384, 385, -1, -1, -1, 389, 390, - -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, - -1, 384, 385, -1, -1, -1, 389, 390, -1, 256, - -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, - -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, - 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, - 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, - -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, -1, -1, -1, -1, 385, -1, - -1, -1, 389, 390, -1, 256, -1, -1, -1, -1, - -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, - -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, - -1, -1, -1, -1, -1, -1, 385, -1, -1, -1, - -1, 390, -1, 256, -1, -1, -1, -1, -1, -1, - -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, - -1, -1, -1, -1, 385, -1, -1, -1, -1, 390, - -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, - 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, - -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 390, -1, 256, - -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, - -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, - 375, 376, -1, -1, -1, 256, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 390, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, - -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, - -1, -1, -1, -1, 262, -1, -1, -1, 266, -1, - -1, -1, -1, 390, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 401, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 413, -1, -1, -1, - 298, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 372, 429, 374, 375, 376, 314, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 390, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 417, 418, 419, 420, 264, 265, 266, 267, -1, + -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, + 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, + 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, + 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, + -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 413, -1, -1, -1, -1, -1, -1, 357, - -1, -1, -1, -1, -1, 363, -1, -1, 429, -1, - 368, 369, -1, 371, -1, 373, -1, 375, 376, -1, - 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, -1, -1, 256, -1, - 418, -1, 420, -1, -1, 423, 264, 265, 266, 267, - -1, 429, 270, 271, -1, 273, 274, 275, 276, 277, - 278, 279, -1, -1, -1, -1, -1, 285, -1, 287, - 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, - -1, 299, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, - 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, - -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, + -1, -1, 371, -1, -1, -1, -1, 376, 377, 378, + 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, + -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, + 419, 420, 264, 265, 266, 267, -1, -1, 270, 271, + -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, + -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, + 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, + 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 314, -1, 316, -1, 318, 319, -1, -1, + 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, + -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, + -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, + -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, + 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, + 265, 266, 267, -1, -1, 270, 271, -1, 273, 274, + 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, + 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, + 295, -1, -1, -1, 299, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, + -1, 316, -1, 318, 319, -1, -1, 322, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, -1, 337, -1, -1, 340, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, + -1, 376, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, + -1, -1, 270, 271, -1, 256, -1, 275, 276, 277, + -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, + 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, + -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, -1, 316, 300, + 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, + -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, + 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, - -1, -1, -1, 371, -1, -1, -1, -1, 376, 377, + 368, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, - 418, 419, 420, 264, 265, 266, 267, -1, -1, 270, - 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, - -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, - 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, - -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, + 271, -1, 256, -1, 275, 276, 277, 418, 279, -1, + -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, + -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, + -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, + -1, 295, -1, -1, -1, 316, 300, 318, 319, 320, + 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, + 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, + 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, - 371, -1, -1, -1, -1, 376, 377, 378, 379, 380, + 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, - -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, - 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, - 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, - -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, - -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, - 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, - -1, -1, 376, 377, 378, 379, 380, -1, -1, -1, - 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, - -1, -1, -1, 417, 418, 419, 420, 264, 265, 266, - 267, -1, -1, 270, 271, -1, 273, 274, 275, 276, - 277, 278, 279, -1, -1, -1, -1, -1, 285, -1, - 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, - -1, -1, 299, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 314, -1, 316, - -1, 318, 319, -1, -1, 322, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, - 337, -1, -1, 340, 341, -1, -1, 344, 345, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - 367, -1, -1, -1, 371, -1, -1, -1, -1, 376, - 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, - -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, + -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, 418, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 417, 418, 419, 420, 264, 265, 266, 267, -1, -1, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, - 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, - -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, - 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, -1, -1, - -1, 371, -1, -1, -1, -1, 376, 377, 378, 379, - 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, - -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, 367, 368, -1, -1, 371, -1, -1, -1, + -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, - 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, - 256, -1, 275, 276, 277, -1, 279, -1, -1, 265, - -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, - -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, - 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, - -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, - -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, - -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, -1, -1, 371, -1, - -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, - -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, - 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, - -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, - 276, 277, 418, 279, -1, -1, 265, -1, 267, 285, + 256, -1, 417, 418, 419, 420, -1, -1, 264, 265, + -1, 267, -1, 428, 270, 271, -1, 256, -1, 275, + 276, 277, -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, @@ -11862,156 +11840,122 @@ void case_962() -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, - 386, -1, -1, 372, -1, -1, 392, 393, -1, -1, - -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, 418, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, - -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, - -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, - 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, - -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, -1, 417, 418, 419, - 420, -1, -1, 264, 265, -1, 267, -1, 428, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, - -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, - -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, - -1, 295, -1, -1, -1, 316, 300, 318, 319, 320, - 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, - 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, - 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, - 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, - -1, -1, -1, 384, -1, 386, 370, -1, -1, -1, - -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, - 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, - -1, 275, 276, 277, 418, 279, -1, -1, 265, -1, - 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, - -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, - 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, - -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, - 334, 318, -1, 337, -1, 322, -1, 341, -1, -1, - 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, - 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, - -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, - 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, - -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, 418, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, - -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, + 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, - -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, - 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, - -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, 417, - 418, 419, 420, -1, -1, 264, 265, -1, 267, -1, - 428, 270, 271, -1, -1, -1, 275, 276, 277, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, 418, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, + 329, 330, 331, 332, 316, 334, 318, -1, 337, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, - -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, + 372, -1, -1, 392, 393, -1, -1, -1, -1, -1, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, + 419, 420, 285, -1, -1, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, 418, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, + -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, + -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, + -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, + 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, - 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, - -1, -1, -1, 275, 276, 277, 418, 279, -1, -1, - 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, - 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, - 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, - 295, -1, -1, -1, 316, 300, 318, 319, -1, 304, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, - -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, - -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, - -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, - -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, - 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 256, -1, 417, 418, 419, 420, -1, -1, + 264, 265, -1, 267, -1, 428, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, -1, 265, -1, + 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, + -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, + 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, + 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, + 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, + 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, + -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, + 384, -1, 386, 370, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, 418, 279, -1, -1, 265, -1, 267, - 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, - 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, - 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, - 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, - -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, - -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, + -1, -1, -1, 417, 418, 419, 420, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, 418, 279, -1, -1, 265, -1, 267, 285, -1, + 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, + -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, + -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, + 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, + -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, + 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, + 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, + -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - 418, 279, -1, -1, 265, -1, 267, 285, -1, 270, - 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, - -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, - -1, -1, -1, -1, 295, -1, -1, -1, 316, 300, - 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, - -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, - 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, - -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, - 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, - -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, 418, 279, + -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, + -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, + 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, 316, 300, 318, 319, + -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, + -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, + -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, + 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, + -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, - 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, 418, 279, -1, - -1, -1, -1, -1, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, 261, -1, 262, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, 284, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, 297, 334, 298, -1, -1, 302, -1, -1, - -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, -1, -1, 321, -1, 359, 360, - 361, 362, -1, -1, -1, -1, -1, -1, 333, -1, - 371, 336, -1, 338, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, + 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, 418, 279, -1, -1, -1, + -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, 262, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, + -1, 344, 345, -1, -1, 298, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, + -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, + -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, + 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 362, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, -1, -1, 378, 379, 417, 418, 382, 383, - 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - -1, 261, -1, 418, -1, 265, 420, 267, -1, 423, - 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, + -1, -1, -1, -1, 417, 418, 419, 420, 371, 372, + 373, 374, 375, -1, -1, 378, 379, -1, -1, 382, + 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, -1, 261, -1, -1, -1, 265, 420, 267, -1, + 423, 270, -1, 272, 273, -1, 275, -1, 277, -1, + 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, + -1, -1, -1, -1, 293, -1, 295, 296, 297, -1, + -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, + -1, -1, 321, 322, 323, -1, -1, -1, -1, -1, + -1, 330, 331, -1, 333, 334, -1, 336, 337, 338, + -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 261, -1, 362, -1, 265, -1, 267, -1, 368, + 270, -1, 272, 273, -1, 275, -1, 277, 377, 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, + 310, 311, 312, -1, -1, -1, 316, 317, 318, 418, -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, @@ -12025,66 +11969,92 @@ void case_962() 321, 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, - -1, 362, -1, 265, -1, 267, -1, 368, 270, -1, - 272, 273, -1, 275, -1, 277, 377, 279, -1, 281, - 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, - -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, - 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, -1, 316, 317, 318, 418, -1, 321, - 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, - -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, - 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 261, -1, -1, -1, 265, -1, 267, - 362, -1, 270, -1, 272, 273, 368, 275, -1, 277, - -1, 279, -1, 281, 282, 283, 284, -1, -1, 287, - 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, - -1, -1, 300, -1, 302, 261, 304, -1, -1, 307, - -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, - 318, -1, -1, 321, 322, 323, 418, -1, 284, -1, - -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, - 338, 297, -1, -1, 342, -1, 302, -1, -1, 305, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, 362, 321, -1, -1, -1, 325, - 368, -1, -1, -1, -1, -1, -1, 333, -1, -1, - 336, -1, 338, 264, 265, -1, 267, -1, -1, 270, + -1, -1, -1, -1, 261, -1, -1, -1, 265, -1, + 267, 362, -1, 270, -1, 272, 273, 368, 275, -1, + 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, + 287, 288, -1, -1, -1, -1, 293, -1, 295, 296, + 297, -1, -1, 300, -1, 302, 261, 304, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, + 317, 318, -1, -1, 321, 322, 323, 418, -1, 284, + -1, -1, -1, 330, 331, -1, 333, 334, -1, 336, + 337, 338, 297, -1, -1, 342, -1, 302, -1, -1, + 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, -1, 362, 321, -1, -1, -1, + 325, 368, -1, -1, 261, -1, -1, -1, 333, -1, + -1, 336, -1, 338, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 284, -1, -1, + -1, -1, 357, -1, 261, -1, -1, 362, -1, -1, + 297, -1, -1, -1, 369, 302, 371, -1, 373, -1, + 307, 418, 309, 310, 311, 312, -1, 284, -1, -1, + 317, 386, -1, -1, 321, -1, -1, -1, 325, -1, + 297, -1, -1, -1, -1, 302, 333, -1, -1, 336, + 307, 338, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, 418, 321, -1, -1, -1, -1, -1, + -1, 264, 265, -1, 267, 362, 333, 270, 271, 336, + -1, 338, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, 362, -1, 300, -1, 302, + 303, 304, -1, 306, -1, -1, -1, -1, -1, -1, + 313, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, 418, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, + -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, + -1, 418, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, 371, 372, + -1, 374, -1, -1, 377, 378, 379, 380, -1, -1, + -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, + 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, 306, + -1, -1, -1, -1, -1, -1, 313, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, 371, -1, -1, 374, -1, -1, + 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, + -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, + -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, 357, -1, -1, 285, -1, 362, 288, -1, -1, - -1, -1, -1, 369, 295, 371, -1, 373, -1, 300, - 418, 302, 303, 304, -1, 306, -1, -1, -1, -1, - 386, -1, 313, -1, -1, 316, -1, 318, 319, -1, + 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, 306, -1, -1, -1, -1, + -1, -1, 313, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - 341, -1, 418, 344, 345, -1, -1, -1, -1, -1, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - 371, 372, -1, 374, -1, -1, 377, 378, 379, 380, + 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, - -1, 306, -1, -1, -1, -1, -1, -1, 313, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + -1, -1, 337, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, 371, -1, -1, 374, + -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, 306, -1, -1, - -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, @@ -12095,10 +12065,10 @@ void case_962() 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, 337, -1, -1, -1, 341, -1, + -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, + 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, @@ -12112,7 +12082,7 @@ void case_962() -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, 368, -1, -1, 371, -1, -1, -1, -1, -1, + 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, @@ -12125,7 +12095,7 @@ void case_962() 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, @@ -12139,7 +12109,7 @@ void case_962() -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, @@ -12186,183 +12156,159 @@ void case_962() -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, -1, -1, -1, 295, -1, 261, -1, 263, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, + 331, 332, 297, 334, -1, -1, -1, 302, -1, -1, + -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, -1, -1, 321, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, 333, -1, + 371, 336, -1, 338, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, - -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, - 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, - 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, - 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, - -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, - -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, 261, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, 284, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, 297, 334, -1, -1, -1, 302, - -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 315, -1, 317, -1, -1, -1, 321, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - 333, -1, 371, 336, -1, 338, -1, -1, 377, 378, - 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, - -1, -1, -1, 392, 393, -1, -1, -1, -1, 362, - -1, -1, -1, -1, -1, 368, 369, -1, -1, -1, - -1, -1, -1, 263, -1, 265, -1, 267, 417, 418, - 270, 420, 272, 273, -1, 275, -1, 277, -1, 279, - -1, 281, 282, 283, -1, -1, -1, 287, 288, -1, - -1, -1, -1, 293, -1, 295, 296, -1, -1, -1, - 300, -1, -1, -1, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 315, 316, -1, 318, -1, - -1, -1, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, 264, 265, 334, 267, -1, 337, 270, 271, - -1, -1, 342, 275, 276, 277, -1, 279, -1, -1, - -1, -1, -1, 285, -1, -1, 288, -1, -1, -1, - -1, -1, -1, 295, 364, 365, -1, -1, 300, -1, - 302, 303, 304, -1, -1, -1, -1, 377, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, -1, 334, -1, -1, 337, -1, -1, -1, -1, - -1, -1, 265, -1, 267, -1, -1, 270, 418, 272, - -1, -1, 275, -1, -1, -1, 279, 359, 360, 361, - 362, -1, -1, -1, -1, 288, 265, -1, 267, 371, - -1, 270, 295, 272, 273, -1, 275, 300, 277, 302, - 279, 304, 281, 282, 283, -1, -1, -1, 287, 288, - -1, -1, -1, 316, 293, 318, 295, 296, -1, 322, - 323, 300, -1, -1, -1, 304, -1, 330, 331, -1, - -1, 334, -1, -1, 337, 417, 418, 316, -1, 318, - -1, -1, -1, 322, 323, -1, -1, -1, -1, -1, - -1, 330, 331, -1, 265, 334, 267, -1, 337, 270, - -1, 272, 273, 342, 275, -1, 277, -1, 279, -1, + -1, 392, 393, -1, -1, -1, -1, 362, -1, -1, + -1, -1, -1, 368, 369, -1, -1, -1, -1, -1, + -1, 263, -1, 265, -1, 267, 417, 418, 270, 420, + 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, + 282, 283, -1, -1, -1, 287, 288, -1, -1, -1, + -1, 293, -1, 295, 296, -1, -1, -1, 300, -1, + -1, -1, 304, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 315, 316, -1, 318, -1, -1, -1, + 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, + 264, 265, 334, 267, -1, 337, 270, 271, -1, -1, + 342, 275, 276, 277, -1, 279, -1, -1, -1, -1, + -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, + -1, 295, 364, 365, -1, -1, 300, -1, 302, 303, + 304, -1, -1, -1, -1, 377, -1, -1, -1, -1, + -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, + 334, -1, -1, 337, -1, -1, -1, -1, -1, -1, + 265, -1, 267, -1, -1, 270, 418, 272, -1, -1, + 275, -1, -1, -1, 279, 359, 360, 361, 362, -1, + -1, -1, -1, 288, 265, -1, 267, 371, -1, 270, + 295, 272, 273, -1, 275, 300, 277, 302, 279, 304, 281, 282, 283, -1, -1, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, -1, -1, -1, 300, - -1, -1, -1, 304, -1, -1, -1, -1, 377, -1, - -1, -1, -1, -1, -1, 316, -1, 318, -1, -1, - -1, 322, 323, -1, -1, 418, -1, -1, -1, 330, - 331, -1, -1, 334, -1, -1, 337, -1, 265, -1, - 267, 342, -1, 270, -1, -1, 273, -1, 275, 418, - 277, -1, 279, -1, 281, 282, 283, -1, -1, -1, - 287, 288, -1, -1, -1, -1, 293, -1, 295, -1, - 265, -1, 267, 300, -1, 270, -1, 304, 273, -1, - 275, -1, 277, -1, 279, -1, 281, 282, 283, 316, - -1, 318, 287, 288, -1, 322, -1, -1, 293, -1, + -1, 316, 293, 318, 295, 296, -1, 322, 323, 300, + -1, -1, -1, 304, -1, 330, 331, -1, -1, 334, + -1, -1, 337, 417, 418, 316, -1, 318, -1, -1, + -1, 322, 323, -1, -1, -1, -1, -1, -1, 330, + 331, -1, 265, 334, 267, -1, 337, 270, -1, 272, + 273, 342, 275, -1, 277, -1, 279, -1, 281, 282, + 283, -1, -1, -1, 287, 288, -1, -1, -1, -1, + 293, -1, 295, 296, -1, -1, -1, 300, -1, -1, + -1, 304, -1, -1, -1, -1, 377, -1, -1, -1, + -1, -1, -1, 316, -1, 318, -1, -1, -1, 322, + 323, -1, -1, 418, -1, -1, -1, 330, 331, -1, + -1, 334, -1, -1, 337, -1, 265, -1, 267, 342, + -1, 270, -1, -1, 273, -1, 275, 418, 277, -1, + 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, + -1, -1, -1, -1, 293, -1, 295, -1, 265, -1, + 267, 300, -1, 270, -1, 304, 273, -1, 275, -1, + 277, -1, 279, -1, 281, 282, 283, 316, -1, 318, + 287, 288, -1, 322, -1, -1, 293, -1, 295, -1, + -1, 330, 331, 300, -1, 334, -1, 304, 337, -1, + -1, -1, 265, 342, 267, 418, -1, 270, -1, 316, + -1, 318, 275, -1, -1, 322, 279, -1, -1, -1, + -1, -1, -1, 330, 331, 288, -1, 334, -1, -1, + 337, -1, 295, -1, 265, 342, 267, 300, 377, 270, + -1, 304, -1, 306, 275, 308, -1, -1, 279, -1, + 313, -1, -1, 316, -1, 318, -1, 288, -1, 322, + -1, -1, 325, -1, 295, -1, -1, 330, 331, 300, + -1, 334, -1, 304, 337, 306, -1, 308, 265, 418, + 267, -1, 313, 270, -1, 316, -1, 318, 275, -1, + -1, 322, 279, -1, 325, -1, -1, -1, -1, 330, + 331, 288, -1, 334, -1, -1, 337, -1, 295, 372, + 265, 418, 267, 300, -1, 270, -1, 304, -1, 306, + 275, 308, -1, -1, 279, -1, 313, -1, -1, 316, + -1, 318, -1, 288, -1, 322, -1, -1, 325, 370, 295, -1, -1, 330, 331, 300, -1, 334, -1, 304, - 337, -1, -1, -1, 265, 342, 267, 418, -1, 270, - -1, 316, -1, 318, 275, -1, -1, 322, 279, -1, - -1, -1, -1, -1, -1, 330, 331, 288, -1, 334, - -1, -1, 337, -1, 295, -1, 265, 342, 267, 300, - 377, 270, -1, 304, -1, 306, 275, 308, -1, -1, - 279, -1, 313, -1, -1, 316, -1, 318, -1, 288, - -1, 322, -1, -1, 325, -1, 295, -1, -1, 330, - 331, 300, -1, 334, -1, 304, 337, 306, -1, 308, - 265, 418, 267, -1, 313, 270, -1, 316, -1, 318, - 275, -1, -1, 322, 279, -1, 325, -1, -1, -1, - -1, 330, 331, 288, -1, 334, -1, -1, 337, -1, - 295, 372, 265, 418, 267, 300, -1, 270, -1, 304, - -1, 306, 275, 308, -1, -1, 279, -1, 313, -1, - -1, 316, -1, 318, -1, 288, -1, 322, -1, -1, - 325, 370, 295, -1, -1, 330, 331, 300, -1, 334, - -1, 304, 337, 306, -1, -1, -1, 418, -1, -1, - 313, -1, -1, 316, -1, 318, -1, -1, -1, 322, - -1, -1, 325, -1, -1, -1, -1, 330, 331, -1, - -1, 334, -1, 265, 337, 267, -1, -1, 270, 418, - -1, -1, -1, 275, -1, -1, -1, 279, -1, -1, - -1, 283, 265, -1, 267, -1, 288, 270, -1, -1, - -1, 293, 275, 295, -1, -1, 279, -1, 300, -1, - -1, -1, 304, 305, -1, 288, -1, -1, -1, -1, - -1, -1, 295, 418, 316, -1, 318, 300, -1, -1, - 322, 304, -1, -1, -1, -1, -1, -1, 330, 331, - -1, -1, 334, 316, -1, 318, 265, -1, 267, 322, - -1, 270, -1, -1, -1, 418, 275, 330, 331, -1, - 279, 334, -1, 265, 337, 267, -1, -1, 270, 288, - -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, - -1, 300, -1, -1, -1, 304, 288, -1, -1, -1, - 363, -1, -1, 295, -1, -1, -1, 316, 300, 318, - -1, -1, 304, 322, -1, -1, -1, -1, -1, -1, - -1, 330, 331, -1, 316, 334, 318, 265, 337, 267, - 322, -1, 270, -1, -1, -1, 418, 275, 330, 331, - -1, 279, 334, -1, -1, 337, -1, -1, -1, -1, - 288, -1, -1, -1, -1, 418, -1, 295, -1, -1, - -1, -1, 300, -1, -1, 261, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 272, -1, 316, -1, - 318, 277, -1, -1, 322, 281, -1, -1, 284, -1, - -1, -1, 330, 331, -1, -1, 334, -1, -1, 337, - 296, 297, -1, -1, -1, 301, 302, -1, -1, 418, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, -1, 321, 418, 323, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 333, -1, 335, - 336, 261, 338, -1, -1, -1, 342, -1, -1, -1, - -1, -1, 272, -1, -1, -1, -1, 277, -1, -1, - -1, 281, -1, -1, 284, -1, 362, -1, -1, -1, - -1, -1, 368, 369, -1, -1, 296, 297, -1, -1, - 418, 301, 302, 261, -1, 263, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, 323, -1, -1, 284, -1, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, 297, - -1, -1, 342, -1, 302, -1, -1, -1, -1, 307, + 337, 306, -1, -1, -1, 418, -1, -1, 313, -1, + -1, 316, -1, 318, -1, -1, -1, 322, -1, -1, + 325, -1, -1, -1, -1, 330, 331, -1, -1, 334, + -1, 265, 337, 267, -1, -1, 270, 418, -1, -1, + -1, 275, -1, -1, -1, 279, -1, -1, -1, 283, + 265, -1, 267, -1, 288, 270, -1, -1, -1, 293, + 275, 295, -1, -1, 279, -1, 300, -1, -1, -1, + 304, 305, -1, 288, -1, -1, -1, -1, -1, -1, + 295, 418, 316, -1, 318, 300, -1, -1, 322, 304, + -1, -1, -1, -1, -1, -1, 330, 331, -1, -1, + 334, 316, -1, 318, 265, -1, 267, 322, -1, 270, + -1, -1, -1, 418, 275, 330, 331, -1, 279, 334, + -1, 265, 337, 267, -1, -1, 270, 288, -1, -1, + -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, + -1, -1, -1, 304, 288, -1, -1, -1, 363, -1, + -1, 295, -1, -1, -1, 316, 300, 318, -1, -1, + 304, 322, -1, -1, -1, -1, -1, -1, -1, 330, + 331, -1, 316, 334, 318, 265, 337, 267, 322, -1, + 270, -1, -1, -1, 418, 275, 330, 331, -1, 279, + 334, -1, -1, 337, -1, -1, -1, -1, 288, 265, + -1, 267, -1, 418, 270, 295, -1, -1, -1, 275, + 300, -1, -1, 279, 304, -1, -1, -1, -1, -1, + -1, -1, 288, -1, -1, -1, 316, -1, 318, 295, + -1, -1, 322, -1, 300, -1, -1, -1, 304, -1, + 330, 331, -1, -1, 334, -1, -1, 337, -1, 265, + 316, 267, 318, -1, 270, -1, 322, 418, -1, 275, + -1, -1, -1, 279, 330, 331, -1, -1, 334, -1, + -1, 337, 288, 265, 418, 267, -1, -1, 270, 295, + -1, -1, -1, 275, 300, -1, -1, 279, 304, -1, + -1, -1, -1, -1, -1, -1, 288, -1, -1, -1, + 316, -1, 318, 295, -1, -1, 322, -1, 300, -1, + -1, -1, 304, -1, 330, 331, -1, -1, 334, -1, + 261, 337, -1, -1, 316, -1, 318, -1, 418, -1, + 322, 272, -1, -1, -1, -1, 277, -1, 330, 331, + 281, -1, 334, 284, -1, 337, -1, -1, -1, -1, + -1, -1, 418, -1, -1, 296, 297, -1, -1, -1, + 301, 302, -1, 261, -1, -1, 307, -1, 309, 310, + 311, 312, -1, -1, 272, -1, 317, -1, -1, 277, + 321, -1, 323, 281, -1, -1, 284, -1, -1, -1, + -1, -1, 333, -1, 335, 336, -1, 338, 296, 297, + -1, 342, 418, 301, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, -1, 362, 321, -1, -1, 261, -1, 368, 369, - -1, -1, -1, -1, -1, 333, -1, 272, 336, -1, - 338, -1, 277, -1, -1, -1, 281, -1, -1, 284, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 296, 297, -1, 362, -1, 301, 302, -1, 261, - 368, 369, 307, -1, 309, 310, 311, 312, -1, -1, - 272, -1, 317, -1, -1, 277, 321, -1, 323, 281, - -1, -1, 284, -1, -1, -1, -1, -1, 333, -1, - -1, 336, -1, 338, 296, 297, -1, 342, -1, 301, - 302, 261, -1, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, -1, -1, 317, -1, 362, -1, 321, - -1, 323, -1, 368, 284, -1, -1, -1, -1, -1, - -1, 333, -1, -1, 336, -1, 338, 297, -1, 261, - 342, -1, 302, -1, -1, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - 362, 321, 284, -1, -1, -1, 368, -1, -1, -1, - -1, -1, -1, 333, -1, 297, 336, 261, 338, -1, - 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, - 284, -1, 362, -1, 364, 365, -1, -1, 368, -1, - -1, 333, -1, 297, 336, 261, 338, 263, 302, -1, + -1, 362, -1, 321, -1, 323, 418, 368, 369, -1, + -1, -1, 261, -1, -1, 333, -1, -1, 336, -1, + 338, -1, -1, 272, 342, -1, -1, -1, 277, -1, + -1, -1, 281, -1, -1, 284, -1, -1, -1, -1, + -1, -1, -1, -1, 362, -1, -1, 296, 297, -1, + 368, 369, 301, 302, -1, 261, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, 272, -1, 317, -1, + -1, 277, 321, -1, 323, 281, -1, -1, 284, -1, + -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, + 296, 297, -1, 342, -1, 301, 302, 261, -1, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, 362, -1, 321, -1, 323, -1, 368, + 284, -1, -1, -1, -1, -1, -1, 333, -1, -1, + 336, -1, 338, 297, -1, 261, 342, -1, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, 315, -1, 317, -1, -1, -1, 321, 284, -1, - 362, -1, 364, 365, -1, -1, 368, -1, -1, 333, - -1, 297, 336, 261, 338, -1, 302, -1, -1, -1, + -1, -1, -1, 317, -1, -1, 362, 321, 284, -1, + -1, -1, 368, -1, -1, -1, -1, -1, -1, 333, + -1, 297, 336, 261, 338, 263, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, 284, -1, 362, -1, - -1, -1, -1, 261, 368, -1, -1, 333, -1, 297, - 336, -1, 338, -1, 302, -1, -1, -1, -1, 307, - -1, 309, 310, 311, 312, -1, 284, -1, -1, 317, - -1, -1, -1, 321, -1, -1, 362, -1, -1, 297, - -1, -1, 368, 301, 302, 333, 261, -1, 336, 307, - 338, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, -1, -1, 321, -1, -1, -1, -1, -1, 284, - -1, -1, -1, -1, 362, 333, 364, 365, 336, -1, - 338, -1, 297, -1, -1, -1, -1, 302, -1, -1, - -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, 362, -1, 321, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, - -1, 336, -1, 338, -1, -1, -1, -1, -1, -1, + 364, 365, -1, -1, 368, -1, -1, 333, -1, 297, + 336, 261, 338, -1, 302, -1, -1, -1, -1, 307, + -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, + -1, -1, -1, 321, 284, -1, 362, -1, 364, 365, + -1, 261, 368, 263, -1, 333, -1, 297, 336, -1, + 338, -1, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, 284, -1, -1, 317, -1, -1, + -1, 321, -1, -1, 362, -1, -1, 297, -1, -1, + 368, 261, 302, 333, -1, -1, 336, 307, 338, 309, + 310, 311, 312, -1, -1, 315, -1, 317, -1, -1, + -1, 321, -1, -1, 284, -1, -1, -1, -1, -1, + -1, 261, 362, 333, 364, 365, 336, 297, 338, -1, + -1, 301, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, 284, -1, -1, 317, -1, -1, + -1, 321, 362, -1, -1, -1, -1, 297, -1, -1, + -1, -1, 302, 333, -1, -1, 336, 307, 338, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 362, 333, -1, -1, 336, -1, 338, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 362, + -1, -1, 362, }; -#line 6450 "cs-parser.jay" +#line 6452 "cs-parser.jay" // // A class used to hold info about an operator declarator @@ -12436,12 +12382,10 @@ void push_current_container (TypeDefinition tc, object partial_token) undo.AddTypeContainer (current_container, tc); } - var main_container = current_container.PartialContainer ?? current_container; - if (partial_token != null) - main_container.AddPartial (tc); + current_container.AddPartial (tc); else - main_container.AddTypeContainer (tc); + current_container.AddTypeContainer (tc); ++lexer.parsing_declaration; current_container = tc; @@ -12540,6 +12484,7 @@ public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Re this.report = report; lang_version = settings.Version; + yacc_verbose_flag = settings.VerboseParserFlag; doc_support = settings.DocumentationFile != null; oob_stack.Clear (); lexer = new Tokenizer (reader, file, compiler); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index f511d7bf56..ff3a4b6f80 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -86,7 +86,7 @@ namespace Mono.CSharp /// /// Controls the verbosity of the errors produced by the parser /// - static public int yacc_verbose_flag; + int yacc_verbose_flag; /// /// Used by the interactive shell, flags whether EOF was reached @@ -978,7 +978,7 @@ constant_declaration var lt = (Tokenizer.LocatedToken) $5; var mod = (Modifiers) $2; current_field = new Const (current_type, (FullNamedExpression) $4, mod, new MemberName (lt.Value, lt.Location), (Attributes) $1); - current_container.PartialContainer.AddConstant ((Const) current_field); + current_type.AddMember (current_field); if ((mod & Modifiers.STATIC) != 0) { report.Error (504, current_field.Location, "The constant `{0}' cannot be marked static", current_field.GetSignatureForError ()); @@ -1060,7 +1060,7 @@ field_declaration var lt = (Tokenizer.LocatedToken) $4; current_field = new Field (current_type, type, (Modifiers) $2, new MemberName (lt.Value, lt.Location), (Attributes) $1); - current_container.PartialContainer.AddField (current_field); + current_type.AddField (current_field); $$ = current_field; } opt_field_initializer @@ -1087,7 +1087,7 @@ field_declaration current_field = new FixedField (current_type, (FullNamedExpression) $4, (Modifiers) $2, new MemberName (lt.Value, lt.Location), (Attributes) $1); - current_container.PartialContainer.AddField (current_field); + current_type.AddField (current_field); } fixed_field_size opt_fixed_field_declarators SEMICOLON { @@ -1227,7 +1227,7 @@ method_declaration // Add it early in the case of body being eof for full ast Method m = (Method) $1; async_block = (m.ModFlags & Modifiers.ASYNC) != 0; - current_container.PartialContainer.AddMethod (m); + current_type.AddMember (m); } method_body { @@ -1678,7 +1678,7 @@ property_declaration if (type.Type != null && type.Type.Kind == MemberKind.Void) report.Error (547, GetLocation ($3), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); - current_container.PartialContainer.AddProperty ((Property)current_property); + current_type.AddMember (current_property); lbag.AddMember (current_property, GetModifierLocations (), GetLocation ($6)); lexer.PropertyParsing = true; @@ -1712,7 +1712,7 @@ indexer_declaration current_property = indexer; - current_container.PartialContainer.AddIndexer (indexer); + current_type.AddIndexer (indexer); lbag.AddMember (current_property, GetModifierLocations (), GetLocation ($5), GetLocation ($8), GetLocation ($9)); if (type.Type != null && type.Type.Kind == MemberKind.Void) @@ -1988,7 +1988,7 @@ operator_declaration } // Note again, checking is done in semantic analysis - current_container.PartialContainer.AddOperator (op); + current_type.AddOperator (op); lbag.AddMember (op, GetModifierLocations (), lbag.GetLocations (decl)); if ($5 == null) { // Semicolon @@ -2190,7 +2190,7 @@ constructor_declarator } } - current_container.PartialContainer.AddConstructor (c); + current_type.AddConstructor (c); lbag.AddMember (c, GetModifierLocations (), GetLocation ($5), GetLocation ($7)); $$ = c; @@ -2286,7 +2286,7 @@ destructor_declaration d.DocComment = ConsumeStoredComment (); d.Block = (ToplevelBlock) $8; - current_container.PartialContainer.AddMethod (d); + current_type.AddMember (d); lbag.AddMember (d, GetModifierLocations (), GetLocation ($3), GetLocation ($6), GetLocation ($7)); current_local_parameters = null; @@ -2299,7 +2299,7 @@ event_declaration EVENT type member_declaration_name { current_event_field = new EventField (current_type, (FullNamedExpression) $4, (Modifiers) $2, (MemberName) $5, (Attributes) $1); - current_container.PartialContainer.AddEvent (current_event_field); + current_type.AddMember (current_event_field); if (current_event_field.MemberName.ExplicitInterface != null) { report.Error (71, current_event_field.Location, "`{0}': An explicit interface implementation of an event must use property syntax", @@ -2326,7 +2326,7 @@ event_declaration OPEN_BRACE { current_event = new EventProperty (current_type, (FullNamedExpression) $4, (Modifiers) $2, (MemberName) $5, (Attributes) $1); - current_container.PartialContainer.AddEvent (current_event); + current_type.AddMember (current_event); lbag.AddMember (current_event, GetModifierLocations (), GetLocation ($3), GetLocation ($6)); lexer.EventParsing = true; @@ -2649,7 +2649,7 @@ delegate_declaration p.CheckParameters (del); - (current_container.PartialContainer ?? current_container).AddTypeContainer (del); + current_container.AddTypeContainer (del); current_delegate = del; lexer.ConstraintsParsing = true; @@ -5062,9 +5062,11 @@ expression_statement } | statement_expression COMPLETE_COMPLETION { $$ = $1; } | statement_expression CLOSE_BRACE { - $$ = $1; - report.Error (1525, "Unexpected symbol '}', expecting ';'"); - } + $$ = $1; + lbag.AddStatement ($$, GetLocation ($2)); + report.Error (1525, "Unexpected symbol '}' after statement, expecting ';'"); + lexer.putback ('}'); + } ; interactive_expression_statement @@ -5861,7 +5863,7 @@ from_clause { current_block = new Linq.QueryBlock (current_block, lexer.Location); } - expression + expression_or_error { var lt = (Tokenizer.LocatedToken) $2; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -5876,7 +5878,7 @@ from_clause { current_block = new Linq.QueryBlock (current_block, lexer.Location); } - expression + expression_or_error { var lt = (Tokenizer.LocatedToken) $3; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -5921,7 +5923,7 @@ select_or_group_clause { current_block = new Linq.QueryBlock (current_block, lexer.Location); } - expression + expression_or_error { $$ = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)$3, GetLocation ($1)); @@ -5936,14 +5938,14 @@ select_or_group_clause current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push ((Linq.QueryBlock)current_block); } - expression + expression_or_error { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, lexer.Location); } - BY expression + BY expression_or_error { $$ = new Linq.GroupBy ((Linq.QueryBlock)current_block, (Expression)$3, linq_clause_blocks.Pop (), (Expression)$6, GetLocation ($1)); lbag.AddLocation ($$, GetLocation ($5)); @@ -5980,7 +5982,7 @@ let_clause { current_block = new Linq.QueryBlock (current_block, lexer.Location); } - expression + expression_or_error { var lt = (Tokenizer.LocatedToken) $2; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -5999,7 +6001,7 @@ where_clause { current_block = new Linq.QueryBlock (current_block, lexer.Location); } - expression + expression_or_error { $$ = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)$3, GetLocation ($1)); @@ -6017,7 +6019,7 @@ join_clause current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } - expression ON + expression_or_error ON { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -6025,7 +6027,7 @@ join_clause current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } - expression EQUALS + expression_or_error EQUALS { current_block.AddStatement (new ContextualReturn ((Expression) $8)); current_block.SetEndLocation (lexer.Location); @@ -6033,7 +6035,7 @@ join_clause current_block = new Linq.QueryBlock (current_block, lexer.Location); } - expression opt_join_into + expression_or_error opt_join_into { current_block.AddStatement (new ContextualReturn ((Expression) $11)); current_block.SetEndLocation (lexer.Location); @@ -6079,7 +6081,7 @@ join_clause current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } - expression ON + expression_or_error ON { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -6087,7 +6089,7 @@ join_clause current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } - expression EQUALS + expression_or_error EQUALS { current_block.AddStatement (new ContextualReturn ((Expression) $9)); current_block.SetEndLocation (lexer.Location); @@ -6095,7 +6097,7 @@ join_clause current_block = new Linq.QueryBlock (current_block, lexer.Location); } - expression opt_join_into + expression_or_error opt_join_into { current_block.AddStatement (new ContextualReturn ((Expression) $12)); current_block.SetEndLocation (lexer.Location); @@ -6293,7 +6295,7 @@ interactive_parsing pars, null /* attributes */); - current_container.PartialContainer.AddMethod (method); + current_type.AddMember (method); oob_stack.Push (method); ++lexer.parsing_block; @@ -6520,12 +6522,10 @@ void push_current_container (TypeDefinition tc, object partial_token) undo.AddTypeContainer (current_container, tc); } - var main_container = current_container.PartialContainer ?? current_container; - if (partial_token != null) - main_container.AddPartial (tc); + current_container.AddPartial (tc); else - main_container.AddTypeContainer (tc); + current_container.AddTypeContainer (tc); ++lexer.parsing_declaration; current_container = tc; @@ -6624,6 +6624,7 @@ public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Re this.report = report; lang_version = settings.Version; + yacc_verbose_flag = settings.VerboseParserFlag; doc_support = settings.DocumentationFile != null; oob_stack.Clear (); lexer = new Tokenizer (reader, file, compiler); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs index cf6a2ee75d..92188c8d15 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs @@ -73,7 +73,8 @@ namespace Mono.CSharp { int row, column; string value; - static LocatedToken[] buffer; + + static LocatedToken[] buffer = new LocatedToken[0]; static int pos; private LocatedToken () @@ -129,8 +130,10 @@ namespace Mono.CSharp public static void Initialize () { - if (buffer == null) +#if !FULL_AST + if (buffer.Length == 0) buffer = new LocatedToken [10000]; +#endif pos = 0; } @@ -263,7 +266,7 @@ namespace Mono.CSharp // static readonly KeywordEntry[][] keywords; static readonly KeywordEntry[][] keywords_preprocessor; - static readonly Dictionary keyword_strings; // TODO: HashSet + static readonly HashSet keyword_strings; static readonly NumberStyles styles; static readonly NumberFormatInfo csharp_format_info; @@ -348,14 +351,27 @@ namespace Mono.CSharp // Stack ifstack; - static System.Text.StringBuilder string_builder; const int max_id_size = 512; - static readonly char[] id_builder = new char [max_id_size]; - public static Dictionary[] identifiers = new Dictionary[max_id_size + 1]; const int max_number_size = 512; - static char[] number_builder = new char [max_number_size]; + +#if FULL_AST + readonly char [] id_builder = new char [max_id_size]; + + Dictionary[] identifiers = new Dictionary[max_id_size + 1]; + + char [] number_builder = new char [max_number_size]; + int number_pos; + + char[] value_builder = new char[256]; +#else + static readonly char [] id_builder = new char [max_id_size]; + + static Dictionary[] identifiers = new Dictionary[max_id_size + 1]; + + static char [] number_builder = new char [max_number_size]; static int number_pos; static char[] value_builder = new char[256]; +#endif public int Line { get { @@ -457,7 +473,7 @@ namespace Mono.CSharp static void AddKeyword (string kw, int token) { - keyword_strings.Add (kw, null); + keyword_strings.Add (kw); AddKeyword (keywords, kw, token); } @@ -493,7 +509,7 @@ namespace Mono.CSharp // static Tokenizer () { - keyword_strings = new Dictionary (); + keyword_strings = new HashSet (); // 11 is the length of the longest keyword for now keywords = new KeywordEntry[11][]; @@ -621,8 +637,6 @@ namespace Mono.CSharp csharp_format_info = NumberFormatInfo.InvariantInfo; styles = NumberStyles.Float; - - string_builder = new System.Text.StringBuilder (); } int GetKeyword (char[] id, int id_len) @@ -900,7 +914,7 @@ namespace Mono.CSharp public static bool IsKeyword (string s) { - return keyword_strings.ContainsKey (s); + return keyword_strings.Contains (s); } // @@ -1780,7 +1794,7 @@ namespace Mono.CSharp return reader.Peek (); } - void putback (int c) + public void putback (int c) { if (putback_char != -1){ Console.WriteLine ("Col: " + col); @@ -1971,7 +1985,7 @@ namespace Mono.CSharp char [] quotes = { '\"' }; - string name = arg.Substring (pos). Trim (quotes); + string name = arg.Substring (pos).Trim (quotes); ref_name = context.LookupFile (file_name, name); file_name.AddIncludeFile (ref_name); hidden = false; @@ -2078,7 +2092,7 @@ namespace Mono.CSharp if (c != '"') return false; - string_builder.Length = 0; + var string_builder = new StringBuilder (); while (c != -1 && c != '\n') { c = get_char (); if (c == '"') { @@ -2903,7 +2917,7 @@ namespace Mono.CSharp return Token.IDENTIFIER; } - static string InternIdentifier (char[] charBuffer, int length) + string InternIdentifier (char[] charBuffer, int length) { // // Keep identifiers in an array of hashtables to avoid needless diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs index 8c7d82827b..8948891abd 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs @@ -296,7 +296,9 @@ namespace Mono.CSharp { IsAssigned = 1 << 12, // Field is assigned HasExplicitLayout = 1 << 13, PartialDefinitionExists = 1 << 14, // Set when corresponding partial method definition exists - HasStructLayout = 1 << 15 // Has StructLayoutAttribute + HasStructLayout = 1 << 15, // Has StructLayoutAttribute + HasInstanceConstructor = 1 << 16, + HasUserOperators = 1 << 17 } /// @@ -663,14 +665,22 @@ namespace Mono.CSharp { return true; } + // + // Does extension methods look up to find a method which matches name and extensionType. + // Search starts from this namespace and continues hierarchically up to top level. + // public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) { - return LookupExtensionMethod (this, extensionType, name, arity); - } + var m = Parent; + do { + var ns = m as NamespaceContainer; + if (ns != null) + return ns.LookupExtensionMethod (this, extensionType, name, arity, ns, 0); - protected virtual ExtensionMethodCandidates LookupExtensionMethod (IMemberContext invocationContext, TypeSpec extensionType, string name, int arity) - { - return Parent.LookupExtensionMethod (invocationContext, extensionType, name, arity); + m = m.Parent; + } while (m != null); + + return null; } public virtual FullNamedExpression LookupNamespaceAlias (string name) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs index 2eb4a8858f..cd3811ab27 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs @@ -299,8 +299,10 @@ namespace Mono.CSharp { } } - public override void EmitContainer () + public override void Emit () { + base.Emit (); + if (ReturnType.Type != null) { if (ReturnType.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { return_attributes = new ReturnParameter (this, InvokeBuilder.MethodBuilder, Location); @@ -327,12 +329,6 @@ namespace Mono.CSharp { BeginInvokeBuilder.MethodBuilder.SetImplementationFlags (MethodImplAttributes.Runtime); EndInvokeBuilder.MethodBuilder.SetImplementationFlags (MethodImplAttributes.Runtime); } - - if (OptAttributes != null) { - OptAttributes.Emit (); - } - - base.Emit (); } protected override TypeSpec[] ResolveBaseTypes (out FullNamedExpression base_class) @@ -344,9 +340,7 @@ namespace Mono.CSharp { protected override TypeAttributes TypeAttr { get { - return ModifiersExtensions.TypeAttr (ModFlags, IsTopLevel) | - TypeAttributes.Class | TypeAttributes.Sealed | - base.TypeAttr; + return base.TypeAttr | TypeAttributes.Class | TypeAttributes.Sealed; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs index 41c1521ddd..178d6b621c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs @@ -358,5 +358,55 @@ namespace Mono.CSharp public SpecialsBag SpecialsBag { get; set; } public object LastYYValue { get; set; } } + + // + // This is the only public entry point + // + public class CompilerCallableEntryPoint : MarshalByRefObject + { + public static bool InvokeCompiler (string [] args, TextWriter error) + { + try { + var r = new Report (new StreamReportPrinter (error)); + CommandLineParser cmd = new CommandLineParser (r, error); + var setting = cmd.ParseArguments (args); + if (setting == null || r.Errors > 0) + return false; + + var d = new Driver (new CompilerContext (setting, r)); + return d.Compile (); + } finally { + Reset (); + } + } + + public static int[] AllWarningNumbers { + get { + return Report.AllWarnings; + } + } + + public static void Reset () + { + Reset (true); + } + + public static void PartialReset () + { + Reset (false); + } + + public static void Reset (bool full_flag) + { + Location.Reset (); + + if (!full_flag) + return; + + SymbolWriter.Reset (); + Linq.QueryBlock.TransparentParameter.Reset (); + TypeInfo.Reset (); + } + } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs index 292fd5c2b9..ade105cb00 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs @@ -447,7 +447,6 @@ namespace Mono.CSharp d.CreateContainer (); d.DefineContainer (); d.Define (); - d.Emit (); site.AddTypeContainer (d); del_type = new TypeExpression (d.CurrentType, loc); @@ -487,7 +486,7 @@ namespace Mono.CSharp // When site container already exists the inflated version has to be // updated manually to contain newly created field - if (gt is InflatedTypeSpec && site_container.Fields.Count > 1) { + if (gt is InflatedTypeSpec && site_container.AnonymousMethodsCounter > 1) { var tparams = gt.MemberDefinition.TypeParametersCount > 0 ? gt.MemberDefinition.TypeParameters : TypeParameterSpec.EmptyTypes; var inflator = new TypeParameterInflator (module, gt, tparams, gt.TypeArguments); gt.MemberCache.AddMember (field.InflateMember (inflator)); @@ -965,7 +964,7 @@ namespace Mono.CSharp public FieldSpec CreateCallSiteField (FullNamedExpression type, Location loc) { - int index = fields == null ? 0 : fields.Count; + int index = AnonymousMethodsCounter++; Field f = new HoistedField (this, type, Modifiers.PUBLIC | Modifiers.STATIC, "Site" + index.ToString ("X"), null, loc); f.Define (); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs index 36aaf26a78..0748486c30 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs @@ -189,8 +189,7 @@ namespace Mono.CSharp { protected override TypeAttributes TypeAttr { get { - return ModifiersExtensions.TypeAttr (ModFlags, IsTopLevel) | - TypeAttributes.Class | TypeAttributes.Sealed | base.TypeAttr; + return base.TypeAttr | TypeAttributes.Class | TypeAttributes.Sealed; } } @@ -215,7 +214,7 @@ namespace Mono.CSharp { return; } - AddConstant (em); + AddMember (em); } public static void Error_1008 (Location loc, Report Report) @@ -236,15 +235,13 @@ namespace Mono.CSharp { protected override bool DoDefineMembers () { - if (constants != null) { - for (int i = 0; i < constants.Count; ++i) { - EnumMember em = (EnumMember) constants [i]; - if (em.Initializer == null) { - em.Initializer = new ImplicitInitializer (em, i == 0 ? null : (EnumMember) constants[i - 1]); - } - - em.Define (); + for (int i = 0; i < Members.Count; ++i) { + EnumMember em = (EnumMember) Members[i]; + if (em.Initializer == null) { + em.Initializer = new ImplicitInitializer (em, i == 0 ? null : (EnumMember) Members[i - 1]); } + + em.Define (); } return true; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs index a669159cbc..a93f5e14e3 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs @@ -353,8 +353,6 @@ namespace Mono.CSharp bool partial_input; CSharpParser parser = ParseString (ParseMode.GetCompletions, input, out partial_input); if (parser == null){ - if (CSharpParser.yacc_verbose_flag != 0) - Console.WriteLine ("DEBUG: No completions available"); return null; } @@ -372,7 +370,7 @@ namespace Mono.CSharp // Need to setup MemberCache parser_result.CreateContainer (); - var method = parser_result.Methods[0] as Method; + var method = parser_result.Members[0] as Method; BlockContext bc = new BlockContext (method, method.Block, ctx.BuiltinTypes.Void); try { @@ -552,7 +550,6 @@ namespace Mono.CSharp { partial_input = false; Reset (); - Tokenizer.LocatedToken.Initialize (); var enc = ctx.Settings.Encoding; var s = new MemoryStream (enc.GetBytes (input)); @@ -590,7 +587,7 @@ namespace Mono.CSharp parser.Lexer.CompleteOnEOF = true; ReportPrinter old_printer = null; - if ((mode == ParseMode.Silent || mode == ParseMode.GetCompletions) && CSharpParser.yacc_verbose_flag == 0) + if ((mode == ParseMode.Silent || mode == ParseMode.GetCompletions)) old_printer = ctx.Report.SetPrinter (new StreamReportPrinter (TextWriter.Null)); try { @@ -651,7 +648,7 @@ namespace Mono.CSharp host.DefineContainer (); host.Define (); - expression_method = (Method) host.Methods[0]; + expression_method = (Method) host.Members[0]; } else { expression_method = null; } @@ -695,34 +692,36 @@ namespace Mono.CSharp var tt = assembly.Builder.GetType (host.TypeBuilder.Name); var mi = tt.GetMethod (expression_method.MemberName.Name); - if (host.Fields != null) { - // - // We need to then go from FieldBuilder to FieldInfo - // or reflection gets confused (it basically gets confused, and variables override each - // other). - // - foreach (Field field in host.Fields) { - var fi = tt.GetField (field.Name); - - Tuple old; - - // If a previous value was set, nullify it, so that we do - // not leak memory - if (fields.TryGetValue (field.Name, out old)) { - if (old.Item1.MemberType.IsStruct) { - // - // TODO: Clear fields for structs - // - } else { - try { - old.Item2.SetValue (null, null); - } catch { - } + // + // We need to then go from FieldBuilder to FieldInfo + // or reflection gets confused (it basically gets confused, and variables override each + // other). + // + foreach (var member in host.Members) { + var field = member as Field; + if (field == null) + continue; + + var fi = tt.GetField (field.Name); + + Tuple old; + + // If a previous value was set, nullify it, so that we do + // not leak memory + if (fields.TryGetValue (field.Name, out old)) { + if (old.Item1.MemberType.IsStruct) { + // + // TODO: Clear fields for structs + // + } else { + try { + old.Item2.SetValue (null, null); + } catch { } } - - fields[field.Name] = Tuple.Create (field.Spec, fi); } + + fields[field.Name] = Tuple.Create (field.Spec, fi); } return (CompiledMethod) System.Delegate.CreateDelegate (typeof (CompiledMethod), mi); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs index d4504545da..850fee1a85 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs @@ -10265,8 +10265,11 @@ namespace Mono.CSharp return base.CreateExpressionTree (ec); var init = new ArrayInitializer (parameters.Count, loc); - foreach (Property p in anonymous_type.Properties) - init.Add (new TypeOfMethod (MemberCache.GetMember (type, p.Get.Spec), loc)); + foreach (var m in anonymous_type.Members) { + var p = m as Property; + if (p != null) + init.Add (new TypeOfMethod (MemberCache.GetMember (type, p.Get.Spec), loc)); + } var ctor_args = new ArrayInitializer (arguments.Count, loc); foreach (Argument a in arguments) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs index 192130e802..afe427c20f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs @@ -118,8 +118,7 @@ namespace Mono.CSharp declarators.Add (declarator); - // TODO: This will probably break - Parent.AddMember (this, declarator.Name.Value); + Parent.AddNameToContainer (this, declarator.Name.Value); } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -407,12 +406,12 @@ namespace Mono.CSharp GetSignatureForError ()); } else if (declarators != null) { var t = new TypeExpression (MemberType, TypeExpression.Location); - int index = Parent.PartialContainer.Fields.IndexOf (this); foreach (var d in declarators) { var f = new FixedField (Parent, t, ModFlags, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); f.initializer = d.Initializer; ((ConstInitializer) f.initializer).Name = d.Name.Value; - Parent.PartialContainer.Fields.Insert (++index, f); + f.Define (); + Parent.PartialContainer.Members.Add (f); } } @@ -645,13 +644,13 @@ namespace Mono.CSharp if (declarators != null) { var t = new TypeExpression (MemberType, TypeExpression.Location); - int index = Parent.PartialContainer.Fields.IndexOf (this); foreach (var d in declarators) { var f = new Field (Parent, t, ModFlags, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); if (d.Initializer != null) f.initializer = d.Initializer; - Parent.PartialContainer.Fields.Insert (++index, f); + f.Define (); + Parent.PartialContainer.Members.Add (f); } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs index 87622baf60..5efeccb8fb 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs @@ -1213,7 +1213,6 @@ namespace Mono.CSharp class StructInfo { - public readonly TypeSpec Type; readonly List fields; public readonly TypeInfo[] StructFields; public readonly int Length; @@ -1223,14 +1222,13 @@ namespace Mono.CSharp private Dictionary struct_field_hash; private Dictionary field_hash; - protected bool InTransit; + bool InTransit; - // Private constructor. To save memory usage, we only need to create one instance - // of this class per struct type. - private StructInfo (TypeSpec type) + // + // We only need one instance per type + // + StructInfo (TypeSpec type) { - this.Type = type; - field_type_hash.Add (type, this); fields = MemberCache.GetAllFieldsForDefiniteAssignment (type); @@ -1327,7 +1325,7 @@ namespace Mono.CSharp // public class VariableInfo { readonly string Name; - public readonly TypeInfo TypeInfo; + readonly TypeInfo TypeInfo; // // The bit offset of this variable in the flow vector. @@ -1348,7 +1346,7 @@ namespace Mono.CSharp VariableInfo[] sub_info; - protected VariableInfo (string name, TypeSpec type, int offset) + VariableInfo (string name, TypeSpec type, int offset) { this.Name = name; this.Offset = offset; @@ -1359,7 +1357,7 @@ namespace Mono.CSharp Initialize (); } - protected VariableInfo (VariableInfo parent, TypeInfo type) + VariableInfo (VariableInfo parent, TypeInfo type) { this.Name = parent.Name; this.TypeInfo = type; @@ -1451,6 +1449,11 @@ namespace Mono.CSharp return !ec.DoFlowAnalysis || ec.CurrentBranching.IsStructFieldAssigned (this, name); } + public bool IsFullyInitialized (BlockContext bc, Location loc) + { + return TypeInfo.IsFullyInitialized (bc, this, loc); + } + public bool IsStructFieldAssigned (MyBitVector vector, string field_name) { int field_idx = TypeInfo.GetFieldIndex (field_name); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs index f1ae056a46..c786d32dcf 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs @@ -187,7 +187,7 @@ namespace Mono.CSharp throw new InternalErrorException (); this.method = method; - AddMethod (method); + Members.Add (method); } protected override bool DoDefineMembers () @@ -329,7 +329,7 @@ namespace Mono.CSharp : base (host, null, new TypeExpression (host.Compiler.BuiltinTypes.Void, host.Location), Modifiers.PUBLIC | Modifiers.DEBUGGER_HIDDEN, new MemberName ("Dispose", host.Location)) { - host.AddMethod (this); + host.Members.Add (this); Block.AddStatement (new DisposeMethodStatement (host.Iterator)); } @@ -494,10 +494,10 @@ namespace Mono.CSharp get_enumerator.Block.AddStatement ( new Return (new Invocation (new DynamicMethodGroupExpr (gget_enumerator, Location), null), Location)); - AddMethod (get_enumerator); - AddMethod (gget_enumerator); + Members.Add (get_enumerator); + Members.Add (gget_enumerator); } else { - AddMethod (new GetEnumeratorMethod (this, enumerator_type, name)); + Members.Add (new GetEnumeratorMethod (this, enumerator_type, name)); } } @@ -526,7 +526,7 @@ namespace Mono.CSharp current.Get = new Property.GetMethod (current, 0, null, Location); current.Get.Block = get_block; - AddProperty (current); + Members.Add (current); } void Define_Reset () @@ -536,7 +536,7 @@ namespace Mono.CSharp Modifiers.PUBLIC | Modifiers.DEBUGGER_HIDDEN, new MemberName ("Reset", Location), ParametersCompiled.EmptyReadOnlyParameters, null); - AddMethod (reset); + Members.Add (reset); reset.Block = new ToplevelBlock (Compiler, Location); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs index 60310f02c4..4fd1254ff1 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs @@ -850,7 +850,7 @@ namespace Mono.CSharp.Linq public void AddRangeVariable (RangeVariable variable) { variable.Block = this; - AddLocalName (variable.Name, variable); + TopBlock.AddLocalName (variable.Name, variable, true); } public override void Error_AlreadyDeclared (string name, INamedBlockVariable variable, string reason) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs index 7c3eae83f1..53bb2c7b76 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs @@ -220,7 +220,7 @@ namespace Mono.CSharp { static Checkpoint [] checkpoints; static int checkpoint_index; - public readonly static Location Null = new Location (-1); + public readonly static Location Null = new Location (); public static bool InEmacs; static Location () @@ -269,11 +269,6 @@ namespace Mono.CSharp { // File is always pushed before being changed. } - public Location (int row) - : this (row, 0) - { - } - public Location (int row, int column) { if (row <= 0) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs index e59b6d31fe..2b4bbf7e7b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs @@ -894,7 +894,7 @@ namespace Mono.CSharp { return IndexerNameAlias; if (mc is Constructor) - return Constructor.ConstructorName; + return mc.IsStatic ? Constructor.TypeConstructorName : Constructor.ConstructorName; return mc.MemberName.Name; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs index abd1554ade..cc42dc8c24 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs @@ -1361,10 +1361,6 @@ namespace Mono.CSharp { public override bool EnableOverloadChecks (MemberCore overload) { - // TODO: It can be deleted when members will be defined in correct order - if (overload is Operator) - return overload.EnableOverloadChecks (this); - if (overload is Indexer) return false; @@ -1619,6 +1615,9 @@ namespace Mono.CSharp { return false; } + if ((caching_flags & Flags.MethodOverloadsExist) != 0) + Parent.MemberCache.CheckExistingMembersOverloads (this, parameters); + // the rest can be ignored return true; } @@ -1649,14 +1648,6 @@ namespace Mono.CSharp { if (ConstructorBuilder != null) return true; - var ca = MethodAttributes.RTSpecialName | MethodAttributes.SpecialName; - - if ((ModFlags & Modifiers.STATIC) != 0) { - ca |= MethodAttributes.Static | MethodAttributes.Private; - } else { - ca |= ModifiersExtensions.MethodAttr (ModFlags); - } - if (!CheckAbstractAndExtern (block != null)) return false; @@ -1664,6 +1655,8 @@ namespace Mono.CSharp { if (!CheckBase ()) return false; + var ca = ModifiersExtensions.MethodAttr (ModFlags) | MethodAttributes.RTSpecialName | MethodAttributes.SpecialName; + ConstructorBuilder = Parent.TypeBuilder.DefineConstructor ( ca, CallingConventions, parameters.GetMetaInfo ()); @@ -1906,12 +1899,10 @@ namespace Mono.CSharp { public MethodData (InterfaceMemberBase member, Modifiers modifiers, MethodAttributes flags, IMethodData method, MethodBuilder builder, - //GenericMethod generic, MethodSpec parent_method) : this (member, modifiers, flags, method) { this.builder = builder; - //this.GenericMethod = generic; this.parent_method = parent_method; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs index bcdd786013..5369af6dbb 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs @@ -39,7 +39,7 @@ namespace Mono.CSharp sealed class StaticDataContainer : CompilerGeneratedClass { readonly Dictionary size_types; - new int fields; + int fields; public StaticDataContainer (ModuleContainer module) : base (module, new MemberName ("" + module.builder.ModuleVersionId.ToString ("B"), Location.Null), Modifiers.STATIC) @@ -180,6 +180,11 @@ namespace Mono.CSharp } } + public int CounterAnonymousTypes { get; set; } + public int CounterAnonymousMethods { get; set; } + public int CounterAnonymousContainers { get; set; } + public int CounterSwitchTypes { get; set; } + public AssemblyDefinition DeclaringAssembly { get { return assembly; @@ -423,7 +428,8 @@ namespace Mono.CSharp base.EmitContainer (); - VerifyMembers (); + if (Compiler.Report.Errors == 0) + VerifyMembers (); if (anonymous_types != null) { foreach (var atypes in anonymous_types) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs index c377cbd46e..f8d3f0b42f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs @@ -83,6 +83,7 @@ namespace Mono.CSharp { string fullname; protected Dictionary namespaces; protected Dictionary> types; + List extension_method_types; Dictionary cached_types; RootNamespace root; bool cls_checked; @@ -403,27 +404,35 @@ namespace Mono.CSharp { // public List LookupExtensionMethod (IMemberContext invocationContext, TypeSpec extensionType, string name, int arity) { - if (types == null) + if (extension_method_types == null) return null; List found = null; + for (int i = 0; i < extension_method_types.Count; ++i) { + var ts = extension_method_types[i]; - // TODO: Add per namespace flag when at least 1 type has extension + // + // When the list was built we didn't know what members the type + // contains + // + if ((ts.Modifiers & Modifiers.METHOD_EXTENSION) == 0) { + if (extension_method_types.Count == 1) { + extension_method_types = null; + return found; + } - foreach (var tgroup in types.Values) { - foreach (var ts in tgroup) { - if ((ts.Modifiers & Modifiers.METHOD_EXTENSION) == 0) - continue; + extension_method_types.RemoveAt (i--); + continue; + } - var res = ts.MemberCache.FindExtensionMethods (invocationContext, extensionType, name, arity); - if (res == null) - continue; + var res = ts.MemberCache.FindExtensionMethods (invocationContext, extensionType, name, arity); + if (res == null) + continue; - if (found == null) { - found = res; - } else { - found.AddRange (res); - } + if (found == null) { + found = res; + } else { + found.AddRange (res); } } @@ -436,6 +445,14 @@ namespace Mono.CSharp { types = new Dictionary> (64); } + if (ts.IsStatic && ts.Arity == 0 && + (ts.MemberDefinition.DeclaringAssembly == null || ts.MemberDefinition.DeclaringAssembly.HasExtensionMethod)) { + if (extension_method_types == null) + extension_method_types = new List (); + + extension_method_types.Add (ts); + } + var name = ts.Name; IList existing; if (types.TryGetValue (name, out existing)) { @@ -604,10 +621,12 @@ namespace Mono.CSharp { Namespace[] namespace_using_table; Dictionary aliases; - + public readonly MemberName RealMemberName; + public NamespaceContainer (MemberName name, ModuleContainer module, NamespaceContainer parent, CompilationSourceFile sourceFile) : base ((TypeContainer) parent ?? module, name, null, MemberKind.Namespace) { + this.RealMemberName = name; this.module = module; this.Parent = parent; this.file = sourceFile; @@ -761,15 +780,6 @@ namespace Mono.CSharp { base.EmitContainer (); } - // - // Does extension methods look up to find a method which matches name and extensionType. - // Search starts from this namespace and continues hierarchically up to top level. - // - protected override ExtensionMethodCandidates LookupExtensionMethod (IMemberContext invocationContext, TypeSpec extensionType, string name, int arity) - { - return LookupExtensionMethod (invocationContext, extensionType, name, arity, this, 0); - } - public ExtensionMethodCandidates LookupExtensionMethod (IMemberContext invocationContext, TypeSpec extensionType, string name, int arity, NamespaceContainer container, int position) { // @@ -1180,10 +1190,10 @@ namespace Mono.CSharp { return MemberName == null ? "global::" : base.GetSignatureForError (); } - public override void RemoveContainer (TypeContainer next_part) + public override void RemoveContainer (TypeContainer cont) { - base.RemoveContainer (next_part); - NS.RemoveContainer (next_part); + base.RemoveContainer (cont); + NS.RemoveContainer (cont); } protected override bool VerifyClsCompliance () @@ -1265,7 +1275,7 @@ namespace Mono.CSharp { } } - public void Accept (StructuralVisitor visitor) + public virtual void Accept (StructuralVisitor visitor) { visitor.Visit (this); } @@ -1288,7 +1298,7 @@ namespace Mono.CSharp { } } - public void Accept (StructuralVisitor visitor) + public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); } @@ -1422,7 +1432,7 @@ namespace Mono.CSharp { resolved = NamespaceExpression.ResolveAsTypeOrNamespace (new AliasContext (ctx)); } - public void Accept (StructuralVisitor visitor) + public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs index 2766ce670a..fe45d9aace 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs @@ -445,7 +445,7 @@ namespace Mono.CSharp if (first == null) first = value; - Parent.AddMember (get); + Parent.AddNameToContainer (get, get.MemberName.Basename); } } @@ -458,7 +458,7 @@ namespace Mono.CSharp if (first == null) first = value; - Parent.AddMember (set); + Parent.AddNameToContainer (set, set.MemberName.Basename); } } @@ -743,7 +743,7 @@ namespace Mono.CSharp if (!field.Define ()) return; - Parent.PartialContainer.AddField (field); + Parent.PartialContainer.Members.Add (field); FieldExpr fe = new FieldExpr (field, Location); if ((field.ModFlags & Modifiers.STATIC) == 0) @@ -787,7 +787,7 @@ namespace Mono.CSharp else pm = new GetMethod (this, 0, null, Location); - Parent.AddMember (pm); + Parent.AddNameToContainer (pm, pm.MemberName.Basename); } if (!CheckBase ()) @@ -1040,8 +1040,7 @@ namespace Mono.CSharp declarators.Add (declarator); - // TODO: This will probably break - Parent.AddMember (this, declarator.Name.Value); + Parent.AddNameToContainer (this, declarator.Name.Value); } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -1074,14 +1073,14 @@ namespace Mono.CSharp mod_flags_src &= ~(Modifiers.AccessibilityMask | Modifiers.DEFAULT_ACCESS_MODIFER); var t = new TypeExpression (MemberType, TypeExpression.Location); - int index = Parent.PartialContainer.Events.IndexOf (this); foreach (var d in declarators) { var ef = new EventField (Parent, t, mod_flags_src, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); if (d.Initializer != null) ef.initializer = d.Initializer; - Parent.PartialContainer.Events.Insert (++index, ef); + ef.Define (); + Parent.PartialContainer.Members.Add (ef); } } @@ -1098,7 +1097,7 @@ namespace Mono.CSharp Modifiers.BACKING_FIELD | Modifiers.COMPILER_GENERATED | Modifiers.PRIVATE | (ModFlags & (Modifiers.STATIC | Modifiers.UNSAFE)), MemberName, null); - Parent.PartialContainer.AddField (backing_field); + Parent.PartialContainer.Members.Add (backing_field); backing_field.Initializer = Initializer; backing_field.ModFlags &= ~Modifiers.COMPILER_GENERATED; @@ -1238,7 +1237,7 @@ namespace Mono.CSharp } set { add = value; - Parent.AddMember (value); + Parent.AddNameToContainer (value, value.MemberName.Basename); } } @@ -1254,7 +1253,7 @@ namespace Mono.CSharp } set { remove = value; - Parent.AddMember (value); + Parent.AddNameToContainer (value, value.MemberName.Basename); } } #endregion @@ -1572,8 +1571,7 @@ namespace Mono.CSharp } } - if (!Parent.PartialContainer.AddMember (this)) - return false; + Parent.AddNameToContainer (this, MemberName.Basename); flags |= MethodAttributes.HideBySig | MethodAttributes.SpecialName; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs index ee0ee4a34c..b49d2a3e47 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs @@ -133,6 +133,7 @@ namespace Mono.CSharp { // Compiler debug flags only public bool ParseOnly, TokenizeOnly, Timestamps; public int DebugFlags; + public int VerboseParserFlag; // // Whether we are being linked against the standard libraries. @@ -1095,7 +1096,7 @@ namespace Mono.CSharp { { switch (arg){ case "-v": - CSharpParser.yacc_verbose_flag++; + settings.VerboseParserFlag++; return ParseResult.Success; case "--version": diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs index 800521dfde..4a9408ba1d 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs @@ -1912,7 +1912,7 @@ namespace Mono.CSharp { if (!ec.DoFlowAnalysis || ec.CurrentBranching.IsAssigned (VariableInfo)) return true; - return VariableInfo.TypeInfo.IsFullyInitialized (ec, VariableInfo, block.StartLocation); + return VariableInfo.IsFullyInitialized (ec, block.StartLocation); } public bool IsAssigned (BlockContext ec) @@ -2099,9 +2099,9 @@ namespace Mono.CSharp { AddLocalName (li.Name, li); } - public virtual void AddLocalName (string name, INamedBlockVariable li) + public void AddLocalName (string name, INamedBlockVariable li) { - ParametersBlock.TopBlock.AddLocalName (name, li); + ParametersBlock.TopBlock.AddLocalName (name, li, false); } public virtual void Error_AlreadyDeclared (string name, INamedBlockVariable variable, string reason) @@ -3003,7 +3003,7 @@ namespace Mono.CSharp { } } - public override void AddLocalName (string name, INamedBlockVariable li) + public void AddLocalName (string name, INamedBlockVariable li, bool ignoreChildrenBlocks) { if (names == null) names = new Dictionary (); @@ -3047,13 +3047,15 @@ namespace Mono.CSharp { } } - // Collision with with children - b = existing.Block; - while ((b = b.Parent) != null) { - if (li.Block == b) { - li.Block.Error_AlreadyDeclared (name, li, "child"); - i = existing_list.Count; - break; + if (!ignoreChildrenBlocks) { + // Collision with children + b = existing.Block; + while ((b = b.Parent) != null) { + if (li.Block == b) { + li.Block.Error_AlreadyDeclared (name, li, "child"); + i = existing_list.Count; + break; + } } } } @@ -3551,7 +3553,6 @@ namespace Mono.CSharp { VariableReference value; ExpressionStatement string_dictionary; FieldExpr switch_cache_field; - static int unique_counter; ExplicitBlock block; // @@ -3912,11 +3913,6 @@ namespace Mono.CSharp { return null; } - public static void Reset () - { - unique_counter = 0; - } - public override bool Resolve (BlockContext ec) { Expr = Expr.Resolve (ec); @@ -4089,7 +4085,7 @@ namespace Mono.CSharp { var ctype = ec.CurrentMemberDefinition.Parent.PartialContainer; Field field = new Field (ctype, string_dictionary_type, Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.COMPILER_GENERATED, - new MemberName (CompilerGeneratedClass.MakeName (null, "f", "switch$map", unique_counter++), loc), null); + new MemberName (CompilerGeneratedClass.MakeName (null, "f", "switch$map", ec.Module.CounterSwitchTypes++), loc), null); if (!field.Define ()) return; ctype.AddField (field); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs index 8c2b9a5e34..dee9e798d9 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs @@ -29,19 +29,15 @@ namespace Mono.CSharp } - void VisitTypeContainer (TypeContainer tc) + void VisitTypeDefinition (TypeDefinition tc) { - if (tc.Containers == null) - return; - foreach (var container in tc.Containers) { - if (container != null) - container.Accept (this); + foreach (var container in tc.Members) { + container.Accept (this); } } public virtual void Visit (NamespaceContainer ns) { - VisitTypeContainer (ns); } public virtual void Visit (UsingNamespace un) @@ -58,18 +54,18 @@ namespace Mono.CSharp public virtual void Visit (Class c) { - VisitTypeContainer (c); + VisitTypeDefinition (c); } public virtual void Visit (Struct s) { - VisitTypeContainer (s); + VisitTypeDefinition (s); } public virtual void Visit (Interface i) { - VisitTypeContainer (i); + VisitTypeDefinition (i); } public virtual void Visit (Delegate d) @@ -78,7 +74,7 @@ namespace Mono.CSharp public virtual void Visit (Enum e) { - VisitTypeContainer (e); + VisitTypeDefinition (e); } public virtual void Visit (FixedField f)