Package CSharpProcessor

Source Code of CSharpProcessor.pparser$Node

package CSharpProcessor;

import java.io.IOException;
import CSharpProcessor.Lexer.Lexems;
import CSharpProcessor.Lexer.LapgSymbol;

//#define DEBUG_syntax

using System;
using System.Collections;
using System.IO;



public class pparser implements Lexer.ErrorReporter {
 
 
  public enum Kind {
    Identifier, TypeDot, Dot, DimmedExpr, Other
  }
 
  public class Node {
    public Kind kind;
    public Node left;
    public Node right;
    public Node expr;
 
    public Node() {
      this.kind = Kind.Other;
    }
 
    public Node( Kind kind, Node left, Node right, Node expr ) {
      this.kind = kind;
      this.left = left;
      this.right = right;
      this.expr = expr;
    }
  }
 
  // 14.6.6 Cast expressions =======
  // To resolve cast-expression ambiguities, the following rule exists: A sequence of one or
  // more tokens (�9.4) enclosed in parentheses is considered the start of a cast-expression only
  // if at least one of the following are true:
  //  � The sequence of tokens is correct grammar for a type, but not for an expression.
  //  � The sequence of tokens is correct grammar for a type, and the token immediately following
  //    the closing parentheses is the token �~�, the token �!�, the token �(�, an identifier (�9.4.1),
  //    a literal (�9.4.4), or any keyword (�9.4.3) except as and is.
 
  private static bool CastExpr( Node expr, lapg_symbol next ) {
 
    // check if expression can be type
    if( !CanBeType( expr ) )
      return false;
 
    // if expression is only type (contains dim_specifier)
    if( ContainsDimSpec( expr ) )
      return true;
 
    // Type or Expr
    switch( (Tokens)next.lexem ) {
      case Tokens.TILDE:
      case Tokens.EXCL:
      case Tokens.LROUNDBRACKET:
      case Tokens.identifier:
      case Tokens.Licon:
      case Tokens.Lfcon:
      case Tokens.Lscon:
      case Tokens.Lccon:
      case Tokens.Lfalse:
      case Tokens.Ltrue:
      case Tokens.Lnull:
        return true;
      case Tokens.Lis:
      case Tokens.Las:
        return false;
    }
 
    // keyword
    if( next.lexem >= (int)Tokens.Labstract && next.lexem <= (int)Tokens.Lwhile )
      return true;
 
    return false;
  }
 
  private static bool CanBeType( Node expr ) {
    switch( expr.kind ) {
      case Kind.Identifier: case Kind.TypeDot:
        return true;
      case Kind.Dot:
        return CanBeType( expr.left );
      case Kind.DimmedExpr:
        return CanBeType( expr.expr );
    }
    return false;
  }
 
  private static bool ContainsDimSpec( Node expr ) {
    return expr.kind == Kind.DimmedExpr;
  }
 
  byte[] buff = new byte[1025];
  int l, end;
  BinaryReader r;
 
  void fillb() {
    l = 0;
    end = r.Read( buff, 0, 1024 );
    buff[end] = 0;
  }
 
  void error( string s ) {
    System.Console.WriteLine(s);
  }
 
  public static void Main(string[] args) {
    parser p = new parser();
   
    if( args.Length > 0 )
      p.r = new BinaryReader( new FileStream(args[0],FileMode.Open) );
    else
      p.r = new BinaryReader( System.Console.OpenStandardInput() );
 
    p.fillb();
    p.parse();
  }
  private static final int[] lapg_action = new int[] {
    -3, -1, -51, -97, 243, -147, -1, -1, -1, -1, 4, -167, -215, 249, 247, 250,
    251, 252, 253, 254, 255, -259, 414, 244, -1, 246, -1, 31, -1, -299, 421, 422,
    -311, -1, -1, 423, -321, -329, 248, 415, 11, 17, 9, 6, 16, 10, 8, 7,
    14, 12, 13, 19, 15, 18, 20, -421, -1, 32, -1, -461, -1, 419, -1, -509,
    427, 425, 21, -1, -1, -1, -1, -1, 245, -589, -1, 418, 424, 33, 24, 25,
    27, 26, -1, 50, 57, 64, -1, 51, 53, 29, 52, 60, 62, -1, 30, 48,
    56, 58, -1, 49, 76, 28, -1, 61, 63, -1, 59, 55, -1, -1, -1, -1,
    -1, -1, -1, 73, 74, -1, -635, 54, 432, -723, 72, -815, 93, -909, 108, -987,
    -1043, -1093, -1139, -1181, -1211, -1237, -1261, -1283, -1303, 158, 159, -1, -1321, -1327, -1333, -1389,
    -1, -1443, 37, -1497, -1, -1551, -1557, -1563, -1, 417, -1, -1, -1, -1, -1, -1569,
    -1, -1, -1, -1, -1577, -1, -1, 102, 103, 104, 105, 106, 107, -1, -1587, -1,
    83, 84, -1, -1671, 92, -1, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
    155, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, 431, -1, -1, -1, 260, 65, -1, -1753, -1759,
    367, -1, -1, 401, -1, -1, 380, -1, -1, 361, -1815, 416, 156, -1, 77, -1,
    -1865, -1949, 99, -2031, -1, -1, -1, -1, 46, 47, 109, 87, -1, -1, -2113, 66,
    68, -1, 86, 85, 372, -1, -1, -2119, 110, 144, 113, 114, 115, 112, -2125, -2181,
    -2237, -2287, -2337, -2381, -2425, -2471, -2517, -2563, -2609, -2651, -2693, -2723, -2749, -2773, -1, -2795,
    433, -2815, -2823, -2829, -2917, -3011, 368, 404, -3057, -3065, -3159, -3165, -3209, -3303, -3309, -3397,
    23, 242, 78, -1, 80, -1, 289, 290, 378, -1, -3491, -1, 82, 79, 81, 111,
    70, 69, -1, 90, 91, 371, 373, -1, -1, 280, -3497, -1, -3581, 269, 271, 272,
    273, 274, 275, 276, 277, 278, 279, 262, -3669, -1, 291, -3711, 298, 299, -1, -1,
    -3719, 409, 403, -3725, -1, -3765, 387, 382, -1, 363, 157, 100, 376, -1, -3809, 67,
    143, -3903, 282, -3911, -3995, -1, -1, 358, -1, 268, 270, 305, 306, 304, -1, 301,
    -1, -1, -4077, -4121, 407, -4129, 396, -1, 389, 386, 388, 365, 377, 379, -4137, -4231,
    283, -1, 351, 350, -1, -1, -1, 321, 322, -1, -1, -1, -1, -1, -4323, 413,
    297, 300, -1, 408, 410, -1, -1, 98, 96, -1, -4329, -4375, -1, 318, -1, -4389,
    -1, 285, -1, -1, -1, -4399, 314, 313, 320, -1, -1, -1, 201, -1, 303, 307,
    160, 412, -1, 395, -1, -1, -1, -1, -1, -1, 334, 333, 327, 328, 335, 336,
    337, 338, 339, 340, 329, 330, 346, 345, 331, 332, 341, 342, 343, 344, 348, 347,
    326, -1, -1, -1, 284, -4515, -4521, -4567, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -4611, -1, -4691, -1, -1, -1, -1, -1, 167, -1, -1, -4771, -4811,
    -1, -4819, -4855, -1, 206, 197, -1, -1, 164, 165, -1, 188, -1, -4899, -1, -1,
    -1, 281, -1, -1, -5015, -5021, -5067, -1, 315, -5111, -5117, -5125, 319, 288, 286, -1,
    -1, -5133, -1, -1, -1, -1, 181, 192, -1, 182, -5141, -1, -5175, -1, -1, -1,
    -1, -1, -1, 175, -1, -1, -1, -1, 193, 191, -1, -1, -5255, -5285, -1, -5315,
    -5321, -5329, -5413, -5457, 162, 163, 166, 196, 198, -1, 203, 202, -1, 393, -1, -1,
    -5501, -1, -1, -1, -1, -1, 352, -1, 308, 309, 311, -1, -1, 323, 324, -1,
    -5509, -1, 222, 224, -1, 173, -5515, -1, -1, 185, 183, -1, -1, 186, -1, 187,
    -1, -1, 226, -5521, 228, -5645, 232, 233, -5771, 241, 240, -1, -1, 161, -1, -1,
    360, -1, 392, 397, 399, -1, -1, 316, -1, -1, 354, 312, 293, -5851, -1, -1,
    -5857, -1, -1, 184, -1, -1, -1, -1, 238, 239, 229, 231, 234, -1, -1, -5937,
    349, 400, 391, -5981, -5987, -6071, -1, 325, -1, -1, 225, -1, -6155, 189, -6277, 170,
    -6285, 190, 171, -1, -1, -1, 317, -1, -6291, -1, -1, -1, -1, -1, -6371, 214,
    -1, 218, 235, -1, 394, 355, 356, 172, -1, -6379, -1, 169, -1, 221, 213, 215,
    -6385, 216, 219, -1, -1, 180, 220, 237, 179, -1, -2,
  };


