/* Generated By:JJTree&JavaCC: Do not edit this line. DDLParserTokenManager.java */
/*******************************************************************************
 * Copyright (c) 2011 Oracle. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Mike Norman - June 10 2011, created DDL parser package
 ******************************************************************************/
package org.eclipse.persistence.tools.oracleddl.parser;
//javase imports
import java.io.InputStream;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
//metadata imports
import org.eclipse.persistence.tools.oracleddl.metadata.ArgumentType;
import org.eclipse.persistence.tools.oracleddl.metadata.ArgumentTypeDirection;
import org.eclipse.persistence.tools.oracleddl.metadata.BlobType;
import org.eclipse.persistence.tools.oracleddl.metadata.CharType;
import org.eclipse.persistence.tools.oracleddl.metadata.ClobType;
import org.eclipse.persistence.tools.oracleddl.metadata.CompositeDatabaseType;
import org.eclipse.persistence.tools.oracleddl.metadata.DatabaseType;
import org.eclipse.persistence.tools.oracleddl.metadata.DecimalType;
import org.eclipse.persistence.tools.oracleddl.metadata.DoubleType;
import org.eclipse.persistence.tools.oracleddl.metadata.FieldType;
import org.eclipse.persistence.tools.oracleddl.metadata.FloatType;
import org.eclipse.persistence.tools.oracleddl.metadata.FunctionType;
import org.eclipse.persistence.tools.oracleddl.metadata.IntervalDayToSecond;
import org.eclipse.persistence.tools.oracleddl.metadata.IntervalYearToMonth;
import org.eclipse.persistence.tools.oracleddl.metadata.LongType;
import org.eclipse.persistence.tools.oracleddl.metadata.LongRawType;
import org.eclipse.persistence.tools.oracleddl.metadata.NCharType;
import org.eclipse.persistence.tools.oracleddl.metadata.NClobType;
import org.eclipse.persistence.tools.oracleddl.metadata.NumericType;
import org.eclipse.persistence.tools.oracleddl.metadata.NVarChar2Type;
import org.eclipse.persistence.tools.oracleddl.metadata.ObjectType;
import org.eclipse.persistence.tools.oracleddl.metadata.ObjectTableType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLCollectionType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLCursorType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLPackageType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLRecordType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLSubType;
import org.eclipse.persistence.tools.oracleddl.metadata.ProcedureType;
import org.eclipse.persistence.tools.oracleddl.metadata.RawType;
import org.eclipse.persistence.tools.oracleddl.metadata.RealType;
import org.eclipse.persistence.tools.oracleddl.metadata.ROWTYPEType;
import org.eclipse.persistence.tools.oracleddl.metadata.TableType;
import org.eclipse.persistence.tools.oracleddl.metadata.TimeStampType;
import org.eclipse.persistence.tools.oracleddl.metadata.TYPEType;
import org.eclipse.persistence.tools.oracleddl.metadata.URowIdType;
import org.eclipse.persistence.tools.oracleddl.metadata.UnresolvedSizedType;
import org.eclipse.persistence.tools.oracleddl.metadata.UnresolvedType;
import org.eclipse.persistence.tools.oracleddl.metadata.VarCharType;
import org.eclipse.persistence.tools.oracleddl.metadata.VarChar2Type;
import org.eclipse.persistence.tools.oracleddl.metadata.VArrayType;
import org.eclipse.persistence.tools.oracleddl.util.DatabaseTypesRepository;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BFILE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_FLOAT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_DOUBLE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BOOLEAN_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.DATE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.MLSLABEL_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.NATURAL_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.PLS_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.POSITIVE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.ROWID_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIGN_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIMPLE_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIMPLE_DOUBLE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIMPLE_FLOAT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SMALLINT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SYS_REFCURSOR_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.TIME_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.XMLTYPE_TYPE;

/** Token Manager. */
@SuppressWarnings("all")
public class DDLParserTokenManager implements DDLParserConstants
{

