/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */

package intellij.haskell.cabal.lang.lexer;

import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
import intellij.haskell.cabal.lang.psi.CabalTypes;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * This class is a scanner generated by 
 * <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
 * from the specification file <tt>_CabalParsingLexer.flex</tt>
 */
public class _CabalParsingLexer implements FlexLexer {

  /** This character denotes the end of file */
  public static final int YYEOF = -1;

  /** initial size of the lookahead buffer */
  private static final int ZZ_BUFFERSIZE = 16384;

  /** lexical states */
  public static final int YYINITIAL = 0;
  public static final int MAIN = 2;
  public static final int INDENT = 4;

  /**
   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
   *                  at the beginning of a line
   * l is of the form l = 2*k, k a non negative integer
   */
  private static final int ZZ_LEXSTATE[] = { 
     0,  0,  1,  1,  2, 2
  };

  /** 
   * Translates characters to character classes
   * Chosen bits are [7, 7, 7]
   * Total runtime size is 1672 bytes
   */
  public static int ZZ_CMAP(int ch) {
    return ZZ_CMAP_A[(ZZ_CMAP_Y[ZZ_CMAP_Z[ch>>14]|((ch>>7)&0x7f)]<<7)|(ch&0x7f)];
  }

  /* The ZZ_CMAP_Z table has 68 entries */
  static final char ZZ_CMAP_Z[] = zzUnpackCMap(
    "\1\0\103\200");

  /* The ZZ_CMAP_Y table has 256 entries */
  static final char ZZ_CMAP_Y[] = zzUnpackCMap(
    "\1\0\1\1\1\2\77\1\1\3\275\1");

  /* The ZZ_CMAP_A table has 512 entries */
  static final char ZZ_CMAP_A[] = zzUnpackCMap(
    "\11\0\1\27\1\1\1\0\1\3\1\2\22\0\1\4\1\26\4\0\1\23\1\0\1\12\1\13\1\64\1\0\1"+
    "\25\1\10\1\6\1\0\12\7\1\11\1\0\1\22\1\20\1\21\2\0\1\30\1\52\1\47\1\61\1\42"+
    "\1\43\1\45\1\37\1\35\1\62\1\57\1\44\1\50\1\55\1\46\1\51\1\63\1\40\1\32\1\36"+
    "\1\41\1\60\1\33\1\54\1\53\1\5\1\14\1\0\1\15\1\0\1\5\1\0\1\30\1\52\1\47\1\61"+
    "\1\42\1\43\1\45\1\37\1\35\1\62\1\57\1\44\1\50\1\55\1\46\1\51\1\63\1\40\1\32"+
    "\1\36\1\41\1\60\1\33\1\54\1\53\1\5\1\16\1\24\1\17\262\0\2\34\115\0\1\31\52"+
    "\0\1\56\125\0");

  /** 
   * Translates DFA states to action switch labels.
   */
  private static final int [] ZZ_ACTION = zzUnpackAction();

  private static final String ZZ_ACTION_PACKED_0 =
    "\3\0\1\1\1\2\2\1\1\3\2\4\1\2\1\5"+
    "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15"+
    "\1\16\1\17\1\3\1\20\1\21\2\3\1\22\1\23"+
    "\1\24\1\5\1\3\2\5\1\3\22\5\1\25\2\26"+
    "\2\25\2\0\1\27\1\0\1\30\1\31\1\32\1\33"+
    "\1\34\2\35\2\5\4\0\4\5\1\0\1\5\1\36"+
    "\2\0\1\36\6\5\1\0\10\5\1\0\4\5\2\37"+
    "\10\5\1\0\11\5\1\0\1\5\1\7\2\5\4\0"+
    "\4\5\1\0\1\5\3\0\3\5\1\40\1\5\1\0"+
    "\2\5\1\0\4\5\1\0\7\5\2\0\6\5\1\0"+
    "\6\5\1\0\3\5\1\0\2\5\1\0\3\5\1\41"+
    "\3\5\1\0\2\5\1\0\1\5\1\42\1\5\4\0"+
    "\4\5\2\43\1\44\2\0\1\44\2\5\1\45\1\0"+
    "\1\5\1\46\1\0\4\5\2\47\4\5\1\0\2\5"+
    "\1\50\2\0\6\5\1\0\6\5\1\0\2\5\1\0"+
    "\1\5\1\0\2\5\1\0\3\5\1\51\1\0\2\5"+
    "\1\0\2\5\1\0\2\5\4\0\4\5\2\0\2\5"+
    "\2\0\2\5\1\0\3\5\1\0\4\5\1\0\1\5"+
    "\2\52\1\5\2\0\4\5\1\0\4\5\1\0\6\5"+
    "\2\0\3\5\1\0\1\5\1\0\2\5\1\0\3\5"+
    "\1\0\2\5\1\0\2\5\1\0\1\5\1\53\1\0"+
    "\1\54\2\0\1\5\1\54\2\5\2\0\2\5\2\0"+
    "\2\5\1\0\3\5\1\0\2\5\1\0\2\5\1\0"+
    "\2\5\2\0\2\5\1\0\2\5\1\0\4\5\1\0"+
    "\3\5\1\0\3\5\2\0\2\5\1\55\1\0\1\5"+
    "\1\0\1\5\1\56\2\0\4\5\1\0\3\5\1\0"+
    "\2\5\1\0\1\5\3\0\3\5\2\0\2\5\2\0"+
    "\2\5\1\0\3\5\1\0\1\5\1\0\5\5\1\0"+
    "\2\5\2\57\1\5\1\60\1\61\1\60\1\61\1\0"+
    "\1\5\1\0\1\5\1\0\6\5\1\0\3\5\1\0"+
    "\1\5\1\0\2\5\1\62\1\0\1\62\1\5\1\0"+
    "\1\5\1\0\1\5\3\0\5\5\2\63\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\1\64\1\0\1\5\2\0"+
    "\1\65\2\5\1\65\2\0\1\66\2\5\1\66\2\0"+
    "\2\5\1\0\1\5\1\67\1\5\1\0\1\5\1\0"+
    "\2\5\1\0\3\5\1\0\2\5\1\0\2\5\1\0"+
    "\1\5\2\70\1\0\1\5\1\0\1\5\1\0\5\5"+
    "\1\0\1\5\1\71\1\5\1\0\1\5\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\1\0\1\5\1\0\1\5"+
    "\4\0\6\5\1\0\1\5\2\72\1\0\2\5\1\0"+
    "\1\5\1\73\1\0\1\73\1\5\2\0\2\5\2\0"+
    "\2\5\1\0\2\5\1\0\1\5\1\0\2\5\1\0"+
    "\3\5\1\0\2\5\1\0\1\5\1\0\1\5\1\0"+
    "\1\5\1\0\1\5\1\0\1\5\1\0\5\5\2\74"+
    "\1\5\2\75\1\0\1\5\1\0\1\5\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\3\0\1\76\3\5\1\76"+
    "\1\5\2\77\1\0\1\5\1\0\3\5\1\0\1\5"+
    "\1\0\1\5\2\0\2\5\1\100\1\0\1\100\1\5"+
    "\1\0\2\5\1\0\1\5\1\0\2\5\2\0\2\5"+
    "\1\0\2\5\2\101\1\102\1\0\1\5\2\103\1\0"+
    "\1\5\2\104\1\0\1\5\1\0\5\5\1\0\1\5"+
    "\2\105\1\0\1\5\2\106\1\0\1\5\1\0\1\5"+
    "\1\0\1\107\1\0\1\5\1\107\2\5\2\110\1\0"+
    "\3\5\2\111\1\0\1\5\2\0\2\5\2\112\1\0"+
    "\2\5\1\0\1\5\1\0\2\5\2\0\2\5\1\0"+
    "\2\5\1\0\1\5\1\0\1\5\1\0\1\5\2\113"+
    "\4\5\1\0\1\5\2\114\2\115\1\0\1\5\1\116"+
    "\1\0\1\116\1\5\2\117\2\120\2\5\1\0\1\5"+
    "\1\0\1\121\1\5\1\121\1\0\2\5\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\2\0\2\5\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\2\122\1\0\2\5\1\0"+
    "\3\5\1\0\1\5\1\0\1\5\1\0\3\5\1\0"+
    "\1\5\1\0\1\5\2\123\1\5\1\0\1\5\1\0"+
    "\1\5\1\0\1\5\2\0\2\5\1\0\1\5\1\0"+
    "\1\5\1\0\1\5\2\124\1\0\1\5\1\0\1\5"+
    "\1\0\2\5\2\125\2\126\1\0\1\5\2\127\2\5"+
    "\1\0\1\5\1\0\1\5\2\130\1\5\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\1\131\1\0\1\131\1\5"+
    "\1\0\1\5\1\0\1\5\1\0\1\5\1\0\1\5"+
    "\1\0\1\5\1\0\2\5\1\0\1\5\1\0\2\5"+
    "\1\0\1\5\1\0\2\5\1\0\1\5\1\0\1\5"+
    "\2\132\2\133\1\0\1\5\2\134\2\135\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\2\136\1\0\1\5\1\0"+
    "\2\5\1\0\1\5\2\137\1\5\1\0\1\5\1\0"+
    "\1\5\1\0\1\5\1\0\1\5\2\140\2\141\1\0"+
    "\1\5\1\0\1\5\1\142\2\143\1\5\1\0\1\5"+
    "\1\0\1\5\1\0\1\5\1\0\1\5\2\144\1\0"+
    "\1\5\2\145\1\0\1\5\2\146\1\0\1\5\2\147"+
    "\2\150\2\151\1\0\1\5\2\152";