  private static final short[] lapg_lalr = new short[] {
    79, -1, 0, 1, 7, 1, 17, 1, 22, 1, 26, 1, 29, 1, 41, 1,
    42, 1, 46, 1, 47, 1, 52, 1, 54, 1, 55, 1, 56, 1, 57, 1,
    61, 1, 65, 1, 67, 1, 77, 1, 80, 1, 82, 1, 86, 1, -1, -2,
    46, -1, 86, -1, 0, 3, 7, 257, 17, 257, 22, 257, 26, 257, 29, 257,
    41, 257, 42, 257, 47, 257, 52, 257, 54, 257, 55, 257, 56, 257, 57, 257,
    61, 257, 65, 257, 67, 257, 77, 257, 80, 257, 82, 257, -1, -2, 79, -1,
    0, 0, 7, 0, 17, 0, 22, 0, 26, 0, 29, 0, 41, 0, 42, 0,
    46, 0, 47, 0, 52, 0, 54, 0, 55, 0, 56, 0, 57, 0, 61, 0,
    65, 0, 67, 0, 77, 0, 80, 0, 82, 0, 85, 0, 86, 0, -1, -2,
    1, 31, 50, 31, 69, 31, 86, 31, 90, 31, 93, 31, 96, 31, 88, 33,
    104, 33, -1, -2, 46, -1, 86, -1, 0, 2, 85, 2, 7, 257, 17, 257,
    22, 257, 26, 257, 29, 257, 41, 257, 42, 257, 47, 257, 52, 257, 54, 257,
    55, 257, 56, 257, 57, 257, 61, 257, 65, 257, 67, 257, 77, 257, 80, 257,
    82, 257, -1, -2, 86, -1, 0, 5, 7, 256, 17, 256, 22, 256, 26, 256,
    29, 256, 41, 256, 42, 256, 47, 256, 52, 256, 54, 256, 55, 256, 56, 256,
    57, 256, 61, 256, 65, 256, 67, 256, 77, 256, 80, 256, 82, 256, -1, -2,
    7, -1, 29, -1, 42, -1, 47, -1, 52, -1, 54, -1, 55, -1, 56, -1,
    57, -1, 61, -1, 65, -1, 77, -1, 80, -1, 82, -1, 17, 259, 22, 259,
    26, 259, 41, 259, 67, 259, -1, -2, 87, 31, 88, 31, 90, 31, 91, 31,
    92, 420, -1, -2, 90, -1, 87, 428, 88, 428, 91, 428, -1, -2, 88, -1,
    87, 426, 91, 426, -1, -2, 86, -1, 1, 256, 7, 256, 10, 256, 12, 256,
    15, 256, 17, 256, 18, 256, 20, 256, 22, 256, 24, 256, 26, 256, 27, 256,
    28, 256, 29, 256, 33, 256, 38, 256, 40, 256, 41, 256, 42, 256, 45, 256,
    47, 256, 49, 256, 51, 256, 52, 256, 53, 256, 54, 256, 55, 256, 56, 256,
    57, 256, 58, 256, 60, 256, 61, 256, 62, 256, 65, 256, 66, 256, 67, 256,
    74, 256, 75, 256, 77, 256, 78, 256, 80, 256, 81, 256, 82, 256, 103, 256,
    -1, -2, 7, -1, 29, -1, 42, -1, 47, -1, 52, -1, 54, -1, 55, -1,
    56, -1, 57, -1, 61, -1, 65, -1, 77, -1, 80, -1, 82, -1, 17, 258,
    22, 258, 26, 258, 41, 258, 67, 258, -1, -2, 79, -1, 7, 1, 17, 1,
    22, 1, 26, 1, 29, 1, 41, 1, 42, 1, 46, 1, 47, 1, 52, 1,
    54, 1, 55, 1, 56, 1, 57, 1, 61, 1, 65, 1, 67, 1, 77, 1,
    80, 1, 82, 1, 85, 1, 86, 1, -1, -2, 1, -1, 3, -1, 4, -1,
    5, -1, 6, -1, 9, -1, 10, -1, 12, -1, 15, -1, 16, -1, 20, -1,
    24, -1, 30, -1, 33, -1, 40, -1, 45, -1, 47, -1, 48, -1, 49, -1,
    60, -1, 62, -1, 63, -1, 66, -1, 69, -1, 71, -1, 73, -1, 74, -1,
    75, -1, 76, -1, 78, -1, 81, -1, 88, -1, 94, -1, 95, -1, 102, -1,
    103, -1, 108, -1, 109, -1, 89, 430, -1, -2, 46, -1, 86, -1, 85, 3,
    7, 257, 17, 257, 22, 257, 26, 257, 29, 257, 41, 257, 42, 257, 47, 257,
    52, 257, 54, 257, 55, 257, 56, 257, 57, 257, 61, 257, 65, 257, 67, 257,
    77, 257, 80, 257, 82, 257, -1, -2, 88, -1, 90, -1, 108, -1, 109, -1,
    128, -1, 8, 101, 43, 101, 85, 101, 87, 101, 89, 101, 91, 101, 92, 101,
    93, 101, 94, 101, 95, 101, 96, 101, 97, 101, 98, 101, 99, 101, 100, 101,
    101, 101, 104, 101, 105, 101, 106, 101, 107, 101, 110, 101, 111, 101, 112, 101,
    113, 101, 114, 101, 115, 101, 116, 101, 117, 101, 118, 101, 119, 101, 120, 101,
    121, 101, 122, 101, 123, 101, 124, 101, 125, 101, 126, 101, 127, 101, -1, -2,
    86, -1, 1, 71, 8, 71, 43, 71, 85, 71, 87, 71, 88, 71, 89, 71,
    90, 71, 91, 71, 92, 71, 93, 71, 94, 71, 95, 71, 96, 71, 97, 71,
    98, 71, 99, 71, 100, 71, 101, 71, 104, 71, 105, 71, 106, 71, 107, 71,
    108, 71, 109, 71, 110, 71, 111, 71, 112, 71, 113, 71, 114, 71, 115, 71,
    116, 71, 117, 71, 118, 71, 119, 71, 120, 71, 121, 71, 122, 71, 123, 71,
    124, 71, 125, 71, 126, 71, 127, 71, 128, 71, -1, -2, 129, -1, 1, 75,
    8, 75, 43, 75, 85, 75, 86, 75, 87, 75, 88, 75, 89, 75, 90, 75,
    91, 75, 92, 75, 93, 75, 94, 75, 95, 75, 96, 75, 97, 75, 98, 75,
    99, 75, 100, 75, 101, 75, 104, 75, 105, 75, 106, 75, 107, 75, 108, 75,
    109, 75, 110, 75, 111, 75, 112, 75, 113, 75, 114, 75, 115, 75, 116, 75,
    117, 75, 118, 75, 119, 75, 120, 75, 121, 75, 122, 75, 123, 75, 124, 75,
    125, 75, 126, 75, 127, 75, 128, 75, -1, -2, 104, -1, 118, -1, 119, -1,
    120, -1, 121, -1, 122, -1, 123, -1, 124, -1, 125, -1, 126, -1, 127, -1,
    8, 112, 43, 112, 85, 112, 87, 112, 89, 112, 91, 112, 92, 112, 93, 112,
    94, 112, 95, 112, 96, 112, 97, 112, 98, 112, 99, 112, 100, 112, 101, 112,
    105, 112, 106, 112, 107, 112, 110, 112, 111, 112, 112, 112, 113, 112, 114, 112,
    115, 112, 116, 112, 117, 112, -1, -2, 96, -1, 97, -1, 98, -1, 8, 116,
    43, 116, 85, 116, 87, 116, 89, 116, 91, 116, 92, 116, 93, 116, 94, 116,
    95, 116, 99, 116, 100, 116, 101, 116, 105, 116, 106, 116, 107, 116, 110, 116,
    111, 116, 112, 116, 113, 116, 114, 116, 115, 116, 116, 116, 117, 116, -1, -2,
    94, -1, 95, -1, 8, 119, 43, 119, 85, 119, 87, 119, 89, 119, 91, 119,
    92, 119, 93, 119, 99, 119, 100, 119, 101, 119, 105, 119, 106, 119, 107, 119,
    110, 119, 111, 119, 112, 119, 113, 119, 114, 119, 115, 119, 116, 119, 117, 119,
    -1, -2, 112, -1, 113, -1, 8, 122, 43, 122, 85, 122, 87, 122, 89, 122,
    91, 122, 92, 122, 93, 122, 99, 122, 100, 122, 101, 122, 105, 122, 106, 122,
    107, 122, 110, 122, 111, 122, 114, 122, 115, 122, 116, 122, 117, 122, -1, -2,
    8, -1, 43, -1, 105, -1, 106, -1, 116, -1, 117, -1, 85, 129, 87, 129,
    89, 129, 91, 129, 92, 129, 93, 129, 99, 129, 100, 129, 101, 129, 107, 129,
    110, 129, 111, 129, 114, 129, 115, 129, -1, -2, 114, -1, 115, -1, 85, 132,
    87, 132, 89, 132, 91, 132, 92, 132, 93, 132, 99, 132, 100, 132, 101, 132,
    107, 132, 110, 132, 111, 132, -1, -2, 99, -1, 85, 134, 87, 134, 89, 134,
    91, 134, 92, 134, 93, 134, 100, 134, 101, 134, 107, 134, 110, 134, 111, 134,
    -1, -2, 101, -1, 85, 136, 87, 136, 89, 136, 91, 136, 92, 136, 93, 136,
    100, 136, 107, 136, 110, 136, 111, 136, -1, -2, 100, -1, 85, 138, 87, 138,
    89, 138, 91, 138, 92, 138, 93, 138, 107, 138, 110, 138, 111, 138, -1, -2,
    110, -1, 85, 140, 87, 140, 89, 140, 91, 140, 92, 140, 93, 140, 107, 140,
    111, 140, -1, -2, 107, -1, 111, -1, 85, 142, 87, 142, 89, 142, 91, 142,
    92, 142, 93, 142, -1, -2, 91, -1, 89, 429, -1, -2, 92, -1, 84, 261,
    -1, -2, 90, -1, 1, 34, 8, 34, 43, 34, 50, 34, 69, 34, 85, 34,
    86, 34, 87, 34, 88, 34, 89, 34, 91, 34, 92, 34, 93, 34, 96, 34,
    99, 34, 100, 34, 101, 34, 105, 34, 106, 34, 107, 34, 110, 34, 111, 34,
    114, 34, 115, 34, 116, 34, 117, 34, -1, -2, 1, 35, 8, 35, 43, 35,
    50, 35, 69, 35, 85, 35, 87, 35, 88, 35, 89, 35, 91, 35, 92, 35,
    93, 35, 96, 35, 99, 35, 100, 35, 101, 35, 105, 35, 106, 35, 107, 35,
    110, 35, 111, 35, 114, 35, 115, 35, 116, 35, 117, 35, 86, 39, -1, -2,
    1, 36, 8, 36, 43, 36, 50, 36, 69, 36, 85, 36, 87, 36, 88, 36,
    89, 36, 91, 36, 92, 36, 93, 36, 96, 36, 99, 36, 100, 36, 101, 36,
    105, 36, 106, 36, 107, 36, 110, 36, 111, 36, 114, 36, 115, 36, 116, 36,
    117, 36, 86, 40, -1, -2, 1, 38, 8, 38, 43, 38, 50, 38, 69, 38,
    85, 38, 87, 38, 88, 38, 89, 38, 91, 38, 92, 38, 93, 38, 96, 38,
    99, 38, 100, 38, 101, 38, 105, 38, 106, 38, 107, 38, 110, 38, 111, 38,
    114, 38, 115, 38, 116, 38, 117, 38, 86, 41, -1, -2, 92, -1, 84, 402,
    -1, -2, 92, -1, 84, 381, -1, -2, 92, -1, 84, 362, -1, -2, 84, -1,
    88, 37, 96, 37, -1, -2, 90, -1, 86, 45, 89, 45, 96, 45, -1, -2,
    1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1,
    15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1,
    47, -1, 48, -1, 49, -1, 51, -1, 58, -1, 60, -1, 62, -1, 63, -1,
    66, -1, 69, -1, 71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1,
    81, -1, 88, -1, 94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1,
    89, 89, -1, -2, 1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1,
    10, -1, 12, -1, 15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1,
    40, -1, 45, -1, 47, -1, 48, -1, 49, -1, 60, -1, 62, -1, 63, -1,
    66, -1, 69, -1, 71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1,
    81, -1, 88, -1, 91, -1, 94, -1, 95, -1, 102, -1, 103, -1, 108, -1,
    109, -1, 87, 370, -1, -2, 91, -1, 87, 370, -1, -2, 86, -1, 1, 366,
    8, 366, 43, 366, 50, 366, 69, 366, 84, 366, 85, 366, 87, 366, 88, 366,
    89, 366, 91, 366, 92, 366, 93, 366, 96, 366, 99, 366, 100, 366, 101, 366,
    105, 366, 106, 366, 107, 366, 110, 366, 111, 366, 114, 366, 115, 366, 116, 366,
    117, 366, -1, -2, 93, -1, 0, 22, 7, 22, 17, 22, 22, 22, 26, 22,
    29, 22, 41, 22, 42, 22, 46, 22, 47, 22, 52, 22, 54, 22, 55, 22,
    56, 22, 57, 22, 61, 22, 65, 22, 67, 22, 77, 22, 80, 22, 82, 22,
    85, 22, 86, 22, -1, -2, 1, -1, 3, -1, 4, -1, 5, -1, 6, -1,
    9, -1, 10, -1, 12, -1, 15, -1, 16, -1, 20, -1, 24, -1, 30, -1,
    33, -1, 40, -1, 45, -1, 47, -1, 48, -1, 49, -1, 51, -1, 58, -1,
    60, -1, 62, -1, 63, -1, 66, -1, 69, -1, 71, -1, 73, -1, 74, -1,
    75, -1, 76, -1, 78, -1, 81, -1, 88, -1, 94, -1, 95, -1, 102, -1,
    103, -1, 108, -1, 109, -1, 89, 89, -1, -2, 1, -1, 3, -1, 4, -1,
    5, -1, 6, -1, 9, -1, 10, -1, 12, -1, 15, -1, 16, -1, 20, -1,
    24, -1, 30, -1, 33, -1, 40, -1, 45, -1, 47, -1, 48, -1, 49, -1,
    60, -1, 62, -1, 63, -1, 66, -1, 69, -1, 71, -1, 73, -1, 74, -1,
    75, -1, 76, -1, 78, -1, 81, -1, 84, -1, 88, -1, 94, -1, 95, -1,
    102, -1, 103, -1, 108, -1, 109, -1, 85, 375, -1, -2, 1, -1, 3, -1,
    4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1, 15, -1, 16, -1,
    20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1, 47, -1, 48, -1,
    49, -1, 60, -1, 62, -1, 63, -1, 66, -1, 69, -1, 71, -1, 73, -1,
    74, -1, 75, -1, 76, -1, 78, -1, 81, -1, 88, -1, 91, -1, 94, -1,
    95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 87, 370, -1, -2, 91, -1,
    89, 88, -1, -2, 91, -1, 87, 369, -1, -2, 96, -1, 97, -1, 98, -1,
    8, 117, 43, 117, 85, 117, 87, 117, 89, 117, 91, 117, 92, 117, 93, 117,
    94, 117, 95, 117, 99, 117, 100, 117, 101, 117, 105, 117, 106, 117, 107, 117,
    110, 117, 111, 117, 112, 117, 113, 117, 114, 117, 115, 117, 116, 117, 117, 117,
    -1, -2, 96, -1, 97, -1, 98, -1, 8, 118, 43, 118, 85, 118, 87, 118,
    89, 118, 91, 118, 92, 118, 93, 118, 94, 118, 95, 118, 99, 118, 100, 118,
    101, 118, 105, 118, 106, 118, 107, 118, 110, 118, 111, 118, 112, 118, 113, 118,
    114, 118, 115, 118, 116, 118, 117, 118, -1, -2, 94, -1, 95, -1, 8, 120,
    43, 120, 85, 120, 87, 120, 89, 120, 91, 120, 92, 120, 93, 120, 99, 120,
    100, 120, 101, 120, 105, 120, 106, 120, 107, 120, 110, 120, 111, 120, 112, 120,
    113, 120, 114, 120, 115, 120, 116, 120, 117, 120, -1, -2, 94, -1, 95, -1,
    8, 121, 43, 121, 85, 121, 87, 121, 89, 121, 91, 121, 92, 121, 93, 121,
    99, 121, 100, 121, 101, 121, 105, 121, 106, 121, 107, 121, 110, 121, 111, 121,
    112, 121, 113, 121, 114, 121, 115, 121, 116, 121, 117, 121, -1, -2, 96, -1,
    8, 128, 43, 128, 85, 128, 87, 128, 89, 128, 91, 128, 92, 128, 93, 128,
    99, 128, 100, 128, 101, 128, 105, 128, 106, 128, 107, 128, 110, 128, 111, 128,
    114, 128, 115, 128, 116, 128, 117, 128, -1, -2, 96, -1, 8, 127, 43, 127,
    85, 127, 87, 127, 89, 127, 91, 127, 92, 127, 93, 127, 99, 127, 100, 127,
    101, 127, 105, 127, 106, 127, 107, 127, 110, 127, 111, 127, 114, 127, 115, 127,
    116, 127, 117, 127, -1, -2, 112, -1, 113, -1, 8, 123, 43, 123, 85, 123,
    87, 123, 89, 123, 91, 123, 92, 123, 93, 123, 99, 123, 100, 123, 101, 123,
    105, 123, 106, 123, 107, 123, 110, 123, 111, 123, 114, 123, 115, 123, 116, 123,
    117, 123, -1, -2, 112, -1, 113, -1, 8, 124, 43, 124, 85, 124, 87, 124,
    89, 124, 91, 124, 92, 124, 93, 124, 99, 124, 100, 124, 101, 124, 105, 124,
    106, 124, 107, 124, 110, 124, 111, 124, 114, 124, 115, 124, 116, 124, 117, 124,
    -1, -2, 112, -1, 113, -1, 8, 125, 43, 125, 85, 125, 87, 125, 89, 125,
    91, 125, 92, 125, 93, 125, 99, 125, 100, 125, 101, 125, 105, 125, 106, 125,
    107, 125, 110, 125, 111, 125, 114, 125, 115, 125, 116, 125, 117, 125, -1, -2,
    112, -1, 113, -1, 8, 126, 43, 126, 85, 126, 87, 126, 89, 126, 91, 126,
    92, 126, 93, 126, 99, 126, 100, 126, 101, 126, 105, 126, 106, 126, 107, 126,
    110, 126, 111, 126, 114, 126, 115, 126, 116, 126, 117, 126, -1, -2, 8, -1,
    43, -1, 105, -1, 106, -1, 116, -1, 117, -1, 85, 130, 87, 130, 89, 130,
    91, 130, 92, 130, 93, 130, 99, 130, 100, 130, 101, 130, 107, 130, 110, 130,
    111, 130, 114, 130, 115, 130, -1, -2, 8, -1, 43, -1, 105, -1, 106, -1,
    116, -1, 117, -1, 85, 131, 87, 131, 89, 131, 91, 131, 92, 131, 93, 131,
    99, 131, 100, 131, 101, 131, 107, 131, 110, 131, 111, 131, 114, 131, 115, 131,
    -1, -2, 114, -1, 115, -1, 85, 133, 87, 133, 89, 133, 91, 133, 92, 133,
    93, 133, 99, 133, 100, 133, 101, 133, 107, 133, 110, 133, 111, 133, -1, -2,
    99, -1, 85, 135, 87, 135, 89, 135, 91, 135, 92, 135, 93, 135, 100, 135,
    101, 135, 107, 135, 110, 135, 111, 135, -1, -2, 101, -1, 85, 137, 87, 137,
    89, 137, 91, 137, 92, 137, 93, 137, 100, 137, 107, 137, 110, 137, 111, 137,
    -1, -2, 100, -1, 85, 139, 87, 139, 89, 139, 91, 139, 92, 139, 93, 139,
    107, 139, 110, 139, 111, 139, -1, -2, 110, -1, 85, 141, 87, 141, 89, 141,
    91, 141, 92, 141, 93, 141, 107, 141, 111, 141, -1, -2, 90, -1, 84, 264,
    91, 264, -1, -2, 91, -1, 84, 263, -1, -2, 86, -1, 1, 257, 7, 257,
    10, 257, 12, 257, 15, 257, 17, 257, 18, 257, 20, 257, 22, 257, 24, 257,
    26, 257, 27, 257, 28, 257, 29, 257, 33, 257, 38, 257, 40, 257, 41, 257,
    42, 257, 45, 257, 47, 257, 49, 257, 52, 257, 54, 257, 55, 257, 56, 257,
    57, 257, 60, 257, 61, 257, 62, 257, 65, 257, 66, 257, 67, 257, 74, 257,
    75, 257, 77, 257, 78, 257, 80, 257, 81, 257, 82, 257, 103, 257, 85, 267,
    -1, -2, 93, -1, 0, 22, 1, 22, 7, 22, 10, 22, 12, 22, 15, 22,
    17, 22, 18, 22, 20, 22, 22, 22, 24, 22, 26, 22, 27, 22, 28, 22,
    29, 22, 33, 22, 38, 22, 40, 22, 41, 22, 42, 22, 45, 22, 46, 22,
    47, 22, 49, 22, 52, 22, 54, 22, 55, 22, 56, 22, 57, 22, 60, 22,
    61, 22, 62, 22, 65, 22, 66, 22, 67, 22, 74, 22, 75, 22, 77, 22,
    78, 22, 80, 22, 81, 22, 82, 22, 85, 22, 86, 22, 103, 22, -1, -2,
    86, -1, 1, 257, 10, 257, 12, 257, 15, 257, 20, 257, 24, 257, 33, 257,
    40, 257, 45, 257, 49, 257, 51, 257, 53, 257, 58, 257, 60, 257, 62, 257,
    66, 257, 74, 257, 75, 257, 78, 257, 81, 257, 89, 292, -1, -2, 86, -1,
    1, 257, 85, 406, -1, -2, 93, -1, 0, 22, 1, 22, 7, 22, 10, 22,
    12, 22, 15, 22, 17, 22, 18, 22, 20, 22, 22, 22, 24, 22, 26, 22,
    27, 22, 28, 22, 29, 22, 33, 22, 38, 22, 40, 22, 41, 22, 42, 22,
    45, 22, 46, 22, 47, 22, 49, 22, 52, 22, 54, 22, 55, 22, 56, 22,
    57, 22, 60, 22, 61, 22, 62, 22, 65, 22, 66, 22, 67, 22, 74, 22,
    75, 22, 77, 22, 78, 22, 80, 22, 81, 22, 82, 22, 85, 22, 86, 22,
    103, 22, -1, -2, 91, -1, 84, 383, -1, -2, 86, -1, 1, 257, 10, 257,
    12, 257, 15, 257, 20, 257, 24, 257, 27, 257, 33, 257, 40, 257, 45, 257,
    47, 257, 49, 257, 60, 257, 62, 257, 66, 257, 74, 257, 75, 257, 78, 257,
    81, 257, 85, 385, -1, -2, 93, -1, 0, 22, 1, 22, 7, 22, 10, 22,
    12, 22, 15, 22, 17, 22, 18, 22, 20, 22, 22, 22, 24, 22, 26, 22,
    27, 22, 28, 22, 29, 22, 33, 22, 38, 22, 40, 22, 41, 22, 42, 22,
    45, 22, 46, 22, 47, 22, 49, 22, 52, 22, 54, 22, 55, 22, 56, 22,
    57, 22, 60, 22, 61, 22, 62, 22, 65, 22, 66, 22, 67, 22, 74, 22,
    75, 22, 77, 22, 78, 22, 80, 22, 81, 22, 82, 22, 85, 22, 86, 22,
    103, 22, -1, -2, 91, -1, 84, 364, -1, -2, 86, -1, 1, 257, 7, 257,
    10, 257, 12, 257, 15, 257, 17, 257, 18, 257, 20, 257, 22, 257, 24, 257,
    26, 257, 27, 257, 28, 257, 29, 257, 33, 257, 38, 257, 40, 257, 41, 257,
    42, 257, 45, 257, 47, 257, 49, 257, 52, 257, 54, 257, 55, 257, 56, 257,
    57, 257, 60, 257, 61, 257, 62, 257, 65, 257, 66, 257, 67, 257, 74, 257,
    75, 257, 77, 257, 78, 257, 80, 257, 81, 257, 82, 257, 103, 257, 85, 267,
    -1, -2, 93, -1, 0, 22, 1, 22, 7, 22, 10, 22, 12, 22, 15, 22,
    17, 22, 18, 22, 20, 22, 22, 22, 24, 22, 26, 22, 27, 22, 28, 22,
    29, 22, 33, 22, 38, 22, 40, 22, 41, 22, 42, 22, 45, 22, 46, 22,
    47, 22, 49, 22, 52, 22, 54, 22, 55, 22, 56, 22, 57, 22, 60, 22,
    61, 22, 62, 22, 65, 22, 66, 22, 67, 22, 74, 22, 75, 22, 77, 22,
    78, 22, 80, 22, 81, 22, 82, 22, 85, 22, 86, 22, 103, 22, -1, -2,
    91, -1, 85, 374, -1, -2, 7, -1, 18, -1, 29, -1, 42, -1, 47, -1,
    52, -1, 54, -1, 55, -1, 56, -1, 57, -1, 61, -1, 65, -1, 77, -1,
    80, -1, 82, -1, 1, 259, 10, 259, 12, 259, 15, 259, 17, 259, 20, 259,
    22, 259, 24, 259, 26, 259, 27, 259, 28, 259, 33, 259, 38, 259, 40, 259,
    41, 259, 45, 259, 49, 259, 60, 259, 62, 259, 66, 259, 67, 259, 74, 259,
    75, 259, 78, 259, 81, 259, 103, 359, -1, -2, 86, -1, 1, 257, 7, 257,
    10, 257, 12, 257, 15, 257, 17, 257, 18, 257, 20, 257, 22, 257, 24, 257,
    26, 257, 27, 257, 28, 257, 29, 257, 33, 257, 38, 257, 40, 257, 41, 257,
    42, 257, 45, 257, 47, 257, 49, 257, 52, 257, 54, 257, 55, 257, 56, 257,
    57, 257, 60, 257, 61, 257, 62, 257, 65, 257, 66, 257, 67, 257, 74, 257,
    75, 257, 77, 257, 78, 257, 80, 257, 81, 257, 82, 257, 103, 257, 85, 266,
    -1, -2, 51, -1, 53, -1, 58, -1, 1, 302, 10, 302, 12, 302, 15, 302,
    20, 302, 24, 302, 33, 302, 40, 302, 45, 302, 49, 302, 60, 302, 62, 302,
    66, 302, 74, 302, 75, 302, 78, 302, 81, 302, -1, -2, 91, -1, 87, 296,
    89, 296, -1, -2, 91, -1, 85, 405, -1, -2, 47, -1, 1, 390, 10, 390,
    12, 390, 15, 390, 20, 390, 24, 390, 27, 390, 33, 390, 40, 390, 45, 390,
    49, 390, 60, 390, 62, 390, 66, 390, 74, 390, 75, 390, 78, 390, 81, 390,
    -1, -2, 86, -1, 1, 257, 10, 257, 12, 257, 15, 257, 20, 257, 24, 257,
    27, 257, 33, 257, 40, 257, 45, 257, 47, 257, 49, 257, 60, 257, 62, 257,
    66, 257, 74, 257, 75, 257, 78, 257, 81, 257, 85, 384, -1, -2, 86, -1,
    1, 95, 8, 95, 43, 95, 84, 95, 85, 95, 87, 95, 88, 95, 89, 95,
    90, 95, 91, 95, 92, 95, 93, 95, 94, 95, 95, 95, 96, 95, 97, 95,
    98, 95, 99, 95, 100, 95, 101, 95, 104, 95, 105, 95, 106, 95, 107, 95,
    108, 95, 109, 95, 110, 95, 111, 95, 112, 95, 113, 95, 114, 95, 115, 95,
    116, 95, 117, 95, 118, 95, 119, 95, 120, 95, 121, 95, 122, 95, 123, 95,
    124, 95, 125, 95, 126, 95, 127, 95, 128, 95, -1, -2, 90, -1, 84, 265,
    91, 265, -1, -2, 1, 17, 7, 17, 10, 17, 12, 17, 15, 17, 17, 17,
    18, 17, 20, 17, 22, 17, 24, 17, 26, 17, 27, 17, 28, 17, 29, 17,
    33, 17, 38, 17, 40, 17, 41, 17, 42, 17, 45, 17, 47, 17, 49, 17,
    52, 17, 54, 17, 55, 17, 56, 17, 57, 17, 60, 17, 61, 17, 62, 17,
    65, 17, 66, 17, 67, 17, 74, 17, 75, 17, 77, 17, 78, 17, 80, 17,
    81, 17, 82, 17, 103, 357, -1, -2, 7, -1, 18, -1, 29, -1, 42, -1,
    47, -1, 52, -1, 54, -1, 55, -1, 56, -1, 57, -1, 61, -1, 65, -1,
    77, -1, 80, -1, 82, -1, 1, 258, 10, 258, 12, 258, 15, 258, 17, 258,
    20, 258, 22, 258, 24, 258, 26, 258, 27, 258, 28, 258, 33, 258, 38, 258,
    40, 258, 41, 258, 45, 258, 49, 258, 60, 258, 62, 258, 66, 258, 67, 258,
    74, 258, 75, 258, 78, 258, 81, 258, -1, -2, 86, -1, 1, 257, 10, 257,
    12, 257, 15, 257, 20, 257, 24, 257, 33, 257, 40, 257, 45, 257, 49, 257,
    51, 257, 53, 257, 58, 257, 60, 257, 62, 257, 66, 257, 74, 257, 75, 257,
    78, 257, 81, 257, -1, -2, 104, -1, 85, 411, 91, 411, -1, -2, 85, -1,
    86, -1, 1, 257, -1, -2, 86, -1, 1, 94, 8, 94, 43, 94, 84, 94,
    85, 94, 87, 94, 88, 94, 89, 94, 90, 94, 91, 94, 92, 94, 93, 94,
    94, 94, 95, 94, 96, 94, 97, 94, 98, 94, 99, 94, 100, 94, 101, 94,
    104, 94, 105, 94, 106, 94, 107, 94, 108, 94, 109, 94, 110, 94, 111, 94,
    112, 94, 113, 94, 114, 94, 115, 94, 116, 94, 117, 94, 118, 94, 119, 94,
    120, 94, 121, 94, 122, 94, 123, 94, 124, 94, 125, 94, 126, 94, 127, 94,
    128, 94, -1, -2, 84, -1, 1, 97, 8, 97, 43, 97, 85, 97, 87, 97,
    88, 97, 89, 97, 90, 97, 91, 97, 92, 97, 93, 97, 94, 97, 95, 97,
    96, 97, 97, 97, 98, 97, 99, 97, 100, 97, 101, 97, 104, 97, 105, 97,
    106, 97, 107, 97, 108, 97, 109, 97, 110, 97, 111, 97, 112, 97, 113, 97,
    114, 97, 115, 97, 116, 97, 117, 97, 118, 97, 119, 97, 120, 97, 121, 97,
    122, 97, 123, 97, 124, 97, 125, 97, 126, 97, 127, 97, 128, 97, -1, -2,
    1, -1, 96, 37, -1, -2, 86, -1, 1, 257, 10, 257, 12, 257, 15, 257,
    20, 257, 24, 257, 33, 257, 40, 257, 45, 257, 49, 257, 51, 257, 53, 257,
    58, 257, 60, 257, 62, 257, 66, 257, 74, 257, 75, 257, 78, 257, 81, 257,
    89, 292, -1, -2, 90, 31, 91, 33, 93, 33, 104, 33, 84, 294, 88, 294,
    -1, -2, 104, -1, 89, 287, 91, 287, 93, 287, -1, -2, 1, -1, 3, -1,
    4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 11, -1, 12, -1, 15, -1,
    16, -1, 18, -1, 19, -1, 20, -1, 23, -1, 24, -1, 30, -1, 33, -1,
    34, -1, 35, -1, 36, -1, 37, -1, 40, -1, 44, -1, 45, -1, 47, -1,
    48, -1, 49, -1, 59, -1, 60, -1, 62, -1, 63, -1, 66, -1, 68, -1,
    69, -1, 70, -1, 71, -1, 72, -1, 73, -1, 74, -1, 75, -1, 76, -1,
    77, -1, 78, -1, 79, -1, 81, -1, 83, -1, 84, -1, 88, -1, 93, -1,
    94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 85, 195, -1, -2,
    86, -1, 1, 257, -1, -2, 86, -1, 1, 257, 10, 257, 12, 257, 15, 257,
    20, 257, 24, 257, 33, 257, 40, 257, 45, 257, 49, 257, 51, 257, 53, 257,
    58, 257, 60, 257, 62, 257, 66, 257, 74, 257, 75, 257, 78, 257, 81, 257,
    89, 292, -1, -2, 86, -1, 1, 257, 10, 257, 12, 257, 15, 257, 20, 257,
    24, 257, 33, 257, 40, 257, 45, 257, 49, 257, 51, 257, 53, 257, 58, 257,
    60, 257, 62, 257, 66, 257, 74, 257, 75, 257, 78, 257, 81, 257, -1, -2,
    1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1,
    15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1,
    47, -1, 48, -1, 49, -1, 60, -1, 62, -1, 63, -1, 66, -1, 69, -1,
    71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1, 81, -1, 88, -1,
    94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 93, 176, -1, -2,
    1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1,
    15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1,
    47, -1, 48, -1, 49, -1, 60, -1, 62, -1, 63, -1, 66, -1, 69, -1,
    71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1, 81, -1, 88, -1,
    94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 93, 176, -1, -2,
    92, -1, 1, 74, 86, 74, 88, 74, 90, 74, 104, 74, 108, 74, 109, 74,
    118, 74, 119, 74, 120, 74, 121, 74, 122, 74, 123, 74, 124, 74, 125, 74,
    126, 74, 127, 74, 128, 74, -1, -2, 86, -1, 90, -1, 1, 43, -1, -2,
    88, -1, 90, -1, 108, -1, 109, -1, 128, -1, 1, 42, 104, 101, 118, 101,
    119, 101, 120, 101, 121, 101, 122, 101, 123, 101, 124, 101, 125, 101, 126, 101,
    127, 101, -1, -2, 1, 93, 86, 93, 88, 93, 90, 93, 104, 93, 108, 93,
    109, 93, 118, 93, 119, 93, 120, 93, 121, 93, 122, 93, 123, 93, 124, 93,
    125, 93, 126, 93, 127, 93, 128, 93, 89, 205, 91, 205, 93, 205, -1, -2,
    1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 11, -1,
    12, -1, 15, -1, 16, -1, 18, -1, 19, -1, 20, -1, 23, -1, 24, -1,
    30, -1, 33, -1, 34, -1, 35, -1, 36, -1, 37, -1, 40, -1, 44, -1,
    45, -1, 47, -1, 48, -1, 49, -1, 59, -1, 60, -1, 62, -1, 63, -1,
    66, -1, 68, -1, 69, -1, 70, -1, 71, -1, 72, -1, 73, -1, 74, -1,
    75, -1, 76, -1, 77, -1, 78, -1, 79, -1, 81, -1, 83, -1, 84, -1,
    88, -1, 93, -1, 94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1,
    85, 194, -1, -2, 86, -1, 1, 257, -1, -2, 86, -1, 1, 257, 10, 257,
    12, 257, 15, 257, 20, 257, 24, 257, 33, 257, 40, 257, 45, 257, 49, 257,
    51, 257, 53, 257, 58, 257, 60, 257, 62, 257, 66, 257, 74, 257, 75, 257,
    78, 257, 81, 257, 89, 292, -1, -2, 86, -1, 1, 257, 10, 257, 12, 257,
    15, 257, 20, 257, 24, 257, 33, 257, 40, 257, 45, 257, 49, 257, 51, 257,
    53, 257, 58, 257, 60, 257, 62, 257, 66, 257, 74, 257, 75, 257, 78, 257,
    81, 257, -1, -2, 86, -1, 1, 257, -1, -2, 92, -1, 84, 353, 93, 353,
    -1, -2, 90, 32, 84, 295, 88, 295, -1, -2, 86, -1, 1, 257, 85, 310,
    -1, -2, 88, -1, 90, -1, 108, -1, 109, -1, 128, -1, 104, 101, 118, 101,
    119, 101, 120, 101, 121, 101, 122, 101, 123, 101, 124, 101, 125, 101, 126, 101,
    127, 101, -1, -2, 1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1,
    10, -1, 12, -1, 15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1,
    40, -1, 45, -1, 47, -1, 48, -1, 49, -1, 60, -1, 62, -1, 63, -1,
    66, -1, 69, -1, 71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1,
    81, -1, 88, -1, 94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1,
    93, 174, -1, -2, 104, 106, 118, 106, 119, 106, 120, 106, 121, 106, 122, 106,
    123, 106, 124, 106, 125, 106, 126, 106, 127, 106, 89, 209, 91, 209, 93, 209,
    -1, -2, 104, 107, 118, 107, 119, 107, 120, 107, 121, 107, 122, 107, 123, 107,
    124, 107, 125, 107, 126, 107, 127, 107, 89, 210, 91, 210, 93, 210, -1, -2,
    86, -1, 1, 44, -1, -2, 91, -1, 89, 199, 93, 199, -1, -2, 1, -1,
    3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1, 15, -1,
    16, -1, 20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1, 47, -1,
    48, -1, 49, -1, 51, -1, 58, -1, 60, -1, 62, -1, 63, -1, 66, -1,
    69, -1, 71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1, 81, -1,
    88, -1, 94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 89, 89,
    -1, -2, 1, 83, 86, 83, 88, 83, 90, 83, 104, 83, 108, 83, 109, 83,
    118, 83, 119, 83, 120, 83, 121, 83, 122, 83, 123, 83, 124, 83, 125, 83,
    126, 83, 127, 83, 128, 83, 89, 207, 91, 207, 93, 207, -1, -2, 1, 84,
    86, 84, 88, 84, 90, 84, 104, 84, 108, 84, 109, 84, 118, 84, 119, 84,
    120, 84, 121, 84, 122, 84, 123, 84, 124, 84, 125, 84, 126, 84, 127, 84,
    128, 84, 89, 208, 91, 208, 93, 208, -1, -2, 86, -1, 1, 257, 85, 398,
    -1, -2, 91, -1, 93, 200, -1, -2, 91, -1, 93, 223, -1, -2, 31, -1,
    1, 227, 3, 227, 4, 227, 5, 227, 6, 227, 9, 227, 10, 227, 11, 227,
    12, 227, 13, 227, 15, 227, 16, 227, 18, 227, 19, 227, 20, 227, 21, 227,
    23, 227, 24, 227, 25, 227, 30, 227, 33, 227, 34, 227, 35, 227, 36, 227,
    37, 227, 40, 227, 44, 227, 45, 227, 47, 227, 48, 227, 49, 227, 59, 227,
    60, 227, 62, 227, 63, 227, 66, 227, 68, 227, 69, 227, 70, 227, 71, 227,
    72, 227, 73, 227, 74, 227, 75, 227, 76, 227, 77, 227, 78, 227, 79, 227,
    81, 227, 83, 227, 84, 227, 85, 227, 88, 227, 93, 227, 94, 227, 95, 227,
    102, 227, 103, 227, 108, 227, 109, 227, -1, -2, 14, -1, 1, 230, 3, 230,
    4, 230, 5, 230, 6, 230, 9, 230, 10, 230, 11, 230, 12, 230, 13, 230,
    15, 230, 16, 230, 18, 230, 19, 230, 20, 230, 21, 230, 23, 230, 24, 230,
    25, 230, 30, 230, 31, 230, 33, 230, 34, 230, 35, 230, 36, 230, 37, 230,
    40, 230, 44, 230, 45, 230, 47, 230, 48, 230, 49, 230, 59, 230, 60, 230,
    62, 230, 63, 230, 66, 230, 68, 230, 69, 230, 70, 230, 71, 230, 72, 230,
    73, 230, 74, 230, 75, 230, 76, 230, 77, 230, 78, 230, 79, 230, 81, 230,
    83, 230, 84, 230, 85, 230, 88, 230, 93, 230, 94, 230, 95, 230, 102, 230,
    103, 230, 108, 230, 109, 230, -1, -2, 88, -1, 90, -1, 108, -1, 109, -1,
    128, -1, 1, 42, 8, 101, 43, 101, 89, 101, 94, 101, 95, 101, 96, 101,
    97, 101, 98, 101, 99, 101, 100, 101, 101, 101, 104, 101, 105, 101, 106, 101,
    107, 101, 110, 101, 111, 101, 112, 101, 113, 101, 114, 101, 115, 101, 116, 101,
    117, 101, 118, 101, 119, 101, 120, 101, 121, 101, 122, 101, 123, 101, 124, 101,
    125, 101, 126, 101, 127, 101, -1, -2, 86, -1, 1, 257, -1, -2, 1, -1,
    3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1, 15, -1,
    16, -1, 20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1, 47, -1,
    48, -1, 49, -1, 60, -1, 62, -1, 63, -1, 66, -1, 69, -1, 71, -1,
    73, -1, 74, -1, 75, -1, 76, -1, 78, -1, 81, -1, 88, -1, 94, -1,
    95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 93, 176, -1, -2, 1, 90,
    86, 90, 88, 90, 90, 90, 104, 90, 108, 90, 109, 90, 118, 90, 119, 90,
    120, 90, 121, 90, 122, 90, 123, 90, 124, 90, 125, 90, 126, 90, 127, 90,
    128, 90, 89, 204, 91, 204, 93, 204, -1, -2, 86, -1, 1, 257, -1, -2,
    1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1,
    15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1,
    47, -1, 48, -1, 49, -1, 51, -1, 58, -1, 60, -1, 62, -1, 63, -1,
    66, -1, 69, -1, 71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1,
    81, -1, 88, -1, 94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1,
    89, 89, -1, -2, 1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1,
    10, -1, 12, -1, 15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1,
    40, -1, 45, -1, 47, -1, 48, -1, 49, -1, 51, -1, 58, -1, 60, -1,
    62, -1, 63, -1, 66, -1, 69, -1, 71, -1, 73, -1, 74, -1, 75, -1,
    76, -1, 78, -1, 81, -1, 88, -1, 94, -1, 95, -1, 102, -1, 103, -1,
    108, -1, 109, -1, 89, 89, -1, -2, 25, -1, 1, 168, 3, 168, 4, 168,
    5, 168, 6, 168, 9, 168, 10, 168, 11, 168, 12, 168, 13, 168, 15, 168,
    16, 168, 18, 168, 19, 168, 20, 168, 21, 168, 23, 168, 24, 168, 30, 168,
    33, 168, 34, 168, 35, 168, 36, 168, 37, 168, 40, 168, 44, 168, 45, 168,
    47, 168, 48, 168, 49, 168, 59, 168, 60, 168, 62, 168, 63, 168, 66, 168,
    68, 168, 69, 168, 70, 168, 71, 168, 72, 168, 73, 168, 74, 168, 75, 168,
    76, 168, 77, 168, 78, 168, 79, 168, 81, 168, 83, 168, 84, 168, 85, 168,
    88, 168, 93, 168, 94, 168, 95, 168, 102, 168, 103, 168, 108, 168, 109, 168,
    -1, -2, 13, -1, 21, -1, 85, 212, -1, -2, 1, -1, 89, 236, -1, -2,
    1, -1, 3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 12, -1,
    15, -1, 16, -1, 20, -1, 24, -1, 30, -1, 33, -1, 40, -1, 45, -1,
    47, -1, 48, -1, 49, -1, 60, -1, 62, -1, 63, -1, 66, -1, 69, -1,
    71, -1, 73, -1, 74, -1, 75, -1, 76, -1, 78, -1, 81, -1, 88, -1,
    94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 89, 178, -1, -2,
    13, -1, 21, -1, 85, 211, -1, -2, 91, -1, 89, 177, -1, -2, 1, -1,
    3, -1, 4, -1, 5, -1, 6, -1, 9, -1, 10, -1, 11, -1, 12, -1,
    15, -1, 16, -1, 18, -1, 19, -1, 20, -1, 23, -1, 24, -1, 30, -1,
    33, -1, 34, -1, 35, -1, 36, -1, 37, -1, 40, -1, 44, -1, 45, -1,
    47, -1, 48, -1, 49, -1, 59, -1, 60, -1, 62, -1, 63, -1, 66, -1,
    68, -1, 69, -1, 70, -1, 71, -1, 72, -1, 73, -1, 74, -1, 75, -1,
    76, -1, 77, -1, 78, -1, 79, -1, 81, -1, 83, -1, 84, -1, 88, -1,
    93, -1, 94, -1, 95, -1, 102, -1, 103, -1, 108, -1, 109, -1, 13, 217,
    21, 217, 85, 217, -1, -2,
  };