  /** Debug output. */
  public  java.io.PrintStream debugStream = System.out;
  /** Set debug output. */
  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
private int jjStopAtPos(int pos, int kind)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   return pos + 1;
}
private int jjMoveStringLiteralDfa0_0()
{
   switch(curChar)
   {
      case 9:
         jjmatchedKind = 2;
         return jjMoveNfa_0(5, 0);
      case 10:
         jjmatchedKind = 3;
         return jjMoveNfa_0(5, 0);
      case 12:
         jjmatchedKind = 5;
         return jjMoveNfa_0(5, 0);
      case 13:
         jjmatchedKind = 4;
         return jjMoveNfa_0(5, 0);
      case 32:
         jjmatchedKind = 1;
         return jjMoveNfa_0(5, 0);
      case 33:
         return jjMoveStringLiteralDfa1_0(0x8000000L, 0x0L, 0x0L, 0x0L);
      case 35:
         jjmatchedKind = 30;
         return jjMoveNfa_0(5, 0);
      case 36:
         jjmatchedKind = 17;
         return jjMoveNfa_0(5, 0);
      case 37:
         jjmatchedKind = 18;
         return jjMoveStringLiteralDfa1_0(0x8060000000000L, 0x0L, 0x0L, 0x0L);
      case 40:
         jjmatchedKind = 28;
         return jjMoveStringLiteralDfa1_0(0x400000L, 0x0L, 0x0L, 0x0L);
      case 41:
         jjmatchedKind = 11;
         return jjMoveNfa_0(5, 0);
      case 42:
         jjmatchedKind = 9;
         return jjMoveNfa_0(5, 0);
      case 43:
         jjmatchedKind = 29;
         return jjMoveNfa_0(5, 0);
      case 44:
         jjmatchedKind = 14;
         return jjMoveNfa_0(5, 0);
      case 45:
         jjmatchedKind = 25;
         return jjMoveNfa_0(5, 0);
      case 46:
         jjmatchedKind = 15;
         return jjMoveStringLiteralDfa1_0(0x10000L, 0x0L, 0x0L, 0x0L);
      case 47:
         jjmatchedKind = 33;
         return jjMoveNfa_0(5, 0);
      case 58:
         jjmatchedKind = 13;
         return jjMoveStringLiteralDfa1_0(0x100L, 0x0L, 0x0L, 0x0L);
      case 59:
         jjmatchedKind = 32;
         return jjMoveNfa_0(5, 0);
      case 60:
         jjmatchedKind = 23;
         return jjMoveStringLiteralDfa1_0(0x5000000L, 0x0L, 0x0L, 0x0L);
      case 61:
         jjmatchedKind = 19;
         return jjMoveNfa_0(5, 0);
      case 62:
         jjmatchedKind = 20;
         return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L, 0x0L, 0x0L);
      case 63:
         jjmatchedKind = 31;
         return jjMoveNfa_0(5, 0);
      case 64:
         jjmatchedKind = 10;
         return jjMoveNfa_0(5, 0);
      case 65:
         return jjMoveStringLiteralDfa1_0(0x798000000000L, 0x0L, 0x3L, 0x0L);
      case 66:
         return jjMoveStringLiteralDfa1_0(0x3800000000000L, 0x0L, 0x1fcL, 0x0L);
      case 67:
         return jjMoveStringLiteralDfa1_0(0x7ff4000000000000L, 0x0L, 0xfe00L, 0x0L);
      case 68:
         return jjMoveStringLiteralDfa1_0(0x8000000000000000L, 0xfL, 0xff0000L, 0x0L);
      case 69:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xf0L, 0x1000000L, 0x0L);
      case 70:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xf00L, 0xe000000L, 0x0L);
      case 71:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7000L, 0x10000000L, 0x0L);
      case 72:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x8000L, 0x0L, 0x0L);
      case 73:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1ff0000L, 0x1e0000000L, 0x0L);
      case 75:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x200000000L, 0x0L);
      case 76:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x6000000L, 0xc00000000L, 0x0L);
      case 77:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x18000000L, 0x3000000000L, 0x0L);
      case 78:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1e0000000L, 0x7fc000000000L, 0x0L);
      case 79:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7e00000000L, 0xf800000000000L, 0x0L);
      case 80:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x38000000000L, 0xff0000000000000L, 0x0L);
      case 82:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xc0000000000L, 0xf000000000000000L, 0x7fL);
      case 83:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3f00000000000L, 0x0L, 0x401ff80L);
      case 84:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7c000000000000L, 0x0L, 0xe0000L);
      case 85:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x380000000000000L, 0x0L, 0x100000L);
      case 86:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1c00000000000000L, 0x0L, 0x1e00000L);
      case 87:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xe000000000000000L, 0x0L, 0x0L);
      case 88:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x2000000L);
      case 89:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x8000000L);
      case 90:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x10000000L);
      case 97:
         return jjMoveStringLiteralDfa1_0(0x798000000000L, 0x0L, 0x3L, 0x0L);
      case 98:
         return jjMoveStringLiteralDfa1_0(0x3800000000000L, 0x0L, 0x1fcL, 0x0L);
      case 99:
         return jjMoveStringLiteralDfa1_0(0x7ff4000000000000L, 0x0L, 0xfe00L, 0x0L);
      case 100:
         return jjMoveStringLiteralDfa1_0(0x8000000000000000L, 0xfL, 0xff0000L, 0x0L);
      case 101:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xf0L, 0x1000000L, 0x0L);
      case 102:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xf00L, 0xe000000L, 0x0L);
      case 103:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7000L, 0x10000000L, 0x0L);
      case 104:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x8000L, 0x0L, 0x0L);
      case 105:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1ff0000L, 0x1e0000000L, 0x0L);
      case 107:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x200000000L, 0x0L);
      case 108:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x6000000L, 0xc00000000L, 0x0L);
      case 109:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x18000000L, 0x3000000000L, 0x0L);
      case 110:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1e0000000L, 0x7fc000000000L, 0x0L);
      case 111:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7e00000000L, 0xf800000000000L, 0x0L);
      case 112:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x38000000000L, 0xff0000000000000L, 0x0L);
      case 114:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xc0000000000L, 0xf000000000000000L, 0x7fL);
      case 115:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3f00000000000L, 0x0L, 0x401ff80L);
      case 116:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7c000000000000L, 0x0L, 0xe0000L);
      case 117:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x380000000000000L, 0x0L, 0x100000L);
      case 118:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1c00000000000000L, 0x0L, 0x1e00000L);
      case 119:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xe000000000000000L, 0x0L, 0x0L);
      case 120:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x2000000L);
      case 121:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x8000000L);
      case 122:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x10000000L);
      case 124:
         return jjMoveStringLiteralDfa1_0(0x1000L, 0x0L, 0x0L, 0x0L);
      case 126:
         jjmatchedKind = 34;
         return jjMoveNfa_0(5, 0);
      default :
         return jjMoveNfa_0(5, 0);
   }
}
private int jjMoveStringLiteralDfa1_0(long active0, long active1, long active2, long active3)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 0);
   }
   switch(curChar)
   {
      case 43:
         return jjMoveStringLiteralDfa2_0(active0, 0x400000L, active1, 0L, active2, 0L, active3, 0L);
      case 46:
         if ((active0 & 0x10000L) != 0L)
         {
            jjmatchedKind = 16;
            jjmatchedPos = 1;
         }
         break;
      case 61:
         if ((active0 & 0x100L) != 0L)
         {
            jjmatchedKind = 8;
            jjmatchedPos = 1;
         }
         else if ((active0 & 0x200000L) != 0L)
         {
            jjmatchedKind = 21;
            jjmatchedPos = 1;
         }
         else if ((active0 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 24;
            jjmatchedPos = 1;
         }
         else if ((active0 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 27;
            jjmatchedPos = 1;
         }
         break;
      case 62:
         if ((active0 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 26;
            jjmatchedPos = 1;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0x40c000000008000L, active2, 0x303000c000030000L, active3, 0x1e00000L);
      case 66:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x800000000000L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000L, active1, 0L, active2, 0x30000000000L, active3, 0L);
      case 68:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x10000L, active2, 0L, active3, 0L);
      case 69:
         return jjMoveStringLiteralDfa2_0(active0, 0x8001800000000000L, active1, 0x1c0000000103L, active2, 0xc0000002007c0000L, active3, 0x802039fL);
      case 70:
         if ((active1 & 0x20000L) != 0L)
         {
            jjmatchedKind = 81;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 97;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4L, active3, 0L);
      case 72:
         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0x6010200000000000L, active2, 0x600L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x980040000a000004L, active2, 0x41000002000038L, active3, 0xc3c00L);
      case 76:
         return jjMoveStringLiteralDfa2_0(active0, 0x60018000000000L, active1, 0x10L, active2, 0x80001014000840L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x2004000L);
      case 78:
         if ((active1 & 0x40000L) != 0L)
         {
            jjmatchedKind = 82;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 98;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x80000000000L, active1, 0x180000000f80020L, active2, 0x1e1000000L, active3, 0L);
      case 79:
         if ((active1 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 117;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0xf80000000000000L, active1, 0xf4001200L, active2, 0x100042c08807080L, active3, 0x10000060L);
      case 80:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000800000000L, active2, 0L, active3, 0L);
      case 81:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x800000000000L, active2, 0L, active3, 0L);
      case 82:
         if ((active1 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 100;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x3000020000000000L, active1, 0x1a000006408L, active2, 0xe02000000000001L, active3, 0x100000L);
      case 83:
         if ((active0 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 44;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 88;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 84:
         if ((active0 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 46;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0x1000000000000L, active2, 0L, active3, 0x8000L);
      case 85:
         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000000L, active1, 0x2020100000800L, active2, 0x4180000008002L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4000000000L, active2, 0x8600000000000L, active3, 0L);
      case 88:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0xc0L, active2, 0L, active3, 0L);
      case 89:
         if ((active0 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 49;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000000000L, active2, 0x100L, active3, 0x4010000L);
      case 97:
         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0x40c000000008000L, active2, 0x303000c000030000L, active3, 0x1e00000L);
      case 98:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x800000000000L, active3, 0L);
      case 99:
         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000L, active1, 0L, active2, 0x30000000000L, active3, 0L);
      case 100:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x10000L, active2, 0L, active3, 0L);
      case 101:
         return jjMoveStringLiteralDfa2_0(active0, 0x8001800000000000L, active1, 0x1c0000000103L, active2, 0xc0000002007c0000L, active3, 0x802039fL);
      case 102:
         if ((active1 & 0x20000L) != 0L)
         {
            jjmatchedKind = 81;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 97;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4L, active3, 0L);
      case 104:
         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0x6010200000000000L, active2, 0x600L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x980040000a000004L, active2, 0x41000002000038L, active3, 0xc3c00L);
      case 108:
         return jjMoveStringLiteralDfa2_0(active0, 0x60018000000000L, active1, 0x10L, active2, 0x80001014000840L, active3, 0L);
      case 109:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x2004000L);
      case 110:
         if ((active1 & 0x40000L) != 0L)
         {
            jjmatchedKind = 82;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 98;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x80000000000L, active1, 0x180000000f80020L, active2, 0x1e1000000L, active3, 0L);
      case 111:
         if ((active1 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 117;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0xf80000000000000L, active1, 0xf4001200L, active2, 0x100042c08807080L, active3, 0x10000060L);
      case 112:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000800000000L, active2, 0L, active3, 0L);
      case 113:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x800000000000L, active2, 0L, active3, 0L);
      case 114:
         if ((active1 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 100;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x3000020000000000L, active1, 0x1a000006408L, active2, 0xe02000000000001L, active3, 0x100000L);
      case 115:
         if ((active0 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 44;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 88;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 116:
         if ((active0 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 46;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0x1000000000000L, active2, 0L, active3, 0x8000L);
      case 117:
         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000000L, active1, 0x2020100000800L, active2, 0x4180000008002L, active3, 0L);
      case 118:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4000000000L, active2, 0x8600000000000L, active3, 0L);
      case 120:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0xc0L, active2, 0L, active3, 0L);
      case 121:
         if ((active0 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 49;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000000000L, active2, 0x100L, active3, 0x4010000L);
      case 124:
         if ((active0 & 0x1000L) != 0L)
         {
            jjmatchedKind = 12;
            jjmatchedPos = 1;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 1);
}
private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 1);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 1);
   }
   switch(curChar)
   {
      case 41:
         if ((active0 & 0x400000L) != 0L)
         {
            jjmatchedKind = 22;
            jjmatchedPos = 2;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa3_0(active0, 0x1000000000000000L, active1, 0x1200000002000L, active2, 0x4200600001000600L, active3, 0x8004000L);
      case 66:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0xe020000000000L, active2, 0L, active3, 0L);
      case 67:
         if ((active0 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 45;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x40000L) != 0L)
         {
            jjmatchedKind = 146;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000000L, active1, 0x240000c0L, active2, 0x8010040400080000L, active3, 0x80L);
      case 68:
         if ((active0 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x20L) != 0L)
         {
            jjmatchedKind = 69;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 176;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200002010180000L, active2, 0L, active3, 0L);
      case 69:
         return jjMoveStringLiteralDfa3_0(active0, 0x2010000000000000L, active1, 0x7810004000010000L, active2, 0xc08000000000000L, active3, 0L);
      case 70:
         if ((active3 & 0x1L) != 0L)
         {
            jjmatchedKind = 192;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x1L, active2, 0x100000L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L, active1, 0L, active2, 0x2000000000000L, active3, 0x400L);
      case 72:
         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0L, active2, 0x10000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x180008000000000L, active2, 0x4L, active3, 0L);
      case 74:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x800000000000L, active3, 0L);
      case 75:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2000000L, active2, 0L, active3, 0L);
      case 76:
         if ((active0 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 39;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 111;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x180000000000000L, active1, 0x400100100000000L, active2, 0x20000200000L, active3, 0x2000100L);
      case 77:
         return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0L, active2, 0x180000001000L, active3, 0xe3800L);
      case 78:
         return jjMoveStringLiteralDfa3_0(active0, 0xc00000000000000L, active1, 0x8000800L, active2, 0x1000002802006038L, active3, 0x10000000L);
      case 79:
         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x10000004408L, active2, 0x140008c0L, active3, 0x100000L);
      case 80:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40000000000000L, active2, 0x40000000000000L, active3, 0x2L);
      case 82:
         if ((active1 & 0x200L) != 0L)
         {
            jjmatchedKind = 73;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000000L, active1, 0L, active2, 0x20000008008001L, active3, 0x1e08000L);
      case 83:
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0x40000200016L, active2, 0x180001020000000L, active3, 0x401000cL);
      case 84:
         if ((active1 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 94;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 158;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 178;
            jjmatchedPos = 2;
         }
         else if ((active3 & 0x200L) != 0L)
         {
            jjmatchedKind = 201;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000000L, active1, 0x8000000800c01100L, active2, 0xc180410102L, active3, 0x10L);
      case 85:
         return jjMoveStringLiteralDfa3_0(active0, 0x60000000000000L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x80000008000L, active2, 0L, active3, 0L);
      case 87:
         if ((active2 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 189;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x80000000L, active2, 0L, active3, 0x60L);
      case 89:
         if ((active2 & 0x20000L) != 0L)
         {
            jjmatchedKind = 145;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 161;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 90:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400000000000L, active2, 0L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa3_0(active0, 0x1000000000000000L, active1, 0x1200000002000L, active2, 0x4200600001000600L, active3, 0x8004000L);
      case 98:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0xe020000000000L, active2, 0L, active3, 0L);
      case 99:
         if ((active0 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 45;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x40000L) != 0L)
         {
            jjmatchedKind = 146;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000000L, active1, 0x240000c0L, active2, 0x8010040400080000L, active3, 0x80L);
      case 100:
         if ((active0 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x20L) != 0L)
         {
            jjmatchedKind = 69;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 176;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200002010180000L, active2, 0L, active3, 0L);
      case 101:
         return jjMoveStringLiteralDfa3_0(active0, 0x2010000000000000L, active1, 0x7810004000010000L, active2, 0xc08000000000000L, active3, 0L);
      case 102:
         if ((active3 & 0x1L) != 0L)
         {
            jjmatchedKind = 192;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x1L, active2, 0x100000L, active3, 0L);
      case 103:
         return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L, active1, 0L, active2, 0x2000000000000L, active3, 0x400L);
      case 104:
         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000L, active1, 0L, active2, 0x10000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x180008000000000L, active2, 0x4L, active3, 0L);
      case 106:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x800000000000L, active3, 0L);
      case 107:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x2000000L, active2, 0L, active3, 0L);
      case 108:
         if ((active0 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 39;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 111;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x180000000000000L, active1, 0x400100100000000L, active2, 0x20000200000L, active3, 0x2000100L);
      case 109:
         return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0L, active2, 0x180000001000L, active3, 0xe3800L);
      case 110:
         return jjMoveStringLiteralDfa3_0(active0, 0xc00000000000000L, active1, 0x8000800L, active2, 0x1000002802006038L, active3, 0x10000000L);
      case 111:
         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L, active1, 0x10000004408L, active2, 0x140008c0L, active3, 0x100000L);
      case 112:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x40000000000000L, active2, 0x40000000000000L, active3, 0x2L);
      case 114:
         if ((active1 & 0x200L) != 0L)
         {
            jjmatchedKind = 73;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000000L, active1, 0L, active2, 0x20000008008001L, active3, 0x1e08000L);
      case 115:
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0x40000200016L, active2, 0x180001020000000L, active3, 0x401000cL);
      case 116:
         if ((active1 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 94;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x40000000L) != 0L)
         {
            jjmatchedKind = 158;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 178;
            jjmatchedPos = 2;
         }
         else if ((active3 & 0x200L) != 0L)
         {
            jjmatchedKind = 201;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000000L, active1, 0x8000000800c01100L, active2, 0xc180410102L, active3, 0x10L);
      case 117:
         return jjMoveStringLiteralDfa3_0(active0, 0x60000000000000L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 118:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x80000008000L, active2, 0L, active3, 0L);
      case 119:
         if ((active2 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 189;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x80000000L, active2, 0L, active3, 0x60L);
      case 121:
         if ((active2 & 0x20000L) != 0L)
         {
            jjmatchedKind = 145;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 161;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 122:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x400000000000L, active2, 0L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 2);
}
private int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 2);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 2);
   }
   switch(curChar)
   {
      case 46:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 65:
         return jjMoveStringLiteralDfa4_0(active0, 0x2088000000000000L, active1, 0x204000080000001L, active2, 0x22010406000039L, active3, 0L);
      case 66:
         if ((active2 & 0x40L) != 0L)
         {
            jjmatchedKind = 134;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x800L) != 0L)
         {
            jjmatchedKind = 139;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x80011800000L, active3, 0L);
      case 67:
         if ((active1 & 0x2L) != 0L)
         {
            jjmatchedKind = 65;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L, active1, 0x10000000900L, active2, 0x400000008000000L, active3, 0x600000L);
      case 69:
         if ((active0 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 50;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x10L) != 0L)
         {
            jjmatchedKind = 68;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 89;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 92;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 110;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 118;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x100L) != 0L)
         {
            jjmatchedKind = 136;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x10000L) != 0L)
         {
            jjmatchedKind = 144;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x40000L) != 0L)
         {
            jjmatchedKind = 210;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 220;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x102000780040L, active2, 0x40900180600000L, active3, 0x80000L);
      case 70:
         if ((active3 & 0x100L) != 0L)
         {
            jjmatchedKind = 200;
            jjmatchedPos = 3;
         }
         break;
      case 71:
         if ((active2 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 163;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x1200000000000000L, active3, 0L);
      case 72:
         if ((active1 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 127;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x2L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa4_0(active0, 0x800000000000L, active1, 0x800008000L, active2, 0x100004000180000L, active3, 0x8020L);
      case 75:
         if ((active1 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 90;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 76:
         if ((active1 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 96;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 190;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000000L, active1, 0x8020000000080L, active2, 0x1000000084L, active3, 0x4002L);
      case 77:
         if ((active1 & 0x400L) != 0L)
         {
            jjmatchedKind = 74;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x8000000000L, active2, 0x1000L, active3, 0L);
      case 78:
         if ((active1 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 116;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 125;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x400000000000000L, active1, 0x12000L, active2, 0L, active3, 0x400L);
      case 79:
         if ((active1 & 0x1000L) != 0L)
         {
            jjmatchedKind = 76;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x800000L) != 0L)
         {
            jjmatchedKind = 87;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800c0020000000L, active2, 0x8000060000000000L, active3, 0x80L);
      case 80:
         if ((active1 & 0x8L) != 0L)
         {
            jjmatchedKind = 67;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x200040000000000L, active1, 0L, active2, 0L, active3, 0x23800L);
      case 81:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000000000000L, active2, 0L, active3, 0L);
      case 82:
         if ((active2 & 0x200L) != 0L)
         {
            jjmatchedKind = 137;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 219;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x4001204000000000L, active2, 0x8600000008400L, active3, 0x800000L);
      case 83:
         if ((active3 & 0x40L) != 0L)
         {
            jjmatchedKind = 198;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x5860000000000000L, active1, 0L, active2, 0x800000000006000L, active3, 0L);
      case 84:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x2000000000004L, active2, 0x2020000000L, active3, 0x2000000L);
      case 85:
         return jjMoveStringLiteralDfa4_0(active0, 0x100000000000000L, active1, 0x400000008004000L, active2, 0x8000000000L, active3, 0x1cL);
      case 87:
         if ((active1 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 123;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x1020000000000L, active1, 0x1000000000000000L, active2, 0L, active3, 0x100000L);
      case 89:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x1000000L);
      case 95:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x80000000000000L, active3, 0x10000L);
      case 97:
         return jjMoveStringLiteralDfa4_0(active0, 0x2088000000000000L, active1, 0x204000080000001L, active2, 0x22010406000039L, active3, 0L);
      case 98:
         if ((active2 & 0x40L) != 0L)
         {
            jjmatchedKind = 134;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x800L) != 0L)
         {
            jjmatchedKind = 139;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x80011800000L, active3, 0L);
      case 99:
         if ((active1 & 0x2L) != 0L)
         {
            jjmatchedKind = 65;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L, active1, 0x10000000900L, active2, 0x400000008000000L, active3, 0x600000L);
      case 101:
         if ((active0 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 50;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x10L) != 0L)
         {
            jjmatchedKind = 68;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 89;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 92;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 110;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 118;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x100L) != 0L)
         {
            jjmatchedKind = 136;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x10000L) != 0L)
         {
            jjmatchedKind = 144;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x40000L) != 0L)
         {
            jjmatchedKind = 210;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 220;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L, active1, 0x102000780040L, active2, 0x40900180600000L, active3, 0x80000L);
      case 102:
         if ((active3 & 0x100L) != 0L)
         {
            jjmatchedKind = 200;
            jjmatchedPos = 3;
         }
         break;
      case 103:
         if ((active2 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 163;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x1200000000000000L, active3, 0L);
      case 104:
         if ((active1 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 127;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x2L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa4_0(active0, 0x800000000000L, active1, 0x800008000L, active2, 0x100004000180000L, active3, 0x8020L);
      case 107:
         if ((active1 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 90;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 108:
         if ((active1 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 96;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 190;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000000L, active1, 0x8020000000080L, active2, 0x1000000084L, active3, 0x4002L);
      case 109:
         if ((active1 & 0x400L) != 0L)
         {
            jjmatchedKind = 74;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x8000000000L, active2, 0x1000L, active3, 0L);
      case 110:
         if ((active1 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 116;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 125;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x400000000000000L, active1, 0x12000L, active2, 0L, active3, 0x400L);
      case 111:
         if ((active1 & 0x1000L) != 0L)
         {
            jjmatchedKind = 76;
            jjmatchedPos = 3;
         }
         else if ((active1 & 0x800000L) != 0L)
         {
            jjmatchedKind = 87;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800c0020000000L, active2, 0x8000060000000000L, active3, 0x80L);
      case 112:
         if ((active1 & 0x8L) != 0L)
         {
            jjmatchedKind = 67;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x200040000000000L, active1, 0L, active2, 0L, active3, 0x23800L);
      case 113:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x100000000000000L, active2, 0L, active3, 0L);
      case 114:
         if ((active2 & 0x200L) != 0L)
         {
            jjmatchedKind = 137;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 219;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x4001204000000000L, active2, 0x8600000008400L, active3, 0x800000L);
      case 115:
         if ((active3 & 0x40L) != 0L)
         {
            jjmatchedKind = 198;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x5860000000000000L, active1, 0L, active2, 0x800000000006000L, active3, 0L);
      case 116:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x2000000000004L, active2, 0x2020000000L, active3, 0x2000000L);
      case 117:
         return jjMoveStringLiteralDfa4_0(active0, 0x100000000000000L, active1, 0x400000008004000L, active2, 0x8000000000L, active3, 0x1cL);
      case 119:
         if ((active1 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 123;
            jjmatchedPos = 3;
         }
         return jjMoveStringLiteralDfa4_0(active0, 0x1020000000000L, active1, 0x1000000000000000L, active2, 0L, active3, 0x100000L);
      case 121:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x1000000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 3);
}
private int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 3);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x8000000000L, active2, 0x10001030000400L, active3, 0x800002L);
      case 66:
         if ((active2 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 169;
            jjmatchedPos = 4;
         }
         break;
      case 67:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000000000L, active2, 0xe00000000000L, active3, 0L);
      case 68:
         if ((active3 & 0x20L) != 0L)
         {
            jjmatchedKind = 197;
            jjmatchedPos = 4;
         }
         break;
      case 69:
         if ((active0 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 42;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 109;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 126;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x4L) != 0L)
         {
            jjmatchedKind = 130;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 155;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 188;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x401000000000000L, active1, 0x400010000000000L, active2, 0x800080000008080L, active3, 0L);
      case 70:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x8000000000000L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x80000000L, active3, 0L);
      case 72:
         if ((active0 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 60;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x100L) != 0L)
         {
            jjmatchedKind = 72;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 165;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x600000L);
      case 73:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x20080000004L, active2, 0x480000000001002L, active3, 0x1100000L);
      case 75:
         if ((active0 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 52;
            jjmatchedPos = 4;
         }
         break;
      case 76:
         if ((active2 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 153;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 162;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x84000000000L, active2, 0x60000001800000L, active3, 0x780cL);
      case 77:
         return jjMoveStringLiteralDfa5_0(active0, 0x100000000000000L, active1, 0x20000000L, active2, 0x200000000080000L, active3, 0L);
      case 78:
         if ((active0 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 47;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 119;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000L, active2, 0x2000000100000L, active3, 0x8080L);
      case 79:
         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000000L, active1, 0x800000000L, active2, 0x4000000000L, active3, 0x20000L);
      case 80:
         if ((active1 & 0x4000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40L, active2, 0x40000000000L, active3, 0L);
      case 82:
         if ((active0 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 40;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 101;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 168;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x208000000000000L, active1, 0x600000L, active2, 0x8000108100400038L, active3, 0x10010L);
      case 83:
         if ((active1 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 91;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 124;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x80000L);
      case 84:
         if ((active1 & 0x2000L) != 0L)
         {
            jjmatchedKind = 77;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 112;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 154;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x2860020000000000L, active1, 0x200000000010800L, active2, 0x100000000206000L, active3, 0x400L);
      case 85:
         return jjMoveStringLiteralDfa5_0(active0, 0x80000000000000L, active1, 0x104040000000081L, active2, 0L, active3, 0L);
      case 88:
         if ((active1 & 0x80000L) != 0L)
         {
            jjmatchedKind = 83;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000L, active2, 0L, active3, 0x4000000L);
      case 89:
         if ((active2 & 0x1L) != 0L)
         {
            jjmatchedKind = 128;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000000000000L, active2, 0L, active3, 0x2000000L);
      case 97:
         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000000000L, active1, 0x8000000000L, active2, 0x10001030000400L, active3, 0x800002L);
      case 98:
         if ((active2 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 169;
            jjmatchedPos = 4;
         }
         break;
      case 99:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000000000L, active2, 0xe00000000000L, active3, 0L);
      case 100:
         if ((active3 & 0x20L) != 0L)
         {
            jjmatchedKind = 197;
            jjmatchedPos = 4;
         }
         break;
      case 101:
         if ((active0 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 42;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 109;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 126;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x4L) != 0L)
         {
            jjmatchedKind = 130;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 155;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 188;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x401000000000000L, active1, 0x400010000000000L, active2, 0x800080000008080L, active3, 0L);
      case 102:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x8000000000000L, active3, 0L);
      case 103:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x80000000L, active3, 0L);
      case 104:
         if ((active0 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 60;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x100L) != 0L)
         {
            jjmatchedKind = 72;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 165;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x600000L);
      case 105:
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x20080000004L, active2, 0x480000000001002L, active3, 0x1100000L);
      case 107:
         if ((active0 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 52;
            jjmatchedPos = 4;
         }
         break;
      case 108:
         if ((active2 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 153;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x400000000L) != 0L)
         {
            jjmatchedKind = 162;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x84000000000L, active2, 0x60000001800000L, active3, 0x780cL);
      case 109:
         return jjMoveStringLiteralDfa5_0(active0, 0x100000000000000L, active1, 0x20000000L, active2, 0x200000000080000L, active3, 0L);
      case 110:
         if ((active0 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 47;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 119;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x8000L, active2, 0x2000000100000L, active3, 0x8080L);
      case 111:
         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000000L, active1, 0x800000000L, active2, 0x4000000000L, active3, 0x20000L);
      case 112:
         if ((active1 & 0x4000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x40L, active2, 0x40000000000L, active3, 0L);
      case 114:
         if ((active0 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 40;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 101;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 168;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x208000000000000L, active1, 0x600000L, active2, 0x8000108100400038L, active3, 0x10010L);
      case 115:
         if ((active1 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 91;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 124;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x80000L);
      case 116:
         if ((active1 & 0x2000L) != 0L)
         {
            jjmatchedKind = 77;
            jjmatchedPos = 4;
         }
         else if ((active1 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 112;
            jjmatchedPos = 4;
         }
         else if ((active2 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 154;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x2860020000000000L, active1, 0x200000000010800L, active2, 0x100000000206000L, active3, 0x400L);
      case 117:
         return jjMoveStringLiteralDfa5_0(active0, 0x80000000000000L, active1, 0x104040000000081L, active2, 0L, active3, 0L);
      case 120:
         if ((active1 & 0x80000L) != 0L)
         {
            jjmatchedKind = 83;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x100000L, active2, 0L, active3, 0x4000000L);
      case 121:
         if ((active2 & 0x1L) != 0L)
         {
            jjmatchedKind = 128;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000000000000L, active2, 0L, active3, 0x2000000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 4);
}
private int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 4);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 4);
   }
   switch(curChar)
   {
      case 65:
         if ((active2 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 185;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000L, active2, 0x8000082080L, active3, 0x600000L);
      case 66:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x1000000000L, active3, 0L);
      case 67:
         if ((active1 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 105;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000000L, active1, 0L, active2, 0x400L, active3, 0x2L);
      case 68:
         if ((active2 & 0x2L) != 0L)
         {
            jjmatchedKind = 129;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 191;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x80L) != 0L)
         {
            jjmatchedKind = 199;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x100000L) != 0L)
         {
            jjmatchedKind = 212;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10000000000L, active2, 0L, active3, 0L);
      case 69:
         if ((active0 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 61;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 107;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 120;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 121;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x200000L) != 0L)
         {
            jjmatchedKind = 149;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x800000L) != 0L)
         {
            jjmatchedKind = 151;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 152;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x261000000000000L, active1, 0x100000L, active2, 0x80100000L, active3, 0x13800L);
      case 71:
         if ((active1 & 0x8000L) != 0L)
         {
            jjmatchedKind = 79;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x8000L) != 0L)
         {
            jjmatchedKind = 207;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 72:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x600000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10800L, active2, 0x142100000000000L, active3, 0x4000L);
      case 76:
         if ((active2 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 156;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1L, active2, 0x28000000000000L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x400000L, active3, 0x4000000L);
      case 78:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 99;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x10L) != 0L)
         {
            jjmatchedKind = 196;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x100000000000000L, active1, 0x4L, active2, 0x80004020008000L, active3, 0x1000000L);
      case 80:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2000020000000L, active2, 0L, active3, 0x2000000L);
      case 82:
         if ((active0 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 62;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 171;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x8800000000000000L, active1, 0x48000000000L, active2, 0x800000000004000L, active3, 0x20000L);
      case 83:
         if ((active1 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 122;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000L, active1, 0x400080L, active2, 0x400000000000000L, active3, 0L);
      case 84:
         if ((active1 & 0x200000L) != 0L)
         {
            jjmatchedKind = 85;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 95;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 108;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x1000L) != 0L)
         {
            jjmatchedKind = 140;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 175;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x4L) != 0L)
         {
            jjmatchedKind = 194;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0x4000000000040L, active2, 0L, active3, 0x80008L);
      case 86:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x100000000L, active3, 0L);
      case 89:
         if ((active2 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 170;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x800000L) != 0L)
         {
            jjmatchedKind = 215;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000L, active1, 0L, active2, 0x38L, active3, 0x400L);
      case 97:
         if ((active2 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 185;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4000000000L, active2, 0x8000082080L, active3, 0x600000L);
      case 98:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x1000000000L, active3, 0L);
      case 99:
         if ((active1 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 105;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x400000000000000L, active1, 0L, active2, 0x400L, active3, 0x2L);
      case 100:
         if ((active2 & 0x2L) != 0L)
         {
            jjmatchedKind = 129;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 191;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x80L) != 0L)
         {
            jjmatchedKind = 199;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x100000L) != 0L)
         {
            jjmatchedKind = 212;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10000000000L, active2, 0L, active3, 0L);
      case 101:
         if ((active0 & 0x2000000000000000L) != 0L)
         {
            jjmatchedKind = 61;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 107;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 120;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 121;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x200000L) != 0L)
         {
            jjmatchedKind = 149;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x800000L) != 0L)
         {
            jjmatchedKind = 151;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 152;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x261000000000000L, active1, 0x100000L, active2, 0x80100000L, active3, 0x13800L);
      case 103:
         if ((active1 & 0x8000L) != 0L)
         {
            jjmatchedKind = 79;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x8000L) != 0L)
         {
            jjmatchedKind = 207;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      case 104:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x600000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x10800L, active2, 0x142100000000000L, active3, 0x4000L);
      case 108:
         if ((active2 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 156;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1L, active2, 0x28000000000000L, active3, 0L);
      case 109:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x400000L, active3, 0x4000000L);
      case 110:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 99;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x10L) != 0L)
         {
            jjmatchedKind = 196;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x100000000000000L, active1, 0x4L, active2, 0x80004020008000L, active3, 0x1000000L);
      case 112:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2000020000000L, active2, 0L, active3, 0x2000000L);
      case 114:
         if ((active0 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 62;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 171;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x8800000000000000L, active1, 0x48000000000L, active2, 0x800000000004000L, active3, 0x20000L);
      case 115:
         if ((active1 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 122;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000L, active1, 0x400080L, active2, 0x400000000000000L, active3, 0L);
      case 116:
         if ((active1 & 0x200000L) != 0L)
         {
            jjmatchedKind = 85;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 95;
            jjmatchedPos = 5;
         }
         else if ((active1 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 108;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x1000L) != 0L)
         {
            jjmatchedKind = 140;
            jjmatchedPos = 5;
         }
         else if ((active2 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 175;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x4L) != 0L)
         {
            jjmatchedKind = 194;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0x4000000000040L, active2, 0L, active3, 0x80008L);
      case 118:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x100000000L, active3, 0L);
      case 121:
         if ((active2 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 170;
            jjmatchedPos = 5;
         }
         else if ((active3 & 0x800000L) != 0L)
         {
            jjmatchedKind = 215;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x20000000000L, active1, 0L, active2, 0x38L, active3, 0x400L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 5);
}
private int jjMoveStringLiteralDfa6_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 5);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 5);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa7_0(active0, 0x800000000000000L, active1, 0L, active2, 0x604100000000L, active3, 0xa0000L);
      case 67:
         if ((active2 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 172;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40000000004L, active2, 0L, active3, 0L);
      case 69:
         if ((active0 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 63;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 113;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 180;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x2L) != 0L)
         {
            jjmatchedKind = 193;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 217;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000L, active1, 0x400000L, active2, 0x20001000000000L, active3, 0L);
      case 70:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000L, active2, 0L, active3, 0x10000L);
      case 71:
         if ((active3 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 216;
            jjmatchedPos = 6;
         }
         break;
      case 72:
         if ((active0 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 55;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 114;
            jjmatchedPos = 6;
         }
         break;
      case 73:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0xc0L, active2, 0x400000000400000L, active3, 0L);
      case 76:
         if ((active2 & 0x80000L) != 0L)
         {
            jjmatchedKind = 147;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 167;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 78:
         if ((active0 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 48;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80L) != 0L)
         {
            jjmatchedKind = 135;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x40000000002000L, active3, 0x4000L);
      case 79:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800L, active2, 0x8000000000000L, active3, 0L);
      case 80:
         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000L, active1, 0x4000000000L, active2, 0L, active3, 0x400L);
      case 82:
         if ((active0 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 54;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x100000L) != 0L)
         {
            jjmatchedKind = 148;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 159;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x400000L) != 0L)
         {
            jjmatchedKind = 214;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000000L, active1, 0x20000000L, active2, 0L, active3, 0x200000L);
      case 83:
         if ((active0 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 56;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x100000L) != 0L)
         {
            jjmatchedKind = 84;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x200000000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 84:
         if ((active0 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 58;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x1L) != 0L)
         {
            jjmatchedKind = 64;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x80000020008400L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000000000L, active2, 0x4000L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x900000000000000L, active3, 0L);
      case 89:
         if ((active1 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 103;
            jjmatchedPos = 6;
         }
         break;
      case 90:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x2000000000000L, active3, 0L);
      case 95:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x38L, active3, 0x3808L);
      case 97:
         return jjMoveStringLiteralDfa7_0(active0, 0x800000000000000L, active1, 0L, active2, 0x604100000000L, active3, 0xa0000L);
      case 99:
         if ((active2 & 0x100000000000L) != 0L)
         {
            jjmatchedKind = 172;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40000000004L, active2, 0L, active3, 0L);
      case 101:
         if ((active0 & 0x8000000000000000L) != 0L)
         {
            jjmatchedKind = 63;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 113;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 180;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x2L) != 0L)
         {
            jjmatchedKind = 193;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 217;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000L, active1, 0x400000L, active2, 0x20001000000000L, active3, 0L);
      case 102:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000L, active2, 0L, active3, 0x10000L);
      case 103:
         if ((active3 & 0x1000000L) != 0L)
         {
            jjmatchedKind = 216;
            jjmatchedPos = 6;
         }
         break;
      case 104:
         if ((active0 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 55;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x4000000000000L) != 0L)
         {
            jjmatchedKind = 114;
            jjmatchedPos = 6;
         }
         break;
      case 105:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0xc0L, active2, 0x400000000400000L, active3, 0L);
      case 108:
         if ((active2 & 0x80000L) != 0L)
         {
            jjmatchedKind = 147;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 167;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 110:
         if ((active0 & 0x1000000000000L) != 0L)
         {
            jjmatchedKind = 48;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80L) != 0L)
         {
            jjmatchedKind = 135;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x40000000002000L, active3, 0x4000L);
      case 111:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800L, active2, 0x8000000000000L, active3, 0L);
      case 112:
         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000L, active1, 0x4000000000L, active2, 0L, active3, 0x400L);
      case 114:
         if ((active0 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 54;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x100000L) != 0L)
         {
            jjmatchedKind = 148;
            jjmatchedPos = 6;
         }
         else if ((active2 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 159;
            jjmatchedPos = 6;
         }
         else if ((active3 & 0x400000L) != 0L)
         {
            jjmatchedKind = 214;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x20000000000000L, active1, 0x20000000L, active2, 0L, active3, 0x200000L);
      case 115:
         if ((active0 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 56;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x100000L) != 0L)
         {
            jjmatchedKind = 84;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0x200000000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 116:
         if ((active0 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 58;
            jjmatchedPos = 6;
         }
         else if ((active1 & 0x1L) != 0L)
         {
            jjmatchedKind = 64;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x80000020008400L, active3, 0L);
      case 117:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x10000000000L, active2, 0x4000L, active3, 0L);
      case 118:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x900000000000000L, active3, 0L);
      case 121:
         if ((active1 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 103;
            jjmatchedPos = 6;
         }
         break;
      case 122:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x2000000000000L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 6);
}
private int jjMoveStringLiteralDfa7_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 6);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 6);
   }
   switch(curChar)
   {
      case 50:
         if ((active3 & 0x200000L) != 0L)
         {
            jjmatchedKind = 213;
            jjmatchedPos = 7;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x2000000000000L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x400000L, active2, 0x4000L, active3, 0x10008L);
      case 68:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x800L);
      case 69:
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 41;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 106;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 184;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 187;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x400L) != 0L)
         {
            jjmatchedKind = 202;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x20000000L, active2, 0xc0000000000400L, active3, 0L);
      case 70:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x10L, active3, 0x1000L);
      case 73:
         return jjMoveStringLiteralDfa8_0(active0, 0x800000000000000L, active1, 0x10000L, active2, 0x20000020L, active3, 0x2000L);
      case 76:
         if ((active2 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 160;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 164;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 166;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x20000000000000L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x80000L);
      case 78:
         if ((active1 & 0x800L) != 0L)
         {
            jjmatchedKind = 75;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x400000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x40L, active2, 0x400000000000000L, active3, 0L);
      case 82:
         if ((active2 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 174;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10000000000L, active2, 0x200000000000L, active3, 0x20000L);
      case 83:
         if ((active0 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 53;
            jjmatchedPos = 7;
         }
         else if ((active0 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 57;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 102;
            jjmatchedPos = 7;
         }
         break;
      case 84:
         if ((active0 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 51;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x4L) != 0L)
         {
            jjmatchedKind = 66;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x2000L) != 0L)
         {
            jjmatchedKind = 141;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x4000L) != 0L)
         {
            jjmatchedKind = 206;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 86:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x80L, active2, 0L, active3, 0L);
      case 87:
         if ((active2 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 179;
            jjmatchedPos = 7;
         }
         break;
      case 95:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x8000L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x2000000000000L, active3, 0L);
      case 99:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x400000L, active2, 0x4000L, active3, 0x10008L);
      case 100:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x800L);
      case 101:
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 41;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 106;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 184;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 187;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x400L) != 0L)
         {
            jjmatchedKind = 202;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x20000000L, active2, 0xc0000000000400L, active3, 0L);
      case 102:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x10L, active3, 0x1000L);
      case 105:
         return jjMoveStringLiteralDfa8_0(active0, 0x800000000000000L, active1, 0x10000L, active2, 0x20000020L, active3, 0x2000L);
      case 108:
         if ((active2 & 0x100000000L) != 0L)
         {
            jjmatchedKind = 160;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 164;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 166;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x20000000000000L, active3, 0L);
      case 109:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x80000L);
      case 110:
         if ((active1 & 0x800L) != 0L)
         {
            jjmatchedKind = 75;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x400000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x40L, active2, 0x400000000000000L, active3, 0L);
      case 114:
         if ((active2 & 0x400000000000L) != 0L)
         {
            jjmatchedKind = 174;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x10000000000L, active2, 0x200000000000L, active3, 0x20000L);
      case 115:
         if ((active0 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 53;
            jjmatchedPos = 7;
         }
         else if ((active0 & 0x200000000000000L) != 0L)
         {
            jjmatchedKind = 57;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 102;
            jjmatchedPos = 7;
         }
         break;
      case 116:
         if ((active0 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 51;
            jjmatchedPos = 7;
         }
         else if ((active1 & 0x4L) != 0L)
         {
            jjmatchedKind = 66;
            jjmatchedPos = 7;
         }
         else if ((active2 & 0x2000L) != 0L)
         {
            jjmatchedKind = 141;
            jjmatchedPos = 7;
         }
         else if ((active3 & 0x4000L) != 0L)
         {
            jjmatchedKind = 206;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 118:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x80L, active2, 0L, active3, 0L);
      case 119:
         if ((active2 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 179;
            jjmatchedPos = 7;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 7);
}
private int jjMoveStringLiteralDfa8_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 7);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 7);
   }
   switch(curChar)
   {
      case 50:
         if ((active2 & 0x200000000000L) != 0L)
         {
            jjmatchedKind = 173;
            jjmatchedPos = 8;
         }
         break;
      case 65:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x20000000L, active3, 0x8L);
      case 68:
         if ((active2 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 182;
            jjmatchedPos = 8;
         }
         break;
      case 69:
         if ((active1 & 0x80L) != 0L)
         {
            jjmatchedKind = 71;
            jjmatchedPos = 8;
         }
         else if ((active1 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 104;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x10000L, active2, 0L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x80000000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x400000L, active3, 0L);
      case 76:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x10L, active3, 0x1000L);
      case 78:
         if ((active1 & 0x40L) != 0L)
         {
            jjmatchedKind = 70;
            jjmatchedPos = 8;
         }
         else if ((active2 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 186;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0x800000000000000L, active1, 0L, active2, 0x20L, active3, 0x2000L);
      case 79:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x800L);
      case 80:
         if ((active3 & 0x80000L) != 0L)
         {
            jjmatchedKind = 211;
            jjmatchedPos = 8;
         }
         break;
      case 82:
         if ((active2 & 0x400L) != 0L)
         {
            jjmatchedKind = 138;
            jjmatchedPos = 8;
         }
         break;
      case 83:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x20000000L, active2, 0L, active3, 0L);
      case 84:
         if ((active1 & 0x400000L) != 0L)
         {
            jjmatchedKind = 86;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x2000000004000L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x8000L, active3, 0x10000L);
      case 89:
         if ((active3 & 0x20000L) != 0L)
         {
            jjmatchedKind = 209;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 95:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x20000000000000L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x20000000L, active3, 0x8L);
      case 100:
         if ((active2 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 182;
            jjmatchedPos = 8;
         }
         break;
      case 101:
         if ((active1 & 0x80L) != 0L)
         {
            jjmatchedKind = 71;
            jjmatchedPos = 8;
         }
         else if ((active1 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 104;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x10000L, active2, 0L, active3, 0L);
      case 103:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x80000000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x400000L, active3, 0L);
      case 108:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x10L, active3, 0x1000L);
      case 110:
         if ((active1 & 0x40L) != 0L)
         {
            jjmatchedKind = 70;
            jjmatchedPos = 8;
         }
         else if ((active2 & 0x400000000000000L) != 0L)
         {
            jjmatchedKind = 186;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0x800000000000000L, active1, 0L, active2, 0x20L, active3, 0x2000L);
      case 111:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x800L);
      case 112:
         if ((active3 & 0x80000L) != 0L)
         {
            jjmatchedKind = 211;
            jjmatchedPos = 8;
         }
         break;
      case 114:
         if ((active2 & 0x400L) != 0L)
         {
            jjmatchedKind = 138;
            jjmatchedPos = 8;
         }
         break;
      case 115:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x20000000L, active2, 0L, active3, 0L);
      case 116:
         if ((active1 & 0x400000L) != 0L)
         {
            jjmatchedKind = 86;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x2000000004000L, active3, 0L);
      case 117:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x8000L, active3, 0x10000L);
      case 121:
         if ((active3 & 0x20000L) != 0L)
         {
            jjmatchedKind = 209;
            jjmatchedPos = 8;
         }
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 8);
}
private int jjMoveStringLiteralDfa9_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 8);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 8);
   }
   switch(curChar)
   {
      case 66:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x20000000L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x8L);
      case 68:
         if ((active1 & 0x10000L) != 0L)
         {
            jjmatchedKind = 80;
            jjmatchedPos = 9;
         }
         break;
      case 69:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0xa0000000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x2000000000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x4010L, active3, 0x1000L);
      case 80:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 82:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x10000L);
      case 83:
         if ((active1 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 93;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x408000L, active3, 0L);
      case 84:
         if ((active0 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 59;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x20L, active3, 0x2000L);
      case 85:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x800L);
      case 98:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x20000000L, active3, 0L);
      case 99:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x8L);
      case 100:
         if ((active1 & 0x10000L) != 0L)
         {
            jjmatchedKind = 80;
            jjmatchedPos = 9;
         }
         break;
      case 101:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0xa0000000000000L, active3, 0L);
      case 105:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x2000000000000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x4010L, active3, 0x1000L);
      case 112:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x4000000L);
      case 114:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x10000L);
      case 115:
         if ((active1 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 93;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x408000L, active3, 0L);
      case 116:
         if ((active0 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 59;
            jjmatchedPos = 9;
         }
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x20L, active3, 0x2000L);
      case 117:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0x800L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 9);
}
private int jjMoveStringLiteralDfa10_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 9);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 9);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa11_0(active2, 0x10L, active3, 0x1000L);
      case 66:
         return jjMoveStringLiteralDfa11_0(active2, 0x8L, active3, 0x800L);
      case 69:
         if ((active3 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 218;
            jjmatchedPos = 10;
         }
         return jjMoveStringLiteralDfa11_0(active2, 0x8020L, active3, 0x2000L);
      case 72:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x8L);
      case 76:
         return jjMoveStringLiteralDfa11_0(active2, 0x20000000L, active3, 0L);
      case 78:
         return jjMoveStringLiteralDfa11_0(active2, 0x20000000000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa11_0(active2, 0x2000000000000L, active3, 0L);
      case 82:
         if ((active2 & 0x4000L) != 0L)
         {
            jjmatchedKind = 142;
            jjmatchedPos = 10;
         }
         else if ((active2 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 183;
            jjmatchedPos = 10;
         }
         break;
      case 83:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x10000L);
      case 84:
         return jjMoveStringLiteralDfa11_0(active2, 0x400000L, active3, 0L);
      case 97:
         return jjMoveStringLiteralDfa11_0(active2, 0x10L, active3, 0x1000L);
      case 98:
         return jjMoveStringLiteralDfa11_0(active2, 0x8L, active3, 0x800L);
      case 101:
         if ((active3 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 218;
            jjmatchedPos = 10;
         }
         return jjMoveStringLiteralDfa11_0(active2, 0x8020L, active3, 0x2000L);
      case 104:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x8L);
      case 108:
         return jjMoveStringLiteralDfa11_0(active2, 0x20000000L, active3, 0L);
      case 110:
         return jjMoveStringLiteralDfa11_0(active2, 0x20000000000000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa11_0(active2, 0x2000000000000L, active3, 0L);
      case 114:
         if ((active2 & 0x4000L) != 0L)
         {
            jjmatchedKind = 142;
            jjmatchedPos = 10;
         }
         else if ((active2 & 0x80000000000000L) != 0L)
         {
            jjmatchedKind = 183;
            jjmatchedPos = 10;
         }
         break;
      case 115:
         return jjMoveStringLiteralDfa11_0(active2, 0L, active3, 0x10000L);
      case 116:
         return jjMoveStringLiteralDfa11_0(active2, 0x400000L, active3, 0L);
      default :
         break;
   }
   return jjMoveNfa_0(5, 10);
}
private int jjMoveStringLiteralDfa11_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 10);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 10);
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa12_0(active2, 0x20000000000000L, active3, 0L);
      case 69:
         if ((active2 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 157;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x8L) != 0L)
         {
            jjmatchedKind = 195;
            jjmatchedPos = 11;
         }
         break;
      case 71:
         return jjMoveStringLiteralDfa12_0(active2, 0x20L, active3, 0x2000L);
      case 73:
         return jjMoveStringLiteralDfa12_0(active2, 0x400000L, active3, 0L);
      case 76:
         return jjMoveStringLiteralDfa12_0(active2, 0x8L, active3, 0x800L);
      case 78:
         if ((active2 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 177;
            jjmatchedPos = 11;
         }
         break;
      case 79:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x10000L);
      case 82:
         if ((active2 & 0x8000L) != 0L)
         {
            jjmatchedKind = 143;
            jjmatchedPos = 11;
         }
         break;
      case 84:
         if ((active2 & 0x10L) != 0L)
         {
            jjmatchedKind = 132;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x1000L) != 0L)
         {
            jjmatchedKind = 204;
            jjmatchedPos = 11;
         }
         break;
      case 97:
         return jjMoveStringLiteralDfa12_0(active2, 0x20000000000000L, active3, 0L);
      case 101:
         if ((active2 & 0x20000000L) != 0L)
         {
            jjmatchedKind = 157;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x8L) != 0L)
         {
            jjmatchedKind = 195;
            jjmatchedPos = 11;
         }
         break;
      case 103:
         return jjMoveStringLiteralDfa12_0(active2, 0x20L, active3, 0x2000L);
      case 105:
         return jjMoveStringLiteralDfa12_0(active2, 0x400000L, active3, 0L);
      case 108:
         return jjMoveStringLiteralDfa12_0(active2, 0x8L, active3, 0x800L);
      case 110:
         if ((active2 & 0x2000000000000L) != 0L)
         {
            jjmatchedKind = 177;
            jjmatchedPos = 11;
         }
         break;
      case 111:
         return jjMoveStringLiteralDfa12_0(active2, 0L, active3, 0x10000L);
      case 114:
         if ((active2 & 0x8000L) != 0L)
         {
            jjmatchedKind = 143;
            jjmatchedPos = 11;
         }
         break;
      case 116:
         if ((active2 & 0x10L) != 0L)
         {
            jjmatchedKind = 132;
            jjmatchedPos = 11;
         }
         else if ((active3 & 0x1000L) != 0L)
         {
            jjmatchedKind = 204;
            jjmatchedPos = 11;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 11);
}
private int jjMoveStringLiteralDfa12_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 11);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 11);
   }
   switch(curChar)
   {
      case 66:
         return jjMoveStringLiteralDfa13_0(active2, 0x20000000000000L, active3, 0L);
      case 67:
         if ((active2 & 0x400000L) != 0L)
         {
            jjmatchedKind = 150;
            jjmatchedPos = 12;
         }
         break;
      case 69:
         if ((active2 & 0x8L) != 0L)
         {
            jjmatchedKind = 131;
            jjmatchedPos = 12;
         }
         else if ((active3 & 0x800L) != 0L)
         {
            jjmatchedKind = 203;
            jjmatchedPos = 12;
         }
         return jjMoveStringLiteralDfa13_0(active2, 0x20L, active3, 0x2000L);
      case 82:
         if ((active3 & 0x10000L) != 0L)
         {
            jjmatchedKind = 208;
            jjmatchedPos = 12;
         }
         break;
      case 98:
         return jjMoveStringLiteralDfa13_0(active2, 0x20000000000000L, active3, 0L);
      case 99:
         if ((active2 & 0x400000L) != 0L)
         {
            jjmatchedKind = 150;
            jjmatchedPos = 12;
         }
         break;
      case 101:
         if ((active2 & 0x8L) != 0L)
         {
            jjmatchedKind = 131;
            jjmatchedPos = 12;
         }
         else if ((active3 & 0x800L) != 0L)
         {
            jjmatchedKind = 203;
            jjmatchedPos = 12;
         }
         return jjMoveStringLiteralDfa13_0(active2, 0x20L, active3, 0x2000L);
      case 114:
         if ((active3 & 0x10000L) != 0L)
         {
            jjmatchedKind = 208;
            jjmatchedPos = 12;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 12);
}
private int jjMoveStringLiteralDfa13_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 12);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 12);
   }
   switch(curChar)
   {
      case 76:
         return jjMoveStringLiteralDfa14_0(active2, 0x20000000000000L, active3, 0L);
      case 82:
         if ((active2 & 0x20L) != 0L)
         {
            jjmatchedKind = 133;
            jjmatchedPos = 13;
         }
         else if ((active3 & 0x2000L) != 0L)
         {
            jjmatchedKind = 205;
            jjmatchedPos = 13;
         }
         break;
      case 108:
         return jjMoveStringLiteralDfa14_0(active2, 0x20000000000000L, active3, 0L);
      case 114:
         if ((active2 & 0x20L) != 0L)
         {
            jjmatchedKind = 133;
            jjmatchedPos = 13;
         }
         else if ((active3 & 0x2000L) != 0L)
         {
            jjmatchedKind = 205;
            jjmatchedPos = 13;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 13);
}
private int jjMoveStringLiteralDfa14_0(long old2, long active2, long old3, long active3)
{
   if (((active2 &= old2) | (active3 &= old3)) == 0L)
      return jjMoveNfa_0(5, 13);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
   return jjMoveNfa_0(5, 13);
   }
   switch(curChar)
   {
      case 69:
         if ((active2 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 181;
            jjmatchedPos = 14;
         }
         break;
      case 101:
         if ((active2 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 181;
            jjmatchedPos = 14;
         }
         break;
      default :
         break;
   }
   return jjMoveNfa_0(5, 14);
}
static final long[] jjbitVec0 = {
   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
};
static final long[] jjbitVec2 = {
   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
};
private int jjMoveNfa_0(int startState, int curPos)
{
   int strKind = jjmatchedKind;
   int strPos = jjmatchedPos;
   int seenUpto;
   input_stream.backup(seenUpto = curPos + 1);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { throw new Error("Internal Error"); }
   curPos = 0;
   int startsAt = 0;
   jjnewStateCnt = 71;
   int i = 1;
   jjstateSet[0] = startState;
   int kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         do
         {
            switch(jjstateSet[--i])
            {
               case 5:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 35)
                        kind = 35;
                     jjCheckNAddStates(0, 6);
                  }
                  else if (curChar == 46)
                     jjCheckNAddTwoStates(51, 61);
                  else if (curChar == 34)
                     jjCheckNAddTwoStates(48, 49);
                  else if (curChar == 39)
                     jjCheckNAddTwoStates(43, 44);
                  else if (curChar == 58)
                     jjAddStates(7, 9);
                  else if (curChar == 47)
                     jjstateSet[jjnewStateCnt++] = 6;
                  else if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 0:
                  if (curChar == 45)
                     jjCheckNAddStates(10, 12);
                  break;
               case 1:
                  if ((0xffffffffffffdbffL & l) != 0L)
                     jjCheckNAddStates(10, 12);
                  break;
               case 2:
                  if ((0x2400L & l) != 0L && kind > 6)
                     kind = 6;
                  break;
               case 3:
                  if (curChar == 10 && kind > 6)
                     kind = 6;
                  break;
               case 4:
                  if (curChar == 13)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 6:
                  if (curChar == 42)
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 7:
                  if ((0xfffffbffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 8:
                  if (curChar == 42)
                     jjCheckNAddStates(13, 15);
                  break;
               case 9:
                  if ((0xffff7bffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 10:
                  if ((0xfffffbffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 11:
                  if (curChar == 47 && kind > 7)
                     kind = 7;
                  break;
               case 12:
                  if (curChar == 47)
                     jjstateSet[jjnewStateCnt++] = 6;
                  break;
               case 14:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 221)
                     kind = 221;
                  jjstateSet[jjnewStateCnt++] = 14;
                  break;
               case 15:
                  if (curChar == 58)
                     jjAddStates(7, 9);
                  break;
               case 17:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjAddStates(16, 17);
                  break;
               case 18:
                  if (curChar == 46)
                     jjstateSet[jjnewStateCnt++] = 19;
                  break;
               case 20:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjstateSet[jjnewStateCnt++] = 20;
                  break;
               case 21:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddStates(18, 24);
                  break;
               case 22:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAdd(22);
                  break;
               case 23:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddTwoStates(23, 24);
                  break;
               case 24:
                  if (curChar == 46)
                     jjCheckNAdd(25);
                  break;
               case 25:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAdd(25);
                  break;
               case 26:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddTwoStates(26, 27);
                  break;
               case 28:
                  if ((0x280000000000L & l) != 0L)
                     jjAddStates(25, 26);
                  break;
               case 29:
                  if (curChar == 46)
                     jjCheckNAdd(30);
                  break;
               case 30:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAdd(30);
                  break;
               case 31:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddStates(27, 29);
                  break;
               case 32:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAdd(32);
                  break;
               case 33:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddTwoStates(33, 34);
                  break;
               case 34:
                  if (curChar == 46)
                     jjCheckNAdd(35);
                  break;
               case 35:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAdd(35);
                  break;
               case 36:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddStates(30, 32);
                  break;
               case 37:
                  if (curChar == 46)
                     jjCheckNAdd(38);
                  break;
               case 38:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddTwoStates(38, 27);
                  break;
               case 39:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(40, 41);
                  break;
               case 40:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAdd(40);
                  break;
               case 41:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddTwoStates(41, 27);
                  break;
               case 42:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 43:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 44:
                  if (curChar != 39)
                     break;
                  if (kind > 225)
                     kind = 225;
                  jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 45:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 46:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 47:
                  if (curChar == 34)
                     jjCheckNAddTwoStates(48, 49);
                  break;
               case 48:
                  if ((0xfffffffbffffdbffL & l) != 0L)
                     jjCheckNAddTwoStates(48, 49);
                  break;
               case 49:
                  if (curChar == 34 && kind > 226)
                     kind = 226;
                  break;
               case 50:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(51, 61);
                  break;
               case 51:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(51, 52);
                  break;
               case 53:
                  if ((0x280000000000L & l) != 0L)
                     jjAddStates(33, 34);
                  break;
               case 54:
                  if (curChar == 46)
                     jjCheckNAdd(55);
                  break;
               case 55:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(55);
                  break;
               case 56:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddStates(35, 37);
                  break;
               case 57:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(57);
                  break;
               case 58:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(58, 59);
                  break;
               case 59:
                  if (curChar == 46)
                     jjCheckNAdd(60);
                  break;
               case 60:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(60);
                  break;
               case 61:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(61);
                  break;
               case 62:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddStates(0, 6);
                  break;
               case 63:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(63, 52);
                  break;
               case 64:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddStates(38, 40);
                  break;
               case 65:
                  if (curChar == 46)
                     jjCheckNAdd(66);
                  break;
               case 66:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(66, 52);
                  break;
               case 67:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAddTwoStates(67, 68);
                  break;
               case 68:
                  if (curChar == 46)
                     jjCheckNAdd(69);
                  break;
               case 69:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(69);
                  break;
               case 70:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 35)
                     kind = 35;
                  jjCheckNAdd(70);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 5:
               case 13:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 221)
                     kind = 221;
                  jjCheckNAddTwoStates(13, 14);
                  break;
               case 1:
                  jjAddStates(10, 12);
                  break;
               case 7:
                  jjCheckNAddTwoStates(7, 8);
                  break;
               case 9:
               case 10:
                  jjCheckNAddTwoStates(10, 8);
                  break;
               case 14:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 221)
                     kind = 221;
                  jjCheckNAdd(14);
                  break;
               case 16:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddStates(41, 43);
                  break;
               case 17:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddTwoStates(17, 18);
                  break;
               case 19:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAddTwoStates(19, 20);
                  break;
               case 20:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 224)
                     kind = 224;
                  jjCheckNAdd(20);
                  break;
               case 27:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(44, 46);
                  break;
               case 43:
                  jjCheckNAddTwoStates(43, 44);
                  break;
               case 46:
                  jjCheckNAddTwoStates(46, 44);
                  break;
               case 48:
                  jjAddStates(47, 48);
                  break;
               case 52:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(49, 51);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int hiByte = (int)(curChar >> 8);
         int i1 = hiByte >> 6;
         long l1 = 1L << (hiByte & 077);
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 1:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjAddStates(10, 12);
                  break;
               case 7:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 9:
               case 10:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 43:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 46:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 48:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjAddStates(47, 48);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 71 - (jjnewStateCnt = startsAt)))
         break;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { break; }
   }
   if (jjmatchedPos > strPos)
      return curPos;

   int toRet = Math.max(curPos, seenUpto);

   if (curPos < toRet)
      for (i = toRet - Math.min(curPos, seenUpto); i-- > 0; )
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { throw new Error("Internal Error : Please send a bug report."); }

   if (jjmatchedPos < strPos)
   {
      jjmatchedKind = strKind;
      jjmatchedPos = strPos;
   }
   else if (jjmatchedPos == strPos && jjmatchedKind > strKind)
      jjmatchedKind = strKind;

   return toRet;
}
static final int[] jjnextStates = {
   63, 64, 65, 52, 67, 68, 70, 16, 21, 39, 1, 2, 4, 8, 9, 11, 
   17, 18, 22, 23, 24, 26, 36, 37, 27, 29, 31, 32, 33, 34, 36, 37, 
   27, 54, 56, 57, 58, 59, 64, 65, 52, 16, 17, 18, 28, 29, 31, 48, 
   49, 53, 54, 56, 
};
private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
{
   switch(hiByte)
   {
      case 0:
         return ((jjbitVec2[i2] & l2) != 0L);
      default :
         if ((jjbitVec0[i1] & l1) != 0L)
            return true;
         return false;
   }
}

