From 9d74ed70a6bc36120bf71223eebccd2a17db60c9 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Fri, 31 Mar 2017 15:36:51 +0300 Subject: [PATCH] [groovy] lexer: separate state for when division is expected (IDEA-170650) On document change lexer was started with initial state where '/' is matched as a beginning of the regex literal. --- .../groovy/lang/lexer/_GroovyLexer.java | 2111 +++++++++-------- .../groovy/lang/lexer/GroovyLexerBase.java | 15 +- .../plugins/groovy/lang/lexer/groovy.flex | 49 +- .../lang/parser/CommentsParsingTest.groovy | 5 +- .../lang/parser/ExpressionsParsingTest.groovy | 4 + .../groovy/comments/afterIdentifier.test | 13 + .../groovy/expressions/arithmetic/mul4.test | 11 + .../expressions/regex/afterNewLine.test | 12 + 8 files changed, 1155 insertions(+), 1065 deletions(-) create mode 100644 plugins/groovy/testdata/parsing/groovy/comments/afterIdentifier.test create mode 100644 plugins/groovy/testdata/parsing/groovy/expressions/arithmetic/mul4.test create mode 100644 plugins/groovy/testdata/parsing/groovy/expressions/regex/afterNewLine.test diff --git a/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java b/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java index d9d715a47fd9..a88afb3e2a58 100644 --- a/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java +++ b/plugins/groovy/groovy-psi/gen/org/jetbrains/plugins/groovy/lang/lexer/_GroovyLexer.java @@ -42,16 +42,17 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { /** lexical states */ public static final int YYINITIAL = 0; public static final int IN_INNER_BLOCK = 2; - public static final int IN_SINGLE_GSTRING = 4; - public static final int IN_TRIPLE_GSTRING = 6; - public static final int IN_SLASHY_STRING = 8; - public static final int IN_DOLLAR_SLASH_STRING = 10; - public static final int IN_GSTRING_DOLLAR = 12; - public static final int IN_GSTRING_DOT = 14; - public static final int IN_GSTRING_DOT_IDENT = 16; - public static final int NLS_AFTER_COMMENT = 18; - public static final int NLS_AFTER_LBRACE = 20; - public static final int NLS_AFTER_NLS = 22; + public static final int DIVISION_EXPECTED = 4; + public static final int IN_SINGLE_GSTRING = 6; + public static final int IN_TRIPLE_GSTRING = 8; + public static final int IN_SLASHY_STRING = 10; + public static final int IN_DOLLAR_SLASH_STRING = 12; + public static final int IN_GSTRING_DOLLAR = 14; + public static final int IN_GSTRING_DOT = 16; + public static final int IN_GSTRING_DOT_IDENT = 18; + public static final int NLS_AFTER_COMMENT = 20; + public static final int NLS_AFTER_LBRACE = 22; + public static final int NLS_AFTER_NLS = 24; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l @@ -61,7 +62,7 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { */ private static final int ZZ_LEXSTATE[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, - 8, 8, 9, 9, 10, 10, 11, 11 + 8, 8, 9, 9, 10, 10, 11, 11, 12, 12 }; /** @@ -139,7 +140,7 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { static final char ZZ_CMAP_A[] = zzUnpackCMap( "\11\0\1\4\1\2\1\1\1\5\1\3\22\0\1\4\1\12\1\46\1\11\1\44\1\104\1\107\1\45\1"+ "\73\1\74\1\10\1\31\1\100\1\32\1\42\1\7\1\34\1\37\10\14\1\77\1\110\1\101\1"+ - "\72\1\102\1\71\1\111\1\13\1\36\1\13\1\26\1\30\1\20\1\16\1\43\1\24\2\43\1\22"+ + "\71\1\102\1\72\1\111\1\13\1\36\1\13\1\26\1\30\1\20\1\16\1\43\1\24\2\43\1\22"+ "\13\43\1\41\2\43\1\75\1\6\1\76\1\105\1\33\1\0\1\51\1\35\1\52\1\25\1\27\1\17"+ "\1\15\1\65\1\23\1\43\1\53\1\21\1\57\1\61\1\60\1\50\1\43\1\56\1\54\1\55\1\62"+ "\1\63\1\67\1\40\1\64\1\66\1\70\1\106\1\47\1\103\6\0\1\1\24\0\1\43\12\0\1\43"+ @@ -191,55 +192,55 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\14\0\1\1\1\2\2\3\1\1\1\4\1\5\1\1"+ + "\15\0\1\1\1\2\2\3\1\1\1\4\1\5\1\1"+ "\1\6\1\7\1\10\5\7\1\11\1\12\1\10\1\7"+ "\1\13\1\7\1\14\1\15\1\16\11\7\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\2\42\1\43\1\42\1\44\1\45\2\42\2\46"+ - "\1\47\1\44\2\50\1\44\1\51\20\52\1\53\2\54"+ - "\1\55\1\56\1\3\2\56\2\57\2\60\1\0\1\3"+ - "\1\61\1\62\1\63\1\64\1\65\1\66\1\67\1\70"+ - "\1\71\1\72\1\73\1\10\1\74\3\0\5\7\1\75"+ - "\1\7\1\76\1\7\1\77\3\7\1\100\1\101\1\102"+ - "\1\103\1\104\2\0\3\7\1\105\1\106\1\107\1\14"+ - "\1\0\1\14\2\0\1\110\4\7\1\111\21\7\1\112"+ - "\1\113\1\114\1\115\1\116\1\0\1\117\1\0\1\120"+ - "\1\121\1\122\1\123\1\124\1\125\1\0\2\42\1\46"+ - "\1\126\1\127\1\130\1\50\5\52\1\75\1\52\1\76"+ - "\1\52\1\77\12\52\1\111\21\52\1\131\1\0\1\132"+ - "\1\133\1\62\1\134\1\135\1\70\1\136\1\0\1\136"+ - "\3\7\1\137\3\7\1\140\1\141\4\7\2\10\3\7"+ - "\1\142\1\143\4\14\1\110\2\0\1\144\23\7\1\145"+ - "\3\7\1\146\5\7\1\114\1\147\1\150\1\151\1\152"+ - "\1\0\1\153\3\52\1\137\3\52\1\140\1\141\32\52"+ - "\1\145\3\52\1\146\5\52\1\133\1\154\1\62\2\134"+ - "\1\136\1\0\3\7\1\155\6\7\1\156\1\7\1\157"+ - "\2\0\2\7\1\160\3\0\2\14\6\0\7\7\1\161"+ - "\2\7\1\162\10\7\1\163\1\164\3\7\1\165\1\7"+ - "\1\166\1\7\1\167\3\52\1\155\6\52\1\156\1\52"+ - "\1\157\2\52\1\160\7\52\1\161\2\52\1\162\10\52"+ - "\1\163\1\164\3\52\1\165\1\52\1\166\1\52\1\133"+ - "\2\154\1\62\1\0\1\134\1\170\1\171\1\172\7\7"+ - "\1\173\1\7\1\14\1\0\1\14\3\0\6\7\1\174"+ - "\1\175\3\7\1\176\1\7\1\177\1\7\1\200\1\7"+ - "\1\201\3\7\1\202\1\170\1\171\1\172\7\52\1\173"+ - "\7\52\1\174\1\175\3\52\1\176\1\52\1\177\1\52"+ - "\1\200\1\52\1\201\3\52\1\202\1\133\1\0\1\154"+ - "\1\0\2\7\1\203\3\7\1\204\5\7\1\205\1\7"+ - "\1\206\1\7\1\207\2\7\1\210\1\7\1\211\1\212"+ - "\1\213\1\7\2\52\1\203\3\52\1\204\5\52\1\205"+ - "\1\52\1\206\1\52\1\207\2\52\1\210\1\52\1\211"+ - "\1\212\1\213\1\52\1\0\1\214\3\7\1\215\1\216"+ - "\1\217\1\220\1\221\7\7\1\214\3\52\1\215\1\216"+ - "\1\217\1\220\1\221\7\52\4\7\1\222\1\223\1\224"+ - "\2\7\1\225\4\52\1\222\1\223\1\224\2\52\1\225"+ - "\2\7\1\226\1\227\1\7\1\230\2\52\1\226\1\227"+ - "\1\52\1\230\1\231\1\232\1\7\1\231\1\232\1\52"+ - "\1\7\1\52\2\233"; + "\1\41\4\42\2\43\1\44\1\43\1\45\1\46\2\43"+ + "\2\47\1\50\1\45\2\51\1\45\1\52\20\53\1\54"+ + "\2\55\1\56\1\57\1\3\2\57\2\60\2\61\1\0"+ + "\1\3\1\62\1\63\1\64\1\65\1\66\1\67\1\70"+ + "\1\71\1\72\1\73\1\74\1\10\1\75\3\0\5\7"+ + "\1\76\1\7\1\77\1\7\1\100\3\7\1\101\1\102"+ + "\1\103\1\104\1\105\2\0\3\7\1\106\1\107\1\110"+ + "\1\14\1\0\1\14\2\0\1\111\4\7\1\112\21\7"+ + "\1\113\1\114\1\115\1\116\1\117\1\0\1\120\1\0"+ + "\1\121\1\122\1\123\1\124\1\125\1\126\1\127\1\130"+ + "\1\0\2\43\1\47\1\131\1\132\1\133\1\51\5\53"+ + "\1\76\1\53\1\77\1\53\1\100\12\53\1\112\21\53"+ + "\1\134\1\0\1\135\1\136\1\63\1\137\1\140\1\71"+ + "\1\141\1\0\1\141\3\7\1\142\3\7\1\143\1\144"+ + "\4\7\2\10\3\7\1\145\1\146\4\14\1\111\2\0"+ + "\1\147\23\7\1\150\3\7\1\151\5\7\1\113\1\152"+ + "\1\153\1\154\1\155\1\0\1\156\3\53\1\142\3\53"+ + "\1\143\1\144\32\53\1\150\3\53\1\151\5\53\1\136"+ + "\1\157\1\63\2\137\1\141\1\0\3\7\1\160\6\7"+ + "\1\161\1\7\1\162\2\0\2\7\1\163\3\0\2\14"+ + "\6\0\7\7\1\164\2\7\1\165\10\7\1\166\1\167"+ + "\3\7\1\170\1\7\1\171\1\7\1\172\3\53\1\160"+ + "\6\53\1\161\1\53\1\162\2\53\1\163\7\53\1\164"+ + "\2\53\1\165\10\53\1\166\1\167\3\53\1\170\1\53"+ + "\1\171\1\53\1\136\2\157\1\63\1\0\1\137\1\173"+ + "\1\174\1\175\7\7\1\176\1\7\1\14\1\0\1\14"+ + "\3\0\6\7\1\177\1\200\3\7\1\201\1\7\1\202"+ + "\1\7\1\203\1\7\1\204\3\7\1\205\1\173\1\174"+ + "\1\175\7\53\1\176\7\53\1\177\1\200\3\53\1\201"+ + "\1\53\1\202\1\53\1\203\1\53\1\204\3\53\1\205"+ + "\1\136\1\0\1\157\1\0\2\7\1\206\3\7\1\207"+ + "\5\7\1\210\1\7\1\211\1\7\1\212\2\7\1\213"+ + "\1\7\1\214\1\215\1\216\1\7\2\53\1\206\3\53"+ + "\1\207\5\53\1\210\1\53\1\211\1\53\1\212\2\53"+ + "\1\213\1\53\1\214\1\215\1\216\1\53\1\0\1\217"+ + "\3\7\1\220\1\221\1\222\1\223\1\224\7\7\1\217"+ + "\3\53\1\220\1\221\1\222\1\223\1\224\7\53\4\7"+ + "\1\225\1\226\1\227\2\7\1\230\4\53\1\225\1\226"+ + "\1\227\2\53\1\230\2\7\1\231\1\232\1\7\1\233"+ + "\2\53\1\231\1\232\1\53\1\233\1\234\1\235\1\7"+ + "\1\234\1\235\1\53\1\7\1\53\2\236"; private static int [] zzUnpackAction() { - int [] result = new int[679]; + int [] result = new int[686]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -265,93 +266,94 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\112\0\224\0\336\0\u0128\0\u0172\0\u01bc\0\u0206"+ - "\0\u0250\0\u029a\0\u02e4\0\u032e\0\u0378\0\u03c2\0\u0378\0\u03c2"+ + "\0\u0250\0\u029a\0\u02e4\0\u032e\0\u0378\0\u03c2\0\u040c\0\u03c2"+ "\0\u040c\0\u0456\0\u04a0\0\u04ea\0\u0534\0\u057e\0\u05c8\0\u0612"+ "\0\u065c\0\u06a6\0\u06f0\0\u073a\0\u0784\0\u07ce\0\u0818\0\u0862"+ - "\0\u08ac\0\u08f6\0\u0940\0\u098a\0\u0378\0\u09d4\0\u0a1e\0\u0a68"+ - "\0\u0ab2\0\u0afc\0\u0b46\0\u0b90\0\u0bda\0\u0c24\0\u0378\0\u0c6e"+ - "\0\u0cb8\0\u0378\0\u0378\0\u0378\0\u0378\0\u0378\0\u0378\0\u0d02"+ - "\0\u0d4c\0\u0378\0\u0d96\0\u0de0\0\u0e2a\0\u0e74\0\u0378\0\u0378"+ - "\0\u0378\0\u0ebe\0\u0f08\0\u0f52\0\u0f9c\0\u0378\0\u0378\0\u0fe6"+ - "\0\u1030\0\u107a\0\u10c4\0\u0378\0\u110e\0\u1158\0\u11a2\0\u11ec"+ - "\0\u0378\0\u1236\0\u1280\0\u12ca\0\u1314\0\u135e\0\u13a8\0\u13f2"+ - "\0\u143c\0\u1486\0\u14d0\0\u151a\0\u1564\0\u15ae\0\u15f8\0\u1642"+ - "\0\u168c\0\u0378\0\u0378\0\u16d6\0\u0378\0\u0378\0\u1720\0\u176a"+ - "\0\u17b4\0\u0378\0\u176a\0\u0378\0\u176a\0\u17fe\0\u1848\0\u1892"+ - "\0\u18dc\0\u0378\0\u1926\0\u0378\0\u0378\0\u1970\0\u19ba\0\u0378"+ - "\0\u0378\0\u0378\0\u0378\0\u0378\0\u1a04\0\u1a4e\0\u1a98\0\u1ae2"+ - "\0\u1b2c\0\u1b76\0\u1bc0\0\u1c0a\0\u057e\0\u1c54\0\u1c9e\0\u1ce8"+ - "\0\u1d32\0\u1d7c\0\u1dc6\0\u1e10\0\u0378\0\u0378\0\u0378\0\u0378"+ - "\0\u0378\0\u1e5a\0\u1ea4\0\u1eee\0\u1f38\0\u1f82\0\u1fcc\0\u0378"+ - "\0\u0378\0\u2016\0\u2060\0\u20aa\0\u20f4\0\u213e\0\u2188\0\u21d2"+ - "\0\u221c\0\u2266\0\u22b0\0\u22fa\0\u2344\0\u238e\0\u23d8\0\u2422"+ - "\0\u246c\0\u24b6\0\u2500\0\u254a\0\u2594\0\u25de\0\u2628\0\u2672"+ - "\0\u26bc\0\u2706\0\u2750\0\u279a\0\u27e4\0\u0378\0\u0378\0\u282e"+ - "\0\u0378\0\u2878\0\u28c2\0\u0378\0\u290c\0\u0378\0\u0378\0\u0378"+ - "\0\u0378\0\u0378\0\u0378\0\u2956\0\u0378\0\u29a0\0\u0378\0\u0378"+ - "\0\u0378\0\u0378\0\u0378\0\u29ea\0\u2a34\0\u2a7e\0\u2ac8\0\u2b12"+ - "\0\u1236\0\u2b5c\0\u2ba6\0\u2bf0\0\u2c3a\0\u2c84\0\u2cce\0\u2d18"+ - "\0\u2d62\0\u2dac\0\u2df6\0\u2e40\0\u2e8a\0\u2ed4\0\u2f1e\0\u2f68"+ - "\0\u2fb2\0\u2ffc\0\u3046\0\u3090\0\u30da\0\u3124\0\u316e\0\u31b8"+ - "\0\u3202\0\u324c\0\u3296\0\u32e0\0\u332a\0\u3374\0\u33be\0\u3408"+ - "\0\u3452\0\u349c\0\u176a\0\u34e6\0\u3530\0\u357a\0\u35c4\0\u0378"+ - "\0\u0378\0\u360e\0\u3658\0\u36a2\0\u36ec\0\u3736\0\u3780\0\u057e"+ - "\0\u37ca\0\u3814\0\u385e\0\u38a8\0\u38f2\0\u393c\0\u3986\0\u39d0"+ - "\0\u3a1a\0\u3a64\0\u3aae\0\u3af8\0\u3b42\0\u3b8c\0\u0378\0\u0378"+ - "\0\u0378\0\u3bd6\0\u3c20\0\u3c6a\0\u0378\0\u3cb4\0\u3cfe\0\u3d48"+ - "\0\u3d92\0\u3ddc\0\u3e26\0\u3e70\0\u3eba\0\u3f04\0\u3f4e\0\u3f98"+ - "\0\u3fe2\0\u402c\0\u4076\0\u40c0\0\u410a\0\u4154\0\u419e\0\u41e8"+ - "\0\u4232\0\u427c\0\u42c6\0\u057e\0\u4310\0\u435a\0\u43a4\0\u057e"+ - "\0\u43ee\0\u4438\0\u4482\0\u44cc\0\u4516\0\u0378\0\u0378\0\u0378"+ - "\0\u0378\0\u0378\0\u4560\0\u0378\0\u45aa\0\u45f4\0\u463e\0\u1236"+ - "\0\u4688\0\u46d2\0\u471c\0\u4766\0\u47b0\0\u47fa\0\u4844\0\u488e"+ - "\0\u48d8\0\u4922\0\u496c\0\u49b6\0\u4a00\0\u4a4a\0\u4a94\0\u4ade"+ - "\0\u4b28\0\u4b72\0\u4bbc\0\u4c06\0\u4c50\0\u4c9a\0\u4ce4\0\u4d2e"+ - "\0\u4d78\0\u4dc2\0\u4e0c\0\u4e56\0\u4ea0\0\u4eea\0\u4f34\0\u1236"+ - "\0\u4f7e\0\u4fc8\0\u5012\0\u1236\0\u505c\0\u50a6\0\u50f0\0\u513a"+ - "\0\u5184\0\u51ce\0\u5218\0\u5262\0\u52ac\0\u0378\0\u0378\0\u52f6"+ - "\0\u5340\0\u538a\0\u53d4\0\u057e\0\u541e\0\u5468\0\u54b2\0\u54fc"+ - "\0\u5546\0\u5590\0\u057e\0\u55da\0\u057e\0\u5624\0\u566e\0\u56b8"+ - "\0\u5702\0\u057e\0\u574c\0\u5796\0\u57e0\0\u582a\0\u5874\0\u58be"+ - "\0\u5908\0\u5952\0\u3d48\0\u599c\0\u59e6\0\u5a30\0\u5a7a\0\u5ac4"+ - "\0\u5b0e\0\u5b58\0\u5ba2\0\u5bec\0\u057e\0\u5c36\0\u5c80\0\u057e"+ - "\0\u5cca\0\u5d14\0\u5d5e\0\u5da8\0\u5df2\0\u5e3c\0\u5e86\0\u5ed0"+ - "\0\u057e\0\u057e\0\u5f1a\0\u5f64\0\u5fae\0\u057e\0\u5ff8\0\u057e"+ - "\0\u6042\0\u0378\0\u608c\0\u60d6\0\u6120\0\u1236\0\u616a\0\u61b4"+ - "\0\u61fe\0\u6248\0\u6292\0\u62dc\0\u1236\0\u6326\0\u1236\0\u6370"+ - "\0\u63ba\0\u1236\0\u6404\0\u644e\0\u6498\0\u64e2\0\u652c\0\u6576"+ - "\0\u65c0\0\u1236\0\u660a\0\u6654\0\u1236\0\u669e\0\u66e8\0\u6732"+ - "\0\u677c\0\u67c6\0\u6810\0\u685a\0\u68a4\0\u1236\0\u1236\0\u68ee"+ - "\0\u6938\0\u6982\0\u1236\0\u69cc\0\u1236\0\u6a16\0\u6a60\0\u6aaa"+ - "\0\u0378\0\u0378\0\u5262\0\u6af4\0\u057e\0\u6b3e\0\u057e\0\u6b88"+ - "\0\u6bd2\0\u6c1c\0\u6c66\0\u6cb0\0\u6cfa\0\u6d44\0\u057e\0\u6d8e"+ - "\0\u6dd8\0\u6e22\0\u6e6c\0\u6eb6\0\u6f00\0\u6f4a\0\u6f94\0\u6fde"+ - "\0\u7028\0\u7072\0\u70bc\0\u7106\0\u057e\0\u057e\0\u7150\0\u719a"+ - "\0\u71e4\0\u057e\0\u722e\0\u057e\0\u7278\0\u057e\0\u72c2\0\u730c"+ - "\0\u7356\0\u73a0\0\u73ea\0\u057e\0\u1236\0\u7434\0\u1236\0\u747e"+ - "\0\u74c8\0\u7512\0\u755c\0\u75a6\0\u75f0\0\u763a\0\u1236\0\u7684"+ - "\0\u76ce\0\u7718\0\u7762\0\u77ac\0\u77f6\0\u7840\0\u1236\0\u1236"+ - "\0\u788a\0\u78d4\0\u791e\0\u1236\0\u7968\0\u1236\0\u79b2\0\u1236"+ - "\0\u79fc\0\u7a46\0\u7a90\0\u7ada\0\u7b24\0\u1236\0\u0378\0\u6a60"+ - "\0\u7b6e\0\u6af4\0\u7bb8\0\u7c02\0\u057e\0\u7c4c\0\u7c96\0\u7ce0"+ - "\0\u057e\0\u7d2a\0\u7d74\0\u7dbe\0\u7e08\0\u7e52\0\u057e\0\u7e9c"+ - "\0\u057e\0\u7ee6\0\u057e\0\u7f30\0\u7f7a\0\u057e\0\u7fc4\0\u057e"+ - "\0\u057e\0\u057e\0\u800e\0\u8058\0\u80a2\0\u1236\0\u80ec\0\u8136"+ - "\0\u8180\0\u1236\0\u81ca\0\u8214\0\u825e\0\u82a8\0\u82f2\0\u1236"+ - "\0\u833c\0\u1236\0\u8386\0\u1236\0\u83d0\0\u841a\0\u1236\0\u8464"+ - "\0\u1236\0\u1236\0\u1236\0\u84ae\0\u7b6e\0\u057e\0\u84f8\0\u8542"+ - "\0\u858c\0\u057e\0\u057e\0\u057e\0\u057e\0\u057e\0\u85d6\0\u8620"+ - "\0\u866a\0\u86b4\0\u86fe\0\u8748\0\u8792\0\u1236\0\u87dc\0\u8826"+ - "\0\u8870\0\u1236\0\u1236\0\u1236\0\u1236\0\u1236\0\u88ba\0\u8904"+ - "\0\u894e\0\u8998\0\u89e2\0\u8a2c\0\u8a76\0\u8ac0\0\u8b0a\0\u8b54"+ - "\0\u8b9e\0\u057e\0\u057e\0\u057e\0\u8be8\0\u8c32\0\u057e\0\u8c7c"+ - "\0\u8cc6\0\u8d10\0\u8d5a\0\u1236\0\u1236\0\u1236\0\u8da4\0\u8dee"+ - "\0\u1236\0\u8e38\0\u8e82\0\u057e\0\u057e\0\u8ecc\0\u057e\0\u8f16"+ - "\0\u8f60\0\u1236\0\u1236\0\u8faa\0\u1236\0\u057e\0\u057e\0\u8ff4"+ - "\0\u1236\0\u1236\0\u903e\0\u9088\0\u90d2\0\u057e\0\u1236"; + "\0\u08ac\0\u08f6\0\u0940\0\u098a\0\u09d4\0\u03c2\0\u0a1e\0\u0a68"+ + "\0\u0ab2\0\u0afc\0\u0b46\0\u0b90\0\u0bda\0\u0c24\0\u0c6e\0\u03c2"+ + "\0\u0cb8\0\u0d02\0\u03c2\0\u03c2\0\u03c2\0\u03c2\0\u03c2\0\u03c2"+ + "\0\u0d4c\0\u0d96\0\u03c2\0\u0de0\0\u0e2a\0\u0e74\0\u0ebe\0\u03c2"+ + "\0\u03c2\0\u03c2\0\u03c2\0\u0456\0\u0f08\0\u0f52\0\u0f9c\0\u0fe6"+ + "\0\u1030\0\u107a\0\u03c2\0\u03c2\0\u10c4\0\u110e\0\u1158\0\u11a2"+ + "\0\u03c2\0\u11ec\0\u1236\0\u1280\0\u12ca\0\u03c2\0\u1314\0\u135e"+ + "\0\u13a8\0\u13f2\0\u143c\0\u1486\0\u14d0\0\u151a\0\u1564\0\u15ae"+ + "\0\u15f8\0\u1642\0\u168c\0\u16d6\0\u1720\0\u176a\0\u03c2\0\u03c2"+ + "\0\u17b4\0\u03c2\0\u03c2\0\u17fe\0\u1848\0\u1892\0\u03c2\0\u1848"+ + "\0\u03c2\0\u1848\0\u18dc\0\u1926\0\u1970\0\u19ba\0\u03c2\0\u1a04"+ + "\0\u03c2\0\u03c2\0\u1a4e\0\u1a98\0\u03c2\0\u03c2\0\u03c2\0\u03c2"+ + "\0\u03c2\0\u1ae2\0\u1b2c\0\u1b76\0\u1bc0\0\u1c0a\0\u1c54\0\u1c9e"+ + "\0\u1ce8\0\u05c8\0\u1d32\0\u1d7c\0\u1dc6\0\u1e10\0\u1e5a\0\u1ea4"+ + "\0\u1eee\0\u03c2\0\u03c2\0\u03c2\0\u03c2\0\u03c2\0\u1f38\0\u1f82"+ + "\0\u1fcc\0\u2016\0\u2060\0\u20aa\0\u03c2\0\u03c2\0\u20f4\0\u213e"+ + "\0\u2188\0\u21d2\0\u221c\0\u2266\0\u22b0\0\u22fa\0\u2344\0\u238e"+ + "\0\u23d8\0\u2422\0\u246c\0\u24b6\0\u2500\0\u254a\0\u2594\0\u25de"+ + "\0\u2628\0\u2672\0\u26bc\0\u2706\0\u2750\0\u279a\0\u27e4\0\u282e"+ + "\0\u2878\0\u28c2\0\u290c\0\u03c2\0\u03c2\0\u03c2\0\u2956\0\u29a0"+ + "\0\u03c2\0\u29ea\0\u03c2\0\u03c2\0\u03c2\0\u03c2\0\u03c2\0\u03c2"+ + "\0\u03c2\0\u03c2\0\u2a34\0\u03c2\0\u2a7e\0\u03c2\0\u03c2\0\u03c2"+ + "\0\u03c2\0\u03c2\0\u2ac8\0\u2b12\0\u2b5c\0\u2ba6\0\u2bf0\0\u1314"+ + "\0\u2c3a\0\u2c84\0\u2cce\0\u2d18\0\u2d62\0\u2dac\0\u2df6\0\u2e40"+ + "\0\u2e8a\0\u2ed4\0\u2f1e\0\u2f68\0\u2fb2\0\u2ffc\0\u3046\0\u3090"+ + "\0\u30da\0\u3124\0\u316e\0\u31b8\0\u3202\0\u324c\0\u3296\0\u32e0"+ + "\0\u332a\0\u3374\0\u33be\0\u3408\0\u3452\0\u349c\0\u34e6\0\u3530"+ + "\0\u357a\0\u1848\0\u35c4\0\u360e\0\u3658\0\u36a2\0\u03c2\0\u03c2"+ + "\0\u36ec\0\u3736\0\u3780\0\u37ca\0\u3814\0\u385e\0\u05c8\0\u38a8"+ + "\0\u38f2\0\u393c\0\u3986\0\u39d0\0\u3a1a\0\u3a64\0\u3aae\0\u3af8"+ + "\0\u3b42\0\u3b8c\0\u3bd6\0\u3c20\0\u3c6a\0\u03c2\0\u03c2\0\u03c2"+ + "\0\u3cb4\0\u3cfe\0\u3d48\0\u03c2\0\u3d92\0\u3ddc\0\u3e26\0\u3e70"+ + "\0\u3eba\0\u3f04\0\u3f4e\0\u3f98\0\u3fe2\0\u402c\0\u4076\0\u40c0"+ + "\0\u410a\0\u4154\0\u419e\0\u41e8\0\u4232\0\u427c\0\u42c6\0\u4310"+ + "\0\u435a\0\u43a4\0\u05c8\0\u43ee\0\u4438\0\u4482\0\u05c8\0\u44cc"+ + "\0\u4516\0\u4560\0\u45aa\0\u45f4\0\u03c2\0\u03c2\0\u03c2\0\u03c2"+ + "\0\u03c2\0\u463e\0\u03c2\0\u4688\0\u46d2\0\u471c\0\u1314\0\u4766"+ + "\0\u47b0\0\u47fa\0\u4844\0\u488e\0\u48d8\0\u4922\0\u496c\0\u49b6"+ + "\0\u4a00\0\u4a4a\0\u4a94\0\u4ade\0\u4b28\0\u4b72\0\u4bbc\0\u4c06"+ + "\0\u4c50\0\u4c9a\0\u4ce4\0\u4d2e\0\u4d78\0\u4dc2\0\u4e0c\0\u4e56"+ + "\0\u4ea0\0\u4eea\0\u4f34\0\u4f7e\0\u4fc8\0\u5012\0\u1314\0\u505c"+ + "\0\u50a6\0\u50f0\0\u1314\0\u513a\0\u5184\0\u51ce\0\u5218\0\u5262"+ + "\0\u52ac\0\u52f6\0\u5340\0\u538a\0\u03c2\0\u03c2\0\u53d4\0\u541e"+ + "\0\u5468\0\u54b2\0\u05c8\0\u54fc\0\u5546\0\u5590\0\u55da\0\u5624"+ + "\0\u566e\0\u05c8\0\u56b8\0\u05c8\0\u5702\0\u574c\0\u5796\0\u57e0"+ + "\0\u05c8\0\u582a\0\u5874\0\u58be\0\u5908\0\u5952\0\u599c\0\u59e6"+ + "\0\u5a30\0\u3e26\0\u5a7a\0\u5ac4\0\u5b0e\0\u5b58\0\u5ba2\0\u5bec"+ + "\0\u5c36\0\u5c80\0\u5cca\0\u05c8\0\u5d14\0\u5d5e\0\u05c8\0\u5da8"+ + "\0\u5df2\0\u5e3c\0\u5e86\0\u5ed0\0\u5f1a\0\u5f64\0\u5fae\0\u05c8"+ + "\0\u05c8\0\u5ff8\0\u6042\0\u608c\0\u05c8\0\u60d6\0\u05c8\0\u6120"+ + "\0\u03c2\0\u616a\0\u61b4\0\u61fe\0\u1314\0\u6248\0\u6292\0\u62dc"+ + "\0\u6326\0\u6370\0\u63ba\0\u1314\0\u6404\0\u1314\0\u644e\0\u6498"+ + "\0\u1314\0\u64e2\0\u652c\0\u6576\0\u65c0\0\u660a\0\u6654\0\u669e"+ + "\0\u1314\0\u66e8\0\u6732\0\u1314\0\u677c\0\u67c6\0\u6810\0\u685a"+ + "\0\u68a4\0\u68ee\0\u6938\0\u6982\0\u1314\0\u1314\0\u69cc\0\u6a16"+ + "\0\u6a60\0\u1314\0\u6aaa\0\u1314\0\u6af4\0\u6b3e\0\u6b88\0\u03c2"+ + "\0\u03c2\0\u5340\0\u6bd2\0\u05c8\0\u6c1c\0\u05c8\0\u6c66\0\u6cb0"+ + "\0\u6cfa\0\u6d44\0\u6d8e\0\u6dd8\0\u6e22\0\u05c8\0\u6e6c\0\u6eb6"+ + "\0\u6f00\0\u6f4a\0\u6f94\0\u6fde\0\u7028\0\u7072\0\u70bc\0\u7106"+ + "\0\u7150\0\u719a\0\u71e4\0\u05c8\0\u05c8\0\u722e\0\u7278\0\u72c2"+ + "\0\u05c8\0\u730c\0\u05c8\0\u7356\0\u05c8\0\u73a0\0\u73ea\0\u7434"+ + "\0\u747e\0\u74c8\0\u05c8\0\u1314\0\u7512\0\u1314\0\u755c\0\u75a6"+ + "\0\u75f0\0\u763a\0\u7684\0\u76ce\0\u7718\0\u1314\0\u7762\0\u77ac"+ + "\0\u77f6\0\u7840\0\u788a\0\u78d4\0\u791e\0\u1314\0\u1314\0\u7968"+ + "\0\u79b2\0\u79fc\0\u1314\0\u7a46\0\u1314\0\u7a90\0\u1314\0\u7ada"+ + "\0\u7b24\0\u7b6e\0\u7bb8\0\u7c02\0\u1314\0\u03c2\0\u6b3e\0\u7c4c"+ + "\0\u6bd2\0\u7c96\0\u7ce0\0\u05c8\0\u7d2a\0\u7d74\0\u7dbe\0\u05c8"+ + "\0\u7e08\0\u7e52\0\u7e9c\0\u7ee6\0\u7f30\0\u05c8\0\u7f7a\0\u05c8"+ + "\0\u7fc4\0\u05c8\0\u800e\0\u8058\0\u05c8\0\u80a2\0\u05c8\0\u05c8"+ + "\0\u05c8\0\u80ec\0\u8136\0\u8180\0\u1314\0\u81ca\0\u8214\0\u825e"+ + "\0\u1314\0\u82a8\0\u82f2\0\u833c\0\u8386\0\u83d0\0\u1314\0\u841a"+ + "\0\u1314\0\u8464\0\u1314\0\u84ae\0\u84f8\0\u1314\0\u8542\0\u1314"+ + "\0\u1314\0\u1314\0\u858c\0\u7c4c\0\u05c8\0\u85d6\0\u8620\0\u866a"+ + "\0\u05c8\0\u05c8\0\u05c8\0\u05c8\0\u05c8\0\u86b4\0\u86fe\0\u8748"+ + "\0\u8792\0\u87dc\0\u8826\0\u8870\0\u1314\0\u88ba\0\u8904\0\u894e"+ + "\0\u1314\0\u1314\0\u1314\0\u1314\0\u1314\0\u8998\0\u89e2\0\u8a2c"+ + "\0\u8a76\0\u8ac0\0\u8b0a\0\u8b54\0\u8b9e\0\u8be8\0\u8c32\0\u8c7c"+ + "\0\u05c8\0\u05c8\0\u05c8\0\u8cc6\0\u8d10\0\u05c8\0\u8d5a\0\u8da4"+ + "\0\u8dee\0\u8e38\0\u1314\0\u1314\0\u1314\0\u8e82\0\u8ecc\0\u1314"+ + "\0\u8f16\0\u8f60\0\u05c8\0\u05c8\0\u8faa\0\u05c8\0\u8ff4\0\u903e"+ + "\0\u1314\0\u1314\0\u9088\0\u1314\0\u05c8\0\u05c8\0\u90d2\0\u1314"+ + "\0\u1314\0\u911c\0\u9166\0\u91b0\0\u05c8\0\u1314"; private static int [] zzUnpackRowMap() { - int [] result = new int[679]; + int [] result = new int[686]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -374,605 +376,607 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\15\3\16\1\17\1\20\1\21\1\22\1\23\1\24"+ - "\1\25\1\26\1\27\2\26\1\30\1\26\1\31\1\26"+ - "\1\32\1\26\1\33\1\26\1\34\1\26\1\35\1\36"+ - "\1\26\1\37\1\40\1\26\1\27\2\26\1\41\1\26"+ - "\1\42\1\43\1\44\1\45\1\46\1\47\1\50\1\26"+ - "\1\51\1\52\1\53\2\26\1\54\1\26\1\55\3\26"+ - "\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\65"+ - "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\1\76\1\77\1\100\1\15\3\16\1\17\1\20\1\21"+ - "\1\22\1\23\1\24\1\25\1\26\1\27\2\26\1\30"+ - "\1\26\1\31\1\26\1\32\1\26\1\33\1\26\1\34"+ - "\1\26\1\35\1\36\1\26\1\37\1\40\1\26\1\27"+ - "\2\26\1\41\1\26\1\42\1\43\1\44\1\101\1\46"+ - "\1\47\1\50\1\26\1\51\1\52\1\53\2\26\1\54"+ - "\1\26\1\55\3\26\1\56\1\57\1\60\1\61\1\62"+ - "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72"+ - "\1\73\1\74\1\75\1\76\1\77\1\100\1\102\1\103"+ - "\2\104\1\102\1\103\1\105\35\102\1\106\1\102\1\107"+ - "\43\102\6\110\1\105\35\110\1\106\1\110\1\111\43\110"+ - "\6\112\1\113\1\114\34\112\1\115\45\112\7\116\1\117"+ - "\34\116\1\120\45\116\13\121\1\122\1\121\2\122\1\123"+ - "\1\122\1\124\1\122\1\125\1\122\1\126\1\122\1\127"+ - "\1\122\2\121\1\122\1\121\1\130\1\122\1\121\2\122"+ - "\1\121\1\122\4\121\1\131\1\132\1\133\1\122\1\134"+ - "\1\135\1\136\2\122\1\137\1\122\1\140\3\122\1\141"+ - "\1\142\21\121\42\143\1\144\47\143\13\145\1\122\1\145"+ - "\14\122\2\145\1\122\1\145\2\122\1\145\2\122\1\145"+ - "\1\122\4\145\20\122\22\145\1\146\5\147\1\150\1\151"+ - "\102\146\1\152\5\147\1\153\103\152\1\154\5\147\1\155"+ - "\103\154\113\0\5\16\1\156\104\0\2\17\1\157\1\0"+ - "\1\17\113\0\1\160\1\161\61\0\1\162\27\0\1\163"+ - "\31\0\1\164\27\0\1\165\31\0\1\166\171\0\1\167"+ - "\32\0\16\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\36\0\1\27\2\170\2\171\2\172\2\173\2\174\2\175"+ - "\2\0\1\176\1\27\2\0\1\27\2\0\1\177\62\0"+ - "\6\26\1\200\1\26\1\201\5\26\2\0\7\26\1\0"+ - "\2\26\3\0\1\26\1\202\6\26\1\203\7\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\10\26\1\204"+ - "\7\26\35\0\4\26\1\205\11\26\2\0\7\26\1\0"+ - "\2\26\3\0\7\26\1\206\1\26\1\207\6\26\35\0"+ - "\14\26\1\210\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\10\26\1\211\7\26\35\0\6\26\1\212\7\26\2\0"+ - "\5\26\1\213\1\26\1\0\2\26\3\0\11\26\1\214"+ - "\6\26\53\0\1\215\40\0\1\216\51\0\1\217\37\0"+ - "\1\220\7\0\1\221\23\0\1\27\2\170\2\171\2\172"+ - "\2\173\2\174\2\175\2\0\1\176\1\27\2\222\1\27"+ - "\2\223\1\177\62\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\6\26\1\224\1\26\1\225\3\26\1\226\3\26"+ - "\64\0\1\227\44\0\1\230\11\0\1\231\3\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\22\0\2\232"+ - "\2\0\2\232\1\233\36\232\1\234\44\232\2\235\2\0"+ - "\2\235\1\236\35\235\1\0\1\235\1\237\43\235\13\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\240"+ - "\4\26\1\241\3\26\1\242\5\26\35\0\16\26\2\0"+ - "\2\26\1\243\4\26\1\0\2\26\3\0\4\26\1\244"+ - "\13\26\35\0\6\26\1\245\7\26\2\0\7\26\1\0"+ - "\2\26\3\0\1\26\1\246\6\26\1\247\4\26\1\250"+ - "\2\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\251\4\26\1\252\1\26\1\253\1\254\1\26"+ - "\1\255\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\6\26\1\256\6\26\1\257\2\26\35\0\14\26\1\260"+ - "\1\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\14\26\1\261\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\1\26\1\262\10\26\1\263\5\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\10\26\1\264\7\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\15\26\1\265"+ - "\2\26\64\0\1\266\34\0\1\267\104\0\1\270\10\0"+ - "\1\271\100\0\1\272\6\0\1\273\102\0\1\274\7\0"+ - "\1\275\101\0\1\276\111\0\1\277\111\0\1\300\13\0"+ - "\1\301\75\0\1\302\14\0\1\303\2\0\2\102\2\0"+ - "\2\102\1\0\35\102\1\0\1\102\1\0\44\102\1\103"+ - "\2\104\2\103\1\304\35\102\1\0\1\102\1\0\43\102"+ - "\1\0\5\104\1\304\103\0\1\305\3\0\1\305\1\0"+ - "\104\305\6\110\1\0\35\110\1\0\1\110\1\0\43\110"+ - "\46\0\1\306\43\0\6\112\2\0\34\112\1\0\45\112"+ - "\7\0\1\307\102\0\13\310\1\0\1\310\14\0\2\310"+ - "\1\0\1\310\2\0\1\310\2\0\1\310\1\0\4\310"+ - "\21\0\21\310\7\116\1\0\34\116\1\0\45\116\44\0"+ - "\1\311\45\0\7\312\1\313\3\312\1\0\1\312\14\0"+ - "\2\312\1\0\1\312\2\0\1\312\2\0\1\312\1\0"+ - "\1\313\3\312\21\0\21\312\13\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\6\122\1\314\1\122"+ - "\1\315\5\122\2\0\7\122\1\0\1\122\4\0\1\122"+ - "\1\316\6\122\1\317\7\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\10\122\1\320\7\122\35\0\4\122"+ - "\1\321\11\122\2\0\7\122\1\0\1\122\4\0\7\122"+ - "\1\322\1\122\1\323\6\122\35\0\14\122\1\324\1\122"+ - "\2\0\7\122\1\0\1\122\4\0\10\122\1\325\7\122"+ - "\35\0\6\122\1\326\7\122\2\0\5\122\1\327\1\122"+ - "\1\0\1\122\4\0\11\122\1\330\6\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\6\122\1\331\1\122"+ - "\1\332\3\122\1\333\3\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\1\122\1\334\4\122\1\335\3\122"+ - "\1\336\5\122\35\0\16\122\2\0\2\122\1\337\4\122"+ - "\1\0\1\122\4\0\4\122\1\340\13\122\35\0\6\122"+ - "\1\341\7\122\2\0\7\122\1\0\1\122\4\0\1\122"+ - "\1\342\6\122\1\343\4\122\1\344\2\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\5\122\1\345\4\122"+ - "\1\346\1\122\1\347\1\350\1\122\1\351\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\6\122\1\352\6\122"+ - "\1\353\2\122\35\0\14\122\1\354\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\14\122\1\355\1\122"+ - "\2\0\7\122\1\0\1\122\4\0\1\122\1\356\10\122"+ - "\1\357\5\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\10\122\1\360\7\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\15\122\1\361\2\122\35\0\1\362"+ - "\1\0\14\362\2\0\1\362\1\0\2\362\1\0\2\362"+ - "\1\0\1\362\4\0\20\362\23\0\5\147\1\363\104\0"+ - "\3\147\1\0\1\147\113\0\1\364\1\365\102\0\3\16"+ - "\1\0\1\16\106\0\1\17\107\0\2\160\2\0\106\160"+ - "\10\366\1\367\101\366\72\0\1\370\17\0\2\166\2\0"+ - "\106\166\72\0\1\371\33\0\1\372\14\0\2\373\1\0"+ - "\1\372\2\0\1\372\66\0\1\27\16\0\1\176\1\27"+ - "\2\0\1\27\66\0\1\374\17\0\1\374\2\0\1\374"+ - "\65\0\16\26\2\0\7\26\1\0\2\26\3\0\10\26"+ - "\1\375\7\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\11\26\1\376\6\26\35\0\6\26\1\377\7\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\6\26\1\u0100\11\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\11\26"+ - "\1\u0101\6\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\1\u0102\17\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\4\26\1\u0103\1\u0104\12\26\35\0\4\26"+ - "\1\u0105\11\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\12\26"+ - "\1\u0106\5\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\4\26\1\u0107\13\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\5\26\1\u0108\12\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\12\26\1\u0109\5\26"+ - "\56\0\1\u010a\2\0\1\u010a\65\0\2\u010b\2\0\2\u010b"+ - "\4\0\4\u010b\3\0\4\u010b\11\0\2\u010b\52\0\14\26"+ - "\1\u010c\1\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\10\26"+ - "\1\u010d\7\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\5\26\1\u010e\12\26\64\0\1\u010f\36\0\1\u0110"+ - "\10\0\2\232\2\0\2\232\1\233\36\232\1\u0111\50\232"+ - "\2\u0112\1\u0113\103\232\45\0\1\u0114\44\0\2\235\2\0"+ - "\2\235\1\236\35\235\1\0\1\235\1\u0115\47\235\2\u0116"+ - "\1\u0117\103\235\46\0\1\u0118\56\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\2\26\1\u0119\15\26\35\0\10\26"+ - "\1\u011a\5\26\2\0\7\26\1\0\2\26\3\0\10\26"+ - "\1\u011b\7\26\35\0\16\26\2\0\2\26\1\u011c\4\26"+ - "\1\0\2\26\3\0\20\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\4\26\1\u011d\13\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\4\26\1\u011e\13\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\1\26"+ - "\1\u011f\16\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\4\26\1\u0120\1\u0121\12\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\11\26\1\u0122\6\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u0123"+ - "\16\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\1\26\1\u0124\4\26\1\u0125\11\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\u0126\17\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\11\26\1\u0127\6\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\10\26"+ - "\1\u0128\7\26\35\0\10\26\1\u0129\5\26\2\0\7\26"+ - "\1\0\2\26\3\0\20\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\1\26\1\u012a\10\26\1\u012b\1\26"+ - "\1\u012c\3\26\35\0\10\26\1\u012d\5\26\2\0\7\26"+ - "\1\0\2\26\3\0\6\26\1\u012e\11\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\5\26\1\u012f\12\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\17\26"+ - "\1\u0130\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\u0131\12\26\35\0\6\26\1\u0132\7\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\6\26\1\u0133"+ - "\1\26\1\u0134\5\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\10\26\1\u0135\5\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\114\0\1\u0136\10\0\1\u0137\110\0"+ - "\1\u0138\101\0\1\u0139\111\0\1\u013a\7\0\1\u013b\10\0"+ - "\3\104\1\0\1\104\152\0\1\u013c\56\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\10\122\1\u013d\7\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\11\122\1\u013e"+ - "\6\122\35\0\6\122\1\u013f\7\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\6\122\1\u0140\11\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\11\122\1\u0141\6\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\1\u0142\17\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\4\122"+ - "\1\u0143\1\u0144\12\122\35\0\4\122\1\u0145\11\122\2\0"+ - "\7\122\1\0\1\122\4\0\20\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\12\122\1\u0146\5\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\4\122\1\u0147"+ - "\13\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\5\122\1\u0148\12\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\12\122\1\u0149\5\122\35\0\14\122\1\u014a"+ - "\1\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\10\122\1\u014b"+ - "\7\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\5\122\1\u014c\12\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\2\122\1\u014d\15\122\35\0\10\122\1\u014e"+ - "\5\122\2\0\7\122\1\0\1\122\4\0\10\122\1\u014f"+ - "\7\122\35\0\16\122\2\0\2\122\1\u0150\4\122\1\0"+ - "\1\122\4\0\20\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\4\122\1\u0151\13\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\4\122\1\u0152\13\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\1\122\1\u0153"+ - "\16\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\4\122\1\u0154\1\u0155\12\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\11\122\1\u0156\6\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\1\122\1\u0157\16\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\122"+ - "\1\u0158\4\122\1\u0159\11\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\1\u015a\17\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\11\122\1\u015b\6\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\10\122\1\u015c"+ - "\7\122\35\0\10\122\1\u015d\5\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\1\122\1\u015e\10\122\1\u015f\1\122\1\u0160"+ - "\3\122\35\0\10\122\1\u0161\5\122\2\0\7\122\1\0"+ - "\1\122\4\0\6\122\1\u0162\11\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\5\122\1\u0163\12\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\17\122\1\u0164"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ - "\1\u0165\12\122\35\0\6\122\1\u0166\7\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\6\122\1\u0167\1\122"+ - "\1\u0168\5\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\10\122\1\u0169\5\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\16\362\2\0\7\362\1\0\1\362"+ - "\4\0\20\362\22\0\2\364\2\0\106\364\10\u016a\1\u016b"+ - "\101\u016a\10\366\1\u016c\101\366\7\u016d\1\u016e\1\367\101\u016d"+ - "\14\0\1\372\2\u016f\2\171\4\0\2\174\4\0\1\373"+ - "\1\372\2\0\1\372\66\0\1\372\17\0\1\372\2\0"+ - "\1\372\66\0\1\374\2\u016f\2\171\4\0\2\174\2\175"+ - "\2\0\1\u0170\1\374\2\0\1\374\65\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\26\1\u0171\16\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u0172"+ - "\16\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\4\26\1\u0173\13\26\35\0\2\26\1\u0174\13\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\6\26\1\u0175"+ - "\7\26\2\0\7\26\1\0\2\26\3\0\10\26\1\u0176"+ - "\7\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\u0177\12\26\35\0\14\26\1\u0178\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\26\1\u0179\16\26\35\0"+ - "\16\26\2\0\2\26\1\u017a\4\26\1\0\2\26\3\0"+ - "\20\26\35\0\14\26\1\u017b\1\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\14\26\1\u017c\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\7\26\1\u017d\10\26\37\0"+ - "\2\170\2\0\2\172\2\173\6\0\1\u017e\1\u010a\2\0"+ - "\1\u010a\65\0\2\u010b\2\170\2\u010b\2\172\2\173\4\u010b"+ - "\2\0\1\u017f\4\u010b\11\0\2\u010b\52\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\26\1\u0180\16\26\35\0"+ - "\6\26\1\u0181\7\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\14\26\1\u0182\1\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\22\0\4\232\2\u0112\1\u0183\36\232"+ - "\1\u0111\45\232\1\u0112\1\u0184\1\u0185\1\232\1\u0112\1\233"+ - "\36\232\1\u0111\44\232\6\u0114\1\u0186\36\u0114\1\u0187\44\u0114"+ - "\4\235\2\u0116\1\u0188\35\235\1\0\1\235\1\u0115\44\235"+ - "\1\u0116\1\u0189\1\u018a\1\235\1\u0116\1\236\35\235\1\0"+ - "\1\235\1\u0115\43\235\6\u018b\1\u018c\35\u018b\1\0\1\u018b"+ - "\1\u018d\43\u018b\13\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\3\26\1\u018e\14\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\13\26\1\u018f\4\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\5\26\1\u0190\12\26"+ - "\35\0\6\26\1\u0191\7\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\5\26\1\u0192\12\26\35\0\14\26\1\u0193\1\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\4\26\1\u0194\13\26"+ - "\35\0\14\26\1\u0195\1\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\2\26\1\u0196\15\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\5\26\1\u0197\12\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\6\26\1\u0198\11\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\5\26"+ - "\1\u0199\12\26\35\0\10\26\1\u019a\5\26\2\0\7\26"+ - "\1\0\2\26\3\0\20\26\35\0\14\26\1\u019b\1\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\2\26\1\u019c\15\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\6\26"+ - "\1\u019d\11\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\5\26\1\u019e\12\26\35\0\10\26\1\u019f\5\26"+ - "\2\0\7\26\1\0\2\26\3\0\11\26\1\u01a0\6\26"+ - "\35\0\14\26\1\u01a1\1\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\4\26\1\u01a2\13\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\10\26\1\u01a3\7\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\12\26\1\u01a4\5\26"+ - "\35\0\10\26\1\u01a5\5\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\35\0\6\26\1\u01a6\7\26\2\0\7\26"+ - "\1\0\2\26\3\0\20\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\1\26\1\u01a7\16\26\35\0\12\26"+ - "\1\u01a8\3\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\6\26\1\u01a9\7\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\114\0\1\u01aa\32\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\1\122\1\u01ab\16\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\1\122\1\u01ac\16\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\4\122"+ - "\1\u01ad\13\122\35\0\2\122\1\u01ae\13\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\6\122\1\u01af\7\122"+ - "\2\0\7\122\1\0\1\122\4\0\10\122\1\u01b0\7\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ - "\1\u01b1\12\122\35\0\14\122\1\u01b2\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\1\122\1\u01b3\16\122\35\0\16\122"+ - "\2\0\2\122\1\u01b4\4\122\1\0\1\122\4\0\20\122"+ - "\35\0\14\122\1\u01b5\1\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\14\122\1\u01b6\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\7\122\1\u01b7\10\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\1\122\1\u01b8\16\122"+ - "\35\0\6\122\1\u01b9\7\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\14\122\1\u01ba\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\3\122\1\u01bb\14\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\13\122\1\u01bc\4\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ - "\1\u01bd\12\122\35\0\6\122\1\u01be\7\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\5\122\1\u01bf\12\122\35\0\14\122"+ - "\1\u01c0\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\4\122"+ - "\1\u01c1\13\122\35\0\14\122\1\u01c2\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\2\122\1\u01c3\15\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\5\122\1\u01c4\12\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\6\122"+ - "\1\u01c5\11\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\5\122\1\u01c6\12\122\35\0\10\122\1\u01c7\5\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\14\122"+ - "\1\u01c8\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\2\122"+ - "\1\u01c9\15\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\6\122\1\u01ca\11\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\5\122\1\u01cb\12\122\35\0\10\122"+ - "\1\u01cc\5\122\2\0\7\122\1\0\1\122\4\0\11\122"+ - "\1\u01cd\6\122\35\0\14\122\1\u01ce\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\4\122\1\u01cf\13\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\10\122\1\u01d0\7\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\12\122"+ - "\1\u01d1\5\122\35\0\10\122\1\u01d2\5\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\6\122\1\u01d3\7\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\1\122\1\u01d4\16\122"+ - "\35\0\12\122\1\u01d5\3\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\6\122\1\u01d6\7\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\22\0\10\u016a\1\u01d7\101\u016a"+ - "\7\u01d8\1\u01d9\1\u016b\101\u01d8\7\366\1\u01da\1\u01db\101\366"+ - "\10\u016d\1\u01dc\101\u016d\14\0\1\374\16\0\1\u0170\1\374"+ - "\2\0\1\374\65\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\5\26\1\u01dd\12\26\35\0\6\26\1\u01de\7\26"+ - "\2\0\7\26\1\0\2\26\3\0\20\26\35\0\14\26"+ - "\1\u01df\1\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\14\26\1\u01e0\1\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\6\26\1\u01e1\11\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\1\26\1\u01e2\16\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\6\26\1\u01e3\11\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\12\26"+ - "\1\u01e4\5\26\35\0\6\26\1\u01e5\7\26\2\0\7\26"+ - "\1\0\2\26\3\0\20\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\11\26\1\u01e6\6\26\55\0\1\u017e"+ - "\1\u010a\2\0\1\u010a\65\0\2\u010b\2\0\2\u010b\4\0"+ - "\4\u010b\2\0\1\u017f\4\u010b\11\0\2\u010b\52\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\3\26\1\u01e7\14\26"+ - "\35\0\14\26\1\u01e8\1\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\22\0\1\232\2\u0112\1\u01e9\2\u0112\1\u0113"+ - "\103\232\2\0\2\232\2\u0184\1\u01ea\105\0\1\u0112\1\232"+ - "\2\u0184\1\u01ea\103\0\157\u0114\1\u01eb\44\u0114\1\235\2\u0116"+ - "\1\u01ec\2\u0116\1\u0117\103\235\2\0\2\235\2\u0189\1\u01ed"+ - "\105\0\1\u0116\1\235\2\u0189\1\u01ed\103\0\120\u018b\1\0"+ - "\35\u018b\1\0\1\u018b\1\u01ee\43\u018b\13\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\26\1\u01ef\16\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u01f0"+ - "\16\26\35\0\14\26\1\u01f1\1\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\10\26\1\u01f2\5\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\6\26\1\u01f3\11\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\6\26\1\u01f4"+ - "\11\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\4\26\1\u01f5\13\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\15\26\1\u01f6\2\26\35\0\10\26\1\u01f7"+ - "\5\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\10\26\1\u01f8\5\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\2\26\1\u01f9\15\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\6\26\1\u01fa\11\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\15\26\1\u01fb\2\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\5\26\1\u01fc"+ - "\12\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\2\26\1\u01fd\15\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\5\26\1\u01fe\12\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\4\26\1\u01ff\13\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\17\26\1\u0200"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\6\26"+ - "\1\u0201\11\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\13\26\1\u0202\4\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\5\26\1\u0203\12\26\35\0\14\26"+ - "\1\u0204\1\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\5\122"+ - "\1\u0205\12\122\35\0\6\122\1\u0206\7\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\14\122\1\u0207\1\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\14\122"+ - "\1\u0208\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\6\122"+ - "\1\u0209\11\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\1\122\1\u020a\16\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\6\122\1\u020b\11\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\12\122\1\u020c\5\122"+ - "\35\0\6\122\1\u020d\7\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\11\122\1\u020e\6\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\3\122\1\u020f\14\122\35\0\14\122"+ - "\1\u0210\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\122"+ - "\1\u0211\16\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\1\122\1\u0212\16\122\35\0\14\122\1\u0213\1\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\10\122"+ - "\1\u0214\5\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\6\122"+ - "\1\u0215\11\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\6\122\1\u0216\11\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\4\122\1\u0217\13\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\15\122\1\u0218\2\122"+ - "\35\0\10\122\1\u0219\5\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\10\122\1\u021a\5\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\2\122\1\u021b\15\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\6\122\1\u021c\11\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\15\122"+ - "\1\u021d\2\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\5\122\1\u021e\12\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\2\122\1\u021f\15\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\5\122\1\u0220\12\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\4\122"+ - "\1\u0221\13\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\17\122\1\u0222\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\6\122\1\u0223\11\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\13\122\1\u0224\4\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\5\122\1\u0225"+ - "\12\122\35\0\14\122\1\u0226\1\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\22\0\7\u016a\1\u0227\1\u0228\101\u016a"+ - "\10\u01d8\1\u0229\101\u01d8\7\u016d\1\u016e\1\u022a\101\u016d\13\0"+ - "\6\26\1\u022b\7\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\7\26\1\u022c\10\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\5\26\1\u022d\12\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\11\26\1\u022e\6\26\35\0"+ - "\4\26\1\u022f\11\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\6\26\1\u0230\7\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\14\26\1\u0231\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\12\26\1\u0232"+ - "\3\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u0233"+ - "\16\26\22\0\2\232\1\u0112\1\232\2\u0112\1\u0183\36\232"+ - "\1\u0111\44\232\1\0\2\u0184\1\u0185\1\0\1\u0184\104\0"+ - "\45\u0114\1\u0111\44\u0114\2\235\1\u0116\1\235\2\u0116\1\u0188"+ - "\35\235\1\0\1\235\1\u0115\43\235\1\0\2\u0189\1\u018a"+ - "\1\0\1\u0189\104\0\6\u018b\1\0\35\u018b\1\0\1\u018b"+ - "\1\u0115\43\u018b\13\0\2\26\1\u0234\13\26\2\0\7\26"+ - "\1\0\2\26\3\0\20\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\5\26\1\u0235\12\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\2\26\1\u0236\15\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\2\26"+ - "\1\u0237\15\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\1\26\1\u0238\16\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\5\26\1\u0239\12\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\11\26\1\u023a\6\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\2\26"+ - "\1\u023b\15\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\5\26\1\u023c\12\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\6\26\1\u023d\11\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\15\26\1\u023e\2\26"+ - "\35\0\10\26\1\u023f\5\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\35\0\16\26\2\0\7\26\1\0\2\26"+ - "\3\0\4\26\1\u0240\13\26\35\0\16\26\2\0\7\26"+ - "\1\0\2\26\3\0\11\26\1\u0241\6\26\35\0\14\26"+ - "\1\u0242\1\26\2\0\7\26\1\0\2\26\3\0\20\26"+ - "\35\0\10\26\1\u0243\5\26\2\0\7\26\1\0\2\26"+ - "\3\0\20\26\35\0\6\122\1\u0244\7\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\7\122\1\u0245\10\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\5\122\1\u0246\12\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\11\122"+ - "\1\u0247\6\122\35\0\4\122\1\u0248\11\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\6\122\1\u0249\7\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\14\122"+ - "\1\u024a\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\12\122\1\u024b\3\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\1\122\1\u024c\16\122\35\0\2\122\1\u024d\13\122"+ - "\2\0\7\122\1\0\1\122\4\0\20\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\5\122\1\u024e\12\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\2\122"+ - "\1\u024f\15\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\2\122\1\u0250\15\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\1\122\1\u0251\16\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\5\122\1\u0252\12\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\11\122"+ - "\1\u0253\6\122\35\0\16\122\2\0\7\122\1\0\1\122"+ - "\4\0\2\122\1\u0254\15\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\5\122\1\u0255\12\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\6\122\1\u0256\11\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\15\122"+ - "\1\u0257\2\122\35\0\10\122\1\u0258\5\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\4\122\1\u0259\13\122\35\0\16\122"+ - "\2\0\7\122\1\0\1\122\4\0\11\122\1\u025a\6\122"+ - "\35\0\14\122\1\u025b\1\122\2\0\7\122\1\0\1\122"+ - "\4\0\20\122\35\0\10\122\1\u025c\5\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\22\0\7\u01d8\1\u01d9\1\u025d"+ - "\101\u01d8\13\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\14\26\1\u025e\3\26\35\0\14\26\1\u025f\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\2\26\1\u0260\15\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\1\26\1\u0261"+ - "\16\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\u0262\12\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\4\26\1\u0263\13\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\11\26\1\u0264\6\26\35\0"+ - "\14\26\1\u0265\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\14\26\1\u0266\1\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\5\26\1\u0267\12\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\2\26\1\u0268\15\26\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\12\26\1\u0269"+ - "\5\26\35\0\4\26\1\u026a\11\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\10\26\1\u026b\7\26\35\0\14\26\1\u026c"+ - "\1\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\6\26\1\u026d\7\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\14\122\1\u026e\3\122\35\0\14\122\1\u026f\1\122\2\0"+ - "\7\122\1\0\1\122\4\0\20\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\2\122\1\u0270\15\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\1\122\1\u0271"+ - "\16\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\5\122\1\u0272\12\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\4\122\1\u0273\13\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\11\122\1\u0274\6\122\35\0"+ - "\14\122\1\u0275\1\122\2\0\7\122\1\0\1\122\4\0"+ - "\20\122\35\0\14\122\1\u0276\1\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\5\122\1\u0277\12\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\2\122\1\u0278\15\122\35\0"+ - "\16\122\2\0\7\122\1\0\1\122\4\0\12\122\1\u0279"+ - "\5\122\35\0\4\122\1\u027a\11\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\10\122\1\u027b\7\122\35\0\14\122\1\u027c"+ - "\1\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ - "\6\122\1\u027d\7\122\2\0\7\122\1\0\1\122\4\0"+ - "\20\122\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\11\26\1\u027e\6\26\35\0\14\26\1\u027f\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\2\26\1\u0280\15\26\35\0"+ - "\14\26\1\u0281\1\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\u0282\12\26\35\0\14\26\1\u0283\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\16\26\2\0"+ - "\7\26\1\0\2\26\3\0\1\u0284\17\26\35\0\16\26"+ - "\2\0\7\26\1\0\2\26\3\0\11\26\1\u0285\6\26"+ - "\35\0\16\26\2\0\7\26\1\0\2\26\3\0\11\26"+ - "\1\u0286\6\26\35\0\14\26\1\u0287\1\26\2\0\7\26"+ - "\1\0\2\26\3\0\20\26\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\11\122\1\u0288\6\122\35\0\14\122"+ - "\1\u0289\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\2\122"+ - "\1\u028a\15\122\35\0\14\122\1\u028b\1\122\2\0\7\122"+ - "\1\0\1\122\4\0\20\122\35\0\16\122\2\0\7\122"+ - "\1\0\1\122\4\0\5\122\1\u028c\12\122\35\0\14\122"+ - "\1\u028d\1\122\2\0\7\122\1\0\1\122\4\0\20\122"+ - "\35\0\16\122\2\0\7\122\1\0\1\122\4\0\1\u028e"+ - "\17\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\11\122\1\u028f\6\122\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\11\122\1\u0290\6\122\35\0\14\122\1\u0291"+ - "\1\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\5\26\1\u0292"+ - "\12\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\10\26\1\u0293\7\26\35\0\14\26\1\u0294\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\12\26\1\u0295"+ - "\3\26\2\0\7\26\1\0\2\26\3\0\20\26\35\0"+ - "\10\26\1\u0296\5\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\16\26\2\0\7\26\1\0\2\26\3\0"+ - "\5\26\1\u0297\12\26\35\0\16\122\2\0\7\122\1\0"+ - "\1\122\4\0\5\122\1\u0298\12\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\10\122\1\u0299\7\122\35\0"+ - "\14\122\1\u029a\1\122\2\0\7\122\1\0\1\122\4\0"+ - "\20\122\35\0\12\122\1\u029b\3\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\35\0\10\122\1\u029c\5\122\2\0"+ - "\7\122\1\0\1\122\4\0\20\122\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\5\122\1\u029d\12\122\35\0"+ - "\16\26\2\0\7\26\1\0\2\26\3\0\4\26\1\u029e"+ - "\13\26\35\0\4\26\1\u029f\11\26\2\0\7\26\1\0"+ - "\2\26\3\0\20\26\35\0\16\26\2\0\7\26\1\0"+ - "\2\26\3\0\16\26\1\u02a0\1\26\35\0\16\122\2\0"+ - "\7\122\1\0\1\122\4\0\4\122\1\u02a1\13\122\35\0"+ - "\4\122\1\u02a2\11\122\2\0\7\122\1\0\1\122\4\0"+ - "\20\122\35\0\16\122\2\0\7\122\1\0\1\122\4\0"+ - "\16\122\1\u02a3\1\122\35\0\14\26\1\u02a4\1\26\2\0"+ - "\7\26\1\0\2\26\3\0\20\26\35\0\14\122\1\u02a5"+ - "\1\122\2\0\7\122\1\0\1\122\4\0\20\122\35\0"+ - "\12\26\1\u02a6\3\26\2\0\7\26\1\0\2\26\3\0"+ - "\20\26\35\0\12\122\1\u02a7\3\122\2\0\7\122\1\0"+ - "\1\122\4\0\20\122\22\0"; + "\1\16\3\17\1\20\1\21\1\22\1\23\1\24\1\25"+ + "\1\26\1\27\1\30\2\27\1\31\1\27\1\32\1\27"+ + "\1\33\1\27\1\34\1\27\1\35\1\27\1\36\1\37"+ + "\1\27\1\40\1\41\1\27\1\30\2\27\1\42\1\27"+ + "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\27"+ + "\1\52\1\53\1\54\2\27\1\55\1\27\1\56\3\27"+ + "\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76"+ + "\1\77\1\100\1\101\1\16\3\17\1\20\1\21\1\22"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\2\27\1\31"+ + "\1\27\1\32\1\27\1\33\1\27\1\34\1\27\1\35"+ + "\1\27\1\36\1\37\1\27\1\40\1\41\1\27\1\30"+ + "\2\27\1\42\1\27\1\43\1\44\1\45\1\102\1\47"+ + "\1\50\1\51\1\27\1\52\1\53\1\54\2\27\1\55"+ + "\1\27\1\56\3\27\1\57\1\60\1\61\1\62\1\63"+ + "\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+ + "\1\74\1\75\1\76\1\77\1\100\1\101\4\103\2\20"+ + "\1\104\1\105\34\103\1\106\45\103\1\107\1\110\2\111"+ + "\1\107\1\110\1\112\35\107\1\113\1\107\1\114\43\107"+ + "\6\115\1\112\35\115\1\113\1\115\1\116\43\115\6\117"+ + "\1\120\1\121\34\117\1\122\45\117\7\123\1\124\34\123"+ + "\1\125\45\123\13\126\1\127\1\126\2\127\1\130\1\127"+ + "\1\131\1\127\1\132\1\127\1\133\1\127\1\134\1\127"+ + "\2\126\1\127\1\126\1\135\1\127\1\126\2\127\1\126"+ + "\1\127\4\126\1\136\1\137\1\140\1\127\1\141\1\142"+ + "\1\143\2\127\1\144\1\127\1\145\3\127\1\146\1\147"+ + "\21\126\42\150\1\151\47\150\13\152\1\127\1\152\14\127"+ + "\2\152\1\127\1\152\2\127\1\152\2\127\1\152\1\127"+ + "\4\152\20\127\22\152\1\153\5\154\1\155\1\156\102\153"+ + "\1\157\5\154\1\160\103\157\1\161\5\154\1\162\103\161"+ + "\113\0\5\17\1\163\104\0\2\20\1\164\1\0\1\20"+ + "\113\0\1\165\1\166\60\0\1\167\30\0\1\170\31\0"+ + "\1\171\26\0\1\172\32\0\1\173\170\0\1\174\33\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\20\27\36\0"+ + "\1\30\2\175\2\176\2\177\2\200\2\201\2\202\2\0"+ + "\1\203\1\30\2\0\1\30\2\0\1\204\62\0\6\27"+ + "\1\205\1\27\1\206\5\27\2\0\7\27\1\0\2\27"+ + "\3\0\1\27\1\207\6\27\1\210\7\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\10\27\1\211\7\27"+ + "\35\0\4\27\1\212\11\27\2\0\7\27\1\0\2\27"+ + "\3\0\7\27\1\213\1\27\1\214\6\27\35\0\14\27"+ + "\1\215\1\27\2\0\7\27\1\0\2\27\3\0\10\27"+ + "\1\216\7\27\35\0\6\27\1\217\7\27\2\0\5\27"+ + "\1\220\1\27\1\0\2\27\3\0\11\27\1\221\6\27"+ + "\53\0\1\222\37\0\1\223\52\0\1\224\36\0\1\225"+ + "\10\0\1\226\23\0\1\30\2\175\2\176\2\177\2\200"+ + "\2\201\2\202\2\0\1\203\1\30\2\227\1\30\2\230"+ + "\1\204\62\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\6\27\1\231\1\27\1\232\3\27\1\233\3\27\64\0"+ + "\1\234\44\0\1\235\11\0\1\236\3\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\20\27\22\0\2\237\2\0"+ + "\2\237\1\240\36\237\1\241\44\237\2\242\2\0\2\242"+ + "\1\243\35\242\1\0\1\242\1\244\43\242\13\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\1\27\1\245\4\27"+ + "\1\246\3\27\1\247\5\27\35\0\16\27\2\0\2\27"+ + "\1\250\4\27\1\0\2\27\3\0\4\27\1\251\13\27"+ + "\35\0\6\27\1\252\7\27\2\0\7\27\1\0\2\27"+ + "\3\0\1\27\1\253\6\27\1\254\4\27\1\255\2\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\5\27"+ + "\1\256\4\27\1\257\1\27\1\260\1\261\1\27\1\262"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\6\27"+ + "\1\263\6\27\1\264\2\27\35\0\14\27\1\265\1\27"+ + "\2\0\7\27\1\0\2\27\3\0\20\27\35\0\14\27"+ + "\1\266\1\27\2\0\7\27\1\0\2\27\3\0\1\27"+ + "\1\267\10\27\1\270\5\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\10\27\1\271\7\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\15\27\1\272\2\27"+ + "\113\0\1\273\11\0\1\274\50\0\1\275\34\0\1\276"+ + "\103\0\1\277\7\0\1\300\101\0\1\301\10\0\1\302"+ + "\100\0\1\303\111\0\1\304\111\0\1\305\14\0\1\306"+ + "\74\0\1\307\15\0\1\310\2\0\7\311\2\0\60\311"+ + "\1\0\20\311\7\0\1\312\102\0\2\107\2\0\2\107"+ + "\1\0\35\107\1\0\1\107\1\0\44\107\1\110\2\111"+ + "\2\110\1\313\35\107\1\0\1\107\1\0\43\107\1\0"+ + "\5\111\1\313\103\0\1\314\3\0\1\314\1\0\104\314"+ + "\6\115\1\0\35\115\1\0\1\115\1\0\43\115\46\0"+ + "\1\315\43\0\6\117\2\0\34\117\1\0\45\117\7\0"+ + "\1\316\102\0\13\317\1\0\1\317\14\0\2\317\1\0"+ + "\1\317\2\0\1\317\2\0\1\317\1\0\4\317\21\0"+ + "\21\317\7\123\1\0\34\123\1\0\45\123\44\0\1\320"+ + "\45\0\7\321\1\322\3\321\1\0\1\321\14\0\2\321"+ + "\1\0\1\321\2\0\1\321\2\0\1\321\1\0\1\322"+ + "\3\321\21\0\21\321\13\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\6\127\1\323\1\127\1\324"+ + "\5\127\2\0\7\127\1\0\1\127\4\0\1\127\1\325"+ + "\6\127\1\326\7\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\10\127\1\327\7\127\35\0\4\127\1\330"+ + "\11\127\2\0\7\127\1\0\1\127\4\0\7\127\1\331"+ + "\1\127\1\332\6\127\35\0\14\127\1\333\1\127\2\0"+ + "\7\127\1\0\1\127\4\0\10\127\1\334\7\127\35\0"+ + "\6\127\1\335\7\127\2\0\5\127\1\336\1\127\1\0"+ + "\1\127\4\0\11\127\1\337\6\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\6\127\1\340\1\127\1\341"+ + "\3\127\1\342\3\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\1\127\1\343\4\127\1\344\3\127\1\345"+ + "\5\127\35\0\16\127\2\0\2\127\1\346\4\127\1\0"+ + "\1\127\4\0\4\127\1\347\13\127\35\0\6\127\1\350"+ + "\7\127\2\0\7\127\1\0\1\127\4\0\1\127\1\351"+ + "\6\127\1\352\4\127\1\353\2\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\5\127\1\354\4\127\1\355"+ + "\1\127\1\356\1\357\1\127\1\360\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\6\127\1\361\6\127\1\362"+ + "\2\127\35\0\14\127\1\363\1\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\14\127\1\364\1\127\2\0"+ + "\7\127\1\0\1\127\4\0\1\127\1\365\10\127\1\366"+ + "\5\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\10\127\1\367\7\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\15\127\1\370\2\127\35\0\1\371\1\0"+ + "\14\371\2\0\1\371\1\0\2\371\1\0\2\371\1\0"+ + "\1\371\4\0\20\371\23\0\5\154\1\372\104\0\3\154"+ + "\1\0\1\154\113\0\1\373\1\374\102\0\3\17\1\0"+ + "\1\17\106\0\1\20\107\0\2\165\2\0\106\165\10\375"+ + "\1\376\101\375\71\0\1\377\20\0\2\173\2\0\106\173"+ + "\71\0\1\u0100\34\0\1\u0101\14\0\2\u0102\1\0\1\u0101"+ + "\2\0\1\u0101\66\0\1\30\16\0\1\203\1\30\2\0"+ + "\1\30\66\0\1\u0103\17\0\1\u0103\2\0\1\u0103\65\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\10\27\1\u0104"+ + "\7\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\11\27\1\u0105\6\27\35\0\6\27\1\u0106\7\27\2\0"+ + "\7\27\1\0\2\27\3\0\20\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\6\27\1\u0107\11\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\11\27\1\u0108"+ + "\6\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\1\u0109\17\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\4\27\1\u010a\1\u010b\12\27\35\0\4\27\1\u010c"+ + "\11\27\2\0\7\27\1\0\2\27\3\0\20\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\12\27\1\u010d"+ + "\5\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\4\27\1\u010e\13\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\5\27\1\u010f\12\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\12\27\1\u0110\5\27\56\0"+ + "\1\u0111\2\0\1\u0111\65\0\2\u0112\2\0\2\u0112\4\0"+ + "\4\u0112\3\0\4\u0112\11\0\2\u0112\52\0\14\27\1\u0113"+ + "\1\27\2\0\7\27\1\0\2\27\3\0\20\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\10\27\1\u0114"+ + "\7\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\5\27\1\u0115\12\27\64\0\1\u0116\36\0\1\u0117\10\0"+ + "\2\237\2\0\2\237\1\240\36\237\1\u0118\50\237\2\u0119"+ + "\1\u011a\103\237\45\0\1\u011b\44\0\2\242\2\0\2\242"+ + "\1\243\35\242\1\0\1\242\1\u011c\47\242\2\u011d\1\u011e"+ + "\103\242\46\0\1\u011f\56\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\2\27\1\u0120\15\27\35\0\10\27\1\u0121"+ + "\5\27\2\0\7\27\1\0\2\27\3\0\10\27\1\u0122"+ + "\7\27\35\0\16\27\2\0\2\27\1\u0123\4\27\1\0"+ + "\2\27\3\0\20\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\4\27\1\u0124\13\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\4\27\1\u0125\13\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\1\27\1\u0126"+ + "\16\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\4\27\1\u0127\1\u0128\12\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\11\27\1\u0129\6\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\1\27\1\u012a\16\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\1\27"+ + "\1\u012b\4\27\1\u012c\11\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\1\u012d\17\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\11\27\1\u012e\6\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\10\27\1\u012f"+ + "\7\27\35\0\10\27\1\u0130\5\27\2\0\7\27\1\0"+ + "\2\27\3\0\20\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\1\27\1\u0131\10\27\1\u0132\1\27\1\u0133"+ + "\3\27\35\0\10\27\1\u0134\5\27\2\0\7\27\1\0"+ + "\2\27\3\0\6\27\1\u0135\11\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\5\27\1\u0136\12\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\17\27\1\u0137"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\5\27"+ + "\1\u0138\12\27\35\0\6\27\1\u0139\7\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\6\27\1\u013a\1\27"+ + "\1\u013b\5\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\10\27\1\u013c\5\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\113\0\1\u013d\11\0\1\u013e\110\0\1\u013f"+ + "\100\0\1\u0140\111\0\1\u0141\10\0\1\u0142\10\0\3\111"+ + "\1\0\1\111\152\0\1\u0143\56\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\10\127\1\u0144\7\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\11\127\1\u0145\6\127"+ + "\35\0\6\127\1\u0146\7\127\2\0\7\127\1\0\1\127"+ + "\4\0\20\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\6\127\1\u0147\11\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\11\127\1\u0148\6\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\1\u0149\17\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\4\127\1\u014a"+ + "\1\u014b\12\127\35\0\4\127\1\u014c\11\127\2\0\7\127"+ + "\1\0\1\127\4\0\20\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\12\127\1\u014d\5\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\4\127\1\u014e\13\127"+ + "\35\0\16\127\2\0\7\127\1\0\1\127\4\0\5\127"+ + "\1\u014f\12\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\12\127\1\u0150\5\127\35\0\14\127\1\u0151\1\127"+ + "\2\0\7\127\1\0\1\127\4\0\20\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\10\127\1\u0152\7\127"+ + "\35\0\16\127\2\0\7\127\1\0\1\127\4\0\5\127"+ + "\1\u0153\12\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\2\127\1\u0154\15\127\35\0\10\127\1\u0155\5\127"+ + "\2\0\7\127\1\0\1\127\4\0\10\127\1\u0156\7\127"+ + "\35\0\16\127\2\0\2\127\1\u0157\4\127\1\0\1\127"+ + "\4\0\20\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\4\127\1\u0158\13\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\4\127\1\u0159\13\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\1\127\1\u015a\16\127"+ + "\35\0\16\127\2\0\7\127\1\0\1\127\4\0\4\127"+ + "\1\u015b\1\u015c\12\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\11\127\1\u015d\6\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\1\127\1\u015e\16\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\1\127\1\u015f"+ + "\4\127\1\u0160\11\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\1\u0161\17\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\11\127\1\u0162\6\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\10\127\1\u0163\7\127"+ + "\35\0\10\127\1\u0164\5\127\2\0\7\127\1\0\1\127"+ + "\4\0\20\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\1\127\1\u0165\10\127\1\u0166\1\127\1\u0167\3\127"+ + "\35\0\10\127\1\u0168\5\127\2\0\7\127\1\0\1\127"+ + "\4\0\6\127\1\u0169\11\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\5\127\1\u016a\12\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\17\127\1\u016b\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\5\127\1\u016c"+ + "\12\127\35\0\6\127\1\u016d\7\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\6\127\1\u016e\1\127\1\u016f"+ + "\5\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\10\127\1\u0170\5\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\16\371\2\0\7\371\1\0\1\371\4\0"+ + "\20\371\22\0\2\373\2\0\106\373\10\u0171\1\u0172\101\u0171"+ + "\10\375\1\u0173\101\375\7\u0174\1\u0175\1\376\101\u0174\14\0"+ + "\1\u0101\2\u0176\2\176\4\0\2\201\4\0\1\u0102\1\u0101"+ + "\2\0\1\u0101\66\0\1\u0101\17\0\1\u0101\2\0\1\u0101"+ + "\66\0\1\u0103\2\u0176\2\176\4\0\2\201\2\202\2\0"+ + "\1\u0177\1\u0103\2\0\1\u0103\65\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\1\27\1\u0178\16\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\1\27\1\u0179\16\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\4\27"+ + "\1\u017a\13\27\35\0\2\27\1\u017b\13\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\6\27\1\u017c\7\27"+ + "\2\0\7\27\1\0\2\27\3\0\10\27\1\u017d\7\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\5\27"+ + "\1\u017e\12\27\35\0\14\27\1\u017f\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\1\27\1\u0180\16\27\35\0\16\27"+ + "\2\0\2\27\1\u0181\4\27\1\0\2\27\3\0\20\27"+ + "\35\0\14\27\1\u0182\1\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\35\0\14\27\1\u0183\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\7\27\1\u0184\10\27\37\0\2\175"+ + "\2\0\2\177\2\200\6\0\1\u0185\1\u0111\2\0\1\u0111"+ + "\65\0\2\u0112\2\175\2\u0112\2\177\2\200\4\u0112\2\0"+ + "\1\u0186\4\u0112\11\0\2\u0112\52\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\1\27\1\u0187\16\27\35\0\6\27"+ + "\1\u0188\7\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\14\27\1\u0189\1\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\22\0\4\237\2\u0119\1\u018a\36\237\1\u0118"+ + "\45\237\1\u0119\1\u018b\1\u018c\1\237\1\u0119\1\240\36\237"+ + "\1\u0118\44\237\6\u011b\1\u018d\36\u011b\1\u018e\44\u011b\4\242"+ + "\2\u011d\1\u018f\35\242\1\0\1\242\1\u011c\44\242\1\u011d"+ + "\1\u0190\1\u0191\1\242\1\u011d\1\243\35\242\1\0\1\242"+ + "\1\u011c\43\242\6\u0192\1\u0193\35\u0192\1\0\1\u0192\1\u0194"+ + "\43\u0192\13\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\3\27\1\u0195\14\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\13\27\1\u0196\4\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\5\27\1\u0197\12\27\35\0"+ + "\6\27\1\u0198\7\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\5\27\1\u0199\12\27\35\0\14\27\1\u019a\1\27\2\0"+ + "\7\27\1\0\2\27\3\0\20\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\4\27\1\u019b\13\27\35\0"+ + "\14\27\1\u019c\1\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\2\27\1\u019d\15\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\5\27\1\u019e\12\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\6\27\1\u019f\11\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\5\27\1\u01a0"+ + "\12\27\35\0\10\27\1\u01a1\5\27\2\0\7\27\1\0"+ + "\2\27\3\0\20\27\35\0\14\27\1\u01a2\1\27\2\0"+ + "\7\27\1\0\2\27\3\0\20\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\2\27\1\u01a3\15\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\6\27\1\u01a4"+ + "\11\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\5\27\1\u01a5\12\27\35\0\10\27\1\u01a6\5\27\2\0"+ + "\7\27\1\0\2\27\3\0\11\27\1\u01a7\6\27\35\0"+ + "\14\27\1\u01a8\1\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\4\27\1\u01a9\13\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\10\27\1\u01aa\7\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\12\27\1\u01ab\5\27\35\0"+ + "\10\27\1\u01ac\5\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\35\0\6\27\1\u01ad\7\27\2\0\7\27\1\0"+ + "\2\27\3\0\20\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\1\27\1\u01ae\16\27\35\0\12\27\1\u01af"+ + "\3\27\2\0\7\27\1\0\2\27\3\0\20\27\35\0"+ + "\6\27\1\u01b0\7\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\113\0\1\u01b1\33\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\1\127\1\u01b2\16\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\1\127\1\u01b3\16\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\4\127\1\u01b4"+ + "\13\127\35\0\2\127\1\u01b5\13\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\6\127\1\u01b6\7\127\2\0"+ + "\7\127\1\0\1\127\4\0\10\127\1\u01b7\7\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\5\127\1\u01b8"+ + "\12\127\35\0\14\127\1\u01b9\1\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\1\127\1\u01ba\16\127\35\0\16\127\2\0"+ + "\2\127\1\u01bb\4\127\1\0\1\127\4\0\20\127\35\0"+ + "\14\127\1\u01bc\1\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\14\127\1\u01bd\1\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\7\127\1\u01be\10\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\1\127\1\u01bf\16\127\35\0"+ + "\6\127\1\u01c0\7\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\14\127\1\u01c1\1\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\3\127\1\u01c2\14\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\13\127\1\u01c3\4\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\5\127\1\u01c4"+ + "\12\127\35\0\6\127\1\u01c5\7\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\5\127\1\u01c6\12\127\35\0\14\127\1\u01c7"+ + "\1\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\4\127\1\u01c8"+ + "\13\127\35\0\14\127\1\u01c9\1\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\2\127\1\u01ca\15\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\5\127\1\u01cb\12\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\6\127\1\u01cc"+ + "\11\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\5\127\1\u01cd\12\127\35\0\10\127\1\u01ce\5\127\2\0"+ + "\7\127\1\0\1\127\4\0\20\127\35\0\14\127\1\u01cf"+ + "\1\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\2\127\1\u01d0"+ + "\15\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\6\127\1\u01d1\11\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\5\127\1\u01d2\12\127\35\0\10\127\1\u01d3"+ + "\5\127\2\0\7\127\1\0\1\127\4\0\11\127\1\u01d4"+ + "\6\127\35\0\14\127\1\u01d5\1\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\4\127\1\u01d6\13\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\10\127\1\u01d7\7\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\12\127\1\u01d8"+ + "\5\127\35\0\10\127\1\u01d9\5\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\6\127\1\u01da\7\127\2\0"+ + "\7\127\1\0\1\127\4\0\20\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\1\127\1\u01db\16\127\35\0"+ + "\12\127\1\u01dc\3\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\6\127\1\u01dd\7\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\22\0\10\u0171\1\u01de\101\u0171\7\u01df"+ + "\1\u01e0\1\u0172\101\u01df\7\375\1\u01e1\1\u01e2\101\375\10\u0174"+ + "\1\u01e3\101\u0174\14\0\1\u0103\16\0\1\u0177\1\u0103\2\0"+ + "\1\u0103\65\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\5\27\1\u01e4\12\27\35\0\6\27\1\u01e5\7\27\2\0"+ + "\7\27\1\0\2\27\3\0\20\27\35\0\14\27\1\u01e6"+ + "\1\27\2\0\7\27\1\0\2\27\3\0\20\27\35\0"+ + "\14\27\1\u01e7\1\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\6\27\1\u01e8\11\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\1\27\1\u01e9\16\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\6\27\1\u01ea\11\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\12\27\1\u01eb"+ + "\5\27\35\0\6\27\1\u01ec\7\27\2\0\7\27\1\0"+ + "\2\27\3\0\20\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\11\27\1\u01ed\6\27\55\0\1\u0185\1\u0111"+ + "\2\0\1\u0111\65\0\2\u0112\2\0\2\u0112\4\0\4\u0112"+ + "\2\0\1\u0186\4\u0112\11\0\2\u0112\52\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\3\27\1\u01ee\14\27\35\0"+ + "\14\27\1\u01ef\1\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\22\0\1\237\2\u0119\1\u01f0\2\u0119\1\u011a\103\237"+ + "\2\0\2\237\2\u018b\1\u01f1\105\0\1\u0119\1\237\2\u018b"+ + "\1\u01f1\103\0\157\u011b\1\u01f2\44\u011b\1\242\2\u011d\1\u01f3"+ + "\2\u011d\1\u011e\103\242\2\0\2\242\2\u0190\1\u01f4\105\0"+ + "\1\u011d\1\242\2\u0190\1\u01f4\103\0\120\u0192\1\0\35\u0192"+ + "\1\0\1\u0192\1\u01f5\43\u0192\13\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\1\27\1\u01f6\16\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\1\27\1\u01f7\16\27"+ + "\35\0\14\27\1\u01f8\1\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\35\0\10\27\1\u01f9\5\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\6\27\1\u01fa\11\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\6\27\1\u01fb\11\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\4\27"+ + "\1\u01fc\13\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\15\27\1\u01fd\2\27\35\0\10\27\1\u01fe\5\27"+ + "\2\0\7\27\1\0\2\27\3\0\20\27\35\0\10\27"+ + "\1\u01ff\5\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\2\27"+ + "\1\u0200\15\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\6\27\1\u0201\11\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\15\27\1\u0202\2\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\5\27\1\u0203\12\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\2\27"+ + "\1\u0204\15\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\5\27\1\u0205\12\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\4\27\1\u0206\13\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\17\27\1\u0207\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\6\27\1\u0208"+ + "\11\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\13\27\1\u0209\4\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\5\27\1\u020a\12\27\35\0\14\27\1\u020b"+ + "\1\27\2\0\7\27\1\0\2\27\3\0\20\27\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\5\127\1\u020c"+ + "\12\127\35\0\6\127\1\u020d\7\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\14\127\1\u020e\1\127\2\0"+ + "\7\127\1\0\1\127\4\0\20\127\35\0\14\127\1\u020f"+ + "\1\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\6\127\1\u0210"+ + "\11\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\1\127\1\u0211\16\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\6\127\1\u0212\11\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\12\127\1\u0213\5\127\35\0"+ + "\6\127\1\u0214\7\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\11\127\1\u0215\6\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\3\127\1\u0216\14\127\35\0\14\127\1\u0217"+ + "\1\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\1\127\1\u0218"+ + "\16\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\1\127\1\u0219\16\127\35\0\14\127\1\u021a\1\127\2\0"+ + "\7\127\1\0\1\127\4\0\20\127\35\0\10\127\1\u021b"+ + "\5\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\6\127\1\u021c"+ + "\11\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\6\127\1\u021d\11\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\4\127\1\u021e\13\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\15\127\1\u021f\2\127\35\0"+ + "\10\127\1\u0220\5\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\10\127\1\u0221\5\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\2\127\1\u0222\15\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\6\127\1\u0223\11\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\15\127\1\u0224"+ + "\2\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\5\127\1\u0225\12\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\2\127\1\u0226\15\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\5\127\1\u0227\12\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\4\127\1\u0228"+ + "\13\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\17\127\1\u0229\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\6\127\1\u022a\11\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\13\127\1\u022b\4\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\5\127\1\u022c\12\127"+ + "\35\0\14\127\1\u022d\1\127\2\0\7\127\1\0\1\127"+ + "\4\0\20\127\22\0\7\u0171\1\u022e\1\u022f\101\u0171\10\u01df"+ + "\1\u0230\101\u01df\7\u0174\1\u0175\1\u0231\101\u0174\13\0\6\27"+ + "\1\u0232\7\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\7\27"+ + "\1\u0233\10\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\5\27\1\u0234\12\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\11\27\1\u0235\6\27\35\0\4\27"+ + "\1\u0236\11\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\6\27\1\u0237\7\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\35\0\14\27\1\u0238\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\12\27\1\u0239\3\27"+ + "\2\0\7\27\1\0\2\27\3\0\20\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\1\27\1\u023a\16\27"+ + "\22\0\2\237\1\u0119\1\237\2\u0119\1\u018a\36\237\1\u0118"+ + "\44\237\1\0\2\u018b\1\u018c\1\0\1\u018b\104\0\45\u011b"+ + "\1\u0118\44\u011b\2\242\1\u011d\1\242\2\u011d\1\u018f\35\242"+ + "\1\0\1\242\1\u011c\43\242\1\0\2\u0190\1\u0191\1\0"+ + "\1\u0190\104\0\6\u0192\1\0\35\u0192\1\0\1\u0192\1\u011c"+ + "\43\u0192\13\0\2\27\1\u023b\13\27\2\0\7\27\1\0"+ + "\2\27\3\0\20\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\5\27\1\u023c\12\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\2\27\1\u023d\15\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\2\27\1\u023e"+ + "\15\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\1\27\1\u023f\16\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\5\27\1\u0240\12\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\11\27\1\u0241\6\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\2\27\1\u0242"+ + "\15\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\5\27\1\u0243\12\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\6\27\1\u0244\11\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\15\27\1\u0245\2\27\35\0"+ + "\10\27\1\u0246\5\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\35\0\16\27\2\0\7\27\1\0\2\27\3\0"+ + "\4\27\1\u0247\13\27\35\0\16\27\2\0\7\27\1\0"+ + "\2\27\3\0\11\27\1\u0248\6\27\35\0\14\27\1\u0249"+ + "\1\27\2\0\7\27\1\0\2\27\3\0\20\27\35\0"+ + "\10\27\1\u024a\5\27\2\0\7\27\1\0\2\27\3\0"+ + "\20\27\35\0\6\127\1\u024b\7\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\7\127\1\u024c\10\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\5\127\1\u024d\12\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\11\127\1\u024e"+ + "\6\127\35\0\4\127\1\u024f\11\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\6\127\1\u0250\7\127\2\0"+ + "\7\127\1\0\1\127\4\0\20\127\35\0\14\127\1\u0251"+ + "\1\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\12\127\1\u0252\3\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\1\127\1\u0253\16\127\35\0\2\127\1\u0254\13\127\2\0"+ + "\7\127\1\0\1\127\4\0\20\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\5\127\1\u0255\12\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\2\127\1\u0256"+ + "\15\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\2\127\1\u0257\15\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\1\127\1\u0258\16\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\5\127\1\u0259\12\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\11\127\1\u025a"+ + "\6\127\35\0\16\127\2\0\7\127\1\0\1\127\4\0"+ + "\2\127\1\u025b\15\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\5\127\1\u025c\12\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\6\127\1\u025d\11\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\15\127\1\u025e"+ + "\2\127\35\0\10\127\1\u025f\5\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\4\127\1\u0260\13\127\35\0\16\127\2\0"+ + "\7\127\1\0\1\127\4\0\11\127\1\u0261\6\127\35\0"+ + "\14\127\1\u0262\1\127\2\0\7\127\1\0\1\127\4\0"+ + "\20\127\35\0\10\127\1\u0263\5\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\22\0\7\u01df\1\u01e0\1\u0264\101\u01df"+ + "\13\0\16\27\2\0\7\27\1\0\2\27\3\0\14\27"+ + "\1\u0265\3\27\35\0\14\27\1\u0266\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\2\27\1\u0267\15\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\1\27\1\u0268\16\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\5\27"+ + "\1\u0269\12\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\4\27\1\u026a\13\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\11\27\1\u026b\6\27\35\0\14\27"+ + "\1\u026c\1\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\14\27\1\u026d\1\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\5\27\1\u026e\12\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\2\27\1\u026f\15\27\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\12\27\1\u0270\5\27"+ + "\35\0\4\27\1\u0271\11\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\10\27\1\u0272\7\27\35\0\14\27\1\u0273\1\27"+ + "\2\0\7\27\1\0\2\27\3\0\20\27\35\0\6\27"+ + "\1\u0274\7\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\16\127\2\0\7\127\1\0\1\127\4\0\14\127"+ + "\1\u0275\3\127\35\0\14\127\1\u0276\1\127\2\0\7\127"+ + "\1\0\1\127\4\0\20\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\2\127\1\u0277\15\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\1\127\1\u0278\16\127"+ + "\35\0\16\127\2\0\7\127\1\0\1\127\4\0\5\127"+ + "\1\u0279\12\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\4\127\1\u027a\13\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\11\127\1\u027b\6\127\35\0\14\127"+ + "\1\u027c\1\127\2\0\7\127\1\0\1\127\4\0\20\127"+ + "\35\0\14\127\1\u027d\1\127\2\0\7\127\1\0\1\127"+ + "\4\0\20\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\5\127\1\u027e\12\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\2\127\1\u027f\15\127\35\0\16\127"+ + "\2\0\7\127\1\0\1\127\4\0\12\127\1\u0280\5\127"+ + "\35\0\4\127\1\u0281\11\127\2\0\7\127\1\0\1\127"+ + "\4\0\20\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\10\127\1\u0282\7\127\35\0\14\127\1\u0283\1\127"+ + "\2\0\7\127\1\0\1\127\4\0\20\127\35\0\6\127"+ + "\1\u0284\7\127\2\0\7\127\1\0\1\127\4\0\20\127"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\11\27"+ + "\1\u0285\6\27\35\0\14\27\1\u0286\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\2\27\1\u0287\15\27\35\0\14\27"+ + "\1\u0288\1\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\5\27"+ + "\1\u0289\12\27\35\0\14\27\1\u028a\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\16\27\2\0\7\27"+ + "\1\0\2\27\3\0\1\u028b\17\27\35\0\16\27\2\0"+ + "\7\27\1\0\2\27\3\0\11\27\1\u028c\6\27\35\0"+ + "\16\27\2\0\7\27\1\0\2\27\3\0\11\27\1\u028d"+ + "\6\27\35\0\14\27\1\u028e\1\27\2\0\7\27\1\0"+ + "\2\27\3\0\20\27\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\11\127\1\u028f\6\127\35\0\14\127\1\u0290"+ + "\1\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\2\127\1\u0291"+ + "\15\127\35\0\14\127\1\u0292\1\127\2\0\7\127\1\0"+ + "\1\127\4\0\20\127\35\0\16\127\2\0\7\127\1\0"+ + "\1\127\4\0\5\127\1\u0293\12\127\35\0\14\127\1\u0294"+ + "\1\127\2\0\7\127\1\0\1\127\4\0\20\127\35\0"+ + "\16\127\2\0\7\127\1\0\1\127\4\0\1\u0295\17\127"+ + "\35\0\16\127\2\0\7\127\1\0\1\127\4\0\11\127"+ + "\1\u0296\6\127\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\11\127\1\u0297\6\127\35\0\14\127\1\u0298\1\127"+ + "\2\0\7\127\1\0\1\127\4\0\20\127\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\5\27\1\u0299\12\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\10\27"+ + "\1\u029a\7\27\35\0\14\27\1\u029b\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\12\27\1\u029c\3\27"+ + "\2\0\7\27\1\0\2\27\3\0\20\27\35\0\10\27"+ + "\1\u029d\5\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\16\27\2\0\7\27\1\0\2\27\3\0\5\27"+ + "\1\u029e\12\27\35\0\16\127\2\0\7\127\1\0\1\127"+ + "\4\0\5\127\1\u029f\12\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\10\127\1\u02a0\7\127\35\0\14\127"+ + "\1\u02a1\1\127\2\0\7\127\1\0\1\127\4\0\20\127"+ + "\35\0\12\127\1\u02a2\3\127\2\0\7\127\1\0\1\127"+ + "\4\0\20\127\35\0\10\127\1\u02a3\5\127\2\0\7\127"+ + "\1\0\1\127\4\0\20\127\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\5\127\1\u02a4\12\127\35\0\16\27"+ + "\2\0\7\27\1\0\2\27\3\0\4\27\1\u02a5\13\27"+ + "\35\0\4\27\1\u02a6\11\27\2\0\7\27\1\0\2\27"+ + "\3\0\20\27\35\0\16\27\2\0\7\27\1\0\2\27"+ + "\3\0\16\27\1\u02a7\1\27\35\0\16\127\2\0\7\127"+ + "\1\0\1\127\4\0\4\127\1\u02a8\13\127\35\0\4\127"+ + "\1\u02a9\11\127\2\0\7\127\1\0\1\127\4\0\20\127"+ + "\35\0\16\127\2\0\7\127\1\0\1\127\4\0\16\127"+ + "\1\u02aa\1\127\35\0\14\27\1\u02ab\1\27\2\0\7\27"+ + "\1\0\2\27\3\0\20\27\35\0\14\127\1\u02ac\1\127"+ + "\2\0\7\127\1\0\1\127\4\0\20\127\35\0\12\27"+ + "\1\u02ad\3\27\2\0\7\27\1\0\2\27\3\0\20\27"+ + "\35\0\12\127\1\u02ae\3\127\2\0\7\127\1\0\1\127"+ + "\4\0\20\127\22\0"; private static int [] zzUnpackTrans() { - int [] result = new int[37148]; + int [] result = new int[37370]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -1010,22 +1014,22 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\14\0\1\11\1\1\1\11\25\1\1\11\11\1\1\11"+ - "\2\1\6\11\2\1\1\11\4\1\3\11\4\1\2\11"+ + "\15\0\1\11\1\1\1\11\25\1\1\11\11\1\1\11"+ + "\2\1\6\11\2\1\1\11\4\1\4\11\7\1\2\11"+ "\4\1\1\11\4\1\1\11\20\1\2\11\1\1\2\11"+ "\3\1\1\11\1\1\1\11\1\1\1\0\3\1\1\11"+ "\1\1\2\11\2\1\5\11\3\0\15\1\5\11\2\0"+ - "\4\1\2\11\1\1\1\0\1\1\2\0\27\1\2\11"+ - "\1\1\1\11\1\1\1\0\1\11\1\0\6\11\1\0"+ - "\1\11\1\1\5\11\47\1\1\0\4\1\2\11\1\1"+ - "\1\0\23\1\3\11\3\1\1\11\2\0\36\1\5\11"+ - "\1\0\1\11\61\1\2\11\1\0\15\1\2\0\3\1"+ - "\3\0\2\1\6\0\34\1\1\11\56\1\2\11\1\0"+ - "\16\1\1\0\1\1\3\0\70\1\1\11\1\0\1\1"+ - "\1\0\62\1\1\0\112\1"; + "\4\1\2\11\1\1\1\0\1\1\2\0\30\1\3\11"+ + "\1\1\1\0\1\11\1\0\10\11\1\0\1\11\1\1"+ + "\5\11\47\1\1\0\4\1\2\11\1\1\1\0\23\1"+ + "\3\11\3\1\1\11\2\0\36\1\5\11\1\0\1\11"+ + "\61\1\2\11\1\0\15\1\2\0\3\1\3\0\2\1"+ + "\6\0\34\1\1\11\56\1\2\11\1\0\16\1\1\0"+ + "\1\1\3\0\70\1\1\11\1\0\1\1\1\0\62\1"+ + "\1\0\112\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[679]; + int [] result = new int[686]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -1081,10 +1085,21 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { private boolean zzEOFDone; /* user code: */ + @Override protected int getInitialState() { return YYINITIAL; } + @Override + protected int getDivisionExpectedState() { + return DIVISION_EXPECTED; + } + + @Override + protected int[] getDivisionStates() { + return new int[] {YYINITIAL, IN_INNER_BLOCK}; + } + /** * Creates a new scanner @@ -1334,666 +1349,676 @@ public class _GroovyLexer extends GroovyLexerBase implements FlexLexer { case 1: { return mWRONG; } - case 156: break; + case 159: break; case 2: { yybeginstate(NLS_AFTER_NLS); return isWithinBraces() ? TokenType.WHITE_SPACE : storeToken(mNLS); } - case 157: break; + case 160: break; case 3: { return TokenType.WHITE_SPACE; } - case 158: break; + case 161: break; case 4: - { if (isRegexExpected()) { - yybeginstate(IN_SLASHY_STRING); - return storeToken(mREGEX_BEGIN); - } else { - return storeToken(mDIV); - } + { yybeginstate(IN_SLASHY_STRING); + return storeToken(mREGEX_BEGIN); } - case 159: break; + case 162: break; case 5: { return storeToken(mSTAR); } - case 160: break; + case 163: break; case 6: { return storeToken(mLNOT); } - case 161: break; + case 164: break; case 7: { return storeToken(mIDENT); } - case 162: break; + case 165: break; case 8: { return storeToken(mNUM_INT); } - case 163: break; + case 166: break; case 9: { return storeToken(mPLUS); } - case 164: break; + case 167: break; case 10: { return storeToken(mMINUS); } - case 165: break; + case 168: break; case 11: { return storeToken(mDOT); } - case 166: break; + case 169: break; case 12: { return storeToken(mSTRING_LITERAL); } - case 167: break; + case 170: break; case 13: { yybeginstate(IN_SINGLE_GSTRING); return storeToken(mGSTRING_BEGIN); } - case 168: break; + case 171: break; case 14: { yyendstate(YYINITIAL); return storeToken(mRCURLY); } - case 169: break; + case 172: break; case 15: { yybeginstate(YYINITIAL, NLS_AFTER_LBRACE); return storeToken(mLCURLY); } - case 170: break; + case 173: break; case 16: - { return storeToken(mQUESTION); - } - case 171: break; - case 17: { return storeToken(mASSIGN); } - case 172: break; + case 174: break; + case 17: + { return storeToken(mQUESTION); + } + case 175: break; case 18: { return storeToken(mLPAREN); } - case 173: break; + case 176: break; case 19: { return storeToken(mRPAREN); } - case 174: break; + case 177: break; case 20: { return storeToken(mLBRACK); } - case 175: break; + case 178: break; case 21: { return storeToken(mRBRACK); } - case 176: break; + case 179: break; case 22: { return storeToken(mCOLON); } - case 177: break; + case 180: break; case 23: { return storeToken(mCOMMA); } - case 178: break; + case 181: break; case 24: { return storeToken(mLT); } - case 179: break; + case 182: break; case 25: { return storeToken(mGT); } - case 180: break; + case 183: break; case 26: { return storeToken(mBNOT); } - case 181: break; + case 184: break; case 27: { return storeToken(mMOD); } - case 182: break; + case 185: break; case 28: { return storeToken(mBXOR); } - case 183: break; + case 186: break; case 29: { return storeToken(mBOR); } - case 184: break; + case 187: break; case 30: { return storeToken(mBAND); } - case 185: break; + case 188: break; case 31: { return storeToken(mSEMI); } - case 186: break; + case 189: break; case 32: { return storeToken(mAT); } - case 187: break; + case 190: break; case 33: { yyendstate(IN_INNER_BLOCK, IN_GSTRING_DOLLAR); return storeToken(mRCURLY); } - case 188: break; + case 191: break; case 34: + { yypushback(1); + yyendstate(DIVISION_EXPECTED); + } + case 192: break; + case 35: { return storeToken(mGSTRING_CONTENT); } - case 189: break; - case 35: + case 193: break; + case 36: { resetState(); yybeginstate(NLS_AFTER_NLS); return storeToken(mNLS); } - case 190: break; - case 36: + case 194: break; + case 37: { yybeginstate(IN_GSTRING_DOLLAR); return storeToken(mDOLLAR); } - case 191: break; - case 37: + case 195: break; + case 38: { yyendstate(IN_SINGLE_GSTRING); return storeToken(mGSTRING_END); } - case 192: break; - case 38: + case 196: break; + case 39: { return storeToken(mREGEX_CONTENT); } - case 193: break; - case 39: + case 197: break; + case 40: { yyendstate(IN_SLASHY_STRING); return storeToken(mREGEX_END); } - case 194: break; - case 40: + case 198: break; + case 41: { return storeToken(mDOLLAR_SLASH_REGEX_CONTENT); } - case 195: break; - case 41: + case 199: break; + case 42: { yypushback(1); yyendstate(IN_GSTRING_DOLLAR); } - case 196: break; - case 42: + case 200: break; + case 43: { yybeginstate(IN_GSTRING_DOT); return storeToken(mIDENT); } - case 197: break; - case 43: + case 201: break; + case 44: { yybeginstate(IN_INNER_BLOCK, NLS_AFTER_LBRACE); return storeToken(mLCURLY); } - case 198: break; - case 44: + case 202: break; + case 45: { yypushback(1); yyendstate(IN_GSTRING_DOT); } - case 199: break; - case 45: + case 203: break; + case 46: { yypushback(1); yyendstate(IN_GSTRING_DOT_IDENT); } - case 200: break; - case 46: + case 204: break; + case 47: { yypushback(1); yyendstate(NLS_AFTER_COMMENT); } - case 201: break; - case 47: + case 205: break; + case 48: { yypushback(1); yyendstate(NLS_AFTER_LBRACE); } - case 202: break; - case 48: + case 206: break; + case 49: { yypushback(1); yyendstate(NLS_AFTER_NLS); yybeginstate(NLS_AFTER_COMMENT); } - case 203: break; - case 49: + case 207: break; + case 50: { return storeToken(mSL_COMMENT); } - case 204: break; - case 50: + case 208: break; + case 51: { return storeToken(mML_COMMENT); } - case 205: break; - case 51: + case 209: break; + case 52: { return storeToken(mDIV_ASSIGN); } - case 206: break; - case 52: + case 210: break; + case 53: { return storeToken(mSTAR_STAR); } - case 207: break; - case 53: + case 211: break; + case 54: { return storeToken(mSPREAD_DOT); } - case 208: break; - case 54: + case 212: break; + case 55: { return storeToken(mSTAR_ASSIGN); } - case 209: break; - case 55: + case 213: break; + case 56: { return storeToken(mSH_COMMENT); } - case 210: break; - case 56: + case 214: break; + case 57: { return storeToken(mNOT_EQUAL); } - case 211: break; - case 57: + case 215: break; + case 58: { return storeToken(mNUM_BIG_INT); } - case 212: break; - case 58: + case 216: break; + case 59: { return storeToken(mNUM_FLOAT); } - case 213: break; - case 59: + case 217: break; + case 60: { return storeToken(mNUM_LONG); } - case 214: break; - case 60: + case 218: break; + case 61: { return storeToken(mNUM_DOUBLE); } - case 215: break; - case 61: + case 219: break; + case 62: { return storeToken(kIF); } - case 216: break; - case 62: + case 220: break; + case 63: { return storeToken(kIN); } - case 217: break; - case 63: + case 221: break; + case 64: { return storeToken(kDO); } - case 218: break; - case 64: + case 222: break; + case 65: { return storeToken(mINC); } - case 219: break; - case 65: + case 223: break; + case 66: { return storeToken(mPLUS_ASSIGN); } - case 220: break; - case 66: + case 224: break; + case 67: { return storeToken(mDEC); } - case 221: break; - case 67: + case 225: break; + case 68: { return storeToken(mMINUS_ASSIGN); } - case 222: break; - case 68: + case 226: break; + case 69: { return storeToken(mCLOSABLE_BLOCK_OP); } - case 223: break; - case 69: + case 227: break; + case 70: { return storeToken(mRANGE_INCLUSIVE); } - case 224: break; - case 70: + case 228: break; + case 71: { return storeToken(mMEMBER_POINTER); } - case 225: break; - case 71: - { if (isRegexExpected()) { - yybeginstate(IN_DOLLAR_SLASH_STRING); - return storeToken(mDOLLAR_SLASH_REGEX_BEGIN); - } else { - yypushback(1); - return storeToken(mDOLLAR); - } - } - case 226: break; - case 72: - { return storeToken(mGSTRING_LITERAL); - } - case 227: break; - case 73: - { return storeToken(kAS); - } - case 228: break; - case 74: - { return storeToken(mOPTIONAL_DOT); - } case 229: break; - case 75: - { return storeToken(mELVIS); + case 72: + { yybeginstate(IN_DOLLAR_SLASH_STRING); + return storeToken(mDOLLAR_SLASH_REGEX_BEGIN); } case 230: break; - case 76: - { return storeToken(mEQUAL); + case 73: + { return storeToken(mGSTRING_LITERAL); } case 231: break; - case 77: - { return storeToken(mREGEX_FIND); + case 74: + { return storeToken(kAS); } case 232: break; - case 78: - { return storeToken(mLE); + case 75: + { return storeToken(mEQUAL); } case 233: break; - case 79: - { return storeToken(mGE); + case 76: + { return storeToken(mREGEX_FIND); } case 234: break; - case 80: - { return storeToken(mMOD_ASSIGN); + case 77: + { return storeToken(mOPTIONAL_DOT); } case 235: break; - case 81: - { return storeToken(mBXOR_ASSIGN); + case 78: + { return storeToken(mELVIS); } case 236: break; - case 82: - { return storeToken(mBOR_ASSIGN); + case 79: + { return storeToken(mLE); } case 237: break; - case 83: - { return storeToken(mLOR); + case 80: + { return storeToken(mGE); } case 238: break; - case 84: - { return storeToken(mBAND_ASSIGN); + case 81: + { return storeToken(mMOD_ASSIGN); } case 239: break; - case 85: - { return storeToken(mLAND); + case 82: + { return storeToken(mBXOR_ASSIGN); } case 240: break; + case 83: + { return storeToken(mBOR_ASSIGN); + } + case 241: break; + case 84: + { return storeToken(mLOR); + } + case 242: break; + case 85: + { return storeToken(mBAND_ASSIGN); + } + case 243: break; case 86: + { return storeToken(mLAND); + } + case 244: break; + case 87: + // lookahead expression with fixed base length + zzMarkedPos = Character.offsetByCodePoints + (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); + { yyendstate(DIVISION_EXPECTED); + return storeToken(mDIV); + } + case 245: break; + case 88: + { yypushback(1); + yyendstate(DIVISION_EXPECTED); + return storeToken(mDOLLAR); + } + case 246: break; + case 89: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); { return storeToken(mREGEX_CONTENT); } - case 241: break; - case 87: + case 247: break; + case 90: { yyendstate(IN_DOLLAR_SLASH_STRING); return storeToken(mDOLLAR_SLASH_REGEX_END); } - case 242: break; - case 88: + case 248: break; + case 91: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); { return storeToken(mDOLLAR_SLASH_REGEX_CONTENT); } - case 243: break; - case 89: + case 249: break; + case 92: // lookahead expression with fixed base length zzMarkedPos = Character.offsetByCodePoints (zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1); { yybeginstate(IN_GSTRING_DOT_IDENT); return storeToken(mDOT); } - case 244: break; - case 90: + case 250: break; + case 93: { return mSL_COMMENT; } - case 245: break; - case 91: + case 251: break; + case 94: { return mML_COMMENT; } - case 246: break; - case 92: + case 252: break; + case 95: { return storeToken(GROOVY_DOC_COMMENT); } - case 247: break; - case 93: + case 253: break; + case 96: { return storeToken(mSTAR_STAR_ASSIGN); } - case 248: break; - case 94: + case 254: break; + case 97: { return storeToken(mNUM_BIG_DECIMAL); } - case 249: break; - case 95: + case 255: break; + case 98: { return storeToken(kFOR); } - case 250: break; - case 96: + case 256: break; + case 99: { return storeToken(kINT); } - case 251: break; - case 97: + case 257: break; + case 100: { return storeToken(kDEF); } - case 252: break; - case 98: + case 258: break; + case 101: { return storeToken(mTRIPLE_DOT); } - case 253: break; - case 99: + case 259: break; + case 102: { return storeToken(mRANGE_EXCLUSIVE); } - case 254: break; - case 100: + case 260: break; + case 103: { yybeginstate(IN_TRIPLE_GSTRING); return storeToken(mGSTRING_BEGIN); } - case 255: break; - case 101: + case 261: break; + case 104: { return storeToken(kTRY); } - case 256: break; - case 102: + case 262: break; + case 105: { return storeToken(kNEW); } - case 257: break; - case 103: + case 263: break; + case 106: { return storeToken(mREGEX_MATCH); } - case 258: break; - case 104: + case 264: break; + case 107: { return storeToken(mCOMPARE_TO); } - case 259: break; - case 105: + case 265: break; + case 108: { return storeToken(mSL_ASSIGN); } - case 260: break; - case 106: + case 266: break; + case 109: { return storeToken(mSR_ASSIGN); } - case 261: break; - case 107: + case 267: break; + case 110: { yyendstate(IN_TRIPLE_GSTRING); return storeToken(mGSTRING_END); } - case 262: break; - case 108: + case 268: break; + case 111: { return GROOVY_DOC_COMMENT; } - case 263: break; - case 109: + case 269: break; + case 112: { return storeToken(kLONG); } - case 264: break; - case 110: + case 270: break; + case 113: { return storeToken(kELSE); } - case 265: break; - case 111: + case 271: break; + case 114: { return storeToken(kENUM); } - case 266: break; - case 112: + case 272: break; + case 115: { return storeToken(kBYTE); } - case 267: break; - case 113: + case 273: break; + case 116: { return storeToken(kCASE); } - case 268: break; - case 114: + case 274: break; + case 117: { return storeToken(kCHAR); } - case 269: break; - case 115: + case 275: break; + case 118: { return storeToken(kTRUE); } - case 270: break; - case 116: + case 276: break; + case 119: { return storeToken(kTHIS); } - case 271: break; - case 117: + case 277: break; + case 120: { return storeToken(kNULL); } - case 272: break; - case 118: + case 278: break; + case 121: { return storeToken(kVOID); } - case 273: break; - case 119: + case 279: break; + case 122: { return storeToken(mBSR_ASSIGN); } - case 274: break; - case 120: + case 280: break; + case 123: { return storeToken(kFLOAT); } - case 275: break; - case 121: + case 281: break; + case 124: { return storeToken(kFINAL); } - case 276: break; - case 122: + case 282: break; + case 125: { return storeToken(kFALSE); } - case 277: break; - case 123: + case 283: break; + case 126: { return storeToken(kBREAK); } - case 278: break; - case 124: + case 284: break; + case 127: { return storeToken(kCLASS); } - case 279: break; - case 125: + case 285: break; + case 128: { return storeToken(kCATCH); } - case 280: break; - case 126: + case 286: break; + case 129: { return storeToken(kSUPER); } - case 281: break; - case 127: + case 287: break; + case 130: { return storeToken(kSHORT); } - case 282: break; - case 128: + case 288: break; + case 131: { return storeToken(kTRAIT); } - case 283: break; - case 129: + case 289: break; + case 132: { return storeToken(kTHROW); } - case 284: break; - case 130: + case 290: break; + case 133: { return storeToken(kWHILE); } - case 285: break; - case 131: + case 291: break; + case 134: { return storeToken(kIMPORT); } - case 286: break; - case 132: + case 292: break; + case 135: { return storeToken(kDOUBLE); } - case 287: break; - case 133: + case 293: break; + case 136: { return storeToken(kPUBLIC); } - case 288: break; - case 134: + case 294: break; + case 137: { return storeToken(kASSERT); } - case 289: break; - case 135: + case 295: break; + case 138: { return storeToken(kSTATIC); } - case 290: break; - case 136: + case 296: break; + case 139: { return storeToken(kSWITCH); } - case 291: break; - case 137: + case 297: break; + case 140: { return storeToken(kTHROWS); } - case 292: break; - case 138: + case 298: break; + case 141: { return storeToken(kRETURN); } - case 293: break; - case 139: + case 299: break; + case 142: { return storeToken(kNATIVE); } - case 294: break; - case 140: + case 300: break; + case 143: { return storeToken(kFINALLY); } - case 295: break; - case 141: + case 301: break; + case 144: { return storeToken(kDEFAULT); } - case 296: break; - case 142: + case 302: break; + case 145: { return storeToken(kEXTENDS); } - case 297: break; - case 143: + case 303: break; + case 146: { return storeToken(kBOOLEAN); } - case 298: break; - case 144: + case 304: break; + case 147: { return storeToken(kPACKAGE); } - case 299: break; - case 145: + case 305: break; + case 148: { return storeToken(kPRIVATE); } - case 300: break; - case 146: + case 306: break; + case 149: { return storeToken(kABSTRACT); } - case 301: break; - case 147: + case 307: break; + case 150: { return storeToken(kCONTINUE); } - case 302: break; - case 148: + case 308: break; + case 151: { return storeToken(kSTRICTFP); } - case 303: break; - case 149: + case 309: break; + case 152: { return storeToken(kVOLATILE); } - case 304: break; - case 150: + case 310: break; + case 153: { return storeToken(kINTERFACE); } - case 305: break; - case 151: + case 311: break; + case 154: { return storeToken(kPROTECTED); } - case 306: break; - case 152: + case 312: break; + case 155: { return storeToken(kTRANSIENT); } - case 307: break; - case 153: + case 313: break; + case 156: { return storeToken(kIMPLEMENTS); } - case 308: break; - case 154: + case 314: break; + case 157: { return storeToken(kINSTANCEOF); } - case 309: break; - case 155: + case 315: break; + case 158: { return storeToken(kSYNCHRONIZED); } - case 310: break; + case 316: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/GroovyLexerBase.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/GroovyLexerBase.java index 1e62fda0437e..5524e152982a 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/GroovyLexerBase.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/GroovyLexerBase.java @@ -20,6 +20,7 @@ import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; import com.intellij.util.containers.Stack; +import static com.intellij.util.ArrayUtil.indexOf; import static org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes.*; import static org.jetbrains.plugins.groovy.lang.lexer.TokenSets.KEYWORDS; import static org.jetbrains.plugins.groovy.lang.lexer.TokenSets.LEFT_BRACES; @@ -38,7 +39,6 @@ public abstract class GroovyLexerBase implements FlexLexer { public final Stack stateStack = new Stack<>(); private final Stack bracesStack = new Stack<>(); - private IElementType lastToken = null; protected void yybeginstate(int... states) { for (int state : states) { @@ -60,7 +60,6 @@ public abstract class GroovyLexerBase implements FlexLexer { protected void resetState() { stateStack.clear(); bracesStack.clear(); - lastToken = null; } protected IElementType storeToken(IElementType tokenType) { @@ -81,17 +80,19 @@ public abstract class GroovyLexerBase implements FlexLexer { bracesStack.pop(); } } - lastToken = tokenType; + if (indexOf(getDivisionStates(), yystate()) != -1 && DIVISION_IS_EXPECTED_AFTER.contains(tokenType)) { + yybeginstate(getDivisionExpectedState()); + } return tokenType; } - protected boolean isRegexExpected() { - return !DIVISION_IS_EXPECTED_AFTER.contains(lastToken); - } - protected boolean isWithinBraces() { return !bracesStack.empty() && bracesStack.peek() != mLCURLY; } protected abstract int getInitialState(); + + protected abstract int[] getDivisionStates(); + + protected abstract int getDivisionExpectedState(); } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex index 2716b02c736b..26e5de54d281 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/lexer/groovy.flex @@ -34,13 +34,26 @@ import static org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes.*; %type IElementType %{ + @Override protected int getInitialState() { return YYINITIAL; } + + @Override + protected int getDivisionExpectedState() { + return DIVISION_EXPECTED; + } + + @Override + protected int[] getDivisionStates() { + return new int[] {YYINITIAL, IN_INNER_BLOCK}; + } %} %state IN_INNER_BLOCK +%xstate DIVISION_EXPECTED + %xstate IN_SINGLE_GSTRING %xstate IN_TRIPLE_GSTRING %xstate IN_SLASHY_STRING @@ -407,22 +420,32 @@ mGSTRING_LITERAL = {mDOUBLE_QUOTED_LITERAL} | {mTRIPLE_DOUBLE_QUOTED_LITERAL} ///////////////////////// Reserved shorthands ////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + { + {WHITE_SPACE} { + return TokenType.WHITE_SPACE; + } + "/"/[^/*=] { + yyendstate(DIVISION_EXPECTED); + return storeToken(mDIV); + } + "$/" { + yypushback(1); + yyendstate(DIVISION_EXPECTED); + return storeToken(mDOLLAR); + } + [^] { + yypushback(1); + yyendstate(DIVISION_EXPECTED); + } +} + "/" { - if (isRegexExpected()) { - yybeginstate(IN_SLASHY_STRING); - return storeToken(mREGEX_BEGIN); - } else { - return storeToken(mDIV); - } + yybeginstate(IN_SLASHY_STRING); + return storeToken(mREGEX_BEGIN); } "$/" { - if (isRegexExpected()) { - yybeginstate(IN_DOLLAR_SLASH_STRING); - return storeToken(mDOLLAR_SLASH_REGEX_BEGIN); - } else { - yypushback(1); - return storeToken(mDOLLAR); - } + yybeginstate(IN_DOLLAR_SLASH_STRING); + return storeToken(mDOLLAR_SLASH_REGEX_BEGIN); } "{" { yybeginstate(YYINITIAL, NLS_AFTER_LBRACE); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/CommentsParsingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/CommentsParsingTest.groovy index ffc3c83465a1..0ce92387ac1d 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/CommentsParsingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/CommentsParsingTest.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,5 +35,6 @@ class CommentsParsingTest extends GroovyParsingTestCase { void testNls2() throws Throwable { doTest() } void testRocher3() throws Throwable { doTest() } - + + void testAfterIdentifier() throws Throwable { doTest() } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy index e7cd4fb70d8d..02d33e4a5be7 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy @@ -50,6 +50,8 @@ class ExpressionsParsingTest extends GroovyParsingTestCase { void testarithmetic$mul3() throws Throwable { doTest() } + void testarithmetic$mul4() throws Throwable { doTest() } + void testarithmetic$post1() throws Throwable { doTest() } void testarithmetic$sh1() throws Throwable { doTest() } @@ -408,6 +410,8 @@ class ExpressionsParsingTest extends GroovyParsingTestCase { void testregex$dollarSlashyUltimate() { doTest() } + void testregex$afterNewLine() { doTest() } + void testrelational$eq1() throws Throwable { doTest() } void testrelational$inst0() throws Throwable { doTest() } diff --git a/plugins/groovy/testdata/parsing/groovy/comments/afterIdentifier.test b/plugins/groovy/testdata/parsing/groovy/comments/afterIdentifier.test new file mode 100644 index 000000000000..6c0314a39e73 --- /dev/null +++ b/plugins/groovy/testdata/parsing/groovy/comments/afterIdentifier.test @@ -0,0 +1,13 @@ +a // +a /* */ +----- +Groovy script + Reference expression + PsiElement(identifier)('a') + PsiWhiteSpace(' ') + PsiComment(line comment)('//') + PsiElement(new line)('\n') + Reference expression + PsiElement(identifier)('a') + PsiWhiteSpace(' ') + PsiComment(block comment)('/* */') \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/expressions/arithmetic/mul4.test b/plugins/groovy/testdata/parsing/groovy/expressions/arithmetic/mul4.test new file mode 100644 index 000000000000..233ee4978c2b --- /dev/null +++ b/plugins/groovy/testdata/parsing/groovy/expressions/arithmetic/mul4.test @@ -0,0 +1,11 @@ +a /= b +----- +Groovy script + Assignment expression + Reference expression + PsiElement(identifier)('a') + PsiWhiteSpace(' ') + PsiElement(/=)('/=') + PsiWhiteSpace(' ') + Reference expression + PsiElement(identifier)('b') \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/expressions/regex/afterNewLine.test b/plugins/groovy/testdata/parsing/groovy/expressions/regex/afterNewLine.test new file mode 100644 index 000000000000..66b4fbe5d62b --- /dev/null +++ b/plugins/groovy/testdata/parsing/groovy/expressions/regex/afterNewLine.test @@ -0,0 +1,12 @@ +a +/foo/ +----- +Groovy script + Reference expression + PsiElement(identifier)('a') + PsiElement(new line)('\n') + Literal + GroovyASTPsiElementImpl(regex literal) + PsiElement(regex begin)('/') + PsiElement(regex content)('foo') + PsiElement(regex end)('/') \ No newline at end of file