  private static final short[] lapg_sym_goto = new short[] {
    0, 1, 144, 144, 225, 306, 387, 468, 472, 475, 557, 657, 670, 771, 775, 777,
    878, 959, 961, 968, 981, 1081, 1085, 1087, 1100, 1200, 1201, 1203, 1206, 1207, 1211, 1293,
    1295, 1295, 1395, 1408, 1421, 1434, 1447, 1448, 1449, 1550, 1552, 1556, 1559, 1572, 1673, 1676,
    1762, 1843, 1943, 1945, 1952, 1956, 1957, 1961, 1965, 1969, 1973, 1980, 1994, 2095, 2099, 2200,
    2281, 2281, 2285, 2385, 2387, 2400, 2485, 2498, 2580, 2593, 2674, 2775, 2876, 2957, 2974, 3075,
    3091, 3095, 3195, 3199, 3213, 3254, 3269, 3307, 3317, 3428, 3457, 3474, 3499, 3509, 3554, 3639,
    3724, 3746, 3750, 3754, 3757, 3760, 3763, 3845, 3928, 3934, 3938, 3942, 3943, 4029, 4115, 4117,
    4118, 4124, 4130, 4133, 4136, 4140, 4144, 4146, 4148, 4150, 4152, 4154, 4156, 4158, 4160, 4162,
    4164, 4168, 4169, 4169, 4169, 4169, 4169, 4169, 4170, 4172, 4174, 4176, 4178, 4202, 4206, 4208,
    4213, 4294, 4327, 4438, 4458, 4477, 4577, 4596, 4615, 4634, 4641, 4722, 4726, 4727, 4736, 4837,
    4842, 4848, 4885, 4966, 5047, 5128, 5131, 5136, 5217, 5218, 5219, 5224, 5305, 5386, 5438, 5488,
    5536, 5580, 5622, 5663, 5703, 5742, 5780, 5817, 5854, 5907, 5909, 5913, 5918, 5925, 5930, 5943,
    5968, 5984, 5985, 5986, 5987, 5990, 5991, 5993, 6006, 6007, 6008, 6010, 6013, 6015, 6018, 6019,
    6020, 6022, 6024, 6025, 6028, 6029, 6030, 6032, 6033, 6035, 6037, 6038, 6041, 6044, 6047, 6053,
    6059, 6065, 6071, 6077, 6083, 6107, 6109, 6110, 6111, 6112, 6115, 6117, 6119, 6122, 6125, 6128,
    6131, 6134, 6137, 6140, 6143, 6146, 6149, 6150, 6154, 6157, 6159, 6163, 6169, 6174, 6180, 6187,
    6194, 6195, 6196, 6197, 6200, 6204, 6205, 6206, 6207, 6208, 6209, 6212, 6213, 6214, 6215, 6216,
    6217, 6218, 6219, 6220, 6221, 6222, 6225, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6237,
    6238, 6239, 6241, 6242, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6253, 6279, 6280, 6282, 6286,
    6290, 6291, 6292, 6293, 6294,
  };