/** Token literal values. */
public static final String[] jjstrLiteralImages = {
"", null, null, null, null, null, null, null, "\72\75", "\52", "\100", "\51", 
"\174\174", "\72", "\54", "\56", "\56\56", "\44", "\45", "\75", "\76", "\76\75", 
"\50\53\51", "\74", "\74\75", "\55", "\74\76", "\41\75", "\50", "\53", "\43", "\77", "\73", 
"\57", "\176", null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, null, null, };

/** Lexer state names. */
public static final String[] lexStateNames = {
   "DEFAULT",
};
static final long[] jjtoToken = {
   0xffffff8fffffff01L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x73fffffffL, 
};
static final long[] jjtoSkip = {
   0xfeL, 0x0L, 0x0L, 0x0L, 
};
protected JavaCharStream input_stream;
private final int[] jjrounds = new int[71];
private final int[] jjstateSet = new int[142];
protected char curChar;
/** Constructor. */
public DDLParserTokenManager(JavaCharStream stream){
   if (JavaCharStream.staticFlag)
      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
   input_stream = stream;
}

/** Constructor. */
public DDLParserTokenManager(JavaCharStream stream, int lexState){
   this(stream);
   SwitchTo(lexState);
}

/** Reinitialise parser. */
public void ReInit(JavaCharStream stream)
{
   jjmatchedPos = jjnewStateCnt = 0;
   curLexState = defaultLexState;
   input_stream = stream;
   ReInitRounds();
}
private void ReInitRounds()
{
   int i;
   jjround = 0x80000001;
   for (i = 71; i-- > 0;)
      jjrounds[i] = 0x80000000;
}

