diff --git a/src/tools/ilasm/KNOWN-ISSUES.md b/src/tools/ilasm/KNOWN-ISSUES.md new file mode 100644 index 00000000000000..2adb1d19f57178 --- /dev/null +++ b/src/tools/ilasm/KNOWN-ISSUES.md @@ -0,0 +1,10 @@ +# Managed IL Assembler - Known Issues + +## TLS RVA statics + +Thread-local storage (TLS) RVA static fields (`.data tls`) are not +supported by the managed ilasm. The native ilasm emits a TLS directory +entry in the PE header for these, which the managed ilasm's PE builder +does not currently implement. + + diff --git a/src/tools/ilasm/src/ILAssembler/BlobBuilderExtensions.cs b/src/tools/ilasm/src/ILAssembler/BlobBuilderExtensions.cs index 6519c50ab2dabd..274d844c491026 100644 --- a/src/tools/ilasm/src/ILAssembler/BlobBuilderExtensions.cs +++ b/src/tools/ilasm/src/ILAssembler/BlobBuilderExtensions.cs @@ -85,7 +85,11 @@ public static void WriteSerializedValue(this BlobBuilder writer, T value) public static void WriteTypeEntity(this BlobBuilder builder, EntityRegistry.TypeEntity entity) { - if (entity is EntityRegistry.FakeTypeEntity fakeEntity) + if (entity is EntityRegistry.TypeReferenceEntity typeRef) + { + builder.WriteCompressedInteger(CodedIndex.TypeDefOrRefOrSpec(typeRef.PseudoHandle)); + } + else if (entity is EntityRegistry.FakeTypeEntity fakeEntity) { builder.WriteCompressedInteger(CodedIndex.TypeDefOrRefOrSpec(fakeEntity.TypeSignatureHandle)); } diff --git a/src/tools/ilasm/src/ILAssembler/Diagnostic.cs b/src/tools/ilasm/src/ILAssembler/Diagnostic.cs index b7d4a9bb54d343..df69247b9f9b68 100644 --- a/src/tools/ilasm/src/ILAssembler/Diagnostic.cs +++ b/src/tools/ilasm/src/ILAssembler/Diagnostic.cs @@ -52,6 +52,7 @@ public static class DiagnosticIds public const string DuplicateMethod = "ILA0030"; public const string MissingExportedTypeImplementation = "ILA0031"; public const string KeyFileError = "ILA0032"; + public const string TooManyGenericParameters = "ILA0033"; } internal static class DiagnosticMessageTemplates @@ -87,4 +88,5 @@ internal static class DiagnosticMessageTemplates public const string ParameterIndexOutOfRange = "Parameter index {0} is out of range"; public const string DuplicateMethod = "Duplicate method definition"; public const string MissingExportedTypeImplementation = "Undefined implementation in ExportedType '{0}' -- ExportedType not emitted"; + public const string TooManyGenericParameters = "Generic parameter count {0} exceeds the maximum of {1}"; } diff --git a/src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs b/src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs index 92606abae0be24..83ce5f2068f0ae 100644 --- a/src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs +++ b/src/tools/ilasm/src/ILAssembler/DocumentCompiler.cs @@ -15,39 +15,70 @@ public sealed class DocumentCompiler { public (ImmutableArray, PEBuilder?) Compile(SourceText document, Func includedDocumentLoader, Func resourceLocator, Options options) { - var inputSource = new AntlrInputStream(document.Text) - { - name = document.Path - }; - CILLexer lexer = new(inputSource); - Dictionary loadedDocuments = new() - { - {document.Path!, document } - }; - PreprocessedTokenSource preprocessor = new(lexer, path => + return Compile([document], includedDocumentLoader, resourceLocator, options); + } + + public (ImmutableArray, PEBuilder?) Compile(ImmutableArray documents, Func includedDocumentLoader, Func resourceLocator, Options options) + { + Dictionary loadedDocuments = new(); + ImmutableArray.Builder diagnostics = ImmutableArray.CreateBuilder(); + + GrammarVisitor? visitor = null; + IReadOnlyDictionary? definedVariables = null; + + foreach (var document in documents) { - var includedDocument = includedDocumentLoader(path); + loadedDocuments[document.Path!] = document; - var includedSource = new AntlrInputStream(includedDocument.Text) + var inputSource = new AntlrInputStream(document.Text) { - name = includedDocument.Path + name = document.Path }; - loadedDocuments.Add(includedDocument.Path, includedDocument); - return new CILLexer(includedSource); - }); + CILLexer lexer = new(inputSource); + PreprocessedTokenSource preprocessor = new(lexer, path => + { + var includedDocument = includedDocumentLoader(path); + var includedSource = new AntlrInputStream(includedDocument.Text) + { + name = includedDocument.Path + }; + loadedDocuments[includedDocument.Path!] = includedDocument; + return new CILLexer(includedSource); + }, text => new CILLexer(new AntlrInputStream(text)), definedVariables); - ImmutableArray.Builder diagnostics = ImmutableArray.CreateBuilder(); - preprocessor.OnPreprocessorSyntaxError += (source, start, length, msg) => - { - diagnostics.Add(new Diagnostic("Preprocessor", DiagnosticSeverity.Error, msg, new Location(new(start, length), loadedDocuments[source]))); - }; + preprocessor.OnPreprocessorSyntaxError += (source, start, length, msg) => + { + if (loadedDocuments.TryGetValue(source, out var sourceText)) + { + diagnostics.Add(new Diagnostic("Preprocessor", DiagnosticSeverity.Error, msg, new Location(new(start, length), sourceText))); + } + else + { + diagnostics.Add(new Diagnostic("Preprocessor", DiagnosticSeverity.Error, msg, new Location(new(start, length), new SourceText("", source)))); + } + }; + + CILParser parser = new(new CommonTokenStream(preprocessor)); + parser.RemoveErrorListeners(); + var parserDiagnostics = ImmutableArray.CreateBuilder(); + parser.AddErrorListener(new ParserErrorListener(parserDiagnostics, loadedDocuments)); + var result = parser.decls(); + + // Add parser diagnostics to the main list + diagnostics.AddRange(parserDiagnostics); - // Note: Parser must use the preprocessor token stream (not the raw lexer) - // to properly handle #include, #define, and other preprocessor directives. - CILParser parser = new(new CommonTokenStream(preprocessor)); - var result = parser.decls(); - GrammarVisitor visitor = new GrammarVisitor(loadedDocuments, options, resourceLocator); - _ = result.Accept(visitor); + visitor ??= new GrammarVisitor(loadedDocuments, options, resourceLocator); + + _ = result.Accept(visitor); + + // Transfer defined constants to the next document + definedVariables = preprocessor.DefinedVariables; + } + + if (visitor is null) + { + return (diagnostics.ToImmutable(), null); + } var image = visitor.BuildImage(); @@ -61,3 +92,29 @@ public sealed class DocumentCompiler return (diagnostics.ToImmutable(), returnImage ? image.Image : null); } } + +internal sealed class ParserErrorListener : Antlr4.Runtime.IAntlrErrorListener +{ + private readonly ImmutableArray.Builder _diagnostics; + private readonly Dictionary _loadedDocuments; + + public ParserErrorListener(ImmutableArray.Builder diagnostics, Dictionary loadedDocuments) + { + _diagnostics = diagnostics; + _loadedDocuments = loadedDocuments; + } + + public void SyntaxError(TextWriter output, IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e) + { + var sourceName = offendingSymbol?.TokenSource?.SourceName ?? ""; + var span = new SourceSpan(offendingSymbol?.StartIndex ?? 0, offendingSymbol is null ? 0 : offendingSymbol.StopIndex - offendingSymbol.StartIndex + 1); + if (_loadedDocuments.TryGetValue(sourceName, out var sourceText)) + { + _diagnostics.Add(new Diagnostic("Parser", DiagnosticSeverity.Error, $"line {line}:{charPositionInLine} {msg}", new Location(span, sourceText))); + } + else + { + _diagnostics.Add(new Diagnostic("Parser", DiagnosticSeverity.Error, $"line {line}:{charPositionInLine} {msg}", new Location(span, new SourceText("", sourceName)))); + } + } +} diff --git a/src/tools/ilasm/src/ILAssembler/EntityRegistry.cs b/src/tools/ilasm/src/ILAssembler/EntityRegistry.cs index 1390668480f048..1ddd8eb3892e92 100644 --- a/src/tools/ilasm/src/ILAssembler/EntityRegistry.cs +++ b/src/tools/ilasm/src/ILAssembler/EntityRegistry.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics; +using System.Linq; using System.Reflection; using System.Reflection.Metadata; using System.Reflection.Metadata.Ecma335; @@ -24,6 +25,7 @@ internal sealed class EntityRegistry private readonly Dictionary _seenFiles = new(); private readonly List _manifestResourceEntities = new(); private readonly Dictionary<(ExportedTypeEntity? ContainingType, string Namespace, string Name), ExportedTypeEntity> _seenExportedTypes = new(); + private readonly List _typeReferences = new(); private readonly List _memberReferences = new(); private readonly Dictionary<(EntityBase, BlobBuilder), MethodSpecificationEntity> _seenMethodSpecs = new(new MethodSpecEqualityComparer()); @@ -102,6 +104,9 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO ((IHasHandle)Assembly).SetHandle(MetadataTokens.EntityHandle(0x20000001)); } + List allGenericParams = []; + List allGenericConstraints = []; + // Now that we've seen all of the entities, we can write them out in the correct order. // Record the entities in the correct order so they are assigned handles. // After this, we'll write out the content of the entities in the correct order. @@ -113,9 +118,12 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO RecordEntityInTable(TableIndex.MethodDef, method); foreach (var param in method.Parameters) { - // COMPAT: Only record param entries for parameters that have names - // or other rows that would refer to it. - if (param.Name is not null + // COMPAT: Always emit Param rows for explicit parameters (sequence > 0) + // to match native ilasm behavior. For the return type parameter (sequence 0), + // only emit if it has attributes, a name, or associated metadata. + if (param.Sequence > 0 + || param.Name is not null + || param.Attributes != ParameterAttributes.None || param.MarshallingDescriptor.Count != 0 || param.HasCustomAttributes || param.HasConstant) @@ -123,15 +131,13 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO RecordEntityInTable(TableIndex.Param, param); } } - // Record generic parameters for methods - foreach (var genericParam in method.GenericParameters) - { - RecordEntityInTable(TableIndex.GenericParam, genericParam); - } - foreach (var constraint in method.GenericParameterConstraints) - { - RecordEntityInTable(TableIndex.GenericParamConstraint, constraint); - } + + // Don't record generic parameters or constraints for methods. + // Entries need to be sorted by the value of the TypeOrMethodDef coded index, + // which can intermix TypeDef and MethodDef generic parameters based on the order of the TypeDef and MethodDef entries. + // We'll record these after processing all TypeDefs and MethodDefs. + allGenericParams.AddRange(method.GenericParameters); + allGenericConstraints.AddRange(method.GenericParameterConstraints); } foreach (var field in type.Fields) { @@ -157,18 +163,65 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO RecordEntityInTable(TableIndex.MethodImpl, impl); } - foreach (var genericParam in type.GenericParameters) + // Don't record generic parameters or constraints for methods. + // Entries need to be sorted by the value of the TypeOrMethodDef coded index, + // which can intermix TypeDef and MethodDef generic parameters based on the order of the TypeDef and MethodDef entries. + // We'll record these after processing all TypeDefs and MethodDefs. + allGenericParams.AddRange(type.GenericParameters); + allGenericConstraints.AddRange(type.GenericParameterConstraints); + } + + // Now that we've processed all TypeDefs and their corresponding GenericParam and GenericParamConstraint entries, + // we can process the GenericParam and GenericParamConstrain entries + // and maintain ordering requirements for TypeOrMethodDef coded index values. + allGenericParams.Sort((gp1, gp2) => + { + var owner1 = gp1.Owner!.Handle; + var owner2 = gp2.Owner!.Handle; + int row1 = MetadataTokens.GetRowNumber(owner1); + int row2 = MetadataTokens.GetRowNumber(owner2); + int tag1 = owner1.Kind == HandleKind.TypeDefinition ? 0 : 1; + int tag2 = owner2.Kind == HandleKind.TypeDefinition ? 0 : 1; + int compare = (row1 << 1 | tag1).CompareTo(row2 << 1 | tag2); + if (compare != 0) { - RecordEntityInTable(TableIndex.GenericParam, genericParam); + return compare; } + return gp1.Index.CompareTo(gp2.Index); + }); - // COMPAT: Record the generic parameter constraints based on the order saved in the TypeDef - foreach (var constraint in type.GenericParameterConstraints) - { - RecordEntityInTable(TableIndex.GenericParamConstraint, constraint); - } + foreach (GenericParameterEntity genericParam in allGenericParams) + { + // GenericParam index is stored as a 2-byte value; skip params beyond the limit + if (genericParam.Index > ushort.MaxValue) + continue; + + RecordEntityInTable(TableIndex.GenericParam, genericParam); + } + + allGenericConstraints.Sort((c1, c2) => + { + var owner1 = c1.Owner!.Handle; + var owner2 = c2.Owner!.Handle; + int row1 = MetadataTokens.GetRowNumber(owner1); + int row2 = MetadataTokens.GetRowNumber(owner2); + return row1.CompareTo(row2); + }); + + foreach (GenericParameterConstraintEntity constraint in allGenericConstraints) + { + RecordEntityInTable(TableIndex.GenericParamConstraint, constraint); } + // Resolve TypeRef entities to local TypeDef entities when possible. + // This must happen before MemberRef resolution so that MemberRef parents + // that point to local types already have TypeDef handles. + ResolveTypeReferences(); + + // Create a signature rewriter that remaps PseudoHandle-based TypeRef coded indices + // in blobs to the resolved real handles via list index lookup. + SignatureRewriter signatureRewriter = new(_typeReferences); + foreach (MemberReferenceEntity memberReferenceEntity in _memberReferences) { ResolveAndRecordMemberReference(memberReferenceEntity); @@ -181,8 +234,16 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO foreach (TypeReferenceEntity type in GetSeenEntities(TableIndex.TypeRef)) { EntityBase resolutionScope = type.ResolutionScope; + // For nested TypeRefs whose outer type was resolved to a TypeDef, + // use the resolved handle's TypeDef handle for the resolution scope. + EntityHandle scopeHandle = resolutionScope switch + { + FakeTypeEntity fakeScope => fakeScope.ResolutionScopeColumnHandle, + TypeReferenceEntity { Handle.Kind: HandleKind.TypeDefinition } resolvedOuter => resolvedOuter.Handle, + _ => resolutionScope.Handle + }; builder.AddTypeReference( - resolutionScope is FakeTypeEntity fakeScope ? fakeScope.ResolutionScopeColumnHandle : resolutionScope.Handle, + scopeHandle, builder.GetOrAddString(type.Namespace), builder.GetOrAddString(type.Name)); } @@ -198,14 +259,21 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO GetFieldHandleForList(type.Fields, GetSeenEntities(TableIndex.TypeDef), type => ((TypeDefinitionEntity)type).Fields, i), GetMethodHandleForList(type.Methods, GetSeenEntities(TableIndex.TypeDef), type => ((TypeDefinitionEntity)type).Methods, i)); - builder.AddEventMap( - (TypeDefinitionHandle)type.Handle, - GetEventHandleForList(type.Events, GetSeenEntities(TableIndex.TypeDef), type => ((TypeDefinitionEntity)type).Events, i)); - builder.AddPropertyMap( - (TypeDefinitionHandle)type.Handle, - GetPropertyHandleForList(type.Properties, GetSeenEntities(TableIndex.TypeDef), type => ((TypeDefinitionEntity)type).Properties, i)); + if (type.Events.Count > 0) + { + builder.AddEventMap( + (TypeDefinitionHandle)type.Handle, + GetEventHandleForList(type.Events, GetSeenEntities(TableIndex.TypeDef), type => ((TypeDefinitionEntity)type).Events, i)); + } + if (type.Properties.Count > 0) + { + builder.AddPropertyMap( + (TypeDefinitionHandle)type.Handle, + GetPropertyHandleForList(type.Properties, GetSeenEntities(TableIndex.TypeDef), type => ((TypeDefinitionEntity)type).Properties, i)); + } - if (type.PackingSize is not null || type.ClassSize is not null) + if (type.PackingSize is not null || type.ClassSize is not null + || (type.Attributes & TypeAttributes.LayoutMask) is TypeAttributes.ExplicitLayout) { builder.AddTypeLayout( (TypeDefinitionHandle)type.Handle, @@ -221,10 +289,23 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO foreach (FieldDefinitionEntity fieldDef in GetSeenEntities(TableIndex.Field)) { + var fieldAttributes = fieldDef.Attributes; + if (fieldDef.HasConstant) + { + fieldAttributes |= FieldAttributes.HasDefault; + } + if (fieldDef.MarshallingDescriptor is { Count: > 0 }) + { + fieldAttributes |= FieldAttributes.HasFieldMarshal; + } + if (fieldDef.DataDeclarationName is not null && mappedFieldDataNames.ContainsKey(fieldDef.DataDeclarationName)) + { + fieldAttributes |= FieldAttributes.HasFieldRVA; + } builder.AddFieldDefinition( - fieldDef.Attributes, + fieldAttributes, builder.GetOrAddString(fieldDef.Name), - fieldDef.Signature!.Count == 0 ? default : builder.GetOrAddBlob(fieldDef.Signature)); + fieldDef.Signature!.Count == 0 ? default : builder.GetOrAddBlob(RewriteSignatureBlob(fieldDef.Signature, signatureRewriter))); if (fieldDef.Offset is not null) { @@ -236,7 +317,7 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO builder.AddFieldRelativeVirtualAddress((FieldDefinitionHandle)fieldDef.Handle, dataOffset); } - if (fieldDef.MarshallingDescriptor is not null) + if (fieldDef.MarshallingDescriptor is { Count: > 0 }) { builder.AddMarshallingDescriptor(fieldDef.Handle, builder.GetOrAddBlob(fieldDef.MarshallingDescriptor)); } @@ -247,23 +328,92 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO } } + var bodyStreamEncoder = new MethodBodyStreamEncoder(ilStream); + for (int i = 0; i < GetSeenEntities(TableIndex.MethodDef).Count; i++) { MethodDefinitionEntity methodDef = (MethodDefinitionEntity)GetSeenEntities(TableIndex.MethodDef)[i]; - int rva = 0; + int bodyOffset = -1; if (methodDef.MethodBody.CodeBuilder.Count != 0) { - rva = ilStream.Count; - methodDef.MethodBody.CodeBuilder.WriteContentTo(ilStream); + // Add deferred exception regions now that TypeRef→TypeDef resolution is complete. + // Catch clause type handles are read here, after resolution has set the real handle. + foreach (var region in methodDef.ExceptionRegions) + { + switch (region) + { + case ExceptionRegion.CatchRegion catchRegion: + methodDef.MethodBody.ControlFlowBuilder!.AddCatchRegion(catchRegion.TryStart, catchRegion.TryEnd, catchRegion.HandlerStart, catchRegion.HandlerEnd, catchRegion.CatchType.Handle); + break; + case ExceptionRegion.FinallyRegion finallyRegion: + methodDef.MethodBody.ControlFlowBuilder!.AddFinallyRegion(finallyRegion.TryStart, finallyRegion.TryEnd, finallyRegion.HandlerStart, finallyRegion.HandlerEnd); + break; + case ExceptionRegion.FaultRegion faultRegion: + methodDef.MethodBody.ControlFlowBuilder!.AddFaultRegion(faultRegion.TryStart, faultRegion.TryEnd, faultRegion.HandlerStart, faultRegion.HandlerEnd); + break; + case ExceptionRegion.FilterRegion filterRegion: + methodDef.MethodBody.ControlFlowBuilder!.AddFilterRegion(filterRegion.TryStart, filterRegion.TryEnd, filterRegion.HandlerStart, filterRegion.HandlerEnd, filterRegion.FilterStart); + break; + } + } + + StandaloneSignatureHandle localsSigHandle = methodDef.LocalsSignature is not null + ? (StandaloneSignatureHandle)methodDef.LocalsSignature.Handle + : default; + try + { + bodyOffset = bodyStreamEncoder.AddMethodBody( + methodDef.MethodBody, + methodDef.MaxStack, + localsSigHandle, + methodDef.BodyAttributes); + } + catch (InvalidOperationException) + { + // Method has unresolved labels or other body errors. + // Emit a minimal valid method body containing the raw IL bytes so + // the PE can still be emitted (error diagnostics are already recorded). + var fallbackBody = bodyStreamEncoder.AddMethodBody( + methodDef.MethodBody.CodeBuilder.Count, + methodDef.MaxStack, + exceptionRegionCount: 0, + hasSmallExceptionRegions: true, + localsSigHandle, + methodDef.BodyAttributes); + bodyOffset = fallbackBody.Offset; + var writer1 = new BlobWriter(fallbackBody.Instructions); + methodDef.MethodBody.CodeBuilder.WriteContentTo(ref writer1); + } + catch (ArgumentOutOfRangeException) + { + // Exception handler regions have invalid ranges (e.g., from parse + // errors that produced malformed control flow). Emit the IL in a + // minimal valid method body and omit exception regions in fallback. + var fallbackBody = bodyStreamEncoder.AddMethodBody( + methodDef.MethodBody.CodeBuilder.Count, + methodDef.MaxStack, + exceptionRegionCount: 0, + hasSmallExceptionRegions: true, + localsSigHandle, + methodDef.BodyAttributes); + bodyOffset = fallbackBody.Offset; + var writer2 = new BlobWriter(fallbackBody.Instructions); + methodDef.MethodBody.CodeBuilder.WriteContentTo(ref writer2); + } } + var methodAttributes = methodDef.MethodAttributes; + if (methodDef.MethodImportInformation is not null) + { + methodAttributes |= MethodAttributes.PinvokeImpl; + } builder.AddMethodDefinition( - methodDef.MethodAttributes, + methodAttributes, methodDef.ImplementationAttributes, builder.GetOrAddString(methodDef.Name), - builder.GetOrAddBlob(methodDef.MethodSignature!), - rva, + builder.GetOrAddBlob(RewriteSignatureBlob(methodDef.MethodSignature!, signatureRewriter)), + bodyOffset, GetParameterHandleForList(methodDef.Parameters, GetSeenEntities(TableIndex.MethodDef), method => ((MethodDefinitionEntity)method).Parameters, i)); if (methodDef.MethodImportInformation is not null) @@ -278,12 +428,21 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO foreach (ParameterEntity param in GetSeenEntities(TableIndex.Param)) { + var paramAttributes = param.Attributes; + if (param.HasConstant) + { + paramAttributes |= ParameterAttributes.HasDefault; + } + if (param.MarshallingDescriptor.Count != 0) + { + paramAttributes |= ParameterAttributes.HasFieldMarshal; + } builder.AddParameter( - param.Attributes, + paramAttributes, param.Name is null ? default : builder.GetOrAddString(param.Name), param.Sequence); - if (param.MarshallingDescriptor is not null) + if (param.MarshallingDescriptor.Count != 0) { builder.AddMarshallingDescriptor(param.Handle, builder.GetOrAddBlob(param.MarshallingDescriptor)); } @@ -301,12 +460,25 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO impl.InterfaceType is FakeTypeEntity fakeType ? fakeType.TypeColumnHandle : impl.InterfaceType.Handle); } + foreach (MethodImplementationEntity impl in GetSeenEntities(TableIndex.MethodImpl)) + { + builder.AddMethodImplementation( + (TypeDefinitionHandle)impl.MethodBody.ContainingType.Handle, + impl.MethodBody.Handle, + impl.MethodDeclaration.Handle); + } + foreach (MemberReferenceEntity memberRef in _memberReferences) { + // Skip member references that were resolved to local MethodDef or FieldDef tokens. + if (memberRef.Handle.Kind is HandleKind.MethodDefinition or HandleKind.FieldDefinition) + { + continue; + } builder.AddMemberReference( memberRef.Parent.Handle, builder.GetOrAddString(memberRef.Name), - builder.GetOrAddBlob(memberRef.Signature)); + builder.GetOrAddBlob(RewriteSignatureBlob(memberRef.Signature, signatureRewriter))); } foreach (DeclarativeSecurityAttributeEntity declSecurity in GetSeenEntities(TableIndex.DeclSecurity)) @@ -335,7 +507,7 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO foreach (StandaloneSignatureEntity standaloneSig in GetSeenEntities(TableIndex.StandAloneSig)) { builder.AddStandaloneSignature( - builder.GetOrAddBlob(standaloneSig.Signature)); + builder.GetOrAddBlob(RewriteSignatureBlob(standaloneSig.Signature, signatureRewriter))); } foreach (EventEntity evt in GetSeenEntities(TableIndex.Event)) @@ -347,7 +519,10 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO foreach (var accessor in evt.Accessors) { - builder.AddMethodSemantics(evt.Handle, accessor.Semantic, (MethodDefinitionHandle)accessor.Method.Handle); + if (accessor.Method.Handle.Kind == HandleKind.MethodDefinition) + { + builder.AddMethodSemantics(evt.Handle, accessor.Semantic, (MethodDefinitionHandle)accessor.Method.Handle); + } } } @@ -356,11 +531,14 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO builder.AddProperty( prop.Attributes, builder.GetOrAddString(prop.Name), - builder.GetOrAddBlob(prop.Type)); + builder.GetOrAddBlob(RewriteSignatureBlob(prop.Type, signatureRewriter))); foreach (var accessor in prop.Accessors) { - builder.AddMethodSemantics(prop.Handle, accessor.Semantic, (MethodDefinitionHandle)accessor.Method.Handle); + if (accessor.Method.Handle.Kind == HandleKind.MethodDefinition) + { + builder.AddMethodSemantics(prop.Handle, accessor.Semantic, (MethodDefinitionHandle)accessor.Method.Handle); + } } if (prop.HasConstant) @@ -378,7 +556,7 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO { builder.AddAssemblyReference( builder.GetOrAddString(asmRef.Name), - asmRef.Version ?? new Version(), + asmRef.Version ?? new Version(0, 0, 0, 0), asmRef.Culture is null ? default : builder.GetOrAddString(asmRef.Culture), asmRef.PublicKeyOrToken is null ? default : builder.GetOrAddBlob(asmRef.PublicKeyOrToken), asmRef.Flags, @@ -387,7 +565,7 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO foreach (TypeSpecificationEntity typeSpec in GetSeenEntities(TableIndex.TypeSpec)) { - builder.AddTypeSpecification(builder.GetOrAddBlob(typeSpec.Signature)); + builder.AddTypeSpecification(builder.GetOrAddBlob(RewriteTypeSpecBlob(typeSpec.Signature, signatureRewriter))); } if (Assembly is not null) @@ -396,7 +574,7 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO var assemblyFlags = Assembly.Flags | (AssemblyFlags)((int)Assembly.ProcessorArchitecture << 4); builder.AddAssembly( builder.GetOrAddString(Assembly.Name), - Assembly.Version ?? new Version(), + Assembly.Version ?? new Version(0, 0, 0, 0), Assembly.Culture is null ? default : builder.GetOrAddString(Assembly.Culture), Assembly.PublicKeyOrToken is null ? default : builder.GetOrAddBlob(Assembly.PublicKeyOrToken), assemblyFlags, @@ -438,11 +616,14 @@ public void WriteContentTo(MetadataBuilder builder, BlobBuilder ilStream, IReadO foreach (MethodSpecificationEntity methodSpec in GetSeenEntities(TableIndex.MethodSpec)) { - builder.AddMethodSpecification(methodSpec.Parent.Handle, builder.GetOrAddBlob(methodSpec.Signature)); + builder.AddMethodSpecification(methodSpec.Parent.Handle, builder.GetOrAddBlob(RewriteMethodSpecBlob(methodSpec.Signature, signatureRewriter))); } foreach (GenericParameterEntity genericParam in GetSeenEntities(TableIndex.GenericParam)) { + // GenericParam index is stored as a 2-byte value; skip params beyond the limit + if (genericParam.Index > ushort.MaxValue) + continue; builder.AddGenericParameter( genericParam.Owner!.Handle, genericParam.Attributes, @@ -572,7 +753,12 @@ public AssemblyReferenceEntity GetCoreLibAssemblyReference() ?? FindAssemblyReference("System.Runtime") ?? FindAssemblyReference("mscorlib") ?? FindAssemblyReference("netstandard") - ?? GetOrCreateAssemblyReference("mscorlib", new Version(4, 0), culture: null, publicKeyOrToken: null, 0, ProcessorArchitecture.None); + ?? GetOrCreateAssemblyReference("mscorlib", new Version(0, 0, 0, 0), culture: null, publicKeyOrToken: null, 0, ProcessorArchitecture.None); + } + + private static bool IsCoreLibAssemblyName(string name) + { + return name is "mscorlib" or "System.Runtime" or "System.Private.CoreLib" or "netstandard"; } public interface IHasHandle @@ -671,7 +857,7 @@ public EntityBase ResolveHandleToEntity(EntityHandle entityHandle) if (_seenEntities.TryGetValue(tableIndex, out var entity)) { int rowNumber = MetadataTokens.GetRowNumber(entityHandle); - if (entity.Count < rowNumber - 1) + if (rowNumber >= 1 && rowNumber <= entity.Count) { return entity[rowNumber - 1]; } @@ -682,6 +868,18 @@ public EntityBase ResolveHandleToEntity(EntityHandle entityHandle) public TypeReferenceEntity GetOrCreateTypeReference(EntityBase resolutionContext, TypeName name) { + // COMPAT: When the resolution scope is a corelib assembly ref (mscorlib, System.Runtime, etc.), + // redirect to the preferred corelib assembly ref to match native ilasm behavior. + // Native ilasm always uses the preferred corelib for well-known types. + if (resolutionContext is AssemblyReferenceEntity asmRefScope && IsCoreLibAssemblyName(asmRefScope.Name)) + { + var preferredCoreLib = GetCoreLibAssemblyReference(); + if (preferredCoreLib != asmRefScope) + { + resolutionContext = preferredCoreLib; + } + } + Stack<(string Namespace, string Name)> allTypeNames = new(); // Record all of the containing type names for (TypeName? containingType = name; containingType is not null; containingType = containingType.ContainingTypeName) @@ -698,8 +896,14 @@ public TypeReferenceEntity GetOrCreateTypeReference(EntityBase resolutionContext while (allTypeNames.Count > 0) { var typeName = allTypeNames.Pop(); - scope = GetOrCreateEntity((scope, typeName.Namespace, typeName.Name), TableIndex.TypeRef, _seenTypeRefs, value => new TypeReferenceEntity(scope, value.Namespace, value.Name), typeRef => + var key = (scope, typeName.Namespace, typeName.Name); + if (!_seenTypeRefs.TryGetValue(key, out TypeReferenceEntity? typeRef)) { + typeRef = new TypeReferenceEntity(scope, typeName.Namespace, typeName.Name); + _seenTypeRefs.Add(key, typeRef); + _typeReferences.Add(typeRef); + typeRef.PseudoHandle = MetadataTokens.TypeReferenceHandle(_typeReferences.Count); + StringBuilder builder = new(typeRef.Namespace.Length + typeRef.Name.Length + 1); builder.AppendFormat("{0}.{1}", typeRef.Namespace, typeRef.Name); if (resolutionContext is AssemblyReferenceEntity asmRef) @@ -714,7 +918,8 @@ public TypeReferenceEntity GetOrCreateTypeReference(EntityBase resolutionContext builder.Append(assemblyNameInfo.FullName); } typeRef.ReflectionNotation = builder.ToString(); - }); + } + scope = typeRef; } return (TypeReferenceEntity)scope; } @@ -786,6 +991,14 @@ public MemberReferenceEntity CreateLazilyRecordedMemberReference(TypeEntity cont private sealed class SignatureRewriter : ISignatureTypeProvider { + private readonly List? _typeReferences; + + public SignatureRewriter() { } + + public SignatureRewriter(List typeReferences) + { + _typeReferences = typeReferences; + } public readonly struct BlobOrHandle { public BlobOrHandle(BlobBuilder? blob) @@ -826,9 +1039,12 @@ public void WriteBlobTo(BlobBuilder builder) public BlobOrHandle GetArrayType(BlobOrHandle elementType, ArrayShape shape) { - var encoder = new ArrayShapeEncoder(elementType); + var builder = new BlobBuilder(); + builder.WriteByte((byte)SignatureTypeCode.Array); + elementType.WriteBlobTo(builder); + var encoder = new ArrayShapeEncoder(builder); encoder.Shape(shape.Rank, shape.Sizes, shape.LowerBounds); - return encoder.Builder; + return builder; } public BlobOrHandle GetByReferenceType(BlobOrHandle elementType) @@ -891,6 +1107,8 @@ public BlobOrHandle GetModifiedType(BlobOrHandle modifier, BlobOrHandle unmodifi { builder.WriteByte((byte)SignatureTypeCode.OptionalModifier); } + // The modifier is a TypeDefOrRefOrSpec coded index (no CLASS/VALUETYPE prefix). + builder.WriteCompressedInteger(CodedIndex.TypeDefOrRefOrSpec(modifier.Handle)); unmodifiedType.WriteBlobTo(builder); return builder; } @@ -911,7 +1129,15 @@ public BlobOrHandle GetPointerType(BlobOrHandle elementType) public BlobOrHandle GetPrimitiveType(PrimitiveTypeCode typeCode) { var paramEncoder = new ParameterTypeEncoder(new BlobBuilder()); - paramEncoder.Type().PrimitiveType(typeCode); + if ((int)typeCode >= 2 && (int)typeCode <= 14) + { + paramEncoder.Type().PrimitiveType(typeCode); + } + else + { + // Invalid type code from malformed signature - write raw byte + paramEncoder.Builder.WriteByte((byte)typeCode); + } return paramEncoder.Builder; } public BlobOrHandle GetSZArrayType(BlobOrHandle elementType) @@ -927,7 +1153,16 @@ public BlobOrHandle GetTypeFromDefinition(MetadataReader reader, TypeDefinitionH } public BlobOrHandle GetTypeFromReference(MetadataReader reader, TypeReferenceHandle handle, byte rawTypeKind) { - return new BlobOrHandle(handle, rawTypeKind == (byte)SignatureTypeKind.ValueType); + bool isValueType = rawTypeKind == (byte)SignatureTypeKind.ValueType; + if (_typeReferences is not null) + { + int row = MetadataTokens.GetRowNumber(handle); + if (row >= 1 && row <= _typeReferences.Count) + { + return new BlobOrHandle(_typeReferences[row - 1].Handle, isValueType); + } + } + return new BlobOrHandle(handle, isValueType); } public BlobOrHandle GetTypeFromSpecification(MetadataReader reader, EmptyGenericContext genericContext, TypeSpecificationHandle handle, byte rawTypeKind) @@ -939,13 +1174,273 @@ public struct EmptyGenericContext { } } + private void ResolveTypeReferences() + { + // Resolve TypeRef entities that refer to locally-defined types. + // For each TypeRef, if the resolution scope matches the current assembly + // and a matching TypeDef exists, assign the TypeDef handle to the TypeRef entity. + // Otherwise, record it in the TypeRef table with a real TypeRef handle. + // Process outermost types first so nested types can check if their parent was resolved. + foreach (TypeReferenceEntity typeRef in _typeReferences) + { + if (TryResolveTypeReferenceToDefinition(typeRef)) + { + continue; + } + RecordEntityInTable(TableIndex.TypeRef, typeRef); + } + } + + private bool TryResolveTypeReferenceToDefinition(TypeReferenceEntity typeRef) + { + EntityBase resolutionScope = typeRef.ResolutionScope; + + // Nested TypeRef: resolution scope is another TypeRef. + // If the outer type was resolved to a TypeDef, look up the nested type. + if (resolutionScope is TypeReferenceEntity outerTypeRef) + { + if (outerTypeRef.Handle.Kind == HandleKind.TypeDefinition) + { + var outerTypeDef = (TypeDefinitionEntity)GetSeenEntities(TableIndex.TypeDef)[MetadataTokens.GetRowNumber(outerTypeRef.Handle) - 1]; + var nestedTypeDef = FindTypeDefinition(outerTypeDef, typeRef.Namespace, typeRef.Name); + if (nestedTypeDef is not null) + { + ((IHasHandle)typeRef).SetHandle(nestedTypeDef.Handle); + return true; + } + } + return false; + } + + // Top-level TypeRef: check if the resolution scope is a self-referencing assembly. + if (resolutionScope is AssemblyReferenceEntity asmRef) + { + if (Assembly is not null && string.Equals(asmRef.Name, Assembly.Name, StringComparison.OrdinalIgnoreCase)) + { + var typeDef = FindTypeDefinition(null, typeRef.Namespace, typeRef.Name); + if (typeDef is not null) + { + ((IHasHandle)typeRef).SetHandle(typeDef.Handle); + return true; + } + } + return false; + } + + // Resolution scope is module-level (ModuleEntity/ModuleReferenceEntity) — local type. + if (resolutionScope is ModuleEntity or ModuleReferenceEntity) + { + var typeDef = FindTypeDefinition(null, typeRef.Namespace, typeRef.Name); + if (typeDef is not null) + { + ((IHasHandle)typeRef).SetHandle(typeDef.Handle); + return true; + } + } + + return false; + } + + /// + /// Rewrites a signature blob, replacing PseudoHandle-based TypeRef coded indices + /// with resolved Handle-based coded indices. Returns the original blob if no mapping + /// is needed or if the signature cannot be decoded. + /// + private static BlobBuilder RewriteSignatureBlob(BlobBuilder original, SignatureRewriter rewriter) + { + var bytes = original.ToArray(); + if (bytes.Length == 0) + { + return original; + } + + try + { + var header = new SignatureHeader(bytes[0]); + return header.Kind switch + { + SignatureKind.Method => RewriteMethodSignatureBlob(bytes, rewriter), + SignatureKind.Field => RewriteFieldSignatureBlob(bytes, rewriter), + SignatureKind.LocalVariables => RewriteLocalSignatureBlob(bytes, rewriter), + SignatureKind.Property => RewritePropertySignatureBlob(bytes, rewriter), + _ => original + }; + } + catch + { + return original; + } + } + + /// + /// Rewrites a TypeSpec signature blob (which is just a type, not a full signature with header). + /// + private BlobBuilder RewriteTypeSpecBlob(BlobBuilder original, SignatureRewriter rewriter) + { + var bytes = original.ToArray(); + if (bytes.Length == 0) + { + return original; + } + + try + { + var decoder = new SignatureDecoder(rewriter, null!, default); + unsafe + { + fixed (byte* ptr = bytes) + { + var reader = new BlobReader(ptr, bytes.Length); + var decoded = decoder.DecodeType(ref reader); + BlobBuilder result = decoded; + return result; + } + } + } + catch + { + return original; + } + } + + /// + /// Rewrites a MethodSpec instantiation blob (generic type arguments). + /// + private BlobBuilder RewriteMethodSpecBlob(BlobBuilder original, SignatureRewriter rewriter) + { + var bytes = original.ToArray(); + if (bytes.Length == 0) + { + return original; + } + + try + { + var decoder = new SignatureDecoder(rewriter, null!, default); + unsafe + { + fixed (byte* ptr = bytes) + { + var reader = new BlobReader(ptr, bytes.Length); + var typeArgs = decoder.DecodeMethodSpecificationSignature(ref reader); + var newBlob = new BlobBuilder(); + const byte methodSpecSignatureHeader = 0x0A; + newBlob.WriteByte(methodSpecSignatureHeader); + newBlob.WriteCompressedInteger(typeArgs.Length); + foreach (var typeArg in typeArgs) + { + typeArg.WriteBlobTo(newBlob); + } + return newBlob; + } + } + } + catch + { + return original; + } + } + + private static BlobBuilder RewriteMethodSignatureBlob(byte[] bytes, SignatureRewriter rewriter) + { + var decoder = new SignatureDecoder(rewriter, null!, default); + unsafe + { + fixed (byte* ptr = bytes) + { + var reader = new BlobReader(ptr, bytes.Length); + var sig = decoder.DecodeMethodSignature(ref reader); + + var newBlob = new BlobBuilder(); + var encoder = new BlobEncoder(newBlob); + encoder.MethodSignature(sig.Header.CallingConvention, sig.GenericParameterCount, sig.Header.Attributes.HasFlag(SignatureAttributes.Instance)) + .Parameters(sig.ParameterTypes.Length, out var retBuilder, out var paramsBuilder); + sig.ReturnType.WriteBlobTo(retBuilder.Builder); + for (int i = 0; i < sig.ParameterTypes.Length; i++) + { + if (sig.RequiredParameterCount != sig.ParameterTypes.Length && i == sig.RequiredParameterCount) + { + paramsBuilder.StartVarArgs(); + } + sig.ParameterTypes[i].WriteBlobTo(paramsBuilder.AddParameter().Builder); + } + return newBlob; + } + } + } + + private static BlobBuilder RewriteFieldSignatureBlob(byte[] bytes, SignatureRewriter rewriter) + { + var decoder = new SignatureDecoder(rewriter, null!, default); + unsafe + { + fixed (byte* ptr = bytes) + { + var reader = new BlobReader(ptr, bytes.Length); + var fieldType = decoder.DecodeFieldSignature(ref reader); + + var newBlob = new BlobBuilder(); + newBlob.WriteByte((byte)SignatureKind.Field); // 0x06 + fieldType.WriteBlobTo(newBlob); + return newBlob; + } + } + } + + private static BlobBuilder RewriteLocalSignatureBlob(byte[] bytes, SignatureRewriter rewriter) + { + var decoder = new SignatureDecoder(rewriter, null!, default); + unsafe + { + fixed (byte* ptr = bytes) + { + var reader = new BlobReader(ptr, bytes.Length); + var localTypes = decoder.DecodeLocalSignature(ref reader); + + var newBlob = new BlobBuilder(); + var encoder = new BlobEncoder(newBlob); + var localsEncoder = encoder.LocalVariableSignature(localTypes.Length); + foreach (var localType in localTypes) + { + localType.WriteBlobTo(localsEncoder.AddVariable().Builder); + } + return newBlob; + } + } + } + + private static BlobBuilder RewritePropertySignatureBlob(byte[] bytes, SignatureRewriter rewriter) + { + var decoder = new SignatureDecoder(rewriter, null!, default); + unsafe + { + fixed (byte* ptr = bytes) + { + var reader = new BlobReader(ptr, bytes.Length); + var sig = decoder.DecodeMethodSignature(ref reader); + + var newBlob = new BlobBuilder(); + var encoder = new BlobEncoder(newBlob); + encoder.PropertySignature(sig.Header.Attributes.HasFlag(SignatureAttributes.Instance)) + .Parameters(sig.ParameterTypes.Length, out var retBuilder, out var paramsBuilder); + sig.ReturnType.WriteBlobTo(retBuilder.Builder); + for (int i = 0; i < sig.ParameterTypes.Length; i++) + { + sig.ParameterTypes[i].WriteBlobTo(paramsBuilder.AddParameter().Builder); + } + return newBlob; + } + } + } + private void ResolveAndRecordMemberReference(MemberReferenceEntity memberRef) { // We need to resolve a MemberReference in a few scenarios: // 1. The MemberReference references a local MethodDefinition // - This case may occur when a method is referenced by a property or event, which can only reference MethodDefinition entities - // TODO-COMPAT: The following scenarios are required for compat with the existing ILASM, but are not required to produce valid metadata: + // - This also produces compat with the existing ILASM, which always resolves local method references to MethodDef tokens // 2. The MemberReference refers to a local FieldDefinition + // - This produces compat with the existing ILASM, which always resolves local field references to FieldDef tokens var signature = memberRef.Signature.ToArray(); SignatureHeader header = new(signature[0]); @@ -955,28 +1450,65 @@ private void ResolveAndRecordMemberReference(MemberReferenceEntity memberRef) { UpdateMemberRefForVarargSignatures(memberRef, signature); } - switch (memberRef.Parent) + if (TryResolveMethodReference(memberRef)) + { + return; + } + } + else if (header.Kind == SignatureKind.Field) + { + if (TryResolveFieldReference(memberRef)) { - // Use this weird construction to look up TypeDefs as we may change TypeRef resolution to use a similar model to MemberReference - // where we always return a TypeReference type, but it might just point to a TypeDef handle. - case TypeEntity { Handle.Kind: HandleKind.TypeDefinition } type: + return; + } + } + RecordEntityInTable(TableIndex.MemberRef, memberRef); + } + + private bool TryResolveMethodReference(MemberReferenceEntity memberRef) + { + switch (memberRef.Parent) + { + // Use this weird construction to look up TypeDefs as we may change TypeRef resolution to use a similar model to MemberReference + // where we always return a TypeReference type, but it might just point to a TypeDef handle. + case TypeEntity { Handle.Kind: HandleKind.TypeDefinition } type: + { + var typeDef = (TypeDefinitionEntity)GetSeenEntities(TableIndex.TypeDef)[MetadataTokens.GetRowNumber(type.Handle) - 1]; + foreach (var method in typeDef.Methods) { - var typeDef = (TypeDefinitionEntity)GetSeenEntities(TableIndex.TypeDef)[MetadataTokens.GetRowNumber(type.Handle) - 1]; - // Look on this type for methods with the same name and signature - foreach (var method in typeDef.Methods) + if (method.Name == memberRef.Name + && method.MethodSignature!.ContentEquals(memberRef.Signature)) { - if (method.Name == memberRef.Name - && method.MethodSignature!.ContentEquals(memberRef.Signature)) - { - ((IHasHandle)memberRef).SetHandle(method.Handle); - return; - } + ((IHasHandle)memberRef).SetHandle(method.Handle); + return true; } } - break; - } + } + break; } - RecordEntityInTable(TableIndex.MemberRef, memberRef); + return false; + } + + private bool TryResolveFieldReference(MemberReferenceEntity memberRef) + { + switch (memberRef.Parent) + { + case TypeEntity { Handle.Kind: HandleKind.TypeDefinition } type: + { + var typeDef = (TypeDefinitionEntity)GetSeenEntities(TableIndex.TypeDef)[MetadataTokens.GetRowNumber(type.Handle) - 1]; + foreach (var field in typeDef.Fields) + { + if (field.Name == memberRef.Name + && field.Signature.ContentEquals(memberRef.Signature)) + { + ((IHasHandle)memberRef).SetHandle(field.Handle); + return true; + } + } + } + break; + } + return false; } private void UpdateMemberRefForVarargSignatures(MemberReferenceEntity memberRef, byte[] signature) @@ -987,34 +1519,50 @@ private void UpdateMemberRefForVarargSignatures(MemberReferenceEntity memberRef, // TODO-SRM: Propose a public API to construct a blob reader over a byte array or ReadOnlyMemory // to avoid the unsafe block. // Alternatively, propose an API to get the corresponding MethodDefSig for a MethodRefSig and move all of this logic into SRM. - unsafe + try { - fixed (byte* ptr = &signature[0]) + unsafe { - var reader = new BlobReader(ptr, signature.Length); - var methodSignature = decoder.DecodeMethodSignature(ref reader); - - if (methodSignature.RequiredParameterCount != methodSignature.ParameterTypes.Length) + fixed (byte* ptr = &signature[0]) { - hasVarargParameters = true; + var reader = new BlobReader(ptr, signature.Length); + var methodSignature = decoder.DecodeMethodSignature(ref reader); - methodDefSig.MethodSignature(methodSignature.Header.CallingConvention, methodSignature.GenericParameterCount, methodSignature.Header.Attributes.HasFlag(SignatureAttributes.Instance)) - .Parameters(methodSignature.RequiredParameterCount, out var retTypeBuilder, out var parametersEncoder); - methodSignature.ReturnType.WriteBlobTo(retTypeBuilder.Builder); - for (int i = 0; i < methodSignature.RequiredParameterCount; i++) + if (methodSignature.RequiredParameterCount != methodSignature.ParameterTypes.Length) { - methodSignature.ParameterTypes[i].WriteBlobTo(parametersEncoder.AddParameter().Builder); + hasVarargParameters = true; + + methodDefSig.MethodSignature(methodSignature.Header.CallingConvention, methodSignature.GenericParameterCount, methodSignature.Header.Attributes.HasFlag(SignatureAttributes.Instance)) + .Parameters(methodSignature.RequiredParameterCount, out var retTypeBuilder, out var parametersEncoder); + methodSignature.ReturnType.WriteBlobTo(retTypeBuilder.Builder); + for (int i = 0; i < methodSignature.RequiredParameterCount; i++) + { + methodSignature.ParameterTypes[i].WriteBlobTo(parametersEncoder.AddParameter().Builder); + } } } } } + catch (BadImageFormatException) + { + // Signature contains constructs (e.g., sentinel markers) that the + // SignatureDecoder cannot parse. Skip vararg processing and emit + // the MemberRef with its original signature. + return; + } // If the method has vararg parameters, then this needs to be a MemberRef whose parent is a reference to the method with the signature without any vararg parameters. if (hasVarargParameters) { var methodRef = new MemberReferenceEntity(memberRef.Parent, memberRef.Name, methodDefSig.Builder); ResolveAndRecordMemberReference(methodRef); - memberRef.SetMemberRefParent(methodRef); + // Only reparent the call-site MemberRef if the base method resolved to a MethodDef. + // MemberRef is not a valid MemberRefParent in the coded index, so we can only + // reparent when the inner ref resolved to MethodDef. + if (methodRef.Handle.Kind == HandleKind.MethodDefinition) + { + memberRef.SetMemberRefParent(methodRef); + } } } @@ -1117,7 +1665,7 @@ public ExportedTypeEntity GetOrCreateExportedType(EntityBase? implementation, st public abstract class EntityBase : IHasHandle { - public EntityHandle Handle { get; private set; } + public virtual EntityHandle Handle { get; private set; } protected virtual void SetHandle(EntityHandle token) { @@ -1247,6 +1795,41 @@ public sealed class TypeReferenceEntity(EntityBase resolutionScope, string @name public string Name { get; } = name; public string ReflectionNotation { get; set; } = string.Empty; + + /// + /// Temporary handle assigned during parsing for signature blob encoding. + /// The real handle is assigned during emission after TypeRef → TypeDef resolution. + /// + public TypeReferenceHandle PseudoHandle { get; set; } + + /// + /// Returns the real handle if set (during emission), otherwise the PseudoHandle + /// (during parsing). This allows code that reads Handle during parsing + /// (e.g., catch clauses, base type references) to get a valid TypeRef handle. + /// + public override EntityHandle Handle => base.Handle.IsNil ? PseudoHandle : base.Handle; + + private readonly List _placesToWriteResolvedToken = new(); + + /// + /// Records a 4-byte blob location (e.g., in an IL instruction stream) that + /// contains the PseudoHandle token and needs to be backpatched with the real + /// handle once TypeRef resolution is complete. + /// + public void RecordBlobToWriteResolvedToken(Blob blob) + { + _placesToWriteResolvedToken.Add(blob); + } + + protected override void SetHandle(EntityHandle token) + { + base.SetHandle(token); + foreach (var blob in _placesToWriteResolvedToken) + { + var writer = new BlobWriter(blob); + writer.WriteInt32(MetadataTokens.GetToken(token)); + } + } } public sealed class TypeSpecificationEntity(BlobBuilder signature) : TypeEntity @@ -1299,10 +1882,22 @@ public sealed class MethodDefinitionEntity(TypeDefinitionEntity containingType, public StandaloneSignatureEntity? LocalsSignature { get; set; } - public InstructionEncoder MethodBody { get; } = new(new BlobBuilder(), new ControlFlowBuilder()); + // TODO: https://github.com/dotnet/runtime/issues/127261 + // InstructionEncoder produces corrupted IL when mixing OpCode() with + // direct CodeBuilder.WriteByte() across BlobBuilder chunk boundaries. + // Using a larger initial capacity avoids multi-chunk operation. + public InstructionEncoder MethodBody { get; } = new(new BlobBuilder(4096), new ControlFlowBuilder()); public MethodBodyAttributes BodyAttributes { get; set; } + /// + /// Deferred exception regions. Registered during parsing but added to + /// during emission + /// so that TypeRef→TypeDef resolution has completed before catch type + /// handles are read. + /// + public List ExceptionRegions { get; } = new(); + public int MaxStack { get; set; } public (ModuleReferenceEntity ModuleName, string? EntryPointName, MethodImportAttributes Attributes)? MethodImportInformation { get; set; } @@ -1546,5 +2141,17 @@ public sealed class MethodDebugInfo public string? DocumentPath { get; set; } public List SequencePoints { get; } = new(); } + + /// + /// A deferred exception region entry. Stored during parsing and applied to the + /// during emission, after TypeRef→TypeDef resolution. + /// + internal abstract record ExceptionRegion(LabelHandle TryStart, LabelHandle TryEnd, LabelHandle HandlerStart, LabelHandle HandlerEnd) + { + internal sealed record CatchRegion(LabelHandle TryStart, LabelHandle TryEnd, LabelHandle HandlerStart, LabelHandle HandlerEnd, TypeEntity CatchType) : ExceptionRegion(TryStart, TryEnd, HandlerStart, HandlerEnd); + internal sealed record FinallyRegion(LabelHandle TryStart, LabelHandle TryEnd, LabelHandle HandlerStart, LabelHandle HandlerEnd) : ExceptionRegion(TryStart, TryEnd, HandlerStart, HandlerEnd); + internal sealed record FaultRegion(LabelHandle TryStart, LabelHandle TryEnd, LabelHandle HandlerStart, LabelHandle HandlerEnd) : ExceptionRegion(TryStart, TryEnd, HandlerStart, HandlerEnd); + internal sealed record FilterRegion(LabelHandle TryStart, LabelHandle TryEnd, LabelHandle HandlerStart, LabelHandle HandlerEnd, LabelHandle FilterStart) : ExceptionRegion(TryStart, TryEnd, HandlerStart, HandlerEnd); + } } } diff --git a/src/tools/ilasm/src/ILAssembler/GrammarVisitor.cs b/src/tools/ilasm/src/ILAssembler/GrammarVisitor.cs index ac60a99bf5693f..8fa89ae3b78b75 100644 --- a/src/tools/ilasm/src/ILAssembler/GrammarVisitor.cs +++ b/src/tools/ilasm/src/ILAssembler/GrammarVisitor.cs @@ -66,7 +66,10 @@ public Flag(T value, T groupMask) { return rhs.Value; } - return (T)(object)(((int)(object)lhs & (~(int)(object)rhs._groupMask)) | (int)(object)rhs.Value); + int lhsInt = Convert.ToInt32(lhs); + int maskInt = Convert.ToInt32(rhs._groupMask); + int valueInt = Convert.ToInt32(rhs.Value); + return (T)Enum.ToObject(typeof(T), (lhsInt & ~maskInt) | valueInt); } } } @@ -133,6 +136,20 @@ private void ReportWarning(string id, string message, Antlr4.Runtime.ParserRuleC public (ImmutableArray Diagnostics, PEBuilder? Image) BuildImage() { + // Default module name to output filename if no .module directive was provided + if (_entityRegistry.Module.Name is null && _options.OutputFileName is not null) + { + _entityRegistry.Module.Name = _options.OutputFileName; + } + + // Apply DebuggableAttribute AFTER all source declarations have been processed, + // so that GetCoreLibAssemblyReference() can find the correct corelib assembly ref + // declared in the source (e.g., System.Runtime) instead of creating a fallback mscorlib. + if (_entityRegistry.Assembly is not null && (_options.Debug || _options.DebugMode is not null)) + { + ApplyDebuggableAttribute(); + } + // Return early if there are structural errors that prevent building valid metadata. // However, allow errors in method bodies (ILA0016-0019) to pass through so we can // emit the assembly with the errors reported. @@ -190,6 +207,9 @@ private void ReportWarning(string id, string message, Antlr4.Runtime.ParserRuleC dllCharacteristics &= ~DllCharacteristics.DynamicBase; } + // Compute stack reserve: command-line option overrides directive, which overrides default + ulong sizeOfStackReserve = (ulong)(_options.StackReserve ?? (_stackReserve != 0 ? _stackReserve : 0x00100000)); + PEHeaderBuilder header = new( machine: machine, fileAlignment: fileAlignment, @@ -197,7 +217,8 @@ private void ReportWarning(string id, string message, Antlr4.Runtime.ParserRuleC subsystem: subsystem, majorSubsystemVersion: majorSubsystemVersion, minorSubsystemVersion: minorSubsystemVersion, - dllCharacteristics: dllCharacteristics); + dllCharacteristics: dllCharacteristics, + sizeOfStackReserve: sizeOfStackReserve); MethodDefinitionHandle entryPoint = default; if (_entityRegistry.EntryPoint is not null) @@ -506,7 +527,8 @@ or DiagnosticIds.GenericParameterIndexOutOfRange or DiagnosticIds.ParameterIndexOutOfRange or DiagnosticIds.GenericParameterNotFound or DiagnosticIds.UnknownGenericParameter - or DiagnosticIds.MissingInstanceCallConv; + or DiagnosticIds.MissingInstanceCallConv + or DiagnosticIds.TooManyGenericParameters; } public GrammarResult Visit(IParseTree tree) => tree.Accept(this); @@ -606,11 +628,8 @@ public GrammarResult VisitAssemblyBlock(CILParser.AssemblyBlockContext context) ApplyKeyFile(_options.KeyFile); } - // Apply DebuggableAttribute for --debug option - if (_options.Debug || _options.DebugMode is not null) - { - ApplyDebuggableAttribute(); - } + // DebuggableAttribute is applied in BuildImage() after all source declarations + // have been processed, so the correct corelib assembly ref can be found. return GrammarResult.SentinelValue.Result; } @@ -786,20 +805,21 @@ public static GrammarResult.FormattedBlob VisitBoolSeq(CILParser.BoolSeqContext public GrammarResult.Literal<(int? Lower, int? Upper)> VisitBound(CILParser.BoundContext context) { bool hasEllipsis = context.ELLIPSIS() is not null; - if (context.ChildCount == 0 || (context.ChildCount == 1 && hasEllipsis)) + var indices = context.int32(); + + if (indices.Length == 0) { + // Empty or standalone "..." return new((null, null)); } - var indicies = context.int32(); - - int firstValue = VisitInt32(indicies[0]).Value; + int firstValue = VisitInt32(indices[0]).Value; - return (indicies.Length, hasEllipsis) switch + return (indices.Length, hasEllipsis) switch { (1, false) => new((0, firstValue)), (1, true) => new((firstValue, null)), - (2, false) => new((firstValue, VisitInt32(indicies[1]).Value - firstValue + 1)), + (2, _) => new((firstValue, VisitInt32(indices[1]).Value - firstValue + 1)), _ => throw new UnreachableException() }; } @@ -815,9 +835,9 @@ public static GrammarResult.Sequence VisitBytes(CILParser.BytesContext con { var builder = ImmutableArray.CreateBuilder(); - foreach (var item in context.hexbytes()) + foreach (var item in context.hexbyte()) { - builder.AddRange(VisitHexbytes(item).Value); + builder.Add(VisitHexbyte(item)); } return new(builder.ToImmutable()); @@ -967,18 +987,52 @@ public GrammarResult VisitChildren(IRuleNode node) switch (context.GetText()) { + case "public": + return new((new(TypeAttributes.Public, TypeAttributes.VisibilityMask), null, false)); case "private": - return new((new(TypeAttributes.NotPublic), null, false)); + return new((new(TypeAttributes.NotPublic, TypeAttributes.VisibilityMask), null, false)); + case "nestedpublic": + return new((new(TypeAttributes.NestedPublic, TypeAttributes.VisibilityMask), null, false)); + case "nestedprivate": + return new((new(TypeAttributes.NestedPrivate, TypeAttributes.VisibilityMask), null, false)); + case "nestedfamily": + return new((new(TypeAttributes.NestedFamily, TypeAttributes.VisibilityMask), null, false)); + case "nestedassembly": + return new((new(TypeAttributes.NestedAssembly, TypeAttributes.VisibilityMask), null, false)); + case "nestedfamandassem": + return new((new(TypeAttributes.NestedFamANDAssem, TypeAttributes.VisibilityMask), null, false)); + case "nestedfamorassem": + return new((new(TypeAttributes.NestedFamORAssem, TypeAttributes.VisibilityMask), null, false)); case "ansi": - return new((new(TypeAttributes.AnsiClass), null, false)); + return new((new(TypeAttributes.AnsiClass, TypeAttributes.StringFormatMask), null, false)); case "autochar": - return new((new(TypeAttributes.AutoClass), null, false)); + return new((new(TypeAttributes.AutoClass, TypeAttributes.StringFormatMask), null, false)); + case "unicode": + return new((new(TypeAttributes.UnicodeClass, TypeAttributes.StringFormatMask), null, false)); case "auto": - return new((new(TypeAttributes.AutoLayout), null, false)); + return new((new(TypeAttributes.AutoLayout, TypeAttributes.LayoutMask), null, false)); case "sequential": - return new((new(TypeAttributes.SequentialLayout), null, false)); + return new((new(TypeAttributes.SequentialLayout, TypeAttributes.LayoutMask), null, false)); case "extended": - return new((new(TypeAttributes.ExtendedLayout), null, false)); + return new((new(TypeAttributes.ExtendedLayout, TypeAttributes.LayoutMask), null, false)); + case "sealed": + return new((new(TypeAttributes.Sealed), null, false)); + case "abstract": + return new((new(TypeAttributes.Abstract), null, false)); + case "import": + return new((new(TypeAttributes.Import), null, false)); + case "serializable": +#pragma warning disable SYSLIB0050 + return new((new(TypeAttributes.Serializable), null, false)); +#pragma warning restore SYSLIB0050 + case "windowsruntime": + return new((new(TypeAttributes.WindowsRuntime), null, false)); + case "beforefieldinit": + return new((new(TypeAttributes.BeforeFieldInit), null, false)); + case "specialname": + return new((new(TypeAttributes.SpecialName), null, false)); + case "rtspecialname": + return new((new(TypeAttributes.RTSpecialName), null, false)); default: return new((new((TypeAttributes)Enum.Parse(typeof(TypeAttributes), context.GetText(), true)), null, false)); } @@ -989,6 +1043,14 @@ private sealed class CurrentMethodContext public CurrentMethodContext(EntityRegistry.MethodDefinitionEntity definition) { Definition = definition; + // Populate argument names from the method's parameter definitions + foreach (var param in definition.Parameters) + { + if (param.Name is not null && param.Sequence > 0) + { + ArgumentNames[param.Name] = param.Sequence - 1; + } + } } public EntityRegistry.MethodDefinitionEntity Definition { get; } @@ -1020,6 +1082,18 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) { _currentMethod = new(VisitMethodHead(methodHead).Value); VisitMethodDecls(context.methodDecls()); + // Build the locals signature from parsed local variable declarations + if (_currentMethod.AllLocals.Count > 0) + { + var localsSig = new BlobBuilder(); + var encoder = new BlobEncoder(localsSig); + var localsEncoder = encoder.LocalVariableSignature(_currentMethod.AllLocals.Count); + foreach (var local in _currentMethod.AllLocals) + { + local.SignatureBlob.WriteContentTo(localsEncoder.AddVariable().Builder); + } + _currentMethod.Definition.LocalsSignature = _entityRegistry.GetOrCreateStandaloneSignature(localsSig); + } // Validate that all referenced labels were declared ValidateLabelReferences(); _currentMethod = null; @@ -1058,10 +1132,20 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) if (currentType is not null) { currentType.Properties.Add(property); - var accessors = VisitPropDecls(context.propDecls()).Value; - foreach (var accessor in accessors) + foreach (var propDecl in context.propDecls().propDecl()) { - property.Accessors.Add(accessor); + if (propDecl.customAttrDecl() is { } customAttrDecl) + { + var customAttr = VisitCustomAttrDecl(customAttrDecl).Value; + if (customAttr is not null) + { + customAttr.Owner = property; + } + } + else if (VisitPropDecl(propDecl).Value is { } accessor) + { + property.Accessors.Add(accessor); + } } } } @@ -1072,10 +1156,102 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) if (currentType is not null) { currentType.Events.Add(evt); - var accessors = VisitEventDecls(context.eventDecls()).Value; - foreach (var accessor in accessors) + foreach (var eventDecl in context.eventDecls().eventDecl()) { - evt.Accessors.Add(accessor); + if (eventDecl.customAttrDecl() is { } customAttrDecl) + { + var customAttr = VisitCustomAttrDecl(customAttrDecl).Value; + if (customAttr is not null) + { + customAttr.Owner = evt; + } + } + else if (VisitEventDecl(eventDecl).Value is { } accessor) + { + evt.Accessors.Add(accessor); + } + } + } + } + else if (context.customAttrDecl().Length == 1 && context.PARAM() is null) + { + // Custom attribute directly on the type + if (VisitCustomAttrDecl(context.customAttrDecl()[0]).Value is { } customAttr) + { + customAttr.Owner = _currentTypeDefinition.PeekOrDefault(); + } + } + else if (context.PARAM() is not null) + { + var customAttrDeclarations = context.customAttrDecl(); + var currentType = _currentTypeDefinition.PeekOrDefault(); + if (currentType is not null && context.TYPE() is not null) + { + EntityRegistry.GenericParameterEntity? param = null; + if (context.int32() is { } int32ctx) + { + int index = VisitInt32(int32ctx).Value; + if (index >= 0 && index < currentType.GenericParameters.Count) + { + param = currentType.GenericParameters[index]; + } + } + else if (context.dottedName() is { } dn) + { + string name = VisitDottedName(dn).Value; + foreach (var genericParam in currentType.GenericParameters) + { + if (genericParam.Name == name) + { + param = genericParam; + break; + } + } + } + if (param is not null) + { + foreach (var attr in customAttrDeclarations ?? Array.Empty()) + { + var customAttrDecl = VisitCustomAttrDecl(attr).Value; + customAttrDecl?.Owner = param; + } + } + } + else if (currentType is not null && context.CONSTRAINT() is not null) + { + EntityRegistry.GenericParameterEntity? param = null; + if (context.int32() is { } int32ctx) + { + int index = VisitInt32(int32ctx).Value; + if (index >= 0 && index < currentType.GenericParameters.Count) + { + param = currentType.GenericParameters[index]; + } + } + else if (context.dottedName() is { } dn) + { + string name = VisitDottedName(dn).Value; + foreach (var genericParam in currentType.GenericParameters) + { + if (genericParam.Name == name) + { + param = genericParam; + break; + } + } + } + if (param is not null) + { + var baseType = VisitTypeSpec(context.typeSpec()[0]).Value; + var constraint = new EntityRegistry.GenericParameterConstraintEntity(baseType); + constraint.Owner = param; + param.Constraints.Add(constraint); + currentType.GenericParameterConstraints.Add(constraint); + foreach (var attr in customAttrDeclarations ?? Array.Empty()) + { + var customAttrDecl = VisitCustomAttrDecl(attr).Value; + customAttrDecl?.Owner = constraint; + } } } } @@ -1090,6 +1266,11 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) { string typeFullName = VisitDottedName(context.dottedName()).Value; int typeFullNameLastDot = typeFullName.LastIndexOf('.'); + // A dot at position 0 is part of the name (e.g., ".GlobalStruct"), not a namespace separator + if (typeFullNameLastDot == 0) + { + typeFullNameLastDot = -1; + } string typeNS; if (_currentTypeDefinition.Count != 0) { @@ -1120,7 +1301,7 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) _currentTypeDefinition.PeekOrDefault(), typeNS, typeFullNameLastDot != -1 - ? typeFullName.Substring(typeFullNameLastDot) + ? typeFullName.Substring(typeFullNameLastDot + 1) : typeFullName, (newTypeDef) => { @@ -1135,33 +1316,14 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) var (attribute, implicitBase, attrRequireSealed) = result.Value; if (implicitBase is not null) { - // COMPAT: Any base type specified by an attribute is ignored if - // the user specified an explicit base type in an 'extends' clause. fallbackBase = implicitBase; } - // COMPAT: When a flags value is specified as an integer, it overrides - // all of the provided flags, including any compat sentinel flags that will require - // the sealed modifier to be provided. if (!attribute.ShouldAppend) { requireSealed = attrRequireSealed; return attribute.Value; } requireSealed |= attrRequireSealed; - // Note: We check attribute.Value != 0 because HasFlag(0) always returns true, - // but AutoLayout (0) and AnsiClass (0) should not clear other flags. - if (attribute.Value != 0 && TypeAttributes.LayoutMask.HasFlag(attribute.Value)) - { - return (acc & ~TypeAttributes.LayoutMask) | attribute.Value; - } - if (attribute.Value != 0 && TypeAttributes.StringFormatMask.HasFlag(attribute.Value)) - { - return (acc & ~TypeAttributes.StringFormatMask) | attribute.Value; - } - if (TypeAttributes.VisibilityMask.HasFlag(attribute.Value)) - { - return (acc & ~TypeAttributes.VisibilityMask) | attribute.Value; - } if (attribute.Value == TypeAttributes.RTSpecialName) { // COMPAT: ILASM ignores the rtspecialname directive on a type. @@ -1172,28 +1334,45 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) // COMPAT: interface implies abstract return acc | TypeAttributes.Interface | TypeAttributes.Abstract; } - - return acc | attribute.Value; + // Use the Flag's | operator which handles group masks + // (visibility, layout, string format) correctly. + return acc | attribute; }); - for (int i = 0; i < VisitTyparsClause(context.typarsClause()).Value.Length; i++) + // Two-pass generic parameter processing: + // Pass 1: Register all parameter names (without resolving constraints) + var typarContexts = context.typarsClause()?.typars()?.typar() ?? Array.Empty(); + if (typarContexts.Length > ushort.MaxValue) { - EntityRegistry.GenericParameterEntity? param = VisitTyparsClause(context.typarsClause()).Value[i]; + ReportError(DiagnosticIds.TooManyGenericParameters, + string.Format(DiagnosticMessageTemplates.TooManyGenericParameters, typarContexts.Length, ushort.MaxValue), + context.typarsClause()); + } + for (int i = 0; i < typarContexts.Length; i++) + { + var attributes = VisitTyparAttribs(typarContexts[i].typarAttribs()).Value; + var param = EntityRegistry.CreateGenericParameter(attributes, VisitDottedName(typarContexts[i].dottedName()).Value); param.Owner = newTypeDef; param.Index = i; newTypeDef.GenericParameters.Add(param); - foreach (var constraint in param.Constraints) + } + + // Push the type so that !T references in constraints, extends, and implements can resolve + _currentTypeDefinition.Push(newTypeDef); + + // Pass 2: Resolve constraints (now all params are registered and type is on stack) + for (int i = 0; i < typarContexts.Length; i++) + { + var param = newTypeDef.GenericParameters[i]; + foreach (var constraint in VisitTyBound(typarContexts[i].tyBound()).Value) { constraint.Owner = param; + param.Constraints.Add(constraint); newTypeDef.GenericParameterConstraints.Add(constraint); } } - // Temporarily push the new type as the current type definition so we can resolve type parameters - // that are used in the base type and interface types. - _currentTypeDefinition.Push(newTypeDef); - if (context.extendsClause() is CILParser.ExtendsClauseContext extends) { newTypeDef.BaseType = VisitExtendsClause(context.extendsClause()).Value; @@ -1206,6 +1385,12 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) _currentTypeDefinition.Pop(); + // Interfaces should not have an implicit base type + if (newTypeDef.Attributes.HasFlag(TypeAttributes.Interface)) + { + fallbackBase = null; + } + newTypeDef.BaseType ??= _entityRegistry.ResolveImplicitBaseType(fallbackBase); // When the user has provided a type definition for a type that directly inherits @@ -1228,10 +1413,75 @@ public GrammarResult VisitClassDecl(CILParser.ClassDeclContext context) if (!isNewType) { - // COMPAT: Still visit some of the clauses to ensure the provided types are still imported, - // even if unused. - _ = context.extendsClause()?.Accept(this); - _ = context.typarsClause().Accept(this); + // Type was forward-referenced. Apply attributes, generic params, + // base type, and interface implementations that were deferred. + var classAttrs = context.classAttr(); + typeDefinition.Attributes = classAttrs.Select(VisitClassAttr).Aggregate( + typeDefinition.Attributes, + (acc, result) => + { + var (attribute, _, _) = result.Value; + if (!attribute.ShouldAppend) + return attribute.Value; + if ((attribute.Value & TypeAttributes.Interface) != 0) + return acc | TypeAttributes.Interface | TypeAttributes.Abstract; + return acc | attribute.Value; + }); + + if (typeDefinition.GenericParameters.Count == 0) + { + // Two-pass generic parameter processing for forward-referenced types + var typarContexts = context.typarsClause()?.typars()?.typar() ?? Array.Empty(); + if (typarContexts.Length > ushort.MaxValue) + { + ReportError(DiagnosticIds.TooManyGenericParameters, + string.Format(DiagnosticMessageTemplates.TooManyGenericParameters, typarContexts.Length, ushort.MaxValue), + context.typarsClause()); + } + for (int i = 0; i < typarContexts.Length; i++) + { + var attributes = VisitTyparAttribs(typarContexts[i].typarAttribs()).Value; + var param = EntityRegistry.CreateGenericParameter(attributes, VisitDottedName(typarContexts[i].dottedName()).Value); + param.Owner = typeDefinition; + param.Index = i; + typeDefinition.GenericParameters.Add(param); + } + + _currentTypeDefinition.Push(typeDefinition); + + // Pass 2: Resolve constraints + for (int i = 0; i < typarContexts.Length; i++) + { + var param = typeDefinition.GenericParameters[i]; + foreach (var constraint in VisitTyBound(typarContexts[i].tyBound()).Value) + { + constraint.Owner = param; + param.Constraints.Add(constraint); + typeDefinition.GenericParameterConstraints.Add(constraint); + } + } + } + else + { + _ = context.typarsClause().Accept(this); + _currentTypeDefinition.Push(typeDefinition); + } + + if (context.extendsClause() is CILParser.ExtendsClauseContext extends && typeDefinition.BaseType is null) + { + typeDefinition.BaseType = VisitExtendsClause(extends).Value; + } + else + { + _ = context.extendsClause()?.Accept(this); + } + + if (context.implClause() is CILParser.ImplClauseContext impl) + { + typeDefinition.InterfaceImplementations.AddRange(VisitImplClause(impl).Value); + } + + _currentTypeDefinition.Pop(); } return new(typeDefinition); @@ -1327,6 +1577,22 @@ EntityRegistry.TypeEntity ResolveTypeDef() return typedefResult; } } + + // COMPAT: Before creating a forward-reference TypeDef, check if the type + // matches a well-known corelib type. Native ilasm resolves unqualified + // references to types like System.String as TypeRefs from the corelib. + if (typeName.ContainingTypeName is null) + { + var (ns, nm) = NameHelpers.SplitDottedNameToNamespaceAndName(typeName.DottedName); + if (ns == "System" && nm is "String" or "Object" or "ValueType" or "Enum" + or "Type" or "Array" or "Delegate" or "MulticastDelegate" + or "Exception" or "Attribute") + { + var coreLib = _entityRegistry.GetCoreLibAssemblyReference(); + return _entityRegistry.GetOrCreateTypeReference(coreLib, typeName); + } + } + Stack containingTypes = new(); for (TypeName? containingType = typeName; containingType is not null; containingType = containingType.ContainingTypeName) { @@ -1339,16 +1605,11 @@ EntityRegistry.TypeEntity ResolveTypeDef() (string ns, string name) = NameHelpers.SplitDottedNameToNamespaceAndName(containingType.DottedName); - typeDef = _entityRegistry.FindTypeDefinition( + typeDef = _entityRegistry.GetOrCreateTypeDefinition( typeDef, ns, - name); - - if (typeDef is null) - { - ReportError(DiagnosticIds.TypeNotFound, string.Format(DiagnosticMessageTemplates.TypeNotFound, containingType.DottedName), context); - return new EntityRegistry.FakeTypeEntity(default(TypeDefinitionHandle)); - } + name, + _ => { }); } return typeDef!; @@ -1488,13 +1749,14 @@ public GrammarResult.FormattedBlob VisitCustomBlobArgs(CILParser.CustomBlobArgsC return new(blob); } - private const int CustomAttributeBlobFormatVersion = 1; + private const ushort CustomAttributeBlobFormatVersion = 1; GrammarResult ICILVisitor.VisitCustomBlobDescr(CILParser.CustomBlobDescrContext context) => VisitCustomBlobDescr(context); public GrammarResult.FormattedBlob VisitCustomBlobDescr(CILParser.CustomBlobDescrContext context) { var blob = new BlobBuilder(); - blob.WriteInt32(CustomAttributeBlobFormatVersion); + // Custom attribute blob prolog is a 2-byte unsigned integer (ECMA-335 II.23.3) + blob.WriteUInt16(CustomAttributeBlobFormatVersion); VisitCustomBlobArgs(context.customBlobArgs()).Value.WriteContentTo(blob); VisitCustomBlobNVPairs(context.customBlobNVPairs()).Value.WriteContentTo(blob); return new(blob); @@ -1604,7 +1866,10 @@ public GrammarResult VisitDdBody(CILParser.DdBodyContext context) } else { - _ = VisitDdItem(context.ddItem()); + foreach (var item in context.ddItem()) + { + _ = VisitDdItem(item); + } } return GrammarResult.SentinelValue.Result; } @@ -1711,7 +1976,8 @@ public GrammarResult VisitDecl(CILParser.DeclContext context) if (context.nameSpaceHead() is CILParser.NameSpaceHeadContext ns) { string namespaceName = VisitNameSpaceHead(ns).Value; - _currentNamespace.Push($"{_currentNamespace.PeekOrDefault()}.{namespaceName}"); + string? outer = _currentNamespace.PeekOrDefault(); + _currentNamespace.Push(string.IsNullOrEmpty(outer) ? namespaceName : $"{outer}.{namespaceName}"); VisitDecls(context.decls()); _currentNamespace.Pop(); return GrammarResult.SentinelValue.Result; @@ -1727,6 +1993,17 @@ public GrammarResult VisitDecl(CILParser.DeclContext context) { _currentMethod = new(VisitMethodHead(methodHead).Value); VisitMethodDecls(context.methodDecls()); + if (_currentMethod.AllLocals.Count > 0) + { + var localsSig = new BlobBuilder(); + var encoder = new BlobEncoder(localsSig); + var localsEncoder = encoder.LocalVariableSignature(_currentMethod.AllLocals.Count); + foreach (var local in _currentMethod.AllLocals) + { + local.SignatureBlob.WriteContentTo(localsEncoder.AddVariable().Builder); + } + _currentMethod.Definition.LocalsSignature = _entityRegistry.GetOrCreateStandaloneSignature(localsSig); + } _currentMethod = null; return GrammarResult.SentinelValue.Result; } @@ -1807,9 +2084,18 @@ public GrammarResult VisitDecl(CILParser.DeclContext context) { offset = (uint)_manifestResources.Count; byte[] resourceData = _resourceLocator(alias); - // ECMA-335: Each resource is prefixed with a 4-byte length - _manifestResources.WriteInt32(resourceData.Length); - _manifestResources.WriteBytes(resourceData); + if (resourceData is null) + { + ReportError(DiagnosticIds.FileNotFound, + string.Format(DiagnosticMessageTemplates.FileNotFound, alias), + context); + } + else + { + // ECMA-335: Each resource is prefixed with a 4-byte length + _manifestResources.WriteInt32(resourceData.Length); + _manifestResources.WriteBytes(resourceData); + } } var res = _entityRegistry.CreateManifestResource(name, offset); res.Attributes = flags; @@ -1861,6 +2147,19 @@ public GrammarResult VisitDecl(CILParser.DeclContext context) { VisitLanguageDecl(languageDecl); } + if (context.customAttrDecl() is { } topLevelCustomAttr) + { + // Top-level custom attribute — owned by the module (matching native ilasm behavior) + if (VisitCustomAttrDecl(topLevelCustomAttr).Value is { } customAttr) + { + customAttr.Owner = _entityRegistry.Module; + } + } + if (context.secDecl() is { } topSecDecl) + { + var declarativeSecurity = VisitSecDecl(topSecDecl).Value; + declarativeSecurity?.Parent = _entityRegistry.Assembly; + } if (context.typedefDecl() is { } typedefDecl) { VisitTypedefDecl(typedefDecl); @@ -1895,8 +2194,15 @@ GrammarResult ICILVisitor.VisitDottedName(CILParser.DottedNameCon public static GrammarResult.String VisitDottedName(CILParser.DottedNameContext context) { - return new(context.GetText()); + string text = context.GetText(); + if (context.SQSTRING() is not null && text.Length >= 2 && text[0] == '\'') + { + text = text.Substring(1, text.Length - 2); + } + return new(text); } + + GrammarResult ICILVisitor.VisitDottedNamePart(CILParser.DottedNamePartContext context) => throw new UnreachableException(); GrammarResult ICILVisitor.VisitElementType(CILParser.ElementTypeContext context) => VisitElementType(context); public GrammarResult.FormattedBlob VisitElementType(CILParser.ElementTypeContext context) { @@ -1910,13 +2216,29 @@ public GrammarResult.FormattedBlob VisitElementType(CILParser.ElementTypeContext EntityRegistry.TypeEntity typeEntity = VisitClassName(className).Value; if (context.VALUE() is not null || context.VALUETYPE() is not null) { - blob.WriteByte((byte)SignatureTypeKind.ValueType); - blob.WriteTypeEntity(typeEntity); + // Check for well-known value types that should use primitive type codes + if (TryGetPrimitiveTypeCode(typeEntity, isValueType: true) is { } vtPrimCode) + { + blob.WriteByte((byte)vtPrimCode); + } + else + { + blob.WriteByte((byte)SignatureTypeKind.ValueType); + blob.WriteTypeEntity(typeEntity); + } } else { - blob.WriteByte((byte)SignatureTypeKind.Class); - blob.WriteTypeEntity(typeEntity); + // Check for well-known class types that should use primitive type codes + if (TryGetPrimitiveTypeCode(typeEntity, isValueType: false) is { } clsPrimCode) + { + blob.WriteByte((byte)clsPrimCode); + } + else + { + blob.WriteByte((byte)SignatureTypeKind.Class); + blob.WriteTypeEntity(typeEntity); + } } } else if (context.callConv() is CILParser.CallConvContext callConv) @@ -2039,11 +2361,11 @@ public GrammarResult.FormattedBlob VisitElementType(CILParser.ElementTypeContext { blob.WriteByte((byte)SignatureTypeCode.Void); } - else if (context.NATIVE_INT() is not null) + else if (context.nativeInt() is not null) { blob.WriteByte((byte)SignatureTypeCode.IntPtr); } - else if (context.NATIVE_UINT() is not null) + else if (context.nativeUint() is not null) { blob.WriteByte((byte)SignatureTypeCode.UIntPtr); } @@ -2121,7 +2443,7 @@ public GrammarResult.Flag VisitEventAttr(CILParser.EventAttrCon public GrammarResult.Literal VisitEventHead(CILParser.EventHeadContext context) { string name = VisitDottedName(context.dottedName()).Value; - EventAttributes eventAttributes = context.eventAttr().Select(attr => VisitEventAttr(attr).Value).Aggregate((a, b) => a | b); + EventAttributes eventAttributes = context.eventAttr().Select(attr => VisitEventAttr(attr).Value).Aggregate((EventAttributes)0, (a, b) => a | b); return new(new EntityRegistry.EventEntity(eventAttributes, VisitTypeSpec(context.typeSpec()).Value, name)); } @@ -2424,7 +2746,7 @@ public GrammarResult.Flag VisitFieldAttr(CILParser.FieldAttrCon "private" => new(FieldAttributes.Private, FieldAttributes.FieldAccessMask), "family" => new(FieldAttributes.Family, FieldAttributes.FieldAccessMask), "initonly" => new(FieldAttributes.InitOnly), - "rtspecialname" => new(0), // COMPAT: Don't emit rtspecialname + "rtspecialname" => new(FieldAttributes.RTSpecialName), "specialname" => new(FieldAttributes.SpecialName), "assembly" => new(FieldAttributes.Assembly, FieldAttributes.FieldAccessMask), "famandassem" => new(FieldAttributes.FamANDAssem, FieldAttributes.FieldAccessMask), @@ -2434,6 +2756,7 @@ public GrammarResult.Flag VisitFieldAttr(CILParser.FieldAttrCon #pragma warning disable SYSLIB0050 // FieldAttributes.NotSeralized is obsolete "notserialized" => new(FieldAttributes.NotSerialized), #pragma warning restore SYSLIB0050 // FieldAttributes.NotSeralized is obsolete + "volatile" => new(0), // COMPAT: volatile is not a field attribute; accepted for compatibility _ => throw new UnreachableException() }; } @@ -2441,6 +2764,11 @@ public GrammarResult.Flag VisitFieldAttr(CILParser.FieldAttrCon public GrammarResult VisitFieldDecl(CILParser.FieldDeclContext context) { var fieldAttrs = context.fieldAttr().Select(VisitFieldAttr).Aggregate((FieldAttributes)0, (a, b) => a | b); + // COMPAT: Native ilasm implicitly adds SpecialName when RTSpecialName is set + if (fieldAttrs.HasFlag(FieldAttributes.RTSpecialName)) + { + fieldAttrs |= FieldAttributes.SpecialName; + } var fieldType = VisitType(context.type()).Value; var marshalBlobs = context.marshalBlob(); var marshalBlob = marshalBlobs.Length > 0 ? VisitMarshalBlob(marshalBlobs[marshalBlobs.Length - 1]).Value : null; @@ -2453,7 +2781,7 @@ public GrammarResult VisitFieldDecl(CILParser.FieldDeclContext context) _ = signature.Field(); fieldType.WriteContentTo(signature.Builder); - var field = EntityRegistry.CreateUnrecordedFieldDefinition(fieldAttrs, _currentTypeDefinition.PeekOrDefault()!, name, signature.Builder); + var field = EntityRegistry.CreateUnrecordedFieldDefinition(fieldAttrs, _currentTypeDefinition.PeekOrDefault() ?? _entityRegistry.ModuleType, name, signature.Builder); if (field is not null) { @@ -2750,11 +3078,18 @@ public GrammarResult.Literal VisitFloat64(CILParser.Float64Context conte } else if (context.int32() is CILParser.Int32Context int32) { - int value = VisitInt32(int32).Value; - return new(BitConverter.Int32BitsToSingle(value)); + int intValue = VisitInt32(int32).Value; + if (context.FLOAT32() is not null) + { + // FLOAT32 '(' int32 ')' — hex bits reinterpreted as float32 + return new(BitConverter.Int32BitsToSingle(intValue)); + } + // int32 or int32 '.' — plain integer or trailing-dot float + return new((double)intValue); } else if (context.int64() is CILParser.Int64Context int64) { + // FLOAT64_ '(' int64 ')' — hex bits reinterpreted as float64 long value = VisitInt64(int64).Value; return new(BitConverter.Int64BitsToDouble(value)); } @@ -2799,21 +3134,31 @@ public GrammarResult.Literal VisitGenArity(CILParser.GenArityContext contex throw new UnreachableException(); } - GrammarResult ICILVisitor.VisitHexbytes(CILParser.HexbytesContext context) + GrammarResult ICILVisitor.VisitHexbyte(CILParser.HexbyteContext context) { - return VisitHexbytes(context); + return new GrammarResult.Literal(VisitHexbyte(context)); } - public static GrammarResult.Sequence VisitHexbytes(CILParser.HexbytesContext context) + public static byte VisitHexbyte(CILParser.HexbyteContext context) { - ITerminalNode[] bytes = context.HEXBYTE(); - var builder = ImmutableArray.CreateBuilder(bytes.Length); - foreach (var @byte in bytes) + // hexbyte can be HEXBYTE, INT32, or ID token (due to lexer ambiguity). + // Validate the text is 1-2 hex characters to avoid FormatException + // from non-hex ID tokens or values > 0xFF from longer INT32 tokens. + string text = context.GetText(); + if (text.Length <= 2 && byte.TryParse(text, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out byte value)) { - builder.Add(byte.Parse(@byte.Symbol.Text, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture)); + return value; } - return new(builder.MoveToImmutable()); + // For invalid hex values, mask to byte (matching native ilasm tolerance). + if (int.TryParse(text, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out int intValue)) + { + return (byte)(intValue & 0xFF); + } + return 0; } + + GrammarResult ICILVisitor.VisitNativeInt(CILParser.NativeIntContext context) => throw new UnreachableException(NodeShouldNeverBeDirectlyVisited); + GrammarResult ICILVisitor.VisitNativeUint(CILParser.NativeUintContext context) => throw new UnreachableException(NodeShouldNeverBeDirectlyVisited); GrammarResult ICILVisitor.VisitI16seq(CILParser.I16seqContext context) => VisitI16seq(context); public GrammarResult.FormattedBlob VisitI16seq(CILParser.I16seqContext context) { @@ -2863,7 +3208,12 @@ public GrammarResult.FormattedBlob VisitI64seq(CILParser.I64seqContext context) GrammarResult ICILVisitor.VisitId(CILParser.IdContext context) => VisitId(context); public static GrammarResult.String VisitId(CILParser.IdContext context) { - return new GrammarResult.String(context.GetText()); + string text = context.GetText(); + if (context.SQSTRING() is not null && text.Length >= 2 && text[0] == '\'') + { + text = text.Substring(1, text.Length - 2); + } + return new GrammarResult.String(text); } GrammarResult ICILVisitor.VisitIidParamIndex(CILParser.IidParamIndexContext context) => VisitIidParamIndex(context); @@ -2884,7 +3234,7 @@ public GrammarResult.Flag VisitImplAttr(CILParser.ImplAttr return attribute switch { "native" => new(MethodImplAttributes.Native, MethodImplAttributes.CodeTypeMask), - "cil" => new(MethodImplAttributes.IL, MethodImplAttributes.CodeTypeMask), + "cil" or "il" => new(MethodImplAttributes.IL, MethodImplAttributes.CodeTypeMask), "optil" => new(MethodImplAttributes.OPTIL, MethodImplAttributes.CodeTypeMask), "managed" => new(MethodImplAttributes.Managed, MethodImplAttributes.ManagedMask), "unmanaged" => new(MethodImplAttributes.Unmanaged, MethodImplAttributes.ManagedMask), @@ -2972,7 +3322,15 @@ public GrammarResult VisitInstr(CILParser.InstrContext context) _currentMethod!.Definition.MethodBody.OpCode(opcode); if (context.mdtoken() is CILParser.MdtokenContext mdtoken) { - _currentMethod.Definition.MethodBody.Token(VisitMdtoken(mdtoken).Value.Handle); + var entity = VisitMdtoken(mdtoken).Value; + if (entity is EntityRegistry.TypeReferenceEntity mdTokenTypeRef) + { + mdTokenTypeRef.RecordBlobToWriteResolvedToken(_currentMethod.Definition.MethodBody.CodeBuilder.ReserveBytes(4)); + } + else + { + _currentMethod.Definition.MethodBody.Token(entity.Handle); + } } else { @@ -3137,8 +3495,10 @@ public GrammarResult VisitInstr(CILParser.InstrContext context) case CILParser.RULE_instr_switch: { var labels = new List<(LabelHandle Label, int? Offset)>(); - foreach (var label in context.labels().children) + if (context.labels()?.children is { } labelChildren) { + foreach (var label in labelChildren) + { if (label is CILParser.IdContext id) { string labelName = VisitId(id).Value; @@ -3160,11 +3520,21 @@ public GrammarResult VisitInstr(CILParser.InstrContext context) LabelHandle labelHandle = _currentMethod!.Definition.MethodBody.DefineLabel(); labels.Add((labelHandle, offset)); } + } } - var switchEncoder = _currentMethod!.Definition.MethodBody.Switch(labels.Count); - foreach (var label in labels) + if (labels.Count > 0) { - switchEncoder.Branch(label.Label); + var switchEncoder = _currentMethod!.Definition.MethodBody.Switch(labels.Count); + foreach (var label in labels) + { + switchEncoder.Branch(label.Label); + } + } + else + { + // Empty switch: emit opcode + 0 count manually + _currentMethod!.Definition.MethodBody.OpCode(ILOpCode.Switch); + _currentMethod.Definition.MethodBody.CodeBuilder.WriteInt32(0); } // Now that we've emitted the switch instruction, we can go back and mark the offset-based target labels foreach (var label in labels) @@ -3179,13 +3549,27 @@ public GrammarResult VisitInstr(CILParser.InstrContext context) case CILParser.RULE_instr_tok: var tok = VisitOwnerType(context.ownerType()).Value; _currentMethod!.Definition.MethodBody.OpCode(opcode); - _currentMethod.Definition.MethodBody.Token(tok.Handle); + if (tok is EntityRegistry.TypeReferenceEntity tokTypeRef) + { + tokTypeRef.RecordBlobToWriteResolvedToken(_currentMethod.Definition.MethodBody.CodeBuilder.ReserveBytes(4)); + } + else + { + _currentMethod.Definition.MethodBody.Token(tok.Handle); + } break; case CILParser.RULE_instr_type: { var arg = VisitTypeSpec(context.typeSpec()).Value; _currentMethod!.Definition.MethodBody.OpCode(opcode); - _currentMethod.Definition.MethodBody.Token(arg.Handle); + if (arg is EntityRegistry.TypeReferenceEntity argTypeRef) + { + argTypeRef.RecordBlobToWriteResolvedToken(_currentMethod.Definition.MethodBody.CodeBuilder.ReserveBytes(4)); + } + else + { + _currentMethod.Definition.MethodBody.Token(arg.Handle); + } } break; case CILParser.RULE_instr_var: @@ -3276,7 +3660,19 @@ public GrammarResult VisitInstr(CILParser.InstrContext context) public GrammarResult.Literal VisitInstr_var(CILParser.Instr_varContext context) => new(ParseOpCodeFromToken(((ITerminalNode)context.children[0]).Symbol)); private static ILOpCode ParseOpCodeFromToken(IToken token) { - return (ILOpCode)Enum.Parse(typeof(ILOpCode), token.Text.Replace('.', '_'), ignoreCase: true); + string text = token.Text.TrimEnd('.'); + string normalized = text.Replace('.', '_'); + + // Handle instruction aliases that don't directly map to ILOpCode enum names + normalized = normalized switch + { + "ldelem_u8" => "ldelem_i8", + "ldind_u8" => "ldind_i8", + "endfault" => "endfinally", + _ => normalized + }; + + return (ILOpCode)Enum.Parse(typeof(ILOpCode), normalized, ignoreCase: true); } GrammarResult ICILVisitor.VisitInstr(CILParser.InstrContext context) => VisitInstr(context); @@ -3301,6 +3697,7 @@ private static bool ParseIntegerValue(ReadOnlySpan value, out long result) if (value.StartsWith("-".AsSpan())) { negate = true; + value = value.Slice(1); } if (value.StartsWith("0x".AsSpan())) @@ -3322,16 +3719,38 @@ private static bool ParseIntegerValue(ReadOnlySpan value, out long result) } result += digitValue; } + if (negate) result = -result; return true; } bool success = long.TryParse(value.ToString(), parseStyle, CultureInfo.InvariantCulture, out result); if (!success) { + // Try parsing as unsigned — handles values like: + // - Decimal overflow with negation: 9223372036854775808 (= -Int64.MinValue) + // - Large unsigned decimal: 18444492274432737280 + if (ulong.TryParse(value.ToString(), parseStyle, CultureInfo.InvariantCulture, out ulong uresult)) + { + result = unchecked((long)uresult); + if (negate) result = unchecked(-result); + return true; + } + // Handle oversized hex values (>64 bits) by truncating to low 64 bits, + // matching native ilasm behavior for values like 0x94188556b24089e8b90c9c61f9f3088 + if (parseStyle == NumberStyles.AllowHexSpecifier && value.Length > 16) + { + var truncated = value.Slice(value.Length - 16); + if (ulong.TryParse(truncated.ToString(), parseStyle, CultureInfo.InvariantCulture, out uresult)) + { + result = unchecked((long)uresult); + if (negate) result = unchecked(-result); + return true; + } + } return false; } - result *= negate ? -1 : 1; + if (negate) result = -result; return true; } @@ -3429,26 +3848,51 @@ public GrammarResult VisitLabelDecl(CILParser.LabelDeclContext context) public GrammarResult VisitLanguageDecl(CILParser.LanguageDeclContext context) { - // .language SQSTRING (',' SQSTRING (',' SQSTRING)?)? + // .language languageString (',' languageString (',' languageString)?)? + // or .language QSTRING QSTRING QSTRING (space-separated) // First GUID: language (e.g., C#, VB, IL) // Second GUID: vendor (optional) // Third GUID: document type (optional) - var strings = context.SQSTRING(); - if (strings.Length >= 1 && Guid.TryParse(StringHelpers.ParseQuotedString(strings[0].GetText()), out var languageGuid)) + var strings = context.languageString(); + // Fall back to QSTRING tokens for space-separated form + var qstrings = context.QSTRING(); + if (strings.Length >= 1 && Guid.TryParse(VisitLanguageString(strings[0]).Value, out var languageGuid)) + { + _currentLanguageGuid = languageGuid; + } + else if (qstrings.Length >= 1 && Guid.TryParse(StringHelpers.ParseQuotedString(qstrings[0].GetText()), out languageGuid)) { _currentLanguageGuid = languageGuid; } - if (strings.Length >= 2 && Guid.TryParse(StringHelpers.ParseQuotedString(strings[1].GetText()), out var vendorGuid)) + if (strings.Length >= 2 && Guid.TryParse(VisitLanguageString(strings[1]).Value, out var vendorGuid)) + { + _currentLanguageVendorGuid = vendorGuid; + } + else if (qstrings.Length >= 2 && Guid.TryParse(StringHelpers.ParseQuotedString(qstrings[1].GetText()), out vendorGuid)) { _currentLanguageVendorGuid = vendorGuid; } - if (strings.Length >= 3 && Guid.TryParse(StringHelpers.ParseQuotedString(strings[2].GetText()), out var docTypeGuid)) + if (strings.Length >= 3 && Guid.TryParse(VisitLanguageString(strings[2]).Value, out var docTypeGuid)) + { + _currentDocumentTypeGuid = docTypeGuid; + } + else if (qstrings.Length >= 3 && Guid.TryParse(StringHelpers.ParseQuotedString(qstrings[2].GetText()), out docTypeGuid)) { _currentDocumentTypeGuid = docTypeGuid; } return GrammarResult.SentinelValue.Result; } + GrammarResult ICILVisitor.VisitLanguageString(CILParser.LanguageStringContext context) => VisitLanguageString(context); + public GrammarResult.String VisitLanguageString(CILParser.LanguageStringContext context) + { + if (context.SQSTRING() is not null) + { + return new(StringHelpers.ParseQuotedString(context.SQSTRING().GetText())); + } + return new(StringHelpers.ParseQuotedString(context.QSTRING().GetText())); + } + public GrammarResult VisitManifestResDecl(CILParser.ManifestResDeclContext context) => throw new UnreachableException(NodeShouldNeverBeDirectlyVisited); GrammarResult ICILVisitor.VisitManifestResDecls(CILParser.ManifestResDeclsContext context) => VisitManifestResDecls(context); public GrammarResult.Literal<(EntityRegistry.EntityBase? implementation, uint offset, ImmutableArray attributes)> VisitManifestResDecls(CILParser.ManifestResDeclsContext context) @@ -3485,15 +3929,7 @@ public GrammarResult VisitLanguageDecl(CILParser.LanguageDeclContext context) else if (kind == ".assembly") { string assemblyName = VisitDottedName(decl.dottedName()).Value; - var asm = _entityRegistry.FindAssemblyReference(assemblyName); - if (asm is null) - { - ReportError(DiagnosticIds.AssemblyNotFound, string.Format(DiagnosticMessageTemplates.AssemblyNotFound, assemblyName), decl); - } - else - { - implementation = asm; - } + implementation = _entityRegistry.GetOrCreateAssemblyReference(assemblyName, _ => { }); } } @@ -3528,11 +3964,14 @@ public GrammarResult.Flag VisitManresAttr(CILParser. GrammarResult ICILVisitor.VisitMarshalBlob(CILParser.MarshalBlobContext context) => VisitMarshalBlob(context); public GrammarResult.FormattedBlob VisitMarshalBlob(CILParser.MarshalBlobContext context) { - if (context.hexbytes() is CILParser.HexbytesContext hexBytes) + var hexBytes = context.hexbyte(); + if (hexBytes.Length > 0) { - var bytes = VisitHexbytes(hexBytes).Value; - var blob = new BlobBuilder(bytes.Length); - blob.WriteBytes(bytes); + var blob = new BlobBuilder(hexBytes.Length); + foreach (var hb in hexBytes) + { + blob.WriteByte(VisitHexbyte(hb)); + } return new(blob); } @@ -3601,7 +4040,7 @@ public GrammarResult.Flag VisitMethAttr(CILParser.MethAttrCont "privatescope" => new(MethodAttributes.PrivateScope, MethodAttributes.MemberAccessMask), "hidebysig" => new(MethodAttributes.HideBySig), "newslot" => new(MethodAttributes.NewSlot), - "rtspecialname" => new(0), // COMPAT: Rtspecialname is ignored + "rtspecialname" => new(MethodAttributes.RTSpecialName), "unmanagedexp" => new(MethodAttributes.UnmanagedExport), "reqsecobj" => new(MethodAttributes.RequireSecObject), _ => throw new UnreachableException(), @@ -3635,7 +4074,16 @@ public GrammarResult VisitMethodDecl(CILParser.MethodDeclContext context) // init keyword specified currentMethod.Definition.BodyAttributes = MethodBodyAttributes.InitLocals; } - var localsScope = currentMethod.LocalsScopes.Count != 0 ? currentMethod.LocalsScopes[currentMethod.LocalsScopes.Count - 1] : new(); + Dictionary localsScope; + if (currentMethod.LocalsScopes.Count != 0) + { + localsScope = currentMethod.LocalsScopes[currentMethod.LocalsScopes.Count - 1]; + } + else + { + localsScope = new(); + currentMethod.LocalsScopes.Add(localsScope); + } var newLocals = VisitSigArgs(context.sigArgs()).Value; foreach (var loc in newLocals) { @@ -3649,7 +4097,7 @@ public GrammarResult VisitMethodDecl(CILParser.MethodDeclContext context) // Otherwise, it will only be accessible via its index. if (loc.Name is not null) { - localsScope.Add(loc.Name, currentMethod.AllLocals.Count); + localsScope.TryAdd(loc.Name, currentMethod.AllLocals.Count); } currentMethod.AllLocals.Add(loc); } @@ -3727,7 +4175,7 @@ public GrammarResult VisitMethodDecl(CILParser.MethodDeclContext context) { // Type parameters EntityRegistry.GenericParameterEntity? param = null; - if (context.int32() is { } int32) + if (context.int32() is { Length: > 0 } int32) { int index = VisitInt32(int32[0]).Value; if (index < 0 || index >= currentMethod.Definition.GenericParameters.Count) @@ -3768,7 +4216,7 @@ public GrammarResult VisitMethodDecl(CILParser.MethodDeclContext context) { // constraints EntityRegistry.GenericParameterEntity? param = null; - if (context.int32() is { } int32) + if (context.int32() is { Length: > 0 } int32) { int index = VisitInt32(int32[0]).Value; if (index < 0 || index >= currentMethod.Definition.GenericParameters.Count) @@ -3858,6 +4306,14 @@ public GrammarResult VisitMethodDecl(CILParser.MethodDeclContext context) var declarativeSecurity = VisitSecDecl(secDecl).Value; declarativeSecurity?.Parent = currentMethod.Definition; } + else if (context.customDescrInMethodBody() is {} customDescrInMethod) + { + var customAttr = VisitCustomDescrInMethodBody(customDescrInMethod).Value; + if (customAttr is not null) + { + customAttr.Owner = currentMethod.Definition; + } + } else if (context.GetChild(0) is CILParser.InstrContext instr) { _ = VisitInstr(instr); @@ -3891,19 +4347,44 @@ public GrammarResult VisitMethodDecls(CILParser.MethodDeclsContext context) BlobBuilder methodSignature = new(); byte sigHeader = VisitCallConv(context.callConv()).Value; - // Set the current method for type parameter and signature parsing - // so we can resolve generic parameters correctly. + // Two-pass generic parameter processing for method params: + // Pass 1: Register all parameter names (without resolving constraints) _currentMethod = new(methodDefinition); - var typeParameters = VisitTyparsClause(context.typarsClause()).Value; - if (typeParameters.Length != 0) + var typarContexts = context.typarsClause()?.typars()?.typar() ?? Array.Empty(); + if (typarContexts.Length > ushort.MaxValue) + { + ReportError(DiagnosticIds.TooManyGenericParameters, + string.Format(DiagnosticMessageTemplates.TooManyGenericParameters, typarContexts.Length, ushort.MaxValue), + context.typarsClause()); + } + for (int i = 0; i < typarContexts.Length; i++) + { + var attributes = VisitTyparAttribs(typarContexts[i].typarAttribs()).Value; + var param = EntityRegistry.CreateGenericParameter(attributes, VisitDottedName(typarContexts[i].dottedName()).Value); + param.Owner = methodDefinition; + param.Index = i; + methodDefinition.GenericParameters.Add(param); + } + if (typarContexts.Length != 0) { sigHeader |= (byte)SignatureAttributes.Generic; } methodDefinition.MethodAttributes = context.methAttr().Aggregate((MethodAttributes)0, (acc, attr) => acc | VisitMethAttr(attr)); + // COMPAT: Native ilasm implicitly adds RTSpecialName + SpecialName for .ctor/.cctor methods + if (name is ".ctor" or ".cctor") + { + methodDefinition.MethodAttributes |= MethodAttributes.RTSpecialName | MethodAttributes.SpecialName; + } + // COMPAT: Native ilasm implicitly adds SpecialName when RTSpecialName is set + else if (methodDefinition.MethodAttributes.HasFlag(MethodAttributes.RTSpecialName)) + { + methodDefinition.MethodAttributes |= MethodAttributes.SpecialName; + } + if (methodDefinition.MethodAttributes.HasFlag(MethodAttributes.Abstract) && !methodDefinition.ContainingType.Attributes.HasFlag(TypeAttributes.Abstract)) { - ReportError(DiagnosticIds.AbstractMethodNotInAbstractType, + ReportWarning(DiagnosticIds.AbstractMethodNotInAbstractType, string.Format(DiagnosticMessageTemplates.AbstractMethodNotInAbstractType, methodDefinition.Name), context); } @@ -3928,25 +4409,32 @@ public GrammarResult VisitMethodDecls(CILParser.MethodDeclsContext context) { // Error on static + instance. } + // COMPAT: Native ilasm auto-adds instance calling convention for non-static methods in class context + if (!methodDefinition.MethodAttributes.HasFlag(MethodAttributes.Static) + && !parsedHeader.IsInstance + && _currentTypeDefinition.Count > 0) + { + sigHeader |= (byte)SignatureAttributes.Instance; + parsedHeader = new(sigHeader); + } if (parsedHeader.HasExplicitThis && !parsedHeader.IsInstance) { // Warn on explicit-this + non-instance parsedHeader = new(sigHeader |= (byte)SignatureAttributes.Instance); } methodSignature.WriteByte(sigHeader); - if (typeParameters.Length != 0) + if (typarContexts.Length != 0) { - methodSignature.WriteCompressedInteger(typeParameters.Length); + methodSignature.WriteCompressedInteger(typarContexts.Length); } - for (int i = 0; i < typeParameters.Length; i++) + // Pass 2: Resolve constraints (now all params are registered) + for (int i = 0; i < typarContexts.Length; i++) { - EntityRegistry.GenericParameterEntity? param = typeParameters[i]; - param.Owner = methodDefinition; - param.Index = i; - methodDefinition.GenericParameters.Add(param); - foreach (var constraint in param.Constraints) + var param = methodDefinition.GenericParameters[i]; + foreach (var constraint in VisitTyBound(typarContexts[i].tyBound()).Value) { constraint.Owner = param; + param.Constraints.Add(constraint); methodDefinition.GenericParameterConstraints.Add(constraint); } } @@ -3962,7 +4450,9 @@ public GrammarResult VisitMethodDecls(CILParser.MethodDeclsContext context) { SignatureArg? arg = args[i]; arg.SignatureBlob.WriteContentTo(methodSignature); - methodDefinition.Parameters.Add(EntityRegistry.CreateParameter(arg.Attributes, arg.Name, arg.MarshallingDescriptor, i + 1)); + // COMPAT: Native ilasm auto-generates A_N names for unnamed parameters + string? paramName = arg.Name ?? $"A_{i}"; + methodDefinition.Parameters.Add(EntityRegistry.CreateParameter(arg.Attributes, paramName, arg.MarshallingDescriptor, i + 1)); } // We've parsed all signature information. We can reset the current method now (the caller will handle setting/unsetting it for the method body). _currentMethod = null; @@ -4019,7 +4509,12 @@ public GrammarResult.String VisitMethodName(CILParser.MethodNameContext context) return new(_entityRegistry.CreateLazilyRecordedMemberReference(_entityRegistry.ModuleType, alias, new BlobBuilder())); } BlobBuilder methodRefSignature = new(); - byte callConv = VisitCallConv(context.callConv()).Value; + if (context.callConv() is not CILParser.CallConvContext callConvCtx) + { + // Parse error recovery - callConv is missing + return new(_entityRegistry.CreateLazilyRecordedMemberReference(_entityRegistry.ModuleType, "", methodRefSignature)); + } + byte callConv = VisitCallConv(callConvCtx).Value; EntityRegistry.TypeEntity owner = _currentTypeDefinition.PeekOrDefault() ?? _entityRegistry.ModuleType; if (context.typeSpec() is CILParser.TypeSpecContext typeSpec) { @@ -4060,7 +4555,7 @@ public GrammarResult.String VisitMethodName(CILParser.MethodNameContext context) methodRefSignature.WriteCompressedInteger(numGenericParameters); } var args = VisitSigArgs(context.sigArgs()).Value; - methodRefSignature.WriteCompressedInteger(args.Length); + methodRefSignature.WriteCompressedInteger(args.Count(arg => !arg.IsSentinel)); // Write return type VisitType(context.type()).Value.WriteContentTo(methodRefSignature); // Write arg signatures @@ -4248,7 +4743,15 @@ public GrammarResult.FormattedBlob VisitNativeTypeElement(CILParser.NativeTypeEl blob.WriteByte(NATIVE_TYPE_VOID); break; case CILParser.BOOL: - blob.WriteByte((byte)UnmanagedType.Bool); + // Distinguish 'variant bool' (VariantBool) from plain 'bool' (Bool) + if (context.marshalBool is not null) + { + blob.WriteByte((byte)UnmanagedType.VariantBool); + } + else + { + blob.WriteByte((byte)UnmanagedType.Bool); + } break; case CILParser.INT8: blob.WriteByte((byte)UnmanagedType.I1); @@ -4298,7 +4801,17 @@ public GrammarResult.FormattedBlob VisitNativeTypeElement(CILParser.NativeTypeEl blob.WriteByte(NATIVE_TYPE_DATE); break; case CILParser.BSTR: - blob.WriteByte((byte)UnmanagedType.BStr); + // Distinguish 'ansi bstr' (AnsiBStr) from plain 'bstr' (BStr) + if (context.ANSI() is not null) + { +#pragma warning disable CS0618 // Type or member is obsolete + blob.WriteByte((byte)UnmanagedType.AnsiBStr); +#pragma warning restore CS0618 + } + else + { + blob.WriteByte((byte)UnmanagedType.BStr); + } break; case CILParser.LPSTR: blob.WriteByte((byte)UnmanagedType.LPStr); @@ -4335,7 +4848,19 @@ public GrammarResult.FormattedBlob VisitNativeTypeElement(CILParser.NativeTypeEl break; } case CILParser.STRUCT: - blob.WriteByte((byte)UnmanagedType.Struct); + // Distinguish 'nested struct' from plain 'struct' + if (context.GetChild(0)?.GetText() == "nested") + { + ReportWarning(DiagnosticIds.DeprecatedNativeType, + string.Format(DiagnosticMessageTemplates.DeprecatedNativeType, "NESTEDSTRUCT"), + context); + const int NATIVE_TYPE_NESTEDSTRUCT = 0x21; + blob.WriteByte(NATIVE_TYPE_NESTEDSTRUCT); + } + else + { + blob.WriteByte((byte)UnmanagedType.Struct); + } break; case CILParser.INTERFACE: { @@ -4365,27 +4890,14 @@ public GrammarResult.FormattedBlob VisitNativeTypeElement(CILParser.NativeTypeEl case CILParser.UINT: blob.WriteByte((byte)UnmanagedType.SysUInt); break; - case CILParser.NESTEDSTRUCT: - ReportWarning(DiagnosticIds.DeprecatedNativeType, - string.Format(DiagnosticMessageTemplates.DeprecatedNativeType, "NESTEDSTRUCT"), - context); - const int NATIVE_TYPE_NESTEDSTRUCT = 0x21; - blob.WriteByte(NATIVE_TYPE_NESTEDSTRUCT); - break; #pragma warning disable CS0618 // Type or member is obsolete case CILParser.BYVALSTR: blob.WriteByte((byte)UnmanagedType.VBByRefStr); break; - case CILParser.ANSIBSTR: - blob.WriteByte((byte)UnmanagedType.AnsiBStr); - break; case CILParser.TBSTR: blob.WriteByte((byte)UnmanagedType.TBStr); break; #pragma warning restore CS0618 // Type or member is obsolete - case CILParser.VARIANTBOOL: - blob.WriteByte((byte)UnmanagedType.VariantBool); - break; case CILParser.METHOD: blob.WriteByte((byte)UnmanagedType.FunctionPtr); break; @@ -4624,7 +5136,7 @@ public GrammarResult.FormattedBlob VisitSecAttrBlob(CILParser.SecAttrBlobContext } else if (context.SQSTRING() is { } sqstring) { - attributeName = sqstring.GetText(); + attributeName = StringHelpers.ParseQuotedString(sqstring.GetText()); } blob.WriteSerializedString(attributeName); @@ -4700,16 +5212,16 @@ public GrammarResult VisitSehBlock(CILParser.SehBlockContext context) switch (clause) { case ExceptionClause.Finally finallyClause: - _currentMethod!.Definition.MethodBody.ControlFlowBuilder!.AddFinallyRegion(tryStart, tryEnd, finallyClause.Start, finallyClause.End); + _currentMethod!.Definition.ExceptionRegions.Add(new EntityRegistry.ExceptionRegion.FinallyRegion(tryStart, tryEnd, finallyClause.Start, finallyClause.End)); break; case ExceptionClause.Fault faultClause: - _currentMethod!.Definition.MethodBody.ControlFlowBuilder!.AddFaultRegion(tryStart, tryEnd, faultClause.Start, faultClause.End); + _currentMethod!.Definition.ExceptionRegions.Add(new EntityRegistry.ExceptionRegion.FaultRegion(tryStart, tryEnd, faultClause.Start, faultClause.End)); break; case ExceptionClause.Catch catchClause: - _currentMethod!.Definition.MethodBody.ControlFlowBuilder!.AddCatchRegion(tryStart, tryEnd, catchClause.Start, catchClause.End, catchClause.Type.Handle); + _currentMethod!.Definition.ExceptionRegions.Add(new EntityRegistry.ExceptionRegion.CatchRegion(tryStart, tryEnd, catchClause.Start, catchClause.End, catchClause.Type)); break; case ExceptionClause.Filter filterClause: - _currentMethod!.Definition.MethodBody.ControlFlowBuilder!.AddFilterRegion(tryStart, tryEnd, filterClause.Start, filterClause.End, filterClause.FilterStart); + _currentMethod!.Definition.ExceptionRegions.Add(new EntityRegistry.ExceptionRegion.FilterRegion(tryStart, tryEnd, filterClause.Start, filterClause.End, filterClause.FilterStart)); break; default: throw new UnreachableException(); @@ -4843,7 +5355,7 @@ public GrammarResult.FormattedBlob VisitSerInit(CILParser.SerInitContext context arrayHeader.WriteByte((byte)SerializationTypeCode.SZArray); arrayHeader.WriteByte((byte)GetTypeCodeForToken(tokenType)); arrayHeader.WriteInt32(VisitInt32(arrLength).Value); - var sequenceResult = (GrammarResult.FormattedBlob)Visit(context.GetRuleContext(0)); + var sequenceResult = (GrammarResult.FormattedBlob)Visit(context.GetRuleContext(1)); arrayHeader.LinkSuffix(sequenceResult.Value); return new(arrayHeader); } @@ -4871,6 +5383,57 @@ private static SerializationTypeCode GetTypeCodeForToken(int tokenType) }; } + /// + /// Checks if a type entity is a well-known corelib type and returns its primitive type code. + /// Native ilasm uses primitive type codes for well-known types like System.String and System.Object + /// in signature blobs instead of class/valuetype TypeRef references. + /// + private static SignatureTypeCode? TryGetPrimitiveTypeCode(EntityRegistry.TypeEntity typeEntity, bool isValueType) + { + if (typeEntity is not EntityRegistry.TypeReferenceEntity typeRef) + { + return null; + } + + string name = typeRef.Name; + string ns = typeRef.Namespace; + + if (ns != "System") + { + return null; + } + + if (isValueType) + { + return name switch + { + "Boolean" => SignatureTypeCode.Boolean, + "Char" => SignatureTypeCode.Char, + "SByte" => SignatureTypeCode.SByte, + "Byte" => SignatureTypeCode.Byte, + "Int16" => SignatureTypeCode.Int16, + "UInt16" => SignatureTypeCode.UInt16, + "Int32" => SignatureTypeCode.Int32, + "UInt32" => SignatureTypeCode.UInt32, + "Int64" => SignatureTypeCode.Int64, + "UInt64" => SignatureTypeCode.UInt64, + "Single" => SignatureTypeCode.Single, + "Double" => SignatureTypeCode.Double, + "IntPtr" => SignatureTypeCode.IntPtr, + "UIntPtr" => SignatureTypeCode.UIntPtr, + "TypedReference" => SignatureTypeCode.TypedReference, + _ => null + }; + } + + return name switch + { + "String" => SignatureTypeCode.String, + "Object" => SignatureTypeCode.Object, + _ => null + }; + } + GrammarResult ICILVisitor.VisitSigArg(CILParser.SigArgContext context) => VisitSigArg(context); public GrammarResult.Literal VisitSigArg(CILParser.SigArgContext context) { @@ -4878,18 +5441,32 @@ public GrammarResult.Literal VisitSigArg(CILParser.SigArgContext c { return new(SignatureArg.CreateSentinelArgument()); } + string? name = context.id() is CILParser.IdContext id ? VisitId(id).Value : null; return new(new SignatureArg( VisitParamAttr(context.paramAttr()).Value, VisitType(context.type()).Value, VisitMarshalClause(context.marshalClause()).Value, - context.id() is CILParser.IdContext id ? VisitId(id).Value : null)); + name)); } GrammarResult ICILVisitor.VisitSigArgs(CILParser.SigArgsContext context) => VisitSigArgs(context); - public GrammarResult.Sequence VisitSigArgs(CILParser.SigArgsContext context) => new(ImmutableArray.CreateRange(context.sigArg().Select(arg => VisitSigArg(arg).Value))); + public GrammarResult.Sequence VisitSigArgs(CILParser.SigArgsContext context) => new([.. context.sigArg().Select(arg => VisitSigArg(arg).Value)]); GrammarResult ICILVisitor.VisitSimpleType(CILParser.SimpleTypeContext context) => VisitSimpleType(context); public GrammarResult.Literal VisitSimpleType(CILParser.SimpleTypeContext context) { + // Handle 'unsigned intN' forms (2 children: 'unsigned' + intN keyword) + if (context.ChildCount == 2) + { + return new(context.GetChild(1).Symbol.Type switch + { + CILParser.INT8 => SignatureTypeCode.Byte, + CILParser.INT16 => SignatureTypeCode.UInt16, + CILParser.INT32_ => SignatureTypeCode.UInt32, + CILParser.INT64_ => SignatureTypeCode.UInt64, + _ => throw new UnreachableException() + }); + } + return new(context.GetChild(0).Symbol.Type switch { CILParser.CHAR => SignatureTypeCode.Char, @@ -5122,28 +5699,31 @@ public GrammarResult.FormattedBlob VisitType(CILParser.TypeContext context) case CILParser.ArrayModifierContext arr: var bounds = VisitBounds(arr.bounds()).Value; suffix.WriteCompressedInteger(bounds.Length); - int lowerBoundsDefined = 0; - int upperBoundsDefined = 0; - foreach (var bound in bounds) + // Count contiguous sizes from the start (stop at first null) + int numSizes = 0; + for (int bIdx = 0; bIdx < bounds.Length; bIdx++) { - if (bound.Lower is not null) - { - lowerBoundsDefined++; - } - if (bound.Upper is not null) - { - upperBoundsDefined++; - } + if (bounds[bIdx].Upper is null) + break; + numSizes++; } - suffix.WriteCompressedInteger(upperBoundsDefined); - foreach (var bound in bounds) + // Count contiguous lower bounds from the start (stop at first null) + int numLoBounds = 0; + for (int bIdx = 0; bIdx < bounds.Length; bIdx++) { - suffix.WriteCompressedInteger(bound.Upper.GetValueOrDefault()); + if (bounds[bIdx].Lower is null) + break; + numLoBounds++; + } + suffix.WriteCompressedInteger(numSizes); + for (int bIdx = 0; bIdx < numSizes; bIdx++) + { + suffix.WriteCompressedInteger(bounds[bIdx].Upper.GetValueOrDefault()); } - suffix.WriteCompressedInteger(lowerBoundsDefined); - foreach (var bound in bounds) + suffix.WriteCompressedInteger(numLoBounds); + for (int bIdx = 0; bIdx < numLoBounds; bIdx++) { - suffix.WriteCompressedSignedInteger(bound.Lower.GetValueOrDefault()); + suffix.WriteCompressedSignedInteger(bounds[bIdx].Lower.GetValueOrDefault()); } break; case CILParser.GenericArgumentsModifierContext genericArgs: @@ -5152,9 +5732,13 @@ public GrammarResult.FormattedBlob VisitType(CILParser.TypeContext context) } } - elementType.LinkSuffix(suffix); - prefix.LinkSuffix(elementType); - return new(prefix); + // Work around https://github.com/dotnet/runtime/issues/127243 + // by writing to a separate blob. + BlobBuilder fullBlob = new(elementType.Count + prefix.Count + suffix.Count); + prefix.WriteContentTo(fullBlob); + elementType.WriteContentTo(fullBlob); + suffix.WriteContentTo(fullBlob); + return new(fullBlob); } GrammarResult ICILVisitor.VisitTypeArgs(CILParser.TypeArgsContext context) => VisitTypeArgs(context); diff --git a/src/tools/ilasm/src/ILAssembler/NameHelpers.cs b/src/tools/ilasm/src/ILAssembler/NameHelpers.cs index 00bf24aef494e9..ab235b16891848 100644 --- a/src/tools/ilasm/src/ILAssembler/NameHelpers.cs +++ b/src/tools/ilasm/src/ILAssembler/NameHelpers.cs @@ -20,13 +20,15 @@ public static (string Namespace, string Name) SplitDottedNameToNamespaceAndName( lastDotIndex -= 1; } + // A dot at position 0 is part of the name (e.g., ".GlobalStruct"), not a namespace separator + if (lastDotIndex <= 0) + { + return (string.Empty, dottedName); + } + return ( - lastDotIndex != -1 - ? dottedName.Substring(0, lastDotIndex) - : string.Empty, - lastDotIndex != -1 - ? dottedName.Substring(lastDotIndex + 1) - : dottedName); + dottedName.Substring(0, lastDotIndex), + dottedName.Substring(lastDotIndex + 1)); } } } diff --git a/src/tools/ilasm/src/ILAssembler/NamedElementList.cs b/src/tools/ilasm/src/ILAssembler/NamedElementList.cs index 076fe1f1be30b8..6a047e6160af10 100644 --- a/src/tools/ilasm/src/ILAssembler/NamedElementList.cs +++ b/src/tools/ilasm/src/ILAssembler/NamedElementList.cs @@ -41,7 +41,10 @@ public T this[string name] public void Add(T item) { _elements.Add(item); - _elementsByName.Add(item.Name, item); + // Use TryAdd to keep the first element for name lookup when duplicate names exist. + // This matches native ilasm behavior where duplicate generic parameter names are allowed + // and the first definition wins for name-based lookup. + _elementsByName.TryAdd(item.Name, item); } public void Clear() @@ -60,7 +63,8 @@ public void Clear() public void Insert(int index, T item) { _elements.Insert(index, item); - _elementsByName.Add(item.Name, item); + // Use TryAdd: first-wins for name lookup on duplicate names. + _elementsByName.TryAdd(item.Name, item); } public bool Remove(T item) diff --git a/src/tools/ilasm/src/ILAssembler/Options.cs b/src/tools/ilasm/src/ILAssembler/Options.cs index dc9ff5655820f0..01a34bdeae5f66 100644 --- a/src/tools/ilasm/src/ILAssembler/Options.cs +++ b/src/tools/ilasm/src/ILAssembler/Options.cs @@ -124,15 +124,20 @@ public sealed class Options /// /// Optimize long instructions to short. /// - /// TODO: Not yet implemented - accepted for CLI compatibility. + /// Not yet implemented — accepted for CLI compatibility with native ilasm. public bool Optimize { get; set; } /// /// Fold identical method bodies into one. /// - /// TODO: Not yet implemented - accepted for CLI compatibility. + /// Not yet implemented — accepted for CLI compatibility with native ilasm. public bool Fold { get; set; } + /// + /// Output file name (filename only, no directory). Used as default module name when no .module directive is present. + /// + public string? OutputFileName { get; set; } + /// /// Try to create output file despite errors (results may be invalid). /// diff --git a/src/tools/ilasm/src/ILAssembler/PreprocessedTokenSource.cs b/src/tools/ilasm/src/ILAssembler/PreprocessedTokenSource.cs index c25bd0fb18d77f..9e4ac307fb2d37 100644 --- a/src/tools/ilasm/src/ILAssembler/PreprocessedTokenSource.cs +++ b/src/tools/ilasm/src/ILAssembler/PreprocessedTokenSource.cs @@ -17,14 +17,24 @@ public sealed class PreprocessedTokenSource : ITokenSource { private readonly Stack<(ITokenSource Source, int ActiveIfDefBlocks, string? IncludedFromFile, int IncludedFromLine)> _includeSourceStack = new(); private readonly Func _loadIncludedDocument; + private readonly Func _createLexer; private readonly Dictionary _definedVars = new(); private readonly Stack<(string Var, bool Defined, bool IsElse)> _activeIfDefBlocks = new(); - public PreprocessedTokenSource(ITokenSource underlyingSource, Func loadIncludedDocument) + public PreprocessedTokenSource(ITokenSource underlyingSource, Func loadIncludedDocument, Func createLexer, IReadOnlyDictionary? initialDefinedVars = null) { _includeSourceStack.Push((underlyingSource, 0, null, 0)); _loadIncludedDocument = loadIncludedDocument; + _createLexer = createLexer; + + if (initialDefinedVars != null) + { + foreach (var kvp in initialDefinedVars) + { + _definedVars[kvp.Key] = kvp.Value; + } + } } private ITokenSource CurrentTokenSource => _includeSourceStack.Peek().Source; @@ -36,6 +46,8 @@ public PreprocessedTokenSource(ITokenSource underlyingSource, Func CurrentTokenSource.InputStream; + public IReadOnlyDictionary DefinedVariables => _definedVars; + /// /// Returns the source name with include stack information for better error reporting. /// For nested includes, shows the full include chain. @@ -98,8 +110,17 @@ private IToken NextTokenWithoutNestedEof(bool errorOnEof = false) return nextToken; } + // Queue of tokens produced by macro expansion re-lexing + private readonly Queue _macroExpansionQueue = new(); + public IToken NextToken() { + // If we have queued tokens from a previous macro expansion, return them first + if (_macroExpansionQueue.Count > 0) + { + return _macroExpansionQueue.Dequeue(); + } + IToken nextToken = NextTokenWithoutNestedEof(errorOnEof: ActiveIfDefBlocksInCurrentSource != 0); if (nextToken.Type == CILLexer.PP_INCLUDE) @@ -175,10 +196,44 @@ public IToken NextToken() } else if (nextToken.Type == CILLexer.ID && _definedVars.TryGetValue(nextToken.Text, out string? newValue) && newValue is not null) { - // If token is an ID, we need to check for defined macro values and substitute. - IWritableToken writableToken = (IWritableToken)nextToken; - writableToken.Type = newValue.Contains('.') ? CILLexer.DOTTEDNAME : CILLexer.ID; - writableToken.Text = newValue; + // Re-lex the macro value to produce correct tokens. + // This handles cases like #define NEG_INF "float32(0xFF800000)" where the + // substituted value contains multiple tokens that must be individually lexed. + var macroLexer = _createLexer(newValue); + var tokens = new List(); + for (var t = macroLexer.NextToken(); t.Type != Antlr4.Runtime.TokenConstants.EOF; t = macroLexer.NextToken()) + { + tokens.Add(t); + } + + if (tokens.Count == 1) + { + // Single token: modify in place (preserves source location info) + IWritableToken writableToken = (IWritableToken)nextToken; + writableToken.Type = tokens[0].Type; + writableToken.Text = tokens[0].Text; + } + else if (tokens.Count > 1) + { + // Multiple tokens: return the first, queue the rest. + // Clone queued tokens to inherit the original macro identifier's source + // location so diagnostics on expanded tokens map to the right file/span. + IWritableToken writableToken = (IWritableToken)nextToken; + writableToken.Type = tokens[0].Type; + writableToken.Text = tokens[0].Text; + for (int i = 1; i < tokens.Count; i++) + { + var source = new Tuple(nextToken.TokenSource!, nextToken.TokenSource?.InputStream!); + var expanded = new CommonToken(source, tokens[i].Type, Lexer.DefaultTokenChannel, nextToken.StartIndex, nextToken.StopIndex) + { + Line = nextToken.Line, + Column = nextToken.Column, + Text = tokens[i].Text, + }; + _macroExpansionQueue.Enqueue(expanded); + } + } + // If tokens.Count == 0 (empty macro value), just return the original token as-is } return nextToken; } diff --git a/src/tools/ilasm/src/ILAssembler/gen/CIL.g4 b/src/tools/ilasm/src/ILAssembler/gen/CIL.g4 index dc982483940f17..8fa9b7ac7a7a4e 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CIL.g4 +++ b/src/tools/ilasm/src/ILAssembler/gen/CIL.g4 @@ -9,14 +9,14 @@ tokens { IncludedFileEof, SyntheticIncludedFileEof } INT32: '-'? ('0x' [0-9A-Fa-f]+ | [0-9]+); INT64: '-'? ('0x' [0-9A-Fa-f]+ | [0-9]+); -FLOAT64: '-'? [0-9]+ ('.' [0-9]+ | [eE] '-'? [0-9]+); -HEXBYTE: [0-9A-Fa-f][0-9A-Fa-f]; +FLOAT64: '-'? ([0-9]+ ('.' [0-9]+ ([eE] [+\-]? [0-9]+)? | [eE] [+\-]? [0-9]+) | '.' [0-9]+ ([eE] [+\-]? [0-9]+)?); +// Blob hex bytes are parsed via the hexbyte parser rule; the HEXBYTE lexer token is defined later in this grammar. DCOLON: '::'; -ELLIPSIS: '..'; +ELLIPSIS: '...'; NULL: 'null'; NULLREF: 'nullref'; HASH: '.hash'; -CHAR: 'char'; +CHAR: 'char' | 'wchar'; STRING: 'string'; BOOL: 'bool'; INT8: 'int8'; @@ -26,12 +26,12 @@ INT64_: 'int64'; FLOAT32: 'float32'; FLOAT64_: 'float64'; fragment UNSIGNED: 'unsigned'; -UINT8: 'uint8' | (UNSIGNED INT8); -UINT16: 'uint16' | (UNSIGNED INT16); -UINT32: 'uint32' | (UNSIGNED INT32_); -UINT64: 'uint64' | (UNSIGNED INT64_); +UINT8: 'uint8'; +UINT16: 'uint16'; +UINT32: 'uint32'; +UINT64: 'uint64'; INT: 'int'; -UINT: 'uint' | (UNSIGNED 'int'); +UINT: 'uint'; TYPE: 'type'; OBJECT: 'object'; MODULE: '.module'; @@ -59,11 +59,9 @@ IDISPATCH: 'idispatch'; STRUCT: 'struct'; INTERFACE: 'interface'; SAFEARRAY: 'safearray'; -NESTEDSTRUCT: 'nested' STRUCT; -VARIANTBOOL: VARIANT BOOL; +// NESTEDSTRUCT, VARIANTBOOL, ANSIBSTR are now parser rules to handle whitespace BYVALSTR: 'byvalstr'; ANSI: 'ansi'; -ANSIBSTR: ANSI BSTR; TBSTR: 'tbstr'; METHOD: 'method'; ANY: 'any'; @@ -93,9 +91,9 @@ THISCALL: 'thiscall'; FASTCALL: 'fastcall'; TYPE_PARAMETER: '!'; METHOD_TYPE_PARAMETER: '!' '!'; -TYPEDREF: 'typedref'; -NATIVE_INT: 'native' 'int'; -NATIVE_UINT: ('native' 'unsigned' 'int') | ('native' 'uint'); +TYPEDREF: 'typedref' | 'refany'; +// NATIVE_INT and NATIVE_UINT are now parser rules (nativeInt, nativeUint) +// to handle whitespace between 'native' and 'int'/'uint'. PARAM: '.param'; CONSTRAINT: 'constraint'; @@ -106,8 +104,9 @@ REF: '&'; ARRAY_TYPE_NO_BOUNDS: '[' ']'; PTR: '*'; -QSTRING: '"' (~('"' | '\\') | '\\' ('"' | '\\'))* '"'; -SQSTRING: '\'' (~('\'' | '\\') | '\\' ('\'' | '\\'))* '\''; +fragment ESC_SEQ: '\\' (["'\\/?abfnrtv0] | [0-7] [0-7]? [0-7]? | '\r'? '\n'); +QSTRING: '"' (~["\\\r\n] | ESC_SEQ)* '"'; +SQSTRING: '\'' (~['\\\r\n] | ESC_SEQ)* '\''; DOT: '.'; PLUS: '+'; @@ -139,6 +138,7 @@ INSTR_NONE: | 'stloc.3' | 'ldnull' | 'ldc.i4.m1' + | 'ldc.i4.M1' | 'ldc.i4.0' | 'ldc.i4.1' | 'ldc.i4.2' @@ -158,6 +158,7 @@ INSTR_NONE: | 'ldind.i4' | 'ldind.u4' | 'ldind.i8' + | 'ldind.u8' | 'ldind.i' | 'ldind.r4' | 'ldind.r8' @@ -212,6 +213,7 @@ INSTR_NONE: | 'ldelem.i4' | 'ldelem.u4' | 'ldelem.i8' + | 'ldelem.u8' | 'ldelem.i' | 'ldelem.r4' | 'ldelem.r8' @@ -245,6 +247,7 @@ INSTR_NONE: | 'sub.ovf' | 'sub.ovf.un' | 'endfinally' + | 'endfault' | 'stind.i' | 'conv.u' | 'prefix7' @@ -373,11 +376,17 @@ INSTR_FIELD: INSTR_TOK: 'ldtoken'; // ID needs to be last to ensure it doesn't take priority over other token types -fragment IDSTART: [A-Za-z_#$@]; +fragment IDSTART: [A-Za-z_#$@?]; fragment IDCONT: [A-Za-z0-9_#?$@`]; DOTTEDNAME: (ID DOT)+ ID; ID: IDSTART IDCONT*; +// HEXBYTE: matches exactly two hex digits. Defined AFTER INT32 and ID so that: +// - Pure digit pairs (11, 00) match INT32 first (same length, INT32 defined earlier) +// - Letter-starting pairs (B0, FF) match ID first (same length, ID defined earlier) +// - Digit-letter pairs (3F, 0A) match HEXBYTE (2 chars beats INT32's 1-char match) +HEXBYTE: [0-9A-Fa-f][0-9A-Fa-f]; + id: ID | 'native' @@ -396,8 +405,11 @@ id: | 'aggressiveoptimization' | 'async' | 'extended' + | VALUE + | INSTANCE | SQSTRING; -dottedName: DOTTEDNAME | ((ID '.')* ID); +dottedName: DOTTEDNAME | ((dottedNamePart '.')* dottedNamePart) | SQSTRING; +dottedNamePart: ID | VALUE | INSTANCE; compQstring: (QSTRING PLUS)* QSTRING; @@ -405,7 +417,7 @@ WS: [ \t\r\n] -> skip; SINGLE_LINE_COMMENT: '//' ~[\r\n]* -> skip; COMMENT: '/*' .*? '*/' -> skip; -decls: decl+; +decls: decl*; decl: classHead '{' classDecls '}' @@ -451,9 +463,14 @@ assemblyBlock: mscorlib: '.mscorlib'; languageDecl: - '.language' SQSTRING - | '.language' SQSTRING ',' SQSTRING - | '.language' SQSTRING ',' SQSTRING ',' SQSTRING; + '.language' languageString + | '.language' languageString ',' languageString + | '.language' languageString ',' languageString ',' languageString + // COMPAT: Accept space-separated QSTRING form (used by some IL tools) + | '.language' QSTRING QSTRING + | '.language' QSTRING QSTRING QSTRING; + +languageString: SQSTRING | QSTRING; typelist: '.typelist' '{' (className)* '}'; @@ -462,6 +479,8 @@ int64: INT64 | INT32; float64: FLOAT64 + | int32 '.' /* trailing-dot integer as float (e.g., ldc.r8 1.) */ + | int32 | FLOAT32 '(' int32 ')' | FLOAT64_ '(' int64 ')'; @@ -529,9 +548,9 @@ serializTypeElement: /* Module declaration */ moduleHead: - MODULE + MODULE 'extern' dottedName | MODULE dottedName - | MODULE 'extern' dottedName; + | MODULE; /* VTable Fixup table declaration */ vtfixupDecl: '.vtfixup' '[' int32 ']' vtfixupAttr 'at' id; @@ -604,7 +623,11 @@ extSourceSpec: | esHead int32 ',' int32 ':' int32 | esHead int32 ',' int32 ':' int32 ',' int32 SQSTRING | esHead int32 ',' int32 ':' int32 ',' int32 - | esHead int32 QSTRING; + | esHead int32 QSTRING + | esHead int32 ':' int32 QSTRING + | esHead int32 ':' int32 ',' int32 QSTRING + | esHead int32 ',' int32 ':' int32 QSTRING + | esHead int32 ',' int32 ':' int32 ',' int32 QSTRING; /* Manifest declarations */ fileDecl: @@ -676,11 +699,12 @@ instr: | instr_string 'bytearray' '(' bytes ')' | instr_sig callConv type sigArgs | instr_tok ownerType /* ownerType ::= memberRef | typeSpec */ - | instr_switch '(' labels ')'; + | instr_switch '(' labels ')' + | instr_switch '()'; labels: /* empty */ - | (id | int32 ',')* (id | int32); + | ((id | int32) ',')* (id | int32); typeArgs: '<' (type ',')* type '>'; @@ -690,8 +714,7 @@ sigArgs: '(' (sigArg ',')* sigArg ')' | '()'; sigArg: ELLIPSIS - | paramAttr type marshalClause - | paramAttr type marshalClause id; + | paramAttr type marshalClause id?; /* Class referencing */ @@ -768,11 +791,11 @@ nativeTypeElement: | marshalType=SAFEARRAY variantType ',' compQstring | marshalType=INT | marshalType=UINT - | marshalType=NESTEDSTRUCT + | 'nested' marshalType=STRUCT | marshalType=BYVALSTR - | marshalType=ANSIBSTR + | ANSI marshalType=BSTR | marshalType=TBSTR - | marshalType=VARIANTBOOL + | VARIANT marshalBool=BOOL | marshalType=METHOD | marshalType=LPSTRUCT | 'as' marshalType=ANY @@ -830,7 +853,8 @@ variantTypeElement: type: elementType typeModifiers*; typeModifiers: - '[' ']' # SZArrayModifier + ARRAY_TYPE_NO_BOUNDS # SZArrayModifier + | '[' ']' # SZArrayModifier | bounds # ArrayModifier | REF # ByRefModifier | PTR # PtrModifier @@ -851,8 +875,8 @@ elementType: | TYPE_PARAMETER dottedName | TYPEDREF | VOID - | NATIVE_INT - | NATIVE_UINT + | nativeInt + | nativeUint | simpleType | dottedName /* typedef */ | ELLIPSIS type; @@ -870,7 +894,11 @@ simpleType: | UINT8 | UINT16 | UINT32 - | UINT64; + | UINT64 + | 'unsigned' INT8 + | 'unsigned' INT16 + | 'unsigned' INT32_ + | 'unsigned' INT64_; bound: | ELLIPSIS @@ -878,6 +906,10 @@ bound: | int32 ELLIPSIS int32 | int32 ELLIPSIS; +/* Parser rules for multi-word type tokens that need whitespace handling */ +nativeInt: 'native' INT; +nativeUint: 'native' ('unsigned' INT | UINT); + /* Security declarations */ PERMISSION: '.permission'; PERMISSIONSET: '.permissionset'; @@ -893,8 +925,8 @@ secDecl: secAttrSetBlob: | (secAttrBlob ',')* secAttrBlob; secAttrBlob: - typeSpec '=' '{' customBlobNVPairs '}' - | 'class' SQSTRING '=' '{' customBlobNVPairs '}'; + 'class' SQSTRING '=' '{' customBlobNVPairs '}' + | typeSpec '=' '{' customBlobNVPairs '}'; nameValPairs: (nameValPair ',')* nameValPair; @@ -1036,9 +1068,10 @@ fieldAttr: | 'privatescope' | 'literal' | 'notserialized' + | 'volatile' | 'flags' '(' int32 ')'; -atOpt: /* EMPTY */ | 'at' id; +atOpt: /* EMPTY */ | 'at' id | 'at' int32; initOpt: /* EMPTY */ | '=' fieldInit; @@ -1088,7 +1121,7 @@ propDecl: marshalClause: /* EMPTY */ | 'marshal' '(' marshalBlob ')'; -marshalBlob: nativeType | '{' hexbytes '}'; +marshalBlob: nativeType | '{' hexbyte+ '}'; paramAttr: paramAttrElement*; @@ -1122,7 +1155,7 @@ methAttr: 'static' | 'reqsecobj' | 'flags' '(' int32 ')'; -pinvImpl: 'pinvokeimpl' '(' (compQstring ('as' compQstring)?)? pinvAttr* ')'; +pinvImpl: 'pinvokeimpl' '(' (compQstring ('as' compQstring)?)? pinvAttr* ')' | 'pinvokeimpl' '()'; pinvAttr: 'nomangle' @@ -1146,6 +1179,7 @@ methodName: '.ctor' | '.cctor' | dottedName; implAttr: 'native' | 'cil' + | 'il' | 'optil' | 'managed' | 'unmanaged' @@ -1247,7 +1281,7 @@ ddHead: '.data' tls id '=' | '.data' tls; tls: /* EMPTY */ | 'tls' | 'cil'; -ddBody: '{' ddItemList '}' | ddItem; +ddBody: '{' ddItemList '}' | ddItem+; ddItemList: (ddItem ',')* ddItem; @@ -1256,6 +1290,7 @@ ddItemCount: /* EMPTY */ | '[' int32 ']'; ddItem: CHAR PTR '(' compQstring ')' | REF '(' id ')' + | REF id | 'bytearray' '(' bytes ')' | FLOAT32 '(' float64 ')' ddItemCount | FLOAT64_ '(' float64 ')' ddItemCount @@ -1288,9 +1323,9 @@ fieldSerInit: | BOOL '(' truefalse ')' | 'bytearray' '(' bytes ')'; -bytes: hexbytes*; +bytes: hexbyte*; -hexbytes: HEXBYTE+; +hexbyte: INT32 | ID | HEXBYTE; /* Field/parameter initialization */ fieldInit: fieldSerInit | compQstring | NULLREF; diff --git a/src/tools/ilasm/src/ILAssembler/gen/CIL.interp b/src/tools/ilasm/src/ILAssembler/gen/CIL.interp index 1070a9b268bc97..ba9306cb048f70 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CIL.interp +++ b/src/tools/ilasm/src/ILAssembler/gen/CIL.interp @@ -83,15 +83,16 @@ null 'arm' 'arm64' 'bytearray' +'()' '<' '>' -'()' '/' 'algorithm' 'iidparam' 'pinned' 'modreq' 'modopt' +'unsigned' 'true' 'false' 'request' @@ -125,6 +126,7 @@ null 'privatescope' 'literal' 'notserialized' +'volatile' '.event' '.addon' '.removeon' @@ -153,6 +155,7 @@ null 'off' 'charmaperror' '.cctor' +'il' 'init' '.try' 'to' @@ -171,13 +174,12 @@ null null null null -null '::' -'..' +'...' 'null' 'nullref' '.hash' -'char' +null 'string' 'bool' 'int8' @@ -186,12 +188,12 @@ null 'int64' 'float32' 'float64' -null -null -null -null +'uint8' +'uint16' +'uint32' +'uint64' 'int' -null +'uint' 'type' 'object' '.module' @@ -219,11 +221,8 @@ null 'struct' 'interface' 'safearray' -null -null 'byvalstr' 'ansi' -null 'tbstr' 'method' 'any' @@ -253,8 +252,6 @@ null 'fastcall' '!' null -'typedref' -null null '.param' 'constraint' @@ -294,6 +291,7 @@ null null null null +null '.permission' '.permissionset' '.emitbyte' @@ -477,10 +475,12 @@ null null null null +null +null +null INT32 INT64 FLOAT64 -HEXBYTE DCOLON ELLIPSIS NULL @@ -528,11 +528,8 @@ IDISPATCH STRUCT INTERFACE SAFEARRAY -NESTEDSTRUCT -VARIANTBOOL BYVALSTR ANSI -ANSIBSTR TBSTR METHOD ANY @@ -563,8 +560,6 @@ FASTCALL TYPE_PARAMETER METHOD_TYPE_PARAMETER TYPEDREF -NATIVE_INT -NATIVE_UINT PARAM CONSTRAINT THIS @@ -600,6 +595,7 @@ INSTR_FIELD INSTR_TOK DOTTEDNAME ID +HEXBYTE WS SINGLE_LINE_COMMENT COMMENT @@ -619,6 +615,7 @@ SyntheticIncludedFileEof rule names: id dottedName +dottedNamePart compQstring decls decl @@ -630,6 +627,7 @@ stackreserve assemblyBlock mscorlib languageDecl +languageString typelist int32 int64 @@ -700,6 +698,8 @@ typeModifiers elementType simpleType bound +nativeInt +nativeUint secDecl secAttrSetBlob secAttrBlob @@ -770,7 +770,7 @@ ddItemCount ddItem fieldSerInit bytes -hexbytes +hexbyte fieldInit serInit f32seq @@ -801,4 +801,4 @@ manifestResDecl atn: -[4, 1, 306, 2787, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 368, 8, 1, 10, 1, 12, 1, 371, 9, 1, 1, 1, 3, 1, 374, 8, 1, 1, 2, 1, 2, 5, 2, 378, 8, 2, 10, 2, 12, 2, 381, 9, 2, 1, 2, 1, 2, 1, 3, 4, 3, 386, 8, 3, 11, 3, 12, 3, 387, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 440, 8, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 479, 8, 12, 1, 13, 1, 13, 1, 13, 5, 13, 484, 8, 13, 10, 13, 12, 13, 487, 9, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 506, 8, 16, 1, 17, 1, 17, 3, 17, 510, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 528, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 555, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 578, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 614, 8, 21, 1, 22, 1, 22, 1, 23, 1, 23, 3, 23, 620, 8, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 627, 8, 25, 10, 25, 12, 25, 630, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 639, 8, 26, 10, 26, 12, 26, 642, 9, 26, 1, 27, 1, 27, 1, 28, 1, 28, 3, 28, 648, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 659, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 667, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 5, 32, 688, 8, 32, 10, 32, 12, 32, 691, 9, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 5, 35, 704, 8, 35, 10, 35, 12, 35, 707, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 751, 8, 36, 1, 37, 1, 37, 1, 37, 3, 37, 756, 8, 37, 1, 38, 1, 38, 1, 38, 3, 38, 761, 8, 38, 1, 39, 5, 39, 764, 8, 39, 10, 39, 12, 39, 767, 9, 39, 1, 40, 1, 40, 1, 40, 5, 40, 772, 8, 40, 10, 40, 12, 40, 775, 9, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 852, 8, 42, 1, 43, 1, 43, 5, 43, 856, 8, 43, 10, 43, 12, 43, 859, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 872, 8, 43, 10, 43, 12, 43, 875, 9, 43, 1, 43, 1, 43, 1, 43, 3, 43, 880, 8, 43, 1, 44, 1, 44, 1, 45, 1, 45, 3, 45, 886, 8, 45, 1, 46, 1, 46, 1, 47, 5, 47, 891, 8, 47, 10, 47, 12, 47, 894, 9, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 998, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 1005, 8, 62, 10, 62, 12, 62, 1008, 9, 62, 1, 62, 1, 62, 3, 62, 1012, 8, 62, 3, 62, 1014, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 1020, 8, 63, 10, 63, 12, 63, 1023, 9, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 5, 64, 1032, 8, 64, 10, 64, 12, 64, 1035, 9, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 5, 65, 1044, 8, 65, 10, 65, 12, 65, 1047, 9, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1053, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1065, 8, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 1092, 8, 67, 1, 68, 1, 68, 1, 68, 5, 68, 1097, 8, 68, 10, 68, 12, 68, 1100, 9, 68, 1, 68, 1, 68, 1, 69, 5, 69, 1105, 8, 69, 10, 69, 12, 69, 1108, 9, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1115, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1128, 8, 71, 1, 72, 1, 72, 1, 72, 5, 72, 1133, 8, 72, 10, 72, 12, 72, 1136, 9, 72, 3, 72, 1138, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1157, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1240, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1249, 8, 75, 1, 76, 1, 76, 1, 76, 5, 76, 1254, 8, 76, 10, 76, 12, 76, 1257, 9, 76, 3, 76, 1259, 8, 76, 1, 77, 1, 77, 1, 78, 1, 78, 5, 78, 1265, 8, 78, 10, 78, 12, 78, 1268, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 1287, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1319, 8, 80, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1333, 8, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1358, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1375, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1381, 8, 84, 10, 84, 12, 84, 1384, 9, 84, 1, 84, 3, 84, 1387, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 1402, 8, 85, 1, 86, 1, 86, 1, 86, 5, 86, 1407, 8, 86, 10, 86, 12, 86, 1410, 9, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1454, 8, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1464, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1480, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1492, 8, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 1504, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1518, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1530, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 3, 96, 1541, 8, 96, 1, 97, 1, 97, 1, 97, 5, 97, 1546, 8, 97, 10, 97, 12, 97, 1549, 9, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1558, 8, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 1571, 8, 99, 1, 100, 5, 100, 1574, 8, 100, 10, 100, 12, 100, 1577, 9, 100, 1, 101, 1, 101, 3, 101, 1581, 8, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 5, 102, 1588, 8, 102, 10, 102, 12, 102, 1591, 9, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 3, 104, 1601, 8, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 5, 106, 1682, 8, 106, 10, 106, 12, 106, 1685, 9, 106, 1, 106, 1, 106, 1, 106, 1, 106, 5, 106, 1691, 8, 106, 10, 106, 12, 106, 1694, 9, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 5, 106, 1704, 8, 106, 10, 106, 12, 106, 1707, 9, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 5, 106, 1715, 8, 106, 10, 106, 12, 106, 1718, 9, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1725, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 5, 107, 1735, 8, 107, 10, 107, 12, 107, 1738, 9, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 3, 108, 1763, 8, 108, 1, 109, 1, 109, 1, 109, 3, 109, 1768, 8, 109, 1, 110, 1, 110, 1, 110, 3, 110, 1773, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1780, 8, 111, 1, 112, 1, 112, 5, 112, 1784, 8, 112, 10, 112, 12, 112, 1787, 9, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 5, 112, 1794, 8, 112, 10, 112, 12, 112, 1797, 9, 112, 1, 112, 3, 112, 1800, 8, 112, 1, 113, 1, 113, 1, 114, 5, 114, 1805, 8, 114, 10, 114, 12, 114, 1808, 9, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1822, 8, 115, 1, 116, 1, 116, 5, 116, 1826, 8, 116, 10, 116, 12, 116, 1829, 9, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 5, 118, 1840, 8, 118, 10, 118, 12, 118, 1843, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1855, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1863, 8, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 1870, 8, 121, 1, 122, 5, 122, 1873, 8, 122, 10, 122, 12, 122, 1876, 9, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1891, 8, 123, 1, 124, 1, 124, 1, 124, 5, 124, 1896, 8, 124, 10, 124, 12, 124, 1899, 9, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 5, 124, 1909, 8, 124, 10, 124, 12, 124, 1912, 9, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 3, 125, 1937, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1944, 8, 126, 3, 126, 1946, 8, 126, 1, 126, 5, 126, 1949, 8, 126, 10, 126, 12, 126, 1952, 9, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1983, 8, 127, 1, 128, 1, 128, 1, 128, 3, 128, 1988, 8, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 2010, 8, 129, 1, 130, 5, 130, 2013, 8, 130, 10, 130, 12, 130, 2016, 9, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 2077, 8, 131, 10, 131, 12, 131, 2080, 9, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 2086, 8, 131, 10, 131, 12, 131, 2089, 9, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 2099, 8, 131, 10, 131, 12, 131, 2102, 9, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 2110, 8, 131, 10, 131, 12, 131, 2113, 9, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 2121, 8, 131, 10, 131, 12, 131, 2124, 9, 131, 3, 131, 2126, 8, 131, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 3, 133, 2133, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 4, 136, 2143, 8, 136, 11, 136, 12, 136, 2144, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 3, 137, 2159, 8, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 3, 138, 2173, 8, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 2181, 8, 139, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 2201, 8, 143, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 3, 145, 2213, 8, 145, 1, 146, 1, 146, 1, 146, 3, 146, 2218, 8, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 2225, 8, 147, 1, 148, 1, 148, 1, 148, 5, 148, 2230, 8, 148, 10, 148, 12, 148, 2233, 9, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 2242, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 3, 150, 2308, 8, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 2385, 8, 151, 1, 152, 5, 152, 2388, 8, 152, 10, 152, 12, 152, 2391, 9, 152, 1, 153, 4, 153, 2394, 8, 153, 11, 153, 12, 153, 2395, 1, 154, 1, 154, 1, 154, 3, 154, 2401, 8, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 2551, 8, 155, 1, 156, 1, 156, 5, 156, 2555, 8, 156, 10, 156, 12, 156, 2558, 9, 156, 1, 157, 1, 157, 5, 157, 2562, 8, 157, 10, 157, 12, 157, 2565, 9, 157, 1, 158, 5, 158, 2568, 8, 158, 10, 158, 12, 158, 2571, 9, 158, 1, 159, 5, 159, 2574, 8, 159, 10, 159, 12, 159, 2577, 9, 159, 1, 160, 5, 160, 2580, 8, 160, 10, 160, 12, 160, 2583, 9, 160, 1, 161, 5, 161, 2586, 8, 161, 10, 161, 12, 161, 2589, 9, 161, 1, 162, 5, 162, 2592, 8, 162, 10, 162, 12, 162, 2595, 9, 162, 1, 163, 5, 163, 2598, 8, 163, 10, 163, 12, 163, 2601, 9, 163, 1, 164, 5, 164, 2604, 8, 164, 10, 164, 12, 164, 2607, 9, 164, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2613, 8, 165, 1, 166, 5, 166, 2616, 8, 166, 10, 166, 12, 166, 2619, 9, 166, 1, 167, 1, 167, 1, 167, 3, 167, 2624, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2651, 8, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 2665, 8, 169, 1, 170, 5, 170, 2668, 8, 170, 10, 170, 12, 170, 2671, 9, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 2687, 8, 171, 1, 172, 1, 172, 1, 172, 5, 172, 2692, 8, 172, 10, 172, 12, 172, 2695, 9, 172, 1, 172, 1, 172, 1, 173, 1, 173, 5, 173, 2701, 8, 173, 10, 173, 12, 173, 2704, 9, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2723, 8, 174, 1, 175, 5, 175, 2726, 8, 175, 10, 175, 12, 175, 2729, 9, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 3, 176, 2744, 8, 176, 1, 177, 1, 177, 5, 177, 2748, 8, 177, 10, 177, 12, 177, 2751, 9, 177, 1, 177, 1, 177, 1, 177, 5, 177, 2756, 8, 177, 10, 177, 12, 177, 2759, 9, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 2765, 8, 177, 1, 178, 1, 178, 1, 179, 5, 179, 2770, 8, 179, 10, 179, 12, 179, 2773, 9, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 2785, 8, 180, 1, 180, 0, 1, 64, 181, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 0, 13, 4, 0, 1, 15, 247, 247, 266, 266, 291, 291, 1, 0, 169, 170, 1, 0, 36, 37, 1, 0, 72, 73, 3, 0, 2, 2, 60, 60, 76, 82, 2, 0, 229, 229, 262, 263, 9, 0, 175, 175, 180, 192, 198, 198, 204, 205, 207, 212, 215, 216, 219, 219, 230, 242, 264, 264, 1, 0, 178, 190, 1, 0, 93, 94, 1, 0, 95, 109, 1, 0, 67, 68, 2, 0, 176, 176, 266, 266, 1, 0, 50, 51, 3170, 0, 362, 1, 0, 0, 0, 2, 373, 1, 0, 0, 0, 4, 379, 1, 0, 0, 0, 6, 385, 1, 0, 0, 0, 8, 439, 1, 0, 0, 0, 10, 441, 1, 0, 0, 0, 12, 444, 1, 0, 0, 0, 14, 447, 1, 0, 0, 0, 16, 451, 1, 0, 0, 0, 18, 454, 1, 0, 0, 0, 20, 457, 1, 0, 0, 0, 22, 464, 1, 0, 0, 0, 24, 478, 1, 0, 0, 0, 26, 480, 1, 0, 0, 0, 28, 490, 1, 0, 0, 0, 30, 492, 1, 0, 0, 0, 32, 505, 1, 0, 0, 0, 34, 509, 1, 0, 0, 0, 36, 527, 1, 0, 0, 0, 38, 554, 1, 0, 0, 0, 40, 577, 1, 0, 0, 0, 42, 613, 1, 0, 0, 0, 44, 615, 1, 0, 0, 0, 46, 619, 1, 0, 0, 0, 48, 621, 1, 0, 0, 0, 50, 628, 1, 0, 0, 0, 52, 640, 1, 0, 0, 0, 54, 643, 1, 0, 0, 0, 56, 645, 1, 0, 0, 0, 58, 658, 1, 0, 0, 0, 60, 666, 1, 0, 0, 0, 62, 668, 1, 0, 0, 0, 64, 676, 1, 0, 0, 0, 66, 692, 1, 0, 0, 0, 68, 698, 1, 0, 0, 0, 70, 701, 1, 0, 0, 0, 72, 750, 1, 0, 0, 0, 74, 755, 1, 0, 0, 0, 76, 760, 1, 0, 0, 0, 78, 765, 1, 0, 0, 0, 80, 773, 1, 0, 0, 0, 82, 778, 1, 0, 0, 0, 84, 851, 1, 0, 0, 0, 86, 879, 1, 0, 0, 0, 88, 881, 1, 0, 0, 0, 90, 885, 1, 0, 0, 0, 92, 887, 1, 0, 0, 0, 94, 892, 1, 0, 0, 0, 96, 895, 1, 0, 0, 0, 98, 897, 1, 0, 0, 0, 100, 899, 1, 0, 0, 0, 102, 901, 1, 0, 0, 0, 104, 903, 1, 0, 0, 0, 106, 905, 1, 0, 0, 0, 108, 907, 1, 0, 0, 0, 110, 909, 1, 0, 0, 0, 112, 911, 1, 0, 0, 0, 114, 913, 1, 0, 0, 0, 116, 915, 1, 0, 0, 0, 118, 917, 1, 0, 0, 0, 120, 919, 1, 0, 0, 0, 122, 997, 1, 0, 0, 0, 124, 1013, 1, 0, 0, 0, 126, 1015, 1, 0, 0, 0, 128, 1027, 1, 0, 0, 0, 130, 1052, 1, 0, 0, 0, 132, 1064, 1, 0, 0, 0, 134, 1091, 1, 0, 0, 0, 136, 1098, 1, 0, 0, 0, 138, 1106, 1, 0, 0, 0, 140, 1114, 1, 0, 0, 0, 142, 1127, 1, 0, 0, 0, 144, 1137, 1, 0, 0, 0, 146, 1156, 1, 0, 0, 0, 148, 1239, 1, 0, 0, 0, 150, 1248, 1, 0, 0, 0, 152, 1258, 1, 0, 0, 0, 154, 1260, 1, 0, 0, 0, 156, 1262, 1, 0, 0, 0, 158, 1286, 1, 0, 0, 0, 160, 1318, 1, 0, 0, 0, 162, 1320, 1, 0, 0, 0, 164, 1332, 1, 0, 0, 0, 166, 1374, 1, 0, 0, 0, 168, 1386, 1, 0, 0, 0, 170, 1401, 1, 0, 0, 0, 172, 1408, 1, 0, 0, 0, 174, 1413, 1, 0, 0, 0, 176, 1417, 1, 0, 0, 0, 178, 1453, 1, 0, 0, 0, 180, 1455, 1, 0, 0, 0, 182, 1491, 1, 0, 0, 0, 184, 1503, 1, 0, 0, 0, 186, 1517, 1, 0, 0, 0, 188, 1519, 1, 0, 0, 0, 190, 1529, 1, 0, 0, 0, 192, 1540, 1, 0, 0, 0, 194, 1547, 1, 0, 0, 0, 196, 1557, 1, 0, 0, 0, 198, 1570, 1, 0, 0, 0, 200, 1575, 1, 0, 0, 0, 202, 1578, 1, 0, 0, 0, 204, 1589, 1, 0, 0, 0, 206, 1594, 1, 0, 0, 0, 208, 1600, 1, 0, 0, 0, 210, 1602, 1, 0, 0, 0, 212, 1724, 1, 0, 0, 0, 214, 1726, 1, 0, 0, 0, 216, 1762, 1, 0, 0, 0, 218, 1767, 1, 0, 0, 0, 220, 1772, 1, 0, 0, 0, 222, 1779, 1, 0, 0, 0, 224, 1799, 1, 0, 0, 0, 226, 1801, 1, 0, 0, 0, 228, 1806, 1, 0, 0, 0, 230, 1821, 1, 0, 0, 0, 232, 1823, 1, 0, 0, 0, 234, 1836, 1, 0, 0, 0, 236, 1841, 1, 0, 0, 0, 238, 1854, 1, 0, 0, 0, 240, 1862, 1, 0, 0, 0, 242, 1869, 1, 0, 0, 0, 244, 1874, 1, 0, 0, 0, 246, 1890, 1, 0, 0, 0, 248, 1892, 1, 0, 0, 0, 250, 1936, 1, 0, 0, 0, 252, 1938, 1, 0, 0, 0, 254, 1982, 1, 0, 0, 0, 256, 1987, 1, 0, 0, 0, 258, 2009, 1, 0, 0, 0, 260, 2014, 1, 0, 0, 0, 262, 2125, 1, 0, 0, 0, 264, 2127, 1, 0, 0, 0, 266, 2132, 1, 0, 0, 0, 268, 2134, 1, 0, 0, 0, 270, 2138, 1, 0, 0, 0, 272, 2142, 1, 0, 0, 0, 274, 2158, 1, 0, 0, 0, 276, 2172, 1, 0, 0, 0, 278, 2180, 1, 0, 0, 0, 280, 2182, 1, 0, 0, 0, 282, 2185, 1, 0, 0, 0, 284, 2187, 1, 0, 0, 0, 286, 2200, 1, 0, 0, 0, 288, 2202, 1, 0, 0, 0, 290, 2212, 1, 0, 0, 0, 292, 2217, 1, 0, 0, 0, 294, 2224, 1, 0, 0, 0, 296, 2231, 1, 0, 0, 0, 298, 2241, 1, 0, 0, 0, 300, 2307, 1, 0, 0, 0, 302, 2384, 1, 0, 0, 0, 304, 2389, 1, 0, 0, 0, 306, 2393, 1, 0, 0, 0, 308, 2400, 1, 0, 0, 0, 310, 2550, 1, 0, 0, 0, 312, 2556, 1, 0, 0, 0, 314, 2563, 1, 0, 0, 0, 316, 2569, 1, 0, 0, 0, 318, 2575, 1, 0, 0, 0, 320, 2581, 1, 0, 0, 0, 322, 2587, 1, 0, 0, 0, 324, 2593, 1, 0, 0, 0, 326, 2599, 1, 0, 0, 0, 328, 2605, 1, 0, 0, 0, 330, 2612, 1, 0, 0, 0, 332, 2617, 1, 0, 0, 0, 334, 2623, 1, 0, 0, 0, 336, 2650, 1, 0, 0, 0, 338, 2664, 1, 0, 0, 0, 340, 2669, 1, 0, 0, 0, 342, 2686, 1, 0, 0, 0, 344, 2688, 1, 0, 0, 0, 346, 2698, 1, 0, 0, 0, 348, 2722, 1, 0, 0, 0, 350, 2727, 1, 0, 0, 0, 352, 2743, 1, 0, 0, 0, 354, 2764, 1, 0, 0, 0, 356, 2766, 1, 0, 0, 0, 358, 2771, 1, 0, 0, 0, 360, 2784, 1, 0, 0, 0, 362, 363, 7, 0, 0, 0, 363, 1, 1, 0, 0, 0, 364, 374, 5, 290, 0, 0, 365, 366, 5, 291, 0, 0, 366, 368, 5, 267, 0, 0, 367, 365, 1, 0, 0, 0, 368, 371, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 372, 374, 5, 291, 0, 0, 373, 364, 1, 0, 0, 0, 373, 369, 1, 0, 0, 0, 374, 3, 1, 0, 0, 0, 375, 376, 5, 265, 0, 0, 376, 378, 5, 268, 0, 0, 377, 375, 1, 0, 0, 0, 378, 381, 1, 0, 0, 0, 379, 377, 1, 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 382, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 383, 5, 265, 0, 0, 383, 5, 1, 0, 0, 0, 384, 386, 3, 8, 4, 0, 385, 384, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 7, 1, 0, 0, 0, 389, 390, 3, 70, 35, 0, 390, 391, 5, 16, 0, 0, 391, 392, 3, 78, 39, 0, 392, 393, 5, 17, 0, 0, 393, 440, 1, 0, 0, 0, 394, 395, 3, 68, 34, 0, 395, 396, 5, 16, 0, 0, 396, 397, 3, 6, 3, 0, 397, 398, 5, 17, 0, 0, 398, 440, 1, 0, 0, 0, 399, 400, 3, 248, 124, 0, 400, 401, 5, 16, 0, 0, 401, 402, 3, 260, 130, 0, 402, 403, 5, 17, 0, 0, 403, 440, 1, 0, 0, 0, 404, 440, 3, 214, 107, 0, 405, 440, 3, 288, 144, 0, 406, 440, 3, 66, 33, 0, 407, 440, 3, 62, 31, 0, 408, 440, 3, 84, 42, 0, 409, 440, 3, 86, 43, 0, 410, 440, 3, 20, 10, 0, 411, 412, 3, 338, 169, 0, 412, 413, 5, 16, 0, 0, 413, 414, 3, 340, 170, 0, 414, 415, 5, 17, 0, 0, 415, 440, 1, 0, 0, 0, 416, 417, 3, 344, 172, 0, 417, 418, 5, 16, 0, 0, 418, 419, 3, 350, 175, 0, 419, 420, 5, 17, 0, 0, 420, 440, 1, 0, 0, 0, 421, 422, 3, 354, 177, 0, 422, 423, 5, 16, 0, 0, 423, 424, 3, 358, 179, 0, 424, 425, 5, 17, 0, 0, 425, 440, 1, 0, 0, 0, 426, 440, 3, 60, 30, 0, 427, 440, 3, 166, 83, 0, 428, 440, 3, 334, 167, 0, 429, 440, 3, 10, 5, 0, 430, 440, 3, 12, 6, 0, 431, 440, 3, 14, 7, 0, 432, 440, 3, 16, 8, 0, 433, 440, 3, 18, 9, 0, 434, 440, 3, 24, 12, 0, 435, 440, 3, 38, 19, 0, 436, 440, 3, 36, 18, 0, 437, 440, 3, 26, 13, 0, 438, 440, 3, 22, 11, 0, 439, 389, 1, 0, 0, 0, 439, 394, 1, 0, 0, 0, 439, 399, 1, 0, 0, 0, 439, 404, 1, 0, 0, 0, 439, 405, 1, 0, 0, 0, 439, 406, 1, 0, 0, 0, 439, 407, 1, 0, 0, 0, 439, 408, 1, 0, 0, 0, 439, 409, 1, 0, 0, 0, 439, 410, 1, 0, 0, 0, 439, 411, 1, 0, 0, 0, 439, 416, 1, 0, 0, 0, 439, 421, 1, 0, 0, 0, 439, 426, 1, 0, 0, 0, 439, 427, 1, 0, 0, 0, 439, 428, 1, 0, 0, 0, 439, 429, 1, 0, 0, 0, 439, 430, 1, 0, 0, 0, 439, 431, 1, 0, 0, 0, 439, 432, 1, 0, 0, 0, 439, 433, 1, 0, 0, 0, 439, 434, 1, 0, 0, 0, 439, 435, 1, 0, 0, 0, 439, 436, 1, 0, 0, 0, 439, 437, 1, 0, 0, 0, 439, 438, 1, 0, 0, 0, 440, 9, 1, 0, 0, 0, 441, 442, 5, 18, 0, 0, 442, 443, 3, 28, 14, 0, 443, 11, 1, 0, 0, 0, 444, 445, 5, 19, 0, 0, 445, 446, 3, 28, 14, 0, 446, 13, 1, 0, 0, 0, 447, 448, 5, 20, 0, 0, 448, 449, 5, 21, 0, 0, 449, 450, 3, 28, 14, 0, 450, 15, 1, 0, 0, 0, 451, 452, 5, 22, 0, 0, 452, 453, 3, 30, 15, 0, 453, 17, 1, 0, 0, 0, 454, 455, 5, 23, 0, 0, 455, 456, 3, 30, 15, 0, 456, 19, 1, 0, 0, 0, 457, 458, 5, 24, 0, 0, 458, 459, 3, 94, 47, 0, 459, 460, 3, 2, 1, 0, 460, 461, 5, 16, 0, 0, 461, 462, 3, 138, 69, 0, 462, 463, 5, 17, 0, 0, 463, 21, 1, 0, 0, 0, 464, 465, 5, 25, 0, 0, 465, 23, 1, 0, 0, 0, 466, 467, 5, 26, 0, 0, 467, 479, 5, 266, 0, 0, 468, 469, 5, 26, 0, 0, 469, 470, 5, 266, 0, 0, 470, 471, 5, 27, 0, 0, 471, 479, 5, 266, 0, 0, 472, 473, 5, 26, 0, 0, 473, 474, 5, 266, 0, 0, 474, 475, 5, 27, 0, 0, 475, 476, 5, 266, 0, 0, 476, 477, 5, 27, 0, 0, 477, 479, 5, 266, 0, 0, 478, 466, 1, 0, 0, 0, 478, 468, 1, 0, 0, 0, 478, 472, 1, 0, 0, 0, 479, 25, 1, 0, 0, 0, 480, 481, 5, 28, 0, 0, 481, 485, 5, 16, 0, 0, 482, 484, 3, 134, 67, 0, 483, 482, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 489, 5, 17, 0, 0, 489, 27, 1, 0, 0, 0, 490, 491, 5, 169, 0, 0, 491, 29, 1, 0, 0, 0, 492, 493, 7, 1, 0, 0, 493, 31, 1, 0, 0, 0, 494, 506, 5, 171, 0, 0, 495, 496, 5, 185, 0, 0, 496, 497, 5, 29, 0, 0, 497, 498, 3, 28, 14, 0, 498, 499, 5, 30, 0, 0, 499, 506, 1, 0, 0, 0, 500, 501, 5, 186, 0, 0, 501, 502, 5, 29, 0, 0, 502, 503, 3, 30, 15, 0, 503, 504, 5, 30, 0, 0, 504, 506, 1, 0, 0, 0, 505, 494, 1, 0, 0, 0, 505, 495, 1, 0, 0, 0, 505, 500, 1, 0, 0, 0, 506, 33, 1, 0, 0, 0, 507, 510, 3, 28, 14, 0, 508, 510, 5, 264, 0, 0, 509, 507, 1, 0, 0, 0, 509, 508, 1, 0, 0, 0, 510, 35, 1, 0, 0, 0, 511, 512, 5, 269, 0, 0, 512, 528, 5, 291, 0, 0, 513, 514, 5, 269, 0, 0, 514, 515, 5, 291, 0, 0, 515, 528, 5, 265, 0, 0, 516, 517, 5, 270, 0, 0, 517, 528, 5, 291, 0, 0, 518, 519, 5, 271, 0, 0, 519, 528, 5, 291, 0, 0, 520, 521, 5, 272, 0, 0, 521, 528, 5, 291, 0, 0, 522, 528, 5, 273, 0, 0, 523, 528, 5, 274, 0, 0, 524, 525, 5, 275, 0, 0, 525, 528, 5, 265, 0, 0, 526, 528, 5, 31, 0, 0, 527, 511, 1, 0, 0, 0, 527, 513, 1, 0, 0, 0, 527, 516, 1, 0, 0, 0, 527, 518, 1, 0, 0, 0, 527, 520, 1, 0, 0, 0, 527, 522, 1, 0, 0, 0, 527, 523, 1, 0, 0, 0, 527, 524, 1, 0, 0, 0, 527, 526, 1, 0, 0, 0, 528, 37, 1, 0, 0, 0, 529, 530, 5, 32, 0, 0, 530, 531, 3, 156, 78, 0, 531, 532, 5, 33, 0, 0, 532, 533, 3, 2, 1, 0, 533, 555, 1, 0, 0, 0, 534, 535, 5, 32, 0, 0, 535, 536, 3, 134, 67, 0, 536, 537, 5, 33, 0, 0, 537, 538, 3, 2, 1, 0, 538, 555, 1, 0, 0, 0, 539, 540, 5, 32, 0, 0, 540, 541, 3, 190, 95, 0, 541, 542, 5, 33, 0, 0, 542, 543, 3, 2, 1, 0, 543, 555, 1, 0, 0, 0, 544, 545, 5, 32, 0, 0, 545, 546, 3, 40, 20, 0, 546, 547, 5, 33, 0, 0, 547, 548, 3, 2, 1, 0, 548, 555, 1, 0, 0, 0, 549, 550, 5, 32, 0, 0, 550, 551, 3, 42, 21, 0, 551, 552, 5, 33, 0, 0, 552, 553, 3, 2, 1, 0, 553, 555, 1, 0, 0, 0, 554, 529, 1, 0, 0, 0, 554, 534, 1, 0, 0, 0, 554, 539, 1, 0, 0, 0, 554, 544, 1, 0, 0, 0, 554, 549, 1, 0, 0, 0, 555, 39, 1, 0, 0, 0, 556, 557, 5, 34, 0, 0, 557, 578, 3, 44, 22, 0, 558, 559, 5, 34, 0, 0, 559, 560, 3, 44, 22, 0, 560, 561, 5, 35, 0, 0, 561, 562, 3, 4, 2, 0, 562, 578, 1, 0, 0, 0, 563, 564, 5, 34, 0, 0, 564, 565, 3, 44, 22, 0, 565, 566, 5, 35, 0, 0, 566, 567, 5, 16, 0, 0, 567, 568, 3, 48, 24, 0, 568, 569, 5, 17, 0, 0, 569, 578, 1, 0, 0, 0, 570, 571, 5, 34, 0, 0, 571, 572, 3, 44, 22, 0, 572, 573, 5, 35, 0, 0, 573, 574, 5, 29, 0, 0, 574, 575, 3, 304, 152, 0, 575, 576, 5, 30, 0, 0, 576, 578, 1, 0, 0, 0, 577, 556, 1, 0, 0, 0, 577, 558, 1, 0, 0, 0, 577, 563, 1, 0, 0, 0, 577, 570, 1, 0, 0, 0, 578, 41, 1, 0, 0, 0, 579, 580, 5, 34, 0, 0, 580, 581, 5, 29, 0, 0, 581, 582, 3, 46, 23, 0, 582, 583, 5, 30, 0, 0, 583, 584, 3, 44, 22, 0, 584, 614, 1, 0, 0, 0, 585, 586, 5, 34, 0, 0, 586, 587, 5, 29, 0, 0, 587, 588, 3, 46, 23, 0, 588, 589, 5, 30, 0, 0, 589, 590, 3, 44, 22, 0, 590, 591, 5, 35, 0, 0, 591, 592, 3, 4, 2, 0, 592, 614, 1, 0, 0, 0, 593, 594, 5, 34, 0, 0, 594, 595, 5, 29, 0, 0, 595, 596, 3, 46, 23, 0, 596, 597, 5, 30, 0, 0, 597, 598, 3, 44, 22, 0, 598, 599, 5, 35, 0, 0, 599, 600, 5, 16, 0, 0, 600, 601, 3, 48, 24, 0, 601, 602, 5, 17, 0, 0, 602, 614, 1, 0, 0, 0, 603, 604, 5, 34, 0, 0, 604, 605, 5, 29, 0, 0, 605, 606, 3, 46, 23, 0, 606, 607, 5, 30, 0, 0, 607, 608, 3, 44, 22, 0, 608, 609, 5, 35, 0, 0, 609, 610, 5, 29, 0, 0, 610, 611, 3, 304, 152, 0, 611, 612, 5, 30, 0, 0, 612, 614, 1, 0, 0, 0, 613, 579, 1, 0, 0, 0, 613, 585, 1, 0, 0, 0, 613, 593, 1, 0, 0, 0, 613, 603, 1, 0, 0, 0, 614, 43, 1, 0, 0, 0, 615, 616, 3, 182, 91, 0, 616, 45, 1, 0, 0, 0, 617, 620, 3, 142, 71, 0, 618, 620, 3, 190, 95, 0, 619, 617, 1, 0, 0, 0, 619, 618, 1, 0, 0, 0, 620, 47, 1, 0, 0, 0, 621, 622, 3, 50, 25, 0, 622, 623, 3, 52, 26, 0, 623, 49, 1, 0, 0, 0, 624, 627, 3, 310, 155, 0, 625, 627, 3, 36, 18, 0, 626, 624, 1, 0, 0, 0, 626, 625, 1, 0, 0, 0, 627, 630, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 51, 1, 0, 0, 0, 630, 628, 1, 0, 0, 0, 631, 632, 3, 54, 27, 0, 632, 633, 3, 56, 28, 0, 633, 634, 3, 2, 1, 0, 634, 635, 5, 35, 0, 0, 635, 636, 3, 310, 155, 0, 636, 639, 1, 0, 0, 0, 637, 639, 3, 36, 18, 0, 638, 631, 1, 0, 0, 0, 638, 637, 1, 0, 0, 0, 639, 642, 1, 0, 0, 0, 640, 638, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 53, 1, 0, 0, 0, 642, 640, 1, 0, 0, 0, 643, 644, 7, 2, 0, 0, 644, 55, 1, 0, 0, 0, 645, 647, 3, 58, 29, 0, 646, 648, 5, 263, 0, 0, 647, 646, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 57, 1, 0, 0, 0, 649, 659, 3, 162, 81, 0, 650, 659, 3, 2, 1, 0, 651, 659, 5, 193, 0, 0, 652, 659, 5, 194, 0, 0, 653, 654, 5, 199, 0, 0, 654, 655, 5, 38, 0, 0, 655, 659, 5, 266, 0, 0, 656, 657, 5, 199, 0, 0, 657, 659, 3, 134, 67, 0, 658, 649, 1, 0, 0, 0, 658, 650, 1, 0, 0, 0, 658, 651, 1, 0, 0, 0, 658, 652, 1, 0, 0, 0, 658, 653, 1, 0, 0, 0, 658, 656, 1, 0, 0, 0, 659, 59, 1, 0, 0, 0, 660, 667, 5, 195, 0, 0, 661, 662, 5, 195, 0, 0, 662, 667, 3, 2, 1, 0, 663, 664, 5, 195, 0, 0, 664, 665, 5, 39, 0, 0, 665, 667, 3, 2, 1, 0, 666, 660, 1, 0, 0, 0, 666, 661, 1, 0, 0, 0, 666, 663, 1, 0, 0, 0, 667, 61, 1, 0, 0, 0, 668, 669, 5, 40, 0, 0, 669, 670, 5, 41, 0, 0, 670, 671, 3, 28, 14, 0, 671, 672, 5, 42, 0, 0, 672, 673, 3, 64, 32, 0, 673, 674, 5, 43, 0, 0, 674, 675, 3, 0, 0, 0, 675, 63, 1, 0, 0, 0, 676, 689, 6, 32, -1, 0, 677, 678, 10, 5, 0, 0, 678, 688, 5, 183, 0, 0, 679, 680, 10, 4, 0, 0, 680, 688, 5, 184, 0, 0, 681, 682, 10, 3, 0, 0, 682, 688, 5, 44, 0, 0, 683, 684, 10, 2, 0, 0, 684, 688, 5, 45, 0, 0, 685, 686, 10, 1, 0, 0, 686, 688, 5, 46, 0, 0, 687, 677, 1, 0, 0, 0, 687, 679, 1, 0, 0, 0, 687, 681, 1, 0, 0, 0, 687, 683, 1, 0, 0, 0, 687, 685, 1, 0, 0, 0, 688, 691, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 65, 1, 0, 0, 0, 691, 689, 1, 0, 0, 0, 692, 693, 5, 47, 0, 0, 693, 694, 5, 35, 0, 0, 694, 695, 5, 29, 0, 0, 695, 696, 3, 304, 152, 0, 696, 697, 5, 30, 0, 0, 697, 67, 1, 0, 0, 0, 698, 699, 5, 48, 0, 0, 699, 700, 3, 2, 1, 0, 700, 69, 1, 0, 0, 0, 701, 705, 5, 49, 0, 0, 702, 704, 3, 72, 36, 0, 703, 702, 1, 0, 0, 0, 704, 707, 1, 0, 0, 0, 705, 703, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 708, 1, 0, 0, 0, 707, 705, 1, 0, 0, 0, 708, 709, 3, 2, 1, 0, 709, 710, 3, 196, 98, 0, 710, 711, 3, 74, 37, 0, 711, 712, 3, 76, 38, 0, 712, 71, 1, 0, 0, 0, 713, 751, 5, 50, 0, 0, 714, 751, 5, 51, 0, 0, 715, 751, 5, 196, 0, 0, 716, 751, 5, 199, 0, 0, 717, 751, 5, 218, 0, 0, 718, 751, 5, 52, 0, 0, 719, 751, 5, 53, 0, 0, 720, 751, 5, 54, 0, 0, 721, 751, 5, 55, 0, 0, 722, 751, 5, 244, 0, 0, 723, 751, 5, 15, 0, 0, 724, 751, 5, 223, 0, 0, 725, 751, 5, 56, 0, 0, 726, 751, 5, 57, 0, 0, 727, 751, 5, 58, 0, 0, 728, 751, 5, 59, 0, 0, 729, 751, 5, 60, 0, 0, 730, 731, 5, 61, 0, 0, 731, 751, 5, 50, 0, 0, 732, 733, 5, 61, 0, 0, 733, 751, 5, 51, 0, 0, 734, 735, 5, 61, 0, 0, 735, 751, 5, 62, 0, 0, 736, 737, 5, 61, 0, 0, 737, 751, 5, 63, 0, 0, 738, 739, 5, 61, 0, 0, 739, 751, 5, 64, 0, 0, 740, 741, 5, 61, 0, 0, 741, 751, 5, 65, 0, 0, 742, 751, 5, 66, 0, 0, 743, 751, 5, 67, 0, 0, 744, 751, 5, 68, 0, 0, 745, 746, 5, 69, 0, 0, 746, 747, 5, 29, 0, 0, 747, 748, 3, 28, 14, 0, 748, 749, 5, 30, 0, 0, 749, 751, 1, 0, 0, 0, 750, 713, 1, 0, 0, 0, 750, 714, 1, 0, 0, 0, 750, 715, 1, 0, 0, 0, 750, 716, 1, 0, 0, 0, 750, 717, 1, 0, 0, 0, 750, 718, 1, 0, 0, 0, 750, 719, 1, 0, 0, 0, 750, 720, 1, 0, 0, 0, 750, 721, 1, 0, 0, 0, 750, 722, 1, 0, 0, 0, 750, 723, 1, 0, 0, 0, 750, 724, 1, 0, 0, 0, 750, 725, 1, 0, 0, 0, 750, 726, 1, 0, 0, 0, 750, 727, 1, 0, 0, 0, 750, 728, 1, 0, 0, 0, 750, 729, 1, 0, 0, 0, 750, 730, 1, 0, 0, 0, 750, 732, 1, 0, 0, 0, 750, 734, 1, 0, 0, 0, 750, 736, 1, 0, 0, 0, 750, 738, 1, 0, 0, 0, 750, 740, 1, 0, 0, 0, 750, 742, 1, 0, 0, 0, 750, 743, 1, 0, 0, 0, 750, 744, 1, 0, 0, 0, 750, 745, 1, 0, 0, 0, 751, 73, 1, 0, 0, 0, 752, 756, 1, 0, 0, 0, 753, 754, 5, 70, 0, 0, 754, 756, 3, 142, 71, 0, 755, 752, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 756, 75, 1, 0, 0, 0, 757, 761, 1, 0, 0, 0, 758, 759, 5, 71, 0, 0, 759, 761, 3, 80, 40, 0, 760, 757, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 761, 77, 1, 0, 0, 0, 762, 764, 3, 212, 106, 0, 763, 762, 1, 0, 0, 0, 764, 767, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 79, 1, 0, 0, 0, 767, 765, 1, 0, 0, 0, 768, 769, 3, 142, 71, 0, 769, 770, 5, 27, 0, 0, 770, 772, 1, 0, 0, 0, 771, 768, 1, 0, 0, 0, 772, 775, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 776, 1, 0, 0, 0, 775, 773, 1, 0, 0, 0, 776, 777, 3, 142, 71, 0, 777, 81, 1, 0, 0, 0, 778, 779, 7, 3, 0, 0, 779, 83, 1, 0, 0, 0, 780, 781, 3, 82, 41, 0, 781, 782, 3, 28, 14, 0, 782, 783, 5, 266, 0, 0, 783, 852, 1, 0, 0, 0, 784, 785, 3, 82, 41, 0, 785, 786, 3, 28, 14, 0, 786, 852, 1, 0, 0, 0, 787, 788, 3, 82, 41, 0, 788, 789, 3, 28, 14, 0, 789, 790, 5, 74, 0, 0, 790, 791, 3, 28, 14, 0, 791, 792, 5, 266, 0, 0, 792, 852, 1, 0, 0, 0, 793, 794, 3, 82, 41, 0, 794, 795, 3, 28, 14, 0, 795, 796, 5, 74, 0, 0, 796, 797, 3, 28, 14, 0, 797, 852, 1, 0, 0, 0, 798, 799, 3, 82, 41, 0, 799, 800, 3, 28, 14, 0, 800, 801, 5, 74, 0, 0, 801, 802, 3, 28, 14, 0, 802, 803, 5, 27, 0, 0, 803, 804, 3, 28, 14, 0, 804, 805, 5, 266, 0, 0, 805, 852, 1, 0, 0, 0, 806, 807, 3, 82, 41, 0, 807, 808, 3, 28, 14, 0, 808, 809, 5, 74, 0, 0, 809, 810, 3, 28, 14, 0, 810, 811, 5, 27, 0, 0, 811, 812, 3, 28, 14, 0, 812, 852, 1, 0, 0, 0, 813, 814, 3, 82, 41, 0, 814, 815, 3, 28, 14, 0, 815, 816, 5, 27, 0, 0, 816, 817, 3, 28, 14, 0, 817, 818, 5, 74, 0, 0, 818, 819, 3, 28, 14, 0, 819, 820, 5, 266, 0, 0, 820, 852, 1, 0, 0, 0, 821, 822, 3, 82, 41, 0, 822, 823, 3, 28, 14, 0, 823, 824, 5, 27, 0, 0, 824, 825, 3, 28, 14, 0, 825, 826, 5, 74, 0, 0, 826, 827, 3, 28, 14, 0, 827, 852, 1, 0, 0, 0, 828, 829, 3, 82, 41, 0, 829, 830, 3, 28, 14, 0, 830, 831, 5, 27, 0, 0, 831, 832, 3, 28, 14, 0, 832, 833, 5, 74, 0, 0, 833, 834, 3, 28, 14, 0, 834, 835, 5, 27, 0, 0, 835, 836, 3, 28, 14, 0, 836, 837, 5, 266, 0, 0, 837, 852, 1, 0, 0, 0, 838, 839, 3, 82, 41, 0, 839, 840, 3, 28, 14, 0, 840, 841, 5, 27, 0, 0, 841, 842, 3, 28, 14, 0, 842, 843, 5, 74, 0, 0, 843, 844, 3, 28, 14, 0, 844, 845, 5, 27, 0, 0, 845, 846, 3, 28, 14, 0, 846, 852, 1, 0, 0, 0, 847, 848, 3, 82, 41, 0, 848, 849, 3, 28, 14, 0, 849, 850, 5, 265, 0, 0, 850, 852, 1, 0, 0, 0, 851, 780, 1, 0, 0, 0, 851, 784, 1, 0, 0, 0, 851, 787, 1, 0, 0, 0, 851, 793, 1, 0, 0, 0, 851, 798, 1, 0, 0, 0, 851, 806, 1, 0, 0, 0, 851, 813, 1, 0, 0, 0, 851, 821, 1, 0, 0, 0, 851, 828, 1, 0, 0, 0, 851, 838, 1, 0, 0, 0, 851, 847, 1, 0, 0, 0, 852, 85, 1, 0, 0, 0, 853, 857, 5, 20, 0, 0, 854, 856, 3, 88, 44, 0, 855, 854, 1, 0, 0, 0, 856, 859, 1, 0, 0, 0, 857, 855, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 860, 1, 0, 0, 0, 859, 857, 1, 0, 0, 0, 860, 861, 3, 2, 1, 0, 861, 862, 3, 90, 45, 0, 862, 863, 5, 177, 0, 0, 863, 864, 5, 35, 0, 0, 864, 865, 5, 29, 0, 0, 865, 866, 3, 304, 152, 0, 866, 867, 5, 30, 0, 0, 867, 868, 3, 90, 45, 0, 868, 880, 1, 0, 0, 0, 869, 873, 5, 20, 0, 0, 870, 872, 3, 88, 44, 0, 871, 870, 1, 0, 0, 0, 872, 875, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 876, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 876, 877, 3, 2, 1, 0, 877, 878, 3, 90, 45, 0, 878, 880, 1, 0, 0, 0, 879, 853, 1, 0, 0, 0, 879, 869, 1, 0, 0, 0, 880, 87, 1, 0, 0, 0, 881, 882, 5, 75, 0, 0, 882, 89, 1, 0, 0, 0, 883, 886, 1, 0, 0, 0, 884, 886, 5, 299, 0, 0, 885, 883, 1, 0, 0, 0, 885, 884, 1, 0, 0, 0, 886, 91, 1, 0, 0, 0, 887, 888, 7, 4, 0, 0, 888, 93, 1, 0, 0, 0, 889, 891, 3, 92, 46, 0, 890, 889, 1, 0, 0, 0, 891, 894, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 95, 1, 0, 0, 0, 894, 892, 1, 0, 0, 0, 895, 896, 5, 277, 0, 0, 896, 97, 1, 0, 0, 0, 897, 898, 5, 278, 0, 0, 898, 99, 1, 0, 0, 0, 899, 900, 5, 279, 0, 0, 900, 101, 1, 0, 0, 0, 901, 902, 5, 280, 0, 0, 902, 103, 1, 0, 0, 0, 903, 904, 5, 281, 0, 0, 904, 105, 1, 0, 0, 0, 905, 906, 5, 284, 0, 0, 906, 107, 1, 0, 0, 0, 907, 908, 5, 282, 0, 0, 908, 109, 1, 0, 0, 0, 909, 910, 5, 288, 0, 0, 910, 111, 1, 0, 0, 0, 911, 912, 5, 286, 0, 0, 912, 113, 1, 0, 0, 0, 913, 914, 5, 287, 0, 0, 914, 115, 1, 0, 0, 0, 915, 916, 5, 283, 0, 0, 916, 117, 1, 0, 0, 0, 917, 918, 5, 289, 0, 0, 918, 119, 1, 0, 0, 0, 919, 920, 5, 285, 0, 0, 920, 121, 1, 0, 0, 0, 921, 998, 3, 96, 48, 0, 922, 923, 3, 98, 49, 0, 923, 924, 3, 28, 14, 0, 924, 998, 1, 0, 0, 0, 925, 926, 3, 98, 49, 0, 926, 927, 3, 0, 0, 0, 927, 998, 1, 0, 0, 0, 928, 929, 3, 100, 50, 0, 929, 930, 3, 28, 14, 0, 930, 998, 1, 0, 0, 0, 931, 932, 3, 102, 51, 0, 932, 933, 3, 30, 15, 0, 933, 998, 1, 0, 0, 0, 934, 935, 3, 104, 52, 0, 935, 936, 3, 32, 16, 0, 936, 998, 1, 0, 0, 0, 937, 938, 3, 104, 52, 0, 938, 939, 3, 30, 15, 0, 939, 998, 1, 0, 0, 0, 940, 941, 3, 104, 52, 0, 941, 942, 5, 29, 0, 0, 942, 943, 3, 304, 152, 0, 943, 944, 5, 30, 0, 0, 944, 998, 1, 0, 0, 0, 945, 946, 3, 104, 52, 0, 946, 947, 5, 83, 0, 0, 947, 948, 5, 29, 0, 0, 948, 949, 3, 304, 152, 0, 949, 950, 5, 30, 0, 0, 950, 998, 1, 0, 0, 0, 951, 952, 3, 106, 53, 0, 952, 953, 3, 28, 14, 0, 953, 998, 1, 0, 0, 0, 954, 955, 3, 106, 53, 0, 955, 956, 3, 0, 0, 0, 956, 998, 1, 0, 0, 0, 957, 958, 3, 108, 54, 0, 958, 959, 3, 182, 91, 0, 959, 998, 1, 0, 0, 0, 960, 961, 3, 110, 55, 0, 961, 962, 3, 192, 96, 0, 962, 998, 1, 0, 0, 0, 963, 964, 3, 110, 55, 0, 964, 965, 3, 188, 94, 0, 965, 998, 1, 0, 0, 0, 966, 967, 3, 112, 56, 0, 967, 968, 3, 142, 71, 0, 968, 998, 1, 0, 0, 0, 969, 970, 3, 114, 57, 0, 970, 971, 3, 4, 2, 0, 971, 998, 1, 0, 0, 0, 972, 973, 3, 114, 57, 0, 973, 974, 5, 223, 0, 0, 974, 975, 5, 29, 0, 0, 975, 976, 3, 4, 2, 0, 976, 977, 5, 30, 0, 0, 977, 998, 1, 0, 0, 0, 978, 979, 3, 114, 57, 0, 979, 980, 5, 83, 0, 0, 980, 981, 5, 29, 0, 0, 981, 982, 3, 304, 152, 0, 982, 983, 5, 30, 0, 0, 983, 998, 1, 0, 0, 0, 984, 985, 3, 116, 58, 0, 985, 986, 3, 184, 92, 0, 986, 987, 3, 156, 78, 0, 987, 988, 3, 130, 65, 0, 988, 998, 1, 0, 0, 0, 989, 990, 3, 118, 59, 0, 990, 991, 3, 46, 23, 0, 991, 998, 1, 0, 0, 0, 992, 993, 3, 120, 60, 0, 993, 994, 5, 29, 0, 0, 994, 995, 3, 124, 62, 0, 995, 996, 5, 30, 0, 0, 996, 998, 1, 0, 0, 0, 997, 921, 1, 0, 0, 0, 997, 922, 1, 0, 0, 0, 997, 925, 1, 0, 0, 0, 997, 928, 1, 0, 0, 0, 997, 931, 1, 0, 0, 0, 997, 934, 1, 0, 0, 0, 997, 937, 1, 0, 0, 0, 997, 940, 1, 0, 0, 0, 997, 945, 1, 0, 0, 0, 997, 951, 1, 0, 0, 0, 997, 954, 1, 0, 0, 0, 997, 957, 1, 0, 0, 0, 997, 960, 1, 0, 0, 0, 997, 963, 1, 0, 0, 0, 997, 966, 1, 0, 0, 0, 997, 969, 1, 0, 0, 0, 997, 972, 1, 0, 0, 0, 997, 978, 1, 0, 0, 0, 997, 984, 1, 0, 0, 0, 997, 989, 1, 0, 0, 0, 997, 992, 1, 0, 0, 0, 998, 123, 1, 0, 0, 0, 999, 1014, 1, 0, 0, 0, 1000, 1005, 3, 0, 0, 0, 1001, 1002, 3, 28, 14, 0, 1002, 1003, 5, 27, 0, 0, 1003, 1005, 1, 0, 0, 0, 1004, 1000, 1, 0, 0, 0, 1004, 1001, 1, 0, 0, 0, 1005, 1008, 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1011, 1, 0, 0, 0, 1008, 1006, 1, 0, 0, 0, 1009, 1012, 3, 0, 0, 0, 1010, 1012, 3, 28, 14, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1010, 1, 0, 0, 0, 1012, 1014, 1, 0, 0, 0, 1013, 999, 1, 0, 0, 0, 1013, 1006, 1, 0, 0, 0, 1014, 125, 1, 0, 0, 0, 1015, 1021, 5, 84, 0, 0, 1016, 1017, 3, 156, 78, 0, 1017, 1018, 5, 27, 0, 0, 1018, 1020, 1, 0, 0, 0, 1019, 1016, 1, 0, 0, 0, 1020, 1023, 1, 0, 0, 0, 1021, 1019, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1024, 1, 0, 0, 0, 1023, 1021, 1, 0, 0, 0, 1024, 1025, 3, 156, 78, 0, 1025, 1026, 5, 85, 0, 0, 1026, 127, 1, 0, 0, 0, 1027, 1033, 5, 41, 0, 0, 1028, 1029, 3, 164, 82, 0, 1029, 1030, 5, 27, 0, 0, 1030, 1032, 1, 0, 0, 0, 1031, 1028, 1, 0, 0, 0, 1032, 1035, 1, 0, 0, 0, 1033, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 1036, 1, 0, 0, 0, 1035, 1033, 1, 0, 0, 0, 1036, 1037, 3, 164, 82, 0, 1037, 1038, 5, 42, 0, 0, 1038, 129, 1, 0, 0, 0, 1039, 1045, 5, 29, 0, 0, 1040, 1041, 3, 132, 66, 0, 1041, 1042, 5, 27, 0, 0, 1042, 1044, 1, 0, 0, 0, 1043, 1040, 1, 0, 0, 0, 1044, 1047, 1, 0, 0, 0, 1045, 1043, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1048, 1, 0, 0, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1049, 3, 132, 66, 0, 1049, 1050, 5, 30, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1053, 5, 86, 0, 0, 1052, 1039, 1, 0, 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 131, 1, 0, 0, 0, 1054, 1065, 5, 174, 0, 0, 1055, 1056, 3, 244, 122, 0, 1056, 1057, 3, 156, 78, 0, 1057, 1058, 3, 240, 120, 0, 1058, 1065, 1, 0, 0, 0, 1059, 1060, 3, 244, 122, 0, 1060, 1061, 3, 156, 78, 0, 1061, 1062, 3, 240, 120, 0, 1062, 1063, 3, 0, 0, 0, 1063, 1065, 1, 0, 0, 0, 1064, 1054, 1, 0, 0, 0, 1064, 1055, 1, 0, 0, 0, 1064, 1059, 1, 0, 0, 0, 1065, 133, 1, 0, 0, 0, 1066, 1067, 5, 41, 0, 0, 1067, 1068, 3, 2, 1, 0, 1068, 1069, 5, 42, 0, 0, 1069, 1070, 3, 136, 68, 0, 1070, 1092, 1, 0, 0, 0, 1071, 1072, 5, 41, 0, 0, 1072, 1073, 3, 188, 94, 0, 1073, 1074, 5, 42, 0, 0, 1074, 1075, 3, 136, 68, 0, 1075, 1092, 1, 0, 0, 0, 1076, 1077, 5, 41, 0, 0, 1077, 1078, 5, 264, 0, 0, 1078, 1079, 5, 42, 0, 0, 1079, 1092, 3, 136, 68, 0, 1080, 1081, 5, 41, 0, 0, 1081, 1082, 5, 195, 0, 0, 1082, 1083, 3, 2, 1, 0, 1083, 1084, 5, 42, 0, 0, 1084, 1085, 3, 136, 68, 0, 1085, 1092, 1, 0, 0, 0, 1086, 1092, 3, 136, 68, 0, 1087, 1092, 3, 188, 94, 0, 1088, 1092, 5, 259, 0, 0, 1089, 1092, 5, 260, 0, 0, 1090, 1092, 5, 261, 0, 0, 1091, 1066, 1, 0, 0, 0, 1091, 1071, 1, 0, 0, 0, 1091, 1076, 1, 0, 0, 0, 1091, 1080, 1, 0, 0, 0, 1091, 1086, 1, 0, 0, 0, 1091, 1087, 1, 0, 0, 0, 1091, 1088, 1, 0, 0, 0, 1091, 1089, 1, 0, 0, 0, 1091, 1090, 1, 0, 0, 0, 1092, 135, 1, 0, 0, 0, 1093, 1094, 3, 2, 1, 0, 1094, 1095, 5, 87, 0, 0, 1095, 1097, 1, 0, 0, 0, 1096, 1093, 1, 0, 0, 0, 1097, 1100, 1, 0, 0, 0, 1098, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1101, 1, 0, 0, 0, 1100, 1098, 1, 0, 0, 0, 1101, 1102, 3, 2, 1, 0, 1102, 137, 1, 0, 0, 0, 1103, 1105, 3, 140, 70, 0, 1104, 1103, 1, 0, 0, 0, 1105, 1108, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 139, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1109, 1110, 5, 177, 0, 0, 1110, 1111, 5, 88, 0, 0, 1111, 1115, 3, 28, 14, 0, 1112, 1115, 3, 166, 83, 0, 1113, 1115, 3, 336, 168, 0, 1114, 1109, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1113, 1, 0, 0, 0, 1115, 141, 1, 0, 0, 0, 1116, 1128, 3, 134, 67, 0, 1117, 1118, 5, 41, 0, 0, 1118, 1119, 3, 2, 1, 0, 1119, 1120, 5, 42, 0, 0, 1120, 1128, 1, 0, 0, 0, 1121, 1122, 5, 41, 0, 0, 1122, 1123, 5, 195, 0, 0, 1123, 1124, 3, 2, 1, 0, 1124, 1125, 5, 42, 0, 0, 1125, 1128, 1, 0, 0, 0, 1126, 1128, 3, 156, 78, 0, 1127, 1116, 1, 0, 0, 0, 1127, 1117, 1, 0, 0, 0, 1127, 1121, 1, 0, 0, 0, 1127, 1126, 1, 0, 0, 0, 1128, 143, 1, 0, 0, 0, 1129, 1138, 1, 0, 0, 0, 1130, 1134, 3, 148, 74, 0, 1131, 1133, 3, 146, 73, 0, 1132, 1131, 1, 0, 0, 0, 1133, 1136, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1138, 1, 0, 0, 0, 1136, 1134, 1, 0, 0, 0, 1137, 1129, 1, 0, 0, 0, 1137, 1130, 1, 0, 0, 0, 1138, 145, 1, 0, 0, 0, 1139, 1157, 5, 264, 0, 0, 1140, 1157, 5, 263, 0, 0, 1141, 1142, 5, 41, 0, 0, 1142, 1143, 3, 28, 14, 0, 1143, 1144, 5, 42, 0, 0, 1144, 1157, 1, 0, 0, 0, 1145, 1146, 5, 41, 0, 0, 1146, 1147, 3, 28, 14, 0, 1147, 1148, 5, 268, 0, 0, 1148, 1149, 3, 28, 14, 0, 1149, 1150, 5, 42, 0, 0, 1150, 1157, 1, 0, 0, 0, 1151, 1152, 5, 41, 0, 0, 1152, 1153, 5, 268, 0, 0, 1153, 1154, 3, 28, 14, 0, 1154, 1155, 5, 42, 0, 0, 1155, 1157, 1, 0, 0, 0, 1156, 1139, 1, 0, 0, 0, 1156, 1140, 1, 0, 0, 0, 1156, 1141, 1, 0, 0, 0, 1156, 1145, 1, 0, 0, 0, 1156, 1151, 1, 0, 0, 0, 1157, 147, 1, 0, 0, 0, 1158, 1240, 1, 0, 0, 0, 1159, 1160, 5, 200, 0, 0, 1160, 1161, 5, 29, 0, 0, 1161, 1162, 3, 4, 2, 0, 1162, 1163, 5, 27, 0, 0, 1163, 1164, 3, 4, 2, 0, 1164, 1165, 5, 27, 0, 0, 1165, 1166, 3, 4, 2, 0, 1166, 1167, 5, 27, 0, 0, 1167, 1168, 3, 4, 2, 0, 1168, 1169, 5, 30, 0, 0, 1169, 1240, 1, 0, 0, 0, 1170, 1171, 5, 200, 0, 0, 1171, 1172, 5, 29, 0, 0, 1172, 1173, 3, 4, 2, 0, 1173, 1174, 5, 27, 0, 0, 1174, 1175, 3, 4, 2, 0, 1175, 1176, 5, 30, 0, 0, 1176, 1240, 1, 0, 0, 0, 1177, 1178, 5, 201, 0, 0, 1178, 1179, 5, 202, 0, 0, 1179, 1180, 5, 41, 0, 0, 1180, 1181, 3, 28, 14, 0, 1181, 1182, 5, 42, 0, 0, 1182, 1240, 1, 0, 0, 0, 1183, 1184, 5, 201, 0, 0, 1184, 1185, 5, 203, 0, 0, 1185, 1186, 5, 41, 0, 0, 1186, 1187, 3, 28, 14, 0, 1187, 1188, 5, 42, 0, 0, 1188, 1189, 3, 144, 72, 0, 1189, 1240, 1, 0, 0, 0, 1190, 1240, 5, 204, 0, 0, 1191, 1240, 5, 205, 0, 0, 1192, 1240, 5, 206, 0, 0, 1193, 1240, 5, 198, 0, 0, 1194, 1240, 5, 180, 0, 0, 1195, 1240, 5, 181, 0, 0, 1196, 1240, 5, 182, 0, 0, 1197, 1240, 5, 183, 0, 0, 1198, 1240, 5, 184, 0, 0, 1199, 1240, 5, 185, 0, 0, 1200, 1240, 5, 186, 0, 0, 1201, 1240, 5, 207, 0, 0, 1202, 1240, 5, 187, 0, 0, 1203, 1240, 5, 188, 0, 0, 1204, 1240, 5, 189, 0, 0, 1205, 1240, 5, 190, 0, 0, 1206, 1240, 5, 208, 0, 0, 1207, 1240, 5, 209, 0, 0, 1208, 1240, 5, 210, 0, 0, 1209, 1240, 5, 211, 0, 0, 1210, 1240, 5, 212, 0, 0, 1211, 1240, 5, 213, 0, 0, 1212, 1240, 5, 214, 0, 0, 1213, 1214, 5, 215, 0, 0, 1214, 1240, 3, 150, 75, 0, 1215, 1216, 5, 216, 0, 0, 1216, 1240, 3, 150, 75, 0, 1217, 1240, 5, 217, 0, 0, 1218, 1219, 5, 218, 0, 0, 1219, 1240, 3, 150, 75, 0, 1220, 1221, 5, 219, 0, 0, 1221, 1240, 3, 152, 76, 0, 1222, 1223, 5, 219, 0, 0, 1223, 1224, 3, 152, 76, 0, 1224, 1225, 5, 27, 0, 0, 1225, 1226, 3, 4, 2, 0, 1226, 1240, 1, 0, 0, 0, 1227, 1240, 5, 191, 0, 0, 1228, 1240, 5, 192, 0, 0, 1229, 1240, 5, 220, 0, 0, 1230, 1240, 5, 222, 0, 0, 1231, 1240, 5, 224, 0, 0, 1232, 1240, 5, 225, 0, 0, 1233, 1240, 5, 221, 0, 0, 1234, 1240, 5, 226, 0, 0, 1235, 1240, 5, 228, 0, 0, 1236, 1237, 5, 33, 0, 0, 1237, 1240, 5, 227, 0, 0, 1238, 1240, 3, 2, 1, 0, 1239, 1158, 1, 0, 0, 0, 1239, 1159, 1, 0, 0, 0, 1239, 1170, 1, 0, 0, 0, 1239, 1177, 1, 0, 0, 0, 1239, 1183, 1, 0, 0, 0, 1239, 1190, 1, 0, 0, 0, 1239, 1191, 1, 0, 0, 0, 1239, 1192, 1, 0, 0, 0, 1239, 1193, 1, 0, 0, 0, 1239, 1194, 1, 0, 0, 0, 1239, 1195, 1, 0, 0, 0, 1239, 1196, 1, 0, 0, 0, 1239, 1197, 1, 0, 0, 0, 1239, 1198, 1, 0, 0, 0, 1239, 1199, 1, 0, 0, 0, 1239, 1200, 1, 0, 0, 0, 1239, 1201, 1, 0, 0, 0, 1239, 1202, 1, 0, 0, 0, 1239, 1203, 1, 0, 0, 0, 1239, 1204, 1, 0, 0, 0, 1239, 1205, 1, 0, 0, 0, 1239, 1206, 1, 0, 0, 0, 1239, 1207, 1, 0, 0, 0, 1239, 1208, 1, 0, 0, 0, 1239, 1209, 1, 0, 0, 0, 1239, 1210, 1, 0, 0, 0, 1239, 1211, 1, 0, 0, 0, 1239, 1212, 1, 0, 0, 0, 1239, 1213, 1, 0, 0, 0, 1239, 1215, 1, 0, 0, 0, 1239, 1217, 1, 0, 0, 0, 1239, 1218, 1, 0, 0, 0, 1239, 1220, 1, 0, 0, 0, 1239, 1222, 1, 0, 0, 0, 1239, 1227, 1, 0, 0, 0, 1239, 1228, 1, 0, 0, 0, 1239, 1229, 1, 0, 0, 0, 1239, 1230, 1, 0, 0, 0, 1239, 1231, 1, 0, 0, 0, 1239, 1232, 1, 0, 0, 0, 1239, 1233, 1, 0, 0, 0, 1239, 1234, 1, 0, 0, 0, 1239, 1235, 1, 0, 0, 0, 1239, 1236, 1, 0, 0, 0, 1239, 1238, 1, 0, 0, 0, 1240, 149, 1, 0, 0, 0, 1241, 1249, 1, 0, 0, 0, 1242, 1243, 5, 29, 0, 0, 1243, 1244, 5, 89, 0, 0, 1244, 1245, 5, 35, 0, 0, 1245, 1246, 3, 28, 14, 0, 1246, 1247, 5, 30, 0, 0, 1247, 1249, 1, 0, 0, 0, 1248, 1241, 1, 0, 0, 0, 1248, 1242, 1, 0, 0, 0, 1249, 151, 1, 0, 0, 0, 1250, 1259, 1, 0, 0, 0, 1251, 1255, 3, 154, 77, 0, 1252, 1254, 7, 5, 0, 0, 1253, 1252, 1, 0, 0, 0, 1254, 1257, 1, 0, 0, 0, 1255, 1253, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 1259, 1, 0, 0, 0, 1257, 1255, 1, 0, 0, 0, 1258, 1250, 1, 0, 0, 0, 1258, 1251, 1, 0, 0, 0, 1259, 153, 1, 0, 0, 0, 1260, 1261, 7, 6, 0, 0, 1261, 155, 1, 0, 0, 0, 1262, 1266, 3, 160, 80, 0, 1263, 1265, 3, 158, 79, 0, 1264, 1263, 1, 0, 0, 0, 1265, 1268, 1, 0, 0, 0, 1266, 1264, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, 157, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1269, 1270, 5, 41, 0, 0, 1270, 1287, 5, 42, 0, 0, 1271, 1287, 3, 128, 64, 0, 1272, 1287, 5, 262, 0, 0, 1273, 1287, 5, 264, 0, 0, 1274, 1287, 5, 90, 0, 0, 1275, 1276, 5, 91, 0, 0, 1276, 1277, 5, 29, 0, 0, 1277, 1278, 3, 142, 71, 0, 1278, 1279, 5, 30, 0, 0, 1279, 1287, 1, 0, 0, 0, 1280, 1281, 5, 92, 0, 0, 1281, 1282, 5, 29, 0, 0, 1282, 1283, 3, 142, 71, 0, 1283, 1284, 5, 30, 0, 0, 1284, 1287, 1, 0, 0, 0, 1285, 1287, 3, 126, 63, 0, 1286, 1269, 1, 0, 0, 0, 1286, 1271, 1, 0, 0, 0, 1286, 1272, 1, 0, 0, 0, 1286, 1273, 1, 0, 0, 0, 1286, 1274, 1, 0, 0, 0, 1286, 1275, 1, 0, 0, 0, 1286, 1280, 1, 0, 0, 0, 1286, 1285, 1, 0, 0, 0, 1287, 159, 1, 0, 0, 0, 1288, 1289, 5, 38, 0, 0, 1289, 1319, 3, 134, 67, 0, 1290, 1319, 5, 194, 0, 0, 1291, 1292, 5, 196, 0, 0, 1292, 1293, 5, 38, 0, 0, 1293, 1319, 3, 134, 67, 0, 1294, 1295, 5, 197, 0, 0, 1295, 1319, 3, 134, 67, 0, 1296, 1297, 5, 226, 0, 0, 1297, 1298, 3, 184, 92, 0, 1298, 1299, 3, 156, 78, 0, 1299, 1300, 5, 264, 0, 0, 1300, 1301, 3, 130, 65, 0, 1301, 1319, 1, 0, 0, 0, 1302, 1303, 5, 253, 0, 0, 1303, 1319, 3, 28, 14, 0, 1304, 1305, 5, 252, 0, 0, 1305, 1319, 3, 28, 14, 0, 1306, 1307, 5, 253, 0, 0, 1307, 1319, 3, 2, 1, 0, 1308, 1309, 5, 252, 0, 0, 1309, 1319, 3, 2, 1, 0, 1310, 1319, 5, 254, 0, 0, 1311, 1319, 5, 198, 0, 0, 1312, 1319, 5, 255, 0, 0, 1313, 1319, 5, 256, 0, 0, 1314, 1319, 3, 162, 81, 0, 1315, 1319, 3, 2, 1, 0, 1316, 1317, 5, 174, 0, 0, 1317, 1319, 3, 156, 78, 0, 1318, 1288, 1, 0, 0, 0, 1318, 1290, 1, 0, 0, 0, 1318, 1291, 1, 0, 0, 0, 1318, 1294, 1, 0, 0, 0, 1318, 1296, 1, 0, 0, 0, 1318, 1302, 1, 0, 0, 0, 1318, 1304, 1, 0, 0, 0, 1318, 1306, 1, 0, 0, 0, 1318, 1308, 1, 0, 0, 0, 1318, 1310, 1, 0, 0, 0, 1318, 1311, 1, 0, 0, 0, 1318, 1312, 1, 0, 0, 0, 1318, 1313, 1, 0, 0, 0, 1318, 1314, 1, 0, 0, 0, 1318, 1315, 1, 0, 0, 0, 1318, 1316, 1, 0, 0, 0, 1319, 161, 1, 0, 0, 0, 1320, 1321, 7, 7, 0, 0, 1321, 163, 1, 0, 0, 0, 1322, 1333, 1, 0, 0, 0, 1323, 1333, 5, 174, 0, 0, 1324, 1333, 3, 28, 14, 0, 1325, 1326, 3, 28, 14, 0, 1326, 1327, 5, 174, 0, 0, 1327, 1328, 3, 28, 14, 0, 1328, 1333, 1, 0, 0, 0, 1329, 1330, 3, 28, 14, 0, 1330, 1331, 5, 174, 0, 0, 1331, 1333, 1, 0, 0, 0, 1332, 1322, 1, 0, 0, 0, 1332, 1323, 1, 0, 0, 0, 1332, 1324, 1, 0, 0, 0, 1332, 1325, 1, 0, 0, 0, 1332, 1329, 1, 0, 0, 0, 1333, 165, 1, 0, 0, 0, 1334, 1335, 5, 295, 0, 0, 1335, 1336, 3, 180, 90, 0, 1336, 1337, 3, 142, 71, 0, 1337, 1338, 5, 29, 0, 0, 1338, 1339, 3, 172, 86, 0, 1339, 1340, 5, 30, 0, 0, 1340, 1375, 1, 0, 0, 0, 1341, 1342, 5, 295, 0, 0, 1342, 1343, 3, 180, 90, 0, 1343, 1344, 3, 142, 71, 0, 1344, 1345, 5, 35, 0, 0, 1345, 1346, 5, 16, 0, 0, 1346, 1347, 3, 48, 24, 0, 1347, 1348, 5, 17, 0, 0, 1348, 1375, 1, 0, 0, 0, 1349, 1350, 5, 295, 0, 0, 1350, 1351, 3, 180, 90, 0, 1351, 1352, 3, 142, 71, 0, 1352, 1375, 1, 0, 0, 0, 1353, 1354, 5, 296, 0, 0, 1354, 1355, 3, 180, 90, 0, 1355, 1357, 5, 35, 0, 0, 1356, 1358, 5, 83, 0, 0, 1357, 1356, 1, 0, 0, 0, 1357, 1358, 1, 0, 0, 0, 1358, 1359, 1, 0, 0, 0, 1359, 1360, 5, 29, 0, 0, 1360, 1361, 3, 304, 152, 0, 1361, 1362, 5, 30, 0, 0, 1362, 1375, 1, 0, 0, 0, 1363, 1364, 5, 296, 0, 0, 1364, 1365, 3, 180, 90, 0, 1365, 1366, 3, 4, 2, 0, 1366, 1375, 1, 0, 0, 0, 1367, 1368, 5, 296, 0, 0, 1368, 1369, 3, 180, 90, 0, 1369, 1370, 5, 35, 0, 0, 1370, 1371, 5, 16, 0, 0, 1371, 1372, 3, 168, 84, 0, 1372, 1373, 5, 17, 0, 0, 1373, 1375, 1, 0, 0, 0, 1374, 1334, 1, 0, 0, 0, 1374, 1341, 1, 0, 0, 0, 1374, 1349, 1, 0, 0, 0, 1374, 1353, 1, 0, 0, 0, 1374, 1363, 1, 0, 0, 0, 1374, 1367, 1, 0, 0, 0, 1375, 167, 1, 0, 0, 0, 1376, 1387, 1, 0, 0, 0, 1377, 1378, 3, 170, 85, 0, 1378, 1379, 5, 27, 0, 0, 1379, 1381, 1, 0, 0, 0, 1380, 1377, 1, 0, 0, 0, 1381, 1384, 1, 0, 0, 0, 1382, 1380, 1, 0, 0, 0, 1382, 1383, 1, 0, 0, 0, 1383, 1385, 1, 0, 0, 0, 1384, 1382, 1, 0, 0, 0, 1385, 1387, 3, 170, 85, 0, 1386, 1376, 1, 0, 0, 0, 1386, 1382, 1, 0, 0, 0, 1387, 169, 1, 0, 0, 0, 1388, 1389, 3, 142, 71, 0, 1389, 1390, 5, 35, 0, 0, 1390, 1391, 5, 16, 0, 0, 1391, 1392, 3, 52, 26, 0, 1392, 1393, 5, 17, 0, 0, 1393, 1402, 1, 0, 0, 0, 1394, 1395, 5, 38, 0, 0, 1395, 1396, 5, 266, 0, 0, 1396, 1397, 5, 35, 0, 0, 1397, 1398, 5, 16, 0, 0, 1398, 1399, 3, 52, 26, 0, 1399, 1400, 5, 17, 0, 0, 1400, 1402, 1, 0, 0, 0, 1401, 1388, 1, 0, 0, 0, 1401, 1394, 1, 0, 0, 0, 1402, 171, 1, 0, 0, 0, 1403, 1404, 3, 174, 87, 0, 1404, 1405, 5, 27, 0, 0, 1405, 1407, 1, 0, 0, 0, 1406, 1403, 1, 0, 0, 0, 1407, 1410, 1, 0, 0, 0, 1408, 1406, 1, 0, 0, 0, 1408, 1409, 1, 0, 0, 0, 1409, 1411, 1, 0, 0, 0, 1410, 1408, 1, 0, 0, 0, 1411, 1412, 3, 174, 87, 0, 1412, 173, 1, 0, 0, 0, 1413, 1414, 3, 4, 2, 0, 1414, 1415, 5, 35, 0, 0, 1415, 1416, 3, 178, 89, 0, 1416, 175, 1, 0, 0, 0, 1417, 1418, 7, 8, 0, 0, 1418, 177, 1, 0, 0, 0, 1419, 1454, 3, 176, 88, 0, 1420, 1454, 3, 28, 14, 0, 1421, 1422, 5, 183, 0, 0, 1422, 1423, 5, 29, 0, 0, 1423, 1424, 3, 28, 14, 0, 1424, 1425, 5, 30, 0, 0, 1425, 1454, 1, 0, 0, 0, 1426, 1454, 3, 4, 2, 0, 1427, 1428, 3, 134, 67, 0, 1428, 1429, 5, 29, 0, 0, 1429, 1430, 5, 181, 0, 0, 1430, 1431, 5, 74, 0, 0, 1431, 1432, 3, 28, 14, 0, 1432, 1433, 5, 30, 0, 0, 1433, 1454, 1, 0, 0, 0, 1434, 1435, 3, 134, 67, 0, 1435, 1436, 5, 29, 0, 0, 1436, 1437, 5, 182, 0, 0, 1437, 1438, 5, 74, 0, 0, 1438, 1439, 3, 28, 14, 0, 1439, 1440, 5, 30, 0, 0, 1440, 1454, 1, 0, 0, 0, 1441, 1442, 3, 134, 67, 0, 1442, 1443, 5, 29, 0, 0, 1443, 1444, 5, 183, 0, 0, 1444, 1445, 5, 74, 0, 0, 1445, 1446, 3, 28, 14, 0, 1446, 1447, 5, 30, 0, 0, 1447, 1454, 1, 0, 0, 0, 1448, 1449, 3, 134, 67, 0, 1449, 1450, 5, 29, 0, 0, 1450, 1451, 3, 28, 14, 0, 1451, 1452, 5, 30, 0, 0, 1452, 1454, 1, 0, 0, 0, 1453, 1419, 1, 0, 0, 0, 1453, 1420, 1, 0, 0, 0, 1453, 1421, 1, 0, 0, 0, 1453, 1426, 1, 0, 0, 0, 1453, 1427, 1, 0, 0, 0, 1453, 1434, 1, 0, 0, 0, 1453, 1441, 1, 0, 0, 0, 1453, 1448, 1, 0, 0, 0, 1454, 179, 1, 0, 0, 0, 1455, 1456, 7, 9, 0, 0, 1456, 181, 1, 0, 0, 0, 1457, 1458, 3, 184, 92, 0, 1458, 1459, 3, 156, 78, 0, 1459, 1460, 3, 142, 71, 0, 1460, 1461, 5, 173, 0, 0, 1461, 1463, 3, 256, 128, 0, 1462, 1464, 3, 126, 63, 0, 1463, 1462, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1466, 3, 130, 65, 0, 1466, 1492, 1, 0, 0, 0, 1467, 1468, 3, 184, 92, 0, 1468, 1469, 3, 156, 78, 0, 1469, 1470, 3, 142, 71, 0, 1470, 1471, 5, 173, 0, 0, 1471, 1472, 3, 256, 128, 0, 1472, 1473, 3, 210, 105, 0, 1473, 1474, 3, 130, 65, 0, 1474, 1492, 1, 0, 0, 0, 1475, 1476, 3, 184, 92, 0, 1476, 1477, 3, 156, 78, 0, 1477, 1479, 3, 256, 128, 0, 1478, 1480, 3, 126, 63, 0, 1479, 1478, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1482, 3, 130, 65, 0, 1482, 1492, 1, 0, 0, 0, 1483, 1484, 3, 184, 92, 0, 1484, 1485, 3, 156, 78, 0, 1485, 1486, 3, 256, 128, 0, 1486, 1487, 3, 210, 105, 0, 1487, 1488, 3, 130, 65, 0, 1488, 1492, 1, 0, 0, 0, 1489, 1492, 3, 188, 94, 0, 1490, 1492, 3, 2, 1, 0, 1491, 1457, 1, 0, 0, 0, 1491, 1467, 1, 0, 0, 0, 1491, 1475, 1, 0, 0, 0, 1491, 1483, 1, 0, 0, 0, 1491, 1489, 1, 0, 0, 0, 1491, 1490, 1, 0, 0, 0, 1492, 183, 1, 0, 0, 0, 1493, 1494, 5, 243, 0, 0, 1494, 1504, 3, 184, 92, 0, 1495, 1496, 5, 244, 0, 0, 1496, 1504, 3, 184, 92, 0, 1497, 1504, 3, 186, 93, 0, 1498, 1499, 5, 110, 0, 0, 1499, 1500, 5, 29, 0, 0, 1500, 1501, 3, 28, 14, 0, 1501, 1502, 5, 30, 0, 0, 1502, 1504, 1, 0, 0, 0, 1503, 1493, 1, 0, 0, 0, 1503, 1495, 1, 0, 0, 0, 1503, 1497, 1, 0, 0, 0, 1503, 1498, 1, 0, 0, 0, 1504, 185, 1, 0, 0, 0, 1505, 1518, 1, 0, 0, 0, 1506, 1518, 5, 245, 0, 0, 1507, 1518, 5, 246, 0, 0, 1508, 1509, 5, 247, 0, 0, 1509, 1518, 5, 248, 0, 0, 1510, 1511, 5, 247, 0, 0, 1511, 1518, 5, 249, 0, 0, 1512, 1513, 5, 247, 0, 0, 1513, 1518, 5, 250, 0, 0, 1514, 1515, 5, 247, 0, 0, 1515, 1518, 5, 251, 0, 0, 1516, 1518, 5, 247, 0, 0, 1517, 1505, 1, 0, 0, 0, 1517, 1506, 1, 0, 0, 0, 1517, 1507, 1, 0, 0, 0, 1517, 1508, 1, 0, 0, 0, 1517, 1510, 1, 0, 0, 0, 1517, 1512, 1, 0, 0, 0, 1517, 1514, 1, 0, 0, 0, 1517, 1516, 1, 0, 0, 0, 1518, 187, 1, 0, 0, 0, 1519, 1520, 5, 111, 0, 0, 1520, 1521, 5, 29, 0, 0, 1521, 1522, 3, 28, 14, 0, 1522, 1523, 5, 30, 0, 0, 1523, 189, 1, 0, 0, 0, 1524, 1525, 5, 226, 0, 0, 1525, 1530, 3, 182, 91, 0, 1526, 1527, 5, 36, 0, 0, 1527, 1530, 3, 192, 96, 0, 1528, 1530, 3, 188, 94, 0, 1529, 1524, 1, 0, 0, 0, 1529, 1526, 1, 0, 0, 0, 1529, 1528, 1, 0, 0, 0, 1530, 191, 1, 0, 0, 0, 1531, 1532, 3, 156, 78, 0, 1532, 1533, 3, 142, 71, 0, 1533, 1534, 5, 173, 0, 0, 1534, 1535, 3, 2, 1, 0, 1535, 1541, 1, 0, 0, 0, 1536, 1537, 3, 156, 78, 0, 1537, 1538, 3, 2, 1, 0, 1538, 1541, 1, 0, 0, 0, 1539, 1541, 3, 2, 1, 0, 1540, 1531, 1, 0, 0, 0, 1540, 1536, 1, 0, 0, 0, 1540, 1539, 1, 0, 0, 0, 1541, 193, 1, 0, 0, 0, 1542, 1543, 3, 142, 71, 0, 1543, 1544, 5, 27, 0, 0, 1544, 1546, 1, 0, 0, 0, 1545, 1542, 1, 0, 0, 0, 1546, 1549, 1, 0, 0, 0, 1547, 1545, 1, 0, 0, 0, 1547, 1548, 1, 0, 0, 0, 1548, 1550, 1, 0, 0, 0, 1549, 1547, 1, 0, 0, 0, 1550, 1551, 3, 142, 71, 0, 1551, 195, 1, 0, 0, 0, 1552, 1558, 1, 0, 0, 0, 1553, 1554, 5, 84, 0, 0, 1554, 1555, 3, 204, 102, 0, 1555, 1556, 5, 85, 0, 0, 1556, 1558, 1, 0, 0, 0, 1557, 1552, 1, 0, 0, 0, 1557, 1553, 1, 0, 0, 0, 1558, 197, 1, 0, 0, 0, 1559, 1571, 5, 268, 0, 0, 1560, 1571, 5, 112, 0, 0, 1561, 1571, 5, 38, 0, 0, 1562, 1571, 5, 197, 0, 0, 1563, 1571, 5, 113, 0, 0, 1564, 1571, 5, 114, 0, 0, 1565, 1566, 5, 69, 0, 0, 1566, 1567, 5, 29, 0, 0, 1567, 1568, 3, 28, 14, 0, 1568, 1569, 5, 30, 0, 0, 1569, 1571, 1, 0, 0, 0, 1570, 1559, 1, 0, 0, 0, 1570, 1560, 1, 0, 0, 0, 1570, 1561, 1, 0, 0, 0, 1570, 1562, 1, 0, 0, 0, 1570, 1563, 1, 0, 0, 0, 1570, 1564, 1, 0, 0, 0, 1570, 1565, 1, 0, 0, 0, 1571, 199, 1, 0, 0, 0, 1572, 1574, 3, 198, 99, 0, 1573, 1572, 1, 0, 0, 0, 1574, 1577, 1, 0, 0, 0, 1575, 1573, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 201, 1, 0, 0, 0, 1577, 1575, 1, 0, 0, 0, 1578, 1580, 3, 200, 100, 0, 1579, 1581, 3, 206, 103, 0, 1580, 1579, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 3, 2, 1, 0, 1583, 203, 1, 0, 0, 0, 1584, 1585, 3, 202, 101, 0, 1585, 1586, 5, 27, 0, 0, 1586, 1588, 1, 0, 0, 0, 1587, 1584, 1, 0, 0, 0, 1588, 1591, 1, 0, 0, 0, 1589, 1587, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1592, 1, 0, 0, 0, 1591, 1589, 1, 0, 0, 0, 1592, 1593, 3, 202, 101, 0, 1593, 205, 1, 0, 0, 0, 1594, 1595, 5, 29, 0, 0, 1595, 1596, 3, 194, 97, 0, 1596, 1597, 5, 30, 0, 0, 1597, 207, 1, 0, 0, 0, 1598, 1601, 1, 0, 0, 0, 1599, 1601, 3, 210, 105, 0, 1600, 1598, 1, 0, 0, 0, 1600, 1599, 1, 0, 0, 0, 1601, 209, 1, 0, 0, 0, 1602, 1603, 5, 84, 0, 0, 1603, 1604, 5, 41, 0, 0, 1604, 1605, 3, 28, 14, 0, 1605, 1606, 5, 42, 0, 0, 1606, 1607, 5, 85, 0, 0, 1607, 211, 1, 0, 0, 0, 1608, 1609, 3, 248, 124, 0, 1609, 1610, 5, 16, 0, 0, 1610, 1611, 3, 260, 130, 0, 1611, 1612, 5, 17, 0, 0, 1612, 1725, 1, 0, 0, 0, 1613, 1614, 3, 70, 35, 0, 1614, 1615, 5, 16, 0, 0, 1615, 1616, 3, 78, 39, 0, 1616, 1617, 5, 17, 0, 0, 1617, 1725, 1, 0, 0, 0, 1618, 1619, 3, 224, 112, 0, 1619, 1620, 5, 16, 0, 0, 1620, 1621, 3, 228, 114, 0, 1621, 1622, 5, 17, 0, 0, 1622, 1725, 1, 0, 0, 0, 1623, 1624, 3, 232, 116, 0, 1624, 1625, 5, 16, 0, 0, 1625, 1626, 3, 236, 118, 0, 1626, 1627, 5, 17, 0, 0, 1627, 1725, 1, 0, 0, 0, 1628, 1725, 3, 214, 107, 0, 1629, 1725, 3, 288, 144, 0, 1630, 1725, 3, 166, 83, 0, 1631, 1725, 3, 84, 42, 0, 1632, 1725, 3, 334, 167, 0, 1633, 1634, 5, 115, 0, 0, 1634, 1725, 3, 28, 14, 0, 1635, 1636, 5, 116, 0, 0, 1636, 1725, 3, 28, 14, 0, 1637, 1638, 3, 346, 173, 0, 1638, 1639, 5, 16, 0, 0, 1639, 1640, 3, 350, 175, 0, 1640, 1641, 5, 17, 0, 0, 1641, 1725, 1, 0, 0, 0, 1642, 1643, 5, 303, 0, 0, 1643, 1644, 3, 142, 71, 0, 1644, 1645, 5, 173, 0, 0, 1645, 1646, 3, 256, 128, 0, 1646, 1647, 5, 117, 0, 0, 1647, 1648, 3, 184, 92, 0, 1648, 1649, 3, 156, 78, 0, 1649, 1650, 3, 142, 71, 0, 1650, 1651, 5, 173, 0, 0, 1651, 1652, 3, 256, 128, 0, 1652, 1653, 3, 130, 65, 0, 1653, 1725, 1, 0, 0, 0, 1654, 1655, 5, 303, 0, 0, 1655, 1656, 5, 226, 0, 0, 1656, 1657, 3, 184, 92, 0, 1657, 1658, 3, 156, 78, 0, 1658, 1659, 3, 142, 71, 0, 1659, 1660, 5, 173, 0, 0, 1660, 1661, 3, 256, 128, 0, 1661, 1662, 3, 208, 104, 0, 1662, 1663, 3, 130, 65, 0, 1663, 1664, 5, 117, 0, 0, 1664, 1665, 5, 226, 0, 0, 1665, 1666, 3, 184, 92, 0, 1666, 1667, 3, 156, 78, 0, 1667, 1668, 3, 142, 71, 0, 1668, 1669, 5, 173, 0, 0, 1669, 1670, 3, 256, 128, 0, 1670, 1671, 3, 208, 104, 0, 1671, 1672, 3, 130, 65, 0, 1672, 1725, 1, 0, 0, 0, 1673, 1725, 3, 24, 12, 0, 1674, 1725, 3, 36, 18, 0, 1675, 1676, 5, 257, 0, 0, 1676, 1677, 5, 193, 0, 0, 1677, 1678, 5, 41, 0, 0, 1678, 1679, 3, 28, 14, 0, 1679, 1683, 5, 42, 0, 0, 1680, 1682, 3, 334, 167, 0, 1681, 1680, 1, 0, 0, 0, 1682, 1685, 1, 0, 0, 0, 1683, 1681, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1684, 1725, 1, 0, 0, 0, 1685, 1683, 1, 0, 0, 0, 1686, 1687, 5, 257, 0, 0, 1687, 1688, 5, 193, 0, 0, 1688, 1692, 3, 2, 1, 0, 1689, 1691, 3, 334, 167, 0, 1690, 1689, 1, 0, 0, 0, 1691, 1694, 1, 0, 0, 0, 1692, 1690, 1, 0, 0, 0, 1692, 1693, 1, 0, 0, 0, 1693, 1725, 1, 0, 0, 0, 1694, 1692, 1, 0, 0, 0, 1695, 1696, 5, 257, 0, 0, 1696, 1697, 5, 258, 0, 0, 1697, 1698, 5, 41, 0, 0, 1698, 1699, 3, 28, 14, 0, 1699, 1700, 5, 42, 0, 0, 1700, 1701, 5, 27, 0, 0, 1701, 1705, 3, 142, 71, 0, 1702, 1704, 3, 334, 167, 0, 1703, 1702, 1, 0, 0, 0, 1704, 1707, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1725, 1, 0, 0, 0, 1707, 1705, 1, 0, 0, 0, 1708, 1709, 5, 257, 0, 0, 1709, 1710, 5, 258, 0, 0, 1710, 1711, 3, 2, 1, 0, 1711, 1712, 5, 27, 0, 0, 1712, 1716, 3, 142, 71, 0, 1713, 1715, 3, 334, 167, 0, 1714, 1713, 1, 0, 0, 0, 1715, 1718, 1, 0, 0, 0, 1716, 1714, 1, 0, 0, 0, 1716, 1717, 1, 0, 0, 0, 1717, 1725, 1, 0, 0, 0, 1718, 1716, 1, 0, 0, 0, 1719, 1720, 5, 118, 0, 0, 1720, 1721, 5, 193, 0, 0, 1721, 1722, 3, 142, 71, 0, 1722, 1723, 3, 40, 20, 0, 1723, 1725, 1, 0, 0, 0, 1724, 1608, 1, 0, 0, 0, 1724, 1613, 1, 0, 0, 0, 1724, 1618, 1, 0, 0, 0, 1724, 1623, 1, 0, 0, 0, 1724, 1628, 1, 0, 0, 0, 1724, 1629, 1, 0, 0, 0, 1724, 1630, 1, 0, 0, 0, 1724, 1631, 1, 0, 0, 0, 1724, 1632, 1, 0, 0, 0, 1724, 1633, 1, 0, 0, 0, 1724, 1635, 1, 0, 0, 0, 1724, 1637, 1, 0, 0, 0, 1724, 1642, 1, 0, 0, 0, 1724, 1654, 1, 0, 0, 0, 1724, 1673, 1, 0, 0, 0, 1724, 1674, 1, 0, 0, 0, 1724, 1675, 1, 0, 0, 0, 1724, 1686, 1, 0, 0, 0, 1724, 1695, 1, 0, 0, 0, 1724, 1708, 1, 0, 0, 0, 1724, 1719, 1, 0, 0, 0, 1725, 213, 1, 0, 0, 0, 1726, 1727, 5, 119, 0, 0, 1727, 1736, 3, 222, 111, 0, 1728, 1735, 3, 216, 108, 0, 1729, 1730, 5, 120, 0, 0, 1730, 1731, 5, 29, 0, 0, 1731, 1732, 3, 242, 121, 0, 1732, 1733, 5, 30, 0, 0, 1733, 1735, 1, 0, 0, 0, 1734, 1728, 1, 0, 0, 0, 1734, 1729, 1, 0, 0, 0, 1735, 1738, 1, 0, 0, 0, 1736, 1734, 1, 0, 0, 0, 1736, 1737, 1, 0, 0, 0, 1737, 1739, 1, 0, 0, 0, 1738, 1736, 1, 0, 0, 0, 1739, 1740, 3, 156, 78, 0, 1740, 1741, 3, 2, 1, 0, 1741, 1742, 3, 218, 109, 0, 1742, 1743, 3, 220, 110, 0, 1743, 215, 1, 0, 0, 0, 1744, 1763, 5, 121, 0, 0, 1745, 1763, 5, 50, 0, 0, 1746, 1763, 5, 51, 0, 0, 1747, 1763, 5, 62, 0, 0, 1748, 1763, 5, 122, 0, 0, 1749, 1763, 5, 68, 0, 0, 1750, 1763, 5, 67, 0, 0, 1751, 1763, 5, 63, 0, 0, 1752, 1763, 5, 64, 0, 0, 1753, 1763, 5, 65, 0, 0, 1754, 1763, 5, 123, 0, 0, 1755, 1763, 5, 124, 0, 0, 1756, 1763, 5, 125, 0, 0, 1757, 1758, 5, 69, 0, 0, 1758, 1759, 5, 29, 0, 0, 1759, 1760, 3, 28, 14, 0, 1760, 1761, 5, 30, 0, 0, 1761, 1763, 1, 0, 0, 0, 1762, 1744, 1, 0, 0, 0, 1762, 1745, 1, 0, 0, 0, 1762, 1746, 1, 0, 0, 0, 1762, 1747, 1, 0, 0, 0, 1762, 1748, 1, 0, 0, 0, 1762, 1749, 1, 0, 0, 0, 1762, 1750, 1, 0, 0, 0, 1762, 1751, 1, 0, 0, 0, 1762, 1752, 1, 0, 0, 0, 1762, 1753, 1, 0, 0, 0, 1762, 1754, 1, 0, 0, 0, 1762, 1755, 1, 0, 0, 0, 1762, 1756, 1, 0, 0, 0, 1762, 1757, 1, 0, 0, 0, 1763, 217, 1, 0, 0, 0, 1764, 1768, 1, 0, 0, 0, 1765, 1766, 5, 43, 0, 0, 1766, 1768, 3, 0, 0, 0, 1767, 1764, 1, 0, 0, 0, 1767, 1765, 1, 0, 0, 0, 1768, 219, 1, 0, 0, 0, 1769, 1773, 1, 0, 0, 0, 1770, 1771, 5, 35, 0, 0, 1771, 1773, 3, 308, 154, 0, 1772, 1769, 1, 0, 0, 0, 1772, 1770, 1, 0, 0, 0, 1773, 221, 1, 0, 0, 0, 1774, 1780, 1, 0, 0, 0, 1775, 1776, 5, 41, 0, 0, 1776, 1777, 3, 28, 14, 0, 1777, 1778, 5, 42, 0, 0, 1778, 1780, 1, 0, 0, 0, 1779, 1774, 1, 0, 0, 0, 1779, 1775, 1, 0, 0, 0, 1780, 223, 1, 0, 0, 0, 1781, 1785, 5, 126, 0, 0, 1782, 1784, 3, 226, 113, 0, 1783, 1782, 1, 0, 0, 0, 1784, 1787, 1, 0, 0, 0, 1785, 1783, 1, 0, 0, 0, 1785, 1786, 1, 0, 0, 0, 1786, 1788, 1, 0, 0, 0, 1787, 1785, 1, 0, 0, 0, 1788, 1789, 3, 142, 71, 0, 1789, 1790, 3, 2, 1, 0, 1790, 1800, 1, 0, 0, 0, 1791, 1795, 5, 126, 0, 0, 1792, 1794, 3, 226, 113, 0, 1793, 1792, 1, 0, 0, 0, 1794, 1797, 1, 0, 0, 0, 1795, 1793, 1, 0, 0, 0, 1795, 1796, 1, 0, 0, 0, 1796, 1798, 1, 0, 0, 0, 1797, 1795, 1, 0, 0, 0, 1798, 1800, 3, 2, 1, 0, 1799, 1781, 1, 0, 0, 0, 1799, 1791, 1, 0, 0, 0, 1800, 225, 1, 0, 0, 0, 1801, 1802, 7, 10, 0, 0, 1802, 227, 1, 0, 0, 0, 1803, 1805, 3, 230, 115, 0, 1804, 1803, 1, 0, 0, 0, 1805, 1808, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1806, 1807, 1, 0, 0, 0, 1807, 229, 1, 0, 0, 0, 1808, 1806, 1, 0, 0, 0, 1809, 1810, 5, 127, 0, 0, 1810, 1822, 3, 182, 91, 0, 1811, 1812, 5, 128, 0, 0, 1812, 1822, 3, 182, 91, 0, 1813, 1814, 5, 129, 0, 0, 1814, 1822, 3, 182, 91, 0, 1815, 1816, 5, 130, 0, 0, 1816, 1822, 3, 182, 91, 0, 1817, 1822, 3, 84, 42, 0, 1818, 1822, 3, 334, 167, 0, 1819, 1822, 3, 24, 12, 0, 1820, 1822, 3, 36, 18, 0, 1821, 1809, 1, 0, 0, 0, 1821, 1811, 1, 0, 0, 0, 1821, 1813, 1, 0, 0, 0, 1821, 1815, 1, 0, 0, 0, 1821, 1817, 1, 0, 0, 0, 1821, 1818, 1, 0, 0, 0, 1821, 1819, 1, 0, 0, 0, 1821, 1820, 1, 0, 0, 0, 1822, 231, 1, 0, 0, 0, 1823, 1827, 5, 131, 0, 0, 1824, 1826, 3, 234, 117, 0, 1825, 1824, 1, 0, 0, 0, 1826, 1829, 1, 0, 0, 0, 1827, 1825, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1830, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1830, 1831, 3, 184, 92, 0, 1831, 1832, 3, 156, 78, 0, 1832, 1833, 3, 2, 1, 0, 1833, 1834, 3, 130, 65, 0, 1834, 1835, 3, 220, 110, 0, 1835, 233, 1, 0, 0, 0, 1836, 1837, 7, 10, 0, 0, 1837, 235, 1, 0, 0, 0, 1838, 1840, 3, 238, 119, 0, 1839, 1838, 1, 0, 0, 0, 1840, 1843, 1, 0, 0, 0, 1841, 1839, 1, 0, 0, 0, 1841, 1842, 1, 0, 0, 0, 1842, 237, 1, 0, 0, 0, 1843, 1841, 1, 0, 0, 0, 1844, 1845, 5, 132, 0, 0, 1845, 1855, 3, 182, 91, 0, 1846, 1847, 5, 133, 0, 0, 1847, 1855, 3, 182, 91, 0, 1848, 1849, 5, 130, 0, 0, 1849, 1855, 3, 182, 91, 0, 1850, 1855, 3, 334, 167, 0, 1851, 1855, 3, 84, 42, 0, 1852, 1855, 3, 24, 12, 0, 1853, 1855, 3, 36, 18, 0, 1854, 1844, 1, 0, 0, 0, 1854, 1846, 1, 0, 0, 0, 1854, 1848, 1, 0, 0, 0, 1854, 1850, 1, 0, 0, 0, 1854, 1851, 1, 0, 0, 0, 1854, 1852, 1, 0, 0, 0, 1854, 1853, 1, 0, 0, 0, 1855, 239, 1, 0, 0, 0, 1856, 1863, 1, 0, 0, 0, 1857, 1858, 5, 120, 0, 0, 1858, 1859, 5, 29, 0, 0, 1859, 1860, 3, 242, 121, 0, 1860, 1861, 5, 30, 0, 0, 1861, 1863, 1, 0, 0, 0, 1862, 1856, 1, 0, 0, 0, 1862, 1857, 1, 0, 0, 0, 1863, 241, 1, 0, 0, 0, 1864, 1870, 3, 144, 72, 0, 1865, 1866, 5, 16, 0, 0, 1866, 1867, 3, 306, 153, 0, 1867, 1868, 5, 17, 0, 0, 1868, 1870, 1, 0, 0, 0, 1869, 1864, 1, 0, 0, 0, 1869, 1865, 1, 0, 0, 0, 1870, 243, 1, 0, 0, 0, 1871, 1873, 3, 246, 123, 0, 1872, 1871, 1, 0, 0, 0, 1873, 1876, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1874, 1875, 1, 0, 0, 0, 1875, 245, 1, 0, 0, 0, 1876, 1874, 1, 0, 0, 0, 1877, 1878, 5, 41, 0, 0, 1878, 1879, 5, 134, 0, 0, 1879, 1891, 5, 42, 0, 0, 1880, 1881, 5, 41, 0, 0, 1881, 1882, 5, 135, 0, 0, 1882, 1891, 5, 42, 0, 0, 1883, 1884, 5, 41, 0, 0, 1884, 1885, 5, 136, 0, 0, 1885, 1891, 5, 42, 0, 0, 1886, 1887, 5, 41, 0, 0, 1887, 1888, 3, 28, 14, 0, 1888, 1889, 5, 42, 0, 0, 1889, 1891, 1, 0, 0, 0, 1890, 1877, 1, 0, 0, 0, 1890, 1880, 1, 0, 0, 0, 1890, 1883, 1, 0, 0, 0, 1890, 1886, 1, 0, 0, 0, 1891, 247, 1, 0, 0, 0, 1892, 1897, 5, 137, 0, 0, 1893, 1896, 3, 250, 125, 0, 1894, 1896, 3, 252, 126, 0, 1895, 1893, 1, 0, 0, 0, 1895, 1894, 1, 0, 0, 0, 1896, 1899, 1, 0, 0, 0, 1897, 1895, 1, 0, 0, 0, 1897, 1898, 1, 0, 0, 0, 1898, 1900, 1, 0, 0, 0, 1899, 1897, 1, 0, 0, 0, 1900, 1901, 3, 184, 92, 0, 1901, 1902, 3, 244, 122, 0, 1902, 1903, 3, 156, 78, 0, 1903, 1904, 3, 240, 120, 0, 1904, 1905, 3, 256, 128, 0, 1905, 1906, 3, 196, 98, 0, 1906, 1910, 3, 130, 65, 0, 1907, 1909, 3, 258, 129, 0, 1908, 1907, 1, 0, 0, 0, 1909, 1912, 1, 0, 0, 0, 1910, 1908, 1, 0, 0, 0, 1910, 1911, 1, 0, 0, 0, 1911, 249, 1, 0, 0, 0, 1912, 1910, 1, 0, 0, 0, 1913, 1937, 5, 121, 0, 0, 1914, 1937, 5, 50, 0, 0, 1915, 1937, 5, 51, 0, 0, 1916, 1937, 5, 62, 0, 0, 1917, 1937, 5, 138, 0, 0, 1918, 1937, 5, 67, 0, 0, 1919, 1937, 5, 139, 0, 0, 1920, 1937, 5, 140, 0, 0, 1921, 1937, 5, 53, 0, 0, 1922, 1937, 5, 63, 0, 0, 1923, 1937, 5, 64, 0, 0, 1924, 1937, 5, 65, 0, 0, 1925, 1937, 5, 123, 0, 0, 1926, 1937, 5, 141, 0, 0, 1927, 1937, 5, 142, 0, 0, 1928, 1937, 5, 68, 0, 0, 1929, 1937, 5, 143, 0, 0, 1930, 1937, 5, 144, 0, 0, 1931, 1932, 5, 69, 0, 0, 1932, 1933, 5, 29, 0, 0, 1933, 1934, 3, 28, 14, 0, 1934, 1935, 5, 30, 0, 0, 1935, 1937, 1, 0, 0, 0, 1936, 1913, 1, 0, 0, 0, 1936, 1914, 1, 0, 0, 0, 1936, 1915, 1, 0, 0, 0, 1936, 1916, 1, 0, 0, 0, 1936, 1917, 1, 0, 0, 0, 1936, 1918, 1, 0, 0, 0, 1936, 1919, 1, 0, 0, 0, 1936, 1920, 1, 0, 0, 0, 1936, 1921, 1, 0, 0, 0, 1936, 1922, 1, 0, 0, 0, 1936, 1923, 1, 0, 0, 0, 1936, 1924, 1, 0, 0, 0, 1936, 1925, 1, 0, 0, 0, 1936, 1926, 1, 0, 0, 0, 1936, 1927, 1, 0, 0, 0, 1936, 1928, 1, 0, 0, 0, 1936, 1929, 1, 0, 0, 0, 1936, 1930, 1, 0, 0, 0, 1936, 1931, 1, 0, 0, 0, 1937, 251, 1, 0, 0, 0, 1938, 1939, 5, 145, 0, 0, 1939, 1945, 5, 29, 0, 0, 1940, 1943, 3, 4, 2, 0, 1941, 1942, 5, 33, 0, 0, 1942, 1944, 3, 4, 2, 0, 1943, 1941, 1, 0, 0, 0, 1943, 1944, 1, 0, 0, 0, 1944, 1946, 1, 0, 0, 0, 1945, 1940, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1950, 1, 0, 0, 0, 1947, 1949, 3, 254, 127, 0, 1948, 1947, 1, 0, 0, 0, 1949, 1952, 1, 0, 0, 0, 1950, 1948, 1, 0, 0, 0, 1950, 1951, 1, 0, 0, 0, 1951, 1953, 1, 0, 0, 0, 1952, 1950, 1, 0, 0, 0, 1953, 1954, 5, 30, 0, 0, 1954, 253, 1, 0, 0, 0, 1955, 1983, 5, 146, 0, 0, 1956, 1983, 5, 223, 0, 0, 1957, 1983, 5, 56, 0, 0, 1958, 1983, 5, 57, 0, 0, 1959, 1983, 5, 147, 0, 0, 1960, 1983, 5, 148, 0, 0, 1961, 1983, 5, 248, 0, 0, 1962, 1983, 5, 249, 0, 0, 1963, 1983, 5, 250, 0, 0, 1964, 1983, 5, 251, 0, 0, 1965, 1966, 5, 149, 0, 0, 1966, 1967, 5, 74, 0, 0, 1967, 1983, 5, 150, 0, 0, 1968, 1969, 5, 149, 0, 0, 1969, 1970, 5, 74, 0, 0, 1970, 1983, 5, 151, 0, 0, 1971, 1972, 5, 152, 0, 0, 1972, 1973, 5, 74, 0, 0, 1973, 1983, 5, 150, 0, 0, 1974, 1975, 5, 152, 0, 0, 1975, 1976, 5, 74, 0, 0, 1976, 1983, 5, 151, 0, 0, 1977, 1978, 5, 69, 0, 0, 1978, 1979, 5, 29, 0, 0, 1979, 1980, 3, 28, 14, 0, 1980, 1981, 5, 30, 0, 0, 1981, 1983, 1, 0, 0, 0, 1982, 1955, 1, 0, 0, 0, 1982, 1956, 1, 0, 0, 0, 1982, 1957, 1, 0, 0, 0, 1982, 1958, 1, 0, 0, 0, 1982, 1959, 1, 0, 0, 0, 1982, 1960, 1, 0, 0, 0, 1982, 1961, 1, 0, 0, 0, 1982, 1962, 1, 0, 0, 0, 1982, 1963, 1, 0, 0, 0, 1982, 1964, 1, 0, 0, 0, 1982, 1965, 1, 0, 0, 0, 1982, 1968, 1, 0, 0, 0, 1982, 1971, 1, 0, 0, 0, 1982, 1974, 1, 0, 0, 0, 1982, 1977, 1, 0, 0, 0, 1983, 255, 1, 0, 0, 0, 1984, 1988, 5, 114, 0, 0, 1985, 1988, 5, 153, 0, 0, 1986, 1988, 3, 2, 1, 0, 1987, 1984, 1, 0, 0, 0, 1987, 1985, 1, 0, 0, 0, 1987, 1986, 1, 0, 0, 0, 1988, 257, 1, 0, 0, 0, 1989, 2010, 5, 1, 0, 0, 1990, 2010, 5, 2, 0, 0, 1991, 2010, 5, 3, 0, 0, 1992, 2010, 5, 4, 0, 0, 1993, 2010, 5, 247, 0, 0, 1994, 2010, 5, 5, 0, 0, 1995, 2010, 5, 6, 0, 0, 1996, 2010, 5, 7, 0, 0, 1997, 2010, 5, 8, 0, 0, 1998, 2010, 5, 9, 0, 0, 1999, 2010, 5, 10, 0, 0, 2000, 2010, 5, 11, 0, 0, 2001, 2010, 5, 12, 0, 0, 2002, 2010, 5, 13, 0, 0, 2003, 2010, 5, 14, 0, 0, 2004, 2005, 5, 69, 0, 0, 2005, 2006, 5, 29, 0, 0, 2006, 2007, 3, 28, 14, 0, 2007, 2008, 5, 30, 0, 0, 2008, 2010, 1, 0, 0, 0, 2009, 1989, 1, 0, 0, 0, 2009, 1990, 1, 0, 0, 0, 2009, 1991, 1, 0, 0, 0, 2009, 1992, 1, 0, 0, 0, 2009, 1993, 1, 0, 0, 0, 2009, 1994, 1, 0, 0, 0, 2009, 1995, 1, 0, 0, 0, 2009, 1996, 1, 0, 0, 0, 2009, 1997, 1, 0, 0, 0, 2009, 1998, 1, 0, 0, 0, 2009, 1999, 1, 0, 0, 0, 2009, 2000, 1, 0, 0, 0, 2009, 2001, 1, 0, 0, 0, 2009, 2002, 1, 0, 0, 0, 2009, 2003, 1, 0, 0, 0, 2009, 2004, 1, 0, 0, 0, 2010, 259, 1, 0, 0, 0, 2011, 2013, 3, 262, 131, 0, 2012, 2011, 1, 0, 0, 0, 2013, 2016, 1, 0, 0, 0, 2014, 2012, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 261, 1, 0, 0, 0, 2016, 2014, 1, 0, 0, 0, 2017, 2126, 3, 122, 61, 0, 2018, 2019, 5, 297, 0, 0, 2019, 2126, 3, 28, 14, 0, 2020, 2126, 3, 270, 135, 0, 2021, 2022, 5, 298, 0, 0, 2022, 2126, 3, 28, 14, 0, 2023, 2024, 5, 301, 0, 0, 2024, 2126, 3, 130, 65, 0, 2025, 2026, 5, 301, 0, 0, 2026, 2027, 5, 154, 0, 0, 2027, 2126, 3, 130, 65, 0, 2028, 2126, 5, 299, 0, 0, 2029, 2126, 5, 300, 0, 0, 2030, 2126, 3, 288, 144, 0, 2031, 2126, 3, 264, 132, 0, 2032, 2126, 3, 166, 83, 0, 2033, 2126, 3, 84, 42, 0, 2034, 2126, 3, 24, 12, 0, 2035, 2126, 3, 266, 133, 0, 2036, 2126, 3, 36, 18, 0, 2037, 2038, 5, 302, 0, 0, 2038, 2039, 5, 41, 0, 0, 2039, 2040, 3, 28, 14, 0, 2040, 2041, 5, 42, 0, 0, 2041, 2126, 1, 0, 0, 0, 2042, 2043, 5, 302, 0, 0, 2043, 2044, 5, 41, 0, 0, 2044, 2045, 3, 28, 14, 0, 2045, 2046, 5, 42, 0, 0, 2046, 2047, 5, 33, 0, 0, 2047, 2048, 3, 0, 0, 0, 2048, 2126, 1, 0, 0, 0, 2049, 2050, 5, 304, 0, 0, 2050, 2051, 3, 28, 14, 0, 2051, 2052, 5, 74, 0, 0, 2052, 2053, 3, 28, 14, 0, 2053, 2126, 1, 0, 0, 0, 2054, 2055, 5, 303, 0, 0, 2055, 2056, 3, 142, 71, 0, 2056, 2057, 5, 173, 0, 0, 2057, 2058, 3, 256, 128, 0, 2058, 2126, 1, 0, 0, 0, 2059, 2060, 5, 303, 0, 0, 2060, 2061, 5, 226, 0, 0, 2061, 2062, 3, 184, 92, 0, 2062, 2063, 3, 156, 78, 0, 2063, 2064, 3, 142, 71, 0, 2064, 2065, 5, 173, 0, 0, 2065, 2066, 3, 256, 128, 0, 2066, 2067, 3, 208, 104, 0, 2067, 2068, 3, 130, 65, 0, 2068, 2126, 1, 0, 0, 0, 2069, 2126, 3, 268, 134, 0, 2070, 2071, 5, 257, 0, 0, 2071, 2072, 5, 193, 0, 0, 2072, 2073, 5, 41, 0, 0, 2073, 2074, 3, 28, 14, 0, 2074, 2078, 5, 42, 0, 0, 2075, 2077, 3, 334, 167, 0, 2076, 2075, 1, 0, 0, 0, 2077, 2080, 1, 0, 0, 0, 2078, 2076, 1, 0, 0, 0, 2078, 2079, 1, 0, 0, 0, 2079, 2126, 1, 0, 0, 0, 2080, 2078, 1, 0, 0, 0, 2081, 2082, 5, 257, 0, 0, 2082, 2083, 5, 193, 0, 0, 2083, 2087, 3, 2, 1, 0, 2084, 2086, 3, 334, 167, 0, 2085, 2084, 1, 0, 0, 0, 2086, 2089, 1, 0, 0, 0, 2087, 2085, 1, 0, 0, 0, 2087, 2088, 1, 0, 0, 0, 2088, 2126, 1, 0, 0, 0, 2089, 2087, 1, 0, 0, 0, 2090, 2091, 5, 257, 0, 0, 2091, 2092, 5, 258, 0, 0, 2092, 2093, 5, 41, 0, 0, 2093, 2094, 3, 28, 14, 0, 2094, 2095, 5, 42, 0, 0, 2095, 2096, 5, 27, 0, 0, 2096, 2100, 3, 142, 71, 0, 2097, 2099, 3, 334, 167, 0, 2098, 2097, 1, 0, 0, 0, 2099, 2102, 1, 0, 0, 0, 2100, 2098, 1, 0, 0, 0, 2100, 2101, 1, 0, 0, 0, 2101, 2126, 1, 0, 0, 0, 2102, 2100, 1, 0, 0, 0, 2103, 2104, 5, 257, 0, 0, 2104, 2105, 5, 258, 0, 0, 2105, 2106, 3, 2, 1, 0, 2106, 2107, 5, 27, 0, 0, 2107, 2111, 3, 142, 71, 0, 2108, 2110, 3, 334, 167, 0, 2109, 2108, 1, 0, 0, 0, 2110, 2113, 1, 0, 0, 0, 2111, 2109, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2126, 1, 0, 0, 0, 2113, 2111, 1, 0, 0, 0, 2114, 2115, 5, 257, 0, 0, 2115, 2116, 5, 41, 0, 0, 2116, 2117, 3, 28, 14, 0, 2117, 2118, 5, 42, 0, 0, 2118, 2122, 3, 220, 110, 0, 2119, 2121, 3, 334, 167, 0, 2120, 2119, 1, 0, 0, 0, 2121, 2124, 1, 0, 0, 0, 2122, 2120, 1, 0, 0, 0, 2122, 2123, 1, 0, 0, 0, 2123, 2126, 1, 0, 0, 0, 2124, 2122, 1, 0, 0, 0, 2125, 2017, 1, 0, 0, 0, 2125, 2018, 1, 0, 0, 0, 2125, 2020, 1, 0, 0, 0, 2125, 2021, 1, 0, 0, 0, 2125, 2023, 1, 0, 0, 0, 2125, 2025, 1, 0, 0, 0, 2125, 2028, 1, 0, 0, 0, 2125, 2029, 1, 0, 0, 0, 2125, 2030, 1, 0, 0, 0, 2125, 2031, 1, 0, 0, 0, 2125, 2032, 1, 0, 0, 0, 2125, 2033, 1, 0, 0, 0, 2125, 2034, 1, 0, 0, 0, 2125, 2035, 1, 0, 0, 0, 2125, 2036, 1, 0, 0, 0, 2125, 2037, 1, 0, 0, 0, 2125, 2042, 1, 0, 0, 0, 2125, 2049, 1, 0, 0, 0, 2125, 2054, 1, 0, 0, 0, 2125, 2059, 1, 0, 0, 0, 2125, 2069, 1, 0, 0, 0, 2125, 2070, 1, 0, 0, 0, 2125, 2081, 1, 0, 0, 0, 2125, 2090, 1, 0, 0, 0, 2125, 2103, 1, 0, 0, 0, 2125, 2114, 1, 0, 0, 0, 2126, 263, 1, 0, 0, 0, 2127, 2128, 3, 0, 0, 0, 2128, 2129, 5, 74, 0, 0, 2129, 265, 1, 0, 0, 0, 2130, 2133, 3, 40, 20, 0, 2131, 2133, 3, 42, 21, 0, 2132, 2130, 1, 0, 0, 0, 2132, 2131, 1, 0, 0, 0, 2133, 267, 1, 0, 0, 0, 2134, 2135, 5, 16, 0, 0, 2135, 2136, 3, 260, 130, 0, 2136, 2137, 5, 17, 0, 0, 2137, 269, 1, 0, 0, 0, 2138, 2139, 3, 274, 137, 0, 2139, 2140, 3, 272, 136, 0, 2140, 271, 1, 0, 0, 0, 2141, 2143, 3, 276, 138, 0, 2142, 2141, 1, 0, 0, 0, 2143, 2144, 1, 0, 0, 0, 2144, 2142, 1, 0, 0, 0, 2144, 2145, 1, 0, 0, 0, 2145, 273, 1, 0, 0, 0, 2146, 2147, 5, 155, 0, 0, 2147, 2159, 3, 268, 134, 0, 2148, 2149, 5, 155, 0, 0, 2149, 2150, 3, 0, 0, 0, 2150, 2151, 5, 156, 0, 0, 2151, 2152, 3, 0, 0, 0, 2152, 2159, 1, 0, 0, 0, 2153, 2154, 5, 155, 0, 0, 2154, 2155, 3, 28, 14, 0, 2155, 2156, 5, 156, 0, 0, 2156, 2157, 3, 28, 14, 0, 2157, 2159, 1, 0, 0, 0, 2158, 2146, 1, 0, 0, 0, 2158, 2148, 1, 0, 0, 0, 2158, 2153, 1, 0, 0, 0, 2159, 275, 1, 0, 0, 0, 2160, 2161, 3, 280, 140, 0, 2161, 2162, 3, 286, 143, 0, 2162, 2173, 1, 0, 0, 0, 2163, 2164, 3, 278, 139, 0, 2164, 2165, 3, 286, 143, 0, 2165, 2173, 1, 0, 0, 0, 2166, 2167, 3, 282, 141, 0, 2167, 2168, 3, 286, 143, 0, 2168, 2173, 1, 0, 0, 0, 2169, 2170, 3, 284, 142, 0, 2170, 2171, 3, 286, 143, 0, 2171, 2173, 1, 0, 0, 0, 2172, 2160, 1, 0, 0, 0, 2172, 2163, 1, 0, 0, 0, 2172, 2166, 1, 0, 0, 0, 2172, 2169, 1, 0, 0, 0, 2173, 277, 1, 0, 0, 0, 2174, 2175, 5, 157, 0, 0, 2175, 2181, 3, 268, 134, 0, 2176, 2177, 5, 157, 0, 0, 2177, 2181, 3, 0, 0, 0, 2178, 2179, 5, 157, 0, 0, 2179, 2181, 3, 28, 14, 0, 2180, 2174, 1, 0, 0, 0, 2180, 2176, 1, 0, 0, 0, 2180, 2178, 1, 0, 0, 0, 2181, 279, 1, 0, 0, 0, 2182, 2183, 5, 158, 0, 0, 2183, 2184, 3, 142, 71, 0, 2184, 281, 1, 0, 0, 0, 2185, 2186, 5, 159, 0, 0, 2186, 283, 1, 0, 0, 0, 2187, 2188, 5, 160, 0, 0, 2188, 285, 1, 0, 0, 0, 2189, 2201, 3, 268, 134, 0, 2190, 2191, 5, 161, 0, 0, 2191, 2192, 3, 0, 0, 0, 2192, 2193, 5, 156, 0, 0, 2193, 2194, 3, 0, 0, 0, 2194, 2201, 1, 0, 0, 0, 2195, 2196, 5, 161, 0, 0, 2196, 2197, 3, 28, 14, 0, 2197, 2198, 5, 156, 0, 0, 2198, 2199, 3, 28, 14, 0, 2199, 2201, 1, 0, 0, 0, 2200, 2189, 1, 0, 0, 0, 2200, 2190, 1, 0, 0, 0, 2200, 2195, 1, 0, 0, 0, 2201, 287, 1, 0, 0, 0, 2202, 2203, 3, 290, 145, 0, 2203, 2204, 3, 294, 147, 0, 2204, 289, 1, 0, 0, 0, 2205, 2206, 5, 162, 0, 0, 2206, 2207, 3, 292, 146, 0, 2207, 2208, 3, 0, 0, 0, 2208, 2209, 5, 35, 0, 0, 2209, 2213, 1, 0, 0, 0, 2210, 2211, 5, 162, 0, 0, 2211, 2213, 3, 292, 146, 0, 2212, 2205, 1, 0, 0, 0, 2212, 2210, 1, 0, 0, 0, 2213, 291, 1, 0, 0, 0, 2214, 2218, 1, 0, 0, 0, 2215, 2218, 5, 163, 0, 0, 2216, 2218, 5, 2, 0, 0, 2217, 2214, 1, 0, 0, 0, 2217, 2215, 1, 0, 0, 0, 2217, 2216, 1, 0, 0, 0, 2218, 293, 1, 0, 0, 0, 2219, 2220, 5, 16, 0, 0, 2220, 2221, 3, 296, 148, 0, 2221, 2222, 5, 17, 0, 0, 2222, 2225, 1, 0, 0, 0, 2223, 2225, 3, 300, 150, 0, 2224, 2219, 1, 0, 0, 0, 2224, 2223, 1, 0, 0, 0, 2225, 295, 1, 0, 0, 0, 2226, 2227, 3, 300, 150, 0, 2227, 2228, 5, 27, 0, 0, 2228, 2230, 1, 0, 0, 0, 2229, 2226, 1, 0, 0, 0, 2230, 2233, 1, 0, 0, 0, 2231, 2229, 1, 0, 0, 0, 2231, 2232, 1, 0, 0, 0, 2232, 2234, 1, 0, 0, 0, 2233, 2231, 1, 0, 0, 0, 2234, 2235, 3, 300, 150, 0, 2235, 297, 1, 0, 0, 0, 2236, 2242, 1, 0, 0, 0, 2237, 2238, 5, 41, 0, 0, 2238, 2239, 3, 28, 14, 0, 2239, 2240, 5, 42, 0, 0, 2240, 2242, 1, 0, 0, 0, 2241, 2236, 1, 0, 0, 0, 2241, 2237, 1, 0, 0, 0, 2242, 299, 1, 0, 0, 0, 2243, 2244, 5, 178, 0, 0, 2244, 2245, 5, 264, 0, 0, 2245, 2246, 5, 29, 0, 0, 2246, 2247, 3, 4, 2, 0, 2247, 2248, 5, 30, 0, 0, 2248, 2308, 1, 0, 0, 0, 2249, 2250, 5, 262, 0, 0, 2250, 2251, 5, 29, 0, 0, 2251, 2252, 3, 0, 0, 0, 2252, 2253, 5, 30, 0, 0, 2253, 2308, 1, 0, 0, 0, 2254, 2255, 5, 83, 0, 0, 2255, 2256, 5, 29, 0, 0, 2256, 2257, 3, 304, 152, 0, 2257, 2258, 5, 30, 0, 0, 2258, 2308, 1, 0, 0, 0, 2259, 2260, 5, 185, 0, 0, 2260, 2261, 5, 29, 0, 0, 2261, 2262, 3, 32, 16, 0, 2262, 2263, 5, 30, 0, 0, 2263, 2264, 3, 298, 149, 0, 2264, 2308, 1, 0, 0, 0, 2265, 2266, 5, 186, 0, 0, 2266, 2267, 5, 29, 0, 0, 2267, 2268, 3, 32, 16, 0, 2268, 2269, 5, 30, 0, 0, 2269, 2270, 3, 298, 149, 0, 2270, 2308, 1, 0, 0, 0, 2271, 2272, 5, 184, 0, 0, 2272, 2273, 5, 29, 0, 0, 2273, 2274, 3, 30, 15, 0, 2274, 2275, 5, 30, 0, 0, 2275, 2276, 3, 298, 149, 0, 2276, 2308, 1, 0, 0, 0, 2277, 2278, 5, 183, 0, 0, 2278, 2279, 5, 29, 0, 0, 2279, 2280, 3, 28, 14, 0, 2280, 2281, 5, 30, 0, 0, 2281, 2282, 3, 298, 149, 0, 2282, 2308, 1, 0, 0, 0, 2283, 2284, 5, 182, 0, 0, 2284, 2285, 5, 29, 0, 0, 2285, 2286, 3, 28, 14, 0, 2286, 2287, 5, 30, 0, 0, 2287, 2288, 3, 298, 149, 0, 2288, 2308, 1, 0, 0, 0, 2289, 2290, 5, 181, 0, 0, 2290, 2291, 5, 29, 0, 0, 2291, 2292, 3, 28, 14, 0, 2292, 2293, 5, 30, 0, 0, 2293, 2294, 3, 298, 149, 0, 2294, 2308, 1, 0, 0, 0, 2295, 2296, 5, 185, 0, 0, 2296, 2308, 3, 298, 149, 0, 2297, 2298, 5, 186, 0, 0, 2298, 2308, 3, 298, 149, 0, 2299, 2300, 5, 184, 0, 0, 2300, 2308, 3, 298, 149, 0, 2301, 2302, 5, 183, 0, 0, 2302, 2308, 3, 298, 149, 0, 2303, 2304, 5, 182, 0, 0, 2304, 2308, 3, 298, 149, 0, 2305, 2306, 5, 181, 0, 0, 2306, 2308, 3, 298, 149, 0, 2307, 2243, 1, 0, 0, 0, 2307, 2249, 1, 0, 0, 0, 2307, 2254, 1, 0, 0, 0, 2307, 2259, 1, 0, 0, 0, 2307, 2265, 1, 0, 0, 0, 2307, 2271, 1, 0, 0, 0, 2307, 2277, 1, 0, 0, 0, 2307, 2283, 1, 0, 0, 0, 2307, 2289, 1, 0, 0, 0, 2307, 2295, 1, 0, 0, 0, 2307, 2297, 1, 0, 0, 0, 2307, 2299, 1, 0, 0, 0, 2307, 2301, 1, 0, 0, 0, 2307, 2303, 1, 0, 0, 0, 2307, 2305, 1, 0, 0, 0, 2308, 301, 1, 0, 0, 0, 2309, 2310, 5, 185, 0, 0, 2310, 2311, 5, 29, 0, 0, 2311, 2312, 3, 32, 16, 0, 2312, 2313, 5, 30, 0, 0, 2313, 2385, 1, 0, 0, 0, 2314, 2315, 5, 186, 0, 0, 2315, 2316, 5, 29, 0, 0, 2316, 2317, 3, 32, 16, 0, 2317, 2318, 5, 30, 0, 0, 2318, 2385, 1, 0, 0, 0, 2319, 2320, 5, 185, 0, 0, 2320, 2321, 5, 29, 0, 0, 2321, 2322, 3, 28, 14, 0, 2322, 2323, 5, 30, 0, 0, 2323, 2385, 1, 0, 0, 0, 2324, 2325, 5, 186, 0, 0, 2325, 2326, 5, 29, 0, 0, 2326, 2327, 3, 30, 15, 0, 2327, 2328, 5, 30, 0, 0, 2328, 2385, 1, 0, 0, 0, 2329, 2330, 5, 184, 0, 0, 2330, 2331, 5, 29, 0, 0, 2331, 2332, 3, 30, 15, 0, 2332, 2333, 5, 30, 0, 0, 2333, 2385, 1, 0, 0, 0, 2334, 2335, 5, 183, 0, 0, 2335, 2336, 5, 29, 0, 0, 2336, 2337, 3, 28, 14, 0, 2337, 2338, 5, 30, 0, 0, 2338, 2385, 1, 0, 0, 0, 2339, 2340, 5, 182, 0, 0, 2340, 2341, 5, 29, 0, 0, 2341, 2342, 3, 28, 14, 0, 2342, 2343, 5, 30, 0, 0, 2343, 2385, 1, 0, 0, 0, 2344, 2345, 5, 181, 0, 0, 2345, 2346, 5, 29, 0, 0, 2346, 2347, 3, 28, 14, 0, 2347, 2348, 5, 30, 0, 0, 2348, 2385, 1, 0, 0, 0, 2349, 2350, 5, 190, 0, 0, 2350, 2351, 5, 29, 0, 0, 2351, 2352, 3, 30, 15, 0, 2352, 2353, 5, 30, 0, 0, 2353, 2385, 1, 0, 0, 0, 2354, 2355, 5, 189, 0, 0, 2355, 2356, 5, 29, 0, 0, 2356, 2357, 3, 28, 14, 0, 2357, 2358, 5, 30, 0, 0, 2358, 2385, 1, 0, 0, 0, 2359, 2360, 5, 188, 0, 0, 2360, 2361, 5, 29, 0, 0, 2361, 2362, 3, 28, 14, 0, 2362, 2363, 5, 30, 0, 0, 2363, 2385, 1, 0, 0, 0, 2364, 2365, 5, 187, 0, 0, 2365, 2366, 5, 29, 0, 0, 2366, 2367, 3, 28, 14, 0, 2367, 2368, 5, 30, 0, 0, 2368, 2385, 1, 0, 0, 0, 2369, 2370, 5, 178, 0, 0, 2370, 2371, 5, 29, 0, 0, 2371, 2372, 3, 28, 14, 0, 2372, 2373, 5, 30, 0, 0, 2373, 2385, 1, 0, 0, 0, 2374, 2375, 5, 180, 0, 0, 2375, 2376, 5, 29, 0, 0, 2376, 2377, 3, 176, 88, 0, 2377, 2378, 5, 30, 0, 0, 2378, 2385, 1, 0, 0, 0, 2379, 2380, 5, 83, 0, 0, 2380, 2381, 5, 29, 0, 0, 2381, 2382, 3, 304, 152, 0, 2382, 2383, 5, 30, 0, 0, 2383, 2385, 1, 0, 0, 0, 2384, 2309, 1, 0, 0, 0, 2384, 2314, 1, 0, 0, 0, 2384, 2319, 1, 0, 0, 0, 2384, 2324, 1, 0, 0, 0, 2384, 2329, 1, 0, 0, 0, 2384, 2334, 1, 0, 0, 0, 2384, 2339, 1, 0, 0, 0, 2384, 2344, 1, 0, 0, 0, 2384, 2349, 1, 0, 0, 0, 2384, 2354, 1, 0, 0, 0, 2384, 2359, 1, 0, 0, 0, 2384, 2364, 1, 0, 0, 0, 2384, 2369, 1, 0, 0, 0, 2384, 2374, 1, 0, 0, 0, 2384, 2379, 1, 0, 0, 0, 2385, 303, 1, 0, 0, 0, 2386, 2388, 3, 306, 153, 0, 2387, 2386, 1, 0, 0, 0, 2388, 2391, 1, 0, 0, 0, 2389, 2387, 1, 0, 0, 0, 2389, 2390, 1, 0, 0, 0, 2390, 305, 1, 0, 0, 0, 2391, 2389, 1, 0, 0, 0, 2392, 2394, 5, 172, 0, 0, 2393, 2392, 1, 0, 0, 0, 2394, 2395, 1, 0, 0, 0, 2395, 2393, 1, 0, 0, 0, 2395, 2396, 1, 0, 0, 0, 2396, 307, 1, 0, 0, 0, 2397, 2401, 3, 302, 151, 0, 2398, 2401, 3, 4, 2, 0, 2399, 2401, 5, 176, 0, 0, 2400, 2397, 1, 0, 0, 0, 2400, 2398, 1, 0, 0, 0, 2400, 2399, 1, 0, 0, 0, 2401, 309, 1, 0, 0, 0, 2402, 2551, 3, 302, 151, 0, 2403, 2404, 5, 179, 0, 0, 2404, 2405, 5, 29, 0, 0, 2405, 2406, 5, 176, 0, 0, 2406, 2551, 5, 30, 0, 0, 2407, 2408, 5, 179, 0, 0, 2408, 2409, 5, 29, 0, 0, 2409, 2410, 5, 266, 0, 0, 2410, 2551, 5, 30, 0, 0, 2411, 2412, 5, 193, 0, 0, 2412, 2413, 5, 29, 0, 0, 2413, 2414, 5, 38, 0, 0, 2414, 2415, 5, 266, 0, 0, 2415, 2551, 5, 30, 0, 0, 2416, 2417, 5, 193, 0, 0, 2417, 2418, 5, 29, 0, 0, 2418, 2419, 3, 134, 67, 0, 2419, 2420, 5, 30, 0, 0, 2420, 2551, 1, 0, 0, 0, 2421, 2422, 5, 193, 0, 0, 2422, 2423, 5, 29, 0, 0, 2423, 2424, 5, 176, 0, 0, 2424, 2551, 5, 30, 0, 0, 2425, 2426, 5, 194, 0, 0, 2426, 2427, 5, 29, 0, 0, 2427, 2428, 3, 310, 155, 0, 2428, 2429, 5, 30, 0, 0, 2429, 2551, 1, 0, 0, 0, 2430, 2431, 5, 185, 0, 0, 2431, 2432, 5, 41, 0, 0, 2432, 2433, 3, 28, 14, 0, 2433, 2434, 5, 42, 0, 0, 2434, 2435, 5, 29, 0, 0, 2435, 2436, 3, 312, 156, 0, 2436, 2437, 5, 30, 0, 0, 2437, 2551, 1, 0, 0, 0, 2438, 2439, 5, 186, 0, 0, 2439, 2440, 5, 41, 0, 0, 2440, 2441, 3, 28, 14, 0, 2441, 2442, 5, 42, 0, 0, 2442, 2443, 5, 29, 0, 0, 2443, 2444, 3, 314, 157, 0, 2444, 2445, 5, 30, 0, 0, 2445, 2551, 1, 0, 0, 0, 2446, 2447, 5, 184, 0, 0, 2447, 2448, 5, 41, 0, 0, 2448, 2449, 3, 28, 14, 0, 2449, 2450, 5, 42, 0, 0, 2450, 2451, 5, 29, 0, 0, 2451, 2452, 3, 316, 158, 0, 2452, 2453, 5, 30, 0, 0, 2453, 2551, 1, 0, 0, 0, 2454, 2455, 5, 183, 0, 0, 2455, 2456, 5, 41, 0, 0, 2456, 2457, 3, 28, 14, 0, 2457, 2458, 5, 42, 0, 0, 2458, 2459, 5, 29, 0, 0, 2459, 2460, 3, 318, 159, 0, 2460, 2461, 5, 30, 0, 0, 2461, 2551, 1, 0, 0, 0, 2462, 2463, 5, 182, 0, 0, 2463, 2464, 5, 41, 0, 0, 2464, 2465, 3, 28, 14, 0, 2465, 2466, 5, 42, 0, 0, 2466, 2467, 5, 29, 0, 0, 2467, 2468, 3, 320, 160, 0, 2468, 2469, 5, 30, 0, 0, 2469, 2551, 1, 0, 0, 0, 2470, 2471, 5, 181, 0, 0, 2471, 2472, 5, 41, 0, 0, 2472, 2473, 3, 28, 14, 0, 2473, 2474, 5, 42, 0, 0, 2474, 2475, 5, 29, 0, 0, 2475, 2476, 3, 322, 161, 0, 2476, 2477, 5, 30, 0, 0, 2477, 2551, 1, 0, 0, 0, 2478, 2479, 5, 190, 0, 0, 2479, 2480, 5, 41, 0, 0, 2480, 2481, 3, 28, 14, 0, 2481, 2482, 5, 42, 0, 0, 2482, 2483, 5, 29, 0, 0, 2483, 2484, 3, 316, 158, 0, 2484, 2485, 5, 30, 0, 0, 2485, 2551, 1, 0, 0, 0, 2486, 2487, 5, 189, 0, 0, 2487, 2488, 5, 41, 0, 0, 2488, 2489, 3, 28, 14, 0, 2489, 2490, 5, 42, 0, 0, 2490, 2491, 5, 29, 0, 0, 2491, 2492, 3, 318, 159, 0, 2492, 2493, 5, 30, 0, 0, 2493, 2551, 1, 0, 0, 0, 2494, 2495, 5, 188, 0, 0, 2495, 2496, 5, 41, 0, 0, 2496, 2497, 3, 28, 14, 0, 2497, 2498, 5, 42, 0, 0, 2498, 2499, 5, 29, 0, 0, 2499, 2500, 3, 320, 160, 0, 2500, 2501, 5, 30, 0, 0, 2501, 2551, 1, 0, 0, 0, 2502, 2503, 5, 187, 0, 0, 2503, 2504, 5, 41, 0, 0, 2504, 2505, 3, 28, 14, 0, 2505, 2506, 5, 42, 0, 0, 2506, 2507, 5, 29, 0, 0, 2507, 2508, 3, 322, 161, 0, 2508, 2509, 5, 30, 0, 0, 2509, 2551, 1, 0, 0, 0, 2510, 2511, 5, 178, 0, 0, 2511, 2512, 5, 41, 0, 0, 2512, 2513, 3, 28, 14, 0, 2513, 2514, 5, 42, 0, 0, 2514, 2515, 5, 29, 0, 0, 2515, 2516, 3, 320, 160, 0, 2516, 2517, 5, 30, 0, 0, 2517, 2551, 1, 0, 0, 0, 2518, 2519, 5, 180, 0, 0, 2519, 2520, 5, 41, 0, 0, 2520, 2521, 3, 28, 14, 0, 2521, 2522, 5, 42, 0, 0, 2522, 2523, 5, 29, 0, 0, 2523, 2524, 3, 324, 162, 0, 2524, 2525, 5, 30, 0, 0, 2525, 2551, 1, 0, 0, 0, 2526, 2527, 5, 179, 0, 0, 2527, 2528, 5, 41, 0, 0, 2528, 2529, 3, 28, 14, 0, 2529, 2530, 5, 42, 0, 0, 2530, 2531, 5, 29, 0, 0, 2531, 2532, 3, 326, 163, 0, 2532, 2533, 5, 30, 0, 0, 2533, 2551, 1, 0, 0, 0, 2534, 2535, 5, 193, 0, 0, 2535, 2536, 5, 41, 0, 0, 2536, 2537, 3, 28, 14, 0, 2537, 2538, 5, 42, 0, 0, 2538, 2539, 5, 29, 0, 0, 2539, 2540, 3, 328, 164, 0, 2540, 2541, 5, 30, 0, 0, 2541, 2551, 1, 0, 0, 0, 2542, 2543, 5, 194, 0, 0, 2543, 2544, 5, 41, 0, 0, 2544, 2545, 3, 28, 14, 0, 2545, 2546, 5, 42, 0, 0, 2546, 2547, 5, 29, 0, 0, 2547, 2548, 3, 332, 166, 0, 2548, 2549, 5, 30, 0, 0, 2549, 2551, 1, 0, 0, 0, 2550, 2402, 1, 0, 0, 0, 2550, 2403, 1, 0, 0, 0, 2550, 2407, 1, 0, 0, 0, 2550, 2411, 1, 0, 0, 0, 2550, 2416, 1, 0, 0, 0, 2550, 2421, 1, 0, 0, 0, 2550, 2425, 1, 0, 0, 0, 2550, 2430, 1, 0, 0, 0, 2550, 2438, 1, 0, 0, 0, 2550, 2446, 1, 0, 0, 0, 2550, 2454, 1, 0, 0, 0, 2550, 2462, 1, 0, 0, 0, 2550, 2470, 1, 0, 0, 0, 2550, 2478, 1, 0, 0, 0, 2550, 2486, 1, 0, 0, 0, 2550, 2494, 1, 0, 0, 0, 2550, 2502, 1, 0, 0, 0, 2550, 2510, 1, 0, 0, 0, 2550, 2518, 1, 0, 0, 0, 2550, 2526, 1, 0, 0, 0, 2550, 2534, 1, 0, 0, 0, 2550, 2542, 1, 0, 0, 0, 2551, 311, 1, 0, 0, 0, 2552, 2555, 3, 32, 16, 0, 2553, 2555, 3, 28, 14, 0, 2554, 2552, 1, 0, 0, 0, 2554, 2553, 1, 0, 0, 0, 2555, 2558, 1, 0, 0, 0, 2556, 2554, 1, 0, 0, 0, 2556, 2557, 1, 0, 0, 0, 2557, 313, 1, 0, 0, 0, 2558, 2556, 1, 0, 0, 0, 2559, 2562, 3, 32, 16, 0, 2560, 2562, 3, 30, 15, 0, 2561, 2559, 1, 0, 0, 0, 2561, 2560, 1, 0, 0, 0, 2562, 2565, 1, 0, 0, 0, 2563, 2561, 1, 0, 0, 0, 2563, 2564, 1, 0, 0, 0, 2564, 315, 1, 0, 0, 0, 2565, 2563, 1, 0, 0, 0, 2566, 2568, 3, 30, 15, 0, 2567, 2566, 1, 0, 0, 0, 2568, 2571, 1, 0, 0, 0, 2569, 2567, 1, 0, 0, 0, 2569, 2570, 1, 0, 0, 0, 2570, 317, 1, 0, 0, 0, 2571, 2569, 1, 0, 0, 0, 2572, 2574, 3, 28, 14, 0, 2573, 2572, 1, 0, 0, 0, 2574, 2577, 1, 0, 0, 0, 2575, 2573, 1, 0, 0, 0, 2575, 2576, 1, 0, 0, 0, 2576, 319, 1, 0, 0, 0, 2577, 2575, 1, 0, 0, 0, 2578, 2580, 3, 28, 14, 0, 2579, 2578, 1, 0, 0, 0, 2580, 2583, 1, 0, 0, 0, 2581, 2579, 1, 0, 0, 0, 2581, 2582, 1, 0, 0, 0, 2582, 321, 1, 0, 0, 0, 2583, 2581, 1, 0, 0, 0, 2584, 2586, 3, 28, 14, 0, 2585, 2584, 1, 0, 0, 0, 2586, 2589, 1, 0, 0, 0, 2587, 2585, 1, 0, 0, 0, 2587, 2588, 1, 0, 0, 0, 2588, 323, 1, 0, 0, 0, 2589, 2587, 1, 0, 0, 0, 2590, 2592, 3, 176, 88, 0, 2591, 2590, 1, 0, 0, 0, 2592, 2595, 1, 0, 0, 0, 2593, 2591, 1, 0, 0, 0, 2593, 2594, 1, 0, 0, 0, 2594, 325, 1, 0, 0, 0, 2595, 2593, 1, 0, 0, 0, 2596, 2598, 7, 11, 0, 0, 2597, 2596, 1, 0, 0, 0, 2598, 2601, 1, 0, 0, 0, 2599, 2597, 1, 0, 0, 0, 2599, 2600, 1, 0, 0, 0, 2600, 327, 1, 0, 0, 0, 2601, 2599, 1, 0, 0, 0, 2602, 2604, 3, 330, 165, 0, 2603, 2602, 1, 0, 0, 0, 2604, 2607, 1, 0, 0, 0, 2605, 2603, 1, 0, 0, 0, 2605, 2606, 1, 0, 0, 0, 2606, 329, 1, 0, 0, 0, 2607, 2605, 1, 0, 0, 0, 2608, 2613, 5, 176, 0, 0, 2609, 2610, 5, 38, 0, 0, 2610, 2613, 5, 266, 0, 0, 2611, 2613, 3, 134, 67, 0, 2612, 2608, 1, 0, 0, 0, 2612, 2609, 1, 0, 0, 0, 2612, 2611, 1, 0, 0, 0, 2613, 331, 1, 0, 0, 0, 2614, 2616, 3, 310, 155, 0, 2615, 2614, 1, 0, 0, 0, 2616, 2619, 1, 0, 0, 0, 2617, 2615, 1, 0, 0, 0, 2617, 2618, 1, 0, 0, 0, 2618, 333, 1, 0, 0, 0, 2619, 2617, 1, 0, 0, 0, 2620, 2624, 3, 40, 20, 0, 2621, 2624, 3, 42, 21, 0, 2622, 2624, 3, 2, 1, 0, 2623, 2620, 1, 0, 0, 0, 2623, 2621, 1, 0, 0, 0, 2623, 2622, 1, 0, 0, 0, 2624, 335, 1, 0, 0, 0, 2625, 2626, 5, 164, 0, 0, 2626, 2627, 5, 35, 0, 0, 2627, 2628, 5, 29, 0, 0, 2628, 2629, 3, 304, 152, 0, 2629, 2630, 5, 30, 0, 0, 2630, 2651, 1, 0, 0, 0, 2631, 2632, 5, 165, 0, 0, 2632, 2633, 3, 34, 17, 0, 2633, 2634, 5, 74, 0, 0, 2634, 2635, 3, 34, 17, 0, 2635, 2636, 5, 74, 0, 0, 2636, 2637, 3, 34, 17, 0, 2637, 2638, 5, 74, 0, 0, 2638, 2639, 3, 34, 17, 0, 2639, 2651, 1, 0, 0, 0, 2640, 2641, 5, 166, 0, 0, 2641, 2651, 3, 4, 2, 0, 2642, 2643, 5, 166, 0, 0, 2643, 2644, 5, 35, 0, 0, 2644, 2645, 5, 29, 0, 0, 2645, 2646, 3, 304, 152, 0, 2646, 2647, 5, 30, 0, 0, 2647, 2651, 1, 0, 0, 0, 2648, 2651, 3, 334, 167, 0, 2649, 2651, 3, 36, 18, 0, 2650, 2625, 1, 0, 0, 0, 2650, 2631, 1, 0, 0, 0, 2650, 2640, 1, 0, 0, 0, 2650, 2642, 1, 0, 0, 0, 2650, 2648, 1, 0, 0, 0, 2650, 2649, 1, 0, 0, 0, 2651, 337, 1, 0, 0, 0, 2652, 2653, 5, 24, 0, 0, 2653, 2654, 5, 39, 0, 0, 2654, 2655, 3, 94, 47, 0, 2655, 2656, 3, 2, 1, 0, 2656, 2665, 1, 0, 0, 0, 2657, 2658, 5, 24, 0, 0, 2658, 2659, 5, 39, 0, 0, 2659, 2660, 3, 94, 47, 0, 2660, 2661, 3, 2, 1, 0, 2661, 2662, 5, 33, 0, 0, 2662, 2663, 3, 2, 1, 0, 2663, 2665, 1, 0, 0, 0, 2664, 2652, 1, 0, 0, 0, 2664, 2657, 1, 0, 0, 0, 2665, 339, 1, 0, 0, 0, 2666, 2668, 3, 342, 171, 0, 2667, 2666, 1, 0, 0, 0, 2668, 2671, 1, 0, 0, 0, 2669, 2667, 1, 0, 0, 0, 2669, 2670, 1, 0, 0, 0, 2670, 341, 1, 0, 0, 0, 2671, 2669, 1, 0, 0, 0, 2672, 2673, 5, 177, 0, 0, 2673, 2674, 5, 35, 0, 0, 2674, 2675, 5, 29, 0, 0, 2675, 2676, 3, 304, 152, 0, 2676, 2677, 5, 30, 0, 0, 2677, 2687, 1, 0, 0, 0, 2678, 2687, 3, 336, 168, 0, 2679, 2680, 5, 167, 0, 0, 2680, 2681, 5, 35, 0, 0, 2681, 2682, 5, 29, 0, 0, 2682, 2683, 3, 304, 152, 0, 2683, 2684, 5, 30, 0, 0, 2684, 2687, 1, 0, 0, 0, 2685, 2687, 5, 54, 0, 0, 2686, 2672, 1, 0, 0, 0, 2686, 2678, 1, 0, 0, 0, 2686, 2679, 1, 0, 0, 0, 2686, 2685, 1, 0, 0, 0, 2687, 343, 1, 0, 0, 0, 2688, 2689, 5, 49, 0, 0, 2689, 2693, 5, 39, 0, 0, 2690, 2692, 3, 348, 174, 0, 2691, 2690, 1, 0, 0, 0, 2692, 2695, 1, 0, 0, 0, 2693, 2691, 1, 0, 0, 0, 2693, 2694, 1, 0, 0, 0, 2694, 2696, 1, 0, 0, 0, 2695, 2693, 1, 0, 0, 0, 2696, 2697, 3, 2, 1, 0, 2697, 345, 1, 0, 0, 0, 2698, 2702, 5, 302, 0, 0, 2699, 2701, 3, 348, 174, 0, 2700, 2699, 1, 0, 0, 0, 2701, 2704, 1, 0, 0, 0, 2702, 2700, 1, 0, 0, 0, 2702, 2703, 1, 0, 0, 0, 2703, 2705, 1, 0, 0, 0, 2704, 2702, 1, 0, 0, 0, 2705, 2706, 3, 2, 1, 0, 2706, 347, 1, 0, 0, 0, 2707, 2723, 5, 51, 0, 0, 2708, 2723, 5, 50, 0, 0, 2709, 2723, 5, 168, 0, 0, 2710, 2711, 5, 61, 0, 0, 2711, 2723, 5, 50, 0, 0, 2712, 2713, 5, 61, 0, 0, 2713, 2723, 5, 51, 0, 0, 2714, 2715, 5, 61, 0, 0, 2715, 2723, 5, 62, 0, 0, 2716, 2717, 5, 61, 0, 0, 2717, 2723, 5, 63, 0, 0, 2718, 2719, 5, 61, 0, 0, 2719, 2723, 5, 64, 0, 0, 2720, 2721, 5, 61, 0, 0, 2721, 2723, 5, 65, 0, 0, 2722, 2707, 1, 0, 0, 0, 2722, 2708, 1, 0, 0, 0, 2722, 2709, 1, 0, 0, 0, 2722, 2710, 1, 0, 0, 0, 2722, 2712, 1, 0, 0, 0, 2722, 2714, 1, 0, 0, 0, 2722, 2716, 1, 0, 0, 0, 2722, 2718, 1, 0, 0, 0, 2722, 2720, 1, 0, 0, 0, 2723, 349, 1, 0, 0, 0, 2724, 2726, 3, 352, 176, 0, 2725, 2724, 1, 0, 0, 0, 2726, 2729, 1, 0, 0, 0, 2727, 2725, 1, 0, 0, 0, 2727, 2728, 1, 0, 0, 0, 2728, 351, 1, 0, 0, 0, 2729, 2727, 1, 0, 0, 0, 2730, 2731, 5, 20, 0, 0, 2731, 2744, 3, 2, 1, 0, 2732, 2733, 5, 49, 0, 0, 2733, 2734, 5, 39, 0, 0, 2734, 2744, 3, 136, 68, 0, 2735, 2736, 5, 24, 0, 0, 2736, 2737, 5, 39, 0, 0, 2737, 2744, 3, 2, 1, 0, 2738, 2744, 3, 188, 94, 0, 2739, 2740, 5, 49, 0, 0, 2740, 2744, 3, 28, 14, 0, 2741, 2744, 3, 334, 167, 0, 2742, 2744, 3, 36, 18, 0, 2743, 2730, 1, 0, 0, 0, 2743, 2732, 1, 0, 0, 0, 2743, 2735, 1, 0, 0, 0, 2743, 2738, 1, 0, 0, 0, 2743, 2739, 1, 0, 0, 0, 2743, 2741, 1, 0, 0, 0, 2743, 2742, 1, 0, 0, 0, 2744, 353, 1, 0, 0, 0, 2745, 2749, 5, 276, 0, 0, 2746, 2748, 3, 356, 178, 0, 2747, 2746, 1, 0, 0, 0, 2748, 2751, 1, 0, 0, 0, 2749, 2747, 1, 0, 0, 0, 2749, 2750, 1, 0, 0, 0, 2750, 2752, 1, 0, 0, 0, 2751, 2749, 1, 0, 0, 0, 2752, 2765, 3, 2, 1, 0, 2753, 2757, 5, 276, 0, 0, 2754, 2756, 3, 356, 178, 0, 2755, 2754, 1, 0, 0, 0, 2756, 2759, 1, 0, 0, 0, 2757, 2755, 1, 0, 0, 0, 2757, 2758, 1, 0, 0, 0, 2758, 2760, 1, 0, 0, 0, 2759, 2757, 1, 0, 0, 0, 2760, 2761, 3, 2, 1, 0, 2761, 2762, 5, 33, 0, 0, 2762, 2763, 3, 2, 1, 0, 2763, 2765, 1, 0, 0, 0, 2764, 2745, 1, 0, 0, 0, 2764, 2753, 1, 0, 0, 0, 2765, 355, 1, 0, 0, 0, 2766, 2767, 7, 12, 0, 0, 2767, 357, 1, 0, 0, 0, 2768, 2770, 3, 360, 180, 0, 2769, 2768, 1, 0, 0, 0, 2770, 2773, 1, 0, 0, 0, 2771, 2769, 1, 0, 0, 0, 2771, 2772, 1, 0, 0, 0, 2772, 359, 1, 0, 0, 0, 2773, 2771, 1, 0, 0, 0, 2774, 2775, 5, 20, 0, 0, 2775, 2776, 3, 2, 1, 0, 2776, 2777, 5, 43, 0, 0, 2777, 2778, 3, 28, 14, 0, 2778, 2785, 1, 0, 0, 0, 2779, 2780, 5, 24, 0, 0, 2780, 2781, 5, 39, 0, 0, 2781, 2785, 3, 2, 1, 0, 2782, 2785, 3, 334, 167, 0, 2783, 2785, 3, 36, 18, 0, 2784, 2774, 1, 0, 0, 0, 2784, 2779, 1, 0, 0, 0, 2784, 2782, 1, 0, 0, 0, 2784, 2783, 1, 0, 0, 0, 2785, 361, 1, 0, 0, 0, 167, 369, 373, 379, 387, 439, 478, 485, 505, 509, 527, 554, 577, 613, 619, 626, 628, 638, 640, 647, 658, 666, 687, 689, 705, 750, 755, 760, 765, 773, 851, 857, 873, 879, 885, 892, 997, 1004, 1006, 1011, 1013, 1021, 1033, 1045, 1052, 1064, 1091, 1098, 1106, 1114, 1127, 1134, 1137, 1156, 1239, 1248, 1255, 1258, 1266, 1286, 1318, 1332, 1357, 1374, 1382, 1386, 1401, 1408, 1453, 1463, 1479, 1491, 1503, 1517, 1529, 1540, 1547, 1557, 1570, 1575, 1580, 1589, 1600, 1683, 1692, 1705, 1716, 1724, 1734, 1736, 1762, 1767, 1772, 1779, 1785, 1795, 1799, 1806, 1821, 1827, 1841, 1854, 1862, 1869, 1874, 1890, 1895, 1897, 1910, 1936, 1943, 1945, 1950, 1982, 1987, 2009, 2014, 2078, 2087, 2100, 2111, 2122, 2125, 2132, 2144, 2158, 2172, 2180, 2200, 2212, 2217, 2224, 2231, 2241, 2307, 2384, 2389, 2395, 2400, 2550, 2554, 2556, 2561, 2563, 2569, 2575, 2581, 2587, 2593, 2599, 2605, 2612, 2617, 2623, 2650, 2664, 2669, 2686, 2693, 2702, 2722, 2727, 2743, 2749, 2757, 2764, 2771, 2784] \ No newline at end of file +[4, 1, 304, 2897, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 377, 8, 1, 10, 1, 12, 1, 380, 9, 1, 1, 1, 1, 1, 3, 1, 384, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 5, 3, 390, 8, 3, 10, 3, 12, 3, 393, 9, 3, 1, 3, 1, 3, 1, 4, 5, 4, 398, 8, 4, 10, 4, 12, 4, 401, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 453, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 501, 8, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 5, 15, 508, 8, 15, 10, 15, 12, 15, 511, 9, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 534, 8, 18, 1, 19, 1, 19, 3, 19, 538, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 556, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 583, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 606, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 642, 8, 23, 1, 24, 1, 24, 1, 25, 1, 25, 3, 25, 648, 8, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 5, 27, 655, 8, 27, 10, 27, 12, 27, 658, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 5, 28, 667, 8, 28, 10, 28, 12, 28, 670, 9, 28, 1, 29, 1, 29, 1, 30, 1, 30, 3, 30, 676, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 687, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 695, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 716, 8, 34, 10, 34, 12, 34, 719, 9, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 5, 37, 732, 8, 37, 10, 37, 12, 37, 735, 9, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 779, 8, 38, 1, 39, 1, 39, 1, 39, 3, 39, 784, 8, 39, 1, 40, 1, 40, 1, 40, 3, 40, 789, 8, 40, 1, 41, 5, 41, 792, 8, 41, 10, 41, 12, 41, 795, 9, 41, 1, 42, 1, 42, 1, 42, 5, 42, 800, 8, 42, 10, 42, 12, 42, 803, 9, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 912, 8, 44, 1, 45, 1, 45, 5, 45, 916, 8, 45, 10, 45, 12, 45, 919, 9, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 932, 8, 45, 10, 45, 12, 45, 935, 9, 45, 1, 45, 1, 45, 1, 45, 3, 45, 940, 8, 45, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 946, 8, 47, 1, 48, 1, 48, 1, 49, 5, 49, 951, 8, 49, 10, 49, 12, 49, 954, 9, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1061, 8, 63, 1, 64, 1, 64, 1, 64, 3, 64, 1066, 8, 64, 1, 64, 1, 64, 5, 64, 1070, 8, 64, 10, 64, 12, 64, 1073, 9, 64, 1, 64, 1, 64, 3, 64, 1077, 8, 64, 3, 64, 1079, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 5, 65, 1085, 8, 65, 10, 65, 12, 65, 1088, 9, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 1097, 8, 66, 10, 66, 12, 66, 1100, 9, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 1109, 8, 67, 10, 67, 12, 67, 1112, 9, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 1118, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1125, 8, 68, 3, 68, 1127, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1154, 8, 69, 1, 70, 1, 70, 1, 70, 5, 70, 1159, 8, 70, 10, 70, 12, 70, 1162, 9, 70, 1, 70, 1, 70, 1, 71, 5, 71, 1167, 8, 71, 10, 71, 12, 71, 1170, 9, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1177, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1190, 8, 73, 1, 74, 1, 74, 1, 74, 5, 74, 1195, 8, 74, 10, 74, 12, 74, 1198, 9, 74, 3, 74, 1200, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1219, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 1305, 8, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1314, 8, 77, 1, 78, 1, 78, 1, 78, 5, 78, 1319, 8, 78, 10, 78, 12, 78, 1322, 9, 78, 3, 78, 1324, 8, 78, 1, 79, 1, 79, 1, 80, 1, 80, 5, 80, 1330, 8, 80, 10, 80, 12, 80, 1333, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1353, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 1385, 8, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1408, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1420, 8, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1429, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1454, 8, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1471, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1477, 8, 88, 10, 88, 12, 88, 1480, 9, 88, 1, 88, 3, 88, 1483, 8, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1498, 8, 89, 1, 90, 1, 90, 1, 90, 5, 90, 1503, 8, 90, 10, 90, 12, 90, 1506, 9, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 1550, 8, 93, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1560, 8, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1576, 8, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 1588, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 3, 96, 1600, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 1614, 8, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 1626, 8, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 1637, 8, 100, 1, 101, 1, 101, 1, 101, 5, 101, 1642, 8, 101, 10, 101, 12, 101, 1645, 9, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 1654, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1667, 8, 103, 1, 104, 5, 104, 1670, 8, 104, 10, 104, 12, 104, 1673, 9, 104, 1, 105, 1, 105, 3, 105, 1677, 8, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 5, 106, 1684, 8, 106, 10, 106, 12, 106, 1687, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 3, 108, 1697, 8, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1778, 8, 110, 10, 110, 12, 110, 1781, 9, 110, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1787, 8, 110, 10, 110, 12, 110, 1790, 9, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1800, 8, 110, 10, 110, 12, 110, 1803, 9, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1811, 8, 110, 10, 110, 12, 110, 1814, 9, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 1821, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1831, 8, 111, 10, 111, 12, 111, 1834, 9, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1860, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1867, 8, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1872, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1879, 8, 115, 1, 116, 1, 116, 5, 116, 1883, 8, 116, 10, 116, 12, 116, 1886, 9, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 5, 116, 1893, 8, 116, 10, 116, 12, 116, 1896, 9, 116, 1, 116, 3, 116, 1899, 8, 116, 1, 117, 1, 117, 1, 118, 5, 118, 1904, 8, 118, 10, 118, 12, 118, 1907, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1921, 8, 119, 1, 120, 1, 120, 5, 120, 1925, 8, 120, 10, 120, 12, 120, 1928, 9, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 5, 122, 1939, 8, 122, 10, 122, 12, 122, 1942, 9, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1954, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1962, 8, 124, 1, 125, 1, 125, 1, 125, 4, 125, 1967, 8, 125, 11, 125, 12, 125, 1968, 1, 125, 1, 125, 3, 125, 1973, 8, 125, 1, 126, 5, 126, 1976, 8, 126, 10, 126, 12, 126, 1979, 9, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1994, 8, 127, 1, 128, 1, 128, 1, 128, 5, 128, 1999, 8, 128, 10, 128, 12, 128, 2002, 9, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 5, 128, 2012, 8, 128, 10, 128, 12, 128, 2015, 9, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 2040, 8, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 2047, 8, 130, 3, 130, 2049, 8, 130, 1, 130, 5, 130, 2052, 8, 130, 10, 130, 12, 130, 2055, 9, 130, 1, 130, 1, 130, 1, 130, 3, 130, 2060, 8, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 2089, 8, 131, 1, 132, 1, 132, 1, 132, 3, 132, 2094, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 2117, 8, 133, 1, 134, 5, 134, 2120, 8, 134, 10, 134, 12, 134, 2123, 9, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 2184, 8, 135, 10, 135, 12, 135, 2187, 9, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 2193, 8, 135, 10, 135, 12, 135, 2196, 9, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 2206, 8, 135, 10, 135, 12, 135, 2209, 9, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 2217, 8, 135, 10, 135, 12, 135, 2220, 9, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 2228, 8, 135, 10, 135, 12, 135, 2231, 9, 135, 3, 135, 2233, 8, 135, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 3, 137, 2240, 8, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 140, 4, 140, 2250, 8, 140, 11, 140, 12, 140, 2251, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 2266, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 2280, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 2288, 8, 143, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 2308, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 2320, 8, 149, 1, 150, 1, 150, 1, 150, 3, 150, 2325, 8, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 4, 151, 2332, 8, 151, 11, 151, 12, 151, 2333, 3, 151, 2336, 8, 151, 1, 152, 1, 152, 1, 152, 5, 152, 2341, 8, 152, 10, 152, 12, 152, 2344, 9, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 2353, 8, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2421, 8, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 2498, 8, 155, 1, 156, 5, 156, 2501, 8, 156, 10, 156, 12, 156, 2504, 9, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 3, 158, 2511, 8, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 2661, 8, 159, 1, 160, 1, 160, 5, 160, 2665, 8, 160, 10, 160, 12, 160, 2668, 9, 160, 1, 161, 1, 161, 5, 161, 2672, 8, 161, 10, 161, 12, 161, 2675, 9, 161, 1, 162, 5, 162, 2678, 8, 162, 10, 162, 12, 162, 2681, 9, 162, 1, 163, 5, 163, 2684, 8, 163, 10, 163, 12, 163, 2687, 9, 163, 1, 164, 5, 164, 2690, 8, 164, 10, 164, 12, 164, 2693, 9, 164, 1, 165, 5, 165, 2696, 8, 165, 10, 165, 12, 165, 2699, 9, 165, 1, 166, 5, 166, 2702, 8, 166, 10, 166, 12, 166, 2705, 9, 166, 1, 167, 5, 167, 2708, 8, 167, 10, 167, 12, 167, 2711, 9, 167, 1, 168, 5, 168, 2714, 8, 168, 10, 168, 12, 168, 2717, 9, 168, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 2723, 8, 169, 1, 170, 5, 170, 2726, 8, 170, 10, 170, 12, 170, 2729, 9, 170, 1, 171, 1, 171, 1, 171, 3, 171, 2734, 8, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 2761, 8, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2775, 8, 173, 1, 174, 5, 174, 2778, 8, 174, 10, 174, 12, 174, 2781, 9, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 2797, 8, 175, 1, 176, 1, 176, 1, 176, 5, 176, 2802, 8, 176, 10, 176, 12, 176, 2805, 9, 176, 1, 176, 1, 176, 1, 177, 1, 177, 5, 177, 2811, 8, 177, 10, 177, 12, 177, 2814, 9, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 3, 178, 2833, 8, 178, 1, 179, 5, 179, 2836, 8, 179, 10, 179, 12, 179, 2839, 9, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 2854, 8, 180, 1, 181, 1, 181, 5, 181, 2858, 8, 181, 10, 181, 12, 181, 2861, 9, 181, 1, 181, 1, 181, 1, 181, 5, 181, 2866, 8, 181, 10, 181, 12, 181, 2869, 9, 181, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 2875, 8, 181, 1, 182, 1, 182, 1, 183, 5, 183, 2880, 8, 183, 10, 183, 12, 183, 2883, 9, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 3, 184, 2895, 8, 184, 1, 184, 0, 1, 68, 185, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 0, 15, 6, 0, 1, 15, 198, 198, 242, 242, 246, 246, 263, 263, 288, 288, 3, 0, 198, 198, 242, 242, 288, 288, 1, 0, 262, 263, 1, 0, 172, 173, 1, 0, 36, 37, 1, 0, 72, 73, 3, 0, 2, 2, 60, 60, 76, 82, 2, 0, 228, 228, 259, 260, 9, 0, 177, 177, 182, 194, 200, 200, 206, 207, 209, 214, 217, 218, 221, 221, 229, 241, 261, 261, 1, 0, 94, 95, 1, 0, 96, 110, 1, 0, 67, 68, 2, 0, 172, 172, 288, 289, 2, 0, 178, 178, 263, 263, 1, 0, 50, 51, 3310, 0, 370, 1, 0, 0, 0, 2, 383, 1, 0, 0, 0, 4, 385, 1, 0, 0, 0, 6, 391, 1, 0, 0, 0, 8, 399, 1, 0, 0, 0, 10, 452, 1, 0, 0, 0, 12, 454, 1, 0, 0, 0, 14, 457, 1, 0, 0, 0, 16, 460, 1, 0, 0, 0, 18, 464, 1, 0, 0, 0, 20, 467, 1, 0, 0, 0, 22, 470, 1, 0, 0, 0, 24, 477, 1, 0, 0, 0, 26, 500, 1, 0, 0, 0, 28, 502, 1, 0, 0, 0, 30, 504, 1, 0, 0, 0, 32, 514, 1, 0, 0, 0, 34, 516, 1, 0, 0, 0, 36, 533, 1, 0, 0, 0, 38, 537, 1, 0, 0, 0, 40, 555, 1, 0, 0, 0, 42, 582, 1, 0, 0, 0, 44, 605, 1, 0, 0, 0, 46, 641, 1, 0, 0, 0, 48, 643, 1, 0, 0, 0, 50, 647, 1, 0, 0, 0, 52, 649, 1, 0, 0, 0, 54, 656, 1, 0, 0, 0, 56, 668, 1, 0, 0, 0, 58, 671, 1, 0, 0, 0, 60, 673, 1, 0, 0, 0, 62, 686, 1, 0, 0, 0, 64, 694, 1, 0, 0, 0, 66, 696, 1, 0, 0, 0, 68, 704, 1, 0, 0, 0, 70, 720, 1, 0, 0, 0, 72, 726, 1, 0, 0, 0, 74, 729, 1, 0, 0, 0, 76, 778, 1, 0, 0, 0, 78, 783, 1, 0, 0, 0, 80, 788, 1, 0, 0, 0, 82, 793, 1, 0, 0, 0, 84, 801, 1, 0, 0, 0, 86, 806, 1, 0, 0, 0, 88, 911, 1, 0, 0, 0, 90, 939, 1, 0, 0, 0, 92, 941, 1, 0, 0, 0, 94, 945, 1, 0, 0, 0, 96, 947, 1, 0, 0, 0, 98, 952, 1, 0, 0, 0, 100, 955, 1, 0, 0, 0, 102, 957, 1, 0, 0, 0, 104, 959, 1, 0, 0, 0, 106, 961, 1, 0, 0, 0, 108, 963, 1, 0, 0, 0, 110, 965, 1, 0, 0, 0, 112, 967, 1, 0, 0, 0, 114, 969, 1, 0, 0, 0, 116, 971, 1, 0, 0, 0, 118, 973, 1, 0, 0, 0, 120, 975, 1, 0, 0, 0, 122, 977, 1, 0, 0, 0, 124, 979, 1, 0, 0, 0, 126, 1060, 1, 0, 0, 0, 128, 1078, 1, 0, 0, 0, 130, 1080, 1, 0, 0, 0, 132, 1092, 1, 0, 0, 0, 134, 1117, 1, 0, 0, 0, 136, 1126, 1, 0, 0, 0, 138, 1153, 1, 0, 0, 0, 140, 1160, 1, 0, 0, 0, 142, 1168, 1, 0, 0, 0, 144, 1176, 1, 0, 0, 0, 146, 1189, 1, 0, 0, 0, 148, 1199, 1, 0, 0, 0, 150, 1218, 1, 0, 0, 0, 152, 1304, 1, 0, 0, 0, 154, 1313, 1, 0, 0, 0, 156, 1323, 1, 0, 0, 0, 158, 1325, 1, 0, 0, 0, 160, 1327, 1, 0, 0, 0, 162, 1352, 1, 0, 0, 0, 164, 1384, 1, 0, 0, 0, 166, 1407, 1, 0, 0, 0, 168, 1419, 1, 0, 0, 0, 170, 1421, 1, 0, 0, 0, 172, 1424, 1, 0, 0, 0, 174, 1470, 1, 0, 0, 0, 176, 1482, 1, 0, 0, 0, 178, 1497, 1, 0, 0, 0, 180, 1504, 1, 0, 0, 0, 182, 1509, 1, 0, 0, 0, 184, 1513, 1, 0, 0, 0, 186, 1549, 1, 0, 0, 0, 188, 1551, 1, 0, 0, 0, 190, 1587, 1, 0, 0, 0, 192, 1599, 1, 0, 0, 0, 194, 1613, 1, 0, 0, 0, 196, 1615, 1, 0, 0, 0, 198, 1625, 1, 0, 0, 0, 200, 1636, 1, 0, 0, 0, 202, 1643, 1, 0, 0, 0, 204, 1653, 1, 0, 0, 0, 206, 1666, 1, 0, 0, 0, 208, 1671, 1, 0, 0, 0, 210, 1674, 1, 0, 0, 0, 212, 1685, 1, 0, 0, 0, 214, 1690, 1, 0, 0, 0, 216, 1696, 1, 0, 0, 0, 218, 1698, 1, 0, 0, 0, 220, 1820, 1, 0, 0, 0, 222, 1822, 1, 0, 0, 0, 224, 1859, 1, 0, 0, 0, 226, 1866, 1, 0, 0, 0, 228, 1871, 1, 0, 0, 0, 230, 1878, 1, 0, 0, 0, 232, 1898, 1, 0, 0, 0, 234, 1900, 1, 0, 0, 0, 236, 1905, 1, 0, 0, 0, 238, 1920, 1, 0, 0, 0, 240, 1922, 1, 0, 0, 0, 242, 1935, 1, 0, 0, 0, 244, 1940, 1, 0, 0, 0, 246, 1953, 1, 0, 0, 0, 248, 1961, 1, 0, 0, 0, 250, 1972, 1, 0, 0, 0, 252, 1977, 1, 0, 0, 0, 254, 1993, 1, 0, 0, 0, 256, 1995, 1, 0, 0, 0, 258, 2039, 1, 0, 0, 0, 260, 2059, 1, 0, 0, 0, 262, 2088, 1, 0, 0, 0, 264, 2093, 1, 0, 0, 0, 266, 2116, 1, 0, 0, 0, 268, 2121, 1, 0, 0, 0, 270, 2232, 1, 0, 0, 0, 272, 2234, 1, 0, 0, 0, 274, 2239, 1, 0, 0, 0, 276, 2241, 1, 0, 0, 0, 278, 2245, 1, 0, 0, 0, 280, 2249, 1, 0, 0, 0, 282, 2265, 1, 0, 0, 0, 284, 2279, 1, 0, 0, 0, 286, 2287, 1, 0, 0, 0, 288, 2289, 1, 0, 0, 0, 290, 2292, 1, 0, 0, 0, 292, 2294, 1, 0, 0, 0, 294, 2307, 1, 0, 0, 0, 296, 2309, 1, 0, 0, 0, 298, 2319, 1, 0, 0, 0, 300, 2324, 1, 0, 0, 0, 302, 2335, 1, 0, 0, 0, 304, 2342, 1, 0, 0, 0, 306, 2352, 1, 0, 0, 0, 308, 2420, 1, 0, 0, 0, 310, 2497, 1, 0, 0, 0, 312, 2502, 1, 0, 0, 0, 314, 2505, 1, 0, 0, 0, 316, 2510, 1, 0, 0, 0, 318, 2660, 1, 0, 0, 0, 320, 2666, 1, 0, 0, 0, 322, 2673, 1, 0, 0, 0, 324, 2679, 1, 0, 0, 0, 326, 2685, 1, 0, 0, 0, 328, 2691, 1, 0, 0, 0, 330, 2697, 1, 0, 0, 0, 332, 2703, 1, 0, 0, 0, 334, 2709, 1, 0, 0, 0, 336, 2715, 1, 0, 0, 0, 338, 2722, 1, 0, 0, 0, 340, 2727, 1, 0, 0, 0, 342, 2733, 1, 0, 0, 0, 344, 2760, 1, 0, 0, 0, 346, 2774, 1, 0, 0, 0, 348, 2779, 1, 0, 0, 0, 350, 2796, 1, 0, 0, 0, 352, 2798, 1, 0, 0, 0, 354, 2808, 1, 0, 0, 0, 356, 2832, 1, 0, 0, 0, 358, 2837, 1, 0, 0, 0, 360, 2853, 1, 0, 0, 0, 362, 2874, 1, 0, 0, 0, 364, 2876, 1, 0, 0, 0, 366, 2881, 1, 0, 0, 0, 368, 2894, 1, 0, 0, 0, 370, 371, 7, 0, 0, 0, 371, 1, 1, 0, 0, 0, 372, 384, 5, 287, 0, 0, 373, 374, 3, 4, 2, 0, 374, 375, 5, 264, 0, 0, 375, 377, 1, 0, 0, 0, 376, 373, 1, 0, 0, 0, 377, 380, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, 381, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 381, 384, 3, 4, 2, 0, 382, 384, 5, 263, 0, 0, 383, 372, 1, 0, 0, 0, 383, 378, 1, 0, 0, 0, 383, 382, 1, 0, 0, 0, 384, 3, 1, 0, 0, 0, 385, 386, 7, 1, 0, 0, 386, 5, 1, 0, 0, 0, 387, 388, 5, 262, 0, 0, 388, 390, 5, 265, 0, 0, 389, 387, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 394, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 395, 5, 262, 0, 0, 395, 7, 1, 0, 0, 0, 396, 398, 3, 10, 5, 0, 397, 396, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 397, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 9, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402, 403, 3, 74, 37, 0, 403, 404, 5, 16, 0, 0, 404, 405, 3, 82, 41, 0, 405, 406, 5, 17, 0, 0, 406, 453, 1, 0, 0, 0, 407, 408, 3, 72, 36, 0, 408, 409, 5, 16, 0, 0, 409, 410, 3, 8, 4, 0, 410, 411, 5, 17, 0, 0, 411, 453, 1, 0, 0, 0, 412, 413, 3, 256, 128, 0, 413, 414, 5, 16, 0, 0, 414, 415, 3, 268, 134, 0, 415, 416, 5, 17, 0, 0, 416, 453, 1, 0, 0, 0, 417, 453, 3, 222, 111, 0, 418, 453, 3, 296, 148, 0, 419, 453, 3, 70, 35, 0, 420, 453, 3, 66, 33, 0, 421, 453, 3, 88, 44, 0, 422, 453, 3, 90, 45, 0, 423, 453, 3, 22, 11, 0, 424, 425, 3, 346, 173, 0, 425, 426, 5, 16, 0, 0, 426, 427, 3, 348, 174, 0, 427, 428, 5, 17, 0, 0, 428, 453, 1, 0, 0, 0, 429, 430, 3, 352, 176, 0, 430, 431, 5, 16, 0, 0, 431, 432, 3, 358, 179, 0, 432, 433, 5, 17, 0, 0, 433, 453, 1, 0, 0, 0, 434, 435, 3, 362, 181, 0, 435, 436, 5, 16, 0, 0, 436, 437, 3, 366, 183, 0, 437, 438, 5, 17, 0, 0, 438, 453, 1, 0, 0, 0, 439, 453, 3, 64, 32, 0, 440, 453, 3, 174, 87, 0, 441, 453, 3, 342, 171, 0, 442, 453, 3, 12, 6, 0, 443, 453, 3, 14, 7, 0, 444, 453, 3, 16, 8, 0, 445, 453, 3, 18, 9, 0, 446, 453, 3, 20, 10, 0, 447, 453, 3, 26, 13, 0, 448, 453, 3, 42, 21, 0, 449, 453, 3, 40, 20, 0, 450, 453, 3, 30, 15, 0, 451, 453, 3, 24, 12, 0, 452, 402, 1, 0, 0, 0, 452, 407, 1, 0, 0, 0, 452, 412, 1, 0, 0, 0, 452, 417, 1, 0, 0, 0, 452, 418, 1, 0, 0, 0, 452, 419, 1, 0, 0, 0, 452, 420, 1, 0, 0, 0, 452, 421, 1, 0, 0, 0, 452, 422, 1, 0, 0, 0, 452, 423, 1, 0, 0, 0, 452, 424, 1, 0, 0, 0, 452, 429, 1, 0, 0, 0, 452, 434, 1, 0, 0, 0, 452, 439, 1, 0, 0, 0, 452, 440, 1, 0, 0, 0, 452, 441, 1, 0, 0, 0, 452, 442, 1, 0, 0, 0, 452, 443, 1, 0, 0, 0, 452, 444, 1, 0, 0, 0, 452, 445, 1, 0, 0, 0, 452, 446, 1, 0, 0, 0, 452, 447, 1, 0, 0, 0, 452, 448, 1, 0, 0, 0, 452, 449, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 452, 451, 1, 0, 0, 0, 453, 11, 1, 0, 0, 0, 454, 455, 5, 18, 0, 0, 455, 456, 3, 32, 16, 0, 456, 13, 1, 0, 0, 0, 457, 458, 5, 19, 0, 0, 458, 459, 3, 32, 16, 0, 459, 15, 1, 0, 0, 0, 460, 461, 5, 20, 0, 0, 461, 462, 5, 21, 0, 0, 462, 463, 3, 32, 16, 0, 463, 17, 1, 0, 0, 0, 464, 465, 5, 22, 0, 0, 465, 466, 3, 34, 17, 0, 466, 19, 1, 0, 0, 0, 467, 468, 5, 23, 0, 0, 468, 469, 3, 34, 17, 0, 469, 21, 1, 0, 0, 0, 470, 471, 5, 24, 0, 0, 471, 472, 3, 98, 49, 0, 472, 473, 3, 2, 1, 0, 473, 474, 5, 16, 0, 0, 474, 475, 3, 142, 71, 0, 475, 476, 5, 17, 0, 0, 476, 23, 1, 0, 0, 0, 477, 478, 5, 25, 0, 0, 478, 25, 1, 0, 0, 0, 479, 480, 5, 26, 0, 0, 480, 501, 3, 28, 14, 0, 481, 482, 5, 26, 0, 0, 482, 483, 3, 28, 14, 0, 483, 484, 5, 27, 0, 0, 484, 485, 3, 28, 14, 0, 485, 501, 1, 0, 0, 0, 486, 487, 5, 26, 0, 0, 487, 488, 3, 28, 14, 0, 488, 489, 5, 27, 0, 0, 489, 490, 3, 28, 14, 0, 490, 491, 5, 27, 0, 0, 491, 492, 3, 28, 14, 0, 492, 501, 1, 0, 0, 0, 493, 494, 5, 26, 0, 0, 494, 495, 5, 262, 0, 0, 495, 501, 5, 262, 0, 0, 496, 497, 5, 26, 0, 0, 497, 498, 5, 262, 0, 0, 498, 499, 5, 262, 0, 0, 499, 501, 5, 262, 0, 0, 500, 479, 1, 0, 0, 0, 500, 481, 1, 0, 0, 0, 500, 486, 1, 0, 0, 0, 500, 493, 1, 0, 0, 0, 500, 496, 1, 0, 0, 0, 501, 27, 1, 0, 0, 0, 502, 503, 7, 2, 0, 0, 503, 29, 1, 0, 0, 0, 504, 505, 5, 28, 0, 0, 505, 509, 5, 16, 0, 0, 506, 508, 3, 138, 69, 0, 507, 506, 1, 0, 0, 0, 508, 511, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 513, 5, 17, 0, 0, 513, 31, 1, 0, 0, 0, 514, 515, 5, 172, 0, 0, 515, 33, 1, 0, 0, 0, 516, 517, 7, 3, 0, 0, 517, 35, 1, 0, 0, 0, 518, 534, 5, 174, 0, 0, 519, 520, 3, 32, 16, 0, 520, 521, 5, 264, 0, 0, 521, 534, 1, 0, 0, 0, 522, 534, 3, 32, 16, 0, 523, 524, 5, 187, 0, 0, 524, 525, 5, 29, 0, 0, 525, 526, 3, 32, 16, 0, 526, 527, 5, 30, 0, 0, 527, 534, 1, 0, 0, 0, 528, 529, 5, 188, 0, 0, 529, 530, 5, 29, 0, 0, 530, 531, 3, 34, 17, 0, 531, 532, 5, 30, 0, 0, 532, 534, 1, 0, 0, 0, 533, 518, 1, 0, 0, 0, 533, 519, 1, 0, 0, 0, 533, 522, 1, 0, 0, 0, 533, 523, 1, 0, 0, 0, 533, 528, 1, 0, 0, 0, 534, 37, 1, 0, 0, 0, 535, 538, 3, 32, 16, 0, 536, 538, 5, 261, 0, 0, 537, 535, 1, 0, 0, 0, 537, 536, 1, 0, 0, 0, 538, 39, 1, 0, 0, 0, 539, 540, 5, 266, 0, 0, 540, 556, 5, 288, 0, 0, 541, 542, 5, 266, 0, 0, 542, 543, 5, 288, 0, 0, 543, 556, 5, 262, 0, 0, 544, 545, 5, 267, 0, 0, 545, 556, 5, 288, 0, 0, 546, 547, 5, 268, 0, 0, 547, 556, 5, 288, 0, 0, 548, 549, 5, 269, 0, 0, 549, 556, 5, 288, 0, 0, 550, 556, 5, 270, 0, 0, 551, 556, 5, 271, 0, 0, 552, 553, 5, 272, 0, 0, 553, 556, 5, 262, 0, 0, 554, 556, 5, 31, 0, 0, 555, 539, 1, 0, 0, 0, 555, 541, 1, 0, 0, 0, 555, 544, 1, 0, 0, 0, 555, 546, 1, 0, 0, 0, 555, 548, 1, 0, 0, 0, 555, 550, 1, 0, 0, 0, 555, 551, 1, 0, 0, 0, 555, 552, 1, 0, 0, 0, 555, 554, 1, 0, 0, 0, 556, 41, 1, 0, 0, 0, 557, 558, 5, 32, 0, 0, 558, 559, 3, 160, 80, 0, 559, 560, 5, 33, 0, 0, 560, 561, 3, 2, 1, 0, 561, 583, 1, 0, 0, 0, 562, 563, 5, 32, 0, 0, 563, 564, 3, 138, 69, 0, 564, 565, 5, 33, 0, 0, 565, 566, 3, 2, 1, 0, 566, 583, 1, 0, 0, 0, 567, 568, 5, 32, 0, 0, 568, 569, 3, 198, 99, 0, 569, 570, 5, 33, 0, 0, 570, 571, 3, 2, 1, 0, 571, 583, 1, 0, 0, 0, 572, 573, 5, 32, 0, 0, 573, 574, 3, 44, 22, 0, 574, 575, 5, 33, 0, 0, 575, 576, 3, 2, 1, 0, 576, 583, 1, 0, 0, 0, 577, 578, 5, 32, 0, 0, 578, 579, 3, 46, 23, 0, 579, 580, 5, 33, 0, 0, 580, 581, 3, 2, 1, 0, 581, 583, 1, 0, 0, 0, 582, 557, 1, 0, 0, 0, 582, 562, 1, 0, 0, 0, 582, 567, 1, 0, 0, 0, 582, 572, 1, 0, 0, 0, 582, 577, 1, 0, 0, 0, 583, 43, 1, 0, 0, 0, 584, 585, 5, 34, 0, 0, 585, 606, 3, 48, 24, 0, 586, 587, 5, 34, 0, 0, 587, 588, 3, 48, 24, 0, 588, 589, 5, 35, 0, 0, 589, 590, 3, 6, 3, 0, 590, 606, 1, 0, 0, 0, 591, 592, 5, 34, 0, 0, 592, 593, 3, 48, 24, 0, 593, 594, 5, 35, 0, 0, 594, 595, 5, 16, 0, 0, 595, 596, 3, 52, 26, 0, 596, 597, 5, 17, 0, 0, 597, 606, 1, 0, 0, 0, 598, 599, 5, 34, 0, 0, 599, 600, 3, 48, 24, 0, 600, 601, 5, 35, 0, 0, 601, 602, 5, 29, 0, 0, 602, 603, 3, 312, 156, 0, 603, 604, 5, 30, 0, 0, 604, 606, 1, 0, 0, 0, 605, 584, 1, 0, 0, 0, 605, 586, 1, 0, 0, 0, 605, 591, 1, 0, 0, 0, 605, 598, 1, 0, 0, 0, 606, 45, 1, 0, 0, 0, 607, 608, 5, 34, 0, 0, 608, 609, 5, 29, 0, 0, 609, 610, 3, 50, 25, 0, 610, 611, 5, 30, 0, 0, 611, 612, 3, 48, 24, 0, 612, 642, 1, 0, 0, 0, 613, 614, 5, 34, 0, 0, 614, 615, 5, 29, 0, 0, 615, 616, 3, 50, 25, 0, 616, 617, 5, 30, 0, 0, 617, 618, 3, 48, 24, 0, 618, 619, 5, 35, 0, 0, 619, 620, 3, 6, 3, 0, 620, 642, 1, 0, 0, 0, 621, 622, 5, 34, 0, 0, 622, 623, 5, 29, 0, 0, 623, 624, 3, 50, 25, 0, 624, 625, 5, 30, 0, 0, 625, 626, 3, 48, 24, 0, 626, 627, 5, 35, 0, 0, 627, 628, 5, 16, 0, 0, 628, 629, 3, 52, 26, 0, 629, 630, 5, 17, 0, 0, 630, 642, 1, 0, 0, 0, 631, 632, 5, 34, 0, 0, 632, 633, 5, 29, 0, 0, 633, 634, 3, 50, 25, 0, 634, 635, 5, 30, 0, 0, 635, 636, 3, 48, 24, 0, 636, 637, 5, 35, 0, 0, 637, 638, 5, 29, 0, 0, 638, 639, 3, 312, 156, 0, 639, 640, 5, 30, 0, 0, 640, 642, 1, 0, 0, 0, 641, 607, 1, 0, 0, 0, 641, 613, 1, 0, 0, 0, 641, 621, 1, 0, 0, 0, 641, 631, 1, 0, 0, 0, 642, 47, 1, 0, 0, 0, 643, 644, 3, 190, 95, 0, 644, 49, 1, 0, 0, 0, 645, 648, 3, 146, 73, 0, 646, 648, 3, 198, 99, 0, 647, 645, 1, 0, 0, 0, 647, 646, 1, 0, 0, 0, 648, 51, 1, 0, 0, 0, 649, 650, 3, 54, 27, 0, 650, 651, 3, 56, 28, 0, 651, 53, 1, 0, 0, 0, 652, 655, 3, 318, 159, 0, 653, 655, 3, 40, 20, 0, 654, 652, 1, 0, 0, 0, 654, 653, 1, 0, 0, 0, 655, 658, 1, 0, 0, 0, 656, 654, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 55, 1, 0, 0, 0, 658, 656, 1, 0, 0, 0, 659, 660, 3, 58, 29, 0, 660, 661, 3, 60, 30, 0, 661, 662, 3, 2, 1, 0, 662, 663, 5, 35, 0, 0, 663, 664, 3, 318, 159, 0, 664, 667, 1, 0, 0, 0, 665, 667, 3, 40, 20, 0, 666, 659, 1, 0, 0, 0, 666, 665, 1, 0, 0, 0, 667, 670, 1, 0, 0, 0, 668, 666, 1, 0, 0, 0, 668, 669, 1, 0, 0, 0, 669, 57, 1, 0, 0, 0, 670, 668, 1, 0, 0, 0, 671, 672, 7, 4, 0, 0, 672, 59, 1, 0, 0, 0, 673, 675, 3, 62, 31, 0, 674, 676, 5, 260, 0, 0, 675, 674, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 61, 1, 0, 0, 0, 677, 687, 3, 166, 83, 0, 678, 687, 3, 2, 1, 0, 679, 687, 5, 195, 0, 0, 680, 687, 5, 196, 0, 0, 681, 682, 5, 201, 0, 0, 682, 683, 5, 38, 0, 0, 683, 687, 5, 263, 0, 0, 684, 685, 5, 201, 0, 0, 685, 687, 3, 138, 69, 0, 686, 677, 1, 0, 0, 0, 686, 678, 1, 0, 0, 0, 686, 679, 1, 0, 0, 0, 686, 680, 1, 0, 0, 0, 686, 681, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 687, 63, 1, 0, 0, 0, 688, 689, 5, 197, 0, 0, 689, 690, 5, 39, 0, 0, 690, 695, 3, 2, 1, 0, 691, 692, 5, 197, 0, 0, 692, 695, 3, 2, 1, 0, 693, 695, 5, 197, 0, 0, 694, 688, 1, 0, 0, 0, 694, 691, 1, 0, 0, 0, 694, 693, 1, 0, 0, 0, 695, 65, 1, 0, 0, 0, 696, 697, 5, 40, 0, 0, 697, 698, 5, 41, 0, 0, 698, 699, 3, 32, 16, 0, 699, 700, 5, 42, 0, 0, 700, 701, 3, 68, 34, 0, 701, 702, 5, 43, 0, 0, 702, 703, 3, 0, 0, 0, 703, 67, 1, 0, 0, 0, 704, 717, 6, 34, -1, 0, 705, 706, 10, 5, 0, 0, 706, 716, 5, 185, 0, 0, 707, 708, 10, 4, 0, 0, 708, 716, 5, 186, 0, 0, 709, 710, 10, 3, 0, 0, 710, 716, 5, 44, 0, 0, 711, 712, 10, 2, 0, 0, 712, 716, 5, 45, 0, 0, 713, 714, 10, 1, 0, 0, 714, 716, 5, 46, 0, 0, 715, 705, 1, 0, 0, 0, 715, 707, 1, 0, 0, 0, 715, 709, 1, 0, 0, 0, 715, 711, 1, 0, 0, 0, 715, 713, 1, 0, 0, 0, 716, 719, 1, 0, 0, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 69, 1, 0, 0, 0, 719, 717, 1, 0, 0, 0, 720, 721, 5, 47, 0, 0, 721, 722, 5, 35, 0, 0, 722, 723, 5, 29, 0, 0, 723, 724, 3, 312, 156, 0, 724, 725, 5, 30, 0, 0, 725, 71, 1, 0, 0, 0, 726, 727, 5, 48, 0, 0, 727, 728, 3, 2, 1, 0, 728, 73, 1, 0, 0, 0, 729, 733, 5, 49, 0, 0, 730, 732, 3, 76, 38, 0, 731, 730, 1, 0, 0, 0, 732, 735, 1, 0, 0, 0, 733, 731, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 736, 1, 0, 0, 0, 735, 733, 1, 0, 0, 0, 736, 737, 3, 2, 1, 0, 737, 738, 3, 204, 102, 0, 738, 739, 3, 78, 39, 0, 739, 740, 3, 80, 40, 0, 740, 75, 1, 0, 0, 0, 741, 779, 5, 50, 0, 0, 742, 779, 5, 51, 0, 0, 743, 779, 5, 198, 0, 0, 744, 779, 5, 201, 0, 0, 745, 779, 5, 220, 0, 0, 746, 779, 5, 52, 0, 0, 747, 779, 5, 53, 0, 0, 748, 779, 5, 54, 0, 0, 749, 779, 5, 55, 0, 0, 750, 779, 5, 243, 0, 0, 751, 779, 5, 15, 0, 0, 752, 779, 5, 223, 0, 0, 753, 779, 5, 56, 0, 0, 754, 779, 5, 57, 0, 0, 755, 779, 5, 58, 0, 0, 756, 779, 5, 59, 0, 0, 757, 779, 5, 60, 0, 0, 758, 759, 5, 61, 0, 0, 759, 779, 5, 50, 0, 0, 760, 761, 5, 61, 0, 0, 761, 779, 5, 51, 0, 0, 762, 763, 5, 61, 0, 0, 763, 779, 5, 62, 0, 0, 764, 765, 5, 61, 0, 0, 765, 779, 5, 63, 0, 0, 766, 767, 5, 61, 0, 0, 767, 779, 5, 64, 0, 0, 768, 769, 5, 61, 0, 0, 769, 779, 5, 65, 0, 0, 770, 779, 5, 66, 0, 0, 771, 779, 5, 67, 0, 0, 772, 779, 5, 68, 0, 0, 773, 774, 5, 69, 0, 0, 774, 775, 5, 29, 0, 0, 775, 776, 3, 32, 16, 0, 776, 777, 5, 30, 0, 0, 777, 779, 1, 0, 0, 0, 778, 741, 1, 0, 0, 0, 778, 742, 1, 0, 0, 0, 778, 743, 1, 0, 0, 0, 778, 744, 1, 0, 0, 0, 778, 745, 1, 0, 0, 0, 778, 746, 1, 0, 0, 0, 778, 747, 1, 0, 0, 0, 778, 748, 1, 0, 0, 0, 778, 749, 1, 0, 0, 0, 778, 750, 1, 0, 0, 0, 778, 751, 1, 0, 0, 0, 778, 752, 1, 0, 0, 0, 778, 753, 1, 0, 0, 0, 778, 754, 1, 0, 0, 0, 778, 755, 1, 0, 0, 0, 778, 756, 1, 0, 0, 0, 778, 757, 1, 0, 0, 0, 778, 758, 1, 0, 0, 0, 778, 760, 1, 0, 0, 0, 778, 762, 1, 0, 0, 0, 778, 764, 1, 0, 0, 0, 778, 766, 1, 0, 0, 0, 778, 768, 1, 0, 0, 0, 778, 770, 1, 0, 0, 0, 778, 771, 1, 0, 0, 0, 778, 772, 1, 0, 0, 0, 778, 773, 1, 0, 0, 0, 779, 77, 1, 0, 0, 0, 780, 784, 1, 0, 0, 0, 781, 782, 5, 70, 0, 0, 782, 784, 3, 146, 73, 0, 783, 780, 1, 0, 0, 0, 783, 781, 1, 0, 0, 0, 784, 79, 1, 0, 0, 0, 785, 789, 1, 0, 0, 0, 786, 787, 5, 71, 0, 0, 787, 789, 3, 84, 42, 0, 788, 785, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 789, 81, 1, 0, 0, 0, 790, 792, 3, 220, 110, 0, 791, 790, 1, 0, 0, 0, 792, 795, 1, 0, 0, 0, 793, 791, 1, 0, 0, 0, 793, 794, 1, 0, 0, 0, 794, 83, 1, 0, 0, 0, 795, 793, 1, 0, 0, 0, 796, 797, 3, 146, 73, 0, 797, 798, 5, 27, 0, 0, 798, 800, 1, 0, 0, 0, 799, 796, 1, 0, 0, 0, 800, 803, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 804, 1, 0, 0, 0, 803, 801, 1, 0, 0, 0, 804, 805, 3, 146, 73, 0, 805, 85, 1, 0, 0, 0, 806, 807, 7, 5, 0, 0, 807, 87, 1, 0, 0, 0, 808, 809, 3, 86, 43, 0, 809, 810, 3, 32, 16, 0, 810, 811, 5, 263, 0, 0, 811, 912, 1, 0, 0, 0, 812, 813, 3, 86, 43, 0, 813, 814, 3, 32, 16, 0, 814, 912, 1, 0, 0, 0, 815, 816, 3, 86, 43, 0, 816, 817, 3, 32, 16, 0, 817, 818, 5, 74, 0, 0, 818, 819, 3, 32, 16, 0, 819, 820, 5, 263, 0, 0, 820, 912, 1, 0, 0, 0, 821, 822, 3, 86, 43, 0, 822, 823, 3, 32, 16, 0, 823, 824, 5, 74, 0, 0, 824, 825, 3, 32, 16, 0, 825, 912, 1, 0, 0, 0, 826, 827, 3, 86, 43, 0, 827, 828, 3, 32, 16, 0, 828, 829, 5, 74, 0, 0, 829, 830, 3, 32, 16, 0, 830, 831, 5, 27, 0, 0, 831, 832, 3, 32, 16, 0, 832, 833, 5, 263, 0, 0, 833, 912, 1, 0, 0, 0, 834, 835, 3, 86, 43, 0, 835, 836, 3, 32, 16, 0, 836, 837, 5, 74, 0, 0, 837, 838, 3, 32, 16, 0, 838, 839, 5, 27, 0, 0, 839, 840, 3, 32, 16, 0, 840, 912, 1, 0, 0, 0, 841, 842, 3, 86, 43, 0, 842, 843, 3, 32, 16, 0, 843, 844, 5, 27, 0, 0, 844, 845, 3, 32, 16, 0, 845, 846, 5, 74, 0, 0, 846, 847, 3, 32, 16, 0, 847, 848, 5, 263, 0, 0, 848, 912, 1, 0, 0, 0, 849, 850, 3, 86, 43, 0, 850, 851, 3, 32, 16, 0, 851, 852, 5, 27, 0, 0, 852, 853, 3, 32, 16, 0, 853, 854, 5, 74, 0, 0, 854, 855, 3, 32, 16, 0, 855, 912, 1, 0, 0, 0, 856, 857, 3, 86, 43, 0, 857, 858, 3, 32, 16, 0, 858, 859, 5, 27, 0, 0, 859, 860, 3, 32, 16, 0, 860, 861, 5, 74, 0, 0, 861, 862, 3, 32, 16, 0, 862, 863, 5, 27, 0, 0, 863, 864, 3, 32, 16, 0, 864, 865, 5, 263, 0, 0, 865, 912, 1, 0, 0, 0, 866, 867, 3, 86, 43, 0, 867, 868, 3, 32, 16, 0, 868, 869, 5, 27, 0, 0, 869, 870, 3, 32, 16, 0, 870, 871, 5, 74, 0, 0, 871, 872, 3, 32, 16, 0, 872, 873, 5, 27, 0, 0, 873, 874, 3, 32, 16, 0, 874, 912, 1, 0, 0, 0, 875, 876, 3, 86, 43, 0, 876, 877, 3, 32, 16, 0, 877, 878, 5, 262, 0, 0, 878, 912, 1, 0, 0, 0, 879, 880, 3, 86, 43, 0, 880, 881, 3, 32, 16, 0, 881, 882, 5, 74, 0, 0, 882, 883, 3, 32, 16, 0, 883, 884, 5, 262, 0, 0, 884, 912, 1, 0, 0, 0, 885, 886, 3, 86, 43, 0, 886, 887, 3, 32, 16, 0, 887, 888, 5, 74, 0, 0, 888, 889, 3, 32, 16, 0, 889, 890, 5, 27, 0, 0, 890, 891, 3, 32, 16, 0, 891, 892, 5, 262, 0, 0, 892, 912, 1, 0, 0, 0, 893, 894, 3, 86, 43, 0, 894, 895, 3, 32, 16, 0, 895, 896, 5, 27, 0, 0, 896, 897, 3, 32, 16, 0, 897, 898, 5, 74, 0, 0, 898, 899, 3, 32, 16, 0, 899, 900, 5, 262, 0, 0, 900, 912, 1, 0, 0, 0, 901, 902, 3, 86, 43, 0, 902, 903, 3, 32, 16, 0, 903, 904, 5, 27, 0, 0, 904, 905, 3, 32, 16, 0, 905, 906, 5, 74, 0, 0, 906, 907, 3, 32, 16, 0, 907, 908, 5, 27, 0, 0, 908, 909, 3, 32, 16, 0, 909, 910, 5, 262, 0, 0, 910, 912, 1, 0, 0, 0, 911, 808, 1, 0, 0, 0, 911, 812, 1, 0, 0, 0, 911, 815, 1, 0, 0, 0, 911, 821, 1, 0, 0, 0, 911, 826, 1, 0, 0, 0, 911, 834, 1, 0, 0, 0, 911, 841, 1, 0, 0, 0, 911, 849, 1, 0, 0, 0, 911, 856, 1, 0, 0, 0, 911, 866, 1, 0, 0, 0, 911, 875, 1, 0, 0, 0, 911, 879, 1, 0, 0, 0, 911, 885, 1, 0, 0, 0, 911, 893, 1, 0, 0, 0, 911, 901, 1, 0, 0, 0, 912, 89, 1, 0, 0, 0, 913, 917, 5, 20, 0, 0, 914, 916, 3, 92, 46, 0, 915, 914, 1, 0, 0, 0, 916, 919, 1, 0, 0, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 920, 1, 0, 0, 0, 919, 917, 1, 0, 0, 0, 920, 921, 3, 2, 1, 0, 921, 922, 3, 94, 47, 0, 922, 923, 5, 179, 0, 0, 923, 924, 5, 35, 0, 0, 924, 925, 5, 29, 0, 0, 925, 926, 3, 312, 156, 0, 926, 927, 5, 30, 0, 0, 927, 928, 3, 94, 47, 0, 928, 940, 1, 0, 0, 0, 929, 933, 5, 20, 0, 0, 930, 932, 3, 92, 46, 0, 931, 930, 1, 0, 0, 0, 932, 935, 1, 0, 0, 0, 933, 931, 1, 0, 0, 0, 933, 934, 1, 0, 0, 0, 934, 936, 1, 0, 0, 0, 935, 933, 1, 0, 0, 0, 936, 937, 3, 2, 1, 0, 937, 938, 3, 94, 47, 0, 938, 940, 1, 0, 0, 0, 939, 913, 1, 0, 0, 0, 939, 929, 1, 0, 0, 0, 940, 91, 1, 0, 0, 0, 941, 942, 5, 75, 0, 0, 942, 93, 1, 0, 0, 0, 943, 946, 1, 0, 0, 0, 944, 946, 5, 297, 0, 0, 945, 943, 1, 0, 0, 0, 945, 944, 1, 0, 0, 0, 946, 95, 1, 0, 0, 0, 947, 948, 7, 6, 0, 0, 948, 97, 1, 0, 0, 0, 949, 951, 3, 96, 48, 0, 950, 949, 1, 0, 0, 0, 951, 954, 1, 0, 0, 0, 952, 950, 1, 0, 0, 0, 952, 953, 1, 0, 0, 0, 953, 99, 1, 0, 0, 0, 954, 952, 1, 0, 0, 0, 955, 956, 5, 274, 0, 0, 956, 101, 1, 0, 0, 0, 957, 958, 5, 275, 0, 0, 958, 103, 1, 0, 0, 0, 959, 960, 5, 276, 0, 0, 960, 105, 1, 0, 0, 0, 961, 962, 5, 277, 0, 0, 962, 107, 1, 0, 0, 0, 963, 964, 5, 278, 0, 0, 964, 109, 1, 0, 0, 0, 965, 966, 5, 281, 0, 0, 966, 111, 1, 0, 0, 0, 967, 968, 5, 279, 0, 0, 968, 113, 1, 0, 0, 0, 969, 970, 5, 285, 0, 0, 970, 115, 1, 0, 0, 0, 971, 972, 5, 283, 0, 0, 972, 117, 1, 0, 0, 0, 973, 974, 5, 284, 0, 0, 974, 119, 1, 0, 0, 0, 975, 976, 5, 280, 0, 0, 976, 121, 1, 0, 0, 0, 977, 978, 5, 286, 0, 0, 978, 123, 1, 0, 0, 0, 979, 980, 5, 282, 0, 0, 980, 125, 1, 0, 0, 0, 981, 1061, 3, 100, 50, 0, 982, 983, 3, 102, 51, 0, 983, 984, 3, 32, 16, 0, 984, 1061, 1, 0, 0, 0, 985, 986, 3, 102, 51, 0, 986, 987, 3, 0, 0, 0, 987, 1061, 1, 0, 0, 0, 988, 989, 3, 104, 52, 0, 989, 990, 3, 32, 16, 0, 990, 1061, 1, 0, 0, 0, 991, 992, 3, 106, 53, 0, 992, 993, 3, 34, 17, 0, 993, 1061, 1, 0, 0, 0, 994, 995, 3, 108, 54, 0, 995, 996, 3, 36, 18, 0, 996, 1061, 1, 0, 0, 0, 997, 998, 3, 108, 54, 0, 998, 999, 3, 34, 17, 0, 999, 1061, 1, 0, 0, 0, 1000, 1001, 3, 108, 54, 0, 1001, 1002, 5, 29, 0, 0, 1002, 1003, 3, 312, 156, 0, 1003, 1004, 5, 30, 0, 0, 1004, 1061, 1, 0, 0, 0, 1005, 1006, 3, 108, 54, 0, 1006, 1007, 5, 83, 0, 0, 1007, 1008, 5, 29, 0, 0, 1008, 1009, 3, 312, 156, 0, 1009, 1010, 5, 30, 0, 0, 1010, 1061, 1, 0, 0, 0, 1011, 1012, 3, 110, 55, 0, 1012, 1013, 3, 32, 16, 0, 1013, 1061, 1, 0, 0, 0, 1014, 1015, 3, 110, 55, 0, 1015, 1016, 3, 0, 0, 0, 1016, 1061, 1, 0, 0, 0, 1017, 1018, 3, 112, 56, 0, 1018, 1019, 3, 190, 95, 0, 1019, 1061, 1, 0, 0, 0, 1020, 1021, 3, 114, 57, 0, 1021, 1022, 3, 200, 100, 0, 1022, 1061, 1, 0, 0, 0, 1023, 1024, 3, 114, 57, 0, 1024, 1025, 3, 196, 98, 0, 1025, 1061, 1, 0, 0, 0, 1026, 1027, 3, 116, 58, 0, 1027, 1028, 3, 146, 73, 0, 1028, 1061, 1, 0, 0, 0, 1029, 1030, 3, 118, 59, 0, 1030, 1031, 3, 6, 3, 0, 1031, 1061, 1, 0, 0, 0, 1032, 1033, 3, 118, 59, 0, 1033, 1034, 5, 223, 0, 0, 1034, 1035, 5, 29, 0, 0, 1035, 1036, 3, 6, 3, 0, 1036, 1037, 5, 30, 0, 0, 1037, 1061, 1, 0, 0, 0, 1038, 1039, 3, 118, 59, 0, 1039, 1040, 5, 83, 0, 0, 1040, 1041, 5, 29, 0, 0, 1041, 1042, 3, 312, 156, 0, 1042, 1043, 5, 30, 0, 0, 1043, 1061, 1, 0, 0, 0, 1044, 1045, 3, 120, 60, 0, 1045, 1046, 3, 192, 96, 0, 1046, 1047, 3, 160, 80, 0, 1047, 1048, 3, 134, 67, 0, 1048, 1061, 1, 0, 0, 0, 1049, 1050, 3, 122, 61, 0, 1050, 1051, 3, 50, 25, 0, 1051, 1061, 1, 0, 0, 0, 1052, 1053, 3, 124, 62, 0, 1053, 1054, 5, 29, 0, 0, 1054, 1055, 3, 128, 64, 0, 1055, 1056, 5, 30, 0, 0, 1056, 1061, 1, 0, 0, 0, 1057, 1058, 3, 124, 62, 0, 1058, 1059, 5, 84, 0, 0, 1059, 1061, 1, 0, 0, 0, 1060, 981, 1, 0, 0, 0, 1060, 982, 1, 0, 0, 0, 1060, 985, 1, 0, 0, 0, 1060, 988, 1, 0, 0, 0, 1060, 991, 1, 0, 0, 0, 1060, 994, 1, 0, 0, 0, 1060, 997, 1, 0, 0, 0, 1060, 1000, 1, 0, 0, 0, 1060, 1005, 1, 0, 0, 0, 1060, 1011, 1, 0, 0, 0, 1060, 1014, 1, 0, 0, 0, 1060, 1017, 1, 0, 0, 0, 1060, 1020, 1, 0, 0, 0, 1060, 1023, 1, 0, 0, 0, 1060, 1026, 1, 0, 0, 0, 1060, 1029, 1, 0, 0, 0, 1060, 1032, 1, 0, 0, 0, 1060, 1038, 1, 0, 0, 0, 1060, 1044, 1, 0, 0, 0, 1060, 1049, 1, 0, 0, 0, 1060, 1052, 1, 0, 0, 0, 1060, 1057, 1, 0, 0, 0, 1061, 127, 1, 0, 0, 0, 1062, 1079, 1, 0, 0, 0, 1063, 1066, 3, 0, 0, 0, 1064, 1066, 3, 32, 16, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1068, 5, 27, 0, 0, 1068, 1070, 1, 0, 0, 0, 1069, 1065, 1, 0, 0, 0, 1070, 1073, 1, 0, 0, 0, 1071, 1069, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1076, 1, 0, 0, 0, 1073, 1071, 1, 0, 0, 0, 1074, 1077, 3, 0, 0, 0, 1075, 1077, 3, 32, 16, 0, 1076, 1074, 1, 0, 0, 0, 1076, 1075, 1, 0, 0, 0, 1077, 1079, 1, 0, 0, 0, 1078, 1062, 1, 0, 0, 0, 1078, 1071, 1, 0, 0, 0, 1079, 129, 1, 0, 0, 0, 1080, 1086, 5, 85, 0, 0, 1081, 1082, 3, 160, 80, 0, 1082, 1083, 5, 27, 0, 0, 1083, 1085, 1, 0, 0, 0, 1084, 1081, 1, 0, 0, 0, 1085, 1088, 1, 0, 0, 0, 1086, 1084, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1086, 1, 0, 0, 0, 1089, 1090, 3, 160, 80, 0, 1090, 1091, 5, 86, 0, 0, 1091, 131, 1, 0, 0, 0, 1092, 1098, 5, 41, 0, 0, 1093, 1094, 3, 168, 84, 0, 1094, 1095, 5, 27, 0, 0, 1095, 1097, 1, 0, 0, 0, 1096, 1093, 1, 0, 0, 0, 1097, 1100, 1, 0, 0, 0, 1098, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1101, 1, 0, 0, 0, 1100, 1098, 1, 0, 0, 0, 1101, 1102, 3, 168, 84, 0, 1102, 1103, 5, 42, 0, 0, 1103, 133, 1, 0, 0, 0, 1104, 1110, 5, 29, 0, 0, 1105, 1106, 3, 136, 68, 0, 1106, 1107, 5, 27, 0, 0, 1107, 1109, 1, 0, 0, 0, 1108, 1105, 1, 0, 0, 0, 1109, 1112, 1, 0, 0, 0, 1110, 1108, 1, 0, 0, 0, 1110, 1111, 1, 0, 0, 0, 1111, 1113, 1, 0, 0, 0, 1112, 1110, 1, 0, 0, 0, 1113, 1114, 3, 136, 68, 0, 1114, 1115, 5, 30, 0, 0, 1115, 1118, 1, 0, 0, 0, 1116, 1118, 5, 84, 0, 0, 1117, 1104, 1, 0, 0, 0, 1117, 1116, 1, 0, 0, 0, 1118, 135, 1, 0, 0, 0, 1119, 1127, 5, 176, 0, 0, 1120, 1121, 3, 252, 126, 0, 1121, 1122, 3, 160, 80, 0, 1122, 1124, 3, 248, 124, 0, 1123, 1125, 3, 0, 0, 0, 1124, 1123, 1, 0, 0, 0, 1124, 1125, 1, 0, 0, 0, 1125, 1127, 1, 0, 0, 0, 1126, 1119, 1, 0, 0, 0, 1126, 1120, 1, 0, 0, 0, 1127, 137, 1, 0, 0, 0, 1128, 1129, 5, 41, 0, 0, 1129, 1130, 3, 2, 1, 0, 1130, 1131, 5, 42, 0, 0, 1131, 1132, 3, 140, 70, 0, 1132, 1154, 1, 0, 0, 0, 1133, 1134, 5, 41, 0, 0, 1134, 1135, 3, 196, 98, 0, 1135, 1136, 5, 42, 0, 0, 1136, 1137, 3, 140, 70, 0, 1137, 1154, 1, 0, 0, 0, 1138, 1139, 5, 41, 0, 0, 1139, 1140, 5, 261, 0, 0, 1140, 1141, 5, 42, 0, 0, 1141, 1154, 3, 140, 70, 0, 1142, 1143, 5, 41, 0, 0, 1143, 1144, 5, 197, 0, 0, 1144, 1145, 3, 2, 1, 0, 1145, 1146, 5, 42, 0, 0, 1146, 1147, 3, 140, 70, 0, 1147, 1154, 1, 0, 0, 0, 1148, 1154, 3, 140, 70, 0, 1149, 1154, 3, 196, 98, 0, 1150, 1154, 5, 256, 0, 0, 1151, 1154, 5, 257, 0, 0, 1152, 1154, 5, 258, 0, 0, 1153, 1128, 1, 0, 0, 0, 1153, 1133, 1, 0, 0, 0, 1153, 1138, 1, 0, 0, 0, 1153, 1142, 1, 0, 0, 0, 1153, 1148, 1, 0, 0, 0, 1153, 1149, 1, 0, 0, 0, 1153, 1150, 1, 0, 0, 0, 1153, 1151, 1, 0, 0, 0, 1153, 1152, 1, 0, 0, 0, 1154, 139, 1, 0, 0, 0, 1155, 1156, 3, 2, 1, 0, 1156, 1157, 5, 87, 0, 0, 1157, 1159, 1, 0, 0, 0, 1158, 1155, 1, 0, 0, 0, 1159, 1162, 1, 0, 0, 0, 1160, 1158, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1163, 1, 0, 0, 0, 1162, 1160, 1, 0, 0, 0, 1163, 1164, 3, 2, 1, 0, 1164, 141, 1, 0, 0, 0, 1165, 1167, 3, 144, 72, 0, 1166, 1165, 1, 0, 0, 0, 1167, 1170, 1, 0, 0, 0, 1168, 1166, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 143, 1, 0, 0, 0, 1170, 1168, 1, 0, 0, 0, 1171, 1172, 5, 179, 0, 0, 1172, 1173, 5, 88, 0, 0, 1173, 1177, 3, 32, 16, 0, 1174, 1177, 3, 174, 87, 0, 1175, 1177, 3, 344, 172, 0, 1176, 1171, 1, 0, 0, 0, 1176, 1174, 1, 0, 0, 0, 1176, 1175, 1, 0, 0, 0, 1177, 145, 1, 0, 0, 0, 1178, 1190, 3, 138, 69, 0, 1179, 1180, 5, 41, 0, 0, 1180, 1181, 3, 2, 1, 0, 1181, 1182, 5, 42, 0, 0, 1182, 1190, 1, 0, 0, 0, 1183, 1184, 5, 41, 0, 0, 1184, 1185, 5, 197, 0, 0, 1185, 1186, 3, 2, 1, 0, 1186, 1187, 5, 42, 0, 0, 1187, 1190, 1, 0, 0, 0, 1188, 1190, 3, 160, 80, 0, 1189, 1178, 1, 0, 0, 0, 1189, 1179, 1, 0, 0, 0, 1189, 1183, 1, 0, 0, 0, 1189, 1188, 1, 0, 0, 0, 1190, 147, 1, 0, 0, 0, 1191, 1200, 1, 0, 0, 0, 1192, 1196, 3, 152, 76, 0, 1193, 1195, 3, 150, 75, 0, 1194, 1193, 1, 0, 0, 0, 1195, 1198, 1, 0, 0, 0, 1196, 1194, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, 1200, 1, 0, 0, 0, 1198, 1196, 1, 0, 0, 0, 1199, 1191, 1, 0, 0, 0, 1199, 1192, 1, 0, 0, 0, 1200, 149, 1, 0, 0, 0, 1201, 1219, 5, 261, 0, 0, 1202, 1219, 5, 260, 0, 0, 1203, 1204, 5, 41, 0, 0, 1204, 1205, 3, 32, 16, 0, 1205, 1206, 5, 42, 0, 0, 1206, 1219, 1, 0, 0, 0, 1207, 1208, 5, 41, 0, 0, 1208, 1209, 3, 32, 16, 0, 1209, 1210, 5, 265, 0, 0, 1210, 1211, 3, 32, 16, 0, 1211, 1212, 5, 42, 0, 0, 1212, 1219, 1, 0, 0, 0, 1213, 1214, 5, 41, 0, 0, 1214, 1215, 5, 265, 0, 0, 1215, 1216, 3, 32, 16, 0, 1216, 1217, 5, 42, 0, 0, 1217, 1219, 1, 0, 0, 0, 1218, 1201, 1, 0, 0, 0, 1218, 1202, 1, 0, 0, 0, 1218, 1203, 1, 0, 0, 0, 1218, 1207, 1, 0, 0, 0, 1218, 1213, 1, 0, 0, 0, 1219, 151, 1, 0, 0, 0, 1220, 1305, 1, 0, 0, 0, 1221, 1222, 5, 202, 0, 0, 1222, 1223, 5, 29, 0, 0, 1223, 1224, 3, 6, 3, 0, 1224, 1225, 5, 27, 0, 0, 1225, 1226, 3, 6, 3, 0, 1226, 1227, 5, 27, 0, 0, 1227, 1228, 3, 6, 3, 0, 1228, 1229, 5, 27, 0, 0, 1229, 1230, 3, 6, 3, 0, 1230, 1231, 5, 30, 0, 0, 1231, 1305, 1, 0, 0, 0, 1232, 1233, 5, 202, 0, 0, 1233, 1234, 5, 29, 0, 0, 1234, 1235, 3, 6, 3, 0, 1235, 1236, 5, 27, 0, 0, 1236, 1237, 3, 6, 3, 0, 1237, 1238, 5, 30, 0, 0, 1238, 1305, 1, 0, 0, 0, 1239, 1240, 5, 203, 0, 0, 1240, 1241, 5, 204, 0, 0, 1241, 1242, 5, 41, 0, 0, 1242, 1243, 3, 32, 16, 0, 1243, 1244, 5, 42, 0, 0, 1244, 1305, 1, 0, 0, 0, 1245, 1246, 5, 203, 0, 0, 1246, 1247, 5, 205, 0, 0, 1247, 1248, 5, 41, 0, 0, 1248, 1249, 3, 32, 16, 0, 1249, 1250, 5, 42, 0, 0, 1250, 1251, 3, 148, 74, 0, 1251, 1305, 1, 0, 0, 0, 1252, 1305, 5, 206, 0, 0, 1253, 1305, 5, 207, 0, 0, 1254, 1305, 5, 208, 0, 0, 1255, 1305, 5, 200, 0, 0, 1256, 1305, 5, 182, 0, 0, 1257, 1305, 5, 183, 0, 0, 1258, 1305, 5, 184, 0, 0, 1259, 1305, 5, 185, 0, 0, 1260, 1305, 5, 186, 0, 0, 1261, 1305, 5, 187, 0, 0, 1262, 1305, 5, 188, 0, 0, 1263, 1305, 5, 209, 0, 0, 1264, 1305, 5, 189, 0, 0, 1265, 1305, 5, 190, 0, 0, 1266, 1305, 5, 191, 0, 0, 1267, 1305, 5, 192, 0, 0, 1268, 1305, 5, 210, 0, 0, 1269, 1305, 5, 211, 0, 0, 1270, 1305, 5, 212, 0, 0, 1271, 1305, 5, 213, 0, 0, 1272, 1305, 5, 214, 0, 0, 1273, 1305, 5, 215, 0, 0, 1274, 1305, 5, 216, 0, 0, 1275, 1276, 5, 217, 0, 0, 1276, 1305, 3, 154, 77, 0, 1277, 1278, 5, 218, 0, 0, 1278, 1305, 3, 154, 77, 0, 1279, 1305, 5, 219, 0, 0, 1280, 1281, 5, 220, 0, 0, 1281, 1305, 3, 154, 77, 0, 1282, 1283, 5, 221, 0, 0, 1283, 1305, 3, 156, 78, 0, 1284, 1285, 5, 221, 0, 0, 1285, 1286, 3, 156, 78, 0, 1286, 1287, 5, 27, 0, 0, 1287, 1288, 3, 6, 3, 0, 1288, 1305, 1, 0, 0, 0, 1289, 1305, 5, 193, 0, 0, 1290, 1305, 5, 194, 0, 0, 1291, 1292, 5, 61, 0, 0, 1292, 1305, 5, 219, 0, 0, 1293, 1305, 5, 222, 0, 0, 1294, 1295, 5, 223, 0, 0, 1295, 1305, 5, 212, 0, 0, 1296, 1305, 5, 224, 0, 0, 1297, 1298, 5, 206, 0, 0, 1298, 1305, 5, 182, 0, 0, 1299, 1305, 5, 225, 0, 0, 1300, 1305, 5, 227, 0, 0, 1301, 1302, 5, 33, 0, 0, 1302, 1305, 5, 226, 0, 0, 1303, 1305, 3, 2, 1, 0, 1304, 1220, 1, 0, 0, 0, 1304, 1221, 1, 0, 0, 0, 1304, 1232, 1, 0, 0, 0, 1304, 1239, 1, 0, 0, 0, 1304, 1245, 1, 0, 0, 0, 1304, 1252, 1, 0, 0, 0, 1304, 1253, 1, 0, 0, 0, 1304, 1254, 1, 0, 0, 0, 1304, 1255, 1, 0, 0, 0, 1304, 1256, 1, 0, 0, 0, 1304, 1257, 1, 0, 0, 0, 1304, 1258, 1, 0, 0, 0, 1304, 1259, 1, 0, 0, 0, 1304, 1260, 1, 0, 0, 0, 1304, 1261, 1, 0, 0, 0, 1304, 1262, 1, 0, 0, 0, 1304, 1263, 1, 0, 0, 0, 1304, 1264, 1, 0, 0, 0, 1304, 1265, 1, 0, 0, 0, 1304, 1266, 1, 0, 0, 0, 1304, 1267, 1, 0, 0, 0, 1304, 1268, 1, 0, 0, 0, 1304, 1269, 1, 0, 0, 0, 1304, 1270, 1, 0, 0, 0, 1304, 1271, 1, 0, 0, 0, 1304, 1272, 1, 0, 0, 0, 1304, 1273, 1, 0, 0, 0, 1304, 1274, 1, 0, 0, 0, 1304, 1275, 1, 0, 0, 0, 1304, 1277, 1, 0, 0, 0, 1304, 1279, 1, 0, 0, 0, 1304, 1280, 1, 0, 0, 0, 1304, 1282, 1, 0, 0, 0, 1304, 1284, 1, 0, 0, 0, 1304, 1289, 1, 0, 0, 0, 1304, 1290, 1, 0, 0, 0, 1304, 1291, 1, 0, 0, 0, 1304, 1293, 1, 0, 0, 0, 1304, 1294, 1, 0, 0, 0, 1304, 1296, 1, 0, 0, 0, 1304, 1297, 1, 0, 0, 0, 1304, 1299, 1, 0, 0, 0, 1304, 1300, 1, 0, 0, 0, 1304, 1301, 1, 0, 0, 0, 1304, 1303, 1, 0, 0, 0, 1305, 153, 1, 0, 0, 0, 1306, 1314, 1, 0, 0, 0, 1307, 1308, 5, 29, 0, 0, 1308, 1309, 5, 89, 0, 0, 1309, 1310, 5, 35, 0, 0, 1310, 1311, 3, 32, 16, 0, 1311, 1312, 5, 30, 0, 0, 1312, 1314, 1, 0, 0, 0, 1313, 1306, 1, 0, 0, 0, 1313, 1307, 1, 0, 0, 0, 1314, 155, 1, 0, 0, 0, 1315, 1324, 1, 0, 0, 0, 1316, 1320, 3, 158, 79, 0, 1317, 1319, 7, 7, 0, 0, 1318, 1317, 1, 0, 0, 0, 1319, 1322, 1, 0, 0, 0, 1320, 1318, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1324, 1, 0, 0, 0, 1322, 1320, 1, 0, 0, 0, 1323, 1315, 1, 0, 0, 0, 1323, 1316, 1, 0, 0, 0, 1324, 157, 1, 0, 0, 0, 1325, 1326, 7, 8, 0, 0, 1326, 159, 1, 0, 0, 0, 1327, 1331, 3, 164, 82, 0, 1328, 1330, 3, 162, 81, 0, 1329, 1328, 1, 0, 0, 0, 1330, 1333, 1, 0, 0, 0, 1331, 1329, 1, 0, 0, 0, 1331, 1332, 1, 0, 0, 0, 1332, 161, 1, 0, 0, 0, 1333, 1331, 1, 0, 0, 0, 1334, 1353, 5, 260, 0, 0, 1335, 1336, 5, 41, 0, 0, 1336, 1353, 5, 42, 0, 0, 1337, 1353, 3, 132, 66, 0, 1338, 1353, 5, 259, 0, 0, 1339, 1353, 5, 261, 0, 0, 1340, 1353, 5, 90, 0, 0, 1341, 1342, 5, 91, 0, 0, 1342, 1343, 5, 29, 0, 0, 1343, 1344, 3, 146, 73, 0, 1344, 1345, 5, 30, 0, 0, 1345, 1353, 1, 0, 0, 0, 1346, 1347, 5, 92, 0, 0, 1347, 1348, 5, 29, 0, 0, 1348, 1349, 3, 146, 73, 0, 1349, 1350, 5, 30, 0, 0, 1350, 1353, 1, 0, 0, 0, 1351, 1353, 3, 130, 65, 0, 1352, 1334, 1, 0, 0, 0, 1352, 1335, 1, 0, 0, 0, 1352, 1337, 1, 0, 0, 0, 1352, 1338, 1, 0, 0, 0, 1352, 1339, 1, 0, 0, 0, 1352, 1340, 1, 0, 0, 0, 1352, 1341, 1, 0, 0, 0, 1352, 1346, 1, 0, 0, 0, 1352, 1351, 1, 0, 0, 0, 1353, 163, 1, 0, 0, 0, 1354, 1355, 5, 38, 0, 0, 1355, 1385, 3, 138, 69, 0, 1356, 1385, 5, 196, 0, 0, 1357, 1358, 5, 198, 0, 0, 1358, 1359, 5, 38, 0, 0, 1359, 1385, 3, 138, 69, 0, 1360, 1361, 5, 199, 0, 0, 1361, 1385, 3, 138, 69, 0, 1362, 1363, 5, 225, 0, 0, 1363, 1364, 3, 192, 96, 0, 1364, 1365, 3, 160, 80, 0, 1365, 1366, 5, 261, 0, 0, 1366, 1367, 3, 134, 67, 0, 1367, 1385, 1, 0, 0, 0, 1368, 1369, 5, 252, 0, 0, 1369, 1385, 3, 32, 16, 0, 1370, 1371, 5, 251, 0, 0, 1371, 1385, 3, 32, 16, 0, 1372, 1373, 5, 252, 0, 0, 1373, 1385, 3, 2, 1, 0, 1374, 1375, 5, 251, 0, 0, 1375, 1385, 3, 2, 1, 0, 1376, 1385, 5, 253, 0, 0, 1377, 1385, 5, 200, 0, 0, 1378, 1385, 3, 170, 85, 0, 1379, 1385, 3, 172, 86, 0, 1380, 1385, 3, 166, 83, 0, 1381, 1385, 3, 2, 1, 0, 1382, 1383, 5, 176, 0, 0, 1383, 1385, 3, 160, 80, 0, 1384, 1354, 1, 0, 0, 0, 1384, 1356, 1, 0, 0, 0, 1384, 1357, 1, 0, 0, 0, 1384, 1360, 1, 0, 0, 0, 1384, 1362, 1, 0, 0, 0, 1384, 1368, 1, 0, 0, 0, 1384, 1370, 1, 0, 0, 0, 1384, 1372, 1, 0, 0, 0, 1384, 1374, 1, 0, 0, 0, 1384, 1376, 1, 0, 0, 0, 1384, 1377, 1, 0, 0, 0, 1384, 1378, 1, 0, 0, 0, 1384, 1379, 1, 0, 0, 0, 1384, 1380, 1, 0, 0, 0, 1384, 1381, 1, 0, 0, 0, 1384, 1382, 1, 0, 0, 0, 1385, 165, 1, 0, 0, 0, 1386, 1408, 5, 180, 0, 0, 1387, 1408, 5, 181, 0, 0, 1388, 1408, 5, 182, 0, 0, 1389, 1408, 5, 183, 0, 0, 1390, 1408, 5, 184, 0, 0, 1391, 1408, 5, 185, 0, 0, 1392, 1408, 5, 186, 0, 0, 1393, 1408, 5, 187, 0, 0, 1394, 1408, 5, 188, 0, 0, 1395, 1408, 5, 189, 0, 0, 1396, 1408, 5, 190, 0, 0, 1397, 1408, 5, 191, 0, 0, 1398, 1408, 5, 192, 0, 0, 1399, 1400, 5, 93, 0, 0, 1400, 1408, 5, 183, 0, 0, 1401, 1402, 5, 93, 0, 0, 1402, 1408, 5, 184, 0, 0, 1403, 1404, 5, 93, 0, 0, 1404, 1408, 5, 185, 0, 0, 1405, 1406, 5, 93, 0, 0, 1406, 1408, 5, 186, 0, 0, 1407, 1386, 1, 0, 0, 0, 1407, 1387, 1, 0, 0, 0, 1407, 1388, 1, 0, 0, 0, 1407, 1389, 1, 0, 0, 0, 1407, 1390, 1, 0, 0, 0, 1407, 1391, 1, 0, 0, 0, 1407, 1392, 1, 0, 0, 0, 1407, 1393, 1, 0, 0, 0, 1407, 1394, 1, 0, 0, 0, 1407, 1395, 1, 0, 0, 0, 1407, 1396, 1, 0, 0, 0, 1407, 1397, 1, 0, 0, 0, 1407, 1398, 1, 0, 0, 0, 1407, 1399, 1, 0, 0, 0, 1407, 1401, 1, 0, 0, 0, 1407, 1403, 1, 0, 0, 0, 1407, 1405, 1, 0, 0, 0, 1408, 167, 1, 0, 0, 0, 1409, 1420, 1, 0, 0, 0, 1410, 1420, 5, 176, 0, 0, 1411, 1420, 3, 32, 16, 0, 1412, 1413, 3, 32, 16, 0, 1413, 1414, 5, 176, 0, 0, 1414, 1415, 3, 32, 16, 0, 1415, 1420, 1, 0, 0, 0, 1416, 1417, 3, 32, 16, 0, 1417, 1418, 5, 176, 0, 0, 1418, 1420, 1, 0, 0, 0, 1419, 1409, 1, 0, 0, 0, 1419, 1410, 1, 0, 0, 0, 1419, 1411, 1, 0, 0, 0, 1419, 1412, 1, 0, 0, 0, 1419, 1416, 1, 0, 0, 0, 1420, 169, 1, 0, 0, 0, 1421, 1422, 5, 1, 0, 0, 1422, 1423, 5, 193, 0, 0, 1423, 171, 1, 0, 0, 0, 1424, 1428, 5, 1, 0, 0, 1425, 1426, 5, 93, 0, 0, 1426, 1429, 5, 193, 0, 0, 1427, 1429, 5, 194, 0, 0, 1428, 1425, 1, 0, 0, 0, 1428, 1427, 1, 0, 0, 0, 1429, 173, 1, 0, 0, 0, 1430, 1431, 5, 293, 0, 0, 1431, 1432, 3, 188, 94, 0, 1432, 1433, 3, 146, 73, 0, 1433, 1434, 5, 29, 0, 0, 1434, 1435, 3, 180, 90, 0, 1435, 1436, 5, 30, 0, 0, 1436, 1471, 1, 0, 0, 0, 1437, 1438, 5, 293, 0, 0, 1438, 1439, 3, 188, 94, 0, 1439, 1440, 3, 146, 73, 0, 1440, 1441, 5, 35, 0, 0, 1441, 1442, 5, 16, 0, 0, 1442, 1443, 3, 52, 26, 0, 1443, 1444, 5, 17, 0, 0, 1444, 1471, 1, 0, 0, 0, 1445, 1446, 5, 293, 0, 0, 1446, 1447, 3, 188, 94, 0, 1447, 1448, 3, 146, 73, 0, 1448, 1471, 1, 0, 0, 0, 1449, 1450, 5, 294, 0, 0, 1450, 1451, 3, 188, 94, 0, 1451, 1453, 5, 35, 0, 0, 1452, 1454, 5, 83, 0, 0, 1453, 1452, 1, 0, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1455, 1, 0, 0, 0, 1455, 1456, 5, 29, 0, 0, 1456, 1457, 3, 312, 156, 0, 1457, 1458, 5, 30, 0, 0, 1458, 1471, 1, 0, 0, 0, 1459, 1460, 5, 294, 0, 0, 1460, 1461, 3, 188, 94, 0, 1461, 1462, 3, 6, 3, 0, 1462, 1471, 1, 0, 0, 0, 1463, 1464, 5, 294, 0, 0, 1464, 1465, 3, 188, 94, 0, 1465, 1466, 5, 35, 0, 0, 1466, 1467, 5, 16, 0, 0, 1467, 1468, 3, 176, 88, 0, 1468, 1469, 5, 17, 0, 0, 1469, 1471, 1, 0, 0, 0, 1470, 1430, 1, 0, 0, 0, 1470, 1437, 1, 0, 0, 0, 1470, 1445, 1, 0, 0, 0, 1470, 1449, 1, 0, 0, 0, 1470, 1459, 1, 0, 0, 0, 1470, 1463, 1, 0, 0, 0, 1471, 175, 1, 0, 0, 0, 1472, 1483, 1, 0, 0, 0, 1473, 1474, 3, 178, 89, 0, 1474, 1475, 5, 27, 0, 0, 1475, 1477, 1, 0, 0, 0, 1476, 1473, 1, 0, 0, 0, 1477, 1480, 1, 0, 0, 0, 1478, 1476, 1, 0, 0, 0, 1478, 1479, 1, 0, 0, 0, 1479, 1481, 1, 0, 0, 0, 1480, 1478, 1, 0, 0, 0, 1481, 1483, 3, 178, 89, 0, 1482, 1472, 1, 0, 0, 0, 1482, 1478, 1, 0, 0, 0, 1483, 177, 1, 0, 0, 0, 1484, 1485, 5, 38, 0, 0, 1485, 1486, 5, 263, 0, 0, 1486, 1487, 5, 35, 0, 0, 1487, 1488, 5, 16, 0, 0, 1488, 1489, 3, 56, 28, 0, 1489, 1490, 5, 17, 0, 0, 1490, 1498, 1, 0, 0, 0, 1491, 1492, 3, 146, 73, 0, 1492, 1493, 5, 35, 0, 0, 1493, 1494, 5, 16, 0, 0, 1494, 1495, 3, 56, 28, 0, 1495, 1496, 5, 17, 0, 0, 1496, 1498, 1, 0, 0, 0, 1497, 1484, 1, 0, 0, 0, 1497, 1491, 1, 0, 0, 0, 1498, 179, 1, 0, 0, 0, 1499, 1500, 3, 182, 91, 0, 1500, 1501, 5, 27, 0, 0, 1501, 1503, 1, 0, 0, 0, 1502, 1499, 1, 0, 0, 0, 1503, 1506, 1, 0, 0, 0, 1504, 1502, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1507, 1, 0, 0, 0, 1506, 1504, 1, 0, 0, 0, 1507, 1508, 3, 182, 91, 0, 1508, 181, 1, 0, 0, 0, 1509, 1510, 3, 6, 3, 0, 1510, 1511, 5, 35, 0, 0, 1511, 1512, 3, 186, 93, 0, 1512, 183, 1, 0, 0, 0, 1513, 1514, 7, 9, 0, 0, 1514, 185, 1, 0, 0, 0, 1515, 1550, 3, 184, 92, 0, 1516, 1550, 3, 32, 16, 0, 1517, 1518, 5, 185, 0, 0, 1518, 1519, 5, 29, 0, 0, 1519, 1520, 3, 32, 16, 0, 1520, 1521, 5, 30, 0, 0, 1521, 1550, 1, 0, 0, 0, 1522, 1550, 3, 6, 3, 0, 1523, 1524, 3, 138, 69, 0, 1524, 1525, 5, 29, 0, 0, 1525, 1526, 5, 183, 0, 0, 1526, 1527, 5, 74, 0, 0, 1527, 1528, 3, 32, 16, 0, 1528, 1529, 5, 30, 0, 0, 1529, 1550, 1, 0, 0, 0, 1530, 1531, 3, 138, 69, 0, 1531, 1532, 5, 29, 0, 0, 1532, 1533, 5, 184, 0, 0, 1533, 1534, 5, 74, 0, 0, 1534, 1535, 3, 32, 16, 0, 1535, 1536, 5, 30, 0, 0, 1536, 1550, 1, 0, 0, 0, 1537, 1538, 3, 138, 69, 0, 1538, 1539, 5, 29, 0, 0, 1539, 1540, 5, 185, 0, 0, 1540, 1541, 5, 74, 0, 0, 1541, 1542, 3, 32, 16, 0, 1542, 1543, 5, 30, 0, 0, 1543, 1550, 1, 0, 0, 0, 1544, 1545, 3, 138, 69, 0, 1545, 1546, 5, 29, 0, 0, 1546, 1547, 3, 32, 16, 0, 1547, 1548, 5, 30, 0, 0, 1548, 1550, 1, 0, 0, 0, 1549, 1515, 1, 0, 0, 0, 1549, 1516, 1, 0, 0, 0, 1549, 1517, 1, 0, 0, 0, 1549, 1522, 1, 0, 0, 0, 1549, 1523, 1, 0, 0, 0, 1549, 1530, 1, 0, 0, 0, 1549, 1537, 1, 0, 0, 0, 1549, 1544, 1, 0, 0, 0, 1550, 187, 1, 0, 0, 0, 1551, 1552, 7, 10, 0, 0, 1552, 189, 1, 0, 0, 0, 1553, 1554, 3, 192, 96, 0, 1554, 1555, 3, 160, 80, 0, 1555, 1556, 3, 146, 73, 0, 1556, 1557, 5, 175, 0, 0, 1557, 1559, 3, 264, 132, 0, 1558, 1560, 3, 130, 65, 0, 1559, 1558, 1, 0, 0, 0, 1559, 1560, 1, 0, 0, 0, 1560, 1561, 1, 0, 0, 0, 1561, 1562, 3, 134, 67, 0, 1562, 1588, 1, 0, 0, 0, 1563, 1564, 3, 192, 96, 0, 1564, 1565, 3, 160, 80, 0, 1565, 1566, 3, 146, 73, 0, 1566, 1567, 5, 175, 0, 0, 1567, 1568, 3, 264, 132, 0, 1568, 1569, 3, 218, 109, 0, 1569, 1570, 3, 134, 67, 0, 1570, 1588, 1, 0, 0, 0, 1571, 1572, 3, 192, 96, 0, 1572, 1573, 3, 160, 80, 0, 1573, 1575, 3, 264, 132, 0, 1574, 1576, 3, 130, 65, 0, 1575, 1574, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1577, 1, 0, 0, 0, 1577, 1578, 3, 134, 67, 0, 1578, 1588, 1, 0, 0, 0, 1579, 1580, 3, 192, 96, 0, 1580, 1581, 3, 160, 80, 0, 1581, 1582, 3, 264, 132, 0, 1582, 1583, 3, 218, 109, 0, 1583, 1584, 3, 134, 67, 0, 1584, 1588, 1, 0, 0, 0, 1585, 1588, 3, 196, 98, 0, 1586, 1588, 3, 2, 1, 0, 1587, 1553, 1, 0, 0, 0, 1587, 1563, 1, 0, 0, 0, 1587, 1571, 1, 0, 0, 0, 1587, 1579, 1, 0, 0, 0, 1587, 1585, 1, 0, 0, 0, 1587, 1586, 1, 0, 0, 0, 1588, 191, 1, 0, 0, 0, 1589, 1590, 5, 242, 0, 0, 1590, 1600, 3, 192, 96, 0, 1591, 1592, 5, 243, 0, 0, 1592, 1600, 3, 192, 96, 0, 1593, 1600, 3, 194, 97, 0, 1594, 1595, 5, 111, 0, 0, 1595, 1596, 5, 29, 0, 0, 1596, 1597, 3, 32, 16, 0, 1597, 1598, 5, 30, 0, 0, 1598, 1600, 1, 0, 0, 0, 1599, 1589, 1, 0, 0, 0, 1599, 1591, 1, 0, 0, 0, 1599, 1593, 1, 0, 0, 0, 1599, 1594, 1, 0, 0, 0, 1600, 193, 1, 0, 0, 0, 1601, 1614, 1, 0, 0, 0, 1602, 1614, 5, 244, 0, 0, 1603, 1614, 5, 245, 0, 0, 1604, 1605, 5, 246, 0, 0, 1605, 1614, 5, 247, 0, 0, 1606, 1607, 5, 246, 0, 0, 1607, 1614, 5, 248, 0, 0, 1608, 1609, 5, 246, 0, 0, 1609, 1614, 5, 249, 0, 0, 1610, 1611, 5, 246, 0, 0, 1611, 1614, 5, 250, 0, 0, 1612, 1614, 5, 246, 0, 0, 1613, 1601, 1, 0, 0, 0, 1613, 1602, 1, 0, 0, 0, 1613, 1603, 1, 0, 0, 0, 1613, 1604, 1, 0, 0, 0, 1613, 1606, 1, 0, 0, 0, 1613, 1608, 1, 0, 0, 0, 1613, 1610, 1, 0, 0, 0, 1613, 1612, 1, 0, 0, 0, 1614, 195, 1, 0, 0, 0, 1615, 1616, 5, 112, 0, 0, 1616, 1617, 5, 29, 0, 0, 1617, 1618, 3, 32, 16, 0, 1618, 1619, 5, 30, 0, 0, 1619, 197, 1, 0, 0, 0, 1620, 1621, 5, 225, 0, 0, 1621, 1626, 3, 190, 95, 0, 1622, 1623, 5, 36, 0, 0, 1623, 1626, 3, 200, 100, 0, 1624, 1626, 3, 196, 98, 0, 1625, 1620, 1, 0, 0, 0, 1625, 1622, 1, 0, 0, 0, 1625, 1624, 1, 0, 0, 0, 1626, 199, 1, 0, 0, 0, 1627, 1628, 3, 160, 80, 0, 1628, 1629, 3, 146, 73, 0, 1629, 1630, 5, 175, 0, 0, 1630, 1631, 3, 2, 1, 0, 1631, 1637, 1, 0, 0, 0, 1632, 1633, 3, 160, 80, 0, 1633, 1634, 3, 2, 1, 0, 1634, 1637, 1, 0, 0, 0, 1635, 1637, 3, 2, 1, 0, 1636, 1627, 1, 0, 0, 0, 1636, 1632, 1, 0, 0, 0, 1636, 1635, 1, 0, 0, 0, 1637, 201, 1, 0, 0, 0, 1638, 1639, 3, 146, 73, 0, 1639, 1640, 5, 27, 0, 0, 1640, 1642, 1, 0, 0, 0, 1641, 1638, 1, 0, 0, 0, 1642, 1645, 1, 0, 0, 0, 1643, 1641, 1, 0, 0, 0, 1643, 1644, 1, 0, 0, 0, 1644, 1646, 1, 0, 0, 0, 1645, 1643, 1, 0, 0, 0, 1646, 1647, 3, 146, 73, 0, 1647, 203, 1, 0, 0, 0, 1648, 1654, 1, 0, 0, 0, 1649, 1650, 5, 85, 0, 0, 1650, 1651, 3, 212, 106, 0, 1651, 1652, 5, 86, 0, 0, 1652, 1654, 1, 0, 0, 0, 1653, 1648, 1, 0, 0, 0, 1653, 1649, 1, 0, 0, 0, 1654, 205, 1, 0, 0, 0, 1655, 1667, 5, 265, 0, 0, 1656, 1667, 5, 113, 0, 0, 1657, 1667, 5, 38, 0, 0, 1658, 1667, 5, 199, 0, 0, 1659, 1667, 5, 114, 0, 0, 1660, 1667, 5, 115, 0, 0, 1661, 1662, 5, 69, 0, 0, 1662, 1663, 5, 29, 0, 0, 1663, 1664, 3, 32, 16, 0, 1664, 1665, 5, 30, 0, 0, 1665, 1667, 1, 0, 0, 0, 1666, 1655, 1, 0, 0, 0, 1666, 1656, 1, 0, 0, 0, 1666, 1657, 1, 0, 0, 0, 1666, 1658, 1, 0, 0, 0, 1666, 1659, 1, 0, 0, 0, 1666, 1660, 1, 0, 0, 0, 1666, 1661, 1, 0, 0, 0, 1667, 207, 1, 0, 0, 0, 1668, 1670, 3, 206, 103, 0, 1669, 1668, 1, 0, 0, 0, 1670, 1673, 1, 0, 0, 0, 1671, 1669, 1, 0, 0, 0, 1671, 1672, 1, 0, 0, 0, 1672, 209, 1, 0, 0, 0, 1673, 1671, 1, 0, 0, 0, 1674, 1676, 3, 208, 104, 0, 1675, 1677, 3, 214, 107, 0, 1676, 1675, 1, 0, 0, 0, 1676, 1677, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 1679, 3, 2, 1, 0, 1679, 211, 1, 0, 0, 0, 1680, 1681, 3, 210, 105, 0, 1681, 1682, 5, 27, 0, 0, 1682, 1684, 1, 0, 0, 0, 1683, 1680, 1, 0, 0, 0, 1684, 1687, 1, 0, 0, 0, 1685, 1683, 1, 0, 0, 0, 1685, 1686, 1, 0, 0, 0, 1686, 1688, 1, 0, 0, 0, 1687, 1685, 1, 0, 0, 0, 1688, 1689, 3, 210, 105, 0, 1689, 213, 1, 0, 0, 0, 1690, 1691, 5, 29, 0, 0, 1691, 1692, 3, 202, 101, 0, 1692, 1693, 5, 30, 0, 0, 1693, 215, 1, 0, 0, 0, 1694, 1697, 1, 0, 0, 0, 1695, 1697, 3, 218, 109, 0, 1696, 1694, 1, 0, 0, 0, 1696, 1695, 1, 0, 0, 0, 1697, 217, 1, 0, 0, 0, 1698, 1699, 5, 85, 0, 0, 1699, 1700, 5, 41, 0, 0, 1700, 1701, 3, 32, 16, 0, 1701, 1702, 5, 42, 0, 0, 1702, 1703, 5, 86, 0, 0, 1703, 219, 1, 0, 0, 0, 1704, 1705, 3, 256, 128, 0, 1705, 1706, 5, 16, 0, 0, 1706, 1707, 3, 268, 134, 0, 1707, 1708, 5, 17, 0, 0, 1708, 1821, 1, 0, 0, 0, 1709, 1710, 3, 74, 37, 0, 1710, 1711, 5, 16, 0, 0, 1711, 1712, 3, 82, 41, 0, 1712, 1713, 5, 17, 0, 0, 1713, 1821, 1, 0, 0, 0, 1714, 1715, 3, 232, 116, 0, 1715, 1716, 5, 16, 0, 0, 1716, 1717, 3, 236, 118, 0, 1717, 1718, 5, 17, 0, 0, 1718, 1821, 1, 0, 0, 0, 1719, 1720, 3, 240, 120, 0, 1720, 1721, 5, 16, 0, 0, 1721, 1722, 3, 244, 122, 0, 1722, 1723, 5, 17, 0, 0, 1723, 1821, 1, 0, 0, 0, 1724, 1821, 3, 222, 111, 0, 1725, 1821, 3, 296, 148, 0, 1726, 1821, 3, 174, 87, 0, 1727, 1821, 3, 88, 44, 0, 1728, 1821, 3, 342, 171, 0, 1729, 1730, 5, 116, 0, 0, 1730, 1821, 3, 32, 16, 0, 1731, 1732, 5, 117, 0, 0, 1732, 1821, 3, 32, 16, 0, 1733, 1734, 3, 354, 177, 0, 1734, 1735, 5, 16, 0, 0, 1735, 1736, 3, 358, 179, 0, 1736, 1737, 5, 17, 0, 0, 1737, 1821, 1, 0, 0, 0, 1738, 1739, 5, 301, 0, 0, 1739, 1740, 3, 146, 73, 0, 1740, 1741, 5, 175, 0, 0, 1741, 1742, 3, 264, 132, 0, 1742, 1743, 5, 118, 0, 0, 1743, 1744, 3, 192, 96, 0, 1744, 1745, 3, 160, 80, 0, 1745, 1746, 3, 146, 73, 0, 1746, 1747, 5, 175, 0, 0, 1747, 1748, 3, 264, 132, 0, 1748, 1749, 3, 134, 67, 0, 1749, 1821, 1, 0, 0, 0, 1750, 1751, 5, 301, 0, 0, 1751, 1752, 5, 225, 0, 0, 1752, 1753, 3, 192, 96, 0, 1753, 1754, 3, 160, 80, 0, 1754, 1755, 3, 146, 73, 0, 1755, 1756, 5, 175, 0, 0, 1756, 1757, 3, 264, 132, 0, 1757, 1758, 3, 216, 108, 0, 1758, 1759, 3, 134, 67, 0, 1759, 1760, 5, 118, 0, 0, 1760, 1761, 5, 225, 0, 0, 1761, 1762, 3, 192, 96, 0, 1762, 1763, 3, 160, 80, 0, 1763, 1764, 3, 146, 73, 0, 1764, 1765, 5, 175, 0, 0, 1765, 1766, 3, 264, 132, 0, 1766, 1767, 3, 216, 108, 0, 1767, 1768, 3, 134, 67, 0, 1768, 1821, 1, 0, 0, 0, 1769, 1821, 3, 26, 13, 0, 1770, 1821, 3, 40, 20, 0, 1771, 1772, 5, 254, 0, 0, 1772, 1773, 5, 195, 0, 0, 1773, 1774, 5, 41, 0, 0, 1774, 1775, 3, 32, 16, 0, 1775, 1779, 5, 42, 0, 0, 1776, 1778, 3, 342, 171, 0, 1777, 1776, 1, 0, 0, 0, 1778, 1781, 1, 0, 0, 0, 1779, 1777, 1, 0, 0, 0, 1779, 1780, 1, 0, 0, 0, 1780, 1821, 1, 0, 0, 0, 1781, 1779, 1, 0, 0, 0, 1782, 1783, 5, 254, 0, 0, 1783, 1784, 5, 195, 0, 0, 1784, 1788, 3, 2, 1, 0, 1785, 1787, 3, 342, 171, 0, 1786, 1785, 1, 0, 0, 0, 1787, 1790, 1, 0, 0, 0, 1788, 1786, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1821, 1, 0, 0, 0, 1790, 1788, 1, 0, 0, 0, 1791, 1792, 5, 254, 0, 0, 1792, 1793, 5, 255, 0, 0, 1793, 1794, 5, 41, 0, 0, 1794, 1795, 3, 32, 16, 0, 1795, 1796, 5, 42, 0, 0, 1796, 1797, 5, 27, 0, 0, 1797, 1801, 3, 146, 73, 0, 1798, 1800, 3, 342, 171, 0, 1799, 1798, 1, 0, 0, 0, 1800, 1803, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1821, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1804, 1805, 5, 254, 0, 0, 1805, 1806, 5, 255, 0, 0, 1806, 1807, 3, 2, 1, 0, 1807, 1808, 5, 27, 0, 0, 1808, 1812, 3, 146, 73, 0, 1809, 1811, 3, 342, 171, 0, 1810, 1809, 1, 0, 0, 0, 1811, 1814, 1, 0, 0, 0, 1812, 1810, 1, 0, 0, 0, 1812, 1813, 1, 0, 0, 0, 1813, 1821, 1, 0, 0, 0, 1814, 1812, 1, 0, 0, 0, 1815, 1816, 5, 119, 0, 0, 1816, 1817, 5, 195, 0, 0, 1817, 1818, 3, 146, 73, 0, 1818, 1819, 3, 44, 22, 0, 1819, 1821, 1, 0, 0, 0, 1820, 1704, 1, 0, 0, 0, 1820, 1709, 1, 0, 0, 0, 1820, 1714, 1, 0, 0, 0, 1820, 1719, 1, 0, 0, 0, 1820, 1724, 1, 0, 0, 0, 1820, 1725, 1, 0, 0, 0, 1820, 1726, 1, 0, 0, 0, 1820, 1727, 1, 0, 0, 0, 1820, 1728, 1, 0, 0, 0, 1820, 1729, 1, 0, 0, 0, 1820, 1731, 1, 0, 0, 0, 1820, 1733, 1, 0, 0, 0, 1820, 1738, 1, 0, 0, 0, 1820, 1750, 1, 0, 0, 0, 1820, 1769, 1, 0, 0, 0, 1820, 1770, 1, 0, 0, 0, 1820, 1771, 1, 0, 0, 0, 1820, 1782, 1, 0, 0, 0, 1820, 1791, 1, 0, 0, 0, 1820, 1804, 1, 0, 0, 0, 1820, 1815, 1, 0, 0, 0, 1821, 221, 1, 0, 0, 0, 1822, 1823, 5, 120, 0, 0, 1823, 1832, 3, 230, 115, 0, 1824, 1831, 3, 224, 112, 0, 1825, 1826, 5, 121, 0, 0, 1826, 1827, 5, 29, 0, 0, 1827, 1828, 3, 250, 125, 0, 1828, 1829, 5, 30, 0, 0, 1829, 1831, 1, 0, 0, 0, 1830, 1824, 1, 0, 0, 0, 1830, 1825, 1, 0, 0, 0, 1831, 1834, 1, 0, 0, 0, 1832, 1830, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1835, 1, 0, 0, 0, 1834, 1832, 1, 0, 0, 0, 1835, 1836, 3, 160, 80, 0, 1836, 1837, 3, 2, 1, 0, 1837, 1838, 3, 226, 113, 0, 1838, 1839, 3, 228, 114, 0, 1839, 223, 1, 0, 0, 0, 1840, 1860, 5, 122, 0, 0, 1841, 1860, 5, 50, 0, 0, 1842, 1860, 5, 51, 0, 0, 1843, 1860, 5, 62, 0, 0, 1844, 1860, 5, 123, 0, 0, 1845, 1860, 5, 68, 0, 0, 1846, 1860, 5, 67, 0, 0, 1847, 1860, 5, 63, 0, 0, 1848, 1860, 5, 64, 0, 0, 1849, 1860, 5, 65, 0, 0, 1850, 1860, 5, 124, 0, 0, 1851, 1860, 5, 125, 0, 0, 1852, 1860, 5, 126, 0, 0, 1853, 1860, 5, 127, 0, 0, 1854, 1855, 5, 69, 0, 0, 1855, 1856, 5, 29, 0, 0, 1856, 1857, 3, 32, 16, 0, 1857, 1858, 5, 30, 0, 0, 1858, 1860, 1, 0, 0, 0, 1859, 1840, 1, 0, 0, 0, 1859, 1841, 1, 0, 0, 0, 1859, 1842, 1, 0, 0, 0, 1859, 1843, 1, 0, 0, 0, 1859, 1844, 1, 0, 0, 0, 1859, 1845, 1, 0, 0, 0, 1859, 1846, 1, 0, 0, 0, 1859, 1847, 1, 0, 0, 0, 1859, 1848, 1, 0, 0, 0, 1859, 1849, 1, 0, 0, 0, 1859, 1850, 1, 0, 0, 0, 1859, 1851, 1, 0, 0, 0, 1859, 1852, 1, 0, 0, 0, 1859, 1853, 1, 0, 0, 0, 1859, 1854, 1, 0, 0, 0, 1860, 225, 1, 0, 0, 0, 1861, 1867, 1, 0, 0, 0, 1862, 1863, 5, 43, 0, 0, 1863, 1867, 3, 0, 0, 0, 1864, 1865, 5, 43, 0, 0, 1865, 1867, 3, 32, 16, 0, 1866, 1861, 1, 0, 0, 0, 1866, 1862, 1, 0, 0, 0, 1866, 1864, 1, 0, 0, 0, 1867, 227, 1, 0, 0, 0, 1868, 1872, 1, 0, 0, 0, 1869, 1870, 5, 35, 0, 0, 1870, 1872, 3, 316, 158, 0, 1871, 1868, 1, 0, 0, 0, 1871, 1869, 1, 0, 0, 0, 1872, 229, 1, 0, 0, 0, 1873, 1879, 1, 0, 0, 0, 1874, 1875, 5, 41, 0, 0, 1875, 1876, 3, 32, 16, 0, 1876, 1877, 5, 42, 0, 0, 1877, 1879, 1, 0, 0, 0, 1878, 1873, 1, 0, 0, 0, 1878, 1874, 1, 0, 0, 0, 1879, 231, 1, 0, 0, 0, 1880, 1884, 5, 128, 0, 0, 1881, 1883, 3, 234, 117, 0, 1882, 1881, 1, 0, 0, 0, 1883, 1886, 1, 0, 0, 0, 1884, 1882, 1, 0, 0, 0, 1884, 1885, 1, 0, 0, 0, 1885, 1887, 1, 0, 0, 0, 1886, 1884, 1, 0, 0, 0, 1887, 1888, 3, 146, 73, 0, 1888, 1889, 3, 2, 1, 0, 1889, 1899, 1, 0, 0, 0, 1890, 1894, 5, 128, 0, 0, 1891, 1893, 3, 234, 117, 0, 1892, 1891, 1, 0, 0, 0, 1893, 1896, 1, 0, 0, 0, 1894, 1892, 1, 0, 0, 0, 1894, 1895, 1, 0, 0, 0, 1895, 1897, 1, 0, 0, 0, 1896, 1894, 1, 0, 0, 0, 1897, 1899, 3, 2, 1, 0, 1898, 1880, 1, 0, 0, 0, 1898, 1890, 1, 0, 0, 0, 1899, 233, 1, 0, 0, 0, 1900, 1901, 7, 11, 0, 0, 1901, 235, 1, 0, 0, 0, 1902, 1904, 3, 238, 119, 0, 1903, 1902, 1, 0, 0, 0, 1904, 1907, 1, 0, 0, 0, 1905, 1903, 1, 0, 0, 0, 1905, 1906, 1, 0, 0, 0, 1906, 237, 1, 0, 0, 0, 1907, 1905, 1, 0, 0, 0, 1908, 1909, 5, 129, 0, 0, 1909, 1921, 3, 190, 95, 0, 1910, 1911, 5, 130, 0, 0, 1911, 1921, 3, 190, 95, 0, 1912, 1913, 5, 131, 0, 0, 1913, 1921, 3, 190, 95, 0, 1914, 1915, 5, 132, 0, 0, 1915, 1921, 3, 190, 95, 0, 1916, 1921, 3, 88, 44, 0, 1917, 1921, 3, 342, 171, 0, 1918, 1921, 3, 26, 13, 0, 1919, 1921, 3, 40, 20, 0, 1920, 1908, 1, 0, 0, 0, 1920, 1910, 1, 0, 0, 0, 1920, 1912, 1, 0, 0, 0, 1920, 1914, 1, 0, 0, 0, 1920, 1916, 1, 0, 0, 0, 1920, 1917, 1, 0, 0, 0, 1920, 1918, 1, 0, 0, 0, 1920, 1919, 1, 0, 0, 0, 1921, 239, 1, 0, 0, 0, 1922, 1926, 5, 133, 0, 0, 1923, 1925, 3, 242, 121, 0, 1924, 1923, 1, 0, 0, 0, 1925, 1928, 1, 0, 0, 0, 1926, 1924, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1929, 1, 0, 0, 0, 1928, 1926, 1, 0, 0, 0, 1929, 1930, 3, 192, 96, 0, 1930, 1931, 3, 160, 80, 0, 1931, 1932, 3, 2, 1, 0, 1932, 1933, 3, 134, 67, 0, 1933, 1934, 3, 228, 114, 0, 1934, 241, 1, 0, 0, 0, 1935, 1936, 7, 11, 0, 0, 1936, 243, 1, 0, 0, 0, 1937, 1939, 3, 246, 123, 0, 1938, 1937, 1, 0, 0, 0, 1939, 1942, 1, 0, 0, 0, 1940, 1938, 1, 0, 0, 0, 1940, 1941, 1, 0, 0, 0, 1941, 245, 1, 0, 0, 0, 1942, 1940, 1, 0, 0, 0, 1943, 1944, 5, 134, 0, 0, 1944, 1954, 3, 190, 95, 0, 1945, 1946, 5, 135, 0, 0, 1946, 1954, 3, 190, 95, 0, 1947, 1948, 5, 132, 0, 0, 1948, 1954, 3, 190, 95, 0, 1949, 1954, 3, 342, 171, 0, 1950, 1954, 3, 88, 44, 0, 1951, 1954, 3, 26, 13, 0, 1952, 1954, 3, 40, 20, 0, 1953, 1943, 1, 0, 0, 0, 1953, 1945, 1, 0, 0, 0, 1953, 1947, 1, 0, 0, 0, 1953, 1949, 1, 0, 0, 0, 1953, 1950, 1, 0, 0, 0, 1953, 1951, 1, 0, 0, 0, 1953, 1952, 1, 0, 0, 0, 1954, 247, 1, 0, 0, 0, 1955, 1962, 1, 0, 0, 0, 1956, 1957, 5, 121, 0, 0, 1957, 1958, 5, 29, 0, 0, 1958, 1959, 3, 250, 125, 0, 1959, 1960, 5, 30, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1955, 1, 0, 0, 0, 1961, 1956, 1, 0, 0, 0, 1962, 249, 1, 0, 0, 0, 1963, 1973, 3, 148, 74, 0, 1964, 1966, 5, 16, 0, 0, 1965, 1967, 3, 314, 157, 0, 1966, 1965, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1966, 1, 0, 0, 0, 1968, 1969, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 1971, 5, 17, 0, 0, 1971, 1973, 1, 0, 0, 0, 1972, 1963, 1, 0, 0, 0, 1972, 1964, 1, 0, 0, 0, 1973, 251, 1, 0, 0, 0, 1974, 1976, 3, 254, 127, 0, 1975, 1974, 1, 0, 0, 0, 1976, 1979, 1, 0, 0, 0, 1977, 1975, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 253, 1, 0, 0, 0, 1979, 1977, 1, 0, 0, 0, 1980, 1981, 5, 41, 0, 0, 1981, 1982, 5, 136, 0, 0, 1982, 1994, 5, 42, 0, 0, 1983, 1984, 5, 41, 0, 0, 1984, 1985, 5, 137, 0, 0, 1985, 1994, 5, 42, 0, 0, 1986, 1987, 5, 41, 0, 0, 1987, 1988, 5, 138, 0, 0, 1988, 1994, 5, 42, 0, 0, 1989, 1990, 5, 41, 0, 0, 1990, 1991, 3, 32, 16, 0, 1991, 1992, 5, 42, 0, 0, 1992, 1994, 1, 0, 0, 0, 1993, 1980, 1, 0, 0, 0, 1993, 1983, 1, 0, 0, 0, 1993, 1986, 1, 0, 0, 0, 1993, 1989, 1, 0, 0, 0, 1994, 255, 1, 0, 0, 0, 1995, 2000, 5, 139, 0, 0, 1996, 1999, 3, 258, 129, 0, 1997, 1999, 3, 260, 130, 0, 1998, 1996, 1, 0, 0, 0, 1998, 1997, 1, 0, 0, 0, 1999, 2002, 1, 0, 0, 0, 2000, 1998, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 2003, 1, 0, 0, 0, 2002, 2000, 1, 0, 0, 0, 2003, 2004, 3, 192, 96, 0, 2004, 2005, 3, 252, 126, 0, 2005, 2006, 3, 160, 80, 0, 2006, 2007, 3, 248, 124, 0, 2007, 2008, 3, 264, 132, 0, 2008, 2009, 3, 204, 102, 0, 2009, 2013, 3, 134, 67, 0, 2010, 2012, 3, 266, 133, 0, 2011, 2010, 1, 0, 0, 0, 2012, 2015, 1, 0, 0, 0, 2013, 2011, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 257, 1, 0, 0, 0, 2015, 2013, 1, 0, 0, 0, 2016, 2040, 5, 122, 0, 0, 2017, 2040, 5, 50, 0, 0, 2018, 2040, 5, 51, 0, 0, 2019, 2040, 5, 62, 0, 0, 2020, 2040, 5, 140, 0, 0, 2021, 2040, 5, 67, 0, 0, 2022, 2040, 5, 141, 0, 0, 2023, 2040, 5, 142, 0, 0, 2024, 2040, 5, 53, 0, 0, 2025, 2040, 5, 63, 0, 0, 2026, 2040, 5, 64, 0, 0, 2027, 2040, 5, 65, 0, 0, 2028, 2040, 5, 124, 0, 0, 2029, 2040, 5, 143, 0, 0, 2030, 2040, 5, 144, 0, 0, 2031, 2040, 5, 68, 0, 0, 2032, 2040, 5, 145, 0, 0, 2033, 2040, 5, 146, 0, 0, 2034, 2035, 5, 69, 0, 0, 2035, 2036, 5, 29, 0, 0, 2036, 2037, 3, 32, 16, 0, 2037, 2038, 5, 30, 0, 0, 2038, 2040, 1, 0, 0, 0, 2039, 2016, 1, 0, 0, 0, 2039, 2017, 1, 0, 0, 0, 2039, 2018, 1, 0, 0, 0, 2039, 2019, 1, 0, 0, 0, 2039, 2020, 1, 0, 0, 0, 2039, 2021, 1, 0, 0, 0, 2039, 2022, 1, 0, 0, 0, 2039, 2023, 1, 0, 0, 0, 2039, 2024, 1, 0, 0, 0, 2039, 2025, 1, 0, 0, 0, 2039, 2026, 1, 0, 0, 0, 2039, 2027, 1, 0, 0, 0, 2039, 2028, 1, 0, 0, 0, 2039, 2029, 1, 0, 0, 0, 2039, 2030, 1, 0, 0, 0, 2039, 2031, 1, 0, 0, 0, 2039, 2032, 1, 0, 0, 0, 2039, 2033, 1, 0, 0, 0, 2039, 2034, 1, 0, 0, 0, 2040, 259, 1, 0, 0, 0, 2041, 2042, 5, 147, 0, 0, 2042, 2048, 5, 29, 0, 0, 2043, 2046, 3, 6, 3, 0, 2044, 2045, 5, 33, 0, 0, 2045, 2047, 3, 6, 3, 0, 2046, 2044, 1, 0, 0, 0, 2046, 2047, 1, 0, 0, 0, 2047, 2049, 1, 0, 0, 0, 2048, 2043, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2053, 1, 0, 0, 0, 2050, 2052, 3, 262, 131, 0, 2051, 2050, 1, 0, 0, 0, 2052, 2055, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2053, 2054, 1, 0, 0, 0, 2054, 2056, 1, 0, 0, 0, 2055, 2053, 1, 0, 0, 0, 2056, 2060, 5, 30, 0, 0, 2057, 2058, 5, 147, 0, 0, 2058, 2060, 5, 84, 0, 0, 2059, 2041, 1, 0, 0, 0, 2059, 2057, 1, 0, 0, 0, 2060, 261, 1, 0, 0, 0, 2061, 2089, 5, 148, 0, 0, 2062, 2089, 5, 223, 0, 0, 2063, 2089, 5, 56, 0, 0, 2064, 2089, 5, 57, 0, 0, 2065, 2089, 5, 149, 0, 0, 2066, 2089, 5, 150, 0, 0, 2067, 2089, 5, 247, 0, 0, 2068, 2089, 5, 248, 0, 0, 2069, 2089, 5, 249, 0, 0, 2070, 2089, 5, 250, 0, 0, 2071, 2072, 5, 151, 0, 0, 2072, 2073, 5, 74, 0, 0, 2073, 2089, 5, 152, 0, 0, 2074, 2075, 5, 151, 0, 0, 2075, 2076, 5, 74, 0, 0, 2076, 2089, 5, 153, 0, 0, 2077, 2078, 5, 154, 0, 0, 2078, 2079, 5, 74, 0, 0, 2079, 2089, 5, 152, 0, 0, 2080, 2081, 5, 154, 0, 0, 2081, 2082, 5, 74, 0, 0, 2082, 2089, 5, 153, 0, 0, 2083, 2084, 5, 69, 0, 0, 2084, 2085, 5, 29, 0, 0, 2085, 2086, 3, 32, 16, 0, 2086, 2087, 5, 30, 0, 0, 2087, 2089, 1, 0, 0, 0, 2088, 2061, 1, 0, 0, 0, 2088, 2062, 1, 0, 0, 0, 2088, 2063, 1, 0, 0, 0, 2088, 2064, 1, 0, 0, 0, 2088, 2065, 1, 0, 0, 0, 2088, 2066, 1, 0, 0, 0, 2088, 2067, 1, 0, 0, 0, 2088, 2068, 1, 0, 0, 0, 2088, 2069, 1, 0, 0, 0, 2088, 2070, 1, 0, 0, 0, 2088, 2071, 1, 0, 0, 0, 2088, 2074, 1, 0, 0, 0, 2088, 2077, 1, 0, 0, 0, 2088, 2080, 1, 0, 0, 0, 2088, 2083, 1, 0, 0, 0, 2089, 263, 1, 0, 0, 0, 2090, 2094, 5, 115, 0, 0, 2091, 2094, 5, 155, 0, 0, 2092, 2094, 3, 2, 1, 0, 2093, 2090, 1, 0, 0, 0, 2093, 2091, 1, 0, 0, 0, 2093, 2092, 1, 0, 0, 0, 2094, 265, 1, 0, 0, 0, 2095, 2117, 5, 1, 0, 0, 2096, 2117, 5, 2, 0, 0, 2097, 2117, 5, 156, 0, 0, 2098, 2117, 5, 3, 0, 0, 2099, 2117, 5, 4, 0, 0, 2100, 2117, 5, 246, 0, 0, 2101, 2117, 5, 5, 0, 0, 2102, 2117, 5, 6, 0, 0, 2103, 2117, 5, 7, 0, 0, 2104, 2117, 5, 8, 0, 0, 2105, 2117, 5, 9, 0, 0, 2106, 2117, 5, 10, 0, 0, 2107, 2117, 5, 11, 0, 0, 2108, 2117, 5, 12, 0, 0, 2109, 2117, 5, 13, 0, 0, 2110, 2117, 5, 14, 0, 0, 2111, 2112, 5, 69, 0, 0, 2112, 2113, 5, 29, 0, 0, 2113, 2114, 3, 32, 16, 0, 2114, 2115, 5, 30, 0, 0, 2115, 2117, 1, 0, 0, 0, 2116, 2095, 1, 0, 0, 0, 2116, 2096, 1, 0, 0, 0, 2116, 2097, 1, 0, 0, 0, 2116, 2098, 1, 0, 0, 0, 2116, 2099, 1, 0, 0, 0, 2116, 2100, 1, 0, 0, 0, 2116, 2101, 1, 0, 0, 0, 2116, 2102, 1, 0, 0, 0, 2116, 2103, 1, 0, 0, 0, 2116, 2104, 1, 0, 0, 0, 2116, 2105, 1, 0, 0, 0, 2116, 2106, 1, 0, 0, 0, 2116, 2107, 1, 0, 0, 0, 2116, 2108, 1, 0, 0, 0, 2116, 2109, 1, 0, 0, 0, 2116, 2110, 1, 0, 0, 0, 2116, 2111, 1, 0, 0, 0, 2117, 267, 1, 0, 0, 0, 2118, 2120, 3, 270, 135, 0, 2119, 2118, 1, 0, 0, 0, 2120, 2123, 1, 0, 0, 0, 2121, 2119, 1, 0, 0, 0, 2121, 2122, 1, 0, 0, 0, 2122, 269, 1, 0, 0, 0, 2123, 2121, 1, 0, 0, 0, 2124, 2233, 3, 126, 63, 0, 2125, 2126, 5, 295, 0, 0, 2126, 2233, 3, 32, 16, 0, 2127, 2233, 3, 278, 139, 0, 2128, 2129, 5, 296, 0, 0, 2129, 2233, 3, 32, 16, 0, 2130, 2131, 5, 299, 0, 0, 2131, 2233, 3, 134, 67, 0, 2132, 2133, 5, 299, 0, 0, 2133, 2134, 5, 157, 0, 0, 2134, 2233, 3, 134, 67, 0, 2135, 2233, 5, 297, 0, 0, 2136, 2233, 5, 298, 0, 0, 2137, 2233, 3, 296, 148, 0, 2138, 2233, 3, 272, 136, 0, 2139, 2233, 3, 174, 87, 0, 2140, 2233, 3, 88, 44, 0, 2141, 2233, 3, 26, 13, 0, 2142, 2233, 3, 274, 137, 0, 2143, 2233, 3, 40, 20, 0, 2144, 2145, 5, 300, 0, 0, 2145, 2146, 5, 41, 0, 0, 2146, 2147, 3, 32, 16, 0, 2147, 2148, 5, 42, 0, 0, 2148, 2233, 1, 0, 0, 0, 2149, 2150, 5, 300, 0, 0, 2150, 2151, 5, 41, 0, 0, 2151, 2152, 3, 32, 16, 0, 2152, 2153, 5, 42, 0, 0, 2153, 2154, 5, 33, 0, 0, 2154, 2155, 3, 0, 0, 0, 2155, 2233, 1, 0, 0, 0, 2156, 2157, 5, 302, 0, 0, 2157, 2158, 3, 32, 16, 0, 2158, 2159, 5, 74, 0, 0, 2159, 2160, 3, 32, 16, 0, 2160, 2233, 1, 0, 0, 0, 2161, 2162, 5, 301, 0, 0, 2162, 2163, 3, 146, 73, 0, 2163, 2164, 5, 175, 0, 0, 2164, 2165, 3, 264, 132, 0, 2165, 2233, 1, 0, 0, 0, 2166, 2167, 5, 301, 0, 0, 2167, 2168, 5, 225, 0, 0, 2168, 2169, 3, 192, 96, 0, 2169, 2170, 3, 160, 80, 0, 2170, 2171, 3, 146, 73, 0, 2171, 2172, 5, 175, 0, 0, 2172, 2173, 3, 264, 132, 0, 2173, 2174, 3, 216, 108, 0, 2174, 2175, 3, 134, 67, 0, 2175, 2233, 1, 0, 0, 0, 2176, 2233, 3, 276, 138, 0, 2177, 2178, 5, 254, 0, 0, 2178, 2179, 5, 195, 0, 0, 2179, 2180, 5, 41, 0, 0, 2180, 2181, 3, 32, 16, 0, 2181, 2185, 5, 42, 0, 0, 2182, 2184, 3, 342, 171, 0, 2183, 2182, 1, 0, 0, 0, 2184, 2187, 1, 0, 0, 0, 2185, 2183, 1, 0, 0, 0, 2185, 2186, 1, 0, 0, 0, 2186, 2233, 1, 0, 0, 0, 2187, 2185, 1, 0, 0, 0, 2188, 2189, 5, 254, 0, 0, 2189, 2190, 5, 195, 0, 0, 2190, 2194, 3, 2, 1, 0, 2191, 2193, 3, 342, 171, 0, 2192, 2191, 1, 0, 0, 0, 2193, 2196, 1, 0, 0, 0, 2194, 2192, 1, 0, 0, 0, 2194, 2195, 1, 0, 0, 0, 2195, 2233, 1, 0, 0, 0, 2196, 2194, 1, 0, 0, 0, 2197, 2198, 5, 254, 0, 0, 2198, 2199, 5, 255, 0, 0, 2199, 2200, 5, 41, 0, 0, 2200, 2201, 3, 32, 16, 0, 2201, 2202, 5, 42, 0, 0, 2202, 2203, 5, 27, 0, 0, 2203, 2207, 3, 146, 73, 0, 2204, 2206, 3, 342, 171, 0, 2205, 2204, 1, 0, 0, 0, 2206, 2209, 1, 0, 0, 0, 2207, 2205, 1, 0, 0, 0, 2207, 2208, 1, 0, 0, 0, 2208, 2233, 1, 0, 0, 0, 2209, 2207, 1, 0, 0, 0, 2210, 2211, 5, 254, 0, 0, 2211, 2212, 5, 255, 0, 0, 2212, 2213, 3, 2, 1, 0, 2213, 2214, 5, 27, 0, 0, 2214, 2218, 3, 146, 73, 0, 2215, 2217, 3, 342, 171, 0, 2216, 2215, 1, 0, 0, 0, 2217, 2220, 1, 0, 0, 0, 2218, 2216, 1, 0, 0, 0, 2218, 2219, 1, 0, 0, 0, 2219, 2233, 1, 0, 0, 0, 2220, 2218, 1, 0, 0, 0, 2221, 2222, 5, 254, 0, 0, 2222, 2223, 5, 41, 0, 0, 2223, 2224, 3, 32, 16, 0, 2224, 2225, 5, 42, 0, 0, 2225, 2229, 3, 228, 114, 0, 2226, 2228, 3, 342, 171, 0, 2227, 2226, 1, 0, 0, 0, 2228, 2231, 1, 0, 0, 0, 2229, 2227, 1, 0, 0, 0, 2229, 2230, 1, 0, 0, 0, 2230, 2233, 1, 0, 0, 0, 2231, 2229, 1, 0, 0, 0, 2232, 2124, 1, 0, 0, 0, 2232, 2125, 1, 0, 0, 0, 2232, 2127, 1, 0, 0, 0, 2232, 2128, 1, 0, 0, 0, 2232, 2130, 1, 0, 0, 0, 2232, 2132, 1, 0, 0, 0, 2232, 2135, 1, 0, 0, 0, 2232, 2136, 1, 0, 0, 0, 2232, 2137, 1, 0, 0, 0, 2232, 2138, 1, 0, 0, 0, 2232, 2139, 1, 0, 0, 0, 2232, 2140, 1, 0, 0, 0, 2232, 2141, 1, 0, 0, 0, 2232, 2142, 1, 0, 0, 0, 2232, 2143, 1, 0, 0, 0, 2232, 2144, 1, 0, 0, 0, 2232, 2149, 1, 0, 0, 0, 2232, 2156, 1, 0, 0, 0, 2232, 2161, 1, 0, 0, 0, 2232, 2166, 1, 0, 0, 0, 2232, 2176, 1, 0, 0, 0, 2232, 2177, 1, 0, 0, 0, 2232, 2188, 1, 0, 0, 0, 2232, 2197, 1, 0, 0, 0, 2232, 2210, 1, 0, 0, 0, 2232, 2221, 1, 0, 0, 0, 2233, 271, 1, 0, 0, 0, 2234, 2235, 3, 0, 0, 0, 2235, 2236, 5, 74, 0, 0, 2236, 273, 1, 0, 0, 0, 2237, 2240, 3, 44, 22, 0, 2238, 2240, 3, 46, 23, 0, 2239, 2237, 1, 0, 0, 0, 2239, 2238, 1, 0, 0, 0, 2240, 275, 1, 0, 0, 0, 2241, 2242, 5, 16, 0, 0, 2242, 2243, 3, 268, 134, 0, 2243, 2244, 5, 17, 0, 0, 2244, 277, 1, 0, 0, 0, 2245, 2246, 3, 282, 141, 0, 2246, 2247, 3, 280, 140, 0, 2247, 279, 1, 0, 0, 0, 2248, 2250, 3, 284, 142, 0, 2249, 2248, 1, 0, 0, 0, 2250, 2251, 1, 0, 0, 0, 2251, 2249, 1, 0, 0, 0, 2251, 2252, 1, 0, 0, 0, 2252, 281, 1, 0, 0, 0, 2253, 2254, 5, 158, 0, 0, 2254, 2266, 3, 276, 138, 0, 2255, 2256, 5, 158, 0, 0, 2256, 2257, 3, 0, 0, 0, 2257, 2258, 5, 159, 0, 0, 2258, 2259, 3, 0, 0, 0, 2259, 2266, 1, 0, 0, 0, 2260, 2261, 5, 158, 0, 0, 2261, 2262, 3, 32, 16, 0, 2262, 2263, 5, 159, 0, 0, 2263, 2264, 3, 32, 16, 0, 2264, 2266, 1, 0, 0, 0, 2265, 2253, 1, 0, 0, 0, 2265, 2255, 1, 0, 0, 0, 2265, 2260, 1, 0, 0, 0, 2266, 283, 1, 0, 0, 0, 2267, 2268, 3, 288, 144, 0, 2268, 2269, 3, 294, 147, 0, 2269, 2280, 1, 0, 0, 0, 2270, 2271, 3, 286, 143, 0, 2271, 2272, 3, 294, 147, 0, 2272, 2280, 1, 0, 0, 0, 2273, 2274, 3, 290, 145, 0, 2274, 2275, 3, 294, 147, 0, 2275, 2280, 1, 0, 0, 0, 2276, 2277, 3, 292, 146, 0, 2277, 2278, 3, 294, 147, 0, 2278, 2280, 1, 0, 0, 0, 2279, 2267, 1, 0, 0, 0, 2279, 2270, 1, 0, 0, 0, 2279, 2273, 1, 0, 0, 0, 2279, 2276, 1, 0, 0, 0, 2280, 285, 1, 0, 0, 0, 2281, 2282, 5, 160, 0, 0, 2282, 2288, 3, 276, 138, 0, 2283, 2284, 5, 160, 0, 0, 2284, 2288, 3, 0, 0, 0, 2285, 2286, 5, 160, 0, 0, 2286, 2288, 3, 32, 16, 0, 2287, 2281, 1, 0, 0, 0, 2287, 2283, 1, 0, 0, 0, 2287, 2285, 1, 0, 0, 0, 2288, 287, 1, 0, 0, 0, 2289, 2290, 5, 161, 0, 0, 2290, 2291, 3, 146, 73, 0, 2291, 289, 1, 0, 0, 0, 2292, 2293, 5, 162, 0, 0, 2293, 291, 1, 0, 0, 0, 2294, 2295, 5, 163, 0, 0, 2295, 293, 1, 0, 0, 0, 2296, 2308, 3, 276, 138, 0, 2297, 2298, 5, 164, 0, 0, 2298, 2299, 3, 0, 0, 0, 2299, 2300, 5, 159, 0, 0, 2300, 2301, 3, 0, 0, 0, 2301, 2308, 1, 0, 0, 0, 2302, 2303, 5, 164, 0, 0, 2303, 2304, 3, 32, 16, 0, 2304, 2305, 5, 159, 0, 0, 2305, 2306, 3, 32, 16, 0, 2306, 2308, 1, 0, 0, 0, 2307, 2296, 1, 0, 0, 0, 2307, 2297, 1, 0, 0, 0, 2307, 2302, 1, 0, 0, 0, 2308, 295, 1, 0, 0, 0, 2309, 2310, 3, 298, 149, 0, 2310, 2311, 3, 302, 151, 0, 2311, 297, 1, 0, 0, 0, 2312, 2313, 5, 165, 0, 0, 2313, 2314, 3, 300, 150, 0, 2314, 2315, 3, 0, 0, 0, 2315, 2316, 5, 35, 0, 0, 2316, 2320, 1, 0, 0, 0, 2317, 2318, 5, 165, 0, 0, 2318, 2320, 3, 300, 150, 0, 2319, 2312, 1, 0, 0, 0, 2319, 2317, 1, 0, 0, 0, 2320, 299, 1, 0, 0, 0, 2321, 2325, 1, 0, 0, 0, 2322, 2325, 5, 166, 0, 0, 2323, 2325, 5, 2, 0, 0, 2324, 2321, 1, 0, 0, 0, 2324, 2322, 1, 0, 0, 0, 2324, 2323, 1, 0, 0, 0, 2325, 301, 1, 0, 0, 0, 2326, 2327, 5, 16, 0, 0, 2327, 2328, 3, 304, 152, 0, 2328, 2329, 5, 17, 0, 0, 2329, 2336, 1, 0, 0, 0, 2330, 2332, 3, 308, 154, 0, 2331, 2330, 1, 0, 0, 0, 2332, 2333, 1, 0, 0, 0, 2333, 2331, 1, 0, 0, 0, 2333, 2334, 1, 0, 0, 0, 2334, 2336, 1, 0, 0, 0, 2335, 2326, 1, 0, 0, 0, 2335, 2331, 1, 0, 0, 0, 2336, 303, 1, 0, 0, 0, 2337, 2338, 3, 308, 154, 0, 2338, 2339, 5, 27, 0, 0, 2339, 2341, 1, 0, 0, 0, 2340, 2337, 1, 0, 0, 0, 2341, 2344, 1, 0, 0, 0, 2342, 2340, 1, 0, 0, 0, 2342, 2343, 1, 0, 0, 0, 2343, 2345, 1, 0, 0, 0, 2344, 2342, 1, 0, 0, 0, 2345, 2346, 3, 308, 154, 0, 2346, 305, 1, 0, 0, 0, 2347, 2353, 1, 0, 0, 0, 2348, 2349, 5, 41, 0, 0, 2349, 2350, 3, 32, 16, 0, 2350, 2351, 5, 42, 0, 0, 2351, 2353, 1, 0, 0, 0, 2352, 2347, 1, 0, 0, 0, 2352, 2348, 1, 0, 0, 0, 2353, 307, 1, 0, 0, 0, 2354, 2355, 5, 180, 0, 0, 2355, 2356, 5, 261, 0, 0, 2356, 2357, 5, 29, 0, 0, 2357, 2358, 3, 6, 3, 0, 2358, 2359, 5, 30, 0, 0, 2359, 2421, 1, 0, 0, 0, 2360, 2361, 5, 259, 0, 0, 2361, 2362, 5, 29, 0, 0, 2362, 2363, 3, 0, 0, 0, 2363, 2364, 5, 30, 0, 0, 2364, 2421, 1, 0, 0, 0, 2365, 2366, 5, 259, 0, 0, 2366, 2421, 3, 0, 0, 0, 2367, 2368, 5, 83, 0, 0, 2368, 2369, 5, 29, 0, 0, 2369, 2370, 3, 312, 156, 0, 2370, 2371, 5, 30, 0, 0, 2371, 2421, 1, 0, 0, 0, 2372, 2373, 5, 187, 0, 0, 2373, 2374, 5, 29, 0, 0, 2374, 2375, 3, 36, 18, 0, 2375, 2376, 5, 30, 0, 0, 2376, 2377, 3, 306, 153, 0, 2377, 2421, 1, 0, 0, 0, 2378, 2379, 5, 188, 0, 0, 2379, 2380, 5, 29, 0, 0, 2380, 2381, 3, 36, 18, 0, 2381, 2382, 5, 30, 0, 0, 2382, 2383, 3, 306, 153, 0, 2383, 2421, 1, 0, 0, 0, 2384, 2385, 5, 186, 0, 0, 2385, 2386, 5, 29, 0, 0, 2386, 2387, 3, 34, 17, 0, 2387, 2388, 5, 30, 0, 0, 2388, 2389, 3, 306, 153, 0, 2389, 2421, 1, 0, 0, 0, 2390, 2391, 5, 185, 0, 0, 2391, 2392, 5, 29, 0, 0, 2392, 2393, 3, 32, 16, 0, 2393, 2394, 5, 30, 0, 0, 2394, 2395, 3, 306, 153, 0, 2395, 2421, 1, 0, 0, 0, 2396, 2397, 5, 184, 0, 0, 2397, 2398, 5, 29, 0, 0, 2398, 2399, 3, 32, 16, 0, 2399, 2400, 5, 30, 0, 0, 2400, 2401, 3, 306, 153, 0, 2401, 2421, 1, 0, 0, 0, 2402, 2403, 5, 183, 0, 0, 2403, 2404, 5, 29, 0, 0, 2404, 2405, 3, 32, 16, 0, 2405, 2406, 5, 30, 0, 0, 2406, 2407, 3, 306, 153, 0, 2407, 2421, 1, 0, 0, 0, 2408, 2409, 5, 187, 0, 0, 2409, 2421, 3, 306, 153, 0, 2410, 2411, 5, 188, 0, 0, 2411, 2421, 3, 306, 153, 0, 2412, 2413, 5, 186, 0, 0, 2413, 2421, 3, 306, 153, 0, 2414, 2415, 5, 185, 0, 0, 2415, 2421, 3, 306, 153, 0, 2416, 2417, 5, 184, 0, 0, 2417, 2421, 3, 306, 153, 0, 2418, 2419, 5, 183, 0, 0, 2419, 2421, 3, 306, 153, 0, 2420, 2354, 1, 0, 0, 0, 2420, 2360, 1, 0, 0, 0, 2420, 2365, 1, 0, 0, 0, 2420, 2367, 1, 0, 0, 0, 2420, 2372, 1, 0, 0, 0, 2420, 2378, 1, 0, 0, 0, 2420, 2384, 1, 0, 0, 0, 2420, 2390, 1, 0, 0, 0, 2420, 2396, 1, 0, 0, 0, 2420, 2402, 1, 0, 0, 0, 2420, 2408, 1, 0, 0, 0, 2420, 2410, 1, 0, 0, 0, 2420, 2412, 1, 0, 0, 0, 2420, 2414, 1, 0, 0, 0, 2420, 2416, 1, 0, 0, 0, 2420, 2418, 1, 0, 0, 0, 2421, 309, 1, 0, 0, 0, 2422, 2423, 5, 187, 0, 0, 2423, 2424, 5, 29, 0, 0, 2424, 2425, 3, 36, 18, 0, 2425, 2426, 5, 30, 0, 0, 2426, 2498, 1, 0, 0, 0, 2427, 2428, 5, 188, 0, 0, 2428, 2429, 5, 29, 0, 0, 2429, 2430, 3, 36, 18, 0, 2430, 2431, 5, 30, 0, 0, 2431, 2498, 1, 0, 0, 0, 2432, 2433, 5, 187, 0, 0, 2433, 2434, 5, 29, 0, 0, 2434, 2435, 3, 32, 16, 0, 2435, 2436, 5, 30, 0, 0, 2436, 2498, 1, 0, 0, 0, 2437, 2438, 5, 188, 0, 0, 2438, 2439, 5, 29, 0, 0, 2439, 2440, 3, 34, 17, 0, 2440, 2441, 5, 30, 0, 0, 2441, 2498, 1, 0, 0, 0, 2442, 2443, 5, 186, 0, 0, 2443, 2444, 5, 29, 0, 0, 2444, 2445, 3, 34, 17, 0, 2445, 2446, 5, 30, 0, 0, 2446, 2498, 1, 0, 0, 0, 2447, 2448, 5, 185, 0, 0, 2448, 2449, 5, 29, 0, 0, 2449, 2450, 3, 32, 16, 0, 2450, 2451, 5, 30, 0, 0, 2451, 2498, 1, 0, 0, 0, 2452, 2453, 5, 184, 0, 0, 2453, 2454, 5, 29, 0, 0, 2454, 2455, 3, 32, 16, 0, 2455, 2456, 5, 30, 0, 0, 2456, 2498, 1, 0, 0, 0, 2457, 2458, 5, 183, 0, 0, 2458, 2459, 5, 29, 0, 0, 2459, 2460, 3, 32, 16, 0, 2460, 2461, 5, 30, 0, 0, 2461, 2498, 1, 0, 0, 0, 2462, 2463, 5, 192, 0, 0, 2463, 2464, 5, 29, 0, 0, 2464, 2465, 3, 34, 17, 0, 2465, 2466, 5, 30, 0, 0, 2466, 2498, 1, 0, 0, 0, 2467, 2468, 5, 191, 0, 0, 2468, 2469, 5, 29, 0, 0, 2469, 2470, 3, 32, 16, 0, 2470, 2471, 5, 30, 0, 0, 2471, 2498, 1, 0, 0, 0, 2472, 2473, 5, 190, 0, 0, 2473, 2474, 5, 29, 0, 0, 2474, 2475, 3, 32, 16, 0, 2475, 2476, 5, 30, 0, 0, 2476, 2498, 1, 0, 0, 0, 2477, 2478, 5, 189, 0, 0, 2478, 2479, 5, 29, 0, 0, 2479, 2480, 3, 32, 16, 0, 2480, 2481, 5, 30, 0, 0, 2481, 2498, 1, 0, 0, 0, 2482, 2483, 5, 180, 0, 0, 2483, 2484, 5, 29, 0, 0, 2484, 2485, 3, 32, 16, 0, 2485, 2486, 5, 30, 0, 0, 2486, 2498, 1, 0, 0, 0, 2487, 2488, 5, 182, 0, 0, 2488, 2489, 5, 29, 0, 0, 2489, 2490, 3, 184, 92, 0, 2490, 2491, 5, 30, 0, 0, 2491, 2498, 1, 0, 0, 0, 2492, 2493, 5, 83, 0, 0, 2493, 2494, 5, 29, 0, 0, 2494, 2495, 3, 312, 156, 0, 2495, 2496, 5, 30, 0, 0, 2496, 2498, 1, 0, 0, 0, 2497, 2422, 1, 0, 0, 0, 2497, 2427, 1, 0, 0, 0, 2497, 2432, 1, 0, 0, 0, 2497, 2437, 1, 0, 0, 0, 2497, 2442, 1, 0, 0, 0, 2497, 2447, 1, 0, 0, 0, 2497, 2452, 1, 0, 0, 0, 2497, 2457, 1, 0, 0, 0, 2497, 2462, 1, 0, 0, 0, 2497, 2467, 1, 0, 0, 0, 2497, 2472, 1, 0, 0, 0, 2497, 2477, 1, 0, 0, 0, 2497, 2482, 1, 0, 0, 0, 2497, 2487, 1, 0, 0, 0, 2497, 2492, 1, 0, 0, 0, 2498, 311, 1, 0, 0, 0, 2499, 2501, 3, 314, 157, 0, 2500, 2499, 1, 0, 0, 0, 2501, 2504, 1, 0, 0, 0, 2502, 2500, 1, 0, 0, 0, 2502, 2503, 1, 0, 0, 0, 2503, 313, 1, 0, 0, 0, 2504, 2502, 1, 0, 0, 0, 2505, 2506, 7, 12, 0, 0, 2506, 315, 1, 0, 0, 0, 2507, 2511, 3, 310, 155, 0, 2508, 2511, 3, 6, 3, 0, 2509, 2511, 5, 178, 0, 0, 2510, 2507, 1, 0, 0, 0, 2510, 2508, 1, 0, 0, 0, 2510, 2509, 1, 0, 0, 0, 2511, 317, 1, 0, 0, 0, 2512, 2661, 3, 310, 155, 0, 2513, 2514, 5, 181, 0, 0, 2514, 2515, 5, 29, 0, 0, 2515, 2516, 5, 178, 0, 0, 2516, 2661, 5, 30, 0, 0, 2517, 2518, 5, 181, 0, 0, 2518, 2519, 5, 29, 0, 0, 2519, 2520, 5, 263, 0, 0, 2520, 2661, 5, 30, 0, 0, 2521, 2522, 5, 195, 0, 0, 2522, 2523, 5, 29, 0, 0, 2523, 2524, 5, 38, 0, 0, 2524, 2525, 5, 263, 0, 0, 2525, 2661, 5, 30, 0, 0, 2526, 2527, 5, 195, 0, 0, 2527, 2528, 5, 29, 0, 0, 2528, 2529, 3, 138, 69, 0, 2529, 2530, 5, 30, 0, 0, 2530, 2661, 1, 0, 0, 0, 2531, 2532, 5, 195, 0, 0, 2532, 2533, 5, 29, 0, 0, 2533, 2534, 5, 178, 0, 0, 2534, 2661, 5, 30, 0, 0, 2535, 2536, 5, 196, 0, 0, 2536, 2537, 5, 29, 0, 0, 2537, 2538, 3, 318, 159, 0, 2538, 2539, 5, 30, 0, 0, 2539, 2661, 1, 0, 0, 0, 2540, 2541, 5, 187, 0, 0, 2541, 2542, 5, 41, 0, 0, 2542, 2543, 3, 32, 16, 0, 2543, 2544, 5, 42, 0, 0, 2544, 2545, 5, 29, 0, 0, 2545, 2546, 3, 320, 160, 0, 2546, 2547, 5, 30, 0, 0, 2547, 2661, 1, 0, 0, 0, 2548, 2549, 5, 188, 0, 0, 2549, 2550, 5, 41, 0, 0, 2550, 2551, 3, 32, 16, 0, 2551, 2552, 5, 42, 0, 0, 2552, 2553, 5, 29, 0, 0, 2553, 2554, 3, 322, 161, 0, 2554, 2555, 5, 30, 0, 0, 2555, 2661, 1, 0, 0, 0, 2556, 2557, 5, 186, 0, 0, 2557, 2558, 5, 41, 0, 0, 2558, 2559, 3, 32, 16, 0, 2559, 2560, 5, 42, 0, 0, 2560, 2561, 5, 29, 0, 0, 2561, 2562, 3, 324, 162, 0, 2562, 2563, 5, 30, 0, 0, 2563, 2661, 1, 0, 0, 0, 2564, 2565, 5, 185, 0, 0, 2565, 2566, 5, 41, 0, 0, 2566, 2567, 3, 32, 16, 0, 2567, 2568, 5, 42, 0, 0, 2568, 2569, 5, 29, 0, 0, 2569, 2570, 3, 326, 163, 0, 2570, 2571, 5, 30, 0, 0, 2571, 2661, 1, 0, 0, 0, 2572, 2573, 5, 184, 0, 0, 2573, 2574, 5, 41, 0, 0, 2574, 2575, 3, 32, 16, 0, 2575, 2576, 5, 42, 0, 0, 2576, 2577, 5, 29, 0, 0, 2577, 2578, 3, 328, 164, 0, 2578, 2579, 5, 30, 0, 0, 2579, 2661, 1, 0, 0, 0, 2580, 2581, 5, 183, 0, 0, 2581, 2582, 5, 41, 0, 0, 2582, 2583, 3, 32, 16, 0, 2583, 2584, 5, 42, 0, 0, 2584, 2585, 5, 29, 0, 0, 2585, 2586, 3, 330, 165, 0, 2586, 2587, 5, 30, 0, 0, 2587, 2661, 1, 0, 0, 0, 2588, 2589, 5, 192, 0, 0, 2589, 2590, 5, 41, 0, 0, 2590, 2591, 3, 32, 16, 0, 2591, 2592, 5, 42, 0, 0, 2592, 2593, 5, 29, 0, 0, 2593, 2594, 3, 324, 162, 0, 2594, 2595, 5, 30, 0, 0, 2595, 2661, 1, 0, 0, 0, 2596, 2597, 5, 191, 0, 0, 2597, 2598, 5, 41, 0, 0, 2598, 2599, 3, 32, 16, 0, 2599, 2600, 5, 42, 0, 0, 2600, 2601, 5, 29, 0, 0, 2601, 2602, 3, 326, 163, 0, 2602, 2603, 5, 30, 0, 0, 2603, 2661, 1, 0, 0, 0, 2604, 2605, 5, 190, 0, 0, 2605, 2606, 5, 41, 0, 0, 2606, 2607, 3, 32, 16, 0, 2607, 2608, 5, 42, 0, 0, 2608, 2609, 5, 29, 0, 0, 2609, 2610, 3, 328, 164, 0, 2610, 2611, 5, 30, 0, 0, 2611, 2661, 1, 0, 0, 0, 2612, 2613, 5, 189, 0, 0, 2613, 2614, 5, 41, 0, 0, 2614, 2615, 3, 32, 16, 0, 2615, 2616, 5, 42, 0, 0, 2616, 2617, 5, 29, 0, 0, 2617, 2618, 3, 330, 165, 0, 2618, 2619, 5, 30, 0, 0, 2619, 2661, 1, 0, 0, 0, 2620, 2621, 5, 180, 0, 0, 2621, 2622, 5, 41, 0, 0, 2622, 2623, 3, 32, 16, 0, 2623, 2624, 5, 42, 0, 0, 2624, 2625, 5, 29, 0, 0, 2625, 2626, 3, 328, 164, 0, 2626, 2627, 5, 30, 0, 0, 2627, 2661, 1, 0, 0, 0, 2628, 2629, 5, 182, 0, 0, 2629, 2630, 5, 41, 0, 0, 2630, 2631, 3, 32, 16, 0, 2631, 2632, 5, 42, 0, 0, 2632, 2633, 5, 29, 0, 0, 2633, 2634, 3, 332, 166, 0, 2634, 2635, 5, 30, 0, 0, 2635, 2661, 1, 0, 0, 0, 2636, 2637, 5, 181, 0, 0, 2637, 2638, 5, 41, 0, 0, 2638, 2639, 3, 32, 16, 0, 2639, 2640, 5, 42, 0, 0, 2640, 2641, 5, 29, 0, 0, 2641, 2642, 3, 334, 167, 0, 2642, 2643, 5, 30, 0, 0, 2643, 2661, 1, 0, 0, 0, 2644, 2645, 5, 195, 0, 0, 2645, 2646, 5, 41, 0, 0, 2646, 2647, 3, 32, 16, 0, 2647, 2648, 5, 42, 0, 0, 2648, 2649, 5, 29, 0, 0, 2649, 2650, 3, 336, 168, 0, 2650, 2651, 5, 30, 0, 0, 2651, 2661, 1, 0, 0, 0, 2652, 2653, 5, 196, 0, 0, 2653, 2654, 5, 41, 0, 0, 2654, 2655, 3, 32, 16, 0, 2655, 2656, 5, 42, 0, 0, 2656, 2657, 5, 29, 0, 0, 2657, 2658, 3, 340, 170, 0, 2658, 2659, 5, 30, 0, 0, 2659, 2661, 1, 0, 0, 0, 2660, 2512, 1, 0, 0, 0, 2660, 2513, 1, 0, 0, 0, 2660, 2517, 1, 0, 0, 0, 2660, 2521, 1, 0, 0, 0, 2660, 2526, 1, 0, 0, 0, 2660, 2531, 1, 0, 0, 0, 2660, 2535, 1, 0, 0, 0, 2660, 2540, 1, 0, 0, 0, 2660, 2548, 1, 0, 0, 0, 2660, 2556, 1, 0, 0, 0, 2660, 2564, 1, 0, 0, 0, 2660, 2572, 1, 0, 0, 0, 2660, 2580, 1, 0, 0, 0, 2660, 2588, 1, 0, 0, 0, 2660, 2596, 1, 0, 0, 0, 2660, 2604, 1, 0, 0, 0, 2660, 2612, 1, 0, 0, 0, 2660, 2620, 1, 0, 0, 0, 2660, 2628, 1, 0, 0, 0, 2660, 2636, 1, 0, 0, 0, 2660, 2644, 1, 0, 0, 0, 2660, 2652, 1, 0, 0, 0, 2661, 319, 1, 0, 0, 0, 2662, 2665, 3, 36, 18, 0, 2663, 2665, 3, 32, 16, 0, 2664, 2662, 1, 0, 0, 0, 2664, 2663, 1, 0, 0, 0, 2665, 2668, 1, 0, 0, 0, 2666, 2664, 1, 0, 0, 0, 2666, 2667, 1, 0, 0, 0, 2667, 321, 1, 0, 0, 0, 2668, 2666, 1, 0, 0, 0, 2669, 2672, 3, 36, 18, 0, 2670, 2672, 3, 34, 17, 0, 2671, 2669, 1, 0, 0, 0, 2671, 2670, 1, 0, 0, 0, 2672, 2675, 1, 0, 0, 0, 2673, 2671, 1, 0, 0, 0, 2673, 2674, 1, 0, 0, 0, 2674, 323, 1, 0, 0, 0, 2675, 2673, 1, 0, 0, 0, 2676, 2678, 3, 34, 17, 0, 2677, 2676, 1, 0, 0, 0, 2678, 2681, 1, 0, 0, 0, 2679, 2677, 1, 0, 0, 0, 2679, 2680, 1, 0, 0, 0, 2680, 325, 1, 0, 0, 0, 2681, 2679, 1, 0, 0, 0, 2682, 2684, 3, 32, 16, 0, 2683, 2682, 1, 0, 0, 0, 2684, 2687, 1, 0, 0, 0, 2685, 2683, 1, 0, 0, 0, 2685, 2686, 1, 0, 0, 0, 2686, 327, 1, 0, 0, 0, 2687, 2685, 1, 0, 0, 0, 2688, 2690, 3, 32, 16, 0, 2689, 2688, 1, 0, 0, 0, 2690, 2693, 1, 0, 0, 0, 2691, 2689, 1, 0, 0, 0, 2691, 2692, 1, 0, 0, 0, 2692, 329, 1, 0, 0, 0, 2693, 2691, 1, 0, 0, 0, 2694, 2696, 3, 32, 16, 0, 2695, 2694, 1, 0, 0, 0, 2696, 2699, 1, 0, 0, 0, 2697, 2695, 1, 0, 0, 0, 2697, 2698, 1, 0, 0, 0, 2698, 331, 1, 0, 0, 0, 2699, 2697, 1, 0, 0, 0, 2700, 2702, 3, 184, 92, 0, 2701, 2700, 1, 0, 0, 0, 2702, 2705, 1, 0, 0, 0, 2703, 2701, 1, 0, 0, 0, 2703, 2704, 1, 0, 0, 0, 2704, 333, 1, 0, 0, 0, 2705, 2703, 1, 0, 0, 0, 2706, 2708, 7, 13, 0, 0, 2707, 2706, 1, 0, 0, 0, 2708, 2711, 1, 0, 0, 0, 2709, 2707, 1, 0, 0, 0, 2709, 2710, 1, 0, 0, 0, 2710, 335, 1, 0, 0, 0, 2711, 2709, 1, 0, 0, 0, 2712, 2714, 3, 338, 169, 0, 2713, 2712, 1, 0, 0, 0, 2714, 2717, 1, 0, 0, 0, 2715, 2713, 1, 0, 0, 0, 2715, 2716, 1, 0, 0, 0, 2716, 337, 1, 0, 0, 0, 2717, 2715, 1, 0, 0, 0, 2718, 2723, 5, 178, 0, 0, 2719, 2720, 5, 38, 0, 0, 2720, 2723, 5, 263, 0, 0, 2721, 2723, 3, 138, 69, 0, 2722, 2718, 1, 0, 0, 0, 2722, 2719, 1, 0, 0, 0, 2722, 2721, 1, 0, 0, 0, 2723, 339, 1, 0, 0, 0, 2724, 2726, 3, 318, 159, 0, 2725, 2724, 1, 0, 0, 0, 2726, 2729, 1, 0, 0, 0, 2727, 2725, 1, 0, 0, 0, 2727, 2728, 1, 0, 0, 0, 2728, 341, 1, 0, 0, 0, 2729, 2727, 1, 0, 0, 0, 2730, 2734, 3, 44, 22, 0, 2731, 2734, 3, 46, 23, 0, 2732, 2734, 3, 2, 1, 0, 2733, 2730, 1, 0, 0, 0, 2733, 2731, 1, 0, 0, 0, 2733, 2732, 1, 0, 0, 0, 2734, 343, 1, 0, 0, 0, 2735, 2736, 5, 167, 0, 0, 2736, 2737, 5, 35, 0, 0, 2737, 2738, 5, 29, 0, 0, 2738, 2739, 3, 312, 156, 0, 2739, 2740, 5, 30, 0, 0, 2740, 2761, 1, 0, 0, 0, 2741, 2742, 5, 168, 0, 0, 2742, 2743, 3, 38, 19, 0, 2743, 2744, 5, 74, 0, 0, 2744, 2745, 3, 38, 19, 0, 2745, 2746, 5, 74, 0, 0, 2746, 2747, 3, 38, 19, 0, 2747, 2748, 5, 74, 0, 0, 2748, 2749, 3, 38, 19, 0, 2749, 2761, 1, 0, 0, 0, 2750, 2751, 5, 169, 0, 0, 2751, 2761, 3, 6, 3, 0, 2752, 2753, 5, 169, 0, 0, 2753, 2754, 5, 35, 0, 0, 2754, 2755, 5, 29, 0, 0, 2755, 2756, 3, 312, 156, 0, 2756, 2757, 5, 30, 0, 0, 2757, 2761, 1, 0, 0, 0, 2758, 2761, 3, 342, 171, 0, 2759, 2761, 3, 40, 20, 0, 2760, 2735, 1, 0, 0, 0, 2760, 2741, 1, 0, 0, 0, 2760, 2750, 1, 0, 0, 0, 2760, 2752, 1, 0, 0, 0, 2760, 2758, 1, 0, 0, 0, 2760, 2759, 1, 0, 0, 0, 2761, 345, 1, 0, 0, 0, 2762, 2763, 5, 24, 0, 0, 2763, 2764, 5, 39, 0, 0, 2764, 2765, 3, 98, 49, 0, 2765, 2766, 3, 2, 1, 0, 2766, 2775, 1, 0, 0, 0, 2767, 2768, 5, 24, 0, 0, 2768, 2769, 5, 39, 0, 0, 2769, 2770, 3, 98, 49, 0, 2770, 2771, 3, 2, 1, 0, 2771, 2772, 5, 33, 0, 0, 2772, 2773, 3, 2, 1, 0, 2773, 2775, 1, 0, 0, 0, 2774, 2762, 1, 0, 0, 0, 2774, 2767, 1, 0, 0, 0, 2775, 347, 1, 0, 0, 0, 2776, 2778, 3, 350, 175, 0, 2777, 2776, 1, 0, 0, 0, 2778, 2781, 1, 0, 0, 0, 2779, 2777, 1, 0, 0, 0, 2779, 2780, 1, 0, 0, 0, 2780, 349, 1, 0, 0, 0, 2781, 2779, 1, 0, 0, 0, 2782, 2783, 5, 179, 0, 0, 2783, 2784, 5, 35, 0, 0, 2784, 2785, 5, 29, 0, 0, 2785, 2786, 3, 312, 156, 0, 2786, 2787, 5, 30, 0, 0, 2787, 2797, 1, 0, 0, 0, 2788, 2797, 3, 344, 172, 0, 2789, 2790, 5, 170, 0, 0, 2790, 2791, 5, 35, 0, 0, 2791, 2792, 5, 29, 0, 0, 2792, 2793, 3, 312, 156, 0, 2793, 2794, 5, 30, 0, 0, 2794, 2797, 1, 0, 0, 0, 2795, 2797, 5, 54, 0, 0, 2796, 2782, 1, 0, 0, 0, 2796, 2788, 1, 0, 0, 0, 2796, 2789, 1, 0, 0, 0, 2796, 2795, 1, 0, 0, 0, 2797, 351, 1, 0, 0, 0, 2798, 2799, 5, 49, 0, 0, 2799, 2803, 5, 39, 0, 0, 2800, 2802, 3, 356, 178, 0, 2801, 2800, 1, 0, 0, 0, 2802, 2805, 1, 0, 0, 0, 2803, 2801, 1, 0, 0, 0, 2803, 2804, 1, 0, 0, 0, 2804, 2806, 1, 0, 0, 0, 2805, 2803, 1, 0, 0, 0, 2806, 2807, 3, 2, 1, 0, 2807, 353, 1, 0, 0, 0, 2808, 2812, 5, 300, 0, 0, 2809, 2811, 3, 356, 178, 0, 2810, 2809, 1, 0, 0, 0, 2811, 2814, 1, 0, 0, 0, 2812, 2810, 1, 0, 0, 0, 2812, 2813, 1, 0, 0, 0, 2813, 2815, 1, 0, 0, 0, 2814, 2812, 1, 0, 0, 0, 2815, 2816, 3, 2, 1, 0, 2816, 355, 1, 0, 0, 0, 2817, 2833, 5, 51, 0, 0, 2818, 2833, 5, 50, 0, 0, 2819, 2833, 5, 171, 0, 0, 2820, 2821, 5, 61, 0, 0, 2821, 2833, 5, 50, 0, 0, 2822, 2823, 5, 61, 0, 0, 2823, 2833, 5, 51, 0, 0, 2824, 2825, 5, 61, 0, 0, 2825, 2833, 5, 62, 0, 0, 2826, 2827, 5, 61, 0, 0, 2827, 2833, 5, 63, 0, 0, 2828, 2829, 5, 61, 0, 0, 2829, 2833, 5, 64, 0, 0, 2830, 2831, 5, 61, 0, 0, 2831, 2833, 5, 65, 0, 0, 2832, 2817, 1, 0, 0, 0, 2832, 2818, 1, 0, 0, 0, 2832, 2819, 1, 0, 0, 0, 2832, 2820, 1, 0, 0, 0, 2832, 2822, 1, 0, 0, 0, 2832, 2824, 1, 0, 0, 0, 2832, 2826, 1, 0, 0, 0, 2832, 2828, 1, 0, 0, 0, 2832, 2830, 1, 0, 0, 0, 2833, 357, 1, 0, 0, 0, 2834, 2836, 3, 360, 180, 0, 2835, 2834, 1, 0, 0, 0, 2836, 2839, 1, 0, 0, 0, 2837, 2835, 1, 0, 0, 0, 2837, 2838, 1, 0, 0, 0, 2838, 359, 1, 0, 0, 0, 2839, 2837, 1, 0, 0, 0, 2840, 2841, 5, 20, 0, 0, 2841, 2854, 3, 2, 1, 0, 2842, 2843, 5, 49, 0, 0, 2843, 2844, 5, 39, 0, 0, 2844, 2854, 3, 140, 70, 0, 2845, 2846, 5, 24, 0, 0, 2846, 2847, 5, 39, 0, 0, 2847, 2854, 3, 2, 1, 0, 2848, 2854, 3, 196, 98, 0, 2849, 2850, 5, 49, 0, 0, 2850, 2854, 3, 32, 16, 0, 2851, 2854, 3, 342, 171, 0, 2852, 2854, 3, 40, 20, 0, 2853, 2840, 1, 0, 0, 0, 2853, 2842, 1, 0, 0, 0, 2853, 2845, 1, 0, 0, 0, 2853, 2848, 1, 0, 0, 0, 2853, 2849, 1, 0, 0, 0, 2853, 2851, 1, 0, 0, 0, 2853, 2852, 1, 0, 0, 0, 2854, 361, 1, 0, 0, 0, 2855, 2859, 5, 273, 0, 0, 2856, 2858, 3, 364, 182, 0, 2857, 2856, 1, 0, 0, 0, 2858, 2861, 1, 0, 0, 0, 2859, 2857, 1, 0, 0, 0, 2859, 2860, 1, 0, 0, 0, 2860, 2862, 1, 0, 0, 0, 2861, 2859, 1, 0, 0, 0, 2862, 2875, 3, 2, 1, 0, 2863, 2867, 5, 273, 0, 0, 2864, 2866, 3, 364, 182, 0, 2865, 2864, 1, 0, 0, 0, 2866, 2869, 1, 0, 0, 0, 2867, 2865, 1, 0, 0, 0, 2867, 2868, 1, 0, 0, 0, 2868, 2870, 1, 0, 0, 0, 2869, 2867, 1, 0, 0, 0, 2870, 2871, 3, 2, 1, 0, 2871, 2872, 5, 33, 0, 0, 2872, 2873, 3, 2, 1, 0, 2873, 2875, 1, 0, 0, 0, 2874, 2855, 1, 0, 0, 0, 2874, 2863, 1, 0, 0, 0, 2875, 363, 1, 0, 0, 0, 2876, 2877, 7, 14, 0, 0, 2877, 365, 1, 0, 0, 0, 2878, 2880, 3, 368, 184, 0, 2879, 2878, 1, 0, 0, 0, 2880, 2883, 1, 0, 0, 0, 2881, 2879, 1, 0, 0, 0, 2881, 2882, 1, 0, 0, 0, 2882, 367, 1, 0, 0, 0, 2883, 2881, 1, 0, 0, 0, 2884, 2885, 5, 20, 0, 0, 2885, 2886, 3, 2, 1, 0, 2886, 2887, 5, 43, 0, 0, 2887, 2888, 3, 32, 16, 0, 2888, 2895, 1, 0, 0, 0, 2889, 2890, 5, 24, 0, 0, 2890, 2891, 5, 39, 0, 0, 2891, 2895, 3, 2, 1, 0, 2892, 2895, 3, 342, 171, 0, 2893, 2895, 3, 40, 20, 0, 2894, 2884, 1, 0, 0, 0, 2894, 2889, 1, 0, 0, 0, 2894, 2892, 1, 0, 0, 0, 2894, 2893, 1, 0, 0, 0, 2895, 369, 1, 0, 0, 0, 172, 378, 383, 391, 399, 452, 500, 509, 533, 537, 555, 582, 605, 641, 647, 654, 656, 666, 668, 675, 686, 694, 715, 717, 733, 778, 783, 788, 793, 801, 911, 917, 933, 939, 945, 952, 1060, 1065, 1071, 1076, 1078, 1086, 1098, 1110, 1117, 1124, 1126, 1153, 1160, 1168, 1176, 1189, 1196, 1199, 1218, 1304, 1313, 1320, 1323, 1331, 1352, 1384, 1407, 1419, 1428, 1453, 1470, 1478, 1482, 1497, 1504, 1549, 1559, 1575, 1587, 1599, 1613, 1625, 1636, 1643, 1653, 1666, 1671, 1676, 1685, 1696, 1779, 1788, 1801, 1812, 1820, 1830, 1832, 1859, 1866, 1871, 1878, 1884, 1894, 1898, 1905, 1920, 1926, 1940, 1953, 1961, 1968, 1972, 1977, 1993, 1998, 2000, 2013, 2039, 2046, 2048, 2053, 2059, 2088, 2093, 2116, 2121, 2185, 2194, 2207, 2218, 2229, 2232, 2239, 2251, 2265, 2279, 2287, 2307, 2319, 2324, 2333, 2335, 2342, 2352, 2420, 2497, 2502, 2510, 2660, 2664, 2666, 2671, 2673, 2679, 2685, 2691, 2697, 2703, 2709, 2715, 2722, 2727, 2733, 2760, 2774, 2779, 2796, 2803, 2812, 2832, 2837, 2853, 2859, 2867, 2874, 2881, 2894] \ No newline at end of file diff --git a/src/tools/ilasm/src/ILAssembler/gen/CIL.tokens b/src/tools/ilasm/src/ILAssembler/gen/CIL.tokens index b0aee9d4e62201..2d2c2b7de5f63f 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CIL.tokens +++ b/src/tools/ilasm/src/ILAssembler/gen/CIL.tokens @@ -166,144 +166,142 @@ T__164=165 T__165=166 T__166=167 T__167=168 -INT32=169 -INT64=170 -FLOAT64=171 -HEXBYTE=172 -DCOLON=173 -ELLIPSIS=174 -NULL=175 -NULLREF=176 -HASH=177 -CHAR=178 -STRING=179 -BOOL=180 -INT8=181 -INT16=182 -INT32_=183 -INT64_=184 -FLOAT32=185 -FLOAT64_=186 -UINT8=187 -UINT16=188 -UINT32=189 -UINT64=190 -INT=191 -UINT=192 -TYPE=193 -OBJECT=194 -MODULE=195 -VALUE=196 -VALUETYPE=197 -VOID=198 -ENUM=199 -CUSTOM=200 -FIXED=201 -SYSSTRING=202 -ARRAY=203 -VARIANT=204 -CURRENCY=205 -SYSCHAR=206 -ERROR=207 -DECIMAL=208 -DATE=209 -BSTR=210 -LPSTR=211 -LPWSTR=212 -LPTSTR=213 -OBJECTREF=214 -IUNKNOWN=215 -IDISPATCH=216 -STRUCT=217 -INTERFACE=218 -SAFEARRAY=219 -NESTEDSTRUCT=220 -VARIANTBOOL=221 +T__168=169 +T__169=170 +T__170=171 +INT32=172 +INT64=173 +FLOAT64=174 +DCOLON=175 +ELLIPSIS=176 +NULL=177 +NULLREF=178 +HASH=179 +CHAR=180 +STRING=181 +BOOL=182 +INT8=183 +INT16=184 +INT32_=185 +INT64_=186 +FLOAT32=187 +FLOAT64_=188 +UINT8=189 +UINT16=190 +UINT32=191 +UINT64=192 +INT=193 +UINT=194 +TYPE=195 +OBJECT=196 +MODULE=197 +VALUE=198 +VALUETYPE=199 +VOID=200 +ENUM=201 +CUSTOM=202 +FIXED=203 +SYSSTRING=204 +ARRAY=205 +VARIANT=206 +CURRENCY=207 +SYSCHAR=208 +ERROR=209 +DECIMAL=210 +DATE=211 +BSTR=212 +LPSTR=213 +LPWSTR=214 +LPTSTR=215 +OBJECTREF=216 +IUNKNOWN=217 +IDISPATCH=218 +STRUCT=219 +INTERFACE=220 +SAFEARRAY=221 BYVALSTR=222 ANSI=223 -ANSIBSTR=224 -TBSTR=225 -METHOD=226 -ANY=227 -LPSTRUCT=228 -VECTOR=229 -HRESULT=230 -CARRAY=231 -USERDEFINED=232 -RECORD=233 -FILETIME=234 -BLOB=235 -STREAM=236 -STORAGE=237 -STREAMED_OBJECT=238 -STORED_OBJECT=239 -BLOB_OBJECT=240 -CF=241 -CLSID=242 -INSTANCE=243 -EXPLICIT=244 -DEFAULT=245 -VARARG=246 -UNMANAGED=247 -CDECL=248 -STDCALL=249 -THISCALL=250 -FASTCALL=251 -TYPE_PARAMETER=252 -METHOD_TYPE_PARAMETER=253 -TYPEDREF=254 -NATIVE_INT=255 -NATIVE_UINT=256 -PARAM=257 -CONSTRAINT=258 -THIS=259 -BASE=260 -NESTER=261 -REF=262 -ARRAY_TYPE_NO_BOUNDS=263 -PTR=264 -QSTRING=265 -SQSTRING=266 -DOT=267 -PLUS=268 -PP_DEFINE=269 -PP_UNDEF=270 -PP_IFDEF=271 -PP_IFNDEF=272 -PP_ELSE=273 -PP_ENDIF=274 -PP_INCLUDE=275 -MRESOURCE=276 -INSTR_NONE=277 -INSTR_VAR=278 -INSTR_I=279 -INSTR_I8=280 -INSTR_R=281 -INSTR_METHOD=282 -INSTR_SIG=283 -INSTR_BRTARGET=284 -INSTR_SWITCH=285 -INSTR_TYPE=286 -INSTR_STRING=287 -INSTR_FIELD=288 -INSTR_TOK=289 -DOTTEDNAME=290 -ID=291 -WS=292 -SINGLE_LINE_COMMENT=293 -COMMENT=294 -PERMISSION=295 -PERMISSIONSET=296 -EMITBYTE=297 -MAXSTACK=298 -ENTRYPOINT=299 -ZEROINIT=300 -LOCALS=301 -EXPORT=302 -OVERRIDE=303 -VTENTRY=304 -IncludedFileEof=305 -SyntheticIncludedFileEof=306 +TBSTR=224 +METHOD=225 +ANY=226 +LPSTRUCT=227 +VECTOR=228 +HRESULT=229 +CARRAY=230 +USERDEFINED=231 +RECORD=232 +FILETIME=233 +BLOB=234 +STREAM=235 +STORAGE=236 +STREAMED_OBJECT=237 +STORED_OBJECT=238 +BLOB_OBJECT=239 +CF=240 +CLSID=241 +INSTANCE=242 +EXPLICIT=243 +DEFAULT=244 +VARARG=245 +UNMANAGED=246 +CDECL=247 +STDCALL=248 +THISCALL=249 +FASTCALL=250 +TYPE_PARAMETER=251 +METHOD_TYPE_PARAMETER=252 +TYPEDREF=253 +PARAM=254 +CONSTRAINT=255 +THIS=256 +BASE=257 +NESTER=258 +REF=259 +ARRAY_TYPE_NO_BOUNDS=260 +PTR=261 +QSTRING=262 +SQSTRING=263 +DOT=264 +PLUS=265 +PP_DEFINE=266 +PP_UNDEF=267 +PP_IFDEF=268 +PP_IFNDEF=269 +PP_ELSE=270 +PP_ENDIF=271 +PP_INCLUDE=272 +MRESOURCE=273 +INSTR_NONE=274 +INSTR_VAR=275 +INSTR_I=276 +INSTR_I8=277 +INSTR_R=278 +INSTR_METHOD=279 +INSTR_SIG=280 +INSTR_BRTARGET=281 +INSTR_SWITCH=282 +INSTR_TYPE=283 +INSTR_STRING=284 +INSTR_FIELD=285 +INSTR_TOK=286 +DOTTEDNAME=287 +ID=288 +HEXBYTE=289 +WS=290 +SINGLE_LINE_COMMENT=291 +COMMENT=292 +PERMISSION=293 +PERMISSIONSET=294 +EMITBYTE=295 +MAXSTACK=296 +ENTRYPOINT=297 +ZEROINIT=298 +LOCALS=299 +EXPORT=300 +OVERRIDE=301 +VTENTRY=302 +IncludedFileEof=303 +SyntheticIncludedFileEof=304 'native'=1 'cil'=2 'optil'=3 @@ -387,193 +385,199 @@ SyntheticIncludedFileEof=306 'arm'=81 'arm64'=82 'bytearray'=83 -'<'=84 -'>'=85 -'()'=86 +'()'=84 +'<'=85 +'>'=86 '/'=87 'algorithm'=88 'iidparam'=89 'pinned'=90 'modreq'=91 'modopt'=92 -'true'=93 -'false'=94 -'request'=95 -'demand'=96 -'assert'=97 -'deny'=98 -'permitonly'=99 -'linkcheck'=100 -'inheritcheck'=101 -'reqmin'=102 -'reqopt'=103 -'reqrefuse'=104 -'prejitgrant'=105 -'prejitdeny'=106 -'noncasdemand'=107 -'noncaslinkdemand'=108 -'noncasinheritance'=109 -'callconv'=110 -'mdtoken'=111 -'-'=112 -'byreflike'=113 -'.ctor'=114 -'.size'=115 -'.pack'=116 -'with'=117 -'.interfaceimpl'=118 -'.field'=119 -'marshal'=120 -'static'=121 -'initonly'=122 -'privatescope'=123 -'literal'=124 -'notserialized'=125 -'.event'=126 -'.addon'=127 -'.removeon'=128 -'.fire'=129 -'.other'=130 -'.property'=131 -'.set'=132 -'.get'=133 -'in'=134 -'out'=135 -'opt'=136 -'.method'=137 -'final'=138 -'virtual'=139 -'strict'=140 -'hidebysig'=141 -'newslot'=142 -'unmanagedexp'=143 -'reqsecobj'=144 -'pinvokeimpl'=145 -'nomangle'=146 -'lasterr'=147 -'winapi'=148 -'bestfit'=149 -'on'=150 -'off'=151 -'charmaperror'=152 -'.cctor'=153 -'init'=154 -'.try'=155 -'to'=156 -'filter'=157 -'catch'=158 -'finally'=159 -'fault'=160 -'handler'=161 -'.data'=162 -'tls'=163 -'.publicKey'=164 -'.ver'=165 -'.locale'=166 -'.publickeytoken'=167 -'forwarder'=168 -'::'=173 -'..'=174 -'null'=175 -'nullref'=176 -'.hash'=177 -'char'=178 -'string'=179 -'bool'=180 -'int8'=181 -'int16'=182 -'int32'=183 -'int64'=184 -'float32'=185 -'float64'=186 -'int'=191 -'type'=193 -'object'=194 -'.module'=195 -'value'=196 -'valuetype'=197 -'void'=198 -'enum'=199 -'custom'=200 -'fixed'=201 -'systring'=202 -'array'=203 -'variant'=204 -'currency'=205 -'syschar'=206 -'error'=207 -'decimal'=208 -'date'=209 -'bstr'=210 -'lpstr'=211 -'lpwstr'=212 -'lptstr'=213 -'objectref'=214 -'iunknown'=215 -'idispatch'=216 -'struct'=217 -'interface'=218 -'safearray'=219 +'unsigned'=93 +'true'=94 +'false'=95 +'request'=96 +'demand'=97 +'assert'=98 +'deny'=99 +'permitonly'=100 +'linkcheck'=101 +'inheritcheck'=102 +'reqmin'=103 +'reqopt'=104 +'reqrefuse'=105 +'prejitgrant'=106 +'prejitdeny'=107 +'noncasdemand'=108 +'noncaslinkdemand'=109 +'noncasinheritance'=110 +'callconv'=111 +'mdtoken'=112 +'-'=113 +'byreflike'=114 +'.ctor'=115 +'.size'=116 +'.pack'=117 +'with'=118 +'.interfaceimpl'=119 +'.field'=120 +'marshal'=121 +'static'=122 +'initonly'=123 +'privatescope'=124 +'literal'=125 +'notserialized'=126 +'volatile'=127 +'.event'=128 +'.addon'=129 +'.removeon'=130 +'.fire'=131 +'.other'=132 +'.property'=133 +'.set'=134 +'.get'=135 +'in'=136 +'out'=137 +'opt'=138 +'.method'=139 +'final'=140 +'virtual'=141 +'strict'=142 +'hidebysig'=143 +'newslot'=144 +'unmanagedexp'=145 +'reqsecobj'=146 +'pinvokeimpl'=147 +'nomangle'=148 +'lasterr'=149 +'winapi'=150 +'bestfit'=151 +'on'=152 +'off'=153 +'charmaperror'=154 +'.cctor'=155 +'il'=156 +'init'=157 +'.try'=158 +'to'=159 +'filter'=160 +'catch'=161 +'finally'=162 +'fault'=163 +'handler'=164 +'.data'=165 +'tls'=166 +'.publicKey'=167 +'.ver'=168 +'.locale'=169 +'.publickeytoken'=170 +'forwarder'=171 +'::'=175 +'...'=176 +'null'=177 +'nullref'=178 +'.hash'=179 +'string'=181 +'bool'=182 +'int8'=183 +'int16'=184 +'int32'=185 +'int64'=186 +'float32'=187 +'float64'=188 +'uint8'=189 +'uint16'=190 +'uint32'=191 +'uint64'=192 +'int'=193 +'uint'=194 +'type'=195 +'object'=196 +'.module'=197 +'value'=198 +'valuetype'=199 +'void'=200 +'enum'=201 +'custom'=202 +'fixed'=203 +'systring'=204 +'array'=205 +'variant'=206 +'currency'=207 +'syschar'=208 +'error'=209 +'decimal'=210 +'date'=211 +'bstr'=212 +'lpstr'=213 +'lpwstr'=214 +'lptstr'=215 +'objectref'=216 +'iunknown'=217 +'idispatch'=218 +'struct'=219 +'interface'=220 +'safearray'=221 'byvalstr'=222 'ansi'=223 -'tbstr'=225 -'method'=226 -'any'=227 -'lpstruct'=228 -'vector'=229 -'hresult'=230 -'carray'=231 -'userdefined'=232 -'record'=233 -'filetime'=234 -'blob'=235 -'stream'=236 -'storage'=237 -'streamed_object'=238 -'stored_object'=239 -'blob_object'=240 -'cf'=241 -'clsid'=242 -'instance'=243 -'explicit'=244 -'default'=245 -'vararg'=246 -'unmanaged'=247 -'cdecl'=248 -'stdcall'=249 -'thiscall'=250 -'fastcall'=251 -'!'=252 -'typedref'=254 -'.param'=257 -'constraint'=258 -'.this'=259 -'.base'=260 -'.nester'=261 -'&'=262 -'*'=264 -'.'=267 -'+'=268 -'#define'=269 -'#undef'=270 -'#ifdef'=271 -'#ifndef'=272 -'#else'=273 -'#endif'=274 -'#include'=275 -'.mresource'=276 -'ldc.i8'=280 -'calli'=283 -'switch'=285 -'ldstr'=287 -'ldtoken'=289 -'.permission'=295 -'.permissionset'=296 -'.emitbyte'=297 -'.maxstack'=298 -'.entrypoint'=299 -'.zeroinit'=300 -'.locals'=301 -'.export'=302 -'.override'=303 -'.vtentry'=304 +'tbstr'=224 +'method'=225 +'any'=226 +'lpstruct'=227 +'vector'=228 +'hresult'=229 +'carray'=230 +'userdefined'=231 +'record'=232 +'filetime'=233 +'blob'=234 +'stream'=235 +'storage'=236 +'streamed_object'=237 +'stored_object'=238 +'blob_object'=239 +'cf'=240 +'clsid'=241 +'instance'=242 +'explicit'=243 +'default'=244 +'vararg'=245 +'unmanaged'=246 +'cdecl'=247 +'stdcall'=248 +'thiscall'=249 +'fastcall'=250 +'!'=251 +'.param'=254 +'constraint'=255 +'.this'=256 +'.base'=257 +'.nester'=258 +'&'=259 +'*'=261 +'.'=264 +'+'=265 +'#define'=266 +'#undef'=267 +'#ifdef'=268 +'#ifndef'=269 +'#else'=270 +'#endif'=271 +'#include'=272 +'.mresource'=273 +'ldc.i8'=277 +'calli'=280 +'switch'=282 +'ldstr'=284 +'ldtoken'=286 +'.permission'=293 +'.permissionset'=294 +'.emitbyte'=295 +'.maxstack'=296 +'.entrypoint'=297 +'.zeroinit'=298 +'.locals'=299 +'.export'=300 +'.override'=301 +'.vtentry'=302 diff --git a/src/tools/ilasm/src/ILAssembler/gen/CILBaseVisitor.cs b/src/tools/ilasm/src/ILAssembler/gen/CILBaseVisitor.cs index a50bf625bf146b..c63f1eb59ad7f8 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CILBaseVisitor.cs +++ b/src/tools/ilasm/src/ILAssembler/gen/CILBaseVisitor.cs @@ -56,6 +56,16 @@ public partial class CILBaseVisitor : AbstractParseTreeVisitor, /// The visitor result. public virtual Result VisitDottedName([NotNull] CILParser.DottedNameContext context) { return VisitChildren(context); } /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitDottedNamePart([NotNull] CILParser.DottedNamePartContext context) { return VisitChildren(context); } + /// /// Visit a parse tree produced by . /// /// The default implementation returns the result of calling @@ -166,6 +176,16 @@ public partial class CILBaseVisitor : AbstractParseTreeVisitor, /// The visitor result. public virtual Result VisitLanguageDecl([NotNull] CILParser.LanguageDeclContext context) { return VisitChildren(context); } /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitLanguageString([NotNull] CILParser.LanguageStringContext context) { return VisitChildren(context); } + /// /// Visit a parse tree produced by . /// /// The default implementation returns the result of calling @@ -989,6 +1009,26 @@ public partial class CILBaseVisitor : AbstractParseTreeVisitor, /// The visitor result. public virtual Result VisitBound([NotNull] CILParser.BoundContext context) { return VisitChildren(context); } /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNativeInt([NotNull] CILParser.NativeIntContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitNativeUint([NotNull] CILParser.NativeUintContext context) { return VisitChildren(context); } + /// /// Visit a parse tree produced by . /// /// The default implementation returns the result of calling @@ -1689,7 +1729,7 @@ public partial class CILBaseVisitor : AbstractParseTreeVisitor, /// The visitor result. public virtual Result VisitBytes([NotNull] CILParser.BytesContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by . + /// Visit a parse tree produced by . /// /// The default implementation returns the result of calling /// on . @@ -1697,7 +1737,7 @@ public partial class CILBaseVisitor : AbstractParseTreeVisitor, /// /// The parse tree. /// The visitor result. - public virtual Result VisitHexbytes([NotNull] CILParser.HexbytesContext context) { return VisitChildren(context); } + public virtual Result VisitHexbyte([NotNull] CILParser.HexbyteContext context) { return VisitChildren(context); } /// /// Visit a parse tree produced by . /// diff --git a/src/tools/ilasm/src/ILAssembler/gen/CILLexer.cs b/src/tools/ilasm/src/ILAssembler/gen/CILLexer.cs index 3919ccc16fca7b..e95b0b0a47d582 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CILLexer.cs +++ b/src/tools/ilasm/src/ILAssembler/gen/CILLexer.cs @@ -59,30 +59,30 @@ public const int T__149=150, T__150=151, T__151=152, T__152=153, T__153=154, T__154=155, T__155=156, T__156=157, T__157=158, T__158=159, T__159=160, T__160=161, T__161=162, T__162=163, T__163=164, T__164=165, T__165=166, T__166=167, - T__167=168, INT32=169, INT64=170, FLOAT64=171, HEXBYTE=172, DCOLON=173, - ELLIPSIS=174, NULL=175, NULLREF=176, HASH=177, CHAR=178, STRING=179, BOOL=180, - INT8=181, INT16=182, INT32_=183, INT64_=184, FLOAT32=185, FLOAT64_=186, - UINT8=187, UINT16=188, UINT32=189, UINT64=190, INT=191, UINT=192, TYPE=193, - OBJECT=194, MODULE=195, VALUE=196, VALUETYPE=197, VOID=198, ENUM=199, - CUSTOM=200, FIXED=201, SYSSTRING=202, ARRAY=203, VARIANT=204, CURRENCY=205, - SYSCHAR=206, ERROR=207, DECIMAL=208, DATE=209, BSTR=210, LPSTR=211, LPWSTR=212, - LPTSTR=213, OBJECTREF=214, IUNKNOWN=215, IDISPATCH=216, STRUCT=217, INTERFACE=218, - SAFEARRAY=219, NESTEDSTRUCT=220, VARIANTBOOL=221, BYVALSTR=222, ANSI=223, - ANSIBSTR=224, TBSTR=225, METHOD=226, ANY=227, LPSTRUCT=228, VECTOR=229, - HRESULT=230, CARRAY=231, USERDEFINED=232, RECORD=233, FILETIME=234, BLOB=235, - STREAM=236, STORAGE=237, STREAMED_OBJECT=238, STORED_OBJECT=239, BLOB_OBJECT=240, - CF=241, CLSID=242, INSTANCE=243, EXPLICIT=244, DEFAULT=245, VARARG=246, - UNMANAGED=247, CDECL=248, STDCALL=249, THISCALL=250, FASTCALL=251, TYPE_PARAMETER=252, - METHOD_TYPE_PARAMETER=253, TYPEDREF=254, NATIVE_INT=255, NATIVE_UINT=256, - PARAM=257, CONSTRAINT=258, THIS=259, BASE=260, NESTER=261, REF=262, ARRAY_TYPE_NO_BOUNDS=263, - PTR=264, QSTRING=265, SQSTRING=266, DOT=267, PLUS=268, PP_DEFINE=269, - PP_UNDEF=270, PP_IFDEF=271, PP_IFNDEF=272, PP_ELSE=273, PP_ENDIF=274, - PP_INCLUDE=275, MRESOURCE=276, INSTR_NONE=277, INSTR_VAR=278, INSTR_I=279, - INSTR_I8=280, INSTR_R=281, INSTR_METHOD=282, INSTR_SIG=283, INSTR_BRTARGET=284, - INSTR_SWITCH=285, INSTR_TYPE=286, INSTR_STRING=287, INSTR_FIELD=288, INSTR_TOK=289, - DOTTEDNAME=290, ID=291, WS=292, SINGLE_LINE_COMMENT=293, COMMENT=294, - PERMISSION=295, PERMISSIONSET=296, EMITBYTE=297, MAXSTACK=298, ENTRYPOINT=299, - ZEROINIT=300, LOCALS=301, EXPORT=302, OVERRIDE=303, VTENTRY=304; + T__167=168, T__168=169, T__169=170, T__170=171, INT32=172, INT64=173, + FLOAT64=174, DCOLON=175, ELLIPSIS=176, NULL=177, NULLREF=178, HASH=179, + CHAR=180, STRING=181, BOOL=182, INT8=183, INT16=184, INT32_=185, INT64_=186, + FLOAT32=187, FLOAT64_=188, UINT8=189, UINT16=190, UINT32=191, UINT64=192, + INT=193, UINT=194, TYPE=195, OBJECT=196, MODULE=197, VALUE=198, VALUETYPE=199, + VOID=200, ENUM=201, CUSTOM=202, FIXED=203, SYSSTRING=204, ARRAY=205, VARIANT=206, + CURRENCY=207, SYSCHAR=208, ERROR=209, DECIMAL=210, DATE=211, BSTR=212, + LPSTR=213, LPWSTR=214, LPTSTR=215, OBJECTREF=216, IUNKNOWN=217, IDISPATCH=218, + STRUCT=219, INTERFACE=220, SAFEARRAY=221, BYVALSTR=222, ANSI=223, TBSTR=224, + METHOD=225, ANY=226, LPSTRUCT=227, VECTOR=228, HRESULT=229, CARRAY=230, + USERDEFINED=231, RECORD=232, FILETIME=233, BLOB=234, STREAM=235, STORAGE=236, + STREAMED_OBJECT=237, STORED_OBJECT=238, BLOB_OBJECT=239, CF=240, CLSID=241, + INSTANCE=242, EXPLICIT=243, DEFAULT=244, VARARG=245, UNMANAGED=246, CDECL=247, + STDCALL=248, THISCALL=249, FASTCALL=250, TYPE_PARAMETER=251, METHOD_TYPE_PARAMETER=252, + TYPEDREF=253, PARAM=254, CONSTRAINT=255, THIS=256, BASE=257, NESTER=258, + REF=259, ARRAY_TYPE_NO_BOUNDS=260, PTR=261, QSTRING=262, SQSTRING=263, + DOT=264, PLUS=265, PP_DEFINE=266, PP_UNDEF=267, PP_IFDEF=268, PP_IFNDEF=269, + PP_ELSE=270, PP_ENDIF=271, PP_INCLUDE=272, MRESOURCE=273, INSTR_NONE=274, + INSTR_VAR=275, INSTR_I=276, INSTR_I8=277, INSTR_R=278, INSTR_METHOD=279, + INSTR_SIG=280, INSTR_BRTARGET=281, INSTR_SWITCH=282, INSTR_TYPE=283, INSTR_STRING=284, + INSTR_FIELD=285, INSTR_TOK=286, DOTTEDNAME=287, ID=288, HEXBYTE=289, WS=290, + SINGLE_LINE_COMMENT=291, COMMENT=292, PERMISSION=293, PERMISSIONSET=294, + EMITBYTE=295, MAXSTACK=296, ENTRYPOINT=297, ZEROINIT=298, LOCALS=299, + EXPORT=300, OVERRIDE=301, VTENTRY=302; public static string[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -114,28 +114,27 @@ public const int "T__147", "T__148", "T__149", "T__150", "T__151", "T__152", "T__153", "T__154", "T__155", "T__156", "T__157", "T__158", "T__159", "T__160", "T__161", "T__162", "T__163", "T__164", "T__165", "T__166", "T__167", - "INT32", "INT64", "FLOAT64", "HEXBYTE", "DCOLON", "ELLIPSIS", "NULL", - "NULLREF", "HASH", "CHAR", "STRING", "BOOL", "INT8", "INT16", "INT32_", - "INT64_", "FLOAT32", "FLOAT64_", "UNSIGNED", "UINT8", "UINT16", "UINT32", - "UINT64", "INT", "UINT", "TYPE", "OBJECT", "MODULE", "VALUE", "VALUETYPE", - "VOID", "ENUM", "CUSTOM", "FIXED", "SYSSTRING", "ARRAY", "VARIANT", "CURRENCY", - "SYSCHAR", "ERROR", "DECIMAL", "DATE", "BSTR", "LPSTR", "LPWSTR", "LPTSTR", - "OBJECTREF", "IUNKNOWN", "IDISPATCH", "STRUCT", "INTERFACE", "SAFEARRAY", - "NESTEDSTRUCT", "VARIANTBOOL", "BYVALSTR", "ANSI", "ANSIBSTR", "TBSTR", - "METHOD", "ANY", "LPSTRUCT", "VECTOR", "HRESULT", "CARRAY", "USERDEFINED", - "RECORD", "FILETIME", "BLOB", "STREAM", "STORAGE", "STREAMED_OBJECT", - "STORED_OBJECT", "BLOB_OBJECT", "CF", "CLSID", "INSTANCE", "EXPLICIT", - "DEFAULT", "VARARG", "UNMANAGED", "CDECL", "STDCALL", "THISCALL", "FASTCALL", - "TYPE_PARAMETER", "METHOD_TYPE_PARAMETER", "TYPEDREF", "NATIVE_INT", "NATIVE_UINT", - "PARAM", "CONSTRAINT", "THIS", "BASE", "NESTER", "REF", "ARRAY_TYPE_NO_BOUNDS", - "PTR", "QSTRING", "SQSTRING", "DOT", "PLUS", "PP_DEFINE", "PP_UNDEF", + "T__168", "T__169", "T__170", "INT32", "INT64", "FLOAT64", "DCOLON", "ELLIPSIS", + "NULL", "NULLREF", "HASH", "CHAR", "STRING", "BOOL", "INT8", "INT16", + "INT32_", "INT64_", "FLOAT32", "FLOAT64_", "UNSIGNED", "UINT8", "UINT16", + "UINT32", "UINT64", "INT", "UINT", "TYPE", "OBJECT", "MODULE", "VALUE", + "VALUETYPE", "VOID", "ENUM", "CUSTOM", "FIXED", "SYSSTRING", "ARRAY", + "VARIANT", "CURRENCY", "SYSCHAR", "ERROR", "DECIMAL", "DATE", "BSTR", + "LPSTR", "LPWSTR", "LPTSTR", "OBJECTREF", "IUNKNOWN", "IDISPATCH", "STRUCT", + "INTERFACE", "SAFEARRAY", "BYVALSTR", "ANSI", "TBSTR", "METHOD", "ANY", + "LPSTRUCT", "VECTOR", "HRESULT", "CARRAY", "USERDEFINED", "RECORD", "FILETIME", + "BLOB", "STREAM", "STORAGE", "STREAMED_OBJECT", "STORED_OBJECT", "BLOB_OBJECT", + "CF", "CLSID", "INSTANCE", "EXPLICIT", "DEFAULT", "VARARG", "UNMANAGED", + "CDECL", "STDCALL", "THISCALL", "FASTCALL", "TYPE_PARAMETER", "METHOD_TYPE_PARAMETER", + "TYPEDREF", "PARAM", "CONSTRAINT", "THIS", "BASE", "NESTER", "REF", "ARRAY_TYPE_NO_BOUNDS", + "PTR", "ESC_SEQ", "QSTRING", "SQSTRING", "DOT", "PLUS", "PP_DEFINE", "PP_UNDEF", "PP_IFDEF", "PP_IFNDEF", "PP_ELSE", "PP_ENDIF", "PP_INCLUDE", "MRESOURCE", "INSTR_NONE", "INSTR_VAR", "INSTR_I", "INSTR_I8", "INSTR_R", "INSTR_METHOD", "INSTR_SIG", "INSTR_BRTARGET", "INSTR_SWITCH", "INSTR_TYPE", "INSTR_STRING", - "INSTR_FIELD", "INSTR_TOK", "IDSTART", "IDCONT", "DOTTEDNAME", "ID", "WS", - "SINGLE_LINE_COMMENT", "COMMENT", "PERMISSION", "PERMISSIONSET", "EMITBYTE", - "MAXSTACK", "ENTRYPOINT", "ZEROINIT", "LOCALS", "EXPORT", "OVERRIDE", - "VTENTRY" + "INSTR_FIELD", "INSTR_TOK", "IDSTART", "IDCONT", "DOTTEDNAME", "ID", "HEXBYTE", + "WS", "SINGLE_LINE_COMMENT", "COMMENT", "PERMISSION", "PERMISSIONSET", + "EMITBYTE", "MAXSTACK", "ENTRYPOINT", "ZEROINIT", "LOCALS", "EXPORT", + "OVERRIDE", "VTENTRY" }; @@ -163,40 +162,40 @@ public CILLexer(ICharStream input, TextWriter output, TextWriter errorOutput) "'famandassem'", "'famorassem'", "'beforefieldinit'", "'specialname'", "'rtspecialname'", "'flags'", "'extends'", "'implements'", "'.line'", "'#line'", "':'", "'nometadata'", "'retargetable'", "'noplatform'", "'legacy library'", - "'x86'", "'amd64'", "'arm'", "'arm64'", "'bytearray'", "'<'", "'>'", "'()'", - "'/'", "'algorithm'", "'iidparam'", "'pinned'", "'modreq'", "'modopt'", - "'true'", "'false'", "'request'", "'demand'", "'assert'", "'deny'", "'permitonly'", - "'linkcheck'", "'inheritcheck'", "'reqmin'", "'reqopt'", "'reqrefuse'", - "'prejitgrant'", "'prejitdeny'", "'noncasdemand'", "'noncaslinkdemand'", - "'noncasinheritance'", "'callconv'", "'mdtoken'", "'-'", "'byreflike'", - "'.ctor'", "'.size'", "'.pack'", "'with'", "'.interfaceimpl'", "'.field'", - "'marshal'", "'static'", "'initonly'", "'privatescope'", "'literal'", - "'notserialized'", "'.event'", "'.addon'", "'.removeon'", "'.fire'", "'.other'", - "'.property'", "'.set'", "'.get'", "'in'", "'out'", "'opt'", "'.method'", - "'final'", "'virtual'", "'strict'", "'hidebysig'", "'newslot'", "'unmanagedexp'", - "'reqsecobj'", "'pinvokeimpl'", "'nomangle'", "'lasterr'", "'winapi'", - "'bestfit'", "'on'", "'off'", "'charmaperror'", "'.cctor'", "'init'", - "'.try'", "'to'", "'filter'", "'catch'", "'finally'", "'fault'", "'handler'", - "'.data'", "'tls'", "'.publicKey'", "'.ver'", "'.locale'", "'.publickeytoken'", - "'forwarder'", null, null, null, null, "'::'", "'..'", "'null'", "'nullref'", - "'.hash'", "'char'", "'string'", "'bool'", "'int8'", "'int16'", "'int32'", - "'int64'", "'float32'", "'float64'", null, null, null, null, "'int'", - null, "'type'", "'object'", "'.module'", "'value'", "'valuetype'", "'void'", - "'enum'", "'custom'", "'fixed'", "'systring'", "'array'", "'variant'", - "'currency'", "'syschar'", "'error'", "'decimal'", "'date'", "'bstr'", - "'lpstr'", "'lpwstr'", "'lptstr'", "'objectref'", "'iunknown'", "'idispatch'", - "'struct'", "'interface'", "'safearray'", null, null, "'byvalstr'", "'ansi'", - null, "'tbstr'", "'method'", "'any'", "'lpstruct'", "'vector'", "'hresult'", - "'carray'", "'userdefined'", "'record'", "'filetime'", "'blob'", "'stream'", - "'storage'", "'streamed_object'", "'stored_object'", "'blob_object'", - "'cf'", "'clsid'", "'instance'", "'explicit'", "'default'", "'vararg'", - "'unmanaged'", "'cdecl'", "'stdcall'", "'thiscall'", "'fastcall'", "'!'", - null, "'typedref'", null, null, "'.param'", "'constraint'", "'.this'", + "'x86'", "'amd64'", "'arm'", "'arm64'", "'bytearray'", "'()'", "'<'", + "'>'", "'/'", "'algorithm'", "'iidparam'", "'pinned'", "'modreq'", "'modopt'", + "'unsigned'", "'true'", "'false'", "'request'", "'demand'", "'assert'", + "'deny'", "'permitonly'", "'linkcheck'", "'inheritcheck'", "'reqmin'", + "'reqopt'", "'reqrefuse'", "'prejitgrant'", "'prejitdeny'", "'noncasdemand'", + "'noncaslinkdemand'", "'noncasinheritance'", "'callconv'", "'mdtoken'", + "'-'", "'byreflike'", "'.ctor'", "'.size'", "'.pack'", "'with'", "'.interfaceimpl'", + "'.field'", "'marshal'", "'static'", "'initonly'", "'privatescope'", "'literal'", + "'notserialized'", "'volatile'", "'.event'", "'.addon'", "'.removeon'", + "'.fire'", "'.other'", "'.property'", "'.set'", "'.get'", "'in'", "'out'", + "'opt'", "'.method'", "'final'", "'virtual'", "'strict'", "'hidebysig'", + "'newslot'", "'unmanagedexp'", "'reqsecobj'", "'pinvokeimpl'", "'nomangle'", + "'lasterr'", "'winapi'", "'bestfit'", "'on'", "'off'", "'charmaperror'", + "'.cctor'", "'il'", "'init'", "'.try'", "'to'", "'filter'", "'catch'", + "'finally'", "'fault'", "'handler'", "'.data'", "'tls'", "'.publicKey'", + "'.ver'", "'.locale'", "'.publickeytoken'", "'forwarder'", null, null, + null, "'::'", "'...'", "'null'", "'nullref'", "'.hash'", null, "'string'", + "'bool'", "'int8'", "'int16'", "'int32'", "'int64'", "'float32'", "'float64'", + "'uint8'", "'uint16'", "'uint32'", "'uint64'", "'int'", "'uint'", "'type'", + "'object'", "'.module'", "'value'", "'valuetype'", "'void'", "'enum'", + "'custom'", "'fixed'", "'systring'", "'array'", "'variant'", "'currency'", + "'syschar'", "'error'", "'decimal'", "'date'", "'bstr'", "'lpstr'", "'lpwstr'", + "'lptstr'", "'objectref'", "'iunknown'", "'idispatch'", "'struct'", "'interface'", + "'safearray'", "'byvalstr'", "'ansi'", "'tbstr'", "'method'", "'any'", + "'lpstruct'", "'vector'", "'hresult'", "'carray'", "'userdefined'", "'record'", + "'filetime'", "'blob'", "'stream'", "'storage'", "'streamed_object'", + "'stored_object'", "'blob_object'", "'cf'", "'clsid'", "'instance'", "'explicit'", + "'default'", "'vararg'", "'unmanaged'", "'cdecl'", "'stdcall'", "'thiscall'", + "'fastcall'", "'!'", null, null, "'.param'", "'constraint'", "'.this'", "'.base'", "'.nester'", "'&'", null, "'*'", null, null, "'.'", "'+'", "'#define'", "'#undef'", "'#ifdef'", "'#ifndef'", "'#else'", "'#endif'", "'#include'", "'.mresource'", null, null, null, "'ldc.i8'", null, null, "'calli'", null, "'switch'", null, "'ldstr'", null, "'ldtoken'", null, - null, null, null, null, "'.permission'", "'.permissionset'", "'.emitbyte'", + null, null, null, null, null, "'.permission'", "'.permissionset'", "'.emitbyte'", "'.maxstack'", "'.entrypoint'", "'.zeroinit'", "'.locals'", "'.export'", "'.override'", "'.vtentry'" }; @@ -215,25 +214,24 @@ public CILLexer(ICharStream input, TextWriter output, TextWriter errorOutput) null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, "INT32", "INT64", "FLOAT64", "HEXBYTE", "DCOLON", "ELLIPSIS", "NULL", - "NULLREF", "HASH", "CHAR", "STRING", "BOOL", "INT8", "INT16", "INT32_", - "INT64_", "FLOAT32", "FLOAT64_", "UINT8", "UINT16", "UINT32", "UINT64", - "INT", "UINT", "TYPE", "OBJECT", "MODULE", "VALUE", "VALUETYPE", "VOID", - "ENUM", "CUSTOM", "FIXED", "SYSSTRING", "ARRAY", "VARIANT", "CURRENCY", + null, null, null, null, "INT32", "INT64", "FLOAT64", "DCOLON", "ELLIPSIS", + "NULL", "NULLREF", "HASH", "CHAR", "STRING", "BOOL", "INT8", "INT16", + "INT32_", "INT64_", "FLOAT32", "FLOAT64_", "UINT8", "UINT16", "UINT32", + "UINT64", "INT", "UINT", "TYPE", "OBJECT", "MODULE", "VALUE", "VALUETYPE", + "VOID", "ENUM", "CUSTOM", "FIXED", "SYSSTRING", "ARRAY", "VARIANT", "CURRENCY", "SYSCHAR", "ERROR", "DECIMAL", "DATE", "BSTR", "LPSTR", "LPWSTR", "LPTSTR", "OBJECTREF", "IUNKNOWN", "IDISPATCH", "STRUCT", "INTERFACE", "SAFEARRAY", - "NESTEDSTRUCT", "VARIANTBOOL", "BYVALSTR", "ANSI", "ANSIBSTR", "TBSTR", - "METHOD", "ANY", "LPSTRUCT", "VECTOR", "HRESULT", "CARRAY", "USERDEFINED", - "RECORD", "FILETIME", "BLOB", "STREAM", "STORAGE", "STREAMED_OBJECT", - "STORED_OBJECT", "BLOB_OBJECT", "CF", "CLSID", "INSTANCE", "EXPLICIT", - "DEFAULT", "VARARG", "UNMANAGED", "CDECL", "STDCALL", "THISCALL", "FASTCALL", - "TYPE_PARAMETER", "METHOD_TYPE_PARAMETER", "TYPEDREF", "NATIVE_INT", "NATIVE_UINT", - "PARAM", "CONSTRAINT", "THIS", "BASE", "NESTER", "REF", "ARRAY_TYPE_NO_BOUNDS", + "BYVALSTR", "ANSI", "TBSTR", "METHOD", "ANY", "LPSTRUCT", "VECTOR", "HRESULT", + "CARRAY", "USERDEFINED", "RECORD", "FILETIME", "BLOB", "STREAM", "STORAGE", + "STREAMED_OBJECT", "STORED_OBJECT", "BLOB_OBJECT", "CF", "CLSID", "INSTANCE", + "EXPLICIT", "DEFAULT", "VARARG", "UNMANAGED", "CDECL", "STDCALL", "THISCALL", + "FASTCALL", "TYPE_PARAMETER", "METHOD_TYPE_PARAMETER", "TYPEDREF", "PARAM", + "CONSTRAINT", "THIS", "BASE", "NESTER", "REF", "ARRAY_TYPE_NO_BOUNDS", "PTR", "QSTRING", "SQSTRING", "DOT", "PLUS", "PP_DEFINE", "PP_UNDEF", "PP_IFDEF", "PP_IFNDEF", "PP_ELSE", "PP_ENDIF", "PP_INCLUDE", "MRESOURCE", "INSTR_NONE", "INSTR_VAR", "INSTR_I", "INSTR_I8", "INSTR_R", "INSTR_METHOD", "INSTR_SIG", "INSTR_BRTARGET", "INSTR_SWITCH", "INSTR_TYPE", "INSTR_STRING", - "INSTR_FIELD", "INSTR_TOK", "DOTTEDNAME", "ID", "WS", "SINGLE_LINE_COMMENT", + "INSTR_FIELD", "INSTR_TOK", "DOTTEDNAME", "ID", "HEXBYTE", "WS", "SINGLE_LINE_COMMENT", "COMMENT", "PERMISSION", "PERMISSIONSET", "EMITBYTE", "MAXSTACK", "ENTRYPOINT", "ZEROINIT", "LOCALS", "EXPORT", "OVERRIDE", "VTENTRY" }; @@ -265,7 +263,7 @@ static CILLexer() { } } private static int[] _serializedATN = { - 4,0,304,4665,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,0,302,4695,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2, 14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2, 21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2, @@ -313,299 +311,313 @@ static CILLexer() { 7,284,2,285,7,285,2,286,7,286,2,287,7,287,2,288,7,288,2,289,7,289,2,290, 7,290,2,291,7,291,2,292,7,292,2,293,7,293,2,294,7,294,2,295,7,295,2,296, 7,296,2,297,7,297,2,298,7,298,2,299,7,299,2,300,7,300,2,301,7,301,2,302, - 7,302,2,303,7,303,2,304,7,304,2,305,7,305,2,306,7,306,1,0,1,0,1,0,1,0, - 1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5, - 1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1, - 9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, - 1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, - 1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14, - 1,14,1,14,1,14,1,15,1,15,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17, - 1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, - 1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, - 1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22, - 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23, - 1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25, - 1,25,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28, - 1,28,1,29,1,29,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,35, - 1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36, - 1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39, - 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42, - 1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43, - 1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, - 1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45, - 1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47, - 1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48, - 1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50, - 1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52, - 1,52,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54, - 1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55, - 1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57, - 1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58, - 1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59, - 1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61, - 1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63, - 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64, - 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65, - 1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66, - 1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67, - 1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68, - 1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70, - 1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72, - 1,72,1,72,1,72,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75, - 1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77, - 1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78, - 1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,81, - 1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82, - 1,82,1,83,1,83,1,84,1,84,1,85,1,85,1,85,1,86,1,86,1,87,1,87,1,87,1,87, - 1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88, - 1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90, - 1,90,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,93, - 1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95, - 1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97, - 1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98, - 1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100, - 1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101, - 1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102,1,102, - 1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,104,1,104, - 1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105, - 1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,107,1,107, - 1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107, - 1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108, - 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109, - 1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110, - 1,110,1,110,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112, - 1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, - 1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116, - 1,116,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117, - 1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,119, + 7,302,2,303,7,303,2,304,7,304,2,305,7,305,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, + 3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, + 1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1, + 10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1, + 11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1, + 12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1, + 13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, + 14,1,15,1,15,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1, + 17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1, + 19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, + 21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1, + 26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,29,1, + 29,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1, + 32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,35,1,35,1,35,1, + 35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1, + 37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1, + 39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,41,1,41,1,42,1,42,1,42,1,43,1, + 43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44,1, + 44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1, + 44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1, + 45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1, + 48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1, + 50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1, + 52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1, + 54,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1, + 56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,57,1, + 57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1, + 58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1, + 59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1, + 61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1, + 63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1, + 64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1, + 66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1, + 67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1, + 69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1, + 70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1, + 72,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1, + 75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1, + 76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1, + 77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1, + 78,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1, + 81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1, + 83,1,83,1,84,1,84,1,85,1,85,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87,1, + 87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1, + 89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1, + 91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1, + 92,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1, + 95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,97,1, + 97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1, + 99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1, + 100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,101,1,101, + 1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1,102, + 1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104, + 1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106, + 1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107, + 1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108, + 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,109, + 1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109, + 1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112, + 1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114, + 1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,116,1,116, + 1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, 1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,1,120,1,120, - 1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122, - 1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122, + 1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123, 1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124, - 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,125,1,125, - 1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128, - 1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,130, - 1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,131, - 1,131,1,131,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,134,1,134, - 1,134,1,134,1,135,1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,136,1,136, - 1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,138,1,138,1,138,1,138, - 1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,140, - 1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141, - 1,141,1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143, - 1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144, - 1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145, - 1,145,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147, - 1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148, - 1,149,1,149,1,149,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152, - 1,152,1,152,1,152,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154, - 1,154,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,157, - 1,157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,158, - 1,158,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160, - 1,160,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162, - 1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163, - 1,164,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,165,1,165,1,165, - 1,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166, - 1,166,1,166,1,166,1,166,1,166,1,167,1,167,1,167,1,167,1,167,1,167,1,167, - 1,167,1,167,1,167,1,168,3,168,2006,8,168,1,168,1,168,1,168,1,168,4,168, - 2012,8,168,11,168,12,168,2013,1,168,4,168,2017,8,168,11,168,12,168,2018, - 3,168,2021,8,168,1,169,3,169,2024,8,169,1,169,1,169,1,169,1,169,4,169, - 2030,8,169,11,169,12,169,2031,1,169,4,169,2035,8,169,11,169,12,169,2036, - 3,169,2039,8,169,1,170,3,170,2042,8,170,1,170,4,170,2045,8,170,11,170, - 12,170,2046,1,170,1,170,4,170,2051,8,170,11,170,12,170,2052,1,170,1,170, - 3,170,2057,8,170,1,170,4,170,2060,8,170,11,170,12,170,2061,3,170,2064, - 8,170,1,171,1,171,1,171,1,172,1,172,1,172,1,173,1,173,1,173,1,174,1,174, - 1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,176, - 1,176,1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,178,1,178, - 1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,180,1,180, - 1,180,1,180,1,180,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182, - 1,182,1,182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,184,1,184,1,184, - 1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,1,185,1,185,1,185,1,185, - 1,185,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,187,1,187, - 1,187,1,187,1,187,1,187,1,187,1,187,3,187,2167,8,187,1,188,1,188,1,188, - 1,188,1,188,1,188,1,188,1,188,1,188,3,188,2178,8,188,1,189,1,189,1,189, - 1,189,1,189,1,189,1,189,1,189,1,189,3,189,2189,8,189,1,190,1,190,1,190, - 1,190,1,190,1,190,1,190,1,190,1,190,3,190,2200,8,190,1,191,1,191,1,191, - 1,191,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,3,192,2215, - 8,192,1,193,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194,1,194, - 1,194,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,196,1,196,1,196, - 1,196,1,196,1,196,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197, - 1,197,1,198,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,200, - 1,200,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201,1,201,1,201,1,201, - 1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,203,1,203,1,203, - 1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,205, - 1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206, - 1,206,1,206,1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,207,1,208,1,208, - 1,208,1,208,1,208,1,208,1,208,1,208,1,209,1,209,1,209,1,209,1,209,1,210, - 1,210,1,210,1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,211,1,212,1,212, - 1,212,1,212,1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,213,1,213, - 1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,215,1,215, - 1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216,1,216, - 1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217,1,217,1,217,1,217, - 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219, - 1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220, - 1,220,1,220,1,220,1,220,1,220,1,221,1,221,1,221,1,222,1,222,1,222,1,222, - 1,222,1,222,1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,223,1,224,1,224, - 1,224,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226,1,226,1,226, - 1,226,1,226,1,227,1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,228,1,228, - 1,228,1,228,1,228,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,230,1,230, - 1,230,1,230,1,230,1,230,1,230,1,230,1,231,1,231,1,231,1,231,1,231,1,231, - 1,231,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232, - 1,232,1,233,1,233,1,233,1,233,1,233,1,233,1,233,1,234,1,234,1,234,1,234, - 1,234,1,234,1,234,1,234,1,234,1,235,1,235,1,235,1,235,1,235,1,236,1,236, - 1,236,1,236,1,236,1,236,1,236,1,237,1,237,1,237,1,237,1,237,1,237,1,237, - 1,237,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238, - 1,238,1,238,1,238,1,238,1,238,1,239,1,239,1,239,1,239,1,239,1,239,1,239, - 1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,240,1,240,1,240,1,240,1,240, - 1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,241,1,241,1,241,1,242,1,242, - 1,242,1,242,1,242,1,242,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243, - 1,243,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,245,1,245, - 1,245,1,245,1,245,1,245,1,245,1,245,1,246,1,246,1,246,1,246,1,246,1,246, - 1,246,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,248, - 1,248,1,248,1,248,1,248,1,248,1,249,1,249,1,249,1,249,1,249,1,249,1,249, - 1,249,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,251,1,251, - 1,251,1,251,1,251,1,251,1,251,1,251,1,251,1,252,1,252,1,253,1,253,1,253, - 1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,255,1,255,1,255, - 1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,256,1,256,1,256,1,256, - 1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256, - 1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256,1,256, - 1,256,1,256,3,256,2722,8,256,1,257,1,257,1,257,1,257,1,257,1,257,1,257, - 1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,259, - 1,259,1,259,1,259,1,259,1,259,1,260,1,260,1,260,1,260,1,260,1,260,1,261, - 1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,262,1,262,1,263,1,263,1,263, - 1,264,1,264,1,265,1,265,1,265,1,265,5,265,2773,8,265,10,265,12,265,2776, - 9,265,1,265,1,265,1,266,1,266,1,266,1,266,5,266,2784,8,266,10,266,12,266, - 2787,9,266,1,266,1,266,1,267,1,267,1,268,1,268,1,269,1,269,1,269,1,269, - 1,269,1,269,1,269,1,269,1,270,1,270,1,270,1,270,1,270,1,270,1,270,1,271, - 1,271,1,271,1,271,1,271,1,271,1,271,1,272,1,272,1,272,1,272,1,272,1,272, - 1,272,1,272,1,273,1,273,1,273,1,273,1,273,1,273,1,274,1,274,1,274,1,274, - 1,274,1,274,1,274,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, - 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, - 1,277,1,277,1,277,1,277,1,277,1,277,1,277,3,277,4006,8,277,1,278,1,278, - 1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278, - 1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278, - 1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278, - 1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278, - 1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278, - 1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278, - 1,278,1,278,3,278,4084,8,278,1,279,1,279,1,279,1,279,1,279,1,279,1,279, - 1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279, - 1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,3,279,4113,8,279,1,280, - 1,280,1,280,1,280,1,280,1,280,1,280,1,281,1,281,1,281,1,281,1,281,1,281, - 1,281,1,281,1,281,1,281,1,281,1,281,3,281,4134,8,281,1,282,1,282,1,282, + 1,124,1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, + 1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128, + 1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,131, + 1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132, + 1,132,1,132,1,133,1,133,1,133,1,133,1,133,1,134,1,134,1,134,1,134,1,134, + 1,135,1,135,1,135,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,138, + 1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,139, + 1,139,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141, + 1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, + 1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,143,1,144,1,144, + 1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,145, + 1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146, + 1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147, + 1,147,1,147,1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1,148, + 1,148,1,148,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150, + 1,150,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,152,1,152,1,152,1,152, + 1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153,1,153, + 1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,155,1,155,1,155,1,156, + 1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1,157,1,158,1,158,1,158, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160, + 1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162, + 1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,164, + 1,164,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,166,1,166,1,166, + 1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,167,1,167,1,167,1,167, + 1,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169, + 1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169, + 1,169,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,171, + 3,171,2025,8,171,1,171,1,171,1,171,1,171,4,171,2031,8,171,11,171,12,171, + 2032,1,171,4,171,2036,8,171,11,171,12,171,2037,3,171,2040,8,171,1,172, + 3,172,2043,8,172,1,172,1,172,1,172,1,172,4,172,2049,8,172,11,172,12,172, + 2050,1,172,4,172,2054,8,172,11,172,12,172,2055,3,172,2058,8,172,1,173, + 3,173,2061,8,173,1,173,4,173,2064,8,173,11,173,12,173,2065,1,173,1,173, + 4,173,2070,8,173,11,173,12,173,2071,1,173,1,173,3,173,2076,8,173,1,173, + 4,173,2079,8,173,11,173,12,173,2080,3,173,2083,8,173,1,173,1,173,3,173, + 2087,8,173,1,173,4,173,2090,8,173,11,173,12,173,2091,3,173,2094,8,173, + 1,173,1,173,4,173,2098,8,173,11,173,12,173,2099,1,173,1,173,3,173,2104, + 8,173,1,173,4,173,2107,8,173,11,173,12,173,2108,3,173,2111,8,173,3,173, + 2113,8,173,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,176,1,176,1,176, + 1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178, + 1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179, + 1,179,3,179,2150,8,179,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181, + 1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,183,1,183,1,183, + 1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185, + 1,185,1,185,1,185,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,186,1,187, + 1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,188,1,188,1,188,1,188,1,188, + 1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,189,1,189,1,190,1,190, + 1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1,191,1,191,1,191, + 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,194, + 1,194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,196,1,196,1,196, + 1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197, + 1,198,1,198,1,198,1,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,199, + 1,199,1,199,1,199,1,199,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201, + 1,201,1,201,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1,203,1,203,1,203, + 1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204, + 1,205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206,1,206, + 1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,208, + 1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,209,1,209,1,209,1,209,1,209, + 1,209,1,210,1,210,1,210,1,210,1,210,1,210,1,210,1,210,1,211,1,211,1,211, + 1,211,1,211,1,212,1,212,1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213, + 1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,214,1,215,1,215,1,215,1,215, + 1,215,1,215,1,215,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216, + 1,216,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,218,1,218, + 1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219, + 1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,220, + 1,220,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,221,1,222, + 1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,222,1,223,1,223,1,223,1,223, + 1,223,1,224,1,224,1,224,1,224,1,224,1,224,1,225,1,225,1,225,1,225,1,225, + 1,225,1,225,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,1,227, + 1,227,1,227,1,227,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229,1,229, + 1,229,1,229,1,229,1,229,1,229,1,229,1,230,1,230,1,230,1,230,1,230,1,230, + 1,230,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231, + 1,231,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233, + 1,233,1,233,1,233,1,233,1,233,1,234,1,234,1,234,1,234,1,234,1,235,1,235, + 1,235,1,235,1,235,1,235,1,235,1,236,1,236,1,236,1,236,1,236,1,236,1,236, + 1,236,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237, + 1,237,1,237,1,237,1,237,1,237,1,238,1,238,1,238,1,238,1,238,1,238,1,238, + 1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,239,1,239,1,239,1,239,1,239, + 1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,240,1,240,1,240,1,241,1,241, + 1,241,1,241,1,241,1,241,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242, + 1,242,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,244,1,244, + 1,244,1,244,1,244,1,244,1,244,1,244,1,245,1,245,1,245,1,245,1,245,1,245, + 1,245,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,247, + 1,247,1,247,1,247,1,247,1,247,1,248,1,248,1,248,1,248,1,248,1,248,1,248, + 1,248,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,250,1,250, + 1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,251,1,251,1,252,1,252,1,252, + 1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253, + 1,253,1,253,3,253,2702,8,253,1,254,1,254,1,254,1,254,1,254,1,254,1,254, + 1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,256, + 1,256,1,256,1,256,1,256,1,256,1,257,1,257,1,257,1,257,1,257,1,257,1,258, + 1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,259,1,259,1,260,1,260,1,260, + 1,261,1,261,1,262,1,262,1,262,1,262,3,262,2753,8,262,1,262,3,262,2756, + 8,262,1,262,3,262,2759,8,262,1,262,3,262,2762,8,262,1,263,1,263,1,263, + 5,263,2767,8,263,10,263,12,263,2770,9,263,1,263,1,263,1,264,1,264,1,264, + 5,264,2777,8,264,10,264,12,264,2780,9,264,1,264,1,264,1,265,1,265,1,266, + 1,266,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,268,1,268,1,268, + 1,268,1,268,1,268,1,268,1,269,1,269,1,269,1,269,1,269,1,269,1,269,1,270, + 1,270,1,270,1,270,1,270,1,270,1,270,1,270,1,271,1,271,1,271,1,271,1,271, + 1,271,1,272,1,272,1,272,1,272,1,272,1,272,1,272,1,273,1,273,1,273,1,273, + 1,273,1,273,1,273,1,273,1,273,1,274,1,274,1,274,1,274,1,274,1,274,1,274, + 1,274,1,274,1,274,1,274,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275, + 1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,3,275,4033, + 8,275,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276, + 1,276,1,276,1,276,1,276,1,276,3,276,4111,8,276,1,277,1,277,1,277,1,277, + 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277, + 1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,1,277,3,277, + 4140,8,277,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,279,1,279,1,279, + 1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,3,279,4161,8,279, + 1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280, + 1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280, + 1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,3,280, + 4198,8,280,1,281,1,281,1,281,1,281,1,281,1,281,1,282,1,282,1,282,1,282, 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, - 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,3,282,4171,8,282,1,283, - 1,283,1,283,1,283,1,283,1,283,1,284,1,284,1,284,1,284,1,284,1,284,1,284, - 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, - 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, - 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282, + 1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,3,282,4364, + 8,282,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,284,1,284,1,284,1,284, 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, @@ -615,1360 +627,1362 @@ static CILLexer() { 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, 1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284,1,284, - 1,284,1,284,1,284,1,284,1,284,1,284,1,284,3,284,4337,8,284,1,285,1,285, - 1,285,1,285,1,285,1,285,1,285,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, + 1,284,1,284,3,284,4487,8,284,1,285,1,285,1,285,1,285,1,285,1,285,1,286, 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286, - 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,3,286, - 4460,8,286,1,287,1,287,1,287,1,287,1,287,1,287,1,288,1,288,1,288,1,288, - 1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288, - 1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288, - 1,288,1,288,1,288,1,288,1,288,1,288,1,288,3,288,4503,8,288,1,289,1,289, - 1,289,1,289,1,289,1,289,1,289,1,289,1,290,1,290,1,291,1,291,1,292,1,292, - 1,292,4,292,4520,8,292,11,292,12,292,4521,1,292,1,292,1,293,1,293,5,293, - 4528,8,293,10,293,12,293,4531,9,293,1,294,1,294,1,294,1,294,1,295,1,295, - 1,295,1,295,5,295,4541,8,295,10,295,12,295,4544,9,295,1,295,1,295,1,296, - 1,296,1,296,1,296,5,296,4552,8,296,10,296,12,296,4555,9,296,1,296,1,296, - 1,296,1,296,1,296,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297, - 1,297,1,297,1,297,1,298,1,298,1,298,1,298,1,298,1,298,1,298,1,298,1,298, - 1,298,1,298,1,298,1,298,1,298,1,298,1,299,1,299,1,299,1,299,1,299,1,299, - 1,299,1,299,1,299,1,299,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300, - 1,300,1,300,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301,1,301, - 1,301,1,301,1,302,1,302,1,302,1,302,1,302,1,302,1,302,1,302,1,302,1,302, - 1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,304,1,304,1,304,1,304, - 1,304,1,304,1,304,1,304,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305, - 1,305,1,305,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,4553, - 0,307,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13, - 27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25, - 51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37, - 75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49, - 99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119, - 60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139, - 70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159, - 80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179, - 90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199, - 100,201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217, - 109,219,110,221,111,223,112,225,113,227,114,229,115,231,116,233,117,235, - 118,237,119,239,120,241,121,243,122,245,123,247,124,249,125,251,126,253, - 127,255,128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271, - 136,273,137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289, - 145,291,146,293,147,295,148,297,149,299,150,301,151,303,152,305,153,307, - 154,309,155,311,156,313,157,315,158,317,159,319,160,321,161,323,162,325, - 163,327,164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343, - 172,345,173,347,174,349,175,351,176,353,177,355,178,357,179,359,180,361, - 181,363,182,365,183,367,184,369,185,371,186,373,0,375,187,377,188,379, - 189,381,190,383,191,385,192,387,193,389,194,391,195,393,196,395,197,397, - 198,399,199,401,200,403,201,405,202,407,203,409,204,411,205,413,206,415, - 207,417,208,419,209,421,210,423,211,425,212,427,213,429,214,431,215,433, - 216,435,217,437,218,439,219,441,220,443,221,445,222,447,223,449,224,451, - 225,453,226,455,227,457,228,459,229,461,230,463,231,465,232,467,233,469, - 234,471,235,473,236,475,237,477,238,479,239,481,240,483,241,485,242,487, - 243,489,244,491,245,493,246,495,247,497,248,499,249,501,250,503,251,505, - 252,507,253,509,254,511,255,513,256,515,257,517,258,519,259,521,260,523, - 261,525,262,527,263,529,264,531,265,533,266,535,267,537,268,539,269,541, - 270,543,271,545,272,547,273,549,274,551,275,553,276,555,277,557,278,559, - 279,561,280,563,281,565,282,567,283,569,284,571,285,573,286,575,287,577, - 288,579,289,581,0,583,0,585,290,587,291,589,292,591,293,593,294,595,295, - 597,296,599,297,601,298,603,299,605,300,607,301,609,302,611,303,613,304, - 1,0,9,3,0,48,57,65,70,97,102,1,0,48,57,2,0,69,69,101,101,2,0,34,34,92, - 92,2,0,39,39,92,92,4,0,35,36,64,90,95,95,97,122,4,0,35,36,48,57,63,90, - 95,122,3,0,9,10,13,13,32,32,2,0,10,10,13,13,4905,0,1,1,0,0,0,0,3,1,0,0, - 0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1, - 0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0, - 0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37, - 1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0, - 0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59, - 1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0, - 0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81, - 1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0, - 0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0, - 103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0, - 113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0, - 123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0, - 133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0, - 143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0, - 153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0, - 163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0, - 173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0, - 183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0, - 193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0, - 203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0, - 213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0, - 223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0, - 233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0, - 243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0, - 253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0, - 263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0, - 273,1,0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0, - 283,1,0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0, - 293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0, - 303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0, - 313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0, - 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0, - 333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0, - 343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0, - 353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0, - 363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0, - 375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0, - 385,1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0, - 395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0, - 405,1,0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0, - 415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0,0,0,0, - 425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433,1,0,0,0,0, - 435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0,0,443,1,0,0,0,0, - 445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0,0, - 455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0, - 465,1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0, - 475,1,0,0,0,0,477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0, - 485,1,0,0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0, - 495,1,0,0,0,0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0, - 505,1,0,0,0,0,507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0, - 515,1,0,0,0,0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0, - 525,1,0,0,0,0,527,1,0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0,0, - 535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1,0,0,0,0, - 545,1,0,0,0,0,547,1,0,0,0,0,549,1,0,0,0,0,551,1,0,0,0,0,553,1,0,0,0,0, - 555,1,0,0,0,0,557,1,0,0,0,0,559,1,0,0,0,0,561,1,0,0,0,0,563,1,0,0,0,0, - 565,1,0,0,0,0,567,1,0,0,0,0,569,1,0,0,0,0,571,1,0,0,0,0,573,1,0,0,0,0, - 575,1,0,0,0,0,577,1,0,0,0,0,579,1,0,0,0,0,585,1,0,0,0,0,587,1,0,0,0,0, - 589,1,0,0,0,0,591,1,0,0,0,0,593,1,0,0,0,0,595,1,0,0,0,0,597,1,0,0,0,0, - 599,1,0,0,0,0,601,1,0,0,0,0,603,1,0,0,0,0,605,1,0,0,0,0,607,1,0,0,0,0, - 609,1,0,0,0,0,611,1,0,0,0,0,613,1,0,0,0,1,615,1,0,0,0,3,622,1,0,0,0,5, - 626,1,0,0,0,7,632,1,0,0,0,9,640,1,0,0,0,11,651,1,0,0,0,13,663,1,0,0,0, - 15,671,1,0,0,0,17,684,1,0,0,0,19,697,1,0,0,0,21,708,1,0,0,0,23,727,1,0, - 0,0,25,742,1,0,0,0,27,765,1,0,0,0,29,771,1,0,0,0,31,780,1,0,0,0,33,782, - 1,0,0,0,35,784,1,0,0,0,37,795,1,0,0,0,39,805,1,0,0,0,41,811,1,0,0,0,43, - 821,1,0,0,0,45,832,1,0,0,0,47,846,1,0,0,0,49,856,1,0,0,0,51,866,1,0,0, - 0,53,876,1,0,0,0,55,878,1,0,0,0,57,888,1,0,0,0,59,890,1,0,0,0,61,892,1, - 0,0,0,63,894,1,0,0,0,65,903,1,0,0,0,67,906,1,0,0,0,69,914,1,0,0,0,71,916, - 1,0,0,0,73,922,1,0,0,0,75,931,1,0,0,0,77,937,1,0,0,0,79,944,1,0,0,0,81, - 953,1,0,0,0,83,955,1,0,0,0,85,957,1,0,0,0,87,960,1,0,0,0,89,974,1,0,0, - 0,91,990,1,0,0,0,93,1006,1,0,0,0,95,1014,1,0,0,0,97,1025,1,0,0,0,99,1032, - 1,0,0,0,101,1039,1,0,0,0,103,1047,1,0,0,0,105,1054,1,0,0,0,107,1063,1, - 0,0,0,109,1068,1,0,0,0,111,1079,1,0,0,0,113,1087,1,0,0,0,115,1096,1,0, - 0,0,117,1103,1,0,0,0,119,1116,1,0,0,0,121,1131,1,0,0,0,123,1138,1,0,0, - 0,125,1145,1,0,0,0,127,1154,1,0,0,0,129,1166,1,0,0,0,131,1177,1,0,0,0, - 133,1193,1,0,0,0,135,1205,1,0,0,0,137,1219,1,0,0,0,139,1225,1,0,0,0,141, - 1233,1,0,0,0,143,1244,1,0,0,0,145,1250,1,0,0,0,147,1256,1,0,0,0,149,1258, - 1,0,0,0,151,1269,1,0,0,0,153,1282,1,0,0,0,155,1293,1,0,0,0,157,1308,1, - 0,0,0,159,1312,1,0,0,0,161,1318,1,0,0,0,163,1322,1,0,0,0,165,1328,1,0, - 0,0,167,1338,1,0,0,0,169,1340,1,0,0,0,171,1342,1,0,0,0,173,1345,1,0,0, - 0,175,1347,1,0,0,0,177,1357,1,0,0,0,179,1366,1,0,0,0,181,1373,1,0,0,0, - 183,1380,1,0,0,0,185,1387,1,0,0,0,187,1392,1,0,0,0,189,1398,1,0,0,0,191, - 1406,1,0,0,0,193,1413,1,0,0,0,195,1420,1,0,0,0,197,1425,1,0,0,0,199,1436, - 1,0,0,0,201,1446,1,0,0,0,203,1459,1,0,0,0,205,1466,1,0,0,0,207,1473,1, - 0,0,0,209,1483,1,0,0,0,211,1495,1,0,0,0,213,1506,1,0,0,0,215,1519,1,0, - 0,0,217,1536,1,0,0,0,219,1554,1,0,0,0,221,1563,1,0,0,0,223,1571,1,0,0, - 0,225,1573,1,0,0,0,227,1583,1,0,0,0,229,1589,1,0,0,0,231,1595,1,0,0,0, - 233,1601,1,0,0,0,235,1606,1,0,0,0,237,1621,1,0,0,0,239,1628,1,0,0,0,241, - 1636,1,0,0,0,243,1643,1,0,0,0,245,1652,1,0,0,0,247,1665,1,0,0,0,249,1673, - 1,0,0,0,251,1687,1,0,0,0,253,1694,1,0,0,0,255,1701,1,0,0,0,257,1711,1, - 0,0,0,259,1717,1,0,0,0,261,1724,1,0,0,0,263,1734,1,0,0,0,265,1739,1,0, - 0,0,267,1744,1,0,0,0,269,1747,1,0,0,0,271,1751,1,0,0,0,273,1755,1,0,0, - 0,275,1763,1,0,0,0,277,1769,1,0,0,0,279,1777,1,0,0,0,281,1784,1,0,0,0, - 283,1794,1,0,0,0,285,1802,1,0,0,0,287,1815,1,0,0,0,289,1825,1,0,0,0,291, - 1837,1,0,0,0,293,1846,1,0,0,0,295,1854,1,0,0,0,297,1861,1,0,0,0,299,1869, - 1,0,0,0,301,1872,1,0,0,0,303,1876,1,0,0,0,305,1889,1,0,0,0,307,1896,1, - 0,0,0,309,1901,1,0,0,0,311,1906,1,0,0,0,313,1909,1,0,0,0,315,1916,1,0, - 0,0,317,1922,1,0,0,0,319,1930,1,0,0,0,321,1936,1,0,0,0,323,1944,1,0,0, - 0,325,1950,1,0,0,0,327,1954,1,0,0,0,329,1965,1,0,0,0,331,1970,1,0,0,0, - 333,1978,1,0,0,0,335,1994,1,0,0,0,337,2005,1,0,0,0,339,2023,1,0,0,0,341, - 2041,1,0,0,0,343,2065,1,0,0,0,345,2068,1,0,0,0,347,2071,1,0,0,0,349,2074, - 1,0,0,0,351,2079,1,0,0,0,353,2087,1,0,0,0,355,2093,1,0,0,0,357,2098,1, - 0,0,0,359,2105,1,0,0,0,361,2110,1,0,0,0,363,2115,1,0,0,0,365,2121,1,0, - 0,0,367,2127,1,0,0,0,369,2133,1,0,0,0,371,2141,1,0,0,0,373,2149,1,0,0, - 0,375,2166,1,0,0,0,377,2177,1,0,0,0,379,2188,1,0,0,0,381,2199,1,0,0,0, - 383,2201,1,0,0,0,385,2214,1,0,0,0,387,2216,1,0,0,0,389,2221,1,0,0,0,391, - 2228,1,0,0,0,393,2236,1,0,0,0,395,2242,1,0,0,0,397,2252,1,0,0,0,399,2257, - 1,0,0,0,401,2262,1,0,0,0,403,2269,1,0,0,0,405,2275,1,0,0,0,407,2284,1, - 0,0,0,409,2290,1,0,0,0,411,2298,1,0,0,0,413,2307,1,0,0,0,415,2315,1,0, - 0,0,417,2321,1,0,0,0,419,2329,1,0,0,0,421,2334,1,0,0,0,423,2339,1,0,0, - 0,425,2345,1,0,0,0,427,2352,1,0,0,0,429,2359,1,0,0,0,431,2369,1,0,0,0, - 433,2378,1,0,0,0,435,2388,1,0,0,0,437,2395,1,0,0,0,439,2405,1,0,0,0,441, - 2415,1,0,0,0,443,2424,1,0,0,0,445,2427,1,0,0,0,447,2436,1,0,0,0,449,2441, - 1,0,0,0,451,2444,1,0,0,0,453,2450,1,0,0,0,455,2457,1,0,0,0,457,2461,1, - 0,0,0,459,2470,1,0,0,0,461,2477,1,0,0,0,463,2485,1,0,0,0,465,2492,1,0, - 0,0,467,2504,1,0,0,0,469,2511,1,0,0,0,471,2520,1,0,0,0,473,2525,1,0,0, - 0,475,2532,1,0,0,0,477,2540,1,0,0,0,479,2556,1,0,0,0,481,2570,1,0,0,0, - 483,2582,1,0,0,0,485,2585,1,0,0,0,487,2591,1,0,0,0,489,2600,1,0,0,0,491, - 2609,1,0,0,0,493,2617,1,0,0,0,495,2624,1,0,0,0,497,2634,1,0,0,0,499,2640, - 1,0,0,0,501,2648,1,0,0,0,503,2657,1,0,0,0,505,2666,1,0,0,0,507,2668,1, - 0,0,0,509,2671,1,0,0,0,511,2680,1,0,0,0,513,2721,1,0,0,0,515,2723,1,0, - 0,0,517,2730,1,0,0,0,519,2741,1,0,0,0,521,2747,1,0,0,0,523,2753,1,0,0, - 0,525,2761,1,0,0,0,527,2763,1,0,0,0,529,2766,1,0,0,0,531,2768,1,0,0,0, - 533,2779,1,0,0,0,535,2790,1,0,0,0,537,2792,1,0,0,0,539,2794,1,0,0,0,541, - 2802,1,0,0,0,543,2809,1,0,0,0,545,2816,1,0,0,0,547,2824,1,0,0,0,549,2830, - 1,0,0,0,551,2837,1,0,0,0,553,2846,1,0,0,0,555,4005,1,0,0,0,557,4083,1, - 0,0,0,559,4112,1,0,0,0,561,4114,1,0,0,0,563,4133,1,0,0,0,565,4170,1,0, - 0,0,567,4172,1,0,0,0,569,4336,1,0,0,0,571,4338,1,0,0,0,573,4459,1,0,0, - 0,575,4461,1,0,0,0,577,4502,1,0,0,0,579,4504,1,0,0,0,581,4512,1,0,0,0, - 583,4514,1,0,0,0,585,4519,1,0,0,0,587,4525,1,0,0,0,589,4532,1,0,0,0,591, - 4536,1,0,0,0,593,4547,1,0,0,0,595,4561,1,0,0,0,597,4573,1,0,0,0,599,4588, - 1,0,0,0,601,4598,1,0,0,0,603,4608,1,0,0,0,605,4620,1,0,0,0,607,4630,1, - 0,0,0,609,4638,1,0,0,0,611,4646,1,0,0,0,613,4656,1,0,0,0,615,616,5,110, - 0,0,616,617,5,97,0,0,617,618,5,116,0,0,618,619,5,105,0,0,619,620,5,118, - 0,0,620,621,5,101,0,0,621,2,1,0,0,0,622,623,5,99,0,0,623,624,5,105,0,0, - 624,625,5,108,0,0,625,4,1,0,0,0,626,627,5,111,0,0,627,628,5,112,0,0,628, - 629,5,116,0,0,629,630,5,105,0,0,630,631,5,108,0,0,631,6,1,0,0,0,632,633, - 5,109,0,0,633,634,5,97,0,0,634,635,5,110,0,0,635,636,5,97,0,0,636,637, - 5,103,0,0,637,638,5,101,0,0,638,639,5,100,0,0,639,8,1,0,0,0,640,641,5, - 102,0,0,641,642,5,111,0,0,642,643,5,114,0,0,643,644,5,119,0,0,644,645, - 5,97,0,0,645,646,5,114,0,0,646,647,5,100,0,0,647,648,5,114,0,0,648,649, - 5,101,0,0,649,650,5,102,0,0,650,10,1,0,0,0,651,652,5,112,0,0,652,653,5, - 114,0,0,653,654,5,101,0,0,654,655,5,115,0,0,655,656,5,101,0,0,656,657, - 5,114,0,0,657,658,5,118,0,0,658,659,5,101,0,0,659,660,5,115,0,0,660,661, - 5,105,0,0,661,662,5,103,0,0,662,12,1,0,0,0,663,664,5,114,0,0,664,665,5, - 117,0,0,665,666,5,110,0,0,666,667,5,116,0,0,667,668,5,105,0,0,668,669, - 5,109,0,0,669,670,5,101,0,0,670,14,1,0,0,0,671,672,5,105,0,0,672,673,5, - 110,0,0,673,674,5,116,0,0,674,675,5,101,0,0,675,676,5,114,0,0,676,677, - 5,110,0,0,677,678,5,97,0,0,678,679,5,108,0,0,679,680,5,99,0,0,680,681, - 5,97,0,0,681,682,5,108,0,0,682,683,5,108,0,0,683,16,1,0,0,0,684,685,5, - 115,0,0,685,686,5,121,0,0,686,687,5,110,0,0,687,688,5,99,0,0,688,689,5, - 104,0,0,689,690,5,114,0,0,690,691,5,111,0,0,691,692,5,110,0,0,692,693, - 5,105,0,0,693,694,5,122,0,0,694,695,5,101,0,0,695,696,5,100,0,0,696,18, - 1,0,0,0,697,698,5,110,0,0,698,699,5,111,0,0,699,700,5,105,0,0,700,701, - 5,110,0,0,701,702,5,108,0,0,702,703,5,105,0,0,703,704,5,110,0,0,704,705, - 5,105,0,0,705,706,5,110,0,0,706,707,5,103,0,0,707,20,1,0,0,0,708,709,5, - 97,0,0,709,710,5,103,0,0,710,711,5,103,0,0,711,712,5,114,0,0,712,713,5, - 101,0,0,713,714,5,115,0,0,714,715,5,115,0,0,715,716,5,105,0,0,716,717, - 5,118,0,0,717,718,5,101,0,0,718,719,5,105,0,0,719,720,5,110,0,0,720,721, - 5,108,0,0,721,722,5,105,0,0,722,723,5,110,0,0,723,724,5,105,0,0,724,725, - 5,110,0,0,725,726,5,103,0,0,726,22,1,0,0,0,727,728,5,110,0,0,728,729,5, - 111,0,0,729,730,5,111,0,0,730,731,5,112,0,0,731,732,5,116,0,0,732,733, - 5,105,0,0,733,734,5,109,0,0,734,735,5,105,0,0,735,736,5,122,0,0,736,737, - 5,97,0,0,737,738,5,116,0,0,738,739,5,105,0,0,739,740,5,111,0,0,740,741, - 5,110,0,0,741,24,1,0,0,0,742,743,5,97,0,0,743,744,5,103,0,0,744,745,5, - 103,0,0,745,746,5,114,0,0,746,747,5,101,0,0,747,748,5,115,0,0,748,749, - 5,115,0,0,749,750,5,105,0,0,750,751,5,118,0,0,751,752,5,101,0,0,752,753, - 5,111,0,0,753,754,5,112,0,0,754,755,5,116,0,0,755,756,5,105,0,0,756,757, - 5,109,0,0,757,758,5,105,0,0,758,759,5,122,0,0,759,760,5,97,0,0,760,761, - 5,116,0,0,761,762,5,105,0,0,762,763,5,111,0,0,763,764,5,110,0,0,764,26, - 1,0,0,0,765,766,5,97,0,0,766,767,5,115,0,0,767,768,5,121,0,0,768,769,5, - 110,0,0,769,770,5,99,0,0,770,28,1,0,0,0,771,772,5,101,0,0,772,773,5,120, - 0,0,773,774,5,116,0,0,774,775,5,101,0,0,775,776,5,110,0,0,776,777,5,100, - 0,0,777,778,5,101,0,0,778,779,5,100,0,0,779,30,1,0,0,0,780,781,5,123,0, - 0,781,32,1,0,0,0,782,783,5,125,0,0,783,34,1,0,0,0,784,785,5,46,0,0,785, - 786,5,115,0,0,786,787,5,117,0,0,787,788,5,98,0,0,788,789,5,115,0,0,789, - 790,5,121,0,0,790,791,5,115,0,0,791,792,5,116,0,0,792,793,5,101,0,0,793, - 794,5,109,0,0,794,36,1,0,0,0,795,796,5,46,0,0,796,797,5,99,0,0,797,798, - 5,111,0,0,798,799,5,114,0,0,799,800,5,102,0,0,800,801,5,108,0,0,801,802, - 5,97,0,0,802,803,5,103,0,0,803,804,5,115,0,0,804,38,1,0,0,0,805,806,5, - 46,0,0,806,807,5,102,0,0,807,808,5,105,0,0,808,809,5,108,0,0,809,810,5, - 101,0,0,810,40,1,0,0,0,811,812,5,97,0,0,812,813,5,108,0,0,813,814,5,105, - 0,0,814,815,5,103,0,0,815,816,5,110,0,0,816,817,5,109,0,0,817,818,5,101, - 0,0,818,819,5,110,0,0,819,820,5,116,0,0,820,42,1,0,0,0,821,822,5,46,0, - 0,822,823,5,105,0,0,823,824,5,109,0,0,824,825,5,97,0,0,825,826,5,103,0, - 0,826,827,5,101,0,0,827,828,5,98,0,0,828,829,5,97,0,0,829,830,5,115,0, - 0,830,831,5,101,0,0,831,44,1,0,0,0,832,833,5,46,0,0,833,834,5,115,0,0, - 834,835,5,116,0,0,835,836,5,97,0,0,836,837,5,99,0,0,837,838,5,107,0,0, - 838,839,5,114,0,0,839,840,5,101,0,0,840,841,5,115,0,0,841,842,5,101,0, - 0,842,843,5,114,0,0,843,844,5,118,0,0,844,845,5,101,0,0,845,46,1,0,0,0, - 846,847,5,46,0,0,847,848,5,97,0,0,848,849,5,115,0,0,849,850,5,115,0,0, - 850,851,5,101,0,0,851,852,5,109,0,0,852,853,5,98,0,0,853,854,5,108,0,0, - 854,855,5,121,0,0,855,48,1,0,0,0,856,857,5,46,0,0,857,858,5,109,0,0,858, - 859,5,115,0,0,859,860,5,99,0,0,860,861,5,111,0,0,861,862,5,114,0,0,862, - 863,5,108,0,0,863,864,5,105,0,0,864,865,5,98,0,0,865,50,1,0,0,0,866,867, - 5,46,0,0,867,868,5,108,0,0,868,869,5,97,0,0,869,870,5,110,0,0,870,871, - 5,103,0,0,871,872,5,117,0,0,872,873,5,97,0,0,873,874,5,103,0,0,874,875, - 5,101,0,0,875,52,1,0,0,0,876,877,5,44,0,0,877,54,1,0,0,0,878,879,5,46, - 0,0,879,880,5,116,0,0,880,881,5,121,0,0,881,882,5,112,0,0,882,883,5,101, - 0,0,883,884,5,108,0,0,884,885,5,105,0,0,885,886,5,115,0,0,886,887,5,116, - 0,0,887,56,1,0,0,0,888,889,5,40,0,0,889,58,1,0,0,0,890,891,5,41,0,0,891, - 60,1,0,0,0,892,893,5,59,0,0,893,62,1,0,0,0,894,895,5,46,0,0,895,896,5, - 116,0,0,896,897,5,121,0,0,897,898,5,112,0,0,898,899,5,101,0,0,899,900, - 5,100,0,0,900,901,5,101,0,0,901,902,5,102,0,0,902,64,1,0,0,0,903,904,5, - 97,0,0,904,905,5,115,0,0,905,66,1,0,0,0,906,907,5,46,0,0,907,908,5,99, - 0,0,908,909,5,117,0,0,909,910,5,115,0,0,910,911,5,116,0,0,911,912,5,111, - 0,0,912,913,5,109,0,0,913,68,1,0,0,0,914,915,5,61,0,0,915,70,1,0,0,0,916, - 917,5,102,0,0,917,918,5,105,0,0,918,919,5,101,0,0,919,920,5,108,0,0,920, - 921,5,100,0,0,921,72,1,0,0,0,922,923,5,112,0,0,923,924,5,114,0,0,924,925, - 5,111,0,0,925,926,5,112,0,0,926,927,5,101,0,0,927,928,5,114,0,0,928,929, - 5,116,0,0,929,930,5,121,0,0,930,74,1,0,0,0,931,932,5,99,0,0,932,933,5, - 108,0,0,933,934,5,97,0,0,934,935,5,115,0,0,935,936,5,115,0,0,936,76,1, - 0,0,0,937,938,5,101,0,0,938,939,5,120,0,0,939,940,5,116,0,0,940,941,5, - 101,0,0,941,942,5,114,0,0,942,943,5,110,0,0,943,78,1,0,0,0,944,945,5,46, - 0,0,945,946,5,118,0,0,946,947,5,116,0,0,947,948,5,102,0,0,948,949,5,105, - 0,0,949,950,5,120,0,0,950,951,5,117,0,0,951,952,5,112,0,0,952,80,1,0,0, - 0,953,954,5,91,0,0,954,82,1,0,0,0,955,956,5,93,0,0,956,84,1,0,0,0,957, - 958,5,97,0,0,958,959,5,116,0,0,959,86,1,0,0,0,960,961,5,102,0,0,961,962, - 5,114,0,0,962,963,5,111,0,0,963,964,5,109,0,0,964,965,5,117,0,0,965,966, - 5,110,0,0,966,967,5,109,0,0,967,968,5,97,0,0,968,969,5,110,0,0,969,970, - 5,97,0,0,970,971,5,103,0,0,971,972,5,101,0,0,972,973,5,100,0,0,973,88, - 1,0,0,0,974,975,5,99,0,0,975,976,5,97,0,0,976,977,5,108,0,0,977,978,5, - 108,0,0,978,979,5,109,0,0,979,980,5,111,0,0,980,981,5,115,0,0,981,982, - 5,116,0,0,982,983,5,100,0,0,983,984,5,101,0,0,984,985,5,114,0,0,985,986, - 5,105,0,0,986,987,5,118,0,0,987,988,5,101,0,0,988,989,5,100,0,0,989,90, - 1,0,0,0,990,991,5,114,0,0,991,992,5,101,0,0,992,993,5,116,0,0,993,994, - 5,97,0,0,994,995,5,105,0,0,995,996,5,110,0,0,996,997,5,97,0,0,997,998, - 5,112,0,0,998,999,5,112,0,0,999,1000,5,100,0,0,1000,1001,5,111,0,0,1001, - 1002,5,109,0,0,1002,1003,5,97,0,0,1003,1004,5,105,0,0,1004,1005,5,110, - 0,0,1005,92,1,0,0,0,1006,1007,5,46,0,0,1007,1008,5,118,0,0,1008,1009,5, - 116,0,0,1009,1010,5,97,0,0,1010,1011,5,98,0,0,1011,1012,5,108,0,0,1012, - 1013,5,101,0,0,1013,94,1,0,0,0,1014,1015,5,46,0,0,1015,1016,5,110,0,0, - 1016,1017,5,97,0,0,1017,1018,5,109,0,0,1018,1019,5,101,0,0,1019,1020,5, - 115,0,0,1020,1021,5,112,0,0,1021,1022,5,97,0,0,1022,1023,5,99,0,0,1023, - 1024,5,101,0,0,1024,96,1,0,0,0,1025,1026,5,46,0,0,1026,1027,5,99,0,0,1027, - 1028,5,108,0,0,1028,1029,5,97,0,0,1029,1030,5,115,0,0,1030,1031,5,115, - 0,0,1031,98,1,0,0,0,1032,1033,5,112,0,0,1033,1034,5,117,0,0,1034,1035, - 5,98,0,0,1035,1036,5,108,0,0,1036,1037,5,105,0,0,1037,1038,5,99,0,0,1038, - 100,1,0,0,0,1039,1040,5,112,0,0,1040,1041,5,114,0,0,1041,1042,5,105,0, - 0,1042,1043,5,118,0,0,1043,1044,5,97,0,0,1044,1045,5,116,0,0,1045,1046, - 5,101,0,0,1046,102,1,0,0,0,1047,1048,5,115,0,0,1048,1049,5,101,0,0,1049, - 1050,5,97,0,0,1050,1051,5,108,0,0,1051,1052,5,101,0,0,1052,1053,5,100, - 0,0,1053,104,1,0,0,0,1054,1055,5,97,0,0,1055,1056,5,98,0,0,1056,1057,5, - 115,0,0,1057,1058,5,116,0,0,1058,1059,5,114,0,0,1059,1060,5,97,0,0,1060, - 1061,5,99,0,0,1061,1062,5,116,0,0,1062,106,1,0,0,0,1063,1064,5,97,0,0, - 1064,1065,5,117,0,0,1065,1066,5,116,0,0,1066,1067,5,111,0,0,1067,108,1, - 0,0,0,1068,1069,5,115,0,0,1069,1070,5,101,0,0,1070,1071,5,113,0,0,1071, - 1072,5,117,0,0,1072,1073,5,101,0,0,1073,1074,5,110,0,0,1074,1075,5,116, - 0,0,1075,1076,5,105,0,0,1076,1077,5,97,0,0,1077,1078,5,108,0,0,1078,110, - 1,0,0,0,1079,1080,5,117,0,0,1080,1081,5,110,0,0,1081,1082,5,105,0,0,1082, - 1083,5,99,0,0,1083,1084,5,111,0,0,1084,1085,5,100,0,0,1085,1086,5,101, - 0,0,1086,112,1,0,0,0,1087,1088,5,97,0,0,1088,1089,5,117,0,0,1089,1090, - 5,116,0,0,1090,1091,5,111,0,0,1091,1092,5,99,0,0,1092,1093,5,104,0,0,1093, - 1094,5,97,0,0,1094,1095,5,114,0,0,1095,114,1,0,0,0,1096,1097,5,105,0,0, - 1097,1098,5,109,0,0,1098,1099,5,112,0,0,1099,1100,5,111,0,0,1100,1101, - 5,114,0,0,1101,1102,5,116,0,0,1102,116,1,0,0,0,1103,1104,5,115,0,0,1104, - 1105,5,101,0,0,1105,1106,5,114,0,0,1106,1107,5,105,0,0,1107,1108,5,97, - 0,0,1108,1109,5,108,0,0,1109,1110,5,105,0,0,1110,1111,5,122,0,0,1111,1112, - 5,97,0,0,1112,1113,5,98,0,0,1113,1114,5,108,0,0,1114,1115,5,101,0,0,1115, - 118,1,0,0,0,1116,1117,5,119,0,0,1117,1118,5,105,0,0,1118,1119,5,110,0, - 0,1119,1120,5,100,0,0,1120,1121,5,111,0,0,1121,1122,5,119,0,0,1122,1123, - 5,115,0,0,1123,1124,5,114,0,0,1124,1125,5,117,0,0,1125,1126,5,110,0,0, - 1126,1127,5,116,0,0,1127,1128,5,105,0,0,1128,1129,5,109,0,0,1129,1130, - 5,101,0,0,1130,120,1,0,0,0,1131,1132,5,110,0,0,1132,1133,5,101,0,0,1133, - 1134,5,115,0,0,1134,1135,5,116,0,0,1135,1136,5,101,0,0,1136,1137,5,100, - 0,0,1137,122,1,0,0,0,1138,1139,5,102,0,0,1139,1140,5,97,0,0,1140,1141, - 5,109,0,0,1141,1142,5,105,0,0,1142,1143,5,108,0,0,1143,1144,5,121,0,0, - 1144,124,1,0,0,0,1145,1146,5,97,0,0,1146,1147,5,115,0,0,1147,1148,5,115, - 0,0,1148,1149,5,101,0,0,1149,1150,5,109,0,0,1150,1151,5,98,0,0,1151,1152, - 5,108,0,0,1152,1153,5,121,0,0,1153,126,1,0,0,0,1154,1155,5,102,0,0,1155, - 1156,5,97,0,0,1156,1157,5,109,0,0,1157,1158,5,97,0,0,1158,1159,5,110,0, - 0,1159,1160,5,100,0,0,1160,1161,5,97,0,0,1161,1162,5,115,0,0,1162,1163, - 5,115,0,0,1163,1164,5,101,0,0,1164,1165,5,109,0,0,1165,128,1,0,0,0,1166, - 1167,5,102,0,0,1167,1168,5,97,0,0,1168,1169,5,109,0,0,1169,1170,5,111, - 0,0,1170,1171,5,114,0,0,1171,1172,5,97,0,0,1172,1173,5,115,0,0,1173,1174, - 5,115,0,0,1174,1175,5,101,0,0,1175,1176,5,109,0,0,1176,130,1,0,0,0,1177, - 1178,5,98,0,0,1178,1179,5,101,0,0,1179,1180,5,102,0,0,1180,1181,5,111, - 0,0,1181,1182,5,114,0,0,1182,1183,5,101,0,0,1183,1184,5,102,0,0,1184,1185, - 5,105,0,0,1185,1186,5,101,0,0,1186,1187,5,108,0,0,1187,1188,5,100,0,0, - 1188,1189,5,105,0,0,1189,1190,5,110,0,0,1190,1191,5,105,0,0,1191,1192, - 5,116,0,0,1192,132,1,0,0,0,1193,1194,5,115,0,0,1194,1195,5,112,0,0,1195, - 1196,5,101,0,0,1196,1197,5,99,0,0,1197,1198,5,105,0,0,1198,1199,5,97,0, - 0,1199,1200,5,108,0,0,1200,1201,5,110,0,0,1201,1202,5,97,0,0,1202,1203, - 5,109,0,0,1203,1204,5,101,0,0,1204,134,1,0,0,0,1205,1206,5,114,0,0,1206, - 1207,5,116,0,0,1207,1208,5,115,0,0,1208,1209,5,112,0,0,1209,1210,5,101, - 0,0,1210,1211,5,99,0,0,1211,1212,5,105,0,0,1212,1213,5,97,0,0,1213,1214, - 5,108,0,0,1214,1215,5,110,0,0,1215,1216,5,97,0,0,1216,1217,5,109,0,0,1217, - 1218,5,101,0,0,1218,136,1,0,0,0,1219,1220,5,102,0,0,1220,1221,5,108,0, - 0,1221,1222,5,97,0,0,1222,1223,5,103,0,0,1223,1224,5,115,0,0,1224,138, - 1,0,0,0,1225,1226,5,101,0,0,1226,1227,5,120,0,0,1227,1228,5,116,0,0,1228, - 1229,5,101,0,0,1229,1230,5,110,0,0,1230,1231,5,100,0,0,1231,1232,5,115, - 0,0,1232,140,1,0,0,0,1233,1234,5,105,0,0,1234,1235,5,109,0,0,1235,1236, - 5,112,0,0,1236,1237,5,108,0,0,1237,1238,5,101,0,0,1238,1239,5,109,0,0, - 1239,1240,5,101,0,0,1240,1241,5,110,0,0,1241,1242,5,116,0,0,1242,1243, - 5,115,0,0,1243,142,1,0,0,0,1244,1245,5,46,0,0,1245,1246,5,108,0,0,1246, - 1247,5,105,0,0,1247,1248,5,110,0,0,1248,1249,5,101,0,0,1249,144,1,0,0, - 0,1250,1251,5,35,0,0,1251,1252,5,108,0,0,1252,1253,5,105,0,0,1253,1254, - 5,110,0,0,1254,1255,5,101,0,0,1255,146,1,0,0,0,1256,1257,5,58,0,0,1257, - 148,1,0,0,0,1258,1259,5,110,0,0,1259,1260,5,111,0,0,1260,1261,5,109,0, - 0,1261,1262,5,101,0,0,1262,1263,5,116,0,0,1263,1264,5,97,0,0,1264,1265, - 5,100,0,0,1265,1266,5,97,0,0,1266,1267,5,116,0,0,1267,1268,5,97,0,0,1268, - 150,1,0,0,0,1269,1270,5,114,0,0,1270,1271,5,101,0,0,1271,1272,5,116,0, - 0,1272,1273,5,97,0,0,1273,1274,5,114,0,0,1274,1275,5,103,0,0,1275,1276, - 5,101,0,0,1276,1277,5,116,0,0,1277,1278,5,97,0,0,1278,1279,5,98,0,0,1279, - 1280,5,108,0,0,1280,1281,5,101,0,0,1281,152,1,0,0,0,1282,1283,5,110,0, - 0,1283,1284,5,111,0,0,1284,1285,5,112,0,0,1285,1286,5,108,0,0,1286,1287, - 5,97,0,0,1287,1288,5,116,0,0,1288,1289,5,102,0,0,1289,1290,5,111,0,0,1290, - 1291,5,114,0,0,1291,1292,5,109,0,0,1292,154,1,0,0,0,1293,1294,5,108,0, - 0,1294,1295,5,101,0,0,1295,1296,5,103,0,0,1296,1297,5,97,0,0,1297,1298, - 5,99,0,0,1298,1299,5,121,0,0,1299,1300,5,32,0,0,1300,1301,5,108,0,0,1301, - 1302,5,105,0,0,1302,1303,5,98,0,0,1303,1304,5,114,0,0,1304,1305,5,97,0, - 0,1305,1306,5,114,0,0,1306,1307,5,121,0,0,1307,156,1,0,0,0,1308,1309,5, - 120,0,0,1309,1310,5,56,0,0,1310,1311,5,54,0,0,1311,158,1,0,0,0,1312,1313, - 5,97,0,0,1313,1314,5,109,0,0,1314,1315,5,100,0,0,1315,1316,5,54,0,0,1316, - 1317,5,52,0,0,1317,160,1,0,0,0,1318,1319,5,97,0,0,1319,1320,5,114,0,0, - 1320,1321,5,109,0,0,1321,162,1,0,0,0,1322,1323,5,97,0,0,1323,1324,5,114, - 0,0,1324,1325,5,109,0,0,1325,1326,5,54,0,0,1326,1327,5,52,0,0,1327,164, - 1,0,0,0,1328,1329,5,98,0,0,1329,1330,5,121,0,0,1330,1331,5,116,0,0,1331, - 1332,5,101,0,0,1332,1333,5,97,0,0,1333,1334,5,114,0,0,1334,1335,5,114, - 0,0,1335,1336,5,97,0,0,1336,1337,5,121,0,0,1337,166,1,0,0,0,1338,1339, - 5,60,0,0,1339,168,1,0,0,0,1340,1341,5,62,0,0,1341,170,1,0,0,0,1342,1343, - 5,40,0,0,1343,1344,5,41,0,0,1344,172,1,0,0,0,1345,1346,5,47,0,0,1346,174, - 1,0,0,0,1347,1348,5,97,0,0,1348,1349,5,108,0,0,1349,1350,5,103,0,0,1350, - 1351,5,111,0,0,1351,1352,5,114,0,0,1352,1353,5,105,0,0,1353,1354,5,116, - 0,0,1354,1355,5,104,0,0,1355,1356,5,109,0,0,1356,176,1,0,0,0,1357,1358, - 5,105,0,0,1358,1359,5,105,0,0,1359,1360,5,100,0,0,1360,1361,5,112,0,0, - 1361,1362,5,97,0,0,1362,1363,5,114,0,0,1363,1364,5,97,0,0,1364,1365,5, - 109,0,0,1365,178,1,0,0,0,1366,1367,5,112,0,0,1367,1368,5,105,0,0,1368, - 1369,5,110,0,0,1369,1370,5,110,0,0,1370,1371,5,101,0,0,1371,1372,5,100, - 0,0,1372,180,1,0,0,0,1373,1374,5,109,0,0,1374,1375,5,111,0,0,1375,1376, - 5,100,0,0,1376,1377,5,114,0,0,1377,1378,5,101,0,0,1378,1379,5,113,0,0, - 1379,182,1,0,0,0,1380,1381,5,109,0,0,1381,1382,5,111,0,0,1382,1383,5,100, - 0,0,1383,1384,5,111,0,0,1384,1385,5,112,0,0,1385,1386,5,116,0,0,1386,184, - 1,0,0,0,1387,1388,5,116,0,0,1388,1389,5,114,0,0,1389,1390,5,117,0,0,1390, - 1391,5,101,0,0,1391,186,1,0,0,0,1392,1393,5,102,0,0,1393,1394,5,97,0,0, - 1394,1395,5,108,0,0,1395,1396,5,115,0,0,1396,1397,5,101,0,0,1397,188,1, - 0,0,0,1398,1399,5,114,0,0,1399,1400,5,101,0,0,1400,1401,5,113,0,0,1401, - 1402,5,117,0,0,1402,1403,5,101,0,0,1403,1404,5,115,0,0,1404,1405,5,116, - 0,0,1405,190,1,0,0,0,1406,1407,5,100,0,0,1407,1408,5,101,0,0,1408,1409, - 5,109,0,0,1409,1410,5,97,0,0,1410,1411,5,110,0,0,1411,1412,5,100,0,0,1412, - 192,1,0,0,0,1413,1414,5,97,0,0,1414,1415,5,115,0,0,1415,1416,5,115,0,0, - 1416,1417,5,101,0,0,1417,1418,5,114,0,0,1418,1419,5,116,0,0,1419,194,1, - 0,0,0,1420,1421,5,100,0,0,1421,1422,5,101,0,0,1422,1423,5,110,0,0,1423, - 1424,5,121,0,0,1424,196,1,0,0,0,1425,1426,5,112,0,0,1426,1427,5,101,0, - 0,1427,1428,5,114,0,0,1428,1429,5,109,0,0,1429,1430,5,105,0,0,1430,1431, - 5,116,0,0,1431,1432,5,111,0,0,1432,1433,5,110,0,0,1433,1434,5,108,0,0, - 1434,1435,5,121,0,0,1435,198,1,0,0,0,1436,1437,5,108,0,0,1437,1438,5,105, - 0,0,1438,1439,5,110,0,0,1439,1440,5,107,0,0,1440,1441,5,99,0,0,1441,1442, - 5,104,0,0,1442,1443,5,101,0,0,1443,1444,5,99,0,0,1444,1445,5,107,0,0,1445, - 200,1,0,0,0,1446,1447,5,105,0,0,1447,1448,5,110,0,0,1448,1449,5,104,0, - 0,1449,1450,5,101,0,0,1450,1451,5,114,0,0,1451,1452,5,105,0,0,1452,1453, - 5,116,0,0,1453,1454,5,99,0,0,1454,1455,5,104,0,0,1455,1456,5,101,0,0,1456, - 1457,5,99,0,0,1457,1458,5,107,0,0,1458,202,1,0,0,0,1459,1460,5,114,0,0, - 1460,1461,5,101,0,0,1461,1462,5,113,0,0,1462,1463,5,109,0,0,1463,1464, - 5,105,0,0,1464,1465,5,110,0,0,1465,204,1,0,0,0,1466,1467,5,114,0,0,1467, - 1468,5,101,0,0,1468,1469,5,113,0,0,1469,1470,5,111,0,0,1470,1471,5,112, - 0,0,1471,1472,5,116,0,0,1472,206,1,0,0,0,1473,1474,5,114,0,0,1474,1475, - 5,101,0,0,1475,1476,5,113,0,0,1476,1477,5,114,0,0,1477,1478,5,101,0,0, - 1478,1479,5,102,0,0,1479,1480,5,117,0,0,1480,1481,5,115,0,0,1481,1482, - 5,101,0,0,1482,208,1,0,0,0,1483,1484,5,112,0,0,1484,1485,5,114,0,0,1485, - 1486,5,101,0,0,1486,1487,5,106,0,0,1487,1488,5,105,0,0,1488,1489,5,116, - 0,0,1489,1490,5,103,0,0,1490,1491,5,114,0,0,1491,1492,5,97,0,0,1492,1493, - 5,110,0,0,1493,1494,5,116,0,0,1494,210,1,0,0,0,1495,1496,5,112,0,0,1496, - 1497,5,114,0,0,1497,1498,5,101,0,0,1498,1499,5,106,0,0,1499,1500,5,105, - 0,0,1500,1501,5,116,0,0,1501,1502,5,100,0,0,1502,1503,5,101,0,0,1503,1504, - 5,110,0,0,1504,1505,5,121,0,0,1505,212,1,0,0,0,1506,1507,5,110,0,0,1507, - 1508,5,111,0,0,1508,1509,5,110,0,0,1509,1510,5,99,0,0,1510,1511,5,97,0, - 0,1511,1512,5,115,0,0,1512,1513,5,100,0,0,1513,1514,5,101,0,0,1514,1515, - 5,109,0,0,1515,1516,5,97,0,0,1516,1517,5,110,0,0,1517,1518,5,100,0,0,1518, - 214,1,0,0,0,1519,1520,5,110,0,0,1520,1521,5,111,0,0,1521,1522,5,110,0, - 0,1522,1523,5,99,0,0,1523,1524,5,97,0,0,1524,1525,5,115,0,0,1525,1526, - 5,108,0,0,1526,1527,5,105,0,0,1527,1528,5,110,0,0,1528,1529,5,107,0,0, - 1529,1530,5,100,0,0,1530,1531,5,101,0,0,1531,1532,5,109,0,0,1532,1533, - 5,97,0,0,1533,1534,5,110,0,0,1534,1535,5,100,0,0,1535,216,1,0,0,0,1536, - 1537,5,110,0,0,1537,1538,5,111,0,0,1538,1539,5,110,0,0,1539,1540,5,99, - 0,0,1540,1541,5,97,0,0,1541,1542,5,115,0,0,1542,1543,5,105,0,0,1543,1544, - 5,110,0,0,1544,1545,5,104,0,0,1545,1546,5,101,0,0,1546,1547,5,114,0,0, - 1547,1548,5,105,0,0,1548,1549,5,116,0,0,1549,1550,5,97,0,0,1550,1551,5, - 110,0,0,1551,1552,5,99,0,0,1552,1553,5,101,0,0,1553,218,1,0,0,0,1554,1555, - 5,99,0,0,1555,1556,5,97,0,0,1556,1557,5,108,0,0,1557,1558,5,108,0,0,1558, - 1559,5,99,0,0,1559,1560,5,111,0,0,1560,1561,5,110,0,0,1561,1562,5,118, - 0,0,1562,220,1,0,0,0,1563,1564,5,109,0,0,1564,1565,5,100,0,0,1565,1566, - 5,116,0,0,1566,1567,5,111,0,0,1567,1568,5,107,0,0,1568,1569,5,101,0,0, - 1569,1570,5,110,0,0,1570,222,1,0,0,0,1571,1572,5,45,0,0,1572,224,1,0,0, - 0,1573,1574,5,98,0,0,1574,1575,5,121,0,0,1575,1576,5,114,0,0,1576,1577, - 5,101,0,0,1577,1578,5,102,0,0,1578,1579,5,108,0,0,1579,1580,5,105,0,0, - 1580,1581,5,107,0,0,1581,1582,5,101,0,0,1582,226,1,0,0,0,1583,1584,5,46, - 0,0,1584,1585,5,99,0,0,1585,1586,5,116,0,0,1586,1587,5,111,0,0,1587,1588, - 5,114,0,0,1588,228,1,0,0,0,1589,1590,5,46,0,0,1590,1591,5,115,0,0,1591, - 1592,5,105,0,0,1592,1593,5,122,0,0,1593,1594,5,101,0,0,1594,230,1,0,0, - 0,1595,1596,5,46,0,0,1596,1597,5,112,0,0,1597,1598,5,97,0,0,1598,1599, - 5,99,0,0,1599,1600,5,107,0,0,1600,232,1,0,0,0,1601,1602,5,119,0,0,1602, - 1603,5,105,0,0,1603,1604,5,116,0,0,1604,1605,5,104,0,0,1605,234,1,0,0, - 0,1606,1607,5,46,0,0,1607,1608,5,105,0,0,1608,1609,5,110,0,0,1609,1610, - 5,116,0,0,1610,1611,5,101,0,0,1611,1612,5,114,0,0,1612,1613,5,102,0,0, - 1613,1614,5,97,0,0,1614,1615,5,99,0,0,1615,1616,5,101,0,0,1616,1617,5, - 105,0,0,1617,1618,5,109,0,0,1618,1619,5,112,0,0,1619,1620,5,108,0,0,1620, - 236,1,0,0,0,1621,1622,5,46,0,0,1622,1623,5,102,0,0,1623,1624,5,105,0,0, - 1624,1625,5,101,0,0,1625,1626,5,108,0,0,1626,1627,5,100,0,0,1627,238,1, - 0,0,0,1628,1629,5,109,0,0,1629,1630,5,97,0,0,1630,1631,5,114,0,0,1631, - 1632,5,115,0,0,1632,1633,5,104,0,0,1633,1634,5,97,0,0,1634,1635,5,108, - 0,0,1635,240,1,0,0,0,1636,1637,5,115,0,0,1637,1638,5,116,0,0,1638,1639, - 5,97,0,0,1639,1640,5,116,0,0,1640,1641,5,105,0,0,1641,1642,5,99,0,0,1642, - 242,1,0,0,0,1643,1644,5,105,0,0,1644,1645,5,110,0,0,1645,1646,5,105,0, - 0,1646,1647,5,116,0,0,1647,1648,5,111,0,0,1648,1649,5,110,0,0,1649,1650, - 5,108,0,0,1650,1651,5,121,0,0,1651,244,1,0,0,0,1652,1653,5,112,0,0,1653, - 1654,5,114,0,0,1654,1655,5,105,0,0,1655,1656,5,118,0,0,1656,1657,5,97, - 0,0,1657,1658,5,116,0,0,1658,1659,5,101,0,0,1659,1660,5,115,0,0,1660,1661, - 5,99,0,0,1661,1662,5,111,0,0,1662,1663,5,112,0,0,1663,1664,5,101,0,0,1664, - 246,1,0,0,0,1665,1666,5,108,0,0,1666,1667,5,105,0,0,1667,1668,5,116,0, - 0,1668,1669,5,101,0,0,1669,1670,5,114,0,0,1670,1671,5,97,0,0,1671,1672, - 5,108,0,0,1672,248,1,0,0,0,1673,1674,5,110,0,0,1674,1675,5,111,0,0,1675, - 1676,5,116,0,0,1676,1677,5,115,0,0,1677,1678,5,101,0,0,1678,1679,5,114, - 0,0,1679,1680,5,105,0,0,1680,1681,5,97,0,0,1681,1682,5,108,0,0,1682,1683, - 5,105,0,0,1683,1684,5,122,0,0,1684,1685,5,101,0,0,1685,1686,5,100,0,0, - 1686,250,1,0,0,0,1687,1688,5,46,0,0,1688,1689,5,101,0,0,1689,1690,5,118, - 0,0,1690,1691,5,101,0,0,1691,1692,5,110,0,0,1692,1693,5,116,0,0,1693,252, - 1,0,0,0,1694,1695,5,46,0,0,1695,1696,5,97,0,0,1696,1697,5,100,0,0,1697, - 1698,5,100,0,0,1698,1699,5,111,0,0,1699,1700,5,110,0,0,1700,254,1,0,0, - 0,1701,1702,5,46,0,0,1702,1703,5,114,0,0,1703,1704,5,101,0,0,1704,1705, - 5,109,0,0,1705,1706,5,111,0,0,1706,1707,5,118,0,0,1707,1708,5,101,0,0, - 1708,1709,5,111,0,0,1709,1710,5,110,0,0,1710,256,1,0,0,0,1711,1712,5,46, - 0,0,1712,1713,5,102,0,0,1713,1714,5,105,0,0,1714,1715,5,114,0,0,1715,1716, - 5,101,0,0,1716,258,1,0,0,0,1717,1718,5,46,0,0,1718,1719,5,111,0,0,1719, - 1720,5,116,0,0,1720,1721,5,104,0,0,1721,1722,5,101,0,0,1722,1723,5,114, - 0,0,1723,260,1,0,0,0,1724,1725,5,46,0,0,1725,1726,5,112,0,0,1726,1727, - 5,114,0,0,1727,1728,5,111,0,0,1728,1729,5,112,0,0,1729,1730,5,101,0,0, - 1730,1731,5,114,0,0,1731,1732,5,116,0,0,1732,1733,5,121,0,0,1733,262,1, - 0,0,0,1734,1735,5,46,0,0,1735,1736,5,115,0,0,1736,1737,5,101,0,0,1737, - 1738,5,116,0,0,1738,264,1,0,0,0,1739,1740,5,46,0,0,1740,1741,5,103,0,0, - 1741,1742,5,101,0,0,1742,1743,5,116,0,0,1743,266,1,0,0,0,1744,1745,5,105, - 0,0,1745,1746,5,110,0,0,1746,268,1,0,0,0,1747,1748,5,111,0,0,1748,1749, - 5,117,0,0,1749,1750,5,116,0,0,1750,270,1,0,0,0,1751,1752,5,111,0,0,1752, - 1753,5,112,0,0,1753,1754,5,116,0,0,1754,272,1,0,0,0,1755,1756,5,46,0,0, - 1756,1757,5,109,0,0,1757,1758,5,101,0,0,1758,1759,5,116,0,0,1759,1760, - 5,104,0,0,1760,1761,5,111,0,0,1761,1762,5,100,0,0,1762,274,1,0,0,0,1763, - 1764,5,102,0,0,1764,1765,5,105,0,0,1765,1766,5,110,0,0,1766,1767,5,97, - 0,0,1767,1768,5,108,0,0,1768,276,1,0,0,0,1769,1770,5,118,0,0,1770,1771, - 5,105,0,0,1771,1772,5,114,0,0,1772,1773,5,116,0,0,1773,1774,5,117,0,0, - 1774,1775,5,97,0,0,1775,1776,5,108,0,0,1776,278,1,0,0,0,1777,1778,5,115, - 0,0,1778,1779,5,116,0,0,1779,1780,5,114,0,0,1780,1781,5,105,0,0,1781,1782, - 5,99,0,0,1782,1783,5,116,0,0,1783,280,1,0,0,0,1784,1785,5,104,0,0,1785, - 1786,5,105,0,0,1786,1787,5,100,0,0,1787,1788,5,101,0,0,1788,1789,5,98, - 0,0,1789,1790,5,121,0,0,1790,1791,5,115,0,0,1791,1792,5,105,0,0,1792,1793, - 5,103,0,0,1793,282,1,0,0,0,1794,1795,5,110,0,0,1795,1796,5,101,0,0,1796, - 1797,5,119,0,0,1797,1798,5,115,0,0,1798,1799,5,108,0,0,1799,1800,5,111, - 0,0,1800,1801,5,116,0,0,1801,284,1,0,0,0,1802,1803,5,117,0,0,1803,1804, - 5,110,0,0,1804,1805,5,109,0,0,1805,1806,5,97,0,0,1806,1807,5,110,0,0,1807, - 1808,5,97,0,0,1808,1809,5,103,0,0,1809,1810,5,101,0,0,1810,1811,5,100, - 0,0,1811,1812,5,101,0,0,1812,1813,5,120,0,0,1813,1814,5,112,0,0,1814,286, - 1,0,0,0,1815,1816,5,114,0,0,1816,1817,5,101,0,0,1817,1818,5,113,0,0,1818, - 1819,5,115,0,0,1819,1820,5,101,0,0,1820,1821,5,99,0,0,1821,1822,5,111, - 0,0,1822,1823,5,98,0,0,1823,1824,5,106,0,0,1824,288,1,0,0,0,1825,1826, - 5,112,0,0,1826,1827,5,105,0,0,1827,1828,5,110,0,0,1828,1829,5,118,0,0, - 1829,1830,5,111,0,0,1830,1831,5,107,0,0,1831,1832,5,101,0,0,1832,1833, - 5,105,0,0,1833,1834,5,109,0,0,1834,1835,5,112,0,0,1835,1836,5,108,0,0, - 1836,290,1,0,0,0,1837,1838,5,110,0,0,1838,1839,5,111,0,0,1839,1840,5,109, - 0,0,1840,1841,5,97,0,0,1841,1842,5,110,0,0,1842,1843,5,103,0,0,1843,1844, - 5,108,0,0,1844,1845,5,101,0,0,1845,292,1,0,0,0,1846,1847,5,108,0,0,1847, - 1848,5,97,0,0,1848,1849,5,115,0,0,1849,1850,5,116,0,0,1850,1851,5,101, - 0,0,1851,1852,5,114,0,0,1852,1853,5,114,0,0,1853,294,1,0,0,0,1854,1855, - 5,119,0,0,1855,1856,5,105,0,0,1856,1857,5,110,0,0,1857,1858,5,97,0,0,1858, - 1859,5,112,0,0,1859,1860,5,105,0,0,1860,296,1,0,0,0,1861,1862,5,98,0,0, - 1862,1863,5,101,0,0,1863,1864,5,115,0,0,1864,1865,5,116,0,0,1865,1866, - 5,102,0,0,1866,1867,5,105,0,0,1867,1868,5,116,0,0,1868,298,1,0,0,0,1869, - 1870,5,111,0,0,1870,1871,5,110,0,0,1871,300,1,0,0,0,1872,1873,5,111,0, - 0,1873,1874,5,102,0,0,1874,1875,5,102,0,0,1875,302,1,0,0,0,1876,1877,5, - 99,0,0,1877,1878,5,104,0,0,1878,1879,5,97,0,0,1879,1880,5,114,0,0,1880, - 1881,5,109,0,0,1881,1882,5,97,0,0,1882,1883,5,112,0,0,1883,1884,5,101, - 0,0,1884,1885,5,114,0,0,1885,1886,5,114,0,0,1886,1887,5,111,0,0,1887,1888, - 5,114,0,0,1888,304,1,0,0,0,1889,1890,5,46,0,0,1890,1891,5,99,0,0,1891, - 1892,5,99,0,0,1892,1893,5,116,0,0,1893,1894,5,111,0,0,1894,1895,5,114, - 0,0,1895,306,1,0,0,0,1896,1897,5,105,0,0,1897,1898,5,110,0,0,1898,1899, - 5,105,0,0,1899,1900,5,116,0,0,1900,308,1,0,0,0,1901,1902,5,46,0,0,1902, - 1903,5,116,0,0,1903,1904,5,114,0,0,1904,1905,5,121,0,0,1905,310,1,0,0, - 0,1906,1907,5,116,0,0,1907,1908,5,111,0,0,1908,312,1,0,0,0,1909,1910,5, - 102,0,0,1910,1911,5,105,0,0,1911,1912,5,108,0,0,1912,1913,5,116,0,0,1913, - 1914,5,101,0,0,1914,1915,5,114,0,0,1915,314,1,0,0,0,1916,1917,5,99,0,0, - 1917,1918,5,97,0,0,1918,1919,5,116,0,0,1919,1920,5,99,0,0,1920,1921,5, - 104,0,0,1921,316,1,0,0,0,1922,1923,5,102,0,0,1923,1924,5,105,0,0,1924, - 1925,5,110,0,0,1925,1926,5,97,0,0,1926,1927,5,108,0,0,1927,1928,5,108, - 0,0,1928,1929,5,121,0,0,1929,318,1,0,0,0,1930,1931,5,102,0,0,1931,1932, - 5,97,0,0,1932,1933,5,117,0,0,1933,1934,5,108,0,0,1934,1935,5,116,0,0,1935, - 320,1,0,0,0,1936,1937,5,104,0,0,1937,1938,5,97,0,0,1938,1939,5,110,0,0, - 1939,1940,5,100,0,0,1940,1941,5,108,0,0,1941,1942,5,101,0,0,1942,1943, - 5,114,0,0,1943,322,1,0,0,0,1944,1945,5,46,0,0,1945,1946,5,100,0,0,1946, - 1947,5,97,0,0,1947,1948,5,116,0,0,1948,1949,5,97,0,0,1949,324,1,0,0,0, - 1950,1951,5,116,0,0,1951,1952,5,108,0,0,1952,1953,5,115,0,0,1953,326,1, - 0,0,0,1954,1955,5,46,0,0,1955,1956,5,112,0,0,1956,1957,5,117,0,0,1957, - 1958,5,98,0,0,1958,1959,5,108,0,0,1959,1960,5,105,0,0,1960,1961,5,99,0, - 0,1961,1962,5,75,0,0,1962,1963,5,101,0,0,1963,1964,5,121,0,0,1964,328, - 1,0,0,0,1965,1966,5,46,0,0,1966,1967,5,118,0,0,1967,1968,5,101,0,0,1968, - 1969,5,114,0,0,1969,330,1,0,0,0,1970,1971,5,46,0,0,1971,1972,5,108,0,0, - 1972,1973,5,111,0,0,1973,1974,5,99,0,0,1974,1975,5,97,0,0,1975,1976,5, - 108,0,0,1976,1977,5,101,0,0,1977,332,1,0,0,0,1978,1979,5,46,0,0,1979,1980, - 5,112,0,0,1980,1981,5,117,0,0,1981,1982,5,98,0,0,1982,1983,5,108,0,0,1983, - 1984,5,105,0,0,1984,1985,5,99,0,0,1985,1986,5,107,0,0,1986,1987,5,101, - 0,0,1987,1988,5,121,0,0,1988,1989,5,116,0,0,1989,1990,5,111,0,0,1990,1991, - 5,107,0,0,1991,1992,5,101,0,0,1992,1993,5,110,0,0,1993,334,1,0,0,0,1994, - 1995,5,102,0,0,1995,1996,5,111,0,0,1996,1997,5,114,0,0,1997,1998,5,119, - 0,0,1998,1999,5,97,0,0,1999,2000,5,114,0,0,2000,2001,5,100,0,0,2001,2002, - 5,101,0,0,2002,2003,5,114,0,0,2003,336,1,0,0,0,2004,2006,5,45,0,0,2005, - 2004,1,0,0,0,2005,2006,1,0,0,0,2006,2020,1,0,0,0,2007,2008,5,48,0,0,2008, - 2009,5,120,0,0,2009,2011,1,0,0,0,2010,2012,7,0,0,0,2011,2010,1,0,0,0,2012, - 2013,1,0,0,0,2013,2011,1,0,0,0,2013,2014,1,0,0,0,2014,2021,1,0,0,0,2015, - 2017,7,1,0,0,2016,2015,1,0,0,0,2017,2018,1,0,0,0,2018,2016,1,0,0,0,2018, - 2019,1,0,0,0,2019,2021,1,0,0,0,2020,2007,1,0,0,0,2020,2016,1,0,0,0,2021, - 338,1,0,0,0,2022,2024,5,45,0,0,2023,2022,1,0,0,0,2023,2024,1,0,0,0,2024, - 2038,1,0,0,0,2025,2026,5,48,0,0,2026,2027,5,120,0,0,2027,2029,1,0,0,0, - 2028,2030,7,0,0,0,2029,2028,1,0,0,0,2030,2031,1,0,0,0,2031,2029,1,0,0, - 0,2031,2032,1,0,0,0,2032,2039,1,0,0,0,2033,2035,7,1,0,0,2034,2033,1,0, - 0,0,2035,2036,1,0,0,0,2036,2034,1,0,0,0,2036,2037,1,0,0,0,2037,2039,1, - 0,0,0,2038,2025,1,0,0,0,2038,2034,1,0,0,0,2039,340,1,0,0,0,2040,2042,5, - 45,0,0,2041,2040,1,0,0,0,2041,2042,1,0,0,0,2042,2044,1,0,0,0,2043,2045, - 7,1,0,0,2044,2043,1,0,0,0,2045,2046,1,0,0,0,2046,2044,1,0,0,0,2046,2047, - 1,0,0,0,2047,2063,1,0,0,0,2048,2050,5,46,0,0,2049,2051,7,1,0,0,2050,2049, - 1,0,0,0,2051,2052,1,0,0,0,2052,2050,1,0,0,0,2052,2053,1,0,0,0,2053,2064, - 1,0,0,0,2054,2056,7,2,0,0,2055,2057,5,45,0,0,2056,2055,1,0,0,0,2056,2057, - 1,0,0,0,2057,2059,1,0,0,0,2058,2060,7,1,0,0,2059,2058,1,0,0,0,2060,2061, - 1,0,0,0,2061,2059,1,0,0,0,2061,2062,1,0,0,0,2062,2064,1,0,0,0,2063,2048, - 1,0,0,0,2063,2054,1,0,0,0,2064,342,1,0,0,0,2065,2066,7,0,0,0,2066,2067, - 7,0,0,0,2067,344,1,0,0,0,2068,2069,5,58,0,0,2069,2070,5,58,0,0,2070,346, - 1,0,0,0,2071,2072,5,46,0,0,2072,2073,5,46,0,0,2073,348,1,0,0,0,2074,2075, - 5,110,0,0,2075,2076,5,117,0,0,2076,2077,5,108,0,0,2077,2078,5,108,0,0, - 2078,350,1,0,0,0,2079,2080,5,110,0,0,2080,2081,5,117,0,0,2081,2082,5,108, - 0,0,2082,2083,5,108,0,0,2083,2084,5,114,0,0,2084,2085,5,101,0,0,2085,2086, - 5,102,0,0,2086,352,1,0,0,0,2087,2088,5,46,0,0,2088,2089,5,104,0,0,2089, - 2090,5,97,0,0,2090,2091,5,115,0,0,2091,2092,5,104,0,0,2092,354,1,0,0,0, - 2093,2094,5,99,0,0,2094,2095,5,104,0,0,2095,2096,5,97,0,0,2096,2097,5, - 114,0,0,2097,356,1,0,0,0,2098,2099,5,115,0,0,2099,2100,5,116,0,0,2100, - 2101,5,114,0,0,2101,2102,5,105,0,0,2102,2103,5,110,0,0,2103,2104,5,103, - 0,0,2104,358,1,0,0,0,2105,2106,5,98,0,0,2106,2107,5,111,0,0,2107,2108, - 5,111,0,0,2108,2109,5,108,0,0,2109,360,1,0,0,0,2110,2111,5,105,0,0,2111, - 2112,5,110,0,0,2112,2113,5,116,0,0,2113,2114,5,56,0,0,2114,362,1,0,0,0, - 2115,2116,5,105,0,0,2116,2117,5,110,0,0,2117,2118,5,116,0,0,2118,2119, - 5,49,0,0,2119,2120,5,54,0,0,2120,364,1,0,0,0,2121,2122,5,105,0,0,2122, - 2123,5,110,0,0,2123,2124,5,116,0,0,2124,2125,5,51,0,0,2125,2126,5,50,0, - 0,2126,366,1,0,0,0,2127,2128,5,105,0,0,2128,2129,5,110,0,0,2129,2130,5, - 116,0,0,2130,2131,5,54,0,0,2131,2132,5,52,0,0,2132,368,1,0,0,0,2133,2134, - 5,102,0,0,2134,2135,5,108,0,0,2135,2136,5,111,0,0,2136,2137,5,97,0,0,2137, - 2138,5,116,0,0,2138,2139,5,51,0,0,2139,2140,5,50,0,0,2140,370,1,0,0,0, - 2141,2142,5,102,0,0,2142,2143,5,108,0,0,2143,2144,5,111,0,0,2144,2145, - 5,97,0,0,2145,2146,5,116,0,0,2146,2147,5,54,0,0,2147,2148,5,52,0,0,2148, - 372,1,0,0,0,2149,2150,5,117,0,0,2150,2151,5,110,0,0,2151,2152,5,115,0, - 0,2152,2153,5,105,0,0,2153,2154,5,103,0,0,2154,2155,5,110,0,0,2155,2156, - 5,101,0,0,2156,2157,5,100,0,0,2157,374,1,0,0,0,2158,2159,5,117,0,0,2159, - 2160,5,105,0,0,2160,2161,5,110,0,0,2161,2162,5,116,0,0,2162,2167,5,56, - 0,0,2163,2164,3,373,186,0,2164,2165,3,361,180,0,2165,2167,1,0,0,0,2166, - 2158,1,0,0,0,2166,2163,1,0,0,0,2167,376,1,0,0,0,2168,2169,5,117,0,0,2169, - 2170,5,105,0,0,2170,2171,5,110,0,0,2171,2172,5,116,0,0,2172,2173,5,49, - 0,0,2173,2178,5,54,0,0,2174,2175,3,373,186,0,2175,2176,3,363,181,0,2176, - 2178,1,0,0,0,2177,2168,1,0,0,0,2177,2174,1,0,0,0,2178,378,1,0,0,0,2179, - 2180,5,117,0,0,2180,2181,5,105,0,0,2181,2182,5,110,0,0,2182,2183,5,116, - 0,0,2183,2184,5,51,0,0,2184,2189,5,50,0,0,2185,2186,3,373,186,0,2186,2187, - 3,365,182,0,2187,2189,1,0,0,0,2188,2179,1,0,0,0,2188,2185,1,0,0,0,2189, - 380,1,0,0,0,2190,2191,5,117,0,0,2191,2192,5,105,0,0,2192,2193,5,110,0, - 0,2193,2194,5,116,0,0,2194,2195,5,54,0,0,2195,2200,5,52,0,0,2196,2197, - 3,373,186,0,2197,2198,3,367,183,0,2198,2200,1,0,0,0,2199,2190,1,0,0,0, - 2199,2196,1,0,0,0,2200,382,1,0,0,0,2201,2202,5,105,0,0,2202,2203,5,110, - 0,0,2203,2204,5,116,0,0,2204,384,1,0,0,0,2205,2206,5,117,0,0,2206,2207, - 5,105,0,0,2207,2208,5,110,0,0,2208,2215,5,116,0,0,2209,2210,3,373,186, - 0,2210,2211,5,105,0,0,2211,2212,5,110,0,0,2212,2213,5,116,0,0,2213,2215, - 1,0,0,0,2214,2205,1,0,0,0,2214,2209,1,0,0,0,2215,386,1,0,0,0,2216,2217, - 5,116,0,0,2217,2218,5,121,0,0,2218,2219,5,112,0,0,2219,2220,5,101,0,0, - 2220,388,1,0,0,0,2221,2222,5,111,0,0,2222,2223,5,98,0,0,2223,2224,5,106, - 0,0,2224,2225,5,101,0,0,2225,2226,5,99,0,0,2226,2227,5,116,0,0,2227,390, - 1,0,0,0,2228,2229,5,46,0,0,2229,2230,5,109,0,0,2230,2231,5,111,0,0,2231, - 2232,5,100,0,0,2232,2233,5,117,0,0,2233,2234,5,108,0,0,2234,2235,5,101, - 0,0,2235,392,1,0,0,0,2236,2237,5,118,0,0,2237,2238,5,97,0,0,2238,2239, - 5,108,0,0,2239,2240,5,117,0,0,2240,2241,5,101,0,0,2241,394,1,0,0,0,2242, - 2243,5,118,0,0,2243,2244,5,97,0,0,2244,2245,5,108,0,0,2245,2246,5,117, - 0,0,2246,2247,5,101,0,0,2247,2248,5,116,0,0,2248,2249,5,121,0,0,2249,2250, - 5,112,0,0,2250,2251,5,101,0,0,2251,396,1,0,0,0,2252,2253,5,118,0,0,2253, - 2254,5,111,0,0,2254,2255,5,105,0,0,2255,2256,5,100,0,0,2256,398,1,0,0, - 0,2257,2258,5,101,0,0,2258,2259,5,110,0,0,2259,2260,5,117,0,0,2260,2261, - 5,109,0,0,2261,400,1,0,0,0,2262,2263,5,99,0,0,2263,2264,5,117,0,0,2264, - 2265,5,115,0,0,2265,2266,5,116,0,0,2266,2267,5,111,0,0,2267,2268,5,109, - 0,0,2268,402,1,0,0,0,2269,2270,5,102,0,0,2270,2271,5,105,0,0,2271,2272, - 5,120,0,0,2272,2273,5,101,0,0,2273,2274,5,100,0,0,2274,404,1,0,0,0,2275, - 2276,5,115,0,0,2276,2277,5,121,0,0,2277,2278,5,115,0,0,2278,2279,5,116, - 0,0,2279,2280,5,114,0,0,2280,2281,5,105,0,0,2281,2282,5,110,0,0,2282,2283, - 5,103,0,0,2283,406,1,0,0,0,2284,2285,5,97,0,0,2285,2286,5,114,0,0,2286, - 2287,5,114,0,0,2287,2288,5,97,0,0,2288,2289,5,121,0,0,2289,408,1,0,0,0, - 2290,2291,5,118,0,0,2291,2292,5,97,0,0,2292,2293,5,114,0,0,2293,2294,5, - 105,0,0,2294,2295,5,97,0,0,2295,2296,5,110,0,0,2296,2297,5,116,0,0,2297, - 410,1,0,0,0,2298,2299,5,99,0,0,2299,2300,5,117,0,0,2300,2301,5,114,0,0, - 2301,2302,5,114,0,0,2302,2303,5,101,0,0,2303,2304,5,110,0,0,2304,2305, - 5,99,0,0,2305,2306,5,121,0,0,2306,412,1,0,0,0,2307,2308,5,115,0,0,2308, - 2309,5,121,0,0,2309,2310,5,115,0,0,2310,2311,5,99,0,0,2311,2312,5,104, - 0,0,2312,2313,5,97,0,0,2313,2314,5,114,0,0,2314,414,1,0,0,0,2315,2316, - 5,101,0,0,2316,2317,5,114,0,0,2317,2318,5,114,0,0,2318,2319,5,111,0,0, - 2319,2320,5,114,0,0,2320,416,1,0,0,0,2321,2322,5,100,0,0,2322,2323,5,101, - 0,0,2323,2324,5,99,0,0,2324,2325,5,105,0,0,2325,2326,5,109,0,0,2326,2327, - 5,97,0,0,2327,2328,5,108,0,0,2328,418,1,0,0,0,2329,2330,5,100,0,0,2330, - 2331,5,97,0,0,2331,2332,5,116,0,0,2332,2333,5,101,0,0,2333,420,1,0,0,0, - 2334,2335,5,98,0,0,2335,2336,5,115,0,0,2336,2337,5,116,0,0,2337,2338,5, - 114,0,0,2338,422,1,0,0,0,2339,2340,5,108,0,0,2340,2341,5,112,0,0,2341, - 2342,5,115,0,0,2342,2343,5,116,0,0,2343,2344,5,114,0,0,2344,424,1,0,0, - 0,2345,2346,5,108,0,0,2346,2347,5,112,0,0,2347,2348,5,119,0,0,2348,2349, - 5,115,0,0,2349,2350,5,116,0,0,2350,2351,5,114,0,0,2351,426,1,0,0,0,2352, - 2353,5,108,0,0,2353,2354,5,112,0,0,2354,2355,5,116,0,0,2355,2356,5,115, - 0,0,2356,2357,5,116,0,0,2357,2358,5,114,0,0,2358,428,1,0,0,0,2359,2360, - 5,111,0,0,2360,2361,5,98,0,0,2361,2362,5,106,0,0,2362,2363,5,101,0,0,2363, - 2364,5,99,0,0,2364,2365,5,116,0,0,2365,2366,5,114,0,0,2366,2367,5,101, - 0,0,2367,2368,5,102,0,0,2368,430,1,0,0,0,2369,2370,5,105,0,0,2370,2371, - 5,117,0,0,2371,2372,5,110,0,0,2372,2373,5,107,0,0,2373,2374,5,110,0,0, - 2374,2375,5,111,0,0,2375,2376,5,119,0,0,2376,2377,5,110,0,0,2377,432,1, - 0,0,0,2378,2379,5,105,0,0,2379,2380,5,100,0,0,2380,2381,5,105,0,0,2381, - 2382,5,115,0,0,2382,2383,5,112,0,0,2383,2384,5,97,0,0,2384,2385,5,116, - 0,0,2385,2386,5,99,0,0,2386,2387,5,104,0,0,2387,434,1,0,0,0,2388,2389, - 5,115,0,0,2389,2390,5,116,0,0,2390,2391,5,114,0,0,2391,2392,5,117,0,0, - 2392,2393,5,99,0,0,2393,2394,5,116,0,0,2394,436,1,0,0,0,2395,2396,5,105, - 0,0,2396,2397,5,110,0,0,2397,2398,5,116,0,0,2398,2399,5,101,0,0,2399,2400, - 5,114,0,0,2400,2401,5,102,0,0,2401,2402,5,97,0,0,2402,2403,5,99,0,0,2403, - 2404,5,101,0,0,2404,438,1,0,0,0,2405,2406,5,115,0,0,2406,2407,5,97,0,0, - 2407,2408,5,102,0,0,2408,2409,5,101,0,0,2409,2410,5,97,0,0,2410,2411,5, - 114,0,0,2411,2412,5,114,0,0,2412,2413,5,97,0,0,2413,2414,5,121,0,0,2414, - 440,1,0,0,0,2415,2416,5,110,0,0,2416,2417,5,101,0,0,2417,2418,5,115,0, - 0,2418,2419,5,116,0,0,2419,2420,5,101,0,0,2420,2421,5,100,0,0,2421,2422, - 1,0,0,0,2422,2423,3,435,217,0,2423,442,1,0,0,0,2424,2425,3,409,204,0,2425, - 2426,3,359,179,0,2426,444,1,0,0,0,2427,2428,5,98,0,0,2428,2429,5,121,0, - 0,2429,2430,5,118,0,0,2430,2431,5,97,0,0,2431,2432,5,108,0,0,2432,2433, - 5,115,0,0,2433,2434,5,116,0,0,2434,2435,5,114,0,0,2435,446,1,0,0,0,2436, - 2437,5,97,0,0,2437,2438,5,110,0,0,2438,2439,5,115,0,0,2439,2440,5,105, - 0,0,2440,448,1,0,0,0,2441,2442,3,447,223,0,2442,2443,3,421,210,0,2443, - 450,1,0,0,0,2444,2445,5,116,0,0,2445,2446,5,98,0,0,2446,2447,5,115,0,0, - 2447,2448,5,116,0,0,2448,2449,5,114,0,0,2449,452,1,0,0,0,2450,2451,5,109, - 0,0,2451,2452,5,101,0,0,2452,2453,5,116,0,0,2453,2454,5,104,0,0,2454,2455, - 5,111,0,0,2455,2456,5,100,0,0,2456,454,1,0,0,0,2457,2458,5,97,0,0,2458, - 2459,5,110,0,0,2459,2460,5,121,0,0,2460,456,1,0,0,0,2461,2462,5,108,0, - 0,2462,2463,5,112,0,0,2463,2464,5,115,0,0,2464,2465,5,116,0,0,2465,2466, - 5,114,0,0,2466,2467,5,117,0,0,2467,2468,5,99,0,0,2468,2469,5,116,0,0,2469, - 458,1,0,0,0,2470,2471,5,118,0,0,2471,2472,5,101,0,0,2472,2473,5,99,0,0, - 2473,2474,5,116,0,0,2474,2475,5,111,0,0,2475,2476,5,114,0,0,2476,460,1, - 0,0,0,2477,2478,5,104,0,0,2478,2479,5,114,0,0,2479,2480,5,101,0,0,2480, - 2481,5,115,0,0,2481,2482,5,117,0,0,2482,2483,5,108,0,0,2483,2484,5,116, - 0,0,2484,462,1,0,0,0,2485,2486,5,99,0,0,2486,2487,5,97,0,0,2487,2488,5, - 114,0,0,2488,2489,5,114,0,0,2489,2490,5,97,0,0,2490,2491,5,121,0,0,2491, - 464,1,0,0,0,2492,2493,5,117,0,0,2493,2494,5,115,0,0,2494,2495,5,101,0, - 0,2495,2496,5,114,0,0,2496,2497,5,100,0,0,2497,2498,5,101,0,0,2498,2499, - 5,102,0,0,2499,2500,5,105,0,0,2500,2501,5,110,0,0,2501,2502,5,101,0,0, - 2502,2503,5,100,0,0,2503,466,1,0,0,0,2504,2505,5,114,0,0,2505,2506,5,101, - 0,0,2506,2507,5,99,0,0,2507,2508,5,111,0,0,2508,2509,5,114,0,0,2509,2510, - 5,100,0,0,2510,468,1,0,0,0,2511,2512,5,102,0,0,2512,2513,5,105,0,0,2513, - 2514,5,108,0,0,2514,2515,5,101,0,0,2515,2516,5,116,0,0,2516,2517,5,105, - 0,0,2517,2518,5,109,0,0,2518,2519,5,101,0,0,2519,470,1,0,0,0,2520,2521, - 5,98,0,0,2521,2522,5,108,0,0,2522,2523,5,111,0,0,2523,2524,5,98,0,0,2524, - 472,1,0,0,0,2525,2526,5,115,0,0,2526,2527,5,116,0,0,2527,2528,5,114,0, - 0,2528,2529,5,101,0,0,2529,2530,5,97,0,0,2530,2531,5,109,0,0,2531,474, - 1,0,0,0,2532,2533,5,115,0,0,2533,2534,5,116,0,0,2534,2535,5,111,0,0,2535, - 2536,5,114,0,0,2536,2537,5,97,0,0,2537,2538,5,103,0,0,2538,2539,5,101, - 0,0,2539,476,1,0,0,0,2540,2541,5,115,0,0,2541,2542,5,116,0,0,2542,2543, - 5,114,0,0,2543,2544,5,101,0,0,2544,2545,5,97,0,0,2545,2546,5,109,0,0,2546, - 2547,5,101,0,0,2547,2548,5,100,0,0,2548,2549,5,95,0,0,2549,2550,5,111, - 0,0,2550,2551,5,98,0,0,2551,2552,5,106,0,0,2552,2553,5,101,0,0,2553,2554, - 5,99,0,0,2554,2555,5,116,0,0,2555,478,1,0,0,0,2556,2557,5,115,0,0,2557, - 2558,5,116,0,0,2558,2559,5,111,0,0,2559,2560,5,114,0,0,2560,2561,5,101, - 0,0,2561,2562,5,100,0,0,2562,2563,5,95,0,0,2563,2564,5,111,0,0,2564,2565, - 5,98,0,0,2565,2566,5,106,0,0,2566,2567,5,101,0,0,2567,2568,5,99,0,0,2568, - 2569,5,116,0,0,2569,480,1,0,0,0,2570,2571,5,98,0,0,2571,2572,5,108,0,0, - 2572,2573,5,111,0,0,2573,2574,5,98,0,0,2574,2575,5,95,0,0,2575,2576,5, - 111,0,0,2576,2577,5,98,0,0,2577,2578,5,106,0,0,2578,2579,5,101,0,0,2579, - 2580,5,99,0,0,2580,2581,5,116,0,0,2581,482,1,0,0,0,2582,2583,5,99,0,0, - 2583,2584,5,102,0,0,2584,484,1,0,0,0,2585,2586,5,99,0,0,2586,2587,5,108, - 0,0,2587,2588,5,115,0,0,2588,2589,5,105,0,0,2589,2590,5,100,0,0,2590,486, - 1,0,0,0,2591,2592,5,105,0,0,2592,2593,5,110,0,0,2593,2594,5,115,0,0,2594, - 2595,5,116,0,0,2595,2596,5,97,0,0,2596,2597,5,110,0,0,2597,2598,5,99,0, - 0,2598,2599,5,101,0,0,2599,488,1,0,0,0,2600,2601,5,101,0,0,2601,2602,5, - 120,0,0,2602,2603,5,112,0,0,2603,2604,5,108,0,0,2604,2605,5,105,0,0,2605, - 2606,5,99,0,0,2606,2607,5,105,0,0,2607,2608,5,116,0,0,2608,490,1,0,0,0, - 2609,2610,5,100,0,0,2610,2611,5,101,0,0,2611,2612,5,102,0,0,2612,2613, - 5,97,0,0,2613,2614,5,117,0,0,2614,2615,5,108,0,0,2615,2616,5,116,0,0,2616, - 492,1,0,0,0,2617,2618,5,118,0,0,2618,2619,5,97,0,0,2619,2620,5,114,0,0, - 2620,2621,5,97,0,0,2621,2622,5,114,0,0,2622,2623,5,103,0,0,2623,494,1, - 0,0,0,2624,2625,5,117,0,0,2625,2626,5,110,0,0,2626,2627,5,109,0,0,2627, - 2628,5,97,0,0,2628,2629,5,110,0,0,2629,2630,5,97,0,0,2630,2631,5,103,0, - 0,2631,2632,5,101,0,0,2632,2633,5,100,0,0,2633,496,1,0,0,0,2634,2635,5, - 99,0,0,2635,2636,5,100,0,0,2636,2637,5,101,0,0,2637,2638,5,99,0,0,2638, - 2639,5,108,0,0,2639,498,1,0,0,0,2640,2641,5,115,0,0,2641,2642,5,116,0, - 0,2642,2643,5,100,0,0,2643,2644,5,99,0,0,2644,2645,5,97,0,0,2645,2646, - 5,108,0,0,2646,2647,5,108,0,0,2647,500,1,0,0,0,2648,2649,5,116,0,0,2649, - 2650,5,104,0,0,2650,2651,5,105,0,0,2651,2652,5,115,0,0,2652,2653,5,99, - 0,0,2653,2654,5,97,0,0,2654,2655,5,108,0,0,2655,2656,5,108,0,0,2656,502, - 1,0,0,0,2657,2658,5,102,0,0,2658,2659,5,97,0,0,2659,2660,5,115,0,0,2660, - 2661,5,116,0,0,2661,2662,5,99,0,0,2662,2663,5,97,0,0,2663,2664,5,108,0, - 0,2664,2665,5,108,0,0,2665,504,1,0,0,0,2666,2667,5,33,0,0,2667,506,1,0, - 0,0,2668,2669,5,33,0,0,2669,2670,5,33,0,0,2670,508,1,0,0,0,2671,2672,5, - 116,0,0,2672,2673,5,121,0,0,2673,2674,5,112,0,0,2674,2675,5,101,0,0,2675, - 2676,5,100,0,0,2676,2677,5,114,0,0,2677,2678,5,101,0,0,2678,2679,5,102, - 0,0,2679,510,1,0,0,0,2680,2681,5,110,0,0,2681,2682,5,97,0,0,2682,2683, - 5,116,0,0,2683,2684,5,105,0,0,2684,2685,5,118,0,0,2685,2686,5,101,0,0, - 2686,2687,1,0,0,0,2687,2688,5,105,0,0,2688,2689,5,110,0,0,2689,2690,5, - 116,0,0,2690,512,1,0,0,0,2691,2692,5,110,0,0,2692,2693,5,97,0,0,2693,2694, - 5,116,0,0,2694,2695,5,105,0,0,2695,2696,5,118,0,0,2696,2697,5,101,0,0, - 2697,2698,1,0,0,0,2698,2699,5,117,0,0,2699,2700,5,110,0,0,2700,2701,5, - 115,0,0,2701,2702,5,105,0,0,2702,2703,5,103,0,0,2703,2704,5,110,0,0,2704, - 2705,5,101,0,0,2705,2706,5,100,0,0,2706,2707,1,0,0,0,2707,2708,5,105,0, - 0,2708,2709,5,110,0,0,2709,2722,5,116,0,0,2710,2711,5,110,0,0,2711,2712, - 5,97,0,0,2712,2713,5,116,0,0,2713,2714,5,105,0,0,2714,2715,5,118,0,0,2715, - 2716,5,101,0,0,2716,2717,1,0,0,0,2717,2718,5,117,0,0,2718,2719,5,105,0, - 0,2719,2720,5,110,0,0,2720,2722,5,116,0,0,2721,2691,1,0,0,0,2721,2710, - 1,0,0,0,2722,514,1,0,0,0,2723,2724,5,46,0,0,2724,2725,5,112,0,0,2725,2726, - 5,97,0,0,2726,2727,5,114,0,0,2727,2728,5,97,0,0,2728,2729,5,109,0,0,2729, - 516,1,0,0,0,2730,2731,5,99,0,0,2731,2732,5,111,0,0,2732,2733,5,110,0,0, - 2733,2734,5,115,0,0,2734,2735,5,116,0,0,2735,2736,5,114,0,0,2736,2737, - 5,97,0,0,2737,2738,5,105,0,0,2738,2739,5,110,0,0,2739,2740,5,116,0,0,2740, - 518,1,0,0,0,2741,2742,5,46,0,0,2742,2743,5,116,0,0,2743,2744,5,104,0,0, - 2744,2745,5,105,0,0,2745,2746,5,115,0,0,2746,520,1,0,0,0,2747,2748,5,46, - 0,0,2748,2749,5,98,0,0,2749,2750,5,97,0,0,2750,2751,5,115,0,0,2751,2752, - 5,101,0,0,2752,522,1,0,0,0,2753,2754,5,46,0,0,2754,2755,5,110,0,0,2755, - 2756,5,101,0,0,2756,2757,5,115,0,0,2757,2758,5,116,0,0,2758,2759,5,101, - 0,0,2759,2760,5,114,0,0,2760,524,1,0,0,0,2761,2762,5,38,0,0,2762,526,1, - 0,0,0,2763,2764,5,91,0,0,2764,2765,5,93,0,0,2765,528,1,0,0,0,2766,2767, - 5,42,0,0,2767,530,1,0,0,0,2768,2774,5,34,0,0,2769,2773,8,3,0,0,2770,2771, - 5,92,0,0,2771,2773,7,3,0,0,2772,2769,1,0,0,0,2772,2770,1,0,0,0,2773,2776, - 1,0,0,0,2774,2772,1,0,0,0,2774,2775,1,0,0,0,2775,2777,1,0,0,0,2776,2774, - 1,0,0,0,2777,2778,5,34,0,0,2778,532,1,0,0,0,2779,2785,5,39,0,0,2780,2784, - 8,4,0,0,2781,2782,5,92,0,0,2782,2784,7,4,0,0,2783,2780,1,0,0,0,2783,2781, - 1,0,0,0,2784,2787,1,0,0,0,2785,2783,1,0,0,0,2785,2786,1,0,0,0,2786,2788, - 1,0,0,0,2787,2785,1,0,0,0,2788,2789,5,39,0,0,2789,534,1,0,0,0,2790,2791, - 5,46,0,0,2791,536,1,0,0,0,2792,2793,5,43,0,0,2793,538,1,0,0,0,2794,2795, - 5,35,0,0,2795,2796,5,100,0,0,2796,2797,5,101,0,0,2797,2798,5,102,0,0,2798, - 2799,5,105,0,0,2799,2800,5,110,0,0,2800,2801,5,101,0,0,2801,540,1,0,0, - 0,2802,2803,5,35,0,0,2803,2804,5,117,0,0,2804,2805,5,110,0,0,2805,2806, - 5,100,0,0,2806,2807,5,101,0,0,2807,2808,5,102,0,0,2808,542,1,0,0,0,2809, - 2810,5,35,0,0,2810,2811,5,105,0,0,2811,2812,5,102,0,0,2812,2813,5,100, - 0,0,2813,2814,5,101,0,0,2814,2815,5,102,0,0,2815,544,1,0,0,0,2816,2817, - 5,35,0,0,2817,2818,5,105,0,0,2818,2819,5,102,0,0,2819,2820,5,110,0,0,2820, - 2821,5,100,0,0,2821,2822,5,101,0,0,2822,2823,5,102,0,0,2823,546,1,0,0, - 0,2824,2825,5,35,0,0,2825,2826,5,101,0,0,2826,2827,5,108,0,0,2827,2828, - 5,115,0,0,2828,2829,5,101,0,0,2829,548,1,0,0,0,2830,2831,5,35,0,0,2831, - 2832,5,101,0,0,2832,2833,5,110,0,0,2833,2834,5,100,0,0,2834,2835,5,105, - 0,0,2835,2836,5,102,0,0,2836,550,1,0,0,0,2837,2838,5,35,0,0,2838,2839, - 5,105,0,0,2839,2840,5,110,0,0,2840,2841,5,99,0,0,2841,2842,5,108,0,0,2842, - 2843,5,117,0,0,2843,2844,5,100,0,0,2844,2845,5,101,0,0,2845,552,1,0,0, - 0,2846,2847,5,46,0,0,2847,2848,5,109,0,0,2848,2849,5,114,0,0,2849,2850, - 5,101,0,0,2850,2851,5,115,0,0,2851,2852,5,111,0,0,2852,2853,5,117,0,0, - 2853,2854,5,114,0,0,2854,2855,5,99,0,0,2855,2856,5,101,0,0,2856,554,1, - 0,0,0,2857,2858,5,110,0,0,2858,2859,5,111,0,0,2859,4006,5,112,0,0,2860, - 2861,5,98,0,0,2861,2862,5,114,0,0,2862,2863,5,101,0,0,2863,2864,5,97,0, - 0,2864,4006,5,107,0,0,2865,2866,5,108,0,0,2866,2867,5,100,0,0,2867,2868, - 5,97,0,0,2868,2869,5,114,0,0,2869,2870,5,103,0,0,2870,2871,5,46,0,0,2871, - 4006,5,48,0,0,2872,2873,5,108,0,0,2873,2874,5,100,0,0,2874,2875,5,97,0, - 0,2875,2876,5,114,0,0,2876,2877,5,103,0,0,2877,2878,5,46,0,0,2878,4006, - 5,49,0,0,2879,2880,5,108,0,0,2880,2881,5,100,0,0,2881,2882,5,97,0,0,2882, - 2883,5,114,0,0,2883,2884,5,103,0,0,2884,2885,5,46,0,0,2885,4006,5,50,0, - 0,2886,2887,5,108,0,0,2887,2888,5,100,0,0,2888,2889,5,97,0,0,2889,2890, - 5,114,0,0,2890,2891,5,103,0,0,2891,2892,5,46,0,0,2892,4006,5,51,0,0,2893, - 2894,5,108,0,0,2894,2895,5,100,0,0,2895,2896,5,108,0,0,2896,2897,5,111, - 0,0,2897,2898,5,99,0,0,2898,2899,5,46,0,0,2899,4006,5,48,0,0,2900,2901, - 5,108,0,0,2901,2902,5,100,0,0,2902,2903,5,108,0,0,2903,2904,5,111,0,0, - 2904,2905,5,99,0,0,2905,2906,5,46,0,0,2906,4006,5,49,0,0,2907,2908,5,108, - 0,0,2908,2909,5,100,0,0,2909,2910,5,108,0,0,2910,2911,5,111,0,0,2911,2912, - 5,99,0,0,2912,2913,5,46,0,0,2913,4006,5,50,0,0,2914,2915,5,108,0,0,2915, - 2916,5,100,0,0,2916,2917,5,108,0,0,2917,2918,5,111,0,0,2918,2919,5,99, - 0,0,2919,2920,5,46,0,0,2920,4006,5,51,0,0,2921,2922,5,115,0,0,2922,2923, - 5,116,0,0,2923,2924,5,108,0,0,2924,2925,5,111,0,0,2925,2926,5,99,0,0,2926, - 2927,5,46,0,0,2927,4006,5,48,0,0,2928,2929,5,115,0,0,2929,2930,5,116,0, - 0,2930,2931,5,108,0,0,2931,2932,5,111,0,0,2932,2933,5,99,0,0,2933,2934, - 5,46,0,0,2934,4006,5,49,0,0,2935,2936,5,115,0,0,2936,2937,5,116,0,0,2937, - 2938,5,108,0,0,2938,2939,5,111,0,0,2939,2940,5,99,0,0,2940,2941,5,46,0, - 0,2941,4006,5,50,0,0,2942,2943,5,115,0,0,2943,2944,5,116,0,0,2944,2945, - 5,108,0,0,2945,2946,5,111,0,0,2946,2947,5,99,0,0,2947,2948,5,46,0,0,2948, - 4006,5,51,0,0,2949,2950,5,108,0,0,2950,2951,5,100,0,0,2951,2952,5,110, - 0,0,2952,2953,5,117,0,0,2953,2954,5,108,0,0,2954,4006,5,108,0,0,2955,2956, - 5,108,0,0,2956,2957,5,100,0,0,2957,2958,5,99,0,0,2958,2959,5,46,0,0,2959, - 2960,5,105,0,0,2960,2961,5,52,0,0,2961,2962,5,46,0,0,2962,2963,5,109,0, - 0,2963,4006,5,49,0,0,2964,2965,5,108,0,0,2965,2966,5,100,0,0,2966,2967, - 5,99,0,0,2967,2968,5,46,0,0,2968,2969,5,105,0,0,2969,2970,5,52,0,0,2970, - 2971,5,46,0,0,2971,4006,5,48,0,0,2972,2973,5,108,0,0,2973,2974,5,100,0, - 0,2974,2975,5,99,0,0,2975,2976,5,46,0,0,2976,2977,5,105,0,0,2977,2978, - 5,52,0,0,2978,2979,5,46,0,0,2979,4006,5,49,0,0,2980,2981,5,108,0,0,2981, - 2982,5,100,0,0,2982,2983,5,99,0,0,2983,2984,5,46,0,0,2984,2985,5,105,0, - 0,2985,2986,5,52,0,0,2986,2987,5,46,0,0,2987,4006,5,50,0,0,2988,2989,5, - 108,0,0,2989,2990,5,100,0,0,2990,2991,5,99,0,0,2991,2992,5,46,0,0,2992, - 2993,5,105,0,0,2993,2994,5,52,0,0,2994,2995,5,46,0,0,2995,4006,5,51,0, - 0,2996,2997,5,108,0,0,2997,2998,5,100,0,0,2998,2999,5,99,0,0,2999,3000, - 5,46,0,0,3000,3001,5,105,0,0,3001,3002,5,52,0,0,3002,3003,5,46,0,0,3003, - 4006,5,52,0,0,3004,3005,5,108,0,0,3005,3006,5,100,0,0,3006,3007,5,99,0, - 0,3007,3008,5,46,0,0,3008,3009,5,105,0,0,3009,3010,5,52,0,0,3010,3011, - 5,46,0,0,3011,4006,5,53,0,0,3012,3013,5,108,0,0,3013,3014,5,100,0,0,3014, - 3015,5,99,0,0,3015,3016,5,46,0,0,3016,3017,5,105,0,0,3017,3018,5,52,0, - 0,3018,3019,5,46,0,0,3019,4006,5,54,0,0,3020,3021,5,108,0,0,3021,3022, - 5,100,0,0,3022,3023,5,99,0,0,3023,3024,5,46,0,0,3024,3025,5,105,0,0,3025, - 3026,5,52,0,0,3026,3027,5,46,0,0,3027,4006,5,55,0,0,3028,3029,5,108,0, - 0,3029,3030,5,100,0,0,3030,3031,5,99,0,0,3031,3032,5,46,0,0,3032,3033, - 5,105,0,0,3033,3034,5,52,0,0,3034,3035,5,46,0,0,3035,4006,5,56,0,0,3036, - 3037,5,100,0,0,3037,3038,5,117,0,0,3038,4006,5,112,0,0,3039,3040,5,112, - 0,0,3040,3041,5,111,0,0,3041,4006,5,112,0,0,3042,3043,5,114,0,0,3043,3044, - 5,101,0,0,3044,4006,5,116,0,0,3045,3046,5,108,0,0,3046,3047,5,100,0,0, - 3047,3048,5,105,0,0,3048,3049,5,110,0,0,3049,3050,5,100,0,0,3050,3051, - 5,46,0,0,3051,3052,5,105,0,0,3052,4006,5,49,0,0,3053,3054,5,108,0,0,3054, - 3055,5,100,0,0,3055,3056,5,105,0,0,3056,3057,5,110,0,0,3057,3058,5,100, - 0,0,3058,3059,5,46,0,0,3059,3060,5,117,0,0,3060,4006,5,49,0,0,3061,3062, - 5,108,0,0,3062,3063,5,100,0,0,3063,3064,5,105,0,0,3064,3065,5,110,0,0, - 3065,3066,5,100,0,0,3066,3067,5,46,0,0,3067,3068,5,105,0,0,3068,4006,5, - 50,0,0,3069,3070,5,108,0,0,3070,3071,5,100,0,0,3071,3072,5,105,0,0,3072, - 3073,5,110,0,0,3073,3074,5,100,0,0,3074,3075,5,46,0,0,3075,3076,5,117, - 0,0,3076,4006,5,50,0,0,3077,3078,5,108,0,0,3078,3079,5,100,0,0,3079,3080, - 5,105,0,0,3080,3081,5,110,0,0,3081,3082,5,100,0,0,3082,3083,5,46,0,0,3083, - 3084,5,105,0,0,3084,4006,5,52,0,0,3085,3086,5,108,0,0,3086,3087,5,100, - 0,0,3087,3088,5,105,0,0,3088,3089,5,110,0,0,3089,3090,5,100,0,0,3090,3091, - 5,46,0,0,3091,3092,5,117,0,0,3092,4006,5,52,0,0,3093,3094,5,108,0,0,3094, - 3095,5,100,0,0,3095,3096,5,105,0,0,3096,3097,5,110,0,0,3097,3098,5,100, - 0,0,3098,3099,5,46,0,0,3099,3100,5,105,0,0,3100,4006,5,56,0,0,3101,3102, - 5,108,0,0,3102,3103,5,100,0,0,3103,3104,5,105,0,0,3104,3105,5,110,0,0, - 3105,3106,5,100,0,0,3106,3107,5,46,0,0,3107,4006,5,105,0,0,3108,3109,5, - 108,0,0,3109,3110,5,100,0,0,3110,3111,5,105,0,0,3111,3112,5,110,0,0,3112, - 3113,5,100,0,0,3113,3114,5,46,0,0,3114,3115,5,114,0,0,3115,4006,5,52,0, - 0,3116,3117,5,108,0,0,3117,3118,5,100,0,0,3118,3119,5,105,0,0,3119,3120, - 5,110,0,0,3120,3121,5,100,0,0,3121,3122,5,46,0,0,3122,3123,5,114,0,0,3123, - 4006,5,56,0,0,3124,3125,5,108,0,0,3125,3126,5,100,0,0,3126,3127,5,105, - 0,0,3127,3128,5,110,0,0,3128,3129,5,100,0,0,3129,3130,5,46,0,0,3130,3131, - 5,114,0,0,3131,3132,5,101,0,0,3132,4006,5,102,0,0,3133,3134,5,115,0,0, - 3134,3135,5,116,0,0,3135,3136,5,105,0,0,3136,3137,5,110,0,0,3137,3138, - 5,100,0,0,3138,3139,5,46,0,0,3139,3140,5,114,0,0,3140,3141,5,101,0,0,3141, - 4006,5,102,0,0,3142,3143,5,115,0,0,3143,3144,5,116,0,0,3144,3145,5,105, - 0,0,3145,3146,5,110,0,0,3146,3147,5,100,0,0,3147,3148,5,46,0,0,3148,3149, - 5,105,0,0,3149,4006,5,49,0,0,3150,3151,5,115,0,0,3151,3152,5,116,0,0,3152, - 3153,5,105,0,0,3153,3154,5,110,0,0,3154,3155,5,100,0,0,3155,3156,5,46, - 0,0,3156,3157,5,105,0,0,3157,4006,5,50,0,0,3158,3159,5,115,0,0,3159,3160, - 5,116,0,0,3160,3161,5,105,0,0,3161,3162,5,110,0,0,3162,3163,5,100,0,0, - 3163,3164,5,46,0,0,3164,3165,5,105,0,0,3165,4006,5,52,0,0,3166,3167,5, - 115,0,0,3167,3168,5,116,0,0,3168,3169,5,105,0,0,3169,3170,5,110,0,0,3170, - 3171,5,100,0,0,3171,3172,5,46,0,0,3172,3173,5,105,0,0,3173,4006,5,56,0, - 0,3174,3175,5,115,0,0,3175,3176,5,116,0,0,3176,3177,5,105,0,0,3177,3178, - 5,110,0,0,3178,3179,5,100,0,0,3179,3180,5,46,0,0,3180,3181,5,114,0,0,3181, - 4006,5,52,0,0,3182,3183,5,115,0,0,3183,3184,5,116,0,0,3184,3185,5,105, - 0,0,3185,3186,5,110,0,0,3186,3187,5,100,0,0,3187,3188,5,46,0,0,3188,3189, - 5,114,0,0,3189,4006,5,56,0,0,3190,3191,5,97,0,0,3191,3192,5,100,0,0,3192, - 4006,5,100,0,0,3193,3194,5,115,0,0,3194,3195,5,117,0,0,3195,4006,5,98, - 0,0,3196,3197,5,109,0,0,3197,3198,5,117,0,0,3198,4006,5,108,0,0,3199,3200, - 5,100,0,0,3200,3201,5,105,0,0,3201,4006,5,118,0,0,3202,3203,5,100,0,0, - 3203,3204,5,105,0,0,3204,3205,5,118,0,0,3205,3206,5,46,0,0,3206,3207,5, - 117,0,0,3207,4006,5,110,0,0,3208,3209,5,114,0,0,3209,3210,5,101,0,0,3210, - 4006,5,109,0,0,3211,3212,5,114,0,0,3212,3213,5,101,0,0,3213,3214,5,109, - 0,0,3214,3215,5,46,0,0,3215,3216,5,117,0,0,3216,4006,5,110,0,0,3217,3218, - 5,97,0,0,3218,3219,5,110,0,0,3219,4006,5,100,0,0,3220,3221,5,111,0,0,3221, - 4006,5,114,0,0,3222,3223,5,120,0,0,3223,3224,5,111,0,0,3224,4006,5,114, - 0,0,3225,3226,5,115,0,0,3226,3227,5,104,0,0,3227,4006,5,108,0,0,3228,3229, - 5,115,0,0,3229,3230,5,104,0,0,3230,4006,5,114,0,0,3231,3232,5,115,0,0, - 3232,3233,5,104,0,0,3233,3234,5,114,0,0,3234,3235,5,46,0,0,3235,3236,5, - 117,0,0,3236,4006,5,110,0,0,3237,3238,5,110,0,0,3238,3239,5,101,0,0,3239, - 4006,5,103,0,0,3240,3241,5,110,0,0,3241,3242,5,111,0,0,3242,4006,5,116, - 0,0,3243,3244,5,99,0,0,3244,3245,5,111,0,0,3245,3246,5,110,0,0,3246,3247, - 5,118,0,0,3247,3248,5,46,0,0,3248,3249,5,105,0,0,3249,4006,5,49,0,0,3250, - 3251,5,99,0,0,3251,3252,5,111,0,0,3252,3253,5,110,0,0,3253,3254,5,118, - 0,0,3254,3255,5,46,0,0,3255,3256,5,105,0,0,3256,4006,5,50,0,0,3257,3258, - 5,99,0,0,3258,3259,5,111,0,0,3259,3260,5,110,0,0,3260,3261,5,118,0,0,3261, - 3262,5,46,0,0,3262,3263,5,105,0,0,3263,4006,5,52,0,0,3264,3265,5,99,0, - 0,3265,3266,5,111,0,0,3266,3267,5,110,0,0,3267,3268,5,118,0,0,3268,3269, - 5,46,0,0,3269,3270,5,105,0,0,3270,4006,5,56,0,0,3271,3272,5,99,0,0,3272, - 3273,5,111,0,0,3273,3274,5,110,0,0,3274,3275,5,118,0,0,3275,3276,5,46, - 0,0,3276,3277,5,114,0,0,3277,4006,5,52,0,0,3278,3279,5,99,0,0,3279,3280, - 5,111,0,0,3280,3281,5,110,0,0,3281,3282,5,118,0,0,3282,3283,5,46,0,0,3283, - 3284,5,114,0,0,3284,4006,5,56,0,0,3285,3286,5,99,0,0,3286,3287,5,111,0, - 0,3287,3288,5,110,0,0,3288,3289,5,118,0,0,3289,3290,5,46,0,0,3290,3291, - 5,117,0,0,3291,4006,5,52,0,0,3292,3293,5,99,0,0,3293,3294,5,111,0,0,3294, - 3295,5,110,0,0,3295,3296,5,118,0,0,3296,3297,5,46,0,0,3297,3298,5,117, - 0,0,3298,4006,5,56,0,0,3299,3300,5,99,0,0,3300,3301,5,111,0,0,3301,3302, - 5,110,0,0,3302,3303,5,118,0,0,3303,3304,5,46,0,0,3304,3305,5,114,0,0,3305, - 3306,5,46,0,0,3306,3307,5,117,0,0,3307,4006,5,110,0,0,3308,3309,5,116, - 0,0,3309,3310,5,104,0,0,3310,3311,5,114,0,0,3311,3312,5,111,0,0,3312,4006, - 5,119,0,0,3313,3314,5,99,0,0,3314,3315,5,111,0,0,3315,3316,5,110,0,0,3316, - 3317,5,118,0,0,3317,3318,5,46,0,0,3318,3319,5,111,0,0,3319,3320,5,118, - 0,0,3320,3321,5,102,0,0,3321,3322,5,46,0,0,3322,3323,5,105,0,0,3323,3324, - 5,49,0,0,3324,3325,5,46,0,0,3325,3326,5,117,0,0,3326,4006,5,110,0,0,3327, - 3328,5,99,0,0,3328,3329,5,111,0,0,3329,3330,5,110,0,0,3330,3331,5,118, - 0,0,3331,3332,5,46,0,0,3332,3333,5,111,0,0,3333,3334,5,118,0,0,3334,3335, - 5,102,0,0,3335,3336,5,46,0,0,3336,3337,5,105,0,0,3337,3338,5,50,0,0,3338, - 3339,5,46,0,0,3339,3340,5,117,0,0,3340,4006,5,110,0,0,3341,3342,5,99,0, - 0,3342,3343,5,111,0,0,3343,3344,5,110,0,0,3344,3345,5,118,0,0,3345,3346, - 5,46,0,0,3346,3347,5,111,0,0,3347,3348,5,118,0,0,3348,3349,5,102,0,0,3349, - 3350,5,46,0,0,3350,3351,5,105,0,0,3351,3352,5,52,0,0,3352,3353,5,46,0, - 0,3353,3354,5,117,0,0,3354,4006,5,110,0,0,3355,3356,5,99,0,0,3356,3357, - 5,111,0,0,3357,3358,5,110,0,0,3358,3359,5,118,0,0,3359,3360,5,46,0,0,3360, - 3361,5,111,0,0,3361,3362,5,118,0,0,3362,3363,5,102,0,0,3363,3364,5,46, - 0,0,3364,3365,5,105,0,0,3365,3366,5,56,0,0,3366,3367,5,46,0,0,3367,3368, - 5,117,0,0,3368,4006,5,110,0,0,3369,3370,5,99,0,0,3370,3371,5,111,0,0,3371, - 3372,5,110,0,0,3372,3373,5,118,0,0,3373,3374,5,46,0,0,3374,3375,5,111, - 0,0,3375,3376,5,118,0,0,3376,3377,5,102,0,0,3377,3378,5,46,0,0,3378,3379, - 5,117,0,0,3379,3380,5,49,0,0,3380,3381,5,46,0,0,3381,3382,5,117,0,0,3382, - 4006,5,110,0,0,3383,3384,5,99,0,0,3384,3385,5,111,0,0,3385,3386,5,110, - 0,0,3386,3387,5,118,0,0,3387,3388,5,46,0,0,3388,3389,5,111,0,0,3389,3390, - 5,118,0,0,3390,3391,5,102,0,0,3391,3392,5,46,0,0,3392,3393,5,117,0,0,3393, - 3394,5,50,0,0,3394,3395,5,46,0,0,3395,3396,5,117,0,0,3396,4006,5,110,0, - 0,3397,3398,5,99,0,0,3398,3399,5,111,0,0,3399,3400,5,110,0,0,3400,3401, - 5,118,0,0,3401,3402,5,46,0,0,3402,3403,5,111,0,0,3403,3404,5,118,0,0,3404, - 3405,5,102,0,0,3405,3406,5,46,0,0,3406,3407,5,117,0,0,3407,3408,5,52,0, - 0,3408,3409,5,46,0,0,3409,3410,5,117,0,0,3410,4006,5,110,0,0,3411,3412, - 5,99,0,0,3412,3413,5,111,0,0,3413,3414,5,110,0,0,3414,3415,5,118,0,0,3415, - 3416,5,46,0,0,3416,3417,5,111,0,0,3417,3418,5,118,0,0,3418,3419,5,102, - 0,0,3419,3420,5,46,0,0,3420,3421,5,117,0,0,3421,3422,5,56,0,0,3422,3423, - 5,46,0,0,3423,3424,5,117,0,0,3424,4006,5,110,0,0,3425,3426,5,99,0,0,3426, - 3427,5,111,0,0,3427,3428,5,110,0,0,3428,3429,5,118,0,0,3429,3430,5,46, - 0,0,3430,3431,5,111,0,0,3431,3432,5,118,0,0,3432,3433,5,102,0,0,3433,3434, - 5,46,0,0,3434,3435,5,105,0,0,3435,3436,5,46,0,0,3436,3437,5,117,0,0,3437, - 4006,5,110,0,0,3438,3439,5,99,0,0,3439,3440,5,111,0,0,3440,3441,5,110, - 0,0,3441,3442,5,118,0,0,3442,3443,5,46,0,0,3443,3444,5,111,0,0,3444,3445, - 5,118,0,0,3445,3446,5,102,0,0,3446,3447,5,46,0,0,3447,3448,5,117,0,0,3448, - 3449,5,46,0,0,3449,3450,5,117,0,0,3450,4006,5,110,0,0,3451,3452,5,108, - 0,0,3452,3453,5,100,0,0,3453,3454,5,108,0,0,3454,3455,5,101,0,0,3455,4006, - 5,110,0,0,3456,3457,5,108,0,0,3457,3458,5,100,0,0,3458,3459,5,101,0,0, - 3459,3460,5,108,0,0,3460,3461,5,101,0,0,3461,3462,5,109,0,0,3462,3463, - 5,46,0,0,3463,3464,5,105,0,0,3464,4006,5,49,0,0,3465,3466,5,108,0,0,3466, - 3467,5,100,0,0,3467,3468,5,101,0,0,3468,3469,5,108,0,0,3469,3470,5,101, - 0,0,3470,3471,5,109,0,0,3471,3472,5,46,0,0,3472,3473,5,117,0,0,3473,4006, - 5,49,0,0,3474,3475,5,108,0,0,3475,3476,5,100,0,0,3476,3477,5,101,0,0,3477, - 3478,5,108,0,0,3478,3479,5,101,0,0,3479,3480,5,109,0,0,3480,3481,5,46, - 0,0,3481,3482,5,105,0,0,3482,4006,5,50,0,0,3483,3484,5,108,0,0,3484,3485, - 5,100,0,0,3485,3486,5,101,0,0,3486,3487,5,108,0,0,3487,3488,5,101,0,0, - 3488,3489,5,109,0,0,3489,3490,5,46,0,0,3490,3491,5,117,0,0,3491,4006,5, - 50,0,0,3492,3493,5,108,0,0,3493,3494,5,100,0,0,3494,3495,5,101,0,0,3495, - 3496,5,108,0,0,3496,3497,5,101,0,0,3497,3498,5,109,0,0,3498,3499,5,46, - 0,0,3499,3500,5,105,0,0,3500,4006,5,52,0,0,3501,3502,5,108,0,0,3502,3503, - 5,100,0,0,3503,3504,5,101,0,0,3504,3505,5,108,0,0,3505,3506,5,101,0,0, - 3506,3507,5,109,0,0,3507,3508,5,46,0,0,3508,3509,5,117,0,0,3509,4006,5, - 52,0,0,3510,3511,5,108,0,0,3511,3512,5,100,0,0,3512,3513,5,101,0,0,3513, - 3514,5,108,0,0,3514,3515,5,101,0,0,3515,3516,5,109,0,0,3516,3517,5,46, - 0,0,3517,3518,5,105,0,0,3518,4006,5,56,0,0,3519,3520,5,108,0,0,3520,3521, - 5,100,0,0,3521,3522,5,101,0,0,3522,3523,5,108,0,0,3523,3524,5,101,0,0, - 3524,3525,5,109,0,0,3525,3526,5,46,0,0,3526,4006,5,105,0,0,3527,3528,5, - 108,0,0,3528,3529,5,100,0,0,3529,3530,5,101,0,0,3530,3531,5,108,0,0,3531, - 3532,5,101,0,0,3532,3533,5,109,0,0,3533,3534,5,46,0,0,3534,3535,5,114, - 0,0,3535,4006,5,52,0,0,3536,3537,5,108,0,0,3537,3538,5,100,0,0,3538,3539, - 5,101,0,0,3539,3540,5,108,0,0,3540,3541,5,101,0,0,3541,3542,5,109,0,0, - 3542,3543,5,46,0,0,3543,3544,5,114,0,0,3544,4006,5,56,0,0,3545,3546,5, - 108,0,0,3546,3547,5,100,0,0,3547,3548,5,101,0,0,3548,3549,5,108,0,0,3549, - 3550,5,101,0,0,3550,3551,5,109,0,0,3551,3552,5,46,0,0,3552,3553,5,114, - 0,0,3553,3554,5,101,0,0,3554,4006,5,102,0,0,3555,3556,5,115,0,0,3556,3557, - 5,116,0,0,3557,3558,5,101,0,0,3558,3559,5,108,0,0,3559,3560,5,101,0,0, - 3560,3561,5,109,0,0,3561,3562,5,46,0,0,3562,4006,5,105,0,0,3563,3564,5, - 115,0,0,3564,3565,5,116,0,0,3565,3566,5,101,0,0,3566,3567,5,108,0,0,3567, - 3568,5,101,0,0,3568,3569,5,109,0,0,3569,3570,5,46,0,0,3570,3571,5,105, - 0,0,3571,4006,5,49,0,0,3572,3573,5,115,0,0,3573,3574,5,116,0,0,3574,3575, - 5,101,0,0,3575,3576,5,108,0,0,3576,3577,5,101,0,0,3577,3578,5,109,0,0, - 3578,3579,5,46,0,0,3579,3580,5,105,0,0,3580,4006,5,50,0,0,3581,3582,5, - 115,0,0,3582,3583,5,116,0,0,3583,3584,5,101,0,0,3584,3585,5,108,0,0,3585, - 3586,5,101,0,0,3586,3587,5,109,0,0,3587,3588,5,46,0,0,3588,3589,5,105, - 0,0,3589,4006,5,52,0,0,3590,3591,5,115,0,0,3591,3592,5,116,0,0,3592,3593, - 5,101,0,0,3593,3594,5,108,0,0,3594,3595,5,101,0,0,3595,3596,5,109,0,0, - 3596,3597,5,46,0,0,3597,3598,5,105,0,0,3598,4006,5,56,0,0,3599,3600,5, - 115,0,0,3600,3601,5,116,0,0,3601,3602,5,101,0,0,3602,3603,5,108,0,0,3603, - 3604,5,101,0,0,3604,3605,5,109,0,0,3605,3606,5,46,0,0,3606,3607,5,114, - 0,0,3607,4006,5,52,0,0,3608,3609,5,115,0,0,3609,3610,5,116,0,0,3610,3611, - 5,101,0,0,3611,3612,5,108,0,0,3612,3613,5,101,0,0,3613,3614,5,109,0,0, - 3614,3615,5,46,0,0,3615,3616,5,114,0,0,3616,4006,5,56,0,0,3617,3618,5, - 115,0,0,3618,3619,5,116,0,0,3619,3620,5,101,0,0,3620,3621,5,108,0,0,3621, - 3622,5,101,0,0,3622,3623,5,109,0,0,3623,3624,5,46,0,0,3624,3625,5,114, - 0,0,3625,3626,5,101,0,0,3626,4006,5,102,0,0,3627,3628,5,99,0,0,3628,3629, - 5,111,0,0,3629,3630,5,110,0,0,3630,3631,5,118,0,0,3631,3632,5,46,0,0,3632, - 3633,5,111,0,0,3633,3634,5,118,0,0,3634,3635,5,102,0,0,3635,3636,5,46, - 0,0,3636,3637,5,105,0,0,3637,4006,5,49,0,0,3638,3639,5,99,0,0,3639,3640, - 5,111,0,0,3640,3641,5,110,0,0,3641,3642,5,118,0,0,3642,3643,5,46,0,0,3643, - 3644,5,111,0,0,3644,3645,5,118,0,0,3645,3646,5,102,0,0,3646,3647,5,46, - 0,0,3647,3648,5,117,0,0,3648,4006,5,49,0,0,3649,3650,5,99,0,0,3650,3651, - 5,111,0,0,3651,3652,5,110,0,0,3652,3653,5,118,0,0,3653,3654,5,46,0,0,3654, - 3655,5,111,0,0,3655,3656,5,118,0,0,3656,3657,5,102,0,0,3657,3658,5,46, - 0,0,3658,3659,5,105,0,0,3659,4006,5,50,0,0,3660,3661,5,99,0,0,3661,3662, - 5,111,0,0,3662,3663,5,110,0,0,3663,3664,5,118,0,0,3664,3665,5,46,0,0,3665, - 3666,5,111,0,0,3666,3667,5,118,0,0,3667,3668,5,102,0,0,3668,3669,5,46, - 0,0,3669,3670,5,117,0,0,3670,4006,5,50,0,0,3671,3672,5,99,0,0,3672,3673, - 5,111,0,0,3673,3674,5,110,0,0,3674,3675,5,118,0,0,3675,3676,5,46,0,0,3676, - 3677,5,111,0,0,3677,3678,5,118,0,0,3678,3679,5,102,0,0,3679,3680,5,46, - 0,0,3680,3681,5,105,0,0,3681,4006,5,52,0,0,3682,3683,5,99,0,0,3683,3684, - 5,111,0,0,3684,3685,5,110,0,0,3685,3686,5,118,0,0,3686,3687,5,46,0,0,3687, - 3688,5,111,0,0,3688,3689,5,118,0,0,3689,3690,5,102,0,0,3690,3691,5,46, - 0,0,3691,3692,5,117,0,0,3692,4006,5,52,0,0,3693,3694,5,99,0,0,3694,3695, - 5,111,0,0,3695,3696,5,110,0,0,3696,3697,5,118,0,0,3697,3698,5,46,0,0,3698, - 3699,5,111,0,0,3699,3700,5,118,0,0,3700,3701,5,102,0,0,3701,3702,5,46, - 0,0,3702,3703,5,105,0,0,3703,4006,5,56,0,0,3704,3705,5,99,0,0,3705,3706, - 5,111,0,0,3706,3707,5,110,0,0,3707,3708,5,118,0,0,3708,3709,5,46,0,0,3709, - 3710,5,111,0,0,3710,3711,5,118,0,0,3711,3712,5,102,0,0,3712,3713,5,46, - 0,0,3713,3714,5,117,0,0,3714,4006,5,56,0,0,3715,3716,5,99,0,0,3716,3717, - 5,107,0,0,3717,3718,5,102,0,0,3718,3719,5,105,0,0,3719,3720,5,110,0,0, - 3720,3721,5,105,0,0,3721,3722,5,116,0,0,3722,4006,5,101,0,0,3723,3724, + 1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,286,3,286,4530, + 8,286,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,288,1,288,1,289, + 1,289,1,290,1,290,1,290,4,290,4547,8,290,11,290,12,290,4548,1,290,1,290, + 1,291,1,291,5,291,4555,8,291,10,291,12,291,4558,9,291,1,292,1,292,1,292, + 1,293,1,293,1,293,1,293,1,294,1,294,1,294,1,294,5,294,4571,8,294,10,294, + 12,294,4574,9,294,1,294,1,294,1,295,1,295,1,295,1,295,5,295,4582,8,295, + 10,295,12,295,4585,9,295,1,295,1,295,1,295,1,295,1,295,1,296,1,296,1,296, + 1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1,297,1,297,1,297, + 1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297, + 1,298,1,298,1,298,1,298,1,298,1,298,1,298,1,298,1,298,1,298,1,299,1,299, + 1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,300,1,300,1,300,1,300, + 1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,300,1,301,1,301,1,301,1,301, + 1,301,1,301,1,301,1,301,1,301,1,301,1,302,1,302,1,302,1,302,1,302,1,302, + 1,302,1,302,1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,303,1,304,1,304, + 1,304,1,304,1,304,1,304,1,304,1,304,1,304,1,304,1,305,1,305,1,305,1,305, + 1,305,1,305,1,305,1,305,1,305,1,4583,0,306,1,1,3,2,5,3,7,4,9,5,11,6,13, + 7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19, + 39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31, + 63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43, + 87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54, + 109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64, + 129,65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74, + 149,75,151,76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84, + 169,85,171,86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94, + 189,95,191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207, + 104,209,105,211,106,213,107,215,108,217,109,219,110,221,111,223,112,225, + 113,227,114,229,115,231,116,233,117,235,118,237,119,239,120,241,121,243, + 122,245,123,247,124,249,125,251,126,253,127,255,128,257,129,259,130,261, + 131,263,132,265,133,267,134,269,135,271,136,273,137,275,138,277,139,279, + 140,281,141,283,142,285,143,287,144,289,145,291,146,293,147,295,148,297, + 149,299,150,301,151,303,152,305,153,307,154,309,155,311,156,313,157,315, + 158,317,159,319,160,321,161,323,162,325,163,327,164,329,165,331,166,333, + 167,335,168,337,169,339,170,341,171,343,172,345,173,347,174,349,175,351, + 176,353,177,355,178,357,179,359,180,361,181,363,182,365,183,367,184,369, + 185,371,186,373,187,375,188,377,0,379,189,381,190,383,191,385,192,387, + 193,389,194,391,195,393,196,395,197,397,198,399,199,401,200,403,201,405, + 202,407,203,409,204,411,205,413,206,415,207,417,208,419,209,421,210,423, + 211,425,212,427,213,429,214,431,215,433,216,435,217,437,218,439,219,441, + 220,443,221,445,222,447,223,449,224,451,225,453,226,455,227,457,228,459, + 229,461,230,463,231,465,232,467,233,469,234,471,235,473,236,475,237,477, + 238,479,239,481,240,483,241,485,242,487,243,489,244,491,245,493,246,495, + 247,497,248,499,249,501,250,503,251,505,252,507,253,509,254,511,255,513, + 256,515,257,517,258,519,259,521,260,523,261,525,0,527,262,529,263,531, + 264,533,265,535,266,537,267,539,268,541,269,543,270,545,271,547,272,549, + 273,551,274,553,275,555,276,557,277,559,278,561,279,563,280,565,281,567, + 282,569,283,571,284,573,285,575,286,577,0,579,0,581,287,583,288,585,289, + 587,290,589,291,591,292,593,293,595,294,597,295,599,296,601,297,603,298, + 605,299,607,300,609,301,611,302,1,0,12,3,0,48,57,65,70,97,102,1,0,48,57, + 2,0,69,69,101,101,2,0,43,43,45,45,11,0,34,34,39,39,47,48,63,63,92,92,97, + 98,102,102,110,110,114,114,116,116,118,118,1,0,48,55,4,0,10,10,13,13,34, + 34,92,92,4,0,10,10,13,13,39,39,92,92,4,0,35,36,63,90,95,95,97,122,4,0, + 35,36,48,57,63,90,95,122,3,0,9,10,13,13,32,32,2,0,10,10,13,13,4947,0,1, + 1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0, + 13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1, + 0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0, + 0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45, + 1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0, + 0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67, + 1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0, + 0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89, + 1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0, + 0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0, + 0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0, + 0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0, + 0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0, + 0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0, + 0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0, + 0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0, + 0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0, + 0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0, + 0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0, + 0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0, + 0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0, + 0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0, + 0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0, + 0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0, + 0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1,0,0, + 0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0,269,1,0,0, + 0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0,279,1,0,0, + 0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0, + 0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0, + 0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0, + 0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0, + 0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0, + 0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0, + 0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0, + 0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0, + 0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0, + 0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0, + 0,0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0, + 0,0,393,1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0, + 0,0,403,1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0, + 0,0,413,1,0,0,0,0,415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0, + 0,0,423,1,0,0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0, + 0,0,433,1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0, + 0,0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1,0,0, + 0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0,461,1,0,0, + 0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0, + 0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0, + 0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0, + 0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0, + 0,0,503,1,0,0,0,0,505,1,0,0,0,0,507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0, + 0,0,513,1,0,0,0,0,515,1,0,0,0,0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0, + 0,0,523,1,0,0,0,0,527,1,0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0, + 0,0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1,0,0, + 0,0,545,1,0,0,0,0,547,1,0,0,0,0,549,1,0,0,0,0,551,1,0,0,0,0,553,1,0,0, + 0,0,555,1,0,0,0,0,557,1,0,0,0,0,559,1,0,0,0,0,561,1,0,0,0,0,563,1,0,0, + 0,0,565,1,0,0,0,0,567,1,0,0,0,0,569,1,0,0,0,0,571,1,0,0,0,0,573,1,0,0, + 0,0,575,1,0,0,0,0,581,1,0,0,0,0,583,1,0,0,0,0,585,1,0,0,0,0,587,1,0,0, + 0,0,589,1,0,0,0,0,591,1,0,0,0,0,593,1,0,0,0,0,595,1,0,0,0,0,597,1,0,0, + 0,0,599,1,0,0,0,0,601,1,0,0,0,0,603,1,0,0,0,0,605,1,0,0,0,0,607,1,0,0, + 0,0,609,1,0,0,0,0,611,1,0,0,0,1,613,1,0,0,0,3,620,1,0,0,0,5,624,1,0,0, + 0,7,630,1,0,0,0,9,638,1,0,0,0,11,649,1,0,0,0,13,661,1,0,0,0,15,669,1,0, + 0,0,17,682,1,0,0,0,19,695,1,0,0,0,21,706,1,0,0,0,23,725,1,0,0,0,25,740, + 1,0,0,0,27,763,1,0,0,0,29,769,1,0,0,0,31,778,1,0,0,0,33,780,1,0,0,0,35, + 782,1,0,0,0,37,793,1,0,0,0,39,803,1,0,0,0,41,809,1,0,0,0,43,819,1,0,0, + 0,45,830,1,0,0,0,47,844,1,0,0,0,49,854,1,0,0,0,51,864,1,0,0,0,53,874,1, + 0,0,0,55,876,1,0,0,0,57,886,1,0,0,0,59,888,1,0,0,0,61,890,1,0,0,0,63,892, + 1,0,0,0,65,901,1,0,0,0,67,904,1,0,0,0,69,912,1,0,0,0,71,914,1,0,0,0,73, + 920,1,0,0,0,75,929,1,0,0,0,77,935,1,0,0,0,79,942,1,0,0,0,81,951,1,0,0, + 0,83,953,1,0,0,0,85,955,1,0,0,0,87,958,1,0,0,0,89,972,1,0,0,0,91,988,1, + 0,0,0,93,1004,1,0,0,0,95,1012,1,0,0,0,97,1023,1,0,0,0,99,1030,1,0,0,0, + 101,1037,1,0,0,0,103,1045,1,0,0,0,105,1052,1,0,0,0,107,1061,1,0,0,0,109, + 1066,1,0,0,0,111,1077,1,0,0,0,113,1085,1,0,0,0,115,1094,1,0,0,0,117,1101, + 1,0,0,0,119,1114,1,0,0,0,121,1129,1,0,0,0,123,1136,1,0,0,0,125,1143,1, + 0,0,0,127,1152,1,0,0,0,129,1164,1,0,0,0,131,1175,1,0,0,0,133,1191,1,0, + 0,0,135,1203,1,0,0,0,137,1217,1,0,0,0,139,1223,1,0,0,0,141,1231,1,0,0, + 0,143,1242,1,0,0,0,145,1248,1,0,0,0,147,1254,1,0,0,0,149,1256,1,0,0,0, + 151,1267,1,0,0,0,153,1280,1,0,0,0,155,1291,1,0,0,0,157,1306,1,0,0,0,159, + 1310,1,0,0,0,161,1316,1,0,0,0,163,1320,1,0,0,0,165,1326,1,0,0,0,167,1336, + 1,0,0,0,169,1339,1,0,0,0,171,1341,1,0,0,0,173,1343,1,0,0,0,175,1345,1, + 0,0,0,177,1355,1,0,0,0,179,1364,1,0,0,0,181,1371,1,0,0,0,183,1378,1,0, + 0,0,185,1385,1,0,0,0,187,1394,1,0,0,0,189,1399,1,0,0,0,191,1405,1,0,0, + 0,193,1413,1,0,0,0,195,1420,1,0,0,0,197,1427,1,0,0,0,199,1432,1,0,0,0, + 201,1443,1,0,0,0,203,1453,1,0,0,0,205,1466,1,0,0,0,207,1473,1,0,0,0,209, + 1480,1,0,0,0,211,1490,1,0,0,0,213,1502,1,0,0,0,215,1513,1,0,0,0,217,1526, + 1,0,0,0,219,1543,1,0,0,0,221,1561,1,0,0,0,223,1570,1,0,0,0,225,1578,1, + 0,0,0,227,1580,1,0,0,0,229,1590,1,0,0,0,231,1596,1,0,0,0,233,1602,1,0, + 0,0,235,1608,1,0,0,0,237,1613,1,0,0,0,239,1628,1,0,0,0,241,1635,1,0,0, + 0,243,1643,1,0,0,0,245,1650,1,0,0,0,247,1659,1,0,0,0,249,1672,1,0,0,0, + 251,1680,1,0,0,0,253,1694,1,0,0,0,255,1703,1,0,0,0,257,1710,1,0,0,0,259, + 1717,1,0,0,0,261,1727,1,0,0,0,263,1733,1,0,0,0,265,1740,1,0,0,0,267,1750, + 1,0,0,0,269,1755,1,0,0,0,271,1760,1,0,0,0,273,1763,1,0,0,0,275,1767,1, + 0,0,0,277,1771,1,0,0,0,279,1779,1,0,0,0,281,1785,1,0,0,0,283,1793,1,0, + 0,0,285,1800,1,0,0,0,287,1810,1,0,0,0,289,1818,1,0,0,0,291,1831,1,0,0, + 0,293,1841,1,0,0,0,295,1853,1,0,0,0,297,1862,1,0,0,0,299,1870,1,0,0,0, + 301,1877,1,0,0,0,303,1885,1,0,0,0,305,1888,1,0,0,0,307,1892,1,0,0,0,309, + 1905,1,0,0,0,311,1912,1,0,0,0,313,1915,1,0,0,0,315,1920,1,0,0,0,317,1925, + 1,0,0,0,319,1928,1,0,0,0,321,1935,1,0,0,0,323,1941,1,0,0,0,325,1949,1, + 0,0,0,327,1955,1,0,0,0,329,1963,1,0,0,0,331,1969,1,0,0,0,333,1973,1,0, + 0,0,335,1984,1,0,0,0,337,1989,1,0,0,0,339,1997,1,0,0,0,341,2013,1,0,0, + 0,343,2024,1,0,0,0,345,2042,1,0,0,0,347,2060,1,0,0,0,349,2114,1,0,0,0, + 351,2117,1,0,0,0,353,2121,1,0,0,0,355,2126,1,0,0,0,357,2134,1,0,0,0,359, + 2149,1,0,0,0,361,2151,1,0,0,0,363,2158,1,0,0,0,365,2163,1,0,0,0,367,2168, + 1,0,0,0,369,2174,1,0,0,0,371,2180,1,0,0,0,373,2186,1,0,0,0,375,2194,1, + 0,0,0,377,2202,1,0,0,0,379,2211,1,0,0,0,381,2217,1,0,0,0,383,2224,1,0, + 0,0,385,2231,1,0,0,0,387,2238,1,0,0,0,389,2242,1,0,0,0,391,2247,1,0,0, + 0,393,2252,1,0,0,0,395,2259,1,0,0,0,397,2267,1,0,0,0,399,2273,1,0,0,0, + 401,2283,1,0,0,0,403,2288,1,0,0,0,405,2293,1,0,0,0,407,2300,1,0,0,0,409, + 2306,1,0,0,0,411,2315,1,0,0,0,413,2321,1,0,0,0,415,2329,1,0,0,0,417,2338, + 1,0,0,0,419,2346,1,0,0,0,421,2352,1,0,0,0,423,2360,1,0,0,0,425,2365,1, + 0,0,0,427,2370,1,0,0,0,429,2376,1,0,0,0,431,2383,1,0,0,0,433,2390,1,0, + 0,0,435,2400,1,0,0,0,437,2409,1,0,0,0,439,2419,1,0,0,0,441,2426,1,0,0, + 0,443,2436,1,0,0,0,445,2446,1,0,0,0,447,2455,1,0,0,0,449,2460,1,0,0,0, + 451,2466,1,0,0,0,453,2473,1,0,0,0,455,2477,1,0,0,0,457,2486,1,0,0,0,459, + 2493,1,0,0,0,461,2501,1,0,0,0,463,2508,1,0,0,0,465,2520,1,0,0,0,467,2527, + 1,0,0,0,469,2536,1,0,0,0,471,2541,1,0,0,0,473,2548,1,0,0,0,475,2556,1, + 0,0,0,477,2572,1,0,0,0,479,2586,1,0,0,0,481,2598,1,0,0,0,483,2601,1,0, + 0,0,485,2607,1,0,0,0,487,2616,1,0,0,0,489,2625,1,0,0,0,491,2633,1,0,0, + 0,493,2640,1,0,0,0,495,2650,1,0,0,0,497,2656,1,0,0,0,499,2664,1,0,0,0, + 501,2673,1,0,0,0,503,2682,1,0,0,0,505,2684,1,0,0,0,507,2701,1,0,0,0,509, + 2703,1,0,0,0,511,2710,1,0,0,0,513,2721,1,0,0,0,515,2727,1,0,0,0,517,2733, + 1,0,0,0,519,2741,1,0,0,0,521,2743,1,0,0,0,523,2746,1,0,0,0,525,2748,1, + 0,0,0,527,2763,1,0,0,0,529,2773,1,0,0,0,531,2783,1,0,0,0,533,2785,1,0, + 0,0,535,2787,1,0,0,0,537,2795,1,0,0,0,539,2802,1,0,0,0,541,2809,1,0,0, + 0,543,2817,1,0,0,0,545,2823,1,0,0,0,547,2830,1,0,0,0,549,2839,1,0,0,0, + 551,4032,1,0,0,0,553,4110,1,0,0,0,555,4139,1,0,0,0,557,4141,1,0,0,0,559, + 4160,1,0,0,0,561,4197,1,0,0,0,563,4199,1,0,0,0,565,4363,1,0,0,0,567,4365, + 1,0,0,0,569,4486,1,0,0,0,571,4488,1,0,0,0,573,4529,1,0,0,0,575,4531,1, + 0,0,0,577,4539,1,0,0,0,579,4541,1,0,0,0,581,4546,1,0,0,0,583,4552,1,0, + 0,0,585,4559,1,0,0,0,587,4562,1,0,0,0,589,4566,1,0,0,0,591,4577,1,0,0, + 0,593,4591,1,0,0,0,595,4603,1,0,0,0,597,4618,1,0,0,0,599,4628,1,0,0,0, + 601,4638,1,0,0,0,603,4650,1,0,0,0,605,4660,1,0,0,0,607,4668,1,0,0,0,609, + 4676,1,0,0,0,611,4686,1,0,0,0,613,614,5,110,0,0,614,615,5,97,0,0,615,616, + 5,116,0,0,616,617,5,105,0,0,617,618,5,118,0,0,618,619,5,101,0,0,619,2, + 1,0,0,0,620,621,5,99,0,0,621,622,5,105,0,0,622,623,5,108,0,0,623,4,1,0, + 0,0,624,625,5,111,0,0,625,626,5,112,0,0,626,627,5,116,0,0,627,628,5,105, + 0,0,628,629,5,108,0,0,629,6,1,0,0,0,630,631,5,109,0,0,631,632,5,97,0,0, + 632,633,5,110,0,0,633,634,5,97,0,0,634,635,5,103,0,0,635,636,5,101,0,0, + 636,637,5,100,0,0,637,8,1,0,0,0,638,639,5,102,0,0,639,640,5,111,0,0,640, + 641,5,114,0,0,641,642,5,119,0,0,642,643,5,97,0,0,643,644,5,114,0,0,644, + 645,5,100,0,0,645,646,5,114,0,0,646,647,5,101,0,0,647,648,5,102,0,0,648, + 10,1,0,0,0,649,650,5,112,0,0,650,651,5,114,0,0,651,652,5,101,0,0,652,653, + 5,115,0,0,653,654,5,101,0,0,654,655,5,114,0,0,655,656,5,118,0,0,656,657, + 5,101,0,0,657,658,5,115,0,0,658,659,5,105,0,0,659,660,5,103,0,0,660,12, + 1,0,0,0,661,662,5,114,0,0,662,663,5,117,0,0,663,664,5,110,0,0,664,665, + 5,116,0,0,665,666,5,105,0,0,666,667,5,109,0,0,667,668,5,101,0,0,668,14, + 1,0,0,0,669,670,5,105,0,0,670,671,5,110,0,0,671,672,5,116,0,0,672,673, + 5,101,0,0,673,674,5,114,0,0,674,675,5,110,0,0,675,676,5,97,0,0,676,677, + 5,108,0,0,677,678,5,99,0,0,678,679,5,97,0,0,679,680,5,108,0,0,680,681, + 5,108,0,0,681,16,1,0,0,0,682,683,5,115,0,0,683,684,5,121,0,0,684,685,5, + 110,0,0,685,686,5,99,0,0,686,687,5,104,0,0,687,688,5,114,0,0,688,689,5, + 111,0,0,689,690,5,110,0,0,690,691,5,105,0,0,691,692,5,122,0,0,692,693, + 5,101,0,0,693,694,5,100,0,0,694,18,1,0,0,0,695,696,5,110,0,0,696,697,5, + 111,0,0,697,698,5,105,0,0,698,699,5,110,0,0,699,700,5,108,0,0,700,701, + 5,105,0,0,701,702,5,110,0,0,702,703,5,105,0,0,703,704,5,110,0,0,704,705, + 5,103,0,0,705,20,1,0,0,0,706,707,5,97,0,0,707,708,5,103,0,0,708,709,5, + 103,0,0,709,710,5,114,0,0,710,711,5,101,0,0,711,712,5,115,0,0,712,713, + 5,115,0,0,713,714,5,105,0,0,714,715,5,118,0,0,715,716,5,101,0,0,716,717, + 5,105,0,0,717,718,5,110,0,0,718,719,5,108,0,0,719,720,5,105,0,0,720,721, + 5,110,0,0,721,722,5,105,0,0,722,723,5,110,0,0,723,724,5,103,0,0,724,22, + 1,0,0,0,725,726,5,110,0,0,726,727,5,111,0,0,727,728,5,111,0,0,728,729, + 5,112,0,0,729,730,5,116,0,0,730,731,5,105,0,0,731,732,5,109,0,0,732,733, + 5,105,0,0,733,734,5,122,0,0,734,735,5,97,0,0,735,736,5,116,0,0,736,737, + 5,105,0,0,737,738,5,111,0,0,738,739,5,110,0,0,739,24,1,0,0,0,740,741,5, + 97,0,0,741,742,5,103,0,0,742,743,5,103,0,0,743,744,5,114,0,0,744,745,5, + 101,0,0,745,746,5,115,0,0,746,747,5,115,0,0,747,748,5,105,0,0,748,749, + 5,118,0,0,749,750,5,101,0,0,750,751,5,111,0,0,751,752,5,112,0,0,752,753, + 5,116,0,0,753,754,5,105,0,0,754,755,5,109,0,0,755,756,5,105,0,0,756,757, + 5,122,0,0,757,758,5,97,0,0,758,759,5,116,0,0,759,760,5,105,0,0,760,761, + 5,111,0,0,761,762,5,110,0,0,762,26,1,0,0,0,763,764,5,97,0,0,764,765,5, + 115,0,0,765,766,5,121,0,0,766,767,5,110,0,0,767,768,5,99,0,0,768,28,1, + 0,0,0,769,770,5,101,0,0,770,771,5,120,0,0,771,772,5,116,0,0,772,773,5, + 101,0,0,773,774,5,110,0,0,774,775,5,100,0,0,775,776,5,101,0,0,776,777, + 5,100,0,0,777,30,1,0,0,0,778,779,5,123,0,0,779,32,1,0,0,0,780,781,5,125, + 0,0,781,34,1,0,0,0,782,783,5,46,0,0,783,784,5,115,0,0,784,785,5,117,0, + 0,785,786,5,98,0,0,786,787,5,115,0,0,787,788,5,121,0,0,788,789,5,115,0, + 0,789,790,5,116,0,0,790,791,5,101,0,0,791,792,5,109,0,0,792,36,1,0,0,0, + 793,794,5,46,0,0,794,795,5,99,0,0,795,796,5,111,0,0,796,797,5,114,0,0, + 797,798,5,102,0,0,798,799,5,108,0,0,799,800,5,97,0,0,800,801,5,103,0,0, + 801,802,5,115,0,0,802,38,1,0,0,0,803,804,5,46,0,0,804,805,5,102,0,0,805, + 806,5,105,0,0,806,807,5,108,0,0,807,808,5,101,0,0,808,40,1,0,0,0,809,810, + 5,97,0,0,810,811,5,108,0,0,811,812,5,105,0,0,812,813,5,103,0,0,813,814, + 5,110,0,0,814,815,5,109,0,0,815,816,5,101,0,0,816,817,5,110,0,0,817,818, + 5,116,0,0,818,42,1,0,0,0,819,820,5,46,0,0,820,821,5,105,0,0,821,822,5, + 109,0,0,822,823,5,97,0,0,823,824,5,103,0,0,824,825,5,101,0,0,825,826,5, + 98,0,0,826,827,5,97,0,0,827,828,5,115,0,0,828,829,5,101,0,0,829,44,1,0, + 0,0,830,831,5,46,0,0,831,832,5,115,0,0,832,833,5,116,0,0,833,834,5,97, + 0,0,834,835,5,99,0,0,835,836,5,107,0,0,836,837,5,114,0,0,837,838,5,101, + 0,0,838,839,5,115,0,0,839,840,5,101,0,0,840,841,5,114,0,0,841,842,5,118, + 0,0,842,843,5,101,0,0,843,46,1,0,0,0,844,845,5,46,0,0,845,846,5,97,0,0, + 846,847,5,115,0,0,847,848,5,115,0,0,848,849,5,101,0,0,849,850,5,109,0, + 0,850,851,5,98,0,0,851,852,5,108,0,0,852,853,5,121,0,0,853,48,1,0,0,0, + 854,855,5,46,0,0,855,856,5,109,0,0,856,857,5,115,0,0,857,858,5,99,0,0, + 858,859,5,111,0,0,859,860,5,114,0,0,860,861,5,108,0,0,861,862,5,105,0, + 0,862,863,5,98,0,0,863,50,1,0,0,0,864,865,5,46,0,0,865,866,5,108,0,0,866, + 867,5,97,0,0,867,868,5,110,0,0,868,869,5,103,0,0,869,870,5,117,0,0,870, + 871,5,97,0,0,871,872,5,103,0,0,872,873,5,101,0,0,873,52,1,0,0,0,874,875, + 5,44,0,0,875,54,1,0,0,0,876,877,5,46,0,0,877,878,5,116,0,0,878,879,5,121, + 0,0,879,880,5,112,0,0,880,881,5,101,0,0,881,882,5,108,0,0,882,883,5,105, + 0,0,883,884,5,115,0,0,884,885,5,116,0,0,885,56,1,0,0,0,886,887,5,40,0, + 0,887,58,1,0,0,0,888,889,5,41,0,0,889,60,1,0,0,0,890,891,5,59,0,0,891, + 62,1,0,0,0,892,893,5,46,0,0,893,894,5,116,0,0,894,895,5,121,0,0,895,896, + 5,112,0,0,896,897,5,101,0,0,897,898,5,100,0,0,898,899,5,101,0,0,899,900, + 5,102,0,0,900,64,1,0,0,0,901,902,5,97,0,0,902,903,5,115,0,0,903,66,1,0, + 0,0,904,905,5,46,0,0,905,906,5,99,0,0,906,907,5,117,0,0,907,908,5,115, + 0,0,908,909,5,116,0,0,909,910,5,111,0,0,910,911,5,109,0,0,911,68,1,0,0, + 0,912,913,5,61,0,0,913,70,1,0,0,0,914,915,5,102,0,0,915,916,5,105,0,0, + 916,917,5,101,0,0,917,918,5,108,0,0,918,919,5,100,0,0,919,72,1,0,0,0,920, + 921,5,112,0,0,921,922,5,114,0,0,922,923,5,111,0,0,923,924,5,112,0,0,924, + 925,5,101,0,0,925,926,5,114,0,0,926,927,5,116,0,0,927,928,5,121,0,0,928, + 74,1,0,0,0,929,930,5,99,0,0,930,931,5,108,0,0,931,932,5,97,0,0,932,933, + 5,115,0,0,933,934,5,115,0,0,934,76,1,0,0,0,935,936,5,101,0,0,936,937,5, + 120,0,0,937,938,5,116,0,0,938,939,5,101,0,0,939,940,5,114,0,0,940,941, + 5,110,0,0,941,78,1,0,0,0,942,943,5,46,0,0,943,944,5,118,0,0,944,945,5, + 116,0,0,945,946,5,102,0,0,946,947,5,105,0,0,947,948,5,120,0,0,948,949, + 5,117,0,0,949,950,5,112,0,0,950,80,1,0,0,0,951,952,5,91,0,0,952,82,1,0, + 0,0,953,954,5,93,0,0,954,84,1,0,0,0,955,956,5,97,0,0,956,957,5,116,0,0, + 957,86,1,0,0,0,958,959,5,102,0,0,959,960,5,114,0,0,960,961,5,111,0,0,961, + 962,5,109,0,0,962,963,5,117,0,0,963,964,5,110,0,0,964,965,5,109,0,0,965, + 966,5,97,0,0,966,967,5,110,0,0,967,968,5,97,0,0,968,969,5,103,0,0,969, + 970,5,101,0,0,970,971,5,100,0,0,971,88,1,0,0,0,972,973,5,99,0,0,973,974, + 5,97,0,0,974,975,5,108,0,0,975,976,5,108,0,0,976,977,5,109,0,0,977,978, + 5,111,0,0,978,979,5,115,0,0,979,980,5,116,0,0,980,981,5,100,0,0,981,982, + 5,101,0,0,982,983,5,114,0,0,983,984,5,105,0,0,984,985,5,118,0,0,985,986, + 5,101,0,0,986,987,5,100,0,0,987,90,1,0,0,0,988,989,5,114,0,0,989,990,5, + 101,0,0,990,991,5,116,0,0,991,992,5,97,0,0,992,993,5,105,0,0,993,994,5, + 110,0,0,994,995,5,97,0,0,995,996,5,112,0,0,996,997,5,112,0,0,997,998,5, + 100,0,0,998,999,5,111,0,0,999,1000,5,109,0,0,1000,1001,5,97,0,0,1001,1002, + 5,105,0,0,1002,1003,5,110,0,0,1003,92,1,0,0,0,1004,1005,5,46,0,0,1005, + 1006,5,118,0,0,1006,1007,5,116,0,0,1007,1008,5,97,0,0,1008,1009,5,98,0, + 0,1009,1010,5,108,0,0,1010,1011,5,101,0,0,1011,94,1,0,0,0,1012,1013,5, + 46,0,0,1013,1014,5,110,0,0,1014,1015,5,97,0,0,1015,1016,5,109,0,0,1016, + 1017,5,101,0,0,1017,1018,5,115,0,0,1018,1019,5,112,0,0,1019,1020,5,97, + 0,0,1020,1021,5,99,0,0,1021,1022,5,101,0,0,1022,96,1,0,0,0,1023,1024,5, + 46,0,0,1024,1025,5,99,0,0,1025,1026,5,108,0,0,1026,1027,5,97,0,0,1027, + 1028,5,115,0,0,1028,1029,5,115,0,0,1029,98,1,0,0,0,1030,1031,5,112,0,0, + 1031,1032,5,117,0,0,1032,1033,5,98,0,0,1033,1034,5,108,0,0,1034,1035,5, + 105,0,0,1035,1036,5,99,0,0,1036,100,1,0,0,0,1037,1038,5,112,0,0,1038,1039, + 5,114,0,0,1039,1040,5,105,0,0,1040,1041,5,118,0,0,1041,1042,5,97,0,0,1042, + 1043,5,116,0,0,1043,1044,5,101,0,0,1044,102,1,0,0,0,1045,1046,5,115,0, + 0,1046,1047,5,101,0,0,1047,1048,5,97,0,0,1048,1049,5,108,0,0,1049,1050, + 5,101,0,0,1050,1051,5,100,0,0,1051,104,1,0,0,0,1052,1053,5,97,0,0,1053, + 1054,5,98,0,0,1054,1055,5,115,0,0,1055,1056,5,116,0,0,1056,1057,5,114, + 0,0,1057,1058,5,97,0,0,1058,1059,5,99,0,0,1059,1060,5,116,0,0,1060,106, + 1,0,0,0,1061,1062,5,97,0,0,1062,1063,5,117,0,0,1063,1064,5,116,0,0,1064, + 1065,5,111,0,0,1065,108,1,0,0,0,1066,1067,5,115,0,0,1067,1068,5,101,0, + 0,1068,1069,5,113,0,0,1069,1070,5,117,0,0,1070,1071,5,101,0,0,1071,1072, + 5,110,0,0,1072,1073,5,116,0,0,1073,1074,5,105,0,0,1074,1075,5,97,0,0,1075, + 1076,5,108,0,0,1076,110,1,0,0,0,1077,1078,5,117,0,0,1078,1079,5,110,0, + 0,1079,1080,5,105,0,0,1080,1081,5,99,0,0,1081,1082,5,111,0,0,1082,1083, + 5,100,0,0,1083,1084,5,101,0,0,1084,112,1,0,0,0,1085,1086,5,97,0,0,1086, + 1087,5,117,0,0,1087,1088,5,116,0,0,1088,1089,5,111,0,0,1089,1090,5,99, + 0,0,1090,1091,5,104,0,0,1091,1092,5,97,0,0,1092,1093,5,114,0,0,1093,114, + 1,0,0,0,1094,1095,5,105,0,0,1095,1096,5,109,0,0,1096,1097,5,112,0,0,1097, + 1098,5,111,0,0,1098,1099,5,114,0,0,1099,1100,5,116,0,0,1100,116,1,0,0, + 0,1101,1102,5,115,0,0,1102,1103,5,101,0,0,1103,1104,5,114,0,0,1104,1105, + 5,105,0,0,1105,1106,5,97,0,0,1106,1107,5,108,0,0,1107,1108,5,105,0,0,1108, + 1109,5,122,0,0,1109,1110,5,97,0,0,1110,1111,5,98,0,0,1111,1112,5,108,0, + 0,1112,1113,5,101,0,0,1113,118,1,0,0,0,1114,1115,5,119,0,0,1115,1116,5, + 105,0,0,1116,1117,5,110,0,0,1117,1118,5,100,0,0,1118,1119,5,111,0,0,1119, + 1120,5,119,0,0,1120,1121,5,115,0,0,1121,1122,5,114,0,0,1122,1123,5,117, + 0,0,1123,1124,5,110,0,0,1124,1125,5,116,0,0,1125,1126,5,105,0,0,1126,1127, + 5,109,0,0,1127,1128,5,101,0,0,1128,120,1,0,0,0,1129,1130,5,110,0,0,1130, + 1131,5,101,0,0,1131,1132,5,115,0,0,1132,1133,5,116,0,0,1133,1134,5,101, + 0,0,1134,1135,5,100,0,0,1135,122,1,0,0,0,1136,1137,5,102,0,0,1137,1138, + 5,97,0,0,1138,1139,5,109,0,0,1139,1140,5,105,0,0,1140,1141,5,108,0,0,1141, + 1142,5,121,0,0,1142,124,1,0,0,0,1143,1144,5,97,0,0,1144,1145,5,115,0,0, + 1145,1146,5,115,0,0,1146,1147,5,101,0,0,1147,1148,5,109,0,0,1148,1149, + 5,98,0,0,1149,1150,5,108,0,0,1150,1151,5,121,0,0,1151,126,1,0,0,0,1152, + 1153,5,102,0,0,1153,1154,5,97,0,0,1154,1155,5,109,0,0,1155,1156,5,97,0, + 0,1156,1157,5,110,0,0,1157,1158,5,100,0,0,1158,1159,5,97,0,0,1159,1160, + 5,115,0,0,1160,1161,5,115,0,0,1161,1162,5,101,0,0,1162,1163,5,109,0,0, + 1163,128,1,0,0,0,1164,1165,5,102,0,0,1165,1166,5,97,0,0,1166,1167,5,109, + 0,0,1167,1168,5,111,0,0,1168,1169,5,114,0,0,1169,1170,5,97,0,0,1170,1171, + 5,115,0,0,1171,1172,5,115,0,0,1172,1173,5,101,0,0,1173,1174,5,109,0,0, + 1174,130,1,0,0,0,1175,1176,5,98,0,0,1176,1177,5,101,0,0,1177,1178,5,102, + 0,0,1178,1179,5,111,0,0,1179,1180,5,114,0,0,1180,1181,5,101,0,0,1181,1182, + 5,102,0,0,1182,1183,5,105,0,0,1183,1184,5,101,0,0,1184,1185,5,108,0,0, + 1185,1186,5,100,0,0,1186,1187,5,105,0,0,1187,1188,5,110,0,0,1188,1189, + 5,105,0,0,1189,1190,5,116,0,0,1190,132,1,0,0,0,1191,1192,5,115,0,0,1192, + 1193,5,112,0,0,1193,1194,5,101,0,0,1194,1195,5,99,0,0,1195,1196,5,105, + 0,0,1196,1197,5,97,0,0,1197,1198,5,108,0,0,1198,1199,5,110,0,0,1199,1200, + 5,97,0,0,1200,1201,5,109,0,0,1201,1202,5,101,0,0,1202,134,1,0,0,0,1203, + 1204,5,114,0,0,1204,1205,5,116,0,0,1205,1206,5,115,0,0,1206,1207,5,112, + 0,0,1207,1208,5,101,0,0,1208,1209,5,99,0,0,1209,1210,5,105,0,0,1210,1211, + 5,97,0,0,1211,1212,5,108,0,0,1212,1213,5,110,0,0,1213,1214,5,97,0,0,1214, + 1215,5,109,0,0,1215,1216,5,101,0,0,1216,136,1,0,0,0,1217,1218,5,102,0, + 0,1218,1219,5,108,0,0,1219,1220,5,97,0,0,1220,1221,5,103,0,0,1221,1222, + 5,115,0,0,1222,138,1,0,0,0,1223,1224,5,101,0,0,1224,1225,5,120,0,0,1225, + 1226,5,116,0,0,1226,1227,5,101,0,0,1227,1228,5,110,0,0,1228,1229,5,100, + 0,0,1229,1230,5,115,0,0,1230,140,1,0,0,0,1231,1232,5,105,0,0,1232,1233, + 5,109,0,0,1233,1234,5,112,0,0,1234,1235,5,108,0,0,1235,1236,5,101,0,0, + 1236,1237,5,109,0,0,1237,1238,5,101,0,0,1238,1239,5,110,0,0,1239,1240, + 5,116,0,0,1240,1241,5,115,0,0,1241,142,1,0,0,0,1242,1243,5,46,0,0,1243, + 1244,5,108,0,0,1244,1245,5,105,0,0,1245,1246,5,110,0,0,1246,1247,5,101, + 0,0,1247,144,1,0,0,0,1248,1249,5,35,0,0,1249,1250,5,108,0,0,1250,1251, + 5,105,0,0,1251,1252,5,110,0,0,1252,1253,5,101,0,0,1253,146,1,0,0,0,1254, + 1255,5,58,0,0,1255,148,1,0,0,0,1256,1257,5,110,0,0,1257,1258,5,111,0,0, + 1258,1259,5,109,0,0,1259,1260,5,101,0,0,1260,1261,5,116,0,0,1261,1262, + 5,97,0,0,1262,1263,5,100,0,0,1263,1264,5,97,0,0,1264,1265,5,116,0,0,1265, + 1266,5,97,0,0,1266,150,1,0,0,0,1267,1268,5,114,0,0,1268,1269,5,101,0,0, + 1269,1270,5,116,0,0,1270,1271,5,97,0,0,1271,1272,5,114,0,0,1272,1273,5, + 103,0,0,1273,1274,5,101,0,0,1274,1275,5,116,0,0,1275,1276,5,97,0,0,1276, + 1277,5,98,0,0,1277,1278,5,108,0,0,1278,1279,5,101,0,0,1279,152,1,0,0,0, + 1280,1281,5,110,0,0,1281,1282,5,111,0,0,1282,1283,5,112,0,0,1283,1284, + 5,108,0,0,1284,1285,5,97,0,0,1285,1286,5,116,0,0,1286,1287,5,102,0,0,1287, + 1288,5,111,0,0,1288,1289,5,114,0,0,1289,1290,5,109,0,0,1290,154,1,0,0, + 0,1291,1292,5,108,0,0,1292,1293,5,101,0,0,1293,1294,5,103,0,0,1294,1295, + 5,97,0,0,1295,1296,5,99,0,0,1296,1297,5,121,0,0,1297,1298,5,32,0,0,1298, + 1299,5,108,0,0,1299,1300,5,105,0,0,1300,1301,5,98,0,0,1301,1302,5,114, + 0,0,1302,1303,5,97,0,0,1303,1304,5,114,0,0,1304,1305,5,121,0,0,1305,156, + 1,0,0,0,1306,1307,5,120,0,0,1307,1308,5,56,0,0,1308,1309,5,54,0,0,1309, + 158,1,0,0,0,1310,1311,5,97,0,0,1311,1312,5,109,0,0,1312,1313,5,100,0,0, + 1313,1314,5,54,0,0,1314,1315,5,52,0,0,1315,160,1,0,0,0,1316,1317,5,97, + 0,0,1317,1318,5,114,0,0,1318,1319,5,109,0,0,1319,162,1,0,0,0,1320,1321, + 5,97,0,0,1321,1322,5,114,0,0,1322,1323,5,109,0,0,1323,1324,5,54,0,0,1324, + 1325,5,52,0,0,1325,164,1,0,0,0,1326,1327,5,98,0,0,1327,1328,5,121,0,0, + 1328,1329,5,116,0,0,1329,1330,5,101,0,0,1330,1331,5,97,0,0,1331,1332,5, + 114,0,0,1332,1333,5,114,0,0,1333,1334,5,97,0,0,1334,1335,5,121,0,0,1335, + 166,1,0,0,0,1336,1337,5,40,0,0,1337,1338,5,41,0,0,1338,168,1,0,0,0,1339, + 1340,5,60,0,0,1340,170,1,0,0,0,1341,1342,5,62,0,0,1342,172,1,0,0,0,1343, + 1344,5,47,0,0,1344,174,1,0,0,0,1345,1346,5,97,0,0,1346,1347,5,108,0,0, + 1347,1348,5,103,0,0,1348,1349,5,111,0,0,1349,1350,5,114,0,0,1350,1351, + 5,105,0,0,1351,1352,5,116,0,0,1352,1353,5,104,0,0,1353,1354,5,109,0,0, + 1354,176,1,0,0,0,1355,1356,5,105,0,0,1356,1357,5,105,0,0,1357,1358,5,100, + 0,0,1358,1359,5,112,0,0,1359,1360,5,97,0,0,1360,1361,5,114,0,0,1361,1362, + 5,97,0,0,1362,1363,5,109,0,0,1363,178,1,0,0,0,1364,1365,5,112,0,0,1365, + 1366,5,105,0,0,1366,1367,5,110,0,0,1367,1368,5,110,0,0,1368,1369,5,101, + 0,0,1369,1370,5,100,0,0,1370,180,1,0,0,0,1371,1372,5,109,0,0,1372,1373, + 5,111,0,0,1373,1374,5,100,0,0,1374,1375,5,114,0,0,1375,1376,5,101,0,0, + 1376,1377,5,113,0,0,1377,182,1,0,0,0,1378,1379,5,109,0,0,1379,1380,5,111, + 0,0,1380,1381,5,100,0,0,1381,1382,5,111,0,0,1382,1383,5,112,0,0,1383,1384, + 5,116,0,0,1384,184,1,0,0,0,1385,1386,5,117,0,0,1386,1387,5,110,0,0,1387, + 1388,5,115,0,0,1388,1389,5,105,0,0,1389,1390,5,103,0,0,1390,1391,5,110, + 0,0,1391,1392,5,101,0,0,1392,1393,5,100,0,0,1393,186,1,0,0,0,1394,1395, + 5,116,0,0,1395,1396,5,114,0,0,1396,1397,5,117,0,0,1397,1398,5,101,0,0, + 1398,188,1,0,0,0,1399,1400,5,102,0,0,1400,1401,5,97,0,0,1401,1402,5,108, + 0,0,1402,1403,5,115,0,0,1403,1404,5,101,0,0,1404,190,1,0,0,0,1405,1406, + 5,114,0,0,1406,1407,5,101,0,0,1407,1408,5,113,0,0,1408,1409,5,117,0,0, + 1409,1410,5,101,0,0,1410,1411,5,115,0,0,1411,1412,5,116,0,0,1412,192,1, + 0,0,0,1413,1414,5,100,0,0,1414,1415,5,101,0,0,1415,1416,5,109,0,0,1416, + 1417,5,97,0,0,1417,1418,5,110,0,0,1418,1419,5,100,0,0,1419,194,1,0,0,0, + 1420,1421,5,97,0,0,1421,1422,5,115,0,0,1422,1423,5,115,0,0,1423,1424,5, + 101,0,0,1424,1425,5,114,0,0,1425,1426,5,116,0,0,1426,196,1,0,0,0,1427, + 1428,5,100,0,0,1428,1429,5,101,0,0,1429,1430,5,110,0,0,1430,1431,5,121, + 0,0,1431,198,1,0,0,0,1432,1433,5,112,0,0,1433,1434,5,101,0,0,1434,1435, + 5,114,0,0,1435,1436,5,109,0,0,1436,1437,5,105,0,0,1437,1438,5,116,0,0, + 1438,1439,5,111,0,0,1439,1440,5,110,0,0,1440,1441,5,108,0,0,1441,1442, + 5,121,0,0,1442,200,1,0,0,0,1443,1444,5,108,0,0,1444,1445,5,105,0,0,1445, + 1446,5,110,0,0,1446,1447,5,107,0,0,1447,1448,5,99,0,0,1448,1449,5,104, + 0,0,1449,1450,5,101,0,0,1450,1451,5,99,0,0,1451,1452,5,107,0,0,1452,202, + 1,0,0,0,1453,1454,5,105,0,0,1454,1455,5,110,0,0,1455,1456,5,104,0,0,1456, + 1457,5,101,0,0,1457,1458,5,114,0,0,1458,1459,5,105,0,0,1459,1460,5,116, + 0,0,1460,1461,5,99,0,0,1461,1462,5,104,0,0,1462,1463,5,101,0,0,1463,1464, + 5,99,0,0,1464,1465,5,107,0,0,1465,204,1,0,0,0,1466,1467,5,114,0,0,1467, + 1468,5,101,0,0,1468,1469,5,113,0,0,1469,1470,5,109,0,0,1470,1471,5,105, + 0,0,1471,1472,5,110,0,0,1472,206,1,0,0,0,1473,1474,5,114,0,0,1474,1475, + 5,101,0,0,1475,1476,5,113,0,0,1476,1477,5,111,0,0,1477,1478,5,112,0,0, + 1478,1479,5,116,0,0,1479,208,1,0,0,0,1480,1481,5,114,0,0,1481,1482,5,101, + 0,0,1482,1483,5,113,0,0,1483,1484,5,114,0,0,1484,1485,5,101,0,0,1485,1486, + 5,102,0,0,1486,1487,5,117,0,0,1487,1488,5,115,0,0,1488,1489,5,101,0,0, + 1489,210,1,0,0,0,1490,1491,5,112,0,0,1491,1492,5,114,0,0,1492,1493,5,101, + 0,0,1493,1494,5,106,0,0,1494,1495,5,105,0,0,1495,1496,5,116,0,0,1496,1497, + 5,103,0,0,1497,1498,5,114,0,0,1498,1499,5,97,0,0,1499,1500,5,110,0,0,1500, + 1501,5,116,0,0,1501,212,1,0,0,0,1502,1503,5,112,0,0,1503,1504,5,114,0, + 0,1504,1505,5,101,0,0,1505,1506,5,106,0,0,1506,1507,5,105,0,0,1507,1508, + 5,116,0,0,1508,1509,5,100,0,0,1509,1510,5,101,0,0,1510,1511,5,110,0,0, + 1511,1512,5,121,0,0,1512,214,1,0,0,0,1513,1514,5,110,0,0,1514,1515,5,111, + 0,0,1515,1516,5,110,0,0,1516,1517,5,99,0,0,1517,1518,5,97,0,0,1518,1519, + 5,115,0,0,1519,1520,5,100,0,0,1520,1521,5,101,0,0,1521,1522,5,109,0,0, + 1522,1523,5,97,0,0,1523,1524,5,110,0,0,1524,1525,5,100,0,0,1525,216,1, + 0,0,0,1526,1527,5,110,0,0,1527,1528,5,111,0,0,1528,1529,5,110,0,0,1529, + 1530,5,99,0,0,1530,1531,5,97,0,0,1531,1532,5,115,0,0,1532,1533,5,108,0, + 0,1533,1534,5,105,0,0,1534,1535,5,110,0,0,1535,1536,5,107,0,0,1536,1537, + 5,100,0,0,1537,1538,5,101,0,0,1538,1539,5,109,0,0,1539,1540,5,97,0,0,1540, + 1541,5,110,0,0,1541,1542,5,100,0,0,1542,218,1,0,0,0,1543,1544,5,110,0, + 0,1544,1545,5,111,0,0,1545,1546,5,110,0,0,1546,1547,5,99,0,0,1547,1548, + 5,97,0,0,1548,1549,5,115,0,0,1549,1550,5,105,0,0,1550,1551,5,110,0,0,1551, + 1552,5,104,0,0,1552,1553,5,101,0,0,1553,1554,5,114,0,0,1554,1555,5,105, + 0,0,1555,1556,5,116,0,0,1556,1557,5,97,0,0,1557,1558,5,110,0,0,1558,1559, + 5,99,0,0,1559,1560,5,101,0,0,1560,220,1,0,0,0,1561,1562,5,99,0,0,1562, + 1563,5,97,0,0,1563,1564,5,108,0,0,1564,1565,5,108,0,0,1565,1566,5,99,0, + 0,1566,1567,5,111,0,0,1567,1568,5,110,0,0,1568,1569,5,118,0,0,1569,222, + 1,0,0,0,1570,1571,5,109,0,0,1571,1572,5,100,0,0,1572,1573,5,116,0,0,1573, + 1574,5,111,0,0,1574,1575,5,107,0,0,1575,1576,5,101,0,0,1576,1577,5,110, + 0,0,1577,224,1,0,0,0,1578,1579,5,45,0,0,1579,226,1,0,0,0,1580,1581,5,98, + 0,0,1581,1582,5,121,0,0,1582,1583,5,114,0,0,1583,1584,5,101,0,0,1584,1585, + 5,102,0,0,1585,1586,5,108,0,0,1586,1587,5,105,0,0,1587,1588,5,107,0,0, + 1588,1589,5,101,0,0,1589,228,1,0,0,0,1590,1591,5,46,0,0,1591,1592,5,99, + 0,0,1592,1593,5,116,0,0,1593,1594,5,111,0,0,1594,1595,5,114,0,0,1595,230, + 1,0,0,0,1596,1597,5,46,0,0,1597,1598,5,115,0,0,1598,1599,5,105,0,0,1599, + 1600,5,122,0,0,1600,1601,5,101,0,0,1601,232,1,0,0,0,1602,1603,5,46,0,0, + 1603,1604,5,112,0,0,1604,1605,5,97,0,0,1605,1606,5,99,0,0,1606,1607,5, + 107,0,0,1607,234,1,0,0,0,1608,1609,5,119,0,0,1609,1610,5,105,0,0,1610, + 1611,5,116,0,0,1611,1612,5,104,0,0,1612,236,1,0,0,0,1613,1614,5,46,0,0, + 1614,1615,5,105,0,0,1615,1616,5,110,0,0,1616,1617,5,116,0,0,1617,1618, + 5,101,0,0,1618,1619,5,114,0,0,1619,1620,5,102,0,0,1620,1621,5,97,0,0,1621, + 1622,5,99,0,0,1622,1623,5,101,0,0,1623,1624,5,105,0,0,1624,1625,5,109, + 0,0,1625,1626,5,112,0,0,1626,1627,5,108,0,0,1627,238,1,0,0,0,1628,1629, + 5,46,0,0,1629,1630,5,102,0,0,1630,1631,5,105,0,0,1631,1632,5,101,0,0,1632, + 1633,5,108,0,0,1633,1634,5,100,0,0,1634,240,1,0,0,0,1635,1636,5,109,0, + 0,1636,1637,5,97,0,0,1637,1638,5,114,0,0,1638,1639,5,115,0,0,1639,1640, + 5,104,0,0,1640,1641,5,97,0,0,1641,1642,5,108,0,0,1642,242,1,0,0,0,1643, + 1644,5,115,0,0,1644,1645,5,116,0,0,1645,1646,5,97,0,0,1646,1647,5,116, + 0,0,1647,1648,5,105,0,0,1648,1649,5,99,0,0,1649,244,1,0,0,0,1650,1651, + 5,105,0,0,1651,1652,5,110,0,0,1652,1653,5,105,0,0,1653,1654,5,116,0,0, + 1654,1655,5,111,0,0,1655,1656,5,110,0,0,1656,1657,5,108,0,0,1657,1658, + 5,121,0,0,1658,246,1,0,0,0,1659,1660,5,112,0,0,1660,1661,5,114,0,0,1661, + 1662,5,105,0,0,1662,1663,5,118,0,0,1663,1664,5,97,0,0,1664,1665,5,116, + 0,0,1665,1666,5,101,0,0,1666,1667,5,115,0,0,1667,1668,5,99,0,0,1668,1669, + 5,111,0,0,1669,1670,5,112,0,0,1670,1671,5,101,0,0,1671,248,1,0,0,0,1672, + 1673,5,108,0,0,1673,1674,5,105,0,0,1674,1675,5,116,0,0,1675,1676,5,101, + 0,0,1676,1677,5,114,0,0,1677,1678,5,97,0,0,1678,1679,5,108,0,0,1679,250, + 1,0,0,0,1680,1681,5,110,0,0,1681,1682,5,111,0,0,1682,1683,5,116,0,0,1683, + 1684,5,115,0,0,1684,1685,5,101,0,0,1685,1686,5,114,0,0,1686,1687,5,105, + 0,0,1687,1688,5,97,0,0,1688,1689,5,108,0,0,1689,1690,5,105,0,0,1690,1691, + 5,122,0,0,1691,1692,5,101,0,0,1692,1693,5,100,0,0,1693,252,1,0,0,0,1694, + 1695,5,118,0,0,1695,1696,5,111,0,0,1696,1697,5,108,0,0,1697,1698,5,97, + 0,0,1698,1699,5,116,0,0,1699,1700,5,105,0,0,1700,1701,5,108,0,0,1701,1702, + 5,101,0,0,1702,254,1,0,0,0,1703,1704,5,46,0,0,1704,1705,5,101,0,0,1705, + 1706,5,118,0,0,1706,1707,5,101,0,0,1707,1708,5,110,0,0,1708,1709,5,116, + 0,0,1709,256,1,0,0,0,1710,1711,5,46,0,0,1711,1712,5,97,0,0,1712,1713,5, + 100,0,0,1713,1714,5,100,0,0,1714,1715,5,111,0,0,1715,1716,5,110,0,0,1716, + 258,1,0,0,0,1717,1718,5,46,0,0,1718,1719,5,114,0,0,1719,1720,5,101,0,0, + 1720,1721,5,109,0,0,1721,1722,5,111,0,0,1722,1723,5,118,0,0,1723,1724, + 5,101,0,0,1724,1725,5,111,0,0,1725,1726,5,110,0,0,1726,260,1,0,0,0,1727, + 1728,5,46,0,0,1728,1729,5,102,0,0,1729,1730,5,105,0,0,1730,1731,5,114, + 0,0,1731,1732,5,101,0,0,1732,262,1,0,0,0,1733,1734,5,46,0,0,1734,1735, + 5,111,0,0,1735,1736,5,116,0,0,1736,1737,5,104,0,0,1737,1738,5,101,0,0, + 1738,1739,5,114,0,0,1739,264,1,0,0,0,1740,1741,5,46,0,0,1741,1742,5,112, + 0,0,1742,1743,5,114,0,0,1743,1744,5,111,0,0,1744,1745,5,112,0,0,1745,1746, + 5,101,0,0,1746,1747,5,114,0,0,1747,1748,5,116,0,0,1748,1749,5,121,0,0, + 1749,266,1,0,0,0,1750,1751,5,46,0,0,1751,1752,5,115,0,0,1752,1753,5,101, + 0,0,1753,1754,5,116,0,0,1754,268,1,0,0,0,1755,1756,5,46,0,0,1756,1757, + 5,103,0,0,1757,1758,5,101,0,0,1758,1759,5,116,0,0,1759,270,1,0,0,0,1760, + 1761,5,105,0,0,1761,1762,5,110,0,0,1762,272,1,0,0,0,1763,1764,5,111,0, + 0,1764,1765,5,117,0,0,1765,1766,5,116,0,0,1766,274,1,0,0,0,1767,1768,5, + 111,0,0,1768,1769,5,112,0,0,1769,1770,5,116,0,0,1770,276,1,0,0,0,1771, + 1772,5,46,0,0,1772,1773,5,109,0,0,1773,1774,5,101,0,0,1774,1775,5,116, + 0,0,1775,1776,5,104,0,0,1776,1777,5,111,0,0,1777,1778,5,100,0,0,1778,278, + 1,0,0,0,1779,1780,5,102,0,0,1780,1781,5,105,0,0,1781,1782,5,110,0,0,1782, + 1783,5,97,0,0,1783,1784,5,108,0,0,1784,280,1,0,0,0,1785,1786,5,118,0,0, + 1786,1787,5,105,0,0,1787,1788,5,114,0,0,1788,1789,5,116,0,0,1789,1790, + 5,117,0,0,1790,1791,5,97,0,0,1791,1792,5,108,0,0,1792,282,1,0,0,0,1793, + 1794,5,115,0,0,1794,1795,5,116,0,0,1795,1796,5,114,0,0,1796,1797,5,105, + 0,0,1797,1798,5,99,0,0,1798,1799,5,116,0,0,1799,284,1,0,0,0,1800,1801, + 5,104,0,0,1801,1802,5,105,0,0,1802,1803,5,100,0,0,1803,1804,5,101,0,0, + 1804,1805,5,98,0,0,1805,1806,5,121,0,0,1806,1807,5,115,0,0,1807,1808,5, + 105,0,0,1808,1809,5,103,0,0,1809,286,1,0,0,0,1810,1811,5,110,0,0,1811, + 1812,5,101,0,0,1812,1813,5,119,0,0,1813,1814,5,115,0,0,1814,1815,5,108, + 0,0,1815,1816,5,111,0,0,1816,1817,5,116,0,0,1817,288,1,0,0,0,1818,1819, + 5,117,0,0,1819,1820,5,110,0,0,1820,1821,5,109,0,0,1821,1822,5,97,0,0,1822, + 1823,5,110,0,0,1823,1824,5,97,0,0,1824,1825,5,103,0,0,1825,1826,5,101, + 0,0,1826,1827,5,100,0,0,1827,1828,5,101,0,0,1828,1829,5,120,0,0,1829,1830, + 5,112,0,0,1830,290,1,0,0,0,1831,1832,5,114,0,0,1832,1833,5,101,0,0,1833, + 1834,5,113,0,0,1834,1835,5,115,0,0,1835,1836,5,101,0,0,1836,1837,5,99, + 0,0,1837,1838,5,111,0,0,1838,1839,5,98,0,0,1839,1840,5,106,0,0,1840,292, + 1,0,0,0,1841,1842,5,112,0,0,1842,1843,5,105,0,0,1843,1844,5,110,0,0,1844, + 1845,5,118,0,0,1845,1846,5,111,0,0,1846,1847,5,107,0,0,1847,1848,5,101, + 0,0,1848,1849,5,105,0,0,1849,1850,5,109,0,0,1850,1851,5,112,0,0,1851,1852, + 5,108,0,0,1852,294,1,0,0,0,1853,1854,5,110,0,0,1854,1855,5,111,0,0,1855, + 1856,5,109,0,0,1856,1857,5,97,0,0,1857,1858,5,110,0,0,1858,1859,5,103, + 0,0,1859,1860,5,108,0,0,1860,1861,5,101,0,0,1861,296,1,0,0,0,1862,1863, + 5,108,0,0,1863,1864,5,97,0,0,1864,1865,5,115,0,0,1865,1866,5,116,0,0,1866, + 1867,5,101,0,0,1867,1868,5,114,0,0,1868,1869,5,114,0,0,1869,298,1,0,0, + 0,1870,1871,5,119,0,0,1871,1872,5,105,0,0,1872,1873,5,110,0,0,1873,1874, + 5,97,0,0,1874,1875,5,112,0,0,1875,1876,5,105,0,0,1876,300,1,0,0,0,1877, + 1878,5,98,0,0,1878,1879,5,101,0,0,1879,1880,5,115,0,0,1880,1881,5,116, + 0,0,1881,1882,5,102,0,0,1882,1883,5,105,0,0,1883,1884,5,116,0,0,1884,302, + 1,0,0,0,1885,1886,5,111,0,0,1886,1887,5,110,0,0,1887,304,1,0,0,0,1888, + 1889,5,111,0,0,1889,1890,5,102,0,0,1890,1891,5,102,0,0,1891,306,1,0,0, + 0,1892,1893,5,99,0,0,1893,1894,5,104,0,0,1894,1895,5,97,0,0,1895,1896, + 5,114,0,0,1896,1897,5,109,0,0,1897,1898,5,97,0,0,1898,1899,5,112,0,0,1899, + 1900,5,101,0,0,1900,1901,5,114,0,0,1901,1902,5,114,0,0,1902,1903,5,111, + 0,0,1903,1904,5,114,0,0,1904,308,1,0,0,0,1905,1906,5,46,0,0,1906,1907, + 5,99,0,0,1907,1908,5,99,0,0,1908,1909,5,116,0,0,1909,1910,5,111,0,0,1910, + 1911,5,114,0,0,1911,310,1,0,0,0,1912,1913,5,105,0,0,1913,1914,5,108,0, + 0,1914,312,1,0,0,0,1915,1916,5,105,0,0,1916,1917,5,110,0,0,1917,1918,5, + 105,0,0,1918,1919,5,116,0,0,1919,314,1,0,0,0,1920,1921,5,46,0,0,1921,1922, + 5,116,0,0,1922,1923,5,114,0,0,1923,1924,5,121,0,0,1924,316,1,0,0,0,1925, + 1926,5,116,0,0,1926,1927,5,111,0,0,1927,318,1,0,0,0,1928,1929,5,102,0, + 0,1929,1930,5,105,0,0,1930,1931,5,108,0,0,1931,1932,5,116,0,0,1932,1933, + 5,101,0,0,1933,1934,5,114,0,0,1934,320,1,0,0,0,1935,1936,5,99,0,0,1936, + 1937,5,97,0,0,1937,1938,5,116,0,0,1938,1939,5,99,0,0,1939,1940,5,104,0, + 0,1940,322,1,0,0,0,1941,1942,5,102,0,0,1942,1943,5,105,0,0,1943,1944,5, + 110,0,0,1944,1945,5,97,0,0,1945,1946,5,108,0,0,1946,1947,5,108,0,0,1947, + 1948,5,121,0,0,1948,324,1,0,0,0,1949,1950,5,102,0,0,1950,1951,5,97,0,0, + 1951,1952,5,117,0,0,1952,1953,5,108,0,0,1953,1954,5,116,0,0,1954,326,1, + 0,0,0,1955,1956,5,104,0,0,1956,1957,5,97,0,0,1957,1958,5,110,0,0,1958, + 1959,5,100,0,0,1959,1960,5,108,0,0,1960,1961,5,101,0,0,1961,1962,5,114, + 0,0,1962,328,1,0,0,0,1963,1964,5,46,0,0,1964,1965,5,100,0,0,1965,1966, + 5,97,0,0,1966,1967,5,116,0,0,1967,1968,5,97,0,0,1968,330,1,0,0,0,1969, + 1970,5,116,0,0,1970,1971,5,108,0,0,1971,1972,5,115,0,0,1972,332,1,0,0, + 0,1973,1974,5,46,0,0,1974,1975,5,112,0,0,1975,1976,5,117,0,0,1976,1977, + 5,98,0,0,1977,1978,5,108,0,0,1978,1979,5,105,0,0,1979,1980,5,99,0,0,1980, + 1981,5,75,0,0,1981,1982,5,101,0,0,1982,1983,5,121,0,0,1983,334,1,0,0,0, + 1984,1985,5,46,0,0,1985,1986,5,118,0,0,1986,1987,5,101,0,0,1987,1988,5, + 114,0,0,1988,336,1,0,0,0,1989,1990,5,46,0,0,1990,1991,5,108,0,0,1991,1992, + 5,111,0,0,1992,1993,5,99,0,0,1993,1994,5,97,0,0,1994,1995,5,108,0,0,1995, + 1996,5,101,0,0,1996,338,1,0,0,0,1997,1998,5,46,0,0,1998,1999,5,112,0,0, + 1999,2000,5,117,0,0,2000,2001,5,98,0,0,2001,2002,5,108,0,0,2002,2003,5, + 105,0,0,2003,2004,5,99,0,0,2004,2005,5,107,0,0,2005,2006,5,101,0,0,2006, + 2007,5,121,0,0,2007,2008,5,116,0,0,2008,2009,5,111,0,0,2009,2010,5,107, + 0,0,2010,2011,5,101,0,0,2011,2012,5,110,0,0,2012,340,1,0,0,0,2013,2014, + 5,102,0,0,2014,2015,5,111,0,0,2015,2016,5,114,0,0,2016,2017,5,119,0,0, + 2017,2018,5,97,0,0,2018,2019,5,114,0,0,2019,2020,5,100,0,0,2020,2021,5, + 101,0,0,2021,2022,5,114,0,0,2022,342,1,0,0,0,2023,2025,5,45,0,0,2024,2023, + 1,0,0,0,2024,2025,1,0,0,0,2025,2039,1,0,0,0,2026,2027,5,48,0,0,2027,2028, + 5,120,0,0,2028,2030,1,0,0,0,2029,2031,7,0,0,0,2030,2029,1,0,0,0,2031,2032, + 1,0,0,0,2032,2030,1,0,0,0,2032,2033,1,0,0,0,2033,2040,1,0,0,0,2034,2036, + 7,1,0,0,2035,2034,1,0,0,0,2036,2037,1,0,0,0,2037,2035,1,0,0,0,2037,2038, + 1,0,0,0,2038,2040,1,0,0,0,2039,2026,1,0,0,0,2039,2035,1,0,0,0,2040,344, + 1,0,0,0,2041,2043,5,45,0,0,2042,2041,1,0,0,0,2042,2043,1,0,0,0,2043,2057, + 1,0,0,0,2044,2045,5,48,0,0,2045,2046,5,120,0,0,2046,2048,1,0,0,0,2047, + 2049,7,0,0,0,2048,2047,1,0,0,0,2049,2050,1,0,0,0,2050,2048,1,0,0,0,2050, + 2051,1,0,0,0,2051,2058,1,0,0,0,2052,2054,7,1,0,0,2053,2052,1,0,0,0,2054, + 2055,1,0,0,0,2055,2053,1,0,0,0,2055,2056,1,0,0,0,2056,2058,1,0,0,0,2057, + 2044,1,0,0,0,2057,2053,1,0,0,0,2058,346,1,0,0,0,2059,2061,5,45,0,0,2060, + 2059,1,0,0,0,2060,2061,1,0,0,0,2061,2112,1,0,0,0,2062,2064,7,1,0,0,2063, + 2062,1,0,0,0,2064,2065,1,0,0,0,2065,2063,1,0,0,0,2065,2066,1,0,0,0,2066, + 2093,1,0,0,0,2067,2069,5,46,0,0,2068,2070,7,1,0,0,2069,2068,1,0,0,0,2070, + 2071,1,0,0,0,2071,2069,1,0,0,0,2071,2072,1,0,0,0,2072,2082,1,0,0,0,2073, + 2075,7,2,0,0,2074,2076,7,3,0,0,2075,2074,1,0,0,0,2075,2076,1,0,0,0,2076, + 2078,1,0,0,0,2077,2079,7,1,0,0,2078,2077,1,0,0,0,2079,2080,1,0,0,0,2080, + 2078,1,0,0,0,2080,2081,1,0,0,0,2081,2083,1,0,0,0,2082,2073,1,0,0,0,2082, + 2083,1,0,0,0,2083,2094,1,0,0,0,2084,2086,7,2,0,0,2085,2087,7,3,0,0,2086, + 2085,1,0,0,0,2086,2087,1,0,0,0,2087,2089,1,0,0,0,2088,2090,7,1,0,0,2089, + 2088,1,0,0,0,2090,2091,1,0,0,0,2091,2089,1,0,0,0,2091,2092,1,0,0,0,2092, + 2094,1,0,0,0,2093,2067,1,0,0,0,2093,2084,1,0,0,0,2094,2113,1,0,0,0,2095, + 2097,5,46,0,0,2096,2098,7,1,0,0,2097,2096,1,0,0,0,2098,2099,1,0,0,0,2099, + 2097,1,0,0,0,2099,2100,1,0,0,0,2100,2110,1,0,0,0,2101,2103,7,2,0,0,2102, + 2104,7,3,0,0,2103,2102,1,0,0,0,2103,2104,1,0,0,0,2104,2106,1,0,0,0,2105, + 2107,7,1,0,0,2106,2105,1,0,0,0,2107,2108,1,0,0,0,2108,2106,1,0,0,0,2108, + 2109,1,0,0,0,2109,2111,1,0,0,0,2110,2101,1,0,0,0,2110,2111,1,0,0,0,2111, + 2113,1,0,0,0,2112,2063,1,0,0,0,2112,2095,1,0,0,0,2113,348,1,0,0,0,2114, + 2115,5,58,0,0,2115,2116,5,58,0,0,2116,350,1,0,0,0,2117,2118,5,46,0,0,2118, + 2119,5,46,0,0,2119,2120,5,46,0,0,2120,352,1,0,0,0,2121,2122,5,110,0,0, + 2122,2123,5,117,0,0,2123,2124,5,108,0,0,2124,2125,5,108,0,0,2125,354,1, + 0,0,0,2126,2127,5,110,0,0,2127,2128,5,117,0,0,2128,2129,5,108,0,0,2129, + 2130,5,108,0,0,2130,2131,5,114,0,0,2131,2132,5,101,0,0,2132,2133,5,102, + 0,0,2133,356,1,0,0,0,2134,2135,5,46,0,0,2135,2136,5,104,0,0,2136,2137, + 5,97,0,0,2137,2138,5,115,0,0,2138,2139,5,104,0,0,2139,358,1,0,0,0,2140, + 2141,5,99,0,0,2141,2142,5,104,0,0,2142,2143,5,97,0,0,2143,2150,5,114,0, + 0,2144,2145,5,119,0,0,2145,2146,5,99,0,0,2146,2147,5,104,0,0,2147,2148, + 5,97,0,0,2148,2150,5,114,0,0,2149,2140,1,0,0,0,2149,2144,1,0,0,0,2150, + 360,1,0,0,0,2151,2152,5,115,0,0,2152,2153,5,116,0,0,2153,2154,5,114,0, + 0,2154,2155,5,105,0,0,2155,2156,5,110,0,0,2156,2157,5,103,0,0,2157,362, + 1,0,0,0,2158,2159,5,98,0,0,2159,2160,5,111,0,0,2160,2161,5,111,0,0,2161, + 2162,5,108,0,0,2162,364,1,0,0,0,2163,2164,5,105,0,0,2164,2165,5,110,0, + 0,2165,2166,5,116,0,0,2166,2167,5,56,0,0,2167,366,1,0,0,0,2168,2169,5, + 105,0,0,2169,2170,5,110,0,0,2170,2171,5,116,0,0,2171,2172,5,49,0,0,2172, + 2173,5,54,0,0,2173,368,1,0,0,0,2174,2175,5,105,0,0,2175,2176,5,110,0,0, + 2176,2177,5,116,0,0,2177,2178,5,51,0,0,2178,2179,5,50,0,0,2179,370,1,0, + 0,0,2180,2181,5,105,0,0,2181,2182,5,110,0,0,2182,2183,5,116,0,0,2183,2184, + 5,54,0,0,2184,2185,5,52,0,0,2185,372,1,0,0,0,2186,2187,5,102,0,0,2187, + 2188,5,108,0,0,2188,2189,5,111,0,0,2189,2190,5,97,0,0,2190,2191,5,116, + 0,0,2191,2192,5,51,0,0,2192,2193,5,50,0,0,2193,374,1,0,0,0,2194,2195,5, + 102,0,0,2195,2196,5,108,0,0,2196,2197,5,111,0,0,2197,2198,5,97,0,0,2198, + 2199,5,116,0,0,2199,2200,5,54,0,0,2200,2201,5,52,0,0,2201,376,1,0,0,0, + 2202,2203,5,117,0,0,2203,2204,5,110,0,0,2204,2205,5,115,0,0,2205,2206, + 5,105,0,0,2206,2207,5,103,0,0,2207,2208,5,110,0,0,2208,2209,5,101,0,0, + 2209,2210,5,100,0,0,2210,378,1,0,0,0,2211,2212,5,117,0,0,2212,2213,5,105, + 0,0,2213,2214,5,110,0,0,2214,2215,5,116,0,0,2215,2216,5,56,0,0,2216,380, + 1,0,0,0,2217,2218,5,117,0,0,2218,2219,5,105,0,0,2219,2220,5,110,0,0,2220, + 2221,5,116,0,0,2221,2222,5,49,0,0,2222,2223,5,54,0,0,2223,382,1,0,0,0, + 2224,2225,5,117,0,0,2225,2226,5,105,0,0,2226,2227,5,110,0,0,2227,2228, + 5,116,0,0,2228,2229,5,51,0,0,2229,2230,5,50,0,0,2230,384,1,0,0,0,2231, + 2232,5,117,0,0,2232,2233,5,105,0,0,2233,2234,5,110,0,0,2234,2235,5,116, + 0,0,2235,2236,5,54,0,0,2236,2237,5,52,0,0,2237,386,1,0,0,0,2238,2239,5, + 105,0,0,2239,2240,5,110,0,0,2240,2241,5,116,0,0,2241,388,1,0,0,0,2242, + 2243,5,117,0,0,2243,2244,5,105,0,0,2244,2245,5,110,0,0,2245,2246,5,116, + 0,0,2246,390,1,0,0,0,2247,2248,5,116,0,0,2248,2249,5,121,0,0,2249,2250, + 5,112,0,0,2250,2251,5,101,0,0,2251,392,1,0,0,0,2252,2253,5,111,0,0,2253, + 2254,5,98,0,0,2254,2255,5,106,0,0,2255,2256,5,101,0,0,2256,2257,5,99,0, + 0,2257,2258,5,116,0,0,2258,394,1,0,0,0,2259,2260,5,46,0,0,2260,2261,5, + 109,0,0,2261,2262,5,111,0,0,2262,2263,5,100,0,0,2263,2264,5,117,0,0,2264, + 2265,5,108,0,0,2265,2266,5,101,0,0,2266,396,1,0,0,0,2267,2268,5,118,0, + 0,2268,2269,5,97,0,0,2269,2270,5,108,0,0,2270,2271,5,117,0,0,2271,2272, + 5,101,0,0,2272,398,1,0,0,0,2273,2274,5,118,0,0,2274,2275,5,97,0,0,2275, + 2276,5,108,0,0,2276,2277,5,117,0,0,2277,2278,5,101,0,0,2278,2279,5,116, + 0,0,2279,2280,5,121,0,0,2280,2281,5,112,0,0,2281,2282,5,101,0,0,2282,400, + 1,0,0,0,2283,2284,5,118,0,0,2284,2285,5,111,0,0,2285,2286,5,105,0,0,2286, + 2287,5,100,0,0,2287,402,1,0,0,0,2288,2289,5,101,0,0,2289,2290,5,110,0, + 0,2290,2291,5,117,0,0,2291,2292,5,109,0,0,2292,404,1,0,0,0,2293,2294,5, + 99,0,0,2294,2295,5,117,0,0,2295,2296,5,115,0,0,2296,2297,5,116,0,0,2297, + 2298,5,111,0,0,2298,2299,5,109,0,0,2299,406,1,0,0,0,2300,2301,5,102,0, + 0,2301,2302,5,105,0,0,2302,2303,5,120,0,0,2303,2304,5,101,0,0,2304,2305, + 5,100,0,0,2305,408,1,0,0,0,2306,2307,5,115,0,0,2307,2308,5,121,0,0,2308, + 2309,5,115,0,0,2309,2310,5,116,0,0,2310,2311,5,114,0,0,2311,2312,5,105, + 0,0,2312,2313,5,110,0,0,2313,2314,5,103,0,0,2314,410,1,0,0,0,2315,2316, + 5,97,0,0,2316,2317,5,114,0,0,2317,2318,5,114,0,0,2318,2319,5,97,0,0,2319, + 2320,5,121,0,0,2320,412,1,0,0,0,2321,2322,5,118,0,0,2322,2323,5,97,0,0, + 2323,2324,5,114,0,0,2324,2325,5,105,0,0,2325,2326,5,97,0,0,2326,2327,5, + 110,0,0,2327,2328,5,116,0,0,2328,414,1,0,0,0,2329,2330,5,99,0,0,2330,2331, + 5,117,0,0,2331,2332,5,114,0,0,2332,2333,5,114,0,0,2333,2334,5,101,0,0, + 2334,2335,5,110,0,0,2335,2336,5,99,0,0,2336,2337,5,121,0,0,2337,416,1, + 0,0,0,2338,2339,5,115,0,0,2339,2340,5,121,0,0,2340,2341,5,115,0,0,2341, + 2342,5,99,0,0,2342,2343,5,104,0,0,2343,2344,5,97,0,0,2344,2345,5,114,0, + 0,2345,418,1,0,0,0,2346,2347,5,101,0,0,2347,2348,5,114,0,0,2348,2349,5, + 114,0,0,2349,2350,5,111,0,0,2350,2351,5,114,0,0,2351,420,1,0,0,0,2352, + 2353,5,100,0,0,2353,2354,5,101,0,0,2354,2355,5,99,0,0,2355,2356,5,105, + 0,0,2356,2357,5,109,0,0,2357,2358,5,97,0,0,2358,2359,5,108,0,0,2359,422, + 1,0,0,0,2360,2361,5,100,0,0,2361,2362,5,97,0,0,2362,2363,5,116,0,0,2363, + 2364,5,101,0,0,2364,424,1,0,0,0,2365,2366,5,98,0,0,2366,2367,5,115,0,0, + 2367,2368,5,116,0,0,2368,2369,5,114,0,0,2369,426,1,0,0,0,2370,2371,5,108, + 0,0,2371,2372,5,112,0,0,2372,2373,5,115,0,0,2373,2374,5,116,0,0,2374,2375, + 5,114,0,0,2375,428,1,0,0,0,2376,2377,5,108,0,0,2377,2378,5,112,0,0,2378, + 2379,5,119,0,0,2379,2380,5,115,0,0,2380,2381,5,116,0,0,2381,2382,5,114, + 0,0,2382,430,1,0,0,0,2383,2384,5,108,0,0,2384,2385,5,112,0,0,2385,2386, + 5,116,0,0,2386,2387,5,115,0,0,2387,2388,5,116,0,0,2388,2389,5,114,0,0, + 2389,432,1,0,0,0,2390,2391,5,111,0,0,2391,2392,5,98,0,0,2392,2393,5,106, + 0,0,2393,2394,5,101,0,0,2394,2395,5,99,0,0,2395,2396,5,116,0,0,2396,2397, + 5,114,0,0,2397,2398,5,101,0,0,2398,2399,5,102,0,0,2399,434,1,0,0,0,2400, + 2401,5,105,0,0,2401,2402,5,117,0,0,2402,2403,5,110,0,0,2403,2404,5,107, + 0,0,2404,2405,5,110,0,0,2405,2406,5,111,0,0,2406,2407,5,119,0,0,2407,2408, + 5,110,0,0,2408,436,1,0,0,0,2409,2410,5,105,0,0,2410,2411,5,100,0,0,2411, + 2412,5,105,0,0,2412,2413,5,115,0,0,2413,2414,5,112,0,0,2414,2415,5,97, + 0,0,2415,2416,5,116,0,0,2416,2417,5,99,0,0,2417,2418,5,104,0,0,2418,438, + 1,0,0,0,2419,2420,5,115,0,0,2420,2421,5,116,0,0,2421,2422,5,114,0,0,2422, + 2423,5,117,0,0,2423,2424,5,99,0,0,2424,2425,5,116,0,0,2425,440,1,0,0,0, + 2426,2427,5,105,0,0,2427,2428,5,110,0,0,2428,2429,5,116,0,0,2429,2430, + 5,101,0,0,2430,2431,5,114,0,0,2431,2432,5,102,0,0,2432,2433,5,97,0,0,2433, + 2434,5,99,0,0,2434,2435,5,101,0,0,2435,442,1,0,0,0,2436,2437,5,115,0,0, + 2437,2438,5,97,0,0,2438,2439,5,102,0,0,2439,2440,5,101,0,0,2440,2441,5, + 97,0,0,2441,2442,5,114,0,0,2442,2443,5,114,0,0,2443,2444,5,97,0,0,2444, + 2445,5,121,0,0,2445,444,1,0,0,0,2446,2447,5,98,0,0,2447,2448,5,121,0,0, + 2448,2449,5,118,0,0,2449,2450,5,97,0,0,2450,2451,5,108,0,0,2451,2452,5, + 115,0,0,2452,2453,5,116,0,0,2453,2454,5,114,0,0,2454,446,1,0,0,0,2455, + 2456,5,97,0,0,2456,2457,5,110,0,0,2457,2458,5,115,0,0,2458,2459,5,105, + 0,0,2459,448,1,0,0,0,2460,2461,5,116,0,0,2461,2462,5,98,0,0,2462,2463, + 5,115,0,0,2463,2464,5,116,0,0,2464,2465,5,114,0,0,2465,450,1,0,0,0,2466, + 2467,5,109,0,0,2467,2468,5,101,0,0,2468,2469,5,116,0,0,2469,2470,5,104, + 0,0,2470,2471,5,111,0,0,2471,2472,5,100,0,0,2472,452,1,0,0,0,2473,2474, + 5,97,0,0,2474,2475,5,110,0,0,2475,2476,5,121,0,0,2476,454,1,0,0,0,2477, + 2478,5,108,0,0,2478,2479,5,112,0,0,2479,2480,5,115,0,0,2480,2481,5,116, + 0,0,2481,2482,5,114,0,0,2482,2483,5,117,0,0,2483,2484,5,99,0,0,2484,2485, + 5,116,0,0,2485,456,1,0,0,0,2486,2487,5,118,0,0,2487,2488,5,101,0,0,2488, + 2489,5,99,0,0,2489,2490,5,116,0,0,2490,2491,5,111,0,0,2491,2492,5,114, + 0,0,2492,458,1,0,0,0,2493,2494,5,104,0,0,2494,2495,5,114,0,0,2495,2496, + 5,101,0,0,2496,2497,5,115,0,0,2497,2498,5,117,0,0,2498,2499,5,108,0,0, + 2499,2500,5,116,0,0,2500,460,1,0,0,0,2501,2502,5,99,0,0,2502,2503,5,97, + 0,0,2503,2504,5,114,0,0,2504,2505,5,114,0,0,2505,2506,5,97,0,0,2506,2507, + 5,121,0,0,2507,462,1,0,0,0,2508,2509,5,117,0,0,2509,2510,5,115,0,0,2510, + 2511,5,101,0,0,2511,2512,5,114,0,0,2512,2513,5,100,0,0,2513,2514,5,101, + 0,0,2514,2515,5,102,0,0,2515,2516,5,105,0,0,2516,2517,5,110,0,0,2517,2518, + 5,101,0,0,2518,2519,5,100,0,0,2519,464,1,0,0,0,2520,2521,5,114,0,0,2521, + 2522,5,101,0,0,2522,2523,5,99,0,0,2523,2524,5,111,0,0,2524,2525,5,114, + 0,0,2525,2526,5,100,0,0,2526,466,1,0,0,0,2527,2528,5,102,0,0,2528,2529, + 5,105,0,0,2529,2530,5,108,0,0,2530,2531,5,101,0,0,2531,2532,5,116,0,0, + 2532,2533,5,105,0,0,2533,2534,5,109,0,0,2534,2535,5,101,0,0,2535,468,1, + 0,0,0,2536,2537,5,98,0,0,2537,2538,5,108,0,0,2538,2539,5,111,0,0,2539, + 2540,5,98,0,0,2540,470,1,0,0,0,2541,2542,5,115,0,0,2542,2543,5,116,0,0, + 2543,2544,5,114,0,0,2544,2545,5,101,0,0,2545,2546,5,97,0,0,2546,2547,5, + 109,0,0,2547,472,1,0,0,0,2548,2549,5,115,0,0,2549,2550,5,116,0,0,2550, + 2551,5,111,0,0,2551,2552,5,114,0,0,2552,2553,5,97,0,0,2553,2554,5,103, + 0,0,2554,2555,5,101,0,0,2555,474,1,0,0,0,2556,2557,5,115,0,0,2557,2558, + 5,116,0,0,2558,2559,5,114,0,0,2559,2560,5,101,0,0,2560,2561,5,97,0,0,2561, + 2562,5,109,0,0,2562,2563,5,101,0,0,2563,2564,5,100,0,0,2564,2565,5,95, + 0,0,2565,2566,5,111,0,0,2566,2567,5,98,0,0,2567,2568,5,106,0,0,2568,2569, + 5,101,0,0,2569,2570,5,99,0,0,2570,2571,5,116,0,0,2571,476,1,0,0,0,2572, + 2573,5,115,0,0,2573,2574,5,116,0,0,2574,2575,5,111,0,0,2575,2576,5,114, + 0,0,2576,2577,5,101,0,0,2577,2578,5,100,0,0,2578,2579,5,95,0,0,2579,2580, + 5,111,0,0,2580,2581,5,98,0,0,2581,2582,5,106,0,0,2582,2583,5,101,0,0,2583, + 2584,5,99,0,0,2584,2585,5,116,0,0,2585,478,1,0,0,0,2586,2587,5,98,0,0, + 2587,2588,5,108,0,0,2588,2589,5,111,0,0,2589,2590,5,98,0,0,2590,2591,5, + 95,0,0,2591,2592,5,111,0,0,2592,2593,5,98,0,0,2593,2594,5,106,0,0,2594, + 2595,5,101,0,0,2595,2596,5,99,0,0,2596,2597,5,116,0,0,2597,480,1,0,0,0, + 2598,2599,5,99,0,0,2599,2600,5,102,0,0,2600,482,1,0,0,0,2601,2602,5,99, + 0,0,2602,2603,5,108,0,0,2603,2604,5,115,0,0,2604,2605,5,105,0,0,2605,2606, + 5,100,0,0,2606,484,1,0,0,0,2607,2608,5,105,0,0,2608,2609,5,110,0,0,2609, + 2610,5,115,0,0,2610,2611,5,116,0,0,2611,2612,5,97,0,0,2612,2613,5,110, + 0,0,2613,2614,5,99,0,0,2614,2615,5,101,0,0,2615,486,1,0,0,0,2616,2617, + 5,101,0,0,2617,2618,5,120,0,0,2618,2619,5,112,0,0,2619,2620,5,108,0,0, + 2620,2621,5,105,0,0,2621,2622,5,99,0,0,2622,2623,5,105,0,0,2623,2624,5, + 116,0,0,2624,488,1,0,0,0,2625,2626,5,100,0,0,2626,2627,5,101,0,0,2627, + 2628,5,102,0,0,2628,2629,5,97,0,0,2629,2630,5,117,0,0,2630,2631,5,108, + 0,0,2631,2632,5,116,0,0,2632,490,1,0,0,0,2633,2634,5,118,0,0,2634,2635, + 5,97,0,0,2635,2636,5,114,0,0,2636,2637,5,97,0,0,2637,2638,5,114,0,0,2638, + 2639,5,103,0,0,2639,492,1,0,0,0,2640,2641,5,117,0,0,2641,2642,5,110,0, + 0,2642,2643,5,109,0,0,2643,2644,5,97,0,0,2644,2645,5,110,0,0,2645,2646, + 5,97,0,0,2646,2647,5,103,0,0,2647,2648,5,101,0,0,2648,2649,5,100,0,0,2649, + 494,1,0,0,0,2650,2651,5,99,0,0,2651,2652,5,100,0,0,2652,2653,5,101,0,0, + 2653,2654,5,99,0,0,2654,2655,5,108,0,0,2655,496,1,0,0,0,2656,2657,5,115, + 0,0,2657,2658,5,116,0,0,2658,2659,5,100,0,0,2659,2660,5,99,0,0,2660,2661, + 5,97,0,0,2661,2662,5,108,0,0,2662,2663,5,108,0,0,2663,498,1,0,0,0,2664, + 2665,5,116,0,0,2665,2666,5,104,0,0,2666,2667,5,105,0,0,2667,2668,5,115, + 0,0,2668,2669,5,99,0,0,2669,2670,5,97,0,0,2670,2671,5,108,0,0,2671,2672, + 5,108,0,0,2672,500,1,0,0,0,2673,2674,5,102,0,0,2674,2675,5,97,0,0,2675, + 2676,5,115,0,0,2676,2677,5,116,0,0,2677,2678,5,99,0,0,2678,2679,5,97,0, + 0,2679,2680,5,108,0,0,2680,2681,5,108,0,0,2681,502,1,0,0,0,2682,2683,5, + 33,0,0,2683,504,1,0,0,0,2684,2685,5,33,0,0,2685,2686,5,33,0,0,2686,506, + 1,0,0,0,2687,2688,5,116,0,0,2688,2689,5,121,0,0,2689,2690,5,112,0,0,2690, + 2691,5,101,0,0,2691,2692,5,100,0,0,2692,2693,5,114,0,0,2693,2694,5,101, + 0,0,2694,2702,5,102,0,0,2695,2696,5,114,0,0,2696,2697,5,101,0,0,2697,2698, + 5,102,0,0,2698,2699,5,97,0,0,2699,2700,5,110,0,0,2700,2702,5,121,0,0,2701, + 2687,1,0,0,0,2701,2695,1,0,0,0,2702,508,1,0,0,0,2703,2704,5,46,0,0,2704, + 2705,5,112,0,0,2705,2706,5,97,0,0,2706,2707,5,114,0,0,2707,2708,5,97,0, + 0,2708,2709,5,109,0,0,2709,510,1,0,0,0,2710,2711,5,99,0,0,2711,2712,5, + 111,0,0,2712,2713,5,110,0,0,2713,2714,5,115,0,0,2714,2715,5,116,0,0,2715, + 2716,5,114,0,0,2716,2717,5,97,0,0,2717,2718,5,105,0,0,2718,2719,5,110, + 0,0,2719,2720,5,116,0,0,2720,512,1,0,0,0,2721,2722,5,46,0,0,2722,2723, + 5,116,0,0,2723,2724,5,104,0,0,2724,2725,5,105,0,0,2725,2726,5,115,0,0, + 2726,514,1,0,0,0,2727,2728,5,46,0,0,2728,2729,5,98,0,0,2729,2730,5,97, + 0,0,2730,2731,5,115,0,0,2731,2732,5,101,0,0,2732,516,1,0,0,0,2733,2734, + 5,46,0,0,2734,2735,5,110,0,0,2735,2736,5,101,0,0,2736,2737,5,115,0,0,2737, + 2738,5,116,0,0,2738,2739,5,101,0,0,2739,2740,5,114,0,0,2740,518,1,0,0, + 0,2741,2742,5,38,0,0,2742,520,1,0,0,0,2743,2744,5,91,0,0,2744,2745,5,93, + 0,0,2745,522,1,0,0,0,2746,2747,5,42,0,0,2747,524,1,0,0,0,2748,2761,5,92, + 0,0,2749,2762,7,4,0,0,2750,2752,7,5,0,0,2751,2753,7,5,0,0,2752,2751,1, + 0,0,0,2752,2753,1,0,0,0,2753,2755,1,0,0,0,2754,2756,7,5,0,0,2755,2754, + 1,0,0,0,2755,2756,1,0,0,0,2756,2762,1,0,0,0,2757,2759,5,13,0,0,2758,2757, + 1,0,0,0,2758,2759,1,0,0,0,2759,2760,1,0,0,0,2760,2762,5,10,0,0,2761,2749, + 1,0,0,0,2761,2750,1,0,0,0,2761,2758,1,0,0,0,2762,526,1,0,0,0,2763,2768, + 5,34,0,0,2764,2767,8,6,0,0,2765,2767,3,525,262,0,2766,2764,1,0,0,0,2766, + 2765,1,0,0,0,2767,2770,1,0,0,0,2768,2766,1,0,0,0,2768,2769,1,0,0,0,2769, + 2771,1,0,0,0,2770,2768,1,0,0,0,2771,2772,5,34,0,0,2772,528,1,0,0,0,2773, + 2778,5,39,0,0,2774,2777,8,7,0,0,2775,2777,3,525,262,0,2776,2774,1,0,0, + 0,2776,2775,1,0,0,0,2777,2780,1,0,0,0,2778,2776,1,0,0,0,2778,2779,1,0, + 0,0,2779,2781,1,0,0,0,2780,2778,1,0,0,0,2781,2782,5,39,0,0,2782,530,1, + 0,0,0,2783,2784,5,46,0,0,2784,532,1,0,0,0,2785,2786,5,43,0,0,2786,534, + 1,0,0,0,2787,2788,5,35,0,0,2788,2789,5,100,0,0,2789,2790,5,101,0,0,2790, + 2791,5,102,0,0,2791,2792,5,105,0,0,2792,2793,5,110,0,0,2793,2794,5,101, + 0,0,2794,536,1,0,0,0,2795,2796,5,35,0,0,2796,2797,5,117,0,0,2797,2798, + 5,110,0,0,2798,2799,5,100,0,0,2799,2800,5,101,0,0,2800,2801,5,102,0,0, + 2801,538,1,0,0,0,2802,2803,5,35,0,0,2803,2804,5,105,0,0,2804,2805,5,102, + 0,0,2805,2806,5,100,0,0,2806,2807,5,101,0,0,2807,2808,5,102,0,0,2808,540, + 1,0,0,0,2809,2810,5,35,0,0,2810,2811,5,105,0,0,2811,2812,5,102,0,0,2812, + 2813,5,110,0,0,2813,2814,5,100,0,0,2814,2815,5,101,0,0,2815,2816,5,102, + 0,0,2816,542,1,0,0,0,2817,2818,5,35,0,0,2818,2819,5,101,0,0,2819,2820, + 5,108,0,0,2820,2821,5,115,0,0,2821,2822,5,101,0,0,2822,544,1,0,0,0,2823, + 2824,5,35,0,0,2824,2825,5,101,0,0,2825,2826,5,110,0,0,2826,2827,5,100, + 0,0,2827,2828,5,105,0,0,2828,2829,5,102,0,0,2829,546,1,0,0,0,2830,2831, + 5,35,0,0,2831,2832,5,105,0,0,2832,2833,5,110,0,0,2833,2834,5,99,0,0,2834, + 2835,5,108,0,0,2835,2836,5,117,0,0,2836,2837,5,100,0,0,2837,2838,5,101, + 0,0,2838,548,1,0,0,0,2839,2840,5,46,0,0,2840,2841,5,109,0,0,2841,2842, + 5,114,0,0,2842,2843,5,101,0,0,2843,2844,5,115,0,0,2844,2845,5,111,0,0, + 2845,2846,5,117,0,0,2846,2847,5,114,0,0,2847,2848,5,99,0,0,2848,2849,5, + 101,0,0,2849,550,1,0,0,0,2850,2851,5,110,0,0,2851,2852,5,111,0,0,2852, + 4033,5,112,0,0,2853,2854,5,98,0,0,2854,2855,5,114,0,0,2855,2856,5,101, + 0,0,2856,2857,5,97,0,0,2857,4033,5,107,0,0,2858,2859,5,108,0,0,2859,2860, + 5,100,0,0,2860,2861,5,97,0,0,2861,2862,5,114,0,0,2862,2863,5,103,0,0,2863, + 2864,5,46,0,0,2864,4033,5,48,0,0,2865,2866,5,108,0,0,2866,2867,5,100,0, + 0,2867,2868,5,97,0,0,2868,2869,5,114,0,0,2869,2870,5,103,0,0,2870,2871, + 5,46,0,0,2871,4033,5,49,0,0,2872,2873,5,108,0,0,2873,2874,5,100,0,0,2874, + 2875,5,97,0,0,2875,2876,5,114,0,0,2876,2877,5,103,0,0,2877,2878,5,46,0, + 0,2878,4033,5,50,0,0,2879,2880,5,108,0,0,2880,2881,5,100,0,0,2881,2882, + 5,97,0,0,2882,2883,5,114,0,0,2883,2884,5,103,0,0,2884,2885,5,46,0,0,2885, + 4033,5,51,0,0,2886,2887,5,108,0,0,2887,2888,5,100,0,0,2888,2889,5,108, + 0,0,2889,2890,5,111,0,0,2890,2891,5,99,0,0,2891,2892,5,46,0,0,2892,4033, + 5,48,0,0,2893,2894,5,108,0,0,2894,2895,5,100,0,0,2895,2896,5,108,0,0,2896, + 2897,5,111,0,0,2897,2898,5,99,0,0,2898,2899,5,46,0,0,2899,4033,5,49,0, + 0,2900,2901,5,108,0,0,2901,2902,5,100,0,0,2902,2903,5,108,0,0,2903,2904, + 5,111,0,0,2904,2905,5,99,0,0,2905,2906,5,46,0,0,2906,4033,5,50,0,0,2907, + 2908,5,108,0,0,2908,2909,5,100,0,0,2909,2910,5,108,0,0,2910,2911,5,111, + 0,0,2911,2912,5,99,0,0,2912,2913,5,46,0,0,2913,4033,5,51,0,0,2914,2915, + 5,115,0,0,2915,2916,5,116,0,0,2916,2917,5,108,0,0,2917,2918,5,111,0,0, + 2918,2919,5,99,0,0,2919,2920,5,46,0,0,2920,4033,5,48,0,0,2921,2922,5,115, + 0,0,2922,2923,5,116,0,0,2923,2924,5,108,0,0,2924,2925,5,111,0,0,2925,2926, + 5,99,0,0,2926,2927,5,46,0,0,2927,4033,5,49,0,0,2928,2929,5,115,0,0,2929, + 2930,5,116,0,0,2930,2931,5,108,0,0,2931,2932,5,111,0,0,2932,2933,5,99, + 0,0,2933,2934,5,46,0,0,2934,4033,5,50,0,0,2935,2936,5,115,0,0,2936,2937, + 5,116,0,0,2937,2938,5,108,0,0,2938,2939,5,111,0,0,2939,2940,5,99,0,0,2940, + 2941,5,46,0,0,2941,4033,5,51,0,0,2942,2943,5,108,0,0,2943,2944,5,100,0, + 0,2944,2945,5,110,0,0,2945,2946,5,117,0,0,2946,2947,5,108,0,0,2947,4033, + 5,108,0,0,2948,2949,5,108,0,0,2949,2950,5,100,0,0,2950,2951,5,99,0,0,2951, + 2952,5,46,0,0,2952,2953,5,105,0,0,2953,2954,5,52,0,0,2954,2955,5,46,0, + 0,2955,2956,5,109,0,0,2956,4033,5,49,0,0,2957,2958,5,108,0,0,2958,2959, + 5,100,0,0,2959,2960,5,99,0,0,2960,2961,5,46,0,0,2961,2962,5,105,0,0,2962, + 2963,5,52,0,0,2963,2964,5,46,0,0,2964,2965,5,77,0,0,2965,4033,5,49,0,0, + 2966,2967,5,108,0,0,2967,2968,5,100,0,0,2968,2969,5,99,0,0,2969,2970,5, + 46,0,0,2970,2971,5,105,0,0,2971,2972,5,52,0,0,2972,2973,5,46,0,0,2973, + 4033,5,48,0,0,2974,2975,5,108,0,0,2975,2976,5,100,0,0,2976,2977,5,99,0, + 0,2977,2978,5,46,0,0,2978,2979,5,105,0,0,2979,2980,5,52,0,0,2980,2981, + 5,46,0,0,2981,4033,5,49,0,0,2982,2983,5,108,0,0,2983,2984,5,100,0,0,2984, + 2985,5,99,0,0,2985,2986,5,46,0,0,2986,2987,5,105,0,0,2987,2988,5,52,0, + 0,2988,2989,5,46,0,0,2989,4033,5,50,0,0,2990,2991,5,108,0,0,2991,2992, + 5,100,0,0,2992,2993,5,99,0,0,2993,2994,5,46,0,0,2994,2995,5,105,0,0,2995, + 2996,5,52,0,0,2996,2997,5,46,0,0,2997,4033,5,51,0,0,2998,2999,5,108,0, + 0,2999,3000,5,100,0,0,3000,3001,5,99,0,0,3001,3002,5,46,0,0,3002,3003, + 5,105,0,0,3003,3004,5,52,0,0,3004,3005,5,46,0,0,3005,4033,5,52,0,0,3006, + 3007,5,108,0,0,3007,3008,5,100,0,0,3008,3009,5,99,0,0,3009,3010,5,46,0, + 0,3010,3011,5,105,0,0,3011,3012,5,52,0,0,3012,3013,5,46,0,0,3013,4033, + 5,53,0,0,3014,3015,5,108,0,0,3015,3016,5,100,0,0,3016,3017,5,99,0,0,3017, + 3018,5,46,0,0,3018,3019,5,105,0,0,3019,3020,5,52,0,0,3020,3021,5,46,0, + 0,3021,4033,5,54,0,0,3022,3023,5,108,0,0,3023,3024,5,100,0,0,3024,3025, + 5,99,0,0,3025,3026,5,46,0,0,3026,3027,5,105,0,0,3027,3028,5,52,0,0,3028, + 3029,5,46,0,0,3029,4033,5,55,0,0,3030,3031,5,108,0,0,3031,3032,5,100,0, + 0,3032,3033,5,99,0,0,3033,3034,5,46,0,0,3034,3035,5,105,0,0,3035,3036, + 5,52,0,0,3036,3037,5,46,0,0,3037,4033,5,56,0,0,3038,3039,5,100,0,0,3039, + 3040,5,117,0,0,3040,4033,5,112,0,0,3041,3042,5,112,0,0,3042,3043,5,111, + 0,0,3043,4033,5,112,0,0,3044,3045,5,114,0,0,3045,3046,5,101,0,0,3046,4033, + 5,116,0,0,3047,3048,5,108,0,0,3048,3049,5,100,0,0,3049,3050,5,105,0,0, + 3050,3051,5,110,0,0,3051,3052,5,100,0,0,3052,3053,5,46,0,0,3053,3054,5, + 105,0,0,3054,4033,5,49,0,0,3055,3056,5,108,0,0,3056,3057,5,100,0,0,3057, + 3058,5,105,0,0,3058,3059,5,110,0,0,3059,3060,5,100,0,0,3060,3061,5,46, + 0,0,3061,3062,5,117,0,0,3062,4033,5,49,0,0,3063,3064,5,108,0,0,3064,3065, + 5,100,0,0,3065,3066,5,105,0,0,3066,3067,5,110,0,0,3067,3068,5,100,0,0, + 3068,3069,5,46,0,0,3069,3070,5,105,0,0,3070,4033,5,50,0,0,3071,3072,5, + 108,0,0,3072,3073,5,100,0,0,3073,3074,5,105,0,0,3074,3075,5,110,0,0,3075, + 3076,5,100,0,0,3076,3077,5,46,0,0,3077,3078,5,117,0,0,3078,4033,5,50,0, + 0,3079,3080,5,108,0,0,3080,3081,5,100,0,0,3081,3082,5,105,0,0,3082,3083, + 5,110,0,0,3083,3084,5,100,0,0,3084,3085,5,46,0,0,3085,3086,5,105,0,0,3086, + 4033,5,52,0,0,3087,3088,5,108,0,0,3088,3089,5,100,0,0,3089,3090,5,105, + 0,0,3090,3091,5,110,0,0,3091,3092,5,100,0,0,3092,3093,5,46,0,0,3093,3094, + 5,117,0,0,3094,4033,5,52,0,0,3095,3096,5,108,0,0,3096,3097,5,100,0,0,3097, + 3098,5,105,0,0,3098,3099,5,110,0,0,3099,3100,5,100,0,0,3100,3101,5,46, + 0,0,3101,3102,5,105,0,0,3102,4033,5,56,0,0,3103,3104,5,108,0,0,3104,3105, + 5,100,0,0,3105,3106,5,105,0,0,3106,3107,5,110,0,0,3107,3108,5,100,0,0, + 3108,3109,5,46,0,0,3109,3110,5,117,0,0,3110,4033,5,56,0,0,3111,3112,5, + 108,0,0,3112,3113,5,100,0,0,3113,3114,5,105,0,0,3114,3115,5,110,0,0,3115, + 3116,5,100,0,0,3116,3117,5,46,0,0,3117,4033,5,105,0,0,3118,3119,5,108, + 0,0,3119,3120,5,100,0,0,3120,3121,5,105,0,0,3121,3122,5,110,0,0,3122,3123, + 5,100,0,0,3123,3124,5,46,0,0,3124,3125,5,114,0,0,3125,4033,5,52,0,0,3126, + 3127,5,108,0,0,3127,3128,5,100,0,0,3128,3129,5,105,0,0,3129,3130,5,110, + 0,0,3130,3131,5,100,0,0,3131,3132,5,46,0,0,3132,3133,5,114,0,0,3133,4033, + 5,56,0,0,3134,3135,5,108,0,0,3135,3136,5,100,0,0,3136,3137,5,105,0,0,3137, + 3138,5,110,0,0,3138,3139,5,100,0,0,3139,3140,5,46,0,0,3140,3141,5,114, + 0,0,3141,3142,5,101,0,0,3142,4033,5,102,0,0,3143,3144,5,115,0,0,3144,3145, + 5,116,0,0,3145,3146,5,105,0,0,3146,3147,5,110,0,0,3147,3148,5,100,0,0, + 3148,3149,5,46,0,0,3149,3150,5,114,0,0,3150,3151,5,101,0,0,3151,4033,5, + 102,0,0,3152,3153,5,115,0,0,3153,3154,5,116,0,0,3154,3155,5,105,0,0,3155, + 3156,5,110,0,0,3156,3157,5,100,0,0,3157,3158,5,46,0,0,3158,3159,5,105, + 0,0,3159,4033,5,49,0,0,3160,3161,5,115,0,0,3161,3162,5,116,0,0,3162,3163, + 5,105,0,0,3163,3164,5,110,0,0,3164,3165,5,100,0,0,3165,3166,5,46,0,0,3166, + 3167,5,105,0,0,3167,4033,5,50,0,0,3168,3169,5,115,0,0,3169,3170,5,116, + 0,0,3170,3171,5,105,0,0,3171,3172,5,110,0,0,3172,3173,5,100,0,0,3173,3174, + 5,46,0,0,3174,3175,5,105,0,0,3175,4033,5,52,0,0,3176,3177,5,115,0,0,3177, + 3178,5,116,0,0,3178,3179,5,105,0,0,3179,3180,5,110,0,0,3180,3181,5,100, + 0,0,3181,3182,5,46,0,0,3182,3183,5,105,0,0,3183,4033,5,56,0,0,3184,3185, + 5,115,0,0,3185,3186,5,116,0,0,3186,3187,5,105,0,0,3187,3188,5,110,0,0, + 3188,3189,5,100,0,0,3189,3190,5,46,0,0,3190,3191,5,114,0,0,3191,4033,5, + 52,0,0,3192,3193,5,115,0,0,3193,3194,5,116,0,0,3194,3195,5,105,0,0,3195, + 3196,5,110,0,0,3196,3197,5,100,0,0,3197,3198,5,46,0,0,3198,3199,5,114, + 0,0,3199,4033,5,56,0,0,3200,3201,5,97,0,0,3201,3202,5,100,0,0,3202,4033, + 5,100,0,0,3203,3204,5,115,0,0,3204,3205,5,117,0,0,3205,4033,5,98,0,0,3206, + 3207,5,109,0,0,3207,3208,5,117,0,0,3208,4033,5,108,0,0,3209,3210,5,100, + 0,0,3210,3211,5,105,0,0,3211,4033,5,118,0,0,3212,3213,5,100,0,0,3213,3214, + 5,105,0,0,3214,3215,5,118,0,0,3215,3216,5,46,0,0,3216,3217,5,117,0,0,3217, + 4033,5,110,0,0,3218,3219,5,114,0,0,3219,3220,5,101,0,0,3220,4033,5,109, + 0,0,3221,3222,5,114,0,0,3222,3223,5,101,0,0,3223,3224,5,109,0,0,3224,3225, + 5,46,0,0,3225,3226,5,117,0,0,3226,4033,5,110,0,0,3227,3228,5,97,0,0,3228, + 3229,5,110,0,0,3229,4033,5,100,0,0,3230,3231,5,111,0,0,3231,4033,5,114, + 0,0,3232,3233,5,120,0,0,3233,3234,5,111,0,0,3234,4033,5,114,0,0,3235,3236, + 5,115,0,0,3236,3237,5,104,0,0,3237,4033,5,108,0,0,3238,3239,5,115,0,0, + 3239,3240,5,104,0,0,3240,4033,5,114,0,0,3241,3242,5,115,0,0,3242,3243, + 5,104,0,0,3243,3244,5,114,0,0,3244,3245,5,46,0,0,3245,3246,5,117,0,0,3246, + 4033,5,110,0,0,3247,3248,5,110,0,0,3248,3249,5,101,0,0,3249,4033,5,103, + 0,0,3250,3251,5,110,0,0,3251,3252,5,111,0,0,3252,4033,5,116,0,0,3253,3254, + 5,99,0,0,3254,3255,5,111,0,0,3255,3256,5,110,0,0,3256,3257,5,118,0,0,3257, + 3258,5,46,0,0,3258,3259,5,105,0,0,3259,4033,5,49,0,0,3260,3261,5,99,0, + 0,3261,3262,5,111,0,0,3262,3263,5,110,0,0,3263,3264,5,118,0,0,3264,3265, + 5,46,0,0,3265,3266,5,105,0,0,3266,4033,5,50,0,0,3267,3268,5,99,0,0,3268, + 3269,5,111,0,0,3269,3270,5,110,0,0,3270,3271,5,118,0,0,3271,3272,5,46, + 0,0,3272,3273,5,105,0,0,3273,4033,5,52,0,0,3274,3275,5,99,0,0,3275,3276, + 5,111,0,0,3276,3277,5,110,0,0,3277,3278,5,118,0,0,3278,3279,5,46,0,0,3279, + 3280,5,105,0,0,3280,4033,5,56,0,0,3281,3282,5,99,0,0,3282,3283,5,111,0, + 0,3283,3284,5,110,0,0,3284,3285,5,118,0,0,3285,3286,5,46,0,0,3286,3287, + 5,114,0,0,3287,4033,5,52,0,0,3288,3289,5,99,0,0,3289,3290,5,111,0,0,3290, + 3291,5,110,0,0,3291,3292,5,118,0,0,3292,3293,5,46,0,0,3293,3294,5,114, + 0,0,3294,4033,5,56,0,0,3295,3296,5,99,0,0,3296,3297,5,111,0,0,3297,3298, + 5,110,0,0,3298,3299,5,118,0,0,3299,3300,5,46,0,0,3300,3301,5,117,0,0,3301, + 4033,5,52,0,0,3302,3303,5,99,0,0,3303,3304,5,111,0,0,3304,3305,5,110,0, + 0,3305,3306,5,118,0,0,3306,3307,5,46,0,0,3307,3308,5,117,0,0,3308,4033, + 5,56,0,0,3309,3310,5,99,0,0,3310,3311,5,111,0,0,3311,3312,5,110,0,0,3312, + 3313,5,118,0,0,3313,3314,5,46,0,0,3314,3315,5,114,0,0,3315,3316,5,46,0, + 0,3316,3317,5,117,0,0,3317,4033,5,110,0,0,3318,3319,5,116,0,0,3319,3320, + 5,104,0,0,3320,3321,5,114,0,0,3321,3322,5,111,0,0,3322,4033,5,119,0,0, + 3323,3324,5,99,0,0,3324,3325,5,111,0,0,3325,3326,5,110,0,0,3326,3327,5, + 118,0,0,3327,3328,5,46,0,0,3328,3329,5,111,0,0,3329,3330,5,118,0,0,3330, + 3331,5,102,0,0,3331,3332,5,46,0,0,3332,3333,5,105,0,0,3333,3334,5,49,0, + 0,3334,3335,5,46,0,0,3335,3336,5,117,0,0,3336,4033,5,110,0,0,3337,3338, + 5,99,0,0,3338,3339,5,111,0,0,3339,3340,5,110,0,0,3340,3341,5,118,0,0,3341, + 3342,5,46,0,0,3342,3343,5,111,0,0,3343,3344,5,118,0,0,3344,3345,5,102, + 0,0,3345,3346,5,46,0,0,3346,3347,5,105,0,0,3347,3348,5,50,0,0,3348,3349, + 5,46,0,0,3349,3350,5,117,0,0,3350,4033,5,110,0,0,3351,3352,5,99,0,0,3352, + 3353,5,111,0,0,3353,3354,5,110,0,0,3354,3355,5,118,0,0,3355,3356,5,46, + 0,0,3356,3357,5,111,0,0,3357,3358,5,118,0,0,3358,3359,5,102,0,0,3359,3360, + 5,46,0,0,3360,3361,5,105,0,0,3361,3362,5,52,0,0,3362,3363,5,46,0,0,3363, + 3364,5,117,0,0,3364,4033,5,110,0,0,3365,3366,5,99,0,0,3366,3367,5,111, + 0,0,3367,3368,5,110,0,0,3368,3369,5,118,0,0,3369,3370,5,46,0,0,3370,3371, + 5,111,0,0,3371,3372,5,118,0,0,3372,3373,5,102,0,0,3373,3374,5,46,0,0,3374, + 3375,5,105,0,0,3375,3376,5,56,0,0,3376,3377,5,46,0,0,3377,3378,5,117,0, + 0,3378,4033,5,110,0,0,3379,3380,5,99,0,0,3380,3381,5,111,0,0,3381,3382, + 5,110,0,0,3382,3383,5,118,0,0,3383,3384,5,46,0,0,3384,3385,5,111,0,0,3385, + 3386,5,118,0,0,3386,3387,5,102,0,0,3387,3388,5,46,0,0,3388,3389,5,117, + 0,0,3389,3390,5,49,0,0,3390,3391,5,46,0,0,3391,3392,5,117,0,0,3392,4033, + 5,110,0,0,3393,3394,5,99,0,0,3394,3395,5,111,0,0,3395,3396,5,110,0,0,3396, + 3397,5,118,0,0,3397,3398,5,46,0,0,3398,3399,5,111,0,0,3399,3400,5,118, + 0,0,3400,3401,5,102,0,0,3401,3402,5,46,0,0,3402,3403,5,117,0,0,3403,3404, + 5,50,0,0,3404,3405,5,46,0,0,3405,3406,5,117,0,0,3406,4033,5,110,0,0,3407, + 3408,5,99,0,0,3408,3409,5,111,0,0,3409,3410,5,110,0,0,3410,3411,5,118, + 0,0,3411,3412,5,46,0,0,3412,3413,5,111,0,0,3413,3414,5,118,0,0,3414,3415, + 5,102,0,0,3415,3416,5,46,0,0,3416,3417,5,117,0,0,3417,3418,5,52,0,0,3418, + 3419,5,46,0,0,3419,3420,5,117,0,0,3420,4033,5,110,0,0,3421,3422,5,99,0, + 0,3422,3423,5,111,0,0,3423,3424,5,110,0,0,3424,3425,5,118,0,0,3425,3426, + 5,46,0,0,3426,3427,5,111,0,0,3427,3428,5,118,0,0,3428,3429,5,102,0,0,3429, + 3430,5,46,0,0,3430,3431,5,117,0,0,3431,3432,5,56,0,0,3432,3433,5,46,0, + 0,3433,3434,5,117,0,0,3434,4033,5,110,0,0,3435,3436,5,99,0,0,3436,3437, + 5,111,0,0,3437,3438,5,110,0,0,3438,3439,5,118,0,0,3439,3440,5,46,0,0,3440, + 3441,5,111,0,0,3441,3442,5,118,0,0,3442,3443,5,102,0,0,3443,3444,5,46, + 0,0,3444,3445,5,105,0,0,3445,3446,5,46,0,0,3446,3447,5,117,0,0,3447,4033, + 5,110,0,0,3448,3449,5,99,0,0,3449,3450,5,111,0,0,3450,3451,5,110,0,0,3451, + 3452,5,118,0,0,3452,3453,5,46,0,0,3453,3454,5,111,0,0,3454,3455,5,118, + 0,0,3455,3456,5,102,0,0,3456,3457,5,46,0,0,3457,3458,5,117,0,0,3458,3459, + 5,46,0,0,3459,3460,5,117,0,0,3460,4033,5,110,0,0,3461,3462,5,108,0,0,3462, + 3463,5,100,0,0,3463,3464,5,108,0,0,3464,3465,5,101,0,0,3465,4033,5,110, + 0,0,3466,3467,5,108,0,0,3467,3468,5,100,0,0,3468,3469,5,101,0,0,3469,3470, + 5,108,0,0,3470,3471,5,101,0,0,3471,3472,5,109,0,0,3472,3473,5,46,0,0,3473, + 3474,5,105,0,0,3474,4033,5,49,0,0,3475,3476,5,108,0,0,3476,3477,5,100, + 0,0,3477,3478,5,101,0,0,3478,3479,5,108,0,0,3479,3480,5,101,0,0,3480,3481, + 5,109,0,0,3481,3482,5,46,0,0,3482,3483,5,117,0,0,3483,4033,5,49,0,0,3484, + 3485,5,108,0,0,3485,3486,5,100,0,0,3486,3487,5,101,0,0,3487,3488,5,108, + 0,0,3488,3489,5,101,0,0,3489,3490,5,109,0,0,3490,3491,5,46,0,0,3491,3492, + 5,105,0,0,3492,4033,5,50,0,0,3493,3494,5,108,0,0,3494,3495,5,100,0,0,3495, + 3496,5,101,0,0,3496,3497,5,108,0,0,3497,3498,5,101,0,0,3498,3499,5,109, + 0,0,3499,3500,5,46,0,0,3500,3501,5,117,0,0,3501,4033,5,50,0,0,3502,3503, + 5,108,0,0,3503,3504,5,100,0,0,3504,3505,5,101,0,0,3505,3506,5,108,0,0, + 3506,3507,5,101,0,0,3507,3508,5,109,0,0,3508,3509,5,46,0,0,3509,3510,5, + 105,0,0,3510,4033,5,52,0,0,3511,3512,5,108,0,0,3512,3513,5,100,0,0,3513, + 3514,5,101,0,0,3514,3515,5,108,0,0,3515,3516,5,101,0,0,3516,3517,5,109, + 0,0,3517,3518,5,46,0,0,3518,3519,5,117,0,0,3519,4033,5,52,0,0,3520,3521, + 5,108,0,0,3521,3522,5,100,0,0,3522,3523,5,101,0,0,3523,3524,5,108,0,0, + 3524,3525,5,101,0,0,3525,3526,5,109,0,0,3526,3527,5,46,0,0,3527,3528,5, + 105,0,0,3528,4033,5,56,0,0,3529,3530,5,108,0,0,3530,3531,5,100,0,0,3531, + 3532,5,101,0,0,3532,3533,5,108,0,0,3533,3534,5,101,0,0,3534,3535,5,109, + 0,0,3535,3536,5,46,0,0,3536,3537,5,117,0,0,3537,4033,5,56,0,0,3538,3539, + 5,108,0,0,3539,3540,5,100,0,0,3540,3541,5,101,0,0,3541,3542,5,108,0,0, + 3542,3543,5,101,0,0,3543,3544,5,109,0,0,3544,3545,5,46,0,0,3545,4033,5, + 105,0,0,3546,3547,5,108,0,0,3547,3548,5,100,0,0,3548,3549,5,101,0,0,3549, + 3550,5,108,0,0,3550,3551,5,101,0,0,3551,3552,5,109,0,0,3552,3553,5,46, + 0,0,3553,3554,5,114,0,0,3554,4033,5,52,0,0,3555,3556,5,108,0,0,3556,3557, + 5,100,0,0,3557,3558,5,101,0,0,3558,3559,5,108,0,0,3559,3560,5,101,0,0, + 3560,3561,5,109,0,0,3561,3562,5,46,0,0,3562,3563,5,114,0,0,3563,4033,5, + 56,0,0,3564,3565,5,108,0,0,3565,3566,5,100,0,0,3566,3567,5,101,0,0,3567, + 3568,5,108,0,0,3568,3569,5,101,0,0,3569,3570,5,109,0,0,3570,3571,5,46, + 0,0,3571,3572,5,114,0,0,3572,3573,5,101,0,0,3573,4033,5,102,0,0,3574,3575, + 5,115,0,0,3575,3576,5,116,0,0,3576,3577,5,101,0,0,3577,3578,5,108,0,0, + 3578,3579,5,101,0,0,3579,3580,5,109,0,0,3580,3581,5,46,0,0,3581,4033,5, + 105,0,0,3582,3583,5,115,0,0,3583,3584,5,116,0,0,3584,3585,5,101,0,0,3585, + 3586,5,108,0,0,3586,3587,5,101,0,0,3587,3588,5,109,0,0,3588,3589,5,46, + 0,0,3589,3590,5,105,0,0,3590,4033,5,49,0,0,3591,3592,5,115,0,0,3592,3593, + 5,116,0,0,3593,3594,5,101,0,0,3594,3595,5,108,0,0,3595,3596,5,101,0,0, + 3596,3597,5,109,0,0,3597,3598,5,46,0,0,3598,3599,5,105,0,0,3599,4033,5, + 50,0,0,3600,3601,5,115,0,0,3601,3602,5,116,0,0,3602,3603,5,101,0,0,3603, + 3604,5,108,0,0,3604,3605,5,101,0,0,3605,3606,5,109,0,0,3606,3607,5,46, + 0,0,3607,3608,5,105,0,0,3608,4033,5,52,0,0,3609,3610,5,115,0,0,3610,3611, + 5,116,0,0,3611,3612,5,101,0,0,3612,3613,5,108,0,0,3613,3614,5,101,0,0, + 3614,3615,5,109,0,0,3615,3616,5,46,0,0,3616,3617,5,105,0,0,3617,4033,5, + 56,0,0,3618,3619,5,115,0,0,3619,3620,5,116,0,0,3620,3621,5,101,0,0,3621, + 3622,5,108,0,0,3622,3623,5,101,0,0,3623,3624,5,109,0,0,3624,3625,5,46, + 0,0,3625,3626,5,114,0,0,3626,4033,5,52,0,0,3627,3628,5,115,0,0,3628,3629, + 5,116,0,0,3629,3630,5,101,0,0,3630,3631,5,108,0,0,3631,3632,5,101,0,0, + 3632,3633,5,109,0,0,3633,3634,5,46,0,0,3634,3635,5,114,0,0,3635,4033,5, + 56,0,0,3636,3637,5,115,0,0,3637,3638,5,116,0,0,3638,3639,5,101,0,0,3639, + 3640,5,108,0,0,3640,3641,5,101,0,0,3641,3642,5,109,0,0,3642,3643,5,46, + 0,0,3643,3644,5,114,0,0,3644,3645,5,101,0,0,3645,4033,5,102,0,0,3646,3647, + 5,99,0,0,3647,3648,5,111,0,0,3648,3649,5,110,0,0,3649,3650,5,118,0,0,3650, + 3651,5,46,0,0,3651,3652,5,111,0,0,3652,3653,5,118,0,0,3653,3654,5,102, + 0,0,3654,3655,5,46,0,0,3655,3656,5,105,0,0,3656,4033,5,49,0,0,3657,3658, + 5,99,0,0,3658,3659,5,111,0,0,3659,3660,5,110,0,0,3660,3661,5,118,0,0,3661, + 3662,5,46,0,0,3662,3663,5,111,0,0,3663,3664,5,118,0,0,3664,3665,5,102, + 0,0,3665,3666,5,46,0,0,3666,3667,5,117,0,0,3667,4033,5,49,0,0,3668,3669, + 5,99,0,0,3669,3670,5,111,0,0,3670,3671,5,110,0,0,3671,3672,5,118,0,0,3672, + 3673,5,46,0,0,3673,3674,5,111,0,0,3674,3675,5,118,0,0,3675,3676,5,102, + 0,0,3676,3677,5,46,0,0,3677,3678,5,105,0,0,3678,4033,5,50,0,0,3679,3680, + 5,99,0,0,3680,3681,5,111,0,0,3681,3682,5,110,0,0,3682,3683,5,118,0,0,3683, + 3684,5,46,0,0,3684,3685,5,111,0,0,3685,3686,5,118,0,0,3686,3687,5,102, + 0,0,3687,3688,5,46,0,0,3688,3689,5,117,0,0,3689,4033,5,50,0,0,3690,3691, + 5,99,0,0,3691,3692,5,111,0,0,3692,3693,5,110,0,0,3693,3694,5,118,0,0,3694, + 3695,5,46,0,0,3695,3696,5,111,0,0,3696,3697,5,118,0,0,3697,3698,5,102, + 0,0,3698,3699,5,46,0,0,3699,3700,5,105,0,0,3700,4033,5,52,0,0,3701,3702, + 5,99,0,0,3702,3703,5,111,0,0,3703,3704,5,110,0,0,3704,3705,5,118,0,0,3705, + 3706,5,46,0,0,3706,3707,5,111,0,0,3707,3708,5,118,0,0,3708,3709,5,102, + 0,0,3709,3710,5,46,0,0,3710,3711,5,117,0,0,3711,4033,5,52,0,0,3712,3713, + 5,99,0,0,3713,3714,5,111,0,0,3714,3715,5,110,0,0,3715,3716,5,118,0,0,3716, + 3717,5,46,0,0,3717,3718,5,111,0,0,3718,3719,5,118,0,0,3719,3720,5,102, + 0,0,3720,3721,5,46,0,0,3721,3722,5,105,0,0,3722,4033,5,56,0,0,3723,3724, 5,99,0,0,3724,3725,5,111,0,0,3725,3726,5,110,0,0,3726,3727,5,118,0,0,3727, - 3728,5,46,0,0,3728,3729,5,117,0,0,3729,4006,5,50,0,0,3730,3731,5,99,0, - 0,3731,3732,5,111,0,0,3732,3733,5,110,0,0,3733,3734,5,118,0,0,3734,3735, - 5,46,0,0,3735,3736,5,117,0,0,3736,4006,5,49,0,0,3737,3738,5,99,0,0,3738, - 3739,5,111,0,0,3739,3740,5,110,0,0,3740,3741,5,118,0,0,3741,3742,5,46, - 0,0,3742,4006,5,105,0,0,3743,3744,5,99,0,0,3744,3745,5,111,0,0,3745,3746, - 5,110,0,0,3746,3747,5,118,0,0,3747,3748,5,46,0,0,3748,3749,5,111,0,0,3749, - 3750,5,118,0,0,3750,3751,5,102,0,0,3751,3752,5,46,0,0,3752,4006,5,105, - 0,0,3753,3754,5,99,0,0,3754,3755,5,111,0,0,3755,3756,5,110,0,0,3756,3757, - 5,118,0,0,3757,3758,5,46,0,0,3758,3759,5,111,0,0,3759,3760,5,118,0,0,3760, - 3761,5,102,0,0,3761,3762,5,46,0,0,3762,4006,5,117,0,0,3763,3764,5,97,0, - 0,3764,3765,5,100,0,0,3765,3766,5,100,0,0,3766,3767,5,46,0,0,3767,3768, - 5,111,0,0,3768,3769,5,118,0,0,3769,4006,5,102,0,0,3770,3771,5,97,0,0,3771, - 3772,5,100,0,0,3772,3773,5,100,0,0,3773,3774,5,46,0,0,3774,3775,5,111, - 0,0,3775,3776,5,118,0,0,3776,3777,5,102,0,0,3777,3778,5,46,0,0,3778,3779, - 5,117,0,0,3779,4006,5,110,0,0,3780,3781,5,109,0,0,3781,3782,5,117,0,0, - 3782,3783,5,108,0,0,3783,3784,5,46,0,0,3784,3785,5,111,0,0,3785,3786,5, - 118,0,0,3786,4006,5,102,0,0,3787,3788,5,109,0,0,3788,3789,5,117,0,0,3789, - 3790,5,108,0,0,3790,3791,5,46,0,0,3791,3792,5,111,0,0,3792,3793,5,118, - 0,0,3793,3794,5,102,0,0,3794,3795,5,46,0,0,3795,3796,5,117,0,0,3796,4006, - 5,110,0,0,3797,3798,5,115,0,0,3798,3799,5,117,0,0,3799,3800,5,98,0,0,3800, - 3801,5,46,0,0,3801,3802,5,111,0,0,3802,3803,5,118,0,0,3803,4006,5,102, - 0,0,3804,3805,5,115,0,0,3805,3806,5,117,0,0,3806,3807,5,98,0,0,3807,3808, - 5,46,0,0,3808,3809,5,111,0,0,3809,3810,5,118,0,0,3810,3811,5,102,0,0,3811, - 3812,5,46,0,0,3812,3813,5,117,0,0,3813,4006,5,110,0,0,3814,3815,5,101, - 0,0,3815,3816,5,110,0,0,3816,3817,5,100,0,0,3817,3818,5,102,0,0,3818,3819, - 5,105,0,0,3819,3820,5,110,0,0,3820,3821,5,97,0,0,3821,3822,5,108,0,0,3822, - 3823,5,108,0,0,3823,4006,5,121,0,0,3824,3825,5,115,0,0,3825,3826,5,116, - 0,0,3826,3827,5,105,0,0,3827,3828,5,110,0,0,3828,3829,5,100,0,0,3829,3830, - 5,46,0,0,3830,4006,5,105,0,0,3831,3832,5,99,0,0,3832,3833,5,111,0,0,3833, - 3834,5,110,0,0,3834,3835,5,118,0,0,3835,3836,5,46,0,0,3836,4006,5,117, - 0,0,3837,3838,5,112,0,0,3838,3839,5,114,0,0,3839,3840,5,101,0,0,3840,3841, - 5,102,0,0,3841,3842,5,105,0,0,3842,3843,5,120,0,0,3843,4006,5,55,0,0,3844, - 3845,5,112,0,0,3845,3846,5,114,0,0,3846,3847,5,101,0,0,3847,3848,5,102, - 0,0,3848,3849,5,105,0,0,3849,3850,5,120,0,0,3850,4006,5,54,0,0,3851,3852, - 5,112,0,0,3852,3853,5,114,0,0,3853,3854,5,101,0,0,3854,3855,5,102,0,0, - 3855,3856,5,105,0,0,3856,3857,5,120,0,0,3857,4006,5,53,0,0,3858,3859,5, - 112,0,0,3859,3860,5,114,0,0,3860,3861,5,101,0,0,3861,3862,5,102,0,0,3862, - 3863,5,105,0,0,3863,3864,5,120,0,0,3864,4006,5,52,0,0,3865,3866,5,112, - 0,0,3866,3867,5,114,0,0,3867,3868,5,101,0,0,3868,3869,5,102,0,0,3869,3870, - 5,105,0,0,3870,3871,5,120,0,0,3871,4006,5,51,0,0,3872,3873,5,112,0,0,3873, - 3874,5,114,0,0,3874,3875,5,101,0,0,3875,3876,5,102,0,0,3876,3877,5,105, - 0,0,3877,3878,5,120,0,0,3878,4006,5,50,0,0,3879,3880,5,112,0,0,3880,3881, - 5,114,0,0,3881,3882,5,101,0,0,3882,3883,5,102,0,0,3883,3884,5,105,0,0, - 3884,3885,5,120,0,0,3885,4006,5,49,0,0,3886,3887,5,112,0,0,3887,3888,5, - 114,0,0,3888,3889,5,101,0,0,3889,3890,5,102,0,0,3890,3891,5,105,0,0,3891, - 3892,5,120,0,0,3892,3893,5,114,0,0,3893,3894,5,101,0,0,3894,4006,5,102, - 0,0,3895,3896,5,97,0,0,3896,3897,5,114,0,0,3897,3898,5,103,0,0,3898,3899, - 5,108,0,0,3899,3900,5,105,0,0,3900,3901,5,115,0,0,3901,4006,5,116,0,0, - 3902,3903,5,99,0,0,3903,3904,5,101,0,0,3904,4006,5,113,0,0,3905,3906,5, - 99,0,0,3906,3907,5,103,0,0,3907,4006,5,116,0,0,3908,3909,5,99,0,0,3909, - 3910,5,103,0,0,3910,3911,5,116,0,0,3911,3912,5,46,0,0,3912,3913,5,117, - 0,0,3913,4006,5,110,0,0,3914,3915,5,99,0,0,3915,3916,5,108,0,0,3916,4006, - 5,116,0,0,3917,3918,5,99,0,0,3918,3919,5,108,0,0,3919,3920,5,116,0,0,3920, - 3921,5,46,0,0,3921,3922,5,117,0,0,3922,4006,5,110,0,0,3923,3924,5,108, - 0,0,3924,3925,5,111,0,0,3925,3926,5,99,0,0,3926,3927,5,97,0,0,3927,3928, - 5,108,0,0,3928,3929,5,108,0,0,3929,3930,5,111,0,0,3930,4006,5,99,0,0,3931, - 3932,5,101,0,0,3932,3933,5,110,0,0,3933,3934,5,100,0,0,3934,3935,5,102, - 0,0,3935,3936,5,105,0,0,3936,3937,5,108,0,0,3937,3938,5,116,0,0,3938,3939, - 5,101,0,0,3939,4006,5,114,0,0,3940,3941,5,118,0,0,3941,3942,5,111,0,0, - 3942,3943,5,108,0,0,3943,3944,5,97,0,0,3944,3945,5,116,0,0,3945,3946,5, - 105,0,0,3946,3947,5,108,0,0,3947,3948,5,101,0,0,3948,4006,5,46,0,0,3949, - 3950,5,116,0,0,3950,3951,5,97,0,0,3951,3952,5,105,0,0,3952,3953,5,108, - 0,0,3953,4006,5,46,0,0,3954,3955,5,99,0,0,3955,3956,5,112,0,0,3956,3957, - 5,98,0,0,3957,3958,5,108,0,0,3958,4006,5,107,0,0,3959,3960,5,105,0,0,3960, - 3961,5,110,0,0,3961,3962,5,105,0,0,3962,3963,5,116,0,0,3963,3964,5,98, - 0,0,3964,3965,5,108,0,0,3965,4006,5,107,0,0,3966,3967,5,114,0,0,3967,3968, - 5,101,0,0,3968,3969,5,116,0,0,3969,3970,5,104,0,0,3970,3971,5,114,0,0, - 3971,3972,5,111,0,0,3972,4006,5,119,0,0,3973,3974,5,114,0,0,3974,3975, - 5,101,0,0,3975,3976,5,102,0,0,3976,3977,5,97,0,0,3977,3978,5,110,0,0,3978, - 3979,5,121,0,0,3979,3980,5,116,0,0,3980,3981,5,121,0,0,3981,3982,5,112, - 0,0,3982,4006,5,101,0,0,3983,3984,5,114,0,0,3984,3985,5,101,0,0,3985,3986, - 5,97,0,0,3986,3987,5,100,0,0,3987,3988,5,111,0,0,3988,3989,5,110,0,0,3989, - 3990,5,108,0,0,3990,3991,5,121,0,0,3991,4006,5,46,0,0,3992,3993,5,105, - 0,0,3993,3994,5,108,0,0,3994,3995,5,108,0,0,3995,3996,5,101,0,0,3996,3997, - 5,103,0,0,3997,3998,5,97,0,0,3998,4006,5,108,0,0,3999,4000,5,101,0,0,4000, - 4001,5,110,0,0,4001,4002,5,100,0,0,4002,4003,5,109,0,0,4003,4004,5,97, - 0,0,4004,4006,5,99,0,0,4005,2857,1,0,0,0,4005,2860,1,0,0,0,4005,2865,1, - 0,0,0,4005,2872,1,0,0,0,4005,2879,1,0,0,0,4005,2886,1,0,0,0,4005,2893, - 1,0,0,0,4005,2900,1,0,0,0,4005,2907,1,0,0,0,4005,2914,1,0,0,0,4005,2921, - 1,0,0,0,4005,2928,1,0,0,0,4005,2935,1,0,0,0,4005,2942,1,0,0,0,4005,2949, - 1,0,0,0,4005,2955,1,0,0,0,4005,2964,1,0,0,0,4005,2972,1,0,0,0,4005,2980, - 1,0,0,0,4005,2988,1,0,0,0,4005,2996,1,0,0,0,4005,3004,1,0,0,0,4005,3012, - 1,0,0,0,4005,3020,1,0,0,0,4005,3028,1,0,0,0,4005,3036,1,0,0,0,4005,3039, - 1,0,0,0,4005,3042,1,0,0,0,4005,3045,1,0,0,0,4005,3053,1,0,0,0,4005,3061, - 1,0,0,0,4005,3069,1,0,0,0,4005,3077,1,0,0,0,4005,3085,1,0,0,0,4005,3093, - 1,0,0,0,4005,3101,1,0,0,0,4005,3108,1,0,0,0,4005,3116,1,0,0,0,4005,3124, - 1,0,0,0,4005,3133,1,0,0,0,4005,3142,1,0,0,0,4005,3150,1,0,0,0,4005,3158, - 1,0,0,0,4005,3166,1,0,0,0,4005,3174,1,0,0,0,4005,3182,1,0,0,0,4005,3190, - 1,0,0,0,4005,3193,1,0,0,0,4005,3196,1,0,0,0,4005,3199,1,0,0,0,4005,3202, - 1,0,0,0,4005,3208,1,0,0,0,4005,3211,1,0,0,0,4005,3217,1,0,0,0,4005,3220, - 1,0,0,0,4005,3222,1,0,0,0,4005,3225,1,0,0,0,4005,3228,1,0,0,0,4005,3231, - 1,0,0,0,4005,3237,1,0,0,0,4005,3240,1,0,0,0,4005,3243,1,0,0,0,4005,3250, - 1,0,0,0,4005,3257,1,0,0,0,4005,3264,1,0,0,0,4005,3271,1,0,0,0,4005,3278, - 1,0,0,0,4005,3285,1,0,0,0,4005,3292,1,0,0,0,4005,3299,1,0,0,0,4005,3308, - 1,0,0,0,4005,3313,1,0,0,0,4005,3327,1,0,0,0,4005,3341,1,0,0,0,4005,3355, - 1,0,0,0,4005,3369,1,0,0,0,4005,3383,1,0,0,0,4005,3397,1,0,0,0,4005,3411, - 1,0,0,0,4005,3425,1,0,0,0,4005,3438,1,0,0,0,4005,3451,1,0,0,0,4005,3456, - 1,0,0,0,4005,3465,1,0,0,0,4005,3474,1,0,0,0,4005,3483,1,0,0,0,4005,3492, - 1,0,0,0,4005,3501,1,0,0,0,4005,3510,1,0,0,0,4005,3519,1,0,0,0,4005,3527, - 1,0,0,0,4005,3536,1,0,0,0,4005,3545,1,0,0,0,4005,3555,1,0,0,0,4005,3563, - 1,0,0,0,4005,3572,1,0,0,0,4005,3581,1,0,0,0,4005,3590,1,0,0,0,4005,3599, - 1,0,0,0,4005,3608,1,0,0,0,4005,3617,1,0,0,0,4005,3627,1,0,0,0,4005,3638, - 1,0,0,0,4005,3649,1,0,0,0,4005,3660,1,0,0,0,4005,3671,1,0,0,0,4005,3682, - 1,0,0,0,4005,3693,1,0,0,0,4005,3704,1,0,0,0,4005,3715,1,0,0,0,4005,3723, - 1,0,0,0,4005,3730,1,0,0,0,4005,3737,1,0,0,0,4005,3743,1,0,0,0,4005,3753, - 1,0,0,0,4005,3763,1,0,0,0,4005,3770,1,0,0,0,4005,3780,1,0,0,0,4005,3787, - 1,0,0,0,4005,3797,1,0,0,0,4005,3804,1,0,0,0,4005,3814,1,0,0,0,4005,3824, - 1,0,0,0,4005,3831,1,0,0,0,4005,3837,1,0,0,0,4005,3844,1,0,0,0,4005,3851, - 1,0,0,0,4005,3858,1,0,0,0,4005,3865,1,0,0,0,4005,3872,1,0,0,0,4005,3879, - 1,0,0,0,4005,3886,1,0,0,0,4005,3895,1,0,0,0,4005,3902,1,0,0,0,4005,3905, - 1,0,0,0,4005,3908,1,0,0,0,4005,3914,1,0,0,0,4005,3917,1,0,0,0,4005,3923, - 1,0,0,0,4005,3931,1,0,0,0,4005,3940,1,0,0,0,4005,3949,1,0,0,0,4005,3954, - 1,0,0,0,4005,3959,1,0,0,0,4005,3966,1,0,0,0,4005,3973,1,0,0,0,4005,3983, - 1,0,0,0,4005,3992,1,0,0,0,4005,3999,1,0,0,0,4006,556,1,0,0,0,4007,4008, - 5,108,0,0,4008,4009,5,100,0,0,4009,4010,5,97,0,0,4010,4011,5,114,0,0,4011, - 4012,5,103,0,0,4012,4013,5,46,0,0,4013,4084,5,115,0,0,4014,4015,5,108, - 0,0,4015,4016,5,100,0,0,4016,4017,5,97,0,0,4017,4018,5,114,0,0,4018,4019, - 5,103,0,0,4019,4020,5,97,0,0,4020,4021,5,46,0,0,4021,4084,5,115,0,0,4022, - 4023,5,115,0,0,4023,4024,5,116,0,0,4024,4025,5,97,0,0,4025,4026,5,114, - 0,0,4026,4027,5,103,0,0,4027,4028,5,46,0,0,4028,4084,5,115,0,0,4029,4030, - 5,108,0,0,4030,4031,5,100,0,0,4031,4032,5,108,0,0,4032,4033,5,111,0,0, - 4033,4034,5,99,0,0,4034,4035,5,46,0,0,4035,4084,5,115,0,0,4036,4037,5, - 108,0,0,4037,4038,5,100,0,0,4038,4039,5,108,0,0,4039,4040,5,111,0,0,4040, - 4041,5,99,0,0,4041,4042,5,97,0,0,4042,4043,5,46,0,0,4043,4084,5,115,0, - 0,4044,4045,5,115,0,0,4045,4046,5,116,0,0,4046,4047,5,108,0,0,4047,4048, - 5,111,0,0,4048,4049,5,99,0,0,4049,4050,5,46,0,0,4050,4084,5,115,0,0,4051, - 4052,5,108,0,0,4052,4053,5,100,0,0,4053,4054,5,97,0,0,4054,4055,5,114, - 0,0,4055,4084,5,103,0,0,4056,4057,5,108,0,0,4057,4058,5,100,0,0,4058,4059, - 5,97,0,0,4059,4060,5,114,0,0,4060,4061,5,103,0,0,4061,4084,5,97,0,0,4062, - 4063,5,115,0,0,4063,4064,5,116,0,0,4064,4065,5,97,0,0,4065,4066,5,114, - 0,0,4066,4084,5,103,0,0,4067,4068,5,108,0,0,4068,4069,5,100,0,0,4069,4070, - 5,108,0,0,4070,4071,5,111,0,0,4071,4084,5,99,0,0,4072,4073,5,108,0,0,4073, - 4074,5,100,0,0,4074,4075,5,108,0,0,4075,4076,5,111,0,0,4076,4077,5,99, - 0,0,4077,4084,5,97,0,0,4078,4079,5,115,0,0,4079,4080,5,116,0,0,4080,4081, - 5,108,0,0,4081,4082,5,111,0,0,4082,4084,5,99,0,0,4083,4007,1,0,0,0,4083, - 4014,1,0,0,0,4083,4022,1,0,0,0,4083,4029,1,0,0,0,4083,4036,1,0,0,0,4083, - 4044,1,0,0,0,4083,4051,1,0,0,0,4083,4056,1,0,0,0,4083,4062,1,0,0,0,4083, - 4067,1,0,0,0,4083,4072,1,0,0,0,4083,4078,1,0,0,0,4084,558,1,0,0,0,4085, - 4086,5,108,0,0,4086,4087,5,100,0,0,4087,4088,5,99,0,0,4088,4089,5,46,0, - 0,4089,4090,5,105,0,0,4090,4091,5,52,0,0,4091,4092,5,46,0,0,4092,4113, - 5,115,0,0,4093,4094,5,108,0,0,4094,4095,5,100,0,0,4095,4096,5,99,0,0,4096, - 4097,5,46,0,0,4097,4098,5,105,0,0,4098,4113,5,52,0,0,4099,4100,5,117,0, - 0,4100,4101,5,110,0,0,4101,4102,5,97,0,0,4102,4103,5,108,0,0,4103,4104, - 5,105,0,0,4104,4105,5,103,0,0,4105,4106,5,110,0,0,4106,4107,5,101,0,0, - 4107,4108,5,100,0,0,4108,4113,5,46,0,0,4109,4110,5,110,0,0,4110,4111,5, - 111,0,0,4111,4113,5,46,0,0,4112,4085,1,0,0,0,4112,4093,1,0,0,0,4112,4099, - 1,0,0,0,4112,4109,1,0,0,0,4113,560,1,0,0,0,4114,4115,5,108,0,0,4115,4116, - 5,100,0,0,4116,4117,5,99,0,0,4117,4118,5,46,0,0,4118,4119,5,105,0,0,4119, - 4120,5,56,0,0,4120,562,1,0,0,0,4121,4122,5,108,0,0,4122,4123,5,100,0,0, - 4123,4124,5,99,0,0,4124,4125,5,46,0,0,4125,4126,5,114,0,0,4126,4134,5, - 52,0,0,4127,4128,5,108,0,0,4128,4129,5,100,0,0,4129,4130,5,99,0,0,4130, - 4131,5,46,0,0,4131,4132,5,114,0,0,4132,4134,5,56,0,0,4133,4121,1,0,0,0, - 4133,4127,1,0,0,0,4134,564,1,0,0,0,4135,4136,5,106,0,0,4136,4137,5,109, - 0,0,4137,4171,5,112,0,0,4138,4139,5,99,0,0,4139,4140,5,97,0,0,4140,4141, - 5,108,0,0,4141,4171,5,108,0,0,4142,4143,5,99,0,0,4143,4144,5,97,0,0,4144, - 4145,5,108,0,0,4145,4146,5,108,0,0,4146,4147,5,118,0,0,4147,4148,5,105, - 0,0,4148,4149,5,114,0,0,4149,4171,5,116,0,0,4150,4151,5,110,0,0,4151,4152, - 5,101,0,0,4152,4153,5,119,0,0,4153,4154,5,111,0,0,4154,4155,5,98,0,0,4155, - 4171,5,106,0,0,4156,4157,5,108,0,0,4157,4158,5,100,0,0,4158,4159,5,102, - 0,0,4159,4160,5,116,0,0,4160,4171,5,110,0,0,4161,4162,5,108,0,0,4162,4163, - 5,100,0,0,4163,4164,5,118,0,0,4164,4165,5,105,0,0,4165,4166,5,114,0,0, - 4166,4167,5,116,0,0,4167,4168,5,102,0,0,4168,4169,5,116,0,0,4169,4171, - 5,110,0,0,4170,4135,1,0,0,0,4170,4138,1,0,0,0,4170,4142,1,0,0,0,4170,4150, - 1,0,0,0,4170,4156,1,0,0,0,4170,4161,1,0,0,0,4171,566,1,0,0,0,4172,4173, - 5,99,0,0,4173,4174,5,97,0,0,4174,4175,5,108,0,0,4175,4176,5,108,0,0,4176, - 4177,5,105,0,0,4177,568,1,0,0,0,4178,4179,5,98,0,0,4179,4180,5,114,0,0, - 4180,4181,5,46,0,0,4181,4337,5,115,0,0,4182,4183,5,98,0,0,4183,4184,5, - 114,0,0,4184,4185,5,102,0,0,4185,4186,5,97,0,0,4186,4187,5,108,0,0,4187, - 4188,5,115,0,0,4188,4189,5,101,0,0,4189,4190,5,46,0,0,4190,4337,5,115, - 0,0,4191,4192,5,98,0,0,4192,4193,5,114,0,0,4193,4194,5,116,0,0,4194,4195, - 5,114,0,0,4195,4196,5,117,0,0,4196,4197,5,101,0,0,4197,4198,5,46,0,0,4198, - 4337,5,115,0,0,4199,4200,5,98,0,0,4200,4201,5,101,0,0,4201,4202,5,113, - 0,0,4202,4203,5,46,0,0,4203,4337,5,115,0,0,4204,4205,5,98,0,0,4205,4206, - 5,103,0,0,4206,4207,5,101,0,0,4207,4208,5,46,0,0,4208,4337,5,115,0,0,4209, - 4210,5,98,0,0,4210,4211,5,103,0,0,4211,4212,5,116,0,0,4212,4213,5,46,0, - 0,4213,4337,5,115,0,0,4214,4215,5,98,0,0,4215,4216,5,108,0,0,4216,4217, - 5,101,0,0,4217,4218,5,46,0,0,4218,4337,5,115,0,0,4219,4220,5,98,0,0,4220, - 4221,5,108,0,0,4221,4222,5,116,0,0,4222,4223,5,46,0,0,4223,4337,5,115, - 0,0,4224,4225,5,98,0,0,4225,4226,5,110,0,0,4226,4227,5,101,0,0,4227,4228, - 5,46,0,0,4228,4229,5,117,0,0,4229,4230,5,110,0,0,4230,4231,5,46,0,0,4231, - 4337,5,115,0,0,4232,4233,5,98,0,0,4233,4234,5,103,0,0,4234,4235,5,101, - 0,0,4235,4236,5,46,0,0,4236,4237,5,117,0,0,4237,4238,5,110,0,0,4238,4239, - 5,46,0,0,4239,4337,5,115,0,0,4240,4241,5,98,0,0,4241,4242,5,103,0,0,4242, - 4243,5,116,0,0,4243,4244,5,46,0,0,4244,4245,5,117,0,0,4245,4246,5,110, - 0,0,4246,4247,5,46,0,0,4247,4337,5,115,0,0,4248,4249,5,98,0,0,4249,4250, - 5,108,0,0,4250,4251,5,101,0,0,4251,4252,5,46,0,0,4252,4253,5,117,0,0,4253, - 4254,5,110,0,0,4254,4255,5,46,0,0,4255,4337,5,115,0,0,4256,4257,5,98,0, - 0,4257,4258,5,108,0,0,4258,4259,5,116,0,0,4259,4260,5,46,0,0,4260,4261, - 5,117,0,0,4261,4262,5,110,0,0,4262,4263,5,46,0,0,4263,4337,5,115,0,0,4264, - 4265,5,98,0,0,4265,4337,5,114,0,0,4266,4267,5,98,0,0,4267,4268,5,114,0, - 0,4268,4269,5,102,0,0,4269,4270,5,97,0,0,4270,4271,5,108,0,0,4271,4272, - 5,115,0,0,4272,4337,5,101,0,0,4273,4274,5,98,0,0,4274,4275,5,114,0,0,4275, - 4276,5,116,0,0,4276,4277,5,114,0,0,4277,4278,5,117,0,0,4278,4337,5,101, - 0,0,4279,4280,5,98,0,0,4280,4281,5,101,0,0,4281,4337,5,113,0,0,4282,4283, - 5,98,0,0,4283,4284,5,103,0,0,4284,4337,5,101,0,0,4285,4286,5,98,0,0,4286, - 4287,5,103,0,0,4287,4337,5,116,0,0,4288,4289,5,98,0,0,4289,4290,5,108, - 0,0,4290,4337,5,101,0,0,4291,4292,5,98,0,0,4292,4293,5,108,0,0,4293,4337, - 5,116,0,0,4294,4295,5,98,0,0,4295,4296,5,110,0,0,4296,4297,5,101,0,0,4297, - 4298,5,46,0,0,4298,4299,5,117,0,0,4299,4337,5,110,0,0,4300,4301,5,98,0, - 0,4301,4302,5,103,0,0,4302,4303,5,101,0,0,4303,4304,5,46,0,0,4304,4305, - 5,117,0,0,4305,4337,5,110,0,0,4306,4307,5,98,0,0,4307,4308,5,103,0,0,4308, - 4309,5,116,0,0,4309,4310,5,46,0,0,4310,4311,5,117,0,0,4311,4337,5,110, - 0,0,4312,4313,5,98,0,0,4313,4314,5,108,0,0,4314,4315,5,101,0,0,4315,4316, - 5,46,0,0,4316,4317,5,117,0,0,4317,4337,5,110,0,0,4318,4319,5,98,0,0,4319, - 4320,5,108,0,0,4320,4321,5,116,0,0,4321,4322,5,46,0,0,4322,4323,5,117, - 0,0,4323,4337,5,110,0,0,4324,4325,5,108,0,0,4325,4326,5,101,0,0,4326,4327, - 5,97,0,0,4327,4328,5,118,0,0,4328,4337,5,101,0,0,4329,4330,5,108,0,0,4330, - 4331,5,101,0,0,4331,4332,5,97,0,0,4332,4333,5,118,0,0,4333,4334,5,101, - 0,0,4334,4335,5,46,0,0,4335,4337,5,115,0,0,4336,4178,1,0,0,0,4336,4182, - 1,0,0,0,4336,4191,1,0,0,0,4336,4199,1,0,0,0,4336,4204,1,0,0,0,4336,4209, - 1,0,0,0,4336,4214,1,0,0,0,4336,4219,1,0,0,0,4336,4224,1,0,0,0,4336,4232, - 1,0,0,0,4336,4240,1,0,0,0,4336,4248,1,0,0,0,4336,4256,1,0,0,0,4336,4264, - 1,0,0,0,4336,4266,1,0,0,0,4336,4273,1,0,0,0,4336,4279,1,0,0,0,4336,4282, - 1,0,0,0,4336,4285,1,0,0,0,4336,4288,1,0,0,0,4336,4291,1,0,0,0,4336,4294, - 1,0,0,0,4336,4300,1,0,0,0,4336,4306,1,0,0,0,4336,4312,1,0,0,0,4336,4318, - 1,0,0,0,4336,4324,1,0,0,0,4336,4329,1,0,0,0,4337,570,1,0,0,0,4338,4339, - 5,115,0,0,4339,4340,5,119,0,0,4340,4341,5,105,0,0,4341,4342,5,116,0,0, - 4342,4343,5,99,0,0,4343,4344,5,104,0,0,4344,572,1,0,0,0,4345,4346,5,99, - 0,0,4346,4347,5,112,0,0,4347,4348,5,111,0,0,4348,4349,5,98,0,0,4349,4460, - 5,106,0,0,4350,4351,5,108,0,0,4351,4352,5,100,0,0,4352,4353,5,111,0,0, - 4353,4354,5,98,0,0,4354,4460,5,106,0,0,4355,4356,5,99,0,0,4356,4357,5, - 97,0,0,4357,4358,5,115,0,0,4358,4359,5,116,0,0,4359,4360,5,99,0,0,4360, - 4361,5,108,0,0,4361,4362,5,97,0,0,4362,4363,5,115,0,0,4363,4460,5,115, - 0,0,4364,4365,5,105,0,0,4365,4366,5,115,0,0,4366,4367,5,105,0,0,4367,4368, - 5,110,0,0,4368,4369,5,115,0,0,4369,4460,5,116,0,0,4370,4371,5,117,0,0, - 4371,4372,5,110,0,0,4372,4373,5,98,0,0,4373,4374,5,111,0,0,4374,4460,5, - 120,0,0,4375,4376,5,115,0,0,4376,4377,5,116,0,0,4377,4378,5,111,0,0,4378, - 4379,5,98,0,0,4379,4460,5,106,0,0,4380,4381,5,98,0,0,4381,4382,5,111,0, - 0,4382,4460,5,120,0,0,4383,4384,5,110,0,0,4384,4385,5,101,0,0,4385,4386, - 5,119,0,0,4386,4387,5,97,0,0,4387,4388,5,114,0,0,4388,4460,5,114,0,0,4389, - 4390,5,108,0,0,4390,4391,5,100,0,0,4391,4392,5,101,0,0,4392,4393,5,108, - 0,0,4393,4394,5,101,0,0,4394,4395,5,109,0,0,4395,4460,5,97,0,0,4396,4397, - 5,108,0,0,4397,4398,5,100,0,0,4398,4399,5,101,0,0,4399,4400,5,108,0,0, - 4400,4401,5,101,0,0,4401,4460,5,109,0,0,4402,4403,5,115,0,0,4403,4404, - 5,116,0,0,4404,4405,5,101,0,0,4405,4406,5,108,0,0,4406,4407,5,101,0,0, - 4407,4460,5,109,0,0,4408,4409,5,117,0,0,4409,4410,5,110,0,0,4410,4411, - 5,98,0,0,4411,4412,5,111,0,0,4412,4413,5,120,0,0,4413,4414,5,46,0,0,4414, - 4415,5,97,0,0,4415,4416,5,110,0,0,4416,4460,5,121,0,0,4417,4418,5,114, - 0,0,4418,4419,5,101,0,0,4419,4420,5,102,0,0,4420,4421,5,97,0,0,4421,4422, - 5,110,0,0,4422,4423,5,121,0,0,4423,4424,5,118,0,0,4424,4425,5,97,0,0,4425, - 4460,5,108,0,0,4426,4427,5,109,0,0,4427,4428,5,107,0,0,4428,4429,5,114, - 0,0,4429,4430,5,101,0,0,4430,4431,5,102,0,0,4431,4432,5,97,0,0,4432,4433, - 5,110,0,0,4433,4460,5,121,0,0,4434,4435,5,105,0,0,4435,4436,5,110,0,0, - 4436,4437,5,105,0,0,4437,4438,5,116,0,0,4438,4439,5,111,0,0,4439,4440, - 5,98,0,0,4440,4460,5,106,0,0,4441,4442,5,99,0,0,4442,4443,5,111,0,0,4443, - 4444,5,110,0,0,4444,4445,5,115,0,0,4445,4446,5,116,0,0,4446,4447,5,114, - 0,0,4447,4448,5,97,0,0,4448,4449,5,105,0,0,4449,4450,5,110,0,0,4450,4451, - 5,101,0,0,4451,4452,5,100,0,0,4452,4460,5,46,0,0,4453,4454,5,115,0,0,4454, - 4455,5,105,0,0,4455,4456,5,122,0,0,4456,4457,5,101,0,0,4457,4458,5,111, - 0,0,4458,4460,5,102,0,0,4459,4345,1,0,0,0,4459,4350,1,0,0,0,4459,4355, - 1,0,0,0,4459,4364,1,0,0,0,4459,4370,1,0,0,0,4459,4375,1,0,0,0,4459,4380, - 1,0,0,0,4459,4383,1,0,0,0,4459,4389,1,0,0,0,4459,4396,1,0,0,0,4459,4402, - 1,0,0,0,4459,4408,1,0,0,0,4459,4417,1,0,0,0,4459,4426,1,0,0,0,4459,4434, - 1,0,0,0,4459,4441,1,0,0,0,4459,4453,1,0,0,0,4460,574,1,0,0,0,4461,4462, - 5,108,0,0,4462,4463,5,100,0,0,4463,4464,5,115,0,0,4464,4465,5,116,0,0, - 4465,4466,5,114,0,0,4466,576,1,0,0,0,4467,4468,5,108,0,0,4468,4469,5,100, - 0,0,4469,4470,5,102,0,0,4470,4471,5,108,0,0,4471,4503,5,100,0,0,4472,4473, - 5,108,0,0,4473,4474,5,100,0,0,4474,4475,5,102,0,0,4475,4476,5,108,0,0, - 4476,4477,5,100,0,0,4477,4503,5,97,0,0,4478,4479,5,115,0,0,4479,4480,5, - 116,0,0,4480,4481,5,102,0,0,4481,4482,5,108,0,0,4482,4503,5,100,0,0,4483, - 4484,5,108,0,0,4484,4485,5,100,0,0,4485,4486,5,115,0,0,4486,4487,5,102, - 0,0,4487,4488,5,108,0,0,4488,4503,5,100,0,0,4489,4490,5,108,0,0,4490,4491, - 5,100,0,0,4491,4492,5,115,0,0,4492,4493,5,102,0,0,4493,4494,5,108,0,0, - 4494,4495,5,100,0,0,4495,4503,5,97,0,0,4496,4497,5,115,0,0,4497,4498,5, - 116,0,0,4498,4499,5,115,0,0,4499,4500,5,102,0,0,4500,4501,5,108,0,0,4501, - 4503,5,100,0,0,4502,4467,1,0,0,0,4502,4472,1,0,0,0,4502,4478,1,0,0,0,4502, - 4483,1,0,0,0,4502,4489,1,0,0,0,4502,4496,1,0,0,0,4503,578,1,0,0,0,4504, - 4505,5,108,0,0,4505,4506,5,100,0,0,4506,4507,5,116,0,0,4507,4508,5,111, - 0,0,4508,4509,5,107,0,0,4509,4510,5,101,0,0,4510,4511,5,110,0,0,4511,580, - 1,0,0,0,4512,4513,7,5,0,0,4513,582,1,0,0,0,4514,4515,7,6,0,0,4515,584, - 1,0,0,0,4516,4517,3,587,293,0,4517,4518,3,535,267,0,4518,4520,1,0,0,0, - 4519,4516,1,0,0,0,4520,4521,1,0,0,0,4521,4519,1,0,0,0,4521,4522,1,0,0, - 0,4522,4523,1,0,0,0,4523,4524,3,587,293,0,4524,586,1,0,0,0,4525,4529,3, - 581,290,0,4526,4528,3,583,291,0,4527,4526,1,0,0,0,4528,4531,1,0,0,0,4529, - 4527,1,0,0,0,4529,4530,1,0,0,0,4530,588,1,0,0,0,4531,4529,1,0,0,0,4532, - 4533,7,7,0,0,4533,4534,1,0,0,0,4534,4535,6,294,0,0,4535,590,1,0,0,0,4536, - 4537,5,47,0,0,4537,4538,5,47,0,0,4538,4542,1,0,0,0,4539,4541,8,8,0,0,4540, - 4539,1,0,0,0,4541,4544,1,0,0,0,4542,4540,1,0,0,0,4542,4543,1,0,0,0,4543, - 4545,1,0,0,0,4544,4542,1,0,0,0,4545,4546,6,295,0,0,4546,592,1,0,0,0,4547, - 4548,5,47,0,0,4548,4549,5,42,0,0,4549,4553,1,0,0,0,4550,4552,9,0,0,0,4551, - 4550,1,0,0,0,4552,4555,1,0,0,0,4553,4554,1,0,0,0,4553,4551,1,0,0,0,4554, - 4556,1,0,0,0,4555,4553,1,0,0,0,4556,4557,5,42,0,0,4557,4558,5,47,0,0,4558, - 4559,1,0,0,0,4559,4560,6,296,0,0,4560,594,1,0,0,0,4561,4562,5,46,0,0,4562, - 4563,5,112,0,0,4563,4564,5,101,0,0,4564,4565,5,114,0,0,4565,4566,5,109, - 0,0,4566,4567,5,105,0,0,4567,4568,5,115,0,0,4568,4569,5,115,0,0,4569,4570, - 5,105,0,0,4570,4571,5,111,0,0,4571,4572,5,110,0,0,4572,596,1,0,0,0,4573, - 4574,5,46,0,0,4574,4575,5,112,0,0,4575,4576,5,101,0,0,4576,4577,5,114, - 0,0,4577,4578,5,109,0,0,4578,4579,5,105,0,0,4579,4580,5,115,0,0,4580,4581, - 5,115,0,0,4581,4582,5,105,0,0,4582,4583,5,111,0,0,4583,4584,5,110,0,0, - 4584,4585,5,115,0,0,4585,4586,5,101,0,0,4586,4587,5,116,0,0,4587,598,1, - 0,0,0,4588,4589,5,46,0,0,4589,4590,5,101,0,0,4590,4591,5,109,0,0,4591, - 4592,5,105,0,0,4592,4593,5,116,0,0,4593,4594,5,98,0,0,4594,4595,5,121, - 0,0,4595,4596,5,116,0,0,4596,4597,5,101,0,0,4597,600,1,0,0,0,4598,4599, - 5,46,0,0,4599,4600,5,109,0,0,4600,4601,5,97,0,0,4601,4602,5,120,0,0,4602, - 4603,5,115,0,0,4603,4604,5,116,0,0,4604,4605,5,97,0,0,4605,4606,5,99,0, - 0,4606,4607,5,107,0,0,4607,602,1,0,0,0,4608,4609,5,46,0,0,4609,4610,5, - 101,0,0,4610,4611,5,110,0,0,4611,4612,5,116,0,0,4612,4613,5,114,0,0,4613, - 4614,5,121,0,0,4614,4615,5,112,0,0,4615,4616,5,111,0,0,4616,4617,5,105, - 0,0,4617,4618,5,110,0,0,4618,4619,5,116,0,0,4619,604,1,0,0,0,4620,4621, - 5,46,0,0,4621,4622,5,122,0,0,4622,4623,5,101,0,0,4623,4624,5,114,0,0,4624, - 4625,5,111,0,0,4625,4626,5,105,0,0,4626,4627,5,110,0,0,4627,4628,5,105, - 0,0,4628,4629,5,116,0,0,4629,606,1,0,0,0,4630,4631,5,46,0,0,4631,4632, - 5,108,0,0,4632,4633,5,111,0,0,4633,4634,5,99,0,0,4634,4635,5,97,0,0,4635, - 4636,5,108,0,0,4636,4637,5,115,0,0,4637,608,1,0,0,0,4638,4639,5,46,0,0, - 4639,4640,5,101,0,0,4640,4641,5,120,0,0,4641,4642,5,112,0,0,4642,4643, - 5,111,0,0,4643,4644,5,114,0,0,4644,4645,5,116,0,0,4645,610,1,0,0,0,4646, - 4647,5,46,0,0,4647,4648,5,111,0,0,4648,4649,5,118,0,0,4649,4650,5,101, - 0,0,4650,4651,5,114,0,0,4651,4652,5,114,0,0,4652,4653,5,105,0,0,4653,4654, - 5,100,0,0,4654,4655,5,101,0,0,4655,612,1,0,0,0,4656,4657,5,46,0,0,4657, - 4658,5,118,0,0,4658,4659,5,116,0,0,4659,4660,5,101,0,0,4660,4661,5,110, - 0,0,4661,4662,5,116,0,0,4662,4663,5,114,0,0,4663,4664,5,121,0,0,4664,614, - 1,0,0,0,37,0,2005,2013,2018,2020,2023,2031,2036,2038,2041,2046,2052,2056, - 2061,2063,2166,2177,2188,2199,2214,2721,2772,2774,2783,2785,4005,4083, - 4112,4133,4170,4336,4459,4502,4521,4529,4542,4553,1,6,0,0 + 3728,5,46,0,0,3728,3729,5,111,0,0,3729,3730,5,118,0,0,3730,3731,5,102, + 0,0,3731,3732,5,46,0,0,3732,3733,5,117,0,0,3733,4033,5,56,0,0,3734,3735, + 5,99,0,0,3735,3736,5,107,0,0,3736,3737,5,102,0,0,3737,3738,5,105,0,0,3738, + 3739,5,110,0,0,3739,3740,5,105,0,0,3740,3741,5,116,0,0,3741,4033,5,101, + 0,0,3742,3743,5,99,0,0,3743,3744,5,111,0,0,3744,3745,5,110,0,0,3745,3746, + 5,118,0,0,3746,3747,5,46,0,0,3747,3748,5,117,0,0,3748,4033,5,50,0,0,3749, + 3750,5,99,0,0,3750,3751,5,111,0,0,3751,3752,5,110,0,0,3752,3753,5,118, + 0,0,3753,3754,5,46,0,0,3754,3755,5,117,0,0,3755,4033,5,49,0,0,3756,3757, + 5,99,0,0,3757,3758,5,111,0,0,3758,3759,5,110,0,0,3759,3760,5,118,0,0,3760, + 3761,5,46,0,0,3761,4033,5,105,0,0,3762,3763,5,99,0,0,3763,3764,5,111,0, + 0,3764,3765,5,110,0,0,3765,3766,5,118,0,0,3766,3767,5,46,0,0,3767,3768, + 5,111,0,0,3768,3769,5,118,0,0,3769,3770,5,102,0,0,3770,3771,5,46,0,0,3771, + 4033,5,105,0,0,3772,3773,5,99,0,0,3773,3774,5,111,0,0,3774,3775,5,110, + 0,0,3775,3776,5,118,0,0,3776,3777,5,46,0,0,3777,3778,5,111,0,0,3778,3779, + 5,118,0,0,3779,3780,5,102,0,0,3780,3781,5,46,0,0,3781,4033,5,117,0,0,3782, + 3783,5,97,0,0,3783,3784,5,100,0,0,3784,3785,5,100,0,0,3785,3786,5,46,0, + 0,3786,3787,5,111,0,0,3787,3788,5,118,0,0,3788,4033,5,102,0,0,3789,3790, + 5,97,0,0,3790,3791,5,100,0,0,3791,3792,5,100,0,0,3792,3793,5,46,0,0,3793, + 3794,5,111,0,0,3794,3795,5,118,0,0,3795,3796,5,102,0,0,3796,3797,5,46, + 0,0,3797,3798,5,117,0,0,3798,4033,5,110,0,0,3799,3800,5,109,0,0,3800,3801, + 5,117,0,0,3801,3802,5,108,0,0,3802,3803,5,46,0,0,3803,3804,5,111,0,0,3804, + 3805,5,118,0,0,3805,4033,5,102,0,0,3806,3807,5,109,0,0,3807,3808,5,117, + 0,0,3808,3809,5,108,0,0,3809,3810,5,46,0,0,3810,3811,5,111,0,0,3811,3812, + 5,118,0,0,3812,3813,5,102,0,0,3813,3814,5,46,0,0,3814,3815,5,117,0,0,3815, + 4033,5,110,0,0,3816,3817,5,115,0,0,3817,3818,5,117,0,0,3818,3819,5,98, + 0,0,3819,3820,5,46,0,0,3820,3821,5,111,0,0,3821,3822,5,118,0,0,3822,4033, + 5,102,0,0,3823,3824,5,115,0,0,3824,3825,5,117,0,0,3825,3826,5,98,0,0,3826, + 3827,5,46,0,0,3827,3828,5,111,0,0,3828,3829,5,118,0,0,3829,3830,5,102, + 0,0,3830,3831,5,46,0,0,3831,3832,5,117,0,0,3832,4033,5,110,0,0,3833,3834, + 5,101,0,0,3834,3835,5,110,0,0,3835,3836,5,100,0,0,3836,3837,5,102,0,0, + 3837,3838,5,105,0,0,3838,3839,5,110,0,0,3839,3840,5,97,0,0,3840,3841,5, + 108,0,0,3841,3842,5,108,0,0,3842,4033,5,121,0,0,3843,3844,5,101,0,0,3844, + 3845,5,110,0,0,3845,3846,5,100,0,0,3846,3847,5,102,0,0,3847,3848,5,97, + 0,0,3848,3849,5,117,0,0,3849,3850,5,108,0,0,3850,4033,5,116,0,0,3851,3852, + 5,115,0,0,3852,3853,5,116,0,0,3853,3854,5,105,0,0,3854,3855,5,110,0,0, + 3855,3856,5,100,0,0,3856,3857,5,46,0,0,3857,4033,5,105,0,0,3858,3859,5, + 99,0,0,3859,3860,5,111,0,0,3860,3861,5,110,0,0,3861,3862,5,118,0,0,3862, + 3863,5,46,0,0,3863,4033,5,117,0,0,3864,3865,5,112,0,0,3865,3866,5,114, + 0,0,3866,3867,5,101,0,0,3867,3868,5,102,0,0,3868,3869,5,105,0,0,3869,3870, + 5,120,0,0,3870,4033,5,55,0,0,3871,3872,5,112,0,0,3872,3873,5,114,0,0,3873, + 3874,5,101,0,0,3874,3875,5,102,0,0,3875,3876,5,105,0,0,3876,3877,5,120, + 0,0,3877,4033,5,54,0,0,3878,3879,5,112,0,0,3879,3880,5,114,0,0,3880,3881, + 5,101,0,0,3881,3882,5,102,0,0,3882,3883,5,105,0,0,3883,3884,5,120,0,0, + 3884,4033,5,53,0,0,3885,3886,5,112,0,0,3886,3887,5,114,0,0,3887,3888,5, + 101,0,0,3888,3889,5,102,0,0,3889,3890,5,105,0,0,3890,3891,5,120,0,0,3891, + 4033,5,52,0,0,3892,3893,5,112,0,0,3893,3894,5,114,0,0,3894,3895,5,101, + 0,0,3895,3896,5,102,0,0,3896,3897,5,105,0,0,3897,3898,5,120,0,0,3898,4033, + 5,51,0,0,3899,3900,5,112,0,0,3900,3901,5,114,0,0,3901,3902,5,101,0,0,3902, + 3903,5,102,0,0,3903,3904,5,105,0,0,3904,3905,5,120,0,0,3905,4033,5,50, + 0,0,3906,3907,5,112,0,0,3907,3908,5,114,0,0,3908,3909,5,101,0,0,3909,3910, + 5,102,0,0,3910,3911,5,105,0,0,3911,3912,5,120,0,0,3912,4033,5,49,0,0,3913, + 3914,5,112,0,0,3914,3915,5,114,0,0,3915,3916,5,101,0,0,3916,3917,5,102, + 0,0,3917,3918,5,105,0,0,3918,3919,5,120,0,0,3919,3920,5,114,0,0,3920,3921, + 5,101,0,0,3921,4033,5,102,0,0,3922,3923,5,97,0,0,3923,3924,5,114,0,0,3924, + 3925,5,103,0,0,3925,3926,5,108,0,0,3926,3927,5,105,0,0,3927,3928,5,115, + 0,0,3928,4033,5,116,0,0,3929,3930,5,99,0,0,3930,3931,5,101,0,0,3931,4033, + 5,113,0,0,3932,3933,5,99,0,0,3933,3934,5,103,0,0,3934,4033,5,116,0,0,3935, + 3936,5,99,0,0,3936,3937,5,103,0,0,3937,3938,5,116,0,0,3938,3939,5,46,0, + 0,3939,3940,5,117,0,0,3940,4033,5,110,0,0,3941,3942,5,99,0,0,3942,3943, + 5,108,0,0,3943,4033,5,116,0,0,3944,3945,5,99,0,0,3945,3946,5,108,0,0,3946, + 3947,5,116,0,0,3947,3948,5,46,0,0,3948,3949,5,117,0,0,3949,4033,5,110, + 0,0,3950,3951,5,108,0,0,3951,3952,5,111,0,0,3952,3953,5,99,0,0,3953,3954, + 5,97,0,0,3954,3955,5,108,0,0,3955,3956,5,108,0,0,3956,3957,5,111,0,0,3957, + 4033,5,99,0,0,3958,3959,5,101,0,0,3959,3960,5,110,0,0,3960,3961,5,100, + 0,0,3961,3962,5,102,0,0,3962,3963,5,105,0,0,3963,3964,5,108,0,0,3964,3965, + 5,116,0,0,3965,3966,5,101,0,0,3966,4033,5,114,0,0,3967,3968,5,118,0,0, + 3968,3969,5,111,0,0,3969,3970,5,108,0,0,3970,3971,5,97,0,0,3971,3972,5, + 116,0,0,3972,3973,5,105,0,0,3973,3974,5,108,0,0,3974,3975,5,101,0,0,3975, + 4033,5,46,0,0,3976,3977,5,116,0,0,3977,3978,5,97,0,0,3978,3979,5,105,0, + 0,3979,3980,5,108,0,0,3980,4033,5,46,0,0,3981,3982,5,99,0,0,3982,3983, + 5,112,0,0,3983,3984,5,98,0,0,3984,3985,5,108,0,0,3985,4033,5,107,0,0,3986, + 3987,5,105,0,0,3987,3988,5,110,0,0,3988,3989,5,105,0,0,3989,3990,5,116, + 0,0,3990,3991,5,98,0,0,3991,3992,5,108,0,0,3992,4033,5,107,0,0,3993,3994, + 5,114,0,0,3994,3995,5,101,0,0,3995,3996,5,116,0,0,3996,3997,5,104,0,0, + 3997,3998,5,114,0,0,3998,3999,5,111,0,0,3999,4033,5,119,0,0,4000,4001, + 5,114,0,0,4001,4002,5,101,0,0,4002,4003,5,102,0,0,4003,4004,5,97,0,0,4004, + 4005,5,110,0,0,4005,4006,5,121,0,0,4006,4007,5,116,0,0,4007,4008,5,121, + 0,0,4008,4009,5,112,0,0,4009,4033,5,101,0,0,4010,4011,5,114,0,0,4011,4012, + 5,101,0,0,4012,4013,5,97,0,0,4013,4014,5,100,0,0,4014,4015,5,111,0,0,4015, + 4016,5,110,0,0,4016,4017,5,108,0,0,4017,4018,5,121,0,0,4018,4033,5,46, + 0,0,4019,4020,5,105,0,0,4020,4021,5,108,0,0,4021,4022,5,108,0,0,4022,4023, + 5,101,0,0,4023,4024,5,103,0,0,4024,4025,5,97,0,0,4025,4033,5,108,0,0,4026, + 4027,5,101,0,0,4027,4028,5,110,0,0,4028,4029,5,100,0,0,4029,4030,5,109, + 0,0,4030,4031,5,97,0,0,4031,4033,5,99,0,0,4032,2850,1,0,0,0,4032,2853, + 1,0,0,0,4032,2858,1,0,0,0,4032,2865,1,0,0,0,4032,2872,1,0,0,0,4032,2879, + 1,0,0,0,4032,2886,1,0,0,0,4032,2893,1,0,0,0,4032,2900,1,0,0,0,4032,2907, + 1,0,0,0,4032,2914,1,0,0,0,4032,2921,1,0,0,0,4032,2928,1,0,0,0,4032,2935, + 1,0,0,0,4032,2942,1,0,0,0,4032,2948,1,0,0,0,4032,2957,1,0,0,0,4032,2966, + 1,0,0,0,4032,2974,1,0,0,0,4032,2982,1,0,0,0,4032,2990,1,0,0,0,4032,2998, + 1,0,0,0,4032,3006,1,0,0,0,4032,3014,1,0,0,0,4032,3022,1,0,0,0,4032,3030, + 1,0,0,0,4032,3038,1,0,0,0,4032,3041,1,0,0,0,4032,3044,1,0,0,0,4032,3047, + 1,0,0,0,4032,3055,1,0,0,0,4032,3063,1,0,0,0,4032,3071,1,0,0,0,4032,3079, + 1,0,0,0,4032,3087,1,0,0,0,4032,3095,1,0,0,0,4032,3103,1,0,0,0,4032,3111, + 1,0,0,0,4032,3118,1,0,0,0,4032,3126,1,0,0,0,4032,3134,1,0,0,0,4032,3143, + 1,0,0,0,4032,3152,1,0,0,0,4032,3160,1,0,0,0,4032,3168,1,0,0,0,4032,3176, + 1,0,0,0,4032,3184,1,0,0,0,4032,3192,1,0,0,0,4032,3200,1,0,0,0,4032,3203, + 1,0,0,0,4032,3206,1,0,0,0,4032,3209,1,0,0,0,4032,3212,1,0,0,0,4032,3218, + 1,0,0,0,4032,3221,1,0,0,0,4032,3227,1,0,0,0,4032,3230,1,0,0,0,4032,3232, + 1,0,0,0,4032,3235,1,0,0,0,4032,3238,1,0,0,0,4032,3241,1,0,0,0,4032,3247, + 1,0,0,0,4032,3250,1,0,0,0,4032,3253,1,0,0,0,4032,3260,1,0,0,0,4032,3267, + 1,0,0,0,4032,3274,1,0,0,0,4032,3281,1,0,0,0,4032,3288,1,0,0,0,4032,3295, + 1,0,0,0,4032,3302,1,0,0,0,4032,3309,1,0,0,0,4032,3318,1,0,0,0,4032,3323, + 1,0,0,0,4032,3337,1,0,0,0,4032,3351,1,0,0,0,4032,3365,1,0,0,0,4032,3379, + 1,0,0,0,4032,3393,1,0,0,0,4032,3407,1,0,0,0,4032,3421,1,0,0,0,4032,3435, + 1,0,0,0,4032,3448,1,0,0,0,4032,3461,1,0,0,0,4032,3466,1,0,0,0,4032,3475, + 1,0,0,0,4032,3484,1,0,0,0,4032,3493,1,0,0,0,4032,3502,1,0,0,0,4032,3511, + 1,0,0,0,4032,3520,1,0,0,0,4032,3529,1,0,0,0,4032,3538,1,0,0,0,4032,3546, + 1,0,0,0,4032,3555,1,0,0,0,4032,3564,1,0,0,0,4032,3574,1,0,0,0,4032,3582, + 1,0,0,0,4032,3591,1,0,0,0,4032,3600,1,0,0,0,4032,3609,1,0,0,0,4032,3618, + 1,0,0,0,4032,3627,1,0,0,0,4032,3636,1,0,0,0,4032,3646,1,0,0,0,4032,3657, + 1,0,0,0,4032,3668,1,0,0,0,4032,3679,1,0,0,0,4032,3690,1,0,0,0,4032,3701, + 1,0,0,0,4032,3712,1,0,0,0,4032,3723,1,0,0,0,4032,3734,1,0,0,0,4032,3742, + 1,0,0,0,4032,3749,1,0,0,0,4032,3756,1,0,0,0,4032,3762,1,0,0,0,4032,3772, + 1,0,0,0,4032,3782,1,0,0,0,4032,3789,1,0,0,0,4032,3799,1,0,0,0,4032,3806, + 1,0,0,0,4032,3816,1,0,0,0,4032,3823,1,0,0,0,4032,3833,1,0,0,0,4032,3843, + 1,0,0,0,4032,3851,1,0,0,0,4032,3858,1,0,0,0,4032,3864,1,0,0,0,4032,3871, + 1,0,0,0,4032,3878,1,0,0,0,4032,3885,1,0,0,0,4032,3892,1,0,0,0,4032,3899, + 1,0,0,0,4032,3906,1,0,0,0,4032,3913,1,0,0,0,4032,3922,1,0,0,0,4032,3929, + 1,0,0,0,4032,3932,1,0,0,0,4032,3935,1,0,0,0,4032,3941,1,0,0,0,4032,3944, + 1,0,0,0,4032,3950,1,0,0,0,4032,3958,1,0,0,0,4032,3967,1,0,0,0,4032,3976, + 1,0,0,0,4032,3981,1,0,0,0,4032,3986,1,0,0,0,4032,3993,1,0,0,0,4032,4000, + 1,0,0,0,4032,4010,1,0,0,0,4032,4019,1,0,0,0,4032,4026,1,0,0,0,4033,552, + 1,0,0,0,4034,4035,5,108,0,0,4035,4036,5,100,0,0,4036,4037,5,97,0,0,4037, + 4038,5,114,0,0,4038,4039,5,103,0,0,4039,4040,5,46,0,0,4040,4111,5,115, + 0,0,4041,4042,5,108,0,0,4042,4043,5,100,0,0,4043,4044,5,97,0,0,4044,4045, + 5,114,0,0,4045,4046,5,103,0,0,4046,4047,5,97,0,0,4047,4048,5,46,0,0,4048, + 4111,5,115,0,0,4049,4050,5,115,0,0,4050,4051,5,116,0,0,4051,4052,5,97, + 0,0,4052,4053,5,114,0,0,4053,4054,5,103,0,0,4054,4055,5,46,0,0,4055,4111, + 5,115,0,0,4056,4057,5,108,0,0,4057,4058,5,100,0,0,4058,4059,5,108,0,0, + 4059,4060,5,111,0,0,4060,4061,5,99,0,0,4061,4062,5,46,0,0,4062,4111,5, + 115,0,0,4063,4064,5,108,0,0,4064,4065,5,100,0,0,4065,4066,5,108,0,0,4066, + 4067,5,111,0,0,4067,4068,5,99,0,0,4068,4069,5,97,0,0,4069,4070,5,46,0, + 0,4070,4111,5,115,0,0,4071,4072,5,115,0,0,4072,4073,5,116,0,0,4073,4074, + 5,108,0,0,4074,4075,5,111,0,0,4075,4076,5,99,0,0,4076,4077,5,46,0,0,4077, + 4111,5,115,0,0,4078,4079,5,108,0,0,4079,4080,5,100,0,0,4080,4081,5,97, + 0,0,4081,4082,5,114,0,0,4082,4111,5,103,0,0,4083,4084,5,108,0,0,4084,4085, + 5,100,0,0,4085,4086,5,97,0,0,4086,4087,5,114,0,0,4087,4088,5,103,0,0,4088, + 4111,5,97,0,0,4089,4090,5,115,0,0,4090,4091,5,116,0,0,4091,4092,5,97,0, + 0,4092,4093,5,114,0,0,4093,4111,5,103,0,0,4094,4095,5,108,0,0,4095,4096, + 5,100,0,0,4096,4097,5,108,0,0,4097,4098,5,111,0,0,4098,4111,5,99,0,0,4099, + 4100,5,108,0,0,4100,4101,5,100,0,0,4101,4102,5,108,0,0,4102,4103,5,111, + 0,0,4103,4104,5,99,0,0,4104,4111,5,97,0,0,4105,4106,5,115,0,0,4106,4107, + 5,116,0,0,4107,4108,5,108,0,0,4108,4109,5,111,0,0,4109,4111,5,99,0,0,4110, + 4034,1,0,0,0,4110,4041,1,0,0,0,4110,4049,1,0,0,0,4110,4056,1,0,0,0,4110, + 4063,1,0,0,0,4110,4071,1,0,0,0,4110,4078,1,0,0,0,4110,4083,1,0,0,0,4110, + 4089,1,0,0,0,4110,4094,1,0,0,0,4110,4099,1,0,0,0,4110,4105,1,0,0,0,4111, + 554,1,0,0,0,4112,4113,5,108,0,0,4113,4114,5,100,0,0,4114,4115,5,99,0,0, + 4115,4116,5,46,0,0,4116,4117,5,105,0,0,4117,4118,5,52,0,0,4118,4119,5, + 46,0,0,4119,4140,5,115,0,0,4120,4121,5,108,0,0,4121,4122,5,100,0,0,4122, + 4123,5,99,0,0,4123,4124,5,46,0,0,4124,4125,5,105,0,0,4125,4140,5,52,0, + 0,4126,4127,5,117,0,0,4127,4128,5,110,0,0,4128,4129,5,97,0,0,4129,4130, + 5,108,0,0,4130,4131,5,105,0,0,4131,4132,5,103,0,0,4132,4133,5,110,0,0, + 4133,4134,5,101,0,0,4134,4135,5,100,0,0,4135,4140,5,46,0,0,4136,4137,5, + 110,0,0,4137,4138,5,111,0,0,4138,4140,5,46,0,0,4139,4112,1,0,0,0,4139, + 4120,1,0,0,0,4139,4126,1,0,0,0,4139,4136,1,0,0,0,4140,556,1,0,0,0,4141, + 4142,5,108,0,0,4142,4143,5,100,0,0,4143,4144,5,99,0,0,4144,4145,5,46,0, + 0,4145,4146,5,105,0,0,4146,4147,5,56,0,0,4147,558,1,0,0,0,4148,4149,5, + 108,0,0,4149,4150,5,100,0,0,4150,4151,5,99,0,0,4151,4152,5,46,0,0,4152, + 4153,5,114,0,0,4153,4161,5,52,0,0,4154,4155,5,108,0,0,4155,4156,5,100, + 0,0,4156,4157,5,99,0,0,4157,4158,5,46,0,0,4158,4159,5,114,0,0,4159,4161, + 5,56,0,0,4160,4148,1,0,0,0,4160,4154,1,0,0,0,4161,560,1,0,0,0,4162,4163, + 5,106,0,0,4163,4164,5,109,0,0,4164,4198,5,112,0,0,4165,4166,5,99,0,0,4166, + 4167,5,97,0,0,4167,4168,5,108,0,0,4168,4198,5,108,0,0,4169,4170,5,99,0, + 0,4170,4171,5,97,0,0,4171,4172,5,108,0,0,4172,4173,5,108,0,0,4173,4174, + 5,118,0,0,4174,4175,5,105,0,0,4175,4176,5,114,0,0,4176,4198,5,116,0,0, + 4177,4178,5,110,0,0,4178,4179,5,101,0,0,4179,4180,5,119,0,0,4180,4181, + 5,111,0,0,4181,4182,5,98,0,0,4182,4198,5,106,0,0,4183,4184,5,108,0,0,4184, + 4185,5,100,0,0,4185,4186,5,102,0,0,4186,4187,5,116,0,0,4187,4198,5,110, + 0,0,4188,4189,5,108,0,0,4189,4190,5,100,0,0,4190,4191,5,118,0,0,4191,4192, + 5,105,0,0,4192,4193,5,114,0,0,4193,4194,5,116,0,0,4194,4195,5,102,0,0, + 4195,4196,5,116,0,0,4196,4198,5,110,0,0,4197,4162,1,0,0,0,4197,4165,1, + 0,0,0,4197,4169,1,0,0,0,4197,4177,1,0,0,0,4197,4183,1,0,0,0,4197,4188, + 1,0,0,0,4198,562,1,0,0,0,4199,4200,5,99,0,0,4200,4201,5,97,0,0,4201,4202, + 5,108,0,0,4202,4203,5,108,0,0,4203,4204,5,105,0,0,4204,564,1,0,0,0,4205, + 4206,5,98,0,0,4206,4207,5,114,0,0,4207,4208,5,46,0,0,4208,4364,5,115,0, + 0,4209,4210,5,98,0,0,4210,4211,5,114,0,0,4211,4212,5,102,0,0,4212,4213, + 5,97,0,0,4213,4214,5,108,0,0,4214,4215,5,115,0,0,4215,4216,5,101,0,0,4216, + 4217,5,46,0,0,4217,4364,5,115,0,0,4218,4219,5,98,0,0,4219,4220,5,114,0, + 0,4220,4221,5,116,0,0,4221,4222,5,114,0,0,4222,4223,5,117,0,0,4223,4224, + 5,101,0,0,4224,4225,5,46,0,0,4225,4364,5,115,0,0,4226,4227,5,98,0,0,4227, + 4228,5,101,0,0,4228,4229,5,113,0,0,4229,4230,5,46,0,0,4230,4364,5,115, + 0,0,4231,4232,5,98,0,0,4232,4233,5,103,0,0,4233,4234,5,101,0,0,4234,4235, + 5,46,0,0,4235,4364,5,115,0,0,4236,4237,5,98,0,0,4237,4238,5,103,0,0,4238, + 4239,5,116,0,0,4239,4240,5,46,0,0,4240,4364,5,115,0,0,4241,4242,5,98,0, + 0,4242,4243,5,108,0,0,4243,4244,5,101,0,0,4244,4245,5,46,0,0,4245,4364, + 5,115,0,0,4246,4247,5,98,0,0,4247,4248,5,108,0,0,4248,4249,5,116,0,0,4249, + 4250,5,46,0,0,4250,4364,5,115,0,0,4251,4252,5,98,0,0,4252,4253,5,110,0, + 0,4253,4254,5,101,0,0,4254,4255,5,46,0,0,4255,4256,5,117,0,0,4256,4257, + 5,110,0,0,4257,4258,5,46,0,0,4258,4364,5,115,0,0,4259,4260,5,98,0,0,4260, + 4261,5,103,0,0,4261,4262,5,101,0,0,4262,4263,5,46,0,0,4263,4264,5,117, + 0,0,4264,4265,5,110,0,0,4265,4266,5,46,0,0,4266,4364,5,115,0,0,4267,4268, + 5,98,0,0,4268,4269,5,103,0,0,4269,4270,5,116,0,0,4270,4271,5,46,0,0,4271, + 4272,5,117,0,0,4272,4273,5,110,0,0,4273,4274,5,46,0,0,4274,4364,5,115, + 0,0,4275,4276,5,98,0,0,4276,4277,5,108,0,0,4277,4278,5,101,0,0,4278,4279, + 5,46,0,0,4279,4280,5,117,0,0,4280,4281,5,110,0,0,4281,4282,5,46,0,0,4282, + 4364,5,115,0,0,4283,4284,5,98,0,0,4284,4285,5,108,0,0,4285,4286,5,116, + 0,0,4286,4287,5,46,0,0,4287,4288,5,117,0,0,4288,4289,5,110,0,0,4289,4290, + 5,46,0,0,4290,4364,5,115,0,0,4291,4292,5,98,0,0,4292,4364,5,114,0,0,4293, + 4294,5,98,0,0,4294,4295,5,114,0,0,4295,4296,5,102,0,0,4296,4297,5,97,0, + 0,4297,4298,5,108,0,0,4298,4299,5,115,0,0,4299,4364,5,101,0,0,4300,4301, + 5,98,0,0,4301,4302,5,114,0,0,4302,4303,5,116,0,0,4303,4304,5,114,0,0,4304, + 4305,5,117,0,0,4305,4364,5,101,0,0,4306,4307,5,98,0,0,4307,4308,5,101, + 0,0,4308,4364,5,113,0,0,4309,4310,5,98,0,0,4310,4311,5,103,0,0,4311,4364, + 5,101,0,0,4312,4313,5,98,0,0,4313,4314,5,103,0,0,4314,4364,5,116,0,0,4315, + 4316,5,98,0,0,4316,4317,5,108,0,0,4317,4364,5,101,0,0,4318,4319,5,98,0, + 0,4319,4320,5,108,0,0,4320,4364,5,116,0,0,4321,4322,5,98,0,0,4322,4323, + 5,110,0,0,4323,4324,5,101,0,0,4324,4325,5,46,0,0,4325,4326,5,117,0,0,4326, + 4364,5,110,0,0,4327,4328,5,98,0,0,4328,4329,5,103,0,0,4329,4330,5,101, + 0,0,4330,4331,5,46,0,0,4331,4332,5,117,0,0,4332,4364,5,110,0,0,4333,4334, + 5,98,0,0,4334,4335,5,103,0,0,4335,4336,5,116,0,0,4336,4337,5,46,0,0,4337, + 4338,5,117,0,0,4338,4364,5,110,0,0,4339,4340,5,98,0,0,4340,4341,5,108, + 0,0,4341,4342,5,101,0,0,4342,4343,5,46,0,0,4343,4344,5,117,0,0,4344,4364, + 5,110,0,0,4345,4346,5,98,0,0,4346,4347,5,108,0,0,4347,4348,5,116,0,0,4348, + 4349,5,46,0,0,4349,4350,5,117,0,0,4350,4364,5,110,0,0,4351,4352,5,108, + 0,0,4352,4353,5,101,0,0,4353,4354,5,97,0,0,4354,4355,5,118,0,0,4355,4364, + 5,101,0,0,4356,4357,5,108,0,0,4357,4358,5,101,0,0,4358,4359,5,97,0,0,4359, + 4360,5,118,0,0,4360,4361,5,101,0,0,4361,4362,5,46,0,0,4362,4364,5,115, + 0,0,4363,4205,1,0,0,0,4363,4209,1,0,0,0,4363,4218,1,0,0,0,4363,4226,1, + 0,0,0,4363,4231,1,0,0,0,4363,4236,1,0,0,0,4363,4241,1,0,0,0,4363,4246, + 1,0,0,0,4363,4251,1,0,0,0,4363,4259,1,0,0,0,4363,4267,1,0,0,0,4363,4275, + 1,0,0,0,4363,4283,1,0,0,0,4363,4291,1,0,0,0,4363,4293,1,0,0,0,4363,4300, + 1,0,0,0,4363,4306,1,0,0,0,4363,4309,1,0,0,0,4363,4312,1,0,0,0,4363,4315, + 1,0,0,0,4363,4318,1,0,0,0,4363,4321,1,0,0,0,4363,4327,1,0,0,0,4363,4333, + 1,0,0,0,4363,4339,1,0,0,0,4363,4345,1,0,0,0,4363,4351,1,0,0,0,4363,4356, + 1,0,0,0,4364,566,1,0,0,0,4365,4366,5,115,0,0,4366,4367,5,119,0,0,4367, + 4368,5,105,0,0,4368,4369,5,116,0,0,4369,4370,5,99,0,0,4370,4371,5,104, + 0,0,4371,568,1,0,0,0,4372,4373,5,99,0,0,4373,4374,5,112,0,0,4374,4375, + 5,111,0,0,4375,4376,5,98,0,0,4376,4487,5,106,0,0,4377,4378,5,108,0,0,4378, + 4379,5,100,0,0,4379,4380,5,111,0,0,4380,4381,5,98,0,0,4381,4487,5,106, + 0,0,4382,4383,5,99,0,0,4383,4384,5,97,0,0,4384,4385,5,115,0,0,4385,4386, + 5,116,0,0,4386,4387,5,99,0,0,4387,4388,5,108,0,0,4388,4389,5,97,0,0,4389, + 4390,5,115,0,0,4390,4487,5,115,0,0,4391,4392,5,105,0,0,4392,4393,5,115, + 0,0,4393,4394,5,105,0,0,4394,4395,5,110,0,0,4395,4396,5,115,0,0,4396,4487, + 5,116,0,0,4397,4398,5,117,0,0,4398,4399,5,110,0,0,4399,4400,5,98,0,0,4400, + 4401,5,111,0,0,4401,4487,5,120,0,0,4402,4403,5,115,0,0,4403,4404,5,116, + 0,0,4404,4405,5,111,0,0,4405,4406,5,98,0,0,4406,4487,5,106,0,0,4407,4408, + 5,98,0,0,4408,4409,5,111,0,0,4409,4487,5,120,0,0,4410,4411,5,110,0,0,4411, + 4412,5,101,0,0,4412,4413,5,119,0,0,4413,4414,5,97,0,0,4414,4415,5,114, + 0,0,4415,4487,5,114,0,0,4416,4417,5,108,0,0,4417,4418,5,100,0,0,4418,4419, + 5,101,0,0,4419,4420,5,108,0,0,4420,4421,5,101,0,0,4421,4422,5,109,0,0, + 4422,4487,5,97,0,0,4423,4424,5,108,0,0,4424,4425,5,100,0,0,4425,4426,5, + 101,0,0,4426,4427,5,108,0,0,4427,4428,5,101,0,0,4428,4487,5,109,0,0,4429, + 4430,5,115,0,0,4430,4431,5,116,0,0,4431,4432,5,101,0,0,4432,4433,5,108, + 0,0,4433,4434,5,101,0,0,4434,4487,5,109,0,0,4435,4436,5,117,0,0,4436,4437, + 5,110,0,0,4437,4438,5,98,0,0,4438,4439,5,111,0,0,4439,4440,5,120,0,0,4440, + 4441,5,46,0,0,4441,4442,5,97,0,0,4442,4443,5,110,0,0,4443,4487,5,121,0, + 0,4444,4445,5,114,0,0,4445,4446,5,101,0,0,4446,4447,5,102,0,0,4447,4448, + 5,97,0,0,4448,4449,5,110,0,0,4449,4450,5,121,0,0,4450,4451,5,118,0,0,4451, + 4452,5,97,0,0,4452,4487,5,108,0,0,4453,4454,5,109,0,0,4454,4455,5,107, + 0,0,4455,4456,5,114,0,0,4456,4457,5,101,0,0,4457,4458,5,102,0,0,4458,4459, + 5,97,0,0,4459,4460,5,110,0,0,4460,4487,5,121,0,0,4461,4462,5,105,0,0,4462, + 4463,5,110,0,0,4463,4464,5,105,0,0,4464,4465,5,116,0,0,4465,4466,5,111, + 0,0,4466,4467,5,98,0,0,4467,4487,5,106,0,0,4468,4469,5,99,0,0,4469,4470, + 5,111,0,0,4470,4471,5,110,0,0,4471,4472,5,115,0,0,4472,4473,5,116,0,0, + 4473,4474,5,114,0,0,4474,4475,5,97,0,0,4475,4476,5,105,0,0,4476,4477,5, + 110,0,0,4477,4478,5,101,0,0,4478,4479,5,100,0,0,4479,4487,5,46,0,0,4480, + 4481,5,115,0,0,4481,4482,5,105,0,0,4482,4483,5,122,0,0,4483,4484,5,101, + 0,0,4484,4485,5,111,0,0,4485,4487,5,102,0,0,4486,4372,1,0,0,0,4486,4377, + 1,0,0,0,4486,4382,1,0,0,0,4486,4391,1,0,0,0,4486,4397,1,0,0,0,4486,4402, + 1,0,0,0,4486,4407,1,0,0,0,4486,4410,1,0,0,0,4486,4416,1,0,0,0,4486,4423, + 1,0,0,0,4486,4429,1,0,0,0,4486,4435,1,0,0,0,4486,4444,1,0,0,0,4486,4453, + 1,0,0,0,4486,4461,1,0,0,0,4486,4468,1,0,0,0,4486,4480,1,0,0,0,4487,570, + 1,0,0,0,4488,4489,5,108,0,0,4489,4490,5,100,0,0,4490,4491,5,115,0,0,4491, + 4492,5,116,0,0,4492,4493,5,114,0,0,4493,572,1,0,0,0,4494,4495,5,108,0, + 0,4495,4496,5,100,0,0,4496,4497,5,102,0,0,4497,4498,5,108,0,0,4498,4530, + 5,100,0,0,4499,4500,5,108,0,0,4500,4501,5,100,0,0,4501,4502,5,102,0,0, + 4502,4503,5,108,0,0,4503,4504,5,100,0,0,4504,4530,5,97,0,0,4505,4506,5, + 115,0,0,4506,4507,5,116,0,0,4507,4508,5,102,0,0,4508,4509,5,108,0,0,4509, + 4530,5,100,0,0,4510,4511,5,108,0,0,4511,4512,5,100,0,0,4512,4513,5,115, + 0,0,4513,4514,5,102,0,0,4514,4515,5,108,0,0,4515,4530,5,100,0,0,4516,4517, + 5,108,0,0,4517,4518,5,100,0,0,4518,4519,5,115,0,0,4519,4520,5,102,0,0, + 4520,4521,5,108,0,0,4521,4522,5,100,0,0,4522,4530,5,97,0,0,4523,4524,5, + 115,0,0,4524,4525,5,116,0,0,4525,4526,5,115,0,0,4526,4527,5,102,0,0,4527, + 4528,5,108,0,0,4528,4530,5,100,0,0,4529,4494,1,0,0,0,4529,4499,1,0,0,0, + 4529,4505,1,0,0,0,4529,4510,1,0,0,0,4529,4516,1,0,0,0,4529,4523,1,0,0, + 0,4530,574,1,0,0,0,4531,4532,5,108,0,0,4532,4533,5,100,0,0,4533,4534,5, + 116,0,0,4534,4535,5,111,0,0,4535,4536,5,107,0,0,4536,4537,5,101,0,0,4537, + 4538,5,110,0,0,4538,576,1,0,0,0,4539,4540,7,8,0,0,4540,578,1,0,0,0,4541, + 4542,7,9,0,0,4542,580,1,0,0,0,4543,4544,3,583,291,0,4544,4545,3,531,265, + 0,4545,4547,1,0,0,0,4546,4543,1,0,0,0,4547,4548,1,0,0,0,4548,4546,1,0, + 0,0,4548,4549,1,0,0,0,4549,4550,1,0,0,0,4550,4551,3,583,291,0,4551,582, + 1,0,0,0,4552,4556,3,577,288,0,4553,4555,3,579,289,0,4554,4553,1,0,0,0, + 4555,4558,1,0,0,0,4556,4554,1,0,0,0,4556,4557,1,0,0,0,4557,584,1,0,0,0, + 4558,4556,1,0,0,0,4559,4560,7,0,0,0,4560,4561,7,0,0,0,4561,586,1,0,0,0, + 4562,4563,7,10,0,0,4563,4564,1,0,0,0,4564,4565,6,293,0,0,4565,588,1,0, + 0,0,4566,4567,5,47,0,0,4567,4568,5,47,0,0,4568,4572,1,0,0,0,4569,4571, + 8,11,0,0,4570,4569,1,0,0,0,4571,4574,1,0,0,0,4572,4570,1,0,0,0,4572,4573, + 1,0,0,0,4573,4575,1,0,0,0,4574,4572,1,0,0,0,4575,4576,6,294,0,0,4576,590, + 1,0,0,0,4577,4578,5,47,0,0,4578,4579,5,42,0,0,4579,4583,1,0,0,0,4580,4582, + 9,0,0,0,4581,4580,1,0,0,0,4582,4585,1,0,0,0,4583,4584,1,0,0,0,4583,4581, + 1,0,0,0,4584,4586,1,0,0,0,4585,4583,1,0,0,0,4586,4587,5,42,0,0,4587,4588, + 5,47,0,0,4588,4589,1,0,0,0,4589,4590,6,295,0,0,4590,592,1,0,0,0,4591,4592, + 5,46,0,0,4592,4593,5,112,0,0,4593,4594,5,101,0,0,4594,4595,5,114,0,0,4595, + 4596,5,109,0,0,4596,4597,5,105,0,0,4597,4598,5,115,0,0,4598,4599,5,115, + 0,0,4599,4600,5,105,0,0,4600,4601,5,111,0,0,4601,4602,5,110,0,0,4602,594, + 1,0,0,0,4603,4604,5,46,0,0,4604,4605,5,112,0,0,4605,4606,5,101,0,0,4606, + 4607,5,114,0,0,4607,4608,5,109,0,0,4608,4609,5,105,0,0,4609,4610,5,115, + 0,0,4610,4611,5,115,0,0,4611,4612,5,105,0,0,4612,4613,5,111,0,0,4613,4614, + 5,110,0,0,4614,4615,5,115,0,0,4615,4616,5,101,0,0,4616,4617,5,116,0,0, + 4617,596,1,0,0,0,4618,4619,5,46,0,0,4619,4620,5,101,0,0,4620,4621,5,109, + 0,0,4621,4622,5,105,0,0,4622,4623,5,116,0,0,4623,4624,5,98,0,0,4624,4625, + 5,121,0,0,4625,4626,5,116,0,0,4626,4627,5,101,0,0,4627,598,1,0,0,0,4628, + 4629,5,46,0,0,4629,4630,5,109,0,0,4630,4631,5,97,0,0,4631,4632,5,120,0, + 0,4632,4633,5,115,0,0,4633,4634,5,116,0,0,4634,4635,5,97,0,0,4635,4636, + 5,99,0,0,4636,4637,5,107,0,0,4637,600,1,0,0,0,4638,4639,5,46,0,0,4639, + 4640,5,101,0,0,4640,4641,5,110,0,0,4641,4642,5,116,0,0,4642,4643,5,114, + 0,0,4643,4644,5,121,0,0,4644,4645,5,112,0,0,4645,4646,5,111,0,0,4646,4647, + 5,105,0,0,4647,4648,5,110,0,0,4648,4649,5,116,0,0,4649,602,1,0,0,0,4650, + 4651,5,46,0,0,4651,4652,5,122,0,0,4652,4653,5,101,0,0,4653,4654,5,114, + 0,0,4654,4655,5,111,0,0,4655,4656,5,105,0,0,4656,4657,5,110,0,0,4657,4658, + 5,105,0,0,4658,4659,5,116,0,0,4659,604,1,0,0,0,4660,4661,5,46,0,0,4661, + 4662,5,108,0,0,4662,4663,5,111,0,0,4663,4664,5,99,0,0,4664,4665,5,97,0, + 0,4665,4666,5,108,0,0,4666,4667,5,115,0,0,4667,606,1,0,0,0,4668,4669,5, + 46,0,0,4669,4670,5,101,0,0,4670,4671,5,120,0,0,4671,4672,5,112,0,0,4672, + 4673,5,111,0,0,4673,4674,5,114,0,0,4674,4675,5,116,0,0,4675,608,1,0,0, + 0,4676,4677,5,46,0,0,4677,4678,5,111,0,0,4678,4679,5,118,0,0,4679,4680, + 5,101,0,0,4680,4681,5,114,0,0,4681,4682,5,114,0,0,4682,4683,5,105,0,0, + 4683,4684,5,100,0,0,4684,4685,5,101,0,0,4685,610,1,0,0,0,4686,4687,5,46, + 0,0,4687,4688,5,118,0,0,4688,4689,5,116,0,0,4689,4690,5,101,0,0,4690,4691, + 5,110,0,0,4691,4692,5,116,0,0,4692,4693,5,114,0,0,4693,4694,5,121,0,0, + 4694,612,1,0,0,0,45,0,2024,2032,2037,2039,2042,2050,2055,2057,2060,2065, + 2071,2075,2080,2082,2086,2091,2093,2099,2103,2108,2110,2112,2149,2701, + 2752,2755,2758,2761,2766,2768,2776,2778,4032,4110,4139,4160,4197,4363, + 4486,4529,4548,4556,4572,4583,1,6,0,0 }; public static readonly ATN _ATN = diff --git a/src/tools/ilasm/src/ILAssembler/gen/CILLexer.interp b/src/tools/ilasm/src/ILAssembler/gen/CILLexer.interp index 6f08bf3b9e8055..67afb01bceadcd 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CILLexer.interp +++ b/src/tools/ilasm/src/ILAssembler/gen/CILLexer.interp @@ -83,15 +83,16 @@ null 'arm' 'arm64' 'bytearray' +'()' '<' '>' -'()' '/' 'algorithm' 'iidparam' 'pinned' 'modreq' 'modopt' +'unsigned' 'true' 'false' 'request' @@ -125,6 +126,7 @@ null 'privatescope' 'literal' 'notserialized' +'volatile' '.event' '.addon' '.removeon' @@ -153,6 +155,7 @@ null 'off' 'charmaperror' '.cctor' +'il' 'init' '.try' 'to' @@ -171,13 +174,12 @@ null null null null -null '::' -'..' +'...' 'null' 'nullref' '.hash' -'char' +null 'string' 'bool' 'int8' @@ -186,12 +188,12 @@ null 'int64' 'float32' 'float64' -null -null -null -null +'uint8' +'uint16' +'uint32' +'uint64' 'int' -null +'uint' 'type' 'object' '.module' @@ -219,11 +221,8 @@ null 'struct' 'interface' 'safearray' -null -null 'byvalstr' 'ansi' -null 'tbstr' 'method' 'any' @@ -253,8 +252,6 @@ null 'fastcall' '!' null -'typedref' -null null '.param' 'constraint' @@ -294,6 +291,7 @@ null null null null +null '.permission' '.permissionset' '.emitbyte' @@ -475,10 +473,12 @@ null null null null +null +null +null INT32 INT64 FLOAT64 -HEXBYTE DCOLON ELLIPSIS NULL @@ -526,11 +526,8 @@ IDISPATCH STRUCT INTERFACE SAFEARRAY -NESTEDSTRUCT -VARIANTBOOL BYVALSTR ANSI -ANSIBSTR TBSTR METHOD ANY @@ -561,8 +558,6 @@ FASTCALL TYPE_PARAMETER METHOD_TYPE_PARAMETER TYPEDREF -NATIVE_INT -NATIVE_UINT PARAM CONSTRAINT THIS @@ -598,6 +593,7 @@ INSTR_FIELD INSTR_TOK DOTTEDNAME ID +HEXBYTE WS SINGLE_LINE_COMMENT COMMENT @@ -781,10 +777,12 @@ T__164 T__165 T__166 T__167 +T__168 +T__169 +T__170 INT32 INT64 FLOAT64 -HEXBYTE DCOLON ELLIPSIS NULL @@ -833,11 +831,8 @@ IDISPATCH STRUCT INTERFACE SAFEARRAY -NESTEDSTRUCT -VARIANTBOOL BYVALSTR ANSI -ANSIBSTR TBSTR METHOD ANY @@ -868,8 +863,6 @@ FASTCALL TYPE_PARAMETER METHOD_TYPE_PARAMETER TYPEDREF -NATIVE_INT -NATIVE_UINT PARAM CONSTRAINT THIS @@ -878,6 +871,7 @@ NESTER REF ARRAY_TYPE_NO_BOUNDS PTR +ESC_SEQ QSTRING SQSTRING DOT @@ -907,6 +901,7 @@ IDSTART IDCONT DOTTEDNAME ID +HEXBYTE WS SINGLE_LINE_COMMENT COMMENT @@ -929,4 +924,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 304, 4665, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 3, 168, 2006, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 4, 168, 2012, 8, 168, 11, 168, 12, 168, 2013, 1, 168, 4, 168, 2017, 8, 168, 11, 168, 12, 168, 2018, 3, 168, 2021, 8, 168, 1, 169, 3, 169, 2024, 8, 169, 1, 169, 1, 169, 1, 169, 1, 169, 4, 169, 2030, 8, 169, 11, 169, 12, 169, 2031, 1, 169, 4, 169, 2035, 8, 169, 11, 169, 12, 169, 2036, 3, 169, 2039, 8, 169, 1, 170, 3, 170, 2042, 8, 170, 1, 170, 4, 170, 2045, 8, 170, 11, 170, 12, 170, 2046, 1, 170, 1, 170, 4, 170, 2051, 8, 170, 11, 170, 12, 170, 2052, 1, 170, 1, 170, 3, 170, 2057, 8, 170, 1, 170, 4, 170, 2060, 8, 170, 11, 170, 12, 170, 2061, 3, 170, 2064, 8, 170, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 3, 187, 2167, 8, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 3, 188, 2178, 8, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 2189, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 3, 190, 2200, 8, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 2215, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 3, 256, 2722, 8, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 5, 265, 2773, 8, 265, 10, 265, 12, 265, 2776, 9, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 5, 266, 2784, 8, 266, 10, 266, 12, 266, 2787, 9, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 3, 277, 4006, 8, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 3, 278, 4084, 8, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 3, 279, 4113, 8, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 3, 281, 4134, 8, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 3, 282, 4171, 8, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 3, 284, 4337, 8, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 3, 286, 4460, 8, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 3, 288, 4503, 8, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 4, 292, 4520, 8, 292, 11, 292, 12, 292, 4521, 1, 292, 1, 292, 1, 293, 1, 293, 5, 293, 4528, 8, 293, 10, 293, 12, 293, 4531, 9, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 5, 295, 4541, 8, 295, 10, 295, 12, 295, 4544, 9, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 5, 296, 4552, 8, 296, 10, 296, 12, 296, 4555, 9, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 4553, 0, 307, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 0, 375, 187, 377, 188, 379, 189, 381, 190, 383, 191, 385, 192, 387, 193, 389, 194, 391, 195, 393, 196, 395, 197, 397, 198, 399, 199, 401, 200, 403, 201, 405, 202, 407, 203, 409, 204, 411, 205, 413, 206, 415, 207, 417, 208, 419, 209, 421, 210, 423, 211, 425, 212, 427, 213, 429, 214, 431, 215, 433, 216, 435, 217, 437, 218, 439, 219, 441, 220, 443, 221, 445, 222, 447, 223, 449, 224, 451, 225, 453, 226, 455, 227, 457, 228, 459, 229, 461, 230, 463, 231, 465, 232, 467, 233, 469, 234, 471, 235, 473, 236, 475, 237, 477, 238, 479, 239, 481, 240, 483, 241, 485, 242, 487, 243, 489, 244, 491, 245, 493, 246, 495, 247, 497, 248, 499, 249, 501, 250, 503, 251, 505, 252, 507, 253, 509, 254, 511, 255, 513, 256, 515, 257, 517, 258, 519, 259, 521, 260, 523, 261, 525, 262, 527, 263, 529, 264, 531, 265, 533, 266, 535, 267, 537, 268, 539, 269, 541, 270, 543, 271, 545, 272, 547, 273, 549, 274, 551, 275, 553, 276, 555, 277, 557, 278, 559, 279, 561, 280, 563, 281, 565, 282, 567, 283, 569, 284, 571, 285, 573, 286, 575, 287, 577, 288, 579, 289, 581, 0, 583, 0, 585, 290, 587, 291, 589, 292, 591, 293, 593, 294, 595, 295, 597, 296, 599, 297, 601, 298, 603, 299, 605, 300, 607, 301, 609, 302, 611, 303, 613, 304, 1, 0, 9, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 57, 2, 0, 69, 69, 101, 101, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 4, 0, 35, 36, 64, 90, 95, 95, 97, 122, 4, 0, 35, 36, 48, 57, 63, 90, 95, 122, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 4905, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 1, 615, 1, 0, 0, 0, 3, 622, 1, 0, 0, 0, 5, 626, 1, 0, 0, 0, 7, 632, 1, 0, 0, 0, 9, 640, 1, 0, 0, 0, 11, 651, 1, 0, 0, 0, 13, 663, 1, 0, 0, 0, 15, 671, 1, 0, 0, 0, 17, 684, 1, 0, 0, 0, 19, 697, 1, 0, 0, 0, 21, 708, 1, 0, 0, 0, 23, 727, 1, 0, 0, 0, 25, 742, 1, 0, 0, 0, 27, 765, 1, 0, 0, 0, 29, 771, 1, 0, 0, 0, 31, 780, 1, 0, 0, 0, 33, 782, 1, 0, 0, 0, 35, 784, 1, 0, 0, 0, 37, 795, 1, 0, 0, 0, 39, 805, 1, 0, 0, 0, 41, 811, 1, 0, 0, 0, 43, 821, 1, 0, 0, 0, 45, 832, 1, 0, 0, 0, 47, 846, 1, 0, 0, 0, 49, 856, 1, 0, 0, 0, 51, 866, 1, 0, 0, 0, 53, 876, 1, 0, 0, 0, 55, 878, 1, 0, 0, 0, 57, 888, 1, 0, 0, 0, 59, 890, 1, 0, 0, 0, 61, 892, 1, 0, 0, 0, 63, 894, 1, 0, 0, 0, 65, 903, 1, 0, 0, 0, 67, 906, 1, 0, 0, 0, 69, 914, 1, 0, 0, 0, 71, 916, 1, 0, 0, 0, 73, 922, 1, 0, 0, 0, 75, 931, 1, 0, 0, 0, 77, 937, 1, 0, 0, 0, 79, 944, 1, 0, 0, 0, 81, 953, 1, 0, 0, 0, 83, 955, 1, 0, 0, 0, 85, 957, 1, 0, 0, 0, 87, 960, 1, 0, 0, 0, 89, 974, 1, 0, 0, 0, 91, 990, 1, 0, 0, 0, 93, 1006, 1, 0, 0, 0, 95, 1014, 1, 0, 0, 0, 97, 1025, 1, 0, 0, 0, 99, 1032, 1, 0, 0, 0, 101, 1039, 1, 0, 0, 0, 103, 1047, 1, 0, 0, 0, 105, 1054, 1, 0, 0, 0, 107, 1063, 1, 0, 0, 0, 109, 1068, 1, 0, 0, 0, 111, 1079, 1, 0, 0, 0, 113, 1087, 1, 0, 0, 0, 115, 1096, 1, 0, 0, 0, 117, 1103, 1, 0, 0, 0, 119, 1116, 1, 0, 0, 0, 121, 1131, 1, 0, 0, 0, 123, 1138, 1, 0, 0, 0, 125, 1145, 1, 0, 0, 0, 127, 1154, 1, 0, 0, 0, 129, 1166, 1, 0, 0, 0, 131, 1177, 1, 0, 0, 0, 133, 1193, 1, 0, 0, 0, 135, 1205, 1, 0, 0, 0, 137, 1219, 1, 0, 0, 0, 139, 1225, 1, 0, 0, 0, 141, 1233, 1, 0, 0, 0, 143, 1244, 1, 0, 0, 0, 145, 1250, 1, 0, 0, 0, 147, 1256, 1, 0, 0, 0, 149, 1258, 1, 0, 0, 0, 151, 1269, 1, 0, 0, 0, 153, 1282, 1, 0, 0, 0, 155, 1293, 1, 0, 0, 0, 157, 1308, 1, 0, 0, 0, 159, 1312, 1, 0, 0, 0, 161, 1318, 1, 0, 0, 0, 163, 1322, 1, 0, 0, 0, 165, 1328, 1, 0, 0, 0, 167, 1338, 1, 0, 0, 0, 169, 1340, 1, 0, 0, 0, 171, 1342, 1, 0, 0, 0, 173, 1345, 1, 0, 0, 0, 175, 1347, 1, 0, 0, 0, 177, 1357, 1, 0, 0, 0, 179, 1366, 1, 0, 0, 0, 181, 1373, 1, 0, 0, 0, 183, 1380, 1, 0, 0, 0, 185, 1387, 1, 0, 0, 0, 187, 1392, 1, 0, 0, 0, 189, 1398, 1, 0, 0, 0, 191, 1406, 1, 0, 0, 0, 193, 1413, 1, 0, 0, 0, 195, 1420, 1, 0, 0, 0, 197, 1425, 1, 0, 0, 0, 199, 1436, 1, 0, 0, 0, 201, 1446, 1, 0, 0, 0, 203, 1459, 1, 0, 0, 0, 205, 1466, 1, 0, 0, 0, 207, 1473, 1, 0, 0, 0, 209, 1483, 1, 0, 0, 0, 211, 1495, 1, 0, 0, 0, 213, 1506, 1, 0, 0, 0, 215, 1519, 1, 0, 0, 0, 217, 1536, 1, 0, 0, 0, 219, 1554, 1, 0, 0, 0, 221, 1563, 1, 0, 0, 0, 223, 1571, 1, 0, 0, 0, 225, 1573, 1, 0, 0, 0, 227, 1583, 1, 0, 0, 0, 229, 1589, 1, 0, 0, 0, 231, 1595, 1, 0, 0, 0, 233, 1601, 1, 0, 0, 0, 235, 1606, 1, 0, 0, 0, 237, 1621, 1, 0, 0, 0, 239, 1628, 1, 0, 0, 0, 241, 1636, 1, 0, 0, 0, 243, 1643, 1, 0, 0, 0, 245, 1652, 1, 0, 0, 0, 247, 1665, 1, 0, 0, 0, 249, 1673, 1, 0, 0, 0, 251, 1687, 1, 0, 0, 0, 253, 1694, 1, 0, 0, 0, 255, 1701, 1, 0, 0, 0, 257, 1711, 1, 0, 0, 0, 259, 1717, 1, 0, 0, 0, 261, 1724, 1, 0, 0, 0, 263, 1734, 1, 0, 0, 0, 265, 1739, 1, 0, 0, 0, 267, 1744, 1, 0, 0, 0, 269, 1747, 1, 0, 0, 0, 271, 1751, 1, 0, 0, 0, 273, 1755, 1, 0, 0, 0, 275, 1763, 1, 0, 0, 0, 277, 1769, 1, 0, 0, 0, 279, 1777, 1, 0, 0, 0, 281, 1784, 1, 0, 0, 0, 283, 1794, 1, 0, 0, 0, 285, 1802, 1, 0, 0, 0, 287, 1815, 1, 0, 0, 0, 289, 1825, 1, 0, 0, 0, 291, 1837, 1, 0, 0, 0, 293, 1846, 1, 0, 0, 0, 295, 1854, 1, 0, 0, 0, 297, 1861, 1, 0, 0, 0, 299, 1869, 1, 0, 0, 0, 301, 1872, 1, 0, 0, 0, 303, 1876, 1, 0, 0, 0, 305, 1889, 1, 0, 0, 0, 307, 1896, 1, 0, 0, 0, 309, 1901, 1, 0, 0, 0, 311, 1906, 1, 0, 0, 0, 313, 1909, 1, 0, 0, 0, 315, 1916, 1, 0, 0, 0, 317, 1922, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1936, 1, 0, 0, 0, 323, 1944, 1, 0, 0, 0, 325, 1950, 1, 0, 0, 0, 327, 1954, 1, 0, 0, 0, 329, 1965, 1, 0, 0, 0, 331, 1970, 1, 0, 0, 0, 333, 1978, 1, 0, 0, 0, 335, 1994, 1, 0, 0, 0, 337, 2005, 1, 0, 0, 0, 339, 2023, 1, 0, 0, 0, 341, 2041, 1, 0, 0, 0, 343, 2065, 1, 0, 0, 0, 345, 2068, 1, 0, 0, 0, 347, 2071, 1, 0, 0, 0, 349, 2074, 1, 0, 0, 0, 351, 2079, 1, 0, 0, 0, 353, 2087, 1, 0, 0, 0, 355, 2093, 1, 0, 0, 0, 357, 2098, 1, 0, 0, 0, 359, 2105, 1, 0, 0, 0, 361, 2110, 1, 0, 0, 0, 363, 2115, 1, 0, 0, 0, 365, 2121, 1, 0, 0, 0, 367, 2127, 1, 0, 0, 0, 369, 2133, 1, 0, 0, 0, 371, 2141, 1, 0, 0, 0, 373, 2149, 1, 0, 0, 0, 375, 2166, 1, 0, 0, 0, 377, 2177, 1, 0, 0, 0, 379, 2188, 1, 0, 0, 0, 381, 2199, 1, 0, 0, 0, 383, 2201, 1, 0, 0, 0, 385, 2214, 1, 0, 0, 0, 387, 2216, 1, 0, 0, 0, 389, 2221, 1, 0, 0, 0, 391, 2228, 1, 0, 0, 0, 393, 2236, 1, 0, 0, 0, 395, 2242, 1, 0, 0, 0, 397, 2252, 1, 0, 0, 0, 399, 2257, 1, 0, 0, 0, 401, 2262, 1, 0, 0, 0, 403, 2269, 1, 0, 0, 0, 405, 2275, 1, 0, 0, 0, 407, 2284, 1, 0, 0, 0, 409, 2290, 1, 0, 0, 0, 411, 2298, 1, 0, 0, 0, 413, 2307, 1, 0, 0, 0, 415, 2315, 1, 0, 0, 0, 417, 2321, 1, 0, 0, 0, 419, 2329, 1, 0, 0, 0, 421, 2334, 1, 0, 0, 0, 423, 2339, 1, 0, 0, 0, 425, 2345, 1, 0, 0, 0, 427, 2352, 1, 0, 0, 0, 429, 2359, 1, 0, 0, 0, 431, 2369, 1, 0, 0, 0, 433, 2378, 1, 0, 0, 0, 435, 2388, 1, 0, 0, 0, 437, 2395, 1, 0, 0, 0, 439, 2405, 1, 0, 0, 0, 441, 2415, 1, 0, 0, 0, 443, 2424, 1, 0, 0, 0, 445, 2427, 1, 0, 0, 0, 447, 2436, 1, 0, 0, 0, 449, 2441, 1, 0, 0, 0, 451, 2444, 1, 0, 0, 0, 453, 2450, 1, 0, 0, 0, 455, 2457, 1, 0, 0, 0, 457, 2461, 1, 0, 0, 0, 459, 2470, 1, 0, 0, 0, 461, 2477, 1, 0, 0, 0, 463, 2485, 1, 0, 0, 0, 465, 2492, 1, 0, 0, 0, 467, 2504, 1, 0, 0, 0, 469, 2511, 1, 0, 0, 0, 471, 2520, 1, 0, 0, 0, 473, 2525, 1, 0, 0, 0, 475, 2532, 1, 0, 0, 0, 477, 2540, 1, 0, 0, 0, 479, 2556, 1, 0, 0, 0, 481, 2570, 1, 0, 0, 0, 483, 2582, 1, 0, 0, 0, 485, 2585, 1, 0, 0, 0, 487, 2591, 1, 0, 0, 0, 489, 2600, 1, 0, 0, 0, 491, 2609, 1, 0, 0, 0, 493, 2617, 1, 0, 0, 0, 495, 2624, 1, 0, 0, 0, 497, 2634, 1, 0, 0, 0, 499, 2640, 1, 0, 0, 0, 501, 2648, 1, 0, 0, 0, 503, 2657, 1, 0, 0, 0, 505, 2666, 1, 0, 0, 0, 507, 2668, 1, 0, 0, 0, 509, 2671, 1, 0, 0, 0, 511, 2680, 1, 0, 0, 0, 513, 2721, 1, 0, 0, 0, 515, 2723, 1, 0, 0, 0, 517, 2730, 1, 0, 0, 0, 519, 2741, 1, 0, 0, 0, 521, 2747, 1, 0, 0, 0, 523, 2753, 1, 0, 0, 0, 525, 2761, 1, 0, 0, 0, 527, 2763, 1, 0, 0, 0, 529, 2766, 1, 0, 0, 0, 531, 2768, 1, 0, 0, 0, 533, 2779, 1, 0, 0, 0, 535, 2790, 1, 0, 0, 0, 537, 2792, 1, 0, 0, 0, 539, 2794, 1, 0, 0, 0, 541, 2802, 1, 0, 0, 0, 543, 2809, 1, 0, 0, 0, 545, 2816, 1, 0, 0, 0, 547, 2824, 1, 0, 0, 0, 549, 2830, 1, 0, 0, 0, 551, 2837, 1, 0, 0, 0, 553, 2846, 1, 0, 0, 0, 555, 4005, 1, 0, 0, 0, 557, 4083, 1, 0, 0, 0, 559, 4112, 1, 0, 0, 0, 561, 4114, 1, 0, 0, 0, 563, 4133, 1, 0, 0, 0, 565, 4170, 1, 0, 0, 0, 567, 4172, 1, 0, 0, 0, 569, 4336, 1, 0, 0, 0, 571, 4338, 1, 0, 0, 0, 573, 4459, 1, 0, 0, 0, 575, 4461, 1, 0, 0, 0, 577, 4502, 1, 0, 0, 0, 579, 4504, 1, 0, 0, 0, 581, 4512, 1, 0, 0, 0, 583, 4514, 1, 0, 0, 0, 585, 4519, 1, 0, 0, 0, 587, 4525, 1, 0, 0, 0, 589, 4532, 1, 0, 0, 0, 591, 4536, 1, 0, 0, 0, 593, 4547, 1, 0, 0, 0, 595, 4561, 1, 0, 0, 0, 597, 4573, 1, 0, 0, 0, 599, 4588, 1, 0, 0, 0, 601, 4598, 1, 0, 0, 0, 603, 4608, 1, 0, 0, 0, 605, 4620, 1, 0, 0, 0, 607, 4630, 1, 0, 0, 0, 609, 4638, 1, 0, 0, 0, 611, 4646, 1, 0, 0, 0, 613, 4656, 1, 0, 0, 0, 615, 616, 5, 110, 0, 0, 616, 617, 5, 97, 0, 0, 617, 618, 5, 116, 0, 0, 618, 619, 5, 105, 0, 0, 619, 620, 5, 118, 0, 0, 620, 621, 5, 101, 0, 0, 621, 2, 1, 0, 0, 0, 622, 623, 5, 99, 0, 0, 623, 624, 5, 105, 0, 0, 624, 625, 5, 108, 0, 0, 625, 4, 1, 0, 0, 0, 626, 627, 5, 111, 0, 0, 627, 628, 5, 112, 0, 0, 628, 629, 5, 116, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 108, 0, 0, 631, 6, 1, 0, 0, 0, 632, 633, 5, 109, 0, 0, 633, 634, 5, 97, 0, 0, 634, 635, 5, 110, 0, 0, 635, 636, 5, 97, 0, 0, 636, 637, 5, 103, 0, 0, 637, 638, 5, 101, 0, 0, 638, 639, 5, 100, 0, 0, 639, 8, 1, 0, 0, 0, 640, 641, 5, 102, 0, 0, 641, 642, 5, 111, 0, 0, 642, 643, 5, 114, 0, 0, 643, 644, 5, 119, 0, 0, 644, 645, 5, 97, 0, 0, 645, 646, 5, 114, 0, 0, 646, 647, 5, 100, 0, 0, 647, 648, 5, 114, 0, 0, 648, 649, 5, 101, 0, 0, 649, 650, 5, 102, 0, 0, 650, 10, 1, 0, 0, 0, 651, 652, 5, 112, 0, 0, 652, 653, 5, 114, 0, 0, 653, 654, 5, 101, 0, 0, 654, 655, 5, 115, 0, 0, 655, 656, 5, 101, 0, 0, 656, 657, 5, 114, 0, 0, 657, 658, 5, 118, 0, 0, 658, 659, 5, 101, 0, 0, 659, 660, 5, 115, 0, 0, 660, 661, 5, 105, 0, 0, 661, 662, 5, 103, 0, 0, 662, 12, 1, 0, 0, 0, 663, 664, 5, 114, 0, 0, 664, 665, 5, 117, 0, 0, 665, 666, 5, 110, 0, 0, 666, 667, 5, 116, 0, 0, 667, 668, 5, 105, 0, 0, 668, 669, 5, 109, 0, 0, 669, 670, 5, 101, 0, 0, 670, 14, 1, 0, 0, 0, 671, 672, 5, 105, 0, 0, 672, 673, 5, 110, 0, 0, 673, 674, 5, 116, 0, 0, 674, 675, 5, 101, 0, 0, 675, 676, 5, 114, 0, 0, 676, 677, 5, 110, 0, 0, 677, 678, 5, 97, 0, 0, 678, 679, 5, 108, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 108, 0, 0, 682, 683, 5, 108, 0, 0, 683, 16, 1, 0, 0, 0, 684, 685, 5, 115, 0, 0, 685, 686, 5, 121, 0, 0, 686, 687, 5, 110, 0, 0, 687, 688, 5, 99, 0, 0, 688, 689, 5, 104, 0, 0, 689, 690, 5, 114, 0, 0, 690, 691, 5, 111, 0, 0, 691, 692, 5, 110, 0, 0, 692, 693, 5, 105, 0, 0, 693, 694, 5, 122, 0, 0, 694, 695, 5, 101, 0, 0, 695, 696, 5, 100, 0, 0, 696, 18, 1, 0, 0, 0, 697, 698, 5, 110, 0, 0, 698, 699, 5, 111, 0, 0, 699, 700, 5, 105, 0, 0, 700, 701, 5, 110, 0, 0, 701, 702, 5, 108, 0, 0, 702, 703, 5, 105, 0, 0, 703, 704, 5, 110, 0, 0, 704, 705, 5, 105, 0, 0, 705, 706, 5, 110, 0, 0, 706, 707, 5, 103, 0, 0, 707, 20, 1, 0, 0, 0, 708, 709, 5, 97, 0, 0, 709, 710, 5, 103, 0, 0, 710, 711, 5, 103, 0, 0, 711, 712, 5, 114, 0, 0, 712, 713, 5, 101, 0, 0, 713, 714, 5, 115, 0, 0, 714, 715, 5, 115, 0, 0, 715, 716, 5, 105, 0, 0, 716, 717, 5, 118, 0, 0, 717, 718, 5, 101, 0, 0, 718, 719, 5, 105, 0, 0, 719, 720, 5, 110, 0, 0, 720, 721, 5, 108, 0, 0, 721, 722, 5, 105, 0, 0, 722, 723, 5, 110, 0, 0, 723, 724, 5, 105, 0, 0, 724, 725, 5, 110, 0, 0, 725, 726, 5, 103, 0, 0, 726, 22, 1, 0, 0, 0, 727, 728, 5, 110, 0, 0, 728, 729, 5, 111, 0, 0, 729, 730, 5, 111, 0, 0, 730, 731, 5, 112, 0, 0, 731, 732, 5, 116, 0, 0, 732, 733, 5, 105, 0, 0, 733, 734, 5, 109, 0, 0, 734, 735, 5, 105, 0, 0, 735, 736, 5, 122, 0, 0, 736, 737, 5, 97, 0, 0, 737, 738, 5, 116, 0, 0, 738, 739, 5, 105, 0, 0, 739, 740, 5, 111, 0, 0, 740, 741, 5, 110, 0, 0, 741, 24, 1, 0, 0, 0, 742, 743, 5, 97, 0, 0, 743, 744, 5, 103, 0, 0, 744, 745, 5, 103, 0, 0, 745, 746, 5, 114, 0, 0, 746, 747, 5, 101, 0, 0, 747, 748, 5, 115, 0, 0, 748, 749, 5, 115, 0, 0, 749, 750, 5, 105, 0, 0, 750, 751, 5, 118, 0, 0, 751, 752, 5, 101, 0, 0, 752, 753, 5, 111, 0, 0, 753, 754, 5, 112, 0, 0, 754, 755, 5, 116, 0, 0, 755, 756, 5, 105, 0, 0, 756, 757, 5, 109, 0, 0, 757, 758, 5, 105, 0, 0, 758, 759, 5, 122, 0, 0, 759, 760, 5, 97, 0, 0, 760, 761, 5, 116, 0, 0, 761, 762, 5, 105, 0, 0, 762, 763, 5, 111, 0, 0, 763, 764, 5, 110, 0, 0, 764, 26, 1, 0, 0, 0, 765, 766, 5, 97, 0, 0, 766, 767, 5, 115, 0, 0, 767, 768, 5, 121, 0, 0, 768, 769, 5, 110, 0, 0, 769, 770, 5, 99, 0, 0, 770, 28, 1, 0, 0, 0, 771, 772, 5, 101, 0, 0, 772, 773, 5, 120, 0, 0, 773, 774, 5, 116, 0, 0, 774, 775, 5, 101, 0, 0, 775, 776, 5, 110, 0, 0, 776, 777, 5, 100, 0, 0, 777, 778, 5, 101, 0, 0, 778, 779, 5, 100, 0, 0, 779, 30, 1, 0, 0, 0, 780, 781, 5, 123, 0, 0, 781, 32, 1, 0, 0, 0, 782, 783, 5, 125, 0, 0, 783, 34, 1, 0, 0, 0, 784, 785, 5, 46, 0, 0, 785, 786, 5, 115, 0, 0, 786, 787, 5, 117, 0, 0, 787, 788, 5, 98, 0, 0, 788, 789, 5, 115, 0, 0, 789, 790, 5, 121, 0, 0, 790, 791, 5, 115, 0, 0, 791, 792, 5, 116, 0, 0, 792, 793, 5, 101, 0, 0, 793, 794, 5, 109, 0, 0, 794, 36, 1, 0, 0, 0, 795, 796, 5, 46, 0, 0, 796, 797, 5, 99, 0, 0, 797, 798, 5, 111, 0, 0, 798, 799, 5, 114, 0, 0, 799, 800, 5, 102, 0, 0, 800, 801, 5, 108, 0, 0, 801, 802, 5, 97, 0, 0, 802, 803, 5, 103, 0, 0, 803, 804, 5, 115, 0, 0, 804, 38, 1, 0, 0, 0, 805, 806, 5, 46, 0, 0, 806, 807, 5, 102, 0, 0, 807, 808, 5, 105, 0, 0, 808, 809, 5, 108, 0, 0, 809, 810, 5, 101, 0, 0, 810, 40, 1, 0, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 108, 0, 0, 813, 814, 5, 105, 0, 0, 814, 815, 5, 103, 0, 0, 815, 816, 5, 110, 0, 0, 816, 817, 5, 109, 0, 0, 817, 818, 5, 101, 0, 0, 818, 819, 5, 110, 0, 0, 819, 820, 5, 116, 0, 0, 820, 42, 1, 0, 0, 0, 821, 822, 5, 46, 0, 0, 822, 823, 5, 105, 0, 0, 823, 824, 5, 109, 0, 0, 824, 825, 5, 97, 0, 0, 825, 826, 5, 103, 0, 0, 826, 827, 5, 101, 0, 0, 827, 828, 5, 98, 0, 0, 828, 829, 5, 97, 0, 0, 829, 830, 5, 115, 0, 0, 830, 831, 5, 101, 0, 0, 831, 44, 1, 0, 0, 0, 832, 833, 5, 46, 0, 0, 833, 834, 5, 115, 0, 0, 834, 835, 5, 116, 0, 0, 835, 836, 5, 97, 0, 0, 836, 837, 5, 99, 0, 0, 837, 838, 5, 107, 0, 0, 838, 839, 5, 114, 0, 0, 839, 840, 5, 101, 0, 0, 840, 841, 5, 115, 0, 0, 841, 842, 5, 101, 0, 0, 842, 843, 5, 114, 0, 0, 843, 844, 5, 118, 0, 0, 844, 845, 5, 101, 0, 0, 845, 46, 1, 0, 0, 0, 846, 847, 5, 46, 0, 0, 847, 848, 5, 97, 0, 0, 848, 849, 5, 115, 0, 0, 849, 850, 5, 115, 0, 0, 850, 851, 5, 101, 0, 0, 851, 852, 5, 109, 0, 0, 852, 853, 5, 98, 0, 0, 853, 854, 5, 108, 0, 0, 854, 855, 5, 121, 0, 0, 855, 48, 1, 0, 0, 0, 856, 857, 5, 46, 0, 0, 857, 858, 5, 109, 0, 0, 858, 859, 5, 115, 0, 0, 859, 860, 5, 99, 0, 0, 860, 861, 5, 111, 0, 0, 861, 862, 5, 114, 0, 0, 862, 863, 5, 108, 0, 0, 863, 864, 5, 105, 0, 0, 864, 865, 5, 98, 0, 0, 865, 50, 1, 0, 0, 0, 866, 867, 5, 46, 0, 0, 867, 868, 5, 108, 0, 0, 868, 869, 5, 97, 0, 0, 869, 870, 5, 110, 0, 0, 870, 871, 5, 103, 0, 0, 871, 872, 5, 117, 0, 0, 872, 873, 5, 97, 0, 0, 873, 874, 5, 103, 0, 0, 874, 875, 5, 101, 0, 0, 875, 52, 1, 0, 0, 0, 876, 877, 5, 44, 0, 0, 877, 54, 1, 0, 0, 0, 878, 879, 5, 46, 0, 0, 879, 880, 5, 116, 0, 0, 880, 881, 5, 121, 0, 0, 881, 882, 5, 112, 0, 0, 882, 883, 5, 101, 0, 0, 883, 884, 5, 108, 0, 0, 884, 885, 5, 105, 0, 0, 885, 886, 5, 115, 0, 0, 886, 887, 5, 116, 0, 0, 887, 56, 1, 0, 0, 0, 888, 889, 5, 40, 0, 0, 889, 58, 1, 0, 0, 0, 890, 891, 5, 41, 0, 0, 891, 60, 1, 0, 0, 0, 892, 893, 5, 59, 0, 0, 893, 62, 1, 0, 0, 0, 894, 895, 5, 46, 0, 0, 895, 896, 5, 116, 0, 0, 896, 897, 5, 121, 0, 0, 897, 898, 5, 112, 0, 0, 898, 899, 5, 101, 0, 0, 899, 900, 5, 100, 0, 0, 900, 901, 5, 101, 0, 0, 901, 902, 5, 102, 0, 0, 902, 64, 1, 0, 0, 0, 903, 904, 5, 97, 0, 0, 904, 905, 5, 115, 0, 0, 905, 66, 1, 0, 0, 0, 906, 907, 5, 46, 0, 0, 907, 908, 5, 99, 0, 0, 908, 909, 5, 117, 0, 0, 909, 910, 5, 115, 0, 0, 910, 911, 5, 116, 0, 0, 911, 912, 5, 111, 0, 0, 912, 913, 5, 109, 0, 0, 913, 68, 1, 0, 0, 0, 914, 915, 5, 61, 0, 0, 915, 70, 1, 0, 0, 0, 916, 917, 5, 102, 0, 0, 917, 918, 5, 105, 0, 0, 918, 919, 5, 101, 0, 0, 919, 920, 5, 108, 0, 0, 920, 921, 5, 100, 0, 0, 921, 72, 1, 0, 0, 0, 922, 923, 5, 112, 0, 0, 923, 924, 5, 114, 0, 0, 924, 925, 5, 111, 0, 0, 925, 926, 5, 112, 0, 0, 926, 927, 5, 101, 0, 0, 927, 928, 5, 114, 0, 0, 928, 929, 5, 116, 0, 0, 929, 930, 5, 121, 0, 0, 930, 74, 1, 0, 0, 0, 931, 932, 5, 99, 0, 0, 932, 933, 5, 108, 0, 0, 933, 934, 5, 97, 0, 0, 934, 935, 5, 115, 0, 0, 935, 936, 5, 115, 0, 0, 936, 76, 1, 0, 0, 0, 937, 938, 5, 101, 0, 0, 938, 939, 5, 120, 0, 0, 939, 940, 5, 116, 0, 0, 940, 941, 5, 101, 0, 0, 941, 942, 5, 114, 0, 0, 942, 943, 5, 110, 0, 0, 943, 78, 1, 0, 0, 0, 944, 945, 5, 46, 0, 0, 945, 946, 5, 118, 0, 0, 946, 947, 5, 116, 0, 0, 947, 948, 5, 102, 0, 0, 948, 949, 5, 105, 0, 0, 949, 950, 5, 120, 0, 0, 950, 951, 5, 117, 0, 0, 951, 952, 5, 112, 0, 0, 952, 80, 1, 0, 0, 0, 953, 954, 5, 91, 0, 0, 954, 82, 1, 0, 0, 0, 955, 956, 5, 93, 0, 0, 956, 84, 1, 0, 0, 0, 957, 958, 5, 97, 0, 0, 958, 959, 5, 116, 0, 0, 959, 86, 1, 0, 0, 0, 960, 961, 5, 102, 0, 0, 961, 962, 5, 114, 0, 0, 962, 963, 5, 111, 0, 0, 963, 964, 5, 109, 0, 0, 964, 965, 5, 117, 0, 0, 965, 966, 5, 110, 0, 0, 966, 967, 5, 109, 0, 0, 967, 968, 5, 97, 0, 0, 968, 969, 5, 110, 0, 0, 969, 970, 5, 97, 0, 0, 970, 971, 5, 103, 0, 0, 971, 972, 5, 101, 0, 0, 972, 973, 5, 100, 0, 0, 973, 88, 1, 0, 0, 0, 974, 975, 5, 99, 0, 0, 975, 976, 5, 97, 0, 0, 976, 977, 5, 108, 0, 0, 977, 978, 5, 108, 0, 0, 978, 979, 5, 109, 0, 0, 979, 980, 5, 111, 0, 0, 980, 981, 5, 115, 0, 0, 981, 982, 5, 116, 0, 0, 982, 983, 5, 100, 0, 0, 983, 984, 5, 101, 0, 0, 984, 985, 5, 114, 0, 0, 985, 986, 5, 105, 0, 0, 986, 987, 5, 118, 0, 0, 987, 988, 5, 101, 0, 0, 988, 989, 5, 100, 0, 0, 989, 90, 1, 0, 0, 0, 990, 991, 5, 114, 0, 0, 991, 992, 5, 101, 0, 0, 992, 993, 5, 116, 0, 0, 993, 994, 5, 97, 0, 0, 994, 995, 5, 105, 0, 0, 995, 996, 5, 110, 0, 0, 996, 997, 5, 97, 0, 0, 997, 998, 5, 112, 0, 0, 998, 999, 5, 112, 0, 0, 999, 1000, 5, 100, 0, 0, 1000, 1001, 5, 111, 0, 0, 1001, 1002, 5, 109, 0, 0, 1002, 1003, 5, 97, 0, 0, 1003, 1004, 5, 105, 0, 0, 1004, 1005, 5, 110, 0, 0, 1005, 92, 1, 0, 0, 0, 1006, 1007, 5, 46, 0, 0, 1007, 1008, 5, 118, 0, 0, 1008, 1009, 5, 116, 0, 0, 1009, 1010, 5, 97, 0, 0, 1010, 1011, 5, 98, 0, 0, 1011, 1012, 5, 108, 0, 0, 1012, 1013, 5, 101, 0, 0, 1013, 94, 1, 0, 0, 0, 1014, 1015, 5, 46, 0, 0, 1015, 1016, 5, 110, 0, 0, 1016, 1017, 5, 97, 0, 0, 1017, 1018, 5, 109, 0, 0, 1018, 1019, 5, 101, 0, 0, 1019, 1020, 5, 115, 0, 0, 1020, 1021, 5, 112, 0, 0, 1021, 1022, 5, 97, 0, 0, 1022, 1023, 5, 99, 0, 0, 1023, 1024, 5, 101, 0, 0, 1024, 96, 1, 0, 0, 0, 1025, 1026, 5, 46, 0, 0, 1026, 1027, 5, 99, 0, 0, 1027, 1028, 5, 108, 0, 0, 1028, 1029, 5, 97, 0, 0, 1029, 1030, 5, 115, 0, 0, 1030, 1031, 5, 115, 0, 0, 1031, 98, 1, 0, 0, 0, 1032, 1033, 5, 112, 0, 0, 1033, 1034, 5, 117, 0, 0, 1034, 1035, 5, 98, 0, 0, 1035, 1036, 5, 108, 0, 0, 1036, 1037, 5, 105, 0, 0, 1037, 1038, 5, 99, 0, 0, 1038, 100, 1, 0, 0, 0, 1039, 1040, 5, 112, 0, 0, 1040, 1041, 5, 114, 0, 0, 1041, 1042, 5, 105, 0, 0, 1042, 1043, 5, 118, 0, 0, 1043, 1044, 5, 97, 0, 0, 1044, 1045, 5, 116, 0, 0, 1045, 1046, 5, 101, 0, 0, 1046, 102, 1, 0, 0, 0, 1047, 1048, 5, 115, 0, 0, 1048, 1049, 5, 101, 0, 0, 1049, 1050, 5, 97, 0, 0, 1050, 1051, 5, 108, 0, 0, 1051, 1052, 5, 101, 0, 0, 1052, 1053, 5, 100, 0, 0, 1053, 104, 1, 0, 0, 0, 1054, 1055, 5, 97, 0, 0, 1055, 1056, 5, 98, 0, 0, 1056, 1057, 5, 115, 0, 0, 1057, 1058, 5, 116, 0, 0, 1058, 1059, 5, 114, 0, 0, 1059, 1060, 5, 97, 0, 0, 1060, 1061, 5, 99, 0, 0, 1061, 1062, 5, 116, 0, 0, 1062, 106, 1, 0, 0, 0, 1063, 1064, 5, 97, 0, 0, 1064, 1065, 5, 117, 0, 0, 1065, 1066, 5, 116, 0, 0, 1066, 1067, 5, 111, 0, 0, 1067, 108, 1, 0, 0, 0, 1068, 1069, 5, 115, 0, 0, 1069, 1070, 5, 101, 0, 0, 1070, 1071, 5, 113, 0, 0, 1071, 1072, 5, 117, 0, 0, 1072, 1073, 5, 101, 0, 0, 1073, 1074, 5, 110, 0, 0, 1074, 1075, 5, 116, 0, 0, 1075, 1076, 5, 105, 0, 0, 1076, 1077, 5, 97, 0, 0, 1077, 1078, 5, 108, 0, 0, 1078, 110, 1, 0, 0, 0, 1079, 1080, 5, 117, 0, 0, 1080, 1081, 5, 110, 0, 0, 1081, 1082, 5, 105, 0, 0, 1082, 1083, 5, 99, 0, 0, 1083, 1084, 5, 111, 0, 0, 1084, 1085, 5, 100, 0, 0, 1085, 1086, 5, 101, 0, 0, 1086, 112, 1, 0, 0, 0, 1087, 1088, 5, 97, 0, 0, 1088, 1089, 5, 117, 0, 0, 1089, 1090, 5, 116, 0, 0, 1090, 1091, 5, 111, 0, 0, 1091, 1092, 5, 99, 0, 0, 1092, 1093, 5, 104, 0, 0, 1093, 1094, 5, 97, 0, 0, 1094, 1095, 5, 114, 0, 0, 1095, 114, 1, 0, 0, 0, 1096, 1097, 5, 105, 0, 0, 1097, 1098, 5, 109, 0, 0, 1098, 1099, 5, 112, 0, 0, 1099, 1100, 5, 111, 0, 0, 1100, 1101, 5, 114, 0, 0, 1101, 1102, 5, 116, 0, 0, 1102, 116, 1, 0, 0, 0, 1103, 1104, 5, 115, 0, 0, 1104, 1105, 5, 101, 0, 0, 1105, 1106, 5, 114, 0, 0, 1106, 1107, 5, 105, 0, 0, 1107, 1108, 5, 97, 0, 0, 1108, 1109, 5, 108, 0, 0, 1109, 1110, 5, 105, 0, 0, 1110, 1111, 5, 122, 0, 0, 1111, 1112, 5, 97, 0, 0, 1112, 1113, 5, 98, 0, 0, 1113, 1114, 5, 108, 0, 0, 1114, 1115, 5, 101, 0, 0, 1115, 118, 1, 0, 0, 0, 1116, 1117, 5, 119, 0, 0, 1117, 1118, 5, 105, 0, 0, 1118, 1119, 5, 110, 0, 0, 1119, 1120, 5, 100, 0, 0, 1120, 1121, 5, 111, 0, 0, 1121, 1122, 5, 119, 0, 0, 1122, 1123, 5, 115, 0, 0, 1123, 1124, 5, 114, 0, 0, 1124, 1125, 5, 117, 0, 0, 1125, 1126, 5, 110, 0, 0, 1126, 1127, 5, 116, 0, 0, 1127, 1128, 5, 105, 0, 0, 1128, 1129, 5, 109, 0, 0, 1129, 1130, 5, 101, 0, 0, 1130, 120, 1, 0, 0, 0, 1131, 1132, 5, 110, 0, 0, 1132, 1133, 5, 101, 0, 0, 1133, 1134, 5, 115, 0, 0, 1134, 1135, 5, 116, 0, 0, 1135, 1136, 5, 101, 0, 0, 1136, 1137, 5, 100, 0, 0, 1137, 122, 1, 0, 0, 0, 1138, 1139, 5, 102, 0, 0, 1139, 1140, 5, 97, 0, 0, 1140, 1141, 5, 109, 0, 0, 1141, 1142, 5, 105, 0, 0, 1142, 1143, 5, 108, 0, 0, 1143, 1144, 5, 121, 0, 0, 1144, 124, 1, 0, 0, 0, 1145, 1146, 5, 97, 0, 0, 1146, 1147, 5, 115, 0, 0, 1147, 1148, 5, 115, 0, 0, 1148, 1149, 5, 101, 0, 0, 1149, 1150, 5, 109, 0, 0, 1150, 1151, 5, 98, 0, 0, 1151, 1152, 5, 108, 0, 0, 1152, 1153, 5, 121, 0, 0, 1153, 126, 1, 0, 0, 0, 1154, 1155, 5, 102, 0, 0, 1155, 1156, 5, 97, 0, 0, 1156, 1157, 5, 109, 0, 0, 1157, 1158, 5, 97, 0, 0, 1158, 1159, 5, 110, 0, 0, 1159, 1160, 5, 100, 0, 0, 1160, 1161, 5, 97, 0, 0, 1161, 1162, 5, 115, 0, 0, 1162, 1163, 5, 115, 0, 0, 1163, 1164, 5, 101, 0, 0, 1164, 1165, 5, 109, 0, 0, 1165, 128, 1, 0, 0, 0, 1166, 1167, 5, 102, 0, 0, 1167, 1168, 5, 97, 0, 0, 1168, 1169, 5, 109, 0, 0, 1169, 1170, 5, 111, 0, 0, 1170, 1171, 5, 114, 0, 0, 1171, 1172, 5, 97, 0, 0, 1172, 1173, 5, 115, 0, 0, 1173, 1174, 5, 115, 0, 0, 1174, 1175, 5, 101, 0, 0, 1175, 1176, 5, 109, 0, 0, 1176, 130, 1, 0, 0, 0, 1177, 1178, 5, 98, 0, 0, 1178, 1179, 5, 101, 0, 0, 1179, 1180, 5, 102, 0, 0, 1180, 1181, 5, 111, 0, 0, 1181, 1182, 5, 114, 0, 0, 1182, 1183, 5, 101, 0, 0, 1183, 1184, 5, 102, 0, 0, 1184, 1185, 5, 105, 0, 0, 1185, 1186, 5, 101, 0, 0, 1186, 1187, 5, 108, 0, 0, 1187, 1188, 5, 100, 0, 0, 1188, 1189, 5, 105, 0, 0, 1189, 1190, 5, 110, 0, 0, 1190, 1191, 5, 105, 0, 0, 1191, 1192, 5, 116, 0, 0, 1192, 132, 1, 0, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 112, 0, 0, 1195, 1196, 5, 101, 0, 0, 1196, 1197, 5, 99, 0, 0, 1197, 1198, 5, 105, 0, 0, 1198, 1199, 5, 97, 0, 0, 1199, 1200, 5, 108, 0, 0, 1200, 1201, 5, 110, 0, 0, 1201, 1202, 5, 97, 0, 0, 1202, 1203, 5, 109, 0, 0, 1203, 1204, 5, 101, 0, 0, 1204, 134, 1, 0, 0, 0, 1205, 1206, 5, 114, 0, 0, 1206, 1207, 5, 116, 0, 0, 1207, 1208, 5, 115, 0, 0, 1208, 1209, 5, 112, 0, 0, 1209, 1210, 5, 101, 0, 0, 1210, 1211, 5, 99, 0, 0, 1211, 1212, 5, 105, 0, 0, 1212, 1213, 5, 97, 0, 0, 1213, 1214, 5, 108, 0, 0, 1214, 1215, 5, 110, 0, 0, 1215, 1216, 5, 97, 0, 0, 1216, 1217, 5, 109, 0, 0, 1217, 1218, 5, 101, 0, 0, 1218, 136, 1, 0, 0, 0, 1219, 1220, 5, 102, 0, 0, 1220, 1221, 5, 108, 0, 0, 1221, 1222, 5, 97, 0, 0, 1222, 1223, 5, 103, 0, 0, 1223, 1224, 5, 115, 0, 0, 1224, 138, 1, 0, 0, 0, 1225, 1226, 5, 101, 0, 0, 1226, 1227, 5, 120, 0, 0, 1227, 1228, 5, 116, 0, 0, 1228, 1229, 5, 101, 0, 0, 1229, 1230, 5, 110, 0, 0, 1230, 1231, 5, 100, 0, 0, 1231, 1232, 5, 115, 0, 0, 1232, 140, 1, 0, 0, 0, 1233, 1234, 5, 105, 0, 0, 1234, 1235, 5, 109, 0, 0, 1235, 1236, 5, 112, 0, 0, 1236, 1237, 5, 108, 0, 0, 1237, 1238, 5, 101, 0, 0, 1238, 1239, 5, 109, 0, 0, 1239, 1240, 5, 101, 0, 0, 1240, 1241, 5, 110, 0, 0, 1241, 1242, 5, 116, 0, 0, 1242, 1243, 5, 115, 0, 0, 1243, 142, 1, 0, 0, 0, 1244, 1245, 5, 46, 0, 0, 1245, 1246, 5, 108, 0, 0, 1246, 1247, 5, 105, 0, 0, 1247, 1248, 5, 110, 0, 0, 1248, 1249, 5, 101, 0, 0, 1249, 144, 1, 0, 0, 0, 1250, 1251, 5, 35, 0, 0, 1251, 1252, 5, 108, 0, 0, 1252, 1253, 5, 105, 0, 0, 1253, 1254, 5, 110, 0, 0, 1254, 1255, 5, 101, 0, 0, 1255, 146, 1, 0, 0, 0, 1256, 1257, 5, 58, 0, 0, 1257, 148, 1, 0, 0, 0, 1258, 1259, 5, 110, 0, 0, 1259, 1260, 5, 111, 0, 0, 1260, 1261, 5, 109, 0, 0, 1261, 1262, 5, 101, 0, 0, 1262, 1263, 5, 116, 0, 0, 1263, 1264, 5, 97, 0, 0, 1264, 1265, 5, 100, 0, 0, 1265, 1266, 5, 97, 0, 0, 1266, 1267, 5, 116, 0, 0, 1267, 1268, 5, 97, 0, 0, 1268, 150, 1, 0, 0, 0, 1269, 1270, 5, 114, 0, 0, 1270, 1271, 5, 101, 0, 0, 1271, 1272, 5, 116, 0, 0, 1272, 1273, 5, 97, 0, 0, 1273, 1274, 5, 114, 0, 0, 1274, 1275, 5, 103, 0, 0, 1275, 1276, 5, 101, 0, 0, 1276, 1277, 5, 116, 0, 0, 1277, 1278, 5, 97, 0, 0, 1278, 1279, 5, 98, 0, 0, 1279, 1280, 5, 108, 0, 0, 1280, 1281, 5, 101, 0, 0, 1281, 152, 1, 0, 0, 0, 1282, 1283, 5, 110, 0, 0, 1283, 1284, 5, 111, 0, 0, 1284, 1285, 5, 112, 0, 0, 1285, 1286, 5, 108, 0, 0, 1286, 1287, 5, 97, 0, 0, 1287, 1288, 5, 116, 0, 0, 1288, 1289, 5, 102, 0, 0, 1289, 1290, 5, 111, 0, 0, 1290, 1291, 5, 114, 0, 0, 1291, 1292, 5, 109, 0, 0, 1292, 154, 1, 0, 0, 0, 1293, 1294, 5, 108, 0, 0, 1294, 1295, 5, 101, 0, 0, 1295, 1296, 5, 103, 0, 0, 1296, 1297, 5, 97, 0, 0, 1297, 1298, 5, 99, 0, 0, 1298, 1299, 5, 121, 0, 0, 1299, 1300, 5, 32, 0, 0, 1300, 1301, 5, 108, 0, 0, 1301, 1302, 5, 105, 0, 0, 1302, 1303, 5, 98, 0, 0, 1303, 1304, 5, 114, 0, 0, 1304, 1305, 5, 97, 0, 0, 1305, 1306, 5, 114, 0, 0, 1306, 1307, 5, 121, 0, 0, 1307, 156, 1, 0, 0, 0, 1308, 1309, 5, 120, 0, 0, 1309, 1310, 5, 56, 0, 0, 1310, 1311, 5, 54, 0, 0, 1311, 158, 1, 0, 0, 0, 1312, 1313, 5, 97, 0, 0, 1313, 1314, 5, 109, 0, 0, 1314, 1315, 5, 100, 0, 0, 1315, 1316, 5, 54, 0, 0, 1316, 1317, 5, 52, 0, 0, 1317, 160, 1, 0, 0, 0, 1318, 1319, 5, 97, 0, 0, 1319, 1320, 5, 114, 0, 0, 1320, 1321, 5, 109, 0, 0, 1321, 162, 1, 0, 0, 0, 1322, 1323, 5, 97, 0, 0, 1323, 1324, 5, 114, 0, 0, 1324, 1325, 5, 109, 0, 0, 1325, 1326, 5, 54, 0, 0, 1326, 1327, 5, 52, 0, 0, 1327, 164, 1, 0, 0, 0, 1328, 1329, 5, 98, 0, 0, 1329, 1330, 5, 121, 0, 0, 1330, 1331, 5, 116, 0, 0, 1331, 1332, 5, 101, 0, 0, 1332, 1333, 5, 97, 0, 0, 1333, 1334, 5, 114, 0, 0, 1334, 1335, 5, 114, 0, 0, 1335, 1336, 5, 97, 0, 0, 1336, 1337, 5, 121, 0, 0, 1337, 166, 1, 0, 0, 0, 1338, 1339, 5, 60, 0, 0, 1339, 168, 1, 0, 0, 0, 1340, 1341, 5, 62, 0, 0, 1341, 170, 1, 0, 0, 0, 1342, 1343, 5, 40, 0, 0, 1343, 1344, 5, 41, 0, 0, 1344, 172, 1, 0, 0, 0, 1345, 1346, 5, 47, 0, 0, 1346, 174, 1, 0, 0, 0, 1347, 1348, 5, 97, 0, 0, 1348, 1349, 5, 108, 0, 0, 1349, 1350, 5, 103, 0, 0, 1350, 1351, 5, 111, 0, 0, 1351, 1352, 5, 114, 0, 0, 1352, 1353, 5, 105, 0, 0, 1353, 1354, 5, 116, 0, 0, 1354, 1355, 5, 104, 0, 0, 1355, 1356, 5, 109, 0, 0, 1356, 176, 1, 0, 0, 0, 1357, 1358, 5, 105, 0, 0, 1358, 1359, 5, 105, 0, 0, 1359, 1360, 5, 100, 0, 0, 1360, 1361, 5, 112, 0, 0, 1361, 1362, 5, 97, 0, 0, 1362, 1363, 5, 114, 0, 0, 1363, 1364, 5, 97, 0, 0, 1364, 1365, 5, 109, 0, 0, 1365, 178, 1, 0, 0, 0, 1366, 1367, 5, 112, 0, 0, 1367, 1368, 5, 105, 0, 0, 1368, 1369, 5, 110, 0, 0, 1369, 1370, 5, 110, 0, 0, 1370, 1371, 5, 101, 0, 0, 1371, 1372, 5, 100, 0, 0, 1372, 180, 1, 0, 0, 0, 1373, 1374, 5, 109, 0, 0, 1374, 1375, 5, 111, 0, 0, 1375, 1376, 5, 100, 0, 0, 1376, 1377, 5, 114, 0, 0, 1377, 1378, 5, 101, 0, 0, 1378, 1379, 5, 113, 0, 0, 1379, 182, 1, 0, 0, 0, 1380, 1381, 5, 109, 0, 0, 1381, 1382, 5, 111, 0, 0, 1382, 1383, 5, 100, 0, 0, 1383, 1384, 5, 111, 0, 0, 1384, 1385, 5, 112, 0, 0, 1385, 1386, 5, 116, 0, 0, 1386, 184, 1, 0, 0, 0, 1387, 1388, 5, 116, 0, 0, 1388, 1389, 5, 114, 0, 0, 1389, 1390, 5, 117, 0, 0, 1390, 1391, 5, 101, 0, 0, 1391, 186, 1, 0, 0, 0, 1392, 1393, 5, 102, 0, 0, 1393, 1394, 5, 97, 0, 0, 1394, 1395, 5, 108, 0, 0, 1395, 1396, 5, 115, 0, 0, 1396, 1397, 5, 101, 0, 0, 1397, 188, 1, 0, 0, 0, 1398, 1399, 5, 114, 0, 0, 1399, 1400, 5, 101, 0, 0, 1400, 1401, 5, 113, 0, 0, 1401, 1402, 5, 117, 0, 0, 1402, 1403, 5, 101, 0, 0, 1403, 1404, 5, 115, 0, 0, 1404, 1405, 5, 116, 0, 0, 1405, 190, 1, 0, 0, 0, 1406, 1407, 5, 100, 0, 0, 1407, 1408, 5, 101, 0, 0, 1408, 1409, 5, 109, 0, 0, 1409, 1410, 5, 97, 0, 0, 1410, 1411, 5, 110, 0, 0, 1411, 1412, 5, 100, 0, 0, 1412, 192, 1, 0, 0, 0, 1413, 1414, 5, 97, 0, 0, 1414, 1415, 5, 115, 0, 0, 1415, 1416, 5, 115, 0, 0, 1416, 1417, 5, 101, 0, 0, 1417, 1418, 5, 114, 0, 0, 1418, 1419, 5, 116, 0, 0, 1419, 194, 1, 0, 0, 0, 1420, 1421, 5, 100, 0, 0, 1421, 1422, 5, 101, 0, 0, 1422, 1423, 5, 110, 0, 0, 1423, 1424, 5, 121, 0, 0, 1424, 196, 1, 0, 0, 0, 1425, 1426, 5, 112, 0, 0, 1426, 1427, 5, 101, 0, 0, 1427, 1428, 5, 114, 0, 0, 1428, 1429, 5, 109, 0, 0, 1429, 1430, 5, 105, 0, 0, 1430, 1431, 5, 116, 0, 0, 1431, 1432, 5, 111, 0, 0, 1432, 1433, 5, 110, 0, 0, 1433, 1434, 5, 108, 0, 0, 1434, 1435, 5, 121, 0, 0, 1435, 198, 1, 0, 0, 0, 1436, 1437, 5, 108, 0, 0, 1437, 1438, 5, 105, 0, 0, 1438, 1439, 5, 110, 0, 0, 1439, 1440, 5, 107, 0, 0, 1440, 1441, 5, 99, 0, 0, 1441, 1442, 5, 104, 0, 0, 1442, 1443, 5, 101, 0, 0, 1443, 1444, 5, 99, 0, 0, 1444, 1445, 5, 107, 0, 0, 1445, 200, 1, 0, 0, 0, 1446, 1447, 5, 105, 0, 0, 1447, 1448, 5, 110, 0, 0, 1448, 1449, 5, 104, 0, 0, 1449, 1450, 5, 101, 0, 0, 1450, 1451, 5, 114, 0, 0, 1451, 1452, 5, 105, 0, 0, 1452, 1453, 5, 116, 0, 0, 1453, 1454, 5, 99, 0, 0, 1454, 1455, 5, 104, 0, 0, 1455, 1456, 5, 101, 0, 0, 1456, 1457, 5, 99, 0, 0, 1457, 1458, 5, 107, 0, 0, 1458, 202, 1, 0, 0, 0, 1459, 1460, 5, 114, 0, 0, 1460, 1461, 5, 101, 0, 0, 1461, 1462, 5, 113, 0, 0, 1462, 1463, 5, 109, 0, 0, 1463, 1464, 5, 105, 0, 0, 1464, 1465, 5, 110, 0, 0, 1465, 204, 1, 0, 0, 0, 1466, 1467, 5, 114, 0, 0, 1467, 1468, 5, 101, 0, 0, 1468, 1469, 5, 113, 0, 0, 1469, 1470, 5, 111, 0, 0, 1470, 1471, 5, 112, 0, 0, 1471, 1472, 5, 116, 0, 0, 1472, 206, 1, 0, 0, 0, 1473, 1474, 5, 114, 0, 0, 1474, 1475, 5, 101, 0, 0, 1475, 1476, 5, 113, 0, 0, 1476, 1477, 5, 114, 0, 0, 1477, 1478, 5, 101, 0, 0, 1478, 1479, 5, 102, 0, 0, 1479, 1480, 5, 117, 0, 0, 1480, 1481, 5, 115, 0, 0, 1481, 1482, 5, 101, 0, 0, 1482, 208, 1, 0, 0, 0, 1483, 1484, 5, 112, 0, 0, 1484, 1485, 5, 114, 0, 0, 1485, 1486, 5, 101, 0, 0, 1486, 1487, 5, 106, 0, 0, 1487, 1488, 5, 105, 0, 0, 1488, 1489, 5, 116, 0, 0, 1489, 1490, 5, 103, 0, 0, 1490, 1491, 5, 114, 0, 0, 1491, 1492, 5, 97, 0, 0, 1492, 1493, 5, 110, 0, 0, 1493, 1494, 5, 116, 0, 0, 1494, 210, 1, 0, 0, 0, 1495, 1496, 5, 112, 0, 0, 1496, 1497, 5, 114, 0, 0, 1497, 1498, 5, 101, 0, 0, 1498, 1499, 5, 106, 0, 0, 1499, 1500, 5, 105, 0, 0, 1500, 1501, 5, 116, 0, 0, 1501, 1502, 5, 100, 0, 0, 1502, 1503, 5, 101, 0, 0, 1503, 1504, 5, 110, 0, 0, 1504, 1505, 5, 121, 0, 0, 1505, 212, 1, 0, 0, 0, 1506, 1507, 5, 110, 0, 0, 1507, 1508, 5, 111, 0, 0, 1508, 1509, 5, 110, 0, 0, 1509, 1510, 5, 99, 0, 0, 1510, 1511, 5, 97, 0, 0, 1511, 1512, 5, 115, 0, 0, 1512, 1513, 5, 100, 0, 0, 1513, 1514, 5, 101, 0, 0, 1514, 1515, 5, 109, 0, 0, 1515, 1516, 5, 97, 0, 0, 1516, 1517, 5, 110, 0, 0, 1517, 1518, 5, 100, 0, 0, 1518, 214, 1, 0, 0, 0, 1519, 1520, 5, 110, 0, 0, 1520, 1521, 5, 111, 0, 0, 1521, 1522, 5, 110, 0, 0, 1522, 1523, 5, 99, 0, 0, 1523, 1524, 5, 97, 0, 0, 1524, 1525, 5, 115, 0, 0, 1525, 1526, 5, 108, 0, 0, 1526, 1527, 5, 105, 0, 0, 1527, 1528, 5, 110, 0, 0, 1528, 1529, 5, 107, 0, 0, 1529, 1530, 5, 100, 0, 0, 1530, 1531, 5, 101, 0, 0, 1531, 1532, 5, 109, 0, 0, 1532, 1533, 5, 97, 0, 0, 1533, 1534, 5, 110, 0, 0, 1534, 1535, 5, 100, 0, 0, 1535, 216, 1, 0, 0, 0, 1536, 1537, 5, 110, 0, 0, 1537, 1538, 5, 111, 0, 0, 1538, 1539, 5, 110, 0, 0, 1539, 1540, 5, 99, 0, 0, 1540, 1541, 5, 97, 0, 0, 1541, 1542, 5, 115, 0, 0, 1542, 1543, 5, 105, 0, 0, 1543, 1544, 5, 110, 0, 0, 1544, 1545, 5, 104, 0, 0, 1545, 1546, 5, 101, 0, 0, 1546, 1547, 5, 114, 0, 0, 1547, 1548, 5, 105, 0, 0, 1548, 1549, 5, 116, 0, 0, 1549, 1550, 5, 97, 0, 0, 1550, 1551, 5, 110, 0, 0, 1551, 1552, 5, 99, 0, 0, 1552, 1553, 5, 101, 0, 0, 1553, 218, 1, 0, 0, 0, 1554, 1555, 5, 99, 0, 0, 1555, 1556, 5, 97, 0, 0, 1556, 1557, 5, 108, 0, 0, 1557, 1558, 5, 108, 0, 0, 1558, 1559, 5, 99, 0, 0, 1559, 1560, 5, 111, 0, 0, 1560, 1561, 5, 110, 0, 0, 1561, 1562, 5, 118, 0, 0, 1562, 220, 1, 0, 0, 0, 1563, 1564, 5, 109, 0, 0, 1564, 1565, 5, 100, 0, 0, 1565, 1566, 5, 116, 0, 0, 1566, 1567, 5, 111, 0, 0, 1567, 1568, 5, 107, 0, 0, 1568, 1569, 5, 101, 0, 0, 1569, 1570, 5, 110, 0, 0, 1570, 222, 1, 0, 0, 0, 1571, 1572, 5, 45, 0, 0, 1572, 224, 1, 0, 0, 0, 1573, 1574, 5, 98, 0, 0, 1574, 1575, 5, 121, 0, 0, 1575, 1576, 5, 114, 0, 0, 1576, 1577, 5, 101, 0, 0, 1577, 1578, 5, 102, 0, 0, 1578, 1579, 5, 108, 0, 0, 1579, 1580, 5, 105, 0, 0, 1580, 1581, 5, 107, 0, 0, 1581, 1582, 5, 101, 0, 0, 1582, 226, 1, 0, 0, 0, 1583, 1584, 5, 46, 0, 0, 1584, 1585, 5, 99, 0, 0, 1585, 1586, 5, 116, 0, 0, 1586, 1587, 5, 111, 0, 0, 1587, 1588, 5, 114, 0, 0, 1588, 228, 1, 0, 0, 0, 1589, 1590, 5, 46, 0, 0, 1590, 1591, 5, 115, 0, 0, 1591, 1592, 5, 105, 0, 0, 1592, 1593, 5, 122, 0, 0, 1593, 1594, 5, 101, 0, 0, 1594, 230, 1, 0, 0, 0, 1595, 1596, 5, 46, 0, 0, 1596, 1597, 5, 112, 0, 0, 1597, 1598, 5, 97, 0, 0, 1598, 1599, 5, 99, 0, 0, 1599, 1600, 5, 107, 0, 0, 1600, 232, 1, 0, 0, 0, 1601, 1602, 5, 119, 0, 0, 1602, 1603, 5, 105, 0, 0, 1603, 1604, 5, 116, 0, 0, 1604, 1605, 5, 104, 0, 0, 1605, 234, 1, 0, 0, 0, 1606, 1607, 5, 46, 0, 0, 1607, 1608, 5, 105, 0, 0, 1608, 1609, 5, 110, 0, 0, 1609, 1610, 5, 116, 0, 0, 1610, 1611, 5, 101, 0, 0, 1611, 1612, 5, 114, 0, 0, 1612, 1613, 5, 102, 0, 0, 1613, 1614, 5, 97, 0, 0, 1614, 1615, 5, 99, 0, 0, 1615, 1616, 5, 101, 0, 0, 1616, 1617, 5, 105, 0, 0, 1617, 1618, 5, 109, 0, 0, 1618, 1619, 5, 112, 0, 0, 1619, 1620, 5, 108, 0, 0, 1620, 236, 1, 0, 0, 0, 1621, 1622, 5, 46, 0, 0, 1622, 1623, 5, 102, 0, 0, 1623, 1624, 5, 105, 0, 0, 1624, 1625, 5, 101, 0, 0, 1625, 1626, 5, 108, 0, 0, 1626, 1627, 5, 100, 0, 0, 1627, 238, 1, 0, 0, 0, 1628, 1629, 5, 109, 0, 0, 1629, 1630, 5, 97, 0, 0, 1630, 1631, 5, 114, 0, 0, 1631, 1632, 5, 115, 0, 0, 1632, 1633, 5, 104, 0, 0, 1633, 1634, 5, 97, 0, 0, 1634, 1635, 5, 108, 0, 0, 1635, 240, 1, 0, 0, 0, 1636, 1637, 5, 115, 0, 0, 1637, 1638, 5, 116, 0, 0, 1638, 1639, 5, 97, 0, 0, 1639, 1640, 5, 116, 0, 0, 1640, 1641, 5, 105, 0, 0, 1641, 1642, 5, 99, 0, 0, 1642, 242, 1, 0, 0, 0, 1643, 1644, 5, 105, 0, 0, 1644, 1645, 5, 110, 0, 0, 1645, 1646, 5, 105, 0, 0, 1646, 1647, 5, 116, 0, 0, 1647, 1648, 5, 111, 0, 0, 1648, 1649, 5, 110, 0, 0, 1649, 1650, 5, 108, 0, 0, 1650, 1651, 5, 121, 0, 0, 1651, 244, 1, 0, 0, 0, 1652, 1653, 5, 112, 0, 0, 1653, 1654, 5, 114, 0, 0, 1654, 1655, 5, 105, 0, 0, 1655, 1656, 5, 118, 0, 0, 1656, 1657, 5, 97, 0, 0, 1657, 1658, 5, 116, 0, 0, 1658, 1659, 5, 101, 0, 0, 1659, 1660, 5, 115, 0, 0, 1660, 1661, 5, 99, 0, 0, 1661, 1662, 5, 111, 0, 0, 1662, 1663, 5, 112, 0, 0, 1663, 1664, 5, 101, 0, 0, 1664, 246, 1, 0, 0, 0, 1665, 1666, 5, 108, 0, 0, 1666, 1667, 5, 105, 0, 0, 1667, 1668, 5, 116, 0, 0, 1668, 1669, 5, 101, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1671, 5, 97, 0, 0, 1671, 1672, 5, 108, 0, 0, 1672, 248, 1, 0, 0, 0, 1673, 1674, 5, 110, 0, 0, 1674, 1675, 5, 111, 0, 0, 1675, 1676, 5, 116, 0, 0, 1676, 1677, 5, 115, 0, 0, 1677, 1678, 5, 101, 0, 0, 1678, 1679, 5, 114, 0, 0, 1679, 1680, 5, 105, 0, 0, 1680, 1681, 5, 97, 0, 0, 1681, 1682, 5, 108, 0, 0, 1682, 1683, 5, 105, 0, 0, 1683, 1684, 5, 122, 0, 0, 1684, 1685, 5, 101, 0, 0, 1685, 1686, 5, 100, 0, 0, 1686, 250, 1, 0, 0, 0, 1687, 1688, 5, 46, 0, 0, 1688, 1689, 5, 101, 0, 0, 1689, 1690, 5, 118, 0, 0, 1690, 1691, 5, 101, 0, 0, 1691, 1692, 5, 110, 0, 0, 1692, 1693, 5, 116, 0, 0, 1693, 252, 1, 0, 0, 0, 1694, 1695, 5, 46, 0, 0, 1695, 1696, 5, 97, 0, 0, 1696, 1697, 5, 100, 0, 0, 1697, 1698, 5, 100, 0, 0, 1698, 1699, 5, 111, 0, 0, 1699, 1700, 5, 110, 0, 0, 1700, 254, 1, 0, 0, 0, 1701, 1702, 5, 46, 0, 0, 1702, 1703, 5, 114, 0, 0, 1703, 1704, 5, 101, 0, 0, 1704, 1705, 5, 109, 0, 0, 1705, 1706, 5, 111, 0, 0, 1706, 1707, 5, 118, 0, 0, 1707, 1708, 5, 101, 0, 0, 1708, 1709, 5, 111, 0, 0, 1709, 1710, 5, 110, 0, 0, 1710, 256, 1, 0, 0, 0, 1711, 1712, 5, 46, 0, 0, 1712, 1713, 5, 102, 0, 0, 1713, 1714, 5, 105, 0, 0, 1714, 1715, 5, 114, 0, 0, 1715, 1716, 5, 101, 0, 0, 1716, 258, 1, 0, 0, 0, 1717, 1718, 5, 46, 0, 0, 1718, 1719, 5, 111, 0, 0, 1719, 1720, 5, 116, 0, 0, 1720, 1721, 5, 104, 0, 0, 1721, 1722, 5, 101, 0, 0, 1722, 1723, 5, 114, 0, 0, 1723, 260, 1, 0, 0, 0, 1724, 1725, 5, 46, 0, 0, 1725, 1726, 5, 112, 0, 0, 1726, 1727, 5, 114, 0, 0, 1727, 1728, 5, 111, 0, 0, 1728, 1729, 5, 112, 0, 0, 1729, 1730, 5, 101, 0, 0, 1730, 1731, 5, 114, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 121, 0, 0, 1733, 262, 1, 0, 0, 0, 1734, 1735, 5, 46, 0, 0, 1735, 1736, 5, 115, 0, 0, 1736, 1737, 5, 101, 0, 0, 1737, 1738, 5, 116, 0, 0, 1738, 264, 1, 0, 0, 0, 1739, 1740, 5, 46, 0, 0, 1740, 1741, 5, 103, 0, 0, 1741, 1742, 5, 101, 0, 0, 1742, 1743, 5, 116, 0, 0, 1743, 266, 1, 0, 0, 0, 1744, 1745, 5, 105, 0, 0, 1745, 1746, 5, 110, 0, 0, 1746, 268, 1, 0, 0, 0, 1747, 1748, 5, 111, 0, 0, 1748, 1749, 5, 117, 0, 0, 1749, 1750, 5, 116, 0, 0, 1750, 270, 1, 0, 0, 0, 1751, 1752, 5, 111, 0, 0, 1752, 1753, 5, 112, 0, 0, 1753, 1754, 5, 116, 0, 0, 1754, 272, 1, 0, 0, 0, 1755, 1756, 5, 46, 0, 0, 1756, 1757, 5, 109, 0, 0, 1757, 1758, 5, 101, 0, 0, 1758, 1759, 5, 116, 0, 0, 1759, 1760, 5, 104, 0, 0, 1760, 1761, 5, 111, 0, 0, 1761, 1762, 5, 100, 0, 0, 1762, 274, 1, 0, 0, 0, 1763, 1764, 5, 102, 0, 0, 1764, 1765, 5, 105, 0, 0, 1765, 1766, 5, 110, 0, 0, 1766, 1767, 5, 97, 0, 0, 1767, 1768, 5, 108, 0, 0, 1768, 276, 1, 0, 0, 0, 1769, 1770, 5, 118, 0, 0, 1770, 1771, 5, 105, 0, 0, 1771, 1772, 5, 114, 0, 0, 1772, 1773, 5, 116, 0, 0, 1773, 1774, 5, 117, 0, 0, 1774, 1775, 5, 97, 0, 0, 1775, 1776, 5, 108, 0, 0, 1776, 278, 1, 0, 0, 0, 1777, 1778, 5, 115, 0, 0, 1778, 1779, 5, 116, 0, 0, 1779, 1780, 5, 114, 0, 0, 1780, 1781, 5, 105, 0, 0, 1781, 1782, 5, 99, 0, 0, 1782, 1783, 5, 116, 0, 0, 1783, 280, 1, 0, 0, 0, 1784, 1785, 5, 104, 0, 0, 1785, 1786, 5, 105, 0, 0, 1786, 1787, 5, 100, 0, 0, 1787, 1788, 5, 101, 0, 0, 1788, 1789, 5, 98, 0, 0, 1789, 1790, 5, 121, 0, 0, 1790, 1791, 5, 115, 0, 0, 1791, 1792, 5, 105, 0, 0, 1792, 1793, 5, 103, 0, 0, 1793, 282, 1, 0, 0, 0, 1794, 1795, 5, 110, 0, 0, 1795, 1796, 5, 101, 0, 0, 1796, 1797, 5, 119, 0, 0, 1797, 1798, 5, 115, 0, 0, 1798, 1799, 5, 108, 0, 0, 1799, 1800, 5, 111, 0, 0, 1800, 1801, 5, 116, 0, 0, 1801, 284, 1, 0, 0, 0, 1802, 1803, 5, 117, 0, 0, 1803, 1804, 5, 110, 0, 0, 1804, 1805, 5, 109, 0, 0, 1805, 1806, 5, 97, 0, 0, 1806, 1807, 5, 110, 0, 0, 1807, 1808, 5, 97, 0, 0, 1808, 1809, 5, 103, 0, 0, 1809, 1810, 5, 101, 0, 0, 1810, 1811, 5, 100, 0, 0, 1811, 1812, 5, 101, 0, 0, 1812, 1813, 5, 120, 0, 0, 1813, 1814, 5, 112, 0, 0, 1814, 286, 1, 0, 0, 0, 1815, 1816, 5, 114, 0, 0, 1816, 1817, 5, 101, 0, 0, 1817, 1818, 5, 113, 0, 0, 1818, 1819, 5, 115, 0, 0, 1819, 1820, 5, 101, 0, 0, 1820, 1821, 5, 99, 0, 0, 1821, 1822, 5, 111, 0, 0, 1822, 1823, 5, 98, 0, 0, 1823, 1824, 5, 106, 0, 0, 1824, 288, 1, 0, 0, 0, 1825, 1826, 5, 112, 0, 0, 1826, 1827, 5, 105, 0, 0, 1827, 1828, 5, 110, 0, 0, 1828, 1829, 5, 118, 0, 0, 1829, 1830, 5, 111, 0, 0, 1830, 1831, 5, 107, 0, 0, 1831, 1832, 5, 101, 0, 0, 1832, 1833, 5, 105, 0, 0, 1833, 1834, 5, 109, 0, 0, 1834, 1835, 5, 112, 0, 0, 1835, 1836, 5, 108, 0, 0, 1836, 290, 1, 0, 0, 0, 1837, 1838, 5, 110, 0, 0, 1838, 1839, 5, 111, 0, 0, 1839, 1840, 5, 109, 0, 0, 1840, 1841, 5, 97, 0, 0, 1841, 1842, 5, 110, 0, 0, 1842, 1843, 5, 103, 0, 0, 1843, 1844, 5, 108, 0, 0, 1844, 1845, 5, 101, 0, 0, 1845, 292, 1, 0, 0, 0, 1846, 1847, 5, 108, 0, 0, 1847, 1848, 5, 97, 0, 0, 1848, 1849, 5, 115, 0, 0, 1849, 1850, 5, 116, 0, 0, 1850, 1851, 5, 101, 0, 0, 1851, 1852, 5, 114, 0, 0, 1852, 1853, 5, 114, 0, 0, 1853, 294, 1, 0, 0, 0, 1854, 1855, 5, 119, 0, 0, 1855, 1856, 5, 105, 0, 0, 1856, 1857, 5, 110, 0, 0, 1857, 1858, 5, 97, 0, 0, 1858, 1859, 5, 112, 0, 0, 1859, 1860, 5, 105, 0, 0, 1860, 296, 1, 0, 0, 0, 1861, 1862, 5, 98, 0, 0, 1862, 1863, 5, 101, 0, 0, 1863, 1864, 5, 115, 0, 0, 1864, 1865, 5, 116, 0, 0, 1865, 1866, 5, 102, 0, 0, 1866, 1867, 5, 105, 0, 0, 1867, 1868, 5, 116, 0, 0, 1868, 298, 1, 0, 0, 0, 1869, 1870, 5, 111, 0, 0, 1870, 1871, 5, 110, 0, 0, 1871, 300, 1, 0, 0, 0, 1872, 1873, 5, 111, 0, 0, 1873, 1874, 5, 102, 0, 0, 1874, 1875, 5, 102, 0, 0, 1875, 302, 1, 0, 0, 0, 1876, 1877, 5, 99, 0, 0, 1877, 1878, 5, 104, 0, 0, 1878, 1879, 5, 97, 0, 0, 1879, 1880, 5, 114, 0, 0, 1880, 1881, 5, 109, 0, 0, 1881, 1882, 5, 97, 0, 0, 1882, 1883, 5, 112, 0, 0, 1883, 1884, 5, 101, 0, 0, 1884, 1885, 5, 114, 0, 0, 1885, 1886, 5, 114, 0, 0, 1886, 1887, 5, 111, 0, 0, 1887, 1888, 5, 114, 0, 0, 1888, 304, 1, 0, 0, 0, 1889, 1890, 5, 46, 0, 0, 1890, 1891, 5, 99, 0, 0, 1891, 1892, 5, 99, 0, 0, 1892, 1893, 5, 116, 0, 0, 1893, 1894, 5, 111, 0, 0, 1894, 1895, 5, 114, 0, 0, 1895, 306, 1, 0, 0, 0, 1896, 1897, 5, 105, 0, 0, 1897, 1898, 5, 110, 0, 0, 1898, 1899, 5, 105, 0, 0, 1899, 1900, 5, 116, 0, 0, 1900, 308, 1, 0, 0, 0, 1901, 1902, 5, 46, 0, 0, 1902, 1903, 5, 116, 0, 0, 1903, 1904, 5, 114, 0, 0, 1904, 1905, 5, 121, 0, 0, 1905, 310, 1, 0, 0, 0, 1906, 1907, 5, 116, 0, 0, 1907, 1908, 5, 111, 0, 0, 1908, 312, 1, 0, 0, 0, 1909, 1910, 5, 102, 0, 0, 1910, 1911, 5, 105, 0, 0, 1911, 1912, 5, 108, 0, 0, 1912, 1913, 5, 116, 0, 0, 1913, 1914, 5, 101, 0, 0, 1914, 1915, 5, 114, 0, 0, 1915, 314, 1, 0, 0, 0, 1916, 1917, 5, 99, 0, 0, 1917, 1918, 5, 97, 0, 0, 1918, 1919, 5, 116, 0, 0, 1919, 1920, 5, 99, 0, 0, 1920, 1921, 5, 104, 0, 0, 1921, 316, 1, 0, 0, 0, 1922, 1923, 5, 102, 0, 0, 1923, 1924, 5, 105, 0, 0, 1924, 1925, 5, 110, 0, 0, 1925, 1926, 5, 97, 0, 0, 1926, 1927, 5, 108, 0, 0, 1927, 1928, 5, 108, 0, 0, 1928, 1929, 5, 121, 0, 0, 1929, 318, 1, 0, 0, 0, 1930, 1931, 5, 102, 0, 0, 1931, 1932, 5, 97, 0, 0, 1932, 1933, 5, 117, 0, 0, 1933, 1934, 5, 108, 0, 0, 1934, 1935, 5, 116, 0, 0, 1935, 320, 1, 0, 0, 0, 1936, 1937, 5, 104, 0, 0, 1937, 1938, 5, 97, 0, 0, 1938, 1939, 5, 110, 0, 0, 1939, 1940, 5, 100, 0, 0, 1940, 1941, 5, 108, 0, 0, 1941, 1942, 5, 101, 0, 0, 1942, 1943, 5, 114, 0, 0, 1943, 322, 1, 0, 0, 0, 1944, 1945, 5, 46, 0, 0, 1945, 1946, 5, 100, 0, 0, 1946, 1947, 5, 97, 0, 0, 1947, 1948, 5, 116, 0, 0, 1948, 1949, 5, 97, 0, 0, 1949, 324, 1, 0, 0, 0, 1950, 1951, 5, 116, 0, 0, 1951, 1952, 5, 108, 0, 0, 1952, 1953, 5, 115, 0, 0, 1953, 326, 1, 0, 0, 0, 1954, 1955, 5, 46, 0, 0, 1955, 1956, 5, 112, 0, 0, 1956, 1957, 5, 117, 0, 0, 1957, 1958, 5, 98, 0, 0, 1958, 1959, 5, 108, 0, 0, 1959, 1960, 5, 105, 0, 0, 1960, 1961, 5, 99, 0, 0, 1961, 1962, 5, 75, 0, 0, 1962, 1963, 5, 101, 0, 0, 1963, 1964, 5, 121, 0, 0, 1964, 328, 1, 0, 0, 0, 1965, 1966, 5, 46, 0, 0, 1966, 1967, 5, 118, 0, 0, 1967, 1968, 5, 101, 0, 0, 1968, 1969, 5, 114, 0, 0, 1969, 330, 1, 0, 0, 0, 1970, 1971, 5, 46, 0, 0, 1971, 1972, 5, 108, 0, 0, 1972, 1973, 5, 111, 0, 0, 1973, 1974, 5, 99, 0, 0, 1974, 1975, 5, 97, 0, 0, 1975, 1976, 5, 108, 0, 0, 1976, 1977, 5, 101, 0, 0, 1977, 332, 1, 0, 0, 0, 1978, 1979, 5, 46, 0, 0, 1979, 1980, 5, 112, 0, 0, 1980, 1981, 5, 117, 0, 0, 1981, 1982, 5, 98, 0, 0, 1982, 1983, 5, 108, 0, 0, 1983, 1984, 5, 105, 0, 0, 1984, 1985, 5, 99, 0, 0, 1985, 1986, 5, 107, 0, 0, 1986, 1987, 5, 101, 0, 0, 1987, 1988, 5, 121, 0, 0, 1988, 1989, 5, 116, 0, 0, 1989, 1990, 5, 111, 0, 0, 1990, 1991, 5, 107, 0, 0, 1991, 1992, 5, 101, 0, 0, 1992, 1993, 5, 110, 0, 0, 1993, 334, 1, 0, 0, 0, 1994, 1995, 5, 102, 0, 0, 1995, 1996, 5, 111, 0, 0, 1996, 1997, 5, 114, 0, 0, 1997, 1998, 5, 119, 0, 0, 1998, 1999, 5, 97, 0, 0, 1999, 2000, 5, 114, 0, 0, 2000, 2001, 5, 100, 0, 0, 2001, 2002, 5, 101, 0, 0, 2002, 2003, 5, 114, 0, 0, 2003, 336, 1, 0, 0, 0, 2004, 2006, 5, 45, 0, 0, 2005, 2004, 1, 0, 0, 0, 2005, 2006, 1, 0, 0, 0, 2006, 2020, 1, 0, 0, 0, 2007, 2008, 5, 48, 0, 0, 2008, 2009, 5, 120, 0, 0, 2009, 2011, 1, 0, 0, 0, 2010, 2012, 7, 0, 0, 0, 2011, 2010, 1, 0, 0, 0, 2012, 2013, 1, 0, 0, 0, 2013, 2011, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2021, 1, 0, 0, 0, 2015, 2017, 7, 1, 0, 0, 2016, 2015, 1, 0, 0, 0, 2017, 2018, 1, 0, 0, 0, 2018, 2016, 1, 0, 0, 0, 2018, 2019, 1, 0, 0, 0, 2019, 2021, 1, 0, 0, 0, 2020, 2007, 1, 0, 0, 0, 2020, 2016, 1, 0, 0, 0, 2021, 338, 1, 0, 0, 0, 2022, 2024, 5, 45, 0, 0, 2023, 2022, 1, 0, 0, 0, 2023, 2024, 1, 0, 0, 0, 2024, 2038, 1, 0, 0, 0, 2025, 2026, 5, 48, 0, 0, 2026, 2027, 5, 120, 0, 0, 2027, 2029, 1, 0, 0, 0, 2028, 2030, 7, 0, 0, 0, 2029, 2028, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 2029, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 2039, 1, 0, 0, 0, 2033, 2035, 7, 1, 0, 0, 2034, 2033, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 2034, 1, 0, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2039, 1, 0, 0, 0, 2038, 2025, 1, 0, 0, 0, 2038, 2034, 1, 0, 0, 0, 2039, 340, 1, 0, 0, 0, 2040, 2042, 5, 45, 0, 0, 2041, 2040, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2044, 1, 0, 0, 0, 2043, 2045, 7, 1, 0, 0, 2044, 2043, 1, 0, 0, 0, 2045, 2046, 1, 0, 0, 0, 2046, 2044, 1, 0, 0, 0, 2046, 2047, 1, 0, 0, 0, 2047, 2063, 1, 0, 0, 0, 2048, 2050, 5, 46, 0, 0, 2049, 2051, 7, 1, 0, 0, 2050, 2049, 1, 0, 0, 0, 2051, 2052, 1, 0, 0, 0, 2052, 2050, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 2064, 1, 0, 0, 0, 2054, 2056, 7, 2, 0, 0, 2055, 2057, 5, 45, 0, 0, 2056, 2055, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2059, 1, 0, 0, 0, 2058, 2060, 7, 1, 0, 0, 2059, 2058, 1, 0, 0, 0, 2060, 2061, 1, 0, 0, 0, 2061, 2059, 1, 0, 0, 0, 2061, 2062, 1, 0, 0, 0, 2062, 2064, 1, 0, 0, 0, 2063, 2048, 1, 0, 0, 0, 2063, 2054, 1, 0, 0, 0, 2064, 342, 1, 0, 0, 0, 2065, 2066, 7, 0, 0, 0, 2066, 2067, 7, 0, 0, 0, 2067, 344, 1, 0, 0, 0, 2068, 2069, 5, 58, 0, 0, 2069, 2070, 5, 58, 0, 0, 2070, 346, 1, 0, 0, 0, 2071, 2072, 5, 46, 0, 0, 2072, 2073, 5, 46, 0, 0, 2073, 348, 1, 0, 0, 0, 2074, 2075, 5, 110, 0, 0, 2075, 2076, 5, 117, 0, 0, 2076, 2077, 5, 108, 0, 0, 2077, 2078, 5, 108, 0, 0, 2078, 350, 1, 0, 0, 0, 2079, 2080, 5, 110, 0, 0, 2080, 2081, 5, 117, 0, 0, 2081, 2082, 5, 108, 0, 0, 2082, 2083, 5, 108, 0, 0, 2083, 2084, 5, 114, 0, 0, 2084, 2085, 5, 101, 0, 0, 2085, 2086, 5, 102, 0, 0, 2086, 352, 1, 0, 0, 0, 2087, 2088, 5, 46, 0, 0, 2088, 2089, 5, 104, 0, 0, 2089, 2090, 5, 97, 0, 0, 2090, 2091, 5, 115, 0, 0, 2091, 2092, 5, 104, 0, 0, 2092, 354, 1, 0, 0, 0, 2093, 2094, 5, 99, 0, 0, 2094, 2095, 5, 104, 0, 0, 2095, 2096, 5, 97, 0, 0, 2096, 2097, 5, 114, 0, 0, 2097, 356, 1, 0, 0, 0, 2098, 2099, 5, 115, 0, 0, 2099, 2100, 5, 116, 0, 0, 2100, 2101, 5, 114, 0, 0, 2101, 2102, 5, 105, 0, 0, 2102, 2103, 5, 110, 0, 0, 2103, 2104, 5, 103, 0, 0, 2104, 358, 1, 0, 0, 0, 2105, 2106, 5, 98, 0, 0, 2106, 2107, 5, 111, 0, 0, 2107, 2108, 5, 111, 0, 0, 2108, 2109, 5, 108, 0, 0, 2109, 360, 1, 0, 0, 0, 2110, 2111, 5, 105, 0, 0, 2111, 2112, 5, 110, 0, 0, 2112, 2113, 5, 116, 0, 0, 2113, 2114, 5, 56, 0, 0, 2114, 362, 1, 0, 0, 0, 2115, 2116, 5, 105, 0, 0, 2116, 2117, 5, 110, 0, 0, 2117, 2118, 5, 116, 0, 0, 2118, 2119, 5, 49, 0, 0, 2119, 2120, 5, 54, 0, 0, 2120, 364, 1, 0, 0, 0, 2121, 2122, 5, 105, 0, 0, 2122, 2123, 5, 110, 0, 0, 2123, 2124, 5, 116, 0, 0, 2124, 2125, 5, 51, 0, 0, 2125, 2126, 5, 50, 0, 0, 2126, 366, 1, 0, 0, 0, 2127, 2128, 5, 105, 0, 0, 2128, 2129, 5, 110, 0, 0, 2129, 2130, 5, 116, 0, 0, 2130, 2131, 5, 54, 0, 0, 2131, 2132, 5, 52, 0, 0, 2132, 368, 1, 0, 0, 0, 2133, 2134, 5, 102, 0, 0, 2134, 2135, 5, 108, 0, 0, 2135, 2136, 5, 111, 0, 0, 2136, 2137, 5, 97, 0, 0, 2137, 2138, 5, 116, 0, 0, 2138, 2139, 5, 51, 0, 0, 2139, 2140, 5, 50, 0, 0, 2140, 370, 1, 0, 0, 0, 2141, 2142, 5, 102, 0, 0, 2142, 2143, 5, 108, 0, 0, 2143, 2144, 5, 111, 0, 0, 2144, 2145, 5, 97, 0, 0, 2145, 2146, 5, 116, 0, 0, 2146, 2147, 5, 54, 0, 0, 2147, 2148, 5, 52, 0, 0, 2148, 372, 1, 0, 0, 0, 2149, 2150, 5, 117, 0, 0, 2150, 2151, 5, 110, 0, 0, 2151, 2152, 5, 115, 0, 0, 2152, 2153, 5, 105, 0, 0, 2153, 2154, 5, 103, 0, 0, 2154, 2155, 5, 110, 0, 0, 2155, 2156, 5, 101, 0, 0, 2156, 2157, 5, 100, 0, 0, 2157, 374, 1, 0, 0, 0, 2158, 2159, 5, 117, 0, 0, 2159, 2160, 5, 105, 0, 0, 2160, 2161, 5, 110, 0, 0, 2161, 2162, 5, 116, 0, 0, 2162, 2167, 5, 56, 0, 0, 2163, 2164, 3, 373, 186, 0, 2164, 2165, 3, 361, 180, 0, 2165, 2167, 1, 0, 0, 0, 2166, 2158, 1, 0, 0, 0, 2166, 2163, 1, 0, 0, 0, 2167, 376, 1, 0, 0, 0, 2168, 2169, 5, 117, 0, 0, 2169, 2170, 5, 105, 0, 0, 2170, 2171, 5, 110, 0, 0, 2171, 2172, 5, 116, 0, 0, 2172, 2173, 5, 49, 0, 0, 2173, 2178, 5, 54, 0, 0, 2174, 2175, 3, 373, 186, 0, 2175, 2176, 3, 363, 181, 0, 2176, 2178, 1, 0, 0, 0, 2177, 2168, 1, 0, 0, 0, 2177, 2174, 1, 0, 0, 0, 2178, 378, 1, 0, 0, 0, 2179, 2180, 5, 117, 0, 0, 2180, 2181, 5, 105, 0, 0, 2181, 2182, 5, 110, 0, 0, 2182, 2183, 5, 116, 0, 0, 2183, 2184, 5, 51, 0, 0, 2184, 2189, 5, 50, 0, 0, 2185, 2186, 3, 373, 186, 0, 2186, 2187, 3, 365, 182, 0, 2187, 2189, 1, 0, 0, 0, 2188, 2179, 1, 0, 0, 0, 2188, 2185, 1, 0, 0, 0, 2189, 380, 1, 0, 0, 0, 2190, 2191, 5, 117, 0, 0, 2191, 2192, 5, 105, 0, 0, 2192, 2193, 5, 110, 0, 0, 2193, 2194, 5, 116, 0, 0, 2194, 2195, 5, 54, 0, 0, 2195, 2200, 5, 52, 0, 0, 2196, 2197, 3, 373, 186, 0, 2197, 2198, 3, 367, 183, 0, 2198, 2200, 1, 0, 0, 0, 2199, 2190, 1, 0, 0, 0, 2199, 2196, 1, 0, 0, 0, 2200, 382, 1, 0, 0, 0, 2201, 2202, 5, 105, 0, 0, 2202, 2203, 5, 110, 0, 0, 2203, 2204, 5, 116, 0, 0, 2204, 384, 1, 0, 0, 0, 2205, 2206, 5, 117, 0, 0, 2206, 2207, 5, 105, 0, 0, 2207, 2208, 5, 110, 0, 0, 2208, 2215, 5, 116, 0, 0, 2209, 2210, 3, 373, 186, 0, 2210, 2211, 5, 105, 0, 0, 2211, 2212, 5, 110, 0, 0, 2212, 2213, 5, 116, 0, 0, 2213, 2215, 1, 0, 0, 0, 2214, 2205, 1, 0, 0, 0, 2214, 2209, 1, 0, 0, 0, 2215, 386, 1, 0, 0, 0, 2216, 2217, 5, 116, 0, 0, 2217, 2218, 5, 121, 0, 0, 2218, 2219, 5, 112, 0, 0, 2219, 2220, 5, 101, 0, 0, 2220, 388, 1, 0, 0, 0, 2221, 2222, 5, 111, 0, 0, 2222, 2223, 5, 98, 0, 0, 2223, 2224, 5, 106, 0, 0, 2224, 2225, 5, 101, 0, 0, 2225, 2226, 5, 99, 0, 0, 2226, 2227, 5, 116, 0, 0, 2227, 390, 1, 0, 0, 0, 2228, 2229, 5, 46, 0, 0, 2229, 2230, 5, 109, 0, 0, 2230, 2231, 5, 111, 0, 0, 2231, 2232, 5, 100, 0, 0, 2232, 2233, 5, 117, 0, 0, 2233, 2234, 5, 108, 0, 0, 2234, 2235, 5, 101, 0, 0, 2235, 392, 1, 0, 0, 0, 2236, 2237, 5, 118, 0, 0, 2237, 2238, 5, 97, 0, 0, 2238, 2239, 5, 108, 0, 0, 2239, 2240, 5, 117, 0, 0, 2240, 2241, 5, 101, 0, 0, 2241, 394, 1, 0, 0, 0, 2242, 2243, 5, 118, 0, 0, 2243, 2244, 5, 97, 0, 0, 2244, 2245, 5, 108, 0, 0, 2245, 2246, 5, 117, 0, 0, 2246, 2247, 5, 101, 0, 0, 2247, 2248, 5, 116, 0, 0, 2248, 2249, 5, 121, 0, 0, 2249, 2250, 5, 112, 0, 0, 2250, 2251, 5, 101, 0, 0, 2251, 396, 1, 0, 0, 0, 2252, 2253, 5, 118, 0, 0, 2253, 2254, 5, 111, 0, 0, 2254, 2255, 5, 105, 0, 0, 2255, 2256, 5, 100, 0, 0, 2256, 398, 1, 0, 0, 0, 2257, 2258, 5, 101, 0, 0, 2258, 2259, 5, 110, 0, 0, 2259, 2260, 5, 117, 0, 0, 2260, 2261, 5, 109, 0, 0, 2261, 400, 1, 0, 0, 0, 2262, 2263, 5, 99, 0, 0, 2263, 2264, 5, 117, 0, 0, 2264, 2265, 5, 115, 0, 0, 2265, 2266, 5, 116, 0, 0, 2266, 2267, 5, 111, 0, 0, 2267, 2268, 5, 109, 0, 0, 2268, 402, 1, 0, 0, 0, 2269, 2270, 5, 102, 0, 0, 2270, 2271, 5, 105, 0, 0, 2271, 2272, 5, 120, 0, 0, 2272, 2273, 5, 101, 0, 0, 2273, 2274, 5, 100, 0, 0, 2274, 404, 1, 0, 0, 0, 2275, 2276, 5, 115, 0, 0, 2276, 2277, 5, 121, 0, 0, 2277, 2278, 5, 115, 0, 0, 2278, 2279, 5, 116, 0, 0, 2279, 2280, 5, 114, 0, 0, 2280, 2281, 5, 105, 0, 0, 2281, 2282, 5, 110, 0, 0, 2282, 2283, 5, 103, 0, 0, 2283, 406, 1, 0, 0, 0, 2284, 2285, 5, 97, 0, 0, 2285, 2286, 5, 114, 0, 0, 2286, 2287, 5, 114, 0, 0, 2287, 2288, 5, 97, 0, 0, 2288, 2289, 5, 121, 0, 0, 2289, 408, 1, 0, 0, 0, 2290, 2291, 5, 118, 0, 0, 2291, 2292, 5, 97, 0, 0, 2292, 2293, 5, 114, 0, 0, 2293, 2294, 5, 105, 0, 0, 2294, 2295, 5, 97, 0, 0, 2295, 2296, 5, 110, 0, 0, 2296, 2297, 5, 116, 0, 0, 2297, 410, 1, 0, 0, 0, 2298, 2299, 5, 99, 0, 0, 2299, 2300, 5, 117, 0, 0, 2300, 2301, 5, 114, 0, 0, 2301, 2302, 5, 114, 0, 0, 2302, 2303, 5, 101, 0, 0, 2303, 2304, 5, 110, 0, 0, 2304, 2305, 5, 99, 0, 0, 2305, 2306, 5, 121, 0, 0, 2306, 412, 1, 0, 0, 0, 2307, 2308, 5, 115, 0, 0, 2308, 2309, 5, 121, 0, 0, 2309, 2310, 5, 115, 0, 0, 2310, 2311, 5, 99, 0, 0, 2311, 2312, 5, 104, 0, 0, 2312, 2313, 5, 97, 0, 0, 2313, 2314, 5, 114, 0, 0, 2314, 414, 1, 0, 0, 0, 2315, 2316, 5, 101, 0, 0, 2316, 2317, 5, 114, 0, 0, 2317, 2318, 5, 114, 0, 0, 2318, 2319, 5, 111, 0, 0, 2319, 2320, 5, 114, 0, 0, 2320, 416, 1, 0, 0, 0, 2321, 2322, 5, 100, 0, 0, 2322, 2323, 5, 101, 0, 0, 2323, 2324, 5, 99, 0, 0, 2324, 2325, 5, 105, 0, 0, 2325, 2326, 5, 109, 0, 0, 2326, 2327, 5, 97, 0, 0, 2327, 2328, 5, 108, 0, 0, 2328, 418, 1, 0, 0, 0, 2329, 2330, 5, 100, 0, 0, 2330, 2331, 5, 97, 0, 0, 2331, 2332, 5, 116, 0, 0, 2332, 2333, 5, 101, 0, 0, 2333, 420, 1, 0, 0, 0, 2334, 2335, 5, 98, 0, 0, 2335, 2336, 5, 115, 0, 0, 2336, 2337, 5, 116, 0, 0, 2337, 2338, 5, 114, 0, 0, 2338, 422, 1, 0, 0, 0, 2339, 2340, 5, 108, 0, 0, 2340, 2341, 5, 112, 0, 0, 2341, 2342, 5, 115, 0, 0, 2342, 2343, 5, 116, 0, 0, 2343, 2344, 5, 114, 0, 0, 2344, 424, 1, 0, 0, 0, 2345, 2346, 5, 108, 0, 0, 2346, 2347, 5, 112, 0, 0, 2347, 2348, 5, 119, 0, 0, 2348, 2349, 5, 115, 0, 0, 2349, 2350, 5, 116, 0, 0, 2350, 2351, 5, 114, 0, 0, 2351, 426, 1, 0, 0, 0, 2352, 2353, 5, 108, 0, 0, 2353, 2354, 5, 112, 0, 0, 2354, 2355, 5, 116, 0, 0, 2355, 2356, 5, 115, 0, 0, 2356, 2357, 5, 116, 0, 0, 2357, 2358, 5, 114, 0, 0, 2358, 428, 1, 0, 0, 0, 2359, 2360, 5, 111, 0, 0, 2360, 2361, 5, 98, 0, 0, 2361, 2362, 5, 106, 0, 0, 2362, 2363, 5, 101, 0, 0, 2363, 2364, 5, 99, 0, 0, 2364, 2365, 5, 116, 0, 0, 2365, 2366, 5, 114, 0, 0, 2366, 2367, 5, 101, 0, 0, 2367, 2368, 5, 102, 0, 0, 2368, 430, 1, 0, 0, 0, 2369, 2370, 5, 105, 0, 0, 2370, 2371, 5, 117, 0, 0, 2371, 2372, 5, 110, 0, 0, 2372, 2373, 5, 107, 0, 0, 2373, 2374, 5, 110, 0, 0, 2374, 2375, 5, 111, 0, 0, 2375, 2376, 5, 119, 0, 0, 2376, 2377, 5, 110, 0, 0, 2377, 432, 1, 0, 0, 0, 2378, 2379, 5, 105, 0, 0, 2379, 2380, 5, 100, 0, 0, 2380, 2381, 5, 105, 0, 0, 2381, 2382, 5, 115, 0, 0, 2382, 2383, 5, 112, 0, 0, 2383, 2384, 5, 97, 0, 0, 2384, 2385, 5, 116, 0, 0, 2385, 2386, 5, 99, 0, 0, 2386, 2387, 5, 104, 0, 0, 2387, 434, 1, 0, 0, 0, 2388, 2389, 5, 115, 0, 0, 2389, 2390, 5, 116, 0, 0, 2390, 2391, 5, 114, 0, 0, 2391, 2392, 5, 117, 0, 0, 2392, 2393, 5, 99, 0, 0, 2393, 2394, 5, 116, 0, 0, 2394, 436, 1, 0, 0, 0, 2395, 2396, 5, 105, 0, 0, 2396, 2397, 5, 110, 0, 0, 2397, 2398, 5, 116, 0, 0, 2398, 2399, 5, 101, 0, 0, 2399, 2400, 5, 114, 0, 0, 2400, 2401, 5, 102, 0, 0, 2401, 2402, 5, 97, 0, 0, 2402, 2403, 5, 99, 0, 0, 2403, 2404, 5, 101, 0, 0, 2404, 438, 1, 0, 0, 0, 2405, 2406, 5, 115, 0, 0, 2406, 2407, 5, 97, 0, 0, 2407, 2408, 5, 102, 0, 0, 2408, 2409, 5, 101, 0, 0, 2409, 2410, 5, 97, 0, 0, 2410, 2411, 5, 114, 0, 0, 2411, 2412, 5, 114, 0, 0, 2412, 2413, 5, 97, 0, 0, 2413, 2414, 5, 121, 0, 0, 2414, 440, 1, 0, 0, 0, 2415, 2416, 5, 110, 0, 0, 2416, 2417, 5, 101, 0, 0, 2417, 2418, 5, 115, 0, 0, 2418, 2419, 5, 116, 0, 0, 2419, 2420, 5, 101, 0, 0, 2420, 2421, 5, 100, 0, 0, 2421, 2422, 1, 0, 0, 0, 2422, 2423, 3, 435, 217, 0, 2423, 442, 1, 0, 0, 0, 2424, 2425, 3, 409, 204, 0, 2425, 2426, 3, 359, 179, 0, 2426, 444, 1, 0, 0, 0, 2427, 2428, 5, 98, 0, 0, 2428, 2429, 5, 121, 0, 0, 2429, 2430, 5, 118, 0, 0, 2430, 2431, 5, 97, 0, 0, 2431, 2432, 5, 108, 0, 0, 2432, 2433, 5, 115, 0, 0, 2433, 2434, 5, 116, 0, 0, 2434, 2435, 5, 114, 0, 0, 2435, 446, 1, 0, 0, 0, 2436, 2437, 5, 97, 0, 0, 2437, 2438, 5, 110, 0, 0, 2438, 2439, 5, 115, 0, 0, 2439, 2440, 5, 105, 0, 0, 2440, 448, 1, 0, 0, 0, 2441, 2442, 3, 447, 223, 0, 2442, 2443, 3, 421, 210, 0, 2443, 450, 1, 0, 0, 0, 2444, 2445, 5, 116, 0, 0, 2445, 2446, 5, 98, 0, 0, 2446, 2447, 5, 115, 0, 0, 2447, 2448, 5, 116, 0, 0, 2448, 2449, 5, 114, 0, 0, 2449, 452, 1, 0, 0, 0, 2450, 2451, 5, 109, 0, 0, 2451, 2452, 5, 101, 0, 0, 2452, 2453, 5, 116, 0, 0, 2453, 2454, 5, 104, 0, 0, 2454, 2455, 5, 111, 0, 0, 2455, 2456, 5, 100, 0, 0, 2456, 454, 1, 0, 0, 0, 2457, 2458, 5, 97, 0, 0, 2458, 2459, 5, 110, 0, 0, 2459, 2460, 5, 121, 0, 0, 2460, 456, 1, 0, 0, 0, 2461, 2462, 5, 108, 0, 0, 2462, 2463, 5, 112, 0, 0, 2463, 2464, 5, 115, 0, 0, 2464, 2465, 5, 116, 0, 0, 2465, 2466, 5, 114, 0, 0, 2466, 2467, 5, 117, 0, 0, 2467, 2468, 5, 99, 0, 0, 2468, 2469, 5, 116, 0, 0, 2469, 458, 1, 0, 0, 0, 2470, 2471, 5, 118, 0, 0, 2471, 2472, 5, 101, 0, 0, 2472, 2473, 5, 99, 0, 0, 2473, 2474, 5, 116, 0, 0, 2474, 2475, 5, 111, 0, 0, 2475, 2476, 5, 114, 0, 0, 2476, 460, 1, 0, 0, 0, 2477, 2478, 5, 104, 0, 0, 2478, 2479, 5, 114, 0, 0, 2479, 2480, 5, 101, 0, 0, 2480, 2481, 5, 115, 0, 0, 2481, 2482, 5, 117, 0, 0, 2482, 2483, 5, 108, 0, 0, 2483, 2484, 5, 116, 0, 0, 2484, 462, 1, 0, 0, 0, 2485, 2486, 5, 99, 0, 0, 2486, 2487, 5, 97, 0, 0, 2487, 2488, 5, 114, 0, 0, 2488, 2489, 5, 114, 0, 0, 2489, 2490, 5, 97, 0, 0, 2490, 2491, 5, 121, 0, 0, 2491, 464, 1, 0, 0, 0, 2492, 2493, 5, 117, 0, 0, 2493, 2494, 5, 115, 0, 0, 2494, 2495, 5, 101, 0, 0, 2495, 2496, 5, 114, 0, 0, 2496, 2497, 5, 100, 0, 0, 2497, 2498, 5, 101, 0, 0, 2498, 2499, 5, 102, 0, 0, 2499, 2500, 5, 105, 0, 0, 2500, 2501, 5, 110, 0, 0, 2501, 2502, 5, 101, 0, 0, 2502, 2503, 5, 100, 0, 0, 2503, 466, 1, 0, 0, 0, 2504, 2505, 5, 114, 0, 0, 2505, 2506, 5, 101, 0, 0, 2506, 2507, 5, 99, 0, 0, 2507, 2508, 5, 111, 0, 0, 2508, 2509, 5, 114, 0, 0, 2509, 2510, 5, 100, 0, 0, 2510, 468, 1, 0, 0, 0, 2511, 2512, 5, 102, 0, 0, 2512, 2513, 5, 105, 0, 0, 2513, 2514, 5, 108, 0, 0, 2514, 2515, 5, 101, 0, 0, 2515, 2516, 5, 116, 0, 0, 2516, 2517, 5, 105, 0, 0, 2517, 2518, 5, 109, 0, 0, 2518, 2519, 5, 101, 0, 0, 2519, 470, 1, 0, 0, 0, 2520, 2521, 5, 98, 0, 0, 2521, 2522, 5, 108, 0, 0, 2522, 2523, 5, 111, 0, 0, 2523, 2524, 5, 98, 0, 0, 2524, 472, 1, 0, 0, 0, 2525, 2526, 5, 115, 0, 0, 2526, 2527, 5, 116, 0, 0, 2527, 2528, 5, 114, 0, 0, 2528, 2529, 5, 101, 0, 0, 2529, 2530, 5, 97, 0, 0, 2530, 2531, 5, 109, 0, 0, 2531, 474, 1, 0, 0, 0, 2532, 2533, 5, 115, 0, 0, 2533, 2534, 5, 116, 0, 0, 2534, 2535, 5, 111, 0, 0, 2535, 2536, 5, 114, 0, 0, 2536, 2537, 5, 97, 0, 0, 2537, 2538, 5, 103, 0, 0, 2538, 2539, 5, 101, 0, 0, 2539, 476, 1, 0, 0, 0, 2540, 2541, 5, 115, 0, 0, 2541, 2542, 5, 116, 0, 0, 2542, 2543, 5, 114, 0, 0, 2543, 2544, 5, 101, 0, 0, 2544, 2545, 5, 97, 0, 0, 2545, 2546, 5, 109, 0, 0, 2546, 2547, 5, 101, 0, 0, 2547, 2548, 5, 100, 0, 0, 2548, 2549, 5, 95, 0, 0, 2549, 2550, 5, 111, 0, 0, 2550, 2551, 5, 98, 0, 0, 2551, 2552, 5, 106, 0, 0, 2552, 2553, 5, 101, 0, 0, 2553, 2554, 5, 99, 0, 0, 2554, 2555, 5, 116, 0, 0, 2555, 478, 1, 0, 0, 0, 2556, 2557, 5, 115, 0, 0, 2557, 2558, 5, 116, 0, 0, 2558, 2559, 5, 111, 0, 0, 2559, 2560, 5, 114, 0, 0, 2560, 2561, 5, 101, 0, 0, 2561, 2562, 5, 100, 0, 0, 2562, 2563, 5, 95, 0, 0, 2563, 2564, 5, 111, 0, 0, 2564, 2565, 5, 98, 0, 0, 2565, 2566, 5, 106, 0, 0, 2566, 2567, 5, 101, 0, 0, 2567, 2568, 5, 99, 0, 0, 2568, 2569, 5, 116, 0, 0, 2569, 480, 1, 0, 0, 0, 2570, 2571, 5, 98, 0, 0, 2571, 2572, 5, 108, 0, 0, 2572, 2573, 5, 111, 0, 0, 2573, 2574, 5, 98, 0, 0, 2574, 2575, 5, 95, 0, 0, 2575, 2576, 5, 111, 0, 0, 2576, 2577, 5, 98, 0, 0, 2577, 2578, 5, 106, 0, 0, 2578, 2579, 5, 101, 0, 0, 2579, 2580, 5, 99, 0, 0, 2580, 2581, 5, 116, 0, 0, 2581, 482, 1, 0, 0, 0, 2582, 2583, 5, 99, 0, 0, 2583, 2584, 5, 102, 0, 0, 2584, 484, 1, 0, 0, 0, 2585, 2586, 5, 99, 0, 0, 2586, 2587, 5, 108, 0, 0, 2587, 2588, 5, 115, 0, 0, 2588, 2589, 5, 105, 0, 0, 2589, 2590, 5, 100, 0, 0, 2590, 486, 1, 0, 0, 0, 2591, 2592, 5, 105, 0, 0, 2592, 2593, 5, 110, 0, 0, 2593, 2594, 5, 115, 0, 0, 2594, 2595, 5, 116, 0, 0, 2595, 2596, 5, 97, 0, 0, 2596, 2597, 5, 110, 0, 0, 2597, 2598, 5, 99, 0, 0, 2598, 2599, 5, 101, 0, 0, 2599, 488, 1, 0, 0, 0, 2600, 2601, 5, 101, 0, 0, 2601, 2602, 5, 120, 0, 0, 2602, 2603, 5, 112, 0, 0, 2603, 2604, 5, 108, 0, 0, 2604, 2605, 5, 105, 0, 0, 2605, 2606, 5, 99, 0, 0, 2606, 2607, 5, 105, 0, 0, 2607, 2608, 5, 116, 0, 0, 2608, 490, 1, 0, 0, 0, 2609, 2610, 5, 100, 0, 0, 2610, 2611, 5, 101, 0, 0, 2611, 2612, 5, 102, 0, 0, 2612, 2613, 5, 97, 0, 0, 2613, 2614, 5, 117, 0, 0, 2614, 2615, 5, 108, 0, 0, 2615, 2616, 5, 116, 0, 0, 2616, 492, 1, 0, 0, 0, 2617, 2618, 5, 118, 0, 0, 2618, 2619, 5, 97, 0, 0, 2619, 2620, 5, 114, 0, 0, 2620, 2621, 5, 97, 0, 0, 2621, 2622, 5, 114, 0, 0, 2622, 2623, 5, 103, 0, 0, 2623, 494, 1, 0, 0, 0, 2624, 2625, 5, 117, 0, 0, 2625, 2626, 5, 110, 0, 0, 2626, 2627, 5, 109, 0, 0, 2627, 2628, 5, 97, 0, 0, 2628, 2629, 5, 110, 0, 0, 2629, 2630, 5, 97, 0, 0, 2630, 2631, 5, 103, 0, 0, 2631, 2632, 5, 101, 0, 0, 2632, 2633, 5, 100, 0, 0, 2633, 496, 1, 0, 0, 0, 2634, 2635, 5, 99, 0, 0, 2635, 2636, 5, 100, 0, 0, 2636, 2637, 5, 101, 0, 0, 2637, 2638, 5, 99, 0, 0, 2638, 2639, 5, 108, 0, 0, 2639, 498, 1, 0, 0, 0, 2640, 2641, 5, 115, 0, 0, 2641, 2642, 5, 116, 0, 0, 2642, 2643, 5, 100, 0, 0, 2643, 2644, 5, 99, 0, 0, 2644, 2645, 5, 97, 0, 0, 2645, 2646, 5, 108, 0, 0, 2646, 2647, 5, 108, 0, 0, 2647, 500, 1, 0, 0, 0, 2648, 2649, 5, 116, 0, 0, 2649, 2650, 5, 104, 0, 0, 2650, 2651, 5, 105, 0, 0, 2651, 2652, 5, 115, 0, 0, 2652, 2653, 5, 99, 0, 0, 2653, 2654, 5, 97, 0, 0, 2654, 2655, 5, 108, 0, 0, 2655, 2656, 5, 108, 0, 0, 2656, 502, 1, 0, 0, 0, 2657, 2658, 5, 102, 0, 0, 2658, 2659, 5, 97, 0, 0, 2659, 2660, 5, 115, 0, 0, 2660, 2661, 5, 116, 0, 0, 2661, 2662, 5, 99, 0, 0, 2662, 2663, 5, 97, 0, 0, 2663, 2664, 5, 108, 0, 0, 2664, 2665, 5, 108, 0, 0, 2665, 504, 1, 0, 0, 0, 2666, 2667, 5, 33, 0, 0, 2667, 506, 1, 0, 0, 0, 2668, 2669, 5, 33, 0, 0, 2669, 2670, 5, 33, 0, 0, 2670, 508, 1, 0, 0, 0, 2671, 2672, 5, 116, 0, 0, 2672, 2673, 5, 121, 0, 0, 2673, 2674, 5, 112, 0, 0, 2674, 2675, 5, 101, 0, 0, 2675, 2676, 5, 100, 0, 0, 2676, 2677, 5, 114, 0, 0, 2677, 2678, 5, 101, 0, 0, 2678, 2679, 5, 102, 0, 0, 2679, 510, 1, 0, 0, 0, 2680, 2681, 5, 110, 0, 0, 2681, 2682, 5, 97, 0, 0, 2682, 2683, 5, 116, 0, 0, 2683, 2684, 5, 105, 0, 0, 2684, 2685, 5, 118, 0, 0, 2685, 2686, 5, 101, 0, 0, 2686, 2687, 1, 0, 0, 0, 2687, 2688, 5, 105, 0, 0, 2688, 2689, 5, 110, 0, 0, 2689, 2690, 5, 116, 0, 0, 2690, 512, 1, 0, 0, 0, 2691, 2692, 5, 110, 0, 0, 2692, 2693, 5, 97, 0, 0, 2693, 2694, 5, 116, 0, 0, 2694, 2695, 5, 105, 0, 0, 2695, 2696, 5, 118, 0, 0, 2696, 2697, 5, 101, 0, 0, 2697, 2698, 1, 0, 0, 0, 2698, 2699, 5, 117, 0, 0, 2699, 2700, 5, 110, 0, 0, 2700, 2701, 5, 115, 0, 0, 2701, 2702, 5, 105, 0, 0, 2702, 2703, 5, 103, 0, 0, 2703, 2704, 5, 110, 0, 0, 2704, 2705, 5, 101, 0, 0, 2705, 2706, 5, 100, 0, 0, 2706, 2707, 1, 0, 0, 0, 2707, 2708, 5, 105, 0, 0, 2708, 2709, 5, 110, 0, 0, 2709, 2722, 5, 116, 0, 0, 2710, 2711, 5, 110, 0, 0, 2711, 2712, 5, 97, 0, 0, 2712, 2713, 5, 116, 0, 0, 2713, 2714, 5, 105, 0, 0, 2714, 2715, 5, 118, 0, 0, 2715, 2716, 5, 101, 0, 0, 2716, 2717, 1, 0, 0, 0, 2717, 2718, 5, 117, 0, 0, 2718, 2719, 5, 105, 0, 0, 2719, 2720, 5, 110, 0, 0, 2720, 2722, 5, 116, 0, 0, 2721, 2691, 1, 0, 0, 0, 2721, 2710, 1, 0, 0, 0, 2722, 514, 1, 0, 0, 0, 2723, 2724, 5, 46, 0, 0, 2724, 2725, 5, 112, 0, 0, 2725, 2726, 5, 97, 0, 0, 2726, 2727, 5, 114, 0, 0, 2727, 2728, 5, 97, 0, 0, 2728, 2729, 5, 109, 0, 0, 2729, 516, 1, 0, 0, 0, 2730, 2731, 5, 99, 0, 0, 2731, 2732, 5, 111, 0, 0, 2732, 2733, 5, 110, 0, 0, 2733, 2734, 5, 115, 0, 0, 2734, 2735, 5, 116, 0, 0, 2735, 2736, 5, 114, 0, 0, 2736, 2737, 5, 97, 0, 0, 2737, 2738, 5, 105, 0, 0, 2738, 2739, 5, 110, 0, 0, 2739, 2740, 5, 116, 0, 0, 2740, 518, 1, 0, 0, 0, 2741, 2742, 5, 46, 0, 0, 2742, 2743, 5, 116, 0, 0, 2743, 2744, 5, 104, 0, 0, 2744, 2745, 5, 105, 0, 0, 2745, 2746, 5, 115, 0, 0, 2746, 520, 1, 0, 0, 0, 2747, 2748, 5, 46, 0, 0, 2748, 2749, 5, 98, 0, 0, 2749, 2750, 5, 97, 0, 0, 2750, 2751, 5, 115, 0, 0, 2751, 2752, 5, 101, 0, 0, 2752, 522, 1, 0, 0, 0, 2753, 2754, 5, 46, 0, 0, 2754, 2755, 5, 110, 0, 0, 2755, 2756, 5, 101, 0, 0, 2756, 2757, 5, 115, 0, 0, 2757, 2758, 5, 116, 0, 0, 2758, 2759, 5, 101, 0, 0, 2759, 2760, 5, 114, 0, 0, 2760, 524, 1, 0, 0, 0, 2761, 2762, 5, 38, 0, 0, 2762, 526, 1, 0, 0, 0, 2763, 2764, 5, 91, 0, 0, 2764, 2765, 5, 93, 0, 0, 2765, 528, 1, 0, 0, 0, 2766, 2767, 5, 42, 0, 0, 2767, 530, 1, 0, 0, 0, 2768, 2774, 5, 34, 0, 0, 2769, 2773, 8, 3, 0, 0, 2770, 2771, 5, 92, 0, 0, 2771, 2773, 7, 3, 0, 0, 2772, 2769, 1, 0, 0, 0, 2772, 2770, 1, 0, 0, 0, 2773, 2776, 1, 0, 0, 0, 2774, 2772, 1, 0, 0, 0, 2774, 2775, 1, 0, 0, 0, 2775, 2777, 1, 0, 0, 0, 2776, 2774, 1, 0, 0, 0, 2777, 2778, 5, 34, 0, 0, 2778, 532, 1, 0, 0, 0, 2779, 2785, 5, 39, 0, 0, 2780, 2784, 8, 4, 0, 0, 2781, 2782, 5, 92, 0, 0, 2782, 2784, 7, 4, 0, 0, 2783, 2780, 1, 0, 0, 0, 2783, 2781, 1, 0, 0, 0, 2784, 2787, 1, 0, 0, 0, 2785, 2783, 1, 0, 0, 0, 2785, 2786, 1, 0, 0, 0, 2786, 2788, 1, 0, 0, 0, 2787, 2785, 1, 0, 0, 0, 2788, 2789, 5, 39, 0, 0, 2789, 534, 1, 0, 0, 0, 2790, 2791, 5, 46, 0, 0, 2791, 536, 1, 0, 0, 0, 2792, 2793, 5, 43, 0, 0, 2793, 538, 1, 0, 0, 0, 2794, 2795, 5, 35, 0, 0, 2795, 2796, 5, 100, 0, 0, 2796, 2797, 5, 101, 0, 0, 2797, 2798, 5, 102, 0, 0, 2798, 2799, 5, 105, 0, 0, 2799, 2800, 5, 110, 0, 0, 2800, 2801, 5, 101, 0, 0, 2801, 540, 1, 0, 0, 0, 2802, 2803, 5, 35, 0, 0, 2803, 2804, 5, 117, 0, 0, 2804, 2805, 5, 110, 0, 0, 2805, 2806, 5, 100, 0, 0, 2806, 2807, 5, 101, 0, 0, 2807, 2808, 5, 102, 0, 0, 2808, 542, 1, 0, 0, 0, 2809, 2810, 5, 35, 0, 0, 2810, 2811, 5, 105, 0, 0, 2811, 2812, 5, 102, 0, 0, 2812, 2813, 5, 100, 0, 0, 2813, 2814, 5, 101, 0, 0, 2814, 2815, 5, 102, 0, 0, 2815, 544, 1, 0, 0, 0, 2816, 2817, 5, 35, 0, 0, 2817, 2818, 5, 105, 0, 0, 2818, 2819, 5, 102, 0, 0, 2819, 2820, 5, 110, 0, 0, 2820, 2821, 5, 100, 0, 0, 2821, 2822, 5, 101, 0, 0, 2822, 2823, 5, 102, 0, 0, 2823, 546, 1, 0, 0, 0, 2824, 2825, 5, 35, 0, 0, 2825, 2826, 5, 101, 0, 0, 2826, 2827, 5, 108, 0, 0, 2827, 2828, 5, 115, 0, 0, 2828, 2829, 5, 101, 0, 0, 2829, 548, 1, 0, 0, 0, 2830, 2831, 5, 35, 0, 0, 2831, 2832, 5, 101, 0, 0, 2832, 2833, 5, 110, 0, 0, 2833, 2834, 5, 100, 0, 0, 2834, 2835, 5, 105, 0, 0, 2835, 2836, 5, 102, 0, 0, 2836, 550, 1, 0, 0, 0, 2837, 2838, 5, 35, 0, 0, 2838, 2839, 5, 105, 0, 0, 2839, 2840, 5, 110, 0, 0, 2840, 2841, 5, 99, 0, 0, 2841, 2842, 5, 108, 0, 0, 2842, 2843, 5, 117, 0, 0, 2843, 2844, 5, 100, 0, 0, 2844, 2845, 5, 101, 0, 0, 2845, 552, 1, 0, 0, 0, 2846, 2847, 5, 46, 0, 0, 2847, 2848, 5, 109, 0, 0, 2848, 2849, 5, 114, 0, 0, 2849, 2850, 5, 101, 0, 0, 2850, 2851, 5, 115, 0, 0, 2851, 2852, 5, 111, 0, 0, 2852, 2853, 5, 117, 0, 0, 2853, 2854, 5, 114, 0, 0, 2854, 2855, 5, 99, 0, 0, 2855, 2856, 5, 101, 0, 0, 2856, 554, 1, 0, 0, 0, 2857, 2858, 5, 110, 0, 0, 2858, 2859, 5, 111, 0, 0, 2859, 4006, 5, 112, 0, 0, 2860, 2861, 5, 98, 0, 0, 2861, 2862, 5, 114, 0, 0, 2862, 2863, 5, 101, 0, 0, 2863, 2864, 5, 97, 0, 0, 2864, 4006, 5, 107, 0, 0, 2865, 2866, 5, 108, 0, 0, 2866, 2867, 5, 100, 0, 0, 2867, 2868, 5, 97, 0, 0, 2868, 2869, 5, 114, 0, 0, 2869, 2870, 5, 103, 0, 0, 2870, 2871, 5, 46, 0, 0, 2871, 4006, 5, 48, 0, 0, 2872, 2873, 5, 108, 0, 0, 2873, 2874, 5, 100, 0, 0, 2874, 2875, 5, 97, 0, 0, 2875, 2876, 5, 114, 0, 0, 2876, 2877, 5, 103, 0, 0, 2877, 2878, 5, 46, 0, 0, 2878, 4006, 5, 49, 0, 0, 2879, 2880, 5, 108, 0, 0, 2880, 2881, 5, 100, 0, 0, 2881, 2882, 5, 97, 0, 0, 2882, 2883, 5, 114, 0, 0, 2883, 2884, 5, 103, 0, 0, 2884, 2885, 5, 46, 0, 0, 2885, 4006, 5, 50, 0, 0, 2886, 2887, 5, 108, 0, 0, 2887, 2888, 5, 100, 0, 0, 2888, 2889, 5, 97, 0, 0, 2889, 2890, 5, 114, 0, 0, 2890, 2891, 5, 103, 0, 0, 2891, 2892, 5, 46, 0, 0, 2892, 4006, 5, 51, 0, 0, 2893, 2894, 5, 108, 0, 0, 2894, 2895, 5, 100, 0, 0, 2895, 2896, 5, 108, 0, 0, 2896, 2897, 5, 111, 0, 0, 2897, 2898, 5, 99, 0, 0, 2898, 2899, 5, 46, 0, 0, 2899, 4006, 5, 48, 0, 0, 2900, 2901, 5, 108, 0, 0, 2901, 2902, 5, 100, 0, 0, 2902, 2903, 5, 108, 0, 0, 2903, 2904, 5, 111, 0, 0, 2904, 2905, 5, 99, 0, 0, 2905, 2906, 5, 46, 0, 0, 2906, 4006, 5, 49, 0, 0, 2907, 2908, 5, 108, 0, 0, 2908, 2909, 5, 100, 0, 0, 2909, 2910, 5, 108, 0, 0, 2910, 2911, 5, 111, 0, 0, 2911, 2912, 5, 99, 0, 0, 2912, 2913, 5, 46, 0, 0, 2913, 4006, 5, 50, 0, 0, 2914, 2915, 5, 108, 0, 0, 2915, 2916, 5, 100, 0, 0, 2916, 2917, 5, 108, 0, 0, 2917, 2918, 5, 111, 0, 0, 2918, 2919, 5, 99, 0, 0, 2919, 2920, 5, 46, 0, 0, 2920, 4006, 5, 51, 0, 0, 2921, 2922, 5, 115, 0, 0, 2922, 2923, 5, 116, 0, 0, 2923, 2924, 5, 108, 0, 0, 2924, 2925, 5, 111, 0, 0, 2925, 2926, 5, 99, 0, 0, 2926, 2927, 5, 46, 0, 0, 2927, 4006, 5, 48, 0, 0, 2928, 2929, 5, 115, 0, 0, 2929, 2930, 5, 116, 0, 0, 2930, 2931, 5, 108, 0, 0, 2931, 2932, 5, 111, 0, 0, 2932, 2933, 5, 99, 0, 0, 2933, 2934, 5, 46, 0, 0, 2934, 4006, 5, 49, 0, 0, 2935, 2936, 5, 115, 0, 0, 2936, 2937, 5, 116, 0, 0, 2937, 2938, 5, 108, 0, 0, 2938, 2939, 5, 111, 0, 0, 2939, 2940, 5, 99, 0, 0, 2940, 2941, 5, 46, 0, 0, 2941, 4006, 5, 50, 0, 0, 2942, 2943, 5, 115, 0, 0, 2943, 2944, 5, 116, 0, 0, 2944, 2945, 5, 108, 0, 0, 2945, 2946, 5, 111, 0, 0, 2946, 2947, 5, 99, 0, 0, 2947, 2948, 5, 46, 0, 0, 2948, 4006, 5, 51, 0, 0, 2949, 2950, 5, 108, 0, 0, 2950, 2951, 5, 100, 0, 0, 2951, 2952, 5, 110, 0, 0, 2952, 2953, 5, 117, 0, 0, 2953, 2954, 5, 108, 0, 0, 2954, 4006, 5, 108, 0, 0, 2955, 2956, 5, 108, 0, 0, 2956, 2957, 5, 100, 0, 0, 2957, 2958, 5, 99, 0, 0, 2958, 2959, 5, 46, 0, 0, 2959, 2960, 5, 105, 0, 0, 2960, 2961, 5, 52, 0, 0, 2961, 2962, 5, 46, 0, 0, 2962, 2963, 5, 109, 0, 0, 2963, 4006, 5, 49, 0, 0, 2964, 2965, 5, 108, 0, 0, 2965, 2966, 5, 100, 0, 0, 2966, 2967, 5, 99, 0, 0, 2967, 2968, 5, 46, 0, 0, 2968, 2969, 5, 105, 0, 0, 2969, 2970, 5, 52, 0, 0, 2970, 2971, 5, 46, 0, 0, 2971, 4006, 5, 48, 0, 0, 2972, 2973, 5, 108, 0, 0, 2973, 2974, 5, 100, 0, 0, 2974, 2975, 5, 99, 0, 0, 2975, 2976, 5, 46, 0, 0, 2976, 2977, 5, 105, 0, 0, 2977, 2978, 5, 52, 0, 0, 2978, 2979, 5, 46, 0, 0, 2979, 4006, 5, 49, 0, 0, 2980, 2981, 5, 108, 0, 0, 2981, 2982, 5, 100, 0, 0, 2982, 2983, 5, 99, 0, 0, 2983, 2984, 5, 46, 0, 0, 2984, 2985, 5, 105, 0, 0, 2985, 2986, 5, 52, 0, 0, 2986, 2987, 5, 46, 0, 0, 2987, 4006, 5, 50, 0, 0, 2988, 2989, 5, 108, 0, 0, 2989, 2990, 5, 100, 0, 0, 2990, 2991, 5, 99, 0, 0, 2991, 2992, 5, 46, 0, 0, 2992, 2993, 5, 105, 0, 0, 2993, 2994, 5, 52, 0, 0, 2994, 2995, 5, 46, 0, 0, 2995, 4006, 5, 51, 0, 0, 2996, 2997, 5, 108, 0, 0, 2997, 2998, 5, 100, 0, 0, 2998, 2999, 5, 99, 0, 0, 2999, 3000, 5, 46, 0, 0, 3000, 3001, 5, 105, 0, 0, 3001, 3002, 5, 52, 0, 0, 3002, 3003, 5, 46, 0, 0, 3003, 4006, 5, 52, 0, 0, 3004, 3005, 5, 108, 0, 0, 3005, 3006, 5, 100, 0, 0, 3006, 3007, 5, 99, 0, 0, 3007, 3008, 5, 46, 0, 0, 3008, 3009, 5, 105, 0, 0, 3009, 3010, 5, 52, 0, 0, 3010, 3011, 5, 46, 0, 0, 3011, 4006, 5, 53, 0, 0, 3012, 3013, 5, 108, 0, 0, 3013, 3014, 5, 100, 0, 0, 3014, 3015, 5, 99, 0, 0, 3015, 3016, 5, 46, 0, 0, 3016, 3017, 5, 105, 0, 0, 3017, 3018, 5, 52, 0, 0, 3018, 3019, 5, 46, 0, 0, 3019, 4006, 5, 54, 0, 0, 3020, 3021, 5, 108, 0, 0, 3021, 3022, 5, 100, 0, 0, 3022, 3023, 5, 99, 0, 0, 3023, 3024, 5, 46, 0, 0, 3024, 3025, 5, 105, 0, 0, 3025, 3026, 5, 52, 0, 0, 3026, 3027, 5, 46, 0, 0, 3027, 4006, 5, 55, 0, 0, 3028, 3029, 5, 108, 0, 0, 3029, 3030, 5, 100, 0, 0, 3030, 3031, 5, 99, 0, 0, 3031, 3032, 5, 46, 0, 0, 3032, 3033, 5, 105, 0, 0, 3033, 3034, 5, 52, 0, 0, 3034, 3035, 5, 46, 0, 0, 3035, 4006, 5, 56, 0, 0, 3036, 3037, 5, 100, 0, 0, 3037, 3038, 5, 117, 0, 0, 3038, 4006, 5, 112, 0, 0, 3039, 3040, 5, 112, 0, 0, 3040, 3041, 5, 111, 0, 0, 3041, 4006, 5, 112, 0, 0, 3042, 3043, 5, 114, 0, 0, 3043, 3044, 5, 101, 0, 0, 3044, 4006, 5, 116, 0, 0, 3045, 3046, 5, 108, 0, 0, 3046, 3047, 5, 100, 0, 0, 3047, 3048, 5, 105, 0, 0, 3048, 3049, 5, 110, 0, 0, 3049, 3050, 5, 100, 0, 0, 3050, 3051, 5, 46, 0, 0, 3051, 3052, 5, 105, 0, 0, 3052, 4006, 5, 49, 0, 0, 3053, 3054, 5, 108, 0, 0, 3054, 3055, 5, 100, 0, 0, 3055, 3056, 5, 105, 0, 0, 3056, 3057, 5, 110, 0, 0, 3057, 3058, 5, 100, 0, 0, 3058, 3059, 5, 46, 0, 0, 3059, 3060, 5, 117, 0, 0, 3060, 4006, 5, 49, 0, 0, 3061, 3062, 5, 108, 0, 0, 3062, 3063, 5, 100, 0, 0, 3063, 3064, 5, 105, 0, 0, 3064, 3065, 5, 110, 0, 0, 3065, 3066, 5, 100, 0, 0, 3066, 3067, 5, 46, 0, 0, 3067, 3068, 5, 105, 0, 0, 3068, 4006, 5, 50, 0, 0, 3069, 3070, 5, 108, 0, 0, 3070, 3071, 5, 100, 0, 0, 3071, 3072, 5, 105, 0, 0, 3072, 3073, 5, 110, 0, 0, 3073, 3074, 5, 100, 0, 0, 3074, 3075, 5, 46, 0, 0, 3075, 3076, 5, 117, 0, 0, 3076, 4006, 5, 50, 0, 0, 3077, 3078, 5, 108, 0, 0, 3078, 3079, 5, 100, 0, 0, 3079, 3080, 5, 105, 0, 0, 3080, 3081, 5, 110, 0, 0, 3081, 3082, 5, 100, 0, 0, 3082, 3083, 5, 46, 0, 0, 3083, 3084, 5, 105, 0, 0, 3084, 4006, 5, 52, 0, 0, 3085, 3086, 5, 108, 0, 0, 3086, 3087, 5, 100, 0, 0, 3087, 3088, 5, 105, 0, 0, 3088, 3089, 5, 110, 0, 0, 3089, 3090, 5, 100, 0, 0, 3090, 3091, 5, 46, 0, 0, 3091, 3092, 5, 117, 0, 0, 3092, 4006, 5, 52, 0, 0, 3093, 3094, 5, 108, 0, 0, 3094, 3095, 5, 100, 0, 0, 3095, 3096, 5, 105, 0, 0, 3096, 3097, 5, 110, 0, 0, 3097, 3098, 5, 100, 0, 0, 3098, 3099, 5, 46, 0, 0, 3099, 3100, 5, 105, 0, 0, 3100, 4006, 5, 56, 0, 0, 3101, 3102, 5, 108, 0, 0, 3102, 3103, 5, 100, 0, 0, 3103, 3104, 5, 105, 0, 0, 3104, 3105, 5, 110, 0, 0, 3105, 3106, 5, 100, 0, 0, 3106, 3107, 5, 46, 0, 0, 3107, 4006, 5, 105, 0, 0, 3108, 3109, 5, 108, 0, 0, 3109, 3110, 5, 100, 0, 0, 3110, 3111, 5, 105, 0, 0, 3111, 3112, 5, 110, 0, 0, 3112, 3113, 5, 100, 0, 0, 3113, 3114, 5, 46, 0, 0, 3114, 3115, 5, 114, 0, 0, 3115, 4006, 5, 52, 0, 0, 3116, 3117, 5, 108, 0, 0, 3117, 3118, 5, 100, 0, 0, 3118, 3119, 5, 105, 0, 0, 3119, 3120, 5, 110, 0, 0, 3120, 3121, 5, 100, 0, 0, 3121, 3122, 5, 46, 0, 0, 3122, 3123, 5, 114, 0, 0, 3123, 4006, 5, 56, 0, 0, 3124, 3125, 5, 108, 0, 0, 3125, 3126, 5, 100, 0, 0, 3126, 3127, 5, 105, 0, 0, 3127, 3128, 5, 110, 0, 0, 3128, 3129, 5, 100, 0, 0, 3129, 3130, 5, 46, 0, 0, 3130, 3131, 5, 114, 0, 0, 3131, 3132, 5, 101, 0, 0, 3132, 4006, 5, 102, 0, 0, 3133, 3134, 5, 115, 0, 0, 3134, 3135, 5, 116, 0, 0, 3135, 3136, 5, 105, 0, 0, 3136, 3137, 5, 110, 0, 0, 3137, 3138, 5, 100, 0, 0, 3138, 3139, 5, 46, 0, 0, 3139, 3140, 5, 114, 0, 0, 3140, 3141, 5, 101, 0, 0, 3141, 4006, 5, 102, 0, 0, 3142, 3143, 5, 115, 0, 0, 3143, 3144, 5, 116, 0, 0, 3144, 3145, 5, 105, 0, 0, 3145, 3146, 5, 110, 0, 0, 3146, 3147, 5, 100, 0, 0, 3147, 3148, 5, 46, 0, 0, 3148, 3149, 5, 105, 0, 0, 3149, 4006, 5, 49, 0, 0, 3150, 3151, 5, 115, 0, 0, 3151, 3152, 5, 116, 0, 0, 3152, 3153, 5, 105, 0, 0, 3153, 3154, 5, 110, 0, 0, 3154, 3155, 5, 100, 0, 0, 3155, 3156, 5, 46, 0, 0, 3156, 3157, 5, 105, 0, 0, 3157, 4006, 5, 50, 0, 0, 3158, 3159, 5, 115, 0, 0, 3159, 3160, 5, 116, 0, 0, 3160, 3161, 5, 105, 0, 0, 3161, 3162, 5, 110, 0, 0, 3162, 3163, 5, 100, 0, 0, 3163, 3164, 5, 46, 0, 0, 3164, 3165, 5, 105, 0, 0, 3165, 4006, 5, 52, 0, 0, 3166, 3167, 5, 115, 0, 0, 3167, 3168, 5, 116, 0, 0, 3168, 3169, 5, 105, 0, 0, 3169, 3170, 5, 110, 0, 0, 3170, 3171, 5, 100, 0, 0, 3171, 3172, 5, 46, 0, 0, 3172, 3173, 5, 105, 0, 0, 3173, 4006, 5, 56, 0, 0, 3174, 3175, 5, 115, 0, 0, 3175, 3176, 5, 116, 0, 0, 3176, 3177, 5, 105, 0, 0, 3177, 3178, 5, 110, 0, 0, 3178, 3179, 5, 100, 0, 0, 3179, 3180, 5, 46, 0, 0, 3180, 3181, 5, 114, 0, 0, 3181, 4006, 5, 52, 0, 0, 3182, 3183, 5, 115, 0, 0, 3183, 3184, 5, 116, 0, 0, 3184, 3185, 5, 105, 0, 0, 3185, 3186, 5, 110, 0, 0, 3186, 3187, 5, 100, 0, 0, 3187, 3188, 5, 46, 0, 0, 3188, 3189, 5, 114, 0, 0, 3189, 4006, 5, 56, 0, 0, 3190, 3191, 5, 97, 0, 0, 3191, 3192, 5, 100, 0, 0, 3192, 4006, 5, 100, 0, 0, 3193, 3194, 5, 115, 0, 0, 3194, 3195, 5, 117, 0, 0, 3195, 4006, 5, 98, 0, 0, 3196, 3197, 5, 109, 0, 0, 3197, 3198, 5, 117, 0, 0, 3198, 4006, 5, 108, 0, 0, 3199, 3200, 5, 100, 0, 0, 3200, 3201, 5, 105, 0, 0, 3201, 4006, 5, 118, 0, 0, 3202, 3203, 5, 100, 0, 0, 3203, 3204, 5, 105, 0, 0, 3204, 3205, 5, 118, 0, 0, 3205, 3206, 5, 46, 0, 0, 3206, 3207, 5, 117, 0, 0, 3207, 4006, 5, 110, 0, 0, 3208, 3209, 5, 114, 0, 0, 3209, 3210, 5, 101, 0, 0, 3210, 4006, 5, 109, 0, 0, 3211, 3212, 5, 114, 0, 0, 3212, 3213, 5, 101, 0, 0, 3213, 3214, 5, 109, 0, 0, 3214, 3215, 5, 46, 0, 0, 3215, 3216, 5, 117, 0, 0, 3216, 4006, 5, 110, 0, 0, 3217, 3218, 5, 97, 0, 0, 3218, 3219, 5, 110, 0, 0, 3219, 4006, 5, 100, 0, 0, 3220, 3221, 5, 111, 0, 0, 3221, 4006, 5, 114, 0, 0, 3222, 3223, 5, 120, 0, 0, 3223, 3224, 5, 111, 0, 0, 3224, 4006, 5, 114, 0, 0, 3225, 3226, 5, 115, 0, 0, 3226, 3227, 5, 104, 0, 0, 3227, 4006, 5, 108, 0, 0, 3228, 3229, 5, 115, 0, 0, 3229, 3230, 5, 104, 0, 0, 3230, 4006, 5, 114, 0, 0, 3231, 3232, 5, 115, 0, 0, 3232, 3233, 5, 104, 0, 0, 3233, 3234, 5, 114, 0, 0, 3234, 3235, 5, 46, 0, 0, 3235, 3236, 5, 117, 0, 0, 3236, 4006, 5, 110, 0, 0, 3237, 3238, 5, 110, 0, 0, 3238, 3239, 5, 101, 0, 0, 3239, 4006, 5, 103, 0, 0, 3240, 3241, 5, 110, 0, 0, 3241, 3242, 5, 111, 0, 0, 3242, 4006, 5, 116, 0, 0, 3243, 3244, 5, 99, 0, 0, 3244, 3245, 5, 111, 0, 0, 3245, 3246, 5, 110, 0, 0, 3246, 3247, 5, 118, 0, 0, 3247, 3248, 5, 46, 0, 0, 3248, 3249, 5, 105, 0, 0, 3249, 4006, 5, 49, 0, 0, 3250, 3251, 5, 99, 0, 0, 3251, 3252, 5, 111, 0, 0, 3252, 3253, 5, 110, 0, 0, 3253, 3254, 5, 118, 0, 0, 3254, 3255, 5, 46, 0, 0, 3255, 3256, 5, 105, 0, 0, 3256, 4006, 5, 50, 0, 0, 3257, 3258, 5, 99, 0, 0, 3258, 3259, 5, 111, 0, 0, 3259, 3260, 5, 110, 0, 0, 3260, 3261, 5, 118, 0, 0, 3261, 3262, 5, 46, 0, 0, 3262, 3263, 5, 105, 0, 0, 3263, 4006, 5, 52, 0, 0, 3264, 3265, 5, 99, 0, 0, 3265, 3266, 5, 111, 0, 0, 3266, 3267, 5, 110, 0, 0, 3267, 3268, 5, 118, 0, 0, 3268, 3269, 5, 46, 0, 0, 3269, 3270, 5, 105, 0, 0, 3270, 4006, 5, 56, 0, 0, 3271, 3272, 5, 99, 0, 0, 3272, 3273, 5, 111, 0, 0, 3273, 3274, 5, 110, 0, 0, 3274, 3275, 5, 118, 0, 0, 3275, 3276, 5, 46, 0, 0, 3276, 3277, 5, 114, 0, 0, 3277, 4006, 5, 52, 0, 0, 3278, 3279, 5, 99, 0, 0, 3279, 3280, 5, 111, 0, 0, 3280, 3281, 5, 110, 0, 0, 3281, 3282, 5, 118, 0, 0, 3282, 3283, 5, 46, 0, 0, 3283, 3284, 5, 114, 0, 0, 3284, 4006, 5, 56, 0, 0, 3285, 3286, 5, 99, 0, 0, 3286, 3287, 5, 111, 0, 0, 3287, 3288, 5, 110, 0, 0, 3288, 3289, 5, 118, 0, 0, 3289, 3290, 5, 46, 0, 0, 3290, 3291, 5, 117, 0, 0, 3291, 4006, 5, 52, 0, 0, 3292, 3293, 5, 99, 0, 0, 3293, 3294, 5, 111, 0, 0, 3294, 3295, 5, 110, 0, 0, 3295, 3296, 5, 118, 0, 0, 3296, 3297, 5, 46, 0, 0, 3297, 3298, 5, 117, 0, 0, 3298, 4006, 5, 56, 0, 0, 3299, 3300, 5, 99, 0, 0, 3300, 3301, 5, 111, 0, 0, 3301, 3302, 5, 110, 0, 0, 3302, 3303, 5, 118, 0, 0, 3303, 3304, 5, 46, 0, 0, 3304, 3305, 5, 114, 0, 0, 3305, 3306, 5, 46, 0, 0, 3306, 3307, 5, 117, 0, 0, 3307, 4006, 5, 110, 0, 0, 3308, 3309, 5, 116, 0, 0, 3309, 3310, 5, 104, 0, 0, 3310, 3311, 5, 114, 0, 0, 3311, 3312, 5, 111, 0, 0, 3312, 4006, 5, 119, 0, 0, 3313, 3314, 5, 99, 0, 0, 3314, 3315, 5, 111, 0, 0, 3315, 3316, 5, 110, 0, 0, 3316, 3317, 5, 118, 0, 0, 3317, 3318, 5, 46, 0, 0, 3318, 3319, 5, 111, 0, 0, 3319, 3320, 5, 118, 0, 0, 3320, 3321, 5, 102, 0, 0, 3321, 3322, 5, 46, 0, 0, 3322, 3323, 5, 105, 0, 0, 3323, 3324, 5, 49, 0, 0, 3324, 3325, 5, 46, 0, 0, 3325, 3326, 5, 117, 0, 0, 3326, 4006, 5, 110, 0, 0, 3327, 3328, 5, 99, 0, 0, 3328, 3329, 5, 111, 0, 0, 3329, 3330, 5, 110, 0, 0, 3330, 3331, 5, 118, 0, 0, 3331, 3332, 5, 46, 0, 0, 3332, 3333, 5, 111, 0, 0, 3333, 3334, 5, 118, 0, 0, 3334, 3335, 5, 102, 0, 0, 3335, 3336, 5, 46, 0, 0, 3336, 3337, 5, 105, 0, 0, 3337, 3338, 5, 50, 0, 0, 3338, 3339, 5, 46, 0, 0, 3339, 3340, 5, 117, 0, 0, 3340, 4006, 5, 110, 0, 0, 3341, 3342, 5, 99, 0, 0, 3342, 3343, 5, 111, 0, 0, 3343, 3344, 5, 110, 0, 0, 3344, 3345, 5, 118, 0, 0, 3345, 3346, 5, 46, 0, 0, 3346, 3347, 5, 111, 0, 0, 3347, 3348, 5, 118, 0, 0, 3348, 3349, 5, 102, 0, 0, 3349, 3350, 5, 46, 0, 0, 3350, 3351, 5, 105, 0, 0, 3351, 3352, 5, 52, 0, 0, 3352, 3353, 5, 46, 0, 0, 3353, 3354, 5, 117, 0, 0, 3354, 4006, 5, 110, 0, 0, 3355, 3356, 5, 99, 0, 0, 3356, 3357, 5, 111, 0, 0, 3357, 3358, 5, 110, 0, 0, 3358, 3359, 5, 118, 0, 0, 3359, 3360, 5, 46, 0, 0, 3360, 3361, 5, 111, 0, 0, 3361, 3362, 5, 118, 0, 0, 3362, 3363, 5, 102, 0, 0, 3363, 3364, 5, 46, 0, 0, 3364, 3365, 5, 105, 0, 0, 3365, 3366, 5, 56, 0, 0, 3366, 3367, 5, 46, 0, 0, 3367, 3368, 5, 117, 0, 0, 3368, 4006, 5, 110, 0, 0, 3369, 3370, 5, 99, 0, 0, 3370, 3371, 5, 111, 0, 0, 3371, 3372, 5, 110, 0, 0, 3372, 3373, 5, 118, 0, 0, 3373, 3374, 5, 46, 0, 0, 3374, 3375, 5, 111, 0, 0, 3375, 3376, 5, 118, 0, 0, 3376, 3377, 5, 102, 0, 0, 3377, 3378, 5, 46, 0, 0, 3378, 3379, 5, 117, 0, 0, 3379, 3380, 5, 49, 0, 0, 3380, 3381, 5, 46, 0, 0, 3381, 3382, 5, 117, 0, 0, 3382, 4006, 5, 110, 0, 0, 3383, 3384, 5, 99, 0, 0, 3384, 3385, 5, 111, 0, 0, 3385, 3386, 5, 110, 0, 0, 3386, 3387, 5, 118, 0, 0, 3387, 3388, 5, 46, 0, 0, 3388, 3389, 5, 111, 0, 0, 3389, 3390, 5, 118, 0, 0, 3390, 3391, 5, 102, 0, 0, 3391, 3392, 5, 46, 0, 0, 3392, 3393, 5, 117, 0, 0, 3393, 3394, 5, 50, 0, 0, 3394, 3395, 5, 46, 0, 0, 3395, 3396, 5, 117, 0, 0, 3396, 4006, 5, 110, 0, 0, 3397, 3398, 5, 99, 0, 0, 3398, 3399, 5, 111, 0, 0, 3399, 3400, 5, 110, 0, 0, 3400, 3401, 5, 118, 0, 0, 3401, 3402, 5, 46, 0, 0, 3402, 3403, 5, 111, 0, 0, 3403, 3404, 5, 118, 0, 0, 3404, 3405, 5, 102, 0, 0, 3405, 3406, 5, 46, 0, 0, 3406, 3407, 5, 117, 0, 0, 3407, 3408, 5, 52, 0, 0, 3408, 3409, 5, 46, 0, 0, 3409, 3410, 5, 117, 0, 0, 3410, 4006, 5, 110, 0, 0, 3411, 3412, 5, 99, 0, 0, 3412, 3413, 5, 111, 0, 0, 3413, 3414, 5, 110, 0, 0, 3414, 3415, 5, 118, 0, 0, 3415, 3416, 5, 46, 0, 0, 3416, 3417, 5, 111, 0, 0, 3417, 3418, 5, 118, 0, 0, 3418, 3419, 5, 102, 0, 0, 3419, 3420, 5, 46, 0, 0, 3420, 3421, 5, 117, 0, 0, 3421, 3422, 5, 56, 0, 0, 3422, 3423, 5, 46, 0, 0, 3423, 3424, 5, 117, 0, 0, 3424, 4006, 5, 110, 0, 0, 3425, 3426, 5, 99, 0, 0, 3426, 3427, 5, 111, 0, 0, 3427, 3428, 5, 110, 0, 0, 3428, 3429, 5, 118, 0, 0, 3429, 3430, 5, 46, 0, 0, 3430, 3431, 5, 111, 0, 0, 3431, 3432, 5, 118, 0, 0, 3432, 3433, 5, 102, 0, 0, 3433, 3434, 5, 46, 0, 0, 3434, 3435, 5, 105, 0, 0, 3435, 3436, 5, 46, 0, 0, 3436, 3437, 5, 117, 0, 0, 3437, 4006, 5, 110, 0, 0, 3438, 3439, 5, 99, 0, 0, 3439, 3440, 5, 111, 0, 0, 3440, 3441, 5, 110, 0, 0, 3441, 3442, 5, 118, 0, 0, 3442, 3443, 5, 46, 0, 0, 3443, 3444, 5, 111, 0, 0, 3444, 3445, 5, 118, 0, 0, 3445, 3446, 5, 102, 0, 0, 3446, 3447, 5, 46, 0, 0, 3447, 3448, 5, 117, 0, 0, 3448, 3449, 5, 46, 0, 0, 3449, 3450, 5, 117, 0, 0, 3450, 4006, 5, 110, 0, 0, 3451, 3452, 5, 108, 0, 0, 3452, 3453, 5, 100, 0, 0, 3453, 3454, 5, 108, 0, 0, 3454, 3455, 5, 101, 0, 0, 3455, 4006, 5, 110, 0, 0, 3456, 3457, 5, 108, 0, 0, 3457, 3458, 5, 100, 0, 0, 3458, 3459, 5, 101, 0, 0, 3459, 3460, 5, 108, 0, 0, 3460, 3461, 5, 101, 0, 0, 3461, 3462, 5, 109, 0, 0, 3462, 3463, 5, 46, 0, 0, 3463, 3464, 5, 105, 0, 0, 3464, 4006, 5, 49, 0, 0, 3465, 3466, 5, 108, 0, 0, 3466, 3467, 5, 100, 0, 0, 3467, 3468, 5, 101, 0, 0, 3468, 3469, 5, 108, 0, 0, 3469, 3470, 5, 101, 0, 0, 3470, 3471, 5, 109, 0, 0, 3471, 3472, 5, 46, 0, 0, 3472, 3473, 5, 117, 0, 0, 3473, 4006, 5, 49, 0, 0, 3474, 3475, 5, 108, 0, 0, 3475, 3476, 5, 100, 0, 0, 3476, 3477, 5, 101, 0, 0, 3477, 3478, 5, 108, 0, 0, 3478, 3479, 5, 101, 0, 0, 3479, 3480, 5, 109, 0, 0, 3480, 3481, 5, 46, 0, 0, 3481, 3482, 5, 105, 0, 0, 3482, 4006, 5, 50, 0, 0, 3483, 3484, 5, 108, 0, 0, 3484, 3485, 5, 100, 0, 0, 3485, 3486, 5, 101, 0, 0, 3486, 3487, 5, 108, 0, 0, 3487, 3488, 5, 101, 0, 0, 3488, 3489, 5, 109, 0, 0, 3489, 3490, 5, 46, 0, 0, 3490, 3491, 5, 117, 0, 0, 3491, 4006, 5, 50, 0, 0, 3492, 3493, 5, 108, 0, 0, 3493, 3494, 5, 100, 0, 0, 3494, 3495, 5, 101, 0, 0, 3495, 3496, 5, 108, 0, 0, 3496, 3497, 5, 101, 0, 0, 3497, 3498, 5, 109, 0, 0, 3498, 3499, 5, 46, 0, 0, 3499, 3500, 5, 105, 0, 0, 3500, 4006, 5, 52, 0, 0, 3501, 3502, 5, 108, 0, 0, 3502, 3503, 5, 100, 0, 0, 3503, 3504, 5, 101, 0, 0, 3504, 3505, 5, 108, 0, 0, 3505, 3506, 5, 101, 0, 0, 3506, 3507, 5, 109, 0, 0, 3507, 3508, 5, 46, 0, 0, 3508, 3509, 5, 117, 0, 0, 3509, 4006, 5, 52, 0, 0, 3510, 3511, 5, 108, 0, 0, 3511, 3512, 5, 100, 0, 0, 3512, 3513, 5, 101, 0, 0, 3513, 3514, 5, 108, 0, 0, 3514, 3515, 5, 101, 0, 0, 3515, 3516, 5, 109, 0, 0, 3516, 3517, 5, 46, 0, 0, 3517, 3518, 5, 105, 0, 0, 3518, 4006, 5, 56, 0, 0, 3519, 3520, 5, 108, 0, 0, 3520, 3521, 5, 100, 0, 0, 3521, 3522, 5, 101, 0, 0, 3522, 3523, 5, 108, 0, 0, 3523, 3524, 5, 101, 0, 0, 3524, 3525, 5, 109, 0, 0, 3525, 3526, 5, 46, 0, 0, 3526, 4006, 5, 105, 0, 0, 3527, 3528, 5, 108, 0, 0, 3528, 3529, 5, 100, 0, 0, 3529, 3530, 5, 101, 0, 0, 3530, 3531, 5, 108, 0, 0, 3531, 3532, 5, 101, 0, 0, 3532, 3533, 5, 109, 0, 0, 3533, 3534, 5, 46, 0, 0, 3534, 3535, 5, 114, 0, 0, 3535, 4006, 5, 52, 0, 0, 3536, 3537, 5, 108, 0, 0, 3537, 3538, 5, 100, 0, 0, 3538, 3539, 5, 101, 0, 0, 3539, 3540, 5, 108, 0, 0, 3540, 3541, 5, 101, 0, 0, 3541, 3542, 5, 109, 0, 0, 3542, 3543, 5, 46, 0, 0, 3543, 3544, 5, 114, 0, 0, 3544, 4006, 5, 56, 0, 0, 3545, 3546, 5, 108, 0, 0, 3546, 3547, 5, 100, 0, 0, 3547, 3548, 5, 101, 0, 0, 3548, 3549, 5, 108, 0, 0, 3549, 3550, 5, 101, 0, 0, 3550, 3551, 5, 109, 0, 0, 3551, 3552, 5, 46, 0, 0, 3552, 3553, 5, 114, 0, 0, 3553, 3554, 5, 101, 0, 0, 3554, 4006, 5, 102, 0, 0, 3555, 3556, 5, 115, 0, 0, 3556, 3557, 5, 116, 0, 0, 3557, 3558, 5, 101, 0, 0, 3558, 3559, 5, 108, 0, 0, 3559, 3560, 5, 101, 0, 0, 3560, 3561, 5, 109, 0, 0, 3561, 3562, 5, 46, 0, 0, 3562, 4006, 5, 105, 0, 0, 3563, 3564, 5, 115, 0, 0, 3564, 3565, 5, 116, 0, 0, 3565, 3566, 5, 101, 0, 0, 3566, 3567, 5, 108, 0, 0, 3567, 3568, 5, 101, 0, 0, 3568, 3569, 5, 109, 0, 0, 3569, 3570, 5, 46, 0, 0, 3570, 3571, 5, 105, 0, 0, 3571, 4006, 5, 49, 0, 0, 3572, 3573, 5, 115, 0, 0, 3573, 3574, 5, 116, 0, 0, 3574, 3575, 5, 101, 0, 0, 3575, 3576, 5, 108, 0, 0, 3576, 3577, 5, 101, 0, 0, 3577, 3578, 5, 109, 0, 0, 3578, 3579, 5, 46, 0, 0, 3579, 3580, 5, 105, 0, 0, 3580, 4006, 5, 50, 0, 0, 3581, 3582, 5, 115, 0, 0, 3582, 3583, 5, 116, 0, 0, 3583, 3584, 5, 101, 0, 0, 3584, 3585, 5, 108, 0, 0, 3585, 3586, 5, 101, 0, 0, 3586, 3587, 5, 109, 0, 0, 3587, 3588, 5, 46, 0, 0, 3588, 3589, 5, 105, 0, 0, 3589, 4006, 5, 52, 0, 0, 3590, 3591, 5, 115, 0, 0, 3591, 3592, 5, 116, 0, 0, 3592, 3593, 5, 101, 0, 0, 3593, 3594, 5, 108, 0, 0, 3594, 3595, 5, 101, 0, 0, 3595, 3596, 5, 109, 0, 0, 3596, 3597, 5, 46, 0, 0, 3597, 3598, 5, 105, 0, 0, 3598, 4006, 5, 56, 0, 0, 3599, 3600, 5, 115, 0, 0, 3600, 3601, 5, 116, 0, 0, 3601, 3602, 5, 101, 0, 0, 3602, 3603, 5, 108, 0, 0, 3603, 3604, 5, 101, 0, 0, 3604, 3605, 5, 109, 0, 0, 3605, 3606, 5, 46, 0, 0, 3606, 3607, 5, 114, 0, 0, 3607, 4006, 5, 52, 0, 0, 3608, 3609, 5, 115, 0, 0, 3609, 3610, 5, 116, 0, 0, 3610, 3611, 5, 101, 0, 0, 3611, 3612, 5, 108, 0, 0, 3612, 3613, 5, 101, 0, 0, 3613, 3614, 5, 109, 0, 0, 3614, 3615, 5, 46, 0, 0, 3615, 3616, 5, 114, 0, 0, 3616, 4006, 5, 56, 0, 0, 3617, 3618, 5, 115, 0, 0, 3618, 3619, 5, 116, 0, 0, 3619, 3620, 5, 101, 0, 0, 3620, 3621, 5, 108, 0, 0, 3621, 3622, 5, 101, 0, 0, 3622, 3623, 5, 109, 0, 0, 3623, 3624, 5, 46, 0, 0, 3624, 3625, 5, 114, 0, 0, 3625, 3626, 5, 101, 0, 0, 3626, 4006, 5, 102, 0, 0, 3627, 3628, 5, 99, 0, 0, 3628, 3629, 5, 111, 0, 0, 3629, 3630, 5, 110, 0, 0, 3630, 3631, 5, 118, 0, 0, 3631, 3632, 5, 46, 0, 0, 3632, 3633, 5, 111, 0, 0, 3633, 3634, 5, 118, 0, 0, 3634, 3635, 5, 102, 0, 0, 3635, 3636, 5, 46, 0, 0, 3636, 3637, 5, 105, 0, 0, 3637, 4006, 5, 49, 0, 0, 3638, 3639, 5, 99, 0, 0, 3639, 3640, 5, 111, 0, 0, 3640, 3641, 5, 110, 0, 0, 3641, 3642, 5, 118, 0, 0, 3642, 3643, 5, 46, 0, 0, 3643, 3644, 5, 111, 0, 0, 3644, 3645, 5, 118, 0, 0, 3645, 3646, 5, 102, 0, 0, 3646, 3647, 5, 46, 0, 0, 3647, 3648, 5, 117, 0, 0, 3648, 4006, 5, 49, 0, 0, 3649, 3650, 5, 99, 0, 0, 3650, 3651, 5, 111, 0, 0, 3651, 3652, 5, 110, 0, 0, 3652, 3653, 5, 118, 0, 0, 3653, 3654, 5, 46, 0, 0, 3654, 3655, 5, 111, 0, 0, 3655, 3656, 5, 118, 0, 0, 3656, 3657, 5, 102, 0, 0, 3657, 3658, 5, 46, 0, 0, 3658, 3659, 5, 105, 0, 0, 3659, 4006, 5, 50, 0, 0, 3660, 3661, 5, 99, 0, 0, 3661, 3662, 5, 111, 0, 0, 3662, 3663, 5, 110, 0, 0, 3663, 3664, 5, 118, 0, 0, 3664, 3665, 5, 46, 0, 0, 3665, 3666, 5, 111, 0, 0, 3666, 3667, 5, 118, 0, 0, 3667, 3668, 5, 102, 0, 0, 3668, 3669, 5, 46, 0, 0, 3669, 3670, 5, 117, 0, 0, 3670, 4006, 5, 50, 0, 0, 3671, 3672, 5, 99, 0, 0, 3672, 3673, 5, 111, 0, 0, 3673, 3674, 5, 110, 0, 0, 3674, 3675, 5, 118, 0, 0, 3675, 3676, 5, 46, 0, 0, 3676, 3677, 5, 111, 0, 0, 3677, 3678, 5, 118, 0, 0, 3678, 3679, 5, 102, 0, 0, 3679, 3680, 5, 46, 0, 0, 3680, 3681, 5, 105, 0, 0, 3681, 4006, 5, 52, 0, 0, 3682, 3683, 5, 99, 0, 0, 3683, 3684, 5, 111, 0, 0, 3684, 3685, 5, 110, 0, 0, 3685, 3686, 5, 118, 0, 0, 3686, 3687, 5, 46, 0, 0, 3687, 3688, 5, 111, 0, 0, 3688, 3689, 5, 118, 0, 0, 3689, 3690, 5, 102, 0, 0, 3690, 3691, 5, 46, 0, 0, 3691, 3692, 5, 117, 0, 0, 3692, 4006, 5, 52, 0, 0, 3693, 3694, 5, 99, 0, 0, 3694, 3695, 5, 111, 0, 0, 3695, 3696, 5, 110, 0, 0, 3696, 3697, 5, 118, 0, 0, 3697, 3698, 5, 46, 0, 0, 3698, 3699, 5, 111, 0, 0, 3699, 3700, 5, 118, 0, 0, 3700, 3701, 5, 102, 0, 0, 3701, 3702, 5, 46, 0, 0, 3702, 3703, 5, 105, 0, 0, 3703, 4006, 5, 56, 0, 0, 3704, 3705, 5, 99, 0, 0, 3705, 3706, 5, 111, 0, 0, 3706, 3707, 5, 110, 0, 0, 3707, 3708, 5, 118, 0, 0, 3708, 3709, 5, 46, 0, 0, 3709, 3710, 5, 111, 0, 0, 3710, 3711, 5, 118, 0, 0, 3711, 3712, 5, 102, 0, 0, 3712, 3713, 5, 46, 0, 0, 3713, 3714, 5, 117, 0, 0, 3714, 4006, 5, 56, 0, 0, 3715, 3716, 5, 99, 0, 0, 3716, 3717, 5, 107, 0, 0, 3717, 3718, 5, 102, 0, 0, 3718, 3719, 5, 105, 0, 0, 3719, 3720, 5, 110, 0, 0, 3720, 3721, 5, 105, 0, 0, 3721, 3722, 5, 116, 0, 0, 3722, 4006, 5, 101, 0, 0, 3723, 3724, 5, 99, 0, 0, 3724, 3725, 5, 111, 0, 0, 3725, 3726, 5, 110, 0, 0, 3726, 3727, 5, 118, 0, 0, 3727, 3728, 5, 46, 0, 0, 3728, 3729, 5, 117, 0, 0, 3729, 4006, 5, 50, 0, 0, 3730, 3731, 5, 99, 0, 0, 3731, 3732, 5, 111, 0, 0, 3732, 3733, 5, 110, 0, 0, 3733, 3734, 5, 118, 0, 0, 3734, 3735, 5, 46, 0, 0, 3735, 3736, 5, 117, 0, 0, 3736, 4006, 5, 49, 0, 0, 3737, 3738, 5, 99, 0, 0, 3738, 3739, 5, 111, 0, 0, 3739, 3740, 5, 110, 0, 0, 3740, 3741, 5, 118, 0, 0, 3741, 3742, 5, 46, 0, 0, 3742, 4006, 5, 105, 0, 0, 3743, 3744, 5, 99, 0, 0, 3744, 3745, 5, 111, 0, 0, 3745, 3746, 5, 110, 0, 0, 3746, 3747, 5, 118, 0, 0, 3747, 3748, 5, 46, 0, 0, 3748, 3749, 5, 111, 0, 0, 3749, 3750, 5, 118, 0, 0, 3750, 3751, 5, 102, 0, 0, 3751, 3752, 5, 46, 0, 0, 3752, 4006, 5, 105, 0, 0, 3753, 3754, 5, 99, 0, 0, 3754, 3755, 5, 111, 0, 0, 3755, 3756, 5, 110, 0, 0, 3756, 3757, 5, 118, 0, 0, 3757, 3758, 5, 46, 0, 0, 3758, 3759, 5, 111, 0, 0, 3759, 3760, 5, 118, 0, 0, 3760, 3761, 5, 102, 0, 0, 3761, 3762, 5, 46, 0, 0, 3762, 4006, 5, 117, 0, 0, 3763, 3764, 5, 97, 0, 0, 3764, 3765, 5, 100, 0, 0, 3765, 3766, 5, 100, 0, 0, 3766, 3767, 5, 46, 0, 0, 3767, 3768, 5, 111, 0, 0, 3768, 3769, 5, 118, 0, 0, 3769, 4006, 5, 102, 0, 0, 3770, 3771, 5, 97, 0, 0, 3771, 3772, 5, 100, 0, 0, 3772, 3773, 5, 100, 0, 0, 3773, 3774, 5, 46, 0, 0, 3774, 3775, 5, 111, 0, 0, 3775, 3776, 5, 118, 0, 0, 3776, 3777, 5, 102, 0, 0, 3777, 3778, 5, 46, 0, 0, 3778, 3779, 5, 117, 0, 0, 3779, 4006, 5, 110, 0, 0, 3780, 3781, 5, 109, 0, 0, 3781, 3782, 5, 117, 0, 0, 3782, 3783, 5, 108, 0, 0, 3783, 3784, 5, 46, 0, 0, 3784, 3785, 5, 111, 0, 0, 3785, 3786, 5, 118, 0, 0, 3786, 4006, 5, 102, 0, 0, 3787, 3788, 5, 109, 0, 0, 3788, 3789, 5, 117, 0, 0, 3789, 3790, 5, 108, 0, 0, 3790, 3791, 5, 46, 0, 0, 3791, 3792, 5, 111, 0, 0, 3792, 3793, 5, 118, 0, 0, 3793, 3794, 5, 102, 0, 0, 3794, 3795, 5, 46, 0, 0, 3795, 3796, 5, 117, 0, 0, 3796, 4006, 5, 110, 0, 0, 3797, 3798, 5, 115, 0, 0, 3798, 3799, 5, 117, 0, 0, 3799, 3800, 5, 98, 0, 0, 3800, 3801, 5, 46, 0, 0, 3801, 3802, 5, 111, 0, 0, 3802, 3803, 5, 118, 0, 0, 3803, 4006, 5, 102, 0, 0, 3804, 3805, 5, 115, 0, 0, 3805, 3806, 5, 117, 0, 0, 3806, 3807, 5, 98, 0, 0, 3807, 3808, 5, 46, 0, 0, 3808, 3809, 5, 111, 0, 0, 3809, 3810, 5, 118, 0, 0, 3810, 3811, 5, 102, 0, 0, 3811, 3812, 5, 46, 0, 0, 3812, 3813, 5, 117, 0, 0, 3813, 4006, 5, 110, 0, 0, 3814, 3815, 5, 101, 0, 0, 3815, 3816, 5, 110, 0, 0, 3816, 3817, 5, 100, 0, 0, 3817, 3818, 5, 102, 0, 0, 3818, 3819, 5, 105, 0, 0, 3819, 3820, 5, 110, 0, 0, 3820, 3821, 5, 97, 0, 0, 3821, 3822, 5, 108, 0, 0, 3822, 3823, 5, 108, 0, 0, 3823, 4006, 5, 121, 0, 0, 3824, 3825, 5, 115, 0, 0, 3825, 3826, 5, 116, 0, 0, 3826, 3827, 5, 105, 0, 0, 3827, 3828, 5, 110, 0, 0, 3828, 3829, 5, 100, 0, 0, 3829, 3830, 5, 46, 0, 0, 3830, 4006, 5, 105, 0, 0, 3831, 3832, 5, 99, 0, 0, 3832, 3833, 5, 111, 0, 0, 3833, 3834, 5, 110, 0, 0, 3834, 3835, 5, 118, 0, 0, 3835, 3836, 5, 46, 0, 0, 3836, 4006, 5, 117, 0, 0, 3837, 3838, 5, 112, 0, 0, 3838, 3839, 5, 114, 0, 0, 3839, 3840, 5, 101, 0, 0, 3840, 3841, 5, 102, 0, 0, 3841, 3842, 5, 105, 0, 0, 3842, 3843, 5, 120, 0, 0, 3843, 4006, 5, 55, 0, 0, 3844, 3845, 5, 112, 0, 0, 3845, 3846, 5, 114, 0, 0, 3846, 3847, 5, 101, 0, 0, 3847, 3848, 5, 102, 0, 0, 3848, 3849, 5, 105, 0, 0, 3849, 3850, 5, 120, 0, 0, 3850, 4006, 5, 54, 0, 0, 3851, 3852, 5, 112, 0, 0, 3852, 3853, 5, 114, 0, 0, 3853, 3854, 5, 101, 0, 0, 3854, 3855, 5, 102, 0, 0, 3855, 3856, 5, 105, 0, 0, 3856, 3857, 5, 120, 0, 0, 3857, 4006, 5, 53, 0, 0, 3858, 3859, 5, 112, 0, 0, 3859, 3860, 5, 114, 0, 0, 3860, 3861, 5, 101, 0, 0, 3861, 3862, 5, 102, 0, 0, 3862, 3863, 5, 105, 0, 0, 3863, 3864, 5, 120, 0, 0, 3864, 4006, 5, 52, 0, 0, 3865, 3866, 5, 112, 0, 0, 3866, 3867, 5, 114, 0, 0, 3867, 3868, 5, 101, 0, 0, 3868, 3869, 5, 102, 0, 0, 3869, 3870, 5, 105, 0, 0, 3870, 3871, 5, 120, 0, 0, 3871, 4006, 5, 51, 0, 0, 3872, 3873, 5, 112, 0, 0, 3873, 3874, 5, 114, 0, 0, 3874, 3875, 5, 101, 0, 0, 3875, 3876, 5, 102, 0, 0, 3876, 3877, 5, 105, 0, 0, 3877, 3878, 5, 120, 0, 0, 3878, 4006, 5, 50, 0, 0, 3879, 3880, 5, 112, 0, 0, 3880, 3881, 5, 114, 0, 0, 3881, 3882, 5, 101, 0, 0, 3882, 3883, 5, 102, 0, 0, 3883, 3884, 5, 105, 0, 0, 3884, 3885, 5, 120, 0, 0, 3885, 4006, 5, 49, 0, 0, 3886, 3887, 5, 112, 0, 0, 3887, 3888, 5, 114, 0, 0, 3888, 3889, 5, 101, 0, 0, 3889, 3890, 5, 102, 0, 0, 3890, 3891, 5, 105, 0, 0, 3891, 3892, 5, 120, 0, 0, 3892, 3893, 5, 114, 0, 0, 3893, 3894, 5, 101, 0, 0, 3894, 4006, 5, 102, 0, 0, 3895, 3896, 5, 97, 0, 0, 3896, 3897, 5, 114, 0, 0, 3897, 3898, 5, 103, 0, 0, 3898, 3899, 5, 108, 0, 0, 3899, 3900, 5, 105, 0, 0, 3900, 3901, 5, 115, 0, 0, 3901, 4006, 5, 116, 0, 0, 3902, 3903, 5, 99, 0, 0, 3903, 3904, 5, 101, 0, 0, 3904, 4006, 5, 113, 0, 0, 3905, 3906, 5, 99, 0, 0, 3906, 3907, 5, 103, 0, 0, 3907, 4006, 5, 116, 0, 0, 3908, 3909, 5, 99, 0, 0, 3909, 3910, 5, 103, 0, 0, 3910, 3911, 5, 116, 0, 0, 3911, 3912, 5, 46, 0, 0, 3912, 3913, 5, 117, 0, 0, 3913, 4006, 5, 110, 0, 0, 3914, 3915, 5, 99, 0, 0, 3915, 3916, 5, 108, 0, 0, 3916, 4006, 5, 116, 0, 0, 3917, 3918, 5, 99, 0, 0, 3918, 3919, 5, 108, 0, 0, 3919, 3920, 5, 116, 0, 0, 3920, 3921, 5, 46, 0, 0, 3921, 3922, 5, 117, 0, 0, 3922, 4006, 5, 110, 0, 0, 3923, 3924, 5, 108, 0, 0, 3924, 3925, 5, 111, 0, 0, 3925, 3926, 5, 99, 0, 0, 3926, 3927, 5, 97, 0, 0, 3927, 3928, 5, 108, 0, 0, 3928, 3929, 5, 108, 0, 0, 3929, 3930, 5, 111, 0, 0, 3930, 4006, 5, 99, 0, 0, 3931, 3932, 5, 101, 0, 0, 3932, 3933, 5, 110, 0, 0, 3933, 3934, 5, 100, 0, 0, 3934, 3935, 5, 102, 0, 0, 3935, 3936, 5, 105, 0, 0, 3936, 3937, 5, 108, 0, 0, 3937, 3938, 5, 116, 0, 0, 3938, 3939, 5, 101, 0, 0, 3939, 4006, 5, 114, 0, 0, 3940, 3941, 5, 118, 0, 0, 3941, 3942, 5, 111, 0, 0, 3942, 3943, 5, 108, 0, 0, 3943, 3944, 5, 97, 0, 0, 3944, 3945, 5, 116, 0, 0, 3945, 3946, 5, 105, 0, 0, 3946, 3947, 5, 108, 0, 0, 3947, 3948, 5, 101, 0, 0, 3948, 4006, 5, 46, 0, 0, 3949, 3950, 5, 116, 0, 0, 3950, 3951, 5, 97, 0, 0, 3951, 3952, 5, 105, 0, 0, 3952, 3953, 5, 108, 0, 0, 3953, 4006, 5, 46, 0, 0, 3954, 3955, 5, 99, 0, 0, 3955, 3956, 5, 112, 0, 0, 3956, 3957, 5, 98, 0, 0, 3957, 3958, 5, 108, 0, 0, 3958, 4006, 5, 107, 0, 0, 3959, 3960, 5, 105, 0, 0, 3960, 3961, 5, 110, 0, 0, 3961, 3962, 5, 105, 0, 0, 3962, 3963, 5, 116, 0, 0, 3963, 3964, 5, 98, 0, 0, 3964, 3965, 5, 108, 0, 0, 3965, 4006, 5, 107, 0, 0, 3966, 3967, 5, 114, 0, 0, 3967, 3968, 5, 101, 0, 0, 3968, 3969, 5, 116, 0, 0, 3969, 3970, 5, 104, 0, 0, 3970, 3971, 5, 114, 0, 0, 3971, 3972, 5, 111, 0, 0, 3972, 4006, 5, 119, 0, 0, 3973, 3974, 5, 114, 0, 0, 3974, 3975, 5, 101, 0, 0, 3975, 3976, 5, 102, 0, 0, 3976, 3977, 5, 97, 0, 0, 3977, 3978, 5, 110, 0, 0, 3978, 3979, 5, 121, 0, 0, 3979, 3980, 5, 116, 0, 0, 3980, 3981, 5, 121, 0, 0, 3981, 3982, 5, 112, 0, 0, 3982, 4006, 5, 101, 0, 0, 3983, 3984, 5, 114, 0, 0, 3984, 3985, 5, 101, 0, 0, 3985, 3986, 5, 97, 0, 0, 3986, 3987, 5, 100, 0, 0, 3987, 3988, 5, 111, 0, 0, 3988, 3989, 5, 110, 0, 0, 3989, 3990, 5, 108, 0, 0, 3990, 3991, 5, 121, 0, 0, 3991, 4006, 5, 46, 0, 0, 3992, 3993, 5, 105, 0, 0, 3993, 3994, 5, 108, 0, 0, 3994, 3995, 5, 108, 0, 0, 3995, 3996, 5, 101, 0, 0, 3996, 3997, 5, 103, 0, 0, 3997, 3998, 5, 97, 0, 0, 3998, 4006, 5, 108, 0, 0, 3999, 4000, 5, 101, 0, 0, 4000, 4001, 5, 110, 0, 0, 4001, 4002, 5, 100, 0, 0, 4002, 4003, 5, 109, 0, 0, 4003, 4004, 5, 97, 0, 0, 4004, 4006, 5, 99, 0, 0, 4005, 2857, 1, 0, 0, 0, 4005, 2860, 1, 0, 0, 0, 4005, 2865, 1, 0, 0, 0, 4005, 2872, 1, 0, 0, 0, 4005, 2879, 1, 0, 0, 0, 4005, 2886, 1, 0, 0, 0, 4005, 2893, 1, 0, 0, 0, 4005, 2900, 1, 0, 0, 0, 4005, 2907, 1, 0, 0, 0, 4005, 2914, 1, 0, 0, 0, 4005, 2921, 1, 0, 0, 0, 4005, 2928, 1, 0, 0, 0, 4005, 2935, 1, 0, 0, 0, 4005, 2942, 1, 0, 0, 0, 4005, 2949, 1, 0, 0, 0, 4005, 2955, 1, 0, 0, 0, 4005, 2964, 1, 0, 0, 0, 4005, 2972, 1, 0, 0, 0, 4005, 2980, 1, 0, 0, 0, 4005, 2988, 1, 0, 0, 0, 4005, 2996, 1, 0, 0, 0, 4005, 3004, 1, 0, 0, 0, 4005, 3012, 1, 0, 0, 0, 4005, 3020, 1, 0, 0, 0, 4005, 3028, 1, 0, 0, 0, 4005, 3036, 1, 0, 0, 0, 4005, 3039, 1, 0, 0, 0, 4005, 3042, 1, 0, 0, 0, 4005, 3045, 1, 0, 0, 0, 4005, 3053, 1, 0, 0, 0, 4005, 3061, 1, 0, 0, 0, 4005, 3069, 1, 0, 0, 0, 4005, 3077, 1, 0, 0, 0, 4005, 3085, 1, 0, 0, 0, 4005, 3093, 1, 0, 0, 0, 4005, 3101, 1, 0, 0, 0, 4005, 3108, 1, 0, 0, 0, 4005, 3116, 1, 0, 0, 0, 4005, 3124, 1, 0, 0, 0, 4005, 3133, 1, 0, 0, 0, 4005, 3142, 1, 0, 0, 0, 4005, 3150, 1, 0, 0, 0, 4005, 3158, 1, 0, 0, 0, 4005, 3166, 1, 0, 0, 0, 4005, 3174, 1, 0, 0, 0, 4005, 3182, 1, 0, 0, 0, 4005, 3190, 1, 0, 0, 0, 4005, 3193, 1, 0, 0, 0, 4005, 3196, 1, 0, 0, 0, 4005, 3199, 1, 0, 0, 0, 4005, 3202, 1, 0, 0, 0, 4005, 3208, 1, 0, 0, 0, 4005, 3211, 1, 0, 0, 0, 4005, 3217, 1, 0, 0, 0, 4005, 3220, 1, 0, 0, 0, 4005, 3222, 1, 0, 0, 0, 4005, 3225, 1, 0, 0, 0, 4005, 3228, 1, 0, 0, 0, 4005, 3231, 1, 0, 0, 0, 4005, 3237, 1, 0, 0, 0, 4005, 3240, 1, 0, 0, 0, 4005, 3243, 1, 0, 0, 0, 4005, 3250, 1, 0, 0, 0, 4005, 3257, 1, 0, 0, 0, 4005, 3264, 1, 0, 0, 0, 4005, 3271, 1, 0, 0, 0, 4005, 3278, 1, 0, 0, 0, 4005, 3285, 1, 0, 0, 0, 4005, 3292, 1, 0, 0, 0, 4005, 3299, 1, 0, 0, 0, 4005, 3308, 1, 0, 0, 0, 4005, 3313, 1, 0, 0, 0, 4005, 3327, 1, 0, 0, 0, 4005, 3341, 1, 0, 0, 0, 4005, 3355, 1, 0, 0, 0, 4005, 3369, 1, 0, 0, 0, 4005, 3383, 1, 0, 0, 0, 4005, 3397, 1, 0, 0, 0, 4005, 3411, 1, 0, 0, 0, 4005, 3425, 1, 0, 0, 0, 4005, 3438, 1, 0, 0, 0, 4005, 3451, 1, 0, 0, 0, 4005, 3456, 1, 0, 0, 0, 4005, 3465, 1, 0, 0, 0, 4005, 3474, 1, 0, 0, 0, 4005, 3483, 1, 0, 0, 0, 4005, 3492, 1, 0, 0, 0, 4005, 3501, 1, 0, 0, 0, 4005, 3510, 1, 0, 0, 0, 4005, 3519, 1, 0, 0, 0, 4005, 3527, 1, 0, 0, 0, 4005, 3536, 1, 0, 0, 0, 4005, 3545, 1, 0, 0, 0, 4005, 3555, 1, 0, 0, 0, 4005, 3563, 1, 0, 0, 0, 4005, 3572, 1, 0, 0, 0, 4005, 3581, 1, 0, 0, 0, 4005, 3590, 1, 0, 0, 0, 4005, 3599, 1, 0, 0, 0, 4005, 3608, 1, 0, 0, 0, 4005, 3617, 1, 0, 0, 0, 4005, 3627, 1, 0, 0, 0, 4005, 3638, 1, 0, 0, 0, 4005, 3649, 1, 0, 0, 0, 4005, 3660, 1, 0, 0, 0, 4005, 3671, 1, 0, 0, 0, 4005, 3682, 1, 0, 0, 0, 4005, 3693, 1, 0, 0, 0, 4005, 3704, 1, 0, 0, 0, 4005, 3715, 1, 0, 0, 0, 4005, 3723, 1, 0, 0, 0, 4005, 3730, 1, 0, 0, 0, 4005, 3737, 1, 0, 0, 0, 4005, 3743, 1, 0, 0, 0, 4005, 3753, 1, 0, 0, 0, 4005, 3763, 1, 0, 0, 0, 4005, 3770, 1, 0, 0, 0, 4005, 3780, 1, 0, 0, 0, 4005, 3787, 1, 0, 0, 0, 4005, 3797, 1, 0, 0, 0, 4005, 3804, 1, 0, 0, 0, 4005, 3814, 1, 0, 0, 0, 4005, 3824, 1, 0, 0, 0, 4005, 3831, 1, 0, 0, 0, 4005, 3837, 1, 0, 0, 0, 4005, 3844, 1, 0, 0, 0, 4005, 3851, 1, 0, 0, 0, 4005, 3858, 1, 0, 0, 0, 4005, 3865, 1, 0, 0, 0, 4005, 3872, 1, 0, 0, 0, 4005, 3879, 1, 0, 0, 0, 4005, 3886, 1, 0, 0, 0, 4005, 3895, 1, 0, 0, 0, 4005, 3902, 1, 0, 0, 0, 4005, 3905, 1, 0, 0, 0, 4005, 3908, 1, 0, 0, 0, 4005, 3914, 1, 0, 0, 0, 4005, 3917, 1, 0, 0, 0, 4005, 3923, 1, 0, 0, 0, 4005, 3931, 1, 0, 0, 0, 4005, 3940, 1, 0, 0, 0, 4005, 3949, 1, 0, 0, 0, 4005, 3954, 1, 0, 0, 0, 4005, 3959, 1, 0, 0, 0, 4005, 3966, 1, 0, 0, 0, 4005, 3973, 1, 0, 0, 0, 4005, 3983, 1, 0, 0, 0, 4005, 3992, 1, 0, 0, 0, 4005, 3999, 1, 0, 0, 0, 4006, 556, 1, 0, 0, 0, 4007, 4008, 5, 108, 0, 0, 4008, 4009, 5, 100, 0, 0, 4009, 4010, 5, 97, 0, 0, 4010, 4011, 5, 114, 0, 0, 4011, 4012, 5, 103, 0, 0, 4012, 4013, 5, 46, 0, 0, 4013, 4084, 5, 115, 0, 0, 4014, 4015, 5, 108, 0, 0, 4015, 4016, 5, 100, 0, 0, 4016, 4017, 5, 97, 0, 0, 4017, 4018, 5, 114, 0, 0, 4018, 4019, 5, 103, 0, 0, 4019, 4020, 5, 97, 0, 0, 4020, 4021, 5, 46, 0, 0, 4021, 4084, 5, 115, 0, 0, 4022, 4023, 5, 115, 0, 0, 4023, 4024, 5, 116, 0, 0, 4024, 4025, 5, 97, 0, 0, 4025, 4026, 5, 114, 0, 0, 4026, 4027, 5, 103, 0, 0, 4027, 4028, 5, 46, 0, 0, 4028, 4084, 5, 115, 0, 0, 4029, 4030, 5, 108, 0, 0, 4030, 4031, 5, 100, 0, 0, 4031, 4032, 5, 108, 0, 0, 4032, 4033, 5, 111, 0, 0, 4033, 4034, 5, 99, 0, 0, 4034, 4035, 5, 46, 0, 0, 4035, 4084, 5, 115, 0, 0, 4036, 4037, 5, 108, 0, 0, 4037, 4038, 5, 100, 0, 0, 4038, 4039, 5, 108, 0, 0, 4039, 4040, 5, 111, 0, 0, 4040, 4041, 5, 99, 0, 0, 4041, 4042, 5, 97, 0, 0, 4042, 4043, 5, 46, 0, 0, 4043, 4084, 5, 115, 0, 0, 4044, 4045, 5, 115, 0, 0, 4045, 4046, 5, 116, 0, 0, 4046, 4047, 5, 108, 0, 0, 4047, 4048, 5, 111, 0, 0, 4048, 4049, 5, 99, 0, 0, 4049, 4050, 5, 46, 0, 0, 4050, 4084, 5, 115, 0, 0, 4051, 4052, 5, 108, 0, 0, 4052, 4053, 5, 100, 0, 0, 4053, 4054, 5, 97, 0, 0, 4054, 4055, 5, 114, 0, 0, 4055, 4084, 5, 103, 0, 0, 4056, 4057, 5, 108, 0, 0, 4057, 4058, 5, 100, 0, 0, 4058, 4059, 5, 97, 0, 0, 4059, 4060, 5, 114, 0, 0, 4060, 4061, 5, 103, 0, 0, 4061, 4084, 5, 97, 0, 0, 4062, 4063, 5, 115, 0, 0, 4063, 4064, 5, 116, 0, 0, 4064, 4065, 5, 97, 0, 0, 4065, 4066, 5, 114, 0, 0, 4066, 4084, 5, 103, 0, 0, 4067, 4068, 5, 108, 0, 0, 4068, 4069, 5, 100, 0, 0, 4069, 4070, 5, 108, 0, 0, 4070, 4071, 5, 111, 0, 0, 4071, 4084, 5, 99, 0, 0, 4072, 4073, 5, 108, 0, 0, 4073, 4074, 5, 100, 0, 0, 4074, 4075, 5, 108, 0, 0, 4075, 4076, 5, 111, 0, 0, 4076, 4077, 5, 99, 0, 0, 4077, 4084, 5, 97, 0, 0, 4078, 4079, 5, 115, 0, 0, 4079, 4080, 5, 116, 0, 0, 4080, 4081, 5, 108, 0, 0, 4081, 4082, 5, 111, 0, 0, 4082, 4084, 5, 99, 0, 0, 4083, 4007, 1, 0, 0, 0, 4083, 4014, 1, 0, 0, 0, 4083, 4022, 1, 0, 0, 0, 4083, 4029, 1, 0, 0, 0, 4083, 4036, 1, 0, 0, 0, 4083, 4044, 1, 0, 0, 0, 4083, 4051, 1, 0, 0, 0, 4083, 4056, 1, 0, 0, 0, 4083, 4062, 1, 0, 0, 0, 4083, 4067, 1, 0, 0, 0, 4083, 4072, 1, 0, 0, 0, 4083, 4078, 1, 0, 0, 0, 4084, 558, 1, 0, 0, 0, 4085, 4086, 5, 108, 0, 0, 4086, 4087, 5, 100, 0, 0, 4087, 4088, 5, 99, 0, 0, 4088, 4089, 5, 46, 0, 0, 4089, 4090, 5, 105, 0, 0, 4090, 4091, 5, 52, 0, 0, 4091, 4092, 5, 46, 0, 0, 4092, 4113, 5, 115, 0, 0, 4093, 4094, 5, 108, 0, 0, 4094, 4095, 5, 100, 0, 0, 4095, 4096, 5, 99, 0, 0, 4096, 4097, 5, 46, 0, 0, 4097, 4098, 5, 105, 0, 0, 4098, 4113, 5, 52, 0, 0, 4099, 4100, 5, 117, 0, 0, 4100, 4101, 5, 110, 0, 0, 4101, 4102, 5, 97, 0, 0, 4102, 4103, 5, 108, 0, 0, 4103, 4104, 5, 105, 0, 0, 4104, 4105, 5, 103, 0, 0, 4105, 4106, 5, 110, 0, 0, 4106, 4107, 5, 101, 0, 0, 4107, 4108, 5, 100, 0, 0, 4108, 4113, 5, 46, 0, 0, 4109, 4110, 5, 110, 0, 0, 4110, 4111, 5, 111, 0, 0, 4111, 4113, 5, 46, 0, 0, 4112, 4085, 1, 0, 0, 0, 4112, 4093, 1, 0, 0, 0, 4112, 4099, 1, 0, 0, 0, 4112, 4109, 1, 0, 0, 0, 4113, 560, 1, 0, 0, 0, 4114, 4115, 5, 108, 0, 0, 4115, 4116, 5, 100, 0, 0, 4116, 4117, 5, 99, 0, 0, 4117, 4118, 5, 46, 0, 0, 4118, 4119, 5, 105, 0, 0, 4119, 4120, 5, 56, 0, 0, 4120, 562, 1, 0, 0, 0, 4121, 4122, 5, 108, 0, 0, 4122, 4123, 5, 100, 0, 0, 4123, 4124, 5, 99, 0, 0, 4124, 4125, 5, 46, 0, 0, 4125, 4126, 5, 114, 0, 0, 4126, 4134, 5, 52, 0, 0, 4127, 4128, 5, 108, 0, 0, 4128, 4129, 5, 100, 0, 0, 4129, 4130, 5, 99, 0, 0, 4130, 4131, 5, 46, 0, 0, 4131, 4132, 5, 114, 0, 0, 4132, 4134, 5, 56, 0, 0, 4133, 4121, 1, 0, 0, 0, 4133, 4127, 1, 0, 0, 0, 4134, 564, 1, 0, 0, 0, 4135, 4136, 5, 106, 0, 0, 4136, 4137, 5, 109, 0, 0, 4137, 4171, 5, 112, 0, 0, 4138, 4139, 5, 99, 0, 0, 4139, 4140, 5, 97, 0, 0, 4140, 4141, 5, 108, 0, 0, 4141, 4171, 5, 108, 0, 0, 4142, 4143, 5, 99, 0, 0, 4143, 4144, 5, 97, 0, 0, 4144, 4145, 5, 108, 0, 0, 4145, 4146, 5, 108, 0, 0, 4146, 4147, 5, 118, 0, 0, 4147, 4148, 5, 105, 0, 0, 4148, 4149, 5, 114, 0, 0, 4149, 4171, 5, 116, 0, 0, 4150, 4151, 5, 110, 0, 0, 4151, 4152, 5, 101, 0, 0, 4152, 4153, 5, 119, 0, 0, 4153, 4154, 5, 111, 0, 0, 4154, 4155, 5, 98, 0, 0, 4155, 4171, 5, 106, 0, 0, 4156, 4157, 5, 108, 0, 0, 4157, 4158, 5, 100, 0, 0, 4158, 4159, 5, 102, 0, 0, 4159, 4160, 5, 116, 0, 0, 4160, 4171, 5, 110, 0, 0, 4161, 4162, 5, 108, 0, 0, 4162, 4163, 5, 100, 0, 0, 4163, 4164, 5, 118, 0, 0, 4164, 4165, 5, 105, 0, 0, 4165, 4166, 5, 114, 0, 0, 4166, 4167, 5, 116, 0, 0, 4167, 4168, 5, 102, 0, 0, 4168, 4169, 5, 116, 0, 0, 4169, 4171, 5, 110, 0, 0, 4170, 4135, 1, 0, 0, 0, 4170, 4138, 1, 0, 0, 0, 4170, 4142, 1, 0, 0, 0, 4170, 4150, 1, 0, 0, 0, 4170, 4156, 1, 0, 0, 0, 4170, 4161, 1, 0, 0, 0, 4171, 566, 1, 0, 0, 0, 4172, 4173, 5, 99, 0, 0, 4173, 4174, 5, 97, 0, 0, 4174, 4175, 5, 108, 0, 0, 4175, 4176, 5, 108, 0, 0, 4176, 4177, 5, 105, 0, 0, 4177, 568, 1, 0, 0, 0, 4178, 4179, 5, 98, 0, 0, 4179, 4180, 5, 114, 0, 0, 4180, 4181, 5, 46, 0, 0, 4181, 4337, 5, 115, 0, 0, 4182, 4183, 5, 98, 0, 0, 4183, 4184, 5, 114, 0, 0, 4184, 4185, 5, 102, 0, 0, 4185, 4186, 5, 97, 0, 0, 4186, 4187, 5, 108, 0, 0, 4187, 4188, 5, 115, 0, 0, 4188, 4189, 5, 101, 0, 0, 4189, 4190, 5, 46, 0, 0, 4190, 4337, 5, 115, 0, 0, 4191, 4192, 5, 98, 0, 0, 4192, 4193, 5, 114, 0, 0, 4193, 4194, 5, 116, 0, 0, 4194, 4195, 5, 114, 0, 0, 4195, 4196, 5, 117, 0, 0, 4196, 4197, 5, 101, 0, 0, 4197, 4198, 5, 46, 0, 0, 4198, 4337, 5, 115, 0, 0, 4199, 4200, 5, 98, 0, 0, 4200, 4201, 5, 101, 0, 0, 4201, 4202, 5, 113, 0, 0, 4202, 4203, 5, 46, 0, 0, 4203, 4337, 5, 115, 0, 0, 4204, 4205, 5, 98, 0, 0, 4205, 4206, 5, 103, 0, 0, 4206, 4207, 5, 101, 0, 0, 4207, 4208, 5, 46, 0, 0, 4208, 4337, 5, 115, 0, 0, 4209, 4210, 5, 98, 0, 0, 4210, 4211, 5, 103, 0, 0, 4211, 4212, 5, 116, 0, 0, 4212, 4213, 5, 46, 0, 0, 4213, 4337, 5, 115, 0, 0, 4214, 4215, 5, 98, 0, 0, 4215, 4216, 5, 108, 0, 0, 4216, 4217, 5, 101, 0, 0, 4217, 4218, 5, 46, 0, 0, 4218, 4337, 5, 115, 0, 0, 4219, 4220, 5, 98, 0, 0, 4220, 4221, 5, 108, 0, 0, 4221, 4222, 5, 116, 0, 0, 4222, 4223, 5, 46, 0, 0, 4223, 4337, 5, 115, 0, 0, 4224, 4225, 5, 98, 0, 0, 4225, 4226, 5, 110, 0, 0, 4226, 4227, 5, 101, 0, 0, 4227, 4228, 5, 46, 0, 0, 4228, 4229, 5, 117, 0, 0, 4229, 4230, 5, 110, 0, 0, 4230, 4231, 5, 46, 0, 0, 4231, 4337, 5, 115, 0, 0, 4232, 4233, 5, 98, 0, 0, 4233, 4234, 5, 103, 0, 0, 4234, 4235, 5, 101, 0, 0, 4235, 4236, 5, 46, 0, 0, 4236, 4237, 5, 117, 0, 0, 4237, 4238, 5, 110, 0, 0, 4238, 4239, 5, 46, 0, 0, 4239, 4337, 5, 115, 0, 0, 4240, 4241, 5, 98, 0, 0, 4241, 4242, 5, 103, 0, 0, 4242, 4243, 5, 116, 0, 0, 4243, 4244, 5, 46, 0, 0, 4244, 4245, 5, 117, 0, 0, 4245, 4246, 5, 110, 0, 0, 4246, 4247, 5, 46, 0, 0, 4247, 4337, 5, 115, 0, 0, 4248, 4249, 5, 98, 0, 0, 4249, 4250, 5, 108, 0, 0, 4250, 4251, 5, 101, 0, 0, 4251, 4252, 5, 46, 0, 0, 4252, 4253, 5, 117, 0, 0, 4253, 4254, 5, 110, 0, 0, 4254, 4255, 5, 46, 0, 0, 4255, 4337, 5, 115, 0, 0, 4256, 4257, 5, 98, 0, 0, 4257, 4258, 5, 108, 0, 0, 4258, 4259, 5, 116, 0, 0, 4259, 4260, 5, 46, 0, 0, 4260, 4261, 5, 117, 0, 0, 4261, 4262, 5, 110, 0, 0, 4262, 4263, 5, 46, 0, 0, 4263, 4337, 5, 115, 0, 0, 4264, 4265, 5, 98, 0, 0, 4265, 4337, 5, 114, 0, 0, 4266, 4267, 5, 98, 0, 0, 4267, 4268, 5, 114, 0, 0, 4268, 4269, 5, 102, 0, 0, 4269, 4270, 5, 97, 0, 0, 4270, 4271, 5, 108, 0, 0, 4271, 4272, 5, 115, 0, 0, 4272, 4337, 5, 101, 0, 0, 4273, 4274, 5, 98, 0, 0, 4274, 4275, 5, 114, 0, 0, 4275, 4276, 5, 116, 0, 0, 4276, 4277, 5, 114, 0, 0, 4277, 4278, 5, 117, 0, 0, 4278, 4337, 5, 101, 0, 0, 4279, 4280, 5, 98, 0, 0, 4280, 4281, 5, 101, 0, 0, 4281, 4337, 5, 113, 0, 0, 4282, 4283, 5, 98, 0, 0, 4283, 4284, 5, 103, 0, 0, 4284, 4337, 5, 101, 0, 0, 4285, 4286, 5, 98, 0, 0, 4286, 4287, 5, 103, 0, 0, 4287, 4337, 5, 116, 0, 0, 4288, 4289, 5, 98, 0, 0, 4289, 4290, 5, 108, 0, 0, 4290, 4337, 5, 101, 0, 0, 4291, 4292, 5, 98, 0, 0, 4292, 4293, 5, 108, 0, 0, 4293, 4337, 5, 116, 0, 0, 4294, 4295, 5, 98, 0, 0, 4295, 4296, 5, 110, 0, 0, 4296, 4297, 5, 101, 0, 0, 4297, 4298, 5, 46, 0, 0, 4298, 4299, 5, 117, 0, 0, 4299, 4337, 5, 110, 0, 0, 4300, 4301, 5, 98, 0, 0, 4301, 4302, 5, 103, 0, 0, 4302, 4303, 5, 101, 0, 0, 4303, 4304, 5, 46, 0, 0, 4304, 4305, 5, 117, 0, 0, 4305, 4337, 5, 110, 0, 0, 4306, 4307, 5, 98, 0, 0, 4307, 4308, 5, 103, 0, 0, 4308, 4309, 5, 116, 0, 0, 4309, 4310, 5, 46, 0, 0, 4310, 4311, 5, 117, 0, 0, 4311, 4337, 5, 110, 0, 0, 4312, 4313, 5, 98, 0, 0, 4313, 4314, 5, 108, 0, 0, 4314, 4315, 5, 101, 0, 0, 4315, 4316, 5, 46, 0, 0, 4316, 4317, 5, 117, 0, 0, 4317, 4337, 5, 110, 0, 0, 4318, 4319, 5, 98, 0, 0, 4319, 4320, 5, 108, 0, 0, 4320, 4321, 5, 116, 0, 0, 4321, 4322, 5, 46, 0, 0, 4322, 4323, 5, 117, 0, 0, 4323, 4337, 5, 110, 0, 0, 4324, 4325, 5, 108, 0, 0, 4325, 4326, 5, 101, 0, 0, 4326, 4327, 5, 97, 0, 0, 4327, 4328, 5, 118, 0, 0, 4328, 4337, 5, 101, 0, 0, 4329, 4330, 5, 108, 0, 0, 4330, 4331, 5, 101, 0, 0, 4331, 4332, 5, 97, 0, 0, 4332, 4333, 5, 118, 0, 0, 4333, 4334, 5, 101, 0, 0, 4334, 4335, 5, 46, 0, 0, 4335, 4337, 5, 115, 0, 0, 4336, 4178, 1, 0, 0, 0, 4336, 4182, 1, 0, 0, 0, 4336, 4191, 1, 0, 0, 0, 4336, 4199, 1, 0, 0, 0, 4336, 4204, 1, 0, 0, 0, 4336, 4209, 1, 0, 0, 0, 4336, 4214, 1, 0, 0, 0, 4336, 4219, 1, 0, 0, 0, 4336, 4224, 1, 0, 0, 0, 4336, 4232, 1, 0, 0, 0, 4336, 4240, 1, 0, 0, 0, 4336, 4248, 1, 0, 0, 0, 4336, 4256, 1, 0, 0, 0, 4336, 4264, 1, 0, 0, 0, 4336, 4266, 1, 0, 0, 0, 4336, 4273, 1, 0, 0, 0, 4336, 4279, 1, 0, 0, 0, 4336, 4282, 1, 0, 0, 0, 4336, 4285, 1, 0, 0, 0, 4336, 4288, 1, 0, 0, 0, 4336, 4291, 1, 0, 0, 0, 4336, 4294, 1, 0, 0, 0, 4336, 4300, 1, 0, 0, 0, 4336, 4306, 1, 0, 0, 0, 4336, 4312, 1, 0, 0, 0, 4336, 4318, 1, 0, 0, 0, 4336, 4324, 1, 0, 0, 0, 4336, 4329, 1, 0, 0, 0, 4337, 570, 1, 0, 0, 0, 4338, 4339, 5, 115, 0, 0, 4339, 4340, 5, 119, 0, 0, 4340, 4341, 5, 105, 0, 0, 4341, 4342, 5, 116, 0, 0, 4342, 4343, 5, 99, 0, 0, 4343, 4344, 5, 104, 0, 0, 4344, 572, 1, 0, 0, 0, 4345, 4346, 5, 99, 0, 0, 4346, 4347, 5, 112, 0, 0, 4347, 4348, 5, 111, 0, 0, 4348, 4349, 5, 98, 0, 0, 4349, 4460, 5, 106, 0, 0, 4350, 4351, 5, 108, 0, 0, 4351, 4352, 5, 100, 0, 0, 4352, 4353, 5, 111, 0, 0, 4353, 4354, 5, 98, 0, 0, 4354, 4460, 5, 106, 0, 0, 4355, 4356, 5, 99, 0, 0, 4356, 4357, 5, 97, 0, 0, 4357, 4358, 5, 115, 0, 0, 4358, 4359, 5, 116, 0, 0, 4359, 4360, 5, 99, 0, 0, 4360, 4361, 5, 108, 0, 0, 4361, 4362, 5, 97, 0, 0, 4362, 4363, 5, 115, 0, 0, 4363, 4460, 5, 115, 0, 0, 4364, 4365, 5, 105, 0, 0, 4365, 4366, 5, 115, 0, 0, 4366, 4367, 5, 105, 0, 0, 4367, 4368, 5, 110, 0, 0, 4368, 4369, 5, 115, 0, 0, 4369, 4460, 5, 116, 0, 0, 4370, 4371, 5, 117, 0, 0, 4371, 4372, 5, 110, 0, 0, 4372, 4373, 5, 98, 0, 0, 4373, 4374, 5, 111, 0, 0, 4374, 4460, 5, 120, 0, 0, 4375, 4376, 5, 115, 0, 0, 4376, 4377, 5, 116, 0, 0, 4377, 4378, 5, 111, 0, 0, 4378, 4379, 5, 98, 0, 0, 4379, 4460, 5, 106, 0, 0, 4380, 4381, 5, 98, 0, 0, 4381, 4382, 5, 111, 0, 0, 4382, 4460, 5, 120, 0, 0, 4383, 4384, 5, 110, 0, 0, 4384, 4385, 5, 101, 0, 0, 4385, 4386, 5, 119, 0, 0, 4386, 4387, 5, 97, 0, 0, 4387, 4388, 5, 114, 0, 0, 4388, 4460, 5, 114, 0, 0, 4389, 4390, 5, 108, 0, 0, 4390, 4391, 5, 100, 0, 0, 4391, 4392, 5, 101, 0, 0, 4392, 4393, 5, 108, 0, 0, 4393, 4394, 5, 101, 0, 0, 4394, 4395, 5, 109, 0, 0, 4395, 4460, 5, 97, 0, 0, 4396, 4397, 5, 108, 0, 0, 4397, 4398, 5, 100, 0, 0, 4398, 4399, 5, 101, 0, 0, 4399, 4400, 5, 108, 0, 0, 4400, 4401, 5, 101, 0, 0, 4401, 4460, 5, 109, 0, 0, 4402, 4403, 5, 115, 0, 0, 4403, 4404, 5, 116, 0, 0, 4404, 4405, 5, 101, 0, 0, 4405, 4406, 5, 108, 0, 0, 4406, 4407, 5, 101, 0, 0, 4407, 4460, 5, 109, 0, 0, 4408, 4409, 5, 117, 0, 0, 4409, 4410, 5, 110, 0, 0, 4410, 4411, 5, 98, 0, 0, 4411, 4412, 5, 111, 0, 0, 4412, 4413, 5, 120, 0, 0, 4413, 4414, 5, 46, 0, 0, 4414, 4415, 5, 97, 0, 0, 4415, 4416, 5, 110, 0, 0, 4416, 4460, 5, 121, 0, 0, 4417, 4418, 5, 114, 0, 0, 4418, 4419, 5, 101, 0, 0, 4419, 4420, 5, 102, 0, 0, 4420, 4421, 5, 97, 0, 0, 4421, 4422, 5, 110, 0, 0, 4422, 4423, 5, 121, 0, 0, 4423, 4424, 5, 118, 0, 0, 4424, 4425, 5, 97, 0, 0, 4425, 4460, 5, 108, 0, 0, 4426, 4427, 5, 109, 0, 0, 4427, 4428, 5, 107, 0, 0, 4428, 4429, 5, 114, 0, 0, 4429, 4430, 5, 101, 0, 0, 4430, 4431, 5, 102, 0, 0, 4431, 4432, 5, 97, 0, 0, 4432, 4433, 5, 110, 0, 0, 4433, 4460, 5, 121, 0, 0, 4434, 4435, 5, 105, 0, 0, 4435, 4436, 5, 110, 0, 0, 4436, 4437, 5, 105, 0, 0, 4437, 4438, 5, 116, 0, 0, 4438, 4439, 5, 111, 0, 0, 4439, 4440, 5, 98, 0, 0, 4440, 4460, 5, 106, 0, 0, 4441, 4442, 5, 99, 0, 0, 4442, 4443, 5, 111, 0, 0, 4443, 4444, 5, 110, 0, 0, 4444, 4445, 5, 115, 0, 0, 4445, 4446, 5, 116, 0, 0, 4446, 4447, 5, 114, 0, 0, 4447, 4448, 5, 97, 0, 0, 4448, 4449, 5, 105, 0, 0, 4449, 4450, 5, 110, 0, 0, 4450, 4451, 5, 101, 0, 0, 4451, 4452, 5, 100, 0, 0, 4452, 4460, 5, 46, 0, 0, 4453, 4454, 5, 115, 0, 0, 4454, 4455, 5, 105, 0, 0, 4455, 4456, 5, 122, 0, 0, 4456, 4457, 5, 101, 0, 0, 4457, 4458, 5, 111, 0, 0, 4458, 4460, 5, 102, 0, 0, 4459, 4345, 1, 0, 0, 0, 4459, 4350, 1, 0, 0, 0, 4459, 4355, 1, 0, 0, 0, 4459, 4364, 1, 0, 0, 0, 4459, 4370, 1, 0, 0, 0, 4459, 4375, 1, 0, 0, 0, 4459, 4380, 1, 0, 0, 0, 4459, 4383, 1, 0, 0, 0, 4459, 4389, 1, 0, 0, 0, 4459, 4396, 1, 0, 0, 0, 4459, 4402, 1, 0, 0, 0, 4459, 4408, 1, 0, 0, 0, 4459, 4417, 1, 0, 0, 0, 4459, 4426, 1, 0, 0, 0, 4459, 4434, 1, 0, 0, 0, 4459, 4441, 1, 0, 0, 0, 4459, 4453, 1, 0, 0, 0, 4460, 574, 1, 0, 0, 0, 4461, 4462, 5, 108, 0, 0, 4462, 4463, 5, 100, 0, 0, 4463, 4464, 5, 115, 0, 0, 4464, 4465, 5, 116, 0, 0, 4465, 4466, 5, 114, 0, 0, 4466, 576, 1, 0, 0, 0, 4467, 4468, 5, 108, 0, 0, 4468, 4469, 5, 100, 0, 0, 4469, 4470, 5, 102, 0, 0, 4470, 4471, 5, 108, 0, 0, 4471, 4503, 5, 100, 0, 0, 4472, 4473, 5, 108, 0, 0, 4473, 4474, 5, 100, 0, 0, 4474, 4475, 5, 102, 0, 0, 4475, 4476, 5, 108, 0, 0, 4476, 4477, 5, 100, 0, 0, 4477, 4503, 5, 97, 0, 0, 4478, 4479, 5, 115, 0, 0, 4479, 4480, 5, 116, 0, 0, 4480, 4481, 5, 102, 0, 0, 4481, 4482, 5, 108, 0, 0, 4482, 4503, 5, 100, 0, 0, 4483, 4484, 5, 108, 0, 0, 4484, 4485, 5, 100, 0, 0, 4485, 4486, 5, 115, 0, 0, 4486, 4487, 5, 102, 0, 0, 4487, 4488, 5, 108, 0, 0, 4488, 4503, 5, 100, 0, 0, 4489, 4490, 5, 108, 0, 0, 4490, 4491, 5, 100, 0, 0, 4491, 4492, 5, 115, 0, 0, 4492, 4493, 5, 102, 0, 0, 4493, 4494, 5, 108, 0, 0, 4494, 4495, 5, 100, 0, 0, 4495, 4503, 5, 97, 0, 0, 4496, 4497, 5, 115, 0, 0, 4497, 4498, 5, 116, 0, 0, 4498, 4499, 5, 115, 0, 0, 4499, 4500, 5, 102, 0, 0, 4500, 4501, 5, 108, 0, 0, 4501, 4503, 5, 100, 0, 0, 4502, 4467, 1, 0, 0, 0, 4502, 4472, 1, 0, 0, 0, 4502, 4478, 1, 0, 0, 0, 4502, 4483, 1, 0, 0, 0, 4502, 4489, 1, 0, 0, 0, 4502, 4496, 1, 0, 0, 0, 4503, 578, 1, 0, 0, 0, 4504, 4505, 5, 108, 0, 0, 4505, 4506, 5, 100, 0, 0, 4506, 4507, 5, 116, 0, 0, 4507, 4508, 5, 111, 0, 0, 4508, 4509, 5, 107, 0, 0, 4509, 4510, 5, 101, 0, 0, 4510, 4511, 5, 110, 0, 0, 4511, 580, 1, 0, 0, 0, 4512, 4513, 7, 5, 0, 0, 4513, 582, 1, 0, 0, 0, 4514, 4515, 7, 6, 0, 0, 4515, 584, 1, 0, 0, 0, 4516, 4517, 3, 587, 293, 0, 4517, 4518, 3, 535, 267, 0, 4518, 4520, 1, 0, 0, 0, 4519, 4516, 1, 0, 0, 0, 4520, 4521, 1, 0, 0, 0, 4521, 4519, 1, 0, 0, 0, 4521, 4522, 1, 0, 0, 0, 4522, 4523, 1, 0, 0, 0, 4523, 4524, 3, 587, 293, 0, 4524, 586, 1, 0, 0, 0, 4525, 4529, 3, 581, 290, 0, 4526, 4528, 3, 583, 291, 0, 4527, 4526, 1, 0, 0, 0, 4528, 4531, 1, 0, 0, 0, 4529, 4527, 1, 0, 0, 0, 4529, 4530, 1, 0, 0, 0, 4530, 588, 1, 0, 0, 0, 4531, 4529, 1, 0, 0, 0, 4532, 4533, 7, 7, 0, 0, 4533, 4534, 1, 0, 0, 0, 4534, 4535, 6, 294, 0, 0, 4535, 590, 1, 0, 0, 0, 4536, 4537, 5, 47, 0, 0, 4537, 4538, 5, 47, 0, 0, 4538, 4542, 1, 0, 0, 0, 4539, 4541, 8, 8, 0, 0, 4540, 4539, 1, 0, 0, 0, 4541, 4544, 1, 0, 0, 0, 4542, 4540, 1, 0, 0, 0, 4542, 4543, 1, 0, 0, 0, 4543, 4545, 1, 0, 0, 0, 4544, 4542, 1, 0, 0, 0, 4545, 4546, 6, 295, 0, 0, 4546, 592, 1, 0, 0, 0, 4547, 4548, 5, 47, 0, 0, 4548, 4549, 5, 42, 0, 0, 4549, 4553, 1, 0, 0, 0, 4550, 4552, 9, 0, 0, 0, 4551, 4550, 1, 0, 0, 0, 4552, 4555, 1, 0, 0, 0, 4553, 4554, 1, 0, 0, 0, 4553, 4551, 1, 0, 0, 0, 4554, 4556, 1, 0, 0, 0, 4555, 4553, 1, 0, 0, 0, 4556, 4557, 5, 42, 0, 0, 4557, 4558, 5, 47, 0, 0, 4558, 4559, 1, 0, 0, 0, 4559, 4560, 6, 296, 0, 0, 4560, 594, 1, 0, 0, 0, 4561, 4562, 5, 46, 0, 0, 4562, 4563, 5, 112, 0, 0, 4563, 4564, 5, 101, 0, 0, 4564, 4565, 5, 114, 0, 0, 4565, 4566, 5, 109, 0, 0, 4566, 4567, 5, 105, 0, 0, 4567, 4568, 5, 115, 0, 0, 4568, 4569, 5, 115, 0, 0, 4569, 4570, 5, 105, 0, 0, 4570, 4571, 5, 111, 0, 0, 4571, 4572, 5, 110, 0, 0, 4572, 596, 1, 0, 0, 0, 4573, 4574, 5, 46, 0, 0, 4574, 4575, 5, 112, 0, 0, 4575, 4576, 5, 101, 0, 0, 4576, 4577, 5, 114, 0, 0, 4577, 4578, 5, 109, 0, 0, 4578, 4579, 5, 105, 0, 0, 4579, 4580, 5, 115, 0, 0, 4580, 4581, 5, 115, 0, 0, 4581, 4582, 5, 105, 0, 0, 4582, 4583, 5, 111, 0, 0, 4583, 4584, 5, 110, 0, 0, 4584, 4585, 5, 115, 0, 0, 4585, 4586, 5, 101, 0, 0, 4586, 4587, 5, 116, 0, 0, 4587, 598, 1, 0, 0, 0, 4588, 4589, 5, 46, 0, 0, 4589, 4590, 5, 101, 0, 0, 4590, 4591, 5, 109, 0, 0, 4591, 4592, 5, 105, 0, 0, 4592, 4593, 5, 116, 0, 0, 4593, 4594, 5, 98, 0, 0, 4594, 4595, 5, 121, 0, 0, 4595, 4596, 5, 116, 0, 0, 4596, 4597, 5, 101, 0, 0, 4597, 600, 1, 0, 0, 0, 4598, 4599, 5, 46, 0, 0, 4599, 4600, 5, 109, 0, 0, 4600, 4601, 5, 97, 0, 0, 4601, 4602, 5, 120, 0, 0, 4602, 4603, 5, 115, 0, 0, 4603, 4604, 5, 116, 0, 0, 4604, 4605, 5, 97, 0, 0, 4605, 4606, 5, 99, 0, 0, 4606, 4607, 5, 107, 0, 0, 4607, 602, 1, 0, 0, 0, 4608, 4609, 5, 46, 0, 0, 4609, 4610, 5, 101, 0, 0, 4610, 4611, 5, 110, 0, 0, 4611, 4612, 5, 116, 0, 0, 4612, 4613, 5, 114, 0, 0, 4613, 4614, 5, 121, 0, 0, 4614, 4615, 5, 112, 0, 0, 4615, 4616, 5, 111, 0, 0, 4616, 4617, 5, 105, 0, 0, 4617, 4618, 5, 110, 0, 0, 4618, 4619, 5, 116, 0, 0, 4619, 604, 1, 0, 0, 0, 4620, 4621, 5, 46, 0, 0, 4621, 4622, 5, 122, 0, 0, 4622, 4623, 5, 101, 0, 0, 4623, 4624, 5, 114, 0, 0, 4624, 4625, 5, 111, 0, 0, 4625, 4626, 5, 105, 0, 0, 4626, 4627, 5, 110, 0, 0, 4627, 4628, 5, 105, 0, 0, 4628, 4629, 5, 116, 0, 0, 4629, 606, 1, 0, 0, 0, 4630, 4631, 5, 46, 0, 0, 4631, 4632, 5, 108, 0, 0, 4632, 4633, 5, 111, 0, 0, 4633, 4634, 5, 99, 0, 0, 4634, 4635, 5, 97, 0, 0, 4635, 4636, 5, 108, 0, 0, 4636, 4637, 5, 115, 0, 0, 4637, 608, 1, 0, 0, 0, 4638, 4639, 5, 46, 0, 0, 4639, 4640, 5, 101, 0, 0, 4640, 4641, 5, 120, 0, 0, 4641, 4642, 5, 112, 0, 0, 4642, 4643, 5, 111, 0, 0, 4643, 4644, 5, 114, 0, 0, 4644, 4645, 5, 116, 0, 0, 4645, 610, 1, 0, 0, 0, 4646, 4647, 5, 46, 0, 0, 4647, 4648, 5, 111, 0, 0, 4648, 4649, 5, 118, 0, 0, 4649, 4650, 5, 101, 0, 0, 4650, 4651, 5, 114, 0, 0, 4651, 4652, 5, 114, 0, 0, 4652, 4653, 5, 105, 0, 0, 4653, 4654, 5, 100, 0, 0, 4654, 4655, 5, 101, 0, 0, 4655, 612, 1, 0, 0, 0, 4656, 4657, 5, 46, 0, 0, 4657, 4658, 5, 118, 0, 0, 4658, 4659, 5, 116, 0, 0, 4659, 4660, 5, 101, 0, 0, 4660, 4661, 5, 110, 0, 0, 4661, 4662, 5, 116, 0, 0, 4662, 4663, 5, 114, 0, 0, 4663, 4664, 5, 121, 0, 0, 4664, 614, 1, 0, 0, 0, 37, 0, 2005, 2013, 2018, 2020, 2023, 2031, 2036, 2038, 2041, 2046, 2052, 2056, 2061, 2063, 2166, 2177, 2188, 2199, 2214, 2721, 2772, 2774, 2783, 2785, 4005, 4083, 4112, 4133, 4170, 4336, 4459, 4502, 4521, 4529, 4542, 4553, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 302, 4695, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 3, 171, 2025, 8, 171, 1, 171, 1, 171, 1, 171, 1, 171, 4, 171, 2031, 8, 171, 11, 171, 12, 171, 2032, 1, 171, 4, 171, 2036, 8, 171, 11, 171, 12, 171, 2037, 3, 171, 2040, 8, 171, 1, 172, 3, 172, 2043, 8, 172, 1, 172, 1, 172, 1, 172, 1, 172, 4, 172, 2049, 8, 172, 11, 172, 12, 172, 2050, 1, 172, 4, 172, 2054, 8, 172, 11, 172, 12, 172, 2055, 3, 172, 2058, 8, 172, 1, 173, 3, 173, 2061, 8, 173, 1, 173, 4, 173, 2064, 8, 173, 11, 173, 12, 173, 2065, 1, 173, 1, 173, 4, 173, 2070, 8, 173, 11, 173, 12, 173, 2071, 1, 173, 1, 173, 3, 173, 2076, 8, 173, 1, 173, 4, 173, 2079, 8, 173, 11, 173, 12, 173, 2080, 3, 173, 2083, 8, 173, 1, 173, 1, 173, 3, 173, 2087, 8, 173, 1, 173, 4, 173, 2090, 8, 173, 11, 173, 12, 173, 2091, 3, 173, 2094, 8, 173, 1, 173, 1, 173, 4, 173, 2098, 8, 173, 11, 173, 12, 173, 2099, 1, 173, 1, 173, 3, 173, 2104, 8, 173, 1, 173, 4, 173, 2107, 8, 173, 11, 173, 12, 173, 2108, 3, 173, 2111, 8, 173, 3, 173, 2113, 8, 173, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 3, 179, 2150, 8, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 3, 253, 2702, 8, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 3, 262, 2753, 8, 262, 1, 262, 3, 262, 2756, 8, 262, 1, 262, 3, 262, 2759, 8, 262, 1, 262, 3, 262, 2762, 8, 262, 1, 263, 1, 263, 1, 263, 5, 263, 2767, 8, 263, 10, 263, 12, 263, 2770, 9, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 5, 264, 2777, 8, 264, 10, 264, 12, 264, 2780, 9, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4033, 8, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 3, 276, 4111, 8, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 3, 277, 4140, 8, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 3, 279, 4161, 8, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 3, 280, 4198, 8, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 3, 282, 4364, 8, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 3, 284, 4487, 8, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 3, 286, 4530, 8, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 4, 290, 4547, 8, 290, 11, 290, 12, 290, 4548, 1, 290, 1, 290, 1, 291, 1, 291, 5, 291, 4555, 8, 291, 10, 291, 12, 291, 4558, 9, 291, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 5, 294, 4571, 8, 294, 10, 294, 12, 294, 4574, 9, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 5, 295, 4582, 8, 295, 10, 295, 12, 295, 4585, 9, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 4583, 0, 306, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 0, 379, 189, 381, 190, 383, 191, 385, 192, 387, 193, 389, 194, 391, 195, 393, 196, 395, 197, 397, 198, 399, 199, 401, 200, 403, 201, 405, 202, 407, 203, 409, 204, 411, 205, 413, 206, 415, 207, 417, 208, 419, 209, 421, 210, 423, 211, 425, 212, 427, 213, 429, 214, 431, 215, 433, 216, 435, 217, 437, 218, 439, 219, 441, 220, 443, 221, 445, 222, 447, 223, 449, 224, 451, 225, 453, 226, 455, 227, 457, 228, 459, 229, 461, 230, 463, 231, 465, 232, 467, 233, 469, 234, 471, 235, 473, 236, 475, 237, 477, 238, 479, 239, 481, 240, 483, 241, 485, 242, 487, 243, 489, 244, 491, 245, 493, 246, 495, 247, 497, 248, 499, 249, 501, 250, 503, 251, 505, 252, 507, 253, 509, 254, 511, 255, 513, 256, 515, 257, 517, 258, 519, 259, 521, 260, 523, 261, 525, 0, 527, 262, 529, 263, 531, 264, 533, 265, 535, 266, 537, 267, 539, 268, 541, 269, 543, 270, 545, 271, 547, 272, 549, 273, 551, 274, 553, 275, 555, 276, 557, 277, 559, 278, 561, 279, 563, 280, 565, 281, 567, 282, 569, 283, 571, 284, 573, 285, 575, 286, 577, 0, 579, 0, 581, 287, 583, 288, 585, 289, 587, 290, 589, 291, 591, 292, 593, 293, 595, 294, 597, 295, 599, 296, 601, 297, 603, 298, 605, 299, 607, 300, 609, 301, 611, 302, 1, 0, 12, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 11, 0, 34, 34, 39, 39, 47, 48, 63, 63, 92, 92, 97, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 1, 0, 48, 55, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 4, 0, 35, 36, 63, 90, 95, 95, 97, 122, 4, 0, 35, 36, 48, 57, 63, 90, 95, 122, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 4947, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 1, 613, 1, 0, 0, 0, 3, 620, 1, 0, 0, 0, 5, 624, 1, 0, 0, 0, 7, 630, 1, 0, 0, 0, 9, 638, 1, 0, 0, 0, 11, 649, 1, 0, 0, 0, 13, 661, 1, 0, 0, 0, 15, 669, 1, 0, 0, 0, 17, 682, 1, 0, 0, 0, 19, 695, 1, 0, 0, 0, 21, 706, 1, 0, 0, 0, 23, 725, 1, 0, 0, 0, 25, 740, 1, 0, 0, 0, 27, 763, 1, 0, 0, 0, 29, 769, 1, 0, 0, 0, 31, 778, 1, 0, 0, 0, 33, 780, 1, 0, 0, 0, 35, 782, 1, 0, 0, 0, 37, 793, 1, 0, 0, 0, 39, 803, 1, 0, 0, 0, 41, 809, 1, 0, 0, 0, 43, 819, 1, 0, 0, 0, 45, 830, 1, 0, 0, 0, 47, 844, 1, 0, 0, 0, 49, 854, 1, 0, 0, 0, 51, 864, 1, 0, 0, 0, 53, 874, 1, 0, 0, 0, 55, 876, 1, 0, 0, 0, 57, 886, 1, 0, 0, 0, 59, 888, 1, 0, 0, 0, 61, 890, 1, 0, 0, 0, 63, 892, 1, 0, 0, 0, 65, 901, 1, 0, 0, 0, 67, 904, 1, 0, 0, 0, 69, 912, 1, 0, 0, 0, 71, 914, 1, 0, 0, 0, 73, 920, 1, 0, 0, 0, 75, 929, 1, 0, 0, 0, 77, 935, 1, 0, 0, 0, 79, 942, 1, 0, 0, 0, 81, 951, 1, 0, 0, 0, 83, 953, 1, 0, 0, 0, 85, 955, 1, 0, 0, 0, 87, 958, 1, 0, 0, 0, 89, 972, 1, 0, 0, 0, 91, 988, 1, 0, 0, 0, 93, 1004, 1, 0, 0, 0, 95, 1012, 1, 0, 0, 0, 97, 1023, 1, 0, 0, 0, 99, 1030, 1, 0, 0, 0, 101, 1037, 1, 0, 0, 0, 103, 1045, 1, 0, 0, 0, 105, 1052, 1, 0, 0, 0, 107, 1061, 1, 0, 0, 0, 109, 1066, 1, 0, 0, 0, 111, 1077, 1, 0, 0, 0, 113, 1085, 1, 0, 0, 0, 115, 1094, 1, 0, 0, 0, 117, 1101, 1, 0, 0, 0, 119, 1114, 1, 0, 0, 0, 121, 1129, 1, 0, 0, 0, 123, 1136, 1, 0, 0, 0, 125, 1143, 1, 0, 0, 0, 127, 1152, 1, 0, 0, 0, 129, 1164, 1, 0, 0, 0, 131, 1175, 1, 0, 0, 0, 133, 1191, 1, 0, 0, 0, 135, 1203, 1, 0, 0, 0, 137, 1217, 1, 0, 0, 0, 139, 1223, 1, 0, 0, 0, 141, 1231, 1, 0, 0, 0, 143, 1242, 1, 0, 0, 0, 145, 1248, 1, 0, 0, 0, 147, 1254, 1, 0, 0, 0, 149, 1256, 1, 0, 0, 0, 151, 1267, 1, 0, 0, 0, 153, 1280, 1, 0, 0, 0, 155, 1291, 1, 0, 0, 0, 157, 1306, 1, 0, 0, 0, 159, 1310, 1, 0, 0, 0, 161, 1316, 1, 0, 0, 0, 163, 1320, 1, 0, 0, 0, 165, 1326, 1, 0, 0, 0, 167, 1336, 1, 0, 0, 0, 169, 1339, 1, 0, 0, 0, 171, 1341, 1, 0, 0, 0, 173, 1343, 1, 0, 0, 0, 175, 1345, 1, 0, 0, 0, 177, 1355, 1, 0, 0, 0, 179, 1364, 1, 0, 0, 0, 181, 1371, 1, 0, 0, 0, 183, 1378, 1, 0, 0, 0, 185, 1385, 1, 0, 0, 0, 187, 1394, 1, 0, 0, 0, 189, 1399, 1, 0, 0, 0, 191, 1405, 1, 0, 0, 0, 193, 1413, 1, 0, 0, 0, 195, 1420, 1, 0, 0, 0, 197, 1427, 1, 0, 0, 0, 199, 1432, 1, 0, 0, 0, 201, 1443, 1, 0, 0, 0, 203, 1453, 1, 0, 0, 0, 205, 1466, 1, 0, 0, 0, 207, 1473, 1, 0, 0, 0, 209, 1480, 1, 0, 0, 0, 211, 1490, 1, 0, 0, 0, 213, 1502, 1, 0, 0, 0, 215, 1513, 1, 0, 0, 0, 217, 1526, 1, 0, 0, 0, 219, 1543, 1, 0, 0, 0, 221, 1561, 1, 0, 0, 0, 223, 1570, 1, 0, 0, 0, 225, 1578, 1, 0, 0, 0, 227, 1580, 1, 0, 0, 0, 229, 1590, 1, 0, 0, 0, 231, 1596, 1, 0, 0, 0, 233, 1602, 1, 0, 0, 0, 235, 1608, 1, 0, 0, 0, 237, 1613, 1, 0, 0, 0, 239, 1628, 1, 0, 0, 0, 241, 1635, 1, 0, 0, 0, 243, 1643, 1, 0, 0, 0, 245, 1650, 1, 0, 0, 0, 247, 1659, 1, 0, 0, 0, 249, 1672, 1, 0, 0, 0, 251, 1680, 1, 0, 0, 0, 253, 1694, 1, 0, 0, 0, 255, 1703, 1, 0, 0, 0, 257, 1710, 1, 0, 0, 0, 259, 1717, 1, 0, 0, 0, 261, 1727, 1, 0, 0, 0, 263, 1733, 1, 0, 0, 0, 265, 1740, 1, 0, 0, 0, 267, 1750, 1, 0, 0, 0, 269, 1755, 1, 0, 0, 0, 271, 1760, 1, 0, 0, 0, 273, 1763, 1, 0, 0, 0, 275, 1767, 1, 0, 0, 0, 277, 1771, 1, 0, 0, 0, 279, 1779, 1, 0, 0, 0, 281, 1785, 1, 0, 0, 0, 283, 1793, 1, 0, 0, 0, 285, 1800, 1, 0, 0, 0, 287, 1810, 1, 0, 0, 0, 289, 1818, 1, 0, 0, 0, 291, 1831, 1, 0, 0, 0, 293, 1841, 1, 0, 0, 0, 295, 1853, 1, 0, 0, 0, 297, 1862, 1, 0, 0, 0, 299, 1870, 1, 0, 0, 0, 301, 1877, 1, 0, 0, 0, 303, 1885, 1, 0, 0, 0, 305, 1888, 1, 0, 0, 0, 307, 1892, 1, 0, 0, 0, 309, 1905, 1, 0, 0, 0, 311, 1912, 1, 0, 0, 0, 313, 1915, 1, 0, 0, 0, 315, 1920, 1, 0, 0, 0, 317, 1925, 1, 0, 0, 0, 319, 1928, 1, 0, 0, 0, 321, 1935, 1, 0, 0, 0, 323, 1941, 1, 0, 0, 0, 325, 1949, 1, 0, 0, 0, 327, 1955, 1, 0, 0, 0, 329, 1963, 1, 0, 0, 0, 331, 1969, 1, 0, 0, 0, 333, 1973, 1, 0, 0, 0, 335, 1984, 1, 0, 0, 0, 337, 1989, 1, 0, 0, 0, 339, 1997, 1, 0, 0, 0, 341, 2013, 1, 0, 0, 0, 343, 2024, 1, 0, 0, 0, 345, 2042, 1, 0, 0, 0, 347, 2060, 1, 0, 0, 0, 349, 2114, 1, 0, 0, 0, 351, 2117, 1, 0, 0, 0, 353, 2121, 1, 0, 0, 0, 355, 2126, 1, 0, 0, 0, 357, 2134, 1, 0, 0, 0, 359, 2149, 1, 0, 0, 0, 361, 2151, 1, 0, 0, 0, 363, 2158, 1, 0, 0, 0, 365, 2163, 1, 0, 0, 0, 367, 2168, 1, 0, 0, 0, 369, 2174, 1, 0, 0, 0, 371, 2180, 1, 0, 0, 0, 373, 2186, 1, 0, 0, 0, 375, 2194, 1, 0, 0, 0, 377, 2202, 1, 0, 0, 0, 379, 2211, 1, 0, 0, 0, 381, 2217, 1, 0, 0, 0, 383, 2224, 1, 0, 0, 0, 385, 2231, 1, 0, 0, 0, 387, 2238, 1, 0, 0, 0, 389, 2242, 1, 0, 0, 0, 391, 2247, 1, 0, 0, 0, 393, 2252, 1, 0, 0, 0, 395, 2259, 1, 0, 0, 0, 397, 2267, 1, 0, 0, 0, 399, 2273, 1, 0, 0, 0, 401, 2283, 1, 0, 0, 0, 403, 2288, 1, 0, 0, 0, 405, 2293, 1, 0, 0, 0, 407, 2300, 1, 0, 0, 0, 409, 2306, 1, 0, 0, 0, 411, 2315, 1, 0, 0, 0, 413, 2321, 1, 0, 0, 0, 415, 2329, 1, 0, 0, 0, 417, 2338, 1, 0, 0, 0, 419, 2346, 1, 0, 0, 0, 421, 2352, 1, 0, 0, 0, 423, 2360, 1, 0, 0, 0, 425, 2365, 1, 0, 0, 0, 427, 2370, 1, 0, 0, 0, 429, 2376, 1, 0, 0, 0, 431, 2383, 1, 0, 0, 0, 433, 2390, 1, 0, 0, 0, 435, 2400, 1, 0, 0, 0, 437, 2409, 1, 0, 0, 0, 439, 2419, 1, 0, 0, 0, 441, 2426, 1, 0, 0, 0, 443, 2436, 1, 0, 0, 0, 445, 2446, 1, 0, 0, 0, 447, 2455, 1, 0, 0, 0, 449, 2460, 1, 0, 0, 0, 451, 2466, 1, 0, 0, 0, 453, 2473, 1, 0, 0, 0, 455, 2477, 1, 0, 0, 0, 457, 2486, 1, 0, 0, 0, 459, 2493, 1, 0, 0, 0, 461, 2501, 1, 0, 0, 0, 463, 2508, 1, 0, 0, 0, 465, 2520, 1, 0, 0, 0, 467, 2527, 1, 0, 0, 0, 469, 2536, 1, 0, 0, 0, 471, 2541, 1, 0, 0, 0, 473, 2548, 1, 0, 0, 0, 475, 2556, 1, 0, 0, 0, 477, 2572, 1, 0, 0, 0, 479, 2586, 1, 0, 0, 0, 481, 2598, 1, 0, 0, 0, 483, 2601, 1, 0, 0, 0, 485, 2607, 1, 0, 0, 0, 487, 2616, 1, 0, 0, 0, 489, 2625, 1, 0, 0, 0, 491, 2633, 1, 0, 0, 0, 493, 2640, 1, 0, 0, 0, 495, 2650, 1, 0, 0, 0, 497, 2656, 1, 0, 0, 0, 499, 2664, 1, 0, 0, 0, 501, 2673, 1, 0, 0, 0, 503, 2682, 1, 0, 0, 0, 505, 2684, 1, 0, 0, 0, 507, 2701, 1, 0, 0, 0, 509, 2703, 1, 0, 0, 0, 511, 2710, 1, 0, 0, 0, 513, 2721, 1, 0, 0, 0, 515, 2727, 1, 0, 0, 0, 517, 2733, 1, 0, 0, 0, 519, 2741, 1, 0, 0, 0, 521, 2743, 1, 0, 0, 0, 523, 2746, 1, 0, 0, 0, 525, 2748, 1, 0, 0, 0, 527, 2763, 1, 0, 0, 0, 529, 2773, 1, 0, 0, 0, 531, 2783, 1, 0, 0, 0, 533, 2785, 1, 0, 0, 0, 535, 2787, 1, 0, 0, 0, 537, 2795, 1, 0, 0, 0, 539, 2802, 1, 0, 0, 0, 541, 2809, 1, 0, 0, 0, 543, 2817, 1, 0, 0, 0, 545, 2823, 1, 0, 0, 0, 547, 2830, 1, 0, 0, 0, 549, 2839, 1, 0, 0, 0, 551, 4032, 1, 0, 0, 0, 553, 4110, 1, 0, 0, 0, 555, 4139, 1, 0, 0, 0, 557, 4141, 1, 0, 0, 0, 559, 4160, 1, 0, 0, 0, 561, 4197, 1, 0, 0, 0, 563, 4199, 1, 0, 0, 0, 565, 4363, 1, 0, 0, 0, 567, 4365, 1, 0, 0, 0, 569, 4486, 1, 0, 0, 0, 571, 4488, 1, 0, 0, 0, 573, 4529, 1, 0, 0, 0, 575, 4531, 1, 0, 0, 0, 577, 4539, 1, 0, 0, 0, 579, 4541, 1, 0, 0, 0, 581, 4546, 1, 0, 0, 0, 583, 4552, 1, 0, 0, 0, 585, 4559, 1, 0, 0, 0, 587, 4562, 1, 0, 0, 0, 589, 4566, 1, 0, 0, 0, 591, 4577, 1, 0, 0, 0, 593, 4591, 1, 0, 0, 0, 595, 4603, 1, 0, 0, 0, 597, 4618, 1, 0, 0, 0, 599, 4628, 1, 0, 0, 0, 601, 4638, 1, 0, 0, 0, 603, 4650, 1, 0, 0, 0, 605, 4660, 1, 0, 0, 0, 607, 4668, 1, 0, 0, 0, 609, 4676, 1, 0, 0, 0, 611, 4686, 1, 0, 0, 0, 613, 614, 5, 110, 0, 0, 614, 615, 5, 97, 0, 0, 615, 616, 5, 116, 0, 0, 616, 617, 5, 105, 0, 0, 617, 618, 5, 118, 0, 0, 618, 619, 5, 101, 0, 0, 619, 2, 1, 0, 0, 0, 620, 621, 5, 99, 0, 0, 621, 622, 5, 105, 0, 0, 622, 623, 5, 108, 0, 0, 623, 4, 1, 0, 0, 0, 624, 625, 5, 111, 0, 0, 625, 626, 5, 112, 0, 0, 626, 627, 5, 116, 0, 0, 627, 628, 5, 105, 0, 0, 628, 629, 5, 108, 0, 0, 629, 6, 1, 0, 0, 0, 630, 631, 5, 109, 0, 0, 631, 632, 5, 97, 0, 0, 632, 633, 5, 110, 0, 0, 633, 634, 5, 97, 0, 0, 634, 635, 5, 103, 0, 0, 635, 636, 5, 101, 0, 0, 636, 637, 5, 100, 0, 0, 637, 8, 1, 0, 0, 0, 638, 639, 5, 102, 0, 0, 639, 640, 5, 111, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 119, 0, 0, 642, 643, 5, 97, 0, 0, 643, 644, 5, 114, 0, 0, 644, 645, 5, 100, 0, 0, 645, 646, 5, 114, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 102, 0, 0, 648, 10, 1, 0, 0, 0, 649, 650, 5, 112, 0, 0, 650, 651, 5, 114, 0, 0, 651, 652, 5, 101, 0, 0, 652, 653, 5, 115, 0, 0, 653, 654, 5, 101, 0, 0, 654, 655, 5, 114, 0, 0, 655, 656, 5, 118, 0, 0, 656, 657, 5, 101, 0, 0, 657, 658, 5, 115, 0, 0, 658, 659, 5, 105, 0, 0, 659, 660, 5, 103, 0, 0, 660, 12, 1, 0, 0, 0, 661, 662, 5, 114, 0, 0, 662, 663, 5, 117, 0, 0, 663, 664, 5, 110, 0, 0, 664, 665, 5, 116, 0, 0, 665, 666, 5, 105, 0, 0, 666, 667, 5, 109, 0, 0, 667, 668, 5, 101, 0, 0, 668, 14, 1, 0, 0, 0, 669, 670, 5, 105, 0, 0, 670, 671, 5, 110, 0, 0, 671, 672, 5, 116, 0, 0, 672, 673, 5, 101, 0, 0, 673, 674, 5, 114, 0, 0, 674, 675, 5, 110, 0, 0, 675, 676, 5, 97, 0, 0, 676, 677, 5, 108, 0, 0, 677, 678, 5, 99, 0, 0, 678, 679, 5, 97, 0, 0, 679, 680, 5, 108, 0, 0, 680, 681, 5, 108, 0, 0, 681, 16, 1, 0, 0, 0, 682, 683, 5, 115, 0, 0, 683, 684, 5, 121, 0, 0, 684, 685, 5, 110, 0, 0, 685, 686, 5, 99, 0, 0, 686, 687, 5, 104, 0, 0, 687, 688, 5, 114, 0, 0, 688, 689, 5, 111, 0, 0, 689, 690, 5, 110, 0, 0, 690, 691, 5, 105, 0, 0, 691, 692, 5, 122, 0, 0, 692, 693, 5, 101, 0, 0, 693, 694, 5, 100, 0, 0, 694, 18, 1, 0, 0, 0, 695, 696, 5, 110, 0, 0, 696, 697, 5, 111, 0, 0, 697, 698, 5, 105, 0, 0, 698, 699, 5, 110, 0, 0, 699, 700, 5, 108, 0, 0, 700, 701, 5, 105, 0, 0, 701, 702, 5, 110, 0, 0, 702, 703, 5, 105, 0, 0, 703, 704, 5, 110, 0, 0, 704, 705, 5, 103, 0, 0, 705, 20, 1, 0, 0, 0, 706, 707, 5, 97, 0, 0, 707, 708, 5, 103, 0, 0, 708, 709, 5, 103, 0, 0, 709, 710, 5, 114, 0, 0, 710, 711, 5, 101, 0, 0, 711, 712, 5, 115, 0, 0, 712, 713, 5, 115, 0, 0, 713, 714, 5, 105, 0, 0, 714, 715, 5, 118, 0, 0, 715, 716, 5, 101, 0, 0, 716, 717, 5, 105, 0, 0, 717, 718, 5, 110, 0, 0, 718, 719, 5, 108, 0, 0, 719, 720, 5, 105, 0, 0, 720, 721, 5, 110, 0, 0, 721, 722, 5, 105, 0, 0, 722, 723, 5, 110, 0, 0, 723, 724, 5, 103, 0, 0, 724, 22, 1, 0, 0, 0, 725, 726, 5, 110, 0, 0, 726, 727, 5, 111, 0, 0, 727, 728, 5, 111, 0, 0, 728, 729, 5, 112, 0, 0, 729, 730, 5, 116, 0, 0, 730, 731, 5, 105, 0, 0, 731, 732, 5, 109, 0, 0, 732, 733, 5, 105, 0, 0, 733, 734, 5, 122, 0, 0, 734, 735, 5, 97, 0, 0, 735, 736, 5, 116, 0, 0, 736, 737, 5, 105, 0, 0, 737, 738, 5, 111, 0, 0, 738, 739, 5, 110, 0, 0, 739, 24, 1, 0, 0, 0, 740, 741, 5, 97, 0, 0, 741, 742, 5, 103, 0, 0, 742, 743, 5, 103, 0, 0, 743, 744, 5, 114, 0, 0, 744, 745, 5, 101, 0, 0, 745, 746, 5, 115, 0, 0, 746, 747, 5, 115, 0, 0, 747, 748, 5, 105, 0, 0, 748, 749, 5, 118, 0, 0, 749, 750, 5, 101, 0, 0, 750, 751, 5, 111, 0, 0, 751, 752, 5, 112, 0, 0, 752, 753, 5, 116, 0, 0, 753, 754, 5, 105, 0, 0, 754, 755, 5, 109, 0, 0, 755, 756, 5, 105, 0, 0, 756, 757, 5, 122, 0, 0, 757, 758, 5, 97, 0, 0, 758, 759, 5, 116, 0, 0, 759, 760, 5, 105, 0, 0, 760, 761, 5, 111, 0, 0, 761, 762, 5, 110, 0, 0, 762, 26, 1, 0, 0, 0, 763, 764, 5, 97, 0, 0, 764, 765, 5, 115, 0, 0, 765, 766, 5, 121, 0, 0, 766, 767, 5, 110, 0, 0, 767, 768, 5, 99, 0, 0, 768, 28, 1, 0, 0, 0, 769, 770, 5, 101, 0, 0, 770, 771, 5, 120, 0, 0, 771, 772, 5, 116, 0, 0, 772, 773, 5, 101, 0, 0, 773, 774, 5, 110, 0, 0, 774, 775, 5, 100, 0, 0, 775, 776, 5, 101, 0, 0, 776, 777, 5, 100, 0, 0, 777, 30, 1, 0, 0, 0, 778, 779, 5, 123, 0, 0, 779, 32, 1, 0, 0, 0, 780, 781, 5, 125, 0, 0, 781, 34, 1, 0, 0, 0, 782, 783, 5, 46, 0, 0, 783, 784, 5, 115, 0, 0, 784, 785, 5, 117, 0, 0, 785, 786, 5, 98, 0, 0, 786, 787, 5, 115, 0, 0, 787, 788, 5, 121, 0, 0, 788, 789, 5, 115, 0, 0, 789, 790, 5, 116, 0, 0, 790, 791, 5, 101, 0, 0, 791, 792, 5, 109, 0, 0, 792, 36, 1, 0, 0, 0, 793, 794, 5, 46, 0, 0, 794, 795, 5, 99, 0, 0, 795, 796, 5, 111, 0, 0, 796, 797, 5, 114, 0, 0, 797, 798, 5, 102, 0, 0, 798, 799, 5, 108, 0, 0, 799, 800, 5, 97, 0, 0, 800, 801, 5, 103, 0, 0, 801, 802, 5, 115, 0, 0, 802, 38, 1, 0, 0, 0, 803, 804, 5, 46, 0, 0, 804, 805, 5, 102, 0, 0, 805, 806, 5, 105, 0, 0, 806, 807, 5, 108, 0, 0, 807, 808, 5, 101, 0, 0, 808, 40, 1, 0, 0, 0, 809, 810, 5, 97, 0, 0, 810, 811, 5, 108, 0, 0, 811, 812, 5, 105, 0, 0, 812, 813, 5, 103, 0, 0, 813, 814, 5, 110, 0, 0, 814, 815, 5, 109, 0, 0, 815, 816, 5, 101, 0, 0, 816, 817, 5, 110, 0, 0, 817, 818, 5, 116, 0, 0, 818, 42, 1, 0, 0, 0, 819, 820, 5, 46, 0, 0, 820, 821, 5, 105, 0, 0, 821, 822, 5, 109, 0, 0, 822, 823, 5, 97, 0, 0, 823, 824, 5, 103, 0, 0, 824, 825, 5, 101, 0, 0, 825, 826, 5, 98, 0, 0, 826, 827, 5, 97, 0, 0, 827, 828, 5, 115, 0, 0, 828, 829, 5, 101, 0, 0, 829, 44, 1, 0, 0, 0, 830, 831, 5, 46, 0, 0, 831, 832, 5, 115, 0, 0, 832, 833, 5, 116, 0, 0, 833, 834, 5, 97, 0, 0, 834, 835, 5, 99, 0, 0, 835, 836, 5, 107, 0, 0, 836, 837, 5, 114, 0, 0, 837, 838, 5, 101, 0, 0, 838, 839, 5, 115, 0, 0, 839, 840, 5, 101, 0, 0, 840, 841, 5, 114, 0, 0, 841, 842, 5, 118, 0, 0, 842, 843, 5, 101, 0, 0, 843, 46, 1, 0, 0, 0, 844, 845, 5, 46, 0, 0, 845, 846, 5, 97, 0, 0, 846, 847, 5, 115, 0, 0, 847, 848, 5, 115, 0, 0, 848, 849, 5, 101, 0, 0, 849, 850, 5, 109, 0, 0, 850, 851, 5, 98, 0, 0, 851, 852, 5, 108, 0, 0, 852, 853, 5, 121, 0, 0, 853, 48, 1, 0, 0, 0, 854, 855, 5, 46, 0, 0, 855, 856, 5, 109, 0, 0, 856, 857, 5, 115, 0, 0, 857, 858, 5, 99, 0, 0, 858, 859, 5, 111, 0, 0, 859, 860, 5, 114, 0, 0, 860, 861, 5, 108, 0, 0, 861, 862, 5, 105, 0, 0, 862, 863, 5, 98, 0, 0, 863, 50, 1, 0, 0, 0, 864, 865, 5, 46, 0, 0, 865, 866, 5, 108, 0, 0, 866, 867, 5, 97, 0, 0, 867, 868, 5, 110, 0, 0, 868, 869, 5, 103, 0, 0, 869, 870, 5, 117, 0, 0, 870, 871, 5, 97, 0, 0, 871, 872, 5, 103, 0, 0, 872, 873, 5, 101, 0, 0, 873, 52, 1, 0, 0, 0, 874, 875, 5, 44, 0, 0, 875, 54, 1, 0, 0, 0, 876, 877, 5, 46, 0, 0, 877, 878, 5, 116, 0, 0, 878, 879, 5, 121, 0, 0, 879, 880, 5, 112, 0, 0, 880, 881, 5, 101, 0, 0, 881, 882, 5, 108, 0, 0, 882, 883, 5, 105, 0, 0, 883, 884, 5, 115, 0, 0, 884, 885, 5, 116, 0, 0, 885, 56, 1, 0, 0, 0, 886, 887, 5, 40, 0, 0, 887, 58, 1, 0, 0, 0, 888, 889, 5, 41, 0, 0, 889, 60, 1, 0, 0, 0, 890, 891, 5, 59, 0, 0, 891, 62, 1, 0, 0, 0, 892, 893, 5, 46, 0, 0, 893, 894, 5, 116, 0, 0, 894, 895, 5, 121, 0, 0, 895, 896, 5, 112, 0, 0, 896, 897, 5, 101, 0, 0, 897, 898, 5, 100, 0, 0, 898, 899, 5, 101, 0, 0, 899, 900, 5, 102, 0, 0, 900, 64, 1, 0, 0, 0, 901, 902, 5, 97, 0, 0, 902, 903, 5, 115, 0, 0, 903, 66, 1, 0, 0, 0, 904, 905, 5, 46, 0, 0, 905, 906, 5, 99, 0, 0, 906, 907, 5, 117, 0, 0, 907, 908, 5, 115, 0, 0, 908, 909, 5, 116, 0, 0, 909, 910, 5, 111, 0, 0, 910, 911, 5, 109, 0, 0, 911, 68, 1, 0, 0, 0, 912, 913, 5, 61, 0, 0, 913, 70, 1, 0, 0, 0, 914, 915, 5, 102, 0, 0, 915, 916, 5, 105, 0, 0, 916, 917, 5, 101, 0, 0, 917, 918, 5, 108, 0, 0, 918, 919, 5, 100, 0, 0, 919, 72, 1, 0, 0, 0, 920, 921, 5, 112, 0, 0, 921, 922, 5, 114, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 112, 0, 0, 924, 925, 5, 101, 0, 0, 925, 926, 5, 114, 0, 0, 926, 927, 5, 116, 0, 0, 927, 928, 5, 121, 0, 0, 928, 74, 1, 0, 0, 0, 929, 930, 5, 99, 0, 0, 930, 931, 5, 108, 0, 0, 931, 932, 5, 97, 0, 0, 932, 933, 5, 115, 0, 0, 933, 934, 5, 115, 0, 0, 934, 76, 1, 0, 0, 0, 935, 936, 5, 101, 0, 0, 936, 937, 5, 120, 0, 0, 937, 938, 5, 116, 0, 0, 938, 939, 5, 101, 0, 0, 939, 940, 5, 114, 0, 0, 940, 941, 5, 110, 0, 0, 941, 78, 1, 0, 0, 0, 942, 943, 5, 46, 0, 0, 943, 944, 5, 118, 0, 0, 944, 945, 5, 116, 0, 0, 945, 946, 5, 102, 0, 0, 946, 947, 5, 105, 0, 0, 947, 948, 5, 120, 0, 0, 948, 949, 5, 117, 0, 0, 949, 950, 5, 112, 0, 0, 950, 80, 1, 0, 0, 0, 951, 952, 5, 91, 0, 0, 952, 82, 1, 0, 0, 0, 953, 954, 5, 93, 0, 0, 954, 84, 1, 0, 0, 0, 955, 956, 5, 97, 0, 0, 956, 957, 5, 116, 0, 0, 957, 86, 1, 0, 0, 0, 958, 959, 5, 102, 0, 0, 959, 960, 5, 114, 0, 0, 960, 961, 5, 111, 0, 0, 961, 962, 5, 109, 0, 0, 962, 963, 5, 117, 0, 0, 963, 964, 5, 110, 0, 0, 964, 965, 5, 109, 0, 0, 965, 966, 5, 97, 0, 0, 966, 967, 5, 110, 0, 0, 967, 968, 5, 97, 0, 0, 968, 969, 5, 103, 0, 0, 969, 970, 5, 101, 0, 0, 970, 971, 5, 100, 0, 0, 971, 88, 1, 0, 0, 0, 972, 973, 5, 99, 0, 0, 973, 974, 5, 97, 0, 0, 974, 975, 5, 108, 0, 0, 975, 976, 5, 108, 0, 0, 976, 977, 5, 109, 0, 0, 977, 978, 5, 111, 0, 0, 978, 979, 5, 115, 0, 0, 979, 980, 5, 116, 0, 0, 980, 981, 5, 100, 0, 0, 981, 982, 5, 101, 0, 0, 982, 983, 5, 114, 0, 0, 983, 984, 5, 105, 0, 0, 984, 985, 5, 118, 0, 0, 985, 986, 5, 101, 0, 0, 986, 987, 5, 100, 0, 0, 987, 90, 1, 0, 0, 0, 988, 989, 5, 114, 0, 0, 989, 990, 5, 101, 0, 0, 990, 991, 5, 116, 0, 0, 991, 992, 5, 97, 0, 0, 992, 993, 5, 105, 0, 0, 993, 994, 5, 110, 0, 0, 994, 995, 5, 97, 0, 0, 995, 996, 5, 112, 0, 0, 996, 997, 5, 112, 0, 0, 997, 998, 5, 100, 0, 0, 998, 999, 5, 111, 0, 0, 999, 1000, 5, 109, 0, 0, 1000, 1001, 5, 97, 0, 0, 1001, 1002, 5, 105, 0, 0, 1002, 1003, 5, 110, 0, 0, 1003, 92, 1, 0, 0, 0, 1004, 1005, 5, 46, 0, 0, 1005, 1006, 5, 118, 0, 0, 1006, 1007, 5, 116, 0, 0, 1007, 1008, 5, 97, 0, 0, 1008, 1009, 5, 98, 0, 0, 1009, 1010, 5, 108, 0, 0, 1010, 1011, 5, 101, 0, 0, 1011, 94, 1, 0, 0, 0, 1012, 1013, 5, 46, 0, 0, 1013, 1014, 5, 110, 0, 0, 1014, 1015, 5, 97, 0, 0, 1015, 1016, 5, 109, 0, 0, 1016, 1017, 5, 101, 0, 0, 1017, 1018, 5, 115, 0, 0, 1018, 1019, 5, 112, 0, 0, 1019, 1020, 5, 97, 0, 0, 1020, 1021, 5, 99, 0, 0, 1021, 1022, 5, 101, 0, 0, 1022, 96, 1, 0, 0, 0, 1023, 1024, 5, 46, 0, 0, 1024, 1025, 5, 99, 0, 0, 1025, 1026, 5, 108, 0, 0, 1026, 1027, 5, 97, 0, 0, 1027, 1028, 5, 115, 0, 0, 1028, 1029, 5, 115, 0, 0, 1029, 98, 1, 0, 0, 0, 1030, 1031, 5, 112, 0, 0, 1031, 1032, 5, 117, 0, 0, 1032, 1033, 5, 98, 0, 0, 1033, 1034, 5, 108, 0, 0, 1034, 1035, 5, 105, 0, 0, 1035, 1036, 5, 99, 0, 0, 1036, 100, 1, 0, 0, 0, 1037, 1038, 5, 112, 0, 0, 1038, 1039, 5, 114, 0, 0, 1039, 1040, 5, 105, 0, 0, 1040, 1041, 5, 118, 0, 0, 1041, 1042, 5, 97, 0, 0, 1042, 1043, 5, 116, 0, 0, 1043, 1044, 5, 101, 0, 0, 1044, 102, 1, 0, 0, 0, 1045, 1046, 5, 115, 0, 0, 1046, 1047, 5, 101, 0, 0, 1047, 1048, 5, 97, 0, 0, 1048, 1049, 5, 108, 0, 0, 1049, 1050, 5, 101, 0, 0, 1050, 1051, 5, 100, 0, 0, 1051, 104, 1, 0, 0, 0, 1052, 1053, 5, 97, 0, 0, 1053, 1054, 5, 98, 0, 0, 1054, 1055, 5, 115, 0, 0, 1055, 1056, 5, 116, 0, 0, 1056, 1057, 5, 114, 0, 0, 1057, 1058, 5, 97, 0, 0, 1058, 1059, 5, 99, 0, 0, 1059, 1060, 5, 116, 0, 0, 1060, 106, 1, 0, 0, 0, 1061, 1062, 5, 97, 0, 0, 1062, 1063, 5, 117, 0, 0, 1063, 1064, 5, 116, 0, 0, 1064, 1065, 5, 111, 0, 0, 1065, 108, 1, 0, 0, 0, 1066, 1067, 5, 115, 0, 0, 1067, 1068, 5, 101, 0, 0, 1068, 1069, 5, 113, 0, 0, 1069, 1070, 5, 117, 0, 0, 1070, 1071, 5, 101, 0, 0, 1071, 1072, 5, 110, 0, 0, 1072, 1073, 5, 116, 0, 0, 1073, 1074, 5, 105, 0, 0, 1074, 1075, 5, 97, 0, 0, 1075, 1076, 5, 108, 0, 0, 1076, 110, 1, 0, 0, 0, 1077, 1078, 5, 117, 0, 0, 1078, 1079, 5, 110, 0, 0, 1079, 1080, 5, 105, 0, 0, 1080, 1081, 5, 99, 0, 0, 1081, 1082, 5, 111, 0, 0, 1082, 1083, 5, 100, 0, 0, 1083, 1084, 5, 101, 0, 0, 1084, 112, 1, 0, 0, 0, 1085, 1086, 5, 97, 0, 0, 1086, 1087, 5, 117, 0, 0, 1087, 1088, 5, 116, 0, 0, 1088, 1089, 5, 111, 0, 0, 1089, 1090, 5, 99, 0, 0, 1090, 1091, 5, 104, 0, 0, 1091, 1092, 5, 97, 0, 0, 1092, 1093, 5, 114, 0, 0, 1093, 114, 1, 0, 0, 0, 1094, 1095, 5, 105, 0, 0, 1095, 1096, 5, 109, 0, 0, 1096, 1097, 5, 112, 0, 0, 1097, 1098, 5, 111, 0, 0, 1098, 1099, 5, 114, 0, 0, 1099, 1100, 5, 116, 0, 0, 1100, 116, 1, 0, 0, 0, 1101, 1102, 5, 115, 0, 0, 1102, 1103, 5, 101, 0, 0, 1103, 1104, 5, 114, 0, 0, 1104, 1105, 5, 105, 0, 0, 1105, 1106, 5, 97, 0, 0, 1106, 1107, 5, 108, 0, 0, 1107, 1108, 5, 105, 0, 0, 1108, 1109, 5, 122, 0, 0, 1109, 1110, 5, 97, 0, 0, 1110, 1111, 5, 98, 0, 0, 1111, 1112, 5, 108, 0, 0, 1112, 1113, 5, 101, 0, 0, 1113, 118, 1, 0, 0, 0, 1114, 1115, 5, 119, 0, 0, 1115, 1116, 5, 105, 0, 0, 1116, 1117, 5, 110, 0, 0, 1117, 1118, 5, 100, 0, 0, 1118, 1119, 5, 111, 0, 0, 1119, 1120, 5, 119, 0, 0, 1120, 1121, 5, 115, 0, 0, 1121, 1122, 5, 114, 0, 0, 1122, 1123, 5, 117, 0, 0, 1123, 1124, 5, 110, 0, 0, 1124, 1125, 5, 116, 0, 0, 1125, 1126, 5, 105, 0, 0, 1126, 1127, 5, 109, 0, 0, 1127, 1128, 5, 101, 0, 0, 1128, 120, 1, 0, 0, 0, 1129, 1130, 5, 110, 0, 0, 1130, 1131, 5, 101, 0, 0, 1131, 1132, 5, 115, 0, 0, 1132, 1133, 5, 116, 0, 0, 1133, 1134, 5, 101, 0, 0, 1134, 1135, 5, 100, 0, 0, 1135, 122, 1, 0, 0, 0, 1136, 1137, 5, 102, 0, 0, 1137, 1138, 5, 97, 0, 0, 1138, 1139, 5, 109, 0, 0, 1139, 1140, 5, 105, 0, 0, 1140, 1141, 5, 108, 0, 0, 1141, 1142, 5, 121, 0, 0, 1142, 124, 1, 0, 0, 0, 1143, 1144, 5, 97, 0, 0, 1144, 1145, 5, 115, 0, 0, 1145, 1146, 5, 115, 0, 0, 1146, 1147, 5, 101, 0, 0, 1147, 1148, 5, 109, 0, 0, 1148, 1149, 5, 98, 0, 0, 1149, 1150, 5, 108, 0, 0, 1150, 1151, 5, 121, 0, 0, 1151, 126, 1, 0, 0, 0, 1152, 1153, 5, 102, 0, 0, 1153, 1154, 5, 97, 0, 0, 1154, 1155, 5, 109, 0, 0, 1155, 1156, 5, 97, 0, 0, 1156, 1157, 5, 110, 0, 0, 1157, 1158, 5, 100, 0, 0, 1158, 1159, 5, 97, 0, 0, 1159, 1160, 5, 115, 0, 0, 1160, 1161, 5, 115, 0, 0, 1161, 1162, 5, 101, 0, 0, 1162, 1163, 5, 109, 0, 0, 1163, 128, 1, 0, 0, 0, 1164, 1165, 5, 102, 0, 0, 1165, 1166, 5, 97, 0, 0, 1166, 1167, 5, 109, 0, 0, 1167, 1168, 5, 111, 0, 0, 1168, 1169, 5, 114, 0, 0, 1169, 1170, 5, 97, 0, 0, 1170, 1171, 5, 115, 0, 0, 1171, 1172, 5, 115, 0, 0, 1172, 1173, 5, 101, 0, 0, 1173, 1174, 5, 109, 0, 0, 1174, 130, 1, 0, 0, 0, 1175, 1176, 5, 98, 0, 0, 1176, 1177, 5, 101, 0, 0, 1177, 1178, 5, 102, 0, 0, 1178, 1179, 5, 111, 0, 0, 1179, 1180, 5, 114, 0, 0, 1180, 1181, 5, 101, 0, 0, 1181, 1182, 5, 102, 0, 0, 1182, 1183, 5, 105, 0, 0, 1183, 1184, 5, 101, 0, 0, 1184, 1185, 5, 108, 0, 0, 1185, 1186, 5, 100, 0, 0, 1186, 1187, 5, 105, 0, 0, 1187, 1188, 5, 110, 0, 0, 1188, 1189, 5, 105, 0, 0, 1189, 1190, 5, 116, 0, 0, 1190, 132, 1, 0, 0, 0, 1191, 1192, 5, 115, 0, 0, 1192, 1193, 5, 112, 0, 0, 1193, 1194, 5, 101, 0, 0, 1194, 1195, 5, 99, 0, 0, 1195, 1196, 5, 105, 0, 0, 1196, 1197, 5, 97, 0, 0, 1197, 1198, 5, 108, 0, 0, 1198, 1199, 5, 110, 0, 0, 1199, 1200, 5, 97, 0, 0, 1200, 1201, 5, 109, 0, 0, 1201, 1202, 5, 101, 0, 0, 1202, 134, 1, 0, 0, 0, 1203, 1204, 5, 114, 0, 0, 1204, 1205, 5, 116, 0, 0, 1205, 1206, 5, 115, 0, 0, 1206, 1207, 5, 112, 0, 0, 1207, 1208, 5, 101, 0, 0, 1208, 1209, 5, 99, 0, 0, 1209, 1210, 5, 105, 0, 0, 1210, 1211, 5, 97, 0, 0, 1211, 1212, 5, 108, 0, 0, 1212, 1213, 5, 110, 0, 0, 1213, 1214, 5, 97, 0, 0, 1214, 1215, 5, 109, 0, 0, 1215, 1216, 5, 101, 0, 0, 1216, 136, 1, 0, 0, 0, 1217, 1218, 5, 102, 0, 0, 1218, 1219, 5, 108, 0, 0, 1219, 1220, 5, 97, 0, 0, 1220, 1221, 5, 103, 0, 0, 1221, 1222, 5, 115, 0, 0, 1222, 138, 1, 0, 0, 0, 1223, 1224, 5, 101, 0, 0, 1224, 1225, 5, 120, 0, 0, 1225, 1226, 5, 116, 0, 0, 1226, 1227, 5, 101, 0, 0, 1227, 1228, 5, 110, 0, 0, 1228, 1229, 5, 100, 0, 0, 1229, 1230, 5, 115, 0, 0, 1230, 140, 1, 0, 0, 0, 1231, 1232, 5, 105, 0, 0, 1232, 1233, 5, 109, 0, 0, 1233, 1234, 5, 112, 0, 0, 1234, 1235, 5, 108, 0, 0, 1235, 1236, 5, 101, 0, 0, 1236, 1237, 5, 109, 0, 0, 1237, 1238, 5, 101, 0, 0, 1238, 1239, 5, 110, 0, 0, 1239, 1240, 5, 116, 0, 0, 1240, 1241, 5, 115, 0, 0, 1241, 142, 1, 0, 0, 0, 1242, 1243, 5, 46, 0, 0, 1243, 1244, 5, 108, 0, 0, 1244, 1245, 5, 105, 0, 0, 1245, 1246, 5, 110, 0, 0, 1246, 1247, 5, 101, 0, 0, 1247, 144, 1, 0, 0, 0, 1248, 1249, 5, 35, 0, 0, 1249, 1250, 5, 108, 0, 0, 1250, 1251, 5, 105, 0, 0, 1251, 1252, 5, 110, 0, 0, 1252, 1253, 5, 101, 0, 0, 1253, 146, 1, 0, 0, 0, 1254, 1255, 5, 58, 0, 0, 1255, 148, 1, 0, 0, 0, 1256, 1257, 5, 110, 0, 0, 1257, 1258, 5, 111, 0, 0, 1258, 1259, 5, 109, 0, 0, 1259, 1260, 5, 101, 0, 0, 1260, 1261, 5, 116, 0, 0, 1261, 1262, 5, 97, 0, 0, 1262, 1263, 5, 100, 0, 0, 1263, 1264, 5, 97, 0, 0, 1264, 1265, 5, 116, 0, 0, 1265, 1266, 5, 97, 0, 0, 1266, 150, 1, 0, 0, 0, 1267, 1268, 5, 114, 0, 0, 1268, 1269, 5, 101, 0, 0, 1269, 1270, 5, 116, 0, 0, 1270, 1271, 5, 97, 0, 0, 1271, 1272, 5, 114, 0, 0, 1272, 1273, 5, 103, 0, 0, 1273, 1274, 5, 101, 0, 0, 1274, 1275, 5, 116, 0, 0, 1275, 1276, 5, 97, 0, 0, 1276, 1277, 5, 98, 0, 0, 1277, 1278, 5, 108, 0, 0, 1278, 1279, 5, 101, 0, 0, 1279, 152, 1, 0, 0, 0, 1280, 1281, 5, 110, 0, 0, 1281, 1282, 5, 111, 0, 0, 1282, 1283, 5, 112, 0, 0, 1283, 1284, 5, 108, 0, 0, 1284, 1285, 5, 97, 0, 0, 1285, 1286, 5, 116, 0, 0, 1286, 1287, 5, 102, 0, 0, 1287, 1288, 5, 111, 0, 0, 1288, 1289, 5, 114, 0, 0, 1289, 1290, 5, 109, 0, 0, 1290, 154, 1, 0, 0, 0, 1291, 1292, 5, 108, 0, 0, 1292, 1293, 5, 101, 0, 0, 1293, 1294, 5, 103, 0, 0, 1294, 1295, 5, 97, 0, 0, 1295, 1296, 5, 99, 0, 0, 1296, 1297, 5, 121, 0, 0, 1297, 1298, 5, 32, 0, 0, 1298, 1299, 5, 108, 0, 0, 1299, 1300, 5, 105, 0, 0, 1300, 1301, 5, 98, 0, 0, 1301, 1302, 5, 114, 0, 0, 1302, 1303, 5, 97, 0, 0, 1303, 1304, 5, 114, 0, 0, 1304, 1305, 5, 121, 0, 0, 1305, 156, 1, 0, 0, 0, 1306, 1307, 5, 120, 0, 0, 1307, 1308, 5, 56, 0, 0, 1308, 1309, 5, 54, 0, 0, 1309, 158, 1, 0, 0, 0, 1310, 1311, 5, 97, 0, 0, 1311, 1312, 5, 109, 0, 0, 1312, 1313, 5, 100, 0, 0, 1313, 1314, 5, 54, 0, 0, 1314, 1315, 5, 52, 0, 0, 1315, 160, 1, 0, 0, 0, 1316, 1317, 5, 97, 0, 0, 1317, 1318, 5, 114, 0, 0, 1318, 1319, 5, 109, 0, 0, 1319, 162, 1, 0, 0, 0, 1320, 1321, 5, 97, 0, 0, 1321, 1322, 5, 114, 0, 0, 1322, 1323, 5, 109, 0, 0, 1323, 1324, 5, 54, 0, 0, 1324, 1325, 5, 52, 0, 0, 1325, 164, 1, 0, 0, 0, 1326, 1327, 5, 98, 0, 0, 1327, 1328, 5, 121, 0, 0, 1328, 1329, 5, 116, 0, 0, 1329, 1330, 5, 101, 0, 0, 1330, 1331, 5, 97, 0, 0, 1331, 1332, 5, 114, 0, 0, 1332, 1333, 5, 114, 0, 0, 1333, 1334, 5, 97, 0, 0, 1334, 1335, 5, 121, 0, 0, 1335, 166, 1, 0, 0, 0, 1336, 1337, 5, 40, 0, 0, 1337, 1338, 5, 41, 0, 0, 1338, 168, 1, 0, 0, 0, 1339, 1340, 5, 60, 0, 0, 1340, 170, 1, 0, 0, 0, 1341, 1342, 5, 62, 0, 0, 1342, 172, 1, 0, 0, 0, 1343, 1344, 5, 47, 0, 0, 1344, 174, 1, 0, 0, 0, 1345, 1346, 5, 97, 0, 0, 1346, 1347, 5, 108, 0, 0, 1347, 1348, 5, 103, 0, 0, 1348, 1349, 5, 111, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 105, 0, 0, 1351, 1352, 5, 116, 0, 0, 1352, 1353, 5, 104, 0, 0, 1353, 1354, 5, 109, 0, 0, 1354, 176, 1, 0, 0, 0, 1355, 1356, 5, 105, 0, 0, 1356, 1357, 5, 105, 0, 0, 1357, 1358, 5, 100, 0, 0, 1358, 1359, 5, 112, 0, 0, 1359, 1360, 5, 97, 0, 0, 1360, 1361, 5, 114, 0, 0, 1361, 1362, 5, 97, 0, 0, 1362, 1363, 5, 109, 0, 0, 1363, 178, 1, 0, 0, 0, 1364, 1365, 5, 112, 0, 0, 1365, 1366, 5, 105, 0, 0, 1366, 1367, 5, 110, 0, 0, 1367, 1368, 5, 110, 0, 0, 1368, 1369, 5, 101, 0, 0, 1369, 1370, 5, 100, 0, 0, 1370, 180, 1, 0, 0, 0, 1371, 1372, 5, 109, 0, 0, 1372, 1373, 5, 111, 0, 0, 1373, 1374, 5, 100, 0, 0, 1374, 1375, 5, 114, 0, 0, 1375, 1376, 5, 101, 0, 0, 1376, 1377, 5, 113, 0, 0, 1377, 182, 1, 0, 0, 0, 1378, 1379, 5, 109, 0, 0, 1379, 1380, 5, 111, 0, 0, 1380, 1381, 5, 100, 0, 0, 1381, 1382, 5, 111, 0, 0, 1382, 1383, 5, 112, 0, 0, 1383, 1384, 5, 116, 0, 0, 1384, 184, 1, 0, 0, 0, 1385, 1386, 5, 117, 0, 0, 1386, 1387, 5, 110, 0, 0, 1387, 1388, 5, 115, 0, 0, 1388, 1389, 5, 105, 0, 0, 1389, 1390, 5, 103, 0, 0, 1390, 1391, 5, 110, 0, 0, 1391, 1392, 5, 101, 0, 0, 1392, 1393, 5, 100, 0, 0, 1393, 186, 1, 0, 0, 0, 1394, 1395, 5, 116, 0, 0, 1395, 1396, 5, 114, 0, 0, 1396, 1397, 5, 117, 0, 0, 1397, 1398, 5, 101, 0, 0, 1398, 188, 1, 0, 0, 0, 1399, 1400, 5, 102, 0, 0, 1400, 1401, 5, 97, 0, 0, 1401, 1402, 5, 108, 0, 0, 1402, 1403, 5, 115, 0, 0, 1403, 1404, 5, 101, 0, 0, 1404, 190, 1, 0, 0, 0, 1405, 1406, 5, 114, 0, 0, 1406, 1407, 5, 101, 0, 0, 1407, 1408, 5, 113, 0, 0, 1408, 1409, 5, 117, 0, 0, 1409, 1410, 5, 101, 0, 0, 1410, 1411, 5, 115, 0, 0, 1411, 1412, 5, 116, 0, 0, 1412, 192, 1, 0, 0, 0, 1413, 1414, 5, 100, 0, 0, 1414, 1415, 5, 101, 0, 0, 1415, 1416, 5, 109, 0, 0, 1416, 1417, 5, 97, 0, 0, 1417, 1418, 5, 110, 0, 0, 1418, 1419, 5, 100, 0, 0, 1419, 194, 1, 0, 0, 0, 1420, 1421, 5, 97, 0, 0, 1421, 1422, 5, 115, 0, 0, 1422, 1423, 5, 115, 0, 0, 1423, 1424, 5, 101, 0, 0, 1424, 1425, 5, 114, 0, 0, 1425, 1426, 5, 116, 0, 0, 1426, 196, 1, 0, 0, 0, 1427, 1428, 5, 100, 0, 0, 1428, 1429, 5, 101, 0, 0, 1429, 1430, 5, 110, 0, 0, 1430, 1431, 5, 121, 0, 0, 1431, 198, 1, 0, 0, 0, 1432, 1433, 5, 112, 0, 0, 1433, 1434, 5, 101, 0, 0, 1434, 1435, 5, 114, 0, 0, 1435, 1436, 5, 109, 0, 0, 1436, 1437, 5, 105, 0, 0, 1437, 1438, 5, 116, 0, 0, 1438, 1439, 5, 111, 0, 0, 1439, 1440, 5, 110, 0, 0, 1440, 1441, 5, 108, 0, 0, 1441, 1442, 5, 121, 0, 0, 1442, 200, 1, 0, 0, 0, 1443, 1444, 5, 108, 0, 0, 1444, 1445, 5, 105, 0, 0, 1445, 1446, 5, 110, 0, 0, 1446, 1447, 5, 107, 0, 0, 1447, 1448, 5, 99, 0, 0, 1448, 1449, 5, 104, 0, 0, 1449, 1450, 5, 101, 0, 0, 1450, 1451, 5, 99, 0, 0, 1451, 1452, 5, 107, 0, 0, 1452, 202, 1, 0, 0, 0, 1453, 1454, 5, 105, 0, 0, 1454, 1455, 5, 110, 0, 0, 1455, 1456, 5, 104, 0, 0, 1456, 1457, 5, 101, 0, 0, 1457, 1458, 5, 114, 0, 0, 1458, 1459, 5, 105, 0, 0, 1459, 1460, 5, 116, 0, 0, 1460, 1461, 5, 99, 0, 0, 1461, 1462, 5, 104, 0, 0, 1462, 1463, 5, 101, 0, 0, 1463, 1464, 5, 99, 0, 0, 1464, 1465, 5, 107, 0, 0, 1465, 204, 1, 0, 0, 0, 1466, 1467, 5, 114, 0, 0, 1467, 1468, 5, 101, 0, 0, 1468, 1469, 5, 113, 0, 0, 1469, 1470, 5, 109, 0, 0, 1470, 1471, 5, 105, 0, 0, 1471, 1472, 5, 110, 0, 0, 1472, 206, 1, 0, 0, 0, 1473, 1474, 5, 114, 0, 0, 1474, 1475, 5, 101, 0, 0, 1475, 1476, 5, 113, 0, 0, 1476, 1477, 5, 111, 0, 0, 1477, 1478, 5, 112, 0, 0, 1478, 1479, 5, 116, 0, 0, 1479, 208, 1, 0, 0, 0, 1480, 1481, 5, 114, 0, 0, 1481, 1482, 5, 101, 0, 0, 1482, 1483, 5, 113, 0, 0, 1483, 1484, 5, 114, 0, 0, 1484, 1485, 5, 101, 0, 0, 1485, 1486, 5, 102, 0, 0, 1486, 1487, 5, 117, 0, 0, 1487, 1488, 5, 115, 0, 0, 1488, 1489, 5, 101, 0, 0, 1489, 210, 1, 0, 0, 0, 1490, 1491, 5, 112, 0, 0, 1491, 1492, 5, 114, 0, 0, 1492, 1493, 5, 101, 0, 0, 1493, 1494, 5, 106, 0, 0, 1494, 1495, 5, 105, 0, 0, 1495, 1496, 5, 116, 0, 0, 1496, 1497, 5, 103, 0, 0, 1497, 1498, 5, 114, 0, 0, 1498, 1499, 5, 97, 0, 0, 1499, 1500, 5, 110, 0, 0, 1500, 1501, 5, 116, 0, 0, 1501, 212, 1, 0, 0, 0, 1502, 1503, 5, 112, 0, 0, 1503, 1504, 5, 114, 0, 0, 1504, 1505, 5, 101, 0, 0, 1505, 1506, 5, 106, 0, 0, 1506, 1507, 5, 105, 0, 0, 1507, 1508, 5, 116, 0, 0, 1508, 1509, 5, 100, 0, 0, 1509, 1510, 5, 101, 0, 0, 1510, 1511, 5, 110, 0, 0, 1511, 1512, 5, 121, 0, 0, 1512, 214, 1, 0, 0, 0, 1513, 1514, 5, 110, 0, 0, 1514, 1515, 5, 111, 0, 0, 1515, 1516, 5, 110, 0, 0, 1516, 1517, 5, 99, 0, 0, 1517, 1518, 5, 97, 0, 0, 1518, 1519, 5, 115, 0, 0, 1519, 1520, 5, 100, 0, 0, 1520, 1521, 5, 101, 0, 0, 1521, 1522, 5, 109, 0, 0, 1522, 1523, 5, 97, 0, 0, 1523, 1524, 5, 110, 0, 0, 1524, 1525, 5, 100, 0, 0, 1525, 216, 1, 0, 0, 0, 1526, 1527, 5, 110, 0, 0, 1527, 1528, 5, 111, 0, 0, 1528, 1529, 5, 110, 0, 0, 1529, 1530, 5, 99, 0, 0, 1530, 1531, 5, 97, 0, 0, 1531, 1532, 5, 115, 0, 0, 1532, 1533, 5, 108, 0, 0, 1533, 1534, 5, 105, 0, 0, 1534, 1535, 5, 110, 0, 0, 1535, 1536, 5, 107, 0, 0, 1536, 1537, 5, 100, 0, 0, 1537, 1538, 5, 101, 0, 0, 1538, 1539, 5, 109, 0, 0, 1539, 1540, 5, 97, 0, 0, 1540, 1541, 5, 110, 0, 0, 1541, 1542, 5, 100, 0, 0, 1542, 218, 1, 0, 0, 0, 1543, 1544, 5, 110, 0, 0, 1544, 1545, 5, 111, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 99, 0, 0, 1547, 1548, 5, 97, 0, 0, 1548, 1549, 5, 115, 0, 0, 1549, 1550, 5, 105, 0, 0, 1550, 1551, 5, 110, 0, 0, 1551, 1552, 5, 104, 0, 0, 1552, 1553, 5, 101, 0, 0, 1553, 1554, 5, 114, 0, 0, 1554, 1555, 5, 105, 0, 0, 1555, 1556, 5, 116, 0, 0, 1556, 1557, 5, 97, 0, 0, 1557, 1558, 5, 110, 0, 0, 1558, 1559, 5, 99, 0, 0, 1559, 1560, 5, 101, 0, 0, 1560, 220, 1, 0, 0, 0, 1561, 1562, 5, 99, 0, 0, 1562, 1563, 5, 97, 0, 0, 1563, 1564, 5, 108, 0, 0, 1564, 1565, 5, 108, 0, 0, 1565, 1566, 5, 99, 0, 0, 1566, 1567, 5, 111, 0, 0, 1567, 1568, 5, 110, 0, 0, 1568, 1569, 5, 118, 0, 0, 1569, 222, 1, 0, 0, 0, 1570, 1571, 5, 109, 0, 0, 1571, 1572, 5, 100, 0, 0, 1572, 1573, 5, 116, 0, 0, 1573, 1574, 5, 111, 0, 0, 1574, 1575, 5, 107, 0, 0, 1575, 1576, 5, 101, 0, 0, 1576, 1577, 5, 110, 0, 0, 1577, 224, 1, 0, 0, 0, 1578, 1579, 5, 45, 0, 0, 1579, 226, 1, 0, 0, 0, 1580, 1581, 5, 98, 0, 0, 1581, 1582, 5, 121, 0, 0, 1582, 1583, 5, 114, 0, 0, 1583, 1584, 5, 101, 0, 0, 1584, 1585, 5, 102, 0, 0, 1585, 1586, 5, 108, 0, 0, 1586, 1587, 5, 105, 0, 0, 1587, 1588, 5, 107, 0, 0, 1588, 1589, 5, 101, 0, 0, 1589, 228, 1, 0, 0, 0, 1590, 1591, 5, 46, 0, 0, 1591, 1592, 5, 99, 0, 0, 1592, 1593, 5, 116, 0, 0, 1593, 1594, 5, 111, 0, 0, 1594, 1595, 5, 114, 0, 0, 1595, 230, 1, 0, 0, 0, 1596, 1597, 5, 46, 0, 0, 1597, 1598, 5, 115, 0, 0, 1598, 1599, 5, 105, 0, 0, 1599, 1600, 5, 122, 0, 0, 1600, 1601, 5, 101, 0, 0, 1601, 232, 1, 0, 0, 0, 1602, 1603, 5, 46, 0, 0, 1603, 1604, 5, 112, 0, 0, 1604, 1605, 5, 97, 0, 0, 1605, 1606, 5, 99, 0, 0, 1606, 1607, 5, 107, 0, 0, 1607, 234, 1, 0, 0, 0, 1608, 1609, 5, 119, 0, 0, 1609, 1610, 5, 105, 0, 0, 1610, 1611, 5, 116, 0, 0, 1611, 1612, 5, 104, 0, 0, 1612, 236, 1, 0, 0, 0, 1613, 1614, 5, 46, 0, 0, 1614, 1615, 5, 105, 0, 0, 1615, 1616, 5, 110, 0, 0, 1616, 1617, 5, 116, 0, 0, 1617, 1618, 5, 101, 0, 0, 1618, 1619, 5, 114, 0, 0, 1619, 1620, 5, 102, 0, 0, 1620, 1621, 5, 97, 0, 0, 1621, 1622, 5, 99, 0, 0, 1622, 1623, 5, 101, 0, 0, 1623, 1624, 5, 105, 0, 0, 1624, 1625, 5, 109, 0, 0, 1625, 1626, 5, 112, 0, 0, 1626, 1627, 5, 108, 0, 0, 1627, 238, 1, 0, 0, 0, 1628, 1629, 5, 46, 0, 0, 1629, 1630, 5, 102, 0, 0, 1630, 1631, 5, 105, 0, 0, 1631, 1632, 5, 101, 0, 0, 1632, 1633, 5, 108, 0, 0, 1633, 1634, 5, 100, 0, 0, 1634, 240, 1, 0, 0, 0, 1635, 1636, 5, 109, 0, 0, 1636, 1637, 5, 97, 0, 0, 1637, 1638, 5, 114, 0, 0, 1638, 1639, 5, 115, 0, 0, 1639, 1640, 5, 104, 0, 0, 1640, 1641, 5, 97, 0, 0, 1641, 1642, 5, 108, 0, 0, 1642, 242, 1, 0, 0, 0, 1643, 1644, 5, 115, 0, 0, 1644, 1645, 5, 116, 0, 0, 1645, 1646, 5, 97, 0, 0, 1646, 1647, 5, 116, 0, 0, 1647, 1648, 5, 105, 0, 0, 1648, 1649, 5, 99, 0, 0, 1649, 244, 1, 0, 0, 0, 1650, 1651, 5, 105, 0, 0, 1651, 1652, 5, 110, 0, 0, 1652, 1653, 5, 105, 0, 0, 1653, 1654, 5, 116, 0, 0, 1654, 1655, 5, 111, 0, 0, 1655, 1656, 5, 110, 0, 0, 1656, 1657, 5, 108, 0, 0, 1657, 1658, 5, 121, 0, 0, 1658, 246, 1, 0, 0, 0, 1659, 1660, 5, 112, 0, 0, 1660, 1661, 5, 114, 0, 0, 1661, 1662, 5, 105, 0, 0, 1662, 1663, 5, 118, 0, 0, 1663, 1664, 5, 97, 0, 0, 1664, 1665, 5, 116, 0, 0, 1665, 1666, 5, 101, 0, 0, 1666, 1667, 5, 115, 0, 0, 1667, 1668, 5, 99, 0, 0, 1668, 1669, 5, 111, 0, 0, 1669, 1670, 5, 112, 0, 0, 1670, 1671, 5, 101, 0, 0, 1671, 248, 1, 0, 0, 0, 1672, 1673, 5, 108, 0, 0, 1673, 1674, 5, 105, 0, 0, 1674, 1675, 5, 116, 0, 0, 1675, 1676, 5, 101, 0, 0, 1676, 1677, 5, 114, 0, 0, 1677, 1678, 5, 97, 0, 0, 1678, 1679, 5, 108, 0, 0, 1679, 250, 1, 0, 0, 0, 1680, 1681, 5, 110, 0, 0, 1681, 1682, 5, 111, 0, 0, 1682, 1683, 5, 116, 0, 0, 1683, 1684, 5, 115, 0, 0, 1684, 1685, 5, 101, 0, 0, 1685, 1686, 5, 114, 0, 0, 1686, 1687, 5, 105, 0, 0, 1687, 1688, 5, 97, 0, 0, 1688, 1689, 5, 108, 0, 0, 1689, 1690, 5, 105, 0, 0, 1690, 1691, 5, 122, 0, 0, 1691, 1692, 5, 101, 0, 0, 1692, 1693, 5, 100, 0, 0, 1693, 252, 1, 0, 0, 0, 1694, 1695, 5, 118, 0, 0, 1695, 1696, 5, 111, 0, 0, 1696, 1697, 5, 108, 0, 0, 1697, 1698, 5, 97, 0, 0, 1698, 1699, 5, 116, 0, 0, 1699, 1700, 5, 105, 0, 0, 1700, 1701, 5, 108, 0, 0, 1701, 1702, 5, 101, 0, 0, 1702, 254, 1, 0, 0, 0, 1703, 1704, 5, 46, 0, 0, 1704, 1705, 5, 101, 0, 0, 1705, 1706, 5, 118, 0, 0, 1706, 1707, 5, 101, 0, 0, 1707, 1708, 5, 110, 0, 0, 1708, 1709, 5, 116, 0, 0, 1709, 256, 1, 0, 0, 0, 1710, 1711, 5, 46, 0, 0, 1711, 1712, 5, 97, 0, 0, 1712, 1713, 5, 100, 0, 0, 1713, 1714, 5, 100, 0, 0, 1714, 1715, 5, 111, 0, 0, 1715, 1716, 5, 110, 0, 0, 1716, 258, 1, 0, 0, 0, 1717, 1718, 5, 46, 0, 0, 1718, 1719, 5, 114, 0, 0, 1719, 1720, 5, 101, 0, 0, 1720, 1721, 5, 109, 0, 0, 1721, 1722, 5, 111, 0, 0, 1722, 1723, 5, 118, 0, 0, 1723, 1724, 5, 101, 0, 0, 1724, 1725, 5, 111, 0, 0, 1725, 1726, 5, 110, 0, 0, 1726, 260, 1, 0, 0, 0, 1727, 1728, 5, 46, 0, 0, 1728, 1729, 5, 102, 0, 0, 1729, 1730, 5, 105, 0, 0, 1730, 1731, 5, 114, 0, 0, 1731, 1732, 5, 101, 0, 0, 1732, 262, 1, 0, 0, 0, 1733, 1734, 5, 46, 0, 0, 1734, 1735, 5, 111, 0, 0, 1735, 1736, 5, 116, 0, 0, 1736, 1737, 5, 104, 0, 0, 1737, 1738, 5, 101, 0, 0, 1738, 1739, 5, 114, 0, 0, 1739, 264, 1, 0, 0, 0, 1740, 1741, 5, 46, 0, 0, 1741, 1742, 5, 112, 0, 0, 1742, 1743, 5, 114, 0, 0, 1743, 1744, 5, 111, 0, 0, 1744, 1745, 5, 112, 0, 0, 1745, 1746, 5, 101, 0, 0, 1746, 1747, 5, 114, 0, 0, 1747, 1748, 5, 116, 0, 0, 1748, 1749, 5, 121, 0, 0, 1749, 266, 1, 0, 0, 0, 1750, 1751, 5, 46, 0, 0, 1751, 1752, 5, 115, 0, 0, 1752, 1753, 5, 101, 0, 0, 1753, 1754, 5, 116, 0, 0, 1754, 268, 1, 0, 0, 0, 1755, 1756, 5, 46, 0, 0, 1756, 1757, 5, 103, 0, 0, 1757, 1758, 5, 101, 0, 0, 1758, 1759, 5, 116, 0, 0, 1759, 270, 1, 0, 0, 0, 1760, 1761, 5, 105, 0, 0, 1761, 1762, 5, 110, 0, 0, 1762, 272, 1, 0, 0, 0, 1763, 1764, 5, 111, 0, 0, 1764, 1765, 5, 117, 0, 0, 1765, 1766, 5, 116, 0, 0, 1766, 274, 1, 0, 0, 0, 1767, 1768, 5, 111, 0, 0, 1768, 1769, 5, 112, 0, 0, 1769, 1770, 5, 116, 0, 0, 1770, 276, 1, 0, 0, 0, 1771, 1772, 5, 46, 0, 0, 1772, 1773, 5, 109, 0, 0, 1773, 1774, 5, 101, 0, 0, 1774, 1775, 5, 116, 0, 0, 1775, 1776, 5, 104, 0, 0, 1776, 1777, 5, 111, 0, 0, 1777, 1778, 5, 100, 0, 0, 1778, 278, 1, 0, 0, 0, 1779, 1780, 5, 102, 0, 0, 1780, 1781, 5, 105, 0, 0, 1781, 1782, 5, 110, 0, 0, 1782, 1783, 5, 97, 0, 0, 1783, 1784, 5, 108, 0, 0, 1784, 280, 1, 0, 0, 0, 1785, 1786, 5, 118, 0, 0, 1786, 1787, 5, 105, 0, 0, 1787, 1788, 5, 114, 0, 0, 1788, 1789, 5, 116, 0, 0, 1789, 1790, 5, 117, 0, 0, 1790, 1791, 5, 97, 0, 0, 1791, 1792, 5, 108, 0, 0, 1792, 282, 1, 0, 0, 0, 1793, 1794, 5, 115, 0, 0, 1794, 1795, 5, 116, 0, 0, 1795, 1796, 5, 114, 0, 0, 1796, 1797, 5, 105, 0, 0, 1797, 1798, 5, 99, 0, 0, 1798, 1799, 5, 116, 0, 0, 1799, 284, 1, 0, 0, 0, 1800, 1801, 5, 104, 0, 0, 1801, 1802, 5, 105, 0, 0, 1802, 1803, 5, 100, 0, 0, 1803, 1804, 5, 101, 0, 0, 1804, 1805, 5, 98, 0, 0, 1805, 1806, 5, 121, 0, 0, 1806, 1807, 5, 115, 0, 0, 1807, 1808, 5, 105, 0, 0, 1808, 1809, 5, 103, 0, 0, 1809, 286, 1, 0, 0, 0, 1810, 1811, 5, 110, 0, 0, 1811, 1812, 5, 101, 0, 0, 1812, 1813, 5, 119, 0, 0, 1813, 1814, 5, 115, 0, 0, 1814, 1815, 5, 108, 0, 0, 1815, 1816, 5, 111, 0, 0, 1816, 1817, 5, 116, 0, 0, 1817, 288, 1, 0, 0, 0, 1818, 1819, 5, 117, 0, 0, 1819, 1820, 5, 110, 0, 0, 1820, 1821, 5, 109, 0, 0, 1821, 1822, 5, 97, 0, 0, 1822, 1823, 5, 110, 0, 0, 1823, 1824, 5, 97, 0, 0, 1824, 1825, 5, 103, 0, 0, 1825, 1826, 5, 101, 0, 0, 1826, 1827, 5, 100, 0, 0, 1827, 1828, 5, 101, 0, 0, 1828, 1829, 5, 120, 0, 0, 1829, 1830, 5, 112, 0, 0, 1830, 290, 1, 0, 0, 0, 1831, 1832, 5, 114, 0, 0, 1832, 1833, 5, 101, 0, 0, 1833, 1834, 5, 113, 0, 0, 1834, 1835, 5, 115, 0, 0, 1835, 1836, 5, 101, 0, 0, 1836, 1837, 5, 99, 0, 0, 1837, 1838, 5, 111, 0, 0, 1838, 1839, 5, 98, 0, 0, 1839, 1840, 5, 106, 0, 0, 1840, 292, 1, 0, 0, 0, 1841, 1842, 5, 112, 0, 0, 1842, 1843, 5, 105, 0, 0, 1843, 1844, 5, 110, 0, 0, 1844, 1845, 5, 118, 0, 0, 1845, 1846, 5, 111, 0, 0, 1846, 1847, 5, 107, 0, 0, 1847, 1848, 5, 101, 0, 0, 1848, 1849, 5, 105, 0, 0, 1849, 1850, 5, 109, 0, 0, 1850, 1851, 5, 112, 0, 0, 1851, 1852, 5, 108, 0, 0, 1852, 294, 1, 0, 0, 0, 1853, 1854, 5, 110, 0, 0, 1854, 1855, 5, 111, 0, 0, 1855, 1856, 5, 109, 0, 0, 1856, 1857, 5, 97, 0, 0, 1857, 1858, 5, 110, 0, 0, 1858, 1859, 5, 103, 0, 0, 1859, 1860, 5, 108, 0, 0, 1860, 1861, 5, 101, 0, 0, 1861, 296, 1, 0, 0, 0, 1862, 1863, 5, 108, 0, 0, 1863, 1864, 5, 97, 0, 0, 1864, 1865, 5, 115, 0, 0, 1865, 1866, 5, 116, 0, 0, 1866, 1867, 5, 101, 0, 0, 1867, 1868, 5, 114, 0, 0, 1868, 1869, 5, 114, 0, 0, 1869, 298, 1, 0, 0, 0, 1870, 1871, 5, 119, 0, 0, 1871, 1872, 5, 105, 0, 0, 1872, 1873, 5, 110, 0, 0, 1873, 1874, 5, 97, 0, 0, 1874, 1875, 5, 112, 0, 0, 1875, 1876, 5, 105, 0, 0, 1876, 300, 1, 0, 0, 0, 1877, 1878, 5, 98, 0, 0, 1878, 1879, 5, 101, 0, 0, 1879, 1880, 5, 115, 0, 0, 1880, 1881, 5, 116, 0, 0, 1881, 1882, 5, 102, 0, 0, 1882, 1883, 5, 105, 0, 0, 1883, 1884, 5, 116, 0, 0, 1884, 302, 1, 0, 0, 0, 1885, 1886, 5, 111, 0, 0, 1886, 1887, 5, 110, 0, 0, 1887, 304, 1, 0, 0, 0, 1888, 1889, 5, 111, 0, 0, 1889, 1890, 5, 102, 0, 0, 1890, 1891, 5, 102, 0, 0, 1891, 306, 1, 0, 0, 0, 1892, 1893, 5, 99, 0, 0, 1893, 1894, 5, 104, 0, 0, 1894, 1895, 5, 97, 0, 0, 1895, 1896, 5, 114, 0, 0, 1896, 1897, 5, 109, 0, 0, 1897, 1898, 5, 97, 0, 0, 1898, 1899, 5, 112, 0, 0, 1899, 1900, 5, 101, 0, 0, 1900, 1901, 5, 114, 0, 0, 1901, 1902, 5, 114, 0, 0, 1902, 1903, 5, 111, 0, 0, 1903, 1904, 5, 114, 0, 0, 1904, 308, 1, 0, 0, 0, 1905, 1906, 5, 46, 0, 0, 1906, 1907, 5, 99, 0, 0, 1907, 1908, 5, 99, 0, 0, 1908, 1909, 5, 116, 0, 0, 1909, 1910, 5, 111, 0, 0, 1910, 1911, 5, 114, 0, 0, 1911, 310, 1, 0, 0, 0, 1912, 1913, 5, 105, 0, 0, 1913, 1914, 5, 108, 0, 0, 1914, 312, 1, 0, 0, 0, 1915, 1916, 5, 105, 0, 0, 1916, 1917, 5, 110, 0, 0, 1917, 1918, 5, 105, 0, 0, 1918, 1919, 5, 116, 0, 0, 1919, 314, 1, 0, 0, 0, 1920, 1921, 5, 46, 0, 0, 1921, 1922, 5, 116, 0, 0, 1922, 1923, 5, 114, 0, 0, 1923, 1924, 5, 121, 0, 0, 1924, 316, 1, 0, 0, 0, 1925, 1926, 5, 116, 0, 0, 1926, 1927, 5, 111, 0, 0, 1927, 318, 1, 0, 0, 0, 1928, 1929, 5, 102, 0, 0, 1929, 1930, 5, 105, 0, 0, 1930, 1931, 5, 108, 0, 0, 1931, 1932, 5, 116, 0, 0, 1932, 1933, 5, 101, 0, 0, 1933, 1934, 5, 114, 0, 0, 1934, 320, 1, 0, 0, 0, 1935, 1936, 5, 99, 0, 0, 1936, 1937, 5, 97, 0, 0, 1937, 1938, 5, 116, 0, 0, 1938, 1939, 5, 99, 0, 0, 1939, 1940, 5, 104, 0, 0, 1940, 322, 1, 0, 0, 0, 1941, 1942, 5, 102, 0, 0, 1942, 1943, 5, 105, 0, 0, 1943, 1944, 5, 110, 0, 0, 1944, 1945, 5, 97, 0, 0, 1945, 1946, 5, 108, 0, 0, 1946, 1947, 5, 108, 0, 0, 1947, 1948, 5, 121, 0, 0, 1948, 324, 1, 0, 0, 0, 1949, 1950, 5, 102, 0, 0, 1950, 1951, 5, 97, 0, 0, 1951, 1952, 5, 117, 0, 0, 1952, 1953, 5, 108, 0, 0, 1953, 1954, 5, 116, 0, 0, 1954, 326, 1, 0, 0, 0, 1955, 1956, 5, 104, 0, 0, 1956, 1957, 5, 97, 0, 0, 1957, 1958, 5, 110, 0, 0, 1958, 1959, 5, 100, 0, 0, 1959, 1960, 5, 108, 0, 0, 1960, 1961, 5, 101, 0, 0, 1961, 1962, 5, 114, 0, 0, 1962, 328, 1, 0, 0, 0, 1963, 1964, 5, 46, 0, 0, 1964, 1965, 5, 100, 0, 0, 1965, 1966, 5, 97, 0, 0, 1966, 1967, 5, 116, 0, 0, 1967, 1968, 5, 97, 0, 0, 1968, 330, 1, 0, 0, 0, 1969, 1970, 5, 116, 0, 0, 1970, 1971, 5, 108, 0, 0, 1971, 1972, 5, 115, 0, 0, 1972, 332, 1, 0, 0, 0, 1973, 1974, 5, 46, 0, 0, 1974, 1975, 5, 112, 0, 0, 1975, 1976, 5, 117, 0, 0, 1976, 1977, 5, 98, 0, 0, 1977, 1978, 5, 108, 0, 0, 1978, 1979, 5, 105, 0, 0, 1979, 1980, 5, 99, 0, 0, 1980, 1981, 5, 75, 0, 0, 1981, 1982, 5, 101, 0, 0, 1982, 1983, 5, 121, 0, 0, 1983, 334, 1, 0, 0, 0, 1984, 1985, 5, 46, 0, 0, 1985, 1986, 5, 118, 0, 0, 1986, 1987, 5, 101, 0, 0, 1987, 1988, 5, 114, 0, 0, 1988, 336, 1, 0, 0, 0, 1989, 1990, 5, 46, 0, 0, 1990, 1991, 5, 108, 0, 0, 1991, 1992, 5, 111, 0, 0, 1992, 1993, 5, 99, 0, 0, 1993, 1994, 5, 97, 0, 0, 1994, 1995, 5, 108, 0, 0, 1995, 1996, 5, 101, 0, 0, 1996, 338, 1, 0, 0, 0, 1997, 1998, 5, 46, 0, 0, 1998, 1999, 5, 112, 0, 0, 1999, 2000, 5, 117, 0, 0, 2000, 2001, 5, 98, 0, 0, 2001, 2002, 5, 108, 0, 0, 2002, 2003, 5, 105, 0, 0, 2003, 2004, 5, 99, 0, 0, 2004, 2005, 5, 107, 0, 0, 2005, 2006, 5, 101, 0, 0, 2006, 2007, 5, 121, 0, 0, 2007, 2008, 5, 116, 0, 0, 2008, 2009, 5, 111, 0, 0, 2009, 2010, 5, 107, 0, 0, 2010, 2011, 5, 101, 0, 0, 2011, 2012, 5, 110, 0, 0, 2012, 340, 1, 0, 0, 0, 2013, 2014, 5, 102, 0, 0, 2014, 2015, 5, 111, 0, 0, 2015, 2016, 5, 114, 0, 0, 2016, 2017, 5, 119, 0, 0, 2017, 2018, 5, 97, 0, 0, 2018, 2019, 5, 114, 0, 0, 2019, 2020, 5, 100, 0, 0, 2020, 2021, 5, 101, 0, 0, 2021, 2022, 5, 114, 0, 0, 2022, 342, 1, 0, 0, 0, 2023, 2025, 5, 45, 0, 0, 2024, 2023, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 2039, 1, 0, 0, 0, 2026, 2027, 5, 48, 0, 0, 2027, 2028, 5, 120, 0, 0, 2028, 2030, 1, 0, 0, 0, 2029, 2031, 7, 0, 0, 0, 2030, 2029, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2032, 2033, 1, 0, 0, 0, 2033, 2040, 1, 0, 0, 0, 2034, 2036, 7, 1, 0, 0, 2035, 2034, 1, 0, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2035, 1, 0, 0, 0, 2037, 2038, 1, 0, 0, 0, 2038, 2040, 1, 0, 0, 0, 2039, 2026, 1, 0, 0, 0, 2039, 2035, 1, 0, 0, 0, 2040, 344, 1, 0, 0, 0, 2041, 2043, 5, 45, 0, 0, 2042, 2041, 1, 0, 0, 0, 2042, 2043, 1, 0, 0, 0, 2043, 2057, 1, 0, 0, 0, 2044, 2045, 5, 48, 0, 0, 2045, 2046, 5, 120, 0, 0, 2046, 2048, 1, 0, 0, 0, 2047, 2049, 7, 0, 0, 0, 2048, 2047, 1, 0, 0, 0, 2049, 2050, 1, 0, 0, 0, 2050, 2048, 1, 0, 0, 0, 2050, 2051, 1, 0, 0, 0, 2051, 2058, 1, 0, 0, 0, 2052, 2054, 7, 1, 0, 0, 2053, 2052, 1, 0, 0, 0, 2054, 2055, 1, 0, 0, 0, 2055, 2053, 1, 0, 0, 0, 2055, 2056, 1, 0, 0, 0, 2056, 2058, 1, 0, 0, 0, 2057, 2044, 1, 0, 0, 0, 2057, 2053, 1, 0, 0, 0, 2058, 346, 1, 0, 0, 0, 2059, 2061, 5, 45, 0, 0, 2060, 2059, 1, 0, 0, 0, 2060, 2061, 1, 0, 0, 0, 2061, 2112, 1, 0, 0, 0, 2062, 2064, 7, 1, 0, 0, 2063, 2062, 1, 0, 0, 0, 2064, 2065, 1, 0, 0, 0, 2065, 2063, 1, 0, 0, 0, 2065, 2066, 1, 0, 0, 0, 2066, 2093, 1, 0, 0, 0, 2067, 2069, 5, 46, 0, 0, 2068, 2070, 7, 1, 0, 0, 2069, 2068, 1, 0, 0, 0, 2070, 2071, 1, 0, 0, 0, 2071, 2069, 1, 0, 0, 0, 2071, 2072, 1, 0, 0, 0, 2072, 2082, 1, 0, 0, 0, 2073, 2075, 7, 2, 0, 0, 2074, 2076, 7, 3, 0, 0, 2075, 2074, 1, 0, 0, 0, 2075, 2076, 1, 0, 0, 0, 2076, 2078, 1, 0, 0, 0, 2077, 2079, 7, 1, 0, 0, 2078, 2077, 1, 0, 0, 0, 2079, 2080, 1, 0, 0, 0, 2080, 2078, 1, 0, 0, 0, 2080, 2081, 1, 0, 0, 0, 2081, 2083, 1, 0, 0, 0, 2082, 2073, 1, 0, 0, 0, 2082, 2083, 1, 0, 0, 0, 2083, 2094, 1, 0, 0, 0, 2084, 2086, 7, 2, 0, 0, 2085, 2087, 7, 3, 0, 0, 2086, 2085, 1, 0, 0, 0, 2086, 2087, 1, 0, 0, 0, 2087, 2089, 1, 0, 0, 0, 2088, 2090, 7, 1, 0, 0, 2089, 2088, 1, 0, 0, 0, 2090, 2091, 1, 0, 0, 0, 2091, 2089, 1, 0, 0, 0, 2091, 2092, 1, 0, 0, 0, 2092, 2094, 1, 0, 0, 0, 2093, 2067, 1, 0, 0, 0, 2093, 2084, 1, 0, 0, 0, 2094, 2113, 1, 0, 0, 0, 2095, 2097, 5, 46, 0, 0, 2096, 2098, 7, 1, 0, 0, 2097, 2096, 1, 0, 0, 0, 2098, 2099, 1, 0, 0, 0, 2099, 2097, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2110, 1, 0, 0, 0, 2101, 2103, 7, 2, 0, 0, 2102, 2104, 7, 3, 0, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2106, 1, 0, 0, 0, 2105, 2107, 7, 1, 0, 0, 2106, 2105, 1, 0, 0, 0, 2107, 2108, 1, 0, 0, 0, 2108, 2106, 1, 0, 0, 0, 2108, 2109, 1, 0, 0, 0, 2109, 2111, 1, 0, 0, 0, 2110, 2101, 1, 0, 0, 0, 2110, 2111, 1, 0, 0, 0, 2111, 2113, 1, 0, 0, 0, 2112, 2063, 1, 0, 0, 0, 2112, 2095, 1, 0, 0, 0, 2113, 348, 1, 0, 0, 0, 2114, 2115, 5, 58, 0, 0, 2115, 2116, 5, 58, 0, 0, 2116, 350, 1, 0, 0, 0, 2117, 2118, 5, 46, 0, 0, 2118, 2119, 5, 46, 0, 0, 2119, 2120, 5, 46, 0, 0, 2120, 352, 1, 0, 0, 0, 2121, 2122, 5, 110, 0, 0, 2122, 2123, 5, 117, 0, 0, 2123, 2124, 5, 108, 0, 0, 2124, 2125, 5, 108, 0, 0, 2125, 354, 1, 0, 0, 0, 2126, 2127, 5, 110, 0, 0, 2127, 2128, 5, 117, 0, 0, 2128, 2129, 5, 108, 0, 0, 2129, 2130, 5, 108, 0, 0, 2130, 2131, 5, 114, 0, 0, 2131, 2132, 5, 101, 0, 0, 2132, 2133, 5, 102, 0, 0, 2133, 356, 1, 0, 0, 0, 2134, 2135, 5, 46, 0, 0, 2135, 2136, 5, 104, 0, 0, 2136, 2137, 5, 97, 0, 0, 2137, 2138, 5, 115, 0, 0, 2138, 2139, 5, 104, 0, 0, 2139, 358, 1, 0, 0, 0, 2140, 2141, 5, 99, 0, 0, 2141, 2142, 5, 104, 0, 0, 2142, 2143, 5, 97, 0, 0, 2143, 2150, 5, 114, 0, 0, 2144, 2145, 5, 119, 0, 0, 2145, 2146, 5, 99, 0, 0, 2146, 2147, 5, 104, 0, 0, 2147, 2148, 5, 97, 0, 0, 2148, 2150, 5, 114, 0, 0, 2149, 2140, 1, 0, 0, 0, 2149, 2144, 1, 0, 0, 0, 2150, 360, 1, 0, 0, 0, 2151, 2152, 5, 115, 0, 0, 2152, 2153, 5, 116, 0, 0, 2153, 2154, 5, 114, 0, 0, 2154, 2155, 5, 105, 0, 0, 2155, 2156, 5, 110, 0, 0, 2156, 2157, 5, 103, 0, 0, 2157, 362, 1, 0, 0, 0, 2158, 2159, 5, 98, 0, 0, 2159, 2160, 5, 111, 0, 0, 2160, 2161, 5, 111, 0, 0, 2161, 2162, 5, 108, 0, 0, 2162, 364, 1, 0, 0, 0, 2163, 2164, 5, 105, 0, 0, 2164, 2165, 5, 110, 0, 0, 2165, 2166, 5, 116, 0, 0, 2166, 2167, 5, 56, 0, 0, 2167, 366, 1, 0, 0, 0, 2168, 2169, 5, 105, 0, 0, 2169, 2170, 5, 110, 0, 0, 2170, 2171, 5, 116, 0, 0, 2171, 2172, 5, 49, 0, 0, 2172, 2173, 5, 54, 0, 0, 2173, 368, 1, 0, 0, 0, 2174, 2175, 5, 105, 0, 0, 2175, 2176, 5, 110, 0, 0, 2176, 2177, 5, 116, 0, 0, 2177, 2178, 5, 51, 0, 0, 2178, 2179, 5, 50, 0, 0, 2179, 370, 1, 0, 0, 0, 2180, 2181, 5, 105, 0, 0, 2181, 2182, 5, 110, 0, 0, 2182, 2183, 5, 116, 0, 0, 2183, 2184, 5, 54, 0, 0, 2184, 2185, 5, 52, 0, 0, 2185, 372, 1, 0, 0, 0, 2186, 2187, 5, 102, 0, 0, 2187, 2188, 5, 108, 0, 0, 2188, 2189, 5, 111, 0, 0, 2189, 2190, 5, 97, 0, 0, 2190, 2191, 5, 116, 0, 0, 2191, 2192, 5, 51, 0, 0, 2192, 2193, 5, 50, 0, 0, 2193, 374, 1, 0, 0, 0, 2194, 2195, 5, 102, 0, 0, 2195, 2196, 5, 108, 0, 0, 2196, 2197, 5, 111, 0, 0, 2197, 2198, 5, 97, 0, 0, 2198, 2199, 5, 116, 0, 0, 2199, 2200, 5, 54, 0, 0, 2200, 2201, 5, 52, 0, 0, 2201, 376, 1, 0, 0, 0, 2202, 2203, 5, 117, 0, 0, 2203, 2204, 5, 110, 0, 0, 2204, 2205, 5, 115, 0, 0, 2205, 2206, 5, 105, 0, 0, 2206, 2207, 5, 103, 0, 0, 2207, 2208, 5, 110, 0, 0, 2208, 2209, 5, 101, 0, 0, 2209, 2210, 5, 100, 0, 0, 2210, 378, 1, 0, 0, 0, 2211, 2212, 5, 117, 0, 0, 2212, 2213, 5, 105, 0, 0, 2213, 2214, 5, 110, 0, 0, 2214, 2215, 5, 116, 0, 0, 2215, 2216, 5, 56, 0, 0, 2216, 380, 1, 0, 0, 0, 2217, 2218, 5, 117, 0, 0, 2218, 2219, 5, 105, 0, 0, 2219, 2220, 5, 110, 0, 0, 2220, 2221, 5, 116, 0, 0, 2221, 2222, 5, 49, 0, 0, 2222, 2223, 5, 54, 0, 0, 2223, 382, 1, 0, 0, 0, 2224, 2225, 5, 117, 0, 0, 2225, 2226, 5, 105, 0, 0, 2226, 2227, 5, 110, 0, 0, 2227, 2228, 5, 116, 0, 0, 2228, 2229, 5, 51, 0, 0, 2229, 2230, 5, 50, 0, 0, 2230, 384, 1, 0, 0, 0, 2231, 2232, 5, 117, 0, 0, 2232, 2233, 5, 105, 0, 0, 2233, 2234, 5, 110, 0, 0, 2234, 2235, 5, 116, 0, 0, 2235, 2236, 5, 54, 0, 0, 2236, 2237, 5, 52, 0, 0, 2237, 386, 1, 0, 0, 0, 2238, 2239, 5, 105, 0, 0, 2239, 2240, 5, 110, 0, 0, 2240, 2241, 5, 116, 0, 0, 2241, 388, 1, 0, 0, 0, 2242, 2243, 5, 117, 0, 0, 2243, 2244, 5, 105, 0, 0, 2244, 2245, 5, 110, 0, 0, 2245, 2246, 5, 116, 0, 0, 2246, 390, 1, 0, 0, 0, 2247, 2248, 5, 116, 0, 0, 2248, 2249, 5, 121, 0, 0, 2249, 2250, 5, 112, 0, 0, 2250, 2251, 5, 101, 0, 0, 2251, 392, 1, 0, 0, 0, 2252, 2253, 5, 111, 0, 0, 2253, 2254, 5, 98, 0, 0, 2254, 2255, 5, 106, 0, 0, 2255, 2256, 5, 101, 0, 0, 2256, 2257, 5, 99, 0, 0, 2257, 2258, 5, 116, 0, 0, 2258, 394, 1, 0, 0, 0, 2259, 2260, 5, 46, 0, 0, 2260, 2261, 5, 109, 0, 0, 2261, 2262, 5, 111, 0, 0, 2262, 2263, 5, 100, 0, 0, 2263, 2264, 5, 117, 0, 0, 2264, 2265, 5, 108, 0, 0, 2265, 2266, 5, 101, 0, 0, 2266, 396, 1, 0, 0, 0, 2267, 2268, 5, 118, 0, 0, 2268, 2269, 5, 97, 0, 0, 2269, 2270, 5, 108, 0, 0, 2270, 2271, 5, 117, 0, 0, 2271, 2272, 5, 101, 0, 0, 2272, 398, 1, 0, 0, 0, 2273, 2274, 5, 118, 0, 0, 2274, 2275, 5, 97, 0, 0, 2275, 2276, 5, 108, 0, 0, 2276, 2277, 5, 117, 0, 0, 2277, 2278, 5, 101, 0, 0, 2278, 2279, 5, 116, 0, 0, 2279, 2280, 5, 121, 0, 0, 2280, 2281, 5, 112, 0, 0, 2281, 2282, 5, 101, 0, 0, 2282, 400, 1, 0, 0, 0, 2283, 2284, 5, 118, 0, 0, 2284, 2285, 5, 111, 0, 0, 2285, 2286, 5, 105, 0, 0, 2286, 2287, 5, 100, 0, 0, 2287, 402, 1, 0, 0, 0, 2288, 2289, 5, 101, 0, 0, 2289, 2290, 5, 110, 0, 0, 2290, 2291, 5, 117, 0, 0, 2291, 2292, 5, 109, 0, 0, 2292, 404, 1, 0, 0, 0, 2293, 2294, 5, 99, 0, 0, 2294, 2295, 5, 117, 0, 0, 2295, 2296, 5, 115, 0, 0, 2296, 2297, 5, 116, 0, 0, 2297, 2298, 5, 111, 0, 0, 2298, 2299, 5, 109, 0, 0, 2299, 406, 1, 0, 0, 0, 2300, 2301, 5, 102, 0, 0, 2301, 2302, 5, 105, 0, 0, 2302, 2303, 5, 120, 0, 0, 2303, 2304, 5, 101, 0, 0, 2304, 2305, 5, 100, 0, 0, 2305, 408, 1, 0, 0, 0, 2306, 2307, 5, 115, 0, 0, 2307, 2308, 5, 121, 0, 0, 2308, 2309, 5, 115, 0, 0, 2309, 2310, 5, 116, 0, 0, 2310, 2311, 5, 114, 0, 0, 2311, 2312, 5, 105, 0, 0, 2312, 2313, 5, 110, 0, 0, 2313, 2314, 5, 103, 0, 0, 2314, 410, 1, 0, 0, 0, 2315, 2316, 5, 97, 0, 0, 2316, 2317, 5, 114, 0, 0, 2317, 2318, 5, 114, 0, 0, 2318, 2319, 5, 97, 0, 0, 2319, 2320, 5, 121, 0, 0, 2320, 412, 1, 0, 0, 0, 2321, 2322, 5, 118, 0, 0, 2322, 2323, 5, 97, 0, 0, 2323, 2324, 5, 114, 0, 0, 2324, 2325, 5, 105, 0, 0, 2325, 2326, 5, 97, 0, 0, 2326, 2327, 5, 110, 0, 0, 2327, 2328, 5, 116, 0, 0, 2328, 414, 1, 0, 0, 0, 2329, 2330, 5, 99, 0, 0, 2330, 2331, 5, 117, 0, 0, 2331, 2332, 5, 114, 0, 0, 2332, 2333, 5, 114, 0, 0, 2333, 2334, 5, 101, 0, 0, 2334, 2335, 5, 110, 0, 0, 2335, 2336, 5, 99, 0, 0, 2336, 2337, 5, 121, 0, 0, 2337, 416, 1, 0, 0, 0, 2338, 2339, 5, 115, 0, 0, 2339, 2340, 5, 121, 0, 0, 2340, 2341, 5, 115, 0, 0, 2341, 2342, 5, 99, 0, 0, 2342, 2343, 5, 104, 0, 0, 2343, 2344, 5, 97, 0, 0, 2344, 2345, 5, 114, 0, 0, 2345, 418, 1, 0, 0, 0, 2346, 2347, 5, 101, 0, 0, 2347, 2348, 5, 114, 0, 0, 2348, 2349, 5, 114, 0, 0, 2349, 2350, 5, 111, 0, 0, 2350, 2351, 5, 114, 0, 0, 2351, 420, 1, 0, 0, 0, 2352, 2353, 5, 100, 0, 0, 2353, 2354, 5, 101, 0, 0, 2354, 2355, 5, 99, 0, 0, 2355, 2356, 5, 105, 0, 0, 2356, 2357, 5, 109, 0, 0, 2357, 2358, 5, 97, 0, 0, 2358, 2359, 5, 108, 0, 0, 2359, 422, 1, 0, 0, 0, 2360, 2361, 5, 100, 0, 0, 2361, 2362, 5, 97, 0, 0, 2362, 2363, 5, 116, 0, 0, 2363, 2364, 5, 101, 0, 0, 2364, 424, 1, 0, 0, 0, 2365, 2366, 5, 98, 0, 0, 2366, 2367, 5, 115, 0, 0, 2367, 2368, 5, 116, 0, 0, 2368, 2369, 5, 114, 0, 0, 2369, 426, 1, 0, 0, 0, 2370, 2371, 5, 108, 0, 0, 2371, 2372, 5, 112, 0, 0, 2372, 2373, 5, 115, 0, 0, 2373, 2374, 5, 116, 0, 0, 2374, 2375, 5, 114, 0, 0, 2375, 428, 1, 0, 0, 0, 2376, 2377, 5, 108, 0, 0, 2377, 2378, 5, 112, 0, 0, 2378, 2379, 5, 119, 0, 0, 2379, 2380, 5, 115, 0, 0, 2380, 2381, 5, 116, 0, 0, 2381, 2382, 5, 114, 0, 0, 2382, 430, 1, 0, 0, 0, 2383, 2384, 5, 108, 0, 0, 2384, 2385, 5, 112, 0, 0, 2385, 2386, 5, 116, 0, 0, 2386, 2387, 5, 115, 0, 0, 2387, 2388, 5, 116, 0, 0, 2388, 2389, 5, 114, 0, 0, 2389, 432, 1, 0, 0, 0, 2390, 2391, 5, 111, 0, 0, 2391, 2392, 5, 98, 0, 0, 2392, 2393, 5, 106, 0, 0, 2393, 2394, 5, 101, 0, 0, 2394, 2395, 5, 99, 0, 0, 2395, 2396, 5, 116, 0, 0, 2396, 2397, 5, 114, 0, 0, 2397, 2398, 5, 101, 0, 0, 2398, 2399, 5, 102, 0, 0, 2399, 434, 1, 0, 0, 0, 2400, 2401, 5, 105, 0, 0, 2401, 2402, 5, 117, 0, 0, 2402, 2403, 5, 110, 0, 0, 2403, 2404, 5, 107, 0, 0, 2404, 2405, 5, 110, 0, 0, 2405, 2406, 5, 111, 0, 0, 2406, 2407, 5, 119, 0, 0, 2407, 2408, 5, 110, 0, 0, 2408, 436, 1, 0, 0, 0, 2409, 2410, 5, 105, 0, 0, 2410, 2411, 5, 100, 0, 0, 2411, 2412, 5, 105, 0, 0, 2412, 2413, 5, 115, 0, 0, 2413, 2414, 5, 112, 0, 0, 2414, 2415, 5, 97, 0, 0, 2415, 2416, 5, 116, 0, 0, 2416, 2417, 5, 99, 0, 0, 2417, 2418, 5, 104, 0, 0, 2418, 438, 1, 0, 0, 0, 2419, 2420, 5, 115, 0, 0, 2420, 2421, 5, 116, 0, 0, 2421, 2422, 5, 114, 0, 0, 2422, 2423, 5, 117, 0, 0, 2423, 2424, 5, 99, 0, 0, 2424, 2425, 5, 116, 0, 0, 2425, 440, 1, 0, 0, 0, 2426, 2427, 5, 105, 0, 0, 2427, 2428, 5, 110, 0, 0, 2428, 2429, 5, 116, 0, 0, 2429, 2430, 5, 101, 0, 0, 2430, 2431, 5, 114, 0, 0, 2431, 2432, 5, 102, 0, 0, 2432, 2433, 5, 97, 0, 0, 2433, 2434, 5, 99, 0, 0, 2434, 2435, 5, 101, 0, 0, 2435, 442, 1, 0, 0, 0, 2436, 2437, 5, 115, 0, 0, 2437, 2438, 5, 97, 0, 0, 2438, 2439, 5, 102, 0, 0, 2439, 2440, 5, 101, 0, 0, 2440, 2441, 5, 97, 0, 0, 2441, 2442, 5, 114, 0, 0, 2442, 2443, 5, 114, 0, 0, 2443, 2444, 5, 97, 0, 0, 2444, 2445, 5, 121, 0, 0, 2445, 444, 1, 0, 0, 0, 2446, 2447, 5, 98, 0, 0, 2447, 2448, 5, 121, 0, 0, 2448, 2449, 5, 118, 0, 0, 2449, 2450, 5, 97, 0, 0, 2450, 2451, 5, 108, 0, 0, 2451, 2452, 5, 115, 0, 0, 2452, 2453, 5, 116, 0, 0, 2453, 2454, 5, 114, 0, 0, 2454, 446, 1, 0, 0, 0, 2455, 2456, 5, 97, 0, 0, 2456, 2457, 5, 110, 0, 0, 2457, 2458, 5, 115, 0, 0, 2458, 2459, 5, 105, 0, 0, 2459, 448, 1, 0, 0, 0, 2460, 2461, 5, 116, 0, 0, 2461, 2462, 5, 98, 0, 0, 2462, 2463, 5, 115, 0, 0, 2463, 2464, 5, 116, 0, 0, 2464, 2465, 5, 114, 0, 0, 2465, 450, 1, 0, 0, 0, 2466, 2467, 5, 109, 0, 0, 2467, 2468, 5, 101, 0, 0, 2468, 2469, 5, 116, 0, 0, 2469, 2470, 5, 104, 0, 0, 2470, 2471, 5, 111, 0, 0, 2471, 2472, 5, 100, 0, 0, 2472, 452, 1, 0, 0, 0, 2473, 2474, 5, 97, 0, 0, 2474, 2475, 5, 110, 0, 0, 2475, 2476, 5, 121, 0, 0, 2476, 454, 1, 0, 0, 0, 2477, 2478, 5, 108, 0, 0, 2478, 2479, 5, 112, 0, 0, 2479, 2480, 5, 115, 0, 0, 2480, 2481, 5, 116, 0, 0, 2481, 2482, 5, 114, 0, 0, 2482, 2483, 5, 117, 0, 0, 2483, 2484, 5, 99, 0, 0, 2484, 2485, 5, 116, 0, 0, 2485, 456, 1, 0, 0, 0, 2486, 2487, 5, 118, 0, 0, 2487, 2488, 5, 101, 0, 0, 2488, 2489, 5, 99, 0, 0, 2489, 2490, 5, 116, 0, 0, 2490, 2491, 5, 111, 0, 0, 2491, 2492, 5, 114, 0, 0, 2492, 458, 1, 0, 0, 0, 2493, 2494, 5, 104, 0, 0, 2494, 2495, 5, 114, 0, 0, 2495, 2496, 5, 101, 0, 0, 2496, 2497, 5, 115, 0, 0, 2497, 2498, 5, 117, 0, 0, 2498, 2499, 5, 108, 0, 0, 2499, 2500, 5, 116, 0, 0, 2500, 460, 1, 0, 0, 0, 2501, 2502, 5, 99, 0, 0, 2502, 2503, 5, 97, 0, 0, 2503, 2504, 5, 114, 0, 0, 2504, 2505, 5, 114, 0, 0, 2505, 2506, 5, 97, 0, 0, 2506, 2507, 5, 121, 0, 0, 2507, 462, 1, 0, 0, 0, 2508, 2509, 5, 117, 0, 0, 2509, 2510, 5, 115, 0, 0, 2510, 2511, 5, 101, 0, 0, 2511, 2512, 5, 114, 0, 0, 2512, 2513, 5, 100, 0, 0, 2513, 2514, 5, 101, 0, 0, 2514, 2515, 5, 102, 0, 0, 2515, 2516, 5, 105, 0, 0, 2516, 2517, 5, 110, 0, 0, 2517, 2518, 5, 101, 0, 0, 2518, 2519, 5, 100, 0, 0, 2519, 464, 1, 0, 0, 0, 2520, 2521, 5, 114, 0, 0, 2521, 2522, 5, 101, 0, 0, 2522, 2523, 5, 99, 0, 0, 2523, 2524, 5, 111, 0, 0, 2524, 2525, 5, 114, 0, 0, 2525, 2526, 5, 100, 0, 0, 2526, 466, 1, 0, 0, 0, 2527, 2528, 5, 102, 0, 0, 2528, 2529, 5, 105, 0, 0, 2529, 2530, 5, 108, 0, 0, 2530, 2531, 5, 101, 0, 0, 2531, 2532, 5, 116, 0, 0, 2532, 2533, 5, 105, 0, 0, 2533, 2534, 5, 109, 0, 0, 2534, 2535, 5, 101, 0, 0, 2535, 468, 1, 0, 0, 0, 2536, 2537, 5, 98, 0, 0, 2537, 2538, 5, 108, 0, 0, 2538, 2539, 5, 111, 0, 0, 2539, 2540, 5, 98, 0, 0, 2540, 470, 1, 0, 0, 0, 2541, 2542, 5, 115, 0, 0, 2542, 2543, 5, 116, 0, 0, 2543, 2544, 5, 114, 0, 0, 2544, 2545, 5, 101, 0, 0, 2545, 2546, 5, 97, 0, 0, 2546, 2547, 5, 109, 0, 0, 2547, 472, 1, 0, 0, 0, 2548, 2549, 5, 115, 0, 0, 2549, 2550, 5, 116, 0, 0, 2550, 2551, 5, 111, 0, 0, 2551, 2552, 5, 114, 0, 0, 2552, 2553, 5, 97, 0, 0, 2553, 2554, 5, 103, 0, 0, 2554, 2555, 5, 101, 0, 0, 2555, 474, 1, 0, 0, 0, 2556, 2557, 5, 115, 0, 0, 2557, 2558, 5, 116, 0, 0, 2558, 2559, 5, 114, 0, 0, 2559, 2560, 5, 101, 0, 0, 2560, 2561, 5, 97, 0, 0, 2561, 2562, 5, 109, 0, 0, 2562, 2563, 5, 101, 0, 0, 2563, 2564, 5, 100, 0, 0, 2564, 2565, 5, 95, 0, 0, 2565, 2566, 5, 111, 0, 0, 2566, 2567, 5, 98, 0, 0, 2567, 2568, 5, 106, 0, 0, 2568, 2569, 5, 101, 0, 0, 2569, 2570, 5, 99, 0, 0, 2570, 2571, 5, 116, 0, 0, 2571, 476, 1, 0, 0, 0, 2572, 2573, 5, 115, 0, 0, 2573, 2574, 5, 116, 0, 0, 2574, 2575, 5, 111, 0, 0, 2575, 2576, 5, 114, 0, 0, 2576, 2577, 5, 101, 0, 0, 2577, 2578, 5, 100, 0, 0, 2578, 2579, 5, 95, 0, 0, 2579, 2580, 5, 111, 0, 0, 2580, 2581, 5, 98, 0, 0, 2581, 2582, 5, 106, 0, 0, 2582, 2583, 5, 101, 0, 0, 2583, 2584, 5, 99, 0, 0, 2584, 2585, 5, 116, 0, 0, 2585, 478, 1, 0, 0, 0, 2586, 2587, 5, 98, 0, 0, 2587, 2588, 5, 108, 0, 0, 2588, 2589, 5, 111, 0, 0, 2589, 2590, 5, 98, 0, 0, 2590, 2591, 5, 95, 0, 0, 2591, 2592, 5, 111, 0, 0, 2592, 2593, 5, 98, 0, 0, 2593, 2594, 5, 106, 0, 0, 2594, 2595, 5, 101, 0, 0, 2595, 2596, 5, 99, 0, 0, 2596, 2597, 5, 116, 0, 0, 2597, 480, 1, 0, 0, 0, 2598, 2599, 5, 99, 0, 0, 2599, 2600, 5, 102, 0, 0, 2600, 482, 1, 0, 0, 0, 2601, 2602, 5, 99, 0, 0, 2602, 2603, 5, 108, 0, 0, 2603, 2604, 5, 115, 0, 0, 2604, 2605, 5, 105, 0, 0, 2605, 2606, 5, 100, 0, 0, 2606, 484, 1, 0, 0, 0, 2607, 2608, 5, 105, 0, 0, 2608, 2609, 5, 110, 0, 0, 2609, 2610, 5, 115, 0, 0, 2610, 2611, 5, 116, 0, 0, 2611, 2612, 5, 97, 0, 0, 2612, 2613, 5, 110, 0, 0, 2613, 2614, 5, 99, 0, 0, 2614, 2615, 5, 101, 0, 0, 2615, 486, 1, 0, 0, 0, 2616, 2617, 5, 101, 0, 0, 2617, 2618, 5, 120, 0, 0, 2618, 2619, 5, 112, 0, 0, 2619, 2620, 5, 108, 0, 0, 2620, 2621, 5, 105, 0, 0, 2621, 2622, 5, 99, 0, 0, 2622, 2623, 5, 105, 0, 0, 2623, 2624, 5, 116, 0, 0, 2624, 488, 1, 0, 0, 0, 2625, 2626, 5, 100, 0, 0, 2626, 2627, 5, 101, 0, 0, 2627, 2628, 5, 102, 0, 0, 2628, 2629, 5, 97, 0, 0, 2629, 2630, 5, 117, 0, 0, 2630, 2631, 5, 108, 0, 0, 2631, 2632, 5, 116, 0, 0, 2632, 490, 1, 0, 0, 0, 2633, 2634, 5, 118, 0, 0, 2634, 2635, 5, 97, 0, 0, 2635, 2636, 5, 114, 0, 0, 2636, 2637, 5, 97, 0, 0, 2637, 2638, 5, 114, 0, 0, 2638, 2639, 5, 103, 0, 0, 2639, 492, 1, 0, 0, 0, 2640, 2641, 5, 117, 0, 0, 2641, 2642, 5, 110, 0, 0, 2642, 2643, 5, 109, 0, 0, 2643, 2644, 5, 97, 0, 0, 2644, 2645, 5, 110, 0, 0, 2645, 2646, 5, 97, 0, 0, 2646, 2647, 5, 103, 0, 0, 2647, 2648, 5, 101, 0, 0, 2648, 2649, 5, 100, 0, 0, 2649, 494, 1, 0, 0, 0, 2650, 2651, 5, 99, 0, 0, 2651, 2652, 5, 100, 0, 0, 2652, 2653, 5, 101, 0, 0, 2653, 2654, 5, 99, 0, 0, 2654, 2655, 5, 108, 0, 0, 2655, 496, 1, 0, 0, 0, 2656, 2657, 5, 115, 0, 0, 2657, 2658, 5, 116, 0, 0, 2658, 2659, 5, 100, 0, 0, 2659, 2660, 5, 99, 0, 0, 2660, 2661, 5, 97, 0, 0, 2661, 2662, 5, 108, 0, 0, 2662, 2663, 5, 108, 0, 0, 2663, 498, 1, 0, 0, 0, 2664, 2665, 5, 116, 0, 0, 2665, 2666, 5, 104, 0, 0, 2666, 2667, 5, 105, 0, 0, 2667, 2668, 5, 115, 0, 0, 2668, 2669, 5, 99, 0, 0, 2669, 2670, 5, 97, 0, 0, 2670, 2671, 5, 108, 0, 0, 2671, 2672, 5, 108, 0, 0, 2672, 500, 1, 0, 0, 0, 2673, 2674, 5, 102, 0, 0, 2674, 2675, 5, 97, 0, 0, 2675, 2676, 5, 115, 0, 0, 2676, 2677, 5, 116, 0, 0, 2677, 2678, 5, 99, 0, 0, 2678, 2679, 5, 97, 0, 0, 2679, 2680, 5, 108, 0, 0, 2680, 2681, 5, 108, 0, 0, 2681, 502, 1, 0, 0, 0, 2682, 2683, 5, 33, 0, 0, 2683, 504, 1, 0, 0, 0, 2684, 2685, 5, 33, 0, 0, 2685, 2686, 5, 33, 0, 0, 2686, 506, 1, 0, 0, 0, 2687, 2688, 5, 116, 0, 0, 2688, 2689, 5, 121, 0, 0, 2689, 2690, 5, 112, 0, 0, 2690, 2691, 5, 101, 0, 0, 2691, 2692, 5, 100, 0, 0, 2692, 2693, 5, 114, 0, 0, 2693, 2694, 5, 101, 0, 0, 2694, 2702, 5, 102, 0, 0, 2695, 2696, 5, 114, 0, 0, 2696, 2697, 5, 101, 0, 0, 2697, 2698, 5, 102, 0, 0, 2698, 2699, 5, 97, 0, 0, 2699, 2700, 5, 110, 0, 0, 2700, 2702, 5, 121, 0, 0, 2701, 2687, 1, 0, 0, 0, 2701, 2695, 1, 0, 0, 0, 2702, 508, 1, 0, 0, 0, 2703, 2704, 5, 46, 0, 0, 2704, 2705, 5, 112, 0, 0, 2705, 2706, 5, 97, 0, 0, 2706, 2707, 5, 114, 0, 0, 2707, 2708, 5, 97, 0, 0, 2708, 2709, 5, 109, 0, 0, 2709, 510, 1, 0, 0, 0, 2710, 2711, 5, 99, 0, 0, 2711, 2712, 5, 111, 0, 0, 2712, 2713, 5, 110, 0, 0, 2713, 2714, 5, 115, 0, 0, 2714, 2715, 5, 116, 0, 0, 2715, 2716, 5, 114, 0, 0, 2716, 2717, 5, 97, 0, 0, 2717, 2718, 5, 105, 0, 0, 2718, 2719, 5, 110, 0, 0, 2719, 2720, 5, 116, 0, 0, 2720, 512, 1, 0, 0, 0, 2721, 2722, 5, 46, 0, 0, 2722, 2723, 5, 116, 0, 0, 2723, 2724, 5, 104, 0, 0, 2724, 2725, 5, 105, 0, 0, 2725, 2726, 5, 115, 0, 0, 2726, 514, 1, 0, 0, 0, 2727, 2728, 5, 46, 0, 0, 2728, 2729, 5, 98, 0, 0, 2729, 2730, 5, 97, 0, 0, 2730, 2731, 5, 115, 0, 0, 2731, 2732, 5, 101, 0, 0, 2732, 516, 1, 0, 0, 0, 2733, 2734, 5, 46, 0, 0, 2734, 2735, 5, 110, 0, 0, 2735, 2736, 5, 101, 0, 0, 2736, 2737, 5, 115, 0, 0, 2737, 2738, 5, 116, 0, 0, 2738, 2739, 5, 101, 0, 0, 2739, 2740, 5, 114, 0, 0, 2740, 518, 1, 0, 0, 0, 2741, 2742, 5, 38, 0, 0, 2742, 520, 1, 0, 0, 0, 2743, 2744, 5, 91, 0, 0, 2744, 2745, 5, 93, 0, 0, 2745, 522, 1, 0, 0, 0, 2746, 2747, 5, 42, 0, 0, 2747, 524, 1, 0, 0, 0, 2748, 2761, 5, 92, 0, 0, 2749, 2762, 7, 4, 0, 0, 2750, 2752, 7, 5, 0, 0, 2751, 2753, 7, 5, 0, 0, 2752, 2751, 1, 0, 0, 0, 2752, 2753, 1, 0, 0, 0, 2753, 2755, 1, 0, 0, 0, 2754, 2756, 7, 5, 0, 0, 2755, 2754, 1, 0, 0, 0, 2755, 2756, 1, 0, 0, 0, 2756, 2762, 1, 0, 0, 0, 2757, 2759, 5, 13, 0, 0, 2758, 2757, 1, 0, 0, 0, 2758, 2759, 1, 0, 0, 0, 2759, 2760, 1, 0, 0, 0, 2760, 2762, 5, 10, 0, 0, 2761, 2749, 1, 0, 0, 0, 2761, 2750, 1, 0, 0, 0, 2761, 2758, 1, 0, 0, 0, 2762, 526, 1, 0, 0, 0, 2763, 2768, 5, 34, 0, 0, 2764, 2767, 8, 6, 0, 0, 2765, 2767, 3, 525, 262, 0, 2766, 2764, 1, 0, 0, 0, 2766, 2765, 1, 0, 0, 0, 2767, 2770, 1, 0, 0, 0, 2768, 2766, 1, 0, 0, 0, 2768, 2769, 1, 0, 0, 0, 2769, 2771, 1, 0, 0, 0, 2770, 2768, 1, 0, 0, 0, 2771, 2772, 5, 34, 0, 0, 2772, 528, 1, 0, 0, 0, 2773, 2778, 5, 39, 0, 0, 2774, 2777, 8, 7, 0, 0, 2775, 2777, 3, 525, 262, 0, 2776, 2774, 1, 0, 0, 0, 2776, 2775, 1, 0, 0, 0, 2777, 2780, 1, 0, 0, 0, 2778, 2776, 1, 0, 0, 0, 2778, 2779, 1, 0, 0, 0, 2779, 2781, 1, 0, 0, 0, 2780, 2778, 1, 0, 0, 0, 2781, 2782, 5, 39, 0, 0, 2782, 530, 1, 0, 0, 0, 2783, 2784, 5, 46, 0, 0, 2784, 532, 1, 0, 0, 0, 2785, 2786, 5, 43, 0, 0, 2786, 534, 1, 0, 0, 0, 2787, 2788, 5, 35, 0, 0, 2788, 2789, 5, 100, 0, 0, 2789, 2790, 5, 101, 0, 0, 2790, 2791, 5, 102, 0, 0, 2791, 2792, 5, 105, 0, 0, 2792, 2793, 5, 110, 0, 0, 2793, 2794, 5, 101, 0, 0, 2794, 536, 1, 0, 0, 0, 2795, 2796, 5, 35, 0, 0, 2796, 2797, 5, 117, 0, 0, 2797, 2798, 5, 110, 0, 0, 2798, 2799, 5, 100, 0, 0, 2799, 2800, 5, 101, 0, 0, 2800, 2801, 5, 102, 0, 0, 2801, 538, 1, 0, 0, 0, 2802, 2803, 5, 35, 0, 0, 2803, 2804, 5, 105, 0, 0, 2804, 2805, 5, 102, 0, 0, 2805, 2806, 5, 100, 0, 0, 2806, 2807, 5, 101, 0, 0, 2807, 2808, 5, 102, 0, 0, 2808, 540, 1, 0, 0, 0, 2809, 2810, 5, 35, 0, 0, 2810, 2811, 5, 105, 0, 0, 2811, 2812, 5, 102, 0, 0, 2812, 2813, 5, 110, 0, 0, 2813, 2814, 5, 100, 0, 0, 2814, 2815, 5, 101, 0, 0, 2815, 2816, 5, 102, 0, 0, 2816, 542, 1, 0, 0, 0, 2817, 2818, 5, 35, 0, 0, 2818, 2819, 5, 101, 0, 0, 2819, 2820, 5, 108, 0, 0, 2820, 2821, 5, 115, 0, 0, 2821, 2822, 5, 101, 0, 0, 2822, 544, 1, 0, 0, 0, 2823, 2824, 5, 35, 0, 0, 2824, 2825, 5, 101, 0, 0, 2825, 2826, 5, 110, 0, 0, 2826, 2827, 5, 100, 0, 0, 2827, 2828, 5, 105, 0, 0, 2828, 2829, 5, 102, 0, 0, 2829, 546, 1, 0, 0, 0, 2830, 2831, 5, 35, 0, 0, 2831, 2832, 5, 105, 0, 0, 2832, 2833, 5, 110, 0, 0, 2833, 2834, 5, 99, 0, 0, 2834, 2835, 5, 108, 0, 0, 2835, 2836, 5, 117, 0, 0, 2836, 2837, 5, 100, 0, 0, 2837, 2838, 5, 101, 0, 0, 2838, 548, 1, 0, 0, 0, 2839, 2840, 5, 46, 0, 0, 2840, 2841, 5, 109, 0, 0, 2841, 2842, 5, 114, 0, 0, 2842, 2843, 5, 101, 0, 0, 2843, 2844, 5, 115, 0, 0, 2844, 2845, 5, 111, 0, 0, 2845, 2846, 5, 117, 0, 0, 2846, 2847, 5, 114, 0, 0, 2847, 2848, 5, 99, 0, 0, 2848, 2849, 5, 101, 0, 0, 2849, 550, 1, 0, 0, 0, 2850, 2851, 5, 110, 0, 0, 2851, 2852, 5, 111, 0, 0, 2852, 4033, 5, 112, 0, 0, 2853, 2854, 5, 98, 0, 0, 2854, 2855, 5, 114, 0, 0, 2855, 2856, 5, 101, 0, 0, 2856, 2857, 5, 97, 0, 0, 2857, 4033, 5, 107, 0, 0, 2858, 2859, 5, 108, 0, 0, 2859, 2860, 5, 100, 0, 0, 2860, 2861, 5, 97, 0, 0, 2861, 2862, 5, 114, 0, 0, 2862, 2863, 5, 103, 0, 0, 2863, 2864, 5, 46, 0, 0, 2864, 4033, 5, 48, 0, 0, 2865, 2866, 5, 108, 0, 0, 2866, 2867, 5, 100, 0, 0, 2867, 2868, 5, 97, 0, 0, 2868, 2869, 5, 114, 0, 0, 2869, 2870, 5, 103, 0, 0, 2870, 2871, 5, 46, 0, 0, 2871, 4033, 5, 49, 0, 0, 2872, 2873, 5, 108, 0, 0, 2873, 2874, 5, 100, 0, 0, 2874, 2875, 5, 97, 0, 0, 2875, 2876, 5, 114, 0, 0, 2876, 2877, 5, 103, 0, 0, 2877, 2878, 5, 46, 0, 0, 2878, 4033, 5, 50, 0, 0, 2879, 2880, 5, 108, 0, 0, 2880, 2881, 5, 100, 0, 0, 2881, 2882, 5, 97, 0, 0, 2882, 2883, 5, 114, 0, 0, 2883, 2884, 5, 103, 0, 0, 2884, 2885, 5, 46, 0, 0, 2885, 4033, 5, 51, 0, 0, 2886, 2887, 5, 108, 0, 0, 2887, 2888, 5, 100, 0, 0, 2888, 2889, 5, 108, 0, 0, 2889, 2890, 5, 111, 0, 0, 2890, 2891, 5, 99, 0, 0, 2891, 2892, 5, 46, 0, 0, 2892, 4033, 5, 48, 0, 0, 2893, 2894, 5, 108, 0, 0, 2894, 2895, 5, 100, 0, 0, 2895, 2896, 5, 108, 0, 0, 2896, 2897, 5, 111, 0, 0, 2897, 2898, 5, 99, 0, 0, 2898, 2899, 5, 46, 0, 0, 2899, 4033, 5, 49, 0, 0, 2900, 2901, 5, 108, 0, 0, 2901, 2902, 5, 100, 0, 0, 2902, 2903, 5, 108, 0, 0, 2903, 2904, 5, 111, 0, 0, 2904, 2905, 5, 99, 0, 0, 2905, 2906, 5, 46, 0, 0, 2906, 4033, 5, 50, 0, 0, 2907, 2908, 5, 108, 0, 0, 2908, 2909, 5, 100, 0, 0, 2909, 2910, 5, 108, 0, 0, 2910, 2911, 5, 111, 0, 0, 2911, 2912, 5, 99, 0, 0, 2912, 2913, 5, 46, 0, 0, 2913, 4033, 5, 51, 0, 0, 2914, 2915, 5, 115, 0, 0, 2915, 2916, 5, 116, 0, 0, 2916, 2917, 5, 108, 0, 0, 2917, 2918, 5, 111, 0, 0, 2918, 2919, 5, 99, 0, 0, 2919, 2920, 5, 46, 0, 0, 2920, 4033, 5, 48, 0, 0, 2921, 2922, 5, 115, 0, 0, 2922, 2923, 5, 116, 0, 0, 2923, 2924, 5, 108, 0, 0, 2924, 2925, 5, 111, 0, 0, 2925, 2926, 5, 99, 0, 0, 2926, 2927, 5, 46, 0, 0, 2927, 4033, 5, 49, 0, 0, 2928, 2929, 5, 115, 0, 0, 2929, 2930, 5, 116, 0, 0, 2930, 2931, 5, 108, 0, 0, 2931, 2932, 5, 111, 0, 0, 2932, 2933, 5, 99, 0, 0, 2933, 2934, 5, 46, 0, 0, 2934, 4033, 5, 50, 0, 0, 2935, 2936, 5, 115, 0, 0, 2936, 2937, 5, 116, 0, 0, 2937, 2938, 5, 108, 0, 0, 2938, 2939, 5, 111, 0, 0, 2939, 2940, 5, 99, 0, 0, 2940, 2941, 5, 46, 0, 0, 2941, 4033, 5, 51, 0, 0, 2942, 2943, 5, 108, 0, 0, 2943, 2944, 5, 100, 0, 0, 2944, 2945, 5, 110, 0, 0, 2945, 2946, 5, 117, 0, 0, 2946, 2947, 5, 108, 0, 0, 2947, 4033, 5, 108, 0, 0, 2948, 2949, 5, 108, 0, 0, 2949, 2950, 5, 100, 0, 0, 2950, 2951, 5, 99, 0, 0, 2951, 2952, 5, 46, 0, 0, 2952, 2953, 5, 105, 0, 0, 2953, 2954, 5, 52, 0, 0, 2954, 2955, 5, 46, 0, 0, 2955, 2956, 5, 109, 0, 0, 2956, 4033, 5, 49, 0, 0, 2957, 2958, 5, 108, 0, 0, 2958, 2959, 5, 100, 0, 0, 2959, 2960, 5, 99, 0, 0, 2960, 2961, 5, 46, 0, 0, 2961, 2962, 5, 105, 0, 0, 2962, 2963, 5, 52, 0, 0, 2963, 2964, 5, 46, 0, 0, 2964, 2965, 5, 77, 0, 0, 2965, 4033, 5, 49, 0, 0, 2966, 2967, 5, 108, 0, 0, 2967, 2968, 5, 100, 0, 0, 2968, 2969, 5, 99, 0, 0, 2969, 2970, 5, 46, 0, 0, 2970, 2971, 5, 105, 0, 0, 2971, 2972, 5, 52, 0, 0, 2972, 2973, 5, 46, 0, 0, 2973, 4033, 5, 48, 0, 0, 2974, 2975, 5, 108, 0, 0, 2975, 2976, 5, 100, 0, 0, 2976, 2977, 5, 99, 0, 0, 2977, 2978, 5, 46, 0, 0, 2978, 2979, 5, 105, 0, 0, 2979, 2980, 5, 52, 0, 0, 2980, 2981, 5, 46, 0, 0, 2981, 4033, 5, 49, 0, 0, 2982, 2983, 5, 108, 0, 0, 2983, 2984, 5, 100, 0, 0, 2984, 2985, 5, 99, 0, 0, 2985, 2986, 5, 46, 0, 0, 2986, 2987, 5, 105, 0, 0, 2987, 2988, 5, 52, 0, 0, 2988, 2989, 5, 46, 0, 0, 2989, 4033, 5, 50, 0, 0, 2990, 2991, 5, 108, 0, 0, 2991, 2992, 5, 100, 0, 0, 2992, 2993, 5, 99, 0, 0, 2993, 2994, 5, 46, 0, 0, 2994, 2995, 5, 105, 0, 0, 2995, 2996, 5, 52, 0, 0, 2996, 2997, 5, 46, 0, 0, 2997, 4033, 5, 51, 0, 0, 2998, 2999, 5, 108, 0, 0, 2999, 3000, 5, 100, 0, 0, 3000, 3001, 5, 99, 0, 0, 3001, 3002, 5, 46, 0, 0, 3002, 3003, 5, 105, 0, 0, 3003, 3004, 5, 52, 0, 0, 3004, 3005, 5, 46, 0, 0, 3005, 4033, 5, 52, 0, 0, 3006, 3007, 5, 108, 0, 0, 3007, 3008, 5, 100, 0, 0, 3008, 3009, 5, 99, 0, 0, 3009, 3010, 5, 46, 0, 0, 3010, 3011, 5, 105, 0, 0, 3011, 3012, 5, 52, 0, 0, 3012, 3013, 5, 46, 0, 0, 3013, 4033, 5, 53, 0, 0, 3014, 3015, 5, 108, 0, 0, 3015, 3016, 5, 100, 0, 0, 3016, 3017, 5, 99, 0, 0, 3017, 3018, 5, 46, 0, 0, 3018, 3019, 5, 105, 0, 0, 3019, 3020, 5, 52, 0, 0, 3020, 3021, 5, 46, 0, 0, 3021, 4033, 5, 54, 0, 0, 3022, 3023, 5, 108, 0, 0, 3023, 3024, 5, 100, 0, 0, 3024, 3025, 5, 99, 0, 0, 3025, 3026, 5, 46, 0, 0, 3026, 3027, 5, 105, 0, 0, 3027, 3028, 5, 52, 0, 0, 3028, 3029, 5, 46, 0, 0, 3029, 4033, 5, 55, 0, 0, 3030, 3031, 5, 108, 0, 0, 3031, 3032, 5, 100, 0, 0, 3032, 3033, 5, 99, 0, 0, 3033, 3034, 5, 46, 0, 0, 3034, 3035, 5, 105, 0, 0, 3035, 3036, 5, 52, 0, 0, 3036, 3037, 5, 46, 0, 0, 3037, 4033, 5, 56, 0, 0, 3038, 3039, 5, 100, 0, 0, 3039, 3040, 5, 117, 0, 0, 3040, 4033, 5, 112, 0, 0, 3041, 3042, 5, 112, 0, 0, 3042, 3043, 5, 111, 0, 0, 3043, 4033, 5, 112, 0, 0, 3044, 3045, 5, 114, 0, 0, 3045, 3046, 5, 101, 0, 0, 3046, 4033, 5, 116, 0, 0, 3047, 3048, 5, 108, 0, 0, 3048, 3049, 5, 100, 0, 0, 3049, 3050, 5, 105, 0, 0, 3050, 3051, 5, 110, 0, 0, 3051, 3052, 5, 100, 0, 0, 3052, 3053, 5, 46, 0, 0, 3053, 3054, 5, 105, 0, 0, 3054, 4033, 5, 49, 0, 0, 3055, 3056, 5, 108, 0, 0, 3056, 3057, 5, 100, 0, 0, 3057, 3058, 5, 105, 0, 0, 3058, 3059, 5, 110, 0, 0, 3059, 3060, 5, 100, 0, 0, 3060, 3061, 5, 46, 0, 0, 3061, 3062, 5, 117, 0, 0, 3062, 4033, 5, 49, 0, 0, 3063, 3064, 5, 108, 0, 0, 3064, 3065, 5, 100, 0, 0, 3065, 3066, 5, 105, 0, 0, 3066, 3067, 5, 110, 0, 0, 3067, 3068, 5, 100, 0, 0, 3068, 3069, 5, 46, 0, 0, 3069, 3070, 5, 105, 0, 0, 3070, 4033, 5, 50, 0, 0, 3071, 3072, 5, 108, 0, 0, 3072, 3073, 5, 100, 0, 0, 3073, 3074, 5, 105, 0, 0, 3074, 3075, 5, 110, 0, 0, 3075, 3076, 5, 100, 0, 0, 3076, 3077, 5, 46, 0, 0, 3077, 3078, 5, 117, 0, 0, 3078, 4033, 5, 50, 0, 0, 3079, 3080, 5, 108, 0, 0, 3080, 3081, 5, 100, 0, 0, 3081, 3082, 5, 105, 0, 0, 3082, 3083, 5, 110, 0, 0, 3083, 3084, 5, 100, 0, 0, 3084, 3085, 5, 46, 0, 0, 3085, 3086, 5, 105, 0, 0, 3086, 4033, 5, 52, 0, 0, 3087, 3088, 5, 108, 0, 0, 3088, 3089, 5, 100, 0, 0, 3089, 3090, 5, 105, 0, 0, 3090, 3091, 5, 110, 0, 0, 3091, 3092, 5, 100, 0, 0, 3092, 3093, 5, 46, 0, 0, 3093, 3094, 5, 117, 0, 0, 3094, 4033, 5, 52, 0, 0, 3095, 3096, 5, 108, 0, 0, 3096, 3097, 5, 100, 0, 0, 3097, 3098, 5, 105, 0, 0, 3098, 3099, 5, 110, 0, 0, 3099, 3100, 5, 100, 0, 0, 3100, 3101, 5, 46, 0, 0, 3101, 3102, 5, 105, 0, 0, 3102, 4033, 5, 56, 0, 0, 3103, 3104, 5, 108, 0, 0, 3104, 3105, 5, 100, 0, 0, 3105, 3106, 5, 105, 0, 0, 3106, 3107, 5, 110, 0, 0, 3107, 3108, 5, 100, 0, 0, 3108, 3109, 5, 46, 0, 0, 3109, 3110, 5, 117, 0, 0, 3110, 4033, 5, 56, 0, 0, 3111, 3112, 5, 108, 0, 0, 3112, 3113, 5, 100, 0, 0, 3113, 3114, 5, 105, 0, 0, 3114, 3115, 5, 110, 0, 0, 3115, 3116, 5, 100, 0, 0, 3116, 3117, 5, 46, 0, 0, 3117, 4033, 5, 105, 0, 0, 3118, 3119, 5, 108, 0, 0, 3119, 3120, 5, 100, 0, 0, 3120, 3121, 5, 105, 0, 0, 3121, 3122, 5, 110, 0, 0, 3122, 3123, 5, 100, 0, 0, 3123, 3124, 5, 46, 0, 0, 3124, 3125, 5, 114, 0, 0, 3125, 4033, 5, 52, 0, 0, 3126, 3127, 5, 108, 0, 0, 3127, 3128, 5, 100, 0, 0, 3128, 3129, 5, 105, 0, 0, 3129, 3130, 5, 110, 0, 0, 3130, 3131, 5, 100, 0, 0, 3131, 3132, 5, 46, 0, 0, 3132, 3133, 5, 114, 0, 0, 3133, 4033, 5, 56, 0, 0, 3134, 3135, 5, 108, 0, 0, 3135, 3136, 5, 100, 0, 0, 3136, 3137, 5, 105, 0, 0, 3137, 3138, 5, 110, 0, 0, 3138, 3139, 5, 100, 0, 0, 3139, 3140, 5, 46, 0, 0, 3140, 3141, 5, 114, 0, 0, 3141, 3142, 5, 101, 0, 0, 3142, 4033, 5, 102, 0, 0, 3143, 3144, 5, 115, 0, 0, 3144, 3145, 5, 116, 0, 0, 3145, 3146, 5, 105, 0, 0, 3146, 3147, 5, 110, 0, 0, 3147, 3148, 5, 100, 0, 0, 3148, 3149, 5, 46, 0, 0, 3149, 3150, 5, 114, 0, 0, 3150, 3151, 5, 101, 0, 0, 3151, 4033, 5, 102, 0, 0, 3152, 3153, 5, 115, 0, 0, 3153, 3154, 5, 116, 0, 0, 3154, 3155, 5, 105, 0, 0, 3155, 3156, 5, 110, 0, 0, 3156, 3157, 5, 100, 0, 0, 3157, 3158, 5, 46, 0, 0, 3158, 3159, 5, 105, 0, 0, 3159, 4033, 5, 49, 0, 0, 3160, 3161, 5, 115, 0, 0, 3161, 3162, 5, 116, 0, 0, 3162, 3163, 5, 105, 0, 0, 3163, 3164, 5, 110, 0, 0, 3164, 3165, 5, 100, 0, 0, 3165, 3166, 5, 46, 0, 0, 3166, 3167, 5, 105, 0, 0, 3167, 4033, 5, 50, 0, 0, 3168, 3169, 5, 115, 0, 0, 3169, 3170, 5, 116, 0, 0, 3170, 3171, 5, 105, 0, 0, 3171, 3172, 5, 110, 0, 0, 3172, 3173, 5, 100, 0, 0, 3173, 3174, 5, 46, 0, 0, 3174, 3175, 5, 105, 0, 0, 3175, 4033, 5, 52, 0, 0, 3176, 3177, 5, 115, 0, 0, 3177, 3178, 5, 116, 0, 0, 3178, 3179, 5, 105, 0, 0, 3179, 3180, 5, 110, 0, 0, 3180, 3181, 5, 100, 0, 0, 3181, 3182, 5, 46, 0, 0, 3182, 3183, 5, 105, 0, 0, 3183, 4033, 5, 56, 0, 0, 3184, 3185, 5, 115, 0, 0, 3185, 3186, 5, 116, 0, 0, 3186, 3187, 5, 105, 0, 0, 3187, 3188, 5, 110, 0, 0, 3188, 3189, 5, 100, 0, 0, 3189, 3190, 5, 46, 0, 0, 3190, 3191, 5, 114, 0, 0, 3191, 4033, 5, 52, 0, 0, 3192, 3193, 5, 115, 0, 0, 3193, 3194, 5, 116, 0, 0, 3194, 3195, 5, 105, 0, 0, 3195, 3196, 5, 110, 0, 0, 3196, 3197, 5, 100, 0, 0, 3197, 3198, 5, 46, 0, 0, 3198, 3199, 5, 114, 0, 0, 3199, 4033, 5, 56, 0, 0, 3200, 3201, 5, 97, 0, 0, 3201, 3202, 5, 100, 0, 0, 3202, 4033, 5, 100, 0, 0, 3203, 3204, 5, 115, 0, 0, 3204, 3205, 5, 117, 0, 0, 3205, 4033, 5, 98, 0, 0, 3206, 3207, 5, 109, 0, 0, 3207, 3208, 5, 117, 0, 0, 3208, 4033, 5, 108, 0, 0, 3209, 3210, 5, 100, 0, 0, 3210, 3211, 5, 105, 0, 0, 3211, 4033, 5, 118, 0, 0, 3212, 3213, 5, 100, 0, 0, 3213, 3214, 5, 105, 0, 0, 3214, 3215, 5, 118, 0, 0, 3215, 3216, 5, 46, 0, 0, 3216, 3217, 5, 117, 0, 0, 3217, 4033, 5, 110, 0, 0, 3218, 3219, 5, 114, 0, 0, 3219, 3220, 5, 101, 0, 0, 3220, 4033, 5, 109, 0, 0, 3221, 3222, 5, 114, 0, 0, 3222, 3223, 5, 101, 0, 0, 3223, 3224, 5, 109, 0, 0, 3224, 3225, 5, 46, 0, 0, 3225, 3226, 5, 117, 0, 0, 3226, 4033, 5, 110, 0, 0, 3227, 3228, 5, 97, 0, 0, 3228, 3229, 5, 110, 0, 0, 3229, 4033, 5, 100, 0, 0, 3230, 3231, 5, 111, 0, 0, 3231, 4033, 5, 114, 0, 0, 3232, 3233, 5, 120, 0, 0, 3233, 3234, 5, 111, 0, 0, 3234, 4033, 5, 114, 0, 0, 3235, 3236, 5, 115, 0, 0, 3236, 3237, 5, 104, 0, 0, 3237, 4033, 5, 108, 0, 0, 3238, 3239, 5, 115, 0, 0, 3239, 3240, 5, 104, 0, 0, 3240, 4033, 5, 114, 0, 0, 3241, 3242, 5, 115, 0, 0, 3242, 3243, 5, 104, 0, 0, 3243, 3244, 5, 114, 0, 0, 3244, 3245, 5, 46, 0, 0, 3245, 3246, 5, 117, 0, 0, 3246, 4033, 5, 110, 0, 0, 3247, 3248, 5, 110, 0, 0, 3248, 3249, 5, 101, 0, 0, 3249, 4033, 5, 103, 0, 0, 3250, 3251, 5, 110, 0, 0, 3251, 3252, 5, 111, 0, 0, 3252, 4033, 5, 116, 0, 0, 3253, 3254, 5, 99, 0, 0, 3254, 3255, 5, 111, 0, 0, 3255, 3256, 5, 110, 0, 0, 3256, 3257, 5, 118, 0, 0, 3257, 3258, 5, 46, 0, 0, 3258, 3259, 5, 105, 0, 0, 3259, 4033, 5, 49, 0, 0, 3260, 3261, 5, 99, 0, 0, 3261, 3262, 5, 111, 0, 0, 3262, 3263, 5, 110, 0, 0, 3263, 3264, 5, 118, 0, 0, 3264, 3265, 5, 46, 0, 0, 3265, 3266, 5, 105, 0, 0, 3266, 4033, 5, 50, 0, 0, 3267, 3268, 5, 99, 0, 0, 3268, 3269, 5, 111, 0, 0, 3269, 3270, 5, 110, 0, 0, 3270, 3271, 5, 118, 0, 0, 3271, 3272, 5, 46, 0, 0, 3272, 3273, 5, 105, 0, 0, 3273, 4033, 5, 52, 0, 0, 3274, 3275, 5, 99, 0, 0, 3275, 3276, 5, 111, 0, 0, 3276, 3277, 5, 110, 0, 0, 3277, 3278, 5, 118, 0, 0, 3278, 3279, 5, 46, 0, 0, 3279, 3280, 5, 105, 0, 0, 3280, 4033, 5, 56, 0, 0, 3281, 3282, 5, 99, 0, 0, 3282, 3283, 5, 111, 0, 0, 3283, 3284, 5, 110, 0, 0, 3284, 3285, 5, 118, 0, 0, 3285, 3286, 5, 46, 0, 0, 3286, 3287, 5, 114, 0, 0, 3287, 4033, 5, 52, 0, 0, 3288, 3289, 5, 99, 0, 0, 3289, 3290, 5, 111, 0, 0, 3290, 3291, 5, 110, 0, 0, 3291, 3292, 5, 118, 0, 0, 3292, 3293, 5, 46, 0, 0, 3293, 3294, 5, 114, 0, 0, 3294, 4033, 5, 56, 0, 0, 3295, 3296, 5, 99, 0, 0, 3296, 3297, 5, 111, 0, 0, 3297, 3298, 5, 110, 0, 0, 3298, 3299, 5, 118, 0, 0, 3299, 3300, 5, 46, 0, 0, 3300, 3301, 5, 117, 0, 0, 3301, 4033, 5, 52, 0, 0, 3302, 3303, 5, 99, 0, 0, 3303, 3304, 5, 111, 0, 0, 3304, 3305, 5, 110, 0, 0, 3305, 3306, 5, 118, 0, 0, 3306, 3307, 5, 46, 0, 0, 3307, 3308, 5, 117, 0, 0, 3308, 4033, 5, 56, 0, 0, 3309, 3310, 5, 99, 0, 0, 3310, 3311, 5, 111, 0, 0, 3311, 3312, 5, 110, 0, 0, 3312, 3313, 5, 118, 0, 0, 3313, 3314, 5, 46, 0, 0, 3314, 3315, 5, 114, 0, 0, 3315, 3316, 5, 46, 0, 0, 3316, 3317, 5, 117, 0, 0, 3317, 4033, 5, 110, 0, 0, 3318, 3319, 5, 116, 0, 0, 3319, 3320, 5, 104, 0, 0, 3320, 3321, 5, 114, 0, 0, 3321, 3322, 5, 111, 0, 0, 3322, 4033, 5, 119, 0, 0, 3323, 3324, 5, 99, 0, 0, 3324, 3325, 5, 111, 0, 0, 3325, 3326, 5, 110, 0, 0, 3326, 3327, 5, 118, 0, 0, 3327, 3328, 5, 46, 0, 0, 3328, 3329, 5, 111, 0, 0, 3329, 3330, 5, 118, 0, 0, 3330, 3331, 5, 102, 0, 0, 3331, 3332, 5, 46, 0, 0, 3332, 3333, 5, 105, 0, 0, 3333, 3334, 5, 49, 0, 0, 3334, 3335, 5, 46, 0, 0, 3335, 3336, 5, 117, 0, 0, 3336, 4033, 5, 110, 0, 0, 3337, 3338, 5, 99, 0, 0, 3338, 3339, 5, 111, 0, 0, 3339, 3340, 5, 110, 0, 0, 3340, 3341, 5, 118, 0, 0, 3341, 3342, 5, 46, 0, 0, 3342, 3343, 5, 111, 0, 0, 3343, 3344, 5, 118, 0, 0, 3344, 3345, 5, 102, 0, 0, 3345, 3346, 5, 46, 0, 0, 3346, 3347, 5, 105, 0, 0, 3347, 3348, 5, 50, 0, 0, 3348, 3349, 5, 46, 0, 0, 3349, 3350, 5, 117, 0, 0, 3350, 4033, 5, 110, 0, 0, 3351, 3352, 5, 99, 0, 0, 3352, 3353, 5, 111, 0, 0, 3353, 3354, 5, 110, 0, 0, 3354, 3355, 5, 118, 0, 0, 3355, 3356, 5, 46, 0, 0, 3356, 3357, 5, 111, 0, 0, 3357, 3358, 5, 118, 0, 0, 3358, 3359, 5, 102, 0, 0, 3359, 3360, 5, 46, 0, 0, 3360, 3361, 5, 105, 0, 0, 3361, 3362, 5, 52, 0, 0, 3362, 3363, 5, 46, 0, 0, 3363, 3364, 5, 117, 0, 0, 3364, 4033, 5, 110, 0, 0, 3365, 3366, 5, 99, 0, 0, 3366, 3367, 5, 111, 0, 0, 3367, 3368, 5, 110, 0, 0, 3368, 3369, 5, 118, 0, 0, 3369, 3370, 5, 46, 0, 0, 3370, 3371, 5, 111, 0, 0, 3371, 3372, 5, 118, 0, 0, 3372, 3373, 5, 102, 0, 0, 3373, 3374, 5, 46, 0, 0, 3374, 3375, 5, 105, 0, 0, 3375, 3376, 5, 56, 0, 0, 3376, 3377, 5, 46, 0, 0, 3377, 3378, 5, 117, 0, 0, 3378, 4033, 5, 110, 0, 0, 3379, 3380, 5, 99, 0, 0, 3380, 3381, 5, 111, 0, 0, 3381, 3382, 5, 110, 0, 0, 3382, 3383, 5, 118, 0, 0, 3383, 3384, 5, 46, 0, 0, 3384, 3385, 5, 111, 0, 0, 3385, 3386, 5, 118, 0, 0, 3386, 3387, 5, 102, 0, 0, 3387, 3388, 5, 46, 0, 0, 3388, 3389, 5, 117, 0, 0, 3389, 3390, 5, 49, 0, 0, 3390, 3391, 5, 46, 0, 0, 3391, 3392, 5, 117, 0, 0, 3392, 4033, 5, 110, 0, 0, 3393, 3394, 5, 99, 0, 0, 3394, 3395, 5, 111, 0, 0, 3395, 3396, 5, 110, 0, 0, 3396, 3397, 5, 118, 0, 0, 3397, 3398, 5, 46, 0, 0, 3398, 3399, 5, 111, 0, 0, 3399, 3400, 5, 118, 0, 0, 3400, 3401, 5, 102, 0, 0, 3401, 3402, 5, 46, 0, 0, 3402, 3403, 5, 117, 0, 0, 3403, 3404, 5, 50, 0, 0, 3404, 3405, 5, 46, 0, 0, 3405, 3406, 5, 117, 0, 0, 3406, 4033, 5, 110, 0, 0, 3407, 3408, 5, 99, 0, 0, 3408, 3409, 5, 111, 0, 0, 3409, 3410, 5, 110, 0, 0, 3410, 3411, 5, 118, 0, 0, 3411, 3412, 5, 46, 0, 0, 3412, 3413, 5, 111, 0, 0, 3413, 3414, 5, 118, 0, 0, 3414, 3415, 5, 102, 0, 0, 3415, 3416, 5, 46, 0, 0, 3416, 3417, 5, 117, 0, 0, 3417, 3418, 5, 52, 0, 0, 3418, 3419, 5, 46, 0, 0, 3419, 3420, 5, 117, 0, 0, 3420, 4033, 5, 110, 0, 0, 3421, 3422, 5, 99, 0, 0, 3422, 3423, 5, 111, 0, 0, 3423, 3424, 5, 110, 0, 0, 3424, 3425, 5, 118, 0, 0, 3425, 3426, 5, 46, 0, 0, 3426, 3427, 5, 111, 0, 0, 3427, 3428, 5, 118, 0, 0, 3428, 3429, 5, 102, 0, 0, 3429, 3430, 5, 46, 0, 0, 3430, 3431, 5, 117, 0, 0, 3431, 3432, 5, 56, 0, 0, 3432, 3433, 5, 46, 0, 0, 3433, 3434, 5, 117, 0, 0, 3434, 4033, 5, 110, 0, 0, 3435, 3436, 5, 99, 0, 0, 3436, 3437, 5, 111, 0, 0, 3437, 3438, 5, 110, 0, 0, 3438, 3439, 5, 118, 0, 0, 3439, 3440, 5, 46, 0, 0, 3440, 3441, 5, 111, 0, 0, 3441, 3442, 5, 118, 0, 0, 3442, 3443, 5, 102, 0, 0, 3443, 3444, 5, 46, 0, 0, 3444, 3445, 5, 105, 0, 0, 3445, 3446, 5, 46, 0, 0, 3446, 3447, 5, 117, 0, 0, 3447, 4033, 5, 110, 0, 0, 3448, 3449, 5, 99, 0, 0, 3449, 3450, 5, 111, 0, 0, 3450, 3451, 5, 110, 0, 0, 3451, 3452, 5, 118, 0, 0, 3452, 3453, 5, 46, 0, 0, 3453, 3454, 5, 111, 0, 0, 3454, 3455, 5, 118, 0, 0, 3455, 3456, 5, 102, 0, 0, 3456, 3457, 5, 46, 0, 0, 3457, 3458, 5, 117, 0, 0, 3458, 3459, 5, 46, 0, 0, 3459, 3460, 5, 117, 0, 0, 3460, 4033, 5, 110, 0, 0, 3461, 3462, 5, 108, 0, 0, 3462, 3463, 5, 100, 0, 0, 3463, 3464, 5, 108, 0, 0, 3464, 3465, 5, 101, 0, 0, 3465, 4033, 5, 110, 0, 0, 3466, 3467, 5, 108, 0, 0, 3467, 3468, 5, 100, 0, 0, 3468, 3469, 5, 101, 0, 0, 3469, 3470, 5, 108, 0, 0, 3470, 3471, 5, 101, 0, 0, 3471, 3472, 5, 109, 0, 0, 3472, 3473, 5, 46, 0, 0, 3473, 3474, 5, 105, 0, 0, 3474, 4033, 5, 49, 0, 0, 3475, 3476, 5, 108, 0, 0, 3476, 3477, 5, 100, 0, 0, 3477, 3478, 5, 101, 0, 0, 3478, 3479, 5, 108, 0, 0, 3479, 3480, 5, 101, 0, 0, 3480, 3481, 5, 109, 0, 0, 3481, 3482, 5, 46, 0, 0, 3482, 3483, 5, 117, 0, 0, 3483, 4033, 5, 49, 0, 0, 3484, 3485, 5, 108, 0, 0, 3485, 3486, 5, 100, 0, 0, 3486, 3487, 5, 101, 0, 0, 3487, 3488, 5, 108, 0, 0, 3488, 3489, 5, 101, 0, 0, 3489, 3490, 5, 109, 0, 0, 3490, 3491, 5, 46, 0, 0, 3491, 3492, 5, 105, 0, 0, 3492, 4033, 5, 50, 0, 0, 3493, 3494, 5, 108, 0, 0, 3494, 3495, 5, 100, 0, 0, 3495, 3496, 5, 101, 0, 0, 3496, 3497, 5, 108, 0, 0, 3497, 3498, 5, 101, 0, 0, 3498, 3499, 5, 109, 0, 0, 3499, 3500, 5, 46, 0, 0, 3500, 3501, 5, 117, 0, 0, 3501, 4033, 5, 50, 0, 0, 3502, 3503, 5, 108, 0, 0, 3503, 3504, 5, 100, 0, 0, 3504, 3505, 5, 101, 0, 0, 3505, 3506, 5, 108, 0, 0, 3506, 3507, 5, 101, 0, 0, 3507, 3508, 5, 109, 0, 0, 3508, 3509, 5, 46, 0, 0, 3509, 3510, 5, 105, 0, 0, 3510, 4033, 5, 52, 0, 0, 3511, 3512, 5, 108, 0, 0, 3512, 3513, 5, 100, 0, 0, 3513, 3514, 5, 101, 0, 0, 3514, 3515, 5, 108, 0, 0, 3515, 3516, 5, 101, 0, 0, 3516, 3517, 5, 109, 0, 0, 3517, 3518, 5, 46, 0, 0, 3518, 3519, 5, 117, 0, 0, 3519, 4033, 5, 52, 0, 0, 3520, 3521, 5, 108, 0, 0, 3521, 3522, 5, 100, 0, 0, 3522, 3523, 5, 101, 0, 0, 3523, 3524, 5, 108, 0, 0, 3524, 3525, 5, 101, 0, 0, 3525, 3526, 5, 109, 0, 0, 3526, 3527, 5, 46, 0, 0, 3527, 3528, 5, 105, 0, 0, 3528, 4033, 5, 56, 0, 0, 3529, 3530, 5, 108, 0, 0, 3530, 3531, 5, 100, 0, 0, 3531, 3532, 5, 101, 0, 0, 3532, 3533, 5, 108, 0, 0, 3533, 3534, 5, 101, 0, 0, 3534, 3535, 5, 109, 0, 0, 3535, 3536, 5, 46, 0, 0, 3536, 3537, 5, 117, 0, 0, 3537, 4033, 5, 56, 0, 0, 3538, 3539, 5, 108, 0, 0, 3539, 3540, 5, 100, 0, 0, 3540, 3541, 5, 101, 0, 0, 3541, 3542, 5, 108, 0, 0, 3542, 3543, 5, 101, 0, 0, 3543, 3544, 5, 109, 0, 0, 3544, 3545, 5, 46, 0, 0, 3545, 4033, 5, 105, 0, 0, 3546, 3547, 5, 108, 0, 0, 3547, 3548, 5, 100, 0, 0, 3548, 3549, 5, 101, 0, 0, 3549, 3550, 5, 108, 0, 0, 3550, 3551, 5, 101, 0, 0, 3551, 3552, 5, 109, 0, 0, 3552, 3553, 5, 46, 0, 0, 3553, 3554, 5, 114, 0, 0, 3554, 4033, 5, 52, 0, 0, 3555, 3556, 5, 108, 0, 0, 3556, 3557, 5, 100, 0, 0, 3557, 3558, 5, 101, 0, 0, 3558, 3559, 5, 108, 0, 0, 3559, 3560, 5, 101, 0, 0, 3560, 3561, 5, 109, 0, 0, 3561, 3562, 5, 46, 0, 0, 3562, 3563, 5, 114, 0, 0, 3563, 4033, 5, 56, 0, 0, 3564, 3565, 5, 108, 0, 0, 3565, 3566, 5, 100, 0, 0, 3566, 3567, 5, 101, 0, 0, 3567, 3568, 5, 108, 0, 0, 3568, 3569, 5, 101, 0, 0, 3569, 3570, 5, 109, 0, 0, 3570, 3571, 5, 46, 0, 0, 3571, 3572, 5, 114, 0, 0, 3572, 3573, 5, 101, 0, 0, 3573, 4033, 5, 102, 0, 0, 3574, 3575, 5, 115, 0, 0, 3575, 3576, 5, 116, 0, 0, 3576, 3577, 5, 101, 0, 0, 3577, 3578, 5, 108, 0, 0, 3578, 3579, 5, 101, 0, 0, 3579, 3580, 5, 109, 0, 0, 3580, 3581, 5, 46, 0, 0, 3581, 4033, 5, 105, 0, 0, 3582, 3583, 5, 115, 0, 0, 3583, 3584, 5, 116, 0, 0, 3584, 3585, 5, 101, 0, 0, 3585, 3586, 5, 108, 0, 0, 3586, 3587, 5, 101, 0, 0, 3587, 3588, 5, 109, 0, 0, 3588, 3589, 5, 46, 0, 0, 3589, 3590, 5, 105, 0, 0, 3590, 4033, 5, 49, 0, 0, 3591, 3592, 5, 115, 0, 0, 3592, 3593, 5, 116, 0, 0, 3593, 3594, 5, 101, 0, 0, 3594, 3595, 5, 108, 0, 0, 3595, 3596, 5, 101, 0, 0, 3596, 3597, 5, 109, 0, 0, 3597, 3598, 5, 46, 0, 0, 3598, 3599, 5, 105, 0, 0, 3599, 4033, 5, 50, 0, 0, 3600, 3601, 5, 115, 0, 0, 3601, 3602, 5, 116, 0, 0, 3602, 3603, 5, 101, 0, 0, 3603, 3604, 5, 108, 0, 0, 3604, 3605, 5, 101, 0, 0, 3605, 3606, 5, 109, 0, 0, 3606, 3607, 5, 46, 0, 0, 3607, 3608, 5, 105, 0, 0, 3608, 4033, 5, 52, 0, 0, 3609, 3610, 5, 115, 0, 0, 3610, 3611, 5, 116, 0, 0, 3611, 3612, 5, 101, 0, 0, 3612, 3613, 5, 108, 0, 0, 3613, 3614, 5, 101, 0, 0, 3614, 3615, 5, 109, 0, 0, 3615, 3616, 5, 46, 0, 0, 3616, 3617, 5, 105, 0, 0, 3617, 4033, 5, 56, 0, 0, 3618, 3619, 5, 115, 0, 0, 3619, 3620, 5, 116, 0, 0, 3620, 3621, 5, 101, 0, 0, 3621, 3622, 5, 108, 0, 0, 3622, 3623, 5, 101, 0, 0, 3623, 3624, 5, 109, 0, 0, 3624, 3625, 5, 46, 0, 0, 3625, 3626, 5, 114, 0, 0, 3626, 4033, 5, 52, 0, 0, 3627, 3628, 5, 115, 0, 0, 3628, 3629, 5, 116, 0, 0, 3629, 3630, 5, 101, 0, 0, 3630, 3631, 5, 108, 0, 0, 3631, 3632, 5, 101, 0, 0, 3632, 3633, 5, 109, 0, 0, 3633, 3634, 5, 46, 0, 0, 3634, 3635, 5, 114, 0, 0, 3635, 4033, 5, 56, 0, 0, 3636, 3637, 5, 115, 0, 0, 3637, 3638, 5, 116, 0, 0, 3638, 3639, 5, 101, 0, 0, 3639, 3640, 5, 108, 0, 0, 3640, 3641, 5, 101, 0, 0, 3641, 3642, 5, 109, 0, 0, 3642, 3643, 5, 46, 0, 0, 3643, 3644, 5, 114, 0, 0, 3644, 3645, 5, 101, 0, 0, 3645, 4033, 5, 102, 0, 0, 3646, 3647, 5, 99, 0, 0, 3647, 3648, 5, 111, 0, 0, 3648, 3649, 5, 110, 0, 0, 3649, 3650, 5, 118, 0, 0, 3650, 3651, 5, 46, 0, 0, 3651, 3652, 5, 111, 0, 0, 3652, 3653, 5, 118, 0, 0, 3653, 3654, 5, 102, 0, 0, 3654, 3655, 5, 46, 0, 0, 3655, 3656, 5, 105, 0, 0, 3656, 4033, 5, 49, 0, 0, 3657, 3658, 5, 99, 0, 0, 3658, 3659, 5, 111, 0, 0, 3659, 3660, 5, 110, 0, 0, 3660, 3661, 5, 118, 0, 0, 3661, 3662, 5, 46, 0, 0, 3662, 3663, 5, 111, 0, 0, 3663, 3664, 5, 118, 0, 0, 3664, 3665, 5, 102, 0, 0, 3665, 3666, 5, 46, 0, 0, 3666, 3667, 5, 117, 0, 0, 3667, 4033, 5, 49, 0, 0, 3668, 3669, 5, 99, 0, 0, 3669, 3670, 5, 111, 0, 0, 3670, 3671, 5, 110, 0, 0, 3671, 3672, 5, 118, 0, 0, 3672, 3673, 5, 46, 0, 0, 3673, 3674, 5, 111, 0, 0, 3674, 3675, 5, 118, 0, 0, 3675, 3676, 5, 102, 0, 0, 3676, 3677, 5, 46, 0, 0, 3677, 3678, 5, 105, 0, 0, 3678, 4033, 5, 50, 0, 0, 3679, 3680, 5, 99, 0, 0, 3680, 3681, 5, 111, 0, 0, 3681, 3682, 5, 110, 0, 0, 3682, 3683, 5, 118, 0, 0, 3683, 3684, 5, 46, 0, 0, 3684, 3685, 5, 111, 0, 0, 3685, 3686, 5, 118, 0, 0, 3686, 3687, 5, 102, 0, 0, 3687, 3688, 5, 46, 0, 0, 3688, 3689, 5, 117, 0, 0, 3689, 4033, 5, 50, 0, 0, 3690, 3691, 5, 99, 0, 0, 3691, 3692, 5, 111, 0, 0, 3692, 3693, 5, 110, 0, 0, 3693, 3694, 5, 118, 0, 0, 3694, 3695, 5, 46, 0, 0, 3695, 3696, 5, 111, 0, 0, 3696, 3697, 5, 118, 0, 0, 3697, 3698, 5, 102, 0, 0, 3698, 3699, 5, 46, 0, 0, 3699, 3700, 5, 105, 0, 0, 3700, 4033, 5, 52, 0, 0, 3701, 3702, 5, 99, 0, 0, 3702, 3703, 5, 111, 0, 0, 3703, 3704, 5, 110, 0, 0, 3704, 3705, 5, 118, 0, 0, 3705, 3706, 5, 46, 0, 0, 3706, 3707, 5, 111, 0, 0, 3707, 3708, 5, 118, 0, 0, 3708, 3709, 5, 102, 0, 0, 3709, 3710, 5, 46, 0, 0, 3710, 3711, 5, 117, 0, 0, 3711, 4033, 5, 52, 0, 0, 3712, 3713, 5, 99, 0, 0, 3713, 3714, 5, 111, 0, 0, 3714, 3715, 5, 110, 0, 0, 3715, 3716, 5, 118, 0, 0, 3716, 3717, 5, 46, 0, 0, 3717, 3718, 5, 111, 0, 0, 3718, 3719, 5, 118, 0, 0, 3719, 3720, 5, 102, 0, 0, 3720, 3721, 5, 46, 0, 0, 3721, 3722, 5, 105, 0, 0, 3722, 4033, 5, 56, 0, 0, 3723, 3724, 5, 99, 0, 0, 3724, 3725, 5, 111, 0, 0, 3725, 3726, 5, 110, 0, 0, 3726, 3727, 5, 118, 0, 0, 3727, 3728, 5, 46, 0, 0, 3728, 3729, 5, 111, 0, 0, 3729, 3730, 5, 118, 0, 0, 3730, 3731, 5, 102, 0, 0, 3731, 3732, 5, 46, 0, 0, 3732, 3733, 5, 117, 0, 0, 3733, 4033, 5, 56, 0, 0, 3734, 3735, 5, 99, 0, 0, 3735, 3736, 5, 107, 0, 0, 3736, 3737, 5, 102, 0, 0, 3737, 3738, 5, 105, 0, 0, 3738, 3739, 5, 110, 0, 0, 3739, 3740, 5, 105, 0, 0, 3740, 3741, 5, 116, 0, 0, 3741, 4033, 5, 101, 0, 0, 3742, 3743, 5, 99, 0, 0, 3743, 3744, 5, 111, 0, 0, 3744, 3745, 5, 110, 0, 0, 3745, 3746, 5, 118, 0, 0, 3746, 3747, 5, 46, 0, 0, 3747, 3748, 5, 117, 0, 0, 3748, 4033, 5, 50, 0, 0, 3749, 3750, 5, 99, 0, 0, 3750, 3751, 5, 111, 0, 0, 3751, 3752, 5, 110, 0, 0, 3752, 3753, 5, 118, 0, 0, 3753, 3754, 5, 46, 0, 0, 3754, 3755, 5, 117, 0, 0, 3755, 4033, 5, 49, 0, 0, 3756, 3757, 5, 99, 0, 0, 3757, 3758, 5, 111, 0, 0, 3758, 3759, 5, 110, 0, 0, 3759, 3760, 5, 118, 0, 0, 3760, 3761, 5, 46, 0, 0, 3761, 4033, 5, 105, 0, 0, 3762, 3763, 5, 99, 0, 0, 3763, 3764, 5, 111, 0, 0, 3764, 3765, 5, 110, 0, 0, 3765, 3766, 5, 118, 0, 0, 3766, 3767, 5, 46, 0, 0, 3767, 3768, 5, 111, 0, 0, 3768, 3769, 5, 118, 0, 0, 3769, 3770, 5, 102, 0, 0, 3770, 3771, 5, 46, 0, 0, 3771, 4033, 5, 105, 0, 0, 3772, 3773, 5, 99, 0, 0, 3773, 3774, 5, 111, 0, 0, 3774, 3775, 5, 110, 0, 0, 3775, 3776, 5, 118, 0, 0, 3776, 3777, 5, 46, 0, 0, 3777, 3778, 5, 111, 0, 0, 3778, 3779, 5, 118, 0, 0, 3779, 3780, 5, 102, 0, 0, 3780, 3781, 5, 46, 0, 0, 3781, 4033, 5, 117, 0, 0, 3782, 3783, 5, 97, 0, 0, 3783, 3784, 5, 100, 0, 0, 3784, 3785, 5, 100, 0, 0, 3785, 3786, 5, 46, 0, 0, 3786, 3787, 5, 111, 0, 0, 3787, 3788, 5, 118, 0, 0, 3788, 4033, 5, 102, 0, 0, 3789, 3790, 5, 97, 0, 0, 3790, 3791, 5, 100, 0, 0, 3791, 3792, 5, 100, 0, 0, 3792, 3793, 5, 46, 0, 0, 3793, 3794, 5, 111, 0, 0, 3794, 3795, 5, 118, 0, 0, 3795, 3796, 5, 102, 0, 0, 3796, 3797, 5, 46, 0, 0, 3797, 3798, 5, 117, 0, 0, 3798, 4033, 5, 110, 0, 0, 3799, 3800, 5, 109, 0, 0, 3800, 3801, 5, 117, 0, 0, 3801, 3802, 5, 108, 0, 0, 3802, 3803, 5, 46, 0, 0, 3803, 3804, 5, 111, 0, 0, 3804, 3805, 5, 118, 0, 0, 3805, 4033, 5, 102, 0, 0, 3806, 3807, 5, 109, 0, 0, 3807, 3808, 5, 117, 0, 0, 3808, 3809, 5, 108, 0, 0, 3809, 3810, 5, 46, 0, 0, 3810, 3811, 5, 111, 0, 0, 3811, 3812, 5, 118, 0, 0, 3812, 3813, 5, 102, 0, 0, 3813, 3814, 5, 46, 0, 0, 3814, 3815, 5, 117, 0, 0, 3815, 4033, 5, 110, 0, 0, 3816, 3817, 5, 115, 0, 0, 3817, 3818, 5, 117, 0, 0, 3818, 3819, 5, 98, 0, 0, 3819, 3820, 5, 46, 0, 0, 3820, 3821, 5, 111, 0, 0, 3821, 3822, 5, 118, 0, 0, 3822, 4033, 5, 102, 0, 0, 3823, 3824, 5, 115, 0, 0, 3824, 3825, 5, 117, 0, 0, 3825, 3826, 5, 98, 0, 0, 3826, 3827, 5, 46, 0, 0, 3827, 3828, 5, 111, 0, 0, 3828, 3829, 5, 118, 0, 0, 3829, 3830, 5, 102, 0, 0, 3830, 3831, 5, 46, 0, 0, 3831, 3832, 5, 117, 0, 0, 3832, 4033, 5, 110, 0, 0, 3833, 3834, 5, 101, 0, 0, 3834, 3835, 5, 110, 0, 0, 3835, 3836, 5, 100, 0, 0, 3836, 3837, 5, 102, 0, 0, 3837, 3838, 5, 105, 0, 0, 3838, 3839, 5, 110, 0, 0, 3839, 3840, 5, 97, 0, 0, 3840, 3841, 5, 108, 0, 0, 3841, 3842, 5, 108, 0, 0, 3842, 4033, 5, 121, 0, 0, 3843, 3844, 5, 101, 0, 0, 3844, 3845, 5, 110, 0, 0, 3845, 3846, 5, 100, 0, 0, 3846, 3847, 5, 102, 0, 0, 3847, 3848, 5, 97, 0, 0, 3848, 3849, 5, 117, 0, 0, 3849, 3850, 5, 108, 0, 0, 3850, 4033, 5, 116, 0, 0, 3851, 3852, 5, 115, 0, 0, 3852, 3853, 5, 116, 0, 0, 3853, 3854, 5, 105, 0, 0, 3854, 3855, 5, 110, 0, 0, 3855, 3856, 5, 100, 0, 0, 3856, 3857, 5, 46, 0, 0, 3857, 4033, 5, 105, 0, 0, 3858, 3859, 5, 99, 0, 0, 3859, 3860, 5, 111, 0, 0, 3860, 3861, 5, 110, 0, 0, 3861, 3862, 5, 118, 0, 0, 3862, 3863, 5, 46, 0, 0, 3863, 4033, 5, 117, 0, 0, 3864, 3865, 5, 112, 0, 0, 3865, 3866, 5, 114, 0, 0, 3866, 3867, 5, 101, 0, 0, 3867, 3868, 5, 102, 0, 0, 3868, 3869, 5, 105, 0, 0, 3869, 3870, 5, 120, 0, 0, 3870, 4033, 5, 55, 0, 0, 3871, 3872, 5, 112, 0, 0, 3872, 3873, 5, 114, 0, 0, 3873, 3874, 5, 101, 0, 0, 3874, 3875, 5, 102, 0, 0, 3875, 3876, 5, 105, 0, 0, 3876, 3877, 5, 120, 0, 0, 3877, 4033, 5, 54, 0, 0, 3878, 3879, 5, 112, 0, 0, 3879, 3880, 5, 114, 0, 0, 3880, 3881, 5, 101, 0, 0, 3881, 3882, 5, 102, 0, 0, 3882, 3883, 5, 105, 0, 0, 3883, 3884, 5, 120, 0, 0, 3884, 4033, 5, 53, 0, 0, 3885, 3886, 5, 112, 0, 0, 3886, 3887, 5, 114, 0, 0, 3887, 3888, 5, 101, 0, 0, 3888, 3889, 5, 102, 0, 0, 3889, 3890, 5, 105, 0, 0, 3890, 3891, 5, 120, 0, 0, 3891, 4033, 5, 52, 0, 0, 3892, 3893, 5, 112, 0, 0, 3893, 3894, 5, 114, 0, 0, 3894, 3895, 5, 101, 0, 0, 3895, 3896, 5, 102, 0, 0, 3896, 3897, 5, 105, 0, 0, 3897, 3898, 5, 120, 0, 0, 3898, 4033, 5, 51, 0, 0, 3899, 3900, 5, 112, 0, 0, 3900, 3901, 5, 114, 0, 0, 3901, 3902, 5, 101, 0, 0, 3902, 3903, 5, 102, 0, 0, 3903, 3904, 5, 105, 0, 0, 3904, 3905, 5, 120, 0, 0, 3905, 4033, 5, 50, 0, 0, 3906, 3907, 5, 112, 0, 0, 3907, 3908, 5, 114, 0, 0, 3908, 3909, 5, 101, 0, 0, 3909, 3910, 5, 102, 0, 0, 3910, 3911, 5, 105, 0, 0, 3911, 3912, 5, 120, 0, 0, 3912, 4033, 5, 49, 0, 0, 3913, 3914, 5, 112, 0, 0, 3914, 3915, 5, 114, 0, 0, 3915, 3916, 5, 101, 0, 0, 3916, 3917, 5, 102, 0, 0, 3917, 3918, 5, 105, 0, 0, 3918, 3919, 5, 120, 0, 0, 3919, 3920, 5, 114, 0, 0, 3920, 3921, 5, 101, 0, 0, 3921, 4033, 5, 102, 0, 0, 3922, 3923, 5, 97, 0, 0, 3923, 3924, 5, 114, 0, 0, 3924, 3925, 5, 103, 0, 0, 3925, 3926, 5, 108, 0, 0, 3926, 3927, 5, 105, 0, 0, 3927, 3928, 5, 115, 0, 0, 3928, 4033, 5, 116, 0, 0, 3929, 3930, 5, 99, 0, 0, 3930, 3931, 5, 101, 0, 0, 3931, 4033, 5, 113, 0, 0, 3932, 3933, 5, 99, 0, 0, 3933, 3934, 5, 103, 0, 0, 3934, 4033, 5, 116, 0, 0, 3935, 3936, 5, 99, 0, 0, 3936, 3937, 5, 103, 0, 0, 3937, 3938, 5, 116, 0, 0, 3938, 3939, 5, 46, 0, 0, 3939, 3940, 5, 117, 0, 0, 3940, 4033, 5, 110, 0, 0, 3941, 3942, 5, 99, 0, 0, 3942, 3943, 5, 108, 0, 0, 3943, 4033, 5, 116, 0, 0, 3944, 3945, 5, 99, 0, 0, 3945, 3946, 5, 108, 0, 0, 3946, 3947, 5, 116, 0, 0, 3947, 3948, 5, 46, 0, 0, 3948, 3949, 5, 117, 0, 0, 3949, 4033, 5, 110, 0, 0, 3950, 3951, 5, 108, 0, 0, 3951, 3952, 5, 111, 0, 0, 3952, 3953, 5, 99, 0, 0, 3953, 3954, 5, 97, 0, 0, 3954, 3955, 5, 108, 0, 0, 3955, 3956, 5, 108, 0, 0, 3956, 3957, 5, 111, 0, 0, 3957, 4033, 5, 99, 0, 0, 3958, 3959, 5, 101, 0, 0, 3959, 3960, 5, 110, 0, 0, 3960, 3961, 5, 100, 0, 0, 3961, 3962, 5, 102, 0, 0, 3962, 3963, 5, 105, 0, 0, 3963, 3964, 5, 108, 0, 0, 3964, 3965, 5, 116, 0, 0, 3965, 3966, 5, 101, 0, 0, 3966, 4033, 5, 114, 0, 0, 3967, 3968, 5, 118, 0, 0, 3968, 3969, 5, 111, 0, 0, 3969, 3970, 5, 108, 0, 0, 3970, 3971, 5, 97, 0, 0, 3971, 3972, 5, 116, 0, 0, 3972, 3973, 5, 105, 0, 0, 3973, 3974, 5, 108, 0, 0, 3974, 3975, 5, 101, 0, 0, 3975, 4033, 5, 46, 0, 0, 3976, 3977, 5, 116, 0, 0, 3977, 3978, 5, 97, 0, 0, 3978, 3979, 5, 105, 0, 0, 3979, 3980, 5, 108, 0, 0, 3980, 4033, 5, 46, 0, 0, 3981, 3982, 5, 99, 0, 0, 3982, 3983, 5, 112, 0, 0, 3983, 3984, 5, 98, 0, 0, 3984, 3985, 5, 108, 0, 0, 3985, 4033, 5, 107, 0, 0, 3986, 3987, 5, 105, 0, 0, 3987, 3988, 5, 110, 0, 0, 3988, 3989, 5, 105, 0, 0, 3989, 3990, 5, 116, 0, 0, 3990, 3991, 5, 98, 0, 0, 3991, 3992, 5, 108, 0, 0, 3992, 4033, 5, 107, 0, 0, 3993, 3994, 5, 114, 0, 0, 3994, 3995, 5, 101, 0, 0, 3995, 3996, 5, 116, 0, 0, 3996, 3997, 5, 104, 0, 0, 3997, 3998, 5, 114, 0, 0, 3998, 3999, 5, 111, 0, 0, 3999, 4033, 5, 119, 0, 0, 4000, 4001, 5, 114, 0, 0, 4001, 4002, 5, 101, 0, 0, 4002, 4003, 5, 102, 0, 0, 4003, 4004, 5, 97, 0, 0, 4004, 4005, 5, 110, 0, 0, 4005, 4006, 5, 121, 0, 0, 4006, 4007, 5, 116, 0, 0, 4007, 4008, 5, 121, 0, 0, 4008, 4009, 5, 112, 0, 0, 4009, 4033, 5, 101, 0, 0, 4010, 4011, 5, 114, 0, 0, 4011, 4012, 5, 101, 0, 0, 4012, 4013, 5, 97, 0, 0, 4013, 4014, 5, 100, 0, 0, 4014, 4015, 5, 111, 0, 0, 4015, 4016, 5, 110, 0, 0, 4016, 4017, 5, 108, 0, 0, 4017, 4018, 5, 121, 0, 0, 4018, 4033, 5, 46, 0, 0, 4019, 4020, 5, 105, 0, 0, 4020, 4021, 5, 108, 0, 0, 4021, 4022, 5, 108, 0, 0, 4022, 4023, 5, 101, 0, 0, 4023, 4024, 5, 103, 0, 0, 4024, 4025, 5, 97, 0, 0, 4025, 4033, 5, 108, 0, 0, 4026, 4027, 5, 101, 0, 0, 4027, 4028, 5, 110, 0, 0, 4028, 4029, 5, 100, 0, 0, 4029, 4030, 5, 109, 0, 0, 4030, 4031, 5, 97, 0, 0, 4031, 4033, 5, 99, 0, 0, 4032, 2850, 1, 0, 0, 0, 4032, 2853, 1, 0, 0, 0, 4032, 2858, 1, 0, 0, 0, 4032, 2865, 1, 0, 0, 0, 4032, 2872, 1, 0, 0, 0, 4032, 2879, 1, 0, 0, 0, 4032, 2886, 1, 0, 0, 0, 4032, 2893, 1, 0, 0, 0, 4032, 2900, 1, 0, 0, 0, 4032, 2907, 1, 0, 0, 0, 4032, 2914, 1, 0, 0, 0, 4032, 2921, 1, 0, 0, 0, 4032, 2928, 1, 0, 0, 0, 4032, 2935, 1, 0, 0, 0, 4032, 2942, 1, 0, 0, 0, 4032, 2948, 1, 0, 0, 0, 4032, 2957, 1, 0, 0, 0, 4032, 2966, 1, 0, 0, 0, 4032, 2974, 1, 0, 0, 0, 4032, 2982, 1, 0, 0, 0, 4032, 2990, 1, 0, 0, 0, 4032, 2998, 1, 0, 0, 0, 4032, 3006, 1, 0, 0, 0, 4032, 3014, 1, 0, 0, 0, 4032, 3022, 1, 0, 0, 0, 4032, 3030, 1, 0, 0, 0, 4032, 3038, 1, 0, 0, 0, 4032, 3041, 1, 0, 0, 0, 4032, 3044, 1, 0, 0, 0, 4032, 3047, 1, 0, 0, 0, 4032, 3055, 1, 0, 0, 0, 4032, 3063, 1, 0, 0, 0, 4032, 3071, 1, 0, 0, 0, 4032, 3079, 1, 0, 0, 0, 4032, 3087, 1, 0, 0, 0, 4032, 3095, 1, 0, 0, 0, 4032, 3103, 1, 0, 0, 0, 4032, 3111, 1, 0, 0, 0, 4032, 3118, 1, 0, 0, 0, 4032, 3126, 1, 0, 0, 0, 4032, 3134, 1, 0, 0, 0, 4032, 3143, 1, 0, 0, 0, 4032, 3152, 1, 0, 0, 0, 4032, 3160, 1, 0, 0, 0, 4032, 3168, 1, 0, 0, 0, 4032, 3176, 1, 0, 0, 0, 4032, 3184, 1, 0, 0, 0, 4032, 3192, 1, 0, 0, 0, 4032, 3200, 1, 0, 0, 0, 4032, 3203, 1, 0, 0, 0, 4032, 3206, 1, 0, 0, 0, 4032, 3209, 1, 0, 0, 0, 4032, 3212, 1, 0, 0, 0, 4032, 3218, 1, 0, 0, 0, 4032, 3221, 1, 0, 0, 0, 4032, 3227, 1, 0, 0, 0, 4032, 3230, 1, 0, 0, 0, 4032, 3232, 1, 0, 0, 0, 4032, 3235, 1, 0, 0, 0, 4032, 3238, 1, 0, 0, 0, 4032, 3241, 1, 0, 0, 0, 4032, 3247, 1, 0, 0, 0, 4032, 3250, 1, 0, 0, 0, 4032, 3253, 1, 0, 0, 0, 4032, 3260, 1, 0, 0, 0, 4032, 3267, 1, 0, 0, 0, 4032, 3274, 1, 0, 0, 0, 4032, 3281, 1, 0, 0, 0, 4032, 3288, 1, 0, 0, 0, 4032, 3295, 1, 0, 0, 0, 4032, 3302, 1, 0, 0, 0, 4032, 3309, 1, 0, 0, 0, 4032, 3318, 1, 0, 0, 0, 4032, 3323, 1, 0, 0, 0, 4032, 3337, 1, 0, 0, 0, 4032, 3351, 1, 0, 0, 0, 4032, 3365, 1, 0, 0, 0, 4032, 3379, 1, 0, 0, 0, 4032, 3393, 1, 0, 0, 0, 4032, 3407, 1, 0, 0, 0, 4032, 3421, 1, 0, 0, 0, 4032, 3435, 1, 0, 0, 0, 4032, 3448, 1, 0, 0, 0, 4032, 3461, 1, 0, 0, 0, 4032, 3466, 1, 0, 0, 0, 4032, 3475, 1, 0, 0, 0, 4032, 3484, 1, 0, 0, 0, 4032, 3493, 1, 0, 0, 0, 4032, 3502, 1, 0, 0, 0, 4032, 3511, 1, 0, 0, 0, 4032, 3520, 1, 0, 0, 0, 4032, 3529, 1, 0, 0, 0, 4032, 3538, 1, 0, 0, 0, 4032, 3546, 1, 0, 0, 0, 4032, 3555, 1, 0, 0, 0, 4032, 3564, 1, 0, 0, 0, 4032, 3574, 1, 0, 0, 0, 4032, 3582, 1, 0, 0, 0, 4032, 3591, 1, 0, 0, 0, 4032, 3600, 1, 0, 0, 0, 4032, 3609, 1, 0, 0, 0, 4032, 3618, 1, 0, 0, 0, 4032, 3627, 1, 0, 0, 0, 4032, 3636, 1, 0, 0, 0, 4032, 3646, 1, 0, 0, 0, 4032, 3657, 1, 0, 0, 0, 4032, 3668, 1, 0, 0, 0, 4032, 3679, 1, 0, 0, 0, 4032, 3690, 1, 0, 0, 0, 4032, 3701, 1, 0, 0, 0, 4032, 3712, 1, 0, 0, 0, 4032, 3723, 1, 0, 0, 0, 4032, 3734, 1, 0, 0, 0, 4032, 3742, 1, 0, 0, 0, 4032, 3749, 1, 0, 0, 0, 4032, 3756, 1, 0, 0, 0, 4032, 3762, 1, 0, 0, 0, 4032, 3772, 1, 0, 0, 0, 4032, 3782, 1, 0, 0, 0, 4032, 3789, 1, 0, 0, 0, 4032, 3799, 1, 0, 0, 0, 4032, 3806, 1, 0, 0, 0, 4032, 3816, 1, 0, 0, 0, 4032, 3823, 1, 0, 0, 0, 4032, 3833, 1, 0, 0, 0, 4032, 3843, 1, 0, 0, 0, 4032, 3851, 1, 0, 0, 0, 4032, 3858, 1, 0, 0, 0, 4032, 3864, 1, 0, 0, 0, 4032, 3871, 1, 0, 0, 0, 4032, 3878, 1, 0, 0, 0, 4032, 3885, 1, 0, 0, 0, 4032, 3892, 1, 0, 0, 0, 4032, 3899, 1, 0, 0, 0, 4032, 3906, 1, 0, 0, 0, 4032, 3913, 1, 0, 0, 0, 4032, 3922, 1, 0, 0, 0, 4032, 3929, 1, 0, 0, 0, 4032, 3932, 1, 0, 0, 0, 4032, 3935, 1, 0, 0, 0, 4032, 3941, 1, 0, 0, 0, 4032, 3944, 1, 0, 0, 0, 4032, 3950, 1, 0, 0, 0, 4032, 3958, 1, 0, 0, 0, 4032, 3967, 1, 0, 0, 0, 4032, 3976, 1, 0, 0, 0, 4032, 3981, 1, 0, 0, 0, 4032, 3986, 1, 0, 0, 0, 4032, 3993, 1, 0, 0, 0, 4032, 4000, 1, 0, 0, 0, 4032, 4010, 1, 0, 0, 0, 4032, 4019, 1, 0, 0, 0, 4032, 4026, 1, 0, 0, 0, 4033, 552, 1, 0, 0, 0, 4034, 4035, 5, 108, 0, 0, 4035, 4036, 5, 100, 0, 0, 4036, 4037, 5, 97, 0, 0, 4037, 4038, 5, 114, 0, 0, 4038, 4039, 5, 103, 0, 0, 4039, 4040, 5, 46, 0, 0, 4040, 4111, 5, 115, 0, 0, 4041, 4042, 5, 108, 0, 0, 4042, 4043, 5, 100, 0, 0, 4043, 4044, 5, 97, 0, 0, 4044, 4045, 5, 114, 0, 0, 4045, 4046, 5, 103, 0, 0, 4046, 4047, 5, 97, 0, 0, 4047, 4048, 5, 46, 0, 0, 4048, 4111, 5, 115, 0, 0, 4049, 4050, 5, 115, 0, 0, 4050, 4051, 5, 116, 0, 0, 4051, 4052, 5, 97, 0, 0, 4052, 4053, 5, 114, 0, 0, 4053, 4054, 5, 103, 0, 0, 4054, 4055, 5, 46, 0, 0, 4055, 4111, 5, 115, 0, 0, 4056, 4057, 5, 108, 0, 0, 4057, 4058, 5, 100, 0, 0, 4058, 4059, 5, 108, 0, 0, 4059, 4060, 5, 111, 0, 0, 4060, 4061, 5, 99, 0, 0, 4061, 4062, 5, 46, 0, 0, 4062, 4111, 5, 115, 0, 0, 4063, 4064, 5, 108, 0, 0, 4064, 4065, 5, 100, 0, 0, 4065, 4066, 5, 108, 0, 0, 4066, 4067, 5, 111, 0, 0, 4067, 4068, 5, 99, 0, 0, 4068, 4069, 5, 97, 0, 0, 4069, 4070, 5, 46, 0, 0, 4070, 4111, 5, 115, 0, 0, 4071, 4072, 5, 115, 0, 0, 4072, 4073, 5, 116, 0, 0, 4073, 4074, 5, 108, 0, 0, 4074, 4075, 5, 111, 0, 0, 4075, 4076, 5, 99, 0, 0, 4076, 4077, 5, 46, 0, 0, 4077, 4111, 5, 115, 0, 0, 4078, 4079, 5, 108, 0, 0, 4079, 4080, 5, 100, 0, 0, 4080, 4081, 5, 97, 0, 0, 4081, 4082, 5, 114, 0, 0, 4082, 4111, 5, 103, 0, 0, 4083, 4084, 5, 108, 0, 0, 4084, 4085, 5, 100, 0, 0, 4085, 4086, 5, 97, 0, 0, 4086, 4087, 5, 114, 0, 0, 4087, 4088, 5, 103, 0, 0, 4088, 4111, 5, 97, 0, 0, 4089, 4090, 5, 115, 0, 0, 4090, 4091, 5, 116, 0, 0, 4091, 4092, 5, 97, 0, 0, 4092, 4093, 5, 114, 0, 0, 4093, 4111, 5, 103, 0, 0, 4094, 4095, 5, 108, 0, 0, 4095, 4096, 5, 100, 0, 0, 4096, 4097, 5, 108, 0, 0, 4097, 4098, 5, 111, 0, 0, 4098, 4111, 5, 99, 0, 0, 4099, 4100, 5, 108, 0, 0, 4100, 4101, 5, 100, 0, 0, 4101, 4102, 5, 108, 0, 0, 4102, 4103, 5, 111, 0, 0, 4103, 4104, 5, 99, 0, 0, 4104, 4111, 5, 97, 0, 0, 4105, 4106, 5, 115, 0, 0, 4106, 4107, 5, 116, 0, 0, 4107, 4108, 5, 108, 0, 0, 4108, 4109, 5, 111, 0, 0, 4109, 4111, 5, 99, 0, 0, 4110, 4034, 1, 0, 0, 0, 4110, 4041, 1, 0, 0, 0, 4110, 4049, 1, 0, 0, 0, 4110, 4056, 1, 0, 0, 0, 4110, 4063, 1, 0, 0, 0, 4110, 4071, 1, 0, 0, 0, 4110, 4078, 1, 0, 0, 0, 4110, 4083, 1, 0, 0, 0, 4110, 4089, 1, 0, 0, 0, 4110, 4094, 1, 0, 0, 0, 4110, 4099, 1, 0, 0, 0, 4110, 4105, 1, 0, 0, 0, 4111, 554, 1, 0, 0, 0, 4112, 4113, 5, 108, 0, 0, 4113, 4114, 5, 100, 0, 0, 4114, 4115, 5, 99, 0, 0, 4115, 4116, 5, 46, 0, 0, 4116, 4117, 5, 105, 0, 0, 4117, 4118, 5, 52, 0, 0, 4118, 4119, 5, 46, 0, 0, 4119, 4140, 5, 115, 0, 0, 4120, 4121, 5, 108, 0, 0, 4121, 4122, 5, 100, 0, 0, 4122, 4123, 5, 99, 0, 0, 4123, 4124, 5, 46, 0, 0, 4124, 4125, 5, 105, 0, 0, 4125, 4140, 5, 52, 0, 0, 4126, 4127, 5, 117, 0, 0, 4127, 4128, 5, 110, 0, 0, 4128, 4129, 5, 97, 0, 0, 4129, 4130, 5, 108, 0, 0, 4130, 4131, 5, 105, 0, 0, 4131, 4132, 5, 103, 0, 0, 4132, 4133, 5, 110, 0, 0, 4133, 4134, 5, 101, 0, 0, 4134, 4135, 5, 100, 0, 0, 4135, 4140, 5, 46, 0, 0, 4136, 4137, 5, 110, 0, 0, 4137, 4138, 5, 111, 0, 0, 4138, 4140, 5, 46, 0, 0, 4139, 4112, 1, 0, 0, 0, 4139, 4120, 1, 0, 0, 0, 4139, 4126, 1, 0, 0, 0, 4139, 4136, 1, 0, 0, 0, 4140, 556, 1, 0, 0, 0, 4141, 4142, 5, 108, 0, 0, 4142, 4143, 5, 100, 0, 0, 4143, 4144, 5, 99, 0, 0, 4144, 4145, 5, 46, 0, 0, 4145, 4146, 5, 105, 0, 0, 4146, 4147, 5, 56, 0, 0, 4147, 558, 1, 0, 0, 0, 4148, 4149, 5, 108, 0, 0, 4149, 4150, 5, 100, 0, 0, 4150, 4151, 5, 99, 0, 0, 4151, 4152, 5, 46, 0, 0, 4152, 4153, 5, 114, 0, 0, 4153, 4161, 5, 52, 0, 0, 4154, 4155, 5, 108, 0, 0, 4155, 4156, 5, 100, 0, 0, 4156, 4157, 5, 99, 0, 0, 4157, 4158, 5, 46, 0, 0, 4158, 4159, 5, 114, 0, 0, 4159, 4161, 5, 56, 0, 0, 4160, 4148, 1, 0, 0, 0, 4160, 4154, 1, 0, 0, 0, 4161, 560, 1, 0, 0, 0, 4162, 4163, 5, 106, 0, 0, 4163, 4164, 5, 109, 0, 0, 4164, 4198, 5, 112, 0, 0, 4165, 4166, 5, 99, 0, 0, 4166, 4167, 5, 97, 0, 0, 4167, 4168, 5, 108, 0, 0, 4168, 4198, 5, 108, 0, 0, 4169, 4170, 5, 99, 0, 0, 4170, 4171, 5, 97, 0, 0, 4171, 4172, 5, 108, 0, 0, 4172, 4173, 5, 108, 0, 0, 4173, 4174, 5, 118, 0, 0, 4174, 4175, 5, 105, 0, 0, 4175, 4176, 5, 114, 0, 0, 4176, 4198, 5, 116, 0, 0, 4177, 4178, 5, 110, 0, 0, 4178, 4179, 5, 101, 0, 0, 4179, 4180, 5, 119, 0, 0, 4180, 4181, 5, 111, 0, 0, 4181, 4182, 5, 98, 0, 0, 4182, 4198, 5, 106, 0, 0, 4183, 4184, 5, 108, 0, 0, 4184, 4185, 5, 100, 0, 0, 4185, 4186, 5, 102, 0, 0, 4186, 4187, 5, 116, 0, 0, 4187, 4198, 5, 110, 0, 0, 4188, 4189, 5, 108, 0, 0, 4189, 4190, 5, 100, 0, 0, 4190, 4191, 5, 118, 0, 0, 4191, 4192, 5, 105, 0, 0, 4192, 4193, 5, 114, 0, 0, 4193, 4194, 5, 116, 0, 0, 4194, 4195, 5, 102, 0, 0, 4195, 4196, 5, 116, 0, 0, 4196, 4198, 5, 110, 0, 0, 4197, 4162, 1, 0, 0, 0, 4197, 4165, 1, 0, 0, 0, 4197, 4169, 1, 0, 0, 0, 4197, 4177, 1, 0, 0, 0, 4197, 4183, 1, 0, 0, 0, 4197, 4188, 1, 0, 0, 0, 4198, 562, 1, 0, 0, 0, 4199, 4200, 5, 99, 0, 0, 4200, 4201, 5, 97, 0, 0, 4201, 4202, 5, 108, 0, 0, 4202, 4203, 5, 108, 0, 0, 4203, 4204, 5, 105, 0, 0, 4204, 564, 1, 0, 0, 0, 4205, 4206, 5, 98, 0, 0, 4206, 4207, 5, 114, 0, 0, 4207, 4208, 5, 46, 0, 0, 4208, 4364, 5, 115, 0, 0, 4209, 4210, 5, 98, 0, 0, 4210, 4211, 5, 114, 0, 0, 4211, 4212, 5, 102, 0, 0, 4212, 4213, 5, 97, 0, 0, 4213, 4214, 5, 108, 0, 0, 4214, 4215, 5, 115, 0, 0, 4215, 4216, 5, 101, 0, 0, 4216, 4217, 5, 46, 0, 0, 4217, 4364, 5, 115, 0, 0, 4218, 4219, 5, 98, 0, 0, 4219, 4220, 5, 114, 0, 0, 4220, 4221, 5, 116, 0, 0, 4221, 4222, 5, 114, 0, 0, 4222, 4223, 5, 117, 0, 0, 4223, 4224, 5, 101, 0, 0, 4224, 4225, 5, 46, 0, 0, 4225, 4364, 5, 115, 0, 0, 4226, 4227, 5, 98, 0, 0, 4227, 4228, 5, 101, 0, 0, 4228, 4229, 5, 113, 0, 0, 4229, 4230, 5, 46, 0, 0, 4230, 4364, 5, 115, 0, 0, 4231, 4232, 5, 98, 0, 0, 4232, 4233, 5, 103, 0, 0, 4233, 4234, 5, 101, 0, 0, 4234, 4235, 5, 46, 0, 0, 4235, 4364, 5, 115, 0, 0, 4236, 4237, 5, 98, 0, 0, 4237, 4238, 5, 103, 0, 0, 4238, 4239, 5, 116, 0, 0, 4239, 4240, 5, 46, 0, 0, 4240, 4364, 5, 115, 0, 0, 4241, 4242, 5, 98, 0, 0, 4242, 4243, 5, 108, 0, 0, 4243, 4244, 5, 101, 0, 0, 4244, 4245, 5, 46, 0, 0, 4245, 4364, 5, 115, 0, 0, 4246, 4247, 5, 98, 0, 0, 4247, 4248, 5, 108, 0, 0, 4248, 4249, 5, 116, 0, 0, 4249, 4250, 5, 46, 0, 0, 4250, 4364, 5, 115, 0, 0, 4251, 4252, 5, 98, 0, 0, 4252, 4253, 5, 110, 0, 0, 4253, 4254, 5, 101, 0, 0, 4254, 4255, 5, 46, 0, 0, 4255, 4256, 5, 117, 0, 0, 4256, 4257, 5, 110, 0, 0, 4257, 4258, 5, 46, 0, 0, 4258, 4364, 5, 115, 0, 0, 4259, 4260, 5, 98, 0, 0, 4260, 4261, 5, 103, 0, 0, 4261, 4262, 5, 101, 0, 0, 4262, 4263, 5, 46, 0, 0, 4263, 4264, 5, 117, 0, 0, 4264, 4265, 5, 110, 0, 0, 4265, 4266, 5, 46, 0, 0, 4266, 4364, 5, 115, 0, 0, 4267, 4268, 5, 98, 0, 0, 4268, 4269, 5, 103, 0, 0, 4269, 4270, 5, 116, 0, 0, 4270, 4271, 5, 46, 0, 0, 4271, 4272, 5, 117, 0, 0, 4272, 4273, 5, 110, 0, 0, 4273, 4274, 5, 46, 0, 0, 4274, 4364, 5, 115, 0, 0, 4275, 4276, 5, 98, 0, 0, 4276, 4277, 5, 108, 0, 0, 4277, 4278, 5, 101, 0, 0, 4278, 4279, 5, 46, 0, 0, 4279, 4280, 5, 117, 0, 0, 4280, 4281, 5, 110, 0, 0, 4281, 4282, 5, 46, 0, 0, 4282, 4364, 5, 115, 0, 0, 4283, 4284, 5, 98, 0, 0, 4284, 4285, 5, 108, 0, 0, 4285, 4286, 5, 116, 0, 0, 4286, 4287, 5, 46, 0, 0, 4287, 4288, 5, 117, 0, 0, 4288, 4289, 5, 110, 0, 0, 4289, 4290, 5, 46, 0, 0, 4290, 4364, 5, 115, 0, 0, 4291, 4292, 5, 98, 0, 0, 4292, 4364, 5, 114, 0, 0, 4293, 4294, 5, 98, 0, 0, 4294, 4295, 5, 114, 0, 0, 4295, 4296, 5, 102, 0, 0, 4296, 4297, 5, 97, 0, 0, 4297, 4298, 5, 108, 0, 0, 4298, 4299, 5, 115, 0, 0, 4299, 4364, 5, 101, 0, 0, 4300, 4301, 5, 98, 0, 0, 4301, 4302, 5, 114, 0, 0, 4302, 4303, 5, 116, 0, 0, 4303, 4304, 5, 114, 0, 0, 4304, 4305, 5, 117, 0, 0, 4305, 4364, 5, 101, 0, 0, 4306, 4307, 5, 98, 0, 0, 4307, 4308, 5, 101, 0, 0, 4308, 4364, 5, 113, 0, 0, 4309, 4310, 5, 98, 0, 0, 4310, 4311, 5, 103, 0, 0, 4311, 4364, 5, 101, 0, 0, 4312, 4313, 5, 98, 0, 0, 4313, 4314, 5, 103, 0, 0, 4314, 4364, 5, 116, 0, 0, 4315, 4316, 5, 98, 0, 0, 4316, 4317, 5, 108, 0, 0, 4317, 4364, 5, 101, 0, 0, 4318, 4319, 5, 98, 0, 0, 4319, 4320, 5, 108, 0, 0, 4320, 4364, 5, 116, 0, 0, 4321, 4322, 5, 98, 0, 0, 4322, 4323, 5, 110, 0, 0, 4323, 4324, 5, 101, 0, 0, 4324, 4325, 5, 46, 0, 0, 4325, 4326, 5, 117, 0, 0, 4326, 4364, 5, 110, 0, 0, 4327, 4328, 5, 98, 0, 0, 4328, 4329, 5, 103, 0, 0, 4329, 4330, 5, 101, 0, 0, 4330, 4331, 5, 46, 0, 0, 4331, 4332, 5, 117, 0, 0, 4332, 4364, 5, 110, 0, 0, 4333, 4334, 5, 98, 0, 0, 4334, 4335, 5, 103, 0, 0, 4335, 4336, 5, 116, 0, 0, 4336, 4337, 5, 46, 0, 0, 4337, 4338, 5, 117, 0, 0, 4338, 4364, 5, 110, 0, 0, 4339, 4340, 5, 98, 0, 0, 4340, 4341, 5, 108, 0, 0, 4341, 4342, 5, 101, 0, 0, 4342, 4343, 5, 46, 0, 0, 4343, 4344, 5, 117, 0, 0, 4344, 4364, 5, 110, 0, 0, 4345, 4346, 5, 98, 0, 0, 4346, 4347, 5, 108, 0, 0, 4347, 4348, 5, 116, 0, 0, 4348, 4349, 5, 46, 0, 0, 4349, 4350, 5, 117, 0, 0, 4350, 4364, 5, 110, 0, 0, 4351, 4352, 5, 108, 0, 0, 4352, 4353, 5, 101, 0, 0, 4353, 4354, 5, 97, 0, 0, 4354, 4355, 5, 118, 0, 0, 4355, 4364, 5, 101, 0, 0, 4356, 4357, 5, 108, 0, 0, 4357, 4358, 5, 101, 0, 0, 4358, 4359, 5, 97, 0, 0, 4359, 4360, 5, 118, 0, 0, 4360, 4361, 5, 101, 0, 0, 4361, 4362, 5, 46, 0, 0, 4362, 4364, 5, 115, 0, 0, 4363, 4205, 1, 0, 0, 0, 4363, 4209, 1, 0, 0, 0, 4363, 4218, 1, 0, 0, 0, 4363, 4226, 1, 0, 0, 0, 4363, 4231, 1, 0, 0, 0, 4363, 4236, 1, 0, 0, 0, 4363, 4241, 1, 0, 0, 0, 4363, 4246, 1, 0, 0, 0, 4363, 4251, 1, 0, 0, 0, 4363, 4259, 1, 0, 0, 0, 4363, 4267, 1, 0, 0, 0, 4363, 4275, 1, 0, 0, 0, 4363, 4283, 1, 0, 0, 0, 4363, 4291, 1, 0, 0, 0, 4363, 4293, 1, 0, 0, 0, 4363, 4300, 1, 0, 0, 0, 4363, 4306, 1, 0, 0, 0, 4363, 4309, 1, 0, 0, 0, 4363, 4312, 1, 0, 0, 0, 4363, 4315, 1, 0, 0, 0, 4363, 4318, 1, 0, 0, 0, 4363, 4321, 1, 0, 0, 0, 4363, 4327, 1, 0, 0, 0, 4363, 4333, 1, 0, 0, 0, 4363, 4339, 1, 0, 0, 0, 4363, 4345, 1, 0, 0, 0, 4363, 4351, 1, 0, 0, 0, 4363, 4356, 1, 0, 0, 0, 4364, 566, 1, 0, 0, 0, 4365, 4366, 5, 115, 0, 0, 4366, 4367, 5, 119, 0, 0, 4367, 4368, 5, 105, 0, 0, 4368, 4369, 5, 116, 0, 0, 4369, 4370, 5, 99, 0, 0, 4370, 4371, 5, 104, 0, 0, 4371, 568, 1, 0, 0, 0, 4372, 4373, 5, 99, 0, 0, 4373, 4374, 5, 112, 0, 0, 4374, 4375, 5, 111, 0, 0, 4375, 4376, 5, 98, 0, 0, 4376, 4487, 5, 106, 0, 0, 4377, 4378, 5, 108, 0, 0, 4378, 4379, 5, 100, 0, 0, 4379, 4380, 5, 111, 0, 0, 4380, 4381, 5, 98, 0, 0, 4381, 4487, 5, 106, 0, 0, 4382, 4383, 5, 99, 0, 0, 4383, 4384, 5, 97, 0, 0, 4384, 4385, 5, 115, 0, 0, 4385, 4386, 5, 116, 0, 0, 4386, 4387, 5, 99, 0, 0, 4387, 4388, 5, 108, 0, 0, 4388, 4389, 5, 97, 0, 0, 4389, 4390, 5, 115, 0, 0, 4390, 4487, 5, 115, 0, 0, 4391, 4392, 5, 105, 0, 0, 4392, 4393, 5, 115, 0, 0, 4393, 4394, 5, 105, 0, 0, 4394, 4395, 5, 110, 0, 0, 4395, 4396, 5, 115, 0, 0, 4396, 4487, 5, 116, 0, 0, 4397, 4398, 5, 117, 0, 0, 4398, 4399, 5, 110, 0, 0, 4399, 4400, 5, 98, 0, 0, 4400, 4401, 5, 111, 0, 0, 4401, 4487, 5, 120, 0, 0, 4402, 4403, 5, 115, 0, 0, 4403, 4404, 5, 116, 0, 0, 4404, 4405, 5, 111, 0, 0, 4405, 4406, 5, 98, 0, 0, 4406, 4487, 5, 106, 0, 0, 4407, 4408, 5, 98, 0, 0, 4408, 4409, 5, 111, 0, 0, 4409, 4487, 5, 120, 0, 0, 4410, 4411, 5, 110, 0, 0, 4411, 4412, 5, 101, 0, 0, 4412, 4413, 5, 119, 0, 0, 4413, 4414, 5, 97, 0, 0, 4414, 4415, 5, 114, 0, 0, 4415, 4487, 5, 114, 0, 0, 4416, 4417, 5, 108, 0, 0, 4417, 4418, 5, 100, 0, 0, 4418, 4419, 5, 101, 0, 0, 4419, 4420, 5, 108, 0, 0, 4420, 4421, 5, 101, 0, 0, 4421, 4422, 5, 109, 0, 0, 4422, 4487, 5, 97, 0, 0, 4423, 4424, 5, 108, 0, 0, 4424, 4425, 5, 100, 0, 0, 4425, 4426, 5, 101, 0, 0, 4426, 4427, 5, 108, 0, 0, 4427, 4428, 5, 101, 0, 0, 4428, 4487, 5, 109, 0, 0, 4429, 4430, 5, 115, 0, 0, 4430, 4431, 5, 116, 0, 0, 4431, 4432, 5, 101, 0, 0, 4432, 4433, 5, 108, 0, 0, 4433, 4434, 5, 101, 0, 0, 4434, 4487, 5, 109, 0, 0, 4435, 4436, 5, 117, 0, 0, 4436, 4437, 5, 110, 0, 0, 4437, 4438, 5, 98, 0, 0, 4438, 4439, 5, 111, 0, 0, 4439, 4440, 5, 120, 0, 0, 4440, 4441, 5, 46, 0, 0, 4441, 4442, 5, 97, 0, 0, 4442, 4443, 5, 110, 0, 0, 4443, 4487, 5, 121, 0, 0, 4444, 4445, 5, 114, 0, 0, 4445, 4446, 5, 101, 0, 0, 4446, 4447, 5, 102, 0, 0, 4447, 4448, 5, 97, 0, 0, 4448, 4449, 5, 110, 0, 0, 4449, 4450, 5, 121, 0, 0, 4450, 4451, 5, 118, 0, 0, 4451, 4452, 5, 97, 0, 0, 4452, 4487, 5, 108, 0, 0, 4453, 4454, 5, 109, 0, 0, 4454, 4455, 5, 107, 0, 0, 4455, 4456, 5, 114, 0, 0, 4456, 4457, 5, 101, 0, 0, 4457, 4458, 5, 102, 0, 0, 4458, 4459, 5, 97, 0, 0, 4459, 4460, 5, 110, 0, 0, 4460, 4487, 5, 121, 0, 0, 4461, 4462, 5, 105, 0, 0, 4462, 4463, 5, 110, 0, 0, 4463, 4464, 5, 105, 0, 0, 4464, 4465, 5, 116, 0, 0, 4465, 4466, 5, 111, 0, 0, 4466, 4467, 5, 98, 0, 0, 4467, 4487, 5, 106, 0, 0, 4468, 4469, 5, 99, 0, 0, 4469, 4470, 5, 111, 0, 0, 4470, 4471, 5, 110, 0, 0, 4471, 4472, 5, 115, 0, 0, 4472, 4473, 5, 116, 0, 0, 4473, 4474, 5, 114, 0, 0, 4474, 4475, 5, 97, 0, 0, 4475, 4476, 5, 105, 0, 0, 4476, 4477, 5, 110, 0, 0, 4477, 4478, 5, 101, 0, 0, 4478, 4479, 5, 100, 0, 0, 4479, 4487, 5, 46, 0, 0, 4480, 4481, 5, 115, 0, 0, 4481, 4482, 5, 105, 0, 0, 4482, 4483, 5, 122, 0, 0, 4483, 4484, 5, 101, 0, 0, 4484, 4485, 5, 111, 0, 0, 4485, 4487, 5, 102, 0, 0, 4486, 4372, 1, 0, 0, 0, 4486, 4377, 1, 0, 0, 0, 4486, 4382, 1, 0, 0, 0, 4486, 4391, 1, 0, 0, 0, 4486, 4397, 1, 0, 0, 0, 4486, 4402, 1, 0, 0, 0, 4486, 4407, 1, 0, 0, 0, 4486, 4410, 1, 0, 0, 0, 4486, 4416, 1, 0, 0, 0, 4486, 4423, 1, 0, 0, 0, 4486, 4429, 1, 0, 0, 0, 4486, 4435, 1, 0, 0, 0, 4486, 4444, 1, 0, 0, 0, 4486, 4453, 1, 0, 0, 0, 4486, 4461, 1, 0, 0, 0, 4486, 4468, 1, 0, 0, 0, 4486, 4480, 1, 0, 0, 0, 4487, 570, 1, 0, 0, 0, 4488, 4489, 5, 108, 0, 0, 4489, 4490, 5, 100, 0, 0, 4490, 4491, 5, 115, 0, 0, 4491, 4492, 5, 116, 0, 0, 4492, 4493, 5, 114, 0, 0, 4493, 572, 1, 0, 0, 0, 4494, 4495, 5, 108, 0, 0, 4495, 4496, 5, 100, 0, 0, 4496, 4497, 5, 102, 0, 0, 4497, 4498, 5, 108, 0, 0, 4498, 4530, 5, 100, 0, 0, 4499, 4500, 5, 108, 0, 0, 4500, 4501, 5, 100, 0, 0, 4501, 4502, 5, 102, 0, 0, 4502, 4503, 5, 108, 0, 0, 4503, 4504, 5, 100, 0, 0, 4504, 4530, 5, 97, 0, 0, 4505, 4506, 5, 115, 0, 0, 4506, 4507, 5, 116, 0, 0, 4507, 4508, 5, 102, 0, 0, 4508, 4509, 5, 108, 0, 0, 4509, 4530, 5, 100, 0, 0, 4510, 4511, 5, 108, 0, 0, 4511, 4512, 5, 100, 0, 0, 4512, 4513, 5, 115, 0, 0, 4513, 4514, 5, 102, 0, 0, 4514, 4515, 5, 108, 0, 0, 4515, 4530, 5, 100, 0, 0, 4516, 4517, 5, 108, 0, 0, 4517, 4518, 5, 100, 0, 0, 4518, 4519, 5, 115, 0, 0, 4519, 4520, 5, 102, 0, 0, 4520, 4521, 5, 108, 0, 0, 4521, 4522, 5, 100, 0, 0, 4522, 4530, 5, 97, 0, 0, 4523, 4524, 5, 115, 0, 0, 4524, 4525, 5, 116, 0, 0, 4525, 4526, 5, 115, 0, 0, 4526, 4527, 5, 102, 0, 0, 4527, 4528, 5, 108, 0, 0, 4528, 4530, 5, 100, 0, 0, 4529, 4494, 1, 0, 0, 0, 4529, 4499, 1, 0, 0, 0, 4529, 4505, 1, 0, 0, 0, 4529, 4510, 1, 0, 0, 0, 4529, 4516, 1, 0, 0, 0, 4529, 4523, 1, 0, 0, 0, 4530, 574, 1, 0, 0, 0, 4531, 4532, 5, 108, 0, 0, 4532, 4533, 5, 100, 0, 0, 4533, 4534, 5, 116, 0, 0, 4534, 4535, 5, 111, 0, 0, 4535, 4536, 5, 107, 0, 0, 4536, 4537, 5, 101, 0, 0, 4537, 4538, 5, 110, 0, 0, 4538, 576, 1, 0, 0, 0, 4539, 4540, 7, 8, 0, 0, 4540, 578, 1, 0, 0, 0, 4541, 4542, 7, 9, 0, 0, 4542, 580, 1, 0, 0, 0, 4543, 4544, 3, 583, 291, 0, 4544, 4545, 3, 531, 265, 0, 4545, 4547, 1, 0, 0, 0, 4546, 4543, 1, 0, 0, 0, 4547, 4548, 1, 0, 0, 0, 4548, 4546, 1, 0, 0, 0, 4548, 4549, 1, 0, 0, 0, 4549, 4550, 1, 0, 0, 0, 4550, 4551, 3, 583, 291, 0, 4551, 582, 1, 0, 0, 0, 4552, 4556, 3, 577, 288, 0, 4553, 4555, 3, 579, 289, 0, 4554, 4553, 1, 0, 0, 0, 4555, 4558, 1, 0, 0, 0, 4556, 4554, 1, 0, 0, 0, 4556, 4557, 1, 0, 0, 0, 4557, 584, 1, 0, 0, 0, 4558, 4556, 1, 0, 0, 0, 4559, 4560, 7, 0, 0, 0, 4560, 4561, 7, 0, 0, 0, 4561, 586, 1, 0, 0, 0, 4562, 4563, 7, 10, 0, 0, 4563, 4564, 1, 0, 0, 0, 4564, 4565, 6, 293, 0, 0, 4565, 588, 1, 0, 0, 0, 4566, 4567, 5, 47, 0, 0, 4567, 4568, 5, 47, 0, 0, 4568, 4572, 1, 0, 0, 0, 4569, 4571, 8, 11, 0, 0, 4570, 4569, 1, 0, 0, 0, 4571, 4574, 1, 0, 0, 0, 4572, 4570, 1, 0, 0, 0, 4572, 4573, 1, 0, 0, 0, 4573, 4575, 1, 0, 0, 0, 4574, 4572, 1, 0, 0, 0, 4575, 4576, 6, 294, 0, 0, 4576, 590, 1, 0, 0, 0, 4577, 4578, 5, 47, 0, 0, 4578, 4579, 5, 42, 0, 0, 4579, 4583, 1, 0, 0, 0, 4580, 4582, 9, 0, 0, 0, 4581, 4580, 1, 0, 0, 0, 4582, 4585, 1, 0, 0, 0, 4583, 4584, 1, 0, 0, 0, 4583, 4581, 1, 0, 0, 0, 4584, 4586, 1, 0, 0, 0, 4585, 4583, 1, 0, 0, 0, 4586, 4587, 5, 42, 0, 0, 4587, 4588, 5, 47, 0, 0, 4588, 4589, 1, 0, 0, 0, 4589, 4590, 6, 295, 0, 0, 4590, 592, 1, 0, 0, 0, 4591, 4592, 5, 46, 0, 0, 4592, 4593, 5, 112, 0, 0, 4593, 4594, 5, 101, 0, 0, 4594, 4595, 5, 114, 0, 0, 4595, 4596, 5, 109, 0, 0, 4596, 4597, 5, 105, 0, 0, 4597, 4598, 5, 115, 0, 0, 4598, 4599, 5, 115, 0, 0, 4599, 4600, 5, 105, 0, 0, 4600, 4601, 5, 111, 0, 0, 4601, 4602, 5, 110, 0, 0, 4602, 594, 1, 0, 0, 0, 4603, 4604, 5, 46, 0, 0, 4604, 4605, 5, 112, 0, 0, 4605, 4606, 5, 101, 0, 0, 4606, 4607, 5, 114, 0, 0, 4607, 4608, 5, 109, 0, 0, 4608, 4609, 5, 105, 0, 0, 4609, 4610, 5, 115, 0, 0, 4610, 4611, 5, 115, 0, 0, 4611, 4612, 5, 105, 0, 0, 4612, 4613, 5, 111, 0, 0, 4613, 4614, 5, 110, 0, 0, 4614, 4615, 5, 115, 0, 0, 4615, 4616, 5, 101, 0, 0, 4616, 4617, 5, 116, 0, 0, 4617, 596, 1, 0, 0, 0, 4618, 4619, 5, 46, 0, 0, 4619, 4620, 5, 101, 0, 0, 4620, 4621, 5, 109, 0, 0, 4621, 4622, 5, 105, 0, 0, 4622, 4623, 5, 116, 0, 0, 4623, 4624, 5, 98, 0, 0, 4624, 4625, 5, 121, 0, 0, 4625, 4626, 5, 116, 0, 0, 4626, 4627, 5, 101, 0, 0, 4627, 598, 1, 0, 0, 0, 4628, 4629, 5, 46, 0, 0, 4629, 4630, 5, 109, 0, 0, 4630, 4631, 5, 97, 0, 0, 4631, 4632, 5, 120, 0, 0, 4632, 4633, 5, 115, 0, 0, 4633, 4634, 5, 116, 0, 0, 4634, 4635, 5, 97, 0, 0, 4635, 4636, 5, 99, 0, 0, 4636, 4637, 5, 107, 0, 0, 4637, 600, 1, 0, 0, 0, 4638, 4639, 5, 46, 0, 0, 4639, 4640, 5, 101, 0, 0, 4640, 4641, 5, 110, 0, 0, 4641, 4642, 5, 116, 0, 0, 4642, 4643, 5, 114, 0, 0, 4643, 4644, 5, 121, 0, 0, 4644, 4645, 5, 112, 0, 0, 4645, 4646, 5, 111, 0, 0, 4646, 4647, 5, 105, 0, 0, 4647, 4648, 5, 110, 0, 0, 4648, 4649, 5, 116, 0, 0, 4649, 602, 1, 0, 0, 0, 4650, 4651, 5, 46, 0, 0, 4651, 4652, 5, 122, 0, 0, 4652, 4653, 5, 101, 0, 0, 4653, 4654, 5, 114, 0, 0, 4654, 4655, 5, 111, 0, 0, 4655, 4656, 5, 105, 0, 0, 4656, 4657, 5, 110, 0, 0, 4657, 4658, 5, 105, 0, 0, 4658, 4659, 5, 116, 0, 0, 4659, 604, 1, 0, 0, 0, 4660, 4661, 5, 46, 0, 0, 4661, 4662, 5, 108, 0, 0, 4662, 4663, 5, 111, 0, 0, 4663, 4664, 5, 99, 0, 0, 4664, 4665, 5, 97, 0, 0, 4665, 4666, 5, 108, 0, 0, 4666, 4667, 5, 115, 0, 0, 4667, 606, 1, 0, 0, 0, 4668, 4669, 5, 46, 0, 0, 4669, 4670, 5, 101, 0, 0, 4670, 4671, 5, 120, 0, 0, 4671, 4672, 5, 112, 0, 0, 4672, 4673, 5, 111, 0, 0, 4673, 4674, 5, 114, 0, 0, 4674, 4675, 5, 116, 0, 0, 4675, 608, 1, 0, 0, 0, 4676, 4677, 5, 46, 0, 0, 4677, 4678, 5, 111, 0, 0, 4678, 4679, 5, 118, 0, 0, 4679, 4680, 5, 101, 0, 0, 4680, 4681, 5, 114, 0, 0, 4681, 4682, 5, 114, 0, 0, 4682, 4683, 5, 105, 0, 0, 4683, 4684, 5, 100, 0, 0, 4684, 4685, 5, 101, 0, 0, 4685, 610, 1, 0, 0, 0, 4686, 4687, 5, 46, 0, 0, 4687, 4688, 5, 118, 0, 0, 4688, 4689, 5, 116, 0, 0, 4689, 4690, 5, 101, 0, 0, 4690, 4691, 5, 110, 0, 0, 4691, 4692, 5, 116, 0, 0, 4692, 4693, 5, 114, 0, 0, 4693, 4694, 5, 121, 0, 0, 4694, 612, 1, 0, 0, 0, 45, 0, 2024, 2032, 2037, 2039, 2042, 2050, 2055, 2057, 2060, 2065, 2071, 2075, 2080, 2082, 2086, 2091, 2093, 2099, 2103, 2108, 2110, 2112, 2149, 2701, 2752, 2755, 2758, 2761, 2766, 2768, 2776, 2778, 4032, 4110, 4139, 4160, 4197, 4363, 4486, 4529, 4548, 4556, 4572, 4583, 1, 6, 0, 0] \ No newline at end of file diff --git a/src/tools/ilasm/src/ILAssembler/gen/CILLexer.tokens b/src/tools/ilasm/src/ILAssembler/gen/CILLexer.tokens index e321195066b2c8..30f6003a7e601b 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CILLexer.tokens +++ b/src/tools/ilasm/src/ILAssembler/gen/CILLexer.tokens @@ -166,142 +166,140 @@ T__164=165 T__165=166 T__166=167 T__167=168 -INT32=169 -INT64=170 -FLOAT64=171 -HEXBYTE=172 -DCOLON=173 -ELLIPSIS=174 -NULL=175 -NULLREF=176 -HASH=177 -CHAR=178 -STRING=179 -BOOL=180 -INT8=181 -INT16=182 -INT32_=183 -INT64_=184 -FLOAT32=185 -FLOAT64_=186 -UINT8=187 -UINT16=188 -UINT32=189 -UINT64=190 -INT=191 -UINT=192 -TYPE=193 -OBJECT=194 -MODULE=195 -VALUE=196 -VALUETYPE=197 -VOID=198 -ENUM=199 -CUSTOM=200 -FIXED=201 -SYSSTRING=202 -ARRAY=203 -VARIANT=204 -CURRENCY=205 -SYSCHAR=206 -ERROR=207 -DECIMAL=208 -DATE=209 -BSTR=210 -LPSTR=211 -LPWSTR=212 -LPTSTR=213 -OBJECTREF=214 -IUNKNOWN=215 -IDISPATCH=216 -STRUCT=217 -INTERFACE=218 -SAFEARRAY=219 -NESTEDSTRUCT=220 -VARIANTBOOL=221 +T__168=169 +T__169=170 +T__170=171 +INT32=172 +INT64=173 +FLOAT64=174 +DCOLON=175 +ELLIPSIS=176 +NULL=177 +NULLREF=178 +HASH=179 +CHAR=180 +STRING=181 +BOOL=182 +INT8=183 +INT16=184 +INT32_=185 +INT64_=186 +FLOAT32=187 +FLOAT64_=188 +UINT8=189 +UINT16=190 +UINT32=191 +UINT64=192 +INT=193 +UINT=194 +TYPE=195 +OBJECT=196 +MODULE=197 +VALUE=198 +VALUETYPE=199 +VOID=200 +ENUM=201 +CUSTOM=202 +FIXED=203 +SYSSTRING=204 +ARRAY=205 +VARIANT=206 +CURRENCY=207 +SYSCHAR=208 +ERROR=209 +DECIMAL=210 +DATE=211 +BSTR=212 +LPSTR=213 +LPWSTR=214 +LPTSTR=215 +OBJECTREF=216 +IUNKNOWN=217 +IDISPATCH=218 +STRUCT=219 +INTERFACE=220 +SAFEARRAY=221 BYVALSTR=222 ANSI=223 -ANSIBSTR=224 -TBSTR=225 -METHOD=226 -ANY=227 -LPSTRUCT=228 -VECTOR=229 -HRESULT=230 -CARRAY=231 -USERDEFINED=232 -RECORD=233 -FILETIME=234 -BLOB=235 -STREAM=236 -STORAGE=237 -STREAMED_OBJECT=238 -STORED_OBJECT=239 -BLOB_OBJECT=240 -CF=241 -CLSID=242 -INSTANCE=243 -EXPLICIT=244 -DEFAULT=245 -VARARG=246 -UNMANAGED=247 -CDECL=248 -STDCALL=249 -THISCALL=250 -FASTCALL=251 -TYPE_PARAMETER=252 -METHOD_TYPE_PARAMETER=253 -TYPEDREF=254 -NATIVE_INT=255 -NATIVE_UINT=256 -PARAM=257 -CONSTRAINT=258 -THIS=259 -BASE=260 -NESTER=261 -REF=262 -ARRAY_TYPE_NO_BOUNDS=263 -PTR=264 -QSTRING=265 -SQSTRING=266 -DOT=267 -PLUS=268 -PP_DEFINE=269 -PP_UNDEF=270 -PP_IFDEF=271 -PP_IFNDEF=272 -PP_ELSE=273 -PP_ENDIF=274 -PP_INCLUDE=275 -MRESOURCE=276 -INSTR_NONE=277 -INSTR_VAR=278 -INSTR_I=279 -INSTR_I8=280 -INSTR_R=281 -INSTR_METHOD=282 -INSTR_SIG=283 -INSTR_BRTARGET=284 -INSTR_SWITCH=285 -INSTR_TYPE=286 -INSTR_STRING=287 -INSTR_FIELD=288 -INSTR_TOK=289 -DOTTEDNAME=290 -ID=291 -WS=292 -SINGLE_LINE_COMMENT=293 -COMMENT=294 -PERMISSION=295 -PERMISSIONSET=296 -EMITBYTE=297 -MAXSTACK=298 -ENTRYPOINT=299 -ZEROINIT=300 -LOCALS=301 -EXPORT=302 -OVERRIDE=303 -VTENTRY=304 +TBSTR=224 +METHOD=225 +ANY=226 +LPSTRUCT=227 +VECTOR=228 +HRESULT=229 +CARRAY=230 +USERDEFINED=231 +RECORD=232 +FILETIME=233 +BLOB=234 +STREAM=235 +STORAGE=236 +STREAMED_OBJECT=237 +STORED_OBJECT=238 +BLOB_OBJECT=239 +CF=240 +CLSID=241 +INSTANCE=242 +EXPLICIT=243 +DEFAULT=244 +VARARG=245 +UNMANAGED=246 +CDECL=247 +STDCALL=248 +THISCALL=249 +FASTCALL=250 +TYPE_PARAMETER=251 +METHOD_TYPE_PARAMETER=252 +TYPEDREF=253 +PARAM=254 +CONSTRAINT=255 +THIS=256 +BASE=257 +NESTER=258 +REF=259 +ARRAY_TYPE_NO_BOUNDS=260 +PTR=261 +QSTRING=262 +SQSTRING=263 +DOT=264 +PLUS=265 +PP_DEFINE=266 +PP_UNDEF=267 +PP_IFDEF=268 +PP_IFNDEF=269 +PP_ELSE=270 +PP_ENDIF=271 +PP_INCLUDE=272 +MRESOURCE=273 +INSTR_NONE=274 +INSTR_VAR=275 +INSTR_I=276 +INSTR_I8=277 +INSTR_R=278 +INSTR_METHOD=279 +INSTR_SIG=280 +INSTR_BRTARGET=281 +INSTR_SWITCH=282 +INSTR_TYPE=283 +INSTR_STRING=284 +INSTR_FIELD=285 +INSTR_TOK=286 +DOTTEDNAME=287 +ID=288 +HEXBYTE=289 +WS=290 +SINGLE_LINE_COMMENT=291 +COMMENT=292 +PERMISSION=293 +PERMISSIONSET=294 +EMITBYTE=295 +MAXSTACK=296 +ENTRYPOINT=297 +ZEROINIT=298 +LOCALS=299 +EXPORT=300 +OVERRIDE=301 +VTENTRY=302 'native'=1 'cil'=2 'optil'=3 @@ -385,193 +383,199 @@ VTENTRY=304 'arm'=81 'arm64'=82 'bytearray'=83 -'<'=84 -'>'=85 -'()'=86 +'()'=84 +'<'=85 +'>'=86 '/'=87 'algorithm'=88 'iidparam'=89 'pinned'=90 'modreq'=91 'modopt'=92 -'true'=93 -'false'=94 -'request'=95 -'demand'=96 -'assert'=97 -'deny'=98 -'permitonly'=99 -'linkcheck'=100 -'inheritcheck'=101 -'reqmin'=102 -'reqopt'=103 -'reqrefuse'=104 -'prejitgrant'=105 -'prejitdeny'=106 -'noncasdemand'=107 -'noncaslinkdemand'=108 -'noncasinheritance'=109 -'callconv'=110 -'mdtoken'=111 -'-'=112 -'byreflike'=113 -'.ctor'=114 -'.size'=115 -'.pack'=116 -'with'=117 -'.interfaceimpl'=118 -'.field'=119 -'marshal'=120 -'static'=121 -'initonly'=122 -'privatescope'=123 -'literal'=124 -'notserialized'=125 -'.event'=126 -'.addon'=127 -'.removeon'=128 -'.fire'=129 -'.other'=130 -'.property'=131 -'.set'=132 -'.get'=133 -'in'=134 -'out'=135 -'opt'=136 -'.method'=137 -'final'=138 -'virtual'=139 -'strict'=140 -'hidebysig'=141 -'newslot'=142 -'unmanagedexp'=143 -'reqsecobj'=144 -'pinvokeimpl'=145 -'nomangle'=146 -'lasterr'=147 -'winapi'=148 -'bestfit'=149 -'on'=150 -'off'=151 -'charmaperror'=152 -'.cctor'=153 -'init'=154 -'.try'=155 -'to'=156 -'filter'=157 -'catch'=158 -'finally'=159 -'fault'=160 -'handler'=161 -'.data'=162 -'tls'=163 -'.publicKey'=164 -'.ver'=165 -'.locale'=166 -'.publickeytoken'=167 -'forwarder'=168 -'::'=173 -'..'=174 -'null'=175 -'nullref'=176 -'.hash'=177 -'char'=178 -'string'=179 -'bool'=180 -'int8'=181 -'int16'=182 -'int32'=183 -'int64'=184 -'float32'=185 -'float64'=186 -'int'=191 -'type'=193 -'object'=194 -'.module'=195 -'value'=196 -'valuetype'=197 -'void'=198 -'enum'=199 -'custom'=200 -'fixed'=201 -'systring'=202 -'array'=203 -'variant'=204 -'currency'=205 -'syschar'=206 -'error'=207 -'decimal'=208 -'date'=209 -'bstr'=210 -'lpstr'=211 -'lpwstr'=212 -'lptstr'=213 -'objectref'=214 -'iunknown'=215 -'idispatch'=216 -'struct'=217 -'interface'=218 -'safearray'=219 +'unsigned'=93 +'true'=94 +'false'=95 +'request'=96 +'demand'=97 +'assert'=98 +'deny'=99 +'permitonly'=100 +'linkcheck'=101 +'inheritcheck'=102 +'reqmin'=103 +'reqopt'=104 +'reqrefuse'=105 +'prejitgrant'=106 +'prejitdeny'=107 +'noncasdemand'=108 +'noncaslinkdemand'=109 +'noncasinheritance'=110 +'callconv'=111 +'mdtoken'=112 +'-'=113 +'byreflike'=114 +'.ctor'=115 +'.size'=116 +'.pack'=117 +'with'=118 +'.interfaceimpl'=119 +'.field'=120 +'marshal'=121 +'static'=122 +'initonly'=123 +'privatescope'=124 +'literal'=125 +'notserialized'=126 +'volatile'=127 +'.event'=128 +'.addon'=129 +'.removeon'=130 +'.fire'=131 +'.other'=132 +'.property'=133 +'.set'=134 +'.get'=135 +'in'=136 +'out'=137 +'opt'=138 +'.method'=139 +'final'=140 +'virtual'=141 +'strict'=142 +'hidebysig'=143 +'newslot'=144 +'unmanagedexp'=145 +'reqsecobj'=146 +'pinvokeimpl'=147 +'nomangle'=148 +'lasterr'=149 +'winapi'=150 +'bestfit'=151 +'on'=152 +'off'=153 +'charmaperror'=154 +'.cctor'=155 +'il'=156 +'init'=157 +'.try'=158 +'to'=159 +'filter'=160 +'catch'=161 +'finally'=162 +'fault'=163 +'handler'=164 +'.data'=165 +'tls'=166 +'.publicKey'=167 +'.ver'=168 +'.locale'=169 +'.publickeytoken'=170 +'forwarder'=171 +'::'=175 +'...'=176 +'null'=177 +'nullref'=178 +'.hash'=179 +'string'=181 +'bool'=182 +'int8'=183 +'int16'=184 +'int32'=185 +'int64'=186 +'float32'=187 +'float64'=188 +'uint8'=189 +'uint16'=190 +'uint32'=191 +'uint64'=192 +'int'=193 +'uint'=194 +'type'=195 +'object'=196 +'.module'=197 +'value'=198 +'valuetype'=199 +'void'=200 +'enum'=201 +'custom'=202 +'fixed'=203 +'systring'=204 +'array'=205 +'variant'=206 +'currency'=207 +'syschar'=208 +'error'=209 +'decimal'=210 +'date'=211 +'bstr'=212 +'lpstr'=213 +'lpwstr'=214 +'lptstr'=215 +'objectref'=216 +'iunknown'=217 +'idispatch'=218 +'struct'=219 +'interface'=220 +'safearray'=221 'byvalstr'=222 'ansi'=223 -'tbstr'=225 -'method'=226 -'any'=227 -'lpstruct'=228 -'vector'=229 -'hresult'=230 -'carray'=231 -'userdefined'=232 -'record'=233 -'filetime'=234 -'blob'=235 -'stream'=236 -'storage'=237 -'streamed_object'=238 -'stored_object'=239 -'blob_object'=240 -'cf'=241 -'clsid'=242 -'instance'=243 -'explicit'=244 -'default'=245 -'vararg'=246 -'unmanaged'=247 -'cdecl'=248 -'stdcall'=249 -'thiscall'=250 -'fastcall'=251 -'!'=252 -'typedref'=254 -'.param'=257 -'constraint'=258 -'.this'=259 -'.base'=260 -'.nester'=261 -'&'=262 -'*'=264 -'.'=267 -'+'=268 -'#define'=269 -'#undef'=270 -'#ifdef'=271 -'#ifndef'=272 -'#else'=273 -'#endif'=274 -'#include'=275 -'.mresource'=276 -'ldc.i8'=280 -'calli'=283 -'switch'=285 -'ldstr'=287 -'ldtoken'=289 -'.permission'=295 -'.permissionset'=296 -'.emitbyte'=297 -'.maxstack'=298 -'.entrypoint'=299 -'.zeroinit'=300 -'.locals'=301 -'.export'=302 -'.override'=303 -'.vtentry'=304 +'tbstr'=224 +'method'=225 +'any'=226 +'lpstruct'=227 +'vector'=228 +'hresult'=229 +'carray'=230 +'userdefined'=231 +'record'=232 +'filetime'=233 +'blob'=234 +'stream'=235 +'storage'=236 +'streamed_object'=237 +'stored_object'=238 +'blob_object'=239 +'cf'=240 +'clsid'=241 +'instance'=242 +'explicit'=243 +'default'=244 +'vararg'=245 +'unmanaged'=246 +'cdecl'=247 +'stdcall'=248 +'thiscall'=249 +'fastcall'=250 +'!'=251 +'.param'=254 +'constraint'=255 +'.this'=256 +'.base'=257 +'.nester'=258 +'&'=259 +'*'=261 +'.'=264 +'+'=265 +'#define'=266 +'#undef'=267 +'#ifdef'=268 +'#ifndef'=269 +'#else'=270 +'#endif'=271 +'#include'=272 +'.mresource'=273 +'ldc.i8'=277 +'calli'=280 +'switch'=282 +'ldstr'=284 +'ldtoken'=286 +'.permission'=293 +'.permissionset'=294 +'.emitbyte'=295 +'.maxstack'=296 +'.entrypoint'=297 +'.zeroinit'=298 +'.locals'=299 +'.export'=300 +'.override'=301 +'.vtentry'=302 diff --git a/src/tools/ilasm/src/ILAssembler/gen/CILParser.cs b/src/tools/ilasm/src/ILAssembler/gen/CILParser.cs index ae2074e884ce30..c59c5df4f244d5 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CILParser.cs +++ b/src/tools/ilasm/src/ILAssembler/gen/CILParser.cs @@ -62,113 +62,116 @@ public const int T__149=150, T__150=151, T__151=152, T__152=153, T__153=154, T__154=155, T__155=156, T__156=157, T__157=158, T__158=159, T__159=160, T__160=161, T__161=162, T__162=163, T__163=164, T__164=165, T__165=166, T__166=167, - T__167=168, INT32=169, INT64=170, FLOAT64=171, HEXBYTE=172, DCOLON=173, - ELLIPSIS=174, NULL=175, NULLREF=176, HASH=177, CHAR=178, STRING=179, BOOL=180, - INT8=181, INT16=182, INT32_=183, INT64_=184, FLOAT32=185, FLOAT64_=186, - UINT8=187, UINT16=188, UINT32=189, UINT64=190, INT=191, UINT=192, TYPE=193, - OBJECT=194, MODULE=195, VALUE=196, VALUETYPE=197, VOID=198, ENUM=199, - CUSTOM=200, FIXED=201, SYSSTRING=202, ARRAY=203, VARIANT=204, CURRENCY=205, - SYSCHAR=206, ERROR=207, DECIMAL=208, DATE=209, BSTR=210, LPSTR=211, LPWSTR=212, - LPTSTR=213, OBJECTREF=214, IUNKNOWN=215, IDISPATCH=216, STRUCT=217, INTERFACE=218, - SAFEARRAY=219, NESTEDSTRUCT=220, VARIANTBOOL=221, BYVALSTR=222, ANSI=223, - ANSIBSTR=224, TBSTR=225, METHOD=226, ANY=227, LPSTRUCT=228, VECTOR=229, - HRESULT=230, CARRAY=231, USERDEFINED=232, RECORD=233, FILETIME=234, BLOB=235, - STREAM=236, STORAGE=237, STREAMED_OBJECT=238, STORED_OBJECT=239, BLOB_OBJECT=240, - CF=241, CLSID=242, INSTANCE=243, EXPLICIT=244, DEFAULT=245, VARARG=246, - UNMANAGED=247, CDECL=248, STDCALL=249, THISCALL=250, FASTCALL=251, TYPE_PARAMETER=252, - METHOD_TYPE_PARAMETER=253, TYPEDREF=254, NATIVE_INT=255, NATIVE_UINT=256, - PARAM=257, CONSTRAINT=258, THIS=259, BASE=260, NESTER=261, REF=262, ARRAY_TYPE_NO_BOUNDS=263, - PTR=264, QSTRING=265, SQSTRING=266, DOT=267, PLUS=268, PP_DEFINE=269, - PP_UNDEF=270, PP_IFDEF=271, PP_IFNDEF=272, PP_ELSE=273, PP_ENDIF=274, - PP_INCLUDE=275, MRESOURCE=276, INSTR_NONE=277, INSTR_VAR=278, INSTR_I=279, - INSTR_I8=280, INSTR_R=281, INSTR_METHOD=282, INSTR_SIG=283, INSTR_BRTARGET=284, - INSTR_SWITCH=285, INSTR_TYPE=286, INSTR_STRING=287, INSTR_FIELD=288, INSTR_TOK=289, - DOTTEDNAME=290, ID=291, WS=292, SINGLE_LINE_COMMENT=293, COMMENT=294, - PERMISSION=295, PERMISSIONSET=296, EMITBYTE=297, MAXSTACK=298, ENTRYPOINT=299, - ZEROINIT=300, LOCALS=301, EXPORT=302, OVERRIDE=303, VTENTRY=304, IncludedFileEof=305, - SyntheticIncludedFileEof=306; + T__167=168, T__168=169, T__169=170, T__170=171, INT32=172, INT64=173, + FLOAT64=174, DCOLON=175, ELLIPSIS=176, NULL=177, NULLREF=178, HASH=179, + CHAR=180, STRING=181, BOOL=182, INT8=183, INT16=184, INT32_=185, INT64_=186, + FLOAT32=187, FLOAT64_=188, UINT8=189, UINT16=190, UINT32=191, UINT64=192, + INT=193, UINT=194, TYPE=195, OBJECT=196, MODULE=197, VALUE=198, VALUETYPE=199, + VOID=200, ENUM=201, CUSTOM=202, FIXED=203, SYSSTRING=204, ARRAY=205, VARIANT=206, + CURRENCY=207, SYSCHAR=208, ERROR=209, DECIMAL=210, DATE=211, BSTR=212, + LPSTR=213, LPWSTR=214, LPTSTR=215, OBJECTREF=216, IUNKNOWN=217, IDISPATCH=218, + STRUCT=219, INTERFACE=220, SAFEARRAY=221, BYVALSTR=222, ANSI=223, TBSTR=224, + METHOD=225, ANY=226, LPSTRUCT=227, VECTOR=228, HRESULT=229, CARRAY=230, + USERDEFINED=231, RECORD=232, FILETIME=233, BLOB=234, STREAM=235, STORAGE=236, + STREAMED_OBJECT=237, STORED_OBJECT=238, BLOB_OBJECT=239, CF=240, CLSID=241, + INSTANCE=242, EXPLICIT=243, DEFAULT=244, VARARG=245, UNMANAGED=246, CDECL=247, + STDCALL=248, THISCALL=249, FASTCALL=250, TYPE_PARAMETER=251, METHOD_TYPE_PARAMETER=252, + TYPEDREF=253, PARAM=254, CONSTRAINT=255, THIS=256, BASE=257, NESTER=258, + REF=259, ARRAY_TYPE_NO_BOUNDS=260, PTR=261, QSTRING=262, SQSTRING=263, + DOT=264, PLUS=265, PP_DEFINE=266, PP_UNDEF=267, PP_IFDEF=268, PP_IFNDEF=269, + PP_ELSE=270, PP_ENDIF=271, PP_INCLUDE=272, MRESOURCE=273, INSTR_NONE=274, + INSTR_VAR=275, INSTR_I=276, INSTR_I8=277, INSTR_R=278, INSTR_METHOD=279, + INSTR_SIG=280, INSTR_BRTARGET=281, INSTR_SWITCH=282, INSTR_TYPE=283, INSTR_STRING=284, + INSTR_FIELD=285, INSTR_TOK=286, DOTTEDNAME=287, ID=288, HEXBYTE=289, WS=290, + SINGLE_LINE_COMMENT=291, COMMENT=292, PERMISSION=293, PERMISSIONSET=294, + EMITBYTE=295, MAXSTACK=296, ENTRYPOINT=297, ZEROINIT=298, LOCALS=299, + EXPORT=300, OVERRIDE=301, VTENTRY=302, IncludedFileEof=303, SyntheticIncludedFileEof=304; public const int - RULE_id = 0, RULE_dottedName = 1, RULE_compQstring = 2, RULE_decls = 3, - RULE_decl = 4, RULE_subsystem = 5, RULE_corflags = 6, RULE_alignment = 7, - RULE_imagebase = 8, RULE_stackreserve = 9, RULE_assemblyBlock = 10, RULE_mscorlib = 11, - RULE_languageDecl = 12, RULE_typelist = 13, RULE_int32 = 14, RULE_int64 = 15, - RULE_float64 = 16, RULE_intOrWildcard = 17, RULE_compControl = 18, RULE_typedefDecl = 19, - RULE_customDescr = 20, RULE_customDescrWithOwner = 21, RULE_customType = 22, - RULE_ownerType = 23, RULE_customBlobDescr = 24, RULE_customBlobArgs = 25, - RULE_customBlobNVPairs = 26, RULE_fieldOrProp = 27, RULE_serializType = 28, - RULE_serializTypeElement = 29, RULE_moduleHead = 30, RULE_vtfixupDecl = 31, - RULE_vtfixupAttr = 32, RULE_vtableDecl = 33, RULE_nameSpaceHead = 34, - RULE_classHead = 35, RULE_classAttr = 36, RULE_extendsClause = 37, RULE_implClause = 38, - RULE_classDecls = 39, RULE_implList = 40, RULE_esHead = 41, RULE_extSourceSpec = 42, - RULE_fileDecl = 43, RULE_fileAttr = 44, RULE_fileEntry = 45, RULE_asmAttrAny = 46, - RULE_asmAttr = 47, RULE_instr_none = 48, RULE_instr_var = 49, RULE_instr_i = 50, - RULE_instr_i8 = 51, RULE_instr_r = 52, RULE_instr_brtarget = 53, RULE_instr_method = 54, - RULE_instr_field = 55, RULE_instr_type = 56, RULE_instr_string = 57, RULE_instr_sig = 58, - RULE_instr_tok = 59, RULE_instr_switch = 60, RULE_instr = 61, RULE_labels = 62, - RULE_typeArgs = 63, RULE_bounds = 64, RULE_sigArgs = 65, RULE_sigArg = 66, - RULE_className = 67, RULE_slashedName = 68, RULE_assemblyDecls = 69, RULE_assemblyDecl = 70, - RULE_typeSpec = 71, RULE_nativeType = 72, RULE_nativeTypeArrayPointerInfo = 73, - RULE_nativeTypeElement = 74, RULE_iidParamIndex = 75, RULE_variantType = 76, - RULE_variantTypeElement = 77, RULE_type = 78, RULE_typeModifiers = 79, - RULE_elementType = 80, RULE_simpleType = 81, RULE_bound = 82, RULE_secDecl = 83, - RULE_secAttrSetBlob = 84, RULE_secAttrBlob = 85, RULE_nameValPairs = 86, - RULE_nameValPair = 87, RULE_truefalse = 88, RULE_caValue = 89, RULE_secAction = 90, - RULE_methodRef = 91, RULE_callConv = 92, RULE_callKind = 93, RULE_mdtoken = 94, - RULE_memberRef = 95, RULE_fieldRef = 96, RULE_typeList = 97, RULE_typarsClause = 98, - RULE_typarAttrib = 99, RULE_typarAttribs = 100, RULE_typar = 101, RULE_typars = 102, - RULE_tyBound = 103, RULE_genArity = 104, RULE_genArityNotEmpty = 105, - RULE_classDecl = 106, RULE_fieldDecl = 107, RULE_fieldAttr = 108, RULE_atOpt = 109, - RULE_initOpt = 110, RULE_repeatOpt = 111, RULE_eventHead = 112, RULE_eventAttr = 113, - RULE_eventDecls = 114, RULE_eventDecl = 115, RULE_propHead = 116, RULE_propAttr = 117, - RULE_propDecls = 118, RULE_propDecl = 119, RULE_marshalClause = 120, RULE_marshalBlob = 121, - RULE_paramAttr = 122, RULE_paramAttrElement = 123, RULE_methodHead = 124, - RULE_methAttr = 125, RULE_pinvImpl = 126, RULE_pinvAttr = 127, RULE_methodName = 128, - RULE_implAttr = 129, RULE_methodDecls = 130, RULE_methodDecl = 131, RULE_labelDecl = 132, - RULE_customDescrInMethodBody = 133, RULE_scopeBlock = 134, RULE_sehBlock = 135, - RULE_sehClauses = 136, RULE_tryBlock = 137, RULE_sehClause = 138, RULE_filterClause = 139, - RULE_catchClause = 140, RULE_finallyClause = 141, RULE_faultClause = 142, - RULE_handlerBlock = 143, RULE_dataDecl = 144, RULE_ddHead = 145, RULE_tls = 146, - RULE_ddBody = 147, RULE_ddItemList = 148, RULE_ddItemCount = 149, RULE_ddItem = 150, - RULE_fieldSerInit = 151, RULE_bytes = 152, RULE_hexbytes = 153, RULE_fieldInit = 154, - RULE_serInit = 155, RULE_f32seq = 156, RULE_f64seq = 157, RULE_i64seq = 158, - RULE_i32seq = 159, RULE_i16seq = 160, RULE_i8seq = 161, RULE_boolSeq = 162, - RULE_sqstringSeq = 163, RULE_classSeq = 164, RULE_classSeqElement = 165, - RULE_objSeq = 166, RULE_customAttrDecl = 167, RULE_asmOrRefDecl = 168, - RULE_assemblyRefHead = 169, RULE_assemblyRefDecls = 170, RULE_assemblyRefDecl = 171, - RULE_exptypeHead = 172, RULE_exportHead = 173, RULE_exptAttr = 174, RULE_exptypeDecls = 175, - RULE_exptypeDecl = 176, RULE_manifestResHead = 177, RULE_manresAttr = 178, - RULE_manifestResDecls = 179, RULE_manifestResDecl = 180; + RULE_id = 0, RULE_dottedName = 1, RULE_dottedNamePart = 2, RULE_compQstring = 3, + RULE_decls = 4, RULE_decl = 5, RULE_subsystem = 6, RULE_corflags = 7, + RULE_alignment = 8, RULE_imagebase = 9, RULE_stackreserve = 10, RULE_assemblyBlock = 11, + RULE_mscorlib = 12, RULE_languageDecl = 13, RULE_languageString = 14, + RULE_typelist = 15, RULE_int32 = 16, RULE_int64 = 17, RULE_float64 = 18, + RULE_intOrWildcard = 19, RULE_compControl = 20, RULE_typedefDecl = 21, + RULE_customDescr = 22, RULE_customDescrWithOwner = 23, RULE_customType = 24, + RULE_ownerType = 25, RULE_customBlobDescr = 26, RULE_customBlobArgs = 27, + RULE_customBlobNVPairs = 28, RULE_fieldOrProp = 29, RULE_serializType = 30, + RULE_serializTypeElement = 31, RULE_moduleHead = 32, RULE_vtfixupDecl = 33, + RULE_vtfixupAttr = 34, RULE_vtableDecl = 35, RULE_nameSpaceHead = 36, + RULE_classHead = 37, RULE_classAttr = 38, RULE_extendsClause = 39, RULE_implClause = 40, + RULE_classDecls = 41, RULE_implList = 42, RULE_esHead = 43, RULE_extSourceSpec = 44, + RULE_fileDecl = 45, RULE_fileAttr = 46, RULE_fileEntry = 47, RULE_asmAttrAny = 48, + RULE_asmAttr = 49, RULE_instr_none = 50, RULE_instr_var = 51, RULE_instr_i = 52, + RULE_instr_i8 = 53, RULE_instr_r = 54, RULE_instr_brtarget = 55, RULE_instr_method = 56, + RULE_instr_field = 57, RULE_instr_type = 58, RULE_instr_string = 59, RULE_instr_sig = 60, + RULE_instr_tok = 61, RULE_instr_switch = 62, RULE_instr = 63, RULE_labels = 64, + RULE_typeArgs = 65, RULE_bounds = 66, RULE_sigArgs = 67, RULE_sigArg = 68, + RULE_className = 69, RULE_slashedName = 70, RULE_assemblyDecls = 71, RULE_assemblyDecl = 72, + RULE_typeSpec = 73, RULE_nativeType = 74, RULE_nativeTypeArrayPointerInfo = 75, + RULE_nativeTypeElement = 76, RULE_iidParamIndex = 77, RULE_variantType = 78, + RULE_variantTypeElement = 79, RULE_type = 80, RULE_typeModifiers = 81, + RULE_elementType = 82, RULE_simpleType = 83, RULE_bound = 84, RULE_nativeInt = 85, + RULE_nativeUint = 86, RULE_secDecl = 87, RULE_secAttrSetBlob = 88, RULE_secAttrBlob = 89, + RULE_nameValPairs = 90, RULE_nameValPair = 91, RULE_truefalse = 92, RULE_caValue = 93, + RULE_secAction = 94, RULE_methodRef = 95, RULE_callConv = 96, RULE_callKind = 97, + RULE_mdtoken = 98, RULE_memberRef = 99, RULE_fieldRef = 100, RULE_typeList = 101, + RULE_typarsClause = 102, RULE_typarAttrib = 103, RULE_typarAttribs = 104, + RULE_typar = 105, RULE_typars = 106, RULE_tyBound = 107, RULE_genArity = 108, + RULE_genArityNotEmpty = 109, RULE_classDecl = 110, RULE_fieldDecl = 111, + RULE_fieldAttr = 112, RULE_atOpt = 113, RULE_initOpt = 114, RULE_repeatOpt = 115, + RULE_eventHead = 116, RULE_eventAttr = 117, RULE_eventDecls = 118, RULE_eventDecl = 119, + RULE_propHead = 120, RULE_propAttr = 121, RULE_propDecls = 122, RULE_propDecl = 123, + RULE_marshalClause = 124, RULE_marshalBlob = 125, RULE_paramAttr = 126, + RULE_paramAttrElement = 127, RULE_methodHead = 128, RULE_methAttr = 129, + RULE_pinvImpl = 130, RULE_pinvAttr = 131, RULE_methodName = 132, RULE_implAttr = 133, + RULE_methodDecls = 134, RULE_methodDecl = 135, RULE_labelDecl = 136, RULE_customDescrInMethodBody = 137, + RULE_scopeBlock = 138, RULE_sehBlock = 139, RULE_sehClauses = 140, RULE_tryBlock = 141, + RULE_sehClause = 142, RULE_filterClause = 143, RULE_catchClause = 144, + RULE_finallyClause = 145, RULE_faultClause = 146, RULE_handlerBlock = 147, + RULE_dataDecl = 148, RULE_ddHead = 149, RULE_tls = 150, RULE_ddBody = 151, + RULE_ddItemList = 152, RULE_ddItemCount = 153, RULE_ddItem = 154, RULE_fieldSerInit = 155, + RULE_bytes = 156, RULE_hexbyte = 157, RULE_fieldInit = 158, RULE_serInit = 159, + RULE_f32seq = 160, RULE_f64seq = 161, RULE_i64seq = 162, RULE_i32seq = 163, + RULE_i16seq = 164, RULE_i8seq = 165, RULE_boolSeq = 166, RULE_sqstringSeq = 167, + RULE_classSeq = 168, RULE_classSeqElement = 169, RULE_objSeq = 170, RULE_customAttrDecl = 171, + RULE_asmOrRefDecl = 172, RULE_assemblyRefHead = 173, RULE_assemblyRefDecls = 174, + RULE_assemblyRefDecl = 175, RULE_exptypeHead = 176, RULE_exportHead = 177, + RULE_exptAttr = 178, RULE_exptypeDecls = 179, RULE_exptypeDecl = 180, + RULE_manifestResHead = 181, RULE_manresAttr = 182, RULE_manifestResDecls = 183, + RULE_manifestResDecl = 184; public static readonly string[] ruleNames = { - "id", "dottedName", "compQstring", "decls", "decl", "subsystem", "corflags", - "alignment", "imagebase", "stackreserve", "assemblyBlock", "mscorlib", - "languageDecl", "typelist", "int32", "int64", "float64", "intOrWildcard", - "compControl", "typedefDecl", "customDescr", "customDescrWithOwner", "customType", - "ownerType", "customBlobDescr", "customBlobArgs", "customBlobNVPairs", - "fieldOrProp", "serializType", "serializTypeElement", "moduleHead", "vtfixupDecl", - "vtfixupAttr", "vtableDecl", "nameSpaceHead", "classHead", "classAttr", - "extendsClause", "implClause", "classDecls", "implList", "esHead", "extSourceSpec", - "fileDecl", "fileAttr", "fileEntry", "asmAttrAny", "asmAttr", "instr_none", - "instr_var", "instr_i", "instr_i8", "instr_r", "instr_brtarget", "instr_method", - "instr_field", "instr_type", "instr_string", "instr_sig", "instr_tok", - "instr_switch", "instr", "labels", "typeArgs", "bounds", "sigArgs", "sigArg", - "className", "slashedName", "assemblyDecls", "assemblyDecl", "typeSpec", - "nativeType", "nativeTypeArrayPointerInfo", "nativeTypeElement", "iidParamIndex", - "variantType", "variantTypeElement", "type", "typeModifiers", "elementType", - "simpleType", "bound", "secDecl", "secAttrSetBlob", "secAttrBlob", "nameValPairs", - "nameValPair", "truefalse", "caValue", "secAction", "methodRef", "callConv", - "callKind", "mdtoken", "memberRef", "fieldRef", "typeList", "typarsClause", - "typarAttrib", "typarAttribs", "typar", "typars", "tyBound", "genArity", - "genArityNotEmpty", "classDecl", "fieldDecl", "fieldAttr", "atOpt", "initOpt", - "repeatOpt", "eventHead", "eventAttr", "eventDecls", "eventDecl", "propHead", - "propAttr", "propDecls", "propDecl", "marshalClause", "marshalBlob", "paramAttr", - "paramAttrElement", "methodHead", "methAttr", "pinvImpl", "pinvAttr", - "methodName", "implAttr", "methodDecls", "methodDecl", "labelDecl", "customDescrInMethodBody", - "scopeBlock", "sehBlock", "sehClauses", "tryBlock", "sehClause", "filterClause", - "catchClause", "finallyClause", "faultClause", "handlerBlock", "dataDecl", - "ddHead", "tls", "ddBody", "ddItemList", "ddItemCount", "ddItem", "fieldSerInit", - "bytes", "hexbytes", "fieldInit", "serInit", "f32seq", "f64seq", "i64seq", - "i32seq", "i16seq", "i8seq", "boolSeq", "sqstringSeq", "classSeq", "classSeqElement", - "objSeq", "customAttrDecl", "asmOrRefDecl", "assemblyRefHead", "assemblyRefDecls", + "id", "dottedName", "dottedNamePart", "compQstring", "decls", "decl", + "subsystem", "corflags", "alignment", "imagebase", "stackreserve", "assemblyBlock", + "mscorlib", "languageDecl", "languageString", "typelist", "int32", "int64", + "float64", "intOrWildcard", "compControl", "typedefDecl", "customDescr", + "customDescrWithOwner", "customType", "ownerType", "customBlobDescr", + "customBlobArgs", "customBlobNVPairs", "fieldOrProp", "serializType", + "serializTypeElement", "moduleHead", "vtfixupDecl", "vtfixupAttr", "vtableDecl", + "nameSpaceHead", "classHead", "classAttr", "extendsClause", "implClause", + "classDecls", "implList", "esHead", "extSourceSpec", "fileDecl", "fileAttr", + "fileEntry", "asmAttrAny", "asmAttr", "instr_none", "instr_var", "instr_i", + "instr_i8", "instr_r", "instr_brtarget", "instr_method", "instr_field", + "instr_type", "instr_string", "instr_sig", "instr_tok", "instr_switch", + "instr", "labels", "typeArgs", "bounds", "sigArgs", "sigArg", "className", + "slashedName", "assemblyDecls", "assemblyDecl", "typeSpec", "nativeType", + "nativeTypeArrayPointerInfo", "nativeTypeElement", "iidParamIndex", "variantType", + "variantTypeElement", "type", "typeModifiers", "elementType", "simpleType", + "bound", "nativeInt", "nativeUint", "secDecl", "secAttrSetBlob", "secAttrBlob", + "nameValPairs", "nameValPair", "truefalse", "caValue", "secAction", "methodRef", + "callConv", "callKind", "mdtoken", "memberRef", "fieldRef", "typeList", + "typarsClause", "typarAttrib", "typarAttribs", "typar", "typars", "tyBound", + "genArity", "genArityNotEmpty", "classDecl", "fieldDecl", "fieldAttr", + "atOpt", "initOpt", "repeatOpt", "eventHead", "eventAttr", "eventDecls", + "eventDecl", "propHead", "propAttr", "propDecls", "propDecl", "marshalClause", + "marshalBlob", "paramAttr", "paramAttrElement", "methodHead", "methAttr", + "pinvImpl", "pinvAttr", "methodName", "implAttr", "methodDecls", "methodDecl", + "labelDecl", "customDescrInMethodBody", "scopeBlock", "sehBlock", "sehClauses", + "tryBlock", "sehClause", "filterClause", "catchClause", "finallyClause", + "faultClause", "handlerBlock", "dataDecl", "ddHead", "tls", "ddBody", + "ddItemList", "ddItemCount", "ddItem", "fieldSerInit", "bytes", "hexbyte", + "fieldInit", "serInit", "f32seq", "f64seq", "i64seq", "i32seq", "i16seq", + "i8seq", "boolSeq", "sqstringSeq", "classSeq", "classSeqElement", "objSeq", + "customAttrDecl", "asmOrRefDecl", "assemblyRefHead", "assemblyRefDecls", "assemblyRefDecl", "exptypeHead", "exportHead", "exptAttr", "exptypeDecls", "exptypeDecl", "manifestResHead", "manresAttr", "manifestResDecls", "manifestResDecl" }; @@ -188,40 +191,40 @@ public const int "'famandassem'", "'famorassem'", "'beforefieldinit'", "'specialname'", "'rtspecialname'", "'flags'", "'extends'", "'implements'", "'.line'", "'#line'", "':'", "'nometadata'", "'retargetable'", "'noplatform'", "'legacy library'", - "'x86'", "'amd64'", "'arm'", "'arm64'", "'bytearray'", "'<'", "'>'", "'()'", - "'/'", "'algorithm'", "'iidparam'", "'pinned'", "'modreq'", "'modopt'", - "'true'", "'false'", "'request'", "'demand'", "'assert'", "'deny'", "'permitonly'", - "'linkcheck'", "'inheritcheck'", "'reqmin'", "'reqopt'", "'reqrefuse'", - "'prejitgrant'", "'prejitdeny'", "'noncasdemand'", "'noncaslinkdemand'", - "'noncasinheritance'", "'callconv'", "'mdtoken'", "'-'", "'byreflike'", - "'.ctor'", "'.size'", "'.pack'", "'with'", "'.interfaceimpl'", "'.field'", - "'marshal'", "'static'", "'initonly'", "'privatescope'", "'literal'", - "'notserialized'", "'.event'", "'.addon'", "'.removeon'", "'.fire'", "'.other'", - "'.property'", "'.set'", "'.get'", "'in'", "'out'", "'opt'", "'.method'", - "'final'", "'virtual'", "'strict'", "'hidebysig'", "'newslot'", "'unmanagedexp'", - "'reqsecobj'", "'pinvokeimpl'", "'nomangle'", "'lasterr'", "'winapi'", - "'bestfit'", "'on'", "'off'", "'charmaperror'", "'.cctor'", "'init'", - "'.try'", "'to'", "'filter'", "'catch'", "'finally'", "'fault'", "'handler'", - "'.data'", "'tls'", "'.publicKey'", "'.ver'", "'.locale'", "'.publickeytoken'", - "'forwarder'", null, null, null, null, "'::'", "'..'", "'null'", "'nullref'", - "'.hash'", "'char'", "'string'", "'bool'", "'int8'", "'int16'", "'int32'", - "'int64'", "'float32'", "'float64'", null, null, null, null, "'int'", - null, "'type'", "'object'", "'.module'", "'value'", "'valuetype'", "'void'", - "'enum'", "'custom'", "'fixed'", "'systring'", "'array'", "'variant'", - "'currency'", "'syschar'", "'error'", "'decimal'", "'date'", "'bstr'", - "'lpstr'", "'lpwstr'", "'lptstr'", "'objectref'", "'iunknown'", "'idispatch'", - "'struct'", "'interface'", "'safearray'", null, null, "'byvalstr'", "'ansi'", - null, "'tbstr'", "'method'", "'any'", "'lpstruct'", "'vector'", "'hresult'", - "'carray'", "'userdefined'", "'record'", "'filetime'", "'blob'", "'stream'", - "'storage'", "'streamed_object'", "'stored_object'", "'blob_object'", - "'cf'", "'clsid'", "'instance'", "'explicit'", "'default'", "'vararg'", - "'unmanaged'", "'cdecl'", "'stdcall'", "'thiscall'", "'fastcall'", "'!'", - null, "'typedref'", null, null, "'.param'", "'constraint'", "'.this'", + "'x86'", "'amd64'", "'arm'", "'arm64'", "'bytearray'", "'()'", "'<'", + "'>'", "'/'", "'algorithm'", "'iidparam'", "'pinned'", "'modreq'", "'modopt'", + "'unsigned'", "'true'", "'false'", "'request'", "'demand'", "'assert'", + "'deny'", "'permitonly'", "'linkcheck'", "'inheritcheck'", "'reqmin'", + "'reqopt'", "'reqrefuse'", "'prejitgrant'", "'prejitdeny'", "'noncasdemand'", + "'noncaslinkdemand'", "'noncasinheritance'", "'callconv'", "'mdtoken'", + "'-'", "'byreflike'", "'.ctor'", "'.size'", "'.pack'", "'with'", "'.interfaceimpl'", + "'.field'", "'marshal'", "'static'", "'initonly'", "'privatescope'", "'literal'", + "'notserialized'", "'volatile'", "'.event'", "'.addon'", "'.removeon'", + "'.fire'", "'.other'", "'.property'", "'.set'", "'.get'", "'in'", "'out'", + "'opt'", "'.method'", "'final'", "'virtual'", "'strict'", "'hidebysig'", + "'newslot'", "'unmanagedexp'", "'reqsecobj'", "'pinvokeimpl'", "'nomangle'", + "'lasterr'", "'winapi'", "'bestfit'", "'on'", "'off'", "'charmaperror'", + "'.cctor'", "'il'", "'init'", "'.try'", "'to'", "'filter'", "'catch'", + "'finally'", "'fault'", "'handler'", "'.data'", "'tls'", "'.publicKey'", + "'.ver'", "'.locale'", "'.publickeytoken'", "'forwarder'", null, null, + null, "'::'", "'...'", "'null'", "'nullref'", "'.hash'", null, "'string'", + "'bool'", "'int8'", "'int16'", "'int32'", "'int64'", "'float32'", "'float64'", + "'uint8'", "'uint16'", "'uint32'", "'uint64'", "'int'", "'uint'", "'type'", + "'object'", "'.module'", "'value'", "'valuetype'", "'void'", "'enum'", + "'custom'", "'fixed'", "'systring'", "'array'", "'variant'", "'currency'", + "'syschar'", "'error'", "'decimal'", "'date'", "'bstr'", "'lpstr'", "'lpwstr'", + "'lptstr'", "'objectref'", "'iunknown'", "'idispatch'", "'struct'", "'interface'", + "'safearray'", "'byvalstr'", "'ansi'", "'tbstr'", "'method'", "'any'", + "'lpstruct'", "'vector'", "'hresult'", "'carray'", "'userdefined'", "'record'", + "'filetime'", "'blob'", "'stream'", "'storage'", "'streamed_object'", + "'stored_object'", "'blob_object'", "'cf'", "'clsid'", "'instance'", "'explicit'", + "'default'", "'vararg'", "'unmanaged'", "'cdecl'", "'stdcall'", "'thiscall'", + "'fastcall'", "'!'", null, null, "'.param'", "'constraint'", "'.this'", "'.base'", "'.nester'", "'&'", null, "'*'", null, null, "'.'", "'+'", "'#define'", "'#undef'", "'#ifdef'", "'#ifndef'", "'#else'", "'#endif'", "'#include'", "'.mresource'", null, null, null, "'ldc.i8'", null, null, "'calli'", null, "'switch'", null, "'ldstr'", null, "'ldtoken'", null, - null, null, null, null, "'.permission'", "'.permissionset'", "'.emitbyte'", + null, null, null, null, null, "'.permission'", "'.permissionset'", "'.emitbyte'", "'.maxstack'", "'.entrypoint'", "'.zeroinit'", "'.locals'", "'.export'", "'.override'", "'.vtentry'" }; @@ -240,25 +243,24 @@ public const int null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, "INT32", "INT64", "FLOAT64", "HEXBYTE", "DCOLON", "ELLIPSIS", "NULL", - "NULLREF", "HASH", "CHAR", "STRING", "BOOL", "INT8", "INT16", "INT32_", - "INT64_", "FLOAT32", "FLOAT64_", "UINT8", "UINT16", "UINT32", "UINT64", - "INT", "UINT", "TYPE", "OBJECT", "MODULE", "VALUE", "VALUETYPE", "VOID", - "ENUM", "CUSTOM", "FIXED", "SYSSTRING", "ARRAY", "VARIANT", "CURRENCY", + null, null, null, null, "INT32", "INT64", "FLOAT64", "DCOLON", "ELLIPSIS", + "NULL", "NULLREF", "HASH", "CHAR", "STRING", "BOOL", "INT8", "INT16", + "INT32_", "INT64_", "FLOAT32", "FLOAT64_", "UINT8", "UINT16", "UINT32", + "UINT64", "INT", "UINT", "TYPE", "OBJECT", "MODULE", "VALUE", "VALUETYPE", + "VOID", "ENUM", "CUSTOM", "FIXED", "SYSSTRING", "ARRAY", "VARIANT", "CURRENCY", "SYSCHAR", "ERROR", "DECIMAL", "DATE", "BSTR", "LPSTR", "LPWSTR", "LPTSTR", "OBJECTREF", "IUNKNOWN", "IDISPATCH", "STRUCT", "INTERFACE", "SAFEARRAY", - "NESTEDSTRUCT", "VARIANTBOOL", "BYVALSTR", "ANSI", "ANSIBSTR", "TBSTR", - "METHOD", "ANY", "LPSTRUCT", "VECTOR", "HRESULT", "CARRAY", "USERDEFINED", - "RECORD", "FILETIME", "BLOB", "STREAM", "STORAGE", "STREAMED_OBJECT", - "STORED_OBJECT", "BLOB_OBJECT", "CF", "CLSID", "INSTANCE", "EXPLICIT", - "DEFAULT", "VARARG", "UNMANAGED", "CDECL", "STDCALL", "THISCALL", "FASTCALL", - "TYPE_PARAMETER", "METHOD_TYPE_PARAMETER", "TYPEDREF", "NATIVE_INT", "NATIVE_UINT", - "PARAM", "CONSTRAINT", "THIS", "BASE", "NESTER", "REF", "ARRAY_TYPE_NO_BOUNDS", + "BYVALSTR", "ANSI", "TBSTR", "METHOD", "ANY", "LPSTRUCT", "VECTOR", "HRESULT", + "CARRAY", "USERDEFINED", "RECORD", "FILETIME", "BLOB", "STREAM", "STORAGE", + "STREAMED_OBJECT", "STORED_OBJECT", "BLOB_OBJECT", "CF", "CLSID", "INSTANCE", + "EXPLICIT", "DEFAULT", "VARARG", "UNMANAGED", "CDECL", "STDCALL", "THISCALL", + "FASTCALL", "TYPE_PARAMETER", "METHOD_TYPE_PARAMETER", "TYPEDREF", "PARAM", + "CONSTRAINT", "THIS", "BASE", "NESTER", "REF", "ARRAY_TYPE_NO_BOUNDS", "PTR", "QSTRING", "SQSTRING", "DOT", "PLUS", "PP_DEFINE", "PP_UNDEF", "PP_IFDEF", "PP_IFNDEF", "PP_ELSE", "PP_ENDIF", "PP_INCLUDE", "MRESOURCE", "INSTR_NONE", "INSTR_VAR", "INSTR_I", "INSTR_I8", "INSTR_R", "INSTR_METHOD", "INSTR_SIG", "INSTR_BRTARGET", "INSTR_SWITCH", "INSTR_TYPE", "INSTR_STRING", - "INSTR_FIELD", "INSTR_TOK", "DOTTEDNAME", "ID", "WS", "SINGLE_LINE_COMMENT", + "INSTR_FIELD", "INSTR_TOK", "DOTTEDNAME", "ID", "HEXBYTE", "WS", "SINGLE_LINE_COMMENT", "COMMENT", "PERMISSION", "PERMISSIONSET", "EMITBYTE", "MAXSTACK", "ENTRYPOINT", "ZEROINIT", "LOCALS", "EXPORT", "OVERRIDE", "VTENTRY", "IncludedFileEof", "SyntheticIncludedFileEof" @@ -298,6 +300,8 @@ public CILParser(ITokenStream input, TextWriter output, TextWriter errorOutput) public partial class IdContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(CILParser.ID, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UNMANAGED() { return GetToken(CILParser.UNMANAGED, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VALUE() { return GetToken(CILParser.VALUE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INSTANCE() { return GetToken(CILParser.INSTANCE, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SQSTRING() { return GetToken(CILParser.SQSTRING, 0); } public IdContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) @@ -320,9 +324,9 @@ public IdContext id() { try { EnterOuterAlt(_localctx, 1); { - State = 362; + State = 370; _la = TokenStream.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 65534L) != 0) || ((((_la - 247)) & ~0x3f) == 0 && ((1L << (_la - 247)) & 17592186568705L) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 65534L) != 0) || ((((_la - 198)) & ~0x3f) == 0 && ((1L << (_la - 198)) & 299067162755073L) != 0) || _la==SQSTRING || _la==ID) ) { ErrorHandler.RecoverInline(this); } else { @@ -344,14 +348,17 @@ public IdContext id() { public partial class DottedNameContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DOTTEDNAME() { return GetToken(CILParser.DOTTEDNAME, 0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] ID() { return GetTokens(CILParser.ID); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID(int i) { - return GetToken(CILParser.ID, i); + [System.Diagnostics.DebuggerNonUserCode] public DottedNamePartContext[] dottedNamePart() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public DottedNamePartContext dottedNamePart(int i) { + return GetRuleContext(i); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] DOT() { return GetTokens(CILParser.DOT); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DOT(int i) { return GetToken(CILParser.DOT, i); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SQSTRING() { return GetToken(CILParser.SQSTRING, 0); } public DottedNameContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -371,43 +378,52 @@ public DottedNameContext dottedName() { EnterRule(_localctx, 2, RULE_dottedName); try { int _alt; - State = 373; + State = 383; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case DOTTEDNAME: EnterOuterAlt(_localctx, 1); { - State = 364; + State = 372; Match(DOTTEDNAME); } break; + case VALUE: + case INSTANCE: case ID: EnterOuterAlt(_localctx, 2); { { - State = 369; + State = 378; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,0,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 365; - Match(ID); - State = 366; + State = 373; + dottedNamePart(); + State = 374; Match(DOT); } } } - State = 371; + State = 380; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,0,Context); } - State = 372; - Match(ID); + State = 381; + dottedNamePart(); } } break; + case SQSTRING: + EnterOuterAlt(_localctx, 3); + { + State = 382; + Match(SQSTRING); + } + break; default: throw new NoViableAltException(this); } @@ -423,6 +439,53 @@ public DottedNameContext dottedName() { return _localctx; } + public partial class DottedNamePartContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(CILParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VALUE() { return GetToken(CILParser.VALUE, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INSTANCE() { return GetToken(CILParser.INSTANCE, 0); } + public DottedNamePartContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_dottedNamePart; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + ICILVisitor typedVisitor = visitor as ICILVisitor; + if (typedVisitor != null) return typedVisitor.VisitDottedNamePart(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public DottedNamePartContext dottedNamePart() { + DottedNamePartContext _localctx = new DottedNamePartContext(Context, State); + EnterRule(_localctx, 4, RULE_dottedNamePart); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 385; + _la = TokenStream.LA(1); + if ( !(_la==VALUE || _la==INSTANCE || _la==ID) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + public partial class CompQstringContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] QSTRING() { return GetTokens(CILParser.QSTRING); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode QSTRING(int i) { @@ -448,30 +511,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CompQstringContext compQstring() { CompQstringContext _localctx = new CompQstringContext(Context, State); - EnterRule(_localctx, 4, RULE_compQstring); + EnterRule(_localctx, 6, RULE_compQstring); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 379; + State = 391; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,2,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 375; + State = 387; Match(QSTRING); - State = 376; + State = 388; Match(PLUS); } } } - State = 381; + State = 393; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,2,Context); } - State = 382; + State = 394; Match(QSTRING); } } @@ -509,25 +572,25 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DeclsContext decls() { DeclsContext _localctx = new DeclsContext(Context, State); - EnterRule(_localctx, 6, RULE_decls); + EnterRule(_localctx, 8, RULE_decls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 385; + State = 399; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - do { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 986285952729088L) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & 281474976710659L) != 0) || ((((_la - 139)) & ~0x3f) == 0 && ((1L << (_la - 139)) & 864691128522244097L) != 0) || ((((_la - 242)) & ~0x3f) == 0 && ((1L << (_la - 242)) & 6860956837609473L) != 0)) { { { - State = 384; + State = 396; decl(); } } - State = 387; + State = 401; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & 986285952729088L) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & 140737488355331L) != 0) || ((((_la - 137)) & ~0x3f) == 0 && ((1L << (_la - 137)) & 288230376185266177L) != 0) || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 207618303L) != 0) ); + } } } catch (RecognitionException re) { @@ -654,226 +717,226 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DeclContext decl() { DeclContext _localctx = new DeclContext(Context, State); - EnterRule(_localctx, 8, RULE_decl); + EnterRule(_localctx, 10, RULE_decl); try { - State = 439; + State = 452; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,4,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 389; + State = 402; classHead(); - State = 390; + State = 403; Match(T__15); - State = 391; + State = 404; classDecls(); - State = 392; + State = 405; Match(T__16); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 394; + State = 407; nameSpaceHead(); - State = 395; + State = 408; Match(T__15); - State = 396; + State = 409; decls(); - State = 397; + State = 410; Match(T__16); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 399; + State = 412; methodHead(); - State = 400; + State = 413; Match(T__15); - State = 401; + State = 414; methodDecls(); - State = 402; + State = 415; Match(T__16); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 404; + State = 417; fieldDecl(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 405; + State = 418; dataDecl(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 406; + State = 419; vtableDecl(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 407; + State = 420; vtfixupDecl(); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 408; + State = 421; extSourceSpec(); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 409; + State = 422; fileDecl(); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 410; + State = 423; assemblyBlock(); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 411; + State = 424; assemblyRefHead(); - State = 412; + State = 425; Match(T__15); - State = 413; + State = 426; assemblyRefDecls(); - State = 414; + State = 427; Match(T__16); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 416; + State = 429; exptypeHead(); - State = 417; + State = 430; Match(T__15); - State = 418; + State = 431; exptypeDecls(); - State = 419; + State = 432; Match(T__16); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 421; + State = 434; manifestResHead(); - State = 422; + State = 435; Match(T__15); - State = 423; + State = 436; manifestResDecls(); - State = 424; + State = 437; Match(T__16); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 426; + State = 439; moduleHead(); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 427; + State = 440; secDecl(); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 428; + State = 441; customAttrDecl(); } break; case 17: EnterOuterAlt(_localctx, 17); { - State = 429; + State = 442; subsystem(); } break; case 18: EnterOuterAlt(_localctx, 18); { - State = 430; + State = 443; corflags(); } break; case 19: EnterOuterAlt(_localctx, 19); { - State = 431; + State = 444; alignment(); } break; case 20: EnterOuterAlt(_localctx, 20); { - State = 432; + State = 445; imagebase(); } break; case 21: EnterOuterAlt(_localctx, 21); { - State = 433; + State = 446; stackreserve(); } break; case 22: EnterOuterAlt(_localctx, 22); { - State = 434; + State = 447; languageDecl(); } break; case 23: EnterOuterAlt(_localctx, 23); { - State = 435; + State = 448; typedefDecl(); } break; case 24: EnterOuterAlt(_localctx, 24); { - State = 436; + State = 449; compControl(); } break; case 25: EnterOuterAlt(_localctx, 25); { - State = 437; + State = 450; typelist(); } break; case 26: EnterOuterAlt(_localctx, 26); { - State = 438; + State = 451; mscorlib(); } break; @@ -910,13 +973,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SubsystemContext subsystem() { SubsystemContext _localctx = new SubsystemContext(Context, State); - EnterRule(_localctx, 10, RULE_subsystem); + EnterRule(_localctx, 12, RULE_subsystem); try { EnterOuterAlt(_localctx, 1); { - State = 441; + State = 454; Match(T__17); - State = 442; + State = 455; int32(); } } @@ -951,13 +1014,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CorflagsContext corflags() { CorflagsContext _localctx = new CorflagsContext(Context, State); - EnterRule(_localctx, 12, RULE_corflags); + EnterRule(_localctx, 14, RULE_corflags); try { EnterOuterAlt(_localctx, 1); { - State = 444; + State = 457; Match(T__18); - State = 445; + State = 458; int32(); } } @@ -992,15 +1055,15 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AlignmentContext alignment() { AlignmentContext _localctx = new AlignmentContext(Context, State); - EnterRule(_localctx, 14, RULE_alignment); + EnterRule(_localctx, 16, RULE_alignment); try { EnterOuterAlt(_localctx, 1); { - State = 447; + State = 460; Match(T__19); - State = 448; + State = 461; Match(T__20); - State = 449; + State = 462; int32(); } } @@ -1035,13 +1098,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ImagebaseContext imagebase() { ImagebaseContext _localctx = new ImagebaseContext(Context, State); - EnterRule(_localctx, 16, RULE_imagebase); + EnterRule(_localctx, 18, RULE_imagebase); try { EnterOuterAlt(_localctx, 1); { - State = 451; + State = 464; Match(T__21); - State = 452; + State = 465; int64(); } } @@ -1076,13 +1139,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public StackreserveContext stackreserve() { StackreserveContext _localctx = new StackreserveContext(Context, State); - EnterRule(_localctx, 18, RULE_stackreserve); + EnterRule(_localctx, 20, RULE_stackreserve); try { EnterOuterAlt(_localctx, 1); { - State = 454; + State = 467; Match(T__22); - State = 455; + State = 468; int64(); } } @@ -1123,21 +1186,21 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AssemblyBlockContext assemblyBlock() { AssemblyBlockContext _localctx = new AssemblyBlockContext(Context, State); - EnterRule(_localctx, 20, RULE_assemblyBlock); + EnterRule(_localctx, 22, RULE_assemblyBlock); try { EnterOuterAlt(_localctx, 1); { - State = 457; + State = 470; Match(T__23); - State = 458; + State = 471; asmAttr(); - State = 459; + State = 472; dottedName(); - State = 460; + State = 473; Match(T__15); - State = 461; + State = 474; assemblyDecls(); - State = 462; + State = 475; Match(T__16); } } @@ -1169,11 +1232,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MscorlibContext mscorlib() { MscorlibContext _localctx = new MscorlibContext(Context, State); - EnterRule(_localctx, 22, RULE_mscorlib); + EnterRule(_localctx, 24, RULE_mscorlib); try { EnterOuterAlt(_localctx, 1); { - State = 464; + State = 477; Match(T__24); } } @@ -1189,9 +1252,15 @@ public MscorlibContext mscorlib() { } public partial class LanguageDeclContext : ParserRuleContext { - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] SQSTRING() { return GetTokens(CILParser.SQSTRING); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SQSTRING(int i) { - return GetToken(CILParser.SQSTRING, i); + [System.Diagnostics.DebuggerNonUserCode] public LanguageStringContext[] languageString() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public LanguageStringContext languageString(int i) { + return GetRuleContext(i); + } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] QSTRING() { return GetTokens(CILParser.QSTRING); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode QSTRING(int i) { + return GetToken(CILParser.QSTRING, i); } public LanguageDeclContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) @@ -1209,48 +1278,72 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public LanguageDeclContext languageDecl() { LanguageDeclContext _localctx = new LanguageDeclContext(Context, State); - EnterRule(_localctx, 24, RULE_languageDecl); + EnterRule(_localctx, 26, RULE_languageDecl); try { - State = 478; + State = 500; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,5,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 466; + State = 479; Match(T__25); - State = 467; - Match(SQSTRING); + State = 480; + languageString(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 468; + State = 481; Match(T__25); - State = 469; - Match(SQSTRING); - State = 470; + State = 482; + languageString(); + State = 483; Match(T__26); - State = 471; - Match(SQSTRING); + State = 484; + languageString(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 472; + State = 486; Match(T__25); - State = 473; - Match(SQSTRING); - State = 474; + State = 487; + languageString(); + State = 488; Match(T__26); - State = 475; - Match(SQSTRING); - State = 476; + State = 489; + languageString(); + State = 490; Match(T__26); - State = 477; - Match(SQSTRING); + State = 491; + languageString(); + } + break; + case 4: + EnterOuterAlt(_localctx, 4); + { + State = 493; + Match(T__25); + State = 494; + Match(QSTRING); + State = 495; + Match(QSTRING); + } + break; + case 5: + EnterOuterAlt(_localctx, 5); + { + State = 496; + Match(T__25); + State = 497; + Match(QSTRING); + State = 498; + Match(QSTRING); + State = 499; + Match(QSTRING); } break; } @@ -1266,6 +1359,52 @@ public LanguageDeclContext languageDecl() { return _localctx; } + public partial class LanguageStringContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SQSTRING() { return GetToken(CILParser.SQSTRING, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode QSTRING() { return GetToken(CILParser.QSTRING, 0); } + public LanguageStringContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_languageString; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + ICILVisitor typedVisitor = visitor as ICILVisitor; + if (typedVisitor != null) return typedVisitor.VisitLanguageString(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public LanguageStringContext languageString() { + LanguageStringContext _localctx = new LanguageStringContext(Context, State); + EnterRule(_localctx, 28, RULE_languageString); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 502; + _la = TokenStream.LA(1); + if ( !(_la==QSTRING || _la==SQSTRING) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + public partial class TypelistContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public ClassNameContext[] className() { return GetRuleContexts(); @@ -1289,30 +1428,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TypelistContext typelist() { TypelistContext _localctx = new TypelistContext(Context, State); - EnterRule(_localctx, 26, RULE_typelist); + EnterRule(_localctx, 30, RULE_typelist); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 480; + State = 504; Match(T__27); - State = 481; + State = 505; Match(T__15); - State = 485; + State = 509; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (_la==T__40 || _la==T__110 || ((((_la - 259)) & ~0x3f) == 0 && ((1L << (_la - 259)) & 6442450951L) != 0)) { + while (_la==T__40 || _la==T__111 || ((((_la - 198)) & ~0x3f) == 0 && ((1L << (_la - 198)) & 2017630225248026625L) != 0) || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 50331649L) != 0)) { { { - State = 482; + State = 506; className(); } } - State = 487; + State = 511; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 488; + State = 512; Match(T__16); } } @@ -1345,11 +1484,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Int32Context int32() { Int32Context _localctx = new Int32Context(Context, State); - EnterRule(_localctx, 28, RULE_int32); + EnterRule(_localctx, 32, RULE_int32); try { EnterOuterAlt(_localctx, 1); { - State = 490; + State = 514; Match(INT32); } } @@ -1383,12 +1522,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Int64Context int64() { Int64Context _localctx = new Int64Context(Context, State); - EnterRule(_localctx, 30, RULE_int64); + EnterRule(_localctx, 34, RULE_int64); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 492; + State = 516; _la = TokenStream.LA(1); if ( !(_la==INT32 || _la==INT64) ) { ErrorHandler.RecoverInline(this); @@ -1412,10 +1551,11 @@ public Int64Context int64() { public partial class Float64Context : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FLOAT64() { return GetToken(CILParser.FLOAT64, 0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FLOAT32() { return GetToken(CILParser.FLOAT32, 0); } [System.Diagnostics.DebuggerNonUserCode] public Int32Context int32() { return GetRuleContext(0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode DOT() { return GetToken(CILParser.DOT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FLOAT32() { return GetToken(CILParser.FLOAT32, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode FLOAT64_() { return GetToken(CILParser.FLOAT64_, 0); } [System.Diagnostics.DebuggerNonUserCode] public Int64Context int64() { return GetRuleContext(0); @@ -1436,46 +1576,60 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Float64Context float64() { Float64Context _localctx = new Float64Context(Context, State); - EnterRule(_localctx, 32, RULE_float64); + EnterRule(_localctx, 36, RULE_float64); try { - State = 505; + State = 533; ErrorHandler.Sync(this); - switch (TokenStream.LA(1)) { - case FLOAT64: + switch ( Interpreter.AdaptivePredict(TokenStream,7,Context) ) { + case 1: EnterOuterAlt(_localctx, 1); { - State = 494; + State = 518; Match(FLOAT64); } break; - case FLOAT32: + case 2: EnterOuterAlt(_localctx, 2); { - State = 495; + State = 519; + int32(); + State = 520; + Match(DOT); + } + break; + case 3: + EnterOuterAlt(_localctx, 3); + { + State = 522; + int32(); + } + break; + case 4: + EnterOuterAlt(_localctx, 4); + { + State = 523; Match(FLOAT32); - State = 496; + State = 524; Match(T__28); - State = 497; + State = 525; int32(); - State = 498; + State = 526; Match(T__29); } break; - case FLOAT64_: - EnterOuterAlt(_localctx, 3); + case 5: + EnterOuterAlt(_localctx, 5); { - State = 500; + State = 528; Match(FLOAT64_); - State = 501; + State = 529; Match(T__28); - State = 502; + State = 530; int64(); - State = 503; + State = 531; Match(T__29); } break; - default: - throw new NoViableAltException(this); } } catch (RecognitionException re) { @@ -1510,22 +1664,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public IntOrWildcardContext intOrWildcard() { IntOrWildcardContext _localctx = new IntOrWildcardContext(Context, State); - EnterRule(_localctx, 34, RULE_intOrWildcard); + EnterRule(_localctx, 38, RULE_intOrWildcard); try { - State = 509; + State = 537; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case INT32: EnterOuterAlt(_localctx, 1); { - State = 507; + State = 535; int32(); } break; case PTR: EnterOuterAlt(_localctx, 2); { - State = 508; + State = 536; Match(PTR); } break; @@ -1570,85 +1724,85 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CompControlContext compControl() { CompControlContext _localctx = new CompControlContext(Context, State); - EnterRule(_localctx, 36, RULE_compControl); + EnterRule(_localctx, 40, RULE_compControl); try { - State = 527; + State = 555; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,9,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 511; + State = 539; Match(PP_DEFINE); - State = 512; + State = 540; Match(ID); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 513; + State = 541; Match(PP_DEFINE); - State = 514; + State = 542; Match(ID); - State = 515; + State = 543; Match(QSTRING); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 516; + State = 544; Match(PP_UNDEF); - State = 517; + State = 545; Match(ID); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 518; + State = 546; Match(PP_IFDEF); - State = 519; + State = 547; Match(ID); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 520; + State = 548; Match(PP_IFNDEF); - State = 521; + State = 549; Match(ID); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 522; + State = 550; Match(PP_ELSE); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 523; + State = 551; Match(PP_ENDIF); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 524; + State = 552; Match(PP_INCLUDE); - State = 525; + State = 553; Match(QSTRING); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 526; + State = 554; Match(T__30); } break; @@ -1700,73 +1854,73 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TypedefDeclContext typedefDecl() { TypedefDeclContext _localctx = new TypedefDeclContext(Context, State); - EnterRule(_localctx, 38, RULE_typedefDecl); + EnterRule(_localctx, 42, RULE_typedefDecl); try { - State = 554; + State = 582; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,10,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 529; + State = 557; Match(T__31); - State = 530; + State = 558; type(); - State = 531; + State = 559; Match(T__32); - State = 532; + State = 560; dottedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 534; + State = 562; Match(T__31); - State = 535; + State = 563; className(); - State = 536; + State = 564; Match(T__32); - State = 537; + State = 565; dottedName(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 539; + State = 567; Match(T__31); - State = 540; + State = 568; memberRef(); - State = 541; + State = 569; Match(T__32); - State = 542; + State = 570; dottedName(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 544; + State = 572; Match(T__31); - State = 545; + State = 573; customDescr(); - State = 546; + State = 574; Match(T__32); - State = 547; + State = 575; dottedName(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 549; + State = 577; Match(T__31); - State = 550; + State = 578; customDescrWithOwner(); - State = 551; + State = 579; Match(T__32); - State = 552; + State = 580; dottedName(); } break; @@ -1812,64 +1966,64 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomDescrContext customDescr() { CustomDescrContext _localctx = new CustomDescrContext(Context, State); - EnterRule(_localctx, 40, RULE_customDescr); + EnterRule(_localctx, 44, RULE_customDescr); try { - State = 577; + State = 605; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,11,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 556; + State = 584; Match(T__33); - State = 557; + State = 585; customType(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 558; + State = 586; Match(T__33); - State = 559; + State = 587; customType(); - State = 560; + State = 588; Match(T__34); - State = 561; + State = 589; compQstring(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 563; + State = 591; Match(T__33); - State = 564; + State = 592; customType(); - State = 565; + State = 593; Match(T__34); - State = 566; + State = 594; Match(T__15); - State = 567; + State = 595; customBlobDescr(); - State = 568; + State = 596; Match(T__16); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 570; + State = 598; Match(T__33); - State = 571; + State = 599; customType(); - State = 572; + State = 600; Match(T__34); - State = 573; + State = 601; Match(T__28); - State = 574; + State = 602; bytes(); - State = 575; + State = 603; Match(T__29); } break; @@ -1918,88 +2072,88 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomDescrWithOwnerContext customDescrWithOwner() { CustomDescrWithOwnerContext _localctx = new CustomDescrWithOwnerContext(Context, State); - EnterRule(_localctx, 42, RULE_customDescrWithOwner); + EnterRule(_localctx, 46, RULE_customDescrWithOwner); try { - State = 613; + State = 641; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,12,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 579; + State = 607; Match(T__33); - State = 580; + State = 608; Match(T__28); - State = 581; + State = 609; ownerType(); - State = 582; + State = 610; Match(T__29); - State = 583; + State = 611; customType(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 585; + State = 613; Match(T__33); - State = 586; + State = 614; Match(T__28); - State = 587; + State = 615; ownerType(); - State = 588; + State = 616; Match(T__29); - State = 589; + State = 617; customType(); - State = 590; + State = 618; Match(T__34); - State = 591; + State = 619; compQstring(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 593; + State = 621; Match(T__33); - State = 594; + State = 622; Match(T__28); - State = 595; + State = 623; ownerType(); - State = 596; + State = 624; Match(T__29); - State = 597; + State = 625; customType(); - State = 598; + State = 626; Match(T__34); - State = 599; + State = 627; Match(T__15); - State = 600; + State = 628; customBlobDescr(); - State = 601; + State = 629; Match(T__16); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 603; + State = 631; Match(T__33); - State = 604; + State = 632; Match(T__28); - State = 605; + State = 633; ownerType(); - State = 606; + State = 634; Match(T__29); - State = 607; + State = 635; customType(); - State = 608; + State = 636; Match(T__34); - State = 609; + State = 637; Match(T__28); - State = 610; + State = 638; bytes(); - State = 611; + State = 639; Match(T__29); } break; @@ -2036,11 +2190,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomTypeContext customType() { CustomTypeContext _localctx = new CustomTypeContext(Context, State); - EnterRule(_localctx, 44, RULE_customType); + EnterRule(_localctx, 48, RULE_customType); try { EnterOuterAlt(_localctx, 1); { - State = 615; + State = 643; methodRef(); } } @@ -2078,22 +2232,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public OwnerTypeContext ownerType() { OwnerTypeContext _localctx = new OwnerTypeContext(Context, State); - EnterRule(_localctx, 46, RULE_ownerType); + EnterRule(_localctx, 50, RULE_ownerType); try { - State = 619; + State = 647; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,13,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 617; + State = 645; typeSpec(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 618; + State = 646; memberRef(); } break; @@ -2133,13 +2287,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomBlobDescrContext customBlobDescr() { CustomBlobDescrContext _localctx = new CustomBlobDescrContext(Context, State); - EnterRule(_localctx, 48, RULE_customBlobDescr); + EnterRule(_localctx, 52, RULE_customBlobDescr); try { EnterOuterAlt(_localctx, 1); { - State = 621; + State = 649; customBlobArgs(); - State = 622; + State = 650; customBlobNVPairs(); } } @@ -2183,18 +2337,18 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomBlobArgsContext customBlobArgs() { CustomBlobArgsContext _localctx = new CustomBlobArgsContext(Context, State); - EnterRule(_localctx, 50, RULE_customBlobArgs); + EnterRule(_localctx, 54, RULE_customBlobArgs); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 628; + State = 656; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,15,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 626; + State = 654; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__82: @@ -2214,7 +2368,7 @@ public CustomBlobArgsContext customBlobArgs() { case TYPE: case OBJECT: { - State = 624; + State = 652; serInit(); } break; @@ -2227,7 +2381,7 @@ public CustomBlobArgsContext customBlobArgs() { case PP_ENDIF: case PP_INCLUDE: { - State = 625; + State = 653; compControl(); } break; @@ -2236,7 +2390,7 @@ public CustomBlobArgsContext customBlobArgs() { } } } - State = 630; + State = 658; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,15,Context); } @@ -2300,31 +2454,31 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomBlobNVPairsContext customBlobNVPairs() { CustomBlobNVPairsContext _localctx = new CustomBlobNVPairsContext(Context, State); - EnterRule(_localctx, 52, RULE_customBlobNVPairs); + EnterRule(_localctx, 56, RULE_customBlobNVPairs); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 640; + State = 668; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 208305913856L) != 0) || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 127L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 208305913856L) != 0) || ((((_la - 266)) & ~0x3f) == 0 && ((1L << (_la - 266)) & 127L) != 0)) { { - State = 638; + State = 666; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__35: case T__36: { - State = 631; + State = 659; fieldOrProp(); - State = 632; + State = 660; serializType(); - State = 633; + State = 661; dottedName(); - State = 634; + State = 662; Match(T__34); - State = 635; + State = 663; serInit(); } break; @@ -2337,7 +2491,7 @@ public CustomBlobNVPairsContext customBlobNVPairs() { case PP_ENDIF: case PP_INCLUDE: { - State = 637; + State = 665; compControl(); } break; @@ -2345,7 +2499,7 @@ public CustomBlobNVPairsContext customBlobNVPairs() { throw new NoViableAltException(this); } } - State = 642; + State = 670; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -2379,12 +2533,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FieldOrPropContext fieldOrProp() { FieldOrPropContext _localctx = new FieldOrPropContext(Context, State); - EnterRule(_localctx, 54, RULE_fieldOrProp); + EnterRule(_localctx, 58, RULE_fieldOrProp); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 643; + State = 671; _la = TokenStream.LA(1); if ( !(_la==T__35 || _la==T__36) ) { ErrorHandler.RecoverInline(this); @@ -2427,19 +2581,19 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SerializTypeContext serializType() { SerializTypeContext _localctx = new SerializTypeContext(Context, State); - EnterRule(_localctx, 56, RULE_serializType); + EnterRule(_localctx, 60, RULE_serializType); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 645; + State = 673; serializTypeElement(); - State = 647; + State = 675; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==ARRAY_TYPE_NO_BOUNDS) { { - State = 646; + State = 674; Match(ARRAY_TYPE_NO_BOUNDS); } } @@ -2487,56 +2641,56 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SerializTypeElementContext serializTypeElement() { SerializTypeElementContext _localctx = new SerializTypeElementContext(Context, State); - EnterRule(_localctx, 58, RULE_serializTypeElement); + EnterRule(_localctx, 62, RULE_serializTypeElement); try { - State = 658; + State = 686; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,19,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 649; + State = 677; simpleType(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 650; + State = 678; dottedName(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 651; + State = 679; Match(TYPE); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 652; + State = 680; Match(OBJECT); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 653; + State = 681; Match(ENUM); - State = 654; + State = 682; Match(T__37); - State = 655; + State = 683; Match(SQSTRING); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 656; + State = 684; Match(ENUM); - State = 657; + State = 685; className(); } break; @@ -2574,36 +2728,36 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ModuleHeadContext moduleHead() { ModuleHeadContext _localctx = new ModuleHeadContext(Context, State); - EnterRule(_localctx, 60, RULE_moduleHead); + EnterRule(_localctx, 64, RULE_moduleHead); try { - State = 666; + State = 694; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,20,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 660; + State = 688; Match(MODULE); + State = 689; + Match(T__38); + State = 690; + dottedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 661; + State = 691; Match(MODULE); - State = 662; + State = 692; dottedName(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 663; + State = 693; Match(MODULE); - State = 664; - Match(T__38); - State = 665; - dottedName(); } break; } @@ -2645,23 +2799,23 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public VtfixupDeclContext vtfixupDecl() { VtfixupDeclContext _localctx = new VtfixupDeclContext(Context, State); - EnterRule(_localctx, 62, RULE_vtfixupDecl); + EnterRule(_localctx, 66, RULE_vtfixupDecl); try { EnterOuterAlt(_localctx, 1); { - State = 668; + State = 696; Match(T__39); - State = 669; + State = 697; Match(T__40); - State = 670; + State = 698; int32(); - State = 671; + State = 699; Match(T__41); - State = 672; + State = 700; vtfixupAttr(0); - State = 673; + State = 701; Match(T__42); - State = 674; + State = 702; id(); } } @@ -2705,8 +2859,8 @@ private VtfixupAttrContext vtfixupAttr(int _p) { int _parentState = State; VtfixupAttrContext _localctx = new VtfixupAttrContext(Context, _parentState); VtfixupAttrContext _prevctx = _localctx; - int _startState = 64; - EnterRecursionRule(_localctx, 64, RULE_vtfixupAttr, _p); + int _startState = 68; + EnterRecursionRule(_localctx, 68, RULE_vtfixupAttr, _p); try { int _alt; EnterOuterAlt(_localctx, 1); @@ -2714,7 +2868,7 @@ private VtfixupAttrContext vtfixupAttr(int _p) { { } Context.Stop = TokenStream.LT(-1); - State = 689; + State = 717; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,22,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -2723,16 +2877,16 @@ private VtfixupAttrContext vtfixupAttr(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 687; + State = 715; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,21,Context) ) { case 1: { _localctx = new VtfixupAttrContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_vtfixupAttr); - State = 677; + State = 705; if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); - State = 678; + State = 706; Match(INT32_); } break; @@ -2740,9 +2894,9 @@ private VtfixupAttrContext vtfixupAttr(int _p) { { _localctx = new VtfixupAttrContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_vtfixupAttr); - State = 679; + State = 707; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 680; + State = 708; Match(INT64_); } break; @@ -2750,9 +2904,9 @@ private VtfixupAttrContext vtfixupAttr(int _p) { { _localctx = new VtfixupAttrContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_vtfixupAttr); - State = 681; + State = 709; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 682; + State = 710; Match(T__43); } break; @@ -2760,9 +2914,9 @@ private VtfixupAttrContext vtfixupAttr(int _p) { { _localctx = new VtfixupAttrContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_vtfixupAttr); - State = 683; + State = 711; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 684; + State = 712; Match(T__44); } break; @@ -2770,16 +2924,16 @@ private VtfixupAttrContext vtfixupAttr(int _p) { { _localctx = new VtfixupAttrContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_vtfixupAttr); - State = 685; + State = 713; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 686; + State = 714; Match(T__45); } break; } } } - State = 691; + State = 719; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,22,Context); } @@ -2816,19 +2970,19 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public VtableDeclContext vtableDecl() { VtableDeclContext _localctx = new VtableDeclContext(Context, State); - EnterRule(_localctx, 66, RULE_vtableDecl); + EnterRule(_localctx, 70, RULE_vtableDecl); try { EnterOuterAlt(_localctx, 1); { - State = 692; + State = 720; Match(T__46); - State = 693; + State = 721; Match(T__34); - State = 694; + State = 722; Match(T__28); - State = 695; + State = 723; bytes(); - State = 696; + State = 724; Match(T__29); } } @@ -2863,13 +3017,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NameSpaceHeadContext nameSpaceHead() { NameSpaceHeadContext _localctx = new NameSpaceHeadContext(Context, State); - EnterRule(_localctx, 68, RULE_nameSpaceHead); + EnterRule(_localctx, 72, RULE_nameSpaceHead); try { EnterOuterAlt(_localctx, 1); { - State = 698; + State = 726; Match(T__47); - State = 699; + State = 727; dottedName(); } } @@ -2919,34 +3073,36 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ClassHeadContext classHead() { ClassHeadContext _localctx = new ClassHeadContext(Context, State); - EnterRule(_localctx, 70, RULE_classHead); - int _la; + EnterRule(_localctx, 74, RULE_classHead); try { + int _alt; EnterOuterAlt(_localctx, 1); { - State = 701; + State = 729; Match(T__48); - State = 705; + State = 733; ErrorHandler.Sync(this); - _la = TokenStream.LA(1); - while (((((_la - 15)) & ~0x3f) == 0 && ((1L << (_la - 15)) & 33917700333895681L) != 0) || ((((_la - 196)) & ~0x3f) == 0 && ((1L << (_la - 196)) & 281475115122697L) != 0)) { - { - { - State = 702; - classAttr(); - } + _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); + while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + State = 730; + classAttr(); + } + } } - State = 707; + State = 735; ErrorHandler.Sync(this); - _la = TokenStream.LA(1); + _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); } - State = 708; + State = 736; dottedName(); - State = 709; + State = 737; typarsClause(); - State = 710; + State = 738; extendsClause(); - State = 711; + State = 739; implClause(); } } @@ -2986,215 +3142,215 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ClassAttrContext classAttr() { ClassAttrContext _localctx = new ClassAttrContext(Context, State); - EnterRule(_localctx, 72, RULE_classAttr); + EnterRule(_localctx, 76, RULE_classAttr); try { - State = 750; + State = 778; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 713; + State = 741; Match(T__49); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 714; + State = 742; Match(T__50); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 715; + State = 743; Match(VALUE); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 716; + State = 744; Match(ENUM); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 717; + State = 745; Match(INTERFACE); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 718; + State = 746; Match(T__51); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 719; + State = 747; Match(T__52); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 720; + State = 748; Match(T__53); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 721; + State = 749; Match(T__54); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 722; + State = 750; Match(EXPLICIT); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 723; + State = 751; Match(T__14); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 724; + State = 752; Match(ANSI); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 725; + State = 753; Match(T__55); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 726; + State = 754; Match(T__56); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 727; + State = 755; Match(T__57); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 728; + State = 756; Match(T__58); } break; case 17: EnterOuterAlt(_localctx, 17); { - State = 729; + State = 757; Match(T__59); } break; case 18: EnterOuterAlt(_localctx, 18); { - State = 730; + State = 758; Match(T__60); - State = 731; + State = 759; Match(T__49); } break; case 19: EnterOuterAlt(_localctx, 19); { - State = 732; + State = 760; Match(T__60); - State = 733; + State = 761; Match(T__50); } break; case 20: EnterOuterAlt(_localctx, 20); { - State = 734; + State = 762; Match(T__60); - State = 735; + State = 763; Match(T__61); } break; case 21: EnterOuterAlt(_localctx, 21); { - State = 736; + State = 764; Match(T__60); - State = 737; + State = 765; Match(T__62); } break; case 22: EnterOuterAlt(_localctx, 22); { - State = 738; + State = 766; Match(T__60); - State = 739; + State = 767; Match(T__63); } break; case 23: EnterOuterAlt(_localctx, 23); { - State = 740; + State = 768; Match(T__60); - State = 741; + State = 769; Match(T__64); } break; case 24: EnterOuterAlt(_localctx, 24); { - State = 742; + State = 770; Match(T__65); } break; case 25: EnterOuterAlt(_localctx, 25); { - State = 743; + State = 771; Match(T__66); } break; case 26: EnterOuterAlt(_localctx, 26); { - State = 744; + State = 772; Match(T__67); } break; case 27: EnterOuterAlt(_localctx, 27); { - State = 745; + State = 773; Match(T__68); - State = 746; + State = 774; Match(T__28); - State = 747; + State = 775; int32(); - State = 748; + State = 776; Match(T__29); } break; @@ -3231,9 +3387,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ExtendsClauseContext extendsClause() { ExtendsClauseContext _localctx = new ExtendsClauseContext(Context, State); - EnterRule(_localctx, 74, RULE_extendsClause); + EnterRule(_localctx, 78, RULE_extendsClause); try { - State = 755; + State = 783; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__15: @@ -3245,9 +3401,9 @@ public ExtendsClauseContext extendsClause() { case T__69: EnterOuterAlt(_localctx, 2); { - State = 753; + State = 781; Match(T__69); - State = 754; + State = 782; typeSpec(); } break; @@ -3286,9 +3442,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ImplClauseContext implClause() { ImplClauseContext _localctx = new ImplClauseContext(Context, State); - EnterRule(_localctx, 76, RULE_implClause); + EnterRule(_localctx, 80, RULE_implClause); try { - State = 760; + State = 788; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__15: @@ -3299,9 +3455,9 @@ public ImplClauseContext implClause() { case T__70: EnterOuterAlt(_localctx, 2); { - State = 758; + State = 786; Match(T__70); - State = 759; + State = 787; implList(); } break; @@ -3343,22 +3499,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ClassDeclsContext classDecls() { ClassDeclsContext _localctx = new ClassDeclsContext(Context, State); - EnterRule(_localctx, 78, RULE_classDecls); + EnterRule(_localctx, 82, RULE_classDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 765; + State = 793; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (((((_la - 26)) & ~0x3f) == 0 && ((1L << (_la - 26)) & 211106240921889L) != 0) || ((((_la - 115)) & ~0x3f) == 0 && ((1L << (_la - 115)) & 140737492617243L) != 0) || ((((_la - 257)) & ~0x3f) == 0 && ((1L << (_la - 257)) & 106403520311297L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 562969347883008L) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & 2378375592274821123L) != 0) || ((((_la - 139)) & ~0x3f) == 0 && ((1L << (_la - 139)) & 576460752370532353L) != 0) || ((((_la - 242)) & ~0x3f) == 0 && ((1L << (_la - 242)) & 871552083145265153L) != 0)) { { { - State = 762; + State = 790; classDecl(); } } - State = 767; + State = 795; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3398,30 +3554,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ImplListContext implList() { ImplListContext _localctx = new ImplListContext(Context, State); - EnterRule(_localctx, 80, RULE_implList); + EnterRule(_localctx, 84, RULE_implList); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 773; + State = 801; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,28,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 768; + State = 796; typeSpec(); - State = 769; + State = 797; Match(T__26); } } } - State = 775; + State = 803; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,28,Context); } - State = 776; + State = 804; typeSpec(); } } @@ -3453,12 +3609,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EsHeadContext esHead() { EsHeadContext _localctx = new EsHeadContext(Context, State); - EnterRule(_localctx, 82, RULE_esHead); + EnterRule(_localctx, 86, RULE_esHead); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 778; + State = 806; _la = TokenStream.LA(1); if ( !(_la==T__71 || _la==T__72) ) { ErrorHandler.RecoverInline(this); @@ -3508,183 +3664,259 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ExtSourceSpecContext extSourceSpec() { ExtSourceSpecContext _localctx = new ExtSourceSpecContext(Context, State); - EnterRule(_localctx, 84, RULE_extSourceSpec); + EnterRule(_localctx, 88, RULE_extSourceSpec); try { - State = 851; + State = 911; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,29,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 780; + State = 808; esHead(); - State = 781; + State = 809; int32(); - State = 782; + State = 810; Match(SQSTRING); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 784; + State = 812; esHead(); - State = 785; + State = 813; int32(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 787; + State = 815; esHead(); - State = 788; + State = 816; int32(); - State = 789; + State = 817; Match(T__73); - State = 790; + State = 818; int32(); - State = 791; + State = 819; Match(SQSTRING); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 793; + State = 821; esHead(); - State = 794; + State = 822; int32(); - State = 795; + State = 823; Match(T__73); - State = 796; + State = 824; int32(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 798; + State = 826; esHead(); - State = 799; + State = 827; int32(); - State = 800; + State = 828; Match(T__73); - State = 801; + State = 829; int32(); - State = 802; + State = 830; Match(T__26); - State = 803; + State = 831; int32(); - State = 804; + State = 832; Match(SQSTRING); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 806; + State = 834; esHead(); - State = 807; + State = 835; int32(); - State = 808; + State = 836; Match(T__73); - State = 809; + State = 837; int32(); - State = 810; + State = 838; Match(T__26); - State = 811; + State = 839; int32(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 813; + State = 841; esHead(); - State = 814; + State = 842; int32(); - State = 815; + State = 843; Match(T__26); - State = 816; + State = 844; int32(); - State = 817; + State = 845; Match(T__73); - State = 818; + State = 846; int32(); - State = 819; + State = 847; Match(SQSTRING); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 821; + State = 849; esHead(); - State = 822; + State = 850; int32(); - State = 823; + State = 851; Match(T__26); - State = 824; + State = 852; int32(); - State = 825; + State = 853; Match(T__73); - State = 826; + State = 854; int32(); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 828; + State = 856; esHead(); - State = 829; + State = 857; int32(); - State = 830; + State = 858; Match(T__26); - State = 831; + State = 859; int32(); - State = 832; + State = 860; Match(T__73); - State = 833; + State = 861; int32(); - State = 834; + State = 862; Match(T__26); - State = 835; + State = 863; int32(); - State = 836; + State = 864; Match(SQSTRING); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 838; + State = 866; esHead(); - State = 839; + State = 867; int32(); - State = 840; + State = 868; Match(T__26); - State = 841; + State = 869; int32(); - State = 842; + State = 870; Match(T__73); - State = 843; + State = 871; int32(); - State = 844; + State = 872; Match(T__26); - State = 845; + State = 873; int32(); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 847; + State = 875; esHead(); - State = 848; + State = 876; int32(); - State = 849; + State = 877; + Match(QSTRING); + } + break; + case 12: + EnterOuterAlt(_localctx, 12); + { + State = 879; + esHead(); + State = 880; + int32(); + State = 881; + Match(T__73); + State = 882; + int32(); + State = 883; + Match(QSTRING); + } + break; + case 13: + EnterOuterAlt(_localctx, 13); + { + State = 885; + esHead(); + State = 886; + int32(); + State = 887; + Match(T__73); + State = 888; + int32(); + State = 889; + Match(T__26); + State = 890; + int32(); + State = 891; + Match(QSTRING); + } + break; + case 14: + EnterOuterAlt(_localctx, 14); + { + State = 893; + esHead(); + State = 894; + int32(); + State = 895; + Match(T__26); + State = 896; + int32(); + State = 897; + Match(T__73); + State = 898; + int32(); + State = 899; + Match(QSTRING); + } + break; + case 15: + EnterOuterAlt(_localctx, 15); + { + State = 901; + esHead(); + State = 902; + int32(); + State = 903; + Match(T__26); + State = 904; + int32(); + State = 905; + Match(T__73); + State = 906; + int32(); + State = 907; + Match(T__26); + State = 908; + int32(); + State = 909; Match(QSTRING); } break; @@ -3737,71 +3969,71 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FileDeclContext fileDecl() { FileDeclContext _localctx = new FileDeclContext(Context, State); - EnterRule(_localctx, 86, RULE_fileDecl); + EnterRule(_localctx, 90, RULE_fileDecl); int _la; try { - State = 879; + State = 939; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,32,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 853; + State = 913; Match(T__19); - State = 857; + State = 917; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__74) { { { - State = 854; + State = 914; fileAttr(); } } - State = 859; + State = 919; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 860; + State = 920; dottedName(); - State = 861; + State = 921; fileEntry(); - State = 862; + State = 922; Match(HASH); - State = 863; + State = 923; Match(T__34); - State = 864; + State = 924; Match(T__28); - State = 865; + State = 925; bytes(); - State = 866; + State = 926; Match(T__29); - State = 867; + State = 927; fileEntry(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 869; + State = 929; Match(T__19); - State = 873; + State = 933; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__74) { { { - State = 870; + State = 930; fileAttr(); } } - State = 875; + State = 935; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 876; + State = 936; dottedName(); - State = 877; + State = 937; fileEntry(); } break; @@ -3835,11 +4067,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FileAttrContext fileAttr() { FileAttrContext _localctx = new FileAttrContext(Context, State); - EnterRule(_localctx, 88, RULE_fileAttr); + EnterRule(_localctx, 92, RULE_fileAttr); try { EnterOuterAlt(_localctx, 1); { - State = 881; + State = 941; Match(T__74); } } @@ -3872,9 +4104,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FileEntryContext fileEntry() { FileEntryContext _localctx = new FileEntryContext(Context, State); - EnterRule(_localctx, 90, RULE_fileEntry); + EnterRule(_localctx, 94, RULE_fileEntry); try { - State = 885; + State = 945; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__16: @@ -3896,11 +4128,14 @@ public FileEntryContext fileEntry() { case T__48: case T__71: case T__72: - case T__118: - case T__136: - case T__161: + case T__119: + case T__138: + case T__164: case HASH: case MODULE: + case VALUE: + case INSTANCE: + case SQSTRING: case PP_DEFINE: case PP_UNDEF: case PP_IFDEF: @@ -3920,7 +4155,7 @@ public FileEntryContext fileEntry() { case ENTRYPOINT: EnterOuterAlt(_localctx, 2); { - State = 884; + State = 944; Match(ENTRYPOINT); } break; @@ -3956,12 +4191,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AsmAttrAnyContext asmAttrAny() { AsmAttrAnyContext _localctx = new AsmAttrAnyContext(Context, State); - EnterRule(_localctx, 92, RULE_asmAttrAny); + EnterRule(_localctx, 96, RULE_asmAttrAny); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 887; + State = 947; _la = TokenStream.LA(1); if ( !(_la==T__1 || _la==T__59 || ((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & 127L) != 0)) ) { ErrorHandler.RecoverInline(this); @@ -4006,22 +4241,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AsmAttrContext asmAttr() { AsmAttrContext _localctx = new AsmAttrContext(Context, State); - EnterRule(_localctx, 94, RULE_asmAttr); + EnterRule(_localctx, 98, RULE_asmAttr); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 892; + State = 952; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1 || _la==T__59 || ((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & 127L) != 0)) { { { - State = 889; + State = 949; asmAttrAny(); } } - State = 894; + State = 954; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -4056,11 +4291,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_noneContext instr_none() { Instr_noneContext _localctx = new Instr_noneContext(Context, State); - EnterRule(_localctx, 96, RULE_instr_none); + EnterRule(_localctx, 100, RULE_instr_none); try { EnterOuterAlt(_localctx, 1); { - State = 895; + State = 955; Match(INSTR_NONE); } } @@ -4093,11 +4328,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_varContext instr_var() { Instr_varContext _localctx = new Instr_varContext(Context, State); - EnterRule(_localctx, 98, RULE_instr_var); + EnterRule(_localctx, 102, RULE_instr_var); try { EnterOuterAlt(_localctx, 1); { - State = 897; + State = 957; Match(INSTR_VAR); } } @@ -4130,11 +4365,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_iContext instr_i() { Instr_iContext _localctx = new Instr_iContext(Context, State); - EnterRule(_localctx, 100, RULE_instr_i); + EnterRule(_localctx, 104, RULE_instr_i); try { EnterOuterAlt(_localctx, 1); { - State = 899; + State = 959; Match(INSTR_I); } } @@ -4167,11 +4402,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_i8Context instr_i8() { Instr_i8Context _localctx = new Instr_i8Context(Context, State); - EnterRule(_localctx, 102, RULE_instr_i8); + EnterRule(_localctx, 106, RULE_instr_i8); try { EnterOuterAlt(_localctx, 1); { - State = 901; + State = 961; Match(INSTR_I8); } } @@ -4204,11 +4439,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_rContext instr_r() { Instr_rContext _localctx = new Instr_rContext(Context, State); - EnterRule(_localctx, 104, RULE_instr_r); + EnterRule(_localctx, 108, RULE_instr_r); try { EnterOuterAlt(_localctx, 1); { - State = 903; + State = 963; Match(INSTR_R); } } @@ -4241,11 +4476,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_brtargetContext instr_brtarget() { Instr_brtargetContext _localctx = new Instr_brtargetContext(Context, State); - EnterRule(_localctx, 106, RULE_instr_brtarget); + EnterRule(_localctx, 110, RULE_instr_brtarget); try { EnterOuterAlt(_localctx, 1); { - State = 905; + State = 965; Match(INSTR_BRTARGET); } } @@ -4278,11 +4513,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_methodContext instr_method() { Instr_methodContext _localctx = new Instr_methodContext(Context, State); - EnterRule(_localctx, 108, RULE_instr_method); + EnterRule(_localctx, 112, RULE_instr_method); try { EnterOuterAlt(_localctx, 1); { - State = 907; + State = 967; Match(INSTR_METHOD); } } @@ -4315,11 +4550,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_fieldContext instr_field() { Instr_fieldContext _localctx = new Instr_fieldContext(Context, State); - EnterRule(_localctx, 110, RULE_instr_field); + EnterRule(_localctx, 114, RULE_instr_field); try { EnterOuterAlt(_localctx, 1); { - State = 909; + State = 969; Match(INSTR_FIELD); } } @@ -4352,11 +4587,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_typeContext instr_type() { Instr_typeContext _localctx = new Instr_typeContext(Context, State); - EnterRule(_localctx, 112, RULE_instr_type); + EnterRule(_localctx, 116, RULE_instr_type); try { EnterOuterAlt(_localctx, 1); { - State = 911; + State = 971; Match(INSTR_TYPE); } } @@ -4389,11 +4624,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_stringContext instr_string() { Instr_stringContext _localctx = new Instr_stringContext(Context, State); - EnterRule(_localctx, 114, RULE_instr_string); + EnterRule(_localctx, 118, RULE_instr_string); try { EnterOuterAlt(_localctx, 1); { - State = 913; + State = 973; Match(INSTR_STRING); } } @@ -4426,11 +4661,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_sigContext instr_sig() { Instr_sigContext _localctx = new Instr_sigContext(Context, State); - EnterRule(_localctx, 116, RULE_instr_sig); + EnterRule(_localctx, 120, RULE_instr_sig); try { EnterOuterAlt(_localctx, 1); { - State = 915; + State = 975; Match(INSTR_SIG); } } @@ -4463,11 +4698,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_tokContext instr_tok() { Instr_tokContext _localctx = new Instr_tokContext(Context, State); - EnterRule(_localctx, 118, RULE_instr_tok); + EnterRule(_localctx, 122, RULE_instr_tok); try { EnterOuterAlt(_localctx, 1); { - State = 917; + State = 977; Match(INSTR_TOK); } } @@ -4500,11 +4735,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Instr_switchContext instr_switch() { Instr_switchContext _localctx = new Instr_switchContext(Context, State); - EnterRule(_localctx, 120, RULE_instr_switch); + EnterRule(_localctx, 124, RULE_instr_switch); try { EnterOuterAlt(_localctx, 1); { - State = 919; + State = 979; Match(INSTR_SWITCH); } } @@ -4621,228 +4856,237 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public InstrContext instr() { InstrContext _localctx = new InstrContext(Context, State); - EnterRule(_localctx, 122, RULE_instr); + EnterRule(_localctx, 126, RULE_instr); try { - State = 997; + State = 1060; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,35,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 921; + State = 981; instr_none(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 922; + State = 982; instr_var(); - State = 923; + State = 983; int32(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 925; + State = 985; instr_var(); - State = 926; + State = 986; id(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 928; + State = 988; instr_i(); - State = 929; + State = 989; int32(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 931; + State = 991; instr_i8(); - State = 932; + State = 992; int64(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 934; + State = 994; instr_r(); - State = 935; + State = 995; float64(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 937; + State = 997; instr_r(); - State = 938; + State = 998; int64(); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 940; + State = 1000; instr_r(); - State = 941; + State = 1001; Match(T__28); - State = 942; + State = 1002; bytes(); - State = 943; + State = 1003; Match(T__29); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 945; + State = 1005; instr_r(); - State = 946; + State = 1006; Match(T__82); - State = 947; + State = 1007; Match(T__28); - State = 948; + State = 1008; bytes(); - State = 949; + State = 1009; Match(T__29); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 951; + State = 1011; instr_brtarget(); - State = 952; + State = 1012; int32(); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 954; + State = 1014; instr_brtarget(); - State = 955; + State = 1015; id(); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 957; + State = 1017; instr_method(); - State = 958; + State = 1018; methodRef(); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 960; + State = 1020; instr_field(); - State = 961; + State = 1021; fieldRef(); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 963; + State = 1023; instr_field(); - State = 964; + State = 1024; mdtoken(); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 966; + State = 1026; instr_type(); - State = 967; + State = 1027; typeSpec(); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 969; + State = 1029; instr_string(); - State = 970; + State = 1030; compQstring(); } break; case 17: EnterOuterAlt(_localctx, 17); { - State = 972; + State = 1032; instr_string(); - State = 973; + State = 1033; Match(ANSI); - State = 974; + State = 1034; Match(T__28); - State = 975; + State = 1035; compQstring(); - State = 976; + State = 1036; Match(T__29); } break; case 18: EnterOuterAlt(_localctx, 18); { - State = 978; + State = 1038; instr_string(); - State = 979; + State = 1039; Match(T__82); - State = 980; + State = 1040; Match(T__28); - State = 981; + State = 1041; bytes(); - State = 982; + State = 1042; Match(T__29); } break; case 19: EnterOuterAlt(_localctx, 19); { - State = 984; + State = 1044; instr_sig(); - State = 985; + State = 1045; callConv(); - State = 986; + State = 1046; type(); - State = 987; + State = 1047; sigArgs(); } break; case 20: EnterOuterAlt(_localctx, 20); { - State = 989; + State = 1049; instr_tok(); - State = 990; + State = 1050; ownerType(); } break; case 21: EnterOuterAlt(_localctx, 21); { - State = 992; + State = 1052; instr_switch(); - State = 993; + State = 1053; Match(T__28); - State = 994; + State = 1054; labels(); - State = 995; + State = 1055; Match(T__29); } break; + case 22: + EnterOuterAlt(_localctx, 22); + { + State = 1057; + instr_switch(); + State = 1058; + Match(T__83); + } + break; } } catch (RecognitionException re) { @@ -4885,10 +5129,10 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public LabelsContext labels() { LabelsContext _localctx = new LabelsContext(Context, State); - EnterRule(_localctx, 124, RULE_labels); + EnterRule(_localctx, 128, RULE_labels); try { int _alt; - State = 1013; + State = 1078; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__29: @@ -4912,18 +5156,21 @@ public LabelsContext labels() { case T__13: case T__14: case INT32: + case VALUE: + case INSTANCE: case UNMANAGED: case SQSTRING: case ID: EnterOuterAlt(_localctx, 2); { - State = 1006; + State = 1071; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,37,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 1004; + { + State = 1065; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: @@ -4941,32 +5188,35 @@ public LabelsContext labels() { case T__12: case T__13: case T__14: + case VALUE: + case INSTANCE: case UNMANAGED: case SQSTRING: case ID: { - State = 1000; + State = 1063; id(); } break; case INT32: { - State = 1001; + State = 1064; int32(); - State = 1002; - Match(T__26); } break; default: throw new NoViableAltException(this); } + State = 1067; + Match(T__26); + } } } - State = 1008; + State = 1073; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,37,Context); } - State = 1011; + State = 1076; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: @@ -4984,17 +5234,19 @@ public LabelsContext labels() { case T__12: case T__13: case T__14: + case VALUE: + case INSTANCE: case UNMANAGED: case SQSTRING: case ID: { - State = 1009; + State = 1074; id(); } break; case INT32: { - State = 1010; + State = 1075; int32(); } break; @@ -5041,35 +5293,35 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TypeArgsContext typeArgs() { TypeArgsContext _localctx = new TypeArgsContext(Context, State); - EnterRule(_localctx, 126, RULE_typeArgs); + EnterRule(_localctx, 130, RULE_typeArgs); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 1015; - Match(T__83); - State = 1021; + State = 1080; + Match(T__84); + State = 1086; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,40,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1016; + State = 1081; type(); - State = 1017; + State = 1082; Match(T__26); } } } - State = 1023; + State = 1088; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,40,Context); } - State = 1024; + State = 1089; type(); - State = 1025; - Match(T__84); + State = 1090; + Match(T__85); } } catch (RecognitionException re) { @@ -5106,34 +5358,34 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public BoundsContext bounds() { BoundsContext _localctx = new BoundsContext(Context, State); - EnterRule(_localctx, 128, RULE_bounds); + EnterRule(_localctx, 132, RULE_bounds); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 1027; + State = 1092; Match(T__40); - State = 1033; + State = 1098; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,41,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1028; + State = 1093; bound(); - State = 1029; + State = 1094; Match(T__26); } } } - State = 1035; + State = 1100; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,41,Context); } - State = 1036; + State = 1101; bound(); - State = 1037; + State = 1102; Match(T__41); } } @@ -5171,46 +5423,46 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SigArgsContext sigArgs() { SigArgsContext _localctx = new SigArgsContext(Context, State); - EnterRule(_localctx, 130, RULE_sigArgs); + EnterRule(_localctx, 134, RULE_sigArgs); try { int _alt; - State = 1052; + State = 1117; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__28: EnterOuterAlt(_localctx, 1); { - State = 1039; + State = 1104; Match(T__28); - State = 1045; + State = 1110; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,42,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1040; + State = 1105; sigArg(); - State = 1041; + State = 1106; Match(T__26); } } } - State = 1047; + State = 1112; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,42,Context); } - State = 1048; + State = 1113; sigArg(); - State = 1049; + State = 1114; Match(T__29); } break; - case T__85: + case T__83: EnterOuterAlt(_localctx, 2); { - State = 1051; - Match(T__85); + State = 1116; + Match(T__83); } break; default: @@ -5258,40 +5510,38 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SigArgContext sigArg() { SigArgContext _localctx = new SigArgContext(Context, State); - EnterRule(_localctx, 132, RULE_sigArg); + EnterRule(_localctx, 136, RULE_sigArg); + int _la; try { - State = 1064; + State = 1126; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,44,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,45,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1054; + State = 1119; Match(ELLIPSIS); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1055; + State = 1120; paramAttr(); - State = 1056; + State = 1121; type(); - State = 1057; + State = 1122; marshalClause(); + State = 1124; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 65534L) != 0) || ((((_la - 198)) & ~0x3f) == 0 && ((1L << (_la - 198)) & 299067162755073L) != 0) || _la==SQSTRING || _la==ID) { + { + State = 1123; + id(); + } } - break; - case 3: - EnterOuterAlt(_localctx, 3); - { - State = 1059; - paramAttr(); - State = 1060; - type(); - State = 1061; - marshalClause(); - State = 1062; - id(); + } break; } @@ -5338,97 +5588,97 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ClassNameContext className() { ClassNameContext _localctx = new ClassNameContext(Context, State); - EnterRule(_localctx, 134, RULE_className); + EnterRule(_localctx, 138, RULE_className); try { - State = 1091; + State = 1153; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,45,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,46,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1066; + State = 1128; Match(T__40); - State = 1067; + State = 1129; dottedName(); - State = 1068; + State = 1130; Match(T__41); - State = 1069; + State = 1131; slashedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1071; + State = 1133; Match(T__40); - State = 1072; + State = 1134; mdtoken(); - State = 1073; + State = 1135; Match(T__41); - State = 1074; + State = 1136; slashedName(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1076; + State = 1138; Match(T__40); - State = 1077; + State = 1139; Match(PTR); - State = 1078; + State = 1140; Match(T__41); - State = 1079; + State = 1141; slashedName(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1080; + State = 1142; Match(T__40); - State = 1081; + State = 1143; Match(MODULE); - State = 1082; + State = 1144; dottedName(); - State = 1083; + State = 1145; Match(T__41); - State = 1084; + State = 1146; slashedName(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1086; + State = 1148; slashedName(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1087; + State = 1149; mdtoken(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 1088; + State = 1150; Match(THIS); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 1089; + State = 1151; Match(BASE); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 1090; + State = 1152; Match(NESTER); } break; @@ -5468,30 +5718,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SlashedNameContext slashedName() { SlashedNameContext _localctx = new SlashedNameContext(Context, State); - EnterRule(_localctx, 136, RULE_slashedName); + EnterRule(_localctx, 140, RULE_slashedName); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 1098; + State = 1160; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,46,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,47,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1093; + State = 1155; dottedName(); - State = 1094; + State = 1156; Match(T__86); } } } - State = 1100; + State = 1162; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,46,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,47,Context); } - State = 1101; + State = 1163; dottedName(); } } @@ -5529,22 +5779,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AssemblyDeclsContext assemblyDecls() { AssemblyDeclsContext _localctx = new AssemblyDeclsContext(Context, State); - EnterRule(_localctx, 138, RULE_assemblyDecls); + EnterRule(_localctx, 142, RULE_assemblyDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1106; + State = 1168; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (_la==T__30 || _la==T__33 || ((((_la - 164)) & ~0x3f) == 0 && ((1L << (_la - 164)) & 8199L) != 0) || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 207618175L) != 0)) { + while (_la==T__30 || _la==T__33 || ((((_la - 167)) & ~0x3f) == 0 && ((1L << (_la - 167)) & 2147487751L) != 0) || ((((_la - 242)) & ~0x3f) == 0 && ((1L << (_la - 242)) & 6860954690125825L) != 0)) { { { - State = 1103; + State = 1165; assemblyDecl(); } } - State = 1108; + State = 1170; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -5588,20 +5838,20 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AssemblyDeclContext assemblyDecl() { AssemblyDeclContext _localctx = new AssemblyDeclContext(Context, State); - EnterRule(_localctx, 140, RULE_assemblyDecl); + EnterRule(_localctx, 144, RULE_assemblyDecl); try { - State = 1114; + State = 1176; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case HASH: EnterOuterAlt(_localctx, 1); { { - State = 1109; + State = 1171; Match(HASH); - State = 1110; + State = 1172; Match(T__87); - State = 1111; + State = 1173; int32(); } } @@ -5610,15 +5860,18 @@ public AssemblyDeclContext assemblyDecl() { case PERMISSIONSET: EnterOuterAlt(_localctx, 2); { - State = 1112; + State = 1174; secDecl(); } break; case T__30: case T__33: - case T__163: - case T__164: - case T__165: + case T__166: + case T__167: + case T__168: + case VALUE: + case INSTANCE: + case SQSTRING: case PP_DEFINE: case PP_UNDEF: case PP_IFDEF: @@ -5630,7 +5883,7 @@ public AssemblyDeclContext assemblyDecl() { case ID: EnterOuterAlt(_localctx, 3); { - State = 1113; + State = 1175; asmOrRefDecl(); } break; @@ -5676,46 +5929,46 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TypeSpecContext typeSpec() { TypeSpecContext _localctx = new TypeSpecContext(Context, State); - EnterRule(_localctx, 142, RULE_typeSpec); + EnterRule(_localctx, 146, RULE_typeSpec); try { - State = 1127; + State = 1189; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,49,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,50,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1116; + State = 1178; className(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1117; + State = 1179; Match(T__40); - State = 1118; + State = 1180; dottedName(); - State = 1119; + State = 1181; Match(T__41); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1121; + State = 1183; Match(T__40); - State = 1122; + State = 1184; Match(MODULE); - State = 1123; + State = 1185; dottedName(); - State = 1124; + State = 1186; Match(T__41); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1126; + State = 1188; type(); } break; @@ -5758,12 +6011,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NativeTypeContext nativeType() { NativeTypeContext _localctx = new NativeTypeContext(Context, State); - EnterRule(_localctx, 144, RULE_nativeType); + EnterRule(_localctx, 148, RULE_nativeType); try { int _alt; - State = 1137; + State = 1199; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,51,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,52,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { @@ -5772,23 +6025,23 @@ public NativeTypeContext nativeType() { case 2: EnterOuterAlt(_localctx, 2); { - State = 1130; + State = 1192; nativeTypeElement(); - State = 1134; + State = 1196; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,50,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,51,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1131; + State = 1193; nativeTypeArrayPointerInfo(); } } } - State = 1136; + State = 1198; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,50,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,51,Context); } } break; @@ -5882,16 +6135,16 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NativeTypeArrayPointerInfoContext nativeTypeArrayPointerInfo() { NativeTypeArrayPointerInfoContext _localctx = new NativeTypeArrayPointerInfoContext(Context, State); - EnterRule(_localctx, 146, RULE_nativeTypeArrayPointerInfo); + EnterRule(_localctx, 150, RULE_nativeTypeArrayPointerInfo); try { - State = 1156; + State = 1218; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,52,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,53,Context) ) { case 1: _localctx = new PointerNativeTypeContext(_localctx); EnterOuterAlt(_localctx, 1); { - State = 1139; + State = 1201; Match(PTR); } break; @@ -5899,7 +6152,7 @@ public NativeTypeArrayPointerInfoContext nativeTypeArrayPointerInfo() { _localctx = new PointerArrayTypeNoSizeDataContext(_localctx); EnterOuterAlt(_localctx, 2); { - State = 1140; + State = 1202; Match(ARRAY_TYPE_NO_BOUNDS); } break; @@ -5907,11 +6160,11 @@ public NativeTypeArrayPointerInfoContext nativeTypeArrayPointerInfo() { _localctx = new PointerArrayTypeSizeContext(_localctx); EnterOuterAlt(_localctx, 3); { - State = 1141; + State = 1203; Match(T__40); - State = 1142; + State = 1204; int32(); - State = 1143; + State = 1205; Match(T__41); } break; @@ -5919,15 +6172,15 @@ public NativeTypeArrayPointerInfoContext nativeTypeArrayPointerInfo() { _localctx = new PointerArrayTypeSizeParamIndexContext(_localctx); EnterOuterAlt(_localctx, 4); { - State = 1145; + State = 1207; Match(T__40); - State = 1146; + State = 1208; int32(); - State = 1147; + State = 1209; Match(PLUS); - State = 1148; + State = 1210; int32(); - State = 1149; + State = 1211; Match(T__41); } break; @@ -5935,13 +6188,13 @@ public NativeTypeArrayPointerInfoContext nativeTypeArrayPointerInfo() { _localctx = new PointerArrayTypeParamIndexContext(_localctx); EnterOuterAlt(_localctx, 5); { - State = 1151; + State = 1213; Match(T__40); - State = 1152; + State = 1214; Match(PLUS); - State = 1153; + State = 1215; int32(); - State = 1154; + State = 1216; Match(T__41); } break; @@ -5960,6 +6213,7 @@ public NativeTypeArrayPointerInfoContext nativeTypeArrayPointerInfo() { public partial class NativeTypeElementContext : ParserRuleContext { public IToken marshalType; + public IToken marshalBool; [System.Diagnostics.DebuggerNonUserCode] public CompQstringContext[] compQstring() { return GetRuleContexts(); } @@ -6012,11 +6266,9 @@ [System.Diagnostics.DebuggerNonUserCode] public VariantTypeContext variantType() [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SAFEARRAY() { return GetToken(CILParser.SAFEARRAY, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INT() { return GetToken(CILParser.INT, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UINT() { return GetToken(CILParser.UINT, 0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NESTEDSTRUCT() { return GetToken(CILParser.NESTEDSTRUCT, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode BYVALSTR() { return GetToken(CILParser.BYVALSTR, 0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ANSIBSTR() { return GetToken(CILParser.ANSIBSTR, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ANSI() { return GetToken(CILParser.ANSI, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TBSTR() { return GetToken(CILParser.TBSTR, 0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VARIANTBOOL() { return GetToken(CILParser.VARIANTBOOL, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode METHOD() { return GetToken(CILParser.METHOD, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode LPSTRUCT() { return GetToken(CILParser.LPSTRUCT, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ANY() { return GetToken(CILParser.ANY, 0); } @@ -6039,11 +6291,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NativeTypeElementContext nativeTypeElement() { NativeTypeElementContext _localctx = new NativeTypeElementContext(Context, State); - EnterRule(_localctx, 148, RULE_nativeTypeElement); + EnterRule(_localctx, 152, RULE_nativeTypeElement); try { - State = 1239; + State = 1304; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,53,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,54,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { @@ -6052,370 +6304,376 @@ public NativeTypeElementContext nativeTypeElement() { case 2: EnterOuterAlt(_localctx, 2); { - State = 1159; + State = 1221; _localctx.marshalType = Match(CUSTOM); - State = 1160; + State = 1222; Match(T__28); - State = 1161; + State = 1223; compQstring(); - State = 1162; + State = 1224; Match(T__26); - State = 1163; + State = 1225; compQstring(); - State = 1164; + State = 1226; Match(T__26); - State = 1165; + State = 1227; compQstring(); - State = 1166; + State = 1228; Match(T__26); - State = 1167; + State = 1229; compQstring(); - State = 1168; + State = 1230; Match(T__29); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1170; + State = 1232; _localctx.marshalType = Match(CUSTOM); - State = 1171; + State = 1233; Match(T__28); - State = 1172; + State = 1234; compQstring(); - State = 1173; + State = 1235; Match(T__26); - State = 1174; + State = 1236; compQstring(); - State = 1175; + State = 1237; Match(T__29); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1177; + State = 1239; Match(FIXED); - State = 1178; + State = 1240; _localctx.marshalType = Match(SYSSTRING); - State = 1179; + State = 1241; Match(T__40); - State = 1180; + State = 1242; int32(); - State = 1181; + State = 1243; Match(T__41); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1183; + State = 1245; Match(FIXED); - State = 1184; + State = 1246; _localctx.marshalType = Match(ARRAY); - State = 1185; + State = 1247; Match(T__40); - State = 1186; + State = 1248; int32(); - State = 1187; + State = 1249; Match(T__41); - State = 1188; + State = 1250; nativeType(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1190; + State = 1252; _localctx.marshalType = Match(VARIANT); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 1191; + State = 1253; _localctx.marshalType = Match(CURRENCY); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 1192; + State = 1254; _localctx.marshalType = Match(SYSCHAR); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 1193; + State = 1255; _localctx.marshalType = Match(VOID); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 1194; + State = 1256; _localctx.marshalType = Match(BOOL); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 1195; + State = 1257; _localctx.marshalType = Match(INT8); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 1196; + State = 1258; _localctx.marshalType = Match(INT16); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 1197; + State = 1259; _localctx.marshalType = Match(INT32_); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 1198; + State = 1260; _localctx.marshalType = Match(INT64_); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 1199; + State = 1261; _localctx.marshalType = Match(FLOAT32); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 1200; + State = 1262; _localctx.marshalType = Match(FLOAT64_); } break; case 17: EnterOuterAlt(_localctx, 17); { - State = 1201; + State = 1263; _localctx.marshalType = Match(ERROR); } break; case 18: EnterOuterAlt(_localctx, 18); { - State = 1202; + State = 1264; _localctx.marshalType = Match(UINT8); } break; case 19: EnterOuterAlt(_localctx, 19); { - State = 1203; + State = 1265; _localctx.marshalType = Match(UINT16); } break; case 20: EnterOuterAlt(_localctx, 20); { - State = 1204; + State = 1266; _localctx.marshalType = Match(UINT32); } break; case 21: EnterOuterAlt(_localctx, 21); { - State = 1205; + State = 1267; _localctx.marshalType = Match(UINT64); } break; case 22: EnterOuterAlt(_localctx, 22); { - State = 1206; + State = 1268; _localctx.marshalType = Match(DECIMAL); } break; case 23: EnterOuterAlt(_localctx, 23); { - State = 1207; + State = 1269; _localctx.marshalType = Match(DATE); } break; case 24: EnterOuterAlt(_localctx, 24); { - State = 1208; + State = 1270; _localctx.marshalType = Match(BSTR); } break; case 25: EnterOuterAlt(_localctx, 25); { - State = 1209; + State = 1271; _localctx.marshalType = Match(LPSTR); } break; case 26: EnterOuterAlt(_localctx, 26); { - State = 1210; + State = 1272; _localctx.marshalType = Match(LPWSTR); } break; case 27: EnterOuterAlt(_localctx, 27); { - State = 1211; + State = 1273; _localctx.marshalType = Match(LPTSTR); } break; case 28: EnterOuterAlt(_localctx, 28); { - State = 1212; + State = 1274; _localctx.marshalType = Match(OBJECTREF); } break; case 29: EnterOuterAlt(_localctx, 29); { - State = 1213; + State = 1275; _localctx.marshalType = Match(IUNKNOWN); - State = 1214; + State = 1276; iidParamIndex(); } break; case 30: EnterOuterAlt(_localctx, 30); { - State = 1215; + State = 1277; _localctx.marshalType = Match(IDISPATCH); - State = 1216; + State = 1278; iidParamIndex(); } break; case 31: EnterOuterAlt(_localctx, 31); { - State = 1217; + State = 1279; _localctx.marshalType = Match(STRUCT); } break; case 32: EnterOuterAlt(_localctx, 32); { - State = 1218; + State = 1280; _localctx.marshalType = Match(INTERFACE); - State = 1219; + State = 1281; iidParamIndex(); } break; case 33: EnterOuterAlt(_localctx, 33); { - State = 1220; + State = 1282; _localctx.marshalType = Match(SAFEARRAY); - State = 1221; + State = 1283; variantType(); } break; case 34: EnterOuterAlt(_localctx, 34); { - State = 1222; + State = 1284; _localctx.marshalType = Match(SAFEARRAY); - State = 1223; + State = 1285; variantType(); - State = 1224; + State = 1286; Match(T__26); - State = 1225; + State = 1287; compQstring(); } break; case 35: EnterOuterAlt(_localctx, 35); { - State = 1227; + State = 1289; _localctx.marshalType = Match(INT); } break; case 36: EnterOuterAlt(_localctx, 36); { - State = 1228; + State = 1290; _localctx.marshalType = Match(UINT); } break; case 37: EnterOuterAlt(_localctx, 37); { - State = 1229; - _localctx.marshalType = Match(NESTEDSTRUCT); + State = 1291; + Match(T__60); + State = 1292; + _localctx.marshalType = Match(STRUCT); } break; case 38: EnterOuterAlt(_localctx, 38); { - State = 1230; + State = 1293; _localctx.marshalType = Match(BYVALSTR); } break; case 39: EnterOuterAlt(_localctx, 39); { - State = 1231; - _localctx.marshalType = Match(ANSIBSTR); + State = 1294; + Match(ANSI); + State = 1295; + _localctx.marshalType = Match(BSTR); } break; case 40: EnterOuterAlt(_localctx, 40); { - State = 1232; + State = 1296; _localctx.marshalType = Match(TBSTR); } break; case 41: EnterOuterAlt(_localctx, 41); { - State = 1233; - _localctx.marshalType = Match(VARIANTBOOL); + State = 1297; + Match(VARIANT); + State = 1298; + _localctx.marshalBool = Match(BOOL); } break; case 42: EnterOuterAlt(_localctx, 42); { - State = 1234; + State = 1299; _localctx.marshalType = Match(METHOD); } break; case 43: EnterOuterAlt(_localctx, 43); { - State = 1235; + State = 1300; _localctx.marshalType = Match(LPSTRUCT); } break; case 44: EnterOuterAlt(_localctx, 44); { - State = 1236; + State = 1301; Match(T__32); - State = 1237; + State = 1302; _localctx.marshalType = Match(ANY); } break; case 45: EnterOuterAlt(_localctx, 45); { - State = 1238; + State = 1303; dottedName(); } break; @@ -6452,9 +6710,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public IidParamIndexContext iidParamIndex() { IidParamIndexContext _localctx = new IidParamIndexContext(Context, State); - EnterRule(_localctx, 150, RULE_iidParamIndex); + EnterRule(_localctx, 154, RULE_iidParamIndex); try { - State = 1248; + State = 1313; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__29: @@ -6468,15 +6726,15 @@ public IidParamIndexContext iidParamIndex() { case T__28: EnterOuterAlt(_localctx, 2); { - State = 1242; + State = 1307; Match(T__28); - State = 1243; + State = 1308; Match(T__88); - State = 1244; + State = 1309; Match(T__34); - State = 1245; + State = 1310; int32(); - State = 1246; + State = 1311; Match(T__29); } break; @@ -6527,13 +6785,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public VariantTypeContext variantType() { VariantTypeContext _localctx = new VariantTypeContext(Context, State); - EnterRule(_localctx, 152, RULE_variantType); + EnterRule(_localctx, 156, RULE_variantType); int _la; try { int _alt; - State = 1258; + State = 1323; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,56,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,57,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { @@ -6542,18 +6800,18 @@ public VariantTypeContext variantType() { case 2: EnterOuterAlt(_localctx, 2); { - State = 1251; + State = 1316; variantTypeElement(); - State = 1255; + State = 1320; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,55,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,56,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1252; + State = 1317; _la = TokenStream.LA(1); - if ( !(((((_la - 229)) & ~0x3f) == 0 && ((1L << (_la - 229)) & 25769803777L) != 0)) ) { + if ( !(((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & 6442450945L) != 0)) ) { ErrorHandler.RecoverInline(this); } else { @@ -6563,9 +6821,9 @@ public VariantTypeContext variantType() { } } } - State = 1257; + State = 1322; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,55,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,56,Context); } } break; @@ -6639,14 +6897,14 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public VariantTypeElementContext variantTypeElement() { VariantTypeElementContext _localctx = new VariantTypeElementContext(Context, State); - EnterRule(_localctx, 154, RULE_variantTypeElement); + EnterRule(_localctx, 158, RULE_variantTypeElement); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1260; + State = 1325; _la = TokenStream.LA(1); - if ( !(((((_la - 175)) & ~0x3f) == 0 && ((1L << (_la - 175)) & -36007634095833119L) != 0) || ((((_la - 239)) & ~0x3f) == 0 && ((1L << (_la - 239)) & 33554447L) != 0)) ) { + if ( !(((((_la - 177)) & ~0x3f) == 0 && ((1L << (_la - 177)) & -4482436704239647L) != 0) || _la==CLSID || _la==PTR) ) { ErrorHandler.RecoverInline(this); } else { @@ -6692,28 +6950,28 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TypeContext type() { TypeContext _localctx = new TypeContext(Context, State); - EnterRule(_localctx, 156, RULE_type); + EnterRule(_localctx, 160, RULE_type); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 1262; + State = 1327; elementType(); - State = 1266; + State = 1331; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,57,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,58,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1263; + State = 1328; typeModifiers(); } } } - State = 1268; + State = 1333; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,57,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,58,Context); } } } @@ -6753,6 +7011,7 @@ public override TResult Accept(IParseTreeVisitor visitor) { } } public partial class SZArrayModifierContext : TypeModifiersContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ARRAY_TYPE_NO_BOUNDS() { return GetToken(CILParser.ARRAY_TYPE_NO_BOUNDS, 0); } public SZArrayModifierContext(TypeModifiersContext context) { CopyFrom(context); } [System.Diagnostics.DebuggerNonUserCode] public override TResult Accept(IParseTreeVisitor visitor) { @@ -6830,86 +7089,94 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TypeModifiersContext typeModifiers() { TypeModifiersContext _localctx = new TypeModifiersContext(Context, State); - EnterRule(_localctx, 158, RULE_typeModifiers); + EnterRule(_localctx, 162, RULE_typeModifiers); try { - State = 1286; + State = 1352; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,58,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,59,Context) ) { case 1: _localctx = new SZArrayModifierContext(_localctx); EnterOuterAlt(_localctx, 1); { - State = 1269; + State = 1334; + Match(ARRAY_TYPE_NO_BOUNDS); + } + break; + case 2: + _localctx = new SZArrayModifierContext(_localctx); + EnterOuterAlt(_localctx, 2); + { + State = 1335; Match(T__40); - State = 1270; + State = 1336; Match(T__41); } break; - case 2: + case 3: _localctx = new ArrayModifierContext(_localctx); - EnterOuterAlt(_localctx, 2); + EnterOuterAlt(_localctx, 3); { - State = 1271; + State = 1337; bounds(); } break; - case 3: + case 4: _localctx = new ByRefModifierContext(_localctx); - EnterOuterAlt(_localctx, 3); + EnterOuterAlt(_localctx, 4); { - State = 1272; + State = 1338; Match(REF); } break; - case 4: + case 5: _localctx = new PtrModifierContext(_localctx); - EnterOuterAlt(_localctx, 4); + EnterOuterAlt(_localctx, 5); { - State = 1273; + State = 1339; Match(PTR); } break; - case 5: + case 6: _localctx = new PinnedModifierContext(_localctx); - EnterOuterAlt(_localctx, 5); + EnterOuterAlt(_localctx, 6); { - State = 1274; + State = 1340; Match(T__89); } break; - case 6: + case 7: _localctx = new RequiredModifierContext(_localctx); - EnterOuterAlt(_localctx, 6); + EnterOuterAlt(_localctx, 7); { - State = 1275; + State = 1341; Match(T__90); - State = 1276; + State = 1342; Match(T__28); - State = 1277; + State = 1343; typeSpec(); - State = 1278; + State = 1344; Match(T__29); } break; - case 7: + case 8: _localctx = new OptionalModifierContext(_localctx); - EnterOuterAlt(_localctx, 7); + EnterOuterAlt(_localctx, 8); { - State = 1280; + State = 1346; Match(T__91); - State = 1281; + State = 1347; Match(T__28); - State = 1282; + State = 1348; typeSpec(); - State = 1283; + State = 1349; Match(T__29); } break; - case 8: + case 9: _localctx = new GenericArgumentsModifierContext(_localctx); - EnterOuterAlt(_localctx, 8); + EnterOuterAlt(_localctx, 9); { - State = 1285; + State = 1351; typeArgs(); } break; @@ -6954,8 +7221,12 @@ [System.Diagnostics.DebuggerNonUserCode] public DottedNameContext dottedName() { } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode TYPEDREF() { return GetToken(CILParser.TYPEDREF, 0); } [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode VOID() { return GetToken(CILParser.VOID, 0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NATIVE_INT() { return GetToken(CILParser.NATIVE_INT, 0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode NATIVE_UINT() { return GetToken(CILParser.NATIVE_UINT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public NativeIntContext nativeInt() { + return GetRuleContext(0); + } + [System.Diagnostics.DebuggerNonUserCode] public NativeUintContext nativeUint() { + return GetRuleContext(0); + } [System.Diagnostics.DebuggerNonUserCode] public SimpleTypeContext simpleType() { return GetRuleContext(0); } @@ -6976,146 +7247,146 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ElementTypeContext elementType() { ElementTypeContext _localctx = new ElementTypeContext(Context, State); - EnterRule(_localctx, 160, RULE_elementType); + EnterRule(_localctx, 164, RULE_elementType); try { - State = 1318; + State = 1384; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,59,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,60,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1288; + State = 1354; Match(T__37); - State = 1289; + State = 1355; className(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1290; + State = 1356; Match(OBJECT); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1291; + State = 1357; Match(VALUE); - State = 1292; + State = 1358; Match(T__37); - State = 1293; + State = 1359; className(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1294; + State = 1360; Match(VALUETYPE); - State = 1295; + State = 1361; className(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1296; + State = 1362; Match(METHOD); - State = 1297; + State = 1363; callConv(); - State = 1298; + State = 1364; type(); - State = 1299; + State = 1365; Match(PTR); - State = 1300; + State = 1366; sigArgs(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1302; + State = 1368; Match(METHOD_TYPE_PARAMETER); - State = 1303; + State = 1369; int32(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 1304; + State = 1370; Match(TYPE_PARAMETER); - State = 1305; + State = 1371; int32(); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 1306; + State = 1372; Match(METHOD_TYPE_PARAMETER); - State = 1307; + State = 1373; dottedName(); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 1308; + State = 1374; Match(TYPE_PARAMETER); - State = 1309; + State = 1375; dottedName(); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 1310; + State = 1376; Match(TYPEDREF); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 1311; + State = 1377; Match(VOID); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 1312; - Match(NATIVE_INT); + State = 1378; + nativeInt(); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 1313; - Match(NATIVE_UINT); + State = 1379; + nativeUint(); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 1314; + State = 1380; simpleType(); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 1315; + State = 1381; dottedName(); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 1316; + State = 1382; Match(ELLIPSIS); - State = 1317; + State = 1383; type(); } break; @@ -7162,20 +7433,138 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SimpleTypeContext simpleType() { SimpleTypeContext _localctx = new SimpleTypeContext(Context, State); - EnterRule(_localctx, 162, RULE_simpleType); - int _la; + EnterRule(_localctx, 166, RULE_simpleType); try { - EnterOuterAlt(_localctx, 1); - { - State = 1320; - _la = TokenStream.LA(1); - if ( !(((((_la - 178)) & ~0x3f) == 0 && ((1L << (_la - 178)) & 8191L) != 0)) ) { - ErrorHandler.RecoverInline(this); - } - else { - ErrorHandler.ReportMatch(this); - Consume(); - } + State = 1407; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,61,Context) ) { + case 1: + EnterOuterAlt(_localctx, 1); + { + State = 1386; + Match(CHAR); + } + break; + case 2: + EnterOuterAlt(_localctx, 2); + { + State = 1387; + Match(STRING); + } + break; + case 3: + EnterOuterAlt(_localctx, 3); + { + State = 1388; + Match(BOOL); + } + break; + case 4: + EnterOuterAlt(_localctx, 4); + { + State = 1389; + Match(INT8); + } + break; + case 5: + EnterOuterAlt(_localctx, 5); + { + State = 1390; + Match(INT16); + } + break; + case 6: + EnterOuterAlt(_localctx, 6); + { + State = 1391; + Match(INT32_); + } + break; + case 7: + EnterOuterAlt(_localctx, 7); + { + State = 1392; + Match(INT64_); + } + break; + case 8: + EnterOuterAlt(_localctx, 8); + { + State = 1393; + Match(FLOAT32); + } + break; + case 9: + EnterOuterAlt(_localctx, 9); + { + State = 1394; + Match(FLOAT64_); + } + break; + case 10: + EnterOuterAlt(_localctx, 10); + { + State = 1395; + Match(UINT8); + } + break; + case 11: + EnterOuterAlt(_localctx, 11); + { + State = 1396; + Match(UINT16); + } + break; + case 12: + EnterOuterAlt(_localctx, 12); + { + State = 1397; + Match(UINT32); + } + break; + case 13: + EnterOuterAlt(_localctx, 13); + { + State = 1398; + Match(UINT64); + } + break; + case 14: + EnterOuterAlt(_localctx, 14); + { + State = 1399; + Match(T__92); + State = 1400; + Match(INT8); + } + break; + case 15: + EnterOuterAlt(_localctx, 15); + { + State = 1401; + Match(T__92); + State = 1402; + Match(INT16); + } + break; + case 16: + EnterOuterAlt(_localctx, 16); + { + State = 1403; + Match(T__92); + State = 1404; + Match(INT32_); + } + break; + case 17: + EnterOuterAlt(_localctx, 17); + { + State = 1405; + Match(T__92); + State = 1406; + Match(INT64_); + } + break; } } catch (RecognitionException re) { @@ -7213,11 +7602,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public BoundContext bound() { BoundContext _localctx = new BoundContext(Context, State); - EnterRule(_localctx, 164, RULE_bound); + EnterRule(_localctx, 168, RULE_bound); try { - State = 1332; + State = 1419; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,60,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,62,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { @@ -7226,34 +7615,34 @@ public BoundContext bound() { case 2: EnterOuterAlt(_localctx, 2); { - State = 1323; + State = 1410; Match(ELLIPSIS); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1324; + State = 1411; int32(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1325; + State = 1412; int32(); - State = 1326; + State = 1413; Match(ELLIPSIS); - State = 1327; + State = 1414; int32(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1329; + State = 1416; int32(); - State = 1330; + State = 1417; Match(ELLIPSIS); } break; @@ -7270,6 +7659,103 @@ public BoundContext bound() { return _localctx; } + public partial class NativeIntContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INT() { return GetToken(CILParser.INT, 0); } + public NativeIntContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_nativeInt; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + ICILVisitor typedVisitor = visitor as ICILVisitor; + if (typedVisitor != null) return typedVisitor.VisitNativeInt(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public NativeIntContext nativeInt() { + NativeIntContext _localctx = new NativeIntContext(Context, State); + EnterRule(_localctx, 170, RULE_nativeInt); + try { + EnterOuterAlt(_localctx, 1); + { + State = 1421; + Match(T__0); + State = 1422; + Match(INT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class NativeUintContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INT() { return GetToken(CILParser.INT, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode UINT() { return GetToken(CILParser.UINT, 0); } + public NativeUintContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_nativeUint; } } + [System.Diagnostics.DebuggerNonUserCode] + public override TResult Accept(IParseTreeVisitor visitor) { + ICILVisitor typedVisitor = visitor as ICILVisitor; + if (typedVisitor != null) return typedVisitor.VisitNativeUint(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public NativeUintContext nativeUint() { + NativeUintContext _localctx = new NativeUintContext(Context, State); + EnterRule(_localctx, 172, RULE_nativeUint); + try { + EnterOuterAlt(_localctx, 1); + { + State = 1424; + Match(T__0); + State = 1428; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case T__92: + { + State = 1425; + Match(T__92); + State = 1426; + Match(INT); + } + break; + case UINT: + { + State = 1427; + Match(UINT); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + public partial class SecDeclContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode PERMISSION() { return GetToken(CILParser.PERMISSION, 0); } [System.Diagnostics.DebuggerNonUserCode] public SecActionContext secAction() { @@ -7310,111 +7796,111 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SecDeclContext secDecl() { SecDeclContext _localctx = new SecDeclContext(Context, State); - EnterRule(_localctx, 166, RULE_secDecl); + EnterRule(_localctx, 174, RULE_secDecl); int _la; try { - State = 1374; + State = 1470; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,62,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,65,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1334; + State = 1430; Match(PERMISSION); - State = 1335; + State = 1431; secAction(); - State = 1336; + State = 1432; typeSpec(); - State = 1337; + State = 1433; Match(T__28); - State = 1338; + State = 1434; nameValPairs(); - State = 1339; + State = 1435; Match(T__29); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1341; + State = 1437; Match(PERMISSION); - State = 1342; + State = 1438; secAction(); - State = 1343; + State = 1439; typeSpec(); - State = 1344; + State = 1440; Match(T__34); - State = 1345; + State = 1441; Match(T__15); - State = 1346; + State = 1442; customBlobDescr(); - State = 1347; + State = 1443; Match(T__16); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1349; + State = 1445; Match(PERMISSION); - State = 1350; + State = 1446; secAction(); - State = 1351; + State = 1447; typeSpec(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1353; + State = 1449; Match(PERMISSIONSET); - State = 1354; + State = 1450; secAction(); - State = 1355; + State = 1451; Match(T__34); - State = 1357; + State = 1453; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==T__82) { { - State = 1356; + State = 1452; Match(T__82); } } - State = 1359; + State = 1455; Match(T__28); - State = 1360; + State = 1456; bytes(); - State = 1361; + State = 1457; Match(T__29); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1363; + State = 1459; Match(PERMISSIONSET); - State = 1364; + State = 1460; secAction(); - State = 1365; + State = 1461; compQstring(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1367; + State = 1463; Match(PERMISSIONSET); - State = 1368; + State = 1464; secAction(); - State = 1369; + State = 1465; Match(T__34); - State = 1370; + State = 1466; Match(T__15); - State = 1371; + State = 1467; secAttrSetBlob(); - State = 1372; + State = 1468; Match(T__16); } break; @@ -7454,10 +7940,10 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SecAttrSetBlobContext secAttrSetBlob() { SecAttrSetBlobContext _localctx = new SecAttrSetBlobContext(Context, State); - EnterRule(_localctx, 168, RULE_secAttrSetBlob); + EnterRule(_localctx, 176, RULE_secAttrSetBlob); try { int _alt; - State = 1386; + State = 1482; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__16: @@ -7465,9 +7951,11 @@ public SecAttrSetBlobContext secAttrSetBlob() { { } break; + case T__0: case T__37: case T__40: - case T__110: + case T__92: + case T__111: case ELLIPSIS: case CHAR: case STRING: @@ -7487,37 +7975,37 @@ public SecAttrSetBlobContext secAttrSetBlob() { case VALUETYPE: case VOID: case METHOD: + case INSTANCE: case TYPE_PARAMETER: case METHOD_TYPE_PARAMETER: case TYPEDREF: - case NATIVE_INT: - case NATIVE_UINT: case THIS: case BASE: case NESTER: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 2); { - State = 1382; + State = 1478; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,66,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1377; + State = 1473; secAttrBlob(); - State = 1378; + State = 1474; Match(T__26); } } } - State = 1384; + State = 1480; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,63,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,66,Context); } - State = 1385; + State = 1481; secAttrBlob(); } break; @@ -7537,13 +8025,13 @@ public SecAttrSetBlobContext secAttrSetBlob() { } public partial class SecAttrBlobContext : ParserRuleContext { - [System.Diagnostics.DebuggerNonUserCode] public TypeSpecContext typeSpec() { - return GetRuleContext(0); - } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SQSTRING() { return GetToken(CILParser.SQSTRING, 0); } [System.Diagnostics.DebuggerNonUserCode] public CustomBlobNVPairsContext customBlobNVPairs() { return GetRuleContext(0); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode SQSTRING() { return GetToken(CILParser.SQSTRING, 0); } + [System.Diagnostics.DebuggerNonUserCode] public TypeSpecContext typeSpec() { + return GetRuleContext(0); + } public SecAttrBlobContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -7560,40 +8048,40 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SecAttrBlobContext secAttrBlob() { SecAttrBlobContext _localctx = new SecAttrBlobContext(Context, State); - EnterRule(_localctx, 170, RULE_secAttrBlob); + EnterRule(_localctx, 178, RULE_secAttrBlob); try { - State = 1401; + State = 1497; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,65,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,68,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1388; - typeSpec(); - State = 1389; + State = 1484; + Match(T__37); + State = 1485; + Match(SQSTRING); + State = 1486; Match(T__34); - State = 1390; + State = 1487; Match(T__15); - State = 1391; + State = 1488; customBlobNVPairs(); - State = 1392; + State = 1489; Match(T__16); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1394; - Match(T__37); - State = 1395; - Match(SQSTRING); - State = 1396; + State = 1491; + typeSpec(); + State = 1492; Match(T__34); - State = 1397; + State = 1493; Match(T__15); - State = 1398; + State = 1494; customBlobNVPairs(); - State = 1399; + State = 1495; Match(T__16); } break; @@ -7633,30 +8121,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NameValPairsContext nameValPairs() { NameValPairsContext _localctx = new NameValPairsContext(Context, State); - EnterRule(_localctx, 172, RULE_nameValPairs); + EnterRule(_localctx, 180, RULE_nameValPairs); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 1408; + State = 1504; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,66,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,69,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1403; + State = 1499; nameValPair(); - State = 1404; + State = 1500; Match(T__26); } } } - State = 1410; + State = 1506; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,66,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,69,Context); } - State = 1411; + State = 1507; nameValPair(); } } @@ -7694,15 +8182,15 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public NameValPairContext nameValPair() { NameValPairContext _localctx = new NameValPairContext(Context, State); - EnterRule(_localctx, 174, RULE_nameValPair); + EnterRule(_localctx, 182, RULE_nameValPair); try { EnterOuterAlt(_localctx, 1); { - State = 1413; + State = 1509; compQstring(); - State = 1414; + State = 1510; Match(T__34); - State = 1415; + State = 1511; caValue(); } } @@ -7734,14 +8222,14 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TruefalseContext truefalse() { TruefalseContext _localctx = new TruefalseContext(Context, State); - EnterRule(_localctx, 176, RULE_truefalse); + EnterRule(_localctx, 184, RULE_truefalse); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1417; + State = 1513; _la = TokenStream.LA(1); - if ( !(_la==T__92 || _la==T__93) ) { + if ( !(_la==T__93 || _la==T__94) ) { ErrorHandler.RecoverInline(this); } else { @@ -7793,106 +8281,106 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CaValueContext caValue() { CaValueContext _localctx = new CaValueContext(Context, State); - EnterRule(_localctx, 178, RULE_caValue); + EnterRule(_localctx, 186, RULE_caValue); try { - State = 1453; + State = 1549; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,67,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,70,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1419; + State = 1515; truefalse(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1420; + State = 1516; int32(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1421; + State = 1517; Match(INT32_); - State = 1422; + State = 1518; Match(T__28); - State = 1423; + State = 1519; int32(); - State = 1424; + State = 1520; Match(T__29); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1426; + State = 1522; compQstring(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1427; + State = 1523; className(); - State = 1428; + State = 1524; Match(T__28); - State = 1429; + State = 1525; Match(INT8); - State = 1430; + State = 1526; Match(T__73); - State = 1431; + State = 1527; int32(); - State = 1432; + State = 1528; Match(T__29); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1434; + State = 1530; className(); - State = 1435; + State = 1531; Match(T__28); - State = 1436; + State = 1532; Match(INT16); - State = 1437; + State = 1533; Match(T__73); - State = 1438; + State = 1534; int32(); - State = 1439; + State = 1535; Match(T__29); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 1441; + State = 1537; className(); - State = 1442; + State = 1538; Match(T__28); - State = 1443; + State = 1539; Match(INT32_); - State = 1444; + State = 1540; Match(T__73); - State = 1445; + State = 1541; int32(); - State = 1446; + State = 1542; Match(T__29); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 1448; + State = 1544; className(); - State = 1449; + State = 1545; Match(T__28); - State = 1450; + State = 1546; int32(); - State = 1451; + State = 1547; Match(T__29); } break; @@ -7926,14 +8414,14 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SecActionContext secAction() { SecActionContext _localctx = new SecActionContext(Context, State); - EnterRule(_localctx, 180, RULE_secAction); + EnterRule(_localctx, 188, RULE_secAction); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1455; + State = 1551; _la = TokenStream.LA(1); - if ( !(((((_la - 95)) & ~0x3f) == 0 && ((1L << (_la - 95)) & 32767L) != 0)) ) { + if ( !(((((_la - 96)) & ~0x3f) == 0 && ((1L << (_la - 96)) & 32767L) != 0)) ) { ErrorHandler.RecoverInline(this); } else { @@ -7998,107 +8486,107 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MethodRefContext methodRef() { MethodRefContext _localctx = new MethodRefContext(Context, State); - EnterRule(_localctx, 182, RULE_methodRef); + EnterRule(_localctx, 190, RULE_methodRef); int _la; try { - State = 1491; + State = 1587; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,70,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,73,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1457; + State = 1553; callConv(); - State = 1458; + State = 1554; type(); - State = 1459; + State = 1555; typeSpec(); - State = 1460; + State = 1556; Match(DCOLON); - State = 1461; + State = 1557; methodName(); - State = 1463; + State = 1559; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if (_la==T__83) { + if (_la==T__84) { { - State = 1462; + State = 1558; typeArgs(); } } - State = 1465; + State = 1561; sigArgs(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1467; + State = 1563; callConv(); - State = 1468; + State = 1564; type(); - State = 1469; + State = 1565; typeSpec(); - State = 1470; + State = 1566; Match(DCOLON); - State = 1471; + State = 1567; methodName(); - State = 1472; + State = 1568; genArityNotEmpty(); - State = 1473; + State = 1569; sigArgs(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1475; + State = 1571; callConv(); - State = 1476; + State = 1572; type(); - State = 1477; + State = 1573; methodName(); - State = 1479; + State = 1575; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if (_la==T__83) { + if (_la==T__84) { { - State = 1478; + State = 1574; typeArgs(); } } - State = 1481; + State = 1577; sigArgs(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1483; + State = 1579; callConv(); - State = 1484; + State = 1580; type(); - State = 1485; + State = 1581; methodName(); - State = 1486; + State = 1582; genArityNotEmpty(); - State = 1487; + State = 1583; sigArgs(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1489; + State = 1585; mdtoken(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1490; + State = 1586; dottedName(); } break; @@ -8143,81 +8631,49 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CallConvContext callConv() { CallConvContext _localctx = new CallConvContext(Context, State); - EnterRule(_localctx, 184, RULE_callConv); + EnterRule(_localctx, 192, RULE_callConv); try { - State = 1503; + State = 1599; ErrorHandler.Sync(this); - switch (TokenStream.LA(1)) { - case INSTANCE: + switch ( Interpreter.AdaptivePredict(TokenStream,74,Context) ) { + case 1: EnterOuterAlt(_localctx, 1); { - State = 1493; + State = 1589; Match(INSTANCE); - State = 1494; + State = 1590; callConv(); } break; - case EXPLICIT: + case 2: EnterOuterAlt(_localctx, 2); { - State = 1495; + State = 1591; Match(EXPLICIT); - State = 1496; + State = 1592; callConv(); } break; - case T__37: - case T__40: - case ELLIPSIS: - case CHAR: - case STRING: - case BOOL: - case INT8: - case INT16: - case INT32_: - case INT64_: - case FLOAT32: - case FLOAT64_: - case UINT8: - case UINT16: - case UINT32: - case UINT64: - case OBJECT: - case VALUE: - case VALUETYPE: - case VOID: - case METHOD: - case DEFAULT: - case VARARG: - case UNMANAGED: - case TYPE_PARAMETER: - case METHOD_TYPE_PARAMETER: - case TYPEDREF: - case NATIVE_INT: - case NATIVE_UINT: - case DOTTEDNAME: - case ID: + case 3: EnterOuterAlt(_localctx, 3); { - State = 1497; + State = 1593; callKind(); } break; - case T__109: + case 4: EnterOuterAlt(_localctx, 4); { - State = 1498; - Match(T__109); - State = 1499; + State = 1594; + Match(T__110); + State = 1595; Match(T__28); - State = 1500; + State = 1596; int32(); - State = 1501; + State = 1597; Match(T__29); } break; - default: - throw new NoViableAltException(this); } } catch (RecognitionException re) { @@ -8255,11 +8711,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CallKindContext callKind() { CallKindContext _localctx = new CallKindContext(Context, State); - EnterRule(_localctx, 186, RULE_callKind); + EnterRule(_localctx, 194, RULE_callKind); try { - State = 1517; + State = 1613; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,72,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,75,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { @@ -8268,57 +8724,57 @@ public CallKindContext callKind() { case 2: EnterOuterAlt(_localctx, 2); { - State = 1506; + State = 1602; Match(DEFAULT); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1507; + State = 1603; Match(VARARG); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1508; + State = 1604; Match(UNMANAGED); - State = 1509; + State = 1605; Match(CDECL); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1510; + State = 1606; Match(UNMANAGED); - State = 1511; + State = 1607; Match(STDCALL); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1512; + State = 1608; Match(UNMANAGED); - State = 1513; + State = 1609; Match(THISCALL); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 1514; + State = 1610; Match(UNMANAGED); - State = 1515; + State = 1611; Match(FASTCALL); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 1516; + State = 1612; Match(UNMANAGED); } break; @@ -8355,17 +8811,17 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MdtokenContext mdtoken() { MdtokenContext _localctx = new MdtokenContext(Context, State); - EnterRule(_localctx, 188, RULE_mdtoken); + EnterRule(_localctx, 196, RULE_mdtoken); try { EnterOuterAlt(_localctx, 1); { - State = 1519; - Match(T__110); - State = 1520; + State = 1615; + Match(T__111); + State = 1616; Match(T__28); - State = 1521; + State = 1617; int32(); - State = 1522; + State = 1618; Match(T__29); } } @@ -8407,33 +8863,33 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MemberRefContext memberRef() { MemberRefContext _localctx = new MemberRefContext(Context, State); - EnterRule(_localctx, 190, RULE_memberRef); + EnterRule(_localctx, 198, RULE_memberRef); try { - State = 1529; + State = 1625; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case METHOD: EnterOuterAlt(_localctx, 1); { - State = 1524; + State = 1620; Match(METHOD); - State = 1525; + State = 1621; methodRef(); } break; case T__35: EnterOuterAlt(_localctx, 2); { - State = 1526; + State = 1622; Match(T__35); - State = 1527; + State = 1623; fieldRef(); } break; - case T__110: + case T__111: EnterOuterAlt(_localctx, 3); { - State = 1528; + State = 1624; mdtoken(); } break; @@ -8479,37 +8935,37 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FieldRefContext fieldRef() { FieldRefContext _localctx = new FieldRefContext(Context, State); - EnterRule(_localctx, 192, RULE_fieldRef); + EnterRule(_localctx, 200, RULE_fieldRef); try { - State = 1540; + State = 1636; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,74,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,77,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1531; + State = 1627; type(); - State = 1532; + State = 1628; typeSpec(); - State = 1533; + State = 1629; Match(DCOLON); - State = 1534; + State = 1630; dottedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1536; + State = 1632; type(); - State = 1537; + State = 1633; dottedName(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1539; + State = 1635; dottedName(); } break; @@ -8549,30 +9005,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TypeListContext typeList() { TypeListContext _localctx = new TypeListContext(Context, State); - EnterRule(_localctx, 194, RULE_typeList); + EnterRule(_localctx, 202, RULE_typeList); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 1547; + State = 1643; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,78,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1542; + State = 1638; typeSpec(); - State = 1543; + State = 1639; Match(T__26); } } } - State = 1549; + State = 1645; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,75,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,78,Context); } - State = 1550; + State = 1646; typeSpec(); } } @@ -8607,29 +9063,29 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TyparsClauseContext typarsClause() { TyparsClauseContext _localctx = new TyparsClauseContext(Context, State); - EnterRule(_localctx, 196, RULE_typarsClause); + EnterRule(_localctx, 204, RULE_typarsClause); try { - State = 1557; + State = 1653; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__15: case T__28: case T__69: case T__70: - case T__85: + case T__83: EnterOuterAlt(_localctx, 1); { } break; - case T__83: + case T__84: EnterOuterAlt(_localctx, 2); { - State = 1553; - Match(T__83); - State = 1554; - typars(); - State = 1555; + State = 1649; Match(T__84); + State = 1650; + typars(); + State = 1651; + Match(T__85); } break; default: @@ -8676,63 +9132,63 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TyparAttribContext typarAttrib() { TyparAttribContext _localctx = new TyparAttribContext(Context, State); - EnterRule(_localctx, 198, RULE_typarAttrib); + EnterRule(_localctx, 206, RULE_typarAttrib); try { - State = 1570; + State = 1666; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case PLUS: EnterOuterAlt(_localctx, 1); { - State = 1559; + State = 1655; _localctx.covariant = Match(PLUS); } break; - case T__111: + case T__112: EnterOuterAlt(_localctx, 2); { - State = 1560; - _localctx.contravariant = Match(T__111); + State = 1656; + _localctx.contravariant = Match(T__112); } break; case T__37: EnterOuterAlt(_localctx, 3); { - State = 1561; + State = 1657; _localctx.@class = Match(T__37); } break; case VALUETYPE: EnterOuterAlt(_localctx, 4); { - State = 1562; + State = 1658; _localctx.valuetype = Match(VALUETYPE); } break; - case T__112: + case T__113: EnterOuterAlt(_localctx, 5); { - State = 1563; - _localctx.byrefLike = Match(T__112); + State = 1659; + _localctx.byrefLike = Match(T__113); } break; - case T__113: + case T__114: EnterOuterAlt(_localctx, 6); { - State = 1564; - _localctx.ctor = Match(T__113); + State = 1660; + _localctx.ctor = Match(T__114); } break; case T__68: EnterOuterAlt(_localctx, 7); { - State = 1565; + State = 1661; Match(T__68); - State = 1566; + State = 1662; Match(T__28); - State = 1567; + State = 1663; _localctx.flags = int32(); - State = 1568; + State = 1664; Match(T__29); } break; @@ -8774,22 +9230,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TyparAttribsContext typarAttribs() { TyparAttribsContext _localctx = new TyparAttribsContext(Context, State); - EnterRule(_localctx, 200, RULE_typarAttribs); + EnterRule(_localctx, 208, RULE_typarAttribs); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1575; + State = 1671; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (_la==T__37 || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 61572651155457L) != 0) || _la==VALUETYPE || _la==PLUS) { + while (_la==T__37 || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & 123145302310913L) != 0) || _la==VALUETYPE || _la==PLUS) { { { - State = 1572; + State = 1668; typarAttrib(); } } - State = 1577; + State = 1673; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -8832,24 +9288,24 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TyparContext typar() { TyparContext _localctx = new TyparContext(Context, State); - EnterRule(_localctx, 202, RULE_typar); + EnterRule(_localctx, 210, RULE_typar); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1578; + State = 1674; typarAttribs(); - State = 1580; + State = 1676; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==T__28) { { - State = 1579; + State = 1675; tyBound(); } } - State = 1582; + State = 1678; dottedName(); } } @@ -8887,30 +9343,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TyparsContext typars() { TyparsContext _localctx = new TyparsContext(Context, State); - EnterRule(_localctx, 204, RULE_typars); + EnterRule(_localctx, 212, RULE_typars); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 1589; + State = 1685; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,80,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,83,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1584; + State = 1680; typar(); - State = 1585; + State = 1681; Match(T__26); } } } - State = 1591; + State = 1687; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,80,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,83,Context); } - State = 1592; + State = 1688; typar(); } } @@ -8945,15 +9401,15 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TyBoundContext tyBound() { TyBoundContext _localctx = new TyBoundContext(Context, State); - EnterRule(_localctx, 206, RULE_tyBound); + EnterRule(_localctx, 214, RULE_tyBound); try { EnterOuterAlt(_localctx, 1); { - State = 1594; + State = 1690; Match(T__28); - State = 1595; + State = 1691; typeList(); - State = 1596; + State = 1692; Match(T__29); } } @@ -8988,21 +9444,21 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public GenArityContext genArity() { GenArityContext _localctx = new GenArityContext(Context, State); - EnterRule(_localctx, 208, RULE_genArity); + EnterRule(_localctx, 216, RULE_genArity); try { - State = 1600; + State = 1696; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__28: - case T__85: + case T__83: EnterOuterAlt(_localctx, 1); { } break; - case T__83: + case T__84: EnterOuterAlt(_localctx, 2); { - State = 1599; + State = 1695; genArityNotEmpty(); } break; @@ -9041,20 +9497,20 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public GenArityNotEmptyContext genArityNotEmpty() { GenArityNotEmptyContext _localctx = new GenArityNotEmptyContext(Context, State); - EnterRule(_localctx, 210, RULE_genArityNotEmpty); + EnterRule(_localctx, 218, RULE_genArityNotEmpty); try { EnterOuterAlt(_localctx, 1); { - State = 1602; - Match(T__83); - State = 1603; + State = 1698; + Match(T__84); + State = 1699; Match(T__40); - State = 1604; + State = 1700; int32(); - State = 1605; + State = 1701; Match(T__41); - State = 1606; - Match(T__84); + State = 1702; + Match(T__85); } } catch (RecognitionException re) { @@ -9196,346 +9652,346 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ClassDeclContext classDecl() { ClassDeclContext _localctx = new ClassDeclContext(Context, State); - EnterRule(_localctx, 212, RULE_classDecl); + EnterRule(_localctx, 220, RULE_classDecl); try { int _alt; - State = 1724; + State = 1820; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,86,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,89,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1608; + State = 1704; methodHead(); - State = 1609; + State = 1705; Match(T__15); - State = 1610; + State = 1706; methodDecls(); - State = 1611; + State = 1707; Match(T__16); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1613; + State = 1709; classHead(); - State = 1614; + State = 1710; Match(T__15); - State = 1615; + State = 1711; classDecls(); - State = 1616; + State = 1712; Match(T__16); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1618; + State = 1714; eventHead(); - State = 1619; + State = 1715; Match(T__15); - State = 1620; + State = 1716; eventDecls(); - State = 1621; + State = 1717; Match(T__16); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1623; + State = 1719; propHead(); - State = 1624; + State = 1720; Match(T__15); - State = 1625; + State = 1721; propDecls(); - State = 1626; + State = 1722; Match(T__16); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1628; + State = 1724; fieldDecl(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1629; + State = 1725; dataDecl(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 1630; + State = 1726; secDecl(); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 1631; + State = 1727; extSourceSpec(); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 1632; + State = 1728; customAttrDecl(); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 1633; - Match(T__114); - State = 1634; + State = 1729; + Match(T__115); + State = 1730; int32(); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 1635; - Match(T__115); - State = 1636; + State = 1731; + Match(T__116); + State = 1732; int32(); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 1637; + State = 1733; exportHead(); - State = 1638; + State = 1734; Match(T__15); - State = 1639; + State = 1735; exptypeDecls(); - State = 1640; + State = 1736; Match(T__16); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 1642; + State = 1738; Match(OVERRIDE); - State = 1643; + State = 1739; typeSpec(); - State = 1644; + State = 1740; Match(DCOLON); - State = 1645; + State = 1741; methodName(); - State = 1646; - Match(T__116); - State = 1647; + State = 1742; + Match(T__117); + State = 1743; callConv(); - State = 1648; + State = 1744; type(); - State = 1649; + State = 1745; typeSpec(); - State = 1650; + State = 1746; Match(DCOLON); - State = 1651; + State = 1747; methodName(); - State = 1652; + State = 1748; sigArgs(); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 1654; + State = 1750; Match(OVERRIDE); - State = 1655; + State = 1751; Match(METHOD); - State = 1656; + State = 1752; callConv(); - State = 1657; + State = 1753; type(); - State = 1658; + State = 1754; typeSpec(); - State = 1659; + State = 1755; Match(DCOLON); - State = 1660; + State = 1756; methodName(); - State = 1661; + State = 1757; genArity(); - State = 1662; + State = 1758; sigArgs(); - State = 1663; - Match(T__116); - State = 1664; + State = 1759; + Match(T__117); + State = 1760; Match(METHOD); - State = 1665; + State = 1761; callConv(); - State = 1666; + State = 1762; type(); - State = 1667; + State = 1763; typeSpec(); - State = 1668; + State = 1764; Match(DCOLON); - State = 1669; + State = 1765; methodName(); - State = 1670; + State = 1766; genArity(); - State = 1671; + State = 1767; sigArgs(); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 1673; + State = 1769; languageDecl(); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 1674; + State = 1770; compControl(); } break; case 17: EnterOuterAlt(_localctx, 17); { - State = 1675; + State = 1771; Match(PARAM); - State = 1676; + State = 1772; Match(TYPE); - State = 1677; + State = 1773; Match(T__40); - State = 1678; + State = 1774; int32(); - State = 1679; + State = 1775; Match(T__41); - State = 1683; + State = 1779; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,82,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,85,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1680; + State = 1776; customAttrDecl(); } } } - State = 1685; + State = 1781; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,82,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,85,Context); } } break; case 18: EnterOuterAlt(_localctx, 18); { - State = 1686; + State = 1782; Match(PARAM); - State = 1687; + State = 1783; Match(TYPE); - State = 1688; + State = 1784; dottedName(); - State = 1692; + State = 1788; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,83,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,86,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1689; + State = 1785; customAttrDecl(); } } } - State = 1694; + State = 1790; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,83,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,86,Context); } } break; case 19: EnterOuterAlt(_localctx, 19); { - State = 1695; + State = 1791; Match(PARAM); - State = 1696; + State = 1792; Match(CONSTRAINT); - State = 1697; + State = 1793; Match(T__40); - State = 1698; + State = 1794; int32(); - State = 1699; + State = 1795; Match(T__41); - State = 1700; + State = 1796; Match(T__26); - State = 1701; + State = 1797; typeSpec(); - State = 1705; + State = 1801; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,84,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,87,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1702; + State = 1798; customAttrDecl(); } } } - State = 1707; + State = 1803; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,84,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,87,Context); } } break; case 20: EnterOuterAlt(_localctx, 20); { - State = 1708; + State = 1804; Match(PARAM); - State = 1709; + State = 1805; Match(CONSTRAINT); - State = 1710; + State = 1806; dottedName(); - State = 1711; + State = 1807; Match(T__26); - State = 1712; + State = 1808; typeSpec(); - State = 1716; + State = 1812; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,85,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 1713; + State = 1809; customAttrDecl(); } } } - State = 1718; + State = 1814; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,85,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,88,Context); } } break; case 21: EnterOuterAlt(_localctx, 21); { - State = 1719; - Match(T__117); - State = 1720; + State = 1815; + Match(T__118); + State = 1816; Match(TYPE); - State = 1721; + State = 1817; typeSpec(); - State = 1722; + State = 1818; customDescr(); } break; @@ -9596,21 +10052,21 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FieldDeclContext fieldDecl() { FieldDeclContext _localctx = new FieldDeclContext(Context, State); - EnterRule(_localctx, 214, RULE_fieldDecl); + EnterRule(_localctx, 222, RULE_fieldDecl); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1726; - Match(T__118); - State = 1727; + State = 1822; + Match(T__119); + State = 1823; repeatOpt(); - State = 1736; + State = 1832; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -4608308318706860032L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & 4539628424389460027L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -4608308318706860032L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -144115188075855813L) != 0)) { { - State = 1734; + State = 1830; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__49: @@ -9622,25 +10078,26 @@ public FieldDeclContext fieldDecl() { case T__66: case T__67: case T__68: - case T__120: case T__121: case T__122: case T__123: case T__124: + case T__125: + case T__126: { - State = 1728; + State = 1824; fieldAttr(); } break; - case T__119: + case T__120: { - State = 1729; - Match(T__119); - State = 1730; + State = 1825; + Match(T__120); + State = 1826; Match(T__28); - State = 1731; + State = 1827; marshalBlob(); - State = 1732; + State = 1828; Match(T__29); } break; @@ -9648,17 +10105,17 @@ public FieldDeclContext fieldDecl() { throw new NoViableAltException(this); } } - State = 1738; + State = 1834; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 1739; + State = 1835; type(); - State = 1740; + State = 1836; dottedName(); - State = 1741; + State = 1837; atOpt(); - State = 1742; + State = 1838; initOpt(); } } @@ -9693,112 +10150,119 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FieldAttrContext fieldAttr() { FieldAttrContext _localctx = new FieldAttrContext(Context, State); - EnterRule(_localctx, 216, RULE_fieldAttr); + EnterRule(_localctx, 224, RULE_fieldAttr); try { - State = 1762; + State = 1859; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { - case T__120: + case T__121: EnterOuterAlt(_localctx, 1); { - State = 1744; - Match(T__120); + State = 1840; + Match(T__121); } break; case T__49: EnterOuterAlt(_localctx, 2); { - State = 1745; + State = 1841; Match(T__49); } break; case T__50: EnterOuterAlt(_localctx, 3); { - State = 1746; + State = 1842; Match(T__50); } break; case T__61: EnterOuterAlt(_localctx, 4); { - State = 1747; + State = 1843; Match(T__61); } break; - case T__121: + case T__122: EnterOuterAlt(_localctx, 5); { - State = 1748; - Match(T__121); + State = 1844; + Match(T__122); } break; case T__67: EnterOuterAlt(_localctx, 6); { - State = 1749; + State = 1845; Match(T__67); } break; case T__66: EnterOuterAlt(_localctx, 7); { - State = 1750; + State = 1846; Match(T__66); } break; case T__62: EnterOuterAlt(_localctx, 8); { - State = 1751; + State = 1847; Match(T__62); } break; case T__63: EnterOuterAlt(_localctx, 9); { - State = 1752; + State = 1848; Match(T__63); } break; case T__64: EnterOuterAlt(_localctx, 10); { - State = 1753; + State = 1849; Match(T__64); } break; - case T__122: + case T__123: EnterOuterAlt(_localctx, 11); { - State = 1754; - Match(T__122); + State = 1850; + Match(T__123); } break; - case T__123: + case T__124: EnterOuterAlt(_localctx, 12); { - State = 1755; - Match(T__123); + State = 1851; + Match(T__124); } break; - case T__124: + case T__125: EnterOuterAlt(_localctx, 13); { - State = 1756; - Match(T__124); + State = 1852; + Match(T__125); } break; - case T__68: + case T__126: EnterOuterAlt(_localctx, 14); { - State = 1757; + State = 1853; + Match(T__126); + } + break; + case T__68: + EnterOuterAlt(_localctx, 15); + { + State = 1854; Match(T__68); - State = 1758; + State = 1855; Match(T__28); - State = 1759; + State = 1856; int32(); - State = 1760; + State = 1857; Match(T__29); } break; @@ -9821,6 +10285,9 @@ public partial class AtOptContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public IdContext id() { return GetRuleContext(0); } + [System.Diagnostics.DebuggerNonUserCode] public Int32Context int32() { + return GetRuleContext(0); + } public AtOptContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -9837,70 +10304,34 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AtOptContext atOpt() { AtOptContext _localctx = new AtOptContext(Context, State); - EnterRule(_localctx, 218, RULE_atOpt); + EnterRule(_localctx, 226, RULE_atOpt); try { - State = 1767; + State = 1866; ErrorHandler.Sync(this); - switch (TokenStream.LA(1)) { - case T__16: - case T__17: - case T__18: - case T__19: - case T__21: - case T__22: - case T__23: - case T__24: - case T__25: - case T__27: - case T__30: - case T__31: - case T__33: - case T__34: - case T__39: - case T__46: - case T__47: - case T__48: - case T__71: - case T__72: - case T__114: - case T__115: - case T__117: - case T__118: - case T__125: - case T__130: - case T__136: - case T__161: - case MODULE: - case PARAM: - case PP_DEFINE: - case PP_UNDEF: - case PP_IFDEF: - case PP_IFNDEF: - case PP_ELSE: - case PP_ENDIF: - case PP_INCLUDE: - case MRESOURCE: - case DOTTEDNAME: - case ID: - case PERMISSION: - case PERMISSIONSET: - case EXPORT: - case OVERRIDE: + switch ( Interpreter.AdaptivePredict(TokenStream,93,Context) ) { + case 1: EnterOuterAlt(_localctx, 1); { } break; - case T__42: + case 2: EnterOuterAlt(_localctx, 2); { - State = 1765; + State = 1862; Match(T__42); - State = 1766; + State = 1863; id(); } break; - default: - throw new NoViableAltException(this); + case 3: + EnterOuterAlt(_localctx, 3); + { + State = 1864; + Match(T__42); + State = 1865; + int32(); + } + break; } } catch (RecognitionException re) { @@ -9934,9 +10365,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public InitOptContext initOpt() { InitOptContext _localctx = new InitOptContext(Context, State); - EnterRule(_localctx, 220, RULE_initOpt); + EnterRule(_localctx, 228, RULE_initOpt); try { - State = 1772; + State = 1871; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: @@ -9974,16 +10405,18 @@ public InitOptContext initOpt() { case T__48: case T__71: case T__72: - case T__114: case T__115: - case T__117: + case T__116: case T__118: - case T__125: - case T__130: - case T__136: - case T__154: - case T__161: + case T__119: + case T__127: + case T__132: + case T__138: + case T__157: + case T__164: case MODULE: + case VALUE: + case INSTANCE: case UNMANAGED: case PARAM: case SQSTRING: @@ -10027,9 +10460,9 @@ public InitOptContext initOpt() { case T__34: EnterOuterAlt(_localctx, 2); { - State = 1770; + State = 1869; Match(T__34); - State = 1771; + State = 1870; fieldInit(); } break; @@ -10068,11 +10501,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public RepeatOptContext repeatOpt() { RepeatOptContext _localctx = new RepeatOptContext(Context, State); - EnterRule(_localctx, 222, RULE_repeatOpt); + EnterRule(_localctx, 230, RULE_repeatOpt); try { - State = 1779; + State = 1878; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { + case T__0: case T__37: case T__49: case T__50: @@ -10083,12 +10517,14 @@ public RepeatOptContext repeatOpt() { case T__66: case T__67: case T__68: - case T__119: + case T__92: case T__120: case T__121: case T__122: case T__123: case T__124: + case T__125: + case T__126: case ELLIPSIS: case CHAR: case STRING: @@ -10108,11 +10544,11 @@ public RepeatOptContext repeatOpt() { case VALUETYPE: case VOID: case METHOD: + case INSTANCE: case TYPE_PARAMETER: case METHOD_TYPE_PARAMETER: case TYPEDREF: - case NATIVE_INT: - case NATIVE_UINT: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 1); @@ -10122,11 +10558,11 @@ public RepeatOptContext repeatOpt() { case T__40: EnterOuterAlt(_localctx, 2); { - State = 1775; + State = 1874; Match(T__40); - State = 1776; + State = 1875; int32(); - State = 1777; + State = 1876; Match(T__41); } break; @@ -10174,57 +10610,57 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EventHeadContext eventHead() { EventHeadContext _localctx = new EventHeadContext(Context, State); - EnterRule(_localctx, 224, RULE_eventHead); + EnterRule(_localctx, 232, RULE_eventHead); int _la; try { - State = 1799; + State = 1898; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,95,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,98,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1781; - Match(T__125); - State = 1785; + State = 1880; + Match(T__127); + State = 1884; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__66 || _la==T__67) { { { - State = 1782; + State = 1881; eventAttr(); } } - State = 1787; + State = 1886; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 1788; + State = 1887; typeSpec(); - State = 1789; + State = 1888; dottedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1791; - Match(T__125); - State = 1795; + State = 1890; + Match(T__127); + State = 1894; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__66 || _la==T__67) { { { - State = 1792; + State = 1891; eventAttr(); } } - State = 1797; + State = 1896; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 1798; + State = 1897; dottedName(); } break; @@ -10258,12 +10694,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EventAttrContext eventAttr() { EventAttrContext _localctx = new EventAttrContext(Context, State); - EnterRule(_localctx, 226, RULE_eventAttr); + EnterRule(_localctx, 234, RULE_eventAttr); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1801; + State = 1900; _la = TokenStream.LA(1); if ( !(_la==T__66 || _la==T__67) ) { ErrorHandler.RecoverInline(this); @@ -10308,22 +10744,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EventDeclsContext eventDecls() { EventDeclsContext _localctx = new EventDeclsContext(Context, State); - EnterRule(_localctx, 228, RULE_eventDecls); + EnterRule(_localctx, 236, RULE_eventDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1806; + State = 1905; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19394461696L) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & 540431955284459523L) != 0) || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 6291583L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19394461696L) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & 2161727821137838083L) != 0) || _la==VALUE || _la==INSTANCE || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 50332665L) != 0)) { { { - State = 1803; + State = 1902; eventDecl(); } } - State = 1808; + State = 1907; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -10372,44 +10808,44 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public EventDeclContext eventDecl() { EventDeclContext _localctx = new EventDeclContext(Context, State); - EnterRule(_localctx, 230, RULE_eventDecl); + EnterRule(_localctx, 238, RULE_eventDecl); try { - State = 1821; + State = 1920; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { - case T__126: + case T__128: EnterOuterAlt(_localctx, 1); { - State = 1809; - Match(T__126); - State = 1810; + State = 1908; + Match(T__128); + State = 1909; methodRef(); } break; - case T__127: + case T__129: EnterOuterAlt(_localctx, 2); { - State = 1811; - Match(T__127); - State = 1812; + State = 1910; + Match(T__129); + State = 1911; methodRef(); } break; - case T__128: + case T__130: EnterOuterAlt(_localctx, 3); { - State = 1813; - Match(T__128); - State = 1814; + State = 1912; + Match(T__130); + State = 1913; methodRef(); } break; - case T__129: + case T__131: EnterOuterAlt(_localctx, 4); { - State = 1815; - Match(T__129); - State = 1816; + State = 1914; + Match(T__131); + State = 1915; methodRef(); } break; @@ -10417,23 +10853,26 @@ public EventDeclContext eventDecl() { case T__72: EnterOuterAlt(_localctx, 5); { - State = 1817; + State = 1916; extSourceSpec(); } break; case T__33: + case VALUE: + case INSTANCE: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 6); { - State = 1818; + State = 1917; customAttrDecl(); } break; case T__25: EnterOuterAlt(_localctx, 7); { - State = 1819; + State = 1918; languageDecl(); } break; @@ -10447,7 +10886,7 @@ public EventDeclContext eventDecl() { case PP_INCLUDE: EnterOuterAlt(_localctx, 8); { - State = 1820; + State = 1919; compControl(); } break; @@ -10504,36 +10943,36 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public PropHeadContext propHead() { PropHeadContext _localctx = new PropHeadContext(Context, State); - EnterRule(_localctx, 232, RULE_propHead); + EnterRule(_localctx, 240, RULE_propHead); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1823; - Match(T__130); - State = 1827; + State = 1922; + Match(T__132); + State = 1926; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__66 || _la==T__67) { { { - State = 1824; + State = 1923; propAttr(); } } - State = 1829; + State = 1928; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 1830; + State = 1929; callConv(); - State = 1831; + State = 1930; type(); - State = 1832; + State = 1931; dottedName(); - State = 1833; + State = 1932; sigArgs(); - State = 1834; + State = 1933; initOpt(); } } @@ -10565,12 +11004,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public PropAttrContext propAttr() { PropAttrContext _localctx = new PropAttrContext(Context, State); - EnterRule(_localctx, 234, RULE_propAttr); + EnterRule(_localctx, 242, RULE_propAttr); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1836; + State = 1935; _la = TokenStream.LA(1); if ( !(_la==T__66 || _la==T__67) ) { ErrorHandler.RecoverInline(this); @@ -10615,22 +11054,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public PropDeclsContext propDecls() { PropDeclsContext _localctx = new PropDeclsContext(Context, State); - EnterRule(_localctx, 236, RULE_propDecls); + EnterRule(_localctx, 244, RULE_propDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1841; + State = 1940; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19394461696L) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & 3746994889972252675L) != 0) || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 6291583L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19394461696L) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & -3458764513820540925L) != 0) || _la==VALUE || _la==INSTANCE || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 50332665L) != 0)) { { { - State = 1838; + State = 1937; propDecl(); } } - State = 1843; + State = 1942; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -10679,44 +11118,47 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public PropDeclContext propDecl() { PropDeclContext _localctx = new PropDeclContext(Context, State); - EnterRule(_localctx, 238, RULE_propDecl); + EnterRule(_localctx, 246, RULE_propDecl); try { - State = 1854; + State = 1953; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { - case T__131: + case T__133: EnterOuterAlt(_localctx, 1); { - State = 1844; - Match(T__131); - State = 1845; + State = 1943; + Match(T__133); + State = 1944; methodRef(); } break; - case T__132: + case T__134: EnterOuterAlt(_localctx, 2); { - State = 1846; - Match(T__132); - State = 1847; + State = 1945; + Match(T__134); + State = 1946; methodRef(); } break; - case T__129: + case T__131: EnterOuterAlt(_localctx, 3); { - State = 1848; - Match(T__129); - State = 1849; + State = 1947; + Match(T__131); + State = 1948; methodRef(); } break; case T__33: + case VALUE: + case INSTANCE: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 4); { - State = 1850; + State = 1949; customAttrDecl(); } break; @@ -10724,14 +11166,14 @@ public PropDeclContext propDecl() { case T__72: EnterOuterAlt(_localctx, 5); { - State = 1851; + State = 1950; extSourceSpec(); } break; case T__25: EnterOuterAlt(_localctx, 6); { - State = 1852; + State = 1951; languageDecl(); } break; @@ -10745,7 +11187,7 @@ public PropDeclContext propDecl() { case PP_INCLUDE: EnterOuterAlt(_localctx, 7); { - State = 1853; + State = 1952; compControl(); } break; @@ -10784,9 +11226,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MarshalClauseContext marshalClause() { MarshalClauseContext _localctx = new MarshalClauseContext(Context, State); - EnterRule(_localctx, 240, RULE_marshalClause); + EnterRule(_localctx, 248, RULE_marshalClause); try { - State = 1862; + State = 1961; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: @@ -10806,8 +11248,10 @@ public MarshalClauseContext marshalClause() { case T__14: case T__26: case T__29: - case T__113: - case T__152: + case T__114: + case T__154: + case VALUE: + case INSTANCE: case UNMANAGED: case SQSTRING: case DOTTEDNAME: @@ -10816,16 +11260,16 @@ public MarshalClauseContext marshalClause() { { } break; - case T__119: + case T__120: EnterOuterAlt(_localctx, 2); { - State = 1857; - Match(T__119); - State = 1858; + State = 1956; + Match(T__120); + State = 1957; Match(T__28); - State = 1859; + State = 1958; marshalBlob(); - State = 1860; + State = 1959; Match(T__29); } break; @@ -10848,8 +11292,11 @@ public partial class MarshalBlobContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public NativeTypeContext nativeType() { return GetRuleContext(0); } - [System.Diagnostics.DebuggerNonUserCode] public HexbytesContext hexbytes() { - return GetRuleContext(0); + [System.Diagnostics.DebuggerNonUserCode] public HexbyteContext[] hexbyte() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public HexbyteContext hexbyte(int i) { + return GetRuleContext(i); } public MarshalBlobContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) @@ -10867,14 +11314,16 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MarshalBlobContext marshalBlob() { MarshalBlobContext _localctx = new MarshalBlobContext(Context, State); - EnterRule(_localctx, 242, RULE_marshalBlob); + EnterRule(_localctx, 250, RULE_marshalBlob); + int _la; try { - State = 1869; + State = 1972; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__29: case T__32: case T__40: + case T__60: case BOOL: case INT8: case INT16: @@ -10888,6 +11337,7 @@ public MarshalBlobContext marshalBlob() { case UINT64: case INT: case UINT: + case VALUE: case VOID: case CUSTOM: case FIXED: @@ -10907,31 +11357,43 @@ public MarshalBlobContext marshalBlob() { case STRUCT: case INTERFACE: case SAFEARRAY: - case NESTEDSTRUCT: - case VARIANTBOOL: case BYVALSTR: - case ANSIBSTR: + case ANSI: case TBSTR: case METHOD: case LPSTRUCT: + case INSTANCE: case ARRAY_TYPE_NO_BOUNDS: case PTR: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 1); { - State = 1864; + State = 1963; nativeType(); } break; case T__15: EnterOuterAlt(_localctx, 2); { - State = 1865; + State = 1964; Match(T__15); - State = 1866; - hexbytes(); - State = 1867; + State = 1966; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + do { + { + { + State = 1965; + hexbyte(); + } + } + State = 1968; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } while ( _la==INT32 || _la==ID || _la==HEXBYTE ); + State = 1970; Match(T__16); } break; @@ -10973,22 +11435,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ParamAttrContext paramAttr() { ParamAttrContext _localctx = new ParamAttrContext(Context, State); - EnterRule(_localctx, 244, RULE_paramAttr); + EnterRule(_localctx, 252, RULE_paramAttr); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1874; + State = 1977; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__40) { { { - State = 1871; + State = 1974; paramAttrElement(); } } - State = 1876; + State = 1979; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -11028,52 +11490,52 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ParamAttrElementContext paramAttrElement() { ParamAttrElementContext _localctx = new ParamAttrElementContext(Context, State); - EnterRule(_localctx, 246, RULE_paramAttrElement); + EnterRule(_localctx, 254, RULE_paramAttrElement); try { - State = 1890; + State = 1993; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,104,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,108,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1877; + State = 1980; Match(T__40); - State = 1878; - _localctx.@in = Match(T__133); - State = 1879; + State = 1981; + _localctx.@in = Match(T__135); + State = 1982; Match(T__41); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1880; + State = 1983; Match(T__40); - State = 1881; - _localctx.@out = Match(T__134); - State = 1882; + State = 1984; + _localctx.@out = Match(T__136); + State = 1985; Match(T__41); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1883; + State = 1986; Match(T__40); - State = 1884; - _localctx.opt = Match(T__135); - State = 1885; + State = 1987; + _localctx.opt = Match(T__137); + State = 1988; Match(T__41); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1886; + State = 1989; Match(T__40); - State = 1887; + State = 1990; int32(); - State = 1888; + State = 1991; Match(T__41); } break; @@ -11146,19 +11608,19 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MethodHeadContext methodHead() { MethodHeadContext _localctx = new MethodHeadContext(Context, State); - EnterRule(_localctx, 248, RULE_methodHead); + EnterRule(_localctx, 256, RULE_methodHead); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 1892; - Match(T__136); - State = 1897; + State = 1995; + Match(T__138); + State = 2000; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (((((_la - 50)) & ~0x3f) == 0 && ((1L << (_la - 50)) & 978955L) != 0) || ((((_la - 121)) & ~0x3f) == 0 && ((1L << (_la - 121)) & 33423365L) != 0)) { + while (((((_la - 50)) & ~0x3f) == 0 && ((1L << (_la - 50)) & 978955L) != 0) || ((((_la - 122)) & ~0x3f) == 0 && ((1L << (_la - 122)) & 66846725L) != 0)) { { - State = 1895; + State = 1998; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__49: @@ -11171,23 +11633,23 @@ public MethodHeadContext methodHead() { case T__66: case T__67: case T__68: - case T__120: - case T__122: - case T__137: - case T__138: + case T__121: + case T__123: case T__139: case T__140: case T__141: case T__142: case T__143: + case T__144: + case T__145: { - State = 1893; + State = 1996; methAttr(); } break; - case T__144: + case T__146: { - State = 1894; + State = 1997; pinvImpl(); } break; @@ -11195,35 +11657,35 @@ public MethodHeadContext methodHead() { throw new NoViableAltException(this); } } - State = 1899; + State = 2002; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 1900; + State = 2003; callConv(); - State = 1901; + State = 2004; paramAttr(); - State = 1902; + State = 2005; type(); - State = 1903; + State = 2006; marshalClause(); - State = 1904; + State = 2007; methodName(); - State = 1905; + State = 2008; typarsClause(); - State = 1906; + State = 2009; sigArgs(); - State = 1910; + State = 2013; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 32766L) != 0) || _la==T__68 || _la==UNMANAGED) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 32766L) != 0) || _la==T__68 || _la==T__155 || _la==UNMANAGED) { { { - State = 1907; + State = 2010; implAttr(); } } - State = 1912; + State = 2015; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -11260,147 +11722,147 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MethAttrContext methAttr() { MethAttrContext _localctx = new MethAttrContext(Context, State); - EnterRule(_localctx, 250, RULE_methAttr); + EnterRule(_localctx, 258, RULE_methAttr); try { - State = 1936; + State = 2039; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { - case T__120: + case T__121: EnterOuterAlt(_localctx, 1); { - State = 1913; - Match(T__120); + State = 2016; + Match(T__121); } break; case T__49: EnterOuterAlt(_localctx, 2); { - State = 1914; + State = 2017; Match(T__49); } break; case T__50: EnterOuterAlt(_localctx, 3); { - State = 1915; + State = 2018; Match(T__50); } break; case T__61: EnterOuterAlt(_localctx, 4); { - State = 1916; + State = 2019; Match(T__61); } break; - case T__137: + case T__139: EnterOuterAlt(_localctx, 5); { - State = 1917; - Match(T__137); + State = 2020; + Match(T__139); } break; case T__66: EnterOuterAlt(_localctx, 6); { - State = 1918; + State = 2021; Match(T__66); } break; - case T__138: + case T__140: EnterOuterAlt(_localctx, 7); { - State = 1919; - Match(T__138); + State = 2022; + Match(T__140); } break; - case T__139: + case T__141: EnterOuterAlt(_localctx, 8); { - State = 1920; - Match(T__139); + State = 2023; + Match(T__141); } break; case T__52: EnterOuterAlt(_localctx, 9); { - State = 1921; + State = 2024; Match(T__52); } break; case T__62: EnterOuterAlt(_localctx, 10); { - State = 1922; + State = 2025; Match(T__62); } break; case T__63: EnterOuterAlt(_localctx, 11); { - State = 1923; + State = 2026; Match(T__63); } break; case T__64: EnterOuterAlt(_localctx, 12); { - State = 1924; + State = 2027; Match(T__64); } break; - case T__122: + case T__123: EnterOuterAlt(_localctx, 13); { - State = 1925; - Match(T__122); + State = 2028; + Match(T__123); } break; - case T__140: + case T__142: EnterOuterAlt(_localctx, 14); { - State = 1926; - Match(T__140); + State = 2029; + Match(T__142); } break; - case T__141: + case T__143: EnterOuterAlt(_localctx, 15); { - State = 1927; - Match(T__141); + State = 2030; + Match(T__143); } break; case T__67: EnterOuterAlt(_localctx, 16); { - State = 1928; + State = 2031; Match(T__67); } break; - case T__142: + case T__144: EnterOuterAlt(_localctx, 17); { - State = 1929; - Match(T__142); + State = 2032; + Match(T__144); } break; - case T__143: + case T__145: EnterOuterAlt(_localctx, 18); { - State = 1930; - Match(T__143); + State = 2033; + Match(T__145); } break; case T__68: EnterOuterAlt(_localctx, 19); { - State = 1931; + State = 2034; Match(T__68); - State = 1932; + State = 2035; Match(T__28); - State = 1933; + State = 2036; int32(); - State = 1934; + State = 2037; Match(T__29); } break; @@ -11448,53 +11910,68 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public PinvImplContext pinvImpl() { PinvImplContext _localctx = new PinvImplContext(Context, State); - EnterRule(_localctx, 252, RULE_pinvImpl); + EnterRule(_localctx, 260, RULE_pinvImpl); int _la; try { - EnterOuterAlt(_localctx, 1); - { - State = 1938; - Match(T__144); - State = 1939; - Match(T__28); - State = 1945; + State = 2059; ErrorHandler.Sync(this); - _la = TokenStream.LA(1); - if (_la==QSTRING) { + switch ( Interpreter.AdaptivePredict(TokenStream,116,Context) ) { + case 1: + EnterOuterAlt(_localctx, 1); { - State = 1940; - compQstring(); - State = 1943; + State = 2041; + Match(T__146); + State = 2042; + Match(T__28); + State = 2048; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if (_la==T__32) { + if (_la==QSTRING) { { - State = 1941; - Match(T__32); - State = 1942; + State = 2043; compQstring(); + State = 2046; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==T__32) { + { + State = 2044; + Match(T__32); + State = 2045; + compQstring(); + } } - } + } } - } - State = 1950; - ErrorHandler.Sync(this); - _la = TokenStream.LA(1); - while (((((_la - 56)) & ~0x3f) == 0 && ((1L << (_la - 56)) & 8195L) != 0) || ((((_la - 146)) & ~0x3f) == 0 && ((1L << (_la - 146)) & 79L) != 0) || ((((_la - 223)) & ~0x3f) == 0 && ((1L << (_la - 223)) & 503316481L) != 0)) { - { - { - State = 1947; - pinvAttr(); - } - } - State = 1952; + State = 2053; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - } - State = 1953; - Match(T__29); + while (((((_la - 56)) & ~0x3f) == 0 && ((1L << (_la - 56)) & 8195L) != 0) || ((((_la - 148)) & ~0x3f) == 0 && ((1L << (_la - 148)) & 79L) != 0) || ((((_la - 223)) & ~0x3f) == 0 && ((1L << (_la - 223)) & 251658241L) != 0)) { + { + { + State = 2050; + pinvAttr(); + } + } + State = 2055; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } + State = 2056; + Match(T__29); + } + break; + case 2: + EnterOuterAlt(_localctx, 2); + { + State = 2057; + Match(T__146); + State = 2058; + Match(T__83); + } + break; } } catch (RecognitionException re) { @@ -11533,135 +12010,135 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public PinvAttrContext pinvAttr() { PinvAttrContext _localctx = new PinvAttrContext(Context, State); - EnterRule(_localctx, 254, RULE_pinvAttr); + EnterRule(_localctx, 262, RULE_pinvAttr); try { - State = 1982; + State = 2088; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,112,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,117,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 1955; - Match(T__145); + State = 2061; + Match(T__147); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 1956; + State = 2062; Match(ANSI); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 1957; + State = 2063; Match(T__55); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 1958; + State = 2064; Match(T__56); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 1959; - Match(T__146); + State = 2065; + Match(T__148); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 1960; - Match(T__147); + State = 2066; + Match(T__149); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 1961; + State = 2067; Match(CDECL); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 1962; + State = 2068; Match(STDCALL); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 1963; + State = 2069; Match(THISCALL); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 1964; + State = 2070; Match(FASTCALL); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 1965; - Match(T__148); - State = 1966; + State = 2071; + Match(T__150); + State = 2072; Match(T__73); - State = 1967; - Match(T__149); + State = 2073; + Match(T__151); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 1968; - Match(T__148); - State = 1969; - Match(T__73); - State = 1970; + State = 2074; Match(T__150); + State = 2075; + Match(T__73); + State = 2076; + Match(T__152); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 1971; - Match(T__151); - State = 1972; + State = 2077; + Match(T__153); + State = 2078; Match(T__73); - State = 1973; - Match(T__149); + State = 2079; + Match(T__151); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 1974; - Match(T__151); - State = 1975; + State = 2080; + Match(T__153); + State = 2081; Match(T__73); - State = 1976; - Match(T__150); + State = 2082; + Match(T__152); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 1977; + State = 2083; Match(T__68); - State = 1978; + State = 2084; Match(T__28); - State = 1979; + State = 2085; int32(); - State = 1980; + State = 2086; Match(T__29); } break; @@ -11698,30 +12175,33 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MethodNameContext methodName() { MethodNameContext _localctx = new MethodNameContext(Context, State); - EnterRule(_localctx, 256, RULE_methodName); + EnterRule(_localctx, 264, RULE_methodName); try { - State = 1987; + State = 2093; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { - case T__113: + case T__114: EnterOuterAlt(_localctx, 1); { - State = 1984; - Match(T__113); + State = 2090; + Match(T__114); } break; - case T__152: + case T__154: EnterOuterAlt(_localctx, 2); { - State = 1985; - Match(T__152); + State = 2091; + Match(T__154); } break; + case VALUE: + case INSTANCE: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 3); { - State = 1986; + State = 2092; dottedName(); } break; @@ -11761,126 +12241,133 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ImplAttrContext implAttr() { ImplAttrContext _localctx = new ImplAttrContext(Context, State); - EnterRule(_localctx, 258, RULE_implAttr); + EnterRule(_localctx, 266, RULE_implAttr); try { - State = 2009; + State = 2116; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: EnterOuterAlt(_localctx, 1); { - State = 1989; + State = 2095; Match(T__0); } break; case T__1: EnterOuterAlt(_localctx, 2); { - State = 1990; + State = 2096; Match(T__1); } break; - case T__2: + case T__155: EnterOuterAlt(_localctx, 3); { - State = 1991; + State = 2097; + Match(T__155); + } + break; + case T__2: + EnterOuterAlt(_localctx, 4); + { + State = 2098; Match(T__2); } break; case T__3: - EnterOuterAlt(_localctx, 4); + EnterOuterAlt(_localctx, 5); { - State = 1992; + State = 2099; Match(T__3); } break; case UNMANAGED: - EnterOuterAlt(_localctx, 5); + EnterOuterAlt(_localctx, 6); { - State = 1993; + State = 2100; Match(UNMANAGED); } break; case T__4: - EnterOuterAlt(_localctx, 6); + EnterOuterAlt(_localctx, 7); { - State = 1994; + State = 2101; Match(T__4); } break; case T__5: - EnterOuterAlt(_localctx, 7); + EnterOuterAlt(_localctx, 8); { - State = 1995; + State = 2102; Match(T__5); } break; case T__6: - EnterOuterAlt(_localctx, 8); + EnterOuterAlt(_localctx, 9); { - State = 1996; + State = 2103; Match(T__6); } break; case T__7: - EnterOuterAlt(_localctx, 9); + EnterOuterAlt(_localctx, 10); { - State = 1997; + State = 2104; Match(T__7); } break; case T__8: - EnterOuterAlt(_localctx, 10); + EnterOuterAlt(_localctx, 11); { - State = 1998; + State = 2105; Match(T__8); } break; case T__9: - EnterOuterAlt(_localctx, 11); + EnterOuterAlt(_localctx, 12); { - State = 1999; + State = 2106; Match(T__9); } break; case T__10: - EnterOuterAlt(_localctx, 12); + EnterOuterAlt(_localctx, 13); { - State = 2000; + State = 2107; Match(T__10); } break; case T__11: - EnterOuterAlt(_localctx, 13); + EnterOuterAlt(_localctx, 14); { - State = 2001; + State = 2108; Match(T__11); } break; case T__12: - EnterOuterAlt(_localctx, 14); + EnterOuterAlt(_localctx, 15); { - State = 2002; + State = 2109; Match(T__12); } break; case T__13: - EnterOuterAlt(_localctx, 15); + EnterOuterAlt(_localctx, 16); { - State = 2003; + State = 2110; Match(T__13); } break; case T__68: - EnterOuterAlt(_localctx, 16); + EnterOuterAlt(_localctx, 17); { - State = 2004; + State = 2111; Match(T__68); - State = 2005; + State = 2112; Match(T__28); - State = 2006; + State = 2113; int32(); - State = 2007; + State = 2114; Match(T__29); } break; @@ -11922,22 +12409,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MethodDeclsContext methodDecls() { MethodDeclsContext _localctx = new MethodDeclsContext(Context, State); - EnterRule(_localctx, 260, RULE_methodDecls); + EnterRule(_localctx, 268, RULE_methodDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2014; + State = 2121; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19394592766L) != 0) || _la==T__71 || _la==T__72 || _la==T__154 || _la==T__161 || ((((_la - 247)) & ~0x3f) == 0 && ((1L << (_la - 247)) & 287975288913527809L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19394592766L) != 0) || _la==T__71 || _la==T__72 || ((((_la - 158)) & ~0x3f) == 0 && ((1L << (_la - 158)) & 1099511627905L) != 0) || ((((_la - 242)) & ~0x3f) == 0 && ((1L << (_la - 242)) & 2303696760354115601L) != 0)) { { { - State = 2011; + State = 2118; methodDecl(); } } - State = 2016; + State = 2123; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -12053,365 +12540,365 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public MethodDeclContext methodDecl() { MethodDeclContext _localctx = new MethodDeclContext(Context, State); - EnterRule(_localctx, 262, RULE_methodDecl); + EnterRule(_localctx, 270, RULE_methodDecl); try { int _alt; - State = 2125; + State = 2232; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,121,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,126,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2017; + State = 2124; instr(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2018; + State = 2125; Match(EMITBYTE); - State = 2019; + State = 2126; int32(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2020; + State = 2127; sehBlock(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2021; + State = 2128; Match(MAXSTACK); - State = 2022; + State = 2129; int32(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2023; + State = 2130; Match(LOCALS); - State = 2024; + State = 2131; sigArgs(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 2025; + State = 2132; Match(LOCALS); - State = 2026; - Match(T__153); - State = 2027; + State = 2133; + Match(T__156); + State = 2134; sigArgs(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 2028; + State = 2135; Match(ENTRYPOINT); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 2029; + State = 2136; Match(ZEROINIT); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 2030; + State = 2137; dataDecl(); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 2031; + State = 2138; labelDecl(); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 2032; + State = 2139; secDecl(); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 2033; + State = 2140; extSourceSpec(); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 2034; + State = 2141; languageDecl(); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 2035; + State = 2142; customDescrInMethodBody(); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 2036; + State = 2143; compControl(); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 2037; + State = 2144; Match(EXPORT); - State = 2038; + State = 2145; Match(T__40); - State = 2039; + State = 2146; int32(); - State = 2040; + State = 2147; Match(T__41); } break; case 17: EnterOuterAlt(_localctx, 17); { - State = 2042; + State = 2149; Match(EXPORT); - State = 2043; + State = 2150; Match(T__40); - State = 2044; + State = 2151; int32(); - State = 2045; + State = 2152; Match(T__41); - State = 2046; + State = 2153; Match(T__32); - State = 2047; + State = 2154; id(); } break; case 18: EnterOuterAlt(_localctx, 18); { - State = 2049; + State = 2156; Match(VTENTRY); - State = 2050; + State = 2157; int32(); - State = 2051; + State = 2158; Match(T__73); - State = 2052; + State = 2159; int32(); } break; case 19: EnterOuterAlt(_localctx, 19); { - State = 2054; + State = 2161; Match(OVERRIDE); - State = 2055; + State = 2162; typeSpec(); - State = 2056; + State = 2163; Match(DCOLON); - State = 2057; + State = 2164; methodName(); } break; case 20: EnterOuterAlt(_localctx, 20); { - State = 2059; + State = 2166; Match(OVERRIDE); - State = 2060; + State = 2167; Match(METHOD); - State = 2061; + State = 2168; callConv(); - State = 2062; + State = 2169; type(); - State = 2063; + State = 2170; typeSpec(); - State = 2064; + State = 2171; Match(DCOLON); - State = 2065; + State = 2172; methodName(); - State = 2066; + State = 2173; genArity(); - State = 2067; + State = 2174; sigArgs(); } break; case 21: EnterOuterAlt(_localctx, 21); { - State = 2069; + State = 2176; scopeBlock(); } break; case 22: EnterOuterAlt(_localctx, 22); { - State = 2070; + State = 2177; Match(PARAM); - State = 2071; + State = 2178; Match(TYPE); - State = 2072; + State = 2179; Match(T__40); - State = 2073; + State = 2180; int32(); - State = 2074; + State = 2181; Match(T__41); - State = 2078; + State = 2185; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,116,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,121,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 2075; + State = 2182; customAttrDecl(); } } } - State = 2080; + State = 2187; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,116,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,121,Context); } } break; case 23: EnterOuterAlt(_localctx, 23); { - State = 2081; + State = 2188; Match(PARAM); - State = 2082; + State = 2189; Match(TYPE); - State = 2083; + State = 2190; dottedName(); - State = 2087; + State = 2194; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,117,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,122,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 2084; + State = 2191; customAttrDecl(); } } } - State = 2089; + State = 2196; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,117,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,122,Context); } } break; case 24: EnterOuterAlt(_localctx, 24); { - State = 2090; + State = 2197; Match(PARAM); - State = 2091; + State = 2198; Match(CONSTRAINT); - State = 2092; + State = 2199; Match(T__40); - State = 2093; + State = 2200; int32(); - State = 2094; + State = 2201; Match(T__41); - State = 2095; + State = 2202; Match(T__26); - State = 2096; + State = 2203; typeSpec(); - State = 2100; + State = 2207; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,118,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,123,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 2097; + State = 2204; customAttrDecl(); } } } - State = 2102; + State = 2209; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,118,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,123,Context); } } break; case 25: EnterOuterAlt(_localctx, 25); { - State = 2103; + State = 2210; Match(PARAM); - State = 2104; + State = 2211; Match(CONSTRAINT); - State = 2105; + State = 2212; dottedName(); - State = 2106; + State = 2213; Match(T__26); - State = 2107; + State = 2214; typeSpec(); - State = 2111; + State = 2218; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,119,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,124,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 2108; + State = 2215; customAttrDecl(); } } } - State = 2113; + State = 2220; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,119,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,124,Context); } } break; case 26: EnterOuterAlt(_localctx, 26); { - State = 2114; + State = 2221; Match(PARAM); - State = 2115; + State = 2222; Match(T__40); - State = 2116; + State = 2223; int32(); - State = 2117; + State = 2224; Match(T__41); - State = 2118; + State = 2225; initOpt(); - State = 2122; + State = 2229; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,120,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,125,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 2119; + State = 2226; customAttrDecl(); } } } - State = 2124; + State = 2231; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,120,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,125,Context); } } break; @@ -12448,13 +12935,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public LabelDeclContext labelDecl() { LabelDeclContext _localctx = new LabelDeclContext(Context, State); - EnterRule(_localctx, 264, RULE_labelDecl); + EnterRule(_localctx, 272, RULE_labelDecl); try { EnterOuterAlt(_localctx, 1); { - State = 2127; + State = 2234; id(); - State = 2128; + State = 2235; Match(T__73); } } @@ -12492,22 +12979,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomDescrInMethodBodyContext customDescrInMethodBody() { CustomDescrInMethodBodyContext _localctx = new CustomDescrInMethodBodyContext(Context, State); - EnterRule(_localctx, 266, RULE_customDescrInMethodBody); + EnterRule(_localctx, 274, RULE_customDescrInMethodBody); try { - State = 2132; + State = 2239; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,122,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,127,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2130; + State = 2237; customDescr(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2131; + State = 2238; customDescrWithOwner(); } break; @@ -12544,15 +13031,15 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ScopeBlockContext scopeBlock() { ScopeBlockContext _localctx = new ScopeBlockContext(Context, State); - EnterRule(_localctx, 268, RULE_scopeBlock); + EnterRule(_localctx, 276, RULE_scopeBlock); try { EnterOuterAlt(_localctx, 1); { - State = 2134; + State = 2241; Match(T__15); - State = 2135; + State = 2242; methodDecls(); - State = 2136; + State = 2243; Match(T__16); } } @@ -12590,13 +13077,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SehBlockContext sehBlock() { SehBlockContext _localctx = new SehBlockContext(Context, State); - EnterRule(_localctx, 270, RULE_sehBlock); + EnterRule(_localctx, 278, RULE_sehBlock); try { EnterOuterAlt(_localctx, 1); { - State = 2138; + State = 2245; tryBlock(); - State = 2139; + State = 2246; sehClauses(); } } @@ -12634,25 +13121,25 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SehClausesContext sehClauses() { SehClausesContext _localctx = new SehClausesContext(Context, State); - EnterRule(_localctx, 272, RULE_sehClauses); + EnterRule(_localctx, 280, RULE_sehClauses); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2142; + State = 2249; ErrorHandler.Sync(this); _la = TokenStream.LA(1); do { { { - State = 2141; + State = 2248; sehClause(); } } - State = 2144; + State = 2251; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - } while ( ((((_la - 157)) & ~0x3f) == 0 && ((1L << (_la - 157)) & 15L) != 0) ); + } while ( ((((_la - 160)) & ~0x3f) == 0 && ((1L << (_la - 160)) & 15L) != 0) ); } } catch (RecognitionException re) { @@ -12698,43 +13185,43 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TryBlockContext tryBlock() { TryBlockContext _localctx = new TryBlockContext(Context, State); - EnterRule(_localctx, 274, RULE_tryBlock); + EnterRule(_localctx, 282, RULE_tryBlock); try { - State = 2158; + State = 2265; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,124,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,129,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2146; - Match(T__154); - State = 2147; + State = 2253; + Match(T__157); + State = 2254; scopeBlock(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2148; - Match(T__154); - State = 2149; + State = 2255; + Match(T__157); + State = 2256; id(); - State = 2150; - Match(T__155); - State = 2151; + State = 2257; + Match(T__158); + State = 2258; id(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2153; - Match(T__154); - State = 2154; + State = 2260; + Match(T__157); + State = 2261; int32(); - State = 2155; - Match(T__155); - State = 2156; + State = 2262; + Match(T__158); + State = 2263; int32(); } break; @@ -12783,44 +13270,44 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SehClauseContext sehClause() { SehClauseContext _localctx = new SehClauseContext(Context, State); - EnterRule(_localctx, 276, RULE_sehClause); + EnterRule(_localctx, 284, RULE_sehClause); try { - State = 2172; + State = 2279; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { - case T__157: + case T__160: EnterOuterAlt(_localctx, 1); { - State = 2160; + State = 2267; catchClause(); - State = 2161; + State = 2268; handlerBlock(); } break; - case T__156: + case T__159: EnterOuterAlt(_localctx, 2); { - State = 2163; + State = 2270; filterClause(); - State = 2164; + State = 2271; handlerBlock(); } break; - case T__158: + case T__161: EnterOuterAlt(_localctx, 3); { - State = 2166; + State = 2273; finallyClause(); - State = 2167; + State = 2274; handlerBlock(); } break; - case T__159: + case T__162: EnterOuterAlt(_localctx, 4); { - State = 2169; + State = 2276; faultClause(); - State = 2170; + State = 2277; handlerBlock(); } break; @@ -12865,35 +13352,35 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FilterClauseContext filterClause() { FilterClauseContext _localctx = new FilterClauseContext(Context, State); - EnterRule(_localctx, 278, RULE_filterClause); + EnterRule(_localctx, 286, RULE_filterClause); try { - State = 2180; + State = 2287; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,126,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,131,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2174; - Match(T__156); - State = 2175; + State = 2281; + Match(T__159); + State = 2282; scopeBlock(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2176; - Match(T__156); - State = 2177; + State = 2283; + Match(T__159); + State = 2284; id(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2178; - Match(T__156); - State = 2179; + State = 2285; + Match(T__159); + State = 2286; int32(); } break; @@ -12930,13 +13417,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CatchClauseContext catchClause() { CatchClauseContext _localctx = new CatchClauseContext(Context, State); - EnterRule(_localctx, 280, RULE_catchClause); + EnterRule(_localctx, 288, RULE_catchClause); try { EnterOuterAlt(_localctx, 1); { - State = 2182; - Match(T__157); - State = 2183; + State = 2289; + Match(T__160); + State = 2290; typeSpec(); } } @@ -12968,12 +13455,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FinallyClauseContext finallyClause() { FinallyClauseContext _localctx = new FinallyClauseContext(Context, State); - EnterRule(_localctx, 282, RULE_finallyClause); + EnterRule(_localctx, 290, RULE_finallyClause); try { EnterOuterAlt(_localctx, 1); { - State = 2185; - Match(T__158); + State = 2292; + Match(T__161); } } catch (RecognitionException re) { @@ -13004,12 +13491,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FaultClauseContext faultClause() { FaultClauseContext _localctx = new FaultClauseContext(Context, State); - EnterRule(_localctx, 284, RULE_faultClause); + EnterRule(_localctx, 292, RULE_faultClause); try { EnterOuterAlt(_localctx, 1); { - State = 2187; - Match(T__159); + State = 2294; + Match(T__162); } } catch (RecognitionException re) { @@ -13055,41 +13542,41 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public HandlerBlockContext handlerBlock() { HandlerBlockContext _localctx = new HandlerBlockContext(Context, State); - EnterRule(_localctx, 286, RULE_handlerBlock); + EnterRule(_localctx, 294, RULE_handlerBlock); try { - State = 2200; + State = 2307; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,127,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,132,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2189; + State = 2296; scopeBlock(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2190; - Match(T__160); - State = 2191; + State = 2297; + Match(T__163); + State = 2298; id(); - State = 2192; - Match(T__155); - State = 2193; + State = 2299; + Match(T__158); + State = 2300; id(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2195; - Match(T__160); - State = 2196; + State = 2302; + Match(T__163); + State = 2303; int32(); - State = 2197; - Match(T__155); - State = 2198; + State = 2304; + Match(T__158); + State = 2305; int32(); } break; @@ -13129,13 +13616,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DataDeclContext dataDecl() { DataDeclContext _localctx = new DataDeclContext(Context, State); - EnterRule(_localctx, 288, RULE_dataDecl); + EnterRule(_localctx, 296, RULE_dataDecl); try { EnterOuterAlt(_localctx, 1); { - State = 2202; + State = 2309; ddHead(); - State = 2203; + State = 2310; ddBody(); } } @@ -13173,30 +13660,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DdHeadContext ddHead() { DdHeadContext _localctx = new DdHeadContext(Context, State); - EnterRule(_localctx, 290, RULE_ddHead); + EnterRule(_localctx, 298, RULE_ddHead); try { - State = 2212; + State = 2319; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,128,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,133,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2205; - Match(T__161); - State = 2206; + State = 2312; + Match(T__164); + State = 2313; tls(); - State = 2207; + State = 2314; id(); - State = 2208; + State = 2315; Match(T__34); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2210; - Match(T__161); - State = 2211; + State = 2317; + Match(T__164); + State = 2318; tls(); } break; @@ -13230,11 +13717,11 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public TlsContext tls() { TlsContext _localctx = new TlsContext(Context, State); - EnterRule(_localctx, 292, RULE_tls); + EnterRule(_localctx, 300, RULE_tls); try { - State = 2217; + State = 2324; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,129,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,134,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { @@ -13243,14 +13730,14 @@ public TlsContext tls() { case 2: EnterOuterAlt(_localctx, 2); { - State = 2215; - Match(T__162); + State = 2322; + Match(T__165); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2216; + State = 2323; Match(T__1); } break; @@ -13271,8 +13758,11 @@ public partial class DdBodyContext : ParserRuleContext { [System.Diagnostics.DebuggerNonUserCode] public DdItemListContext ddItemList() { return GetRuleContext(0); } - [System.Diagnostics.DebuggerNonUserCode] public DdItemContext ddItem() { - return GetRuleContext(0); + [System.Diagnostics.DebuggerNonUserCode] public DdItemContext[] ddItem() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public DdItemContext ddItem(int i) { + return GetRuleContext(i); } public DdBodyContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) @@ -13290,19 +13780,20 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DdBodyContext ddBody() { DdBodyContext _localctx = new DdBodyContext(Context, State); - EnterRule(_localctx, 294, RULE_ddBody); + EnterRule(_localctx, 302, RULE_ddBody); + int _la; try { - State = 2224; + State = 2335; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__15: EnterOuterAlt(_localctx, 1); { - State = 2219; + State = 2326; Match(T__15); - State = 2220; + State = 2327; ddItemList(); - State = 2221; + State = 2328; Match(T__16); } break; @@ -13317,8 +13808,20 @@ public DdBodyContext ddBody() { case REF: EnterOuterAlt(_localctx, 2); { - State = 2223; - ddItem(); + State = 2331; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + do { + { + { + State = 2330; + ddItem(); + } + } + State = 2333; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + } while ( _la==T__82 || ((((_la - 180)) & ~0x3f) == 0 && ((1L << (_la - 180)) & 505L) != 0) || _la==REF ); } break; default: @@ -13359,30 +13862,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DdItemListContext ddItemList() { DdItemListContext _localctx = new DdItemListContext(Context, State); - EnterRule(_localctx, 296, RULE_ddItemList); + EnterRule(_localctx, 304, RULE_ddItemList); try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 2231; + State = 2342; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,131,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,137,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - State = 2226; + State = 2337; ddItem(); - State = 2227; + State = 2338; Match(T__26); } } } - State = 2233; + State = 2344; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,131,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,137,Context); } - State = 2234; + State = 2345; ddItem(); } } @@ -13417,9 +13920,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DdItemCountContext ddItemCount() { DdItemCountContext _localctx = new DdItemCountContext(Context, State); - EnterRule(_localctx, 298, RULE_ddItemCount); + EnterRule(_localctx, 306, RULE_ddItemCount); try { - State = 2241; + State = 2352; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: @@ -13458,18 +13961,29 @@ public DdItemCountContext ddItemCount() { case T__48: case T__71: case T__72: - case T__114: + case T__82: case T__115: - case T__117: + case T__116: case T__118: - case T__125: - case T__130: - case T__136: - case T__154: - case T__161: + case T__119: + case T__127: + case T__132: + case T__138: + case T__157: + case T__164: + case CHAR: + case INT8: + case INT16: + case INT32_: + case INT64_: + case FLOAT32: + case FLOAT64_: case MODULE: + case VALUE: + case INSTANCE: case UNMANAGED: case PARAM: + case REF: case SQSTRING: case PP_DEFINE: case PP_UNDEF: @@ -13511,11 +14025,11 @@ public DdItemCountContext ddItemCount() { case T__40: EnterOuterAlt(_localctx, 2); { - State = 2237; + State = 2348; Match(T__40); - State = 2238; + State = 2349; int32(); - State = 2239; + State = 2350; Match(T__41); } break; @@ -13581,193 +14095,202 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public DdItemContext ddItem() { DdItemContext _localctx = new DdItemContext(Context, State); - EnterRule(_localctx, 300, RULE_ddItem); + EnterRule(_localctx, 308, RULE_ddItem); try { - State = 2307; + State = 2420; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,133,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,139,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2243; + State = 2354; Match(CHAR); - State = 2244; + State = 2355; Match(PTR); - State = 2245; + State = 2356; Match(T__28); - State = 2246; + State = 2357; compQstring(); - State = 2247; + State = 2358; Match(T__29); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2249; + State = 2360; Match(REF); - State = 2250; + State = 2361; Match(T__28); - State = 2251; + State = 2362; id(); - State = 2252; + State = 2363; Match(T__29); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2254; - Match(T__82); - State = 2255; - Match(T__28); - State = 2256; - bytes(); - State = 2257; - Match(T__29); + State = 2365; + Match(REF); + State = 2366; + id(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2259; - Match(FLOAT32); - State = 2260; + State = 2367; + Match(T__82); + State = 2368; Match(T__28); - State = 2261; - float64(); - State = 2262; + State = 2369; + bytes(); + State = 2370; Match(T__29); - State = 2263; - ddItemCount(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2265; - Match(FLOAT64_); - State = 2266; + State = 2372; + Match(FLOAT32); + State = 2373; Match(T__28); - State = 2267; + State = 2374; float64(); - State = 2268; + State = 2375; Match(T__29); - State = 2269; + State = 2376; ddItemCount(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 2271; - Match(INT64_); - State = 2272; + State = 2378; + Match(FLOAT64_); + State = 2379; Match(T__28); - State = 2273; - int64(); - State = 2274; + State = 2380; + float64(); + State = 2381; Match(T__29); - State = 2275; + State = 2382; ddItemCount(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 2277; - Match(INT32_); - State = 2278; + State = 2384; + Match(INT64_); + State = 2385; Match(T__28); - State = 2279; - int32(); - State = 2280; + State = 2386; + int64(); + State = 2387; Match(T__29); - State = 2281; + State = 2388; ddItemCount(); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 2283; - Match(INT16); - State = 2284; + State = 2390; + Match(INT32_); + State = 2391; Match(T__28); - State = 2285; + State = 2392; int32(); - State = 2286; + State = 2393; Match(T__29); - State = 2287; + State = 2394; ddItemCount(); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 2289; - Match(INT8); - State = 2290; + State = 2396; + Match(INT16); + State = 2397; Match(T__28); - State = 2291; + State = 2398; int32(); - State = 2292; + State = 2399; Match(T__29); - State = 2293; + State = 2400; ddItemCount(); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 2295; - Match(FLOAT32); - State = 2296; + State = 2402; + Match(INT8); + State = 2403; + Match(T__28); + State = 2404; + int32(); + State = 2405; + Match(T__29); + State = 2406; ddItemCount(); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 2297; - Match(FLOAT64_); - State = 2298; + State = 2408; + Match(FLOAT32); + State = 2409; ddItemCount(); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 2299; - Match(INT64_); - State = 2300; + State = 2410; + Match(FLOAT64_); + State = 2411; ddItemCount(); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 2301; - Match(INT32_); - State = 2302; + State = 2412; + Match(INT64_); + State = 2413; ddItemCount(); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 2303; - Match(INT16); - State = 2304; + State = 2414; + Match(INT32_); + State = 2415; ddItemCount(); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 2305; + State = 2416; + Match(INT16); + State = 2417; + ddItemCount(); + } + break; + case 16: + EnterOuterAlt(_localctx, 16); + { + State = 2418; Match(INT8); - State = 2306; + State = 2419; ddItemCount(); } break; @@ -13828,203 +14351,203 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FieldSerInitContext fieldSerInit() { FieldSerInitContext _localctx = new FieldSerInitContext(Context, State); - EnterRule(_localctx, 302, RULE_fieldSerInit); + EnterRule(_localctx, 310, RULE_fieldSerInit); try { - State = 2384; + State = 2497; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,134,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,140,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2309; + State = 2422; Match(FLOAT32); - State = 2310; + State = 2423; Match(T__28); - State = 2311; + State = 2424; float64(); - State = 2312; + State = 2425; Match(T__29); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2314; + State = 2427; Match(FLOAT64_); - State = 2315; + State = 2428; Match(T__28); - State = 2316; + State = 2429; float64(); - State = 2317; + State = 2430; Match(T__29); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2319; + State = 2432; Match(FLOAT32); - State = 2320; + State = 2433; Match(T__28); - State = 2321; + State = 2434; int32(); - State = 2322; + State = 2435; Match(T__29); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2324; + State = 2437; Match(FLOAT64_); - State = 2325; + State = 2438; Match(T__28); - State = 2326; + State = 2439; int64(); - State = 2327; + State = 2440; Match(T__29); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2329; + State = 2442; Match(INT64_); - State = 2330; + State = 2443; Match(T__28); - State = 2331; + State = 2444; int64(); - State = 2332; + State = 2445; Match(T__29); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 2334; + State = 2447; Match(INT32_); - State = 2335; + State = 2448; Match(T__28); - State = 2336; + State = 2449; int32(); - State = 2337; + State = 2450; Match(T__29); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 2339; + State = 2452; Match(INT16); - State = 2340; + State = 2453; Match(T__28); - State = 2341; + State = 2454; int32(); - State = 2342; + State = 2455; Match(T__29); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 2344; + State = 2457; Match(INT8); - State = 2345; + State = 2458; Match(T__28); - State = 2346; + State = 2459; int32(); - State = 2347; + State = 2460; Match(T__29); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 2349; + State = 2462; Match(UINT64); - State = 2350; + State = 2463; Match(T__28); - State = 2351; + State = 2464; int64(); - State = 2352; + State = 2465; Match(T__29); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 2354; + State = 2467; Match(UINT32); - State = 2355; + State = 2468; Match(T__28); - State = 2356; + State = 2469; int32(); - State = 2357; + State = 2470; Match(T__29); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 2359; + State = 2472; Match(UINT16); - State = 2360; + State = 2473; Match(T__28); - State = 2361; + State = 2474; int32(); - State = 2362; + State = 2475; Match(T__29); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 2364; + State = 2477; Match(UINT8); - State = 2365; + State = 2478; Match(T__28); - State = 2366; + State = 2479; int32(); - State = 2367; + State = 2480; Match(T__29); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 2369; + State = 2482; Match(CHAR); - State = 2370; + State = 2483; Match(T__28); - State = 2371; + State = 2484; int32(); - State = 2372; + State = 2485; Match(T__29); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 2374; + State = 2487; Match(BOOL); - State = 2375; + State = 2488; Match(T__28); - State = 2376; + State = 2489; truefalse(); - State = 2377; + State = 2490; Match(T__29); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 2379; + State = 2492; Match(T__82); - State = 2380; + State = 2493; Match(T__28); - State = 2381; + State = 2494; bytes(); - State = 2382; + State = 2495; Match(T__29); } break; @@ -14042,11 +14565,11 @@ public FieldSerInitContext fieldSerInit() { } public partial class BytesContext : ParserRuleContext { - [System.Diagnostics.DebuggerNonUserCode] public HexbytesContext[] hexbytes() { - return GetRuleContexts(); + [System.Diagnostics.DebuggerNonUserCode] public HexbyteContext[] hexbyte() { + return GetRuleContexts(); } - [System.Diagnostics.DebuggerNonUserCode] public HexbytesContext hexbytes(int i) { - return GetRuleContext(i); + [System.Diagnostics.DebuggerNonUserCode] public HexbyteContext hexbyte(int i) { + return GetRuleContext(i); } public BytesContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) @@ -14064,22 +14587,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public BytesContext bytes() { BytesContext _localctx = new BytesContext(Context, State); - EnterRule(_localctx, 304, RULE_bytes); + EnterRule(_localctx, 312, RULE_bytes); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2389; + State = 2502; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (_la==HEXBYTE) { + while (_la==INT32 || _la==ID || _la==HEXBYTE) { { { - State = 2386; - hexbytes(); + State = 2499; + hexbyte(); } } - State = 2391; + State = 2504; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -14096,52 +14619,40 @@ public BytesContext bytes() { return _localctx; } - public partial class HexbytesContext : ParserRuleContext { - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode[] HEXBYTE() { return GetTokens(CILParser.HEXBYTE); } - [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode HEXBYTE(int i) { - return GetToken(CILParser.HEXBYTE, i); - } - public HexbytesContext(ParserRuleContext parent, int invokingState) + public partial class HexbyteContext : ParserRuleContext { + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode INT32() { return GetToken(CILParser.INT32, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode ID() { return GetToken(CILParser.ID, 0); } + [System.Diagnostics.DebuggerNonUserCode] public ITerminalNode HEXBYTE() { return GetToken(CILParser.HEXBYTE, 0); } + public HexbyteContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { } - public override int RuleIndex { get { return RULE_hexbytes; } } + public override int RuleIndex { get { return RULE_hexbyte; } } [System.Diagnostics.DebuggerNonUserCode] public override TResult Accept(IParseTreeVisitor visitor) { ICILVisitor typedVisitor = visitor as ICILVisitor; - if (typedVisitor != null) return typedVisitor.VisitHexbytes(this); + if (typedVisitor != null) return typedVisitor.VisitHexbyte(this); else return visitor.VisitChildren(this); } } [RuleVersion(0)] - public HexbytesContext hexbytes() { - HexbytesContext _localctx = new HexbytesContext(Context, State); - EnterRule(_localctx, 306, RULE_hexbytes); + public HexbyteContext hexbyte() { + HexbyteContext _localctx = new HexbyteContext(Context, State); + EnterRule(_localctx, 314, RULE_hexbyte); + int _la; try { - int _alt; EnterOuterAlt(_localctx, 1); { - State = 2393; - ErrorHandler.Sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - State = 2392; - Match(HEXBYTE); - } - } - break; - default: - throw new NoViableAltException(this); - } - State = 2395; - ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,136,Context); - } while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ); + State = 2505; + _la = TokenStream.LA(1); + if ( !(_la==INT32 || _la==ID || _la==HEXBYTE) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } } } catch (RecognitionException re) { @@ -14179,9 +14690,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public FieldInitContext fieldInit() { FieldInitContext _localctx = new FieldInitContext(Context, State); - EnterRule(_localctx, 308, RULE_fieldInit); + EnterRule(_localctx, 316, RULE_fieldInit); try { - State = 2400; + State = 2510; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__82: @@ -14199,21 +14710,21 @@ public FieldInitContext fieldInit() { case UINT64: EnterOuterAlt(_localctx, 1); { - State = 2397; + State = 2507; fieldSerInit(); } break; case QSTRING: EnterOuterAlt(_localctx, 2); { - State = 2398; + State = 2508; compQstring(); } break; case NULLREF: EnterOuterAlt(_localctx, 3); { - State = 2399; + State = 2509; Match(NULLREF); } break; @@ -14308,380 +14819,380 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SerInitContext serInit() { SerInitContext _localctx = new SerInitContext(Context, State); - EnterRule(_localctx, 310, RULE_serInit); + EnterRule(_localctx, 318, RULE_serInit); try { - State = 2550; + State = 2660; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,138,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,143,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2402; + State = 2512; fieldSerInit(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2403; + State = 2513; Match(STRING); - State = 2404; + State = 2514; Match(T__28); - State = 2405; + State = 2515; Match(NULLREF); - State = 2406; + State = 2516; Match(T__29); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2407; + State = 2517; Match(STRING); - State = 2408; + State = 2518; Match(T__28); - State = 2409; + State = 2519; Match(SQSTRING); - State = 2410; + State = 2520; Match(T__29); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2411; + State = 2521; Match(TYPE); - State = 2412; + State = 2522; Match(T__28); - State = 2413; + State = 2523; Match(T__37); - State = 2414; + State = 2524; Match(SQSTRING); - State = 2415; + State = 2525; Match(T__29); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2416; + State = 2526; Match(TYPE); - State = 2417; + State = 2527; Match(T__28); - State = 2418; + State = 2528; className(); - State = 2419; + State = 2529; Match(T__29); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 2421; + State = 2531; Match(TYPE); - State = 2422; + State = 2532; Match(T__28); - State = 2423; + State = 2533; Match(NULLREF); - State = 2424; + State = 2534; Match(T__29); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 2425; + State = 2535; Match(OBJECT); - State = 2426; + State = 2536; Match(T__28); - State = 2427; + State = 2537; serInit(); - State = 2428; + State = 2538; Match(T__29); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 2430; + State = 2540; Match(FLOAT32); - State = 2431; + State = 2541; Match(T__40); - State = 2432; + State = 2542; int32(); - State = 2433; + State = 2543; Match(T__41); - State = 2434; + State = 2544; Match(T__28); - State = 2435; + State = 2545; f32seq(); - State = 2436; + State = 2546; Match(T__29); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 2438; + State = 2548; Match(FLOAT64_); - State = 2439; + State = 2549; Match(T__40); - State = 2440; + State = 2550; int32(); - State = 2441; + State = 2551; Match(T__41); - State = 2442; + State = 2552; Match(T__28); - State = 2443; + State = 2553; f64seq(); - State = 2444; + State = 2554; Match(T__29); } break; case 10: EnterOuterAlt(_localctx, 10); { - State = 2446; + State = 2556; Match(INT64_); - State = 2447; + State = 2557; Match(T__40); - State = 2448; + State = 2558; int32(); - State = 2449; + State = 2559; Match(T__41); - State = 2450; + State = 2560; Match(T__28); - State = 2451; + State = 2561; i64seq(); - State = 2452; + State = 2562; Match(T__29); } break; case 11: EnterOuterAlt(_localctx, 11); { - State = 2454; + State = 2564; Match(INT32_); - State = 2455; + State = 2565; Match(T__40); - State = 2456; + State = 2566; int32(); - State = 2457; + State = 2567; Match(T__41); - State = 2458; + State = 2568; Match(T__28); - State = 2459; + State = 2569; i32seq(); - State = 2460; + State = 2570; Match(T__29); } break; case 12: EnterOuterAlt(_localctx, 12); { - State = 2462; + State = 2572; Match(INT16); - State = 2463; + State = 2573; Match(T__40); - State = 2464; + State = 2574; int32(); - State = 2465; + State = 2575; Match(T__41); - State = 2466; + State = 2576; Match(T__28); - State = 2467; + State = 2577; i16seq(); - State = 2468; + State = 2578; Match(T__29); } break; case 13: EnterOuterAlt(_localctx, 13); { - State = 2470; + State = 2580; Match(INT8); - State = 2471; + State = 2581; Match(T__40); - State = 2472; + State = 2582; int32(); - State = 2473; + State = 2583; Match(T__41); - State = 2474; + State = 2584; Match(T__28); - State = 2475; + State = 2585; i8seq(); - State = 2476; + State = 2586; Match(T__29); } break; case 14: EnterOuterAlt(_localctx, 14); { - State = 2478; + State = 2588; Match(UINT64); - State = 2479; + State = 2589; Match(T__40); - State = 2480; + State = 2590; int32(); - State = 2481; + State = 2591; Match(T__41); - State = 2482; + State = 2592; Match(T__28); - State = 2483; + State = 2593; i64seq(); - State = 2484; + State = 2594; Match(T__29); } break; case 15: EnterOuterAlt(_localctx, 15); { - State = 2486; + State = 2596; Match(UINT32); - State = 2487; + State = 2597; Match(T__40); - State = 2488; + State = 2598; int32(); - State = 2489; + State = 2599; Match(T__41); - State = 2490; + State = 2600; Match(T__28); - State = 2491; + State = 2601; i32seq(); - State = 2492; + State = 2602; Match(T__29); } break; case 16: EnterOuterAlt(_localctx, 16); { - State = 2494; + State = 2604; Match(UINT16); - State = 2495; + State = 2605; Match(T__40); - State = 2496; + State = 2606; int32(); - State = 2497; + State = 2607; Match(T__41); - State = 2498; + State = 2608; Match(T__28); - State = 2499; + State = 2609; i16seq(); - State = 2500; + State = 2610; Match(T__29); } break; case 17: EnterOuterAlt(_localctx, 17); { - State = 2502; + State = 2612; Match(UINT8); - State = 2503; + State = 2613; Match(T__40); - State = 2504; + State = 2614; int32(); - State = 2505; + State = 2615; Match(T__41); - State = 2506; + State = 2616; Match(T__28); - State = 2507; + State = 2617; i8seq(); - State = 2508; + State = 2618; Match(T__29); } break; case 18: EnterOuterAlt(_localctx, 18); { - State = 2510; + State = 2620; Match(CHAR); - State = 2511; + State = 2621; Match(T__40); - State = 2512; + State = 2622; int32(); - State = 2513; + State = 2623; Match(T__41); - State = 2514; + State = 2624; Match(T__28); - State = 2515; + State = 2625; i16seq(); - State = 2516; + State = 2626; Match(T__29); } break; case 19: EnterOuterAlt(_localctx, 19); { - State = 2518; + State = 2628; Match(BOOL); - State = 2519; + State = 2629; Match(T__40); - State = 2520; + State = 2630; int32(); - State = 2521; + State = 2631; Match(T__41); - State = 2522; + State = 2632; Match(T__28); - State = 2523; + State = 2633; boolSeq(); - State = 2524; + State = 2634; Match(T__29); } break; case 20: EnterOuterAlt(_localctx, 20); { - State = 2526; + State = 2636; Match(STRING); - State = 2527; + State = 2637; Match(T__40); - State = 2528; + State = 2638; int32(); - State = 2529; + State = 2639; Match(T__41); - State = 2530; + State = 2640; Match(T__28); - State = 2531; + State = 2641; sqstringSeq(); - State = 2532; + State = 2642; Match(T__29); } break; case 21: EnterOuterAlt(_localctx, 21); { - State = 2534; + State = 2644; Match(TYPE); - State = 2535; + State = 2645; Match(T__40); - State = 2536; + State = 2646; int32(); - State = 2537; + State = 2647; Match(T__41); - State = 2538; + State = 2648; Match(T__28); - State = 2539; + State = 2649; classSeq(); - State = 2540; + State = 2650; Match(T__29); } break; case 22: EnterOuterAlt(_localctx, 22); { - State = 2542; + State = 2652; Match(OBJECT); - State = 2543; + State = 2653; Match(T__40); - State = 2544; + State = 2654; int32(); - State = 2545; + State = 2655; Match(T__41); - State = 2546; + State = 2656; Match(T__28); - State = 2547; + State = 2657; objSeq(); - State = 2548; + State = 2658; Match(T__29); } break; @@ -14727,38 +15238,34 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public F32seqContext f32seq() { F32seqContext _localctx = new F32seqContext(Context, State); - EnterRule(_localctx, 312, RULE_f32seq); + EnterRule(_localctx, 320, RULE_f32seq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2556; + State = 2666; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (((((_la - 169)) & ~0x3f) == 0 && ((1L << (_la - 169)) & 196613L) != 0)) { + while (((((_la - 172)) & ~0x3f) == 0 && ((1L << (_la - 172)) & 98309L) != 0)) { { - State = 2554; + State = 2664; ErrorHandler.Sync(this); - switch (TokenStream.LA(1)) { - case FLOAT64: - case FLOAT32: - case FLOAT64_: + switch ( Interpreter.AdaptivePredict(TokenStream,144,Context) ) { + case 1: { - State = 2552; + State = 2662; float64(); } break; - case INT32: + case 2: { - State = 2553; + State = 2663; int32(); } break; - default: - throw new NoViableAltException(this); } } - State = 2558; + State = 2668; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -14804,39 +15311,34 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public F64seqContext f64seq() { F64seqContext _localctx = new F64seqContext(Context, State); - EnterRule(_localctx, 314, RULE_f64seq); + EnterRule(_localctx, 322, RULE_f64seq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2563; + State = 2673; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (((((_la - 169)) & ~0x3f) == 0 && ((1L << (_la - 169)) & 196615L) != 0)) { + while (((((_la - 172)) & ~0x3f) == 0 && ((1L << (_la - 172)) & 98311L) != 0)) { { - State = 2561; + State = 2671; ErrorHandler.Sync(this); - switch (TokenStream.LA(1)) { - case FLOAT64: - case FLOAT32: - case FLOAT64_: + switch ( Interpreter.AdaptivePredict(TokenStream,146,Context) ) { + case 1: { - State = 2559; + State = 2669; float64(); } break; - case INT32: - case INT64: + case 2: { - State = 2560; + State = 2670; int64(); } break; - default: - throw new NoViableAltException(this); } } - State = 2565; + State = 2675; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -14876,22 +15378,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public I64seqContext i64seq() { I64seqContext _localctx = new I64seqContext(Context, State); - EnterRule(_localctx, 316, RULE_i64seq); + EnterRule(_localctx, 324, RULE_i64seq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2569; + State = 2679; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==INT32 || _la==INT64) { { { - State = 2566; + State = 2676; int64(); } } - State = 2571; + State = 2681; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -14931,22 +15433,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public I32seqContext i32seq() { I32seqContext _localctx = new I32seqContext(Context, State); - EnterRule(_localctx, 318, RULE_i32seq); + EnterRule(_localctx, 326, RULE_i32seq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2575; + State = 2685; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==INT32) { { { - State = 2572; + State = 2682; int32(); } } - State = 2577; + State = 2687; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -14986,22 +15488,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public I16seqContext i16seq() { I16seqContext _localctx = new I16seqContext(Context, State); - EnterRule(_localctx, 320, RULE_i16seq); + EnterRule(_localctx, 328, RULE_i16seq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2581; + State = 2691; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==INT32) { { { - State = 2578; + State = 2688; int32(); } } - State = 2583; + State = 2693; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -15041,22 +15543,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public I8seqContext i8seq() { I8seqContext _localctx = new I8seqContext(Context, State); - EnterRule(_localctx, 322, RULE_i8seq); + EnterRule(_localctx, 330, RULE_i8seq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2587; + State = 2697; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==INT32) { { { - State = 2584; + State = 2694; int32(); } } - State = 2589; + State = 2699; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -15096,22 +15598,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public BoolSeqContext boolSeq() { BoolSeqContext _localctx = new BoolSeqContext(Context, State); - EnterRule(_localctx, 324, RULE_boolSeq); + EnterRule(_localctx, 332, RULE_boolSeq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2593; + State = 2703; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (_la==T__92 || _la==T__93) { + while (_la==T__93 || _la==T__94) { { { - State = 2590; + State = 2700; truefalse(); } } - State = 2595; + State = 2705; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -15153,18 +15655,18 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public SqstringSeqContext sqstringSeq() { SqstringSeqContext _localctx = new SqstringSeqContext(Context, State); - EnterRule(_localctx, 326, RULE_sqstringSeq); + EnterRule(_localctx, 334, RULE_sqstringSeq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2599; + State = 2709; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==NULLREF || _la==SQSTRING) { { { - State = 2596; + State = 2706; _la = TokenStream.LA(1); if ( !(_la==NULLREF || _la==SQSTRING) ) { ErrorHandler.RecoverInline(this); @@ -15175,7 +15677,7 @@ public SqstringSeqContext sqstringSeq() { } } } - State = 2601; + State = 2711; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -15215,22 +15717,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ClassSeqContext classSeq() { ClassSeqContext _localctx = new ClassSeqContext(Context, State); - EnterRule(_localctx, 328, RULE_classSeq); + EnterRule(_localctx, 336, RULE_classSeq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2605; + State = 2715; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (_la==T__37 || _la==T__40 || _la==T__110 || _la==NULLREF || ((((_la - 259)) & ~0x3f) == 0 && ((1L << (_la - 259)) & 6442450951L) != 0)) { + while (_la==T__37 || _la==T__40 || _la==T__111 || _la==NULLREF || _la==VALUE || ((((_la - 242)) & ~0x3f) == 0 && ((1L << (_la - 242)) & 105553118478337L) != 0)) { { { - State = 2602; + State = 2712; classSeqElement(); } } - State = 2607; + State = 2717; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -15269,37 +15771,40 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ClassSeqElementContext classSeqElement() { ClassSeqElementContext _localctx = new ClassSeqElementContext(Context, State); - EnterRule(_localctx, 330, RULE_classSeqElement); + EnterRule(_localctx, 338, RULE_classSeqElement); try { - State = 2612; + State = 2722; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case NULLREF: EnterOuterAlt(_localctx, 1); { - State = 2608; + State = 2718; Match(NULLREF); } break; case T__37: EnterOuterAlt(_localctx, 2); { - State = 2609; + State = 2719; Match(T__37); - State = 2610; + State = 2720; Match(SQSTRING); } break; case T__40: - case T__110: + case T__111: + case VALUE: + case INSTANCE: case THIS: case BASE: case NESTER: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 3); { - State = 2611; + State = 2721; className(); } break; @@ -15341,22 +15846,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ObjSeqContext objSeq() { ObjSeqContext _localctx = new ObjSeqContext(Context, State); - EnterRule(_localctx, 332, RULE_objSeq); + EnterRule(_localctx, 340, RULE_objSeq); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2617; + State = 2727; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while (_la==T__82 || ((((_la - 178)) & ~0x3f) == 0 && ((1L << (_la - 178)) & 106495L) != 0)) { + while (_la==T__82 || ((((_la - 180)) & ~0x3f) == 0 && ((1L << (_la - 180)) & 106495L) != 0)) { { { - State = 2614; + State = 2724; serInit(); } } - State = 2619; + State = 2729; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -15399,29 +15904,29 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public CustomAttrDeclContext customAttrDecl() { CustomAttrDeclContext _localctx = new CustomAttrDeclContext(Context, State); - EnterRule(_localctx, 334, RULE_customAttrDecl); + EnterRule(_localctx, 342, RULE_customAttrDecl); try { - State = 2623; + State = 2733; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,152,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,157,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2620; + State = 2730; customDescr(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2621; + State = 2731; customDescrWithOwner(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2622; + State = 2732; dottedName(); } break; @@ -15473,82 +15978,82 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AsmOrRefDeclContext asmOrRefDecl() { AsmOrRefDeclContext _localctx = new AsmOrRefDeclContext(Context, State); - EnterRule(_localctx, 336, RULE_asmOrRefDecl); + EnterRule(_localctx, 344, RULE_asmOrRefDecl); try { - State = 2650; + State = 2760; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,153,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,158,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2625; - Match(T__163); - State = 2626; + State = 2735; + Match(T__166); + State = 2736; Match(T__34); - State = 2627; + State = 2737; Match(T__28); - State = 2628; + State = 2738; bytes(); - State = 2629; + State = 2739; Match(T__29); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2631; - Match(T__164); - State = 2632; + State = 2741; + Match(T__167); + State = 2742; intOrWildcard(); - State = 2633; + State = 2743; Match(T__73); - State = 2634; + State = 2744; intOrWildcard(); - State = 2635; + State = 2745; Match(T__73); - State = 2636; + State = 2746; intOrWildcard(); - State = 2637; + State = 2747; Match(T__73); - State = 2638; + State = 2748; intOrWildcard(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2640; - Match(T__165); - State = 2641; + State = 2750; + Match(T__168); + State = 2751; compQstring(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2642; - Match(T__165); - State = 2643; + State = 2752; + Match(T__168); + State = 2753; Match(T__34); - State = 2644; + State = 2754; Match(T__28); - State = 2645; + State = 2755; bytes(); - State = 2646; + State = 2756; Match(T__29); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2648; + State = 2758; customAttrDecl(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 2649; + State = 2759; compControl(); } break; @@ -15591,38 +16096,38 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AssemblyRefHeadContext assemblyRefHead() { AssemblyRefHeadContext _localctx = new AssemblyRefHeadContext(Context, State); - EnterRule(_localctx, 338, RULE_assemblyRefHead); + EnterRule(_localctx, 346, RULE_assemblyRefHead); try { - State = 2664; + State = 2774; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,154,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,159,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2652; + State = 2762; Match(T__23); - State = 2653; + State = 2763; Match(T__38); - State = 2654; + State = 2764; asmAttr(); - State = 2655; + State = 2765; dottedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2657; + State = 2767; Match(T__23); - State = 2658; + State = 2768; Match(T__38); - State = 2659; + State = 2769; asmAttr(); - State = 2660; + State = 2770; dottedName(); - State = 2661; + State = 2771; Match(T__32); - State = 2662; + State = 2772; dottedName(); } break; @@ -15662,22 +16167,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AssemblyRefDeclsContext assemblyRefDecls() { AssemblyRefDeclsContext _localctx = new AssemblyRefDeclsContext(Context, State); - EnterRule(_localctx, 340, RULE_assemblyRefDecls); + EnterRule(_localctx, 348, RULE_assemblyRefDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2669; + State = 2779; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 18014417836834816L) != 0) || ((((_la - 164)) & ~0x3f) == 0 && ((1L << (_la - 164)) & 8207L) != 0) || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 6291583L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 18014417836834816L) != 0) || ((((_la - 167)) & ~0x3f) == 0 && ((1L << (_la - 167)) & 2147487759L) != 0) || ((((_la - 242)) & ~0x3f) == 0 && ((1L << (_la - 242)) & 105555249070081L) != 0)) { { { - State = 2666; + State = 2776; assemblyRefDecl(); } } - State = 2671; + State = 2781; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -15718,31 +16223,34 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public AssemblyRefDeclContext assemblyRefDecl() { AssemblyRefDeclContext _localctx = new AssemblyRefDeclContext(Context, State); - EnterRule(_localctx, 342, RULE_assemblyRefDecl); + EnterRule(_localctx, 350, RULE_assemblyRefDecl); try { - State = 2686; + State = 2796; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case HASH: EnterOuterAlt(_localctx, 1); { - State = 2672; + State = 2782; Match(HASH); - State = 2673; + State = 2783; Match(T__34); - State = 2674; + State = 2784; Match(T__28); - State = 2675; + State = 2785; bytes(); - State = 2676; + State = 2786; Match(T__29); } break; case T__30: case T__33: - case T__163: - case T__164: - case T__165: + case T__166: + case T__167: + case T__168: + case VALUE: + case INSTANCE: + case SQSTRING: case PP_DEFINE: case PP_UNDEF: case PP_IFDEF: @@ -15754,29 +16262,29 @@ public AssemblyRefDeclContext assemblyRefDecl() { case ID: EnterOuterAlt(_localctx, 2); { - State = 2678; + State = 2788; asmOrRefDecl(); } break; - case T__166: + case T__169: EnterOuterAlt(_localctx, 3); { - State = 2679; - Match(T__166); - State = 2680; + State = 2789; + Match(T__169); + State = 2790; Match(T__34); - State = 2681; + State = 2791; Match(T__28); - State = 2682; + State = 2792; bytes(); - State = 2683; + State = 2793; Match(T__29); } break; case T__53: EnterOuterAlt(_localctx, 4); { - State = 2685; + State = 2795; Match(T__53); } break; @@ -15821,30 +16329,30 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ExptypeHeadContext exptypeHead() { ExptypeHeadContext _localctx = new ExptypeHeadContext(Context, State); - EnterRule(_localctx, 344, RULE_exptypeHead); + EnterRule(_localctx, 352, RULE_exptypeHead); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2688; + State = 2798; Match(T__48); - State = 2689; + State = 2799; Match(T__38); - State = 2693; + State = 2803; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2309220708934221824L) != 0) || _la==T__167) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2309220708934221824L) != 0) || _la==T__170) { { { - State = 2690; + State = 2800; exptAttr(); } } - State = 2695; + State = 2805; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 2696; + State = 2806; dottedName(); } } @@ -15886,28 +16394,28 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ExportHeadContext exportHead() { ExportHeadContext _localctx = new ExportHeadContext(Context, State); - EnterRule(_localctx, 346, RULE_exportHead); + EnterRule(_localctx, 354, RULE_exportHead); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2698; + State = 2808; Match(EXPORT); - State = 2702; + State = 2812; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2309220708934221824L) != 0) || _la==T__167) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2309220708934221824L) != 0) || _la==T__170) { { { - State = 2699; + State = 2809; exptAttr(); } } - State = 2704; + State = 2814; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 2705; + State = 2815; dottedName(); } } @@ -15939,83 +16447,83 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ExptAttrContext exptAttr() { ExptAttrContext _localctx = new ExptAttrContext(Context, State); - EnterRule(_localctx, 348, RULE_exptAttr); + EnterRule(_localctx, 356, RULE_exptAttr); try { - State = 2722; + State = 2832; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,159,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,164,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2707; + State = 2817; Match(T__50); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2708; + State = 2818; Match(T__49); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2709; - Match(T__167); + State = 2819; + Match(T__170); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2710; + State = 2820; Match(T__60); - State = 2711; + State = 2821; Match(T__49); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2712; + State = 2822; Match(T__60); - State = 2713; + State = 2823; Match(T__50); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 2714; + State = 2824; Match(T__60); - State = 2715; + State = 2825; Match(T__61); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 2716; + State = 2826; Match(T__60); - State = 2717; + State = 2827; Match(T__62); } break; case 8: EnterOuterAlt(_localctx, 8); { - State = 2718; + State = 2828; Match(T__60); - State = 2719; + State = 2829; Match(T__63); } break; case 9: EnterOuterAlt(_localctx, 9); { - State = 2720; + State = 2830; Match(T__60); - State = 2721; + State = 2831; Match(T__64); } break; @@ -16055,22 +16563,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ExptypeDeclsContext exptypeDecls() { ExptypeDeclsContext _localctx = new ExptypeDeclsContext(Context, State); - EnterRule(_localctx, 350, RULE_exptypeDecls); + EnterRule(_localctx, 358, RULE_exptypeDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2727; + State = 2837; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 562969298599936L) != 0) || _la==T__110 || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 6291583L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 562969298599936L) != 0) || _la==T__111 || _la==VALUE || _la==INSTANCE || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 50332665L) != 0)) { { { - State = 2724; + State = 2834; exptypeDecl(); } } - State = 2729; + State = 2839; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -16122,69 +16630,69 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ExptypeDeclContext exptypeDecl() { ExptypeDeclContext _localctx = new ExptypeDeclContext(Context, State); - EnterRule(_localctx, 352, RULE_exptypeDecl); + EnterRule(_localctx, 360, RULE_exptypeDecl); try { - State = 2743; + State = 2853; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,161,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,166,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2730; + State = 2840; Match(T__19); - State = 2731; + State = 2841; dottedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2732; + State = 2842; Match(T__48); - State = 2733; + State = 2843; Match(T__38); - State = 2734; + State = 2844; slashedName(); } break; case 3: EnterOuterAlt(_localctx, 3); { - State = 2735; + State = 2845; Match(T__23); - State = 2736; + State = 2846; Match(T__38); - State = 2737; + State = 2847; dottedName(); } break; case 4: EnterOuterAlt(_localctx, 4); { - State = 2738; + State = 2848; mdtoken(); } break; case 5: EnterOuterAlt(_localctx, 5); { - State = 2739; + State = 2849; Match(T__48); - State = 2740; + State = 2850; int32(); } break; case 6: EnterOuterAlt(_localctx, 6); { - State = 2741; + State = 2851; customAttrDecl(); } break; case 7: EnterOuterAlt(_localctx, 7); { - State = 2742; + State = 2852; compControl(); } break; @@ -16231,59 +16739,59 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ManifestResHeadContext manifestResHead() { ManifestResHeadContext _localctx = new ManifestResHeadContext(Context, State); - EnterRule(_localctx, 354, RULE_manifestResHead); + EnterRule(_localctx, 362, RULE_manifestResHead); int _la; try { - State = 2764; + State = 2874; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,164,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,169,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 2745; + State = 2855; Match(MRESOURCE); - State = 2749; + State = 2859; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__49 || _la==T__50) { { { - State = 2746; + State = 2856; manresAttr(); } } - State = 2751; + State = 2861; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 2752; + State = 2862; dottedName(); } break; case 2: EnterOuterAlt(_localctx, 2); { - State = 2753; + State = 2863; Match(MRESOURCE); - State = 2757; + State = 2867; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__49 || _la==T__50) { { { - State = 2754; + State = 2864; manresAttr(); } } - State = 2759; + State = 2869; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } - State = 2760; + State = 2870; dottedName(); - State = 2761; + State = 2871; Match(T__32); - State = 2762; + State = 2872; dottedName(); } break; @@ -16317,12 +16825,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ManresAttrContext manresAttr() { ManresAttrContext _localctx = new ManresAttrContext(Context, State); - EnterRule(_localctx, 356, RULE_manresAttr); + EnterRule(_localctx, 364, RULE_manresAttr); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2766; + State = 2876; _la = TokenStream.LA(1); if ( !(_la==T__49 || _la==T__50) ) { ErrorHandler.RecoverInline(this); @@ -16367,22 +16875,22 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ManifestResDeclsContext manifestResDecls() { ManifestResDeclsContext _localctx = new ManifestResDeclsContext(Context, State); - EnterRule(_localctx, 358, RULE_manifestResDecls); + EnterRule(_localctx, 366, RULE_manifestResDecls); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2771; + State = 2881; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19345178624L) != 0) || ((((_la - 269)) & ~0x3f) == 0 && ((1L << (_la - 269)) & 6291583L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 19345178624L) != 0) || _la==VALUE || _la==INSTANCE || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & 50332665L) != 0)) { { { - State = 2768; + State = 2878; manifestResDecl(); } } - State = 2773; + State = 2883; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -16428,41 +16936,44 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public ManifestResDeclContext manifestResDecl() { ManifestResDeclContext _localctx = new ManifestResDeclContext(Context, State); - EnterRule(_localctx, 360, RULE_manifestResDecl); + EnterRule(_localctx, 368, RULE_manifestResDecl); try { - State = 2784; + State = 2894; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__19: EnterOuterAlt(_localctx, 1); { - State = 2774; + State = 2884; Match(T__19); - State = 2775; + State = 2885; dottedName(); - State = 2776; + State = 2886; Match(T__42); - State = 2777; + State = 2887; int32(); } break; case T__23: EnterOuterAlt(_localctx, 2); { - State = 2779; + State = 2889; Match(T__23); - State = 2780; + State = 2890; Match(T__38); - State = 2781; + State = 2891; dottedName(); } break; case T__33: + case VALUE: + case INSTANCE: + case SQSTRING: case DOTTEDNAME: case ID: EnterOuterAlt(_localctx, 3); { - State = 2782; + State = 2892; customAttrDecl(); } break; @@ -16476,7 +16987,7 @@ public ManifestResDeclContext manifestResDecl() { case PP_INCLUDE: EnterOuterAlt(_localctx, 4); { - State = 2783; + State = 2893; compControl(); } break; @@ -16497,7 +17008,7 @@ public ManifestResDeclContext manifestResDecl() { public override bool Sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 32: return vtfixupAttr_sempred((VtfixupAttrContext)_localctx, predIndex); + case 34: return vtfixupAttr_sempred((VtfixupAttrContext)_localctx, predIndex); } return true; } @@ -16513,7 +17024,7 @@ private bool vtfixupAttr_sempred(VtfixupAttrContext _localctx, int predIndex) { } private static int[] _serializedATN = { - 4,1,306,2787,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2, + 4,1,304,2897,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2, 7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14, 2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21, 2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,7,28, @@ -16540,1050 +17051,1098 @@ private bool vtfixupAttr_sempred(VtfixupAttrContext _localctx, int predIndex) { 2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163,2,164,7,164, 2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169,7,169,2,170,7,170, 2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,2,175,7,175,2,176,7,176, - 2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180,1,0,1,0,1,1,1,1,1,1,5, - 1,368,8,1,10,1,12,1,371,9,1,1,1,3,1,374,8,1,1,2,1,2,5,2,378,8,2,10,2,12, - 2,381,9,2,1,2,1,2,1,3,4,3,386,8,3,11,3,12,3,387,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4, - 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,440,8,4,1,5,1,5,1,5,1,6,1,6, - 1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1, - 10,1,10,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1, - 12,1,12,3,12,479,8,12,1,13,1,13,1,13,5,13,484,8,13,10,13,12,13,487,9,13, - 1,13,1,13,1,14,1,14,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,16,1,16,3,16,506,8,16,1,17,1,17,3,17,510,8,17,1,18,1,18,1,18,1, - 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,528, - 8,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, - 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,555,8, - 19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, - 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,3,20,578,8,20,1,21,1,21,1,21,1,21, - 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, - 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, - 1,21,1,21,3,21,614,8,21,1,22,1,22,1,23,1,23,3,23,620,8,23,1,24,1,24,1, - 24,1,25,1,25,5,25,627,8,25,10,25,12,25,630,9,25,1,26,1,26,1,26,1,26,1, - 26,1,26,1,26,5,26,639,8,26,10,26,12,26,642,9,26,1,27,1,27,1,28,1,28,3, - 28,648,8,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,3,29,659,8,29, - 1,30,1,30,1,30,1,30,1,30,1,30,3,30,667,8,30,1,31,1,31,1,31,1,31,1,31,1, - 31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,5, - 32,688,8,32,10,32,12,32,691,9,32,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1, - 34,1,34,1,35,1,35,5,35,704,8,35,10,35,12,35,707,9,35,1,35,1,35,1,35,1, - 35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1, - 36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1, - 36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,751,8,36,1,37, - 1,37,1,37,3,37,756,8,37,1,38,1,38,1,38,3,38,761,8,38,1,39,5,39,764,8,39, - 10,39,12,39,767,9,39,1,40,1,40,1,40,5,40,772,8,40,10,40,12,40,775,9,40, - 1,40,1,40,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,1,42,1,42,3,42,852,8,42,1,43,1,43,5,43,856,8,43,10,43,12, - 43,859,9,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,5,43, - 872,8,43,10,43,12,43,875,9,43,1,43,1,43,1,43,3,43,880,8,43,1,44,1,44,1, - 45,1,45,3,45,886,8,45,1,46,1,46,1,47,5,47,891,8,47,10,47,12,47,894,9,47, - 1,48,1,48,1,49,1,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53,1,54,1,54, - 1,55,1,55,1,56,1,56,1,57,1,57,1,58,1,58,1,59,1,59,1,60,1,60,1,61,1,61, - 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61, - 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61, - 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61, - 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61, - 1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61, - 1,61,1,61,1,61,1,61,3,61,998,8,61,1,62,1,62,1,62,1,62,1,62,5,62,1005,8, - 62,10,62,12,62,1008,9,62,1,62,1,62,3,62,1012,8,62,3,62,1014,8,62,1,63, - 1,63,1,63,1,63,5,63,1020,8,63,10,63,12,63,1023,9,63,1,63,1,63,1,63,1,64, - 1,64,1,64,1,64,5,64,1032,8,64,10,64,12,64,1035,9,64,1,64,1,64,1,64,1,65, - 1,65,1,65,1,65,5,65,1044,8,65,10,65,12,65,1047,9,65,1,65,1,65,1,65,1,65, - 3,65,1053,8,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,3,66, - 1065,8,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67, - 1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,3,67, - 1092,8,67,1,68,1,68,1,68,5,68,1097,8,68,10,68,12,68,1100,9,68,1,68,1,68, - 1,69,5,69,1105,8,69,10,69,12,69,1108,9,69,1,70,1,70,1,70,1,70,1,70,3,70, - 1115,8,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71, - 1128,8,71,1,72,1,72,1,72,5,72,1133,8,72,10,72,12,72,1136,9,72,3,72,1138, - 8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73, - 1,73,1,73,1,73,1,73,3,73,1157,8,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,74,3,74,1240,8,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75, - 3,75,1249,8,75,1,76,1,76,1,76,5,76,1254,8,76,10,76,12,76,1257,9,76,3,76, - 1259,8,76,1,77,1,77,1,78,1,78,5,78,1265,8,78,10,78,12,78,1268,9,78,1,79, - 1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79, - 1,79,1,79,3,79,1287,8,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80, - 1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80, - 1,80,1,80,1,80,1,80,1,80,1,80,1,80,3,80,1319,8,80,1,81,1,81,1,82,1,82, - 1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,3,82,1333,8,82,1,83,1,83,1,83, + 2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180,2,181,7,181,2,182,7,182, + 2,183,7,183,2,184,7,184,1,0,1,0,1,1,1,1,1,1,1,1,5,1,377,8,1,10,1,12,1, + 380,9,1,1,1,1,1,3,1,384,8,1,1,2,1,2,1,3,1,3,5,3,390,8,3,10,3,12,3,393, + 9,3,1,3,1,3,1,4,5,4,398,8,4,10,4,12,4,401,9,4,1,5,1,5,1,5,1,5,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, + 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,453,8,5,1,6,1,6,1,6,1,7,1,7,1, + 7,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11, + 1,11,1,11,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,501,8,13,1, + 14,1,14,1,15,1,15,1,15,5,15,508,8,15,10,15,12,15,511,9,15,1,15,1,15,1, + 16,1,16,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 18,1,18,1,18,1,18,1,18,3,18,534,8,18,1,19,1,19,3,19,538,8,19,1,20,1,20, + 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, + 3,20,556,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1, + 21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3, + 21,583,8,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,606,8,22,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,3,23,642,8,23,1,24,1,24,1,25,1,25,3,25,648,8,25,1,26, + 1,26,1,26,1,27,1,27,5,27,655,8,27,10,27,12,27,658,9,27,1,28,1,28,1,28, + 1,28,1,28,1,28,1,28,5,28,667,8,28,10,28,12,28,670,9,28,1,29,1,29,1,30, + 1,30,3,30,676,8,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,3,31,687, + 8,31,1,32,1,32,1,32,1,32,1,32,1,32,3,32,695,8,32,1,33,1,33,1,33,1,33,1, + 33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1, + 34,5,34,716,8,34,10,34,12,34,719,9,34,1,35,1,35,1,35,1,35,1,35,1,35,1, + 36,1,36,1,36,1,37,1,37,5,37,732,8,37,10,37,12,37,735,9,37,1,37,1,37,1, + 37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1, + 38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1, + 38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,3,38,779,8,38, + 1,39,1,39,1,39,3,39,784,8,39,1,40,1,40,1,40,3,40,789,8,40,1,41,5,41,792, + 8,41,10,41,12,41,795,9,41,1,42,1,42,1,42,5,42,800,8,42,10,42,12,42,803, + 9,42,1,42,1,42,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,912,8,44,1,45,1, + 45,5,45,916,8,45,10,45,12,45,919,9,45,1,45,1,45,1,45,1,45,1,45,1,45,1, + 45,1,45,1,45,1,45,1,45,5,45,932,8,45,10,45,12,45,935,9,45,1,45,1,45,1, + 45,3,45,940,8,45,1,46,1,46,1,47,1,47,3,47,946,8,47,1,48,1,48,1,49,5,49, + 951,8,49,10,49,12,49,954,9,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53, + 1,54,1,54,1,55,1,55,1,56,1,56,1,57,1,57,1,58,1,58,1,59,1,59,1,60,1,60, + 1,61,1,61,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,3,63, + 1061,8,63,1,64,1,64,1,64,3,64,1066,8,64,1,64,1,64,5,64,1070,8,64,10,64, + 12,64,1073,9,64,1,64,1,64,3,64,1077,8,64,3,64,1079,8,64,1,65,1,65,1,65, + 1,65,5,65,1085,8,65,10,65,12,65,1088,9,65,1,65,1,65,1,65,1,66,1,66,1,66, + 1,66,5,66,1097,8,66,10,66,12,66,1100,9,66,1,66,1,66,1,66,1,67,1,67,1,67, + 1,67,5,67,1109,8,67,10,67,12,67,1112,9,67,1,67,1,67,1,67,1,67,3,67,1118, + 8,67,1,68,1,68,1,68,1,68,1,68,3,68,1125,8,68,3,68,1127,8,68,1,69,1,69, + 1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69, + 1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,3,69,1154,8,69,1,70,1,70, + 1,70,5,70,1159,8,70,10,70,12,70,1162,9,70,1,70,1,70,1,71,5,71,1167,8,71, + 10,71,12,71,1170,9,71,1,72,1,72,1,72,1,72,1,72,3,72,1177,8,72,1,73,1,73, + 1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,3,73,1190,8,73,1,74,1,74, + 1,74,5,74,1195,8,74,10,74,12,74,1198,9,74,3,74,1200,8,74,1,75,1,75,1,75, + 1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75, + 3,75,1219,8,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,1,76,1,76,3,76,1305,8,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,3,77, + 1314,8,77,1,78,1,78,1,78,5,78,1319,8,78,10,78,12,78,1322,9,78,3,78,1324, + 8,78,1,79,1,79,1,80,1,80,5,80,1330,8,80,10,80,12,80,1333,9,80,1,81,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,1,81,3,81,1353,8,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82, + 1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82, + 1,82,1,82,1,82,1,82,1,82,1,82,1,82,3,82,1385,8,82,1,83,1,83,1,83,1,83, 1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83, - 1,83,1,83,1,83,1,83,1,83,1,83,3,83,1358,8,83,1,83,1,83,1,83,1,83,1,83, - 1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,3,83,1375,8,83,1,84, - 1,84,1,84,1,84,5,84,1381,8,84,10,84,12,84,1384,9,84,1,84,3,84,1387,8,84, - 1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,3,85, - 1402,8,85,1,86,1,86,1,86,5,86,1407,8,86,10,86,12,86,1410,9,86,1,86,1,86, - 1,87,1,87,1,87,1,87,1,88,1,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89, - 1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89, - 1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,3,89,1454, - 8,89,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,91,3,91,1464,8,91,1,91,1,91, - 1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,3,91,1480, - 8,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,3,91,1492,8,91, - 1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,3,92,1504,8,92,1,93, - 1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,3,93,1518,8,93, - 1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,3,95,1530,8,95,1,96, - 1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,3,96,1541,8,96,1,97,1,97,1,97, - 5,97,1546,8,97,10,97,12,97,1549,9,97,1,97,1,97,1,98,1,98,1,98,1,98,1,98, - 3,98,1558,8,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,99, - 3,99,1571,8,99,1,100,5,100,1574,8,100,10,100,12,100,1577,9,100,1,101,1, - 101,3,101,1581,8,101,1,101,1,101,1,102,1,102,1,102,5,102,1588,8,102,10, - 102,12,102,1591,9,102,1,102,1,102,1,103,1,103,1,103,1,103,1,104,1,104, - 3,104,1601,8,104,1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,5,106,1682, - 8,106,10,106,12,106,1685,9,106,1,106,1,106,1,106,1,106,5,106,1691,8,106, - 10,106,12,106,1694,9,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106, - 5,106,1704,8,106,10,106,12,106,1707,9,106,1,106,1,106,1,106,1,106,1,106, - 1,106,5,106,1715,8,106,10,106,12,106,1718,9,106,1,106,1,106,1,106,1,106, - 1,106,3,106,1725,8,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107, - 5,107,1735,8,107,10,107,12,107,1738,9,107,1,107,1,107,1,107,1,107,1,107, - 1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108, - 1,108,1,108,1,108,1,108,1,108,1,108,3,108,1763,8,108,1,109,1,109,1,109, - 3,109,1768,8,109,1,110,1,110,1,110,3,110,1773,8,110,1,111,1,111,1,111, - 1,111,1,111,3,111,1780,8,111,1,112,1,112,5,112,1784,8,112,10,112,12,112, - 1787,9,112,1,112,1,112,1,112,1,112,1,112,5,112,1794,8,112,10,112,12,112, - 1797,9,112,1,112,3,112,1800,8,112,1,113,1,113,1,114,5,114,1805,8,114,10, - 114,12,114,1808,9,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, - 1,115,1,115,1,115,1,115,3,115,1822,8,115,1,116,1,116,5,116,1826,8,116, - 10,116,12,116,1829,9,116,1,116,1,116,1,116,1,116,1,116,1,116,1,117,1,117, - 1,118,5,118,1840,8,118,10,118,12,118,1843,9,118,1,119,1,119,1,119,1,119, - 1,119,1,119,1,119,1,119,1,119,1,119,3,119,1855,8,119,1,120,1,120,1,120, - 1,120,1,120,1,120,3,120,1863,8,120,1,121,1,121,1,121,1,121,1,121,3,121, - 1870,8,121,1,122,5,122,1873,8,122,10,122,12,122,1876,9,122,1,123,1,123, - 1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,3,123, - 1891,8,123,1,124,1,124,1,124,5,124,1896,8,124,10,124,12,124,1899,9,124, - 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,5,124,1909,8,124,10,124, - 12,124,1912,9,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, - 1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, - 1,125,1,125,3,125,1937,8,125,1,126,1,126,1,126,1,126,1,126,3,126,1944, - 8,126,3,126,1946,8,126,1,126,5,126,1949,8,126,10,126,12,126,1952,9,126, - 1,126,1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127, - 1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127, - 1,127,1,127,1,127,1,127,1,127,3,127,1983,8,127,1,128,1,128,1,128,3,128, - 1988,8,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129, - 1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,3,129,2010, - 8,129,1,130,5,130,2013,8,130,10,130,12,130,2016,9,130,1,131,1,131,1,131, + 1,83,1,83,1,83,3,83,1408,8,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84, + 1,84,1,84,3,84,1420,8,84,1,85,1,85,1,85,1,86,1,86,1,86,1,86,3,86,1429, + 8,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87, + 1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,3,87,1454,8,87,1,87, + 1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87, + 3,87,1471,8,87,1,88,1,88,1,88,1,88,5,88,1477,8,88,10,88,12,88,1480,9,88, + 1,88,3,88,1483,8,88,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89, + 1,89,1,89,1,89,3,89,1498,8,89,1,90,1,90,1,90,5,90,1503,8,90,10,90,12,90, + 1506,9,90,1,90,1,90,1,91,1,91,1,91,1,91,1,92,1,92,1,93,1,93,1,93,1,93, + 1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93, + 1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93, + 1,93,1,93,3,93,1550,8,93,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,3,95, + 1560,8,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95, + 1,95,1,95,3,95,1576,8,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95, + 1,95,3,95,1588,8,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96,1,96, + 3,96,1600,8,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97, + 1,97,3,97,1614,8,97,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99, + 3,99,1626,8,99,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,3, + 100,1637,8,100,1,101,1,101,1,101,5,101,1642,8,101,10,101,12,101,1645,9, + 101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,3,102,1654,8,102,1,103,1, + 103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,3,103,1667,8, + 103,1,104,5,104,1670,8,104,10,104,12,104,1673,9,104,1,105,1,105,3,105, + 1677,8,105,1,105,1,105,1,106,1,106,1,106,5,106,1684,8,106,10,106,12,106, + 1687,9,106,1,106,1,106,1,107,1,107,1,107,1,107,1,108,1,108,3,108,1697, + 8,108,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,5,110,1778,8,110,10,110, + 12,110,1781,9,110,1,110,1,110,1,110,1,110,5,110,1787,8,110,10,110,12,110, + 1790,9,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,5,110,1800, + 8,110,10,110,12,110,1803,9,110,1,110,1,110,1,110,1,110,1,110,1,110,5,110, + 1811,8,110,10,110,12,110,1814,9,110,1,110,1,110,1,110,1,110,1,110,3,110, + 1821,8,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,5,111,1831, + 8,111,10,111,12,111,1834,9,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112, + 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112, + 1,112,1,112,1,112,1,112,1,112,3,112,1860,8,112,1,113,1,113,1,113,1,113, + 1,113,3,113,1867,8,113,1,114,1,114,1,114,3,114,1872,8,114,1,115,1,115, + 1,115,1,115,1,115,3,115,1879,8,115,1,116,1,116,5,116,1883,8,116,10,116, + 12,116,1886,9,116,1,116,1,116,1,116,1,116,1,116,5,116,1893,8,116,10,116, + 12,116,1896,9,116,1,116,3,116,1899,8,116,1,117,1,117,1,118,5,118,1904, + 8,118,10,118,12,118,1907,9,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119, + 1,119,1,119,1,119,1,119,1,119,3,119,1921,8,119,1,120,1,120,5,120,1925, + 8,120,10,120,12,120,1928,9,120,1,120,1,120,1,120,1,120,1,120,1,120,1,121, + 1,121,1,122,5,122,1939,8,122,10,122,12,122,1942,9,122,1,123,1,123,1,123, + 1,123,1,123,1,123,1,123,1,123,1,123,1,123,3,123,1954,8,123,1,124,1,124, + 1,124,1,124,1,124,1,124,3,124,1962,8,124,1,125,1,125,1,125,4,125,1967, + 8,125,11,125,12,125,1968,1,125,1,125,3,125,1973,8,125,1,126,5,126,1976, + 8,126,10,126,12,126,1979,9,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127, + 1,127,1,127,1,127,1,127,1,127,1,127,3,127,1994,8,127,1,128,1,128,1,128, + 5,128,1999,8,128,10,128,12,128,2002,9,128,1,128,1,128,1,128,1,128,1,128, + 1,128,1,128,1,128,5,128,2012,8,128,10,128,12,128,2015,9,128,1,129,1,129, + 1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,3,129,2040,8,129, + 1,130,1,130,1,130,1,130,1,130,3,130,2047,8,130,3,130,2049,8,130,1,130, + 5,130,2052,8,130,10,130,12,130,2055,9,130,1,130,1,130,1,130,3,130,2060, + 8,130,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, - 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, - 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, - 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, - 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,5,131,2077,8,131,10,131, - 12,131,2080,9,131,1,131,1,131,1,131,1,131,5,131,2086,8,131,10,131,12,131, - 2089,9,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,5,131,2099, - 8,131,10,131,12,131,2102,9,131,1,131,1,131,1,131,1,131,1,131,1,131,5,131, - 2110,8,131,10,131,12,131,2113,9,131,1,131,1,131,1,131,1,131,1,131,1,131, - 5,131,2121,8,131,10,131,12,131,2124,9,131,3,131,2126,8,131,1,132,1,132, - 1,132,1,133,1,133,3,133,2133,8,133,1,134,1,134,1,134,1,134,1,135,1,135, - 1,135,1,136,4,136,2143,8,136,11,136,12,136,2144,1,137,1,137,1,137,1,137, - 1,137,1,137,1,137,1,137,1,137,1,137,1,137,1,137,3,137,2159,8,137,1,138, - 1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,3,138, - 2173,8,138,1,139,1,139,1,139,1,139,1,139,1,139,3,139,2181,8,139,1,140, - 1,140,1,140,1,141,1,141,1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,143, - 1,143,1,143,1,143,1,143,1,143,3,143,2201,8,143,1,144,1,144,1,144,1,145, - 1,145,1,145,1,145,1,145,1,145,1,145,3,145,2213,8,145,1,146,1,146,1,146, - 3,146,2218,8,146,1,147,1,147,1,147,1,147,1,147,3,147,2225,8,147,1,148, - 1,148,1,148,5,148,2230,8,148,10,148,12,148,2233,9,148,1,148,1,148,1,149, - 1,149,1,149,1,149,1,149,3,149,2242,8,149,1,150,1,150,1,150,1,150,1,150, - 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150, - 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150, - 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150, - 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150, - 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,3,150, - 2308,8,150,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1,151, - 1,151,1,151,1,151,1,151,1,151,3,151,2385,8,151,1,152,5,152,2388,8,152, - 10,152,12,152,2391,9,152,1,153,4,153,2394,8,153,11,153,12,153,2395,1,154, - 1,154,1,154,3,154,2401,8,154,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, + 1,131,1,131,1,131,1,131,3,131,2089,8,131,1,132,1,132,1,132,3,132,2094, + 8,132,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133, + 1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,3,133,2117, + 8,133,1,134,5,134,2120,8,134,10,134,12,134,2123,9,134,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,5,135,2184,8,135,10,135, + 12,135,2187,9,135,1,135,1,135,1,135,1,135,5,135,2193,8,135,10,135,12,135, + 2196,9,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,5,135,2206, + 8,135,10,135,12,135,2209,9,135,1,135,1,135,1,135,1,135,1,135,1,135,5,135, + 2217,8,135,10,135,12,135,2220,9,135,1,135,1,135,1,135,1,135,1,135,1,135, + 5,135,2228,8,135,10,135,12,135,2231,9,135,3,135,2233,8,135,1,136,1,136, + 1,136,1,137,1,137,3,137,2240,8,137,1,138,1,138,1,138,1,138,1,139,1,139, + 1,139,1,140,4,140,2250,8,140,11,140,12,140,2251,1,141,1,141,1,141,1,141, + 1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,3,141,2266,8,141,1,142, + 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,3,142, + 2280,8,142,1,143,1,143,1,143,1,143,1,143,1,143,3,143,2288,8,143,1,144, + 1,144,1,144,1,145,1,145,1,146,1,146,1,147,1,147,1,147,1,147,1,147,1,147, + 1,147,1,147,1,147,1,147,1,147,3,147,2308,8,147,1,148,1,148,1,148,1,149, + 1,149,1,149,1,149,1,149,1,149,1,149,3,149,2320,8,149,1,150,1,150,1,150, + 3,150,2325,8,150,1,151,1,151,1,151,1,151,1,151,4,151,2332,8,151,11,151, + 12,151,2333,3,151,2336,8,151,1,152,1,152,1,152,5,152,2341,8,152,10,152, + 12,152,2344,9,152,1,152,1,152,1,153,1,153,1,153,1,153,1,153,3,153,2353, + 8,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 1,154,1,154,1,154,1,154,1,154,1,154,1,154,3,154,2421,8,154,1,155,1,155, 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,3,155,2551,8,155, - 1,156,1,156,5,156,2555,8,156,10,156,12,156,2558,9,156,1,157,1,157,5,157, - 2562,8,157,10,157,12,157,2565,9,157,1,158,5,158,2568,8,158,10,158,12,158, - 2571,9,158,1,159,5,159,2574,8,159,10,159,12,159,2577,9,159,1,160,5,160, - 2580,8,160,10,160,12,160,2583,9,160,1,161,5,161,2586,8,161,10,161,12,161, - 2589,9,161,1,162,5,162,2592,8,162,10,162,12,162,2595,9,162,1,163,5,163, - 2598,8,163,10,163,12,163,2601,9,163,1,164,5,164,2604,8,164,10,164,12,164, - 2607,9,164,1,165,1,165,1,165,1,165,3,165,2613,8,165,1,166,5,166,2616,8, - 166,10,166,12,166,2619,9,166,1,167,1,167,1,167,3,167,2624,8,167,1,168, - 1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168, - 1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168, - 3,168,2651,8,168,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169, - 1,169,1,169,1,169,3,169,2665,8,169,1,170,5,170,2668,8,170,10,170,12,170, - 2671,9,170,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171, - 1,171,1,171,1,171,1,171,3,171,2687,8,171,1,172,1,172,1,172,5,172,2692, - 8,172,10,172,12,172,2695,9,172,1,172,1,172,1,173,1,173,5,173,2701,8,173, - 10,173,12,173,2704,9,173,1,173,1,173,1,174,1,174,1,174,1,174,1,174,1,174, - 1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,3,174,2723,8,174, - 1,175,5,175,2726,8,175,10,175,12,175,2729,9,175,1,176,1,176,1,176,1,176, - 1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,3,176,2744,8,176, - 1,177,1,177,5,177,2748,8,177,10,177,12,177,2751,9,177,1,177,1,177,1,177, - 5,177,2756,8,177,10,177,12,177,2759,9,177,1,177,1,177,1,177,1,177,3,177, - 2765,8,177,1,178,1,178,1,179,5,179,2770,8,179,10,179,12,179,2773,9,179, - 1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,3,180,2785, - 8,180,1,180,0,1,64,181,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34, - 36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82, - 84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122, - 124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158, - 160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194, - 196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230, - 232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266, - 268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302, - 304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338, - 340,342,344,346,348,350,352,354,356,358,360,0,13,4,0,1,15,247,247,266, - 266,291,291,1,0,169,170,1,0,36,37,1,0,72,73,3,0,2,2,60,60,76,82,2,0,229, - 229,262,263,9,0,175,175,180,192,198,198,204,205,207,212,215,216,219,219, - 230,242,264,264,1,0,178,190,1,0,93,94,1,0,95,109,1,0,67,68,2,0,176,176, - 266,266,1,0,50,51,3170,0,362,1,0,0,0,2,373,1,0,0,0,4,379,1,0,0,0,6,385, - 1,0,0,0,8,439,1,0,0,0,10,441,1,0,0,0,12,444,1,0,0,0,14,447,1,0,0,0,16, - 451,1,0,0,0,18,454,1,0,0,0,20,457,1,0,0,0,22,464,1,0,0,0,24,478,1,0,0, - 0,26,480,1,0,0,0,28,490,1,0,0,0,30,492,1,0,0,0,32,505,1,0,0,0,34,509,1, - 0,0,0,36,527,1,0,0,0,38,554,1,0,0,0,40,577,1,0,0,0,42,613,1,0,0,0,44,615, - 1,0,0,0,46,619,1,0,0,0,48,621,1,0,0,0,50,628,1,0,0,0,52,640,1,0,0,0,54, - 643,1,0,0,0,56,645,1,0,0,0,58,658,1,0,0,0,60,666,1,0,0,0,62,668,1,0,0, - 0,64,676,1,0,0,0,66,692,1,0,0,0,68,698,1,0,0,0,70,701,1,0,0,0,72,750,1, - 0,0,0,74,755,1,0,0,0,76,760,1,0,0,0,78,765,1,0,0,0,80,773,1,0,0,0,82,778, - 1,0,0,0,84,851,1,0,0,0,86,879,1,0,0,0,88,881,1,0,0,0,90,885,1,0,0,0,92, - 887,1,0,0,0,94,892,1,0,0,0,96,895,1,0,0,0,98,897,1,0,0,0,100,899,1,0,0, - 0,102,901,1,0,0,0,104,903,1,0,0,0,106,905,1,0,0,0,108,907,1,0,0,0,110, - 909,1,0,0,0,112,911,1,0,0,0,114,913,1,0,0,0,116,915,1,0,0,0,118,917,1, - 0,0,0,120,919,1,0,0,0,122,997,1,0,0,0,124,1013,1,0,0,0,126,1015,1,0,0, - 0,128,1027,1,0,0,0,130,1052,1,0,0,0,132,1064,1,0,0,0,134,1091,1,0,0,0, - 136,1098,1,0,0,0,138,1106,1,0,0,0,140,1114,1,0,0,0,142,1127,1,0,0,0,144, - 1137,1,0,0,0,146,1156,1,0,0,0,148,1239,1,0,0,0,150,1248,1,0,0,0,152,1258, - 1,0,0,0,154,1260,1,0,0,0,156,1262,1,0,0,0,158,1286,1,0,0,0,160,1318,1, - 0,0,0,162,1320,1,0,0,0,164,1332,1,0,0,0,166,1374,1,0,0,0,168,1386,1,0, - 0,0,170,1401,1,0,0,0,172,1408,1,0,0,0,174,1413,1,0,0,0,176,1417,1,0,0, - 0,178,1453,1,0,0,0,180,1455,1,0,0,0,182,1491,1,0,0,0,184,1503,1,0,0,0, - 186,1517,1,0,0,0,188,1519,1,0,0,0,190,1529,1,0,0,0,192,1540,1,0,0,0,194, - 1547,1,0,0,0,196,1557,1,0,0,0,198,1570,1,0,0,0,200,1575,1,0,0,0,202,1578, - 1,0,0,0,204,1589,1,0,0,0,206,1594,1,0,0,0,208,1600,1,0,0,0,210,1602,1, - 0,0,0,212,1724,1,0,0,0,214,1726,1,0,0,0,216,1762,1,0,0,0,218,1767,1,0, - 0,0,220,1772,1,0,0,0,222,1779,1,0,0,0,224,1799,1,0,0,0,226,1801,1,0,0, - 0,228,1806,1,0,0,0,230,1821,1,0,0,0,232,1823,1,0,0,0,234,1836,1,0,0,0, - 236,1841,1,0,0,0,238,1854,1,0,0,0,240,1862,1,0,0,0,242,1869,1,0,0,0,244, - 1874,1,0,0,0,246,1890,1,0,0,0,248,1892,1,0,0,0,250,1936,1,0,0,0,252,1938, - 1,0,0,0,254,1982,1,0,0,0,256,1987,1,0,0,0,258,2009,1,0,0,0,260,2014,1, - 0,0,0,262,2125,1,0,0,0,264,2127,1,0,0,0,266,2132,1,0,0,0,268,2134,1,0, - 0,0,270,2138,1,0,0,0,272,2142,1,0,0,0,274,2158,1,0,0,0,276,2172,1,0,0, - 0,278,2180,1,0,0,0,280,2182,1,0,0,0,282,2185,1,0,0,0,284,2187,1,0,0,0, - 286,2200,1,0,0,0,288,2202,1,0,0,0,290,2212,1,0,0,0,292,2217,1,0,0,0,294, - 2224,1,0,0,0,296,2231,1,0,0,0,298,2241,1,0,0,0,300,2307,1,0,0,0,302,2384, - 1,0,0,0,304,2389,1,0,0,0,306,2393,1,0,0,0,308,2400,1,0,0,0,310,2550,1, - 0,0,0,312,2556,1,0,0,0,314,2563,1,0,0,0,316,2569,1,0,0,0,318,2575,1,0, - 0,0,320,2581,1,0,0,0,322,2587,1,0,0,0,324,2593,1,0,0,0,326,2599,1,0,0, - 0,328,2605,1,0,0,0,330,2612,1,0,0,0,332,2617,1,0,0,0,334,2623,1,0,0,0, - 336,2650,1,0,0,0,338,2664,1,0,0,0,340,2669,1,0,0,0,342,2686,1,0,0,0,344, - 2688,1,0,0,0,346,2698,1,0,0,0,348,2722,1,0,0,0,350,2727,1,0,0,0,352,2743, - 1,0,0,0,354,2764,1,0,0,0,356,2766,1,0,0,0,358,2771,1,0,0,0,360,2784,1, - 0,0,0,362,363,7,0,0,0,363,1,1,0,0,0,364,374,5,290,0,0,365,366,5,291,0, - 0,366,368,5,267,0,0,367,365,1,0,0,0,368,371,1,0,0,0,369,367,1,0,0,0,369, - 370,1,0,0,0,370,372,1,0,0,0,371,369,1,0,0,0,372,374,5,291,0,0,373,364, - 1,0,0,0,373,369,1,0,0,0,374,3,1,0,0,0,375,376,5,265,0,0,376,378,5,268, - 0,0,377,375,1,0,0,0,378,381,1,0,0,0,379,377,1,0,0,0,379,380,1,0,0,0,380, - 382,1,0,0,0,381,379,1,0,0,0,382,383,5,265,0,0,383,5,1,0,0,0,384,386,3, - 8,4,0,385,384,1,0,0,0,386,387,1,0,0,0,387,385,1,0,0,0,387,388,1,0,0,0, - 388,7,1,0,0,0,389,390,3,70,35,0,390,391,5,16,0,0,391,392,3,78,39,0,392, - 393,5,17,0,0,393,440,1,0,0,0,394,395,3,68,34,0,395,396,5,16,0,0,396,397, - 3,6,3,0,397,398,5,17,0,0,398,440,1,0,0,0,399,400,3,248,124,0,400,401,5, - 16,0,0,401,402,3,260,130,0,402,403,5,17,0,0,403,440,1,0,0,0,404,440,3, - 214,107,0,405,440,3,288,144,0,406,440,3,66,33,0,407,440,3,62,31,0,408, - 440,3,84,42,0,409,440,3,86,43,0,410,440,3,20,10,0,411,412,3,338,169,0, - 412,413,5,16,0,0,413,414,3,340,170,0,414,415,5,17,0,0,415,440,1,0,0,0, - 416,417,3,344,172,0,417,418,5,16,0,0,418,419,3,350,175,0,419,420,5,17, - 0,0,420,440,1,0,0,0,421,422,3,354,177,0,422,423,5,16,0,0,423,424,3,358, - 179,0,424,425,5,17,0,0,425,440,1,0,0,0,426,440,3,60,30,0,427,440,3,166, - 83,0,428,440,3,334,167,0,429,440,3,10,5,0,430,440,3,12,6,0,431,440,3,14, - 7,0,432,440,3,16,8,0,433,440,3,18,9,0,434,440,3,24,12,0,435,440,3,38,19, - 0,436,440,3,36,18,0,437,440,3,26,13,0,438,440,3,22,11,0,439,389,1,0,0, - 0,439,394,1,0,0,0,439,399,1,0,0,0,439,404,1,0,0,0,439,405,1,0,0,0,439, - 406,1,0,0,0,439,407,1,0,0,0,439,408,1,0,0,0,439,409,1,0,0,0,439,410,1, - 0,0,0,439,411,1,0,0,0,439,416,1,0,0,0,439,421,1,0,0,0,439,426,1,0,0,0, - 439,427,1,0,0,0,439,428,1,0,0,0,439,429,1,0,0,0,439,430,1,0,0,0,439,431, - 1,0,0,0,439,432,1,0,0,0,439,433,1,0,0,0,439,434,1,0,0,0,439,435,1,0,0, - 0,439,436,1,0,0,0,439,437,1,0,0,0,439,438,1,0,0,0,440,9,1,0,0,0,441,442, - 5,18,0,0,442,443,3,28,14,0,443,11,1,0,0,0,444,445,5,19,0,0,445,446,3,28, - 14,0,446,13,1,0,0,0,447,448,5,20,0,0,448,449,5,21,0,0,449,450,3,28,14, - 0,450,15,1,0,0,0,451,452,5,22,0,0,452,453,3,30,15,0,453,17,1,0,0,0,454, - 455,5,23,0,0,455,456,3,30,15,0,456,19,1,0,0,0,457,458,5,24,0,0,458,459, - 3,94,47,0,459,460,3,2,1,0,460,461,5,16,0,0,461,462,3,138,69,0,462,463, - 5,17,0,0,463,21,1,0,0,0,464,465,5,25,0,0,465,23,1,0,0,0,466,467,5,26,0, - 0,467,479,5,266,0,0,468,469,5,26,0,0,469,470,5,266,0,0,470,471,5,27,0, - 0,471,479,5,266,0,0,472,473,5,26,0,0,473,474,5,266,0,0,474,475,5,27,0, - 0,475,476,5,266,0,0,476,477,5,27,0,0,477,479,5,266,0,0,478,466,1,0,0,0, - 478,468,1,0,0,0,478,472,1,0,0,0,479,25,1,0,0,0,480,481,5,28,0,0,481,485, - 5,16,0,0,482,484,3,134,67,0,483,482,1,0,0,0,484,487,1,0,0,0,485,483,1, - 0,0,0,485,486,1,0,0,0,486,488,1,0,0,0,487,485,1,0,0,0,488,489,5,17,0,0, - 489,27,1,0,0,0,490,491,5,169,0,0,491,29,1,0,0,0,492,493,7,1,0,0,493,31, - 1,0,0,0,494,506,5,171,0,0,495,496,5,185,0,0,496,497,5,29,0,0,497,498,3, - 28,14,0,498,499,5,30,0,0,499,506,1,0,0,0,500,501,5,186,0,0,501,502,5,29, - 0,0,502,503,3,30,15,0,503,504,5,30,0,0,504,506,1,0,0,0,505,494,1,0,0,0, - 505,495,1,0,0,0,505,500,1,0,0,0,506,33,1,0,0,0,507,510,3,28,14,0,508,510, - 5,264,0,0,509,507,1,0,0,0,509,508,1,0,0,0,510,35,1,0,0,0,511,512,5,269, - 0,0,512,528,5,291,0,0,513,514,5,269,0,0,514,515,5,291,0,0,515,528,5,265, - 0,0,516,517,5,270,0,0,517,528,5,291,0,0,518,519,5,271,0,0,519,528,5,291, - 0,0,520,521,5,272,0,0,521,528,5,291,0,0,522,528,5,273,0,0,523,528,5,274, - 0,0,524,525,5,275,0,0,525,528,5,265,0,0,526,528,5,31,0,0,527,511,1,0,0, - 0,527,513,1,0,0,0,527,516,1,0,0,0,527,518,1,0,0,0,527,520,1,0,0,0,527, - 522,1,0,0,0,527,523,1,0,0,0,527,524,1,0,0,0,527,526,1,0,0,0,528,37,1,0, - 0,0,529,530,5,32,0,0,530,531,3,156,78,0,531,532,5,33,0,0,532,533,3,2,1, - 0,533,555,1,0,0,0,534,535,5,32,0,0,535,536,3,134,67,0,536,537,5,33,0,0, - 537,538,3,2,1,0,538,555,1,0,0,0,539,540,5,32,0,0,540,541,3,190,95,0,541, - 542,5,33,0,0,542,543,3,2,1,0,543,555,1,0,0,0,544,545,5,32,0,0,545,546, - 3,40,20,0,546,547,5,33,0,0,547,548,3,2,1,0,548,555,1,0,0,0,549,550,5,32, - 0,0,550,551,3,42,21,0,551,552,5,33,0,0,552,553,3,2,1,0,553,555,1,0,0,0, - 554,529,1,0,0,0,554,534,1,0,0,0,554,539,1,0,0,0,554,544,1,0,0,0,554,549, - 1,0,0,0,555,39,1,0,0,0,556,557,5,34,0,0,557,578,3,44,22,0,558,559,5,34, - 0,0,559,560,3,44,22,0,560,561,5,35,0,0,561,562,3,4,2,0,562,578,1,0,0,0, - 563,564,5,34,0,0,564,565,3,44,22,0,565,566,5,35,0,0,566,567,5,16,0,0,567, - 568,3,48,24,0,568,569,5,17,0,0,569,578,1,0,0,0,570,571,5,34,0,0,571,572, - 3,44,22,0,572,573,5,35,0,0,573,574,5,29,0,0,574,575,3,304,152,0,575,576, - 5,30,0,0,576,578,1,0,0,0,577,556,1,0,0,0,577,558,1,0,0,0,577,563,1,0,0, - 0,577,570,1,0,0,0,578,41,1,0,0,0,579,580,5,34,0,0,580,581,5,29,0,0,581, - 582,3,46,23,0,582,583,5,30,0,0,583,584,3,44,22,0,584,614,1,0,0,0,585,586, - 5,34,0,0,586,587,5,29,0,0,587,588,3,46,23,0,588,589,5,30,0,0,589,590,3, - 44,22,0,590,591,5,35,0,0,591,592,3,4,2,0,592,614,1,0,0,0,593,594,5,34, - 0,0,594,595,5,29,0,0,595,596,3,46,23,0,596,597,5,30,0,0,597,598,3,44,22, - 0,598,599,5,35,0,0,599,600,5,16,0,0,600,601,3,48,24,0,601,602,5,17,0,0, - 602,614,1,0,0,0,603,604,5,34,0,0,604,605,5,29,0,0,605,606,3,46,23,0,606, - 607,5,30,0,0,607,608,3,44,22,0,608,609,5,35,0,0,609,610,5,29,0,0,610,611, - 3,304,152,0,611,612,5,30,0,0,612,614,1,0,0,0,613,579,1,0,0,0,613,585,1, - 0,0,0,613,593,1,0,0,0,613,603,1,0,0,0,614,43,1,0,0,0,615,616,3,182,91, - 0,616,45,1,0,0,0,617,620,3,142,71,0,618,620,3,190,95,0,619,617,1,0,0,0, - 619,618,1,0,0,0,620,47,1,0,0,0,621,622,3,50,25,0,622,623,3,52,26,0,623, - 49,1,0,0,0,624,627,3,310,155,0,625,627,3,36,18,0,626,624,1,0,0,0,626,625, - 1,0,0,0,627,630,1,0,0,0,628,626,1,0,0,0,628,629,1,0,0,0,629,51,1,0,0,0, - 630,628,1,0,0,0,631,632,3,54,27,0,632,633,3,56,28,0,633,634,3,2,1,0,634, - 635,5,35,0,0,635,636,3,310,155,0,636,639,1,0,0,0,637,639,3,36,18,0,638, - 631,1,0,0,0,638,637,1,0,0,0,639,642,1,0,0,0,640,638,1,0,0,0,640,641,1, - 0,0,0,641,53,1,0,0,0,642,640,1,0,0,0,643,644,7,2,0,0,644,55,1,0,0,0,645, - 647,3,58,29,0,646,648,5,263,0,0,647,646,1,0,0,0,647,648,1,0,0,0,648,57, - 1,0,0,0,649,659,3,162,81,0,650,659,3,2,1,0,651,659,5,193,0,0,652,659,5, - 194,0,0,653,654,5,199,0,0,654,655,5,38,0,0,655,659,5,266,0,0,656,657,5, - 199,0,0,657,659,3,134,67,0,658,649,1,0,0,0,658,650,1,0,0,0,658,651,1,0, - 0,0,658,652,1,0,0,0,658,653,1,0,0,0,658,656,1,0,0,0,659,59,1,0,0,0,660, - 667,5,195,0,0,661,662,5,195,0,0,662,667,3,2,1,0,663,664,5,195,0,0,664, - 665,5,39,0,0,665,667,3,2,1,0,666,660,1,0,0,0,666,661,1,0,0,0,666,663,1, - 0,0,0,667,61,1,0,0,0,668,669,5,40,0,0,669,670,5,41,0,0,670,671,3,28,14, - 0,671,672,5,42,0,0,672,673,3,64,32,0,673,674,5,43,0,0,674,675,3,0,0,0, - 675,63,1,0,0,0,676,689,6,32,-1,0,677,678,10,5,0,0,678,688,5,183,0,0,679, - 680,10,4,0,0,680,688,5,184,0,0,681,682,10,3,0,0,682,688,5,44,0,0,683,684, - 10,2,0,0,684,688,5,45,0,0,685,686,10,1,0,0,686,688,5,46,0,0,687,677,1, - 0,0,0,687,679,1,0,0,0,687,681,1,0,0,0,687,683,1,0,0,0,687,685,1,0,0,0, - 688,691,1,0,0,0,689,687,1,0,0,0,689,690,1,0,0,0,690,65,1,0,0,0,691,689, - 1,0,0,0,692,693,5,47,0,0,693,694,5,35,0,0,694,695,5,29,0,0,695,696,3,304, - 152,0,696,697,5,30,0,0,697,67,1,0,0,0,698,699,5,48,0,0,699,700,3,2,1,0, - 700,69,1,0,0,0,701,705,5,49,0,0,702,704,3,72,36,0,703,702,1,0,0,0,704, - 707,1,0,0,0,705,703,1,0,0,0,705,706,1,0,0,0,706,708,1,0,0,0,707,705,1, - 0,0,0,708,709,3,2,1,0,709,710,3,196,98,0,710,711,3,74,37,0,711,712,3,76, - 38,0,712,71,1,0,0,0,713,751,5,50,0,0,714,751,5,51,0,0,715,751,5,196,0, - 0,716,751,5,199,0,0,717,751,5,218,0,0,718,751,5,52,0,0,719,751,5,53,0, - 0,720,751,5,54,0,0,721,751,5,55,0,0,722,751,5,244,0,0,723,751,5,15,0,0, - 724,751,5,223,0,0,725,751,5,56,0,0,726,751,5,57,0,0,727,751,5,58,0,0,728, - 751,5,59,0,0,729,751,5,60,0,0,730,731,5,61,0,0,731,751,5,50,0,0,732,733, - 5,61,0,0,733,751,5,51,0,0,734,735,5,61,0,0,735,751,5,62,0,0,736,737,5, - 61,0,0,737,751,5,63,0,0,738,739,5,61,0,0,739,751,5,64,0,0,740,741,5,61, - 0,0,741,751,5,65,0,0,742,751,5,66,0,0,743,751,5,67,0,0,744,751,5,68,0, - 0,745,746,5,69,0,0,746,747,5,29,0,0,747,748,3,28,14,0,748,749,5,30,0,0, - 749,751,1,0,0,0,750,713,1,0,0,0,750,714,1,0,0,0,750,715,1,0,0,0,750,716, - 1,0,0,0,750,717,1,0,0,0,750,718,1,0,0,0,750,719,1,0,0,0,750,720,1,0,0, - 0,750,721,1,0,0,0,750,722,1,0,0,0,750,723,1,0,0,0,750,724,1,0,0,0,750, - 725,1,0,0,0,750,726,1,0,0,0,750,727,1,0,0,0,750,728,1,0,0,0,750,729,1, - 0,0,0,750,730,1,0,0,0,750,732,1,0,0,0,750,734,1,0,0,0,750,736,1,0,0,0, - 750,738,1,0,0,0,750,740,1,0,0,0,750,742,1,0,0,0,750,743,1,0,0,0,750,744, - 1,0,0,0,750,745,1,0,0,0,751,73,1,0,0,0,752,756,1,0,0,0,753,754,5,70,0, - 0,754,756,3,142,71,0,755,752,1,0,0,0,755,753,1,0,0,0,756,75,1,0,0,0,757, - 761,1,0,0,0,758,759,5,71,0,0,759,761,3,80,40,0,760,757,1,0,0,0,760,758, - 1,0,0,0,761,77,1,0,0,0,762,764,3,212,106,0,763,762,1,0,0,0,764,767,1,0, - 0,0,765,763,1,0,0,0,765,766,1,0,0,0,766,79,1,0,0,0,767,765,1,0,0,0,768, - 769,3,142,71,0,769,770,5,27,0,0,770,772,1,0,0,0,771,768,1,0,0,0,772,775, - 1,0,0,0,773,771,1,0,0,0,773,774,1,0,0,0,774,776,1,0,0,0,775,773,1,0,0, - 0,776,777,3,142,71,0,777,81,1,0,0,0,778,779,7,3,0,0,779,83,1,0,0,0,780, - 781,3,82,41,0,781,782,3,28,14,0,782,783,5,266,0,0,783,852,1,0,0,0,784, - 785,3,82,41,0,785,786,3,28,14,0,786,852,1,0,0,0,787,788,3,82,41,0,788, - 789,3,28,14,0,789,790,5,74,0,0,790,791,3,28,14,0,791,792,5,266,0,0,792, - 852,1,0,0,0,793,794,3,82,41,0,794,795,3,28,14,0,795,796,5,74,0,0,796,797, - 3,28,14,0,797,852,1,0,0,0,798,799,3,82,41,0,799,800,3,28,14,0,800,801, - 5,74,0,0,801,802,3,28,14,0,802,803,5,27,0,0,803,804,3,28,14,0,804,805, - 5,266,0,0,805,852,1,0,0,0,806,807,3,82,41,0,807,808,3,28,14,0,808,809, - 5,74,0,0,809,810,3,28,14,0,810,811,5,27,0,0,811,812,3,28,14,0,812,852, - 1,0,0,0,813,814,3,82,41,0,814,815,3,28,14,0,815,816,5,27,0,0,816,817,3, - 28,14,0,817,818,5,74,0,0,818,819,3,28,14,0,819,820,5,266,0,0,820,852,1, - 0,0,0,821,822,3,82,41,0,822,823,3,28,14,0,823,824,5,27,0,0,824,825,3,28, - 14,0,825,826,5,74,0,0,826,827,3,28,14,0,827,852,1,0,0,0,828,829,3,82,41, - 0,829,830,3,28,14,0,830,831,5,27,0,0,831,832,3,28,14,0,832,833,5,74,0, - 0,833,834,3,28,14,0,834,835,5,27,0,0,835,836,3,28,14,0,836,837,5,266,0, - 0,837,852,1,0,0,0,838,839,3,82,41,0,839,840,3,28,14,0,840,841,5,27,0,0, - 841,842,3,28,14,0,842,843,5,74,0,0,843,844,3,28,14,0,844,845,5,27,0,0, - 845,846,3,28,14,0,846,852,1,0,0,0,847,848,3,82,41,0,848,849,3,28,14,0, - 849,850,5,265,0,0,850,852,1,0,0,0,851,780,1,0,0,0,851,784,1,0,0,0,851, - 787,1,0,0,0,851,793,1,0,0,0,851,798,1,0,0,0,851,806,1,0,0,0,851,813,1, - 0,0,0,851,821,1,0,0,0,851,828,1,0,0,0,851,838,1,0,0,0,851,847,1,0,0,0, - 852,85,1,0,0,0,853,857,5,20,0,0,854,856,3,88,44,0,855,854,1,0,0,0,856, - 859,1,0,0,0,857,855,1,0,0,0,857,858,1,0,0,0,858,860,1,0,0,0,859,857,1, - 0,0,0,860,861,3,2,1,0,861,862,3,90,45,0,862,863,5,177,0,0,863,864,5,35, - 0,0,864,865,5,29,0,0,865,866,3,304,152,0,866,867,5,30,0,0,867,868,3,90, - 45,0,868,880,1,0,0,0,869,873,5,20,0,0,870,872,3,88,44,0,871,870,1,0,0, - 0,872,875,1,0,0,0,873,871,1,0,0,0,873,874,1,0,0,0,874,876,1,0,0,0,875, - 873,1,0,0,0,876,877,3,2,1,0,877,878,3,90,45,0,878,880,1,0,0,0,879,853, - 1,0,0,0,879,869,1,0,0,0,880,87,1,0,0,0,881,882,5,75,0,0,882,89,1,0,0,0, - 883,886,1,0,0,0,884,886,5,299,0,0,885,883,1,0,0,0,885,884,1,0,0,0,886, - 91,1,0,0,0,887,888,7,4,0,0,888,93,1,0,0,0,889,891,3,92,46,0,890,889,1, - 0,0,0,891,894,1,0,0,0,892,890,1,0,0,0,892,893,1,0,0,0,893,95,1,0,0,0,894, - 892,1,0,0,0,895,896,5,277,0,0,896,97,1,0,0,0,897,898,5,278,0,0,898,99, - 1,0,0,0,899,900,5,279,0,0,900,101,1,0,0,0,901,902,5,280,0,0,902,103,1, - 0,0,0,903,904,5,281,0,0,904,105,1,0,0,0,905,906,5,284,0,0,906,107,1,0, - 0,0,907,908,5,282,0,0,908,109,1,0,0,0,909,910,5,288,0,0,910,111,1,0,0, - 0,911,912,5,286,0,0,912,113,1,0,0,0,913,914,5,287,0,0,914,115,1,0,0,0, - 915,916,5,283,0,0,916,117,1,0,0,0,917,918,5,289,0,0,918,119,1,0,0,0,919, - 920,5,285,0,0,920,121,1,0,0,0,921,998,3,96,48,0,922,923,3,98,49,0,923, - 924,3,28,14,0,924,998,1,0,0,0,925,926,3,98,49,0,926,927,3,0,0,0,927,998, - 1,0,0,0,928,929,3,100,50,0,929,930,3,28,14,0,930,998,1,0,0,0,931,932,3, - 102,51,0,932,933,3,30,15,0,933,998,1,0,0,0,934,935,3,104,52,0,935,936, - 3,32,16,0,936,998,1,0,0,0,937,938,3,104,52,0,938,939,3,30,15,0,939,998, - 1,0,0,0,940,941,3,104,52,0,941,942,5,29,0,0,942,943,3,304,152,0,943,944, - 5,30,0,0,944,998,1,0,0,0,945,946,3,104,52,0,946,947,5,83,0,0,947,948,5, - 29,0,0,948,949,3,304,152,0,949,950,5,30,0,0,950,998,1,0,0,0,951,952,3, - 106,53,0,952,953,3,28,14,0,953,998,1,0,0,0,954,955,3,106,53,0,955,956, - 3,0,0,0,956,998,1,0,0,0,957,958,3,108,54,0,958,959,3,182,91,0,959,998, - 1,0,0,0,960,961,3,110,55,0,961,962,3,192,96,0,962,998,1,0,0,0,963,964, - 3,110,55,0,964,965,3,188,94,0,965,998,1,0,0,0,966,967,3,112,56,0,967,968, - 3,142,71,0,968,998,1,0,0,0,969,970,3,114,57,0,970,971,3,4,2,0,971,998, - 1,0,0,0,972,973,3,114,57,0,973,974,5,223,0,0,974,975,5,29,0,0,975,976, - 3,4,2,0,976,977,5,30,0,0,977,998,1,0,0,0,978,979,3,114,57,0,979,980,5, - 83,0,0,980,981,5,29,0,0,981,982,3,304,152,0,982,983,5,30,0,0,983,998,1, - 0,0,0,984,985,3,116,58,0,985,986,3,184,92,0,986,987,3,156,78,0,987,988, - 3,130,65,0,988,998,1,0,0,0,989,990,3,118,59,0,990,991,3,46,23,0,991,998, - 1,0,0,0,992,993,3,120,60,0,993,994,5,29,0,0,994,995,3,124,62,0,995,996, - 5,30,0,0,996,998,1,0,0,0,997,921,1,0,0,0,997,922,1,0,0,0,997,925,1,0,0, - 0,997,928,1,0,0,0,997,931,1,0,0,0,997,934,1,0,0,0,997,937,1,0,0,0,997, - 940,1,0,0,0,997,945,1,0,0,0,997,951,1,0,0,0,997,954,1,0,0,0,997,957,1, - 0,0,0,997,960,1,0,0,0,997,963,1,0,0,0,997,966,1,0,0,0,997,969,1,0,0,0, - 997,972,1,0,0,0,997,978,1,0,0,0,997,984,1,0,0,0,997,989,1,0,0,0,997,992, - 1,0,0,0,998,123,1,0,0,0,999,1014,1,0,0,0,1000,1005,3,0,0,0,1001,1002,3, - 28,14,0,1002,1003,5,27,0,0,1003,1005,1,0,0,0,1004,1000,1,0,0,0,1004,1001, - 1,0,0,0,1005,1008,1,0,0,0,1006,1004,1,0,0,0,1006,1007,1,0,0,0,1007,1011, - 1,0,0,0,1008,1006,1,0,0,0,1009,1012,3,0,0,0,1010,1012,3,28,14,0,1011,1009, - 1,0,0,0,1011,1010,1,0,0,0,1012,1014,1,0,0,0,1013,999,1,0,0,0,1013,1006, - 1,0,0,0,1014,125,1,0,0,0,1015,1021,5,84,0,0,1016,1017,3,156,78,0,1017, - 1018,5,27,0,0,1018,1020,1,0,0,0,1019,1016,1,0,0,0,1020,1023,1,0,0,0,1021, - 1019,1,0,0,0,1021,1022,1,0,0,0,1022,1024,1,0,0,0,1023,1021,1,0,0,0,1024, - 1025,3,156,78,0,1025,1026,5,85,0,0,1026,127,1,0,0,0,1027,1033,5,41,0,0, - 1028,1029,3,164,82,0,1029,1030,5,27,0,0,1030,1032,1,0,0,0,1031,1028,1, - 0,0,0,1032,1035,1,0,0,0,1033,1031,1,0,0,0,1033,1034,1,0,0,0,1034,1036, - 1,0,0,0,1035,1033,1,0,0,0,1036,1037,3,164,82,0,1037,1038,5,42,0,0,1038, - 129,1,0,0,0,1039,1045,5,29,0,0,1040,1041,3,132,66,0,1041,1042,5,27,0,0, - 1042,1044,1,0,0,0,1043,1040,1,0,0,0,1044,1047,1,0,0,0,1045,1043,1,0,0, - 0,1045,1046,1,0,0,0,1046,1048,1,0,0,0,1047,1045,1,0,0,0,1048,1049,3,132, - 66,0,1049,1050,5,30,0,0,1050,1053,1,0,0,0,1051,1053,5,86,0,0,1052,1039, - 1,0,0,0,1052,1051,1,0,0,0,1053,131,1,0,0,0,1054,1065,5,174,0,0,1055,1056, - 3,244,122,0,1056,1057,3,156,78,0,1057,1058,3,240,120,0,1058,1065,1,0,0, - 0,1059,1060,3,244,122,0,1060,1061,3,156,78,0,1061,1062,3,240,120,0,1062, - 1063,3,0,0,0,1063,1065,1,0,0,0,1064,1054,1,0,0,0,1064,1055,1,0,0,0,1064, - 1059,1,0,0,0,1065,133,1,0,0,0,1066,1067,5,41,0,0,1067,1068,3,2,1,0,1068, - 1069,5,42,0,0,1069,1070,3,136,68,0,1070,1092,1,0,0,0,1071,1072,5,41,0, - 0,1072,1073,3,188,94,0,1073,1074,5,42,0,0,1074,1075,3,136,68,0,1075,1092, - 1,0,0,0,1076,1077,5,41,0,0,1077,1078,5,264,0,0,1078,1079,5,42,0,0,1079, - 1092,3,136,68,0,1080,1081,5,41,0,0,1081,1082,5,195,0,0,1082,1083,3,2,1, - 0,1083,1084,5,42,0,0,1084,1085,3,136,68,0,1085,1092,1,0,0,0,1086,1092, - 3,136,68,0,1087,1092,3,188,94,0,1088,1092,5,259,0,0,1089,1092,5,260,0, - 0,1090,1092,5,261,0,0,1091,1066,1,0,0,0,1091,1071,1,0,0,0,1091,1076,1, - 0,0,0,1091,1080,1,0,0,0,1091,1086,1,0,0,0,1091,1087,1,0,0,0,1091,1088, - 1,0,0,0,1091,1089,1,0,0,0,1091,1090,1,0,0,0,1092,135,1,0,0,0,1093,1094, - 3,2,1,0,1094,1095,5,87,0,0,1095,1097,1,0,0,0,1096,1093,1,0,0,0,1097,1100, + 1,155,3,155,2498,8,155,1,156,5,156,2501,8,156,10,156,12,156,2504,9,156, + 1,157,1,157,1,158,1,158,1,158,3,158,2511,8,158,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159, + 3,159,2661,8,159,1,160,1,160,5,160,2665,8,160,10,160,12,160,2668,9,160, + 1,161,1,161,5,161,2672,8,161,10,161,12,161,2675,9,161,1,162,5,162,2678, + 8,162,10,162,12,162,2681,9,162,1,163,5,163,2684,8,163,10,163,12,163,2687, + 9,163,1,164,5,164,2690,8,164,10,164,12,164,2693,9,164,1,165,5,165,2696, + 8,165,10,165,12,165,2699,9,165,1,166,5,166,2702,8,166,10,166,12,166,2705, + 9,166,1,167,5,167,2708,8,167,10,167,12,167,2711,9,167,1,168,5,168,2714, + 8,168,10,168,12,168,2717,9,168,1,169,1,169,1,169,1,169,3,169,2723,8,169, + 1,170,5,170,2726,8,170,10,170,12,170,2729,9,170,1,171,1,171,1,171,3,171, + 2734,8,171,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172, + 1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,172, + 1,172,1,172,1,172,3,172,2761,8,172,1,173,1,173,1,173,1,173,1,173,1,173, + 1,173,1,173,1,173,1,173,1,173,1,173,3,173,2775,8,173,1,174,5,174,2778, + 8,174,10,174,12,174,2781,9,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175, + 1,175,1,175,1,175,1,175,1,175,1,175,1,175,3,175,2797,8,175,1,176,1,176, + 1,176,5,176,2802,8,176,10,176,12,176,2805,9,176,1,176,1,176,1,177,1,177, + 5,177,2811,8,177,10,177,12,177,2814,9,177,1,177,1,177,1,178,1,178,1,178, + 1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178, + 3,178,2833,8,178,1,179,5,179,2836,8,179,10,179,12,179,2839,9,179,1,180, + 1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180, + 3,180,2854,8,180,1,181,1,181,5,181,2858,8,181,10,181,12,181,2861,9,181, + 1,181,1,181,1,181,5,181,2866,8,181,10,181,12,181,2869,9,181,1,181,1,181, + 1,181,1,181,3,181,2875,8,181,1,182,1,182,1,183,5,183,2880,8,183,10,183, + 12,183,2883,9,183,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184, + 1,184,3,184,2895,8,184,1,184,0,1,68,185,0,2,4,6,8,10,12,14,16,18,20,22, + 24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70, + 72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112, + 114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148, + 150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184, + 186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220, + 222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256, + 258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292, + 294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328, + 330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364, + 366,368,0,15,6,0,1,15,198,198,242,242,246,246,263,263,288,288,3,0,198, + 198,242,242,288,288,1,0,262,263,1,0,172,173,1,0,36,37,1,0,72,73,3,0,2, + 2,60,60,76,82,2,0,228,228,259,260,9,0,177,177,182,194,200,200,206,207, + 209,214,217,218,221,221,229,241,261,261,1,0,94,95,1,0,96,110,1,0,67,68, + 2,0,172,172,288,289,2,0,178,178,263,263,1,0,50,51,3310,0,370,1,0,0,0,2, + 383,1,0,0,0,4,385,1,0,0,0,6,391,1,0,0,0,8,399,1,0,0,0,10,452,1,0,0,0,12, + 454,1,0,0,0,14,457,1,0,0,0,16,460,1,0,0,0,18,464,1,0,0,0,20,467,1,0,0, + 0,22,470,1,0,0,0,24,477,1,0,0,0,26,500,1,0,0,0,28,502,1,0,0,0,30,504,1, + 0,0,0,32,514,1,0,0,0,34,516,1,0,0,0,36,533,1,0,0,0,38,537,1,0,0,0,40,555, + 1,0,0,0,42,582,1,0,0,0,44,605,1,0,0,0,46,641,1,0,0,0,48,643,1,0,0,0,50, + 647,1,0,0,0,52,649,1,0,0,0,54,656,1,0,0,0,56,668,1,0,0,0,58,671,1,0,0, + 0,60,673,1,0,0,0,62,686,1,0,0,0,64,694,1,0,0,0,66,696,1,0,0,0,68,704,1, + 0,0,0,70,720,1,0,0,0,72,726,1,0,0,0,74,729,1,0,0,0,76,778,1,0,0,0,78,783, + 1,0,0,0,80,788,1,0,0,0,82,793,1,0,0,0,84,801,1,0,0,0,86,806,1,0,0,0,88, + 911,1,0,0,0,90,939,1,0,0,0,92,941,1,0,0,0,94,945,1,0,0,0,96,947,1,0,0, + 0,98,952,1,0,0,0,100,955,1,0,0,0,102,957,1,0,0,0,104,959,1,0,0,0,106,961, + 1,0,0,0,108,963,1,0,0,0,110,965,1,0,0,0,112,967,1,0,0,0,114,969,1,0,0, + 0,116,971,1,0,0,0,118,973,1,0,0,0,120,975,1,0,0,0,122,977,1,0,0,0,124, + 979,1,0,0,0,126,1060,1,0,0,0,128,1078,1,0,0,0,130,1080,1,0,0,0,132,1092, + 1,0,0,0,134,1117,1,0,0,0,136,1126,1,0,0,0,138,1153,1,0,0,0,140,1160,1, + 0,0,0,142,1168,1,0,0,0,144,1176,1,0,0,0,146,1189,1,0,0,0,148,1199,1,0, + 0,0,150,1218,1,0,0,0,152,1304,1,0,0,0,154,1313,1,0,0,0,156,1323,1,0,0, + 0,158,1325,1,0,0,0,160,1327,1,0,0,0,162,1352,1,0,0,0,164,1384,1,0,0,0, + 166,1407,1,0,0,0,168,1419,1,0,0,0,170,1421,1,0,0,0,172,1424,1,0,0,0,174, + 1470,1,0,0,0,176,1482,1,0,0,0,178,1497,1,0,0,0,180,1504,1,0,0,0,182,1509, + 1,0,0,0,184,1513,1,0,0,0,186,1549,1,0,0,0,188,1551,1,0,0,0,190,1587,1, + 0,0,0,192,1599,1,0,0,0,194,1613,1,0,0,0,196,1615,1,0,0,0,198,1625,1,0, + 0,0,200,1636,1,0,0,0,202,1643,1,0,0,0,204,1653,1,0,0,0,206,1666,1,0,0, + 0,208,1671,1,0,0,0,210,1674,1,0,0,0,212,1685,1,0,0,0,214,1690,1,0,0,0, + 216,1696,1,0,0,0,218,1698,1,0,0,0,220,1820,1,0,0,0,222,1822,1,0,0,0,224, + 1859,1,0,0,0,226,1866,1,0,0,0,228,1871,1,0,0,0,230,1878,1,0,0,0,232,1898, + 1,0,0,0,234,1900,1,0,0,0,236,1905,1,0,0,0,238,1920,1,0,0,0,240,1922,1, + 0,0,0,242,1935,1,0,0,0,244,1940,1,0,0,0,246,1953,1,0,0,0,248,1961,1,0, + 0,0,250,1972,1,0,0,0,252,1977,1,0,0,0,254,1993,1,0,0,0,256,1995,1,0,0, + 0,258,2039,1,0,0,0,260,2059,1,0,0,0,262,2088,1,0,0,0,264,2093,1,0,0,0, + 266,2116,1,0,0,0,268,2121,1,0,0,0,270,2232,1,0,0,0,272,2234,1,0,0,0,274, + 2239,1,0,0,0,276,2241,1,0,0,0,278,2245,1,0,0,0,280,2249,1,0,0,0,282,2265, + 1,0,0,0,284,2279,1,0,0,0,286,2287,1,0,0,0,288,2289,1,0,0,0,290,2292,1, + 0,0,0,292,2294,1,0,0,0,294,2307,1,0,0,0,296,2309,1,0,0,0,298,2319,1,0, + 0,0,300,2324,1,0,0,0,302,2335,1,0,0,0,304,2342,1,0,0,0,306,2352,1,0,0, + 0,308,2420,1,0,0,0,310,2497,1,0,0,0,312,2502,1,0,0,0,314,2505,1,0,0,0, + 316,2510,1,0,0,0,318,2660,1,0,0,0,320,2666,1,0,0,0,322,2673,1,0,0,0,324, + 2679,1,0,0,0,326,2685,1,0,0,0,328,2691,1,0,0,0,330,2697,1,0,0,0,332,2703, + 1,0,0,0,334,2709,1,0,0,0,336,2715,1,0,0,0,338,2722,1,0,0,0,340,2727,1, + 0,0,0,342,2733,1,0,0,0,344,2760,1,0,0,0,346,2774,1,0,0,0,348,2779,1,0, + 0,0,350,2796,1,0,0,0,352,2798,1,0,0,0,354,2808,1,0,0,0,356,2832,1,0,0, + 0,358,2837,1,0,0,0,360,2853,1,0,0,0,362,2874,1,0,0,0,364,2876,1,0,0,0, + 366,2881,1,0,0,0,368,2894,1,0,0,0,370,371,7,0,0,0,371,1,1,0,0,0,372,384, + 5,287,0,0,373,374,3,4,2,0,374,375,5,264,0,0,375,377,1,0,0,0,376,373,1, + 0,0,0,377,380,1,0,0,0,378,376,1,0,0,0,378,379,1,0,0,0,379,381,1,0,0,0, + 380,378,1,0,0,0,381,384,3,4,2,0,382,384,5,263,0,0,383,372,1,0,0,0,383, + 378,1,0,0,0,383,382,1,0,0,0,384,3,1,0,0,0,385,386,7,1,0,0,386,5,1,0,0, + 0,387,388,5,262,0,0,388,390,5,265,0,0,389,387,1,0,0,0,390,393,1,0,0,0, + 391,389,1,0,0,0,391,392,1,0,0,0,392,394,1,0,0,0,393,391,1,0,0,0,394,395, + 5,262,0,0,395,7,1,0,0,0,396,398,3,10,5,0,397,396,1,0,0,0,398,401,1,0,0, + 0,399,397,1,0,0,0,399,400,1,0,0,0,400,9,1,0,0,0,401,399,1,0,0,0,402,403, + 3,74,37,0,403,404,5,16,0,0,404,405,3,82,41,0,405,406,5,17,0,0,406,453, + 1,0,0,0,407,408,3,72,36,0,408,409,5,16,0,0,409,410,3,8,4,0,410,411,5,17, + 0,0,411,453,1,0,0,0,412,413,3,256,128,0,413,414,5,16,0,0,414,415,3,268, + 134,0,415,416,5,17,0,0,416,453,1,0,0,0,417,453,3,222,111,0,418,453,3,296, + 148,0,419,453,3,70,35,0,420,453,3,66,33,0,421,453,3,88,44,0,422,453,3, + 90,45,0,423,453,3,22,11,0,424,425,3,346,173,0,425,426,5,16,0,0,426,427, + 3,348,174,0,427,428,5,17,0,0,428,453,1,0,0,0,429,430,3,352,176,0,430,431, + 5,16,0,0,431,432,3,358,179,0,432,433,5,17,0,0,433,453,1,0,0,0,434,435, + 3,362,181,0,435,436,5,16,0,0,436,437,3,366,183,0,437,438,5,17,0,0,438, + 453,1,0,0,0,439,453,3,64,32,0,440,453,3,174,87,0,441,453,3,342,171,0,442, + 453,3,12,6,0,443,453,3,14,7,0,444,453,3,16,8,0,445,453,3,18,9,0,446,453, + 3,20,10,0,447,453,3,26,13,0,448,453,3,42,21,0,449,453,3,40,20,0,450,453, + 3,30,15,0,451,453,3,24,12,0,452,402,1,0,0,0,452,407,1,0,0,0,452,412,1, + 0,0,0,452,417,1,0,0,0,452,418,1,0,0,0,452,419,1,0,0,0,452,420,1,0,0,0, + 452,421,1,0,0,0,452,422,1,0,0,0,452,423,1,0,0,0,452,424,1,0,0,0,452,429, + 1,0,0,0,452,434,1,0,0,0,452,439,1,0,0,0,452,440,1,0,0,0,452,441,1,0,0, + 0,452,442,1,0,0,0,452,443,1,0,0,0,452,444,1,0,0,0,452,445,1,0,0,0,452, + 446,1,0,0,0,452,447,1,0,0,0,452,448,1,0,0,0,452,449,1,0,0,0,452,450,1, + 0,0,0,452,451,1,0,0,0,453,11,1,0,0,0,454,455,5,18,0,0,455,456,3,32,16, + 0,456,13,1,0,0,0,457,458,5,19,0,0,458,459,3,32,16,0,459,15,1,0,0,0,460, + 461,5,20,0,0,461,462,5,21,0,0,462,463,3,32,16,0,463,17,1,0,0,0,464,465, + 5,22,0,0,465,466,3,34,17,0,466,19,1,0,0,0,467,468,5,23,0,0,468,469,3,34, + 17,0,469,21,1,0,0,0,470,471,5,24,0,0,471,472,3,98,49,0,472,473,3,2,1,0, + 473,474,5,16,0,0,474,475,3,142,71,0,475,476,5,17,0,0,476,23,1,0,0,0,477, + 478,5,25,0,0,478,25,1,0,0,0,479,480,5,26,0,0,480,501,3,28,14,0,481,482, + 5,26,0,0,482,483,3,28,14,0,483,484,5,27,0,0,484,485,3,28,14,0,485,501, + 1,0,0,0,486,487,5,26,0,0,487,488,3,28,14,0,488,489,5,27,0,0,489,490,3, + 28,14,0,490,491,5,27,0,0,491,492,3,28,14,0,492,501,1,0,0,0,493,494,5,26, + 0,0,494,495,5,262,0,0,495,501,5,262,0,0,496,497,5,26,0,0,497,498,5,262, + 0,0,498,499,5,262,0,0,499,501,5,262,0,0,500,479,1,0,0,0,500,481,1,0,0, + 0,500,486,1,0,0,0,500,493,1,0,0,0,500,496,1,0,0,0,501,27,1,0,0,0,502,503, + 7,2,0,0,503,29,1,0,0,0,504,505,5,28,0,0,505,509,5,16,0,0,506,508,3,138, + 69,0,507,506,1,0,0,0,508,511,1,0,0,0,509,507,1,0,0,0,509,510,1,0,0,0,510, + 512,1,0,0,0,511,509,1,0,0,0,512,513,5,17,0,0,513,31,1,0,0,0,514,515,5, + 172,0,0,515,33,1,0,0,0,516,517,7,3,0,0,517,35,1,0,0,0,518,534,5,174,0, + 0,519,520,3,32,16,0,520,521,5,264,0,0,521,534,1,0,0,0,522,534,3,32,16, + 0,523,524,5,187,0,0,524,525,5,29,0,0,525,526,3,32,16,0,526,527,5,30,0, + 0,527,534,1,0,0,0,528,529,5,188,0,0,529,530,5,29,0,0,530,531,3,34,17,0, + 531,532,5,30,0,0,532,534,1,0,0,0,533,518,1,0,0,0,533,519,1,0,0,0,533,522, + 1,0,0,0,533,523,1,0,0,0,533,528,1,0,0,0,534,37,1,0,0,0,535,538,3,32,16, + 0,536,538,5,261,0,0,537,535,1,0,0,0,537,536,1,0,0,0,538,39,1,0,0,0,539, + 540,5,266,0,0,540,556,5,288,0,0,541,542,5,266,0,0,542,543,5,288,0,0,543, + 556,5,262,0,0,544,545,5,267,0,0,545,556,5,288,0,0,546,547,5,268,0,0,547, + 556,5,288,0,0,548,549,5,269,0,0,549,556,5,288,0,0,550,556,5,270,0,0,551, + 556,5,271,0,0,552,553,5,272,0,0,553,556,5,262,0,0,554,556,5,31,0,0,555, + 539,1,0,0,0,555,541,1,0,0,0,555,544,1,0,0,0,555,546,1,0,0,0,555,548,1, + 0,0,0,555,550,1,0,0,0,555,551,1,0,0,0,555,552,1,0,0,0,555,554,1,0,0,0, + 556,41,1,0,0,0,557,558,5,32,0,0,558,559,3,160,80,0,559,560,5,33,0,0,560, + 561,3,2,1,0,561,583,1,0,0,0,562,563,5,32,0,0,563,564,3,138,69,0,564,565, + 5,33,0,0,565,566,3,2,1,0,566,583,1,0,0,0,567,568,5,32,0,0,568,569,3,198, + 99,0,569,570,5,33,0,0,570,571,3,2,1,0,571,583,1,0,0,0,572,573,5,32,0,0, + 573,574,3,44,22,0,574,575,5,33,0,0,575,576,3,2,1,0,576,583,1,0,0,0,577, + 578,5,32,0,0,578,579,3,46,23,0,579,580,5,33,0,0,580,581,3,2,1,0,581,583, + 1,0,0,0,582,557,1,0,0,0,582,562,1,0,0,0,582,567,1,0,0,0,582,572,1,0,0, + 0,582,577,1,0,0,0,583,43,1,0,0,0,584,585,5,34,0,0,585,606,3,48,24,0,586, + 587,5,34,0,0,587,588,3,48,24,0,588,589,5,35,0,0,589,590,3,6,3,0,590,606, + 1,0,0,0,591,592,5,34,0,0,592,593,3,48,24,0,593,594,5,35,0,0,594,595,5, + 16,0,0,595,596,3,52,26,0,596,597,5,17,0,0,597,606,1,0,0,0,598,599,5,34, + 0,0,599,600,3,48,24,0,600,601,5,35,0,0,601,602,5,29,0,0,602,603,3,312, + 156,0,603,604,5,30,0,0,604,606,1,0,0,0,605,584,1,0,0,0,605,586,1,0,0,0, + 605,591,1,0,0,0,605,598,1,0,0,0,606,45,1,0,0,0,607,608,5,34,0,0,608,609, + 5,29,0,0,609,610,3,50,25,0,610,611,5,30,0,0,611,612,3,48,24,0,612,642, + 1,0,0,0,613,614,5,34,0,0,614,615,5,29,0,0,615,616,3,50,25,0,616,617,5, + 30,0,0,617,618,3,48,24,0,618,619,5,35,0,0,619,620,3,6,3,0,620,642,1,0, + 0,0,621,622,5,34,0,0,622,623,5,29,0,0,623,624,3,50,25,0,624,625,5,30,0, + 0,625,626,3,48,24,0,626,627,5,35,0,0,627,628,5,16,0,0,628,629,3,52,26, + 0,629,630,5,17,0,0,630,642,1,0,0,0,631,632,5,34,0,0,632,633,5,29,0,0,633, + 634,3,50,25,0,634,635,5,30,0,0,635,636,3,48,24,0,636,637,5,35,0,0,637, + 638,5,29,0,0,638,639,3,312,156,0,639,640,5,30,0,0,640,642,1,0,0,0,641, + 607,1,0,0,0,641,613,1,0,0,0,641,621,1,0,0,0,641,631,1,0,0,0,642,47,1,0, + 0,0,643,644,3,190,95,0,644,49,1,0,0,0,645,648,3,146,73,0,646,648,3,198, + 99,0,647,645,1,0,0,0,647,646,1,0,0,0,648,51,1,0,0,0,649,650,3,54,27,0, + 650,651,3,56,28,0,651,53,1,0,0,0,652,655,3,318,159,0,653,655,3,40,20,0, + 654,652,1,0,0,0,654,653,1,0,0,0,655,658,1,0,0,0,656,654,1,0,0,0,656,657, + 1,0,0,0,657,55,1,0,0,0,658,656,1,0,0,0,659,660,3,58,29,0,660,661,3,60, + 30,0,661,662,3,2,1,0,662,663,5,35,0,0,663,664,3,318,159,0,664,667,1,0, + 0,0,665,667,3,40,20,0,666,659,1,0,0,0,666,665,1,0,0,0,667,670,1,0,0,0, + 668,666,1,0,0,0,668,669,1,0,0,0,669,57,1,0,0,0,670,668,1,0,0,0,671,672, + 7,4,0,0,672,59,1,0,0,0,673,675,3,62,31,0,674,676,5,260,0,0,675,674,1,0, + 0,0,675,676,1,0,0,0,676,61,1,0,0,0,677,687,3,166,83,0,678,687,3,2,1,0, + 679,687,5,195,0,0,680,687,5,196,0,0,681,682,5,201,0,0,682,683,5,38,0,0, + 683,687,5,263,0,0,684,685,5,201,0,0,685,687,3,138,69,0,686,677,1,0,0,0, + 686,678,1,0,0,0,686,679,1,0,0,0,686,680,1,0,0,0,686,681,1,0,0,0,686,684, + 1,0,0,0,687,63,1,0,0,0,688,689,5,197,0,0,689,690,5,39,0,0,690,695,3,2, + 1,0,691,692,5,197,0,0,692,695,3,2,1,0,693,695,5,197,0,0,694,688,1,0,0, + 0,694,691,1,0,0,0,694,693,1,0,0,0,695,65,1,0,0,0,696,697,5,40,0,0,697, + 698,5,41,0,0,698,699,3,32,16,0,699,700,5,42,0,0,700,701,3,68,34,0,701, + 702,5,43,0,0,702,703,3,0,0,0,703,67,1,0,0,0,704,717,6,34,-1,0,705,706, + 10,5,0,0,706,716,5,185,0,0,707,708,10,4,0,0,708,716,5,186,0,0,709,710, + 10,3,0,0,710,716,5,44,0,0,711,712,10,2,0,0,712,716,5,45,0,0,713,714,10, + 1,0,0,714,716,5,46,0,0,715,705,1,0,0,0,715,707,1,0,0,0,715,709,1,0,0,0, + 715,711,1,0,0,0,715,713,1,0,0,0,716,719,1,0,0,0,717,715,1,0,0,0,717,718, + 1,0,0,0,718,69,1,0,0,0,719,717,1,0,0,0,720,721,5,47,0,0,721,722,5,35,0, + 0,722,723,5,29,0,0,723,724,3,312,156,0,724,725,5,30,0,0,725,71,1,0,0,0, + 726,727,5,48,0,0,727,728,3,2,1,0,728,73,1,0,0,0,729,733,5,49,0,0,730,732, + 3,76,38,0,731,730,1,0,0,0,732,735,1,0,0,0,733,731,1,0,0,0,733,734,1,0, + 0,0,734,736,1,0,0,0,735,733,1,0,0,0,736,737,3,2,1,0,737,738,3,204,102, + 0,738,739,3,78,39,0,739,740,3,80,40,0,740,75,1,0,0,0,741,779,5,50,0,0, + 742,779,5,51,0,0,743,779,5,198,0,0,744,779,5,201,0,0,745,779,5,220,0,0, + 746,779,5,52,0,0,747,779,5,53,0,0,748,779,5,54,0,0,749,779,5,55,0,0,750, + 779,5,243,0,0,751,779,5,15,0,0,752,779,5,223,0,0,753,779,5,56,0,0,754, + 779,5,57,0,0,755,779,5,58,0,0,756,779,5,59,0,0,757,779,5,60,0,0,758,759, + 5,61,0,0,759,779,5,50,0,0,760,761,5,61,0,0,761,779,5,51,0,0,762,763,5, + 61,0,0,763,779,5,62,0,0,764,765,5,61,0,0,765,779,5,63,0,0,766,767,5,61, + 0,0,767,779,5,64,0,0,768,769,5,61,0,0,769,779,5,65,0,0,770,779,5,66,0, + 0,771,779,5,67,0,0,772,779,5,68,0,0,773,774,5,69,0,0,774,775,5,29,0,0, + 775,776,3,32,16,0,776,777,5,30,0,0,777,779,1,0,0,0,778,741,1,0,0,0,778, + 742,1,0,0,0,778,743,1,0,0,0,778,744,1,0,0,0,778,745,1,0,0,0,778,746,1, + 0,0,0,778,747,1,0,0,0,778,748,1,0,0,0,778,749,1,0,0,0,778,750,1,0,0,0, + 778,751,1,0,0,0,778,752,1,0,0,0,778,753,1,0,0,0,778,754,1,0,0,0,778,755, + 1,0,0,0,778,756,1,0,0,0,778,757,1,0,0,0,778,758,1,0,0,0,778,760,1,0,0, + 0,778,762,1,0,0,0,778,764,1,0,0,0,778,766,1,0,0,0,778,768,1,0,0,0,778, + 770,1,0,0,0,778,771,1,0,0,0,778,772,1,0,0,0,778,773,1,0,0,0,779,77,1,0, + 0,0,780,784,1,0,0,0,781,782,5,70,0,0,782,784,3,146,73,0,783,780,1,0,0, + 0,783,781,1,0,0,0,784,79,1,0,0,0,785,789,1,0,0,0,786,787,5,71,0,0,787, + 789,3,84,42,0,788,785,1,0,0,0,788,786,1,0,0,0,789,81,1,0,0,0,790,792,3, + 220,110,0,791,790,1,0,0,0,792,795,1,0,0,0,793,791,1,0,0,0,793,794,1,0, + 0,0,794,83,1,0,0,0,795,793,1,0,0,0,796,797,3,146,73,0,797,798,5,27,0,0, + 798,800,1,0,0,0,799,796,1,0,0,0,800,803,1,0,0,0,801,799,1,0,0,0,801,802, + 1,0,0,0,802,804,1,0,0,0,803,801,1,0,0,0,804,805,3,146,73,0,805,85,1,0, + 0,0,806,807,7,5,0,0,807,87,1,0,0,0,808,809,3,86,43,0,809,810,3,32,16,0, + 810,811,5,263,0,0,811,912,1,0,0,0,812,813,3,86,43,0,813,814,3,32,16,0, + 814,912,1,0,0,0,815,816,3,86,43,0,816,817,3,32,16,0,817,818,5,74,0,0,818, + 819,3,32,16,0,819,820,5,263,0,0,820,912,1,0,0,0,821,822,3,86,43,0,822, + 823,3,32,16,0,823,824,5,74,0,0,824,825,3,32,16,0,825,912,1,0,0,0,826,827, + 3,86,43,0,827,828,3,32,16,0,828,829,5,74,0,0,829,830,3,32,16,0,830,831, + 5,27,0,0,831,832,3,32,16,0,832,833,5,263,0,0,833,912,1,0,0,0,834,835,3, + 86,43,0,835,836,3,32,16,0,836,837,5,74,0,0,837,838,3,32,16,0,838,839,5, + 27,0,0,839,840,3,32,16,0,840,912,1,0,0,0,841,842,3,86,43,0,842,843,3,32, + 16,0,843,844,5,27,0,0,844,845,3,32,16,0,845,846,5,74,0,0,846,847,3,32, + 16,0,847,848,5,263,0,0,848,912,1,0,0,0,849,850,3,86,43,0,850,851,3,32, + 16,0,851,852,5,27,0,0,852,853,3,32,16,0,853,854,5,74,0,0,854,855,3,32, + 16,0,855,912,1,0,0,0,856,857,3,86,43,0,857,858,3,32,16,0,858,859,5,27, + 0,0,859,860,3,32,16,0,860,861,5,74,0,0,861,862,3,32,16,0,862,863,5,27, + 0,0,863,864,3,32,16,0,864,865,5,263,0,0,865,912,1,0,0,0,866,867,3,86,43, + 0,867,868,3,32,16,0,868,869,5,27,0,0,869,870,3,32,16,0,870,871,5,74,0, + 0,871,872,3,32,16,0,872,873,5,27,0,0,873,874,3,32,16,0,874,912,1,0,0,0, + 875,876,3,86,43,0,876,877,3,32,16,0,877,878,5,262,0,0,878,912,1,0,0,0, + 879,880,3,86,43,0,880,881,3,32,16,0,881,882,5,74,0,0,882,883,3,32,16,0, + 883,884,5,262,0,0,884,912,1,0,0,0,885,886,3,86,43,0,886,887,3,32,16,0, + 887,888,5,74,0,0,888,889,3,32,16,0,889,890,5,27,0,0,890,891,3,32,16,0, + 891,892,5,262,0,0,892,912,1,0,0,0,893,894,3,86,43,0,894,895,3,32,16,0, + 895,896,5,27,0,0,896,897,3,32,16,0,897,898,5,74,0,0,898,899,3,32,16,0, + 899,900,5,262,0,0,900,912,1,0,0,0,901,902,3,86,43,0,902,903,3,32,16,0, + 903,904,5,27,0,0,904,905,3,32,16,0,905,906,5,74,0,0,906,907,3,32,16,0, + 907,908,5,27,0,0,908,909,3,32,16,0,909,910,5,262,0,0,910,912,1,0,0,0,911, + 808,1,0,0,0,911,812,1,0,0,0,911,815,1,0,0,0,911,821,1,0,0,0,911,826,1, + 0,0,0,911,834,1,0,0,0,911,841,1,0,0,0,911,849,1,0,0,0,911,856,1,0,0,0, + 911,866,1,0,0,0,911,875,1,0,0,0,911,879,1,0,0,0,911,885,1,0,0,0,911,893, + 1,0,0,0,911,901,1,0,0,0,912,89,1,0,0,0,913,917,5,20,0,0,914,916,3,92,46, + 0,915,914,1,0,0,0,916,919,1,0,0,0,917,915,1,0,0,0,917,918,1,0,0,0,918, + 920,1,0,0,0,919,917,1,0,0,0,920,921,3,2,1,0,921,922,3,94,47,0,922,923, + 5,179,0,0,923,924,5,35,0,0,924,925,5,29,0,0,925,926,3,312,156,0,926,927, + 5,30,0,0,927,928,3,94,47,0,928,940,1,0,0,0,929,933,5,20,0,0,930,932,3, + 92,46,0,931,930,1,0,0,0,932,935,1,0,0,0,933,931,1,0,0,0,933,934,1,0,0, + 0,934,936,1,0,0,0,935,933,1,0,0,0,936,937,3,2,1,0,937,938,3,94,47,0,938, + 940,1,0,0,0,939,913,1,0,0,0,939,929,1,0,0,0,940,91,1,0,0,0,941,942,5,75, + 0,0,942,93,1,0,0,0,943,946,1,0,0,0,944,946,5,297,0,0,945,943,1,0,0,0,945, + 944,1,0,0,0,946,95,1,0,0,0,947,948,7,6,0,0,948,97,1,0,0,0,949,951,3,96, + 48,0,950,949,1,0,0,0,951,954,1,0,0,0,952,950,1,0,0,0,952,953,1,0,0,0,953, + 99,1,0,0,0,954,952,1,0,0,0,955,956,5,274,0,0,956,101,1,0,0,0,957,958,5, + 275,0,0,958,103,1,0,0,0,959,960,5,276,0,0,960,105,1,0,0,0,961,962,5,277, + 0,0,962,107,1,0,0,0,963,964,5,278,0,0,964,109,1,0,0,0,965,966,5,281,0, + 0,966,111,1,0,0,0,967,968,5,279,0,0,968,113,1,0,0,0,969,970,5,285,0,0, + 970,115,1,0,0,0,971,972,5,283,0,0,972,117,1,0,0,0,973,974,5,284,0,0,974, + 119,1,0,0,0,975,976,5,280,0,0,976,121,1,0,0,0,977,978,5,286,0,0,978,123, + 1,0,0,0,979,980,5,282,0,0,980,125,1,0,0,0,981,1061,3,100,50,0,982,983, + 3,102,51,0,983,984,3,32,16,0,984,1061,1,0,0,0,985,986,3,102,51,0,986,987, + 3,0,0,0,987,1061,1,0,0,0,988,989,3,104,52,0,989,990,3,32,16,0,990,1061, + 1,0,0,0,991,992,3,106,53,0,992,993,3,34,17,0,993,1061,1,0,0,0,994,995, + 3,108,54,0,995,996,3,36,18,0,996,1061,1,0,0,0,997,998,3,108,54,0,998,999, + 3,34,17,0,999,1061,1,0,0,0,1000,1001,3,108,54,0,1001,1002,5,29,0,0,1002, + 1003,3,312,156,0,1003,1004,5,30,0,0,1004,1061,1,0,0,0,1005,1006,3,108, + 54,0,1006,1007,5,83,0,0,1007,1008,5,29,0,0,1008,1009,3,312,156,0,1009, + 1010,5,30,0,0,1010,1061,1,0,0,0,1011,1012,3,110,55,0,1012,1013,3,32,16, + 0,1013,1061,1,0,0,0,1014,1015,3,110,55,0,1015,1016,3,0,0,0,1016,1061,1, + 0,0,0,1017,1018,3,112,56,0,1018,1019,3,190,95,0,1019,1061,1,0,0,0,1020, + 1021,3,114,57,0,1021,1022,3,200,100,0,1022,1061,1,0,0,0,1023,1024,3,114, + 57,0,1024,1025,3,196,98,0,1025,1061,1,0,0,0,1026,1027,3,116,58,0,1027, + 1028,3,146,73,0,1028,1061,1,0,0,0,1029,1030,3,118,59,0,1030,1031,3,6,3, + 0,1031,1061,1,0,0,0,1032,1033,3,118,59,0,1033,1034,5,223,0,0,1034,1035, + 5,29,0,0,1035,1036,3,6,3,0,1036,1037,5,30,0,0,1037,1061,1,0,0,0,1038,1039, + 3,118,59,0,1039,1040,5,83,0,0,1040,1041,5,29,0,0,1041,1042,3,312,156,0, + 1042,1043,5,30,0,0,1043,1061,1,0,0,0,1044,1045,3,120,60,0,1045,1046,3, + 192,96,0,1046,1047,3,160,80,0,1047,1048,3,134,67,0,1048,1061,1,0,0,0,1049, + 1050,3,122,61,0,1050,1051,3,50,25,0,1051,1061,1,0,0,0,1052,1053,3,124, + 62,0,1053,1054,5,29,0,0,1054,1055,3,128,64,0,1055,1056,5,30,0,0,1056,1061, + 1,0,0,0,1057,1058,3,124,62,0,1058,1059,5,84,0,0,1059,1061,1,0,0,0,1060, + 981,1,0,0,0,1060,982,1,0,0,0,1060,985,1,0,0,0,1060,988,1,0,0,0,1060,991, + 1,0,0,0,1060,994,1,0,0,0,1060,997,1,0,0,0,1060,1000,1,0,0,0,1060,1005, + 1,0,0,0,1060,1011,1,0,0,0,1060,1014,1,0,0,0,1060,1017,1,0,0,0,1060,1020, + 1,0,0,0,1060,1023,1,0,0,0,1060,1026,1,0,0,0,1060,1029,1,0,0,0,1060,1032, + 1,0,0,0,1060,1038,1,0,0,0,1060,1044,1,0,0,0,1060,1049,1,0,0,0,1060,1052, + 1,0,0,0,1060,1057,1,0,0,0,1061,127,1,0,0,0,1062,1079,1,0,0,0,1063,1066, + 3,0,0,0,1064,1066,3,32,16,0,1065,1063,1,0,0,0,1065,1064,1,0,0,0,1066,1067, + 1,0,0,0,1067,1068,5,27,0,0,1068,1070,1,0,0,0,1069,1065,1,0,0,0,1070,1073, + 1,0,0,0,1071,1069,1,0,0,0,1071,1072,1,0,0,0,1072,1076,1,0,0,0,1073,1071, + 1,0,0,0,1074,1077,3,0,0,0,1075,1077,3,32,16,0,1076,1074,1,0,0,0,1076,1075, + 1,0,0,0,1077,1079,1,0,0,0,1078,1062,1,0,0,0,1078,1071,1,0,0,0,1079,129, + 1,0,0,0,1080,1086,5,85,0,0,1081,1082,3,160,80,0,1082,1083,5,27,0,0,1083, + 1085,1,0,0,0,1084,1081,1,0,0,0,1085,1088,1,0,0,0,1086,1084,1,0,0,0,1086, + 1087,1,0,0,0,1087,1089,1,0,0,0,1088,1086,1,0,0,0,1089,1090,3,160,80,0, + 1090,1091,5,86,0,0,1091,131,1,0,0,0,1092,1098,5,41,0,0,1093,1094,3,168, + 84,0,1094,1095,5,27,0,0,1095,1097,1,0,0,0,1096,1093,1,0,0,0,1097,1100, 1,0,0,0,1098,1096,1,0,0,0,1098,1099,1,0,0,0,1099,1101,1,0,0,0,1100,1098, - 1,0,0,0,1101,1102,3,2,1,0,1102,137,1,0,0,0,1103,1105,3,140,70,0,1104,1103, - 1,0,0,0,1105,1108,1,0,0,0,1106,1104,1,0,0,0,1106,1107,1,0,0,0,1107,139, - 1,0,0,0,1108,1106,1,0,0,0,1109,1110,5,177,0,0,1110,1111,5,88,0,0,1111, - 1115,3,28,14,0,1112,1115,3,166,83,0,1113,1115,3,336,168,0,1114,1109,1, - 0,0,0,1114,1112,1,0,0,0,1114,1113,1,0,0,0,1115,141,1,0,0,0,1116,1128,3, - 134,67,0,1117,1118,5,41,0,0,1118,1119,3,2,1,0,1119,1120,5,42,0,0,1120, - 1128,1,0,0,0,1121,1122,5,41,0,0,1122,1123,5,195,0,0,1123,1124,3,2,1,0, - 1124,1125,5,42,0,0,1125,1128,1,0,0,0,1126,1128,3,156,78,0,1127,1116,1, - 0,0,0,1127,1117,1,0,0,0,1127,1121,1,0,0,0,1127,1126,1,0,0,0,1128,143,1, - 0,0,0,1129,1138,1,0,0,0,1130,1134,3,148,74,0,1131,1133,3,146,73,0,1132, - 1131,1,0,0,0,1133,1136,1,0,0,0,1134,1132,1,0,0,0,1134,1135,1,0,0,0,1135, - 1138,1,0,0,0,1136,1134,1,0,0,0,1137,1129,1,0,0,0,1137,1130,1,0,0,0,1138, - 145,1,0,0,0,1139,1157,5,264,0,0,1140,1157,5,263,0,0,1141,1142,5,41,0,0, - 1142,1143,3,28,14,0,1143,1144,5,42,0,0,1144,1157,1,0,0,0,1145,1146,5,41, - 0,0,1146,1147,3,28,14,0,1147,1148,5,268,0,0,1148,1149,3,28,14,0,1149,1150, - 5,42,0,0,1150,1157,1,0,0,0,1151,1152,5,41,0,0,1152,1153,5,268,0,0,1153, - 1154,3,28,14,0,1154,1155,5,42,0,0,1155,1157,1,0,0,0,1156,1139,1,0,0,0, - 1156,1140,1,0,0,0,1156,1141,1,0,0,0,1156,1145,1,0,0,0,1156,1151,1,0,0, - 0,1157,147,1,0,0,0,1158,1240,1,0,0,0,1159,1160,5,200,0,0,1160,1161,5,29, - 0,0,1161,1162,3,4,2,0,1162,1163,5,27,0,0,1163,1164,3,4,2,0,1164,1165,5, - 27,0,0,1165,1166,3,4,2,0,1166,1167,5,27,0,0,1167,1168,3,4,2,0,1168,1169, - 5,30,0,0,1169,1240,1,0,0,0,1170,1171,5,200,0,0,1171,1172,5,29,0,0,1172, - 1173,3,4,2,0,1173,1174,5,27,0,0,1174,1175,3,4,2,0,1175,1176,5,30,0,0,1176, - 1240,1,0,0,0,1177,1178,5,201,0,0,1178,1179,5,202,0,0,1179,1180,5,41,0, - 0,1180,1181,3,28,14,0,1181,1182,5,42,0,0,1182,1240,1,0,0,0,1183,1184,5, - 201,0,0,1184,1185,5,203,0,0,1185,1186,5,41,0,0,1186,1187,3,28,14,0,1187, - 1188,5,42,0,0,1188,1189,3,144,72,0,1189,1240,1,0,0,0,1190,1240,5,204,0, - 0,1191,1240,5,205,0,0,1192,1240,5,206,0,0,1193,1240,5,198,0,0,1194,1240, - 5,180,0,0,1195,1240,5,181,0,0,1196,1240,5,182,0,0,1197,1240,5,183,0,0, - 1198,1240,5,184,0,0,1199,1240,5,185,0,0,1200,1240,5,186,0,0,1201,1240, - 5,207,0,0,1202,1240,5,187,0,0,1203,1240,5,188,0,0,1204,1240,5,189,0,0, - 1205,1240,5,190,0,0,1206,1240,5,208,0,0,1207,1240,5,209,0,0,1208,1240, - 5,210,0,0,1209,1240,5,211,0,0,1210,1240,5,212,0,0,1211,1240,5,213,0,0, - 1212,1240,5,214,0,0,1213,1214,5,215,0,0,1214,1240,3,150,75,0,1215,1216, - 5,216,0,0,1216,1240,3,150,75,0,1217,1240,5,217,0,0,1218,1219,5,218,0,0, - 1219,1240,3,150,75,0,1220,1221,5,219,0,0,1221,1240,3,152,76,0,1222,1223, - 5,219,0,0,1223,1224,3,152,76,0,1224,1225,5,27,0,0,1225,1226,3,4,2,0,1226, - 1240,1,0,0,0,1227,1240,5,191,0,0,1228,1240,5,192,0,0,1229,1240,5,220,0, - 0,1230,1240,5,222,0,0,1231,1240,5,224,0,0,1232,1240,5,225,0,0,1233,1240, - 5,221,0,0,1234,1240,5,226,0,0,1235,1240,5,228,0,0,1236,1237,5,33,0,0,1237, - 1240,5,227,0,0,1238,1240,3,2,1,0,1239,1158,1,0,0,0,1239,1159,1,0,0,0,1239, - 1170,1,0,0,0,1239,1177,1,0,0,0,1239,1183,1,0,0,0,1239,1190,1,0,0,0,1239, - 1191,1,0,0,0,1239,1192,1,0,0,0,1239,1193,1,0,0,0,1239,1194,1,0,0,0,1239, - 1195,1,0,0,0,1239,1196,1,0,0,0,1239,1197,1,0,0,0,1239,1198,1,0,0,0,1239, - 1199,1,0,0,0,1239,1200,1,0,0,0,1239,1201,1,0,0,0,1239,1202,1,0,0,0,1239, - 1203,1,0,0,0,1239,1204,1,0,0,0,1239,1205,1,0,0,0,1239,1206,1,0,0,0,1239, - 1207,1,0,0,0,1239,1208,1,0,0,0,1239,1209,1,0,0,0,1239,1210,1,0,0,0,1239, - 1211,1,0,0,0,1239,1212,1,0,0,0,1239,1213,1,0,0,0,1239,1215,1,0,0,0,1239, - 1217,1,0,0,0,1239,1218,1,0,0,0,1239,1220,1,0,0,0,1239,1222,1,0,0,0,1239, - 1227,1,0,0,0,1239,1228,1,0,0,0,1239,1229,1,0,0,0,1239,1230,1,0,0,0,1239, - 1231,1,0,0,0,1239,1232,1,0,0,0,1239,1233,1,0,0,0,1239,1234,1,0,0,0,1239, - 1235,1,0,0,0,1239,1236,1,0,0,0,1239,1238,1,0,0,0,1240,149,1,0,0,0,1241, - 1249,1,0,0,0,1242,1243,5,29,0,0,1243,1244,5,89,0,0,1244,1245,5,35,0,0, - 1245,1246,3,28,14,0,1246,1247,5,30,0,0,1247,1249,1,0,0,0,1248,1241,1,0, - 0,0,1248,1242,1,0,0,0,1249,151,1,0,0,0,1250,1259,1,0,0,0,1251,1255,3,154, - 77,0,1252,1254,7,5,0,0,1253,1252,1,0,0,0,1254,1257,1,0,0,0,1255,1253,1, - 0,0,0,1255,1256,1,0,0,0,1256,1259,1,0,0,0,1257,1255,1,0,0,0,1258,1250, - 1,0,0,0,1258,1251,1,0,0,0,1259,153,1,0,0,0,1260,1261,7,6,0,0,1261,155, - 1,0,0,0,1262,1266,3,160,80,0,1263,1265,3,158,79,0,1264,1263,1,0,0,0,1265, - 1268,1,0,0,0,1266,1264,1,0,0,0,1266,1267,1,0,0,0,1267,157,1,0,0,0,1268, - 1266,1,0,0,0,1269,1270,5,41,0,0,1270,1287,5,42,0,0,1271,1287,3,128,64, - 0,1272,1287,5,262,0,0,1273,1287,5,264,0,0,1274,1287,5,90,0,0,1275,1276, - 5,91,0,0,1276,1277,5,29,0,0,1277,1278,3,142,71,0,1278,1279,5,30,0,0,1279, - 1287,1,0,0,0,1280,1281,5,92,0,0,1281,1282,5,29,0,0,1282,1283,3,142,71, - 0,1283,1284,5,30,0,0,1284,1287,1,0,0,0,1285,1287,3,126,63,0,1286,1269, - 1,0,0,0,1286,1271,1,0,0,0,1286,1272,1,0,0,0,1286,1273,1,0,0,0,1286,1274, - 1,0,0,0,1286,1275,1,0,0,0,1286,1280,1,0,0,0,1286,1285,1,0,0,0,1287,159, - 1,0,0,0,1288,1289,5,38,0,0,1289,1319,3,134,67,0,1290,1319,5,194,0,0,1291, - 1292,5,196,0,0,1292,1293,5,38,0,0,1293,1319,3,134,67,0,1294,1295,5,197, - 0,0,1295,1319,3,134,67,0,1296,1297,5,226,0,0,1297,1298,3,184,92,0,1298, - 1299,3,156,78,0,1299,1300,5,264,0,0,1300,1301,3,130,65,0,1301,1319,1,0, - 0,0,1302,1303,5,253,0,0,1303,1319,3,28,14,0,1304,1305,5,252,0,0,1305,1319, - 3,28,14,0,1306,1307,5,253,0,0,1307,1319,3,2,1,0,1308,1309,5,252,0,0,1309, - 1319,3,2,1,0,1310,1319,5,254,0,0,1311,1319,5,198,0,0,1312,1319,5,255,0, - 0,1313,1319,5,256,0,0,1314,1319,3,162,81,0,1315,1319,3,2,1,0,1316,1317, - 5,174,0,0,1317,1319,3,156,78,0,1318,1288,1,0,0,0,1318,1290,1,0,0,0,1318, - 1291,1,0,0,0,1318,1294,1,0,0,0,1318,1296,1,0,0,0,1318,1302,1,0,0,0,1318, - 1304,1,0,0,0,1318,1306,1,0,0,0,1318,1308,1,0,0,0,1318,1310,1,0,0,0,1318, - 1311,1,0,0,0,1318,1312,1,0,0,0,1318,1313,1,0,0,0,1318,1314,1,0,0,0,1318, - 1315,1,0,0,0,1318,1316,1,0,0,0,1319,161,1,0,0,0,1320,1321,7,7,0,0,1321, - 163,1,0,0,0,1322,1333,1,0,0,0,1323,1333,5,174,0,0,1324,1333,3,28,14,0, - 1325,1326,3,28,14,0,1326,1327,5,174,0,0,1327,1328,3,28,14,0,1328,1333, - 1,0,0,0,1329,1330,3,28,14,0,1330,1331,5,174,0,0,1331,1333,1,0,0,0,1332, - 1322,1,0,0,0,1332,1323,1,0,0,0,1332,1324,1,0,0,0,1332,1325,1,0,0,0,1332, - 1329,1,0,0,0,1333,165,1,0,0,0,1334,1335,5,295,0,0,1335,1336,3,180,90,0, - 1336,1337,3,142,71,0,1337,1338,5,29,0,0,1338,1339,3,172,86,0,1339,1340, - 5,30,0,0,1340,1375,1,0,0,0,1341,1342,5,295,0,0,1342,1343,3,180,90,0,1343, - 1344,3,142,71,0,1344,1345,5,35,0,0,1345,1346,5,16,0,0,1346,1347,3,48,24, - 0,1347,1348,5,17,0,0,1348,1375,1,0,0,0,1349,1350,5,295,0,0,1350,1351,3, - 180,90,0,1351,1352,3,142,71,0,1352,1375,1,0,0,0,1353,1354,5,296,0,0,1354, - 1355,3,180,90,0,1355,1357,5,35,0,0,1356,1358,5,83,0,0,1357,1356,1,0,0, - 0,1357,1358,1,0,0,0,1358,1359,1,0,0,0,1359,1360,5,29,0,0,1360,1361,3,304, - 152,0,1361,1362,5,30,0,0,1362,1375,1,0,0,0,1363,1364,5,296,0,0,1364,1365, - 3,180,90,0,1365,1366,3,4,2,0,1366,1375,1,0,0,0,1367,1368,5,296,0,0,1368, - 1369,3,180,90,0,1369,1370,5,35,0,0,1370,1371,5,16,0,0,1371,1372,3,168, - 84,0,1372,1373,5,17,0,0,1373,1375,1,0,0,0,1374,1334,1,0,0,0,1374,1341, - 1,0,0,0,1374,1349,1,0,0,0,1374,1353,1,0,0,0,1374,1363,1,0,0,0,1374,1367, - 1,0,0,0,1375,167,1,0,0,0,1376,1387,1,0,0,0,1377,1378,3,170,85,0,1378,1379, - 5,27,0,0,1379,1381,1,0,0,0,1380,1377,1,0,0,0,1381,1384,1,0,0,0,1382,1380, - 1,0,0,0,1382,1383,1,0,0,0,1383,1385,1,0,0,0,1384,1382,1,0,0,0,1385,1387, - 3,170,85,0,1386,1376,1,0,0,0,1386,1382,1,0,0,0,1387,169,1,0,0,0,1388,1389, - 3,142,71,0,1389,1390,5,35,0,0,1390,1391,5,16,0,0,1391,1392,3,52,26,0,1392, - 1393,5,17,0,0,1393,1402,1,0,0,0,1394,1395,5,38,0,0,1395,1396,5,266,0,0, - 1396,1397,5,35,0,0,1397,1398,5,16,0,0,1398,1399,3,52,26,0,1399,1400,5, - 17,0,0,1400,1402,1,0,0,0,1401,1388,1,0,0,0,1401,1394,1,0,0,0,1402,171, - 1,0,0,0,1403,1404,3,174,87,0,1404,1405,5,27,0,0,1405,1407,1,0,0,0,1406, - 1403,1,0,0,0,1407,1410,1,0,0,0,1408,1406,1,0,0,0,1408,1409,1,0,0,0,1409, - 1411,1,0,0,0,1410,1408,1,0,0,0,1411,1412,3,174,87,0,1412,173,1,0,0,0,1413, - 1414,3,4,2,0,1414,1415,5,35,0,0,1415,1416,3,178,89,0,1416,175,1,0,0,0, - 1417,1418,7,8,0,0,1418,177,1,0,0,0,1419,1454,3,176,88,0,1420,1454,3,28, - 14,0,1421,1422,5,183,0,0,1422,1423,5,29,0,0,1423,1424,3,28,14,0,1424,1425, - 5,30,0,0,1425,1454,1,0,0,0,1426,1454,3,4,2,0,1427,1428,3,134,67,0,1428, - 1429,5,29,0,0,1429,1430,5,181,0,0,1430,1431,5,74,0,0,1431,1432,3,28,14, - 0,1432,1433,5,30,0,0,1433,1454,1,0,0,0,1434,1435,3,134,67,0,1435,1436, - 5,29,0,0,1436,1437,5,182,0,0,1437,1438,5,74,0,0,1438,1439,3,28,14,0,1439, - 1440,5,30,0,0,1440,1454,1,0,0,0,1441,1442,3,134,67,0,1442,1443,5,29,0, - 0,1443,1444,5,183,0,0,1444,1445,5,74,0,0,1445,1446,3,28,14,0,1446,1447, - 5,30,0,0,1447,1454,1,0,0,0,1448,1449,3,134,67,0,1449,1450,5,29,0,0,1450, - 1451,3,28,14,0,1451,1452,5,30,0,0,1452,1454,1,0,0,0,1453,1419,1,0,0,0, - 1453,1420,1,0,0,0,1453,1421,1,0,0,0,1453,1426,1,0,0,0,1453,1427,1,0,0, - 0,1453,1434,1,0,0,0,1453,1441,1,0,0,0,1453,1448,1,0,0,0,1454,179,1,0,0, - 0,1455,1456,7,9,0,0,1456,181,1,0,0,0,1457,1458,3,184,92,0,1458,1459,3, - 156,78,0,1459,1460,3,142,71,0,1460,1461,5,173,0,0,1461,1463,3,256,128, - 0,1462,1464,3,126,63,0,1463,1462,1,0,0,0,1463,1464,1,0,0,0,1464,1465,1, - 0,0,0,1465,1466,3,130,65,0,1466,1492,1,0,0,0,1467,1468,3,184,92,0,1468, - 1469,3,156,78,0,1469,1470,3,142,71,0,1470,1471,5,173,0,0,1471,1472,3,256, - 128,0,1472,1473,3,210,105,0,1473,1474,3,130,65,0,1474,1492,1,0,0,0,1475, - 1476,3,184,92,0,1476,1477,3,156,78,0,1477,1479,3,256,128,0,1478,1480,3, - 126,63,0,1479,1478,1,0,0,0,1479,1480,1,0,0,0,1480,1481,1,0,0,0,1481,1482, - 3,130,65,0,1482,1492,1,0,0,0,1483,1484,3,184,92,0,1484,1485,3,156,78,0, - 1485,1486,3,256,128,0,1486,1487,3,210,105,0,1487,1488,3,130,65,0,1488, - 1492,1,0,0,0,1489,1492,3,188,94,0,1490,1492,3,2,1,0,1491,1457,1,0,0,0, - 1491,1467,1,0,0,0,1491,1475,1,0,0,0,1491,1483,1,0,0,0,1491,1489,1,0,0, - 0,1491,1490,1,0,0,0,1492,183,1,0,0,0,1493,1494,5,243,0,0,1494,1504,3,184, - 92,0,1495,1496,5,244,0,0,1496,1504,3,184,92,0,1497,1504,3,186,93,0,1498, - 1499,5,110,0,0,1499,1500,5,29,0,0,1500,1501,3,28,14,0,1501,1502,5,30,0, - 0,1502,1504,1,0,0,0,1503,1493,1,0,0,0,1503,1495,1,0,0,0,1503,1497,1,0, - 0,0,1503,1498,1,0,0,0,1504,185,1,0,0,0,1505,1518,1,0,0,0,1506,1518,5,245, - 0,0,1507,1518,5,246,0,0,1508,1509,5,247,0,0,1509,1518,5,248,0,0,1510,1511, - 5,247,0,0,1511,1518,5,249,0,0,1512,1513,5,247,0,0,1513,1518,5,250,0,0, - 1514,1515,5,247,0,0,1515,1518,5,251,0,0,1516,1518,5,247,0,0,1517,1505, - 1,0,0,0,1517,1506,1,0,0,0,1517,1507,1,0,0,0,1517,1508,1,0,0,0,1517,1510, - 1,0,0,0,1517,1512,1,0,0,0,1517,1514,1,0,0,0,1517,1516,1,0,0,0,1518,187, - 1,0,0,0,1519,1520,5,111,0,0,1520,1521,5,29,0,0,1521,1522,3,28,14,0,1522, - 1523,5,30,0,0,1523,189,1,0,0,0,1524,1525,5,226,0,0,1525,1530,3,182,91, - 0,1526,1527,5,36,0,0,1527,1530,3,192,96,0,1528,1530,3,188,94,0,1529,1524, - 1,0,0,0,1529,1526,1,0,0,0,1529,1528,1,0,0,0,1530,191,1,0,0,0,1531,1532, - 3,156,78,0,1532,1533,3,142,71,0,1533,1534,5,173,0,0,1534,1535,3,2,1,0, - 1535,1541,1,0,0,0,1536,1537,3,156,78,0,1537,1538,3,2,1,0,1538,1541,1,0, - 0,0,1539,1541,3,2,1,0,1540,1531,1,0,0,0,1540,1536,1,0,0,0,1540,1539,1, - 0,0,0,1541,193,1,0,0,0,1542,1543,3,142,71,0,1543,1544,5,27,0,0,1544,1546, - 1,0,0,0,1545,1542,1,0,0,0,1546,1549,1,0,0,0,1547,1545,1,0,0,0,1547,1548, - 1,0,0,0,1548,1550,1,0,0,0,1549,1547,1,0,0,0,1550,1551,3,142,71,0,1551, - 195,1,0,0,0,1552,1558,1,0,0,0,1553,1554,5,84,0,0,1554,1555,3,204,102,0, - 1555,1556,5,85,0,0,1556,1558,1,0,0,0,1557,1552,1,0,0,0,1557,1553,1,0,0, - 0,1558,197,1,0,0,0,1559,1571,5,268,0,0,1560,1571,5,112,0,0,1561,1571,5, - 38,0,0,1562,1571,5,197,0,0,1563,1571,5,113,0,0,1564,1571,5,114,0,0,1565, - 1566,5,69,0,0,1566,1567,5,29,0,0,1567,1568,3,28,14,0,1568,1569,5,30,0, - 0,1569,1571,1,0,0,0,1570,1559,1,0,0,0,1570,1560,1,0,0,0,1570,1561,1,0, - 0,0,1570,1562,1,0,0,0,1570,1563,1,0,0,0,1570,1564,1,0,0,0,1570,1565,1, - 0,0,0,1571,199,1,0,0,0,1572,1574,3,198,99,0,1573,1572,1,0,0,0,1574,1577, - 1,0,0,0,1575,1573,1,0,0,0,1575,1576,1,0,0,0,1576,201,1,0,0,0,1577,1575, - 1,0,0,0,1578,1580,3,200,100,0,1579,1581,3,206,103,0,1580,1579,1,0,0,0, - 1580,1581,1,0,0,0,1581,1582,1,0,0,0,1582,1583,3,2,1,0,1583,203,1,0,0,0, - 1584,1585,3,202,101,0,1585,1586,5,27,0,0,1586,1588,1,0,0,0,1587,1584,1, - 0,0,0,1588,1591,1,0,0,0,1589,1587,1,0,0,0,1589,1590,1,0,0,0,1590,1592, - 1,0,0,0,1591,1589,1,0,0,0,1592,1593,3,202,101,0,1593,205,1,0,0,0,1594, - 1595,5,29,0,0,1595,1596,3,194,97,0,1596,1597,5,30,0,0,1597,207,1,0,0,0, - 1598,1601,1,0,0,0,1599,1601,3,210,105,0,1600,1598,1,0,0,0,1600,1599,1, - 0,0,0,1601,209,1,0,0,0,1602,1603,5,84,0,0,1603,1604,5,41,0,0,1604,1605, - 3,28,14,0,1605,1606,5,42,0,0,1606,1607,5,85,0,0,1607,211,1,0,0,0,1608, - 1609,3,248,124,0,1609,1610,5,16,0,0,1610,1611,3,260,130,0,1611,1612,5, - 17,0,0,1612,1725,1,0,0,0,1613,1614,3,70,35,0,1614,1615,5,16,0,0,1615,1616, - 3,78,39,0,1616,1617,5,17,0,0,1617,1725,1,0,0,0,1618,1619,3,224,112,0,1619, - 1620,5,16,0,0,1620,1621,3,228,114,0,1621,1622,5,17,0,0,1622,1725,1,0,0, - 0,1623,1624,3,232,116,0,1624,1625,5,16,0,0,1625,1626,3,236,118,0,1626, - 1627,5,17,0,0,1627,1725,1,0,0,0,1628,1725,3,214,107,0,1629,1725,3,288, - 144,0,1630,1725,3,166,83,0,1631,1725,3,84,42,0,1632,1725,3,334,167,0,1633, - 1634,5,115,0,0,1634,1725,3,28,14,0,1635,1636,5,116,0,0,1636,1725,3,28, - 14,0,1637,1638,3,346,173,0,1638,1639,5,16,0,0,1639,1640,3,350,175,0,1640, - 1641,5,17,0,0,1641,1725,1,0,0,0,1642,1643,5,303,0,0,1643,1644,3,142,71, - 0,1644,1645,5,173,0,0,1645,1646,3,256,128,0,1646,1647,5,117,0,0,1647,1648, - 3,184,92,0,1648,1649,3,156,78,0,1649,1650,3,142,71,0,1650,1651,5,173,0, - 0,1651,1652,3,256,128,0,1652,1653,3,130,65,0,1653,1725,1,0,0,0,1654,1655, - 5,303,0,0,1655,1656,5,226,0,0,1656,1657,3,184,92,0,1657,1658,3,156,78, - 0,1658,1659,3,142,71,0,1659,1660,5,173,0,0,1660,1661,3,256,128,0,1661, - 1662,3,208,104,0,1662,1663,3,130,65,0,1663,1664,5,117,0,0,1664,1665,5, - 226,0,0,1665,1666,3,184,92,0,1666,1667,3,156,78,0,1667,1668,3,142,71,0, - 1668,1669,5,173,0,0,1669,1670,3,256,128,0,1670,1671,3,208,104,0,1671,1672, - 3,130,65,0,1672,1725,1,0,0,0,1673,1725,3,24,12,0,1674,1725,3,36,18,0,1675, - 1676,5,257,0,0,1676,1677,5,193,0,0,1677,1678,5,41,0,0,1678,1679,3,28,14, - 0,1679,1683,5,42,0,0,1680,1682,3,334,167,0,1681,1680,1,0,0,0,1682,1685, - 1,0,0,0,1683,1681,1,0,0,0,1683,1684,1,0,0,0,1684,1725,1,0,0,0,1685,1683, - 1,0,0,0,1686,1687,5,257,0,0,1687,1688,5,193,0,0,1688,1692,3,2,1,0,1689, - 1691,3,334,167,0,1690,1689,1,0,0,0,1691,1694,1,0,0,0,1692,1690,1,0,0,0, - 1692,1693,1,0,0,0,1693,1725,1,0,0,0,1694,1692,1,0,0,0,1695,1696,5,257, - 0,0,1696,1697,5,258,0,0,1697,1698,5,41,0,0,1698,1699,3,28,14,0,1699,1700, - 5,42,0,0,1700,1701,5,27,0,0,1701,1705,3,142,71,0,1702,1704,3,334,167,0, - 1703,1702,1,0,0,0,1704,1707,1,0,0,0,1705,1703,1,0,0,0,1705,1706,1,0,0, - 0,1706,1725,1,0,0,0,1707,1705,1,0,0,0,1708,1709,5,257,0,0,1709,1710,5, - 258,0,0,1710,1711,3,2,1,0,1711,1712,5,27,0,0,1712,1716,3,142,71,0,1713, - 1715,3,334,167,0,1714,1713,1,0,0,0,1715,1718,1,0,0,0,1716,1714,1,0,0,0, - 1716,1717,1,0,0,0,1717,1725,1,0,0,0,1718,1716,1,0,0,0,1719,1720,5,118, - 0,0,1720,1721,5,193,0,0,1721,1722,3,142,71,0,1722,1723,3,40,20,0,1723, - 1725,1,0,0,0,1724,1608,1,0,0,0,1724,1613,1,0,0,0,1724,1618,1,0,0,0,1724, - 1623,1,0,0,0,1724,1628,1,0,0,0,1724,1629,1,0,0,0,1724,1630,1,0,0,0,1724, - 1631,1,0,0,0,1724,1632,1,0,0,0,1724,1633,1,0,0,0,1724,1635,1,0,0,0,1724, - 1637,1,0,0,0,1724,1642,1,0,0,0,1724,1654,1,0,0,0,1724,1673,1,0,0,0,1724, - 1674,1,0,0,0,1724,1675,1,0,0,0,1724,1686,1,0,0,0,1724,1695,1,0,0,0,1724, - 1708,1,0,0,0,1724,1719,1,0,0,0,1725,213,1,0,0,0,1726,1727,5,119,0,0,1727, - 1736,3,222,111,0,1728,1735,3,216,108,0,1729,1730,5,120,0,0,1730,1731,5, - 29,0,0,1731,1732,3,242,121,0,1732,1733,5,30,0,0,1733,1735,1,0,0,0,1734, - 1728,1,0,0,0,1734,1729,1,0,0,0,1735,1738,1,0,0,0,1736,1734,1,0,0,0,1736, - 1737,1,0,0,0,1737,1739,1,0,0,0,1738,1736,1,0,0,0,1739,1740,3,156,78,0, - 1740,1741,3,2,1,0,1741,1742,3,218,109,0,1742,1743,3,220,110,0,1743,215, - 1,0,0,0,1744,1763,5,121,0,0,1745,1763,5,50,0,0,1746,1763,5,51,0,0,1747, - 1763,5,62,0,0,1748,1763,5,122,0,0,1749,1763,5,68,0,0,1750,1763,5,67,0, - 0,1751,1763,5,63,0,0,1752,1763,5,64,0,0,1753,1763,5,65,0,0,1754,1763,5, - 123,0,0,1755,1763,5,124,0,0,1756,1763,5,125,0,0,1757,1758,5,69,0,0,1758, - 1759,5,29,0,0,1759,1760,3,28,14,0,1760,1761,5,30,0,0,1761,1763,1,0,0,0, - 1762,1744,1,0,0,0,1762,1745,1,0,0,0,1762,1746,1,0,0,0,1762,1747,1,0,0, - 0,1762,1748,1,0,0,0,1762,1749,1,0,0,0,1762,1750,1,0,0,0,1762,1751,1,0, - 0,0,1762,1752,1,0,0,0,1762,1753,1,0,0,0,1762,1754,1,0,0,0,1762,1755,1, - 0,0,0,1762,1756,1,0,0,0,1762,1757,1,0,0,0,1763,217,1,0,0,0,1764,1768,1, - 0,0,0,1765,1766,5,43,0,0,1766,1768,3,0,0,0,1767,1764,1,0,0,0,1767,1765, - 1,0,0,0,1768,219,1,0,0,0,1769,1773,1,0,0,0,1770,1771,5,35,0,0,1771,1773, - 3,308,154,0,1772,1769,1,0,0,0,1772,1770,1,0,0,0,1773,221,1,0,0,0,1774, - 1780,1,0,0,0,1775,1776,5,41,0,0,1776,1777,3,28,14,0,1777,1778,5,42,0,0, - 1778,1780,1,0,0,0,1779,1774,1,0,0,0,1779,1775,1,0,0,0,1780,223,1,0,0,0, - 1781,1785,5,126,0,0,1782,1784,3,226,113,0,1783,1782,1,0,0,0,1784,1787, - 1,0,0,0,1785,1783,1,0,0,0,1785,1786,1,0,0,0,1786,1788,1,0,0,0,1787,1785, - 1,0,0,0,1788,1789,3,142,71,0,1789,1790,3,2,1,0,1790,1800,1,0,0,0,1791, - 1795,5,126,0,0,1792,1794,3,226,113,0,1793,1792,1,0,0,0,1794,1797,1,0,0, - 0,1795,1793,1,0,0,0,1795,1796,1,0,0,0,1796,1798,1,0,0,0,1797,1795,1,0, - 0,0,1798,1800,3,2,1,0,1799,1781,1,0,0,0,1799,1791,1,0,0,0,1800,225,1,0, - 0,0,1801,1802,7,10,0,0,1802,227,1,0,0,0,1803,1805,3,230,115,0,1804,1803, - 1,0,0,0,1805,1808,1,0,0,0,1806,1804,1,0,0,0,1806,1807,1,0,0,0,1807,229, - 1,0,0,0,1808,1806,1,0,0,0,1809,1810,5,127,0,0,1810,1822,3,182,91,0,1811, - 1812,5,128,0,0,1812,1822,3,182,91,0,1813,1814,5,129,0,0,1814,1822,3,182, - 91,0,1815,1816,5,130,0,0,1816,1822,3,182,91,0,1817,1822,3,84,42,0,1818, - 1822,3,334,167,0,1819,1822,3,24,12,0,1820,1822,3,36,18,0,1821,1809,1,0, - 0,0,1821,1811,1,0,0,0,1821,1813,1,0,0,0,1821,1815,1,0,0,0,1821,1817,1, - 0,0,0,1821,1818,1,0,0,0,1821,1819,1,0,0,0,1821,1820,1,0,0,0,1822,231,1, - 0,0,0,1823,1827,5,131,0,0,1824,1826,3,234,117,0,1825,1824,1,0,0,0,1826, - 1829,1,0,0,0,1827,1825,1,0,0,0,1827,1828,1,0,0,0,1828,1830,1,0,0,0,1829, - 1827,1,0,0,0,1830,1831,3,184,92,0,1831,1832,3,156,78,0,1832,1833,3,2,1, - 0,1833,1834,3,130,65,0,1834,1835,3,220,110,0,1835,233,1,0,0,0,1836,1837, - 7,10,0,0,1837,235,1,0,0,0,1838,1840,3,238,119,0,1839,1838,1,0,0,0,1840, - 1843,1,0,0,0,1841,1839,1,0,0,0,1841,1842,1,0,0,0,1842,237,1,0,0,0,1843, - 1841,1,0,0,0,1844,1845,5,132,0,0,1845,1855,3,182,91,0,1846,1847,5,133, - 0,0,1847,1855,3,182,91,0,1848,1849,5,130,0,0,1849,1855,3,182,91,0,1850, - 1855,3,334,167,0,1851,1855,3,84,42,0,1852,1855,3,24,12,0,1853,1855,3,36, - 18,0,1854,1844,1,0,0,0,1854,1846,1,0,0,0,1854,1848,1,0,0,0,1854,1850,1, - 0,0,0,1854,1851,1,0,0,0,1854,1852,1,0,0,0,1854,1853,1,0,0,0,1855,239,1, - 0,0,0,1856,1863,1,0,0,0,1857,1858,5,120,0,0,1858,1859,5,29,0,0,1859,1860, - 3,242,121,0,1860,1861,5,30,0,0,1861,1863,1,0,0,0,1862,1856,1,0,0,0,1862, - 1857,1,0,0,0,1863,241,1,0,0,0,1864,1870,3,144,72,0,1865,1866,5,16,0,0, - 1866,1867,3,306,153,0,1867,1868,5,17,0,0,1868,1870,1,0,0,0,1869,1864,1, - 0,0,0,1869,1865,1,0,0,0,1870,243,1,0,0,0,1871,1873,3,246,123,0,1872,1871, - 1,0,0,0,1873,1876,1,0,0,0,1874,1872,1,0,0,0,1874,1875,1,0,0,0,1875,245, - 1,0,0,0,1876,1874,1,0,0,0,1877,1878,5,41,0,0,1878,1879,5,134,0,0,1879, - 1891,5,42,0,0,1880,1881,5,41,0,0,1881,1882,5,135,0,0,1882,1891,5,42,0, - 0,1883,1884,5,41,0,0,1884,1885,5,136,0,0,1885,1891,5,42,0,0,1886,1887, - 5,41,0,0,1887,1888,3,28,14,0,1888,1889,5,42,0,0,1889,1891,1,0,0,0,1890, - 1877,1,0,0,0,1890,1880,1,0,0,0,1890,1883,1,0,0,0,1890,1886,1,0,0,0,1891, - 247,1,0,0,0,1892,1897,5,137,0,0,1893,1896,3,250,125,0,1894,1896,3,252, - 126,0,1895,1893,1,0,0,0,1895,1894,1,0,0,0,1896,1899,1,0,0,0,1897,1895, - 1,0,0,0,1897,1898,1,0,0,0,1898,1900,1,0,0,0,1899,1897,1,0,0,0,1900,1901, - 3,184,92,0,1901,1902,3,244,122,0,1902,1903,3,156,78,0,1903,1904,3,240, - 120,0,1904,1905,3,256,128,0,1905,1906,3,196,98,0,1906,1910,3,130,65,0, - 1907,1909,3,258,129,0,1908,1907,1,0,0,0,1909,1912,1,0,0,0,1910,1908,1, - 0,0,0,1910,1911,1,0,0,0,1911,249,1,0,0,0,1912,1910,1,0,0,0,1913,1937,5, - 121,0,0,1914,1937,5,50,0,0,1915,1937,5,51,0,0,1916,1937,5,62,0,0,1917, - 1937,5,138,0,0,1918,1937,5,67,0,0,1919,1937,5,139,0,0,1920,1937,5,140, - 0,0,1921,1937,5,53,0,0,1922,1937,5,63,0,0,1923,1937,5,64,0,0,1924,1937, - 5,65,0,0,1925,1937,5,123,0,0,1926,1937,5,141,0,0,1927,1937,5,142,0,0,1928, - 1937,5,68,0,0,1929,1937,5,143,0,0,1930,1937,5,144,0,0,1931,1932,5,69,0, - 0,1932,1933,5,29,0,0,1933,1934,3,28,14,0,1934,1935,5,30,0,0,1935,1937, - 1,0,0,0,1936,1913,1,0,0,0,1936,1914,1,0,0,0,1936,1915,1,0,0,0,1936,1916, - 1,0,0,0,1936,1917,1,0,0,0,1936,1918,1,0,0,0,1936,1919,1,0,0,0,1936,1920, - 1,0,0,0,1936,1921,1,0,0,0,1936,1922,1,0,0,0,1936,1923,1,0,0,0,1936,1924, - 1,0,0,0,1936,1925,1,0,0,0,1936,1926,1,0,0,0,1936,1927,1,0,0,0,1936,1928, - 1,0,0,0,1936,1929,1,0,0,0,1936,1930,1,0,0,0,1936,1931,1,0,0,0,1937,251, - 1,0,0,0,1938,1939,5,145,0,0,1939,1945,5,29,0,0,1940,1943,3,4,2,0,1941, - 1942,5,33,0,0,1942,1944,3,4,2,0,1943,1941,1,0,0,0,1943,1944,1,0,0,0,1944, - 1946,1,0,0,0,1945,1940,1,0,0,0,1945,1946,1,0,0,0,1946,1950,1,0,0,0,1947, - 1949,3,254,127,0,1948,1947,1,0,0,0,1949,1952,1,0,0,0,1950,1948,1,0,0,0, - 1950,1951,1,0,0,0,1951,1953,1,0,0,0,1952,1950,1,0,0,0,1953,1954,5,30,0, - 0,1954,253,1,0,0,0,1955,1983,5,146,0,0,1956,1983,5,223,0,0,1957,1983,5, - 56,0,0,1958,1983,5,57,0,0,1959,1983,5,147,0,0,1960,1983,5,148,0,0,1961, - 1983,5,248,0,0,1962,1983,5,249,0,0,1963,1983,5,250,0,0,1964,1983,5,251, - 0,0,1965,1966,5,149,0,0,1966,1967,5,74,0,0,1967,1983,5,150,0,0,1968,1969, - 5,149,0,0,1969,1970,5,74,0,0,1970,1983,5,151,0,0,1971,1972,5,152,0,0,1972, - 1973,5,74,0,0,1973,1983,5,150,0,0,1974,1975,5,152,0,0,1975,1976,5,74,0, - 0,1976,1983,5,151,0,0,1977,1978,5,69,0,0,1978,1979,5,29,0,0,1979,1980, - 3,28,14,0,1980,1981,5,30,0,0,1981,1983,1,0,0,0,1982,1955,1,0,0,0,1982, - 1956,1,0,0,0,1982,1957,1,0,0,0,1982,1958,1,0,0,0,1982,1959,1,0,0,0,1982, - 1960,1,0,0,0,1982,1961,1,0,0,0,1982,1962,1,0,0,0,1982,1963,1,0,0,0,1982, - 1964,1,0,0,0,1982,1965,1,0,0,0,1982,1968,1,0,0,0,1982,1971,1,0,0,0,1982, - 1974,1,0,0,0,1982,1977,1,0,0,0,1983,255,1,0,0,0,1984,1988,5,114,0,0,1985, - 1988,5,153,0,0,1986,1988,3,2,1,0,1987,1984,1,0,0,0,1987,1985,1,0,0,0,1987, - 1986,1,0,0,0,1988,257,1,0,0,0,1989,2010,5,1,0,0,1990,2010,5,2,0,0,1991, - 2010,5,3,0,0,1992,2010,5,4,0,0,1993,2010,5,247,0,0,1994,2010,5,5,0,0,1995, - 2010,5,6,0,0,1996,2010,5,7,0,0,1997,2010,5,8,0,0,1998,2010,5,9,0,0,1999, - 2010,5,10,0,0,2000,2010,5,11,0,0,2001,2010,5,12,0,0,2002,2010,5,13,0,0, - 2003,2010,5,14,0,0,2004,2005,5,69,0,0,2005,2006,5,29,0,0,2006,2007,3,28, - 14,0,2007,2008,5,30,0,0,2008,2010,1,0,0,0,2009,1989,1,0,0,0,2009,1990, - 1,0,0,0,2009,1991,1,0,0,0,2009,1992,1,0,0,0,2009,1993,1,0,0,0,2009,1994, - 1,0,0,0,2009,1995,1,0,0,0,2009,1996,1,0,0,0,2009,1997,1,0,0,0,2009,1998, - 1,0,0,0,2009,1999,1,0,0,0,2009,2000,1,0,0,0,2009,2001,1,0,0,0,2009,2002, - 1,0,0,0,2009,2003,1,0,0,0,2009,2004,1,0,0,0,2010,259,1,0,0,0,2011,2013, - 3,262,131,0,2012,2011,1,0,0,0,2013,2016,1,0,0,0,2014,2012,1,0,0,0,2014, - 2015,1,0,0,0,2015,261,1,0,0,0,2016,2014,1,0,0,0,2017,2126,3,122,61,0,2018, - 2019,5,297,0,0,2019,2126,3,28,14,0,2020,2126,3,270,135,0,2021,2022,5,298, - 0,0,2022,2126,3,28,14,0,2023,2024,5,301,0,0,2024,2126,3,130,65,0,2025, - 2026,5,301,0,0,2026,2027,5,154,0,0,2027,2126,3,130,65,0,2028,2126,5,299, - 0,0,2029,2126,5,300,0,0,2030,2126,3,288,144,0,2031,2126,3,264,132,0,2032, - 2126,3,166,83,0,2033,2126,3,84,42,0,2034,2126,3,24,12,0,2035,2126,3,266, - 133,0,2036,2126,3,36,18,0,2037,2038,5,302,0,0,2038,2039,5,41,0,0,2039, - 2040,3,28,14,0,2040,2041,5,42,0,0,2041,2126,1,0,0,0,2042,2043,5,302,0, - 0,2043,2044,5,41,0,0,2044,2045,3,28,14,0,2045,2046,5,42,0,0,2046,2047, - 5,33,0,0,2047,2048,3,0,0,0,2048,2126,1,0,0,0,2049,2050,5,304,0,0,2050, - 2051,3,28,14,0,2051,2052,5,74,0,0,2052,2053,3,28,14,0,2053,2126,1,0,0, - 0,2054,2055,5,303,0,0,2055,2056,3,142,71,0,2056,2057,5,173,0,0,2057,2058, - 3,256,128,0,2058,2126,1,0,0,0,2059,2060,5,303,0,0,2060,2061,5,226,0,0, - 2061,2062,3,184,92,0,2062,2063,3,156,78,0,2063,2064,3,142,71,0,2064,2065, - 5,173,0,0,2065,2066,3,256,128,0,2066,2067,3,208,104,0,2067,2068,3,130, - 65,0,2068,2126,1,0,0,0,2069,2126,3,268,134,0,2070,2071,5,257,0,0,2071, - 2072,5,193,0,0,2072,2073,5,41,0,0,2073,2074,3,28,14,0,2074,2078,5,42,0, - 0,2075,2077,3,334,167,0,2076,2075,1,0,0,0,2077,2080,1,0,0,0,2078,2076, - 1,0,0,0,2078,2079,1,0,0,0,2079,2126,1,0,0,0,2080,2078,1,0,0,0,2081,2082, - 5,257,0,0,2082,2083,5,193,0,0,2083,2087,3,2,1,0,2084,2086,3,334,167,0, - 2085,2084,1,0,0,0,2086,2089,1,0,0,0,2087,2085,1,0,0,0,2087,2088,1,0,0, - 0,2088,2126,1,0,0,0,2089,2087,1,0,0,0,2090,2091,5,257,0,0,2091,2092,5, - 258,0,0,2092,2093,5,41,0,0,2093,2094,3,28,14,0,2094,2095,5,42,0,0,2095, - 2096,5,27,0,0,2096,2100,3,142,71,0,2097,2099,3,334,167,0,2098,2097,1,0, - 0,0,2099,2102,1,0,0,0,2100,2098,1,0,0,0,2100,2101,1,0,0,0,2101,2126,1, - 0,0,0,2102,2100,1,0,0,0,2103,2104,5,257,0,0,2104,2105,5,258,0,0,2105,2106, - 3,2,1,0,2106,2107,5,27,0,0,2107,2111,3,142,71,0,2108,2110,3,334,167,0, - 2109,2108,1,0,0,0,2110,2113,1,0,0,0,2111,2109,1,0,0,0,2111,2112,1,0,0, - 0,2112,2126,1,0,0,0,2113,2111,1,0,0,0,2114,2115,5,257,0,0,2115,2116,5, - 41,0,0,2116,2117,3,28,14,0,2117,2118,5,42,0,0,2118,2122,3,220,110,0,2119, - 2121,3,334,167,0,2120,2119,1,0,0,0,2121,2124,1,0,0,0,2122,2120,1,0,0,0, - 2122,2123,1,0,0,0,2123,2126,1,0,0,0,2124,2122,1,0,0,0,2125,2017,1,0,0, - 0,2125,2018,1,0,0,0,2125,2020,1,0,0,0,2125,2021,1,0,0,0,2125,2023,1,0, - 0,0,2125,2025,1,0,0,0,2125,2028,1,0,0,0,2125,2029,1,0,0,0,2125,2030,1, - 0,0,0,2125,2031,1,0,0,0,2125,2032,1,0,0,0,2125,2033,1,0,0,0,2125,2034, - 1,0,0,0,2125,2035,1,0,0,0,2125,2036,1,0,0,0,2125,2037,1,0,0,0,2125,2042, - 1,0,0,0,2125,2049,1,0,0,0,2125,2054,1,0,0,0,2125,2059,1,0,0,0,2125,2069, - 1,0,0,0,2125,2070,1,0,0,0,2125,2081,1,0,0,0,2125,2090,1,0,0,0,2125,2103, - 1,0,0,0,2125,2114,1,0,0,0,2126,263,1,0,0,0,2127,2128,3,0,0,0,2128,2129, - 5,74,0,0,2129,265,1,0,0,0,2130,2133,3,40,20,0,2131,2133,3,42,21,0,2132, - 2130,1,0,0,0,2132,2131,1,0,0,0,2133,267,1,0,0,0,2134,2135,5,16,0,0,2135, - 2136,3,260,130,0,2136,2137,5,17,0,0,2137,269,1,0,0,0,2138,2139,3,274,137, - 0,2139,2140,3,272,136,0,2140,271,1,0,0,0,2141,2143,3,276,138,0,2142,2141, - 1,0,0,0,2143,2144,1,0,0,0,2144,2142,1,0,0,0,2144,2145,1,0,0,0,2145,273, - 1,0,0,0,2146,2147,5,155,0,0,2147,2159,3,268,134,0,2148,2149,5,155,0,0, - 2149,2150,3,0,0,0,2150,2151,5,156,0,0,2151,2152,3,0,0,0,2152,2159,1,0, - 0,0,2153,2154,5,155,0,0,2154,2155,3,28,14,0,2155,2156,5,156,0,0,2156,2157, - 3,28,14,0,2157,2159,1,0,0,0,2158,2146,1,0,0,0,2158,2148,1,0,0,0,2158,2153, - 1,0,0,0,2159,275,1,0,0,0,2160,2161,3,280,140,0,2161,2162,3,286,143,0,2162, - 2173,1,0,0,0,2163,2164,3,278,139,0,2164,2165,3,286,143,0,2165,2173,1,0, - 0,0,2166,2167,3,282,141,0,2167,2168,3,286,143,0,2168,2173,1,0,0,0,2169, - 2170,3,284,142,0,2170,2171,3,286,143,0,2171,2173,1,0,0,0,2172,2160,1,0, - 0,0,2172,2163,1,0,0,0,2172,2166,1,0,0,0,2172,2169,1,0,0,0,2173,277,1,0, - 0,0,2174,2175,5,157,0,0,2175,2181,3,268,134,0,2176,2177,5,157,0,0,2177, - 2181,3,0,0,0,2178,2179,5,157,0,0,2179,2181,3,28,14,0,2180,2174,1,0,0,0, - 2180,2176,1,0,0,0,2180,2178,1,0,0,0,2181,279,1,0,0,0,2182,2183,5,158,0, - 0,2183,2184,3,142,71,0,2184,281,1,0,0,0,2185,2186,5,159,0,0,2186,283,1, - 0,0,0,2187,2188,5,160,0,0,2188,285,1,0,0,0,2189,2201,3,268,134,0,2190, - 2191,5,161,0,0,2191,2192,3,0,0,0,2192,2193,5,156,0,0,2193,2194,3,0,0,0, - 2194,2201,1,0,0,0,2195,2196,5,161,0,0,2196,2197,3,28,14,0,2197,2198,5, - 156,0,0,2198,2199,3,28,14,0,2199,2201,1,0,0,0,2200,2189,1,0,0,0,2200,2190, - 1,0,0,0,2200,2195,1,0,0,0,2201,287,1,0,0,0,2202,2203,3,290,145,0,2203, - 2204,3,294,147,0,2204,289,1,0,0,0,2205,2206,5,162,0,0,2206,2207,3,292, - 146,0,2207,2208,3,0,0,0,2208,2209,5,35,0,0,2209,2213,1,0,0,0,2210,2211, - 5,162,0,0,2211,2213,3,292,146,0,2212,2205,1,0,0,0,2212,2210,1,0,0,0,2213, - 291,1,0,0,0,2214,2218,1,0,0,0,2215,2218,5,163,0,0,2216,2218,5,2,0,0,2217, - 2214,1,0,0,0,2217,2215,1,0,0,0,2217,2216,1,0,0,0,2218,293,1,0,0,0,2219, - 2220,5,16,0,0,2220,2221,3,296,148,0,2221,2222,5,17,0,0,2222,2225,1,0,0, - 0,2223,2225,3,300,150,0,2224,2219,1,0,0,0,2224,2223,1,0,0,0,2225,295,1, - 0,0,0,2226,2227,3,300,150,0,2227,2228,5,27,0,0,2228,2230,1,0,0,0,2229, - 2226,1,0,0,0,2230,2233,1,0,0,0,2231,2229,1,0,0,0,2231,2232,1,0,0,0,2232, - 2234,1,0,0,0,2233,2231,1,0,0,0,2234,2235,3,300,150,0,2235,297,1,0,0,0, - 2236,2242,1,0,0,0,2237,2238,5,41,0,0,2238,2239,3,28,14,0,2239,2240,5,42, - 0,0,2240,2242,1,0,0,0,2241,2236,1,0,0,0,2241,2237,1,0,0,0,2242,299,1,0, - 0,0,2243,2244,5,178,0,0,2244,2245,5,264,0,0,2245,2246,5,29,0,0,2246,2247, - 3,4,2,0,2247,2248,5,30,0,0,2248,2308,1,0,0,0,2249,2250,5,262,0,0,2250, - 2251,5,29,0,0,2251,2252,3,0,0,0,2252,2253,5,30,0,0,2253,2308,1,0,0,0,2254, - 2255,5,83,0,0,2255,2256,5,29,0,0,2256,2257,3,304,152,0,2257,2258,5,30, - 0,0,2258,2308,1,0,0,0,2259,2260,5,185,0,0,2260,2261,5,29,0,0,2261,2262, - 3,32,16,0,2262,2263,5,30,0,0,2263,2264,3,298,149,0,2264,2308,1,0,0,0,2265, - 2266,5,186,0,0,2266,2267,5,29,0,0,2267,2268,3,32,16,0,2268,2269,5,30,0, - 0,2269,2270,3,298,149,0,2270,2308,1,0,0,0,2271,2272,5,184,0,0,2272,2273, - 5,29,0,0,2273,2274,3,30,15,0,2274,2275,5,30,0,0,2275,2276,3,298,149,0, - 2276,2308,1,0,0,0,2277,2278,5,183,0,0,2278,2279,5,29,0,0,2279,2280,3,28, - 14,0,2280,2281,5,30,0,0,2281,2282,3,298,149,0,2282,2308,1,0,0,0,2283,2284, - 5,182,0,0,2284,2285,5,29,0,0,2285,2286,3,28,14,0,2286,2287,5,30,0,0,2287, - 2288,3,298,149,0,2288,2308,1,0,0,0,2289,2290,5,181,0,0,2290,2291,5,29, - 0,0,2291,2292,3,28,14,0,2292,2293,5,30,0,0,2293,2294,3,298,149,0,2294, - 2308,1,0,0,0,2295,2296,5,185,0,0,2296,2308,3,298,149,0,2297,2298,5,186, - 0,0,2298,2308,3,298,149,0,2299,2300,5,184,0,0,2300,2308,3,298,149,0,2301, - 2302,5,183,0,0,2302,2308,3,298,149,0,2303,2304,5,182,0,0,2304,2308,3,298, - 149,0,2305,2306,5,181,0,0,2306,2308,3,298,149,0,2307,2243,1,0,0,0,2307, - 2249,1,0,0,0,2307,2254,1,0,0,0,2307,2259,1,0,0,0,2307,2265,1,0,0,0,2307, - 2271,1,0,0,0,2307,2277,1,0,0,0,2307,2283,1,0,0,0,2307,2289,1,0,0,0,2307, - 2295,1,0,0,0,2307,2297,1,0,0,0,2307,2299,1,0,0,0,2307,2301,1,0,0,0,2307, - 2303,1,0,0,0,2307,2305,1,0,0,0,2308,301,1,0,0,0,2309,2310,5,185,0,0,2310, - 2311,5,29,0,0,2311,2312,3,32,16,0,2312,2313,5,30,0,0,2313,2385,1,0,0,0, - 2314,2315,5,186,0,0,2315,2316,5,29,0,0,2316,2317,3,32,16,0,2317,2318,5, - 30,0,0,2318,2385,1,0,0,0,2319,2320,5,185,0,0,2320,2321,5,29,0,0,2321,2322, - 3,28,14,0,2322,2323,5,30,0,0,2323,2385,1,0,0,0,2324,2325,5,186,0,0,2325, - 2326,5,29,0,0,2326,2327,3,30,15,0,2327,2328,5,30,0,0,2328,2385,1,0,0,0, - 2329,2330,5,184,0,0,2330,2331,5,29,0,0,2331,2332,3,30,15,0,2332,2333,5, - 30,0,0,2333,2385,1,0,0,0,2334,2335,5,183,0,0,2335,2336,5,29,0,0,2336,2337, - 3,28,14,0,2337,2338,5,30,0,0,2338,2385,1,0,0,0,2339,2340,5,182,0,0,2340, - 2341,5,29,0,0,2341,2342,3,28,14,0,2342,2343,5,30,0,0,2343,2385,1,0,0,0, - 2344,2345,5,181,0,0,2345,2346,5,29,0,0,2346,2347,3,28,14,0,2347,2348,5, - 30,0,0,2348,2385,1,0,0,0,2349,2350,5,190,0,0,2350,2351,5,29,0,0,2351,2352, - 3,30,15,0,2352,2353,5,30,0,0,2353,2385,1,0,0,0,2354,2355,5,189,0,0,2355, - 2356,5,29,0,0,2356,2357,3,28,14,0,2357,2358,5,30,0,0,2358,2385,1,0,0,0, - 2359,2360,5,188,0,0,2360,2361,5,29,0,0,2361,2362,3,28,14,0,2362,2363,5, - 30,0,0,2363,2385,1,0,0,0,2364,2365,5,187,0,0,2365,2366,5,29,0,0,2366,2367, - 3,28,14,0,2367,2368,5,30,0,0,2368,2385,1,0,0,0,2369,2370,5,178,0,0,2370, - 2371,5,29,0,0,2371,2372,3,28,14,0,2372,2373,5,30,0,0,2373,2385,1,0,0,0, - 2374,2375,5,180,0,0,2375,2376,5,29,0,0,2376,2377,3,176,88,0,2377,2378, - 5,30,0,0,2378,2385,1,0,0,0,2379,2380,5,83,0,0,2380,2381,5,29,0,0,2381, - 2382,3,304,152,0,2382,2383,5,30,0,0,2383,2385,1,0,0,0,2384,2309,1,0,0, - 0,2384,2314,1,0,0,0,2384,2319,1,0,0,0,2384,2324,1,0,0,0,2384,2329,1,0, - 0,0,2384,2334,1,0,0,0,2384,2339,1,0,0,0,2384,2344,1,0,0,0,2384,2349,1, - 0,0,0,2384,2354,1,0,0,0,2384,2359,1,0,0,0,2384,2364,1,0,0,0,2384,2369, - 1,0,0,0,2384,2374,1,0,0,0,2384,2379,1,0,0,0,2385,303,1,0,0,0,2386,2388, - 3,306,153,0,2387,2386,1,0,0,0,2388,2391,1,0,0,0,2389,2387,1,0,0,0,2389, - 2390,1,0,0,0,2390,305,1,0,0,0,2391,2389,1,0,0,0,2392,2394,5,172,0,0,2393, - 2392,1,0,0,0,2394,2395,1,0,0,0,2395,2393,1,0,0,0,2395,2396,1,0,0,0,2396, - 307,1,0,0,0,2397,2401,3,302,151,0,2398,2401,3,4,2,0,2399,2401,5,176,0, - 0,2400,2397,1,0,0,0,2400,2398,1,0,0,0,2400,2399,1,0,0,0,2401,309,1,0,0, - 0,2402,2551,3,302,151,0,2403,2404,5,179,0,0,2404,2405,5,29,0,0,2405,2406, - 5,176,0,0,2406,2551,5,30,0,0,2407,2408,5,179,0,0,2408,2409,5,29,0,0,2409, - 2410,5,266,0,0,2410,2551,5,30,0,0,2411,2412,5,193,0,0,2412,2413,5,29,0, - 0,2413,2414,5,38,0,0,2414,2415,5,266,0,0,2415,2551,5,30,0,0,2416,2417, - 5,193,0,0,2417,2418,5,29,0,0,2418,2419,3,134,67,0,2419,2420,5,30,0,0,2420, - 2551,1,0,0,0,2421,2422,5,193,0,0,2422,2423,5,29,0,0,2423,2424,5,176,0, - 0,2424,2551,5,30,0,0,2425,2426,5,194,0,0,2426,2427,5,29,0,0,2427,2428, - 3,310,155,0,2428,2429,5,30,0,0,2429,2551,1,0,0,0,2430,2431,5,185,0,0,2431, - 2432,5,41,0,0,2432,2433,3,28,14,0,2433,2434,5,42,0,0,2434,2435,5,29,0, - 0,2435,2436,3,312,156,0,2436,2437,5,30,0,0,2437,2551,1,0,0,0,2438,2439, - 5,186,0,0,2439,2440,5,41,0,0,2440,2441,3,28,14,0,2441,2442,5,42,0,0,2442, - 2443,5,29,0,0,2443,2444,3,314,157,0,2444,2445,5,30,0,0,2445,2551,1,0,0, - 0,2446,2447,5,184,0,0,2447,2448,5,41,0,0,2448,2449,3,28,14,0,2449,2450, - 5,42,0,0,2450,2451,5,29,0,0,2451,2452,3,316,158,0,2452,2453,5,30,0,0,2453, - 2551,1,0,0,0,2454,2455,5,183,0,0,2455,2456,5,41,0,0,2456,2457,3,28,14, - 0,2457,2458,5,42,0,0,2458,2459,5,29,0,0,2459,2460,3,318,159,0,2460,2461, - 5,30,0,0,2461,2551,1,0,0,0,2462,2463,5,182,0,0,2463,2464,5,41,0,0,2464, - 2465,3,28,14,0,2465,2466,5,42,0,0,2466,2467,5,29,0,0,2467,2468,3,320,160, - 0,2468,2469,5,30,0,0,2469,2551,1,0,0,0,2470,2471,5,181,0,0,2471,2472,5, - 41,0,0,2472,2473,3,28,14,0,2473,2474,5,42,0,0,2474,2475,5,29,0,0,2475, - 2476,3,322,161,0,2476,2477,5,30,0,0,2477,2551,1,0,0,0,2478,2479,5,190, - 0,0,2479,2480,5,41,0,0,2480,2481,3,28,14,0,2481,2482,5,42,0,0,2482,2483, - 5,29,0,0,2483,2484,3,316,158,0,2484,2485,5,30,0,0,2485,2551,1,0,0,0,2486, - 2487,5,189,0,0,2487,2488,5,41,0,0,2488,2489,3,28,14,0,2489,2490,5,42,0, - 0,2490,2491,5,29,0,0,2491,2492,3,318,159,0,2492,2493,5,30,0,0,2493,2551, - 1,0,0,0,2494,2495,5,188,0,0,2495,2496,5,41,0,0,2496,2497,3,28,14,0,2497, - 2498,5,42,0,0,2498,2499,5,29,0,0,2499,2500,3,320,160,0,2500,2501,5,30, - 0,0,2501,2551,1,0,0,0,2502,2503,5,187,0,0,2503,2504,5,41,0,0,2504,2505, - 3,28,14,0,2505,2506,5,42,0,0,2506,2507,5,29,0,0,2507,2508,3,322,161,0, - 2508,2509,5,30,0,0,2509,2551,1,0,0,0,2510,2511,5,178,0,0,2511,2512,5,41, - 0,0,2512,2513,3,28,14,0,2513,2514,5,42,0,0,2514,2515,5,29,0,0,2515,2516, - 3,320,160,0,2516,2517,5,30,0,0,2517,2551,1,0,0,0,2518,2519,5,180,0,0,2519, - 2520,5,41,0,0,2520,2521,3,28,14,0,2521,2522,5,42,0,0,2522,2523,5,29,0, - 0,2523,2524,3,324,162,0,2524,2525,5,30,0,0,2525,2551,1,0,0,0,2526,2527, - 5,179,0,0,2527,2528,5,41,0,0,2528,2529,3,28,14,0,2529,2530,5,42,0,0,2530, - 2531,5,29,0,0,2531,2532,3,326,163,0,2532,2533,5,30,0,0,2533,2551,1,0,0, - 0,2534,2535,5,193,0,0,2535,2536,5,41,0,0,2536,2537,3,28,14,0,2537,2538, - 5,42,0,0,2538,2539,5,29,0,0,2539,2540,3,328,164,0,2540,2541,5,30,0,0,2541, - 2551,1,0,0,0,2542,2543,5,194,0,0,2543,2544,5,41,0,0,2544,2545,3,28,14, - 0,2545,2546,5,42,0,0,2546,2547,5,29,0,0,2547,2548,3,332,166,0,2548,2549, - 5,30,0,0,2549,2551,1,0,0,0,2550,2402,1,0,0,0,2550,2403,1,0,0,0,2550,2407, - 1,0,0,0,2550,2411,1,0,0,0,2550,2416,1,0,0,0,2550,2421,1,0,0,0,2550,2425, - 1,0,0,0,2550,2430,1,0,0,0,2550,2438,1,0,0,0,2550,2446,1,0,0,0,2550,2454, - 1,0,0,0,2550,2462,1,0,0,0,2550,2470,1,0,0,0,2550,2478,1,0,0,0,2550,2486, - 1,0,0,0,2550,2494,1,0,0,0,2550,2502,1,0,0,0,2550,2510,1,0,0,0,2550,2518, - 1,0,0,0,2550,2526,1,0,0,0,2550,2534,1,0,0,0,2550,2542,1,0,0,0,2551,311, - 1,0,0,0,2552,2555,3,32,16,0,2553,2555,3,28,14,0,2554,2552,1,0,0,0,2554, - 2553,1,0,0,0,2555,2558,1,0,0,0,2556,2554,1,0,0,0,2556,2557,1,0,0,0,2557, - 313,1,0,0,0,2558,2556,1,0,0,0,2559,2562,3,32,16,0,2560,2562,3,30,15,0, - 2561,2559,1,0,0,0,2561,2560,1,0,0,0,2562,2565,1,0,0,0,2563,2561,1,0,0, - 0,2563,2564,1,0,0,0,2564,315,1,0,0,0,2565,2563,1,0,0,0,2566,2568,3,30, - 15,0,2567,2566,1,0,0,0,2568,2571,1,0,0,0,2569,2567,1,0,0,0,2569,2570,1, - 0,0,0,2570,317,1,0,0,0,2571,2569,1,0,0,0,2572,2574,3,28,14,0,2573,2572, - 1,0,0,0,2574,2577,1,0,0,0,2575,2573,1,0,0,0,2575,2576,1,0,0,0,2576,319, - 1,0,0,0,2577,2575,1,0,0,0,2578,2580,3,28,14,0,2579,2578,1,0,0,0,2580,2583, - 1,0,0,0,2581,2579,1,0,0,0,2581,2582,1,0,0,0,2582,321,1,0,0,0,2583,2581, - 1,0,0,0,2584,2586,3,28,14,0,2585,2584,1,0,0,0,2586,2589,1,0,0,0,2587,2585, - 1,0,0,0,2587,2588,1,0,0,0,2588,323,1,0,0,0,2589,2587,1,0,0,0,2590,2592, - 3,176,88,0,2591,2590,1,0,0,0,2592,2595,1,0,0,0,2593,2591,1,0,0,0,2593, - 2594,1,0,0,0,2594,325,1,0,0,0,2595,2593,1,0,0,0,2596,2598,7,11,0,0,2597, - 2596,1,0,0,0,2598,2601,1,0,0,0,2599,2597,1,0,0,0,2599,2600,1,0,0,0,2600, - 327,1,0,0,0,2601,2599,1,0,0,0,2602,2604,3,330,165,0,2603,2602,1,0,0,0, - 2604,2607,1,0,0,0,2605,2603,1,0,0,0,2605,2606,1,0,0,0,2606,329,1,0,0,0, - 2607,2605,1,0,0,0,2608,2613,5,176,0,0,2609,2610,5,38,0,0,2610,2613,5,266, - 0,0,2611,2613,3,134,67,0,2612,2608,1,0,0,0,2612,2609,1,0,0,0,2612,2611, - 1,0,0,0,2613,331,1,0,0,0,2614,2616,3,310,155,0,2615,2614,1,0,0,0,2616, - 2619,1,0,0,0,2617,2615,1,0,0,0,2617,2618,1,0,0,0,2618,333,1,0,0,0,2619, - 2617,1,0,0,0,2620,2624,3,40,20,0,2621,2624,3,42,21,0,2622,2624,3,2,1,0, - 2623,2620,1,0,0,0,2623,2621,1,0,0,0,2623,2622,1,0,0,0,2624,335,1,0,0,0, - 2625,2626,5,164,0,0,2626,2627,5,35,0,0,2627,2628,5,29,0,0,2628,2629,3, - 304,152,0,2629,2630,5,30,0,0,2630,2651,1,0,0,0,2631,2632,5,165,0,0,2632, - 2633,3,34,17,0,2633,2634,5,74,0,0,2634,2635,3,34,17,0,2635,2636,5,74,0, - 0,2636,2637,3,34,17,0,2637,2638,5,74,0,0,2638,2639,3,34,17,0,2639,2651, - 1,0,0,0,2640,2641,5,166,0,0,2641,2651,3,4,2,0,2642,2643,5,166,0,0,2643, - 2644,5,35,0,0,2644,2645,5,29,0,0,2645,2646,3,304,152,0,2646,2647,5,30, - 0,0,2647,2651,1,0,0,0,2648,2651,3,334,167,0,2649,2651,3,36,18,0,2650,2625, - 1,0,0,0,2650,2631,1,0,0,0,2650,2640,1,0,0,0,2650,2642,1,0,0,0,2650,2648, - 1,0,0,0,2650,2649,1,0,0,0,2651,337,1,0,0,0,2652,2653,5,24,0,0,2653,2654, - 5,39,0,0,2654,2655,3,94,47,0,2655,2656,3,2,1,0,2656,2665,1,0,0,0,2657, - 2658,5,24,0,0,2658,2659,5,39,0,0,2659,2660,3,94,47,0,2660,2661,3,2,1,0, - 2661,2662,5,33,0,0,2662,2663,3,2,1,0,2663,2665,1,0,0,0,2664,2652,1,0,0, - 0,2664,2657,1,0,0,0,2665,339,1,0,0,0,2666,2668,3,342,171,0,2667,2666,1, - 0,0,0,2668,2671,1,0,0,0,2669,2667,1,0,0,0,2669,2670,1,0,0,0,2670,341,1, - 0,0,0,2671,2669,1,0,0,0,2672,2673,5,177,0,0,2673,2674,5,35,0,0,2674,2675, - 5,29,0,0,2675,2676,3,304,152,0,2676,2677,5,30,0,0,2677,2687,1,0,0,0,2678, - 2687,3,336,168,0,2679,2680,5,167,0,0,2680,2681,5,35,0,0,2681,2682,5,29, - 0,0,2682,2683,3,304,152,0,2683,2684,5,30,0,0,2684,2687,1,0,0,0,2685,2687, - 5,54,0,0,2686,2672,1,0,0,0,2686,2678,1,0,0,0,2686,2679,1,0,0,0,2686,2685, - 1,0,0,0,2687,343,1,0,0,0,2688,2689,5,49,0,0,2689,2693,5,39,0,0,2690,2692, - 3,348,174,0,2691,2690,1,0,0,0,2692,2695,1,0,0,0,2693,2691,1,0,0,0,2693, - 2694,1,0,0,0,2694,2696,1,0,0,0,2695,2693,1,0,0,0,2696,2697,3,2,1,0,2697, - 345,1,0,0,0,2698,2702,5,302,0,0,2699,2701,3,348,174,0,2700,2699,1,0,0, - 0,2701,2704,1,0,0,0,2702,2700,1,0,0,0,2702,2703,1,0,0,0,2703,2705,1,0, - 0,0,2704,2702,1,0,0,0,2705,2706,3,2,1,0,2706,347,1,0,0,0,2707,2723,5,51, - 0,0,2708,2723,5,50,0,0,2709,2723,5,168,0,0,2710,2711,5,61,0,0,2711,2723, - 5,50,0,0,2712,2713,5,61,0,0,2713,2723,5,51,0,0,2714,2715,5,61,0,0,2715, - 2723,5,62,0,0,2716,2717,5,61,0,0,2717,2723,5,63,0,0,2718,2719,5,61,0,0, - 2719,2723,5,64,0,0,2720,2721,5,61,0,0,2721,2723,5,65,0,0,2722,2707,1,0, - 0,0,2722,2708,1,0,0,0,2722,2709,1,0,0,0,2722,2710,1,0,0,0,2722,2712,1, - 0,0,0,2722,2714,1,0,0,0,2722,2716,1,0,0,0,2722,2718,1,0,0,0,2722,2720, - 1,0,0,0,2723,349,1,0,0,0,2724,2726,3,352,176,0,2725,2724,1,0,0,0,2726, - 2729,1,0,0,0,2727,2725,1,0,0,0,2727,2728,1,0,0,0,2728,351,1,0,0,0,2729, - 2727,1,0,0,0,2730,2731,5,20,0,0,2731,2744,3,2,1,0,2732,2733,5,49,0,0,2733, - 2734,5,39,0,0,2734,2744,3,136,68,0,2735,2736,5,24,0,0,2736,2737,5,39,0, - 0,2737,2744,3,2,1,0,2738,2744,3,188,94,0,2739,2740,5,49,0,0,2740,2744, - 3,28,14,0,2741,2744,3,334,167,0,2742,2744,3,36,18,0,2743,2730,1,0,0,0, - 2743,2732,1,0,0,0,2743,2735,1,0,0,0,2743,2738,1,0,0,0,2743,2739,1,0,0, - 0,2743,2741,1,0,0,0,2743,2742,1,0,0,0,2744,353,1,0,0,0,2745,2749,5,276, - 0,0,2746,2748,3,356,178,0,2747,2746,1,0,0,0,2748,2751,1,0,0,0,2749,2747, - 1,0,0,0,2749,2750,1,0,0,0,2750,2752,1,0,0,0,2751,2749,1,0,0,0,2752,2765, - 3,2,1,0,2753,2757,5,276,0,0,2754,2756,3,356,178,0,2755,2754,1,0,0,0,2756, - 2759,1,0,0,0,2757,2755,1,0,0,0,2757,2758,1,0,0,0,2758,2760,1,0,0,0,2759, - 2757,1,0,0,0,2760,2761,3,2,1,0,2761,2762,5,33,0,0,2762,2763,3,2,1,0,2763, - 2765,1,0,0,0,2764,2745,1,0,0,0,2764,2753,1,0,0,0,2765,355,1,0,0,0,2766, - 2767,7,12,0,0,2767,357,1,0,0,0,2768,2770,3,360,180,0,2769,2768,1,0,0,0, - 2770,2773,1,0,0,0,2771,2769,1,0,0,0,2771,2772,1,0,0,0,2772,359,1,0,0,0, - 2773,2771,1,0,0,0,2774,2775,5,20,0,0,2775,2776,3,2,1,0,2776,2777,5,43, - 0,0,2777,2778,3,28,14,0,2778,2785,1,0,0,0,2779,2780,5,24,0,0,2780,2781, - 5,39,0,0,2781,2785,3,2,1,0,2782,2785,3,334,167,0,2783,2785,3,36,18,0,2784, - 2774,1,0,0,0,2784,2779,1,0,0,0,2784,2782,1,0,0,0,2784,2783,1,0,0,0,2785, - 361,1,0,0,0,167,369,373,379,387,439,478,485,505,509,527,554,577,613,619, - 626,628,638,640,647,658,666,687,689,705,750,755,760,765,773,851,857,873, - 879,885,892,997,1004,1006,1011,1013,1021,1033,1045,1052,1064,1091,1098, - 1106,1114,1127,1134,1137,1156,1239,1248,1255,1258,1266,1286,1318,1332, - 1357,1374,1382,1386,1401,1408,1453,1463,1479,1491,1503,1517,1529,1540, - 1547,1557,1570,1575,1580,1589,1600,1683,1692,1705,1716,1724,1734,1736, - 1762,1767,1772,1779,1785,1795,1799,1806,1821,1827,1841,1854,1862,1869, - 1874,1890,1895,1897,1910,1936,1943,1945,1950,1982,1987,2009,2014,2078, - 2087,2100,2111,2122,2125,2132,2144,2158,2172,2180,2200,2212,2217,2224, - 2231,2241,2307,2384,2389,2395,2400,2550,2554,2556,2561,2563,2569,2575, - 2581,2587,2593,2599,2605,2612,2617,2623,2650,2664,2669,2686,2693,2702, - 2722,2727,2743,2749,2757,2764,2771,2784 + 1,0,0,0,1101,1102,3,168,84,0,1102,1103,5,42,0,0,1103,133,1,0,0,0,1104, + 1110,5,29,0,0,1105,1106,3,136,68,0,1106,1107,5,27,0,0,1107,1109,1,0,0, + 0,1108,1105,1,0,0,0,1109,1112,1,0,0,0,1110,1108,1,0,0,0,1110,1111,1,0, + 0,0,1111,1113,1,0,0,0,1112,1110,1,0,0,0,1113,1114,3,136,68,0,1114,1115, + 5,30,0,0,1115,1118,1,0,0,0,1116,1118,5,84,0,0,1117,1104,1,0,0,0,1117,1116, + 1,0,0,0,1118,135,1,0,0,0,1119,1127,5,176,0,0,1120,1121,3,252,126,0,1121, + 1122,3,160,80,0,1122,1124,3,248,124,0,1123,1125,3,0,0,0,1124,1123,1,0, + 0,0,1124,1125,1,0,0,0,1125,1127,1,0,0,0,1126,1119,1,0,0,0,1126,1120,1, + 0,0,0,1127,137,1,0,0,0,1128,1129,5,41,0,0,1129,1130,3,2,1,0,1130,1131, + 5,42,0,0,1131,1132,3,140,70,0,1132,1154,1,0,0,0,1133,1134,5,41,0,0,1134, + 1135,3,196,98,0,1135,1136,5,42,0,0,1136,1137,3,140,70,0,1137,1154,1,0, + 0,0,1138,1139,5,41,0,0,1139,1140,5,261,0,0,1140,1141,5,42,0,0,1141,1154, + 3,140,70,0,1142,1143,5,41,0,0,1143,1144,5,197,0,0,1144,1145,3,2,1,0,1145, + 1146,5,42,0,0,1146,1147,3,140,70,0,1147,1154,1,0,0,0,1148,1154,3,140,70, + 0,1149,1154,3,196,98,0,1150,1154,5,256,0,0,1151,1154,5,257,0,0,1152,1154, + 5,258,0,0,1153,1128,1,0,0,0,1153,1133,1,0,0,0,1153,1138,1,0,0,0,1153,1142, + 1,0,0,0,1153,1148,1,0,0,0,1153,1149,1,0,0,0,1153,1150,1,0,0,0,1153,1151, + 1,0,0,0,1153,1152,1,0,0,0,1154,139,1,0,0,0,1155,1156,3,2,1,0,1156,1157, + 5,87,0,0,1157,1159,1,0,0,0,1158,1155,1,0,0,0,1159,1162,1,0,0,0,1160,1158, + 1,0,0,0,1160,1161,1,0,0,0,1161,1163,1,0,0,0,1162,1160,1,0,0,0,1163,1164, + 3,2,1,0,1164,141,1,0,0,0,1165,1167,3,144,72,0,1166,1165,1,0,0,0,1167,1170, + 1,0,0,0,1168,1166,1,0,0,0,1168,1169,1,0,0,0,1169,143,1,0,0,0,1170,1168, + 1,0,0,0,1171,1172,5,179,0,0,1172,1173,5,88,0,0,1173,1177,3,32,16,0,1174, + 1177,3,174,87,0,1175,1177,3,344,172,0,1176,1171,1,0,0,0,1176,1174,1,0, + 0,0,1176,1175,1,0,0,0,1177,145,1,0,0,0,1178,1190,3,138,69,0,1179,1180, + 5,41,0,0,1180,1181,3,2,1,0,1181,1182,5,42,0,0,1182,1190,1,0,0,0,1183,1184, + 5,41,0,0,1184,1185,5,197,0,0,1185,1186,3,2,1,0,1186,1187,5,42,0,0,1187, + 1190,1,0,0,0,1188,1190,3,160,80,0,1189,1178,1,0,0,0,1189,1179,1,0,0,0, + 1189,1183,1,0,0,0,1189,1188,1,0,0,0,1190,147,1,0,0,0,1191,1200,1,0,0,0, + 1192,1196,3,152,76,0,1193,1195,3,150,75,0,1194,1193,1,0,0,0,1195,1198, + 1,0,0,0,1196,1194,1,0,0,0,1196,1197,1,0,0,0,1197,1200,1,0,0,0,1198,1196, + 1,0,0,0,1199,1191,1,0,0,0,1199,1192,1,0,0,0,1200,149,1,0,0,0,1201,1219, + 5,261,0,0,1202,1219,5,260,0,0,1203,1204,5,41,0,0,1204,1205,3,32,16,0,1205, + 1206,5,42,0,0,1206,1219,1,0,0,0,1207,1208,5,41,0,0,1208,1209,3,32,16,0, + 1209,1210,5,265,0,0,1210,1211,3,32,16,0,1211,1212,5,42,0,0,1212,1219,1, + 0,0,0,1213,1214,5,41,0,0,1214,1215,5,265,0,0,1215,1216,3,32,16,0,1216, + 1217,5,42,0,0,1217,1219,1,0,0,0,1218,1201,1,0,0,0,1218,1202,1,0,0,0,1218, + 1203,1,0,0,0,1218,1207,1,0,0,0,1218,1213,1,0,0,0,1219,151,1,0,0,0,1220, + 1305,1,0,0,0,1221,1222,5,202,0,0,1222,1223,5,29,0,0,1223,1224,3,6,3,0, + 1224,1225,5,27,0,0,1225,1226,3,6,3,0,1226,1227,5,27,0,0,1227,1228,3,6, + 3,0,1228,1229,5,27,0,0,1229,1230,3,6,3,0,1230,1231,5,30,0,0,1231,1305, + 1,0,0,0,1232,1233,5,202,0,0,1233,1234,5,29,0,0,1234,1235,3,6,3,0,1235, + 1236,5,27,0,0,1236,1237,3,6,3,0,1237,1238,5,30,0,0,1238,1305,1,0,0,0,1239, + 1240,5,203,0,0,1240,1241,5,204,0,0,1241,1242,5,41,0,0,1242,1243,3,32,16, + 0,1243,1244,5,42,0,0,1244,1305,1,0,0,0,1245,1246,5,203,0,0,1246,1247,5, + 205,0,0,1247,1248,5,41,0,0,1248,1249,3,32,16,0,1249,1250,5,42,0,0,1250, + 1251,3,148,74,0,1251,1305,1,0,0,0,1252,1305,5,206,0,0,1253,1305,5,207, + 0,0,1254,1305,5,208,0,0,1255,1305,5,200,0,0,1256,1305,5,182,0,0,1257,1305, + 5,183,0,0,1258,1305,5,184,0,0,1259,1305,5,185,0,0,1260,1305,5,186,0,0, + 1261,1305,5,187,0,0,1262,1305,5,188,0,0,1263,1305,5,209,0,0,1264,1305, + 5,189,0,0,1265,1305,5,190,0,0,1266,1305,5,191,0,0,1267,1305,5,192,0,0, + 1268,1305,5,210,0,0,1269,1305,5,211,0,0,1270,1305,5,212,0,0,1271,1305, + 5,213,0,0,1272,1305,5,214,0,0,1273,1305,5,215,0,0,1274,1305,5,216,0,0, + 1275,1276,5,217,0,0,1276,1305,3,154,77,0,1277,1278,5,218,0,0,1278,1305, + 3,154,77,0,1279,1305,5,219,0,0,1280,1281,5,220,0,0,1281,1305,3,154,77, + 0,1282,1283,5,221,0,0,1283,1305,3,156,78,0,1284,1285,5,221,0,0,1285,1286, + 3,156,78,0,1286,1287,5,27,0,0,1287,1288,3,6,3,0,1288,1305,1,0,0,0,1289, + 1305,5,193,0,0,1290,1305,5,194,0,0,1291,1292,5,61,0,0,1292,1305,5,219, + 0,0,1293,1305,5,222,0,0,1294,1295,5,223,0,0,1295,1305,5,212,0,0,1296,1305, + 5,224,0,0,1297,1298,5,206,0,0,1298,1305,5,182,0,0,1299,1305,5,225,0,0, + 1300,1305,5,227,0,0,1301,1302,5,33,0,0,1302,1305,5,226,0,0,1303,1305,3, + 2,1,0,1304,1220,1,0,0,0,1304,1221,1,0,0,0,1304,1232,1,0,0,0,1304,1239, + 1,0,0,0,1304,1245,1,0,0,0,1304,1252,1,0,0,0,1304,1253,1,0,0,0,1304,1254, + 1,0,0,0,1304,1255,1,0,0,0,1304,1256,1,0,0,0,1304,1257,1,0,0,0,1304,1258, + 1,0,0,0,1304,1259,1,0,0,0,1304,1260,1,0,0,0,1304,1261,1,0,0,0,1304,1262, + 1,0,0,0,1304,1263,1,0,0,0,1304,1264,1,0,0,0,1304,1265,1,0,0,0,1304,1266, + 1,0,0,0,1304,1267,1,0,0,0,1304,1268,1,0,0,0,1304,1269,1,0,0,0,1304,1270, + 1,0,0,0,1304,1271,1,0,0,0,1304,1272,1,0,0,0,1304,1273,1,0,0,0,1304,1274, + 1,0,0,0,1304,1275,1,0,0,0,1304,1277,1,0,0,0,1304,1279,1,0,0,0,1304,1280, + 1,0,0,0,1304,1282,1,0,0,0,1304,1284,1,0,0,0,1304,1289,1,0,0,0,1304,1290, + 1,0,0,0,1304,1291,1,0,0,0,1304,1293,1,0,0,0,1304,1294,1,0,0,0,1304,1296, + 1,0,0,0,1304,1297,1,0,0,0,1304,1299,1,0,0,0,1304,1300,1,0,0,0,1304,1301, + 1,0,0,0,1304,1303,1,0,0,0,1305,153,1,0,0,0,1306,1314,1,0,0,0,1307,1308, + 5,29,0,0,1308,1309,5,89,0,0,1309,1310,5,35,0,0,1310,1311,3,32,16,0,1311, + 1312,5,30,0,0,1312,1314,1,0,0,0,1313,1306,1,0,0,0,1313,1307,1,0,0,0,1314, + 155,1,0,0,0,1315,1324,1,0,0,0,1316,1320,3,158,79,0,1317,1319,7,7,0,0,1318, + 1317,1,0,0,0,1319,1322,1,0,0,0,1320,1318,1,0,0,0,1320,1321,1,0,0,0,1321, + 1324,1,0,0,0,1322,1320,1,0,0,0,1323,1315,1,0,0,0,1323,1316,1,0,0,0,1324, + 157,1,0,0,0,1325,1326,7,8,0,0,1326,159,1,0,0,0,1327,1331,3,164,82,0,1328, + 1330,3,162,81,0,1329,1328,1,0,0,0,1330,1333,1,0,0,0,1331,1329,1,0,0,0, + 1331,1332,1,0,0,0,1332,161,1,0,0,0,1333,1331,1,0,0,0,1334,1353,5,260,0, + 0,1335,1336,5,41,0,0,1336,1353,5,42,0,0,1337,1353,3,132,66,0,1338,1353, + 5,259,0,0,1339,1353,5,261,0,0,1340,1353,5,90,0,0,1341,1342,5,91,0,0,1342, + 1343,5,29,0,0,1343,1344,3,146,73,0,1344,1345,5,30,0,0,1345,1353,1,0,0, + 0,1346,1347,5,92,0,0,1347,1348,5,29,0,0,1348,1349,3,146,73,0,1349,1350, + 5,30,0,0,1350,1353,1,0,0,0,1351,1353,3,130,65,0,1352,1334,1,0,0,0,1352, + 1335,1,0,0,0,1352,1337,1,0,0,0,1352,1338,1,0,0,0,1352,1339,1,0,0,0,1352, + 1340,1,0,0,0,1352,1341,1,0,0,0,1352,1346,1,0,0,0,1352,1351,1,0,0,0,1353, + 163,1,0,0,0,1354,1355,5,38,0,0,1355,1385,3,138,69,0,1356,1385,5,196,0, + 0,1357,1358,5,198,0,0,1358,1359,5,38,0,0,1359,1385,3,138,69,0,1360,1361, + 5,199,0,0,1361,1385,3,138,69,0,1362,1363,5,225,0,0,1363,1364,3,192,96, + 0,1364,1365,3,160,80,0,1365,1366,5,261,0,0,1366,1367,3,134,67,0,1367,1385, + 1,0,0,0,1368,1369,5,252,0,0,1369,1385,3,32,16,0,1370,1371,5,251,0,0,1371, + 1385,3,32,16,0,1372,1373,5,252,0,0,1373,1385,3,2,1,0,1374,1375,5,251,0, + 0,1375,1385,3,2,1,0,1376,1385,5,253,0,0,1377,1385,5,200,0,0,1378,1385, + 3,170,85,0,1379,1385,3,172,86,0,1380,1385,3,166,83,0,1381,1385,3,2,1,0, + 1382,1383,5,176,0,0,1383,1385,3,160,80,0,1384,1354,1,0,0,0,1384,1356,1, + 0,0,0,1384,1357,1,0,0,0,1384,1360,1,0,0,0,1384,1362,1,0,0,0,1384,1368, + 1,0,0,0,1384,1370,1,0,0,0,1384,1372,1,0,0,0,1384,1374,1,0,0,0,1384,1376, + 1,0,0,0,1384,1377,1,0,0,0,1384,1378,1,0,0,0,1384,1379,1,0,0,0,1384,1380, + 1,0,0,0,1384,1381,1,0,0,0,1384,1382,1,0,0,0,1385,165,1,0,0,0,1386,1408, + 5,180,0,0,1387,1408,5,181,0,0,1388,1408,5,182,0,0,1389,1408,5,183,0,0, + 1390,1408,5,184,0,0,1391,1408,5,185,0,0,1392,1408,5,186,0,0,1393,1408, + 5,187,0,0,1394,1408,5,188,0,0,1395,1408,5,189,0,0,1396,1408,5,190,0,0, + 1397,1408,5,191,0,0,1398,1408,5,192,0,0,1399,1400,5,93,0,0,1400,1408,5, + 183,0,0,1401,1402,5,93,0,0,1402,1408,5,184,0,0,1403,1404,5,93,0,0,1404, + 1408,5,185,0,0,1405,1406,5,93,0,0,1406,1408,5,186,0,0,1407,1386,1,0,0, + 0,1407,1387,1,0,0,0,1407,1388,1,0,0,0,1407,1389,1,0,0,0,1407,1390,1,0, + 0,0,1407,1391,1,0,0,0,1407,1392,1,0,0,0,1407,1393,1,0,0,0,1407,1394,1, + 0,0,0,1407,1395,1,0,0,0,1407,1396,1,0,0,0,1407,1397,1,0,0,0,1407,1398, + 1,0,0,0,1407,1399,1,0,0,0,1407,1401,1,0,0,0,1407,1403,1,0,0,0,1407,1405, + 1,0,0,0,1408,167,1,0,0,0,1409,1420,1,0,0,0,1410,1420,5,176,0,0,1411,1420, + 3,32,16,0,1412,1413,3,32,16,0,1413,1414,5,176,0,0,1414,1415,3,32,16,0, + 1415,1420,1,0,0,0,1416,1417,3,32,16,0,1417,1418,5,176,0,0,1418,1420,1, + 0,0,0,1419,1409,1,0,0,0,1419,1410,1,0,0,0,1419,1411,1,0,0,0,1419,1412, + 1,0,0,0,1419,1416,1,0,0,0,1420,169,1,0,0,0,1421,1422,5,1,0,0,1422,1423, + 5,193,0,0,1423,171,1,0,0,0,1424,1428,5,1,0,0,1425,1426,5,93,0,0,1426,1429, + 5,193,0,0,1427,1429,5,194,0,0,1428,1425,1,0,0,0,1428,1427,1,0,0,0,1429, + 173,1,0,0,0,1430,1431,5,293,0,0,1431,1432,3,188,94,0,1432,1433,3,146,73, + 0,1433,1434,5,29,0,0,1434,1435,3,180,90,0,1435,1436,5,30,0,0,1436,1471, + 1,0,0,0,1437,1438,5,293,0,0,1438,1439,3,188,94,0,1439,1440,3,146,73,0, + 1440,1441,5,35,0,0,1441,1442,5,16,0,0,1442,1443,3,52,26,0,1443,1444,5, + 17,0,0,1444,1471,1,0,0,0,1445,1446,5,293,0,0,1446,1447,3,188,94,0,1447, + 1448,3,146,73,0,1448,1471,1,0,0,0,1449,1450,5,294,0,0,1450,1451,3,188, + 94,0,1451,1453,5,35,0,0,1452,1454,5,83,0,0,1453,1452,1,0,0,0,1453,1454, + 1,0,0,0,1454,1455,1,0,0,0,1455,1456,5,29,0,0,1456,1457,3,312,156,0,1457, + 1458,5,30,0,0,1458,1471,1,0,0,0,1459,1460,5,294,0,0,1460,1461,3,188,94, + 0,1461,1462,3,6,3,0,1462,1471,1,0,0,0,1463,1464,5,294,0,0,1464,1465,3, + 188,94,0,1465,1466,5,35,0,0,1466,1467,5,16,0,0,1467,1468,3,176,88,0,1468, + 1469,5,17,0,0,1469,1471,1,0,0,0,1470,1430,1,0,0,0,1470,1437,1,0,0,0,1470, + 1445,1,0,0,0,1470,1449,1,0,0,0,1470,1459,1,0,0,0,1470,1463,1,0,0,0,1471, + 175,1,0,0,0,1472,1483,1,0,0,0,1473,1474,3,178,89,0,1474,1475,5,27,0,0, + 1475,1477,1,0,0,0,1476,1473,1,0,0,0,1477,1480,1,0,0,0,1478,1476,1,0,0, + 0,1478,1479,1,0,0,0,1479,1481,1,0,0,0,1480,1478,1,0,0,0,1481,1483,3,178, + 89,0,1482,1472,1,0,0,0,1482,1478,1,0,0,0,1483,177,1,0,0,0,1484,1485,5, + 38,0,0,1485,1486,5,263,0,0,1486,1487,5,35,0,0,1487,1488,5,16,0,0,1488, + 1489,3,56,28,0,1489,1490,5,17,0,0,1490,1498,1,0,0,0,1491,1492,3,146,73, + 0,1492,1493,5,35,0,0,1493,1494,5,16,0,0,1494,1495,3,56,28,0,1495,1496, + 5,17,0,0,1496,1498,1,0,0,0,1497,1484,1,0,0,0,1497,1491,1,0,0,0,1498,179, + 1,0,0,0,1499,1500,3,182,91,0,1500,1501,5,27,0,0,1501,1503,1,0,0,0,1502, + 1499,1,0,0,0,1503,1506,1,0,0,0,1504,1502,1,0,0,0,1504,1505,1,0,0,0,1505, + 1507,1,0,0,0,1506,1504,1,0,0,0,1507,1508,3,182,91,0,1508,181,1,0,0,0,1509, + 1510,3,6,3,0,1510,1511,5,35,0,0,1511,1512,3,186,93,0,1512,183,1,0,0,0, + 1513,1514,7,9,0,0,1514,185,1,0,0,0,1515,1550,3,184,92,0,1516,1550,3,32, + 16,0,1517,1518,5,185,0,0,1518,1519,5,29,0,0,1519,1520,3,32,16,0,1520,1521, + 5,30,0,0,1521,1550,1,0,0,0,1522,1550,3,6,3,0,1523,1524,3,138,69,0,1524, + 1525,5,29,0,0,1525,1526,5,183,0,0,1526,1527,5,74,0,0,1527,1528,3,32,16, + 0,1528,1529,5,30,0,0,1529,1550,1,0,0,0,1530,1531,3,138,69,0,1531,1532, + 5,29,0,0,1532,1533,5,184,0,0,1533,1534,5,74,0,0,1534,1535,3,32,16,0,1535, + 1536,5,30,0,0,1536,1550,1,0,0,0,1537,1538,3,138,69,0,1538,1539,5,29,0, + 0,1539,1540,5,185,0,0,1540,1541,5,74,0,0,1541,1542,3,32,16,0,1542,1543, + 5,30,0,0,1543,1550,1,0,0,0,1544,1545,3,138,69,0,1545,1546,5,29,0,0,1546, + 1547,3,32,16,0,1547,1548,5,30,0,0,1548,1550,1,0,0,0,1549,1515,1,0,0,0, + 1549,1516,1,0,0,0,1549,1517,1,0,0,0,1549,1522,1,0,0,0,1549,1523,1,0,0, + 0,1549,1530,1,0,0,0,1549,1537,1,0,0,0,1549,1544,1,0,0,0,1550,187,1,0,0, + 0,1551,1552,7,10,0,0,1552,189,1,0,0,0,1553,1554,3,192,96,0,1554,1555,3, + 160,80,0,1555,1556,3,146,73,0,1556,1557,5,175,0,0,1557,1559,3,264,132, + 0,1558,1560,3,130,65,0,1559,1558,1,0,0,0,1559,1560,1,0,0,0,1560,1561,1, + 0,0,0,1561,1562,3,134,67,0,1562,1588,1,0,0,0,1563,1564,3,192,96,0,1564, + 1565,3,160,80,0,1565,1566,3,146,73,0,1566,1567,5,175,0,0,1567,1568,3,264, + 132,0,1568,1569,3,218,109,0,1569,1570,3,134,67,0,1570,1588,1,0,0,0,1571, + 1572,3,192,96,0,1572,1573,3,160,80,0,1573,1575,3,264,132,0,1574,1576,3, + 130,65,0,1575,1574,1,0,0,0,1575,1576,1,0,0,0,1576,1577,1,0,0,0,1577,1578, + 3,134,67,0,1578,1588,1,0,0,0,1579,1580,3,192,96,0,1580,1581,3,160,80,0, + 1581,1582,3,264,132,0,1582,1583,3,218,109,0,1583,1584,3,134,67,0,1584, + 1588,1,0,0,0,1585,1588,3,196,98,0,1586,1588,3,2,1,0,1587,1553,1,0,0,0, + 1587,1563,1,0,0,0,1587,1571,1,0,0,0,1587,1579,1,0,0,0,1587,1585,1,0,0, + 0,1587,1586,1,0,0,0,1588,191,1,0,0,0,1589,1590,5,242,0,0,1590,1600,3,192, + 96,0,1591,1592,5,243,0,0,1592,1600,3,192,96,0,1593,1600,3,194,97,0,1594, + 1595,5,111,0,0,1595,1596,5,29,0,0,1596,1597,3,32,16,0,1597,1598,5,30,0, + 0,1598,1600,1,0,0,0,1599,1589,1,0,0,0,1599,1591,1,0,0,0,1599,1593,1,0, + 0,0,1599,1594,1,0,0,0,1600,193,1,0,0,0,1601,1614,1,0,0,0,1602,1614,5,244, + 0,0,1603,1614,5,245,0,0,1604,1605,5,246,0,0,1605,1614,5,247,0,0,1606,1607, + 5,246,0,0,1607,1614,5,248,0,0,1608,1609,5,246,0,0,1609,1614,5,249,0,0, + 1610,1611,5,246,0,0,1611,1614,5,250,0,0,1612,1614,5,246,0,0,1613,1601, + 1,0,0,0,1613,1602,1,0,0,0,1613,1603,1,0,0,0,1613,1604,1,0,0,0,1613,1606, + 1,0,0,0,1613,1608,1,0,0,0,1613,1610,1,0,0,0,1613,1612,1,0,0,0,1614,195, + 1,0,0,0,1615,1616,5,112,0,0,1616,1617,5,29,0,0,1617,1618,3,32,16,0,1618, + 1619,5,30,0,0,1619,197,1,0,0,0,1620,1621,5,225,0,0,1621,1626,3,190,95, + 0,1622,1623,5,36,0,0,1623,1626,3,200,100,0,1624,1626,3,196,98,0,1625,1620, + 1,0,0,0,1625,1622,1,0,0,0,1625,1624,1,0,0,0,1626,199,1,0,0,0,1627,1628, + 3,160,80,0,1628,1629,3,146,73,0,1629,1630,5,175,0,0,1630,1631,3,2,1,0, + 1631,1637,1,0,0,0,1632,1633,3,160,80,0,1633,1634,3,2,1,0,1634,1637,1,0, + 0,0,1635,1637,3,2,1,0,1636,1627,1,0,0,0,1636,1632,1,0,0,0,1636,1635,1, + 0,0,0,1637,201,1,0,0,0,1638,1639,3,146,73,0,1639,1640,5,27,0,0,1640,1642, + 1,0,0,0,1641,1638,1,0,0,0,1642,1645,1,0,0,0,1643,1641,1,0,0,0,1643,1644, + 1,0,0,0,1644,1646,1,0,0,0,1645,1643,1,0,0,0,1646,1647,3,146,73,0,1647, + 203,1,0,0,0,1648,1654,1,0,0,0,1649,1650,5,85,0,0,1650,1651,3,212,106,0, + 1651,1652,5,86,0,0,1652,1654,1,0,0,0,1653,1648,1,0,0,0,1653,1649,1,0,0, + 0,1654,205,1,0,0,0,1655,1667,5,265,0,0,1656,1667,5,113,0,0,1657,1667,5, + 38,0,0,1658,1667,5,199,0,0,1659,1667,5,114,0,0,1660,1667,5,115,0,0,1661, + 1662,5,69,0,0,1662,1663,5,29,0,0,1663,1664,3,32,16,0,1664,1665,5,30,0, + 0,1665,1667,1,0,0,0,1666,1655,1,0,0,0,1666,1656,1,0,0,0,1666,1657,1,0, + 0,0,1666,1658,1,0,0,0,1666,1659,1,0,0,0,1666,1660,1,0,0,0,1666,1661,1, + 0,0,0,1667,207,1,0,0,0,1668,1670,3,206,103,0,1669,1668,1,0,0,0,1670,1673, + 1,0,0,0,1671,1669,1,0,0,0,1671,1672,1,0,0,0,1672,209,1,0,0,0,1673,1671, + 1,0,0,0,1674,1676,3,208,104,0,1675,1677,3,214,107,0,1676,1675,1,0,0,0, + 1676,1677,1,0,0,0,1677,1678,1,0,0,0,1678,1679,3,2,1,0,1679,211,1,0,0,0, + 1680,1681,3,210,105,0,1681,1682,5,27,0,0,1682,1684,1,0,0,0,1683,1680,1, + 0,0,0,1684,1687,1,0,0,0,1685,1683,1,0,0,0,1685,1686,1,0,0,0,1686,1688, + 1,0,0,0,1687,1685,1,0,0,0,1688,1689,3,210,105,0,1689,213,1,0,0,0,1690, + 1691,5,29,0,0,1691,1692,3,202,101,0,1692,1693,5,30,0,0,1693,215,1,0,0, + 0,1694,1697,1,0,0,0,1695,1697,3,218,109,0,1696,1694,1,0,0,0,1696,1695, + 1,0,0,0,1697,217,1,0,0,0,1698,1699,5,85,0,0,1699,1700,5,41,0,0,1700,1701, + 3,32,16,0,1701,1702,5,42,0,0,1702,1703,5,86,0,0,1703,219,1,0,0,0,1704, + 1705,3,256,128,0,1705,1706,5,16,0,0,1706,1707,3,268,134,0,1707,1708,5, + 17,0,0,1708,1821,1,0,0,0,1709,1710,3,74,37,0,1710,1711,5,16,0,0,1711,1712, + 3,82,41,0,1712,1713,5,17,0,0,1713,1821,1,0,0,0,1714,1715,3,232,116,0,1715, + 1716,5,16,0,0,1716,1717,3,236,118,0,1717,1718,5,17,0,0,1718,1821,1,0,0, + 0,1719,1720,3,240,120,0,1720,1721,5,16,0,0,1721,1722,3,244,122,0,1722, + 1723,5,17,0,0,1723,1821,1,0,0,0,1724,1821,3,222,111,0,1725,1821,3,296, + 148,0,1726,1821,3,174,87,0,1727,1821,3,88,44,0,1728,1821,3,342,171,0,1729, + 1730,5,116,0,0,1730,1821,3,32,16,0,1731,1732,5,117,0,0,1732,1821,3,32, + 16,0,1733,1734,3,354,177,0,1734,1735,5,16,0,0,1735,1736,3,358,179,0,1736, + 1737,5,17,0,0,1737,1821,1,0,0,0,1738,1739,5,301,0,0,1739,1740,3,146,73, + 0,1740,1741,5,175,0,0,1741,1742,3,264,132,0,1742,1743,5,118,0,0,1743,1744, + 3,192,96,0,1744,1745,3,160,80,0,1745,1746,3,146,73,0,1746,1747,5,175,0, + 0,1747,1748,3,264,132,0,1748,1749,3,134,67,0,1749,1821,1,0,0,0,1750,1751, + 5,301,0,0,1751,1752,5,225,0,0,1752,1753,3,192,96,0,1753,1754,3,160,80, + 0,1754,1755,3,146,73,0,1755,1756,5,175,0,0,1756,1757,3,264,132,0,1757, + 1758,3,216,108,0,1758,1759,3,134,67,0,1759,1760,5,118,0,0,1760,1761,5, + 225,0,0,1761,1762,3,192,96,0,1762,1763,3,160,80,0,1763,1764,3,146,73,0, + 1764,1765,5,175,0,0,1765,1766,3,264,132,0,1766,1767,3,216,108,0,1767,1768, + 3,134,67,0,1768,1821,1,0,0,0,1769,1821,3,26,13,0,1770,1821,3,40,20,0,1771, + 1772,5,254,0,0,1772,1773,5,195,0,0,1773,1774,5,41,0,0,1774,1775,3,32,16, + 0,1775,1779,5,42,0,0,1776,1778,3,342,171,0,1777,1776,1,0,0,0,1778,1781, + 1,0,0,0,1779,1777,1,0,0,0,1779,1780,1,0,0,0,1780,1821,1,0,0,0,1781,1779, + 1,0,0,0,1782,1783,5,254,0,0,1783,1784,5,195,0,0,1784,1788,3,2,1,0,1785, + 1787,3,342,171,0,1786,1785,1,0,0,0,1787,1790,1,0,0,0,1788,1786,1,0,0,0, + 1788,1789,1,0,0,0,1789,1821,1,0,0,0,1790,1788,1,0,0,0,1791,1792,5,254, + 0,0,1792,1793,5,255,0,0,1793,1794,5,41,0,0,1794,1795,3,32,16,0,1795,1796, + 5,42,0,0,1796,1797,5,27,0,0,1797,1801,3,146,73,0,1798,1800,3,342,171,0, + 1799,1798,1,0,0,0,1800,1803,1,0,0,0,1801,1799,1,0,0,0,1801,1802,1,0,0, + 0,1802,1821,1,0,0,0,1803,1801,1,0,0,0,1804,1805,5,254,0,0,1805,1806,5, + 255,0,0,1806,1807,3,2,1,0,1807,1808,5,27,0,0,1808,1812,3,146,73,0,1809, + 1811,3,342,171,0,1810,1809,1,0,0,0,1811,1814,1,0,0,0,1812,1810,1,0,0,0, + 1812,1813,1,0,0,0,1813,1821,1,0,0,0,1814,1812,1,0,0,0,1815,1816,5,119, + 0,0,1816,1817,5,195,0,0,1817,1818,3,146,73,0,1818,1819,3,44,22,0,1819, + 1821,1,0,0,0,1820,1704,1,0,0,0,1820,1709,1,0,0,0,1820,1714,1,0,0,0,1820, + 1719,1,0,0,0,1820,1724,1,0,0,0,1820,1725,1,0,0,0,1820,1726,1,0,0,0,1820, + 1727,1,0,0,0,1820,1728,1,0,0,0,1820,1729,1,0,0,0,1820,1731,1,0,0,0,1820, + 1733,1,0,0,0,1820,1738,1,0,0,0,1820,1750,1,0,0,0,1820,1769,1,0,0,0,1820, + 1770,1,0,0,0,1820,1771,1,0,0,0,1820,1782,1,0,0,0,1820,1791,1,0,0,0,1820, + 1804,1,0,0,0,1820,1815,1,0,0,0,1821,221,1,0,0,0,1822,1823,5,120,0,0,1823, + 1832,3,230,115,0,1824,1831,3,224,112,0,1825,1826,5,121,0,0,1826,1827,5, + 29,0,0,1827,1828,3,250,125,0,1828,1829,5,30,0,0,1829,1831,1,0,0,0,1830, + 1824,1,0,0,0,1830,1825,1,0,0,0,1831,1834,1,0,0,0,1832,1830,1,0,0,0,1832, + 1833,1,0,0,0,1833,1835,1,0,0,0,1834,1832,1,0,0,0,1835,1836,3,160,80,0, + 1836,1837,3,2,1,0,1837,1838,3,226,113,0,1838,1839,3,228,114,0,1839,223, + 1,0,0,0,1840,1860,5,122,0,0,1841,1860,5,50,0,0,1842,1860,5,51,0,0,1843, + 1860,5,62,0,0,1844,1860,5,123,0,0,1845,1860,5,68,0,0,1846,1860,5,67,0, + 0,1847,1860,5,63,0,0,1848,1860,5,64,0,0,1849,1860,5,65,0,0,1850,1860,5, + 124,0,0,1851,1860,5,125,0,0,1852,1860,5,126,0,0,1853,1860,5,127,0,0,1854, + 1855,5,69,0,0,1855,1856,5,29,0,0,1856,1857,3,32,16,0,1857,1858,5,30,0, + 0,1858,1860,1,0,0,0,1859,1840,1,0,0,0,1859,1841,1,0,0,0,1859,1842,1,0, + 0,0,1859,1843,1,0,0,0,1859,1844,1,0,0,0,1859,1845,1,0,0,0,1859,1846,1, + 0,0,0,1859,1847,1,0,0,0,1859,1848,1,0,0,0,1859,1849,1,0,0,0,1859,1850, + 1,0,0,0,1859,1851,1,0,0,0,1859,1852,1,0,0,0,1859,1853,1,0,0,0,1859,1854, + 1,0,0,0,1860,225,1,0,0,0,1861,1867,1,0,0,0,1862,1863,5,43,0,0,1863,1867, + 3,0,0,0,1864,1865,5,43,0,0,1865,1867,3,32,16,0,1866,1861,1,0,0,0,1866, + 1862,1,0,0,0,1866,1864,1,0,0,0,1867,227,1,0,0,0,1868,1872,1,0,0,0,1869, + 1870,5,35,0,0,1870,1872,3,316,158,0,1871,1868,1,0,0,0,1871,1869,1,0,0, + 0,1872,229,1,0,0,0,1873,1879,1,0,0,0,1874,1875,5,41,0,0,1875,1876,3,32, + 16,0,1876,1877,5,42,0,0,1877,1879,1,0,0,0,1878,1873,1,0,0,0,1878,1874, + 1,0,0,0,1879,231,1,0,0,0,1880,1884,5,128,0,0,1881,1883,3,234,117,0,1882, + 1881,1,0,0,0,1883,1886,1,0,0,0,1884,1882,1,0,0,0,1884,1885,1,0,0,0,1885, + 1887,1,0,0,0,1886,1884,1,0,0,0,1887,1888,3,146,73,0,1888,1889,3,2,1,0, + 1889,1899,1,0,0,0,1890,1894,5,128,0,0,1891,1893,3,234,117,0,1892,1891, + 1,0,0,0,1893,1896,1,0,0,0,1894,1892,1,0,0,0,1894,1895,1,0,0,0,1895,1897, + 1,0,0,0,1896,1894,1,0,0,0,1897,1899,3,2,1,0,1898,1880,1,0,0,0,1898,1890, + 1,0,0,0,1899,233,1,0,0,0,1900,1901,7,11,0,0,1901,235,1,0,0,0,1902,1904, + 3,238,119,0,1903,1902,1,0,0,0,1904,1907,1,0,0,0,1905,1903,1,0,0,0,1905, + 1906,1,0,0,0,1906,237,1,0,0,0,1907,1905,1,0,0,0,1908,1909,5,129,0,0,1909, + 1921,3,190,95,0,1910,1911,5,130,0,0,1911,1921,3,190,95,0,1912,1913,5,131, + 0,0,1913,1921,3,190,95,0,1914,1915,5,132,0,0,1915,1921,3,190,95,0,1916, + 1921,3,88,44,0,1917,1921,3,342,171,0,1918,1921,3,26,13,0,1919,1921,3,40, + 20,0,1920,1908,1,0,0,0,1920,1910,1,0,0,0,1920,1912,1,0,0,0,1920,1914,1, + 0,0,0,1920,1916,1,0,0,0,1920,1917,1,0,0,0,1920,1918,1,0,0,0,1920,1919, + 1,0,0,0,1921,239,1,0,0,0,1922,1926,5,133,0,0,1923,1925,3,242,121,0,1924, + 1923,1,0,0,0,1925,1928,1,0,0,0,1926,1924,1,0,0,0,1926,1927,1,0,0,0,1927, + 1929,1,0,0,0,1928,1926,1,0,0,0,1929,1930,3,192,96,0,1930,1931,3,160,80, + 0,1931,1932,3,2,1,0,1932,1933,3,134,67,0,1933,1934,3,228,114,0,1934,241, + 1,0,0,0,1935,1936,7,11,0,0,1936,243,1,0,0,0,1937,1939,3,246,123,0,1938, + 1937,1,0,0,0,1939,1942,1,0,0,0,1940,1938,1,0,0,0,1940,1941,1,0,0,0,1941, + 245,1,0,0,0,1942,1940,1,0,0,0,1943,1944,5,134,0,0,1944,1954,3,190,95,0, + 1945,1946,5,135,0,0,1946,1954,3,190,95,0,1947,1948,5,132,0,0,1948,1954, + 3,190,95,0,1949,1954,3,342,171,0,1950,1954,3,88,44,0,1951,1954,3,26,13, + 0,1952,1954,3,40,20,0,1953,1943,1,0,0,0,1953,1945,1,0,0,0,1953,1947,1, + 0,0,0,1953,1949,1,0,0,0,1953,1950,1,0,0,0,1953,1951,1,0,0,0,1953,1952, + 1,0,0,0,1954,247,1,0,0,0,1955,1962,1,0,0,0,1956,1957,5,121,0,0,1957,1958, + 5,29,0,0,1958,1959,3,250,125,0,1959,1960,5,30,0,0,1960,1962,1,0,0,0,1961, + 1955,1,0,0,0,1961,1956,1,0,0,0,1962,249,1,0,0,0,1963,1973,3,148,74,0,1964, + 1966,5,16,0,0,1965,1967,3,314,157,0,1966,1965,1,0,0,0,1967,1968,1,0,0, + 0,1968,1966,1,0,0,0,1968,1969,1,0,0,0,1969,1970,1,0,0,0,1970,1971,5,17, + 0,0,1971,1973,1,0,0,0,1972,1963,1,0,0,0,1972,1964,1,0,0,0,1973,251,1,0, + 0,0,1974,1976,3,254,127,0,1975,1974,1,0,0,0,1976,1979,1,0,0,0,1977,1975, + 1,0,0,0,1977,1978,1,0,0,0,1978,253,1,0,0,0,1979,1977,1,0,0,0,1980,1981, + 5,41,0,0,1981,1982,5,136,0,0,1982,1994,5,42,0,0,1983,1984,5,41,0,0,1984, + 1985,5,137,0,0,1985,1994,5,42,0,0,1986,1987,5,41,0,0,1987,1988,5,138,0, + 0,1988,1994,5,42,0,0,1989,1990,5,41,0,0,1990,1991,3,32,16,0,1991,1992, + 5,42,0,0,1992,1994,1,0,0,0,1993,1980,1,0,0,0,1993,1983,1,0,0,0,1993,1986, + 1,0,0,0,1993,1989,1,0,0,0,1994,255,1,0,0,0,1995,2000,5,139,0,0,1996,1999, + 3,258,129,0,1997,1999,3,260,130,0,1998,1996,1,0,0,0,1998,1997,1,0,0,0, + 1999,2002,1,0,0,0,2000,1998,1,0,0,0,2000,2001,1,0,0,0,2001,2003,1,0,0, + 0,2002,2000,1,0,0,0,2003,2004,3,192,96,0,2004,2005,3,252,126,0,2005,2006, + 3,160,80,0,2006,2007,3,248,124,0,2007,2008,3,264,132,0,2008,2009,3,204, + 102,0,2009,2013,3,134,67,0,2010,2012,3,266,133,0,2011,2010,1,0,0,0,2012, + 2015,1,0,0,0,2013,2011,1,0,0,0,2013,2014,1,0,0,0,2014,257,1,0,0,0,2015, + 2013,1,0,0,0,2016,2040,5,122,0,0,2017,2040,5,50,0,0,2018,2040,5,51,0,0, + 2019,2040,5,62,0,0,2020,2040,5,140,0,0,2021,2040,5,67,0,0,2022,2040,5, + 141,0,0,2023,2040,5,142,0,0,2024,2040,5,53,0,0,2025,2040,5,63,0,0,2026, + 2040,5,64,0,0,2027,2040,5,65,0,0,2028,2040,5,124,0,0,2029,2040,5,143,0, + 0,2030,2040,5,144,0,0,2031,2040,5,68,0,0,2032,2040,5,145,0,0,2033,2040, + 5,146,0,0,2034,2035,5,69,0,0,2035,2036,5,29,0,0,2036,2037,3,32,16,0,2037, + 2038,5,30,0,0,2038,2040,1,0,0,0,2039,2016,1,0,0,0,2039,2017,1,0,0,0,2039, + 2018,1,0,0,0,2039,2019,1,0,0,0,2039,2020,1,0,0,0,2039,2021,1,0,0,0,2039, + 2022,1,0,0,0,2039,2023,1,0,0,0,2039,2024,1,0,0,0,2039,2025,1,0,0,0,2039, + 2026,1,0,0,0,2039,2027,1,0,0,0,2039,2028,1,0,0,0,2039,2029,1,0,0,0,2039, + 2030,1,0,0,0,2039,2031,1,0,0,0,2039,2032,1,0,0,0,2039,2033,1,0,0,0,2039, + 2034,1,0,0,0,2040,259,1,0,0,0,2041,2042,5,147,0,0,2042,2048,5,29,0,0,2043, + 2046,3,6,3,0,2044,2045,5,33,0,0,2045,2047,3,6,3,0,2046,2044,1,0,0,0,2046, + 2047,1,0,0,0,2047,2049,1,0,0,0,2048,2043,1,0,0,0,2048,2049,1,0,0,0,2049, + 2053,1,0,0,0,2050,2052,3,262,131,0,2051,2050,1,0,0,0,2052,2055,1,0,0,0, + 2053,2051,1,0,0,0,2053,2054,1,0,0,0,2054,2056,1,0,0,0,2055,2053,1,0,0, + 0,2056,2060,5,30,0,0,2057,2058,5,147,0,0,2058,2060,5,84,0,0,2059,2041, + 1,0,0,0,2059,2057,1,0,0,0,2060,261,1,0,0,0,2061,2089,5,148,0,0,2062,2089, + 5,223,0,0,2063,2089,5,56,0,0,2064,2089,5,57,0,0,2065,2089,5,149,0,0,2066, + 2089,5,150,0,0,2067,2089,5,247,0,0,2068,2089,5,248,0,0,2069,2089,5,249, + 0,0,2070,2089,5,250,0,0,2071,2072,5,151,0,0,2072,2073,5,74,0,0,2073,2089, + 5,152,0,0,2074,2075,5,151,0,0,2075,2076,5,74,0,0,2076,2089,5,153,0,0,2077, + 2078,5,154,0,0,2078,2079,5,74,0,0,2079,2089,5,152,0,0,2080,2081,5,154, + 0,0,2081,2082,5,74,0,0,2082,2089,5,153,0,0,2083,2084,5,69,0,0,2084,2085, + 5,29,0,0,2085,2086,3,32,16,0,2086,2087,5,30,0,0,2087,2089,1,0,0,0,2088, + 2061,1,0,0,0,2088,2062,1,0,0,0,2088,2063,1,0,0,0,2088,2064,1,0,0,0,2088, + 2065,1,0,0,0,2088,2066,1,0,0,0,2088,2067,1,0,0,0,2088,2068,1,0,0,0,2088, + 2069,1,0,0,0,2088,2070,1,0,0,0,2088,2071,1,0,0,0,2088,2074,1,0,0,0,2088, + 2077,1,0,0,0,2088,2080,1,0,0,0,2088,2083,1,0,0,0,2089,263,1,0,0,0,2090, + 2094,5,115,0,0,2091,2094,5,155,0,0,2092,2094,3,2,1,0,2093,2090,1,0,0,0, + 2093,2091,1,0,0,0,2093,2092,1,0,0,0,2094,265,1,0,0,0,2095,2117,5,1,0,0, + 2096,2117,5,2,0,0,2097,2117,5,156,0,0,2098,2117,5,3,0,0,2099,2117,5,4, + 0,0,2100,2117,5,246,0,0,2101,2117,5,5,0,0,2102,2117,5,6,0,0,2103,2117, + 5,7,0,0,2104,2117,5,8,0,0,2105,2117,5,9,0,0,2106,2117,5,10,0,0,2107,2117, + 5,11,0,0,2108,2117,5,12,0,0,2109,2117,5,13,0,0,2110,2117,5,14,0,0,2111, + 2112,5,69,0,0,2112,2113,5,29,0,0,2113,2114,3,32,16,0,2114,2115,5,30,0, + 0,2115,2117,1,0,0,0,2116,2095,1,0,0,0,2116,2096,1,0,0,0,2116,2097,1,0, + 0,0,2116,2098,1,0,0,0,2116,2099,1,0,0,0,2116,2100,1,0,0,0,2116,2101,1, + 0,0,0,2116,2102,1,0,0,0,2116,2103,1,0,0,0,2116,2104,1,0,0,0,2116,2105, + 1,0,0,0,2116,2106,1,0,0,0,2116,2107,1,0,0,0,2116,2108,1,0,0,0,2116,2109, + 1,0,0,0,2116,2110,1,0,0,0,2116,2111,1,0,0,0,2117,267,1,0,0,0,2118,2120, + 3,270,135,0,2119,2118,1,0,0,0,2120,2123,1,0,0,0,2121,2119,1,0,0,0,2121, + 2122,1,0,0,0,2122,269,1,0,0,0,2123,2121,1,0,0,0,2124,2233,3,126,63,0,2125, + 2126,5,295,0,0,2126,2233,3,32,16,0,2127,2233,3,278,139,0,2128,2129,5,296, + 0,0,2129,2233,3,32,16,0,2130,2131,5,299,0,0,2131,2233,3,134,67,0,2132, + 2133,5,299,0,0,2133,2134,5,157,0,0,2134,2233,3,134,67,0,2135,2233,5,297, + 0,0,2136,2233,5,298,0,0,2137,2233,3,296,148,0,2138,2233,3,272,136,0,2139, + 2233,3,174,87,0,2140,2233,3,88,44,0,2141,2233,3,26,13,0,2142,2233,3,274, + 137,0,2143,2233,3,40,20,0,2144,2145,5,300,0,0,2145,2146,5,41,0,0,2146, + 2147,3,32,16,0,2147,2148,5,42,0,0,2148,2233,1,0,0,0,2149,2150,5,300,0, + 0,2150,2151,5,41,0,0,2151,2152,3,32,16,0,2152,2153,5,42,0,0,2153,2154, + 5,33,0,0,2154,2155,3,0,0,0,2155,2233,1,0,0,0,2156,2157,5,302,0,0,2157, + 2158,3,32,16,0,2158,2159,5,74,0,0,2159,2160,3,32,16,0,2160,2233,1,0,0, + 0,2161,2162,5,301,0,0,2162,2163,3,146,73,0,2163,2164,5,175,0,0,2164,2165, + 3,264,132,0,2165,2233,1,0,0,0,2166,2167,5,301,0,0,2167,2168,5,225,0,0, + 2168,2169,3,192,96,0,2169,2170,3,160,80,0,2170,2171,3,146,73,0,2171,2172, + 5,175,0,0,2172,2173,3,264,132,0,2173,2174,3,216,108,0,2174,2175,3,134, + 67,0,2175,2233,1,0,0,0,2176,2233,3,276,138,0,2177,2178,5,254,0,0,2178, + 2179,5,195,0,0,2179,2180,5,41,0,0,2180,2181,3,32,16,0,2181,2185,5,42,0, + 0,2182,2184,3,342,171,0,2183,2182,1,0,0,0,2184,2187,1,0,0,0,2185,2183, + 1,0,0,0,2185,2186,1,0,0,0,2186,2233,1,0,0,0,2187,2185,1,0,0,0,2188,2189, + 5,254,0,0,2189,2190,5,195,0,0,2190,2194,3,2,1,0,2191,2193,3,342,171,0, + 2192,2191,1,0,0,0,2193,2196,1,0,0,0,2194,2192,1,0,0,0,2194,2195,1,0,0, + 0,2195,2233,1,0,0,0,2196,2194,1,0,0,0,2197,2198,5,254,0,0,2198,2199,5, + 255,0,0,2199,2200,5,41,0,0,2200,2201,3,32,16,0,2201,2202,5,42,0,0,2202, + 2203,5,27,0,0,2203,2207,3,146,73,0,2204,2206,3,342,171,0,2205,2204,1,0, + 0,0,2206,2209,1,0,0,0,2207,2205,1,0,0,0,2207,2208,1,0,0,0,2208,2233,1, + 0,0,0,2209,2207,1,0,0,0,2210,2211,5,254,0,0,2211,2212,5,255,0,0,2212,2213, + 3,2,1,0,2213,2214,5,27,0,0,2214,2218,3,146,73,0,2215,2217,3,342,171,0, + 2216,2215,1,0,0,0,2217,2220,1,0,0,0,2218,2216,1,0,0,0,2218,2219,1,0,0, + 0,2219,2233,1,0,0,0,2220,2218,1,0,0,0,2221,2222,5,254,0,0,2222,2223,5, + 41,0,0,2223,2224,3,32,16,0,2224,2225,5,42,0,0,2225,2229,3,228,114,0,2226, + 2228,3,342,171,0,2227,2226,1,0,0,0,2228,2231,1,0,0,0,2229,2227,1,0,0,0, + 2229,2230,1,0,0,0,2230,2233,1,0,0,0,2231,2229,1,0,0,0,2232,2124,1,0,0, + 0,2232,2125,1,0,0,0,2232,2127,1,0,0,0,2232,2128,1,0,0,0,2232,2130,1,0, + 0,0,2232,2132,1,0,0,0,2232,2135,1,0,0,0,2232,2136,1,0,0,0,2232,2137,1, + 0,0,0,2232,2138,1,0,0,0,2232,2139,1,0,0,0,2232,2140,1,0,0,0,2232,2141, + 1,0,0,0,2232,2142,1,0,0,0,2232,2143,1,0,0,0,2232,2144,1,0,0,0,2232,2149, + 1,0,0,0,2232,2156,1,0,0,0,2232,2161,1,0,0,0,2232,2166,1,0,0,0,2232,2176, + 1,0,0,0,2232,2177,1,0,0,0,2232,2188,1,0,0,0,2232,2197,1,0,0,0,2232,2210, + 1,0,0,0,2232,2221,1,0,0,0,2233,271,1,0,0,0,2234,2235,3,0,0,0,2235,2236, + 5,74,0,0,2236,273,1,0,0,0,2237,2240,3,44,22,0,2238,2240,3,46,23,0,2239, + 2237,1,0,0,0,2239,2238,1,0,0,0,2240,275,1,0,0,0,2241,2242,5,16,0,0,2242, + 2243,3,268,134,0,2243,2244,5,17,0,0,2244,277,1,0,0,0,2245,2246,3,282,141, + 0,2246,2247,3,280,140,0,2247,279,1,0,0,0,2248,2250,3,284,142,0,2249,2248, + 1,0,0,0,2250,2251,1,0,0,0,2251,2249,1,0,0,0,2251,2252,1,0,0,0,2252,281, + 1,0,0,0,2253,2254,5,158,0,0,2254,2266,3,276,138,0,2255,2256,5,158,0,0, + 2256,2257,3,0,0,0,2257,2258,5,159,0,0,2258,2259,3,0,0,0,2259,2266,1,0, + 0,0,2260,2261,5,158,0,0,2261,2262,3,32,16,0,2262,2263,5,159,0,0,2263,2264, + 3,32,16,0,2264,2266,1,0,0,0,2265,2253,1,0,0,0,2265,2255,1,0,0,0,2265,2260, + 1,0,0,0,2266,283,1,0,0,0,2267,2268,3,288,144,0,2268,2269,3,294,147,0,2269, + 2280,1,0,0,0,2270,2271,3,286,143,0,2271,2272,3,294,147,0,2272,2280,1,0, + 0,0,2273,2274,3,290,145,0,2274,2275,3,294,147,0,2275,2280,1,0,0,0,2276, + 2277,3,292,146,0,2277,2278,3,294,147,0,2278,2280,1,0,0,0,2279,2267,1,0, + 0,0,2279,2270,1,0,0,0,2279,2273,1,0,0,0,2279,2276,1,0,0,0,2280,285,1,0, + 0,0,2281,2282,5,160,0,0,2282,2288,3,276,138,0,2283,2284,5,160,0,0,2284, + 2288,3,0,0,0,2285,2286,5,160,0,0,2286,2288,3,32,16,0,2287,2281,1,0,0,0, + 2287,2283,1,0,0,0,2287,2285,1,0,0,0,2288,287,1,0,0,0,2289,2290,5,161,0, + 0,2290,2291,3,146,73,0,2291,289,1,0,0,0,2292,2293,5,162,0,0,2293,291,1, + 0,0,0,2294,2295,5,163,0,0,2295,293,1,0,0,0,2296,2308,3,276,138,0,2297, + 2298,5,164,0,0,2298,2299,3,0,0,0,2299,2300,5,159,0,0,2300,2301,3,0,0,0, + 2301,2308,1,0,0,0,2302,2303,5,164,0,0,2303,2304,3,32,16,0,2304,2305,5, + 159,0,0,2305,2306,3,32,16,0,2306,2308,1,0,0,0,2307,2296,1,0,0,0,2307,2297, + 1,0,0,0,2307,2302,1,0,0,0,2308,295,1,0,0,0,2309,2310,3,298,149,0,2310, + 2311,3,302,151,0,2311,297,1,0,0,0,2312,2313,5,165,0,0,2313,2314,3,300, + 150,0,2314,2315,3,0,0,0,2315,2316,5,35,0,0,2316,2320,1,0,0,0,2317,2318, + 5,165,0,0,2318,2320,3,300,150,0,2319,2312,1,0,0,0,2319,2317,1,0,0,0,2320, + 299,1,0,0,0,2321,2325,1,0,0,0,2322,2325,5,166,0,0,2323,2325,5,2,0,0,2324, + 2321,1,0,0,0,2324,2322,1,0,0,0,2324,2323,1,0,0,0,2325,301,1,0,0,0,2326, + 2327,5,16,0,0,2327,2328,3,304,152,0,2328,2329,5,17,0,0,2329,2336,1,0,0, + 0,2330,2332,3,308,154,0,2331,2330,1,0,0,0,2332,2333,1,0,0,0,2333,2331, + 1,0,0,0,2333,2334,1,0,0,0,2334,2336,1,0,0,0,2335,2326,1,0,0,0,2335,2331, + 1,0,0,0,2336,303,1,0,0,0,2337,2338,3,308,154,0,2338,2339,5,27,0,0,2339, + 2341,1,0,0,0,2340,2337,1,0,0,0,2341,2344,1,0,0,0,2342,2340,1,0,0,0,2342, + 2343,1,0,0,0,2343,2345,1,0,0,0,2344,2342,1,0,0,0,2345,2346,3,308,154,0, + 2346,305,1,0,0,0,2347,2353,1,0,0,0,2348,2349,5,41,0,0,2349,2350,3,32,16, + 0,2350,2351,5,42,0,0,2351,2353,1,0,0,0,2352,2347,1,0,0,0,2352,2348,1,0, + 0,0,2353,307,1,0,0,0,2354,2355,5,180,0,0,2355,2356,5,261,0,0,2356,2357, + 5,29,0,0,2357,2358,3,6,3,0,2358,2359,5,30,0,0,2359,2421,1,0,0,0,2360,2361, + 5,259,0,0,2361,2362,5,29,0,0,2362,2363,3,0,0,0,2363,2364,5,30,0,0,2364, + 2421,1,0,0,0,2365,2366,5,259,0,0,2366,2421,3,0,0,0,2367,2368,5,83,0,0, + 2368,2369,5,29,0,0,2369,2370,3,312,156,0,2370,2371,5,30,0,0,2371,2421, + 1,0,0,0,2372,2373,5,187,0,0,2373,2374,5,29,0,0,2374,2375,3,36,18,0,2375, + 2376,5,30,0,0,2376,2377,3,306,153,0,2377,2421,1,0,0,0,2378,2379,5,188, + 0,0,2379,2380,5,29,0,0,2380,2381,3,36,18,0,2381,2382,5,30,0,0,2382,2383, + 3,306,153,0,2383,2421,1,0,0,0,2384,2385,5,186,0,0,2385,2386,5,29,0,0,2386, + 2387,3,34,17,0,2387,2388,5,30,0,0,2388,2389,3,306,153,0,2389,2421,1,0, + 0,0,2390,2391,5,185,0,0,2391,2392,5,29,0,0,2392,2393,3,32,16,0,2393,2394, + 5,30,0,0,2394,2395,3,306,153,0,2395,2421,1,0,0,0,2396,2397,5,184,0,0,2397, + 2398,5,29,0,0,2398,2399,3,32,16,0,2399,2400,5,30,0,0,2400,2401,3,306,153, + 0,2401,2421,1,0,0,0,2402,2403,5,183,0,0,2403,2404,5,29,0,0,2404,2405,3, + 32,16,0,2405,2406,5,30,0,0,2406,2407,3,306,153,0,2407,2421,1,0,0,0,2408, + 2409,5,187,0,0,2409,2421,3,306,153,0,2410,2411,5,188,0,0,2411,2421,3,306, + 153,0,2412,2413,5,186,0,0,2413,2421,3,306,153,0,2414,2415,5,185,0,0,2415, + 2421,3,306,153,0,2416,2417,5,184,0,0,2417,2421,3,306,153,0,2418,2419,5, + 183,0,0,2419,2421,3,306,153,0,2420,2354,1,0,0,0,2420,2360,1,0,0,0,2420, + 2365,1,0,0,0,2420,2367,1,0,0,0,2420,2372,1,0,0,0,2420,2378,1,0,0,0,2420, + 2384,1,0,0,0,2420,2390,1,0,0,0,2420,2396,1,0,0,0,2420,2402,1,0,0,0,2420, + 2408,1,0,0,0,2420,2410,1,0,0,0,2420,2412,1,0,0,0,2420,2414,1,0,0,0,2420, + 2416,1,0,0,0,2420,2418,1,0,0,0,2421,309,1,0,0,0,2422,2423,5,187,0,0,2423, + 2424,5,29,0,0,2424,2425,3,36,18,0,2425,2426,5,30,0,0,2426,2498,1,0,0,0, + 2427,2428,5,188,0,0,2428,2429,5,29,0,0,2429,2430,3,36,18,0,2430,2431,5, + 30,0,0,2431,2498,1,0,0,0,2432,2433,5,187,0,0,2433,2434,5,29,0,0,2434,2435, + 3,32,16,0,2435,2436,5,30,0,0,2436,2498,1,0,0,0,2437,2438,5,188,0,0,2438, + 2439,5,29,0,0,2439,2440,3,34,17,0,2440,2441,5,30,0,0,2441,2498,1,0,0,0, + 2442,2443,5,186,0,0,2443,2444,5,29,0,0,2444,2445,3,34,17,0,2445,2446,5, + 30,0,0,2446,2498,1,0,0,0,2447,2448,5,185,0,0,2448,2449,5,29,0,0,2449,2450, + 3,32,16,0,2450,2451,5,30,0,0,2451,2498,1,0,0,0,2452,2453,5,184,0,0,2453, + 2454,5,29,0,0,2454,2455,3,32,16,0,2455,2456,5,30,0,0,2456,2498,1,0,0,0, + 2457,2458,5,183,0,0,2458,2459,5,29,0,0,2459,2460,3,32,16,0,2460,2461,5, + 30,0,0,2461,2498,1,0,0,0,2462,2463,5,192,0,0,2463,2464,5,29,0,0,2464,2465, + 3,34,17,0,2465,2466,5,30,0,0,2466,2498,1,0,0,0,2467,2468,5,191,0,0,2468, + 2469,5,29,0,0,2469,2470,3,32,16,0,2470,2471,5,30,0,0,2471,2498,1,0,0,0, + 2472,2473,5,190,0,0,2473,2474,5,29,0,0,2474,2475,3,32,16,0,2475,2476,5, + 30,0,0,2476,2498,1,0,0,0,2477,2478,5,189,0,0,2478,2479,5,29,0,0,2479,2480, + 3,32,16,0,2480,2481,5,30,0,0,2481,2498,1,0,0,0,2482,2483,5,180,0,0,2483, + 2484,5,29,0,0,2484,2485,3,32,16,0,2485,2486,5,30,0,0,2486,2498,1,0,0,0, + 2487,2488,5,182,0,0,2488,2489,5,29,0,0,2489,2490,3,184,92,0,2490,2491, + 5,30,0,0,2491,2498,1,0,0,0,2492,2493,5,83,0,0,2493,2494,5,29,0,0,2494, + 2495,3,312,156,0,2495,2496,5,30,0,0,2496,2498,1,0,0,0,2497,2422,1,0,0, + 0,2497,2427,1,0,0,0,2497,2432,1,0,0,0,2497,2437,1,0,0,0,2497,2442,1,0, + 0,0,2497,2447,1,0,0,0,2497,2452,1,0,0,0,2497,2457,1,0,0,0,2497,2462,1, + 0,0,0,2497,2467,1,0,0,0,2497,2472,1,0,0,0,2497,2477,1,0,0,0,2497,2482, + 1,0,0,0,2497,2487,1,0,0,0,2497,2492,1,0,0,0,2498,311,1,0,0,0,2499,2501, + 3,314,157,0,2500,2499,1,0,0,0,2501,2504,1,0,0,0,2502,2500,1,0,0,0,2502, + 2503,1,0,0,0,2503,313,1,0,0,0,2504,2502,1,0,0,0,2505,2506,7,12,0,0,2506, + 315,1,0,0,0,2507,2511,3,310,155,0,2508,2511,3,6,3,0,2509,2511,5,178,0, + 0,2510,2507,1,0,0,0,2510,2508,1,0,0,0,2510,2509,1,0,0,0,2511,317,1,0,0, + 0,2512,2661,3,310,155,0,2513,2514,5,181,0,0,2514,2515,5,29,0,0,2515,2516, + 5,178,0,0,2516,2661,5,30,0,0,2517,2518,5,181,0,0,2518,2519,5,29,0,0,2519, + 2520,5,263,0,0,2520,2661,5,30,0,0,2521,2522,5,195,0,0,2522,2523,5,29,0, + 0,2523,2524,5,38,0,0,2524,2525,5,263,0,0,2525,2661,5,30,0,0,2526,2527, + 5,195,0,0,2527,2528,5,29,0,0,2528,2529,3,138,69,0,2529,2530,5,30,0,0,2530, + 2661,1,0,0,0,2531,2532,5,195,0,0,2532,2533,5,29,0,0,2533,2534,5,178,0, + 0,2534,2661,5,30,0,0,2535,2536,5,196,0,0,2536,2537,5,29,0,0,2537,2538, + 3,318,159,0,2538,2539,5,30,0,0,2539,2661,1,0,0,0,2540,2541,5,187,0,0,2541, + 2542,5,41,0,0,2542,2543,3,32,16,0,2543,2544,5,42,0,0,2544,2545,5,29,0, + 0,2545,2546,3,320,160,0,2546,2547,5,30,0,0,2547,2661,1,0,0,0,2548,2549, + 5,188,0,0,2549,2550,5,41,0,0,2550,2551,3,32,16,0,2551,2552,5,42,0,0,2552, + 2553,5,29,0,0,2553,2554,3,322,161,0,2554,2555,5,30,0,0,2555,2661,1,0,0, + 0,2556,2557,5,186,0,0,2557,2558,5,41,0,0,2558,2559,3,32,16,0,2559,2560, + 5,42,0,0,2560,2561,5,29,0,0,2561,2562,3,324,162,0,2562,2563,5,30,0,0,2563, + 2661,1,0,0,0,2564,2565,5,185,0,0,2565,2566,5,41,0,0,2566,2567,3,32,16, + 0,2567,2568,5,42,0,0,2568,2569,5,29,0,0,2569,2570,3,326,163,0,2570,2571, + 5,30,0,0,2571,2661,1,0,0,0,2572,2573,5,184,0,0,2573,2574,5,41,0,0,2574, + 2575,3,32,16,0,2575,2576,5,42,0,0,2576,2577,5,29,0,0,2577,2578,3,328,164, + 0,2578,2579,5,30,0,0,2579,2661,1,0,0,0,2580,2581,5,183,0,0,2581,2582,5, + 41,0,0,2582,2583,3,32,16,0,2583,2584,5,42,0,0,2584,2585,5,29,0,0,2585, + 2586,3,330,165,0,2586,2587,5,30,0,0,2587,2661,1,0,0,0,2588,2589,5,192, + 0,0,2589,2590,5,41,0,0,2590,2591,3,32,16,0,2591,2592,5,42,0,0,2592,2593, + 5,29,0,0,2593,2594,3,324,162,0,2594,2595,5,30,0,0,2595,2661,1,0,0,0,2596, + 2597,5,191,0,0,2597,2598,5,41,0,0,2598,2599,3,32,16,0,2599,2600,5,42,0, + 0,2600,2601,5,29,0,0,2601,2602,3,326,163,0,2602,2603,5,30,0,0,2603,2661, + 1,0,0,0,2604,2605,5,190,0,0,2605,2606,5,41,0,0,2606,2607,3,32,16,0,2607, + 2608,5,42,0,0,2608,2609,5,29,0,0,2609,2610,3,328,164,0,2610,2611,5,30, + 0,0,2611,2661,1,0,0,0,2612,2613,5,189,0,0,2613,2614,5,41,0,0,2614,2615, + 3,32,16,0,2615,2616,5,42,0,0,2616,2617,5,29,0,0,2617,2618,3,330,165,0, + 2618,2619,5,30,0,0,2619,2661,1,0,0,0,2620,2621,5,180,0,0,2621,2622,5,41, + 0,0,2622,2623,3,32,16,0,2623,2624,5,42,0,0,2624,2625,5,29,0,0,2625,2626, + 3,328,164,0,2626,2627,5,30,0,0,2627,2661,1,0,0,0,2628,2629,5,182,0,0,2629, + 2630,5,41,0,0,2630,2631,3,32,16,0,2631,2632,5,42,0,0,2632,2633,5,29,0, + 0,2633,2634,3,332,166,0,2634,2635,5,30,0,0,2635,2661,1,0,0,0,2636,2637, + 5,181,0,0,2637,2638,5,41,0,0,2638,2639,3,32,16,0,2639,2640,5,42,0,0,2640, + 2641,5,29,0,0,2641,2642,3,334,167,0,2642,2643,5,30,0,0,2643,2661,1,0,0, + 0,2644,2645,5,195,0,0,2645,2646,5,41,0,0,2646,2647,3,32,16,0,2647,2648, + 5,42,0,0,2648,2649,5,29,0,0,2649,2650,3,336,168,0,2650,2651,5,30,0,0,2651, + 2661,1,0,0,0,2652,2653,5,196,0,0,2653,2654,5,41,0,0,2654,2655,3,32,16, + 0,2655,2656,5,42,0,0,2656,2657,5,29,0,0,2657,2658,3,340,170,0,2658,2659, + 5,30,0,0,2659,2661,1,0,0,0,2660,2512,1,0,0,0,2660,2513,1,0,0,0,2660,2517, + 1,0,0,0,2660,2521,1,0,0,0,2660,2526,1,0,0,0,2660,2531,1,0,0,0,2660,2535, + 1,0,0,0,2660,2540,1,0,0,0,2660,2548,1,0,0,0,2660,2556,1,0,0,0,2660,2564, + 1,0,0,0,2660,2572,1,0,0,0,2660,2580,1,0,0,0,2660,2588,1,0,0,0,2660,2596, + 1,0,0,0,2660,2604,1,0,0,0,2660,2612,1,0,0,0,2660,2620,1,0,0,0,2660,2628, + 1,0,0,0,2660,2636,1,0,0,0,2660,2644,1,0,0,0,2660,2652,1,0,0,0,2661,319, + 1,0,0,0,2662,2665,3,36,18,0,2663,2665,3,32,16,0,2664,2662,1,0,0,0,2664, + 2663,1,0,0,0,2665,2668,1,0,0,0,2666,2664,1,0,0,0,2666,2667,1,0,0,0,2667, + 321,1,0,0,0,2668,2666,1,0,0,0,2669,2672,3,36,18,0,2670,2672,3,34,17,0, + 2671,2669,1,0,0,0,2671,2670,1,0,0,0,2672,2675,1,0,0,0,2673,2671,1,0,0, + 0,2673,2674,1,0,0,0,2674,323,1,0,0,0,2675,2673,1,0,0,0,2676,2678,3,34, + 17,0,2677,2676,1,0,0,0,2678,2681,1,0,0,0,2679,2677,1,0,0,0,2679,2680,1, + 0,0,0,2680,325,1,0,0,0,2681,2679,1,0,0,0,2682,2684,3,32,16,0,2683,2682, + 1,0,0,0,2684,2687,1,0,0,0,2685,2683,1,0,0,0,2685,2686,1,0,0,0,2686,327, + 1,0,0,0,2687,2685,1,0,0,0,2688,2690,3,32,16,0,2689,2688,1,0,0,0,2690,2693, + 1,0,0,0,2691,2689,1,0,0,0,2691,2692,1,0,0,0,2692,329,1,0,0,0,2693,2691, + 1,0,0,0,2694,2696,3,32,16,0,2695,2694,1,0,0,0,2696,2699,1,0,0,0,2697,2695, + 1,0,0,0,2697,2698,1,0,0,0,2698,331,1,0,0,0,2699,2697,1,0,0,0,2700,2702, + 3,184,92,0,2701,2700,1,0,0,0,2702,2705,1,0,0,0,2703,2701,1,0,0,0,2703, + 2704,1,0,0,0,2704,333,1,0,0,0,2705,2703,1,0,0,0,2706,2708,7,13,0,0,2707, + 2706,1,0,0,0,2708,2711,1,0,0,0,2709,2707,1,0,0,0,2709,2710,1,0,0,0,2710, + 335,1,0,0,0,2711,2709,1,0,0,0,2712,2714,3,338,169,0,2713,2712,1,0,0,0, + 2714,2717,1,0,0,0,2715,2713,1,0,0,0,2715,2716,1,0,0,0,2716,337,1,0,0,0, + 2717,2715,1,0,0,0,2718,2723,5,178,0,0,2719,2720,5,38,0,0,2720,2723,5,263, + 0,0,2721,2723,3,138,69,0,2722,2718,1,0,0,0,2722,2719,1,0,0,0,2722,2721, + 1,0,0,0,2723,339,1,0,0,0,2724,2726,3,318,159,0,2725,2724,1,0,0,0,2726, + 2729,1,0,0,0,2727,2725,1,0,0,0,2727,2728,1,0,0,0,2728,341,1,0,0,0,2729, + 2727,1,0,0,0,2730,2734,3,44,22,0,2731,2734,3,46,23,0,2732,2734,3,2,1,0, + 2733,2730,1,0,0,0,2733,2731,1,0,0,0,2733,2732,1,0,0,0,2734,343,1,0,0,0, + 2735,2736,5,167,0,0,2736,2737,5,35,0,0,2737,2738,5,29,0,0,2738,2739,3, + 312,156,0,2739,2740,5,30,0,0,2740,2761,1,0,0,0,2741,2742,5,168,0,0,2742, + 2743,3,38,19,0,2743,2744,5,74,0,0,2744,2745,3,38,19,0,2745,2746,5,74,0, + 0,2746,2747,3,38,19,0,2747,2748,5,74,0,0,2748,2749,3,38,19,0,2749,2761, + 1,0,0,0,2750,2751,5,169,0,0,2751,2761,3,6,3,0,2752,2753,5,169,0,0,2753, + 2754,5,35,0,0,2754,2755,5,29,0,0,2755,2756,3,312,156,0,2756,2757,5,30, + 0,0,2757,2761,1,0,0,0,2758,2761,3,342,171,0,2759,2761,3,40,20,0,2760,2735, + 1,0,0,0,2760,2741,1,0,0,0,2760,2750,1,0,0,0,2760,2752,1,0,0,0,2760,2758, + 1,0,0,0,2760,2759,1,0,0,0,2761,345,1,0,0,0,2762,2763,5,24,0,0,2763,2764, + 5,39,0,0,2764,2765,3,98,49,0,2765,2766,3,2,1,0,2766,2775,1,0,0,0,2767, + 2768,5,24,0,0,2768,2769,5,39,0,0,2769,2770,3,98,49,0,2770,2771,3,2,1,0, + 2771,2772,5,33,0,0,2772,2773,3,2,1,0,2773,2775,1,0,0,0,2774,2762,1,0,0, + 0,2774,2767,1,0,0,0,2775,347,1,0,0,0,2776,2778,3,350,175,0,2777,2776,1, + 0,0,0,2778,2781,1,0,0,0,2779,2777,1,0,0,0,2779,2780,1,0,0,0,2780,349,1, + 0,0,0,2781,2779,1,0,0,0,2782,2783,5,179,0,0,2783,2784,5,35,0,0,2784,2785, + 5,29,0,0,2785,2786,3,312,156,0,2786,2787,5,30,0,0,2787,2797,1,0,0,0,2788, + 2797,3,344,172,0,2789,2790,5,170,0,0,2790,2791,5,35,0,0,2791,2792,5,29, + 0,0,2792,2793,3,312,156,0,2793,2794,5,30,0,0,2794,2797,1,0,0,0,2795,2797, + 5,54,0,0,2796,2782,1,0,0,0,2796,2788,1,0,0,0,2796,2789,1,0,0,0,2796,2795, + 1,0,0,0,2797,351,1,0,0,0,2798,2799,5,49,0,0,2799,2803,5,39,0,0,2800,2802, + 3,356,178,0,2801,2800,1,0,0,0,2802,2805,1,0,0,0,2803,2801,1,0,0,0,2803, + 2804,1,0,0,0,2804,2806,1,0,0,0,2805,2803,1,0,0,0,2806,2807,3,2,1,0,2807, + 353,1,0,0,0,2808,2812,5,300,0,0,2809,2811,3,356,178,0,2810,2809,1,0,0, + 0,2811,2814,1,0,0,0,2812,2810,1,0,0,0,2812,2813,1,0,0,0,2813,2815,1,0, + 0,0,2814,2812,1,0,0,0,2815,2816,3,2,1,0,2816,355,1,0,0,0,2817,2833,5,51, + 0,0,2818,2833,5,50,0,0,2819,2833,5,171,0,0,2820,2821,5,61,0,0,2821,2833, + 5,50,0,0,2822,2823,5,61,0,0,2823,2833,5,51,0,0,2824,2825,5,61,0,0,2825, + 2833,5,62,0,0,2826,2827,5,61,0,0,2827,2833,5,63,0,0,2828,2829,5,61,0,0, + 2829,2833,5,64,0,0,2830,2831,5,61,0,0,2831,2833,5,65,0,0,2832,2817,1,0, + 0,0,2832,2818,1,0,0,0,2832,2819,1,0,0,0,2832,2820,1,0,0,0,2832,2822,1, + 0,0,0,2832,2824,1,0,0,0,2832,2826,1,0,0,0,2832,2828,1,0,0,0,2832,2830, + 1,0,0,0,2833,357,1,0,0,0,2834,2836,3,360,180,0,2835,2834,1,0,0,0,2836, + 2839,1,0,0,0,2837,2835,1,0,0,0,2837,2838,1,0,0,0,2838,359,1,0,0,0,2839, + 2837,1,0,0,0,2840,2841,5,20,0,0,2841,2854,3,2,1,0,2842,2843,5,49,0,0,2843, + 2844,5,39,0,0,2844,2854,3,140,70,0,2845,2846,5,24,0,0,2846,2847,5,39,0, + 0,2847,2854,3,2,1,0,2848,2854,3,196,98,0,2849,2850,5,49,0,0,2850,2854, + 3,32,16,0,2851,2854,3,342,171,0,2852,2854,3,40,20,0,2853,2840,1,0,0,0, + 2853,2842,1,0,0,0,2853,2845,1,0,0,0,2853,2848,1,0,0,0,2853,2849,1,0,0, + 0,2853,2851,1,0,0,0,2853,2852,1,0,0,0,2854,361,1,0,0,0,2855,2859,5,273, + 0,0,2856,2858,3,364,182,0,2857,2856,1,0,0,0,2858,2861,1,0,0,0,2859,2857, + 1,0,0,0,2859,2860,1,0,0,0,2860,2862,1,0,0,0,2861,2859,1,0,0,0,2862,2875, + 3,2,1,0,2863,2867,5,273,0,0,2864,2866,3,364,182,0,2865,2864,1,0,0,0,2866, + 2869,1,0,0,0,2867,2865,1,0,0,0,2867,2868,1,0,0,0,2868,2870,1,0,0,0,2869, + 2867,1,0,0,0,2870,2871,3,2,1,0,2871,2872,5,33,0,0,2872,2873,3,2,1,0,2873, + 2875,1,0,0,0,2874,2855,1,0,0,0,2874,2863,1,0,0,0,2875,363,1,0,0,0,2876, + 2877,7,14,0,0,2877,365,1,0,0,0,2878,2880,3,368,184,0,2879,2878,1,0,0,0, + 2880,2883,1,0,0,0,2881,2879,1,0,0,0,2881,2882,1,0,0,0,2882,367,1,0,0,0, + 2883,2881,1,0,0,0,2884,2885,5,20,0,0,2885,2886,3,2,1,0,2886,2887,5,43, + 0,0,2887,2888,3,32,16,0,2888,2895,1,0,0,0,2889,2890,5,24,0,0,2890,2891, + 5,39,0,0,2891,2895,3,2,1,0,2892,2895,3,342,171,0,2893,2895,3,40,20,0,2894, + 2884,1,0,0,0,2894,2889,1,0,0,0,2894,2892,1,0,0,0,2894,2893,1,0,0,0,2895, + 369,1,0,0,0,172,378,383,391,399,452,500,509,533,537,555,582,605,641,647, + 654,656,666,668,675,686,694,715,717,733,778,783,788,793,801,911,917,933, + 939,945,952,1060,1065,1071,1076,1078,1086,1098,1110,1117,1124,1126,1153, + 1160,1168,1176,1189,1196,1199,1218,1304,1313,1320,1323,1331,1352,1384, + 1407,1419,1428,1453,1470,1478,1482,1497,1504,1549,1559,1575,1587,1599, + 1613,1625,1636,1643,1653,1666,1671,1676,1685,1696,1779,1788,1801,1812, + 1820,1830,1832,1859,1866,1871,1878,1884,1894,1898,1905,1920,1926,1940, + 1953,1961,1968,1972,1977,1993,1998,2000,2013,2039,2046,2048,2053,2059, + 2088,2093,2116,2121,2185,2194,2207,2218,2229,2232,2239,2251,2265,2279, + 2287,2307,2319,2324,2333,2335,2342,2352,2420,2497,2502,2510,2660,2664, + 2666,2671,2673,2679,2685,2691,2697,2703,2709,2715,2722,2727,2733,2760, + 2774,2779,2796,2803,2812,2832,2837,2853,2859,2867,2874,2881,2894 }; public static readonly ATN _ATN = diff --git a/src/tools/ilasm/src/ILAssembler/gen/CILVisitor.cs b/src/tools/ilasm/src/ILAssembler/gen/CILVisitor.cs index 205718d840681c..d74d21a93c4052 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/CILVisitor.cs +++ b/src/tools/ilasm/src/ILAssembler/gen/CILVisitor.cs @@ -45,6 +45,12 @@ public interface ICILVisitor : IParseTreeVisitor { /// The visitor result. Result VisitDottedName([NotNull] CILParser.DottedNameContext context); /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitDottedNamePart([NotNull] CILParser.DottedNamePartContext context); + /// /// Visit a parse tree produced by . /// /// The parse tree. @@ -111,6 +117,12 @@ public interface ICILVisitor : IParseTreeVisitor { /// The visitor result. Result VisitLanguageDecl([NotNull] CILParser.LanguageDeclContext context); /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitLanguageString([NotNull] CILParser.LanguageStringContext context); + /// /// Visit a parse tree produced by . /// /// The parse tree. @@ -610,6 +622,18 @@ public interface ICILVisitor : IParseTreeVisitor { /// The visitor result. Result VisitBound([NotNull] CILParser.BoundContext context); /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitNativeInt([NotNull] CILParser.NativeIntContext context); + /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitNativeUint([NotNull] CILParser.NativeUintContext context); + /// /// Visit a parse tree produced by . /// /// The parse tree. @@ -1030,11 +1054,11 @@ public interface ICILVisitor : IParseTreeVisitor { /// The visitor result. Result VisitBytes([NotNull] CILParser.BytesContext context); /// - /// Visit a parse tree produced by . + /// Visit a parse tree produced by . /// /// The parse tree. /// The visitor result. - Result VisitHexbytes([NotNull] CILParser.HexbytesContext context); + Result VisitHexbyte([NotNull] CILParser.HexbyteContext context); /// /// Visit a parse tree produced by . /// diff --git a/src/tools/ilasm/src/ILAssembler/gen/ilasm-generator.csproj b/src/tools/ilasm/src/ILAssembler/gen/ilasm-generator.csproj index c5bbe1eb8bfece..e4b7699a7e0634 100644 --- a/src/tools/ilasm/src/ILAssembler/gen/ilasm-generator.csproj +++ b/src/tools/ilasm/src/ILAssembler/gen/ilasm-generator.csproj @@ -31,12 +31,15 @@ + + <_AntlrGrammarAbsolutePath>$([System.IO.Path]::GetFullPath('$(ProjectDir)CIL.g4').Replace('\','/')) + <_AntlrGeneratedFiles Include="$(ProjectDir)CIL*.cs" /> diff --git a/src/tools/ilasm/src/ilasm/IlasmRootCommand.cs b/src/tools/ilasm/src/ilasm/IlasmRootCommand.cs index bdae7539a4e40c..11a8452be61846 100644 --- a/src/tools/ilasm/src/ilasm/IlasmRootCommand.cs +++ b/src/tools/ilasm/src/ilasm/IlasmRootCommand.cs @@ -13,104 +13,104 @@ internal sealed class IlasmRootCommand : RootCommand new("input-file-paths") { Description = "Input IL source file(s)", Arity = ArgumentArity.OneOrMore }; public Option OutputFilePath { get; } = - new("--output", "-o") { Description = "Compile to file with specified name (user must provide extension, if any)" }; + new("--output", "-o", "-OUTPUT") { Description = "Compile to file with specified name (user must provide extension, if any)" }; public Option BuildDll { get; } = - new("--dll") { Description = "Compile to .dll" }; + new("--dll", "-DLL") { Description = "Compile to .dll" }; public Option BuildExe { get; } = - new("--exe") { Description = "Compile to .exe (default)" }; + new("--exe", "-EXE") { Description = "Compile to .exe (default)" }; public Option Debug { get; } = - new("--debug", "-g") { Description = "Disable JIT optimization, create PDB file, use sequence points from PDB" }; + new("--debug", "-g", "-DEBUG") { Description = "Disable JIT optimization, create PDB file, use sequence points from PDB" }; public Option DebugMode { get; } = new("--debug-mode") { Description = "Debug mode: 'impl' (implicit sequence points) or 'opt' (enable JIT optimization)" }; public Option Optimize { get; } = - new("--optimize", "-O") { Description = "Optimize long instructions to short" }; + new("--optimize", "-O", "-OPTIMIZE") { Description = "Optimize long instructions to short" }; public Option Fold { get; } = - new("--fold") { Description = "Fold identical method bodies into one" }; + new("--fold", "-FOLD") { Description = "Fold identical method bodies into one" }; public Option NoLogo { get; } = - new("--nologo") { Description = "Don't print the logo" }; + new("--nologo", "-NOLOGO") { Description = "Don't print the logo" }; public Option Quiet { get; } = - new("--quiet", "-q") { Description = "Don't report assembly progress" }; + new("--quiet", "-q", "-QUIET") { Description = "Don't report assembly progress" }; public Option NoAutoInherit { get; } = - new("--noautoinherit") { Description = "Disable inheriting from System.Object by default" }; + new("--noautoinherit", "-NOAUTOINHERIT") { Description = "Disable inheriting from System.Object by default" }; public Option Pdb { get; } = - new("--pdb") { Description = "Create the PDB file without enabling debug info tracking" }; + new("--pdb", "-PDB") { Description = "Create the PDB file without enabling debug info tracking" }; public Option AppContainer { get; } = - new("--appcontainer") { Description = "Create an AppContainer exe or dll" }; + new("--appcontainer", "-APPCONTAINER") { Description = "Create an AppContainer exe or dll" }; public Option Deterministic { get; } = - new("--deterministic", "--det") { Description = "Produce deterministic outputs" }; + new("--deterministic", "--det", "-DET") { Description = "Produce deterministic outputs" }; public Option ErrorTolerant { get; } = - new("--error", "--err") { Description = "Try to create output file despite errors (results may be invalid)" }; + new("--error", "--err", "-ERROR") { Description = "Try to create output file despite errors (results may be invalid)" }; public Option Clock { get; } = - new("--clock") { Description = "Measure and report compilation times" }; + new("--clock", "-CLOCK") { Description = "Measure and report compilation times" }; public Option KeyFile { get; } = - new("--key", "-k") { Description = "Compile with strong signature (file contains private key, prefix with @ for key source name)" }; + new("--key", "-k", "-KEY") { Description = "Compile with strong signature (file contains private key, prefix with @ for key source name)" }; public Option AssemblyName { get; } = - new("--aname") { Description = "Override the name of the compiled assembly" }; + new("--aname", "-ANAME") { Description = "Override the name of the compiled assembly" }; public Option IncludePath { get; } = - new("--include", "-I") { Description = "Set path to search for #include'd files" }; + new("--include", "-I", "-INC") { Description = "Set path to search for #include'd files" }; public Option Subsystem { get; } = - new("--subsystem") { Description = "Set Subsystem value in the NT Optional header" }; + new("--subsystem", "-SUBSYSTEM") { Description = "Set Subsystem value in the NT Optional header" }; public Option SubsystemVersion { get; } = - new("--ssver") { Description = "Set Subsystem version number in the NT Optional header (format: major.minor)" }; + new("--ssver", "-SSVER") { Description = "Set Subsystem version number in the NT Optional header (format: major.minor)" }; public Option Flags { get; } = - new("--flags") { Description = "Set CLR ImageFlags value in the CLR header" }; + new("--flags", "-FLAGS") { Description = "Set CLR ImageFlags value in the CLR header" }; public Option Alignment { get; } = - new("--alignment") { Description = "Set FileAlignment value in the NT Optional header" }; + new("--alignment", "-ALIGNMENT") { Description = "Set FileAlignment value in the NT Optional header" }; public Option ImageBase { get; } = - new("--base") { Description = "Set ImageBase value in the NT Optional header (max 2GB for 32-bit images)" }; + new("--base", "-BASE") { Description = "Set ImageBase value in the NT Optional header (max 2GB for 32-bit images)" }; public Option StackReserve { get; } = - new("--stack") { Description = "Set SizeOfStackReserve value in the NT Optional header" }; + new("--stack", "-STACK") { Description = "Set SizeOfStackReserve value in the NT Optional header" }; public Option MetadataVersion { get; } = - new("--mdv") { Description = "Set Metadata version string" }; + new("--mdv", "-MDV") { Description = "Set Metadata version string" }; public Option Pe64 { get; } = - new("--pe64") { Description = "Create a 64bit image (PE32+)" }; + new("--pe64", "-PE64") { Description = "Create a 64bit image (PE32+)" }; public Option HighEntropyVa { get; } = - new("--highentropyva") { Description = "Set High Entropy Virtual Address capable PE32+ images (default for /APPCONTAINER)" }; + new("--highentropyva", "-HIGHENTROPYVA") { Description = "Set High Entropy Virtual Address capable PE32+ images (default for /APPCONTAINER)" }; // NOTE: NoCorStub is not applicable for pure managed assemblies (used for mixed-mode native stubs) public Option NoCorStub { get; } = - new("--nocorstub") { Description = "Suppress generation of CORExeMain stub" }; + new("--nocorstub", "-NOCORSTUB") { Description = "Suppress generation of CORExeMain stub" }; public Option StripReloc { get; } = - new("--stripreloc") { Description = "Indicate that no base relocations are needed" }; + new("--stripreloc", "-STRIPRELOC") { Description = "Indicate that no base relocations are needed" }; public Option TargetX64 { get; } = - new("--x64") { Description = "Target processor: 64bit AMD processor" }; + new("--x64", "-X64") { Description = "Target processor: 64bit AMD processor" }; public Option TargetArm { get; } = - new("--arm") { Description = "Target processor: ARM (AArch32) processor" }; + new("--arm", "-ARM") { Description = "Target processor: ARM (AArch32) processor" }; public Option TargetArm64 { get; } = - new("--arm64") { Description = "Target processor: ARM64 (AArch64) processor" }; + new("--arm64", "-ARM64") { Description = "Target processor: ARM64 (AArch64) processor" }; public Option Prefer32Bit { get; } = - new("--32bitpreferred") { Description = "Create a 32BitPreferred image (PE32)" }; + new("--32bitpreferred", "-32BITPREFERRED") { Description = "Create a 32BitPreferred image (PE32)" }; public Option WaitForDebugger { get; } = new("--waitfordebugger") { Description = "Pause to give opportunity to attach debugger" }; diff --git a/src/tools/ilasm/src/ilasm/Program.cs b/src/tools/ilasm/src/ilasm/Program.cs index f9df8ad13d9044..d937d7b8c5d176 100644 --- a/src/tools/ilasm/src/ilasm/Program.cs +++ b/src/tools/ilasm/src/ilasm/Program.cs @@ -3,13 +3,13 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.CommandLine; using System.CommandLine.Parsing; using System.Diagnostics; using System.IO; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; -using System.Text; namespace ILAssembler; @@ -72,16 +72,12 @@ public int Run() } } - // Concatenate all input files - var contentBuilder = new StringBuilder(); + // Build individual SourceText for each input file + var documents = ImmutableArray.CreateBuilder(inputFiles.Length); foreach (string file in inputFiles) { - contentBuilder.AppendLine(File.ReadAllText(file)); + documents.Add(new SourceText(File.ReadAllText(file), file)); } - string content = contentBuilder.ToString(); - - // Use the first file as the primary document for source tracking - var document = new SourceText(content, inputFiles[0]); // Build options bool errorTolerant = Get(_command.ErrorTolerant); @@ -166,6 +162,7 @@ public int Run() options.KeyFile = Get(_command.KeyFile); options.Optimize = Get(_command.Optimize); options.Fold = Get(_command.Fold); + options.OutputFileName = Path.GetFileName(outputPath); // Set up include path for #include directive resolution string? includePath = Get(_command.IncludePath); @@ -220,7 +217,7 @@ byte[] LoadResource(string path) // Compile var compiler = new DocumentCompiler(); var (diagnostics, peBuilder) = compiler.Compile( - document, + documents.ToImmutable(), LoadIncludedDocument, LoadResource, options); @@ -292,6 +289,87 @@ byte[] LoadResource(string path) private static int Main(string[] args) => new IlasmRootCommand() - .Parse(args) + .Parse(NormalizeNativeArgs(args)) .Invoke(); + + /// + /// Pre-process command-line arguments to translate native ilasm compound flags + /// (e.g., -DEBUG=IMPL, -OUTPUT=file) into System.CommandLine-compatible forms. + /// Native ilasm flags are case-insensitive and use single-dash prefix. + /// + private static string[] NormalizeNativeArgs(string[] args) + { + List result = new(args.Length); + foreach (string arg in args) + { + if (arg.Equals("-DEBUG=IMPL", StringComparison.OrdinalIgnoreCase)) + { + result.Add("--debug-mode"); + result.Add("Impl"); + continue; + } + + if (arg.Equals("-DEBUG=OPT", StringComparison.OrdinalIgnoreCase)) + { + result.Add("--debug-mode"); + result.Add("Opt"); + continue; + } + + if (arg.StartsWith("-RESOURCES=", StringComparison.OrdinalIgnoreCase)) + { + throw new ArgumentException($"Unsupported native option '{arg}'. The managed ilasm implementation does not support -RESOURCES."); + } + + if (arg.StartsWith('-') && !arg.StartsWith("--")) + { + int eqIndex = arg.IndexOf('='); + string flagPart = eqIndex >= 0 ? arg[..eqIndex] : arg; + string? valuePart = eqIndex >= 0 ? arg[(eqIndex + 1)..] : null; + + string upper = flagPart.ToUpperInvariant(); + if (upper is + "-OUTPUT" or + "-DLL" or + "-EXE" or + "-DEBUG" or + "-OPTIMIZE" or + "-FOLD" or + "-NOLOGO" or + "-QUIET" or + "-NOAUTOINHERIT" or + "-PDB" or + "-APPCONTAINER" or + "-DET" or + "-ERROR" or + "-CLOCK" or + "-KEY" or + "-ANAME" or + "-INC" or + "-SUBSYSTEM" or + "-SSVER" or + "-FLAGS" or + "-ALIGNMENT" or + "-BASE" or + "-STACK" or + "-MDV" or + "-PE64" or + "-HIGHENTROPYVA" or + "-NOCORSTUB" or + "-STRIPRELOC" or + "-X64" or + "-ARM" or + "-ARM64" or + "-32BITPREFERRED") + { + result.Add(valuePart is null ? upper : $"{upper}={valuePart}"); + continue; + } + } + + result.Add(arg); + } + + return result.ToArray(); + } } diff --git a/src/tools/ilasm/tests/ILAssembler.Tests/DocumentCompilerTests.cs b/src/tools/ilasm/tests/ILAssembler.Tests/DocumentCompilerTests.cs index 1c8871130fe13a..b90b4a35f9058c 100644 --- a/src/tools/ilasm/tests/ILAssembler.Tests/DocumentCompilerTests.cs +++ b/src/tools/ilasm/tests/ILAssembler.Tests/DocumentCompilerTests.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; +using System.Reflection; using System.Reflection.Metadata; using System.Reflection.Metadata.Ecma335; using System.Reflection.PortableExecutable; @@ -36,9 +37,10 @@ .class public auto ansi sealed beforefieldinit Test } [Fact] - public void TypeNotFound_ReportsError() + public void TypeNotFound_CreatesForwardReference() { - // Referencing a type that doesn't exist should report an error + // Referencing a type that doesn't exist creates a forward reference placeholder, + // matching native ilasm behavior where types can be referenced before declaration. string source = """ .class public auto ansi sealed beforefieldinit Test extends NonExistentType { @@ -46,9 +48,7 @@ .class public auto ansi sealed beforefieldinit Test extends NonExistentType """; var diagnostics = CompileAndGetDiagnostics(source, new Options()); - var error = Assert.Single(diagnostics); - Assert.Equal(DiagnosticIds.TypeNotFound, error.Id); - Assert.Equal(DiagnosticSeverity.Error, error.Severity); + Assert.Empty(diagnostics); } [Theory] @@ -138,9 +138,10 @@ .field public UndefinedTypedef myField } [Fact] - public void MultipleTypeNotFound_ReportsMultipleErrors() + public void MultipleTypeNotFound_CreatesForwardReferences() { - // Multiple references to non-existent types should each report an error + // Multiple references to non-existent types create forward reference placeholders, + // matching native ilasm behavior string source = """ .class public auto ansi beforefieldinit Test extends NonExistentBase implements NonExistentInterface { @@ -148,12 +149,7 @@ .class public auto ansi beforefieldinit Test extends NonExistentBase implements """; var diagnostics = CompileAndGetDiagnostics(source, new Options()); - Assert.Equal(2, diagnostics.Length); - Assert.All(diagnostics, d => - { - Assert.Equal(DiagnosticIds.TypeNotFound, d.Id); - Assert.Equal(DiagnosticSeverity.Error, d.Severity); - }); + Assert.Empty(diagnostics); } [Fact] @@ -562,7 +558,7 @@ .assembly extern System.Runtime { } .First(h => reader.GetString(reader.GetTypeDefinition(h).Name) == "UnionStruct"); var typeDef = reader.GetTypeDefinition(typeHandle); - + // Verify ExplicitLayout is set (this was a regression bug - EXPLICIT token wasn't being parsed) Assert.True(typeDef.Attributes.HasFlag(System.Reflection.TypeAttributes.ExplicitLayout), $"Expected ExplicitLayout, got {typeDef.Attributes} (0x{(int)typeDef.Attributes:X8})"); @@ -850,7 +846,7 @@ .method public abstract void AbstractMethod() cil managed var diagnostics = CompileAndGetDiagnostics(source, new Options()); var error = Assert.Single(diagnostics); Assert.Equal(DiagnosticIds.AbstractMethodNotInAbstractType, error.Id); - Assert.Equal(DiagnosticSeverity.Error, error.Severity); + Assert.Equal(DiagnosticSeverity.Warning, error.Severity); } [Fact] @@ -1555,7 +1551,7 @@ .method public hidebysig specialname instance int32 get_Value() cil managed var sourceText = new ILAssembler.SourceText(source, "test.il"); var compiler = new ILAssembler.DocumentCompiler(); var (diagnostics, result) = compiler.Compile(sourceText, _ => default!, _ => default!, new Options()); - + // Check for diagnostics foreach (var d in diagnostics) { @@ -1601,7 +1597,7 @@ .method public hidebysig specialname instance int32 get_Value() cil managed var sourceText = new ILAssembler.SourceText(source, "test.il"); var compiler = new ILAssembler.DocumentCompiler(); var (diagnostics, result) = compiler.Compile(sourceText, _ => default!, _ => default!, new Options()); - + foreach (var d in diagnostics) { throw new Exception($"Unexpected diagnostic: {d.Id} - {d.Message}"); @@ -1618,7 +1614,7 @@ .method public hidebysig specialname instance int32 get_Value() cil managed var property = reader.GetPropertyDefinition(propertyHandle); // Check attributes include HasDefault - Assert.True((property.Attributes & System.Reflection.PropertyAttributes.HasDefault) != 0, + Assert.True((property.Attributes & System.Reflection.PropertyAttributes.HasDefault) != 0, $"Expected HasDefault attribute, got {property.Attributes}"); // Check for constant @@ -1657,7 +1653,7 @@ .method public hidebysig specialname instance string get_Name() cil managed var sourceText = new ILAssembler.SourceText(source, "test.il"); var compiler = new ILAssembler.DocumentCompiler(); var (diagnostics, result) = compiler.Compile(sourceText, _ => default!, _ => default!, new Options()); - + foreach (var d in diagnostics) { throw new Exception($"Unexpected diagnostic: {d.Id} - {d.Message}"); @@ -1767,7 +1763,7 @@ .method public static void TestMethod() cil managed { .maxstack 1 .locals init (int32 V_0) - + .try { ldc.i4.0 @@ -2385,5 +2381,3488 @@ .class extern forwarder System.ForwardedType Assert.NotNull(warning); Assert.Equal(DiagnosticSeverity.Warning, warning.Severity); } + + [Fact] + public void AssemblyVersion_DefaultsToZero_WhenNoVerDirective() + { + string source = """ + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var asmDef = reader.GetAssemblyDefinition(); + Assert.Equal(new Version(0, 0, 0, 0), asmDef.Version); + } + + [Fact] + public void AssemblyRefVersion_DefaultsToZero_WhenNoVerDirective() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var asmRef = reader.GetAssemblyReference(MetadataTokens.AssemblyReferenceHandle(1)); + Assert.Equal(new Version(0, 0, 0, 0), asmRef.Version); + } + + [Fact] + public void AssemblyVersion_ExplicitVer_IsPreserved() + { + string source = """ + .assembly extern System.Runtime { .ver 8:0:0:0 } + .assembly TestAssembly { .ver 1:2:3:4 } + .class public auto ansi beforefieldinit Test + { + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var asmDef = reader.GetAssemblyDefinition(); + Assert.Equal(new Version(1, 2, 3, 4), asmDef.Version); + var asmRef = reader.GetAssemblyReference(MetadataTokens.AssemblyReferenceHandle(1)); + Assert.Equal(new Version(8, 0, 0, 0), asmRef.Version); + } + + [Fact] + public void ModuleName_DefaultsToOutputFileName_WhenNoModuleDirective() + { + string source = """ + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + } + """; + + using var pe = CompileAndGetReader(source, new Options { OutputFileName = "MyOutput.dll" }); + var reader = pe.GetMetadataReader(); + var moduleDef = reader.GetModuleDefinition(); + Assert.Equal("MyOutput.dll", reader.GetString(moduleDef.Name)); + } + + [Fact] + public void ModuleName_OutputFileNameStripsDirectory() + { + string source = """ + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + } + """; + + // OutputFileName should already be just the filename (Program.cs uses Path.GetFileName), + // but verify the module name is exactly what's provided + using var pe = CompileAndGetReader(source, new Options { OutputFileName = "bar.dll" }); + var reader = pe.GetMetadataReader(); + var moduleDef = reader.GetModuleDefinition(); + Assert.Equal("bar.dll", reader.GetString(moduleDef.Name)); + } + + [Fact] + public void ModuleName_ExplicitModuleDirective_OverridesOutputFileName() + { + string source = """ + .assembly TestAssembly { } + .module Explicit.dll + .class public auto ansi beforefieldinit Test + { + } + """; + + using var pe = CompileAndGetReader(source, new Options { OutputFileName = "DifferentName.dll" }); + var reader = pe.GetMetadataReader(); + var moduleDef = reader.GetModuleDefinition(); + Assert.Equal("Explicit.dll", reader.GetString(moduleDef.Name)); + } + + [Fact] + public void ModuleName_NoModuleDirective_NoOutputFileName_UsesNilHandle() + { + string source = """ + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var moduleDef = reader.GetModuleDefinition(); + Assert.True(moduleDef.Name.IsNil); + } + + [Fact] + public void CustomAttribute_HexByteBlob_ParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly + { + .custom instance void [System.Runtime]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + } + .class public auto ansi beforefieldinit Test + { + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + // Verify the custom attribute was emitted on the assembly + var asmDef = reader.GetAssemblyDefinition(); + var attrs = asmDef.GetCustomAttributes(); + Assert.NotEmpty(attrs); + } + + [Fact] + public void NativeInt_FieldType_ParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .field public static native int f1 + .field public static native uint f2 + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + var fields = typeDef.GetFields().ToArray(); + Assert.Equal(2, fields.Length); + // native int → IntPtr (SignatureTypeCode 0x18) + var sig1 = reader.GetBlobReader(reader.GetFieldDefinition(fields[0]).Signature); + Assert.Equal(0x06, sig1.ReadByte()); // FIELD calling convention + Assert.Equal(0x18, sig1.ReadByte()); // ELEMENT_TYPE_I (IntPtr) + // native uint → UIntPtr (SignatureTypeCode 0x19) + var sig2 = reader.GetBlobReader(reader.GetFieldDefinition(fields[1]).Signature); + Assert.Equal(0x06, sig2.ReadByte()); + Assert.Equal(0x19, sig2.ReadByte()); // ELEMENT_TYPE_U (UIntPtr) + } + + [Fact] + public void SqstringAssemblyName_ParsedCorrectly() + { + string source = """ + .assembly 'My-Assembly_123' { } + .class public auto ansi beforefieldinit Test + { + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + // No errors — the SQSTRING assembly name should be accepted + Assert.Empty(diagnostics); + } + + [Fact] + public void ArrayType_InMethodSignature_ParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M(int32[] arr) cil managed { ret } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + var methods = typeDef.GetMethods().ToArray(); + Assert.Single(methods); + var methodDef = reader.GetMethodDefinition(methods[0]); + var sig = reader.GetBlobReader(methodDef.Signature); + Assert.Equal(0x00, sig.ReadByte()); // DEFAULT calling convention + Assert.Equal(1, sig.ReadCompressedInteger()); // param count + Assert.Equal(0x01, sig.ReadByte()); // return type: void + Assert.Equal(0x1D, sig.ReadByte()); // ELEMENT_TYPE_SZARRAY + Assert.Equal(0x08, sig.ReadByte()); // ELEMENT_TYPE_I4 (int32) + } + + [Fact] + public void UnsignedIntTypes_ParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .field public static unsigned int8 f1 + .field public static unsigned int16 f2 + .field public static unsigned int32 f3 + .field public static unsigned int64 f4 + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + var fields = typeDef.GetFields().ToArray(); + Assert.Equal(4, fields.Length); + // unsigned int8 → Byte (0x05) + var sig1 = reader.GetBlobReader(reader.GetFieldDefinition(fields[0]).Signature); + Assert.Equal(0x06, sig1.ReadByte()); // FIELD + Assert.Equal(0x05, sig1.ReadByte()); // ELEMENT_TYPE_U1 + // unsigned int16 → UInt16 (0x07) + var sig2 = reader.GetBlobReader(reader.GetFieldDefinition(fields[1]).Signature); + Assert.Equal(0x06, sig2.ReadByte()); + Assert.Equal(0x07, sig2.ReadByte()); // ELEMENT_TYPE_U2 + // unsigned int32 → UInt32 (0x09) + var sig3 = reader.GetBlobReader(reader.GetFieldDefinition(fields[2]).Signature); + Assert.Equal(0x06, sig3.ReadByte()); + Assert.Equal(0x09, sig3.ReadByte()); // ELEMENT_TYPE_U4 + // unsigned int64 → UInt64 (0x0B) + var sig4 = reader.GetBlobReader(reader.GetFieldDefinition(fields[3]).Signature); + Assert.Equal(0x06, sig4.ReadByte()); + Assert.Equal(0x0B, sig4.ReadByte()); // ELEMENT_TYPE_U8 + } + + [Fact] + public void HexLabelName_NotConfusedWithHexByte() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M() cil managed + { + br AA + nop + AA: ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void PrefixInstruction_Volatile_ParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .field public static int32 myField + .method public static void M() cil managed + { + volatile. + ldsfld int32 Test::myField + pop + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void PrefixInstruction_Tail_ParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static int32 M() cil managed + { + ldc.i4.0 + tail. + call int32 Test::M() + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void VolatileFieldAttribute_AcceptedAsModifier() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .field public static volatile int32 myField + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void MultiDimArrayBounds_ParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M() cil managed + { + .locals init (int32[0...,0...] V_0) + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void LdelemU8_InstructionParsedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M(unsigned int64[] arr) cil managed + { + ldarg.0 + ldc.i4.0 + ldelem.u8 + pop + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void MethodNameF1_NotConfusedWithHexByte() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static int32 f1() cil managed + { + ldc.i4.0 + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + var methods = typeDef.GetMethods().ToArray(); + Assert.Single(methods); + Assert.Equal("f1", reader.GetString(reader.GetMethodDefinition(methods[0]).Name)); + } + + [Fact] + public void NamedLocal_CanBeReferencedByStloc() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M() cil managed + { + .locals init (int32 myLocal) + ldc.i4.0 + stloc myLocal + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void NamedArgument_CanBeReferencedByLdarg() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M(int32 myArg) cil managed + { + ldarg myArg + pop + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void StringEscape_NewlineInLdstr() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M() cil managed + { + ldstr "Hello\nWorld\t!" + pop + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void FloatLiteral_TrailingDot() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M() cil managed + { + ldc.r4 0. + pop + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void FloatLiteral_SignedExponent() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M() cil managed + { + ldc.r8 5.1234567890000001e+054 + pop + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void SwitchInstruction_CommaLabels() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Test + { + .method public static void M() cil managed + { + ldc.i4.0 + switch (L0, L1, L2) + L0: nop + L1: nop + L2: ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void ModuleLevelField_DoesNotCrash() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .field public static int32 globalField + .class public auto ansi beforefieldinit Test + { + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void ForwardTypeReference_ResolvedCorrectly() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit Base extends [System.Runtime]System.Object + { + .field public static class Derived child + } + .class public auto ansi beforefieldinit Derived extends Base + { + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + Assert.Equal(3, reader.TypeDefinitions.Count); + } + + [Fact] + public void SelfTypeReference_InField() + { + string source = """ + .assembly extern System.Runtime { } + .assembly TestAssembly { } + .class public auto ansi beforefieldinit MyClass extends [System.Runtime]System.Object + { + .field public static class MyClass instance + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + Assert.Equal(2, reader.TypeDefinitions.Count); + } + + [Fact] + public void SimpleOverride_EmitsMethodImpl() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestOverride { } + + .class interface public abstract auto ansi IFoo + { + .method public hidebysig newslot abstract virtual instance int32 GetVal() cil managed { } + } + + .class public auto ansi beforefieldinit Bar extends [mscorlib]System.Object implements IFoo + { + .method public hidebysig newslot virtual final instance int32 GetVal() cil managed + { + .override IFoo::GetVal + ldc.i4.s 42 + ret + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int methodImplCount = reader.GetTableRowCount(TableIndex.MethodImpl); + Assert.Equal(1, methodImplCount); + } + + [Fact] + public void OverrideWithExplicitSignature_EmitsMethodImpl() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestOverride { } + + .class public auto ansi beforefieldinit Base extends [mscorlib]System.Object + { + .method public hidebysig newslot virtual instance object GetVal(string& res) cil managed + { + ldnull + ret + } + } + + .class public auto ansi beforefieldinit Derived extends Base + { + .method public hidebysig newslot virtual instance object GetVal(string& res) cil managed + { + .override method instance object Base::GetVal(string&) + ldnull + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int methodImplCount = reader.GetTableRowCount(TableIndex.MethodImpl); + Assert.Equal(1, methodImplCount); + } + + [Fact] + public void GenericOverride_EmitsMethodImpl() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestOverride { } + + .class public auto ansi beforefieldinit GenBase extends [mscorlib]System.Object + { + .method public hidebysig newslot virtual instance object MyFunc(string& res) cil managed + { + ldnull + ret + } + } + + .class public auto ansi beforefieldinit GenDerived extends class GenBase + { + .method public hidebysig newslot virtual instance object MyFunc(string& res) cil managed + { + .override method instance object class GenBase::MyFunc(string&) + ldnull + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int methodImplCount = reader.GetTableRowCount(TableIndex.MethodImpl); + Assert.Equal(1, methodImplCount); + + int typeSpecCount = reader.GetTableRowCount(TableIndex.TypeSpec); + Assert.True(typeSpecCount >= 1, "Should have at least one TypeSpec for the generic instantiation"); + } + + [Fact] + public void MultipleOverrides_EmitsAllMethodImpls() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestOverride { } + + .class public auto ansi beforefieldinit GenBase extends [mscorlib]System.Object + { + .method public hidebysig newslot virtual instance object Func1(string& res) cil managed + { + ldnull + ret + } + .method public hidebysig newslot virtual instance object Func2(string& res) cil managed + { + ldnull + ret + } + } + + .class public auto ansi beforefieldinit Derived extends class GenBase + { + .method public hidebysig newslot virtual instance object Func1(string& res) cil managed + { + .override method instance object class GenBase::Func1(string&) + ldnull + ret + } + .method public hidebysig newslot virtual instance object Func2(string& res) cil managed + { + .override method instance object class GenBase::Func2(string&) + ldnull + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int methodImplCount = reader.GetTableRowCount(TableIndex.MethodImpl); + Assert.Equal(2, methodImplCount); + } + + [Fact] + public void ArrayBoundsType_ZeroBased() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestArrayBounds { } + + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public int32[0...] m_arr + .method public hidebysig instance void M() cil managed + { + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void ArrayBoundsType_MultiDimensional() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestArrayBounds { } + + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M(int32[5...,3...] arr) cil managed + { + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void TrailingDotFloat() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestFloat { } + + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static float64 M() cil managed + { + ldc.r8 1. + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void GenericConstraint_ForwardRefTypeParam() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestConstraint { } + + .class interface public abstract auto ansi IAdder`1 + { + .method public hidebysig newslot abstract virtual instance int32 Add() cil managed { } + } + + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static int32 Check<(class IAdder`1) T, U>(!!T t) cil managed + { + ldc.i4.0 + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void TypeConstraint_ForwardRefTypeParam() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestConstraint { } + + .class interface public abstract auto ansi I`1 + { + .method public hidebysig newslot abstract virtual instance string Method() cil managed { } + } + + .class public auto ansi beforefieldinit Conversion`2) U> extends [mscorlib]System.Object + { + .method public hidebysig instance string M() cil managed + { + ldnull + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void RefanyType_Accepted() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestRefany { } + + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M() cil managed + { + .locals (int32, refany) + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void Int64MinValue_Accepted() + { + string source = """ + .assembly extern mscorlib { } + .assembly TestInt64Min { } + + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static int64 M() cil managed + { + ldc.i8 -9223372036854775808 + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + Assert.Empty(diagnostics); + } + + [Fact] + public void MultiDocument_DefinePropagatesToNextDocument() + { + var doc1 = new SourceText(""" + #define ASSEMBLY_NAME "TestAssembly" + .assembly extern mscorlib { } + .assembly ASSEMBLY_NAME { } + """, "doc1.il"); + + var doc2 = new SourceText(""" + .class public auto ansi beforefieldinit ASSEMBLY_NAME extends [mscorlib]System.Object + { + } + """, "doc2.il"); + + var compiler = new DocumentCompiler(); + var (diagnostics, result) = compiler.Compile( + [doc1, doc2], + _ => { Assert.Fail("Expected no includes"); return default; }, + _ => { Assert.Fail("Expected no resources"); return default; }, + new Options()); + + Assert.Empty(diagnostics); + Assert.NotNull(result); + + var blobBuilder = new BlobBuilder(); + result!.Serialize(blobBuilder); + using var pe = new PEReader(blobBuilder.ToImmutableArray()); + var reader = pe.GetMetadataReader(); + + // doc2 should have the type named "TestAssembly" (from the macro) + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + Assert.Equal("TestAssembly", reader.GetString(typeDef.Name)); + } + + [Fact] + public void ClassVisibility_PublicIsPreserved() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class public auto ansi beforefieldinit PublicType extends [mscorlib]System.Object { } + .class private auto ansi beforefieldinit PrivateType extends [mscorlib]System.Object { } + .class auto ansi beforefieldinit DefaultType extends [mscorlib]System.Object { } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var pub = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + Assert.Equal("PublicType", reader.GetString(pub.Name)); + Assert.Equal(TypeAttributes.Public, pub.Attributes & TypeAttributes.VisibilityMask); + + var priv = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(3)); + Assert.Equal("PrivateType", reader.GetString(priv.Name)); + Assert.Equal(TypeAttributes.NotPublic, priv.Attributes & TypeAttributes.VisibilityMask); + + var def = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(4)); + Assert.Equal("DefaultType", reader.GetString(def.Name)); + Assert.Equal(TypeAttributes.NotPublic, def.Attributes & TypeAttributes.VisibilityMask); + } + + [Fact] + public void HexByteBlob_DigitLetterPairsCorrect() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M() cil managed + { + .custom instance void [mscorlib]System.ObsoleteAttribute::.ctor() = ( 01 00 3F 5F 00 00 ) + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var customAttrs = reader.GetCustomAttributes(MetadataTokens.MethodDefinitionHandle(1)); + foreach (var caHandle in customAttrs) + { + var ca = reader.GetCustomAttribute(caHandle); + var blob = reader.GetBlobBytes(ca.Value); + // Blob should be exactly: 01 00 3F 5F 00 00 + Assert.Equal(6, blob.Length); + Assert.Equal(0x3F, blob[2]); + Assert.Equal(0x5F, blob[3]); + } + } + + [Fact] + public void DottedName_SQStringQuotesStripped() + { + string source = """ + .assembly extern mscorlib { } + .assembly 'My-Assembly' { } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var asmDef = reader.GetAssemblyDefinition(); + Assert.Equal("My-Assembly", reader.GetString(asmDef.Name)); + } + + [Fact] + public void MethodRtSpecialName_Preserved() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.GetMethodDefinition(MetadataTokens.MethodDefinitionHandle(1)); + Assert.Equal(".ctor", reader.GetString(method.Name)); + Assert.True(method.Attributes.HasFlag(MethodAttributes.RTSpecialName)); + Assert.True(method.Attributes.HasFlag(MethodAttributes.SpecialName)); + } + + [Fact] + public void FieldRtSpecialName_Preserved() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class public auto ansi sealed TestEnum extends [mscorlib]System.Enum + { + .field public specialname rtspecialname uint8 value__ + .field public static literal valuetype TestEnum A = uint8(0x00) + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + Assert.Equal("value__", reader.GetString(field.Name)); + Assert.True(field.Attributes.HasFlag(FieldAttributes.RTSpecialName)); + Assert.True(field.Attributes.HasFlag(FieldAttributes.SpecialName)); + } + + [Fact] + public void Interface_NoImplicitBaseType() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class interface public abstract auto ansi IMyInterface + { + .method public hidebysig newslot abstract virtual instance void DoWork() cil managed { } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + Assert.Equal("IMyInterface", reader.GetString(typeDef.Name)); + Assert.True(typeDef.Attributes.HasFlag(TypeAttributes.Interface)); + Assert.True(typeDef.BaseType.IsNil); + } + + [Fact] + public void CustomAttributeOnMethod_EmittedCorrectly() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static int32 Main() cil managed + { + .custom instance void [mscorlib]System.ObsoleteAttribute::.ctor() = ( 01 00 00 00 ) + .entrypoint + ldc.i4 100 + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.GetMethodDefinition(MetadataTokens.MethodDefinitionHandle(1)); + Assert.Equal("Main", reader.GetString(method.Name)); + + var customAttrs = method.GetCustomAttributes(); + Assert.Equal(1, customAttrs.Count); + } + + [Fact] + public void TypeName_NoDotPrefix() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class public auto ansi beforefieldinit MyNamespace.MyType extends [mscorlib]System.Object { } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + Assert.Equal("MyType", reader.GetString(typeDef.Name)); + Assert.Equal("MyNamespace", reader.GetString(typeDef.Namespace)); + } + + [Fact] + public void Namespace_NoLeadingDot() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .namespace System.Tests + { + .class public auto ansi beforefieldinit MyType extends [mscorlib]System.Object { } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + Assert.Equal("MyType", reader.GetString(typeDef.Name)); + Assert.Equal("System.Tests", reader.GetString(typeDef.Namespace)); + } + + [Fact] + public void ParamWithInAttribute_EmitsParamRow() + { + string source = """ + .assembly extern mscorlib { } + .assembly Test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public hidebysig static void M([in] int32& x) cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int paramCount = reader.GetTableRowCount(TableIndex.Param); + Assert.True(paramCount >= 1, "Should have at least one Param row for [in] parameter"); + + var param = reader.GetParameter(MetadataTokens.ParameterHandle(1)); + Assert.True(param.Attributes.HasFlag(ParameterAttributes.In)); + } + + [Fact] + public void LocalMethodCall_ResolvesToMethodDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static int32 Helper() cil managed + { + ldc.i4.1 + ret + } + .method public static int32 Caller() cil managed + { + call int32 MyClass::Helper() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // No MemberRef rows should exist for the local method call + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + + // Verify the call instruction references a MethodDef token + var callerMethod = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "Caller"); + var body = pe.GetMethodBody(callerMethod.RelativeVirtualAddress); + var ilReader = body.GetILReader(); + Assert.Equal(ILOpCode.Call, (ILOpCode)ilReader.ReadByte()); + int token = ilReader.ReadInt32(); + Assert.Equal(0x06, (token >> 24) & 0xFF); // MethodDef table (0x06) + } + + [Fact] + public void LocalFieldAccess_ResolvesToFieldDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .field public static int32 myField + .method public static int32 GetField() cil managed + { + ldsfld int32 MyClass::myField + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // No MemberRef rows should exist for the local field access + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + + // Verify the ldsfld instruction references a FieldDef token + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "GetField"); + var body = pe.GetMethodBody(method.RelativeVirtualAddress); + var ilReader = body.GetILReader(); + Assert.Equal(ILOpCode.Ldsfld, (ILOpCode)ilReader.ReadByte()); + int token = ilReader.ReadInt32(); + Assert.Equal(0x04, (token >> 24) & 0xFF); // FieldDef table (0x04) + } + + [Fact] + public void MixedLocalAndExternalRefs_ResolvesCorrectly() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .field public static int32 myField + .method public static void Helper() cil managed + { + ret + } + .method public static void Caller() cil managed + { + // Local method call -> should resolve to MethodDef + call void MyClass::Helper() + // External method call -> should remain MemberRef + call string [mscorlib]System.Object::ToString(object) + pop + // Local field access -> should resolve to FieldDef + ldsfld int32 MyClass::myField + pop + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Only the external call should produce a MemberRef row + Assert.Equal(1, reader.GetTableRowCount(TableIndex.MemberRef)); + + var memberRef = reader.GetMemberReference(MetadataTokens.MemberReferenceHandle(1)); + Assert.Equal("ToString", reader.GetString(memberRef.Name)); + } + + [Fact] + public void LocalInstanceFieldAccess_ResolvesToFieldDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .field public int32 value + .method public instance int32 GetValue() cil managed + { + ldarg.0 + ldfld int32 MyClass::value + ret + } + .method public instance void SetValue(int32 v) cil managed + { + ldarg.0 + ldarg.1 + stfld int32 MyClass::value + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + } + + [Fact] + public void ExternalMethodCall_KeepsMemberRef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void Test() cil managed + { + call int32 [mscorlib]System.Environment::get_CurrentManagedThreadId() + pop + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(1, reader.GetTableRowCount(TableIndex.MemberRef)); + var memberRef = reader.GetMemberReference(MetadataTokens.MemberReferenceHandle(1)); + Assert.Equal("get_CurrentManagedThreadId", reader.GetString(memberRef.Name)); + } + + [Fact] + public void LocalVarargMethodCall_ResolvesBaseToMethodDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static vararg void VarFunc() cil managed + { + ret + } + .method public static void Caller() cil managed + { + ldc.i4.1 + call vararg void MyClass::VarFunc(..., int32) + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Only 1 MemberRef: the vararg call-site. The base method resolved to MethodDef. + Assert.Equal(1, reader.GetTableRowCount(TableIndex.MemberRef)); + + var memberRef = reader.GetMemberReference(MetadataTokens.MemberReferenceHandle(1)); + Assert.Equal("VarFunc", reader.GetString(memberRef.Name)); + // The call-site MemberRef's parent should be the resolved MethodDef + Assert.Equal(HandleKind.MethodDefinition, memberRef.Parent.Kind); + + // Verify the signature has the sentinel marker (it's a vararg call-site) + var sigBytes = reader.GetBlobBytes(memberRef.Signature); + Assert.Contains((byte)SignatureTypeCode.Sentinel, sigBytes); + } + + [Fact] + public void LocalVarargWithRequiredParams_ResolvesBaseToMethodDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static vararg void Printf(string fmt) cil managed + { + ret + } + .method public static void Caller() cil managed + { + ldstr "hello %d %s" + ldc.i4.1 + ldstr "world" + call vararg void MyClass::Printf(string, ..., int32, string) + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Only 1 MemberRef: the vararg call-site + Assert.Equal(1, reader.GetTableRowCount(TableIndex.MemberRef)); + + var memberRef = reader.GetMemberReference(MetadataTokens.MemberReferenceHandle(1)); + Assert.Equal("Printf", reader.GetString(memberRef.Name)); + Assert.Equal(HandleKind.MethodDefinition, memberRef.Parent.Kind); + + // Verify param count in signature: should be 3 (1 required + 2 optional) + var sigBytes = reader.GetBlobBytes(memberRef.Signature); + Assert.Equal(0x05, sigBytes[0]); // vararg + Assert.Equal(3, sigBytes[1]); // param count = 3 + } + + [Fact] + public void ExternalVarargMethodCall_KeepsTypeRefParent() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void Caller() cil managed + { + ldstr "format" + ldc.i4.1 + box [mscorlib]System.Int32 + call vararg int32 [mscorlib]System.String::Format(string, ..., object) + pop + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Find the vararg call-site MemberRef + int memberRefCount = reader.GetTableRowCount(TableIndex.MemberRef); + Assert.True(memberRefCount >= 1); + + bool foundCallSite = false; + for (int i = 1; i <= memberRefCount; i++) + { + var memberRef = reader.GetMemberReference(MetadataTokens.MemberReferenceHandle(i)); + if (reader.GetString(memberRef.Name) == "Format") + { + var sigBytes = reader.GetBlobBytes(memberRef.Signature); + if (sigBytes.Any(b => b == (byte)SignatureTypeCode.Sentinel)) + { + foundCallSite = true; + // For external vararg call-sites, the parent should be TypeRef or MemberRef + // (not TypeDef, since String.Format is external) + Assert.True( + memberRef.Parent.Kind is HandleKind.TypeReference or HandleKind.MemberReference, + $"External vararg call-site parent should be TypeRef or MemberRef, got {memberRef.Parent.Kind}"); + } + } + } + Assert.True(foundCallSite, "Should have found the external vararg call-site MemberRef with sentinel"); + } + + [Fact] + public void MultipleLocalMethodCalls_AllResolveToMethodDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void A() cil managed { ret } + .method public static void B() cil managed { ret } + .method public static void C() cil managed { ret } + .method public static void Caller() cil managed + { + call void MyClass::A() + call void MyClass::B() + call void MyClass::C() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + } + + [Fact] + public void ForwardReferencedLocalMethod_ResolvesToMethodDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void Caller() cil managed + { + // Calls a method defined later in the same type + call void MyClass::Target() + ret + } + .method public static void Target() cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + } + + [Fact] + public void CrossTypeLocalMethodCall_ResolvesToMethodDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit ClassA extends [mscorlib]System.Object + { + .method public static void DoWork() cil managed + { + ret + } + } + .class public auto ansi beforefieldinit ClassB extends [mscorlib]System.Object + { + .method public static void Caller() cil managed + { + call void ClassA::DoWork() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + } + + [Fact] + public void CrossTypeLocalFieldAccess_ResolvesToFieldDef() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit ClassA extends [mscorlib]System.Object + { + .field public static int32 SharedValue + } + .class public auto ansi beforefieldinit ClassB extends [mscorlib]System.Object + { + .method public static int32 GetShared() cil managed + { + ldsfld int32 ClassA::SharedValue + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + } + + [Fact] + public void TypeRefViaSelfAssembly_ResolvesToTypeDef() + { + // When IL references a local type via [self-assembly]Namespace.Type, + // the TypeRef should resolve to the local TypeDef. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void DoWork() cil managed { ret } + } + .class public auto ansi beforefieldinit Caller extends [mscorlib]System.Object + { + .method public static void Main() cil managed + { + call void [test]MyClass::DoWork() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // The [test]MyClass TypeRef should have been resolved to TypeDef, + // so no TypeRef for MyClass should exist. + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyClass", reader.GetString(tr.Name)); + } + + // The method call should resolve to MethodDef, not MemberRef. + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + } + + [Fact] + public void TypeRefViaSelfAssembly_FieldResolves() + { + // Field access through a self-assembly TypeRef should resolve to FieldDef. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit Data extends [mscorlib]System.Object + { + .field public static int32 Value + } + .class public auto ansi beforefieldinit Reader extends [mscorlib]System.Object + { + .method public static int32 Get() cil managed + { + ldsfld int32 [test]Data::Value + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + } + + [Fact] + public void ExternalTypeRef_StaysTypeRef() + { + // An external TypeRef (different assembly) should NOT resolve to TypeDef. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void Main() cil managed + { + call int32 [mscorlib]System.Environment::get_CurrentManagedThreadId() + pop + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // External call should remain as MemberRef with TypeRef parent. + Assert.True(reader.GetTableRowCount(TableIndex.MemberRef) >= 1); + Assert.True(reader.GetTableRowCount(TableIndex.TypeRef) >= 1); + } + + [Fact] + public void TypeRefViaSelfAssembly_MemberRefThroughResolved_BecomesMethodDef() + { + // A method call through [self-assembly]Type::Method should resolve + // BOTH the TypeRef to TypeDef AND the MemberRef to MethodDef. + string source = """ + .assembly extern mscorlib { } + .assembly myasm { } + .class public auto ansi beforefieldinit Target extends [mscorlib]System.Object + { + .method public static int32 Compute() cil managed + { + ldc.i4.0 + ret + } + } + .class public auto ansi beforefieldinit Caller extends [mscorlib]System.Object + { + .method public static int32 Main() cil managed + { + call int32 [myasm]Target::Compute() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(0, reader.GetTableRowCount(TableIndex.MemberRef)); + + // TypeRef table should not contain "Target" (resolved to TypeDef) + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("Target", reader.GetString(tr.Name)); + } + } + + [Fact] + public void FieldLiteralConstant_SetsHasDefaultFlag() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi sealed ByteEnum extends [mscorlib]System.Enum + { + .field public specialname rtspecialname uint8 value__ + .field public static literal valuetype ByteEnum A = uint8(0) + .field public static literal valuetype ByteEnum B = uint8(1) + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + Assert.Equal(2, reader.GetTableRowCount(TableIndex.Constant)); + + // Fields A and B (handles 2 and 3, after value__) + var fieldA = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(2)); + var fieldB = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(3)); + + Assert.True(fieldA.Attributes.HasFlag(FieldAttributes.HasDefault)); + Assert.True(fieldB.Attributes.HasFlag(FieldAttributes.HasDefault)); + + // Verify constant values + var constA = reader.GetConstant(fieldA.GetDefaultValue()); + var constB = reader.GetConstant(fieldB.GetDefaultValue()); + + Assert.Equal(ConstantTypeCode.Byte, constA.TypeCode); + Assert.Equal(ConstantTypeCode.Byte, constB.TypeCode); + + Assert.Equal(0, reader.GetBlobReader(constA.Value).ReadByte()); + Assert.Equal(1, reader.GetBlobReader(constB.Value).ReadByte()); + } + + [Theory] + [InlineData("int32", "int32(42)", ConstantTypeCode.Int32)] + [InlineData("int64", "int64(100)", ConstantTypeCode.Int64)] + [InlineData("float32", "float32(3.14)", ConstantTypeCode.Single)] + [InlineData("bool", "bool(true)", ConstantTypeCode.Boolean)] + public void FieldLiteralConstant_VariousTypes(string fieldType, string initExpr, ConstantTypeCode expectedTypeCode) + { + string source = $$""" + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .field public static literal {{fieldType}} myConst = {{initExpr}} + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + Assert.True(field.Attributes.HasFlag(FieldAttributes.HasDefault)); + + var constant = reader.GetConstant(field.GetDefaultValue()); + Assert.Equal(expectedTypeCode, constant.TypeCode); + } + + [Fact] + public void FieldLiteralString_SetsHasDefaultFlag() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .field public static literal string myStr = "hello" + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + Assert.True(field.Attributes.HasFlag(FieldAttributes.HasDefault)); + + var constant = reader.GetConstant(field.GetDefaultValue()); + Assert.Equal(ConstantTypeCode.String, constant.TypeCode); + } + + [Fact] + public void StackReserve_DirectiveValueIsHonored() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .stackreserve 0x00400000 + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void Main() cil managed + { + .entrypoint + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + Assert.Equal((ulong)0x00400000, pe.PEHeaders.PEHeader!.SizeOfStackReserve); + } + + [Fact] + public void StackReserve_DefaultValueUsedWhenNotSpecified() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static void Main() cil managed + { + .entrypoint + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + Assert.Equal((ulong)0x00100000, pe.PEHeaders.PEHeader!.SizeOfStackReserve); + } + + [Fact] + public void UnnamedInstanceParam_EmitsParamRow() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public instance void .ctor(int32) cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Should have 1 Param row for the unnamed int32 parameter (sequence 1) + Assert.Equal(1, reader.GetTableRowCount(TableIndex.Param)); + var param = reader.GetParameter(MetadataTokens.ParameterHandle(1)); + Assert.Equal(1, param.SequenceNumber); + } + + [Fact] + public void CctorMethod_HasSpecialNameAttribute() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public specialname rtspecialname static void .cctor() cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == ".cctor"); + + Assert.True(method.Attributes.HasFlag(MethodAttributes.SpecialName)); + Assert.True(method.Attributes.HasFlag(MethodAttributes.RTSpecialName)); + } + + [Fact] + public void RtSpecialName_ImplicitlyAddsSpecialName() + { + // When only rtspecialname is specified (without specialname), + // native ilasm implicitly adds specialname + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public rtspecialname static void .cctor() cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == ".cctor"); + + // Both SpecialName and RTSpecialName should be set + Assert.True(method.Attributes.HasFlag(MethodAttributes.SpecialName)); + Assert.True(method.Attributes.HasFlag(MethodAttributes.RTSpecialName)); + } + + [Fact] + public void FieldRtSpecialName_ImplicitlyAddsSpecialName() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi sealed ByteEnum extends [mscorlib]System.Enum + { + .field public rtspecialname uint8 value__ + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + Assert.True(field.Attributes.HasFlag(FieldAttributes.SpecialName)); + Assert.True(field.Attributes.HasFlag(FieldAttributes.RTSpecialName)); + } + + [Fact] + public void PinvokeMethod_SetsPinvokeImplFlag() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .module test.dll + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .method public static pinvokeimpl("kernel32.dll" winapi) + int32 GetCurrentProcessId() cil managed preservesig + { + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "GetCurrentProcessId"); + + Assert.True(method.Attributes.HasFlag(MethodAttributes.PinvokeImpl)); + var import = method.GetImport(); + Assert.False(import.Module.IsNil); + } + + [Fact] + public void LeadingDotInTypeName_Preserved() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public sequential ansi sealed '.GlobalStructStartingWithDot' + extends [mscorlib]System.ValueType + { + .field public int32 Value + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + Assert.Equal(".GlobalStructStartingWithDot", reader.GetString(typeDef.Name)); + } + + [Theory] + [InlineData("class [mscorlib]System.String", SignatureTypeCode.String)] + [InlineData("class [mscorlib]System.Object", SignatureTypeCode.Object)] + public void WellKnownClassType_UsesPrimitiveTypeCode(string ilType, SignatureTypeCode expectedCode) + { + string source = $$""" + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .field public static {{ilType}} myField + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigReader = reader.GetBlobReader(field.Signature); + sigReader.ReadByte(); // field signature header (0x06) + byte typeCode = sigReader.ReadByte(); + Assert.Equal((byte)expectedCode, typeCode); + } + + [Theory] + [InlineData("valuetype [mscorlib]System.Boolean", SignatureTypeCode.Boolean)] + [InlineData("valuetype [mscorlib]System.Int32", SignatureTypeCode.Int32)] + [InlineData("valuetype [mscorlib]System.Int64", SignatureTypeCode.Int64)] + [InlineData("valuetype [mscorlib]System.Single", SignatureTypeCode.Single)] + [InlineData("valuetype [mscorlib]System.Double", SignatureTypeCode.Double)] + [InlineData("valuetype [mscorlib]System.Char", SignatureTypeCode.Char)] + [InlineData("valuetype [mscorlib]System.Byte", SignatureTypeCode.Byte)] + [InlineData("valuetype [mscorlib]System.IntPtr", SignatureTypeCode.IntPtr)] + public void WellKnownValueType_UsesPrimitiveTypeCode(string ilType, SignatureTypeCode expectedCode) + { + string source = $$""" + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi beforefieldinit MyClass extends [mscorlib]System.Object + { + .field public static {{ilType}} myField + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigReader = reader.GetBlobReader(field.Signature); + sigReader.ReadByte(); // field signature header + byte typeCode = sigReader.ReadByte(); + Assert.Equal((byte)expectedCode, typeCode); + } + + [Fact] + public void ParserErrorListener_ReportsSyntaxErrors() + { + // A method with a misplaced token should generate a parser error + string source = """ + .assembly test { } + .class public auto ansi MyClass + { + .method public static void Test(int32 int32 int32) cil managed + { + ret + } + } + """; + + var diagnostics = CompileAndGetDiagnostics(source, new Options()); + // Parser should report a syntax error for the repeated int32 tokens + Assert.Contains(diagnostics, d => d.Id == "Parser"); + } + + [Fact] + public void CoreLibRedirect_MscorlibToSystemRuntime() + { + // When both mscorlib and System.Runtime are declared, type references + // through [mscorlib] should be redirected to [System.Runtime] + string source = """ + .assembly extern mscorlib { auto } + .assembly extern System.Runtime { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A) } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // The TypeRef for System.Object should point to System.Runtime, not mscorlib + var typeRef = reader.TypeReferences + .Select(h => reader.GetTypeReference(h)) + .First(t => reader.GetString(t.Name) == "Object"); + + var scope = reader.GetAssemblyReference((AssemblyReferenceHandle)typeRef.ResolutionScope); + Assert.Equal("System.Runtime", reader.GetString(scope.Name)); + } + + [Fact] + public void CoreLibRedirect_OnlyCorelibPresent_KeepsMscorlib() + { + // When only mscorlib is declared, type references stay as [mscorlib] + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var typeRef = reader.TypeReferences + .Select(h => reader.GetTypeReference(h)) + .First(t => reader.GetString(t.Name) == "Object"); + + var scope = reader.GetAssemblyReference((AssemblyReferenceHandle)typeRef.ResolutionScope); + Assert.Equal("mscorlib", reader.GetString(scope.Name)); + } + + [Fact] + public void UnqualifiedSystemString_ResolvesToCoreLibTypeRef() + { + // Unqualified 'System.String' (without [assembly] prefix) should resolve + // to a TypeRef from the corelib, not create a local TypeDef + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void Greet(class System.String msg) cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // System.String should be a TypeRef, not a TypeDef + // Only 2 TypeDefs should exist: and Test + Assert.Equal(2, reader.GetTableRowCount(TableIndex.TypeDef)); + + // System.String should be in TypeRef table + bool foundStringTypeRef = reader.TypeReferences + .Select(h => reader.GetTypeReference(h)) + .Any(t => reader.GetString(t.Name) == "String" && reader.GetString(t.Namespace) == "System"); + Assert.True(foundStringTypeRef, "System.String should be a TypeRef, not a TypeDef"); + } + + [Fact] + public void CustomAttributeOnType_EmittedCorrectly() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 01 00 00 ) + .method public instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // The custom attribute should be in the CustomAttribute table + Assert.True(reader.GetTableRowCount(TableIndex.CustomAttribute) >= 1, + "Should have at least one custom attribute"); + + // Find the ComVisibleAttribute on the type + var typeHandle = MetadataTokens.TypeDefinitionHandle(2); // Test type + var attrs = reader.GetCustomAttributes(typeHandle); + Assert.True(attrs.Count >= 1, "Test type should have at least one custom attribute"); + } + + [Fact] + public void CustomAttributeBlobDescr_EmptyBraces_CorrectProlog() + { + // '= {}' should produce a 4-byte blob: 01 00 (prolog) 00 00 (0 named args) + string source = """ + .assembly extern mscorlib { } + .assembly extern xunit.core { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void TestMethod() cil managed + { + .custom instance void [xunit.core]Xunit.FactAttribute::.ctor() = {} + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "TestMethod"); + + var attrs = reader.GetCustomAttributes(MetadataTokens.MethodDefinitionHandle( + MetadataTokens.GetRowNumber(reader.MethodDefinitions + .First(h => reader.GetString(reader.GetMethodDefinition(h).Name) == "TestMethod")))); + Assert.True(attrs.Count >= 1); + + var attr = reader.GetCustomAttribute(attrs.First()); + var blobBytes = reader.GetBlobBytes(attr.Value); + // Should be exactly 4 bytes: 01 00 (prolog) 00 00 (0 named args) + Assert.Equal(4, blobBytes.Length); + Assert.Equal(0x01, blobBytes[0]); // prolog low byte + Assert.Equal(0x00, blobBytes[1]); // prolog high byte + Assert.Equal(0x00, blobBytes[2]); // named arg count low + Assert.Equal(0x00, blobBytes[3]); // named arg count high + } + + [Fact] + public void NonStaticMethod_AutoInstanceCallingConvention() + { + // Non-static methods in a class should automatically get the instance + // calling convention, even if not explicitly specified in the IL source + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public void DoWork() cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "DoWork"); + + // Check the signature has the instance flag + var sigBytes = reader.GetBlobBytes(method.Signature); + byte header = sigBytes[0]; + Assert.True((header & (byte)SignatureAttributes.Instance) != 0, + $"Method signature should have Instance flag. Header byte: 0x{header:X2}"); + } + + [Fact] + public void StaticMethod_NoAutoInstanceCallingConvention() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void DoWork() cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "DoWork"); + + var sigBytes = reader.GetBlobBytes(method.Signature); + byte header = sigBytes[0]; + Assert.True((header & (byte)SignatureAttributes.Instance) == 0, + $"Static method should NOT have Instance flag. Header byte: 0x{header:X2}"); + } + + [Fact] + public void FieldRVA_DataLabelEmitted() + { + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .data D_1 = int32(42) + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static int32 myData at D_1 + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // The FieldRVA table should have an entry + int fieldRvaCount = reader.GetTableRowCount(TableIndex.FieldRva); + Assert.True(fieldRvaCount >= 1, $"FieldRVA table should have at least 1 entry, has {fieldRvaCount}"); + } + + [Fact] + public void FunctionPointer_InFieldSignature_EmitsFnPtrTypeCode() + { + // A field of function pointer type: method void *(int32) + // The signature should contain ELEMENT_TYPE_FNPTR (0x1B). + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static method void *(int32) fnPtrField + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + // Field signature: 0x06 (FIELD), 0x1B (FNPTR), ... + Assert.Equal(0x06, sigBytes[0]); // FIELD calling convention + Assert.Equal(0x1B, sigBytes[1]); // ELEMENT_TYPE_FNPTR + // After FNPTR: calling convention byte, param count, return type, param types + Assert.Equal(0x00, sigBytes[2]); // DEFAULT calling convention + Assert.Equal(0x01, sigBytes[3]); // 1 parameter + Assert.Equal(0x01, sigBytes[4]); // return type: void + Assert.Equal(0x08, sigBytes[5]); // param type: int32 + } + + [Fact] + public void FunctionPointer_InMethodParameter_EmitsFnPtrTypeCode() + { + // A method parameter of function pointer type. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void Invoke(method void *(int32) callback) cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "Invoke"); + + var sigBytes = reader.GetBlobBytes(method.Signature); + // Method signature: 0x00 (DEFAULT), 0x01 (1 param), 0x01 (void ret), ... + Assert.Equal(0x00, sigBytes[0]); // DEFAULT calling convention + Assert.Equal(0x01, sigBytes[1]); // 1 parameter + Assert.Equal(0x01, sigBytes[2]); // return type: void + // Parameter should be ELEMENT_TYPE_FNPTR (0x1B) + Assert.Equal(0x1B, sigBytes[3]); // ELEMENT_TYPE_FNPTR + } + + [Fact] + public void FunctionPointer_AsReturnType_EmitsFnPtrTypeCode() + { + // A method returning a function pointer. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static method int32 *(int32, int32) GetAdder() cil managed + { + ldc.i4.0 + conv.i + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "GetAdder"); + + var sigBytes = reader.GetBlobBytes(method.Signature); + // Method signature: 0x00 (DEFAULT), 0x00 (0 params), return type... + Assert.Equal(0x00, sigBytes[0]); // DEFAULT calling convention + Assert.Equal(0x00, sigBytes[1]); // 0 parameters + // Return type should be ELEMENT_TYPE_FNPTR (0x1B) + Assert.Equal(0x1B, sigBytes[2]); // ELEMENT_TYPE_FNPTR + // After FNPTR: calling convention, param count, return type (int32), param types (int32, int32) + Assert.Equal(0x00, sigBytes[3]); // DEFAULT calling convention for inner sig + Assert.Equal(0x02, sigBytes[4]); // 2 parameters in inner sig + Assert.Equal(0x08, sigBytes[5]); // inner return type: int32 + Assert.Equal(0x08, sigBytes[6]); // inner param 1: int32 + Assert.Equal(0x08, sigBytes[7]); // inner param 2: int32 + } + + [Fact] + public void FunctionPointer_NoArgs_EmitsFnPtrTypeCode() + { + // Function pointer with no parameters: method void *() + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static method void *() fnPtrField + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + Assert.Equal(0x06, sigBytes[0]); // FIELD calling convention + Assert.Equal(0x1B, sigBytes[1]); // ELEMENT_TYPE_FNPTR + Assert.Equal(0x00, sigBytes[2]); // DEFAULT calling convention + Assert.Equal(0x00, sigBytes[3]); // 0 parameters + Assert.Equal(0x01, sigBytes[4]); // return type: void + } + + [Fact] + public void FunctionPointer_ReturningVoidPtr_EmitsFnPtrWithPtrReturnType() + { + // A function pointer that returns void*: method void * *(int32) + // Two * tokens: the first makes the return type void*, the second is the fnptr separator. + // Signature: FNPTR, DEFAULT, 1 param, PTR(VOID), I4 + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static method void * *(int32) fnPtrReturningVoidPtr + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + // Field sig: 0x06 (FIELD), 0x1B (FNPTR), 0x00 (DEFAULT), 0x01 (1 param), + // 0x0F (PTR), 0x01 (VOID) [= void* return type], 0x08 (int32 param) + Assert.Equal(0x06, sigBytes[0]); // FIELD calling convention + Assert.Equal(0x1B, sigBytes[1]); // ELEMENT_TYPE_FNPTR + Assert.Equal(0x00, sigBytes[2]); // DEFAULT calling convention + Assert.Equal(0x01, sigBytes[3]); // 1 parameter + Assert.Equal(0x0F, sigBytes[4]); // return type: ELEMENT_TYPE_PTR + Assert.Equal(0x01, sigBytes[5]); // return type inner: VOID (making void*) + Assert.Equal(0x08, sigBytes[6]); // param type: int32 + } + + [Fact] + public void FunctionPointer_ReturningVoidPtr_NoArgs_EmitsFnPtrWithPtrReturnType() + { + // method void * *() — fnptr returning void* with no params + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static method void * *() fnPtrReturningVoidPtrNoArgs + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + // Field sig: 0x06 (FIELD), 0x1B (FNPTR), 0x00 (DEFAULT), 0x00 (0 params), + // 0x0F (PTR), 0x01 (VOID) [= void* return type] + Assert.Equal(0x06, sigBytes[0]); // FIELD calling convention + Assert.Equal(0x1B, sigBytes[1]); // ELEMENT_TYPE_FNPTR + Assert.Equal(0x00, sigBytes[2]); // DEFAULT calling convention + Assert.Equal(0x00, sigBytes[3]); // 0 parameters + Assert.Equal(0x0F, sigBytes[4]); // return type: ELEMENT_TYPE_PTR + Assert.Equal(0x01, sigBytes[5]); // return type inner: VOID (making void*) + } + + [Fact] + public void FunctionPointer_ReturningInt32Ptr_EmitsFnPtrWithPtrReturnType() + { + // method int32 * *(int32) — fnptr returning int32* with one param + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static method int32 * *(int32) fnPtrReturningInt32Ptr + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + // Field sig: 0x06 (FIELD), 0x1B (FNPTR), 0x00 (DEFAULT), 0x01 (1 param), + // 0x0F (PTR), 0x08 (I4) [= int32* return type], 0x08 (int32 param) + Assert.Equal(0x06, sigBytes[0]); // FIELD calling convention + Assert.Equal(0x1B, sigBytes[1]); // ELEMENT_TYPE_FNPTR + Assert.Equal(0x00, sigBytes[2]); // DEFAULT calling convention + Assert.Equal(0x01, sigBytes[3]); // 1 parameter + Assert.Equal(0x0F, sigBytes[4]); // return type: ELEMENT_TYPE_PTR + Assert.Equal(0x08, sigBytes[5]); // return type inner: int32 (making int32*) + Assert.Equal(0x08, sigBytes[6]); // param type: int32 + } + + [Fact] + public void FunctionPointer_PtrToFnPtr_EmitsPtrThenFnPtr() + { + // A pointer-to-function-pointer: method void *(int32)* + // The outer * (after closing paren) makes this PTR(FNPTR(void(int32))) + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static method void *(int32)* ptrToFnPtr + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + // Field sig: 0x06 (FIELD), then the type is FNPTR(void(int32)) with PTR modifier + // The modifier ordering means: 0x06, 0x1B (FNPTR), ..., then 0x0F (PTR) wraps it + // But in practice ECMA-335 encodes: 0x06, 0x0F (PTR), 0x1B (FNPTR), ... + Assert.Equal(0x06, sigBytes[0]); // FIELD calling convention + // The next two bytes must contain both PTR and FNPTR + Assert.Contains((byte)0x1B, sigBytes.Skip(1).ToArray()); // Must have ELEMENT_TYPE_FNPTR + Assert.Contains((byte)0x0F, sigBytes.Skip(1).ToArray()); // Must have ELEMENT_TYPE_PTR + } + + [Fact] + public void GenericConstraint_WithGenericTypeArg_ResolvesToCorrectType() + { + // A generic constraint like (class IFoo) should produce a GenericParamConstraint + // pointing to a TypeSpec for the generic instantiation IFoo, NOT System.Object. + // This is the "generic constraint references" bug: complex generic type arguments + // in constraints resolve to System.Object instead of the actual constraint type. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + + .class interface public abstract auto ansi IMinusT`1<-PlusT> + { + .method public hidebysig newslot abstract virtual instance void Do() cil managed { } + } + + .class public auto ansi beforefieldinit Container`2<(class IMinusT`1) T, U> + extends [mscorlib]System.Object + { + .method public hidebysig instance void M() cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Find the Container`2 type + var containerType = reader.TypeDefinitions + .Select(h => reader.GetTypeDefinition(h)) + .First(t => reader.GetString(t.Name) == "Container`2"); + + var genericParams = containerType.GetGenericParameters(); + Assert.Equal(2, genericParams.Count); + + // T is the first generic parameter and has a constraint: (class IMinusT`1) + var paramT = reader.GetGenericParameter(genericParams.ElementAt(0)); + Assert.Equal("T", reader.GetString(paramT.Name)); + + var constraints = paramT.GetConstraints(); + Assert.Single(constraints); + + var constraint = reader.GetGenericParameterConstraint(constraints.Single()); + var constraintType = constraint.Type; + + // The constraint should be a TypeSpec (generic instantiation IMinusT`1), + // NOT a TypeRef to System.Object. + Assert.Equal(HandleKind.TypeSpecification, constraintType.Kind); + + // Decode the TypeSpec blob to verify it's a generic instantiation of IMinusT`1 + var typeSpec = reader.GetTypeSpecification((TypeSpecificationHandle)constraintType); + var sigBytes = reader.GetBlobBytes(typeSpec.Signature); + + // Expected: GENERICINST (0x15), CLASS (0x12), , + // 1 (generic arg count), VAR 1 (type parameter !U which is index 1) + Assert.Equal(0x15, sigBytes[0]); // ELEMENT_TYPE_GENERICINST + } + + [Fact] + public void GenericConstraint_MethodGenParamConstrainedByTypeGenParam_ResolvesToCorrectType() + { + // Reproduces the exact pattern from the Variance test IL files: + // A method generic parameter M constrained by (class IMinusT), + // where !PlusT is a type-level generic parameter referenced in the method constraint. + // This is the specific case that produces an incorrect constraint type. + // Method generic param M constrained by (class IMinusT`1) + // where !PlusT is a type-level generic parameter. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + + .class interface public abstract auto ansi IMinusT`1<-([mscorlib]System.Object) MinusT> + { + } + + .class interface public auto ansi beforefieldinit Test001PlusT`1<+([mscorlib]System.Object) PlusT> + { + .method public hidebysig newslot abstract virtual instance void + method1<(class IMinusT`1) M>(class IMinusT`1 t) cil managed + { + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var testType = reader.TypeDefinitions + .Select(h => reader.GetTypeDefinition(h)) + .First(t => reader.GetString(t.Name) == "Test001PlusT`1"); + + var method = testType.GetMethods() + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "method1"); + + var methodGenericParams = method.GetGenericParameters(); + Assert.Equal(1, methodGenericParams.Count); + + var paramM = reader.GetGenericParameter(methodGenericParams.Single()); + Assert.Equal("M", reader.GetString(paramM.Name)); + + // M has a constraint: (class IMinusT`1) + var constraints = paramM.GetConstraints(); + Assert.Single(constraints); + + var constraint = reader.GetGenericParameterConstraint(constraints.Single()); + var constraintType = constraint.Type; + + // The constraint should be a TypeSpec for IMinusT`1, + // NOT a TypeRef/TypeDef for System.Object + Assert.Equal(HandleKind.TypeSpecification, constraintType.Kind); + + var typeSpec = reader.GetTypeSpecification((TypeSpecificationHandle)constraintType); + var sigBytes = reader.GetBlobBytes(typeSpec.Signature); + + // Expected: GENERICINST (0x15), CLASS (0x12), , + // 1 (generic arg count), VAR 0 (type parameter !PlusT at index 0) + Assert.Equal(0x15, sigBytes[0]); // ELEMENT_TYPE_GENERICINST + } + + [Fact] + public void ModReq_InFieldSignature_PreservedInRewrittenBlob() + { + // A field with modreq should preserve the modifier in the signature + // after the TypeRef→TypeDef signature rewriting pass. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static int32 modreq([mscorlib]System.Runtime.CompilerServices.IsVolatile) volatileField + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + // Field sig: 0x06 (FIELD), 0x1F (CMOD_REQD), , 0x08 (I4) + Assert.Equal(0x06, sigBytes[0]); // FIELD header + Assert.Equal((byte)SignatureTypeCode.RequiredModifier, sigBytes[1]); // CMOD_REQD + // The last byte should be the underlying type (int32 = 0x08) + Assert.Equal(0x08, sigBytes[^1]); + } + + [Fact] + public void ModOpt_InMethodSignature_PreservedInRewrittenBlob() + { + // A method parameter with modopt should preserve the modifier + // after signature rewriting. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M(int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) x) cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "M"); + var sigBytes = reader.GetBlobBytes(method.Signature); + + // Method sig: 0x00 (DEFAULT), 0x01 (1 param), 0x01 (void ret), + // then param: 0x20 (CMOD_OPT), , 0x08 (I4) + Assert.Equal(0x00, sigBytes[0]); // DEFAULT + Assert.Equal(0x01, sigBytes[1]); // 1 param + Assert.Equal(0x01, sigBytes[2]); // void return + Assert.Equal((byte)SignatureTypeCode.OptionalModifier, sigBytes[3]); // CMOD_OPT + // The last byte is the underlying type (int32 = 0x08) + Assert.Equal(0x08, sigBytes[^1]); + } + + [Fact] + public void ModReq_WithSelfAssemblyTypeRef_PreservedAfterResolution() + { + // modreq referencing a type in the same assembly should still + // produce a correct signature after TypeRef→TypeDef resolution. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi MyModifier extends [mscorlib]System.Object + { + } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public static int32 modreq([test]MyModifier) myField + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var field = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sigBytes = reader.GetBlobBytes(field.Signature); + + Assert.Equal(0x06, sigBytes[0]); // FIELD header + Assert.Equal((byte)SignatureTypeCode.RequiredModifier, sigBytes[1]); // CMOD_REQD + // After the modifier coded index, the underlying type is int32 + Assert.Equal(0x08, sigBytes[^1]); + // The [test]MyModifier TypeRef should have resolved to TypeDef, + // so no TypeRef for MyModifier should exist. + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyModifier", reader.GetString(tr.Name)); + } + } + + [Fact] + public void ExplicitLayout_EmitsClassLayoutWithDefaultValues() + { + // Types with explicit layout should emit a ClassLayout row + // even when .pack and .size are not specified, matching native ilasm. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public explicit sealed ansi Test extends [mscorlib]System.ValueType + { + .field [0] public int32 x + .field [4] public int32 y + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // ClassLayout table should have an entry for the explicit layout type + int classLayoutCount = reader.GetTableRowCount(TableIndex.ClassLayout); + Assert.True(classLayoutCount >= 1, $"ClassLayout table should have at least 1 entry for explicit layout type, has {classLayoutCount}"); + + // Verify the layout has default values (pack=0, size=0) + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + var layout = typeDef.GetLayout(); + Assert.Equal(0, layout.PackingSize); + Assert.Equal(0, layout.Size); + } + + [Fact] + public void SequentialLayout_NoClassLayoutWithoutPackOrSize() + { + // Types with sequential layout should NOT emit ClassLayout + // unless .pack or .size is explicitly specified. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public sequential sealed ansi Test extends [mscorlib]System.ValueType + { + .field public int32 x + .field public int32 y + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // ClassLayout table should have NO entries for sequential layout without .pack/.size + int classLayoutCount = reader.GetTableRowCount(TableIndex.ClassLayout); + Assert.Equal(0, classLayoutCount); + } + + [Fact] + public void ExplicitLayout_WithPackAndSize_EmitsSpecifiedValues() + { + // When .pack and .size are explicitly set, those values should be emitted. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public explicit sealed ansi Test extends [mscorlib]System.ValueType + { + .pack 4 + .size 16 + .field [0] public int32 x + .field [4] public int32 y + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var typeDef = reader.GetTypeDefinition(MetadataTokens.TypeDefinitionHandle(2)); + var layout = typeDef.GetLayout(); + Assert.Equal(4, layout.PackingSize); + Assert.Equal(16, layout.Size); + } + + [Fact] + public void TypeRefInILToken_BackpatchedAfterResolution() + { + // When a type instruction (unbox.any, box, castclass, etc.) references + // a type via [self-assembly]Type, the IL token must be backpatched to the + // resolved TypeDef handle after TypeRef→TypeDef resolution. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi sealed MyStruct extends [mscorlib]System.ValueType + { + .field public int32 x + } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static int32 Unbox(object o) cil managed + { + ldarg.0 + unbox.any [test]MyStruct + ldfld int32 MyStruct::x + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // [test]MyStruct TypeRef should resolve to TypeDef + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyStruct", reader.GetString(tr.Name)); + } + + // The method IL should contain a TypeDef token for MyStruct, not a TypeRef token. + // Read the method body and check the unbox.any operand. + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "Unbox"); + int rva = method.RelativeVirtualAddress; + Assert.True(rva > 0, "Method should have a body"); + } + + [Fact] + public void TypeRefInCastclass_BackpatchedAfterResolution() + { + // castclass with [self-assembly]Type should use TypeDef token. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi MyClass extends [mscorlib]System.Object + { + } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static class MyClass Cast(object o) cil managed + { + ldarg.0 + castclass [test]MyClass + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // [test]MyClass TypeRef should resolve to TypeDef + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyClass", reader.GetString(tr.Name)); + } + } + + [Fact] + public void TypeRefInLdtoken_BackpatchedAfterResolution() + { + // ldtoken with [self-assembly]Type should use TypeDef token. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi MyType extends [mscorlib]System.Object + { + } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void GetToken() cil managed + { + ldtoken [test]MyType + pop + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyType", reader.GetString(tr.Name)); + } + } + + [Fact] + public void TypeRefInFieldMdtoken_BackpatchedAfterResolution() + { + // When a field instruction uses an mdtoken that resolves to a TypeRef + // for a local type, the token should be backpatched to TypeDef. + // This tests the instr_field mdtoken path. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi sealed MyStruct extends [mscorlib]System.ValueType + { + .field public int32 x + } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void Load() cil managed + { + ldtoken field int32 [test]MyStruct::x + pop + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // [test]MyStruct TypeRef should resolve to TypeDef + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyStruct", reader.GetString(tr.Name)); + } + } + + [Fact] + public void LdargByName_CorrectIndexInLongMethod() + { + // Regression test for NaN comp32 IL corruption: ldarg.s by parameter name + // emitted wrong index (0 instead of 3) after ~512 bytes of IL, causing + // the IL body to be garbled from that point forward. + // Generate enough instructions to cross the 512-byte IL boundary, + // then verify ldarg.s with the 4th parameter name emits index 3. + var sb = new StringBuilder(); + sb.AppendLine(""" + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void Run(float32 a, float32 b, float32 c, float32 d) cil managed + { + .maxstack 8 + """); + // Each block is ~18 bytes: ldarg.s(2) + ldarg.s(2) + ceq(2) + brfalse.s(2) + ldstr(5) + br(5) + // 30 blocks = ~540 bytes, crossing the 512-byte boundary + for (int i = 0; i < 30; i++) + { + sb.AppendLine($" ldarg.s 'd'"); + sb.AppendLine($" ldarg.s 'a'"); + sb.AppendLine($" ceq"); + sb.AppendLine($" brfalse.s LBL_{i}"); + sb.AppendLine($" ldstr \"block {i}\""); + sb.AppendLine($" br DONE"); + sb.AppendLine($" LBL_{i}:"); + } + sb.AppendLine(""" + DONE: + ret + } + } + """); + + string source = sb.ToString(); + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "Run"); + + // Read the IL body and verify ldarg.s instructions have correct indices + var body = pe.GetMethodBody(method.RelativeVirtualAddress); + var ilBytes = body.GetILBytes()!; + + // Walk the IL and check all ldarg.s (0x0E) instructions + int pos = 0; + int ldargCount = 0; + while (pos < ilBytes.Length) + { + byte op = ilBytes[pos]; + if (op == 0x0E) // ldarg.s + { + byte argIndex = ilBytes[pos + 1]; + ldargCount++; + // Odd ldarg.s (1st, 3rd, 5th...) should load 'd' = index 3 + // Even ldarg.s (2nd, 4th, 6th...) should load 'a' = index 0 + if (ldargCount % 2 == 1) + { + Assert.True(argIndex == 3, $"ldarg.s #{ldargCount} at IL offset {pos} should load 'd' (index 3) but got index {argIndex}"); + } + else + { + Assert.True(argIndex == 0, $"ldarg.s #{ldargCount} at IL offset {pos} should load 'a' (index 0) but got index {argIndex}"); + } + pos += 2; + } + else if (op == 0xFE) // two-byte opcode prefix + { + pos += 2; // skip prefix + opcode + } + else if (op == 0x72) // ldstr + { + pos += 5; // opcode + 4-byte token + } + else if (op == 0x38) // br + { + pos += 5; + } + else if (op == 0x2C) // brfalse.s + { + pos += 2; + } + else if (op == 0x2A) // ret + { + pos += 1; + } + else + { + pos += 1; // unknown, advance 1 + } + } + Assert.Equal(60, ldargCount); // 30 blocks * 2 ldarg.s each + } + + [Fact] + public void MultiDimArrayParam_PreservedAfterSignatureRewrite() + { + // Multi-dimensional array types in method signatures must survive + // the TypeRef→TypeDef signature rewriting pass. + // Regression: GetArrayType was missing the ELEMENT_TYPE_ARRAY (0x14) prefix byte. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M(int32[0...,0...] arr) cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "M"); + var sigBytes = reader.GetBlobBytes(method.Signature); + + // Method sig: 0x00 (DEFAULT), 0x01 (1 param), 0x01 (void ret), + // then ELEMENT_TYPE_ARRAY (0x14), ELEMENT_TYPE_I4 (0x08), shape... + Assert.Equal(0x00, sigBytes[0]); // DEFAULT + Assert.Equal(0x01, sigBytes[1]); // 1 param + Assert.Equal(0x01, sigBytes[2]); // void return + Assert.Equal(0x14, sigBytes[3]); // ELEMENT_TYPE_ARRAY + Assert.Equal(0x08, sigBytes[4]); // ELEMENT_TYPE_I4 (int32) + Assert.Equal(0x02, sigBytes[5]); // rank = 2 + } + + [Fact] + public void MultiDimArrayParam_WithSelfAssemblyRef_PreservedAfterRewrite() + { + // Multi-dimensional array with a self-assembly type reference as element type. + // Both the TypeRef resolution AND the array shape must be correct. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi sealed MyStruct extends [mscorlib]System.ValueType + { + .field public int32 x + } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void Process(valuetype [test]MyStruct[0...,0...,0...] data) cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "Process"); + var sigBytes = reader.GetBlobBytes(method.Signature); + + Assert.Equal(0x00, sigBytes[0]); // DEFAULT + Assert.Equal(0x01, sigBytes[1]); // 1 param + Assert.Equal(0x01, sigBytes[2]); // void return + Assert.Equal(0x14, sigBytes[3]); // ELEMENT_TYPE_ARRAY + // Element type: VALUETYPE (0x11) + TypeDef coded index (MyStruct resolved) + Assert.Equal(0x11, sigBytes[4]); // ELEMENT_TYPE_VALUETYPE + // After the type token: rank = 3 + // Find the rank byte (after the compressed TypeDef coded index) + int rankIdx = 5; + // Skip the compressed integer (coded index for MyStruct TypeDef) + if (sigBytes[rankIdx] < 0x80) rankIdx += 1; + else if (sigBytes[rankIdx] < 0xC0) rankIdx += 2; + else rankIdx += 4; + Assert.Equal(0x03, sigBytes[rankIdx]); // rank = 3 + + // [test]MyStruct TypeRef should have been resolved to TypeDef + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyStruct", reader.GetString(tr.Name)); + } + } + + [Fact] + public void SZArrayParam_PreservedAfterSignatureRewrite() + { + // SZ arrays (char[], int32[]) must preserve their element type + // through the signature rewriting pass. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M(char[] chars, int32[] ints) cil managed + { + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "M"); + var sigBytes = reader.GetBlobBytes(method.Signature); + + // Method sig: 0x00 (DEFAULT), 0x02 (2 params), 0x01 (void ret), + // param 1: SZARRAY (0x1D) + CHAR (0x03) + // param 2: SZARRAY (0x1D) + I4 (0x08) + Assert.Equal(0x00, sigBytes[0]); // DEFAULT + Assert.Equal(0x02, sigBytes[1]); // 2 params + Assert.Equal(0x01, sigBytes[2]); // void return + Assert.Equal(0x1D, sigBytes[3]); // ELEMENT_TYPE_SZARRAY + Assert.Equal(0x03, sigBytes[4]); // ELEMENT_TYPE_CHAR + Assert.Equal(0x1D, sigBytes[5]); // ELEMENT_TYPE_SZARRAY + Assert.Equal(0x08, sigBytes[6]); // ELEMENT_TYPE_I4 + } + + [Fact] + public void MultiDimArrayField_PreservedAfterSignatureRewrite() + { + // Multi-dimensional array types in field signatures must survive rewriting. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .field public int32[0...] arr1d + .field public int32[0...,0...] arr2d + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // arr1d: FIELD (0x06), ARRAY (0x14), I4 (0x08), rank=1, ... + var field1 = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(1)); + var sig1 = reader.GetBlobBytes(field1.Signature); + Assert.Equal(0x06, sig1[0]); // FIELD + Assert.Equal(0x14, sig1[1]); // ELEMENT_TYPE_ARRAY + Assert.Equal(0x08, sig1[2]); // ELEMENT_TYPE_I4 + Assert.Equal(0x01, sig1[3]); // rank = 1 + + // arr2d: FIELD (0x06), ARRAY (0x14), I4 (0x08), rank=2, ... + var field2 = reader.GetFieldDefinition(MetadataTokens.FieldDefinitionHandle(2)); + var sig2 = reader.GetBlobBytes(field2.Signature); + Assert.Equal(0x06, sig2[0]); // FIELD + Assert.Equal(0x14, sig2[1]); // ELEMENT_TYPE_ARRAY + Assert.Equal(0x08, sig2[2]); // ELEMENT_TYPE_I4 + Assert.Equal(0x02, sig2[3]); // rank = 2 + } + + [Fact] + public void LocalsInit_EmitsStandaloneSignature() + { + // .locals init (...) should emit a StandAloneSig that is connected + // to the method body, causing ildasm to show the .locals directive. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M() cil managed + { + .locals init (int32 x, string s) + ldc.i4.0 + stloc.0 + ldnull + stloc.1 + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int sigCount = reader.GetTableRowCount(TableIndex.StandAloneSig); + Assert.True(sigCount >= 1, $"Should have at least 1 StandAloneSig for .locals, got {sigCount}"); + + var sig = reader.GetStandaloneSignature(MetadataTokens.StandaloneSignatureHandle(1)); + var sigBytes = reader.GetBlobBytes(sig.Signature); + + // LOCAL_SIG (0x07), 2 locals, I4 (0x08), STRING (0x0E) + Assert.Equal(0x07, sigBytes[0]); // LOCAL_SIG + Assert.Equal(0x02, sigBytes[1]); // 2 locals + Assert.Equal(0x08, sigBytes[2]); // int32 + Assert.Equal(0x0E, sigBytes[3]); // string + + // The method should have InitLocals flag + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "M"); + var body = pe.GetMethodBody(method.RelativeVirtualAddress); + Assert.True(body.LocalVariablesInitialized); + } + + [Fact] + public void LocalsWithoutInit_EmitsStandaloneSignature() + { + // .locals (...) without init should still emit a StandAloneSig + // but without the InitLocals flag. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M() cil managed + { + .locals (int32 x) + ldc.i4.0 + stloc.0 + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int sigCount = reader.GetTableRowCount(TableIndex.StandAloneSig); + Assert.True(sigCount >= 1, $"Should have at least 1 StandAloneSig for .locals, got {sigCount}"); + + var sig = reader.GetStandaloneSignature(MetadataTokens.StandaloneSignatureHandle(1)); + var sigBytes = reader.GetBlobBytes(sig.Signature); + + Assert.Equal(0x07, sigBytes[0]); // LOCAL_SIG + Assert.Equal(0x01, sigBytes[1]); // 1 local + Assert.Equal(0x08, sigBytes[2]); // int32 + + // The method should NOT have InitLocals flag + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "M"); + var body = pe.GetMethodBody(method.RelativeVirtualAddress); + Assert.False(body.LocalVariablesInitialized); + } + + [Fact] + public void LocalsWithArrayType_EmitsStandaloneSignature() + { + // .locals init with array type should emit correct signature. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void M() cil managed + { + .locals init (int32[0...] arr) + ldnull + stloc.0 + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + int sigCount = reader.GetTableRowCount(TableIndex.StandAloneSig); + Assert.True(sigCount >= 1, $"Should have at least 1 StandAloneSig, got {sigCount}"); + + var sig = reader.GetStandaloneSignature(MetadataTokens.StandaloneSignatureHandle(1)); + var sigBytes = reader.GetBlobBytes(sig.Signature); + + Assert.Equal(0x07, sigBytes[0]); // LOCAL_SIG + Assert.Equal(0x01, sigBytes[1]); // 1 local + Assert.Equal(0x14, sigBytes[2]); // ELEMENT_TYPE_ARRAY + Assert.Equal(0x08, sigBytes[3]); // ELEMENT_TYPE_I4 + Assert.Equal(0x01, sigBytes[4]); // rank = 1 + } + + [Fact] + public void CatchClause_SelfAssemblyTypeRef_ResolvesToTypeDef() + { + // When a catch clause references a type via [self-assembly]Type, + // the exception handler table must contain the resolved TypeDef token, + // not the stale PseudoHandle TypeRef token. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi MyException extends [mscorlib]System.Exception + { + .method public specialname rtspecialname instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Exception::.ctor() + ret + } + } + .class public auto ansi Test extends [mscorlib]System.Object + { + .method public static void TryCatch() cil managed + { + .try + { + leave.s DONE + } + catch [test]MyException + { + pop + leave.s DONE + } + DONE: + ret + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // [test]MyException TypeRef should resolve to TypeDef + foreach (var trHandle in reader.TypeReferences) + { + var tr = reader.GetTypeReference(trHandle); + Assert.NotEqual("MyException", reader.GetString(tr.Name)); + } + + // Verify the method has exception handlers and the catch type is a TypeDef + var method = reader.MethodDefinitions + .Select(h => reader.GetMethodDefinition(h)) + .First(m => reader.GetString(m.Name) == "TryCatch"); + var body = pe.GetMethodBody(method.RelativeVirtualAddress); + var ehRegions = body.ExceptionRegions; + Assert.True(ehRegions.Length >= 1, $"Should have at least 1 exception region, got {ehRegions.Length}"); + + var catchRegion = ehRegions.First(r => r.Kind == ExceptionRegionKind.Catch); + Assert.Equal(HandleKind.TypeDefinition, catchRegion.CatchType.Kind); + } + + [Fact] + public void CustomAttribute_OnProperty_NotDropped() + { + // Custom attributes inside property declarations (e.g., DispIdAttribute) + // must be emitted and owned by the property, not silently dropped. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi IFoo extends [mscorlib]System.Object + { + .method public specialname instance int32 get_Value() cil managed + { + ldc.i4.0 + ret + } + .property instance int32 Value() + { + .custom instance void [mscorlib]System.ObsoleteAttribute::.ctor() = ( 01 00 00 00 ) + .get instance int32 IFoo::get_Value() + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Find the property + var propHandle = reader.PropertyDefinitions.Single(); + var prop = reader.GetPropertyDefinition(propHandle); + Assert.Equal("Value", reader.GetString(prop.Name)); + + // The property should have a custom attribute (ObsoleteAttribute) + var attrs = reader.GetCustomAttributes(propHandle); + Assert.True(attrs.Count >= 1, $"Property should have at least 1 custom attribute, got {attrs.Count}"); + } + + [Fact] + public void CustomAttribute_OnEvent_NotDropped() + { + // Custom attributes inside event declarations must be emitted + // and owned by the event, not silently dropped. + string source = """ + .assembly extern mscorlib { } + .assembly test { } + .class public auto ansi MyDelegate extends [mscorlib]System.MulticastDelegate + { + .method public specialname rtspecialname instance void .ctor(object 'object', native int 'method') runtime managed + { + } + .method public virtual instance void Invoke() runtime managed + { + } + } + .class public auto ansi MyClass extends [mscorlib]System.Object + { + .method public specialname instance void add_MyEvent(class MyDelegate) cil managed + { + ret + } + .method public specialname instance void remove_MyEvent(class MyDelegate) cil managed + { + ret + } + .event MyDelegate MyEvent + { + .custom instance void [mscorlib]System.ObsoleteAttribute::.ctor() = ( 01 00 00 00 ) + .addon instance void MyClass::add_MyEvent(class MyDelegate) + .removeon instance void MyClass::remove_MyEvent(class MyDelegate) + } + } + """; + + using var pe = CompileAndGetReader(source, new Options()); + var reader = pe.GetMetadataReader(); + + // Find the event + var eventHandle = reader.EventDefinitions.Single(); + var evt = reader.GetEventDefinition(eventHandle); + Assert.Equal("MyEvent", reader.GetString(evt.Name)); + + // The event should have a custom attribute (ObsoleteAttribute) + var attrs = reader.GetCustomAttributes(eventHandle); + Assert.True(attrs.Count >= 1, $"Event should have at least 1 custom attribute, got {attrs.Count}"); + } } } diff --git a/src/tools/ilasm/tests/ILAssembler.Tests/PreprocessedTokenSourceTests.cs b/src/tools/ilasm/tests/ILAssembler.Tests/PreprocessedTokenSourceTests.cs index c51b3ed4c61eec..bcf0b8e5f046cb 100644 --- a/src/tools/ilasm/tests/ILAssembler.Tests/PreprocessedTokenSourceTests.cs +++ b/src/tools/ilasm/tests/ILAssembler.Tests/PreprocessedTokenSourceTests.cs @@ -22,7 +22,7 @@ public void Define_Token_ExcludedFromStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -46,7 +46,7 @@ public void IfDef_False_Tokens_RemovedFromStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -71,7 +71,7 @@ public void IfDef_True_Tokens_LeftInStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -101,7 +101,7 @@ public void IfNDef_False_Tokens_RemovedFromStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -125,7 +125,7 @@ public void IfNDef_True_Tokens_LeftInStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -156,7 +156,7 @@ public void IfDef_False_Else_Tokens_RemovedFromStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -183,7 +183,7 @@ public void IfDef_Else_True_Tokens_LeftInStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -214,7 +214,7 @@ public void IfNDef_Else_False_Tokens_RemovedFromStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -240,7 +240,7 @@ public void IfNDef_Else_True_Tokens_LeftInStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -269,7 +269,7 @@ public void IfDef_False_Empty_Body_Leaves_Else_Block_TokensInStream() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -294,7 +294,7 @@ public void IfNDef_True_Empty_Body_Removes_Else_Block_Tokens() """; ITokenSource lexer = CreateLexerForSource(source); - PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -325,7 +325,7 @@ public void Include_Includes_Tokens_With_Original_Source() { Assert.Equal($"{nameof(source2)}.il", path); return CreateLexerForSource(source2, nameof(source2)); - }); + }, CreateDefaultLexer()); preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; BufferedTokenStream stream = new(preprocessor); stream.Fill(); @@ -365,10 +365,110 @@ private static ITokenSource CreateLexerForSource(string source, string? sourceNa }); } + private static Func CreateDefaultLexer() + { + return text => new CILLexer(new AntlrInputStream(text)); + } + private static ITokenSource NoIncludeDirectivesCallback(string path) { Assert.Fail("The included-file callback was called when no #include was provided in source."); return null!; } + + [Fact] + public void Define_MultiTokenValue_RelexedIntoSeparateTokens() + { + string source = """ + #define NEG_INF "float32(0xFF800000)" + NEG_INF + """; + + ITokenSource lexer = CreateLexerForSource(source); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); + preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; + BufferedTokenStream stream = new(preprocessor); + stream.Fill(); + Assert.Collection(stream.GetTokens(), + token => + { + Assert.Equal(CILLexer.FLOAT32, token.Type); + Assert.Equal("float32", token.Text); + }, + token => Assert.Equal("(", token.Text), + token => + { + Assert.Equal(CILLexer.INT32, token.Type); + Assert.Equal("0xFF800000", token.Text); + }, + token => Assert.Equal(")", token.Text), + token => Assert.Equal(CILLexer.Eof, token.Type)); + } + + [Fact] + public void Define_SingleTokenValue_SubstitutedCorrectly() + { + string source = """ + #define FALSE "0" + FALSE + """; + + ITokenSource lexer = CreateLexerForSource(source); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); + preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; + BufferedTokenStream stream = new(preprocessor); + stream.Fill(); + Assert.Collection(stream.GetTokens(), + token => + { + Assert.Equal(CILLexer.INT32, token.Type); + Assert.Equal("0", token.Text); + }, + token => Assert.Equal(CILLexer.Eof, token.Type)); + } + + [Fact] + public void Define_SimpleNameValue_SubstitutedAsId() + { + string source = """ + #define ASSEMBLY_NAME "my_test" + ASSEMBLY_NAME + """; + + ITokenSource lexer = CreateLexerForSource(source); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); + preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; + BufferedTokenStream stream = new(preprocessor); + stream.Fill(); + Assert.Collection(stream.GetTokens(), + token => + { + Assert.Equal(CILLexer.ID, token.Type); + Assert.Equal("my_test", token.Text); + }, + token => Assert.Equal(CILLexer.Eof, token.Type)); + } + + [Fact] + public void Define_DottedNameValue_SubstitutedCorrectly() + { + string source = """ + #define ANAME "System.Runtime" + ANAME + """; + + ITokenSource lexer = CreateLexerForSource(source); + PreprocessedTokenSource preprocessor = new PreprocessedTokenSource(lexer, NoIncludeDirectivesCallback, CreateDefaultLexer()); + preprocessor.OnPreprocessorSyntaxError += NoLexerDiagnosticsCallback; + BufferedTokenStream stream = new(preprocessor); + stream.Fill(); + Assert.Collection(stream.GetTokens(), + token => + { + Assert.Equal(CILLexer.DOTTEDNAME, token.Type); + Assert.Equal("System.Runtime", token.Text); + }, + token => Assert.Equal(CILLexer.Eof, token.Type)); + } } }