  private static final short[] lapg_sym_from = new short[] {
    729, 1, 8, 9, 24, 26, 60, 62, 63, 67, 68, 69, 70, 71, 93, 108,
    109, 110, 111, 112, 113, 114, 144, 154, 155, 156, 157, 161, 162, 163, 173, 174,
    175, 178, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
    205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 217, 228, 231, 240, 241,
    243, 247, 252, 253, 307, 322, 327, 328, 350, 365, 373, 374, 382, 384, 391, 401,
    405, 410, 411, 412, 414, 418, 421, 422, 425, 437, 441, 450, 481, 482, 483, 488,
    491, 493, 496, 499, 501, 508, 509, 512, 525, 527, 528, 535, 543, 548, 552, 556,
    557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 590, 607, 615, 655, 656, 657,
    660, 661, 663, 669, 670, 676, 677, 683, 688, 696, 698, 699, 704, 714, 720, 724,
    63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194,
    195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
    213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 437, 482,
    493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574, 577,
    655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720,
    724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193,
    194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211,
    212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 437,
    482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574,
    577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714,
    720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181,
    193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210,
    211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418,
    437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571,
    574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704,
    714, 720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179,
    181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209,
    210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365,
    418, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570,
    571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699,
    704, 714, 720, 724, 21, 55, 330, 372, 130, 280, 281, 63, 108, 109, 110, 111,
    112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199,
    200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241,
    243, 247, 252, 253, 307, 322, 327, 365, 418, 437, 482, 493, 499, 501, 508, 509,
    525, 527, 556, 558, 561, 562, 565, 570, 571, 574, 577, 596, 655, 656, 657, 660,
    661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 63, 68, 93,
    108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181, 193,
    194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
    210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365,
    373, 374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501,
    508, 509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607,
    655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720,
    724, 437, 493, 525, 574, 660, 661, 669, 670, 698, 704, 714, 720, 724, 63, 68,
    93, 108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181,
    193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
    209, 210, 211, 212, 213, 214, 216, 225, 240, 241, 243, 247, 252, 253, 307, 322,
    327, 365, 373, 374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493,
    499, 501, 508, 509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577,
    585, 607, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704,
    714, 720, 724, 496, 686, 702, 704, 567, 629, 63, 68, 93, 108, 109, 110, 111,
    112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181, 193, 194, 195, 196, 197,
    198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
    214, 216, 225, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 373, 374, 382,
    384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501, 508, 509, 525,
    527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607, 655, 656, 657,
    660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 63, 108,
    109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194, 195, 196,
    197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
    216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 437, 482, 493, 499,
    501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574, 577, 655, 656,
    657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 56,
    373, 330, 372, 437, 525, 574, 704, 720, 437, 493, 525, 574, 660, 661, 669, 670,
    698, 704, 714, 720, 724, 63, 68, 93, 108, 109, 110, 111, 112, 113, 114, 155,
    157, 161, 162, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 201,
    202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241,
    243, 247, 252, 253, 307, 322, 327, 365, 373, 374, 382, 384, 391, 401, 418, 421,
    437, 441, 482, 488, 491, 493, 499, 501, 508, 509, 525, 527, 556, 557, 558, 561,
    562, 565, 570, 571, 574, 577, 585, 607, 655, 656, 657, 660, 661, 669, 670, 676,
    677, 683, 696, 698, 699, 704, 714, 720, 724, 496, 686, 702, 704, 56, 373, 437,
    493, 525, 574, 660, 661, 669, 670, 698, 704, 714, 720, 724, 63, 68, 93, 108,
    109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181, 193, 194,
    195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
    211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 373,
    374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501, 508,
    509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607, 655,
    656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724,
    684, 56, 373, 9, 373, 391, 373, 21, 55, 330, 372, 63, 108, 109, 110, 111,
    112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199,
    200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241,
    243, 247, 252, 253, 307, 322, 327, 365, 418, 428, 437, 482, 493, 499, 501, 508,
    509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660,
    661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 567, 627, 63,
    68, 93, 108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179,
    181, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
    208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322,
    327, 365, 373, 374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493,
    499, 501, 508, 509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577,
    585, 607, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704,
    714, 720, 724, 437, 493, 525, 574, 660, 661, 669, 670, 698, 704, 714, 720, 724,
    437, 493, 525, 574, 660, 661, 669, 670, 698, 704, 714, 720, 724, 437, 493, 525,
    574, 660, 661, 669, 670, 698, 704, 714, 720, 724, 437, 493, 525, 574, 660, 661,
    669, 670, 698, 704, 714, 720, 724, 373, 658, 63, 68, 93, 108, 109, 110, 111,
    112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181, 193, 194, 195, 196, 197,
    198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
    214, 216, 225, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 373, 374, 382,
    384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501, 508, 509, 525,
    527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607, 655, 656, 657,
    660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 56, 373,
    21, 55, 330, 372, 130, 280, 281, 437, 493, 525, 574, 660, 661, 669, 670, 698,
    704, 714, 720, 724, 63, 68, 93, 108, 109, 110, 111, 112, 113, 114, 155, 157,
    161, 162, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
    203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 225, 240, 241,
    243, 247, 252, 253, 307, 322, 327, 365, 373, 374, 382, 384, 391, 401, 418, 421,
    437, 441, 482, 488, 491, 493, 499, 501, 508, 509, 525, 527, 556, 557, 558, 561,
    562, 565, 570, 571, 574, 577, 585, 607, 655, 656, 657, 660, 661, 669, 670, 676,
    677, 683, 696, 698, 699, 704, 714, 720, 724, 2, 11, 73, 21, 55, 63, 108,
    109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194, 195, 196,
    197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
    216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 330, 355, 365, 372, 418, 437,
    482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574,
    577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714,
    720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181,
    193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210,
    211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418,
    437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571,
    574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704,
    714, 720, 724, 63, 68, 93, 108, 109, 110, 111, 112, 113, 114, 155, 157, 161,
    162, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
    204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247,
    252, 253, 307, 322, 327, 365, 373, 374, 382, 384, 391, 401, 418, 421, 437, 441,
    482, 488, 491, 493, 499, 501, 508, 509, 525, 527, 556, 557, 558, 561, 562, 565,
    570, 571, 574, 577, 585, 607, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683,
    696, 698, 699, 704, 714, 720, 724, 405, 409, 174, 240, 322, 344, 577, 676, 677,
    21, 55, 330, 372, 344, 21, 55, 330, 372, 21, 55, 330, 372, 21, 55, 330,
    372, 21, 55, 330, 372, 174, 240, 322, 344, 577, 676, 677, 9, 437, 493, 525,
    574, 660, 661, 669, 670, 698, 704, 714, 720, 724, 63, 68, 93, 108, 109, 110,
    111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181, 193, 194, 195, 196,
    197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
    213, 214, 216, 225, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 373, 374,
    382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501, 508, 509,
    525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607, 655, 656,
    657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 21,
    55, 330, 372, 63, 68, 93, 108, 109, 110, 111, 112, 113, 114, 155, 157, 161,
    162, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
    204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 225, 240, 241, 243,
    247, 252, 253, 307, 322, 327, 365, 373, 374, 382, 384, 391, 401, 418, 421, 437,
    441, 482, 488, 491, 493, 499, 501, 508, 509, 525, 527, 556, 557, 558, 561, 562,
    565, 570, 571, 574, 577, 585, 607, 655, 656, 657, 660, 661, 669, 670, 676, 677,
    683, 696, 698, 699, 704, 714, 720, 724, 63, 108, 109, 110, 111, 112, 113, 114,
    155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204,
    205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252,
    253, 307, 322, 327, 365, 418, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556,
    558, 561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676,
    677, 683, 696, 698, 699, 704, 714, 720, 724, 21, 55, 330, 372, 63, 68, 93,
    108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181, 193,
    194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
    210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365,
    373, 374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501,
    508, 509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607,
    655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720,
    724, 56, 373, 437, 493, 525, 574, 660, 661, 669, 670, 698, 704, 714, 720, 724,
    63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194,
    195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
    213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 405, 418, 422,
    437, 481, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570,
    571, 574, 577, 596, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698,
    699, 704, 714, 720, 724, 437, 493, 525, 574, 660, 661, 669, 670, 698, 704, 714,
    720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181,
    193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210,
    211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418,
    428, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570,
    571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699,
    704, 714, 720, 724, 437, 493, 525, 574, 660, 661, 669, 670, 698, 704, 714, 720,
    724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193,
    194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211,
    212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 437,
    482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574,
    577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714,
    720, 724, 63, 68, 93, 108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162,
    163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
    205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 225, 240, 241, 243, 247,
    252, 253, 307, 322, 327, 365, 373, 374, 382, 384, 391, 401, 418, 421, 437, 441,
    482, 488, 491, 493, 499, 501, 508, 509, 525, 527, 556, 557, 558, 561, 562, 565,
    570, 571, 574, 577, 585, 607, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683,
    696, 698, 699, 704, 714, 720, 724, 63, 68, 93, 108, 109, 110, 111, 112, 113,
    114, 155, 157, 161, 162, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199,
    200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216,
    225, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 373, 374, 382, 384, 391,
    401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501, 508, 509, 525, 527, 556,
    557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607, 655, 656, 657, 660, 661,
    669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 63, 108, 109, 110,
    111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198,
    199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240,
    241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 437, 482, 493, 499, 501, 508,
    509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660,
    661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 21, 55, 330,
    372, 437, 493, 525, 574, 660, 661, 669, 670, 698, 704, 714, 720, 724, 63, 68,
    93, 108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181,
    193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
    209, 210, 211, 212, 213, 214, 216, 225, 240, 241, 243, 247, 252, 253, 307, 322,
    327, 365, 373, 374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493,
    499, 501, 508, 509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577,
    585, 607, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704,
    714, 720, 724, 0, 3, 59, 437, 493, 525, 574, 660, 661, 669, 670, 698, 704,
    714, 720, 724, 21, 55, 330, 372, 63, 68, 93, 108, 109, 110, 111, 112, 113,
    114, 155, 157, 161, 162, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199,
    200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216,
    240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 373, 374, 382, 384, 391, 401,
    418, 421, 437, 441, 482, 488, 491, 493, 499, 501, 508, 509, 525, 527, 556, 557,
    558, 561, 562, 565, 570, 571, 574, 577, 585, 607, 655, 656, 657, 660, 661, 669,
    670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 21, 55, 330, 372, 437,
    493, 525, 555, 574, 660, 661, 669, 670, 698, 704, 714, 720, 724, 28, 159, 218,
    226, 229, 232, 241, 365, 399, 406, 434, 437, 452, 456, 482, 490, 493, 502, 503,
    504, 525, 574, 588, 597, 599, 603, 604, 624, 625, 646, 660, 661, 662, 669, 670,
    698, 704, 714, 720, 723, 724, 152, 313, 331, 351, 356, 360, 365, 389, 524, 544,
    591, 595, 678, 691, 701, 2, 11, 12, 37, 73, 82, 121, 148, 160, 165, 223,
    291, 293, 296, 299, 302, 332, 357, 366, 386, 389, 398, 426, 435, 453, 485, 486,
    487, 511, 532, 533, 534, 537, 545, 575, 592, 653, 675, 34, 62, 74, 154, 237,
    261, 262, 315, 547, 594, 36, 63, 86, 98, 102, 105, 108, 109, 110, 111, 112,
    113, 114, 118, 155, 157, 158, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198,
    199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 221,
    240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 404, 418, 434, 436, 437, 445,
    452, 482, 490, 493, 494, 495, 497, 498, 499, 500, 501, 503, 505, 506, 508, 509,
    513, 525, 526, 527, 554, 556, 558, 561, 562, 565, 570, 571, 574, 577, 609, 624,
    632, 648, 649, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699,
    704, 714, 720, 724, 139, 165, 166, 239, 244, 245, 246, 257, 309, 345, 457, 530,
    546, 549, 593, 619, 620, 622, 635, 636, 638, 639, 654, 680, 692, 693, 697, 707,
    712, 6, 28, 32, 58, 82, 117, 118, 142, 164, 289, 369, 430, 454, 511, 513,
    554, 632, 34, 74, 140, 179, 222, 237, 243, 254, 261, 263, 290, 298, 301, 314,
    315, 347, 352, 432, 443, 455, 549, 576, 608, 614, 713, 33, 141, 149, 150, 151,
    286, 510, 538, 700, 716, 6, 58, 234, 292, 297, 300, 303, 385, 406, 432, 437,
    443, 455, 489, 492, 493, 518, 519, 522, 525, 531, 559, 560, 564, 566, 574, 588,
    597, 599, 603, 612, 616, 641, 645, 660, 661, 669, 670, 681, 695, 698, 704, 714,
    720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 128, 155, 157, 163, 174, 179,
    181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209,
    210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 272, 273, 307, 322,
    327, 365, 418, 428, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561,
    562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683,
    696, 698, 699, 704, 714, 720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 128,
    155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204,
    205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252,
    253, 272, 273, 307, 322, 327, 365, 418, 428, 437, 482, 493, 499, 501, 508, 509,
    525, 527, 556, 558, 561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661,
    669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 127, 144, 158, 165,
    244, 245, 270, 271, 274, 275, 405, 410, 412, 413, 422, 425, 428, 450, 526, 548,
    552, 615, 127, 270, 271, 428, 127, 270, 271, 428, 132, 283, 428, 134, 285, 428,
    133, 284, 428, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179,
    181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209,
    210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365,
    418, 428, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565,
    570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698,
    699, 704, 714, 720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163,
    174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207,
    208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322,
    327, 365, 376, 418, 428, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558,
    561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677,
    683, 696, 698, 699, 704, 714, 720, 724, 7, 125, 387, 431, 442, 515, 130, 280,
    281, 428, 130, 280, 281, 428, 136, 63, 108, 109, 110, 111, 112, 113, 114, 118,
    155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204,
    205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252,
    253, 307, 322, 327, 365, 418, 428, 437, 482, 493, 499, 501, 508, 509, 513, 525,
    527, 554, 556, 558, 561, 562, 565, 570, 571, 574, 577, 632, 655, 656, 657, 660,
    661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 63, 108, 109,
    110, 111, 112, 113, 114, 118, 155, 157, 163, 174, 179, 181, 193, 194, 195, 196,
    197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
    216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 428, 437, 482, 493,
    499, 501, 508, 509, 513, 525, 527, 554, 556, 558, 561, 562, 565, 570, 571, 574,
    577, 632, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704,
    714, 720, 724, 135, 287, 136, 129, 276, 277, 278, 279, 428, 129, 276, 277, 278,
    279, 428, 131, 282, 428, 131, 282, 428, 130, 280, 281, 428, 130, 280, 281, 428,
    125, 515, 125, 515, 125, 515, 125, 515, 125, 515, 125, 515, 125, 515, 125, 515,
    125, 515, 125, 515, 118, 513, 554, 632, 123, 0, 0, 59, 0, 59, 2, 73,
    2, 73, 2, 11, 73, 291, 293, 296, 299, 302, 332, 357, 386, 389, 426, 485,
    486, 487, 532, 533, 534, 537, 545, 592, 653, 675, 21, 55, 330, 372, 21, 330,
    234, 292, 297, 300, 303, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163,
    174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207,
    208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322,
    327, 365, 418, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562,
    565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696,
    698, 699, 704, 714, 720, 724, 1, 8, 9, 26, 60, 62, 68, 93, 154, 161,
    162, 201, 202, 217, 228, 231, 328, 373, 374, 382, 384, 391, 401, 405, 421, 425,
    441, 488, 491, 557, 585, 607, 663, 1, 63, 67, 69, 70, 71, 108, 109, 110,
    111, 112, 113, 114, 144, 155, 156, 157, 163, 173, 174, 175, 178, 179, 181, 193,
    194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211,
    212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 350, 365, 373,
    405, 410, 411, 412, 414, 418, 422, 425, 437, 450, 482, 483, 493, 496, 499, 501,
    508, 509, 512, 525, 527, 528, 543, 548, 552, 556, 558, 561, 562, 565, 570, 571,
    574, 577, 590, 615, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 688, 696,
    698, 699, 704, 714, 720, 724, 68, 93, 161, 162, 201, 202, 373, 374, 382, 384,
    391, 401, 421, 441, 488, 491, 557, 585, 607, 663, 68, 93, 161, 162, 201, 202,
    373, 374, 382, 384, 391, 401, 421, 441, 488, 491, 557, 585, 607, 63, 68, 93,
    108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174, 179, 181, 193,
    194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
    210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365,
    373, 374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488, 491, 493, 499, 501,
    508, 509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571, 574, 577, 585, 607,
    655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720,
    724, 68, 93, 161, 162, 201, 202, 373, 374, 382, 384, 391, 401, 421, 441, 488,
    491, 557, 585, 607, 68, 93, 161, 162, 201, 202, 373, 374, 382, 384, 391, 401,
    421, 441, 488, 491, 557, 585, 607, 68, 93, 161, 162, 201, 202, 373, 374, 382,
    384, 391, 401, 421, 441, 488, 491, 557, 585, 607, 437, 525, 556, 570, 574, 704,
    720, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193,
    194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211,
    212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 437,
    482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574,
    577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714,
    720, 724, 148, 160, 366, 511, 108, 121, 148, 160, 165, 223, 366, 398, 511, 575,
    63, 68, 93, 108, 109, 110, 111, 112, 113, 114, 155, 157, 161, 162, 163, 174,
    179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
    207, 208, 209, 210, 211, 212, 213, 214, 216, 225, 240, 241, 243, 247, 252, 253,
    307, 322, 327, 365, 373, 374, 382, 384, 391, 401, 418, 421, 437, 441, 482, 488,
    491, 493, 499, 501, 508, 509, 525, 527, 556, 557, 558, 561, 562, 565, 570, 571,
    574, 577, 585, 607, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698,
    699, 704, 714, 720, 724, 174, 240, 577, 676, 677, 174, 240, 322, 577, 676, 677,
    63, 108, 155, 157, 163, 174, 179, 193, 213, 216, 240, 241, 243, 252, 253, 307,
    322, 327, 365, 418, 482, 499, 501, 527, 558, 561, 562, 565, 570, 571, 577, 655,
    656, 676, 677, 683, 699, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163,
    174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207,
    208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322,
    327, 365, 418, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562,
    565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696,
    698, 699, 704, 714, 720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 155, 157,
    163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205, 206,
    207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253, 307,
    322, 327, 365, 418, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558, 561,
    562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683,
    696, 698, 699, 704, 714, 720, 724, 63, 108, 109, 110, 111, 112, 113, 114, 155,
    157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204, 205,
    206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252, 253,
    307, 322, 327, 365, 418, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556, 558,
    561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677,
    683, 696, 698, 699, 704, 714, 720, 724, 155, 179, 243, 174, 240, 577, 676, 677,
    63, 108, 109, 110, 111, 112, 113, 114, 155, 157, 163, 174, 179, 181, 193, 194,
    195, 196, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
    213, 214, 216, 240, 241, 243, 247, 252, 253, 307, 322, 327, 365, 418, 437, 482,
    493, 499, 501, 508, 509, 525, 527, 556, 558, 561, 562, 565, 570, 571, 574, 577,
    655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704, 714, 720,
    724, 366, 399, 159, 241, 365, 399, 482, 63, 108, 109, 110, 111, 112, 113, 114,
    155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203, 204,
    205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247, 252,
    253, 307, 322, 327, 365, 418, 437, 482, 493, 499, 501, 508, 509, 525, 527, 556,
    558, 561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670, 676,
    677, 683, 696, 698, 699, 704, 714, 720, 724, 63, 108, 109, 110, 111, 112, 113,
    114, 155, 157, 163, 174, 179, 181, 193, 194, 195, 196, 197, 198, 199, 200, 203,
    204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 247,
    252, 253, 307, 322, 327, 365, 418, 437, 482, 493, 499, 501, 508, 509, 525, 527,
    556, 558, 561, 562, 565, 570, 571, 574, 577, 655, 656, 657, 660, 661, 669, 670,
    676, 677, 683, 696, 698, 699, 704, 714, 720, 724, 63, 108, 155, 157, 163, 174,
    179, 193, 197, 198, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
    213, 214, 216, 240, 241, 243, 252, 253, 307, 322, 327, 365, 418, 482, 499, 501,
    527, 558, 561, 562, 565, 570, 571, 577, 655, 656, 676, 677, 683, 699, 63, 108,
    155, 157, 163, 174, 179, 193, 199, 200, 203, 204, 205, 206, 207, 208, 209, 210,
    211, 212, 213, 214, 216, 240, 241, 243, 252, 253, 307, 322, 327, 365, 418, 482,
    499, 501, 527, 558, 561, 562, 565, 570, 571, 577, 655, 656, 676, 677, 683, 699,
    63, 108, 155, 157, 163, 174, 179, 193, 203, 204, 205, 206, 207, 208, 209, 210,
    211, 212, 213, 214, 216, 240, 241, 243, 252, 253, 307, 322, 327, 365, 418, 482,
    499, 501, 527, 558, 561, 562, 565, 570, 571, 577, 655, 656, 676, 677, 683, 699,
    63, 108, 155, 157, 163, 174, 179, 193, 207, 208, 209, 210, 211, 212, 213, 214,
    216, 240, 241, 243, 252, 253, 307, 322, 327, 365, 418, 482, 499, 501, 527, 558,
    561, 562, 565, 570, 571, 577, 655, 656, 676, 677, 683, 699, 63, 108, 155, 157,
    163, 174, 179, 193, 209, 210, 211, 212, 213, 214, 216, 240, 241, 243, 252, 253,
    307, 322, 327, 365, 418, 482, 499, 501, 527, 558, 561, 562, 565, 570, 571, 577,
    655, 656, 676, 677, 683, 699, 63, 108, 155, 157, 163, 174, 179, 193, 210, 211,
    212, 213, 214, 216, 240, 241, 243, 252, 253, 307, 322, 327, 365, 418, 482, 499,
    501, 527, 558, 561, 562, 565, 570, 571, 577, 655, 656, 676, 677, 683, 699, 63,
    108, 155, 157, 163, 174, 179, 193, 211, 212, 213, 214, 216, 240, 241, 243, 252,
    253, 307, 322, 327, 365, 418, 482, 499, 501, 527, 558, 561, 562, 565, 570, 571,
    577, 655, 656, 676, 677, 683, 699, 63, 108, 155, 157, 163, 174, 179, 193, 212,
    213, 214, 216, 240, 241, 243, 252, 253, 307, 322, 327, 365, 418, 482, 499, 501,
    527, 558, 561, 562, 565, 570, 571, 577, 655, 656, 676, 677, 683, 699, 63, 108,
    155, 157, 163, 174, 179, 193, 213, 214, 216, 240, 241, 243, 252, 253, 307, 322,
    327, 365, 418, 482, 499, 501, 527, 558, 561, 562, 565, 570, 571, 577, 655, 656,
    676, 677, 683, 699, 63, 108, 155, 157, 163, 174, 179, 193, 213, 216, 240, 241,
    243, 252, 253, 307, 322, 327, 365, 418, 482, 499, 501, 527, 558, 561, 562, 565,
    570, 571, 577, 655, 656, 676, 677, 683, 699, 63, 108, 155, 157, 163, 174, 179,
    193, 213, 216, 240, 241, 243, 252, 253, 307, 322, 327, 365, 418, 482, 499, 501,
    527, 558, 561, 562, 565, 570, 571, 577, 655, 656, 676, 677, 683, 699, 63, 108,
    155, 157, 163, 174, 179, 193, 213, 216, 240, 241, 243, 252, 253, 307, 322, 327,
    365, 418, 437, 482, 493, 499, 501, 525, 527, 556, 558, 561, 562, 565, 570, 571,
    574, 577, 655, 656, 657, 660, 661, 669, 670, 676, 677, 683, 696, 698, 699, 704,
    714, 720, 724, 125, 515, 418, 527, 558, 699, 437, 525, 574, 704, 720, 437, 525,
    556, 570, 574, 704, 720, 437, 525, 574, 704, 720, 437, 493, 525, 574, 660, 661,
    669, 670, 698, 704, 714, 720, 724, 406, 437, 490, 493, 502, 503, 504, 525, 574,
    588, 597, 599, 603, 624, 625, 660, 661, 669, 670, 698, 704, 714, 720, 723, 724,
    437, 493, 525, 556, 574, 657, 660, 661, 669, 670, 696, 698, 704, 714, 720, 724,
    662, 556, 556, 499, 501, 656, 696, 556, 696, 437, 493, 525, 574, 660, 661, 669,
    670, 698, 704, 714, 720, 724, 570, 437, 437, 704, 405, 425, 512, 410, 552, 410,
    528, 552, 686, 686, 686, 702, 686, 702, 704, 686, 702, 704, 567, 567, 567, 627,
    567, 567, 629, 567, 629, 688, 2, 11, 73, 0, 3, 59, 2, 11, 73, 2,
    11, 73, 291, 302, 332, 2, 11, 73, 291, 302, 332, 2, 11, 73, 291, 302,
    332, 2, 11, 73, 291, 302, 332, 2, 11, 73, 291, 302, 332, 2, 11, 73,
    291, 302, 332, 2, 11, 73, 291, 293, 296, 299, 302, 332, 357, 386, 389, 426,
    485, 486, 487, 532, 533, 534, 537, 545, 592, 653, 675, 21, 330, 141, 141, 218,
    217, 228, 231, 291, 302, 291, 302, 291, 302, 332, 291, 302, 332, 291, 302, 332,
    291, 302, 332, 291, 302, 332, 291, 302, 332, 291, 302, 332, 291, 302, 332, 291,
    302, 332, 291, 302, 332, 330, 405, 425, 483, 512, 241, 365, 482, 405, 425, 293,
    426, 486, 533, 293, 426, 486, 487, 533, 534, 406, 588, 597, 599, 603, 293, 426,
    486, 487, 533, 534, 293, 386, 426, 486, 487, 533, 534, 293, 386, 426, 486, 487,
    533, 534, 344, 344, 344, 485, 537, 653, 485, 537, 545, 653, 545, 405, 373, 373,
    373, 488, 585, 607, 405, 428, 373, 538, 538, 330, 330, 151, 151, 232, 179, 222,
    243, 179, 222, 243, 241, 241, 150, 150, 229, 299, 299, 299, 357, 355, 355, 532,
    675, 422, 532, 592, 675, 592, 149, 149, 226, 296, 296, 296, 389, 2, 11, 12,
    37, 73, 291, 293, 296, 299, 302, 332, 357, 386, 389, 426, 485, 486, 487, 532,
    533, 534, 537, 545, 592, 653, 675, 9, 9, 60, 9, 60, 62, 154, 9, 60,
    62, 154, 36, 36, 63, 63,
  };