/** Reinitialise parser. */
public void ReInit(JavaCharStream stream, int lexState)
{
   ReInit(stream);
   SwitchTo(lexState);
}

/** Switch to specified lex state. */
public void SwitchTo(int lexState)
{
   if (lexState >= 1 || lexState < 0)
      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
   else
      curLexState = lexState;
}

protected Token jjFillToken()
{
   final Token t;
   final String curTokenImage;
   final int beginLine;
   final int endLine;
   final int beginColumn;
   final int endColumn;
   String im = jjstrLiteralImages[jjmatchedKind];
   curTokenImage = (im == null) ? input_stream.GetImage() : im;
   beginLine = input_stream.getBeginLine();
   beginColumn = input_stream.getBeginColumn();
   endLine = input_stream.getEndLine();
   endColumn = input_stream.getEndColumn();
   t = Token.newToken(jjmatchedKind, curTokenImage);

   t.beginLine = beginLine;
   t.endLine = endLine;
   t.beginColumn = beginColumn;
   t.endColumn = endColumn;

   return t;
}

int curLexState = 0;
int defaultLexState = 0;
int jjnewStateCnt;
int jjround;
int jjmatchedPos;
int jjmatchedKind;

/** Get the next Token. */
public Token getNextToken() 
{
  Token matchedToken;
  int curPos = 0;

  EOFLoop :
  for (;;)
  {
   try
   {
      curChar = input_stream.BeginToken();
   }
   catch(java.io.IOException e)
   {
      jjmatchedKind = 0;
      matchedToken = jjFillToken();
      return matchedToken;
   }

   jjmatchedKind = 0x7fffffff;
   jjmatchedPos = 0;
   curPos = jjMoveStringLiteralDfa0_0();
   if (jjmatchedKind != 0x7fffffff)
   {
      if (jjmatchedPos + 1 < curPos)
         input_stream.backup(curPos - jjmatchedPos - 1);
      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
      {
         matchedToken = jjFillToken();
         return matchedToken;
      }
      else
      {
         continue EOFLoop;
      }
   }
   int error_line = input_stream.getEndLine();
   int error_column = input_stream.getEndColumn();
   String error_after = null;
   boolean EOFSeen = false;
   try { input_stream.readChar(); input_stream.backup(1); }
   catch (java.io.IOException e1) {
      EOFSeen = true;
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
      if (curChar == '\n' || curChar == '\r') {
         error_line++;
         error_column = 0;
      }
      else
         error_column++;
   }
   if (!EOFSeen) {
      input_stream.backup(1);
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
   }
   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
  }
}

private void jjCheckNAdd(int state)
{
   if (jjrounds[state] != jjround)
   {
      jjstateSet[jjnewStateCnt++] = state;
      jjrounds[state] = jjround;
   }
}
private void jjAddStates(int start, int end)
{
   do {
      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
   } while (start++ != end);
}
private void jjCheckNAddTwoStates(int state1, int state2)
{
   jjCheckNAdd(state1);
   jjCheckNAdd(state2);
}

private void jjCheckNAddStates(int start, int end)
{
   do {
      jjCheckNAdd(jjnextStates[start]);
   } while (start++ != end);
}

}