  private static int [] zzUnpackAction() {
    int [] result = new int[992];
    int offset = 0;
    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAction(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /** 
   * Translates a state to a row index in the transition table
   */
  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();

  private static final String ZZ_ROWMAP_PACKED_0 =
    "\0\0\0\65\0\152\0\237\0\324\0\u0109\0\u013e\0\237"+
    "\0\u0173\0\u01a8\0\u01dd\0\u0212\0\237\0\u0247\0\237\0\237"+
    "\0\237\0\237\0\237\0\237\0\237\0\237\0\u027c\0\u02b1"+
    "\0\u02e6\0\u031b\0\u0350\0\237\0\237\0\u01dd\0\u0385\0\u03ba"+
    "\0\u03ef\0\u0424\0\u0459\0\u048e\0\u04c3\0\u04f8\0\u052d\0\u0562"+
    "\0\u0597\0\u05cc\0\u0601\0\u0636\0\u066b\0\u06a0\0\u06d5\0\u070a"+
    "\0\u073f\0\u0774\0\u07a9\0\u07de\0\u0813\0\237\0\237\0\u0848"+
    "\0\152\0\u013e\0\u0109\0\u013e\0\u087d\0\u08b2\0\237\0\237"+
    "\0\237\0\237\0\237\0\237\0\u0212\0\u08e7\0\u091c\0\u0951"+
    "\0\u0986\0\u09bb\0\u09f0\0\u0a25\0\u0a5a\0\u0a8f\0\u0ac4\0\u0af9"+
    "\0\u0b2e\0\237\0\u0b63\0\u0b98\0\u0212\0\u0bcd\0\u0c02\0\u0c37"+
    "\0\u0c6c\0\u0ca1\0\u0cd6\0\u0d0b\0\u0d40\0\u0d75\0\u0daa\0\u0ddf"+
    "\0\u0e14\0\u0e49\0\u0e7e\0\u0eb3\0\u0ee8\0\u0f1d\0\u0f52\0\u0f87"+
    "\0\u0fbc\0\237\0\u0212\0\u0ff1\0\u1026\0\u105b\0\u1090\0\u10c5"+
    "\0\u10fa\0\u112f\0\u1164\0\u1199\0\u11ce\0\u1203\0\u1238\0\u126d"+
    "\0\u12a2\0\u12d7\0\u130c\0\u1341\0\u1376\0\u13ab\0\u13e0\0\237"+
    "\0\u1415\0\u144a\0\u147f\0\u14b4\0\u14e9\0\u151e\0\u1553\0\u1588"+
    "\0\u15bd\0\u15f2\0\u1627\0\u165c\0\u1691\0\u16c6\0\u16fb\0\u1730"+
    "\0\u1765\0\u179a\0\u0212\0\u17cf\0\u1804\0\u1839\0\u186e\0\u18a3"+
    "\0\u18d8\0\u190d\0\u1942\0\u1977\0\u19ac\0\u19e1\0\u1a16\0\u1a4b"+
    "\0\u1a80\0\u1ab5\0\u1aea\0\u1b1f\0\u1b54\0\u1b89\0\u1bbe\0\u1bf3"+
    "\0\u1c28\0\u1c5d\0\u1c92\0\u1cc7\0\u1cfc\0\u1d31\0\u1d66\0\u1d9b"+
    "\0\u1dd0\0\u1e05\0\u1e3a\0\u1e6f\0\u1ea4\0\u1ed9\0\u1f0e\0\u1f43"+
    "\0\u1f78\0\u1fad\0\u1fe2\0\u2017\0\u204c\0\u2081\0\u20b6\0\u20eb"+
    "\0\u2120\0\u2155\0\u218a\0\u21bf\0\u21f4\0\u2229\0\u225e\0\u0212"+
    "\0\u2293\0\u22c8\0\u22fd\0\u2332\0\u2367\0\u239c\0\u23d1\0\u2406"+
    "\0\u243b\0\237\0\u0212\0\237\0\u2470\0\u24a5\0\u0212\0\u24da"+
    "\0\u250f\0\u0212\0\u2544\0\u2579\0\u0212\0\u25ae\0\u25e3\0\u2618"+
    "\0\u264d\0\u2682\0\237\0\u0212\0\u26b7\0\u26ec\0\u2721\0\u2756"+
    "\0\u278b\0\u27c0\0\u27f5\0\u0212\0\u282a\0\u285f\0\u2894\0\u28c9"+
    "\0\u28fe\0\u2933\0\u2968\0\u299d\0\u29d2\0\u2a07\0\u2a3c\0\u2a71"+
    "\0\u2aa6\0\u2adb\0\u2b10\0\u2b45\0\u2b7a\0\u2baf\0\u2be4\0\u2c19"+
    "\0\u2c4e\0\u2c83\0\u2cb8\0\u2ced\0\u2d22\0\u2d57\0\u2d8c\0\u0212"+
    "\0\u2dc1\0\u2df6\0\u2e2b\0\u2e60\0\u2e95\0\u2eca\0\u2eff\0\u2f34"+
    "\0\u2f69\0\u2f9e\0\u2fd3\0\u3008\0\u303d\0\u3072\0\u30a7\0\u30dc"+
    "\0\u3111\0\u3146\0\u317b\0\u31b0\0\u31e5\0\u321a\0\u324f\0\u3284"+
    "\0\u32b9\0\u32ee\0\u3323\0\u3358\0\u338d\0\u33c2\0\u33f7\0\u342c"+
    "\0\u3461\0\u3496\0\u34cb\0\u3500\0\237\0\u0212\0\u3535\0\u356a"+
    "\0\u359f\0\u35d4\0\u3609\0\u363e\0\u3673\0\u36a8\0\u36dd\0\u3712"+
    "\0\u3747\0\u377c\0\u37b1\0\u37e6\0\u381b\0\u3850\0\u3885\0\u38ba"+
    "\0\u38ef\0\u3924\0\u3959\0\u398e\0\u39c3\0\u39f8\0\u3a2d\0\u3a62"+
    "\0\u3a97\0\u3acc\0\u3b01\0\u3b36\0\u3b6b\0\u3ba0\0\u3bd5\0\u3c0a"+
    "\0\u3c3f\0\u3c74\0\u3ca9\0\u3cde\0\u3d13\0\u3d48\0\u3d7d\0\u0212"+
    "\0\u3db2\0\237\0\u3de7\0\u3e1c\0\u3e51\0\u0212\0\u3e86\0\u3ebb"+
    "\0\u3ef0\0\u3f25\0\u3f5a\0\u3f8f\0\u3fc4\0\u3ff9\0\u402e\0\u4063"+
    "\0\u4098\0\u40cd\0\u4102\0\u4137\0\u416c\0\u41a1\0\u41d6\0\u420b"+
    "\0\u4240\0\u4275\0\u42aa\0\u42df\0\u4314\0\u4349\0\u437e\0\u43b3"+
    "\0\u43e8\0\u441d\0\u4452\0\u4487\0\u44bc\0\u44f1\0\u4526\0\u455b"+
    "\0\u4590\0\u45c5\0\u45fa\0\u462f\0\u4664\0\u4699\0\u46ce\0\u4703"+
    "\0\u4738\0\u476d\0\u47a2\0\u47d7\0\u480c\0\u0212\0\u4841\0\u4876"+
    "\0\u48ab\0\u48e0\0\u0212\0\u4915\0\u494a\0\u497f\0\u49b4\0\u49e9"+
    "\0\u4a1e\0\u4a53\0\u4a88\0\u4abd\0\u4af2\0\u4b27\0\u4b5c\0\u4b91"+
    "\0\u4bc6\0\u4bfb\0\u4c30\0\u4c65\0\u4c9a\0\u4ccf\0\u4d04\0\u4d39"+
    "\0\u4d6e\0\u4da3\0\u4dd8\0\u4e0d\0\u4e42\0\u4e77\0\u4eac\0\u4ee1"+
    "\0\u4f16\0\u4f4b\0\u4f80\0\u4fb5\0\u4fea\0\u501f\0\u5054\0\u5089"+
    "\0\u50be\0\u50f3\0\u5128\0\u515d\0\u5192\0\u51c7\0\u51fc\0\u5231"+
    "\0\u5266\0\u529b\0\u52d0\0\237\0\u5305\0\u0212\0\u533a\0\u536f"+
    "\0\u53a4\0\u53d9\0\u540e\0\u5443\0\u5478\0\u54ad\0\u54e2\0\u5517"+
    "\0\u554c\0\u5581\0\u55b6\0\u55eb\0\u5620\0\u5655\0\u568a\0\u56bf"+
    "\0\u56f4\0\u5729\0\237\0\u575e\0\u0212\0\u5793\0\u57c8\0\u57fd"+
    "\0\u5832\0\u5867\0\u589c\0\u58d1\0\u5906\0\u593b\0\u5970\0\u59a5"+
    "\0\u59da\0\u5a0f\0\237\0\u0212\0\u5a44\0\u5a79\0\u5aae\0\u5ae3"+
    "\0\u5b18\0\u5b4d\0\u5b82\0\u5bb7\0\u5bec\0\u5c21\0\u5c56\0\237"+
    "\0\u5c8b\0\u5cc0\0\u0212\0\u5cf5\0\u5d2a\0\237\0\u5d5f\0\u5d94"+
    "\0\u0212\0\u5dc9\0\u5dfe\0\u5e33\0\u5e68\0\u5e9d\0\u5ed2\0\u0212"+
    "\0\u5f07\0\u5f3c\0\u5f71\0\u5fa6\0\u5fdb\0\u6010\0\u6045\0\u607a"+
    "\0\u60af\0\u60e4\0\u6119\0\u614e\0\u6183\0\u61b8\0\u61ed\0\u6222"+
    "\0\u6257\0\u628c\0\237\0\u0212\0\u62c1\0\u62f6\0\u632b\0\u6360"+
    "\0\u6395\0\u63ca\0\u63ff\0\u6434\0\u6469\0\u649e\0\u64d3\0\u6508"+
    "\0\u0212\0\u653d\0\u6572\0\u65a7\0\u65dc\0\u6611\0\u6646\0\u667b"+
    "\0\u66b0\0\u66e5\0\u671a\0\u674f\0\u6784\0\u67b9\0\u67ee\0\u6823"+
    "\0\u6858\0\u688d\0\u68c2\0\u68f7\0\u692c\0\u6961\0\u6996\0\u69cb"+
    "\0\u6a00\0\u6a35\0\237\0\u0212\0\u6a6a\0\u6a9f\0\u6ad4\0\u6b09"+
    "\0\u6b3e\0\237\0\u6b73\0\u0212\0\u6ba8\0\u6bdd\0\u6c12\0\u6c47"+
    "\0\u6c7c\0\u6cb1\0\u6ce6\0\u6d1b\0\u6d50\0\u6d85\0\u6dba\0\u6def"+
    "\0\u6e24\0\u6e59\0\u6e8e\0\u6ec3\0\u6ef8\0\u6f2d\0\u6f62\0\u6f97"+
    "\0\u6fcc\0\u7001\0\u7036\0\u706b\0\u70a0\0\u70d5\0\u710a\0\u713f"+
    "\0\u7174\0\u71a9\0\u71de\0\u7213\0\u7248\0\u727d\0\u72b2\0\u72e7"+
    "\0\u731c\0\u7351\0\u7386\0\u73bb\0\237\0\u0212\0\u73f0\0\237"+
    "\0\u0212\0\u7425\0\u745a\0\u748f\0\u74c4\0\u74f9\0\u752e\0\u7563"+
    "\0\u7598\0\u75cd\0\u7602\0\u7637\0\u766c\0\u76a1\0\237\0\u76d6"+
    "\0\u770b\0\u7740\0\u0212\0\u7775\0\237\0\u0212\0\u77aa\0\u77df"+
    "\0\u7814\0\u7849\0\u787e\0\u78b3\0\u78e8\0\u791d\0\u7952\0\u7987"+
    "\0\u79bc\0\u79f1\0\u7a26\0\u7a5b\0\237\0\u7a90\0\u0212\0\u7ac5"+
    "\0\u7afa\0\u7b2f\0\u7b64\0\u7b99\0\u7bce\0\u7c03\0\u7c38\0\u7c6d"+
    "\0\u7ca2\0\u7cd7\0\u7d0c\0\u7d41\0\u7d76\0\u7dab\0\u7de0\0\237"+
    "\0\u0212\0\u0212\0\u7e15\0\u7e4a\0\237\0\u0212\0\u7e7f\0\u7eb4"+
    "\0\237\0\u0212\0\u7ee9\0\u7f1e\0\u7f53\0\u7f88\0\u7fbd\0\u7ff2"+
    "\0\u8027\0\u805c\0\u8091\0\u80c6\0\237\0\u0212\0\u80fb\0\u8130"+
    "\0\237\0\u0212\0\u8165\0\u819a\0\u81cf\0\u8204\0\u8239\0\237"+
    "\0\u826e\0\u82a3\0\u0212\0\u82d8\0\u830d\0\237\0\u0212\0\u8342"+
    "\0\u8377\0\u83ac\0\u83e1\0\237\0\u0212\0\u8416\0\u844b\0\u8480"+
    "\0\u84b5\0\u84ea\0\u851f\0\237\0\u0212\0\u8554\0\u8589\0\u85be"+
    "\0\u85f3\0\u8628\0\u865d\0\u8692\0\u86c7\0\u86fc\0\u8731\0\u8766"+
    "\0\u879b\0\u87d0\0\u8805\0\u883a\0\u886f\0\u88a4\0\u88d9\0\u890e"+
    "\0\u8943\0\u8978\0\237\0\u0212\0\u89ad\0\u89e2\0\u8a17\0\u8a4c"+
    "\0\u8a81\0\u8ab6\0\237\0\u0212\0\237\0\u0212\0\u8aeb\0\u8b20"+
    "\0\237\0\u8b55\0\u0212\0\u8b8a\0\237\0\u0212\0\237\0\u0212"+
    "\0\u8bbf\0\u8bf4\0\u8c29\0\u8c5e\0\u8c93\0\237\0\u8cc8\0\u0212"+
    "\0\u8cfd\0\u8d32\0\u8d67\0\u8d9c\0\u8dd1\0\u8e06\0\u8e3b\0\u8e70"+
    "\0\u8ea5\0\u8eda\0\u8f0f\0\u8f44\0\u8f79\0\u8fae\0\u8fe3\0\u9018"+
    "\0\u904d\0\u9082\0\u90b7\0\u90ec\0\u9121\0\u9156\0\u918b\0\u91c0"+
    "\0\u91f5\0\u922a\0\u925f\0\u9294\0\u92c9\0\u92fe\0\u9333\0\u9368"+
    "\0\u939d\0\u93d2\0\u9407\0\u943c\0\u9471\0\u94a6\0\u94db\0\u9510"+
    "\0\u9545\0\u957a\0\u95af\0\u95e4\0\u9619\0\u964e\0\u9683\0\u96b8"+
    "\0\u96ed\0\u9722\0\u9757\0\u978c\0\u97c1\0\u97f6\0\u982b\0\u9860"+
    "\0\u9895\0\u98ca\0\u98ff\0\237\0\u0212\0\u9934\0\u9969\0\u999e"+
    "\0\u99d3\0\u9a08\0\u9a3d\0\u9a72\0\237\0\u0212\0\237\0\u0212"+
    "\0\u9aa7\0\u9adc\0\237\0\u0212\0\u9b11\0\u9b46\0\u9b7b\0\u9bb0"+
    "\0\u9be5\0\u9c1a\0\237\0\u0212\0\u9c4f\0\u9c84\0\u9cb9\0\u9cee"+
    "\0\u9d23\0\u9d58\0\u9d8d\0\237\0\u9dc2\0\u0212\0\u9df7\0\u9e2c"+
    "\0\u9e61\0\u9e96\0\u9ecb\0\u9f00\0\u9f35\0\u9f6a\0\u9f9f\0\u9fd4"+
    "\0\ua009\0\ua03e\0\ua073\0\ua0a8\0\ua0dd\0\ua112\0\ua147\0\ua17c"+
    "\0\ua1b1\0\ua1e6\0\ua21b\0\ua250\0\ua285\0\ua2ba\0\ua2ef\0\ua324"+
    "\0\ua359\0\ua38e\0\237\0\u0212\0\237\0\u0212\0\ua3c3\0\ua3f8"+
    "\0\237\0\u0212\0\237\0\u0212\0\ua42d\0\ua462\0\ua497\0\ua4cc"+
    "\0\ua501\0\ua536\0\237\0\u0212\0\ua56b\0\ua5a0\0\ua5d5\0\ua60a"+
    "\0\ua63f\0\ua674\0\ua6a9\0\237\0\u0212\0\ua6de\0\ua713\0\ua748"+
    "\0\ua77d\0\ua7b2\0\ua7e7\0\ua81c\0\ua851\0\ua886\0\237\0\u0212"+
    "\0\237\0\u0212\0\ua8bb\0\ua8f0\0\ua925\0\ua95a\0\u0212\0\237"+
    "\0\u0212\0\ua98f\0\ua9c4\0\ua9f9\0\uaa2e\0\uaa63\0\uaa98\0\uaacd"+
    "\0\uab02\0\uab37\0\237\0\u0212\0\uab6c\0\uaba1\0\237\0\u0212"+
    "\0\uabd6\0\uac0b\0\237\0\u0212\0\uac40\0\uac75\0\237\0\u0212"+
    "\0\237\0\u0212\0\237\0\u0212\0\uacaa\0\uacdf\0\237\0\u0212";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[992];
    int offset = 0;
    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
    int i = 0;  /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /** 
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpackTrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\1\4\2\5\2\6\3\4\1\7\16\4\1\6\35\4"+
    "\1\10\1\11\1\12\2\13\1\14\1\15\1\16\1\17"+
    "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+
    "\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37"+
    "\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47"+
    "\1\14\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+
    "\1\57\1\60\1\14\1\61\1\62\1\10\1\14\1\63"+
    "\1\64\1\65\1\14\1\10\1\66\1\67\1\70\1\71"+
    "\1\3\3\66\1\72\16\66\1\71\35\66\66\0\2\5"+
    "\65\0\2\73\3\0\1\74\16\0\1\73\45\0\1\75"+
    "\57\0\2\11\22\0\1\11\36\0\1\11\1\0\2\11"+
    "\22\0\1\11\40\0\2\13\22\0\1\13\42\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\5\14"+
    "\7\0\1\76\1\16\75\0\1\77\64\0\1\100\64\0"+
    "\1\101\67\0\1\102\65\0\1\103\45\0\4\14\17\0"+
    "\1\14\1\104\1\105\1\14\1\0\3\14\1\106\1\107"+
    "\14\14\1\0\5\14\37\0\1\110\2\0\1\111\4\0"+
    "\1\112\4\0\1\113\16\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\1\14\1\114\2\14\1\115\4\14\1\116"+
    "\4\14\1\117\2\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\120\1\121\20\14\1\0\5\14"+
    "\44\0\1\122\4\0\1\123\4\0\1\124\14\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\6\14\1\125\4\14"+
    "\1\126\4\14\1\127\1\0\5\14\6\0\4\14\17\0"+
    "\1\130\1\0\2\14\1\0\3\14\1\131\1\14\1\132"+
    "\10\14\1\133\2\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\134\1\135\1\14\1\0\11\14\1\136\7\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\5\14\1\137\13\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\7\14\1\140\7\14"+
    "\1\141\1\14\1\0\5\14\6\0\4\14\17\0\1\142"+
    "\1\0\2\14\1\0\3\14\1\143\3\14\1\144\11\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\145\1\146\10\14\1\147\7\14\1\0\2\14\1\150"+
    "\2\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\2\14\1\151\16\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\152\1\153\1\14\1\0\1\14\1\154\17\14"+
    "\1\0\5\14\6\0\3\14\1\155\17\0\1\156\1\0"+
    "\2\14\1\0\11\14\1\157\1\160\1\14\1\161\4\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\162\1\0\2\14"+
    "\1\0\21\14\1\0\5\14\6\0\4\14\17\0\1\163"+
    "\1\0\2\14\1\0\21\14\1\164\1\165\4\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\3\14\1\166"+
    "\1\167\1\170\13\14\1\0\5\14\6\0\3\14\1\171"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\172\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\5\14\1\173\13\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\174\1\0\2\14\1\0\5\14\1\175\13\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\176\1\177"+
    "\1\14\1\0\21\14\1\0\5\14\2\0\1\67\63\0"+
    "\1\75\2\0\62\75\7\0\1\16\54\0\1\200\5\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\12\14\1\201"+
    "\6\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\1\14\1\202\17\14\1\0\5\14\31\0"+
    "\1\203\106\0\1\204\53\0\1\205\100\0\1\206\14\0"+
    "\4\14\17\0\1\207\1\0\2\14\1\0\21\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\15\14\1\210\3\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\4\14\1\211\14\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\20\14\1\212\1\0\5\14\37\0\1\213\33\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\1\14\1\214\17\14"+
    "\1\0\5\14\52\0\1\215\44\0\2\216\14\0\1\217"+
    "\22\0\4\14\17\0\1\14\1\0\2\14\1\0\14\14"+
    "\1\220\4\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\216\1\221\1\14\1\0\12\14\1\222\6\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\10\14\1\223\10\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\4\14\1\224\14\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\225\1\226\1\14"+
    "\1\0\21\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\14\14\1\227\4\14\1\0\5\14"+
    "\11\0\1\230\61\0\3\14\1\231\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\13\14\1\232\5\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\233\13\14\1\0\4\14\1\234\6\0\4\14"+
    "\17\0\1\14\1\235\1\236\1\14\1\0\21\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\1\14\1\237\3\14\1\240\6\14\1\241\4\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\7\14\1\242\11\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\243\1\0\2\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\244\1\0\2\14\1\0\21\14\1\0"+
    "\5\14\50\0\1\245\2\0\1\246\17\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\12\14\1\247\2\14\1\250"+
    "\3\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\12\14\1\251\6\14\1\0\5\14\6\0"+
    "\3\14\1\252\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\12\14\1\253\6\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\2\14\1\254\16\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\255\1\256"+
    "\1\14\1\0\21\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\1\14\1\257\13\14\1\260"+
    "\3\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\14\14\1\261\4\14\1\0\5\14\6\0"+
    "\3\14\1\262\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\14\14\1\263\4\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\264\1\265\17\14\1\266"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\12\14\1\267\6\14\1\0\5\14\46\0\1\270"+
    "\24\0\4\14\17\0\1\14\1\0\2\14\1\0\10\14"+
    "\1\271\10\14\1\0\5\14\6\0\4\14\17\0\1\272"+
    "\1\0\2\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\273\1\274\7\14\1\275"+
    "\10\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\20\14\1\276\1\0\5\14\6\0\1\277"+
    "\3\14\17\0\1\277\1\0\2\277\1\0\21\277\1\0"+
    "\5\277\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\13\14\1\300\5\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\3\14\1\301\15\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\1\14\1\302\17\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\303\1\304\1\14\1\0\6\14\1\305\12\14"+
    "\1\0\5\14\11\0\1\306\61\0\3\14\1\307\17\0"+
    "\1\14\1\0\2\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\2\14\1\310"+
    "\16\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\2\14\1\311\16\14\1\0\5\14\53\0"+
    "\1\312\73\0\1\313\43\0\1\314\72\0\1\315\23\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\15\14\1\316"+
    "\3\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\2\14\1\317\2\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\3\14\1\320"+
    "\15\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\11\14\1\321\7\14\1\0\5\14\40\0"+
    "\1\322\32\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\2\14\1\323\16\14\1\0\5\14\45\0\1\324\56\0"+
    "\1\325\72\0\1\326\25\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\7\14\1\327\11\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\1\14\1\330"+
    "\17\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\7\14\1\331\11\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\5\14\1\332"+
    "\13\14\1\0\5\14\37\0\1\333\33\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\1\14\1\334\17\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\335\13\14\1\0\5\14\32\0\2\336\37\0"+
    "\4\14\17\0\1\14\1\336\1\337\1\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\5\14\1\340\13\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\17\14\1\341\1\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\4\14\1\342\14\14\1\0\5\14\43\0\1\343"+
    "\27\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\344\13\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\345\1\14\1\346\13\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\12\14\1\347\6\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\11\14\1\350\7\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\351\1\352"+
    "\1\14\1\0\21\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\13\14\1\353\5\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\10\14\1\354\10\14\1\0\5\14\43\0\1\355\62\0"+
    "\1\356\31\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\357\13\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\3\14\1\360\15\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\361\1\0\2\14\1\0"+
    "\21\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\11\14\1\362\7\14\1\0\5\14\6\0"+
    "\3\14\1\363\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\5\14\1\364\13\14\1\0\5\14\47\0\1\365"+
    "\23\0\4\14\17\0\1\14\1\0\2\14\1\0\11\14"+
    "\1\366\7\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\5\14\1\367\13\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\370\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\16\14\1\371\2\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\11\14\1\372\7\14"+
    "\1\0\5\14\6\0\3\14\1\373\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\5\14\56\0\1\374\14\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\20\14\1\375"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\4\14\1\376\14\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\377\1\u0100"+
    "\4\14\50\0\1\u0101\22\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\12\14\1\u0102\6\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\20\14\1\u0103"+
    "\1\0\5\14\45\0\1\u0104\25\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\7\14\1\u0105\11\14\1\0\5\14"+
    "\6\0\3\14\1\u0106\17\0\1\14\1\0\2\14\1\0"+
    "\21\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\12\14\1\u0107\6\14\1\0\5\14\6\0"+
    "\4\277\17\0\1\277\1\0\2\277\1\0\21\277\1\0"+
    "\5\277\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u0108\13\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\u0109\1\u010a\1\14\1\0\21\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\u010b\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\50\0\1\u010c\22\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\12\14\1\u010d\6\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\u010e\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\32\0\2\u010f\37\0\4\14\17\0\1\14"+
    "\1\u010f\1\u0110\1\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\11\14\1\u0111"+
    "\7\14\1\0\5\14\35\0\2\u0112\63\0\2\u0113\76\0"+
    "\1\u0114\66\0\1\u0115\20\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\u0112\1\u0116\20\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\u0113\1\u0117\20\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\12\14\1\u0118\6\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\14\14\1\u0119\4\14\1\0"+
    "\5\14\31\0\1\u011a\75\0\1\u011b\30\0\4\14\17\0"+
    "\1\u011c\1\0\2\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\4\14\1\u011d"+
    "\14\14\1\0\5\14\11\0\1\u011e\31\0\1\u011f\27\0"+
    "\3\14\1\u0120\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u0121\13\14\1\0\5\14\47\0\1\u0122\23\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\11\14\1\u0123\7\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\14\14\1\u0124\4\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\14\14\1\u0125\4\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u0126\1\u0127\20\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\u0128\1\0\2\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\20\14\1\u0129"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\4\14\1\u012a\14\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\u012b\1\u012c\1\14\1\0\21\14\1\0"+
    "\5\14\43\0\1\u012d\27\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\5\14\1\u012e\13\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\5\14\1\u012f"+
    "\13\14\1\0\5\14\56\0\1\u0130\37\0\1\u0131\41\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\20\14\1\u0132"+
    "\1\0\5\14\6\0\4\14\17\0\1\u0133\1\0\2\14"+
    "\1\0\21\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\1\14\1\u0134\17\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\14\14"+
    "\1\u0135\4\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\u0136\1\u0137\1\14\1\0\11\14\1\u0138\2\14\1\u0139"+
    "\4\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\3\14\1\u013a\15\14\1\0\5\14\42\0"+
    "\1\u013b\30\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\4\14\1\u013c\14\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\10\14\1\u013d\10\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\7\14\1\u013e\11\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\3\14\1\u013f\15\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\14\14\1\u0140\4\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\11\14\1\u0141\7\14\1\0"+
    "\5\14\11\0\1\u0142\25\0\1\u0143\33\0\3\14\1\u0144"+
    "\17\0\1\14\1\0\2\14\1\0\1\14\1\u0145\17\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\u0146\1\0\2\14"+
    "\1\0\21\14\1\0\5\14\31\0\1\u0147\41\0\4\14"+
    "\17\0\1\u0148\1\0\2\14\1\0\21\14\1\0\5\14"+
    "\47\0\1\u0149\23\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\11\14\1\u014a\7\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\12\14\1\u014b\6\14"+
    "\1\0\5\14\62\0\1\u014c\10\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\21\14\1\0\2\14\1\u014d\2\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u014e\15\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\2\14\1\u014f\16\14\1\0\5\14"+
    "\35\0\2\u0150\34\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u0150\1\u0151\20\14\1\0\5\14\6\0\3\14\1\u0152"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\5\14"+
    "\41\0\1\u0153\31\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\3\14\1\u0154\15\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\4\14\1\u0155\14\14"+
    "\1\0\5\14\47\0\1\u0156\23\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\11\14\1\u0157\7\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u0158\15\14\1\0\5\14\45\0\1\u0159\60\0\1\u015a"+
    "\66\0\1\u015b\53\0\2\u015c\37\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\7\14\1\u015d\11\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u015e\15\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\5\14\1\u015f\13\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\u015c\1\u0160\1\14\1\0"+
    "\21\14\1\0\5\14\45\0\1\u0161\101\0\1\u0162\10\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\7\14\1\u0163"+
    "\11\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\2\14\1\u0164\2\14\32\0"+
    "\2\u0165\113\0\1\u0166\10\0\4\14\17\0\1\14\1\u0165"+
    "\1\u0167\1\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\2\14"+
    "\1\u0168\2\14\42\0\1\u0169\30\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\4\14\1\u016a\14\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\u016b\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\11\14\1\u016c\7\14\1\0\5\14\41\0\1\u016d"+
    "\31\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u016e\15\14\1\0\5\14\6\0\3\14\1\u016f\17\0"+
    "\1\14\1\0\2\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\u0170\1\u0171\1\14\1\0\21\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\1\14\1\u0172\17\14\1\0\5\14\43\0\1\u0173"+
    "\27\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u0174\13\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\1\14\1\u0175\1\0\21\14\1\0\5\14\32\0"+
    "\2\u0176\72\0\1\u0177\31\0\4\14\17\0\1\14\1\u0176"+
    "\1\u0178\1\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\3\14\1\u0179\15\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u017a\1\u017b\20\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\1\14\1\u017c\17\14\1\0"+
    "\5\14\40\0\1\u017d\32\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\2\14\1\u017e\16\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\14\14\1\u017f"+
    "\4\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\3\14\1\u0180\15\14\1\0\5\14\6\0"+
    "\3\14\1\u0181\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\41\0\1\u0182\31\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\u0183\15\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\11\14"+
    "\1\u0184\7\14\1\0\5\14\6\0\3\14\1\u0185\17\0"+
    "\1\14\1\0\2\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u0186\1\u0187\20\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\1\14\1\u0188\17\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\14\14\1\u0189\4\14"+
    "\1\0\5\14\35\0\2\u018a\57\0\1\u018b\41\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\u018a\1\u018c\20\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\u018d\1\0\2\14\1\0"+
    "\21\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\7\14\1\u018e\11\14\1\0\5\14\46\0"+
    "\1\u018f\24\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\10\14\1\u0190\10\14\1\0\5\14\56\0\1\u0191\14\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\20\14\1\u0192"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\2\14\1\u0193\16\14\1\0\5\14\11\0\1\u0194"+
    "\17\0\1\u0195\41\0\3\14\1\u0196\17\0\1\u0197\1\0"+
    "\2\14\1\0\21\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u0198\13\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\13\14\1\u0199\5\14\1\0\5\14\47\0\1\u019a\23\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\11\14\1\u019b"+
    "\7\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\6\14\1\u019c\12\14\1\0\2\14\1\u019d"+
    "\2\14\35\0\2\u019e\34\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\u019e\1\u019f\20\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\7\14\1\u01a0\11\14"+
    "\1\0\5\14\42\0\1\u01a1\30\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\4\14\1\u01a2\14\14\1\0\5\14"+
    "\35\0\2\u01a3\37\0\1\u01a4\110\0\2\u01a5\34\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\u01a3\1\u01a6\20\14\1\0"+
    "\5\14\6\0\3\14\1\u01a7\17\0\1\14\1\0\2\14"+
    "\1\0\21\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\u01a5\1\u01a8\20\14\1\0\5\14\45\0"+
    "\1\u01a9\62\0\1\u01aa\27\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\7\14\1\u01ab\11\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\5\14\1\u01ac"+
    "\13\14\1\0\5\14\42\0\1\u01ad\33\0\1\u01ae\61\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\4\14\1\u01af"+
    "\14\14\1\0\5\14\6\0\3\14\1\u01b0\17\0\1\14"+
    "\1\0\2\14\1\0\21\14\1\0\5\14\41\0\1\u01b1"+
    "\31\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u01b2\15\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\10\14\1\u01b3\10\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u01b4\15\14\1\0\5\14\43\0\1\u01b5\27\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u01b6\13\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\u01b7\1\u01b8"+
    "\1\14\1\0\1\14\1\u01b9\5\14\1\u01ba\1\u01bb\10\14"+
    "\1\0\2\14\1\u01bc\2\14\35\0\2\u01bd\34\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\u01bd\1\u01be\20\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\u01bf\1\0\2\14\1\0"+
    "\21\14\1\0\5\14\62\0\1\u01c0\10\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\21\14\1\0\2\14\1\u01c1"+
    "\2\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\11\14\1\u01c2\7\14\1\0\5\14\43\0\1\u01c3\75\0"+
    "\1\u01c4\16\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u01c5\13\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\16\14\1\u01c6\2\14\1\0"+
    "\5\14\47\0\1\u01c7\23\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\11\14\1\u01c8\7\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u01c9\1\u01ca\20\14"+
    "\1\0\5\14\31\0\1\u01cb\41\0\4\14\17\0\1\u01cc"+
    "\1\0\2\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\1\14\1\u01cd\17\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\11\14\1\u01ce\7\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u01cf\1\14"+
    "\1\u01d0\3\14\1\u01d1\5\14\1\0\5\14\50\0\1\u01d2"+
    "\22\0\4\14\17\0\1\14\1\0\2\14\1\0\12\14"+
    "\1\u01d3\6\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\u01d4\15\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\1\14\1\u01d5\3\14\46\0\1\u01d6\24\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\10\14\1\u01d7\10\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u01d8\1\u01d9\20\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\1\14\1\u01da\17\14\1\0"+
    "\5\14\32\0\2\u01db\66\0\2\u01dc\34\0\4\14\17\0"+
    "\1\14\1\u01db\1\u01dd\1\14\1\0\21\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\u01dc\1\u01de"+
    "\20\14\1\0\5\14\43\0\1\u01df\27\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u01e0\13\14\1\0"+
    "\5\14\44\0\1\u01e1\26\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\6\14\1\u01e2\12\14\1\0\5\14\37\0"+
    "\1\u01e3\22\0\1\u01e4\55\0\1\u01e5\17\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\1\14\1\u01e6\17\14\1\0"+
    "\2\14\1\u01e7\2\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\15\14\1\u01e8\3\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\14\14\1\u01e9"+
    "\4\14\1\0\5\14\6\0\4\14\17\0\1\u01ea\1\0"+
    "\2\14\1\0\21\14\1\0\5\14\56\0\1\u01eb\14\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\20\14\1\u01ec"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u01ed\1\u01ee\20\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\u01ef\1\u01f0\20\14\1\0\5\14"+
    "\52\0\1\u01f1\20\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\14\14\1\u01f2\4\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\1\14\1\u01f3\17\14"+
    "\1\0\5\14\41\0\1\u01f4\31\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\u01f5\15\14\1\0\5\14"+
    "\37\0\1\u01f6\66\0\1\u01f7\55\0\2\u01f8\37\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\1\14\1\u01f9\17\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\3\14\1\u01fa\15\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\u01f8\1\u01fb\1\14\1\0\21\14\1\0"+
    "\5\14\11\0\1\u01fc\64\0\1\u01fd\20\0\2\u01fe\37\0"+
    "\3\14\1\u01ff\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\6\0\3\14\1\u0200\17\0\1\14\1\u01fe"+
    "\1\u0201\1\14\1\0\21\14\1\0\5\14\35\0\2\u0202"+
    "\62\0\1\u0203\36\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u0202\1\u0204\20\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\1\14\1\u0205\1\0\21\14\1\0\5\14"+
    "\50\0\1\u0206\22\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\12\14\1\u0207\6\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u0208\13\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\1\14\1\u0209\17\14\1\0\5\14\62\0\1\u020a"+
    "\10\0\4\14\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\2\14\1\u020b\2\14\47\0\1\u020c\23\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\11\14\1\u020d\7\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\13\14\1\u020e\5\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\u020f\1\u0210\20\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\2\14\1\u0211\16\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\11\14\1\u0212\7\14\1\0"+
    "\5\14\47\0\1\u0213\23\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\11\14\1\u0214\7\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\15\14\1\u0215"+
    "\3\14\1\0\5\14\11\0\1\u0216\61\0\3\14\1\u0217"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u0218\15\14\1\0\5\14\11\0\1\u0219\61\0\3\14"+
    "\1\u021a\17\0\1\14\1\0\2\14\1\0\21\14\1\0"+
    "\5\14\56\0\1\u021b\14\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\20\14\1\u021c\1\0\5\14\47\0\1\u021d"+
    "\23\0\4\14\17\0\1\14\1\0\2\14\1\0\11\14"+
    "\1\u021e\7\14\1\0\5\14\41\0\1\u021f\31\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\3\14\1\u0220\15\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u0221\1\u0222\20\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\6\14\1\u0223\12\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\17\14\1\u0224\1\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\u0225\1\0\2\14\1\0\21\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\11\14\1\u0226"+
    "\7\14\1\0\5\14\43\0\1\u0227\27\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u0228\13\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\16\14\1\u0229\2\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u022a\13\14\1\0"+
    "\5\14\40\0\1\u022b\32\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\2\14\1\u022c\16\14\1\0\5\14\47\0"+
    "\1\u022d\23\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\11\14\1\u022e\7\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\u022f\1\u0230\20\14\1\0\5\14"+
    "\56\0\1\u0231\14\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\20\14\1\u0232\1\0\5\14\11\0\1\u0233\61\0"+
    "\3\14\1\u0234\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\35\0\2\u0235\34\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\u0235\1\u0236\20\14\1\0\5\14\47\0"+
    "\1\u0237\4\0\1\u0238\53\0\1\u0239\66\0\1\u023a\25\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\11\14\1\u023b"+
    "\4\14\1\u023c\2\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u023d\13\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\7\14\1\u023e\11\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\11\14\1\u023f\7\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\3\14\1\u0240\15\14\1\0\5\14\45\0\1\u0241\25\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\7\14\1\u0242"+
    "\11\14\1\0\5\14\41\0\1\u0243\31\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\3\14\1\u0244\15\14\1\0"+
    "\5\14\37\0\1\u0245\33\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\1\14\1\u0246\17\14\1\0\5\14\6\0"+
    "\3\14\1\u0247\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\50\0\1\u0248\22\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\12\14\1\u0249\6\14\1\0\5\14"+
    "\54\0\1\u024a\53\0\1\u024b\27\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\16\14\1\u024c\2\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u024d\13\14\1\0\5\14\35\0\2\u024e\110\0\1\u024f"+
    "\10\0\4\14\17\0\1\14\1\0\2\14\1\u024e\1\u0250"+
    "\20\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\2\14\1\u0251\2\14\37\0"+
    "\1\u0252\62\0\2\u0253\34\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\1\14\1\u0254\17\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u0253\1\u0255\20\14"+
    "\1\0\5\14\43\0\1\u0256\27\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\5\14\1\u0257\13\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u0258\13\14\1\0\5\14\11\0\1\u0259\61\0\3\14"+
    "\1\u025a\17\0\1\14\1\0\2\14\1\0\21\14\1\0"+
    "\5\14\42\0\1\u025b\30\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\4\14\1\u025c\14\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\14\14\1\u025d"+
    "\4\14\1\0\5\14\53\0\1\u025e\17\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\15\14\1\u025f\3\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\12\14\1\u0260\6\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\12\14\1\u0261\6\14\1\0"+
    "\5\14\56\0\1\u0262\14\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\20\14\1\u0263\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\7\14\1\u0264\11\14"+
    "\1\0\5\14\51\0\1\u0265\21\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\13\14\1\u0266\5\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\u0267\1\u0268\4\14\44\0\1\u0269\26\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\6\14\1\u026a\12\14\1\0"+
    "\5\14\56\0\1\u026b\14\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\20\14\1\u026c\1\0\5\14\43\0\1\u026d"+
    "\27\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u026e\13\14\1\0\5\14\47\0\1\u026f\23\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\11\14\1\u0270\7\14"+
    "\1\0\5\14\6\0\3\14\1\u0271\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\1\14\1\u0272\17\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\20\14\1\u0273\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\21\14\1\0\2\14\1\u0274\2\14"+
    "\32\0\2\u0275\37\0\4\14\17\0\1\14\1\u0275\1\u0276"+
    "\1\14\1\0\21\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\3\14\1\u0277\15\14\1\0"+
    "\5\14\37\0\1\u0278\33\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\1\14\1\u0279\17\14\1\0\5\14\56\0"+
    "\1\u027a\14\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\20\14\1\u027b\1\0\5\14\47\0\1\u027c\23\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\11\14\1\u027d\7\14"+
    "\1\0\5\14\43\0\1\u027e\27\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\5\14\1\u027f\13\14\1\0\5\14"+
    "\42\0\1\u0280\30\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\4\14\1\u0281\14\14\1\0\5\14\46\0\1\u0282"+
    "\24\0\4\14\17\0\1\14\1\0\2\14\1\0\10\14"+
    "\1\u0283\10\14\1\0\5\14\47\0\1\u0284\67\0\1\u0285"+
    "\64\0\1\u0286\55\0\1\u0287\27\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\11\14\1\u0288\7\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\14\14"+
    "\1\u0289\4\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\14\14\1\u028a\4\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u028b\13\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\u028c\15\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\u028d\1\u028e\4\14\43\0\1\u028f\27\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u0290\13\14\1\0"+
    "\5\14\35\0\2\u0291\34\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\u0291\1\u0292\20\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u0293\1\14"+
    "\1\u0294\11\14\1\0\5\14\43\0\1\u0295\27\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u0296\13\14"+
    "\1\0\5\14\52\0\1\u0297\20\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\14\14\1\u0298\4\14\1\0\5\14"+
    "\56\0\1\u0299\43\0\2\u029a\34\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\20\14\1\u029b\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u029a\1\u029c\20\14"+
    "\1\0\5\14\43\0\1\u029d\60\0\1\u029e\33\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u029f\13\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\1\14\1\u02a0\17\14\1\0\5\14\11\0\1\u02a1"+
    "\61\0\3\14\1\u02a2\17\0\1\14\1\0\2\14\1\0"+
    "\21\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\2\14\1\u02a3\2\14\32\0"+
    "\2\u02a4\37\0\4\14\17\0\1\14\1\u02a4\1\u02a5\1\14"+
    "\1\0\21\14\1\0\5\14\41\0\1\u02a6\31\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\3\14\1\u02a7\15\14"+
    "\1\0\5\14\6\0\3\14\1\u02a8\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\5\14\11\0\1\u02a9\27\0"+
    "\1\u02aa\31\0\3\14\1\u02ab\17\0\1\14\1\0\2\14"+
    "\1\0\3\14\1\u02ac\15\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\u02ad\1\u02ae\20\14\1\0"+
    "\5\14\6\0\3\14\1\u02af\17\0\1\14\1\0\2\14"+
    "\1\0\21\14\1\0\5\14\32\0\2\u02b0\37\0\4\14"+
    "\17\0\1\14\1\u02b0\1\u02b1\1\14\1\0\21\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u02b2\13\14\1\0\5\14\47\0\1\u02b3\23\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\11\14\1\u02b4"+
    "\7\14\1\0\5\14\32\0\2\u02b5\37\0\4\14\17\0"+
    "\1\14\1\u02b5\1\u02b6\1\14\1\0\21\14\1\0\5\14"+
    "\35\0\2\u02b7\34\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u02b7\1\u02b8\20\14\1\0\5\14\32\0\2\u02b9\37\0"+
    "\4\14\17\0\1\14\1\u02b9\1\u02ba\1\14\1\0\21\14"+
    "\1\0\5\14\62\0\1\u02bb\10\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\21\14\1\0\2\14\1\u02bc\2\14"+
    "\56\0\1\u02bd\14\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\20\14\1\u02be\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\11\14\1\u02bf\7\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u02c0\13\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\10\14\1\u02c1\10\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\4\14\1\u02c2\14\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\u02c3\1\u02c4\1\14\1\0\21\14\1\0\5\14"+
    "\32\0\2\u02c5\37\0\4\14\17\0\1\14\1\u02c5\1\u02c6"+
    "\1\14\1\0\21\14\1\0\5\14\56\0\1\u02c7\14\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\20\14\1\u02c8"+
    "\1\0\5\14\41\0\1\u02c9\31\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\u02ca\15\14\1\0\5\14"+
    "\41\0\1\u02cb\31\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\3\14\1\u02cc\15\14\1\0\5\14\11\0\1\u02cd"+
    "\61\0\3\14\1\u02ce\17\0\1\14\1\0\2\14\1\0"+
    "\21\14\1\0\5\14\45\0\1\u02cf\62\0\1\u02d0\64\0"+
    "\1\u02d1\27\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\7\14\1\u02d2\11\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u02d3\13\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u02d4\13\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\1\14\1\u02d5\17\14\1\0"+
    "\5\14\32\0\2\u02d6\37\0\4\14\17\0\1\14\1\u02d6"+
    "\1\u02d7\1\14\1\0\21\14\1\0\5\14\47\0\1\u02d8"+
    "\23\0\4\14\17\0\1\14\1\0\2\14\1\0\11\14"+
    "\1\u02d9\7\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\17\14\1\u02da\1\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\u02db\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\32\0\2\u02dc\37\0\4\14\17\0\1\14"+
    "\1\u02dc\1\u02dd\1\14\1\0\21\14\1\0\5\14\47\0"+
    "\1\u02de\23\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\11\14\1\u02df\7\14\1\0\5\14\50\0\1\u02e0\55\0"+
    "\1\u02e1\31\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\12\14\1\u02e2\6\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\3\14\1\u02e3\15\14\1\0"+
    "\5\14\40\0\1\u02e4\32\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\2\14\1\u02e5\16\14\1\0\5\14\62\0"+
    "\1\u02e6\10\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\21\14\1\0\2\14\1\u02e7\2\14\6\0\3\14\1\u02e8"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\5\14"+
    "\35\0\2\u02e9\34\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u02e9\1\u02ea\20\14\1\0\5\14\50\0\1\u02eb\22\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\12\14\1\u02ec"+
    "\6\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\6\14\1\u02ed\12\14\1\0\5\14\62\0"+
    "\1\u02ee\33\0\1\u02ef\41\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\21\14\1\0\2\14\1\u02f0\2\14\6\0"+
    "\4\14\17\0\1\u02f1\1\0\2\14\1\0\21\14\1\0"+
    "\5\14\11\0\1\u02f2\61\0\3\14\1\u02f3\17\0\1\14"+
    "\1\0\2\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\6\14\1\u02f4\12\14"+
    "\1\0\5\14\62\0\1\u02f5\10\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\21\14\1\0\2\14\1\u02f6\2\14"+
    "\45\0\1\u02f7\25\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\7\14\1\u02f8\11\14\1\0\5\14\11\0\1\u02f9"+
    "\61\0\3\14\1\u02fa\17\0\1\14\1\0\2\14\1\0"+
    "\21\14\1\0\5\14\32\0\2\u02fb\37\0\4\14\17\0"+
    "\1\14\1\u02fb\1\u02fc\1\14\1\0\21\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\14\14"+
    "\1\u02fd\4\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\20\14\1\u02fe\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\4\14\1\u02ff"+
    "\14\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\7\14\1\u0300\11\14\1\0\5\14\35\0"+
    "\2\u0301\34\0\4\14\17\0\1\14\1\0\2\14\1\u0301"+
    "\1\u0302\20\14\1\0\5\14\32\0\2\u0303\37\0\4\14"+
    "\17\0\1\14\1\u0303\1\u0304\1\14\1\0\21\14\1\0"+
    "\5\14\45\0\1\u0305\25\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\7\14\1\u0306\11\14\1\0\5\14\62\0"+
    "\1\u0307\10\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\21\14\1\0\2\14\1\u0308\2\14\32\0\2\u0309\107\0"+
    "\1\u030a\14\0\4\14\17\0\1\14\1\u0309\1\u030b\1\14"+
    "\1\0\21\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\20\14\1\u030c\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\u030d\1\u030e\1\14\1\0\21\14"+
    "\1\0\5\14\56\0\1\u030f\14\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\20\14\1\u0310\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\1\14\1\u0311"+
    "\17\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\20\14\1\u0312\1\0\5\14\32\0\2\u0313"+
    "\37\0\4\14\17\0\1\14\1\u0313\1\u0314\1\14\1\0"+
    "\21\14\1\0\5\14\45\0\1\u0315\51\0\2\u0316\37\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\7\14\1\u0317"+
    "\11\14\1\0\5\14\6\0\4\14\17\0\1\14\1\u0316"+
    "\1\u0318\1\14\1\0\21\14\1\0\5\14\35\0\2\u0319"+
    "\34\0\4\14\17\0\1\14\1\0\2\14\1\u0319\1\u031a"+
    "\20\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\13\14\1\u031b\5\14\1\0\5\14\46\0"+
    "\1\u031c\24\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\10\14\1\u031d\10\14\1\0\5\14\43\0\1\u031e\27\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\5\14\1\u031f"+
    "\13\14\1\0\5\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\u0320\1\u0321\20\14\1\0\5\14\35\0\2\u0322"+
    "\67\0\1\u0323\31\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\u0322\1\u0324\20\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\3\14\1\u0325\15\14\1\0"+
    "\5\14\45\0\1\u0326\25\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\7\14\1\u0327\11\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u0328\1\u0329\20\14"+
    "\1\0\5\14\42\0\1\u032a\30\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\4\14\1\u032b\14\14\1\0\5\14"+
    "\43\0\1\u032c\27\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\5\14\1\u032d\13\14\1\0\5\14\47\0\1\u032e"+
    "\23\0\4\14\17\0\1\14\1\0\2\14\1\0\11\14"+
    "\1\u032f\7\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\1\14\1\u0330\17\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\u0331\1\u0332\1\14\1\0"+
    "\21\14\1\0\5\14\6\0\4\14\17\0\1\u0333\1\0"+
    "\2\14\1\0\21\14\1\0\5\14\6\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u0334\13\14\1\0"+
    "\5\14\47\0\1\u0335\23\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\11\14\1\u0336\7\14\1\0\5\14\43\0"+
    "\1\u0337\27\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u0338\13\14\1\0\5\14\62\0\1\u0339\10\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\21\14\1\0"+
    "\2\14\1\u033a\2\14\6\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\5\14\1\u033b\13\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\10\14\1\u033c"+
    "\10\14\1\0\5\14\35\0\2\u033d\34\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\u033d\1\u033e\20\14\1\0\5\14"+
    "\42\0\1\u033f\30\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\4\14\1\u0340\14\14\1\0\5\14\41\0\1\u0341"+
    "\31\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u0342\15\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\11\14\1\u0343\7\14\1\0\5\14"+
    "\56\0\1\u0344\14\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\20\14\1\u0345\1\0\5\14\11\0\1\u0346\61\0"+
    "\3\14\1\u0347\17\0\1\14\1\0\2\14\1\0\21\14"+
    "\1\0\5\14\45\0\1\u0348\25\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\7\14\1\u0349\11\14\1\0\5\14"+
    "\41\0\1\u034a\60\0\2\u034b\34\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\u034c\15\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\u034b\1\u034d"+
    "\20\14\1\0\5\14\35\0\2\u034e\34\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\u034e\1\u034f\20\14\1\0\5\14"+
    "\45\0\1\u0350\25\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\7\14\1\u0351\11\14\1\0\5\14\45\0\1\u0352"+
    "\25\0\4\14\17\0\1\14\1\0\2\14\1\0\7\14"+
    "\1\u0353\11\14\1\0\5\14\32\0\2\u0354\37\0\4\14"+
    "\17\0\1\14\1\u0354\1\u0355\1\14\1\0\21\14\1\0"+
    "\5\14\52\0\1\u0356\20\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\14\14\1\u0357\4\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u0358\1\u0359\20\14"+
    "\1\0\5\14\35\0\2\u035a\34\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\u035a\1\u035b\20\14\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\10\14\1\u035c"+
    "\10\14\1\0\5\14\6\0\4\14\17\0\1\14\1\u035d"+
    "\1\u035e\1\14\1\0\21\14\1\0\5\14\56\0\1\u035f"+
    "\14\0\4\14\17\0\1\14\1\0\2\14\1\0\20\14"+
    "\1\u0360\1\0\5\14\52\0\1\u0361\20\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\14\14\1\u0362\4\14\1\0"+
    "\5\14\32\0\2\u0363\37\0\4\14\17\0\1\14\1\u0363"+
    "\1\u0364\1\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\20\14\1\u0365\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\4\14\1\u0366\14\14\1\0\5\14\37\0\1\u0367\33\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\1\14\1\u0368"+
    "\17\14\1\0\5\14\62\0\1\u0369\10\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\21\14\1\0\2\14\1\u036a"+
    "\2\14\32\0\2\u036b\37\0\4\14\17\0\1\14\1\u036b"+
    "\1\u036c\1\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\2\14"+
    "\1\u036d\2\14\31\0\1\u036e\41\0\4\14\17\0\1\u036f"+
    "\1\0\2\14\1\0\21\14\1\0\5\14\44\0\1\u0370"+
    "\26\0\4\14\17\0\1\14\1\0\2\14\1\0\6\14"+
    "\1\u0371\12\14\1\0\5\14\43\0\1\u0372\27\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u0373\13\14"+
    "\1\0\5\14\32\0\2\u0374\74\0\1\u0375\27\0\4\14"+
    "\17\0\1\14\1\u0374\1\u0376\1\14\1\0\21\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u0377\13\14\1\0\5\14\53\0\1\u0378\17\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\15\14\1\u0379"+
    "\3\14\1\0\5\14\43\0\1\u037a\27\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\5\14\1\u037b\13\14\1\0"+
    "\5\14\43\0\1\u037c\27\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\5\14\1\u037d\13\14\1\0\5\14\37\0"+
    "\1\u037e\33\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\1\14\1\u037f\17\14\1\0\5\14\47\0\1\u0380\23\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\11\14\1\u0381"+
    "\7\14\1\0\5\14\47\0\1\u0382\23\0\4\14\17\0"+
    "\1\14\1\0\2\14\1\0\11\14\1\u0383\7\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\5\14\1\u0384\13\14\1\0\5\14\43\0\1\u0385\27\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\5\14\1\u0386"+
    "\13\14\1\0\5\14\6\0\4\14\17\0\1\14\1\u0387"+
    "\1\u0388\1\14\1\0\21\14\1\0\5\14\6\0\4\14"+
    "\17\0\1\u0389\1\0\2\14\1\0\21\14\1\0\5\14"+
    "\47\0\1\u038a\23\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\11\14\1\u038b\7\14\1\0\5\14\43\0\1\u038c"+
    "\27\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u038d\13\14\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\4\14\1\u038e\14\14\1\0\5\14"+
    "\37\0\1\u038f\33\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\1\14\1\u0390\17\14\1\0\5\14\35\0\2\u0391"+
    "\34\0\4\14\17\0\1\14\1\0\2\14\1\u0391\1\u0392"+
    "\20\14\1\0\5\14\32\0\2\u0393\37\0\4\14\17\0"+
    "\1\14\1\u0393\1\u0394\1\14\1\0\21\14\1\0\5\14"+
    "\32\0\2\u0395\37\0\4\14\17\0\1\14\1\u0395\1\u0396"+
    "\1\14\1\0\21\14\1\0\5\14\41\0\1\u0397\31\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\3\14\1\u0398"+
    "\15\14\1\0\5\14\32\0\2\u0399\37\0\4\14\17\0"+
    "\1\14\1\u0399\1\u039a\1\14\1\0\21\14\1\0\5\14"+
    "\32\0\2\u039b\37\0\4\14\17\0\1\14\1\u039b\1\u039c"+
    "\1\14\1\0\21\14\1\0\5\14\35\0\2\u039d\34\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u039d\1\u039e\20\14"+
    "\1\0\5\14\56\0\1\u039f\14\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\20\14\1\u03a0\1\0\5\14\56\0"+
    "\1\u03a1\14\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\20\14\1\u03a2\1\0\5\14\6\0\4\14\17\0\1\14"+
    "\1\u03a3\1\u03a4\1\14\1\0\21\14\1\0\5\14\56\0"+
    "\1\u03a5\14\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\20\14\1\u03a6\1\0\5\14\35\0\2\u03a7\34\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\u03a7\1\u03a8\20\14\1\0"+
    "\5\14\6\0\4\14\17\0\1\14\1\0\2\14\1\0"+
    "\10\14\1\u03a9\10\14\1\0\5\14\41\0\1\u03aa\31\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\0\3\14\1\u03ab"+
    "\15\14\1\0\5\14\32\0\2\u03ac\37\0\4\14\17\0"+
    "\1\14\1\u03ac\1\u03ad\1\14\1\0\21\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\7\14"+
    "\1\u03ae\11\14\1\0\5\14\42\0\1\u03af\30\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\4\14\1\u03b0\14\14"+
    "\1\0\5\14\45\0\1\u03b1\25\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\7\14\1\u03b2\11\14\1\0\5\14"+
    "\31\0\1\u03b3\41\0\4\14\17\0\1\u03b4\1\0\2\14"+
    "\1\0\21\14\1\0\5\14\47\0\1\u03b5\23\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\11\14\1\u03b6\7\14"+
    "\1\0\5\14\32\0\2\u03b7\37\0\4\14\17\0\1\14"+
    "\1\u03b7\1\u03b8\1\14\1\0\21\14\1\0\5\14\32\0"+
    "\2\u03b9\37\0\4\14\17\0\1\14\1\u03b9\1\u03ba\1\14"+
    "\1\0\21\14\1\0\5\14\62\0\1\u03bb\10\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\21\14\1\0\2\14"+
    "\1\u03bc\2\14\47\0\1\u03bd\23\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\11\14\1\u03be\7\14\1\0\5\14"+
    "\6\0\4\14\17\0\1\14\1\0\2\14\1\0\5\14"+
    "\1\u03bf\13\14\1\0\5\14\54\0\1\u03c0\16\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\16\14\1\u03c1\2\14"+
    "\1\0\5\14\6\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\5\14\1\u03c2\13\14\1\0\5\14\41\0\1\u03c3"+
    "\31\0\4\14\17\0\1\14\1\0\2\14\1\0\3\14"+
    "\1\u03c4\15\14\1\0\5\14\43\0\1\u03c5\27\0\4\14"+
    "\17\0\1\14\1\0\2\14\1\0\5\14\1\u03c6\13\14"+
    "\1\0\5\14\41\0\1\u03c7\31\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\3\14\1\u03c8\15\14\1\0\5\14"+
    "\56\0\1\u03c9\14\0\4\14\17\0\1\14\1\0\2\14"+
    "\1\0\20\14\1\u03ca\1\0\5\14\32\0\2\u03cb\37\0"+
    "\4\14\17\0\1\14\1\u03cb\1\u03cc\1\14\1\0\21\14"+
    "\1\0\5\14\56\0\1\u03cd\14\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\20\14\1\u03ce\1\0\5\14\6\0"+
    "\4\14\17\0\1\14\1\u03cf\1\u03d0\1\14\1\0\21\14"+
    "\1\0\5\14\43\0\1\u03d1\27\0\4\14\17\0\1\14"+
    "\1\0\2\14\1\0\5\14\1\u03d2\13\14\1\0\5\14"+
    "\32\0\2\u03d3\37\0\4\14\17\0\1\14\1\u03d3\1\u03d4"+
    "\1\14\1\0\21\14\1\0\5\14\35\0\2\u03d5\34\0"+
    "\4\14\17\0\1\14\1\0\2\14\1\u03d5\1\u03d6\20\14"+
    "\1\0\5\14\32\0\2\u03d7\37\0\4\14\17\0\1\14"+
    "\1\u03d7\1\u03d8\1\14\1\0\21\14\1\0\5\14\32\0"+
    "\2\u03d9\37\0\4\14\17\0\1\14\1\u03d9\1\u03da\1\14"+
    "\1\0\21\14\1\0\5\14\32\0\2\u03db\37\0\4\14"+
    "\17\0\1\14\1\u03db\1\u03dc\1\14\1\0\21\14\1\0"+
    "\5\14\43\0\1\u03dd\27\0\4\14\17\0\1\14\1\0"+
    "\2\14\1\0\5\14\1\u03de\13\14\1\0\5\14\32\0"+
    "\2\u03df\37\0\4\14\17\0\1\14\1\u03df\1\u03e0\1\14"+
    "\1\0\21\14\1\0\5\14\1\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[44308];
    int offset = 0;
    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackTrans(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /* error codes */
  private static final int ZZ_UNKNOWN_ERROR = 0;
  private static final int ZZ_NO_MATCH = 1;
  private static final int ZZ_PUSHBACK_2BIG = 2;

  /* error messages for the codes above */
  private static final String[] ZZ_ERROR_MSG = {
    "Unknown internal scanner error",
    "Error: could not match input",
    "Error: pushback value was too large"
  };

  /**
   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
   */
  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();

  private static final String ZZ_ATTRIBUTE_PACKED_0 =
    "\3\0\1\11\3\1\1\11\4\1\1\11\1\1\10\11"+
    "\5\1\2\11\30\1\2\11\3\1\2\0\1\1\1\0"+
    "\6\11\3\1\4\0\4\1\1\0\1\1\1\11\2\0"+
    "\7\1\1\0\10\1\1\0\4\1\1\11\11\1\1\0"+
    "\11\1\1\0\1\1\1\11\2\1\4\0\4\1\1\0"+
    "\1\1\3\0\5\1\1\0\2\1\1\0\4\1\1\0"+
    "\7\1\2\0\6\1\1\0\6\1\1\0\3\1\1\0"+
    "\2\1\1\0\7\1\1\0\2\1\1\0\3\1\4\0"+
    "\4\1\1\11\1\1\1\11\2\0\4\1\1\0\2\1"+
    "\1\0\4\1\1\11\5\1\1\0\3\1\2\0\6\1"+
    "\1\0\6\1\1\0\2\1\1\0\1\1\1\0\2\1"+
    "\1\0\4\1\1\0\2\1\1\0\2\1\1\0\2\1"+
    "\4\0\4\1\2\0\2\1\2\0\2\1\1\0\3\1"+
    "\1\0\4\1\1\0\1\1\1\11\2\1\2\0\4\1"+
    "\1\0\4\1\1\0\6\1\2\0\3\1\1\0\1\1"+
    "\1\0\2\1\1\0\3\1\1\0\2\1\1\0\2\1"+
    "\1\0\2\1\1\0\1\11\2\0\4\1\2\0\2\1"+
    "\2\0\2\1\1\0\3\1\1\0\2\1\1\0\2\1"+
    "\1\0\2\1\2\0\2\1\1\0\2\1\1\0\4\1"+
    "\1\0\3\1\1\0\3\1\2\0\3\1\1\0\1\1"+
    "\1\0\2\1\2\0\4\1\1\0\3\1\1\0\2\1"+
    "\1\0\1\1\3\0\3\1\2\0\2\1\2\0\2\1"+
    "\1\0\3\1\1\0\1\1\1\0\5\1\1\0\6\1"+
    "\1\11\2\1\1\0\1\1\1\0\1\1\1\0\6\1"+
    "\1\0\3\1\1\0\1\1\1\0\2\1\1\11\1\0"+
    "\2\1\1\0\1\1\1\0\1\1\3\0\5\1\1\11"+
    "\1\1\1\0\1\1\1\0\1\1\1\0\2\1\1\0"+
    "\1\1\2\0\1\11\3\1\2\0\1\11\3\1\2\0"+
    "\2\1\1\0\3\1\1\0\1\1\1\0\2\1\1\0"+
    "\3\1\1\0\2\1\1\0\2\1\1\0\1\1\1\11"+
    "\1\1\1\0\1\1\1\0\1\1\1\0\5\1\1\0"+
    "\3\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+
    "\1\1\1\0\1\1\1\0\1\1\4\0\6\1\1\0"+
    "\1\1\1\11\1\1\1\0\2\1\1\0\1\1\1\11"+
    "\1\0\2\1\2\0\2\1\2\0\2\1\1\0\2\1"+
    "\1\0\1\1\1\0\2\1\1\0\3\1\1\0\2\1"+
    "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+
    "\1\0\1\1\1\0\5\1\1\11\2\1\1\11\1\1"+
    "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+
    "\1\0\1\1\3\0\1\11\5\1\1\11\1\1\1\0"+
    "\1\1\1\0\3\1\1\0\1\1\1\0\1\1\2\0"+
    "\2\1\1\11\1\0\2\1\1\0\2\1\1\0\1\1"+
    "\1\0\2\1\2\0\2\1\1\0\2\1\1\11\2\1"+
    "\1\0\1\1\1\11\1\1\1\0\1\1\1\11\1\1"+
    "\1\0\1\1\1\0\5\1\1\0\1\1\1\11\1\1"+
    "\1\0\1\1\1\11\1\1\1\0\1\1\1\0\1\1"+
    "\1\0\1\11\1\0\4\1\1\11\1\1\1\0\3\1"+
    "\1\11\1\1\1\0\1\1\2\0\2\1\1\11\1\1"+
    "\1\0\2\1\1\0\1\1\1\0\2\1\2\0\2\1"+
    "\1\0\2\1\1\0\1\1\1\0\1\1\1\0\1\1"+
    "\1\11\5\1\1\0\1\1\1\11\1\1\1\11\1\1"+
    "\1\0\1\1\1\11\1\0\2\1\1\11\1\1\1\11"+
    "\3\1\1\0\1\1\1\0\1\11\2\1\1\0\2\1"+
    "\1\0\1\1\1\0\1\1\1\0\1\1\2\0\2\1"+
    "\1\0\1\1\1\0\1\1\1\0\3\1\1\0\2\1"+
    "\1\0\3\1\1\0\1\1\1\0\1\1\1\0\3\1"+
    "\1\0\1\1\1\0\4\1\1\0\1\1\1\0\1\1"+
    "\1\0\1\1\2\0\2\1\1\0\1\1\1\0\1\1"+
    "\1\0\1\1\1\11\1\1\1\0\1\1\1\0\1\1"+
    "\1\0\2\1\1\11\1\1\1\11\1\1\1\0\1\1"+
    "\1\11\3\1\1\0\1\1\1\0\1\1\1\11\2\1"+
    "\1\0\1\1\1\0\1\1\1\0\1\1\1\11\1\0"+
    "\2\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+
    "\1\1\1\0\1\1\1\0\2\1\1\0\1\1\1\0"+
    "\2\1\1\0\1\1\1\0\2\1\1\0\1\1\1\0"+
    "\1\1\1\11\1\1\1\11\1\1\1\0\1\1\1\11"+
    "\1\1\1\11\1\1\1\0\1\1\1\0\1\1\1\0"+
    "\1\1\1\11\1\1\1\0\1\1\1\0\2\1\1\0"+
    "\1\1\1\11\2\1\1\0\1\1\1\0\1\1\1\0"+
    "\1\1\1\0\1\1\1\11\1\1\1\11\1\1\1\0"+
    "\1\1\1\0\2\1\1\11\2\1\1\0\1\1\1\0"+
    "\1\1\1\0\1\1\1\0\1\1\1\11\1\1\1\0"+
    "\1\1\1\11\1\1\1\0\1\1\1\11\1\1\1\0"+
    "\1\1\1\11\1\1\1\11\1\1\1\11\1\1\1\0"+
    "\1\1\1\11\1\1";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[992];
    int offset = 0;
    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAttribute(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }

  /** the input device */
  private java.io.Reader zzReader;

  /** the current state of the DFA */
  private int zzState;

  /** the current lexical state */
  private int zzLexicalState = YYINITIAL;

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private CharSequence zzBuffer = "";

  /** the textposition at the last accepting state */
  private int zzMarkedPos;

  /** the current text position in the buffer */
  private int zzCurrentPos;

  /** startRead marks the beginning of the yytext() string in the buffer */
  private int zzStartRead;

  /** endRead marks the last character in the buffer, that has been read
      from input */
  private int zzEndRead;

  /**
   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
   */
  private boolean zzAtBOL = true;

  /** zzAtEOF == true <=> the scanner is at the EOF */
  private boolean zzAtEOF;

  /** denotes if the user-EOF-code has already been executed */
  private boolean zzEOFDone;

  /* user code: */
  public _CabalParsingLexer() { this((java.io.Reader)null); }

  /** This should match the newline indent rule defined in our Flex lexer. */
  public static Pattern NEWLINE_INDENT_REGEX = Pattern.compile(
    "(\\r|\\n|\\r\\n)(( |\\t)*)", Pattern.MULTILINE
  );

  protected int currentLineIndent = 0;
  protected int indentLevel = 0;


  /**
   * Creates a new scanner
   *
   * @param   in  the java.io.Reader to read input from.
   */
  public _CabalParsingLexer(java.io.Reader in) {
    this.zzReader = in;
  }


  /** 
   * Unpacks the compressed character translation table.
   *
   * @param packed   the packed character translation table
   * @return         the unpacked character translation table
   */
  private static char [] zzUnpackCMap(String packed) {
    int size = 0;
    for (int i = 0, length = packed.length(); i < length; i += 2) {
      size += packed.charAt(i);
    }
    char[] map = new char[size];
    int i = 0;  /* index in packed string  */
    int j = 0;  /* index in unpacked array */
    while (i < packed.length()) {
      int  count = packed.charAt(i++);
      char value = packed.charAt(i++);
      do map[j++] = value; while (--count > 0);
    }
    return map;
  }

  public final int getTokenStart() {
    return zzStartRead;
  }

  public final int getTokenEnd() {
    return getTokenStart() + yylength();
  }

  public void reset(CharSequence buffer, int start, int end, int initialState) {
    zzBuffer = buffer;
    zzCurrentPos = zzMarkedPos = zzStartRead = start;
    zzAtEOF  = false;
    zzAtBOL = true;
    zzEndRead = end;
    yybegin(initialState);
  }

  /**
   * Refills the input buffer.
   *
   * @return      <code>false</code>, iff there was new input.
   *
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  private boolean zzRefill() throws java.io.IOException {
    return true;
  }


  /**
   * Returns the current lexical state.
   */
  public final int yystate() {
    return zzLexicalState;
  }


  /**
   * Enters a new lexical state
   *
   * @param newState the new lexical state
   */
  public final void yybegin(int newState) {
    zzLexicalState = newState;
  }


  /**
   * Returns the text matched by the current regular expression.
   */
  public final CharSequence yytext() {
    return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
  }


  /**
   * Returns the character at position <tt>pos</tt> from the
   * matched text.
   *
   * It is equivalent to yytext().charAt(pos), but faster
   *
   * @param pos the position of the character to fetch.
   *            A value from 0 to yylength()-1.
   *
   * @return the character at position pos
   */
  public final char yycharat(int pos) {
    return zzBuffer.charAt(zzStartRead+pos);
  }


  /**
   * Returns the length of the matched text region.
   */
  public final int yylength() {
    return zzMarkedPos-zzStartRead;
  }


  /**
   * Reports an error that occured while scanning.
   *
   * In a wellformed scanner (no or only correct usage of
   * yypushback(int) and a match-all fallback rule) this method
   * will only be called with things that "Can't Possibly Happen".
   * If this method is called, something is seriously wrong
   * (e.g. a JFlex bug producing a faulty scanner etc.).
   *
   * Usual syntax/scanner level error handling should be done
   * in error fallback rules.
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void zzScanError(int errorCode) {
    String message;
    try {
      message = ZZ_ERROR_MSG[errorCode];
    }
    catch (ArrayIndexOutOfBoundsException e) {
      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
    }

    throw new Error(message);
  }


  /**
   * Pushes the specified amount of characters back into the input stream.
   *
   * They will be read again by then next call of the scanning method
   *
   * @param number  the number of characters to be read again.
   *                This number must not be greater than yylength()!
   */
  public void yypushback(int number)  {
    if ( number > yylength() )
      zzScanError(ZZ_PUSHBACK_2BIG);

    zzMarkedPos -= number;
  }


  /**
   * Contains user EOF-code, which will be executed exactly once,
   * when the end of file is reached
   */
  private void zzDoEOF() {
    if (!zzEOFDone) {
      zzEOFDone = true;
    
    }
  }


  /**
   * Resumes scanning until the next regular expression is matched,
   * the end of input is encountered or an I/O-Error occurs.
   *
   * @return      the next token
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  public IElementType advance() throws java.io.IOException {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    CharSequence zzBufferL = zzBuffer;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;

      zzState = ZZ_LEXSTATE[zzLexicalState];

      // set up zzAction for empty match case:
      int zzAttributes = zzAttrL[zzState];
      if ( (zzAttributes & 1) == 1 ) {
        zzAction = zzState;
      }


      zzForAction: {
        while (true) {

          if (zzCurrentPosL < zzEndReadL) {
            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
            zzCurrentPosL += Character.charCount(zzInput);
          }
          else if (zzAtEOF) {
            zzInput = YYEOF;
            break zzForAction;
          }
          else {
            // store back cached positions
            zzCurrentPos  = zzCurrentPosL;
            zzMarkedPos   = zzMarkedPosL;
            boolean eof = zzRefill();
            // get translated positions and possibly new buffer
            zzCurrentPosL  = zzCurrentPos;
            zzMarkedPosL   = zzMarkedPos;
            zzBufferL      = zzBuffer;
            zzEndReadL     = zzEndRead;
            if (eof) {
              zzInput = YYEOF;
              break zzForAction;
            }
            else {
              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
              zzCurrentPosL += Character.charCount(zzInput);
            }
          }
          int zzNext = zzTransL[ zzRowMapL[zzState] + ZZ_CMAP(zzInput) ];
          if (zzNext == -1) break zzForAction;
          zzState = zzNext;

          zzAttributes = zzAttrL[zzState];
          if ( (zzAttributes & 1) == 1 ) {
            zzAction = zzState;
            zzMarkedPosL = zzCurrentPosL;
            if ( (zzAttributes & 8) == 8 ) break zzForAction;
          }

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;

      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
        zzAtEOF = true;
        zzDoEOF();
        return null;
      }
      else {
        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
          case 1: 
            { yypushback(yylength()); yybegin(MAIN); return CabalTypes.WHITE_SPACE;
            }
          case 107: break;
          case 2: 
            { return CabalTypes.WHITE_SPACE;
            }
          case 108: break;
          case 3: 
            { return CabalTypes.OTHER_CHAR;
            }
          case 109: break;
          case 4: 
            { final Matcher m = NEWLINE_INDENT_REGEX.matcher(yytext());
    if (!m.matches()) throw new AssertionError("NEWLINE_INDENT_REGEX did not match!");
    final String indent = m.group(2);
    yypushback(indent.length());
    yybegin(INDENT);
    return CabalTypes.EOL;
            }
          case 110: break;
          case 5: 
            { return CabalTypes.UNKNOWN_KEY;
            }
          case 111: break;
          case 6: 
            { return CabalTypes.DOT;
            }
          case 112: break;
          case 7: 
            { return CabalTypes.NUMBERS;
            }
          case 113: break;
          case 8: 
            { return CabalTypes.DASH;
            }
          case 114: break;
          case 9: 
            { return CabalTypes.COLON;
            }
          case 115: break;
          case 10: 
            { return CabalTypes.LPAREN;
            }
          case 116: break;
          case 11: 
            { return CabalTypes.RPAREN;
            }
          case 117: break;
          case 12: 
            { return CabalTypes.LBRACKET;
            }
          case 118: break;
          case 13: 
            { return CabalTypes.RBRACKET;
            }
          case 119: break;
          case 14: 
            { return CabalTypes.LBRACE;
            }
          case 120: break;
          case 15: 
            { return CabalTypes.RBRACE;
            }
          case 121: break;
          case 16: 
            { return CabalTypes.GT;
            }
          case 122: break;
          case 17: 
            { return CabalTypes.LT;
            }
          case 123: break;
          case 18: 
            { return CabalTypes.COMMA;
            }
          case 124: break;
          case 19: 
            { return CabalTypes.BANG;
            }
          case 125: break;
          case 20: 
            { return CabalTypes.TAB;
            }
          case 126: break;
          case 21: 
            { final int numWhitespace = yylength() - 1;

    if (currentLineIndent == 0) {
      if (numWhitespace == indentLevel) {
        // Consume all except the NON_WHITE_SPACE char
        yypushback(1);
        yybegin(YYINITIAL);
        //return CabalTypes.LINE_START;
        return CabalTypes.WHITE_SPACE;
      }
      if (numWhitespace > indentLevel) {
        // Consume up to the indentLevel + 1 for the INDENT
        currentLineIndent = indentLevel + 1;
        yypushback(yylength() - (indentLevel + 1));
        return CabalTypes.INDENT;
      }
      if (numWhitespace < indentLevel) {
        --indentLevel;
        yypushback(yylength());
        return CabalTypes.DEDENT;
      }
      // Shouldn't happen since we checked ==, >, and <
      throw new AssertionError(
        "Unexpected case: numWhitespace: " + numWhitespace + "; "
          + "indentLevel: " + indentLevel
      );
    }

    // If no more whitespace, start the line.
    if (numWhitespace == 0) {
      indentLevel = currentLineIndent;
      currentLineIndent = 0;
      yypushback(1);
      yybegin(YYINITIAL);
      return CabalTypes.WHITE_SPACE;
      //return CabalTypes.LINE_START;
    }

    ++currentLineIndent;
    // Consume 1 whitespace char.
    yypushback(yylength() - 1);
    return CabalTypes.INDENT;
            }
          case 127: break;
          case 22: 
            { currentLineIndent = 0; return CabalTypes.WHITE_SPACE;
            }
          case 128: break;
          case 23: 
            { return CabalTypes.COMMENT;
            }
          case 129: break;
          case 24: 
            { return CabalTypes.EQ;
            }
          case 130: break;
          case 25: 
            { return CabalTypes.GTE;
            }
          case 131: break;
          case 26: 
            { return CabalTypes.LTE;
            }
          case 132: break;
          case 27: 
            { return CabalTypes.AND;
            }
          case 133: break;
          case 28: 
            { return CabalTypes.OR;
            }
          case 134: break;
          case 29: 
            { return CabalTypes.AS;
            }
          case 135: break;
          case 30: 
            { return CabalTypes.IF;
            }
          case 136: break;
          case 31: 
            { return CabalTypes.OS;
            }
          case 137: break;
          case 32: 
            { return CabalTypes.TAG_KEY;
            }
          case 138: break;
          case 33: 
            { return CabalTypes.CUSTOM_KEY;
            }
          case 139: break;
          case 34: 
            { return CabalTypes.ARCH;
            }
          case 140: break;
          case 35: 
            { return CabalTypes.WITH;
            }
          case 141: break;
          case 36: 
            { return CabalTypes.IMPL;
            }
          case 142: break;
          case 37: 
            { return CabalTypes.TRUE;
            }
          case 143: break;
          case 38: 
            { return CabalTypes.TYPE_KEY;
            }
          case 144: break;
          case 39: 
            { return CabalTypes.ELSE;
            }
          case 145: break;
          case 40: 
            { return CabalTypes.FLAG;
            }
          case 146: break;
          case 41: 
            { return CabalTypes.NAME_KEY;
            }
          case 147: break;
          case 42: 
            { return CabalTypes.FALSE;
            }
          case 148: break;
          case 43: 
            { return CabalTypes.AUTHOR_KEY;
            }
          case 149: break;
          case 44: 
            { return CabalTypes.SUBDIR_KEY;
            }
          case 150: break;
          case 45: 
            { return CabalTypes.MANUAL_KEY;
            }
          case 151: break;
          case 46: 
            { return CabalTypes.BRANCH_KEY;
            }
          case 152: break;
          case 47: 
            { return CabalTypes.EXPOSED_KEY;
            }
          case 153: break;
          case 48: 
            { return CabalTypes.LICENSE_KEY;
            }
          case 154: break;
          case 49: 
            { return CabalTypes.LIBRARY_KEY;
            }
          case 155: break;
          case 50: 
            { return CabalTypes.MAIN_IS_KEY;
            }
          case 156: break;
          case 51: 
            { return CabalTypes.VERSION_KEY;
            }
          case 157: break;
          case 52: 
            { return CabalTypes.DEFAULT_KEY;
            }
          case 158: break;
          case 53: 
            { return CabalTypes.SYNOPSIS_KEY;
            }
          case 159: break;
          case 54: 
            { return CabalTypes.INCLUDES_KEY;
            }
          case 160: break;
          case 55: 
            { return CabalTypes.HOMEPAGE_KEY;
            }
          case 161: break;
          case 56: 
            { return CabalTypes.LOCATION_KEY;
            }
          case 162: break;
          case 57: 
            { return CabalTypes.CATEGORY_KEY;
            }
          case 163: break;
          case 58: 
            { return CabalTypes.DATA_DIR_KEY;
            }
          case 164: break;
          case 59: 
            { return CabalTypes.STABILITY_KEY;
            }
          case 165: break;
          case 60: 
            { return CabalTypes.C_SOURCES_KEY;
            }
          case 166: break;
          case 61: 
            { return CabalTypes.COPYRIGHT_KEY;
            }
          case 167: break;
          case 62: 
            { return CabalTypes.BUILDABLE_KEY;
            }
          case 168: break;
          case 63: 
            { return CabalTypes.BENCHMARK_KEY;
            }
          case 169: break;
          case 64: 
            { return CabalTypes.TEST_SUITE_KEY;
            }
          case 170: break;
          case 65: 
            { return CabalTypes.EXTENSIONS_KEY;
            }
          case 171: break;
          case 66: 
            { return CabalTypes.EXECUTABLE_KEY;
            }
          case 172: break;
          case 67: 
            { return CabalTypes.FRAMEWORKS_KEY;
            }
          case 173: break;
          case 68: 
            { return CabalTypes.LD_OPTIONS_KEY;
            }
          case 174: break;
          case 69: 
            { return CabalTypes.CC_OPTIONS_KEY;
            }
          case 175: break;
          case 70: 
            { return CabalTypes.MAINTAINER_KEY;
            }
          case 176: break;
          case 71: 
            { return CabalTypes.BUILD_TYPE_KEY;
            }
          case 177: break;
          case 72: 
            { return CabalTypes.DATA_FILES_KEY;
            }
          case 178: break;
          case 73: 
            { return CabalTypes.JS_SOURCES_KEY;
            }
          case 179: break;
          case 74: 
            { return CabalTypes.TESTED_WITH_KEY;
            }
          case 180: break;
          case 75: 
            { return CabalTypes.GHC_OPTIONS_KEY;
            }
          case 181: break;
          case 76: 
            { return CabalTypes.CPP_OPTIONS_KEY;
            }
          case 182: break;
          case 77: 
            { return CabalTypes.PACKAGE_URL_KEY;
            }
          case 183: break;
          case 78: 
            { return CabalTypes.BUILD_TOOLS_KEY;
            }
          case 184: break;
          case 79: 
            { return CabalTypes.BUG_REPORTS_KEY;
            }
          case 185: break;
          case 80: 
            { return CabalTypes.DESCRIPTION_KEY;
            }
          case 186: break;
          case 81: 
            { return CabalTypes.INCLUDE_DIRS_KEY;
            }
          case 187: break;
          case 82: 
            { return CabalTypes.LICENSE_FILE_KEY;
            }
          case 188: break;
          case 83: 
            { return CabalTypes.HS_SOURCE_DIR_KEY;
            }
          case 189: break;
          case 84: 
            { return CabalTypes.LICENSE_FILES_KEY;
            }
          case 190: break;
          case 85: 
            { return CabalTypes.OTHER_MODULES_KEY;
            }
          case 191: break;
          case 86: 
            { return CabalTypes.CABAL_VERSION_KEY;
            }
          case 192: break;
          case 87: 
            { return CabalTypes.BUILD_DEPENDS_KEY;
            }
          case 193: break;
          case 88: 
            { return CabalTypes.HS_SOURCE_DIRS_KEY;
            }
          case 194: break;
          case 89: 
            { return CabalTypes.EXTRA_LIB_DIRS_KEY;
            }
          case 195: break;
          case 90: 
            { return CabalTypes.EXTRA_TMP_FILES_KEY;
            }
          case 196: break;
          case 91: 
            { return CabalTypes.EXTRA_LIBRARIES_KEY;
            }
          case 197: break;
          case 92: 
            { return CabalTypes.EXTRA_DOC_FILES_KEY;
            }
          case 198: break;
          case 93: 
            { return CabalTypes.EXPOSED_MODULES_KEY;
            }
          case 199: break;
          case 94: 
            { return CabalTypes.OTHER_LANGUAGES_KEY;
            }
          case 200: break;
          case 95: 
            { return CabalTypes.INSTALL_INCLUDES_KEY;
            }
          case 201: break;
          case 96: 
            { return CabalTypes.GHC_PROF_OPTIONS_KEY;
            }
          case 202: break;
          case 97: 
            { return CabalTypes.OTHER_EXTENSIONS_KEY;
            }
          case 203: break;
          case 98: 
            { return CabalTypes.DEFAULT_LANGUAGE_KEY;
            }
          case 204: break;
          case 99: 
            { return CabalTypes.SOURCE_REPO_KEY;
            }
          case 205: break;
          case 100: 
            { return CabalTypes.PKGCONFIG_DEPENDS_KEY;
            }
          case 206: break;
          case 101: 
            { return CabalTypes.REEXPORTED_MODULES_KEY;
            }
          case 207: break;
          case 102: 
            { return CabalTypes.EXTRA_SOURCE_FILES_KEY;
            }
          case 208: break;
          case 103: 
            { return CabalTypes.GHC_SHARED_OPTIONS_KEY;
            }
          case 209: break;
          case 104: 
            { return CabalTypes.DEFAULT_EXTENSIONS_KEY;
            }
          case 210: break;
          case 105: 
            { return CabalTypes.REQUIRED_SIGNATURES_KEY;
            }
          case 211: break;
          case 106: 
            { return CabalTypes.EXTRA_GHCI_LIBRARIES_KEY;
            }
          case 212: break;
          default:
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