  private static final short[] lapg_sym_to = new short[] {
    730, 5, 27, 29, 57, 27, 27, 27, 77, 77, 27, 77, 77, 77, 27, 77,
    77, 77, 77, 77, 77, 77, 77, 27, 77, 77, 77, 27, 27, 77, 77, 77,
    77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 77, 77,
    77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 77, 77,
    77, 77, 77, 77, 77, 77, 77, 27, 77, 77, 5, 27, 27, 27, 27, 27,
    427, 77, 77, 77, 77, 77, 27, 77, 427, 77, 27, 77, 539, 77, 77, 27,
    27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 539, 77, 77, 77, 77,
    27, 77, 77, 77, 77, 77, 77, 77, 77, 27, 77, 27, 77, 77, 77, 77,
    77, 77, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
    78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
    78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
    79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
    79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
    79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
    79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
    79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
    80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
    80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
    81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
    81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
    81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
    81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
    81, 81, 81, 81, 40, 40, 40, 40, 201, 201, 201, 82, 82, 82, 82, 82,
    82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
    82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
    82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
    82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 648, 82, 82, 82, 82,
    82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83,
    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
    83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
    83, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 84, 84,
    84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
    84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
    84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
    84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
    84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
    84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
    84, 84, 84, 558, 699, 699, 699, 624, 624, 85, 85, 85, 85, 85, 85, 85,
    85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
    85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
    85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
    85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
    85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
    85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86,
    86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
    86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
    86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 490, 86, 490, 86,
    86, 86, 86, 490, 86, 86, 86, 86, 86, 86, 86, 86, 490, 86, 86, 86,
    86, 490, 490, 490, 490, 86, 86, 86, 86, 490, 86, 490, 490, 490, 490, 67,
    67, 370, 400, 491, 491, 491, 491, 491, 492, 492, 492, 492, 492, 492, 492, 492,
    492, 492, 492, 492, 492, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
    87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
    87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
    87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
    87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
    87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
    87, 87, 87, 87, 87, 87, 87, 87, 87, 559, 700, 700, 700, 68, 68, 493,
    493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 88, 88, 88, 88,
    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
    88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
    698, 69, 69, 30, 401, 421, 402, 41, 41, 371, 41, 89, 89, 89, 89, 89,
    89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
    89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
    89, 89, 89, 89, 89, 89, 89, 89, 89, 458, 89, 89, 89, 89, 89, 89,
    89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
    89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 625, 625, 90,
    90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
    90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
    90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
    90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
    90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
    90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
    90, 90, 90, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
    495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 496, 496, 496,
    496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 497, 497, 497, 497, 497, 497,
    497, 497, 497, 497, 497, 497, 497, 403, 683, 91, 91, 91, 91, 91, 91, 91,
    91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
    91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
    91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
    91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
    91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
    91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 70, 70,
    42, 42, 42, 42, 202, 202, 202, 498, 498, 498, 498, 498, 498, 498, 498, 498,
    498, 498, 498, 498, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
    92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
    92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
    92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
    92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
    92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
    92, 92, 92, 92, 92, 92, 92, 92, 92, 8, 8, 8, 43, 43, 93, 93,
    93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
    93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
    93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 43, 390, 93, 43, 93, 93,
    93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
    93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
    93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
    94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
    94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
    94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
    94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
    94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
    95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
    95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
    95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
    95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
    95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
    95, 95, 95, 95, 95, 95, 95, 428, 441, 252, 252, 252, 379, 252, 252, 252,
    44, 44, 44, 44, 380, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47,
    47, 48, 48, 48, 48, 253, 253, 253, 381, 253, 253, 253, 31, 499, 499, 499,
    499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 96, 96, 96, 96, 96, 96,
    96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
    96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
    96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
    96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
    96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
    96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 49,
    49, 49, 49, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
    97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
    97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
    97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
    97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
    97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
    97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98,
    98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
    98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
    98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
    98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
    98, 98, 98, 98, 98, 98, 98, 98, 98, 50, 50, 50, 50, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
    99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
    99, 71, 71, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 429, 100, 451,
    100, 540, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 649, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100, 100, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501,
    501, 501, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
    459, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
    101, 101, 101, 101, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502,
    502, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
    102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
    102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
    103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
    103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
    103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
    103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
    103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
    103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104,
    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
    104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105,
    105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
    105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
    105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 503, 105, 503, 105, 105, 105,
    105, 503, 105, 105, 105, 105, 105, 105, 105, 105, 503, 105, 105, 105, 105, 503,
    503, 503, 503, 105, 105, 105, 105, 503, 105, 503, 503, 503, 503, 51, 51, 51,
    51, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 106, 106,
    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
    106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
    106, 106, 106, 1, 1, 1, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505,
    505, 505, 505, 52, 52, 52, 52, 107, 107, 107, 107, 107, 107, 107, 107, 107,
    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 53, 53, 53, 53, 506,
    506, 506, 609, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 59, 241, 291,
    296, 299, 302, 241, 241, 241, 437, 485, 437, 532, 537, 241, 437, 437, 437, 437,
    437, 437, 437, 437, 437, 437, 437, 653, 437, 437, 675, 437, 437, 686, 437, 437,
    437, 437, 437, 437, 437, 437, 234, 364, 377, 388, 393, 395, 396, 419, 583, 600,
    642, 647, 694, 708, 718, 9, 9, 9, 9, 9, 155, 179, 222, 243, 222, 222,
    9, 9, 9, 9, 9, 9, 9, 222, 9, 9, 222, 9, 487, 534, 9, 9,
    9, 222, 9, 9, 9, 9, 9, 222, 9, 9, 9, 61, 75, 153, 235, 306,
    324, 325, 366, 604, 646, 63, 108, 157, 161, 162, 163, 108, 108, 108, 108, 108,
    108, 108, 174, 108, 108, 240, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
    108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 293,
    108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 426, 108, 486, 488, 108, 530,
    533, 108, 157, 108, 556, 557, 561, 562, 108, 565, 108, 163, 570, 571, 108, 108,
    577, 108, 585, 108, 577, 108, 108, 108, 108, 108, 108, 108, 108, 108, 655, 663,
    174, 676, 677, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
    108, 108, 108, 108, 215, 247, 250, 308, 316, 317, 318, 323, 363, 385, 538, 588,
    603, 606, 645, 660, 661, 662, 669, 670, 671, 672, 679, 695, 709, 710, 714, 723,
    724, 24, 24, 24, 24, 156, 173, 175, 24, 173, 24, 24, 481, 535, 173, 175,
    175, 175, 62, 154, 216, 260, 260, 307, 260, 322, 307, 326, 328, 328, 328, 365,
    307, 386, 389, 483, 528, 483, 607, 483, 528, 657, 657, 60, 217, 225, 228, 231,
    327, 574, 596, 717, 726, 25, 72, 304, 304, 304, 304, 304, 415, 438, 484, 507,
    529, 536, 550, 553, 507, 580, 581, 582, 507, 589, 617, 618, 621, 623, 507, 438,
    438, 438, 438, 656, 659, 673, 674, 507, 507, 507, 507, 696, 711, 507, 507, 507,
    507, 507, 109, 109, 109, 109, 109, 109, 109, 109, 197, 109, 109, 109, 109, 109,
    109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
    109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 197, 197, 109, 109,
    109, 109, 109, 460, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
    109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
    109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 198,
    110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
    110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
    110, 198, 198, 110, 110, 110, 110, 110, 461, 110, 110, 110, 110, 110, 110, 110,
    110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
    110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 194, 220, 220, 248,
    220, 220, 194, 194, 220, 220, 220, 220, 220, 220, 220, 220, 462, 220, 220, 220,
    220, 220, 195, 195, 195, 463, 196, 196, 196, 464, 209, 209, 465, 211, 211, 466,
    210, 210, 467, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
    111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
    111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
    111, 468, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
    111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
    111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
    112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
    112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
    112, 112, 411, 112, 469, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
    112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
    112, 112, 112, 112, 112, 112, 112, 112, 26, 182, 418, 482, 527, 182, 203, 203,
    203, 470, 204, 204, 204, 471, 213, 113, 113, 113, 113, 113, 113, 113, 113, 176,
    113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
    113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
    113, 113, 113, 113, 113, 113, 472, 508, 113, 508, 113, 113, 113, 113, 578, 508,
    113, 578, 508, 113, 113, 113, 113, 113, 113, 508, 113, 176, 113, 113, 508, 508,
    508, 508, 508, 113, 113, 113, 508, 508, 113, 508, 508, 508, 508, 114, 114, 114,
    114, 114, 114, 114, 114, 177, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
    114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
    114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 473, 509, 114, 509,
    114, 114, 114, 114, 579, 509, 114, 579, 509, 114, 114, 114, 114, 114, 114, 509,
    114, 177, 114, 114, 509, 509, 509, 509, 509, 114, 114, 114, 509, 509, 114, 509,
    509, 509, 509, 212, 212, 214, 199, 199, 199, 199, 199, 474, 200, 200, 200, 200,
    200, 475, 207, 207, 476, 208, 208, 477, 205, 205, 205, 478, 206, 206, 206, 479,
    183, 183, 184, 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, 190,
    191, 191, 192, 192, 178, 178, 178, 178, 181, 729, 2, 73, 3, 3, 10, 152,
    11, 11, 12, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
    37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 54, 66, 54, 66, 55, 372,
    305, 343, 354, 359, 361, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
    115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
    115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
    115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
    115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
    115, 115, 115, 115, 115, 115, 6, 28, 32, 58, 32, 32, 142, 142, 32, 142,
    142, 142, 142, 289, 289, 289, 369, 142, 142, 142, 142, 142, 142, 430, 142, 454,
    142, 142, 142, 142, 142, 142, 142, 7, 116, 141, 149, 150, 151, 116, 116, 116,
    116, 116, 116, 116, 221, 116, 238, 116, 116, 251, 116, 258, 259, 116, 116, 116,
    116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
    116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 387, 116, 404,
    431, 442, 445, 446, 447, 116, 452, 431, 510, 531, 116, 431, 116, 560, 116, 116,
    116, 116, 431, 510, 116, 442, 599, 605, 442, 116, 116, 116, 116, 116, 116, 116,
    510, 116, 641, 658, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 706, 116,
    116, 116, 510, 116, 510, 116, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
    143, 143, 143, 143, 143, 143, 143, 143, 143, 688, 144, 158, 244, 245, 274, 275,
    405, 410, 412, 413, 422, 425, 450, 526, 548, 552, 615, 548, 548, 117, 145, 145,
    164, 117, 117, 117, 117, 117, 117, 117, 117, 145, 145, 117, 117, 117, 117, 117,
    117, 117, 117, 117, 117, 117, 117, 145, 145, 117, 117, 117, 117, 117, 117, 117,
    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
    145, 145, 145, 145, 145, 145, 117, 145, 511, 145, 117, 145, 145, 117, 117, 117,
    117, 117, 511, 117, 511, 145, 117, 117, 117, 117, 511, 117, 511, 117, 145, 145,
    117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 511, 117, 511,
    117, 146, 159, 146, 146, 146, 146, 146, 146, 146, 414, 146, 146, 146, 146, 146,
    146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
    147, 147, 147, 147, 147, 147, 147, 148, 160, 148, 148, 148, 148, 148, 148, 148,
    148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 512, 512, 512, 512, 512, 512,
    512, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 513,
    118, 554, 118, 118, 118, 118, 513, 118, 513, 118, 118, 118, 118, 632, 118, 513,
    118, 118, 118, 554, 554, 554, 554, 554, 118, 118, 118, 554, 554, 118, 513, 554,
    513, 554, 223, 223, 398, 575, 165, 180, 224, 224, 249, 294, 224, 294, 224, 294,
    119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
    119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
    119, 119, 119, 119, 119, 119, 119, 119, 119, 295, 119, 119, 119, 119, 119, 119,
    119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
    119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
    119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119,
    119, 119, 119, 119, 119, 254, 254, 254, 254, 254, 255, 255, 367, 255, 255, 255,
    120, 166, 236, 239, 246, 256, 236, 265, 286, 288, 256, 310, 236, 320, 321, 362,
    256, 368, 310, 448, 310, 563, 563, 448, 448, 619, 620, 622, 633, 636, 256, 680,
    563, 256, 256, 697, 448, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
    121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
    121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
    121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
    121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
    121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
    122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
    122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
    122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
    122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
    122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123,
    123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
    123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
    123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
    123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123,
    123, 123, 123, 123, 123, 123, 123, 123, 237, 261, 315, 257, 309, 638, 692, 693,
    124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
    124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
    124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 514, 124,
    514, 124, 124, 124, 124, 514, 124, 514, 124, 124, 124, 124, 124, 124, 514, 124,
    124, 124, 514, 514, 514, 514, 514, 124, 124, 124, 514, 514, 124, 514, 514, 514,
    514, 399, 423, 242, 311, 311, 424, 311, 125, 125, 167, 168, 169, 170, 171, 172,
    125, 125, 125, 125, 125, 264, 125, 266, 267, 268, 269, 269, 269, 269, 269, 269,
    269, 269, 269, 269, 269, 269, 269, 269, 125, 269, 125, 125, 125, 125, 319, 125,
    125, 125, 125, 125, 125, 125, 515, 125, 515, 125, 125, 572, 573, 515, 125, 515,
    125, 125, 125, 125, 125, 125, 515, 125, 125, 125, 515, 515, 515, 515, 515, 125,
    125, 125, 515, 515, 125, 515, 515, 515, 515, 126, 126, 126, 126, 126, 126, 126,
    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
    126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127,
    127, 127, 270, 271, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
    127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
    127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128,
    128, 128, 128, 128, 128, 128, 272, 273, 128, 128, 128, 128, 128, 128, 128, 128,
    128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
    128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
    129, 129, 129, 129, 129, 129, 129, 129, 276, 277, 278, 279, 129, 129, 129, 129,
    129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
    129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
    130, 130, 130, 130, 130, 130, 130, 130, 280, 281, 130, 130, 130, 130, 130, 130,
    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
    130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131,
    131, 131, 131, 131, 282, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
    131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 283, 132,
    132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
    132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133,
    133, 133, 133, 133, 133, 133, 133, 284, 133, 133, 133, 133, 133, 133, 133, 133,
    133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
    133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 285,
    134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134,
    134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135,
    135, 135, 135, 135, 135, 135, 135, 287, 135, 135, 135, 135, 135, 135, 135, 135,
    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
    135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
    136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
    136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137,
    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138,
    138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
    138, 138, 516, 138, 516, 138, 138, 516, 138, 516, 138, 138, 138, 138, 138, 138,
    516, 138, 138, 138, 516, 516, 516, 516, 516, 138, 138, 138, 516, 516, 138, 516,
    516, 516, 516, 193, 193, 449, 586, 616, 716, 517, 584, 637, 517, 584, 518, 518,
    610, 634, 518, 518, 518, 519, 519, 519, 519, 519, 520, 555, 520, 520, 684, 685,
    689, 690, 715, 520, 725, 520, 728, 439, 521, 551, 521, 567, 568, 569, 521, 521,
    439, 439, 439, 439, 664, 665, 521, 521, 521, 521, 521, 521, 521, 521, 727, 521,
    522, 522, 522, 611, 522, 682, 522, 522, 522, 522, 611, 522, 522, 522, 522, 522,
    687, 612, 613, 564, 566, 681, 712, 614, 713, 523, 523, 523, 523, 523, 523, 523,
    523, 523, 523, 523, 523, 523, 635, 524, 525, 720, 432, 455, 576, 443, 608, 444,
    587, 444, 701, 702, 703, 719, 704, 704, 721, 705, 705, 722, 626, 627, 628, 666,
    629, 630, 667, 631, 668, 707, 13, 13, 13, 4, 23, 4, 14, 38, 14, 15,
    15, 15, 329, 329, 329, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17,
    17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20,
    20, 20, 20, 21, 21, 21, 330, 344, 350, 355, 330, 330, 355, 344, 350, 344,
    543, 344, 344, 590, 344, 344, 543, 543, 590, 543, 590, 56, 373, 218, 219, 292,
    290, 298, 301, 331, 360, 332, 332, 333, 333, 378, 334, 334, 334, 335, 335, 335,
    336, 336, 336, 337, 337, 337, 338, 338, 338, 339, 339, 339, 340, 340, 340, 341,
    341, 341, 342, 342, 342, 374, 433, 433, 542, 433, 312, 397, 541, 434, 456, 345,
    457, 546, 593, 346, 346, 346, 547, 346, 594, 440, 640, 650, 651, 652, 347, 347,
    347, 347, 347, 347, 348, 416, 348, 348, 348, 348, 348, 349, 417, 349, 349, 349,
    349, 349, 382, 383, 384, 544, 595, 678, 545, 545, 601, 545, 602, 435, 406, 407,
    408, 549, 639, 654, 436, 480, 409, 597, 598, 375, 376, 232, 233, 303, 262, 262,
    262, 263, 263, 263, 313, 314, 229, 230, 300, 356, 357, 358, 394, 391, 392, 591,
    691, 453, 592, 643, 592, 644, 226, 227, 297, 351, 352, 353, 420, 22, 22, 39,
    39, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
    22, 22, 22, 22, 22, 22, 22, 33, 34, 74, 35, 35, 76, 76, 36, 36,
    36, 36, 64, 65, 139, 140,
  };

  private static final short[] lapg_rlen = new short[] {
    1, 0, 1, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 2, 1, 3, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3, 4, 4,
    4, 4, 4, 2, 2, 3, 3, 3, 1, 0, 4, 4, 2, 1, 1, 0,
    1, 0, 7, 3, 5, 1, 2, 2, 2, 2, 2, 2, 1, 3, 3, 4,
    1, 3, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 3, 3, 3,
    3, 1, 3, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 5,
    3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
    1, 3, 2, 2, 1, 1, 2, 1, 5, 7, 5, 5, 7, 1, 0, 1,
    0, 1, 0, 9, 8, 2, 2, 3, 4, 3, 3, 3, 1, 5, 5, 2,
    2, 2, 1, 0, 3, 1, 2, 2, 3, 1, 3, 3, 4, 1, 1, 2,
    2, 2, 2, 1, 0, 3, 1, 2, 2, 1, 1, 2, 3, 2, 1, 1,
    1, 3, 3, 1, 1, 2, 1, 2, 1, 1, 2, 1, 0, 6, 2, 2,
    1, 1, 7, 1, 2, 5, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1,
    1, 0, 1, 0, 1, 0, 7, 2, 1, 3, 1, 0, 3, 1, 2, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 2, 5, 1, 3, 1,
    3, 1, 1, 1, 0, 8, 1, 3, 1, 3, 1, 1, 3, 1, 0, 4,
    1, 1, 1, 4, 7, 1, 0, 2, 3, 1, 1, 6, 8, 10, 1, 3,
    4, 1, 1, 2, 5, 7, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1,
    1, 0, 8, 5, 5, 1, 1, 0, 7, 1, 0, 7, 2, 3, 2, 1,
    2, 1, 0, 3, 1, 2, 1, 0, 3, 4, 1, 3, 1, 0, 7, 2,
    1, 0, 3, 1, 2, 1, 0, 8, 7, 6, 10, 1, 1, 1, 0, 2,
    3, 1, 0, 7, 2, 1, 0, 3, 4, 1, 3, 2, 4, 9, 1, 2,
    6, 5, 4, 3, 1, 1, 1, 1, 3, 1, 0, 2, 1, 1, 0, 3,
    1, 3,
  };

  private static final short[] lapg_rlex = new short[] {
    136, 136, 138, 138, 135, 135, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
    141, 141, 141, 141, 142, 142, 143, 143, 144, 144, 144, 144, 144, 144, 144, 145,
    145, 146, 147, 148, 148, 148, 148, 152, 152, 152, 153, 153, 153, 156, 156, 156,
    149, 149, 149, 149, 149, 149, 149, 149, 158, 158, 158, 158, 158, 158, 158, 158,
    158, 151, 159, 159, 160, 160, 160, 154, 154, 162, 162, 162, 162, 162, 162, 162,
    162, 162, 162, 162, 162, 162, 162, 162, 166, 166, 162, 162, 162, 162, 168, 168,
    169, 169, 163, 163, 167, 171, 171, 171, 171, 171, 171, 171, 171, 164, 172, 172,
    173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176,
    176, 177, 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, 182, 183, 183,
    184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 165, 165, 161, 161,
    186, 187, 187, 187, 187, 190, 190, 190, 190, 190, 190, 190, 190, 194, 194, 196,
    196, 197, 197, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
    190, 190, 201, 201, 191, 202, 202, 188, 189, 204, 204, 205, 192, 192, 192, 192,
    192, 192, 192, 206, 206, 193, 207, 207, 208, 210, 209, 209, 211, 211, 195, 195,
    198, 198, 199, 212, 212, 212, 213, 213, 213, 215, 215, 218, 218, 217, 216, 214,
    200, 200, 219, 137, 137, 220, 220, 139, 139, 221, 221, 222, 222, 222, 222, 222,
    228, 228, 229, 229, 230, 230, 223, 231, 233, 233, 234, 234, 232, 235, 235, 236,
    236, 236, 236, 236, 236, 236, 236, 236, 236, 237, 246, 246, 238, 203, 203, 247,
    247, 248, 248, 250, 250, 239, 249, 249, 251, 251, 251, 253, 253, 256, 256, 255,
    257, 257, 258, 254, 240, 261, 261, 259, 260, 252, 252, 241, 241, 242, 262, 262,
    243, 263, 263, 266, 264, 264, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268,
    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 265, 269, 269,
    270, 270, 244, 271, 271, 272, 273, 273, 245, 274, 274, 224, 275, 276, 150, 155,
    155, 277, 277, 157, 278, 278, 279, 279, 170, 170, 280, 280, 281, 281, 225, 282,
    284, 284, 283, 285, 285, 287, 287, 286, 286, 286, 286, 290, 288, 292, 292, 289,
    291, 293, 293, 226, 294, 296, 296, 295, 295, 297, 297, 298, 298, 227, 140, 140,
    299, 299, 299, 299, 300, 300, 300, 301, 301, 304, 304, 302, 303, 306, 306, 305,
    307, 307,
  };

  private static final String[] lapg_syms = new String[] {
    "eoi",
    "identifier",
    "error",
    "Licon",
    "Lfcon",
    "Lscon",
    "Lccon",
    "Labstract",
    "Las",
    "Lbase",
    "Lbool",
    "Lbreak",
    "Lbyte",
    "Lcase",
    "Lcatch",
    "Lchar",
    "Lchecked",
    "Lclass",
    "Lconst",
    "Lcontinue",
    "Ldecimal",
    "Ldefault",
    "Ldelegate",
    "Ldo",
    "Ldouble",
    "Lelse",
    "Lenum",
    "Levent",
    "Lexplicit",
    "Lextern",
    "Lfalse",
    "Lfinally",
    "Lfixed",
    "Lfloat",
    "Lfor",
    "Lforeach",
    "Lgoto",
    "Lif",
    "Limplicit",
    "Lin",
    "Lint",
    "Linterface",
    "Linternal",
    "Lis",
    "Llock",
    "Llong",
    "Lnamespace",
    "Lnew",
    "Lnull",
    "Lobject",
    "Loperator",
    "Lout",
    "Loverride",
    "Lparams",
    "Lprivate",
    "Lprotected",
    "Lpublic",
    "Lreadonly",
    "Lref",
    "Lreturn",
    "Lsbyte",
    "Lsealed",
    "Lshort",
    "Lsizeof",
    "Lstackalloc",
    "Lstatic",
    "Lstring",
    "Lstruct",
    "Lswitch",
    "Lthis",
    "Lthrow",
    "Ltrue",
    "Ltry",
    "Ltypeof",
    "Luint",
    "Lulong",
    "Lunchecked",
    "Lunsafe",
    "Lushort",
    "Lusing",
    "Lvirtual",
    "Lvoid",
    "Lvolatile",
    "Lwhile",
    "'{'",
    "'}'",
    "'['",
    "']'",
    "'('",
    "')'",
    "'.'",
    "','",
    "':'",
    "';'",
    "'+'",
    "'-'",
    "'*'",
    "'/'",
    "'%'",
    "'&'",
    "'|'",
    "'^'",
    "'!'",
    "'~'",
    "'='",
    "'<'",
    "'>'",
    "'?'",
    "'++'",
    "'--'",
    "'&&'",
    "'||'",
    "'<<'",
    "'>>'",
    "'=='",
    "'!='",
    "'<='",
    "'>='",
    "'+='",
    "'-='",
    "'*='",
    "'/='",
    "'%='",
    "'&='",
    "'|='",
    "'^='",
    "'<<='",
    "'>>='",
    "'->'",
    "cast_token",
    "comment",
    "_skip",
    "'/*'",
    "anysym1",
    "'*/'",
    "input",
    "using_directivesopt",
    "using_directives",
    "namespace_member_declarationsopt",
    "namespace_member_declarations",
    "attributes",
    "modifier",
    "modifiers",
    "optsemicolon",
    "literal",
    "qualified_identifier",
    "ID",
    "type_name",
    "type",
    "builtin_types",
    "array_type",
    "pointer_type",
    "non_array_type",
    "local_type",
    "primary_expression",
    "rank_specifiers",
    "cast_type",
    "rank_specifier",
    "integral_type",
    "argument_list",
    "argument",
    "expression",
    "primary_expression_na",
    "new_array_expression",
    "parenthesized",
    "expression_list",
    "argument_listopt",
    "object_or_delegate_creation_expression",
    "rank_specifiersopt",
    "array_initializeropt",
    "array_initializer",
    "unary_expression",
    "cast_expression",
    "multiplicative_expression",
    "additive_expression",
    "shift_expression",
    "relational_expression",
    "equality_expression",
    "and_expression",
    "exclusive_or_expression",
    "inclusive_or_expression",
    "conditional_and_expression",
    "conditional_or_expression",
    "conditional_expression",
    "assignment",
    "assignment_operator",
    "constant_expression",
    "statement",
    "local_variable_declaration",
    "local_constant_declaration",
    "embedded_statement",
    "block",
    "statement_expression",
    "switch_block",
    "for_initializeropt",
    "for_initializer",
    "expressionopt",
    "statement_expression_listopt",
    "statement_expression_list",
    "try_statement",
    "resource_acquisition",
    "statementsopt",
    "statements",
    "variable_declarators",
    "constant_declarators",
    "constant_declarator",
    "switch_sectionsopt",
    "switch_sections",
    "switch_section",
    "switch_labels",
    "statements_as_one",
    "switch_label",
    "catch_finally",
    "catch_clauses",
    "finally_clause",
    "specific_catch_clauses",
    "general_catch_clause",
    "specific_catch_clause",
    "IDopt",
    "namespace_declaration",
    "using_directive",
    "namespace_member_declaration",
    "type_declaration",
    "class_declaration",
    "struct_declaration",
    "interface_declaration",
    "enum_declaration",
    "delegate_declaration",
    "attributesopt",
    "modifiersopt",
    "class_baseopt",
    "class_base",
    "class_body",
    "type_list",
    "class_member_declarationsopt",
    "class_member_declarations",
    "class_member_declaration",
    "constant_declaration",
    "field_declaration",
    "method_declaration",
    "property_declaration",
    "event_declaration",
    "indexer_declaration",
    "operator_declaration",
    "constructor_declaration",
    "destructor_declaration",
    "const_modifiers",
    "variable_declarator",
    "variable_initializer",
    "member_name",
    "formal_parameter_listopt",
    "formal_parameter_list",
    "optional_body",
    "fixed_parameters",
    "parameter_array",
    "fixed_parameter",
    "parameter_modifieropt",
    "parameter_modifier",
    "params_modifier",
    "accessor_declarations",
    "accessor_declaration",
    "accessor_declarationopt",
    "indexer_name",
    "operator_declarator",
    "unary_binary_operator_declarator",
    "conversion_operator_declarator",
    "simple_parameter",
    "overloadable_operator_name",
    "overloadable_operator",
    "conversion_modifier",
    "constructor_initializeropt",
    "constructor_initializer",
    "destructor_modifier",
    "destructor_modifieropt",
    "struct_interfacesopt",
    "struct_interfaces",
    "struct_body",
    "dim_separatorsopt",
    "dim_separators",
    "variable_initializer_listopt",
    "variable_initializer_list",
    "interface_baseopt",
    "interface_base",
    "interface_body",
    "interface_member_declarationsopt",
    "interface_member_declarations",
    "interface_member_declaration",
    "iface_member_modifieropt",
    "iface_member_modifier",
    "interface_accessors",
    "iface_indexer_name",
    "interface_accessor",
    "interface_accessoropt",
    "enum_baseopt",
    "enum_base",
    "enum_body",
    "enum_member_declarationsopt",
    "enum_member_declarations",
    "enum_member_declaration",
    "attribute_sect",
    "attribute_target",
    "attribute_list",
    "attribute",
    "attribute_name",
    "attribute_argumentsopt",
    "attribute_arguments",
    "attribute_argument_listopt",
    "attribute_argument_list",
  };

  public interface Tokens extends Lexems {
    // non-terminals
    public static final int input = 135;
    public static final int using_directivesopt = 136;
    public static final int using_directives = 137;
    public static final int namespace_member_declarationsopt = 138;
    public static final int namespace_member_declarations = 139;
    public static final int attributes = 140;
    public static final int modifier = 141;
    public static final int modifiers = 142;
    public static final int optsemicolon = 143;
    public static final int literal = 144;
    public static final int qualified_identifier = 145;
    public static final int ID = 146;
    public static final int type_name = 147;
    public static final int type = 148;
    public static final int builtin_types = 149;
    public static final int array_type = 150;
    public static final int pointer_type = 151;
    public static final int non_array_type = 152;
    public static final int local_type = 153;
    public static final int primary_expression = 154;
    public static final int rank_specifiers = 155;
    public static final int cast_type = 156;
    public static final int rank_specifier = 157;
    public static final int integral_type = 158;
    public static final int argument_list = 159;
    public static final int argument = 160;
    public static final int expression = 161;
    public static final int primary_expression_na = 162;
    public static final int new_array_expression = 163;
    public static final int parenthesized = 164;
    public static final int expression_list = 165;
    public static final int argument_listopt = 166;
    public static final int object_or_delegate_creation_expression = 167;
    public static final int rank_specifiersopt = 168;
    public static final int array_initializeropt = 169;
    public static final int array_initializer = 170;
    public static final int unary_expression = 171;
    public static final int cast_expression = 172;
    public static final int multiplicative_expression = 173;
    public static final int additive_expression = 174;
    public static final int shift_expression = 175;
    public static final int relational_expression = 176;
    public static final int equality_expression = 177;
    public static final int and_expression = 178;
    public static final int exclusive_or_expression = 179;
    public static final int inclusive_or_expression = 180;
    public static final int conditional_and_expression = 181;
    public static final int conditional_or_expression = 182;
    public static final int conditional_expression = 183;
    public static final int assignment = 184;
    public static final int assignment_operator = 185;
    public static final int constant_expression = 186;
    public static final int statement = 187;
    public static final int local_variable_declaration = 188;
    public static final int local_constant_declaration = 189;
    public static final int embedded_statement = 190;
    public static final int block = 191;
    public static final int statement_expression = 192;
    public static final int switch_block = 193;
    public static final int for_initializeropt = 194;
    public static final int for_initializer = 195;
    public static final int expressionopt = 196;
    public static final int statement_expression_listopt = 197;
    public static final int statement_expression_list = 198;
    public static final int try_statement = 199;
    public static final int resource_acquisition = 200;
    public static final int statementsopt = 201;
    public static final int statements = 202;
    public static final int variable_declarators = 203;
    public static final int constant_declarators = 204;
    public static final int constant_declarator = 205;
    public static final int switch_sectionsopt = 206;
    public static final int switch_sections = 207;
    public static final int switch_section = 208;
    public static final int switch_labels = 209;
    public static final int statements_as_one = 210;
    public static final int switch_label = 211;
    public static final int catch_finally = 212;
    public static final int catch_clauses = 213;
    public static final int finally_clause = 214;
    public static final int specific_catch_clauses = 215;
    public static final int general_catch_clause = 216;
    public static final int specific_catch_clause = 217;
    public static final int IDopt = 218;
    public static final int namespace_declaration = 219;
    public static final int using_directive = 220;
    public static final int namespace_member_declaration = 221;
    public static final int type_declaration = 222;
    public static final int class_declaration = 223;
    public static final int struct_declaration = 224;
    public static final int interface_declaration = 225;
    public static final int enum_declaration = 226;
    public static final int delegate_declaration = 227;
    public static final int attributesopt = 228;
    public static final int modifiersopt = 229;
    public static final int class_baseopt = 230;
    public static final int class_base = 231;
    public static final int class_body = 232;
    public static final int type_list = 233;
    public static final int class_member_declarationsopt = 234;
    public static final int class_member_declarations = 235;
    public static final int class_member_declaration = 236;
    public static final int constant_declaration = 237;
    public static final int field_declaration = 238;
    public static final int method_declaration = 239;
    public static final int property_declaration = 240;
    public static final int event_declaration = 241;
    public static final int indexer_declaration = 242;
    public static final int operator_declaration = 243;
    public static final int constructor_declaration = 244;
    public static final int destructor_declaration = 245;
    public static final int const_modifiers = 246;
    public static final int variable_declarator = 247;
    public static final int variable_initializer = 248;
    public static final int member_name = 249;
    public static final int formal_parameter_listopt = 250;
    public static final int formal_parameter_list = 251;
    public static final int optional_body = 252;
    public static final int fixed_parameters = 253;
    public static final int parameter_array = 254;
    public static final int fixed_parameter = 255;
    public static final int parameter_modifieropt = 256;
    public static final int parameter_modifier = 257;
    public static final int params_modifier = 258;
    public static final int accessor_declarations = 259;
    public static final int accessor_declaration = 260;
    public static final int accessor_declarationopt = 261;
    public static final int indexer_name = 262;
    public static final int operator_declarator = 263;
    public static final int unary_binary_operator_declarator = 264;
    public static final int conversion_operator_declarator = 265;
    public static final int simple_parameter = 266;
    public static final int overloadable_operator_name = 267;
    public static final int overloadable_operator = 268;
    public static final int conversion_modifier = 269;
    public static final int constructor_initializeropt = 270;
    public static final int constructor_initializer = 271;
    public static final int destructor_modifier = 272;
    public static final int destructor_modifieropt = 273;
    public static final int struct_interfacesopt = 274;
    public static final int struct_interfaces = 275;
    public static final int struct_body = 276;
    public static final int dim_separatorsopt = 277;
    public static final int dim_separators = 278;
    public static final int variable_initializer_listopt = 279;
    public static final int variable_initializer_list = 280;
    public static final int interface_baseopt = 281;
    public static final int interface_base = 282;
    public static final int interface_body = 283;
    public static final int interface_member_declarationsopt = 284;
    public static final int interface_member_declarations = 285;
    public static final int interface_member_declaration = 286;
    public static final int iface_member_modifieropt = 287;
    public static final int iface_member_modifier = 288;
    public static final int interface_accessors = 289;
    public static final int iface_indexer_name = 290;
    public static final int interface_accessor = 291;
    public static final int interface_accessoropt = 292;
    public static final int enum_baseopt = 293;
    public static final int enum_base = 294;
    public static final int enum_body = 295;
    public static final int enum_member_declarationsopt = 296;
    public static final int enum_member_declarations = 297;
    public static final int enum_member_declaration = 298;
    public static final int attribute_sect = 299;
    public static final int attribute_target = 300;
    public static final int attribute_list = 301;
    public static final int attribute = 302;
    public static final int attribute_name = 303;
    public static final int attribute_argumentsopt = 304;
    public static final int attribute_arguments = 305;
    public static final int attribute_argument_listopt = 306;
    public static final int attribute_argument_list = 307;
  }

  private static int lapg_next( int state, int symbol ) {
    int p;
    if( lapg_action[state] < -2 ) {
      for( p = - lapg_action[state] - 3; lapg_lalr[p] >= 0; p += 2 )
        if( lapg_lalr[p] == symbol ) break;
      return lapg_lalr[p+1];
    }
    return lapg_action[state];
  }

  private static int lapg_state_sym( int state, int symbol ) {
    int min = lapg_sym_goto[symbol], max = lapg_sym_goto[symbol+1]-1;
    int i, e;

    while( min <= max ) {
      e = (min + max) >> 1;
      i = lapg_sym_from[e];
      if( i == state )
        return lapg_sym_to[e];
      else if( i < state )
        min = e + 1;
      else
        max = e - 1;
    }
    return -1;
  }

  private int lapg_head;
  private LapgSymbol[] lapg_m;
  private LapgSymbol lapg_n;

  public boolean parse(Lexer lexer) throws IOException {

    lapg_m = new LapgSymbol[1024];
    lapg_head = 0;
    int lapg_symbols_ok = 4;

    lapg_m[0] = new LapgSymbol();
    lapg_m[0].state = 0;
    lapg_n = lexer.next();

    while( lapg_m[lapg_head].state != 730 ) {
      int lapg_i = lapg_next( lapg_m[lapg_head].state, lapg_n.lexem );

      if( lapg_i >= 0 ) {
        reduce(lapg_i);
      } else if( lapg_i == -1 ) {
        shift(lexer);
        lapg_symbols_ok++;
      }

      if( lapg_i == -2 || lapg_m[lapg_head].state == -1 ) {
        if (lapg_n.lexem == 0) {
          break;
        }
        while (lapg_head >= 0 && lapg_state_sym( lapg_m[lapg_head].state, 2 ) == -1) {
          lapg_m[lapg_head] = null; // TODO dispose?
          lapg_head--;
        }
        if (lapg_head >= 0) {
          lapg_m[++lapg_head] = new LapgSymbol();
          lapg_m[lapg_head].lexem = 2;
          lapg_m[lapg_head].sym = null;
          lapg_m[lapg_head].state = lapg_state_sym( lapg_m[lapg_head-1].state, 2 );
          lapg_m[lapg_head].pos = lapg_n.pos; // TODO endpos?
          if( lapg_symbols_ok >= 4 ) {
            error( MessageFormat.format( "syntax error before line {0}", lapg_n.pos.line ) );
          }
          if( lapg_symbols_ok <= 1 ) {
            lapg_n = lexer.next();
          }
          lapg_symbols_ok = 0;
          continue;
        } else {
          lapg_head = 0;
          lapg_m[0] = new LapgSymbol();
          lapg_m[0].state = 0;
        }
        break;
      }
    }

    if( lapg_m[lapg_head].state != 730 && lapg_symbols_ok >= 4 ) {
      error( MessageFormat.format( "syntax error before line {0}", lapg_n.pos.line ) );
      return false;
    };
    return true;
  }

  private void shift(Lexer lexer) throws IOException {
    lapg_m[++lapg_head] = lapg_n;
    lapg_m[lapg_head].state = lapg_state_sym( lapg_m[lapg_head-1].state, lapg_n.lexem );
    if( DEBUG_SYNTAX ) {
      System.out.println( MessageFormat.format( "shift: {0} ({1})", lapg_syms[lapg_n.lexem], lexer.current() ) );
    }
    if( lapg_m[lapg_head].state != -1 && lapg_n.lexem != 0 ) {
      lapg_n = lexer.next();
    }
  }

  @SuppressWarnings("unchecked")
  private void reduce(int rule) {
    LapgSymbol lapg_gg = new LapgSymbol();
    lapg_gg.sym = (lapg_rlen[rule]!=0)?lapg_m[lapg_head+1-lapg_rlen[rule]].sym:null;
    lapg_gg.lexem = lapg_rlex[rule];
    lapg_gg.state = 0;
    if( DEBUG_SYNTAX ) {
      System.out.println( "reduce to " + lapg_syms[lapg_rlex[rule]] );
    }
    lapg_gg.pos = (lapg_rlen[rule]!=0)?lapg_m[lapg_head+1-lapg_rlen[rule]].pos:lapg_n.pos;
    lapg_gg.endpos = (lapg_rlen[rule]!=0)?lapg_m[lapg_head].endpos:lapg_n.pos;
    switch( rule ) {
      case 24// literal ::= Licon
         lapg_gg.sym = new Node(); break;
        break;
      case 25// literal ::= Lfcon
         lapg_gg.sym = new Node(); break;
        break;
      case 26// literal ::= Lccon
         lapg_gg.sym = new Node(); break;
        break;
      case 27// literal ::= Lscon
         lapg_gg.sym = new Node(lapg_m[lapg_head-0].pos.line); break;
        break;
      case 28// literal ::= Ltrue
         lapg_gg.sym = new Node(); break;
        break;
      case 29// literal ::= Lfalse
         lapg_gg.sym = new Node(); break;
        break;
      case 30// literal ::= Lnull
         lapg_gg.sym = new Node(); break;
        break;
      case 33// ID ::= identifier
         lapg_gg.sym = new Node( Kind.Identifier, null, null, null ); break;
        break;
      case 76// primary_expression_na ::= Lthis
         lapg_gg.sym = new Node(); break;
        break;
      case 77// primary_expression_na ::= Lbase '.' ID
         lapg_gg.sym = new Node(); break;
        break;
      case 78// primary_expression_na ::= Lbase '[' expression_list ']'
         lapg_gg.sym = new Node(); break;
        break;
      case 79// primary_expression_na ::= Ltypeof '(' type ')'
         lapg_gg.sym = new Node(); break;
        break;
      case 80// primary_expression_na ::= Lchecked '(' expression ')'
         lapg_gg.sym = new Node(); break;
        break;
      case 81// primary_expression_na ::= Lunchecked '(' expression ')'
         lapg_gg.sym = new Node(); break;
        break;
      case 82// primary_expression_na ::= Lsizeof '(' type ')'
         lapg_gg.sym = new Node(); break;
        break;
      case 83// primary_expression_na ::= primary_expression '++'
         lapg_gg.sym = new Node(); break;
        break;
      case 84// primary_expression_na ::= primary_expression '--'
         lapg_gg.sym = new Node(); break;
        break;
      case 85// primary_expression_na ::= primary_expression '->' ID
         lapg_gg.sym = new Node(); break;
        break;
      case 86// primary_expression_na ::= primary_expression '.' ID
         lapg_gg.sym = new Node( Kind.Dot, ((Node)lapg_m[lapg_head-2].sym), null, null ); break;
        break;
      case 87// primary_expression_na ::= builtin_types '.' ID
         lapg_gg.sym = new Node( Kind.TypeDot, null, null, null ); break;
        break;
      case 90// primary_expression_na ::= primary_expression '(' argument_listopt ')'
         lapg_gg.sym = new Node(); break;
        break;
      case 91// primary_expression_na ::= primary_expression_na '[' expression_list ']'
         lapg_gg.sym = new Node(); break;
        break;
      case 92// primary_expression_na ::= primary_expression_na rank_specifier
         lapg_gg.sym = new Node( Kind.DimmedExpr, null, null, ((Node)lapg_gg.sym) ); break;
        break;
      case 93// primary_expression_na ::= object_or_delegate_creation_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 98// new_array_expression ::= Lnew non_array_type '[' expression_list ']' rank_specifiersopt array_initializeropt
         lapg_gg.sym = new Node(); break;
        break;
      case 99// new_array_expression ::= Lnew array_type array_initializer
         lapg_gg.sym = new Node(); break;
        break;
      case 100// object_or_delegate_creation_expression ::= Lnew type '(' argument_listopt ')'
         lapg_gg.sym = new Node(); break;
        break;
      case 102// unary_expression ::= '+' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 103// unary_expression ::= '-' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 104// unary_expression ::= '!' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 105// unary_expression ::= '~' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 106// unary_expression ::= '++' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 107// unary_expression ::= '--' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 109// parenthesized ::= '(' expression ')'
         lapg_gg.sym = ((Node)lapg_m[lapg_head-1].sym);
    // HACK to resolve Cast ambiguity
    if( CastExpr(((Node)lapg_m[lapg_head-1].sym),lapg_n) ) {
      // perform reduce
      for( int e = lapg_rlen[lapg_i]; e > 0; e-- ) lapg_m[lapg_head--].sym = null;
      lapg_m[++lapg_head] = lapg_gg;
      lapg_m[lapg_head].state = lapg_state_sym( lapg_m[lapg_head-1].state, lapg_gg.lexem );
      if( lapg_m[lapg_head].state != -1 ) {
        // shift cast_token (if possible)
        lapg_gg.lexem = (int)Tokens.cast_token;
        lapg_gg.sym = null;
        lapg_gg.state = lapg_state_sym( lapg_m[lapg_head].state, lapg_gg.lexem );
        lapg_gg.pos = lapg_gg.endpos = lapg_n.pos;
        if( lapg_gg.state != -1 )
          lapg_m[++lapg_head] = lapg_gg;
      }
      // skip default reduce code
      continue;
    }
    break;
        break;
      case 110// cast_expression ::= parenthesized cast_token unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 111// cast_expression ::= '(' cast_type ')' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 113// multiplicative_expression ::= multiplicative_expression '*' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 114// multiplicative_expression ::= multiplicative_expression '/' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 115// multiplicative_expression ::= multiplicative_expression '%' unary_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 117// additive_expression ::= additive_expression '+' multiplicative_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 118// additive_expression ::= additive_expression '-' multiplicative_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 120// shift_expression ::= shift_expression '<<' additive_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 121// shift_expression ::= shift_expression '>>' additive_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 123// relational_expression ::= relational_expression '<' shift_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 124// relational_expression ::= relational_expression '>' shift_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 125// relational_expression ::= relational_expression '<=' shift_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 126// relational_expression ::= relational_expression '>=' shift_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 127// relational_expression ::= relational_expression Lis type
         lapg_gg.sym = new Node(); break;
        break;
      case 128// relational_expression ::= relational_expression Las type
         lapg_gg.sym = new Node(); break;
        break;
      case 130// equality_expression ::= equality_expression '==' relational_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 131// equality_expression ::= equality_expression '!=' relational_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 133// and_expression ::= and_expression '&' equality_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 135// exclusive_or_expression ::= exclusive_or_expression '^' and_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 137// inclusive_or_expression ::= inclusive_or_expression '|' exclusive_or_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 139// conditional_and_expression ::= conditional_and_expression '&&' inclusive_or_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 141// conditional_or_expression ::= conditional_or_expression '||' conditional_and_expression
         lapg_gg.sym = new Node(); break;
        break;
      case 143// conditional_expression ::= conditional_or_expression '?' expression ':' expression
         lapg_gg.sym = new Node(); break;
        break;
      case 144// assignment ::= unary_expression assignment_operator expression
         lapg_gg.sym = new Node(); break;
        break;
    }
    for( int e = lapg_rlen[rule]; e > 0; e-- ) {
      lapg_m[lapg_head--] = null;
    }
    lapg_m[++lapg_head] = lapg_gg;
    lapg_m[lapg_head].state = lapg_state_sym(lapg_m[lapg_head-1].state, lapg_gg.lexem);
  }
}
TOP

Related Classes of CSharpProcessor.pparser$Node

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.