From 1e82ce081fc53ced0ddd2c7a4b86fd003a14f833 Mon Sep 17 00:00:00 2001 From: goto1134 <1134togo@gmail.com> Date: Mon, 29 Jan 2024 18:22:20 +0100 Subject: [PATCH] feat: support line continuations in values and labels --- .../plugins/d2/lang/D2FlexLexer.java | 1777 +++++++++-------- src/src/lang/D2Lexer.flex | 43 +- src/src/lang/psi/ShapeProperty.kt | 24 +- src/testResources/psi/classes and array.txt | 15 +- src/testResources/psi/parsing.txt | 15 +- src/testResources/psi/style object.txt | 3 +- src/testResources/psi/values and labels.d2 | 60 + src/testResources/psi/values and labels.txt | 364 ++++ src/testSrc/D2ParsingTest.kt | 5 + 9 files changed, 1459 insertions(+), 847 deletions(-) create mode 100644 src/testResources/psi/values and labels.d2 create mode 100644 src/testResources/psi/values and labels.txt diff --git a/src/gen/org/jetbrains/plugins/d2/lang/D2FlexLexer.java b/src/gen/org/jetbrains/plugins/d2/lang/D2FlexLexer.java index aaa0886..7cf007d 100644 --- a/src/gen/org/jetbrains/plugins/d2/lang/D2FlexLexer.java +++ b/src/gen/org/jetbrains/plugins/d2/lang/D2FlexLexer.java @@ -74,17 +74,17 @@ private static int zzUnpackcmap_top(String packed, int offset, int [] result) { private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks(); private static final String ZZ_CMAP_BLOCKS_PACKED_0 = - "\11\0\1\1\1\2\1\3\1\4\1\5\22\0\1\1"+ - "\1\0\1\6\1\7\1\10\1\0\1\11\1\12\1\10"+ - "\1\0\1\13\2\0\1\14\1\15\1\0\3\16\1\17"+ - "\6\16\1\20\1\21\1\22\1\0\1\23\1\0\1\10"+ - "\6\24\24\25\1\26\1\27\1\30\1\0\1\31\1\0"+ - "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ - "\1\42\1\25\1\43\1\44\1\45\1\46\1\47\1\50"+ - "\1\25\1\51\1\52\1\53\1\54\1\55\1\56\1\57"+ - "\1\60\1\61\1\62\1\63\1\64\7\0\1\3\32\0"+ - "\1\65\u01df\0\1\65\177\0\13\65\35\0\2\3\5\0"+ - "\1\65\57\0\1\65\240\0\1\65\377\0\u0100\66"; + "\11\0\1\1\1\2\1\3\1\4\1\3\22\0\1\1"+ + "\1\0\1\5\1\6\1\7\1\0\1\10\1\11\1\7"+ + "\1\0\1\12\2\0\1\13\1\14\1\0\3\15\1\16"+ + "\6\15\1\17\1\20\1\21\1\0\1\22\1\0\1\7"+ + "\6\23\24\24\1\25\1\26\1\27\1\0\1\30\1\0"+ + "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40"+ + "\1\41\1\24\1\42\1\43\1\44\1\45\1\46\1\47"+ + "\1\24\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+ + "\1\57\1\60\1\61\1\62\1\63\7\0\1\3\32\0"+ + "\1\64\u01df\0\1\64\177\0\13\64\35\0\2\3\5\0"+ + "\1\64\57\0\1\64\240\0\1\64\377\0\u0100\65"; private static int [] zzUnpackcmap_blocks() { int [] result = new int[1536]; @@ -111,23 +111,31 @@ private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\7\0\1\1\1\2\1\3\1\4\3\3\1\5\1\1"+ - "\1\6\1\7\2\3\1\10\21\1\1\11\1\12\1\13"+ - "\1\14\1\2\1\15\2\14\1\16\1\17\1\20\1\3"+ - "\1\14\1\21\1\22\1\23\1\24\1\25\2\14\1\26"+ - "\2\27\1\3\1\30\1\31\1\14\1\32\5\0\1\33"+ - "\2\0\1\33\1\0\1\34\1\35\1\0\1\36\1\37"+ - "\1\0\36\1\1\12\2\0\1\33\1\14\1\0\5\14"+ - "\3\0\1\33\2\0\1\40\2\0\33\1\1\41\4\1"+ - "\1\33\1\14\1\42\2\14\3\0\6\1\2\36\20\1"+ - "\1\43\2\1\2\14\1\44\1\0\2\1\1\41\3\1"+ - "\3\0\7\1\1\45\1\1\1\0\3\1\1\14\1\46"+ - "\1\4\17\1\1\36\4\1\1\47\1\14\1\4\1\0"+ - "\2\1\1\0\7\1\2\0\3\1\1\14\1\4\15\1"+ - "\1\14\1\1\1\50\10\1\1\0\24\1\1\51"; + "\7\0\1\1\1\2\1\3\1\4\1\5\1\3\1\5"+ + "\1\6\1\1\1\7\1\10\2\5\1\11\21\1\1\12"+ + "\1\13\1\14\1\15\1\2\1\16\2\3\1\15\1\17"+ + "\1\20\1\21\1\5\1\15\2\3\1\22\1\23\1\24"+ + "\1\25\1\15\1\26\2\15\1\27\2\30\1\5\1\31"+ + "\1\32\1\15\1\33\4\0\2\3\1\0\1\3\1\34"+ + "\1\35\1\0\1\36\1\37\1\0\36\1\1\13\1\0"+ + "\1\15\2\0\2\3\1\15\2\3\1\0\1\15\4\3"+ + "\1\15\4\3\6\15\5\0\1\40\2\0\33\1\1\41"+ + "\4\1\2\15\1\3\1\15\2\3\3\15\1\3\1\15"+ + "\1\3\1\0\4\3\1\42\1\15\1\22\1\0\2\15"+ + "\1\0\2\15\3\0\6\1\2\36\20\1\1\43\2\1"+ + "\3\3\1\0\1\3\1\15\1\3\1\15\1\0\1\15"+ + "\1\22\3\15\1\0\4\15\1\0\1\15\1\44\1\0"+ + "\2\1\1\41\3\1\3\0\7\1\1\45\1\1\1\0"+ + "\3\1\1\46\1\0\1\3\1\46\2\42\3\15\1\0"+ + "\1\15\1\47\2\15\1\0\1\4\17\1\1\36\4\1"+ + "\1\46\1\3\1\0\2\3\3\15\1\0\1\15\1\44"+ + "\1\4\1\0\2\1\1\0\7\1\2\0\3\1\1\3"+ + "\1\0\1\46\1\3\1\15\1\47\1\4\15\1\1\46"+ + "\1\0\1\3\1\46\1\1\1\50\10\1\2\0\1\3"+ + "\10\1\1\46\14\1\1\51"; private static int [] zzUnpackAction() { - int [] result = new int[315]; + int [] result = new int[405]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -152,49 +160,60 @@ private static int zzUnpackAction(String packed, int offset, int [] result) { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\67\0\156\0\245\0\334\0\u0113\0\u014a\0\u0181"+ - "\0\u01b8\0\u01ef\0\u0226\0\u025d\0\u0294\0\u02cb\0\u025d\0\u0302"+ - "\0\u025d\0\u025d\0\u0339\0\u0370\0\u0181\0\u03a7\0\u03de\0\u0415"+ - "\0\u044c\0\u0483\0\u04ba\0\u04f1\0\u0528\0\u055f\0\u0596\0\u05cd"+ - "\0\u0604\0\u063b\0\u0672\0\u06a9\0\u06e0\0\u0717\0\u025d\0\u074e"+ - "\0\u025d\0\u0785\0\u07bc\0\u07f3\0\u082a\0\u0861\0\u025d\0\u025d"+ - "\0\u025d\0\u0898\0\u08cf\0\u0906\0\u0785\0\u025d\0\u0785\0\u0785"+ - "\0\u093d\0\u0974\0\u09ab\0\u09e2\0\u025d\0\u0a19\0\u0a50\0\u0785"+ - "\0\u0a87\0\u0785\0\u0181\0\u0abe\0\u0af5\0\u0898\0\u0b2c\0\u0b63"+ - "\0\u0b9a\0\u0294\0\u025d\0\u0bd1\0\u0c08\0\u025d\0\u0c3f\0\u0181"+ - "\0\u0c76\0\u0cad\0\u0ce4\0\u0d1b\0\u0d52\0\u0d89\0\u0dc0\0\u0df7"+ - "\0\u0e2e\0\u0e65\0\u0e9c\0\u0ed3\0\u0f0a\0\u0f41\0\u0f78\0\u0faf"+ - "\0\u0fe6\0\u101d\0\u1054\0\u108b\0\u10c2\0\u10f9\0\u1130\0\u1167"+ - "\0\u119e\0\u11d5\0\u120c\0\u1243\0\u127a\0\u12b1\0\u12e8\0\u131f"+ - "\0\u1356\0\u0785\0\u082a\0\u0785\0\u138d\0\u0861\0\u13c4\0\u13fb"+ - "\0\u1432\0\u1469\0\u14a0\0\u0a19\0\u14d7\0\u150e\0\u0b2c\0\u1545"+ - "\0\u157c\0\u025d\0\u15b3\0\u15ea\0\u1621\0\u1658\0\u168f\0\u16c6"+ - "\0\u16fd\0\u1734\0\u176b\0\u17a2\0\u17d9\0\u1810\0\u1847\0\u187e"+ - "\0\u18b5\0\u18ec\0\u1923\0\u195a\0\u1991\0\u19c8\0\u19ff\0\u1a36"+ - "\0\u1a6d\0\u1aa4\0\u1adb\0\u1b12\0\u1b49\0\u1b80\0\u1bb7\0\u0181"+ - "\0\u1bee\0\u1c25\0\u1c5c\0\u1c93\0\u082a\0\u1cca\0\u1432\0\u1d01"+ - "\0\u1d38\0\u1d6f\0\u1da6\0\u1ddd\0\u1e14\0\u1e4b\0\u1e82\0\u1eb9"+ - "\0\u1ef0\0\u1f27\0\u1f5e\0\u1f95\0\u1fcc\0\u2003\0\u203a\0\u2071"+ - "\0\u20a8\0\u20df\0\u2116\0\u214d\0\u2184\0\u21bb\0\u21f2\0\u2229"+ - "\0\u2260\0\u2297\0\u22ce\0\u2305\0\u0181\0\u233c\0\u2373\0\u23aa"+ - "\0\u23e1\0\u0785\0\u2418\0\u244f\0\u2486\0\u24bd\0\u24f4\0\u252b"+ - "\0\u2562\0\u2599\0\u25d0\0\u2607\0\u263e\0\u2675\0\u26ac\0\u26e3"+ - "\0\u271a\0\u2751\0\u2788\0\u0181\0\u27bf\0\u27f6\0\u282d\0\u2864"+ - "\0\u289b\0\u28d2\0\u0785\0\u2909\0\u2940\0\u2977\0\u29ae\0\u29e5"+ - "\0\u2a1c\0\u2a53\0\u2a8a\0\u2ac1\0\u2af8\0\u2b2f\0\u2b66\0\u2b9d"+ - "\0\u2bd4\0\u2c0b\0\u2c42\0\u2c79\0\u2cb0\0\u2ce7\0\u2d1e\0\u2d55"+ - "\0\u0785\0\u2d8c\0\u2dc3\0\u2dfa\0\u2e31\0\u2e68\0\u2e9f\0\u2ed6"+ - "\0\u2f0d\0\u2f44\0\u2f7b\0\u2fb2\0\u2fe9\0\u3020\0\u3057\0\u308e"+ - "\0\u30c5\0\u30fc\0\u3133\0\u316a\0\u025d\0\u31a1\0\u31d8\0\u320f"+ - "\0\u3246\0\u327d\0\u32b4\0\u32eb\0\u3322\0\u3359\0\u3390\0\u33c7"+ - "\0\u33fe\0\u3435\0\u346c\0\u34a3\0\u0181\0\u34da\0\u3511\0\u3548"+ - "\0\u357f\0\u35b6\0\u35ed\0\u3624\0\u365b\0\u3692\0\u36c9\0\u3700"+ - "\0\u3737\0\u376e\0\u37a5\0\u37dc\0\u3813\0\u384a\0\u3881\0\u38b8"+ - "\0\u38ef\0\u3926\0\u395d\0\u3994\0\u39cb\0\u3a02\0\u3a39\0\u3a70"+ - "\0\u3aa7\0\u3ade\0\u0181"; + "\0\0\0\66\0\154\0\242\0\330\0\u010e\0\u0144\0\u017a"+ + "\0\u01b0\0\u01e6\0\u021c\0\u0252\0\u0288\0\u02be\0\u0252\0\u02f4"+ + "\0\u0252\0\u0252\0\u032a\0\u0360\0\u017a\0\u0396\0\u03cc\0\u0402"+ + "\0\u0438\0\u046e\0\u04a4\0\u04da\0\u0510\0\u0546\0\u057c\0\u05b2"+ + "\0\u05e8\0\u061e\0\u0654\0\u068a\0\u06c0\0\u06f6\0\u0252\0\u072c"+ + "\0\u0252\0\u0762\0\u0798\0\u07ce\0\u0804\0\u083a\0\u0870\0\u0252"+ + "\0\u0252\0\u0252\0\u08a6\0\u08dc\0\u0912\0\u0948\0\u097e\0\u08dc"+ + "\0\u0252\0\u0252\0\u09b4\0\u0252\0\u09ea\0\u0a20\0\u0a56\0\u0a8c"+ + "\0\u0252\0\u0ac2\0\u0af8\0\u0252\0\u0b2e\0\u0252\0\u017a\0\u0b64"+ + "\0\u0b9a\0\u08a6\0\u0bd0\0\u0c06\0\u0c3c\0\u0252\0\u0c72\0\u0252"+ + "\0\u0ca8\0\u017a\0\u0cde\0\u0d14\0\u0d4a\0\u0d80\0\u0db6\0\u0dec"+ + "\0\u0e22\0\u0e58\0\u0e8e\0\u0ec4\0\u0efa\0\u0f30\0\u0f66\0\u0f9c"+ + "\0\u0fd2\0\u1008\0\u103e\0\u1074\0\u10aa\0\u10e0\0\u1116\0\u114c"+ + "\0\u1182\0\u11b8\0\u11ee\0\u1224\0\u125a\0\u1290\0\u12c6\0\u12fc"+ + "\0\u1332\0\u1368\0\u139e\0\u13d4\0\u140a\0\u1440\0\u1476\0\u14ac"+ + "\0\u0762\0\u14e2\0\u1518\0\u154e\0\u1584\0\u15ba\0\u15f0\0\u1626"+ + "\0\u08dc\0\u165c\0\u1692\0\u16c8\0\u16fe\0\u1734\0\u176a\0\u17a0"+ + "\0\u17d6\0\u180c\0\u1842\0\u1878\0\u18ae\0\u0ac2\0\u18e4\0\u191a"+ + "\0\u1950\0\u1986\0\u0252\0\u19bc\0\u19f2\0\u1a28\0\u1a5e\0\u1a94"+ + "\0\u1aca\0\u1b00\0\u1b36\0\u1b6c\0\u1ba2\0\u1bd8\0\u1c0e\0\u1c44"+ + "\0\u1c7a\0\u1cb0\0\u1ce6\0\u1d1c\0\u1d52\0\u1d88\0\u1dbe\0\u1df4"+ + "\0\u1e2a\0\u1e60\0\u1e96\0\u1ecc\0\u1f02\0\u1f38\0\u1f6e\0\u1fa4"+ + "\0\u017a\0\u1fda\0\u2010\0\u2046\0\u207c\0\u13d4\0\u20b2\0\u13d4"+ + "\0\u20e8\0\u211e\0\u2154\0\u1584\0\u218a\0\u21c0\0\u1584\0\u21f6"+ + "\0\u222c\0\u2262\0\u2298\0\u22ce\0\u2304\0\u233a\0\u2370\0\u23a6"+ + "\0\u23dc\0\u2412\0\u2448\0\u247e\0\u24b4\0\u24ea\0\u2520\0\u2556"+ + "\0\u258c\0\u25c2\0\u25f8\0\u262e\0\u2664\0\u269a\0\u26d0\0\u2706"+ + "\0\u273c\0\u2772\0\u27a8\0\u27de\0\u2814\0\u284a\0\u2880\0\u28b6"+ + "\0\u28ec\0\u2922\0\u2958\0\u298e\0\u29c4\0\u29fa\0\u2a30\0\u2a66"+ + "\0\u2a9c\0\u2ad2\0\u017a\0\u2b08\0\u2b3e\0\u2b74\0\u2baa\0\u2be0"+ + "\0\u2c16\0\u2c4c\0\u2c82\0\u2cb8\0\u2cee\0\u2d24\0\u2d5a\0\u2d90"+ + "\0\u2dc6\0\u2dfc\0\u2e32\0\u2e68\0\u2e9e\0\u2ed4\0\u2f0a\0\u2f40"+ + "\0\u2f76\0\u2fac\0\u08dc\0\u2fe2\0\u3018\0\u304e\0\u3084\0\u30ba"+ + "\0\u30f0\0\u3126\0\u315c\0\u3192\0\u31c8\0\u31fe\0\u3234\0\u326a"+ + "\0\u32a0\0\u32d6\0\u330c\0\u3342\0\u017a\0\u3378\0\u33ae\0\u33e4"+ + "\0\u341a\0\u3450\0\u3486\0\u34bc\0\u34f2\0\u3528\0\u355e\0\u3594"+ + "\0\u35ca\0\u3600\0\u3636\0\u366c\0\u36a2\0\u08dc\0\u36d8\0\u370e"+ + "\0\u3744\0\u377a\0\u37b0\0\u37e6\0\u381c\0\u3852\0\u3888\0\u38be"+ + "\0\u38f4\0\u392a\0\u3960\0\u3996\0\u39cc\0\u3a02\0\u3a38\0\u3a6e"+ + "\0\u3aa4\0\u3ada\0\u3b10\0\u3b46\0\u3b7c\0\u3bb2\0\u0252\0\u3be8"+ + "\0\u3c1e\0\u3c54\0\u3c8a\0\u3cc0\0\u3cf6\0\u3d2c\0\u3d62\0\u3d98"+ + "\0\u1584\0\u3dce\0\u3e04\0\u3e3a\0\u3e70\0\u3ea6\0\u3edc\0\u3f12"+ + "\0\u3f48\0\u3f7e\0\u3fb4\0\u3fea\0\u4020\0\u4056\0\u408c\0\u40c2"+ + "\0\u40f8\0\u412e\0\u4164\0\u419a\0\u41d0\0\u4206\0\u423c\0\u1584"+ + "\0\u0252\0\u4272\0\u42a8\0\u42de\0\u4314\0\u434a\0\u4380\0\u43b6"+ + "\0\u43ec\0\u4422\0\u4458\0\u448e\0\u44c4\0\u44fa\0\u4530\0\u4566"+ + "\0\u459c\0\u45d2\0\u4608\0\u017a\0\u463e\0\u4674\0\u46aa\0\u46e0"+ + "\0\u4716\0\u474c\0\u4782\0\u47b8\0\u47ee\0\u4824\0\u485a\0\u4890"+ + "\0\u48c6\0\u48fc\0\u4932\0\u4968\0\u499e\0\u49d4\0\u4a0a\0\u4a40"+ + "\0\u4a76\0\u4aac\0\u4ae2\0\u4b18\0\u4b4e\0\u4b84\0\u4bba\0\u4bf0"+ + "\0\u4c26\0\u4c5c\0\u4c92\0\u4cc8\0\u017a"; private static int [] zzUnpackRowMap() { - int [] result = new int[315]; + int [] result = new int[405]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -217,710 +236,862 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) { private static final int [] ZZ_TRANS = zzUnpacktrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\10\5\11\1\12\1\13\2\14\1\15\1\10\1\16"+ + "\1\10\4\11\1\12\1\13\2\14\1\15\1\10\1\16"+ "\1\17\1\10\1\20\1\21\1\22\1\23\1\14\2\10"+ "\1\14\1\24\1\14\1\25\1\26\1\27\1\30\1\31"+ "\1\10\1\32\1\33\1\34\1\35\1\10\1\36\1\37"+ "\1\40\1\41\2\10\1\42\1\43\1\44\1\45\1\46"+ "\3\10\1\47\1\50\1\51\1\11\1\10\1\52\1\53"+ - "\1\54\2\14\1\54\1\55\3\52\1\56\6\52\1\14"+ - "\40\52\1\57\1\50\1\60\1\14\1\52\1\14\5\11"+ - "\12\14\1\61\6\14\1\62\35\14\1\11\1\14\1\52"+ - "\1\53\1\54\2\14\1\54\1\63\3\52\1\56\3\52"+ - "\2\64\1\65\1\66\4\52\1\67\1\52\1\70\6\52"+ - "\1\71\13\52\1\72\6\52\2\14\1\60\1\14\1\52"+ - "\1\73\5\74\55\73\1\75\1\73\1\74\1\73\63\76"+ - "\1\77\3\76\1\52\5\11\13\52\1\22\4\52\1\100"+ - "\1\101\1\102\31\52\3\14\1\11\1\52\1\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\31\10\1\0\1\10\2\0\1\10\1\0\5\11\21\0"+ - "\1\106\35\0\1\11\1\0\6\107\1\110\20\107\1\111"+ - "\37\107\2\13\4\0\60\13\70\0\12\112\1\113\14\112"+ - "\1\114\37\112\1\10\1\104\2\0\1\104\1\0\1\10"+ - "\1\0\1\10\1\0\1\10\1\0\1\115\1\0\2\10"+ - "\3\0\1\116\2\10\1\0\1\117\1\0\31\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\4\10\1\120\24\10\1\0"+ - "\1\10\2\0\1\10\14\0\1\121\12\0\1\122\37\0"+ - "\2\10\1\11\3\0\60\10\1\0\1\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\15\10"+ - "\1\123\13\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\16\10"+ - "\1\124\12\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\13\10"+ - "\1\125\2\10\1\126\12\10\1\0\1\10\2\0\2\10"+ - "\1\103\2\0\1\103\1\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\104\1\0\2\10\4\0\2\10\1\0\1\105"+ - "\1\0\5\10\1\127\3\10\1\130\4\10\1\131\12\10"+ - "\1\0\1\10\2\0\2\10\1\103\2\0\1\103\1\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\104\1\0\2\10"+ - "\4\0\2\10\1\0\1\105\1\0\11\10\1\132\4\10"+ - "\1\133\12\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\20\10"+ - "\1\134\10\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\5\10"+ - "\1\135\10\10\1\136\12\10\1\0\1\10\2\0\2\10"+ - "\1\103\2\0\1\103\1\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\104\1\0\2\10\4\0\2\10\1\0\1\105"+ - "\1\0\3\10\1\137\16\10\1\140\6\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\1\10\1\141\3\10\1\142\3\10"+ - "\1\143\17\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\23\10"+ - "\1\144\5\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\5\10"+ - "\1\145\23\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\17\10"+ - "\1\146\11\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\10\10"+ - "\1\147\5\10\1\150\3\10\1\151\6\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\1\10\1\152\3\10\1\153\10\10"+ - "\1\154\12\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\15\10"+ - "\1\155\13\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\1\10"+ - "\1\156\3\10\1\157\23\10\1\0\1\10\2\0\2\10"+ - "\1\103\2\0\1\103\1\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\104\1\0\2\10\4\0\2\10\1\0\1\105"+ - "\1\0\11\10\1\160\17\10\1\0\1\10\2\0\1\10"+ - "\1\161\5\0\10\161\2\0\4\161\2\0\3\161\31\0"+ - "\1\161\1\50\1\161\1\0\1\161\1\52\1\162\4\0"+ - "\13\52\1\0\40\52\4\0\1\52\1\0\1\53\67\0"+ - "\1\54\2\0\1\54\61\0\1\55\1\163\4\107\1\164"+ - "\12\55\1\107\5\55\1\165\32\55\4\107\1\55\1\56"+ - "\1\166\4\112\4\56\1\164\6\56\1\112\5\56\1\167"+ - "\32\56\4\112\1\56\2\0\1\11\64\0\1\55\1\163"+ - "\4\107\1\164\1\170\11\55\1\107\5\55\1\165\32\55"+ - "\4\107\1\55\1\52\1\162\4\0\7\52\1\171\2\64"+ - "\1\52\1\0\40\52\4\0\2\52\1\162\4\0\13\52"+ - "\1\0\10\52\1\172\27\52\4\0\2\52\1\162\4\0"+ - "\13\52\1\0\27\52\1\173\10\52\4\0\1\52\1\73"+ - "\5\0\55\73\1\75\1\73\1\0\1\73\1\0\5\74"+ - "\57\0\1\74\1\0\63\174\1\77\3\174\63\0\1\77"+ - "\3\0\1\52\1\162\1\11\3\0\13\52\1\0\40\52"+ - "\4\0\1\52\1\10\1\104\2\0\1\104\1\0\1\10"+ - "\1\0\1\10\1\0\1\10\3\0\2\10\4\0\2\10"+ - "\1\0\1\175\1\0\31\10\1\0\1\10\2\0\3\10"+ - "\1\103\3\0\60\10\1\0\6\107\1\113\20\107\1\111"+ - "\37\107\6\0\1\176\60\0\6\107\1\177\20\107\1\111"+ - "\37\107\2\112\4\0\60\112\15\0\1\115\6\0\1\116"+ - "\3\0\1\200\37\0\2\10\1\201\3\0\60\10\15\0"+ - "\1\121\6\0\1\202\3\0\1\203\41\0\1\204\64\0"+ - "\1\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\104\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\11\10\1\205\17\10\1\0\1\10\2\0"+ - "\2\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\104\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\13\10\1\20\4\10\1\206\10\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\1\10\1\207\27\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\15\10\1\210\13\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\21\10\1\211\7\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\20\10\1\212\10\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\23\10\1\213\5\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\13\10\1\214\15\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\15\10\1\215\13\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\11\10\1\216\17\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\11\10\1\217\17\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\20\10\1\220\10\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\16\10\1\221\12\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\1\10\1\222\27\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\2\10\1\223\26\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\6\10\1\224\22\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\15\10\1\225\13\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\13\10\1\226\15\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\1\10\1\227\27\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\1\10\1\230\27\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\1\10\1\231\27\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\23\10\1\232\5\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\20\10\1\233\6\10\1\234"+ - "\1\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\20\10\1\235"+ - "\10\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\26\10\1\236"+ - "\2\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\237"+ - "\1\240\11\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\4\10"+ - "\1\241\24\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\20\10"+ - "\1\242\10\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\20\10"+ - "\1\243\10\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\4\10"+ - "\1\244\24\10\1\0\1\10\2\0\1\10\1\161\5\0"+ - "\10\161\2\0\4\161\2\0\3\161\31\0\1\161\1\0"+ - "\1\161\1\0\1\161\1\55\1\163\4\107\1\245\12\55"+ - "\1\107\5\55\1\165\32\55\4\107\1\55\1\56\1\166"+ - "\4\0\13\56\1\112\40\56\4\112\1\52\1\55\1\163"+ - "\4\107\1\164\7\55\2\246\1\55\1\107\2\55\1\246"+ - "\2\55\1\165\2\55\6\246\22\55\4\107\1\55\1\52"+ - "\1\162\4\0\10\52\2\247\1\52\1\0\40\52\4\0"+ - "\2\52\1\162\4\0\13\52\1\0\22\52\1\250\15\52"+ - "\4\0\2\52\1\162\4\0\13\52\1\0\32\52\1\251"+ - "\5\52\4\0\1\52\2\10\1\104\3\0\60\10\1\0"+ - "\6\176\1\252\60\176\2\0\1\253\64\0\1\10\1\201"+ - "\2\0\1\201\1\0\1\10\1\0\1\10\1\0\1\10"+ - "\1\0\1\115\1\0\2\10\3\0\1\116\2\10\1\0"+ - "\1\117\1\0\31\10\1\0\1\10\2\0\1\10\2\0"+ - "\1\254\65\0\1\204\2\0\1\204\7\0\1\121\12\0"+ - "\1\122\37\0\1\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\14\10\1\255\14\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\4\10\1\256\24\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\21\10\1\257\7\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\21\10\1\260\7\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\3\10\1\240\25\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\5\10\1\261\23\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\2\10\1\262\26\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\13\10\1\263\15\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\22\10\1\264\6\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\4\10\1\265\24\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\7\10\1\266\21\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\11\10\1\267\17\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\15\10\1\240\13\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\13\10\1\270\15\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\5\10\1\271\23\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\22\10\1\240\6\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\12\10\1\240\16\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\22\10\1\272\6\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\20\10\1\240\10\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\3\10\1\273\25\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\4\10\1\274\12\10\1\275"+ - "\11\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\20\10\1\276"+ - "\10\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\277"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\13\10\1\300"+ - "\15\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\7\10\1\301"+ - "\21\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\22\10\1\302"+ - "\6\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\13\10\1\303"+ - "\15\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\5\10\1\304"+ - "\23\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\21\10\1\305"+ - "\7\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\22\10\1\306"+ - "\6\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\22\10\1\307"+ - "\6\10\1\0\1\10\2\0\1\10\1\55\1\163\4\107"+ - "\1\164\7\55\2\310\1\55\1\107\2\55\1\310\2\55"+ - "\1\165\2\55\6\310\22\55\4\107\1\55\1\52\1\162"+ - "\4\0\13\52\1\0\30\52\1\311\7\52\4\0\2\52"+ - "\1\162\4\0\13\52\1\0\14\52\1\312\23\52\4\0"+ - "\1\52\6\176\1\313\60\176\1\0\1\253\2\0\1\253"+ - "\7\0\1\115\6\0\1\116\3\0\1\200\40\0\1\254"+ - "\2\0\1\254\7\0\1\121\6\0\1\202\3\0\1\203"+ - "\37\0\1\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\1\10\1\314\27\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\5\10\1\315\23\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\21\10\1\316\7\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\22\10\1\317\6\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\3\10\1\320\25\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\13\10\1\321\15\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\322\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\5\10\1\20\23\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\323\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\31\10\1\0\1\10\2\0\2\10"+ - "\1\103\2\0\1\103\1\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\324\1\0\2\10\4\0\2\10\1\0\1\105"+ - "\1\0\31\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\10\10"+ - "\1\224\20\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\30\10"+ - "\1\325\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\11\10\1\326"+ - "\17\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\13\10\1\240"+ - "\15\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\11\10\1\327"+ - "\17\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\11\10\1\330"+ - "\17\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\331"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\5\10\1\240"+ - "\23\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\3\10\1\332"+ - "\25\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\12\10\1\333"+ - "\16\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\5\10\1\334"+ - "\23\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\5\10\1\335"+ - "\23\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\336\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\31\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\22\10\1\337\6\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\20\10\1\340\10\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\11\10\1\341\17\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\10\10\1\240\20\10\1\0"+ - "\1\10\2\0\1\10\1\55\1\163\4\107\1\164\7\55"+ - "\2\342\1\55\1\107\2\55\1\342\2\55\1\165\2\55"+ - "\6\342\22\55\4\107\1\55\1\52\1\162\4\0\13\52"+ - "\1\0\14\52\1\343\23\52\4\0\1\52\6\176\1\344"+ - "\60\176\1\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\22\10\1\345\6\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\20\10\1\346\10\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\5\10\1\242\23\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\20\10\1\347\10\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\22\10\1\350\6\10\1\0\1\10"+ - "\2\0\2\10\1\103\2\0\1\103\1\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\104\1\0\2\10\4\0\2\10"+ - "\1\0\1\105\1\0\5\10\1\351\23\10\1\0\1\10"+ - "\2\0\2\10\1\104\2\0\1\104\1\0\1\10\1\0"+ + "\2\54\1\53\1\55\1\14\2\52\1\56\6\52\1\14"+ + "\5\52\1\57\32\52\1\60\1\50\1\61\1\54\1\52"+ + "\1\14\4\11\12\14\1\62\6\14\1\63\35\14\1\11"+ + "\1\14\1\64\1\53\2\54\1\53\1\65\1\14\2\64"+ + "\1\66\3\64\2\67\1\70\1\71\4\64\1\72\1\73"+ + "\1\74\6\64\1\75\13\64\1\76\6\64\2\14\1\61"+ + "\1\54\1\64\1\77\4\100\55\77\1\101\1\77\1\100"+ + "\1\77\62\102\1\103\3\102\1\64\4\11\1\64\1\14"+ + "\11\64\1\22\4\64\1\104\1\105\1\106\31\64\3\14"+ + "\1\11\1\64\1\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\31\10\1\0\1\10\2\0\1\10"+ + "\1\0\4\11\21\0\1\112\35\0\1\11\1\0\2\113"+ + "\1\0\2\113\1\114\20\113\1\115\37\113\2\13\3\0"+ + "\60\13\67\0\2\15\1\0\6\15\1\116\54\15\1\10"+ + "\1\110\2\0\1\110\1\10\1\0\1\10\1\0\1\10"+ + "\1\0\1\117\1\0\2\10\3\0\1\120\2\10\1\0"+ + "\1\121\1\0\31\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\4\10"+ + "\1\122\24\10\1\0\1\10\2\0\1\10\13\0\1\123"+ + "\12\0\1\124\37\0\2\10\1\11\2\0\60\10\1\0"+ + "\1\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\15\10\1\125\13\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\16\10\1\126\12\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\13\10"+ + "\1\127\2\10\1\130\12\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\5\10\1\131\3\10\1\132\4\10\1\133\12\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\11\10\1\134\4\10\1\135\12\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\20\10\1\136\10\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\5\10\1\137\10\10\1\140\12\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\3\10\1\141\16\10\1\142"+ + "\6\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\1\10\1\143\3\10"+ + "\1\144\3\10\1\145\17\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\23\10\1\146\5\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\5\10"+ + "\1\147\23\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\17\10\1\150"+ + "\11\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\10\10\1\151\5\10"+ + "\1\152\3\10\1\153\6\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\1\10\1\154\3\10\1\155\10\10\1\156\12\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\15\10\1\157\13\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\1\10\1\160\3\10\1\161\23\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\11\10\1\162\17\10\1\0\1\10"+ + "\2\0\1\10\1\163\4\0\10\163\2\0\4\163\2\0"+ + "\3\163\31\0\1\163\1\50\1\163\1\0\1\163\1\52"+ + "\1\164\2\0\1\164\1\52\1\0\11\52\1\0\5\52"+ + "\1\165\32\52\4\0\1\52\1\0\1\53\2\54\1\53"+ + "\21\0\1\166\35\0\1\54\2\0\4\54\21\0\1\167"+ + "\35\0\1\54\1\0\1\55\1\170\1\0\1\113\1\170"+ + "\1\171\1\113\11\55\1\113\5\55\1\172\32\55\4\113"+ + "\1\55\1\56\1\173\1\0\1\15\1\173\1\56\1\15"+ + "\2\56\1\171\6\56\1\15\5\56\1\174\32\56\4\15"+ + "\1\56\1\52\1\164\1\53\1\0\1\164\1\52\1\0"+ + "\11\52\1\0\5\52\1\165\32\52\4\0\1\52\2\0"+ + "\1\11\63\0\1\64\1\175\2\0\1\175\1\64\1\0"+ + "\11\64\1\0\4\64\1\0\1\176\1\0\31\64\4\0"+ + "\1\64\1\177\1\200\1\0\1\113\1\200\1\201\1\202"+ + "\11\177\1\113\4\177\1\113\1\203\1\113\31\177\4\113"+ + "\1\177\1\204\1\205\1\0\1\15\1\205\1\204\1\206"+ + "\2\204\1\201\6\204\1\15\4\204\1\15\1\207\1\15"+ + "\31\204\4\15\1\204\1\64\1\175\2\0\1\175\1\64"+ + "\1\0\5\64\1\210\2\67\1\64\1\0\4\64\1\0"+ + "\1\211\1\0\31\64\4\0\2\64\1\175\1\53\1\0"+ + "\1\175\1\64\1\0\11\64\1\0\4\64\1\0\1\176"+ + "\1\0\31\64\4\0\2\64\1\175\2\0\1\175\1\64"+ + "\1\0\11\64\1\0\4\64\1\0\1\212\1\0\1\64"+ + "\1\213\27\64\4\0\2\64\1\175\2\0\1\175\1\64"+ + "\1\0\11\64\1\0\4\64\1\0\1\214\1\0\20\64"+ + "\1\215\10\64\4\0\1\64\1\77\4\0\55\77\1\101"+ + "\1\77\1\0\1\77\1\0\4\100\57\0\1\100\1\0"+ + "\62\216\1\103\3\216\62\0\1\103\3\0\1\64\1\175"+ + "\1\11\1\0\1\175\1\64\1\0\11\64\1\0\4\64"+ + "\1\0\1\176\1\0\31\64\4\0\1\64\1\10\1\110"+ + "\2\0\1\110\1\10\1\0\1\10\1\0\1\10\3\0"+ + "\2\10\4\0\2\10\1\0\1\217\1\0\31\10\1\0"+ + "\1\10\2\0\3\10\1\107\2\0\60\10\1\0\2\113"+ + "\1\0\2\113\1\116\20\113\1\115\37\113\5\0\1\220"+ + "\60\0\3\113\2\0\60\113\14\0\1\117\6\0\1\120"+ + "\3\0\1\221\37\0\2\10\1\222\2\0\60\10\14\0"+ + "\1\123\6\0\1\223\3\0\1\224\41\0\1\225\63\0"+ + "\1\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\11\10\1\226\17\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\13\10\1\20\4\10\1\227\10\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\1\10\1\230\27\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\15\10\1\231\13\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\21\10"+ + "\1\232\7\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\20\10\1\233"+ + "\10\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\23\10\1\234\5\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\13\10\1\235\15\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\15\10\1\236\13\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\11\10\1\237\17\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\11\10\1\240\17\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\20\10\1\241\10\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\16\10"+ + "\1\242\12\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\1\10\1\243"+ + "\27\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\2\10\1\244\26\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\6\10\1\245\22\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\15\10\1\246\13\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\13\10\1\247\15\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\1\10\1\250\27\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\1\10\1\251\27\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\1\10"+ + "\1\252\27\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\23\10\1\253"+ + "\5\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\20\10\1\254\6\10"+ + "\1\255\1\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\20\10\1\256"+ + "\10\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\26\10\1\257\2\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\16\10\1\260\1\261\11\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\4\10\1\262\24\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\20\10\1\263\10\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\20\10\1\264\10\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\4\10\1\265\24\10\1\0\1\10\2\0\1\10"+ + "\1\163\4\0\10\163\2\0\4\163\2\0\3\163\31\0"+ + "\1\163\1\0\1\163\1\0\1\163\1\266\1\164\2\0"+ + "\1\164\1\266\1\0\11\266\1\0\5\266\1\267\32\266"+ + "\1\0\1\266\2\0\1\266\1\52\2\164\1\0\1\164"+ + "\1\52\1\0\11\52\1\0\5\52\1\165\32\52\4\0"+ + "\1\52\2\0\1\53\65\0\1\54\63\0\2\170\1\0"+ + "\1\113\1\170\1\270\1\113\11\170\1\113\5\170\1\271"+ + "\32\170\1\113\1\170\2\113\1\170\1\55\2\170\1\0"+ + "\1\164\1\55\1\113\11\55\1\113\5\55\1\272\32\55"+ + "\4\113\1\52\2\173\1\0\1\15\2\173\1\15\2\173"+ + "\1\270\6\173\1\15\5\173\1\273\32\173\1\15\1\173"+ + "\2\15\1\173\1\56\1\173\1\164\1\15\1\173\1\56"+ + "\1\15\2\56\1\171\6\56\1\15\5\56\1\174\32\56"+ + "\4\15\1\56\1\274\1\175\2\0\1\175\1\274\1\0"+ + "\11\274\1\0\4\274\1\0\1\275\1\0\31\274\1\0"+ + "\1\274\2\0\1\274\1\64\2\175\1\0\1\175\1\64"+ + "\1\0\11\64\1\0\4\64\1\0\1\176\1\0\31\64"+ + "\4\0\1\64\1\177\1\200\1\0\1\113\1\200\1\201"+ + "\1\113\11\177\1\113\4\177\1\113\1\276\1\113\31\177"+ + "\4\113\1\177\2\200\1\0\1\113\1\200\1\277\1\113"+ + "\11\200\1\113\4\200\1\113\1\300\1\113\31\200\1\113"+ + "\1\200\2\113\1\200\2\113\1\0\2\113\1\116\7\113"+ + "\2\301\4\113\1\301\2\113\1\302\2\113\6\301\27\113"+ + "\1\177\1\200\1\303\1\0\1\175\1\177\1\113\11\177"+ + "\1\113\4\177\1\113\1\304\1\113\31\177\4\113\1\64"+ + "\1\204\1\205\1\0\1\15\1\205\1\204\1\15\2\204"+ + "\1\201\6\204\1\15\4\204\1\15\1\207\1\15\31\204"+ + "\4\15\1\204\2\205\1\0\1\15\2\205\1\15\2\205"+ + "\1\277\6\205\1\15\4\205\1\15\1\305\1\15\31\205"+ + "\1\15\1\205\2\15\1\205\2\15\1\0\6\15\1\116"+ + "\3\15\2\306\4\15\1\306\5\15\6\306\27\15\1\204"+ + "\1\205\1\175\1\15\1\205\1\204\1\15\2\204\1\201"+ + "\6\204\1\15\4\204\1\15\1\207\1\15\31\204\4\15"+ + "\1\204\1\64\1\175\2\0\1\175\1\64\1\0\6\64"+ + "\2\307\1\64\1\0\4\64\1\0\1\310\1\0\31\64"+ + "\4\0\2\64\1\175\1\311\1\0\1\175\1\64\1\0"+ + "\11\64\1\0\4\64\1\0\1\176\1\0\31\64\4\0"+ + "\2\64\1\175\1\312\1\0\1\175\1\64\1\0\11\64"+ + "\1\0\4\64\1\0\1\176\1\0\31\64\4\0\2\64"+ + "\1\175\2\0\1\175\1\64\1\0\11\64\1\0\4\64"+ + "\1\0\1\313\1\0\13\64\1\314\15\64\4\0\2\64"+ + "\1\175\1\315\1\0\1\175\1\64\1\0\11\64\1\0"+ + "\4\64\1\0\1\176\1\0\31\64\4\0\2\64\1\175"+ + "\2\0\1\175\1\64\1\0\11\64\1\0\4\64\1\0"+ + "\1\316\1\0\23\64\1\317\5\64\4\0\1\64\2\10"+ + "\1\110\2\0\60\10\1\0\5\220\1\320\60\220\2\0"+ + "\1\321\63\0\1\10\1\222\2\0\1\222\1\10\1\0"+ + "\1\10\1\0\1\10\1\0\1\117\1\0\2\10\3\0"+ + "\1\120\2\10\1\0\1\121\1\0\31\10\1\0\1\10"+ + "\2\0\1\10\2\0\1\322\64\0\1\225\2\0\1\225"+ + "\6\0\1\123\12\0\1\124\37\0\1\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\14\10\1\323"+ + "\14\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\4\10\1\324\24\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\21\10\1\325\7\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\21\10\1\326\7\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\3\10\1\261\25\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\5\10\1\327\23\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\2\10\1\330\26\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\13\10"+ + "\1\331\15\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\22\10\1\332"+ + "\6\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\4\10\1\333\24\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\7\10\1\334\21\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\11\10\1\335\17\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\15\10\1\261\13\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\13\10\1\336\15\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\5\10\1\337\23\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\22\10"+ + "\1\261\6\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\12\10\1\261"+ + "\16\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\22\10\1\340\6\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\20\10\1\261\10\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\3\10\1\341\25\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\4\10\1\342\12\10\1\343\11\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\20\10\1\344\10\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\16\10\1\345\12\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\13\10\1\346\15\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\7\10\1\347\21\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\22\10"+ + "\1\350\6\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\13\10\1\351"+ + "\15\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\5\10\1\352\23\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\21\10\1\353\7\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\22\10\1\354\6\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\22\10\1\355\6\10\1\0\1\10\2\0"+ + "\1\10\1\266\2\164\1\0\1\164\1\266\1\0\11\266"+ + "\1\0\5\266\1\267\32\266\1\0\1\266\2\0\1\266"+ + "\3\170\1\0\1\164\1\170\1\113\11\170\1\113\5\170"+ + "\1\356\32\170\1\113\1\170\2\113\1\266\1\55\1\170"+ + "\1\164\1\113\1\170\1\171\1\113\11\55\1\113\5\55"+ + "\1\172\32\55\4\113\1\55\2\173\1\164\1\15\2\173"+ + "\1\15\2\173\1\270\6\173\1\15\5\173\1\273\32\173"+ + "\1\15\1\173\2\15\1\173\1\274\2\175\1\0\1\175"+ + "\1\274\1\0\11\274\1\0\4\274\1\0\1\275\1\0"+ + "\31\274\1\0\1\274\2\0\1\274\1\177\2\200\1\0"+ + "\1\175\1\177\1\113\11\177\1\113\4\177\1\113\1\304"+ + "\1\113\31\177\4\113\1\64\3\200\1\0\1\175\1\200"+ + "\1\113\11\200\1\113\4\200\1\113\1\357\1\113\31\200"+ + "\1\113\1\200\2\113\1\274\2\113\1\0\2\113\1\116"+ + "\7\113\2\360\4\113\1\360\2\113\1\361\2\113\6\360"+ + "\31\113\1\362\2\0\60\113\1\0\1\200\1\303\1\0"+ + "\1\113\1\303\1\277\1\202\11\200\1\113\4\200\1\113"+ + "\1\363\1\113\31\200\1\113\1\200\2\113\1\200\1\177"+ + "\1\200\1\175\1\113\1\200\1\201\1\113\11\177\1\113"+ + "\4\177\1\113\1\276\1\113\31\177\4\113\1\177\2\205"+ + "\1\175\1\15\2\205\1\15\2\205\1\277\6\205\1\15"+ + "\4\205\1\15\1\305\1\15\31\205\1\15\1\205\2\15"+ + "\1\205\2\15\1\0\6\15\1\116\3\15\2\364\4\15"+ + "\1\364\5\15\6\364\27\15\1\64\1\175\2\0\1\175"+ + "\1\64\1\0\6\64\2\307\1\64\1\0\4\64\1\0"+ + "\1\365\1\0\31\64\4\0\2\64\1\175\1\366\1\0"+ + "\1\175\1\64\1\0\11\64\1\0\4\64\1\0\1\176"+ + "\1\0\31\64\4\0\1\64\1\274\1\311\2\0\1\311"+ + "\1\274\1\0\5\274\1\367\2\370\1\274\1\0\4\274"+ + "\1\0\1\371\1\0\31\274\1\0\1\274\2\0\2\274"+ + "\1\312\2\0\1\312\1\274\1\0\11\274\1\0\4\274"+ + "\1\0\1\372\1\0\1\274\1\373\27\274\1\0\1\274"+ + "\2\0\1\274\1\64\1\175\1\374\1\0\1\175\1\64"+ + "\1\0\11\64\1\0\4\64\1\0\1\176\1\0\31\64"+ + "\4\0\2\64\1\175\2\0\1\175\1\64\1\0\11\64"+ + "\1\0\4\64\1\0\1\375\1\0\21\64\1\376\7\64"+ + "\4\0\1\64\1\274\1\315\2\0\1\315\1\274\1\0"+ + "\11\274\1\0\4\274\1\0\1\377\1\0\20\274\1\u0100"+ + "\10\274\1\0\1\274\2\0\1\274\1\64\1\175\1\u0101"+ + "\1\0\1\175\1\64\1\0\11\64\1\0\4\64\1\0"+ + "\1\176\1\0\31\64\4\0\2\64\1\175\2\0\1\175"+ + "\1\64\1\0\11\64\1\0\4\64\1\0\1\u0102\1\0"+ + "\5\64\1\u0103\23\64\4\0\1\64\5\220\1\u0104\60\220"+ + "\1\0\1\321\2\0\1\321\6\0\1\117\6\0\1\120"+ + "\3\0\1\221\40\0\1\322\2\0\1\322\6\0\1\123"+ + "\6\0\1\223\3\0\1\224\37\0\1\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\1\10\1\u0105"+ + "\27\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\5\10\1\u0106\23\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\21\10\1\u0107\7\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\22\10\1\u0108\6\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\3\10\1\u0109\25\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\13\10\1\u010a\15\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\u010b\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\5\10\1\20\23\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\u010c"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\31\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\u010d\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\31\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\10\10\1\245\20\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\30\10\1\u010e\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\11\10\1\u010f"+ + "\17\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\13\10\1\261\15\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\11\10\1\u0110\17\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\11\10\1\u0111\17\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\16\10\1\u0112\12\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\5\10\1\261\23\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\3\10\1\u0113\25\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\12\10"+ + "\1\u0114\16\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\5\10\1\u0115"+ + "\23\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\5\10\1\u0116\23\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\u0117\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\31\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\22\10\1\u0118\6\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\20\10\1\u0119\10\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\11\10"+ + "\1\u011a\17\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\10\10\1\261"+ + "\20\10\1\0\1\10\2\0\1\10\2\170\1\164\1\113"+ + "\1\170\1\270\1\113\11\170\1\113\5\170\1\271\32\170"+ + "\1\113\1\170\2\113\1\170\2\200\1\175\1\113\1\200"+ + "\1\277\1\113\11\200\1\113\4\200\1\113\1\300\1\113"+ + "\31\200\1\113\1\200\2\113\1\200\2\113\1\0\2\113"+ + "\1\116\7\113\2\u011b\4\113\1\u011b\2\113\1\u011c\2\113"+ + "\6\u011b\31\113\1\u011d\2\0\60\113\1\0\1\113\1\362"+ + "\1\0\1\113\1\362\1\116\7\113\2\301\4\113\1\301"+ + "\2\113\1\302\2\113\6\301\27\113\2\200\1\303\1\0"+ + "\1\175\1\200\1\113\11\200\1\113\4\200\1\113\1\357"+ + "\1\113\31\200\1\113\1\200\2\113\1\274\2\15\1\0"+ + "\6\15\1\116\3\15\2\u011e\4\15\1\u011e\5\15\6\u011e"+ + "\27\15\1\64\1\175\1\u011f\1\0\1\175\1\64\1\0"+ + "\11\64\1\0\4\64\1\0\1\176\1\0\31\64\4\0"+ + "\1\64\1\274\1\366\2\0\1\366\1\274\1\0\6\274"+ + "\2\u0120\1\274\1\0\4\274\1\0\1\u0121\1\0\31\274"+ + "\1\0\1\274\2\0\2\274\1\175\2\0\1\175\1\274"+ + "\1\0\6\274\2\u0120\1\274\1\0\4\274\1\0\1\u0121"+ + "\1\0\31\274\1\0\1\274\2\0\2\274\1\175\2\0"+ + "\1\175\1\274\1\0\5\274\1\367\2\370\1\274\1\0"+ + "\4\274\1\0\1\371\1\0\31\274\1\0\1\274\2\0"+ + "\2\274\1\175\1\311\1\0\1\175\1\274\1\0\11\274"+ + "\1\0\4\274\1\0\1\275\1\0\31\274\1\0\1\274"+ + "\2\0\2\274\1\175\1\312\1\0\1\175\1\274\1\0"+ + "\11\274\1\0\4\274\1\0\1\275\1\0\31\274\1\0"+ + "\1\274\2\0\2\274\1\175\2\0\1\175\1\274\1\0"+ + "\11\274\1\0\4\274\1\0\1\u0122\1\0\13\274\1\u0123"+ + "\15\274\1\0\1\274\2\0\2\274\1\374\2\0\1\374"+ + "\1\274\1\0\11\274\1\0\4\274\1\0\1\u0122\1\0"+ + "\13\274\1\u0123\15\274\1\0\1\274\2\0\1\274\1\64"+ + "\1\175\1\u0124\1\0\1\175\1\64\1\0\11\64\1\0"+ + "\4\64\1\0\1\176\1\0\31\64\4\0\2\64\1\175"+ + "\2\0\1\175\1\64\1\0\11\64\1\0\4\64\1\0"+ + "\1\u0125\1\0\5\64\1\u0126\23\64\4\0\1\64\1\274"+ + "\1\175\1\315\1\0\1\175\1\274\1\0\11\274\1\0"+ + "\4\274\1\0\1\275\1\0\31\274\1\0\1\274\2\0"+ + "\2\274\1\175\2\0\1\175\1\274\1\0\11\274\1\0"+ + "\4\274\1\0\1\u0127\1\0\23\274\1\u0128\5\274\1\0"+ + "\1\274\2\0\2\274\1\u0101\2\0\1\u0101\1\274\1\0"+ + "\11\274\1\0\4\274\1\0\1\u0127\1\0\23\274\1\u0128"+ + "\5\274\1\0\1\274\2\0\1\274\1\64\1\175\1\u0129"+ + "\1\0\1\175\1\64\1\0\11\64\1\0\4\64\1\0"+ + "\1\176\1\0\31\64\4\0\1\64\5\220\1\u012a\60\220"+ + "\1\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\22\10\1\u012b\6\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\20\10\1\u012c\10\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\5\10"+ + "\1\263\23\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\20\10\1\u012d"+ + "\10\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\22\10\1\u012e\6\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\5\10\1\u012f\23\10\1\0"+ + "\1\10\2\0\2\10\1\110\2\0\1\110\1\10\1\0"+ "\1\10\1\0\1\10\3\0\2\10\4\0\2\10\1\0"+ - "\1\175\1\0\17\10\1\352\11\10\1\0\1\10\2\0"+ - "\2\10\1\104\2\0\1\104\1\0\1\10\1\0\1\10"+ - "\1\0\1\10\3\0\2\10\4\0\2\10\1\0\1\175"+ - "\1\0\3\10\1\353\15\10\1\354\7\10\1\0\1\10"+ - "\2\0\2\10\1\104\2\0\1\104\1\0\1\10\1\0"+ + "\1\217\1\0\17\10\1\u0130\11\10\1\0\1\10\2\0"+ + "\2\10\1\110\2\0\1\110\1\10\1\0\1\10\1\0"+ + "\1\10\3\0\2\10\4\0\2\10\1\0\1\217\1\0"+ + "\3\10\1\u0131\15\10\1\u0132\7\10\1\0\1\10\2\0"+ + "\2\10\1\110\2\0\1\110\1\10\1\0\1\10\1\0"+ + "\1\10\3\0\2\10\4\0\2\10\1\0\1\217\1\0"+ + "\3\10\1\u0133\3\10\1\u0134\10\10\1\u0135\10\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\16\10\1\u0136\12\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\3\10\1\122\25\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\17\10\1\u0137\11\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\22\10\1\u0138\6\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\25\10"+ + "\1\122\3\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\5\10\1\u0139"+ + "\23\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\5\10\1\u013a\23\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\22\10\1\u0139\6\10\1\0"+ + "\1\10\2\0\2\10\1\110\2\0\1\110\1\10\1\0"+ "\1\10\1\0\1\10\3\0\2\10\4\0\2\10\1\0"+ - "\1\175\1\0\3\10\1\355\3\10\1\356\10\10\1\357"+ - "\10\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\360"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\3\10\1\120"+ - "\25\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\17\10\1\361"+ - "\11\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\22\10\1\362"+ - "\6\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\25\10\1\120"+ - "\3\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\5\10\1\363"+ - "\23\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\5\10\1\364"+ - "\23\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\22\10\1\363"+ - "\6\10\1\0\1\10\2\0\2\10\1\104\2\0\1\104"+ - "\1\0\1\10\1\0\1\10\1\0\1\10\3\0\2\10"+ - "\4\0\2\10\1\0\1\175\1\0\22\10\1\365\6\10"+ - "\1\0\1\10\2\0\2\10\1\103\2\0\1\103\1\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\104\1\0\2\10"+ - "\4\0\2\10\1\0\1\105\1\0\11\10\1\366\17\10"+ - "\1\0\1\10\2\0\2\10\1\103\2\0\1\103\1\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\104\1\0\2\10"+ - "\4\0\2\10\1\0\1\105\1\0\13\10\1\367\15\10"+ - "\1\0\1\10\2\0\2\10\1\103\2\0\1\103\1\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\104\1\0\2\10"+ - "\4\0\2\10\1\0\1\105\1\0\3\10\1\370\25\10"+ - "\1\0\1\10\2\0\1\10\1\55\1\163\4\107\1\371"+ - "\7\55\2\372\1\55\1\107\2\55\1\372\2\55\1\165"+ - "\2\55\6\372\22\55\4\107\1\55\6\0\1\373\60\0"+ - "\1\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\104\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\5\10\1\20\23\10\1\0\1\10\2\0"+ - "\2\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\374\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\31\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\1\10\1\375\27\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\11\10\1\376\17\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\377\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\31\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\1\10\1\u0100"+ - "\27\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\u0101"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\11\10\1\u0102"+ - "\17\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\u0103"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\1\10\1\366"+ - "\27\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\u0104"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\15\10\1\u0105"+ - "\13\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\13\10\1\u0106"+ - "\15\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\27\10\1\120"+ - "\1\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\u0107\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\31\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\u0108\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\31\10\1\0\1\10\2\0"+ - "\2\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\104\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\20\10\1\u0109\10\10\1\0\1\10\2\0"+ - "\2\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\104\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\17\10\1\240\11\10\1\0\1\10\2\0"+ - "\2\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\104\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\11\10\1\u010a\17\10\1\0\1\10\2\0"+ - "\2\10\1\103\2\0\1\103\1\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\104\1\0\2\10\4\0\2\10\1\0"+ - "\1\105\1\0\1\10\1\u010b\27\10\1\0\1\10\2\0"+ - "\1\10\1\55\1\163\4\107\1\164\7\55\2\u010c\1\55"+ - "\1\107\2\55\1\u010c\2\55\1\165\2\55\6\u010c\22\55"+ - "\4\107\1\55\6\0\1\u010d\60\0\1\10\1\104\2\0"+ - "\1\104\1\0\1\10\1\0\1\10\1\0\1\10\3\0"+ - "\2\10\4\0\2\10\1\0\1\175\1\0\20\10\1\u010e"+ - "\10\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\11\10\1\u010f"+ - "\17\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\u0110"+ - "\12\10\1\0\1\10\2\0\2\10\1\104\2\0\1\104"+ - "\1\0\1\10\1\0\1\10\1\0\1\10\3\0\2\10"+ - "\4\0\2\10\1\0\1\175\1\0\2\10\1\u0111\26\10"+ - "\1\0\1\10\2\0\2\10\1\103\2\0\1\103\1\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\104\1\0\2\10"+ - "\4\0\2\10\1\0\1\105\1\0\22\10\1\u0112\6\10"+ - "\1\0\1\10\2\0\2\10\1\103\2\0\1\103\1\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\104\1\0\2\10"+ - "\4\0\2\10\1\0\1\105\1\0\13\10\1\u0113\15\10"+ - "\1\0\1\10\2\0\2\10\1\103\2\0\1\103\1\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\104\1\0\2\10"+ - "\4\0\2\10\1\0\1\105\1\0\30\10\1\u0106\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\13\10\1\u0114\15\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\25\10\1\u0115\3\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\22\10\1\370\6\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\5\10\1\120\23\10\1\0"+ - "\1\10\2\0\2\10\1\104\2\0\1\104\1\0\1\10"+ - "\1\0\1\10\1\0\1\10\3\0\2\10\4\0\2\10"+ - "\1\0\1\175\1\0\1\10\1\u0116\27\10\1\0\1\10"+ - "\2\0\2\10\1\104\2\0\1\104\1\0\1\10\1\0"+ + "\1\217\1\0\22\10\1\u013b\6\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\11\10\1\u013c\17\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\13\10\1\u013d\15\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\3\10"+ + "\1\u013e\25\10\1\0\1\10\2\0\1\10\2\113\1\0"+ + "\2\113\1\u013f\7\113\2\u0140\4\113\1\u0140\2\113\1\u0141"+ + "\2\113\6\u0140\31\113\1\u0142\2\0\60\113\1\0\1\113"+ + "\1\u011d\1\0\1\113\1\u011d\1\116\7\113\2\360\4\113"+ + "\1\360\2\113\1\361\2\113\6\360\27\113\2\15\1\0"+ + "\6\15\1\u013f\3\15\2\u0143\4\15\1\u0143\5\15\6\u0143"+ + "\27\15\1\274\1\u011f\2\0\1\u011f\1\274\1\0\6\274"+ + "\2\u0120\1\274\1\0\4\274\1\0\1\u0144\1\0\31\274"+ + "\1\0\1\274\2\0\2\274\1\175\2\0\1\175\1\274"+ + "\1\0\6\274\2\u0120\1\274\1\0\4\274\1\0\1\u0144"+ + "\1\0\31\274\1\0\1\274\2\0\2\274\1\175\1\366"+ + "\1\0\1\175\1\274\1\0\11\274\1\0\4\274\1\0"+ + "\1\275\1\0\31\274\1\0\1\274\2\0\2\274\1\175"+ + "\1\374\1\0\1\175\1\274\1\0\11\274\1\0\4\274"+ + "\1\0\1\275\1\0\31\274\1\0\1\274\2\0\2\274"+ + "\1\175\2\0\1\175\1\274\1\0\11\274\1\0\4\274"+ + "\1\0\1\u0145\1\0\21\274\1\u0146\7\274\1\0\1\274"+ + "\2\0\2\274\1\u0124\2\0\1\u0124\1\274\1\0\11\274"+ + "\1\0\4\274\1\0\1\u0145\1\0\21\274\1\u0146\7\274"+ + "\1\0\1\274\2\0\1\274\1\64\1\175\1\u0147\1\0"+ + "\1\175\1\64\1\0\11\64\1\0\4\64\1\0\1\176"+ + "\1\0\31\64\4\0\1\64\1\274\1\175\1\u0101\1\0"+ + "\1\175\1\274\1\0\11\274\1\0\4\274\1\0\1\275"+ + "\1\0\31\274\1\0\1\274\2\0\2\274\1\175\2\0"+ + "\1\175\1\274\1\0\11\274\1\0\4\274\1\0\1\u0148"+ + "\1\0\5\274\1\u0149\23\274\1\0\1\274\2\0\2\274"+ + "\1\u0129\2\0\1\u0129\1\274\1\0\11\274\1\0\4\274"+ + "\1\0\1\u0148\1\0\5\274\1\u0149\23\274\1\0\1\274"+ + "\2\0\1\274\5\0\1\u014a\60\0\1\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\5\10\1\20"+ + "\23\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\u014b\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\31\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\1\10\1\u014c\27\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\11\10\1\u014d\17\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\u014e\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\31\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\1\10\1\u014f\27\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\16\10\1\u0150\12\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\11\10\1\u0151\17\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\16\10\1\u0152\12\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\1\10\1\u013c\27\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\16\10\1\u0153\12\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\15\10"+ + "\1\u0154\13\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\13\10\1\u0155"+ + "\15\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\27\10\1\122\1\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\u0156\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\31\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\u0157\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\31\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\20\10\1\u0158"+ + "\10\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\17\10\1\261\11\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\11\10\1\u0159\17\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\1\10\1\u015a\27\10\1\0\1\10"+ + "\2\0\1\10\2\113\1\0\2\113\1\116\7\113\2\u015b"+ + "\4\113\1\u015b\2\113\1\u015c\2\113\6\u015b\31\113\1\u015d"+ + "\2\0\60\113\1\0\1\113\1\u0142\1\0\1\113\1\u0142"+ + "\1\116\7\113\2\u011b\4\113\1\u011b\2\113\1\u011c\2\113"+ + "\6\u011b\27\113\2\15\1\0\6\15\1\116\3\15\2\u015e"+ + "\4\15\1\u015e\5\15\6\u015e\27\15\1\274\1\175\1\u011f"+ + "\1\0\1\175\1\274\1\0\11\274\1\0\4\274\1\0"+ + "\1\275\1\0\31\274\1\0\1\274\2\0\2\274\1\175"+ + "\1\u0124\1\0\1\175\1\274\1\0\11\274\1\0\4\274"+ + "\1\0\1\275\1\0\31\274\1\0\1\274\2\0\2\274"+ + "\1\175\2\0\1\175\1\274\1\0\11\274\1\0\4\274"+ + "\1\0\1\u015f\1\0\5\274\1\u0160\23\274\1\0\1\274"+ + "\2\0\2\274\1\u0147\2\0\1\u0147\1\274\1\0\11\274"+ + "\1\0\4\274\1\0\1\u015f\1\0\5\274\1\u0160\23\274"+ + "\1\0\1\274\2\0\2\274\1\175\1\u0129\1\0\1\175"+ + "\1\274\1\0\11\274\1\0\4\274\1\0\1\275\1\0"+ + "\31\274\1\0\1\274\2\0\1\274\5\0\1\u0161\60\0"+ + "\1\10\1\110\2\0\1\110\1\10\1\0\1\10\1\0"+ + "\1\10\3\0\2\10\4\0\2\10\1\0\1\217\1\0"+ + "\20\10\1\u0162\10\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\11\10"+ + "\1\u0163\17\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\16\10\1\u0164"+ + "\12\10\1\0\1\10\2\0\2\10\1\110\2\0\1\110"+ + "\1\10\1\0\1\10\1\0\1\10\3\0\2\10\4\0"+ + "\2\10\1\0\1\217\1\0\2\10\1\u0165\26\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\22\10\1\u0166\6\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\13\10\1\u0167\15\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\30\10\1\u0155\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\13\10"+ + "\1\u0168\15\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\25\10\1\u0169"+ + "\3\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\22\10\1\u013e\6\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\5\10\1\122\23\10\1\0"+ + "\1\10\2\0\2\10\1\110\2\0\1\110\1\10\1\0"+ "\1\10\1\0\1\10\3\0\2\10\4\0\2\10\1\0"+ - "\1\175\1\0\4\10\1\u0117\20\10\1\u0118\3\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\1\10\1\u0119\27\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\15\10\1\u0106\13\10\1\0"+ - "\1\10\2\0\2\10\1\103\2\0\1\103\1\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\104\1\0\2\10\4\0"+ - "\2\10\1\0\1\105\1\0\13\10\1\u011a\15\10\1\0"+ - "\1\10\2\0\1\10\1\55\1\163\4\107\1\164\7\55"+ - "\2\u011b\1\55\1\107\2\55\1\u011b\2\55\1\165\2\55"+ - "\6\u011b\22\55\4\107\1\55\1\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\1\10\1\u011c"+ - "\27\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\15\10\1\224"+ - "\13\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\15\10\1\u011d"+ - "\13\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\u011e"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\22\10\1\u011f"+ - "\6\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\16\10\1\u0120"+ - "\12\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\23\10\1\u0121"+ - "\5\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\21\10\1\240"+ - "\7\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\20\10\1\u0122"+ - "\10\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\1\10\1\u0123"+ - "\27\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\11\10\1\u0124"+ - "\17\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\104\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\15\10\1\u0125"+ - "\13\10\1\0\1\10\2\0\2\10\1\103\2\0\1\103"+ - "\1\0\1\10\1\0\1\10\1\0\2\10\1\u0126\1\0"+ - "\2\10\4\0\2\10\1\0\1\105\1\0\31\10\1\0"+ - "\1\10\2\0\1\10\1\55\1\163\4\107\1\371\12\55"+ - "\1\107\5\55\1\165\32\55\4\107\1\55\1\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\4\10\1\u0127\24\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\20\10\1\u0128\10\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\5\10\1\u0129\23\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\20\10\1\120\10\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\14\10\1\u012a\14\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\20\10\1\u012b\10\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\21\10\1\u012c\7\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\4\10\1\u012d\24\10\1\0\1\10\2\0\2\10\1\103"+ - "\2\0\1\103\1\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\104\1\0\2\10\4\0\2\10\1\0\1\105\1\0"+ - "\21\10\1\u012e\7\10\1\0\1\10\2\0\2\10\1\104"+ - "\2\0\1\104\1\0\1\10\1\0\1\10\1\0\1\10"+ - "\3\0\2\10\4\0\2\10\1\0\1\175\1\0\7\10"+ - "\1\356\21\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\11\10"+ - "\1\u012f\17\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\4\10"+ - "\1\u0130\24\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\20\10"+ - "\1\u0131\10\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\15\10"+ - "\1\u0115\13\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\16\10"+ - "\1\u0132\12\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\10\10"+ - "\1\120\20\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\22\10"+ - "\1\u012c\6\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\6\10"+ - "\1\u0133\22\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\23\10"+ - "\1\u0134\5\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\5\10"+ - "\1\u0120\23\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\15\10"+ - "\1\120\13\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\25\10"+ - "\1\u0135\3\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\16\10"+ - "\1\u0136\12\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\21\10"+ - "\1\120\7\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\10\10"+ - "\1\u0137\20\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\20\10"+ - "\1\u0138\10\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\5\10"+ - "\1\u0139\23\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\14\10"+ - "\1\120\14\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\1\10"+ - "\1\u013a\27\10\1\0\1\10\2\0\2\10\1\103\2\0"+ - "\1\103\1\0\1\10\1\0\1\10\1\0\2\10\1\104"+ - "\1\0\2\10\4\0\2\10\1\0\1\105\1\0\4\10"+ - "\1\u013b\24\10\1\0\1\10\2\0\1\10"; + "\1\217\1\0\1\10\1\u016a\27\10\1\0\1\10\2\0"+ + "\2\10\1\110\2\0\1\110\1\10\1\0\1\10\1\0"+ + "\1\10\3\0\2\10\4\0\2\10\1\0\1\217\1\0"+ + "\4\10\1\u016b\20\10\1\u016c\3\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\1\10\1\u016d\27\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\15\10\1\u0155\13\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\13\10"+ + "\1\u016e\15\10\1\0\1\10\2\0\1\10\2\113\1\0"+ + "\2\113\1\116\7\113\2\u016f\4\113\1\u016f\2\113\1\u0170"+ + "\2\113\6\u016f\31\113\1\u0171\2\0\60\113\1\0\1\113"+ + "\1\u015d\1\0\1\113\1\u015d\1\u013f\7\113\2\u0140\4\113"+ + "\1\u0140\2\113\1\u0141\2\113\6\u0140\27\113\2\15\1\0"+ + "\6\15\1\116\3\15\2\u0172\4\15\1\u0172\5\15\6\u0172"+ + "\27\15\1\274\1\175\1\u0147\1\0\1\175\1\274\1\0"+ + "\11\274\1\0\4\274\1\0\1\275\1\0\31\274\1\0"+ + "\1\274\2\0\1\274\1\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\1\10\1\u0173\27\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\15\10\1\245\13\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\15\10\1\u0174\13\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\16\10\1\u0175\12\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\22\10\1\u0176\6\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\16\10"+ + "\1\u0177\12\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\23\10\1\u0178"+ + "\5\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\21\10\1\261\7\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\20\10\1\u0179\10\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\1\10\1\u017a\27\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\11\10\1\u017b\17\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\15\10\1\u017c\13\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\u017d\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\31\10\1\0\1\10\2\0\1\10\2\113\1\0\2\113"+ + "\1\u013f\20\113\1\u017e\41\113\1\u017f\2\0\60\113\1\0"+ + "\1\113\1\u0171\1\0\1\113\1\u0171\1\116\7\113\2\u015b"+ + "\4\113\1\u015b\2\113\1\u015c\2\113\6\u015b\27\113\2\15"+ + "\1\0\6\15\1\u013f\54\15\1\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\4\10\1\u0180\24\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\20\10\1\u0181\10\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\5\10\1\u0182\23\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\20\10\1\122\10\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\14\10\1\u0183\14\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\20\10\1\u0184\10\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\21\10"+ + "\1\u0185\7\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\4\10\1\u0186"+ + "\24\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\21\10\1\u0187\7\10"+ + "\1\0\1\10\2\0\2\10\1\110\2\0\1\110\1\10"+ + "\1\0\1\10\1\0\1\10\3\0\2\10\4\0\2\10"+ + "\1\0\1\217\1\0\7\10\1\u0134\21\10\1\0\1\10"+ + "\2\0\1\10\2\113\1\u0188\2\0\60\113\1\0\1\113"+ + "\1\u017f\1\0\1\113\1\u017f\1\116\7\113\2\u016f\4\113"+ + "\1\u016f\2\113\1\u0170\2\113\6\u016f\27\113\1\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\11\10"+ + "\1\u0189\17\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\4\10\1\u018a"+ + "\24\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\20\10\1\u018b\10\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\15\10\1\u0169\13\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\16\10\1\u018c\12\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\10\10\1\122\20\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\22\10\1\u0185\6\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\6\10\1\u018d\22\10\1\0\1\10\2\0\1\10\1\113"+ + "\1\u0188\1\0\1\113\1\u0188\1\u013f\20\113\1\u017e\37\113"+ + "\1\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\23\10\1\u018e\5\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\5\10\1\u0177\23\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\15\10"+ + "\1\122\13\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\25\10\1\u018f"+ + "\3\10\1\0\1\10\2\0\2\10\1\107\2\0\1\107"+ + "\1\10\1\0\1\10\1\0\2\10\1\110\1\0\2\10"+ + "\4\0\2\10\1\0\1\111\1\0\16\10\1\u0190\12\10"+ + "\1\0\1\10\2\0\2\10\1\107\2\0\1\107\1\10"+ + "\1\0\1\10\1\0\2\10\1\110\1\0\2\10\4\0"+ + "\2\10\1\0\1\111\1\0\21\10\1\122\7\10\1\0"+ + "\1\10\2\0\2\10\1\107\2\0\1\107\1\10\1\0"+ + "\1\10\1\0\2\10\1\110\1\0\2\10\4\0\2\10"+ + "\1\0\1\111\1\0\10\10\1\u0191\20\10\1\0\1\10"+ + "\2\0\2\10\1\107\2\0\1\107\1\10\1\0\1\10"+ + "\1\0\2\10\1\110\1\0\2\10\4\0\2\10\1\0"+ + "\1\111\1\0\20\10\1\u0192\10\10\1\0\1\10\2\0"+ + "\2\10\1\107\2\0\1\107\1\10\1\0\1\10\1\0"+ + "\2\10\1\110\1\0\2\10\4\0\2\10\1\0\1\111"+ + "\1\0\5\10\1\u0193\23\10\1\0\1\10\2\0\2\10"+ + "\1\107\2\0\1\107\1\10\1\0\1\10\1\0\2\10"+ + "\1\110\1\0\2\10\4\0\2\10\1\0\1\111\1\0"+ + "\14\10\1\122\14\10\1\0\1\10\2\0\2\10\1\107"+ + "\2\0\1\107\1\10\1\0\1\10\1\0\2\10\1\110"+ + "\1\0\2\10\4\0\2\10\1\0\1\111\1\0\1\10"+ + "\1\u0194\27\10\1\0\1\10\2\0\2\10\1\107\2\0"+ + "\1\107\1\10\1\0\1\10\1\0\2\10\1\110\1\0"+ + "\2\10\4\0\2\10\1\0\1\111\1\0\4\10\1\u0195"+ + "\24\10\1\0\1\10\2\0\1\10"; private static int [] zzUnpacktrans() { - int [] result = new int[15125]; + int [] result = new int[19710]; int offset = 0; offset = zzUnpacktrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -959,16 +1130,20 @@ private static int zzUnpacktrans(String packed, int offset, int [] result) { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\7\0\4\1\1\11\2\1\1\11\1\1\2\11\24\1"+ - "\1\11\1\1\1\11\5\1\3\11\4\1\1\11\6\1"+ - "\1\11\5\1\5\0\1\1\2\0\1\11\1\0\1\1"+ - "\1\11\1\0\2\1\1\0\37\1\2\0\2\1\1\0"+ - "\5\1\3\0\1\1\2\0\1\11\2\0\45\1\3\0"+ - "\36\1\1\0\6\1\3\0\11\1\1\0\35\1\1\0"+ - "\2\1\1\0\7\1\2\0\4\1\1\11\30\1\1\0"+ - "\25\1"; + "\1\11\1\1\1\11\6\1\3\11\6\1\2\11\1\1"+ + "\1\11\4\1\1\11\2\1\1\11\1\1\1\11\4\0"+ + "\2\1\1\0\1\11\1\1\1\11\1\0\2\1\1\0"+ + "\37\1\1\0\1\1\2\0\5\1\1\0\20\1\5\0"+ + "\1\11\2\0\54\1\1\0\7\1\1\0\2\1\1\0"+ + "\2\1\3\0\36\1\1\0\4\1\1\0\5\1\1\0"+ + "\4\1\1\0\2\1\1\0\6\1\3\0\11\1\1\0"+ + "\4\1\1\0\7\1\1\0\4\1\1\0\25\1\1\11"+ + "\1\1\1\0\5\1\1\0\3\1\1\0\2\1\1\0"+ + "\7\1\2\0\4\1\1\0\4\1\1\11\16\1\1\0"+ + "\14\1\2\0\27\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[315]; + int [] result = new int[405]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -1290,11 +1465,11 @@ else if (zzAtEOF) { case BLOCK_STRING_LANG_STATE: { yybegin(YYINITIAL); return BAD_CHARACTER; } // fall though - case 316: break; + case 406: break; case BLOCK_STRING_BODY_STATE: { yybegin(YYINITIAL); return BAD_CHARACTER; } // fall though - case 317: break; + case 407: break; default: return null; } @@ -1312,7 +1487,7 @@ else if (zzAtEOF) { // fall through case 43: break; case 3: - { return BAD_CHARACTER; + { return STRING; } // fall through case 44: break; @@ -1322,102 +1497,107 @@ else if (zzAtEOF) { // fall through case 45: break; case 5: - { return DOT; + { return BAD_CHARACTER; } // fall through case 46: break; case 6: - { yybegin(LABEL_STATE); return COLON; + { return DOT; } // fall through case 47: break; case 7: - { return SEMICOLON; + { yybegin(LABEL_STATE); return COLON; } // fall through case 48: break; case 8: - { return PARENT_SHAPE_REF; + { return SEMICOLON; } // fall through case 49: break; case 9: - { return LBRACE; + { return PARENT_SHAPE_REF; } // fall through case 50: break; case 10: - { return startBlockString(); + { return LBRACE; } // fall through case 51: break; case 11: - { return RBRACE; + { return startBlockString(); } // fall through case 52: break; case 12: - { return UNQUOTED_STRING; + { return RBRACE; } // fall through case 53: break; case 13: - { yybegin(YYINITIAL); return WHITE_SPACE; + { return UNQUOTED_STRING; } // fall through case 54: break; case 14: - { yybegin(YYINITIAL); return LBRACE; + { yybegin(YYINITIAL); return WHITE_SPACE; } // fall through case 55: break; case 15: - { yybegin(YYINITIAL); return RBRACE; + { yybegin(YYINITIAL); return LBRACE; } // fall through case 56: break; case 16: - { yybegin(PROPERTY_VALUE_STATE); return COLON; + { yybegin(YYINITIAL); return RBRACE; } // fall through case 57: break; case 17: - { return INT; + { yybegin(PROPERTY_VALUE_STATE); return COLON; } // fall through case 58: break; case 18: - { return COLON; + { return INT; } // fall through case 59: break; case 19: - { yybegin(YYINITIAL); return SEMICOLON; + { return COLON; } // fall through case 60: break; case 20: - { yybegin(ARRAY_STATE); return LBRACKET; + { yybegin(YYINITIAL); return SEMICOLON; } // fall through case 61: break; case 21: - { return RBRACKET; + { yybegin(ARRAY_STATE); return LBRACKET; } // fall through case 62: break; case 22: - { yybegin(BLOCK_STRING_BODY_STATE); return BLOCK_STRING_LANG; + { return RBRACKET; } // fall through case 63: break; case 23: - { yypushback(yylength()); - yybegin(BLOCK_STRING_BODY_STATE); + { yybegin(BLOCK_STRING_BODY_STATE); return BLOCK_STRING_LANG; } // fall through case 64: break; case 24: + { yypushback(yylength()); + yybegin(BLOCK_STRING_BODY_STATE); + } + // fall through + case 65: break; + case 25: { if (blockStringToken == null) { yybegin(YYINITIAL); blockStringToken = null; @@ -1432,19 +1612,14 @@ else if (StringUtilRt.endsWith(yytext(), blockStringToken)) { } } // fall through - case 65: break; - case 25: - { return LBRACKET; - } - // fall through case 66: break; case 26: - { yybegin(YYINITIAL); return RBRACKET; + { return LBRACKET; } // fall through case 67: break; case 27: - { return STRING; + { yybegin(YYINITIAL); return RBRACKET; } // fall through case 68: break; @@ -1499,12 +1674,12 @@ else if (StringUtilRt.endsWith(yytext(), blockStringToken)) { // fall through case 78: break; case 38: - { return FALSE; + { return COLOR; } // fall through case 79: break; case 39: - { return COLOR; + { return FALSE; } // fall through case 80: break; diff --git a/src/src/lang/D2Lexer.flex b/src/src/lang/D2Lexer.flex index a38bfaa..aba4d4b 100644 --- a/src/src/lang/D2Lexer.flex +++ b/src/src/lang/D2Lexer.flex @@ -63,17 +63,30 @@ DOUBLE_ARROW=<{ContinuationClosure}*-(-|{ContinuationClosure})*> Comment=#.* BlockComment = "\"\"\""~"\"\"\"" -Int=[0-9]+ -Float=[0-9]+\.[0-9]+ +Int=[0-9]([0-9]|{ContinuationClosure})* +Float=[0-9]([0-9]|{ContinuationClosure})*\.{ContinuationClosure}?[0-9]([0-9]|{ContinuationClosure})* Semicolon=";" // docs: D2 actually allows you to use any special symbols (not alphanumeric, space, or _) after the first pipe BlockStringStart=\|+[^a-zA-Z0-9\s_|]* -String='([^'\\]|\\.)*'|\"([^\"\\]|\\\"|\'|\\)*\" -Color=\"#(([a-fA-F0-9]{2}){3}|([a-fA-F0-9]){3})\" + +SingleQuotedString = '[^'\n]*'? +DoubleQuotedString = \"([^\"\n\\]|{Continuation}|{EscapeSequence})*\"? +String={SingleQuotedString}|{DoubleQuotedString} + +SingleQuotedColor='#(([a-fA-F0-9]{2}){3}|([a-fA-F0-9]){3})'? +DoubleQuotedColor=\"{ContinuationClosure}?#{ContinuationClosure}?(([a-fA-F0-9]{ContinuationClosure}?[a-fA-F0-9]{ContinuationClosure}?){3}|([a-fA-F0-9]{ContinuationClosure}?){3}){ContinuationClosure}?\"? +Color={SingleQuotedColor}|{DoubleQuotedColor} + +True=t{ContinuationClosure}?r{ContinuationClosure}?u{ContinuationClosure}?e +False=f{ContinuationClosure}?a{ContinuationClosure}?l{ContinuationClosure}?s{ContinuationClosure}?e EscapeSequence=\\. -ValueSymbol=[^\s;{}\[\]#] +LabelSymbol=[^\s;{}#] +UnquotedLabelString = [{LabelSymbol}&&[^|]]+({SpaceContinuation}+{LabelSymbol}+)* +// [] is not supported - it is array +ValueSymbol=[{LabelSymbol}&&[^\[\]]] +UnquotedString = [{ValueSymbol}&&[^|]]+({SpaceContinuation}+{ValueSymbol}+)* IdSymbol=[[^:.<>&\\-]&&{ValueSymbol}] IdDashSubstring=-{SpaceContinuation}*([{IdSymbol}&&[^->*]]|{EscapeSequence}) @@ -83,6 +96,7 @@ ExclamationId=(\!({SpaceContinuation}*([[^&]&&{IdSymbol}]|{EscapeSequence}|{IdDa AllowedFirstInId=([{IdSymbol}&&[^|!('\"$@]]|{EscapeSequence}|{IdDashSubstring}) RegularId={AllowedFirstInId}{IdBody} Id=({RegularId}|{ExclamationId}) +WhiteSpaceWithoutNewLines={SpaceContinuation}+ WhiteSpace={SpaceContinuationNewLine}+ LBrace="{" @@ -91,13 +105,6 @@ RBrace="}" LBracket="[" RBracket="]" -UnquotedLabelStringFragment=[^\s{}|;]+ -UnquotedLabelString={UnquotedLabelStringFragment}([ \t]+{UnquotedLabelStringFragment})* - -// [] is not supported - it is array -UnquotedStringFragment=[^\s{}[]|;]+ -UnquotedString={UnquotedStringFragment}([ \t]+{UnquotedStringFragment})* - %states LABEL_STATE PROPERTY_VALUE_BEGIN_STATE PROPERTY_VALUE_STATE BLOCK_STRING_LANG_STATE BLOCK_STRING_BODY_STATE ARRAY_STATE %% @@ -143,16 +150,16 @@ UnquotedString={UnquotedStringFragment}([ \t]+{UnquotedStringFragment})* {Int} { return INT; } {Float} { return FLOAT; } - "true" { return TRUE; } - "false" { return FALSE; } + {True} { return TRUE; } + {False} { return FALSE; } {Color} { return COLOR; } {String} { return STRING; } {LBracket} { yybegin(ARRAY_STATE); return LBRACKET; } {RBracket} { return RBRACKET; } {UnquotedString} { return UNQUOTED_STRING; } - [ \t]+ { return WHITE_SPACE; } - [\r\n]+ { yybegin(YYINITIAL); return WHITE_SPACE; } + {WhiteSpaceWithoutNewLines} { return WHITE_SPACE; } + {WhiteSpace} { yybegin(YYINITIAL); return WHITE_SPACE; } {Semicolon} { yybegin(YYINITIAL); return SEMICOLON; } // inline shape definition: {shape: person} @@ -174,8 +181,8 @@ UnquotedString={UnquotedStringFragment}([ \t]+{UnquotedStringFragment})* {String} { return STRING; } {UnquotedLabelString} { return UNQUOTED_STRING; } - [ \t]+ { return WHITE_SPACE; } - [\r\n]+ { yybegin(YYINITIAL); return WHITE_SPACE; } + {WhiteSpaceWithoutNewLines} { return WHITE_SPACE; } + {WhiteSpace} { yybegin(YYINITIAL); return WHITE_SPACE; } {LBrace} { yybegin(YYINITIAL); return LBRACE; } // inline shape definition: {shape: person} {RBrace} { yybegin(YYINITIAL); return RBRACE; } diff --git a/src/src/lang/psi/ShapeProperty.kt b/src/src/lang/psi/ShapeProperty.kt index 50476c8..6a82b94 100644 --- a/src/src/lang/psi/ShapeProperty.kt +++ b/src/src/lang/psi/ShapeProperty.kt @@ -21,22 +21,34 @@ sealed interface PropertyValue : PsiElement class OtherValue(node: ASTNode) : AstWrapperPsiElement(node), PropertyValue class StringValue(node: ASTNode) : AstWrapperPsiElement(node), PropertyValue, ColorValueProvider { - override fun getColor(): Color? = NAMED_COLORS.get(text.removeSurrounding("\"")) + override fun getColor(): Color? { + val unquotedText = when { + text.startsWith('"') -> text.removeSurrounding("\"") + else -> text.removeSurrounding("'") + } + return NAMED_COLORS.get(unquotedText.removeLineContinuations()) + } } class UnquotedStringValue(node: ASTNode) : AstWrapperPsiElement(node), PropertyValue, ColorValueProvider { - override fun getColor(): Color? = NAMED_COLORS.get(text) + override fun getColor(): Color? = NAMED_COLORS.get(text.removeLineContinuations()) } class ColorValue(node: ASTNode) : AstWrapperPsiElement(node), PropertyValue, ColorValueProvider { - override fun getColor(): Color? = ColorHexUtil.fromHexOrNull(text.removeSurrounding("\"")) + override fun getColor(): Color? = ColorHexUtil.fromHexOrNull(text.removeSurrounding("\"").removeLineContinuations()) } // toString doesn't print node element type sealed class AstWrapperPsiElement(private val node: ASTNode) : ASTDelegatePsiElement() { - override fun getParent(): PsiElement? = SharedImplUtil.getParent(node) + override fun getParent(): PsiElement? = SharedImplUtil.getParent(node) - override fun getNode(): ASTNode = node + override fun getNode(): ASTNode = node - override fun toString(): String = javaClass.simpleName + override fun toString(): String = javaClass.simpleName +} + +val CONTINUATION: Regex = Regex("\\\\\\n[ \\t\\f]*") + +fun String.removeLineContinuations(): String { + return replace(CONTINUATION, ""); } \ No newline at end of file diff --git a/src/testResources/psi/classes and array.txt b/src/testResources/psi/classes and array.txt index 1b305c1..e37328f 100644 --- a/src/testResources/psi/classes and array.txt +++ b/src/testResources/psi/classes and array.txt @@ -12,8 +12,7 @@ D2 File PsiWhiteSpace(' ') StringValue PsiElement(STRING)('"qweqwr"') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') ASTWrapperPsiElement(SUB_ID_PROPERTY_MAP) ASTWrapperPsiElement(ID_PROPERTY_KEY) PsiElement(STRING)('"324:"') @@ -28,8 +27,7 @@ D2 File PsiWhiteSpace(' ') StringValue PsiElement(STRING)('""') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') ASTWrapperPsiElement(ID_PROPERTY) ASTWrapperPsiElement(ID_PROPERTY_KEY) PsiElement(SIMPLE_RESERVED_KEYWORDS)('icon') @@ -37,8 +35,7 @@ D2 File PsiWhiteSpace(' ') UnquotedStringValue PsiElement(UNQUOTED_STRING)('https://play.d2lang.com/assets/icons/d2-logo.svg') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n ') ASTWrapperPsiElement(SUB_ID_PROPERTY_MAP) @@ -55,8 +52,7 @@ D2 File PsiWhiteSpace(' ') UnquotedStringValue PsiElement(UNQUOTED_STRING)('circle') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') ASTWrapperPsiElement(ID_PROPERTY) ASTWrapperPsiElement(ID_PROPERTY_KEY) PsiElement(STYLE_KEYWORD)('style') @@ -66,8 +62,7 @@ D2 File PsiWhiteSpace(' ') OtherValue PsiElement(INT)('0') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n') PsiElement(RBRACE)('}') diff --git a/src/testResources/psi/parsing.txt b/src/testResources/psi/parsing.txt index af2b39f..301a050 100644 --- a/src/testResources/psi/parsing.txt +++ b/src/testResources/psi/parsing.txt @@ -18,8 +18,7 @@ D2 File PsiWhiteSpace(' ') UnquotedStringValue PsiElement(UNQUOTED_STRING)('page') - PsiWhiteSpace('\n\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n\n ') PsiComment(COMMENT)('# still boolean or int literals is properly highlighted') PsiWhiteSpace('\n ') ShapeProperty @@ -119,8 +118,7 @@ D2 File PsiWhiteSpace(' ') UnquotedStringValue PsiElement(UNQUOTED_STRING)('stored_data') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') ShapeProperty ShapePropertyKey PsiElement(STYLE_KEYWORD)('style') @@ -130,8 +128,7 @@ D2 File PsiWhiteSpace(' ') OtherValue PsiElement(TRUE)('true') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n\n ') ShapeConnection @@ -202,8 +199,7 @@ D2 File PsiWhiteSpace(' ') UnquotedStringValue PsiElement(UNQUOTED_STRING)('cylinder') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') ShapeProperty ShapePropertyKey PsiElement(STYLE_KEYWORD)('style') @@ -213,8 +209,7 @@ D2 File PsiWhiteSpace(' ') OtherValue PsiElement(TRUE)('true') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') diff --git a/src/testResources/psi/style object.txt b/src/testResources/psi/style object.txt index 0d2489d..15fefb3 100644 --- a/src/testResources/psi/style object.txt +++ b/src/testResources/psi/style object.txt @@ -28,8 +28,7 @@ D2 File PsiWhiteSpace(' ') OtherValue PsiElement(INT)('10') - PsiWhiteSpace('\n') - PsiWhiteSpace(' ') + PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n') PsiElement(RBRACE)('}') diff --git a/src/testResources/psi/values and labels.d2 b/src/testResources/psi/values and labels.d2 new file mode 100644 index 0000000..5a21b68 --- /dev/null +++ b/src/testResources/psi/values and labels.d2 @@ -0,0 +1,60 @@ +legalString: ab +legalString: a\ +b + +legalString: 1 +legalString: 1.1 + +legalString: '#111111' +legalString: "#111111" +legalString: "#111\ +111" + +legalString: '' +legalString: '\' +legalString: '\\' +legalString: '\n' +legalString: "" +legalString: "\\" +legalString: "'" +legalString: "\"" +legalString: "\n" + +logs.style.stroke: "#694024" +logs.style.stroke: '#694024' +logs.style.stroke: "#694\ +024" + +logs.style.multiple: false +logs.style.multiple: f\ +alse +logs.style.multiple: fa\ +lse +logs.style.multiple: fal\ +se +logs.style.multiple: fals\ +e + +logs.style.multiple: f\ + \ + \ +alse + +logs.style.multiple: true +logs.style.multiple: t\ +rue +logs.style.multiple: tr\ +ue +logs.style.multiple: tru\ +e + +logs.style.font-size: 10 +logs.style.font-size: 1\ +0 + +logs.style.opacity: 0.4 +logs.style.opacity: 0\ +.5 +logs.style.opacity: 0.\ +6 + diff --git a/src/testResources/psi/values and labels.txt b/src/testResources/psi/values and labels.txt new file mode 100644 index 0000000..b152f6e --- /dev/null +++ b/src/testResources/psi/values and labels.txt @@ -0,0 +1,364 @@ +D2 File + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(UNQUOTED_STRING)('ab') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(UNQUOTED_STRING)('a\\nb') + PsiWhiteSpace('\n\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(UNQUOTED_STRING)('1') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(UNQUOTED_STRING)('1.1') + PsiWhiteSpace('\n\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)(''#111111'') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('"#111111"') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('"#111\\n111"') + PsiWhiteSpace('\n\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('''') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)(''\'') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)(''\\'') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)(''\n'') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('""') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('"\\"') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('"'"') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('"\""') + PsiWhiteSpace('\n') + ShapeDeclaration + ShapeId + PsiElement(ID)('legalString') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + PsiElement(STRING)('"\n"') + PsiWhiteSpace('\n\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('stroke') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + ColorValue + PsiElement(COLOR)('"#694024"') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('stroke') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + ColorValue + PsiElement(COLOR)(''#694024'') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('stroke') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + ColorValue + PsiElement(COLOR)('"#694\\n024"') + PsiWhiteSpace('\n\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FALSE)('false') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FALSE)('f\\nalse') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FALSE)('fa\\nlse') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FALSE)('fal\\nse') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FALSE)('fals\\ne') + PsiWhiteSpace('\n\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FALSE)('f\\n \\n \\nalse') + PsiWhiteSpace('\n\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(TRUE)('true') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(TRUE)('t\\nrue') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(TRUE)('tr\\nue') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('multiple') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(TRUE)('tru\\ne') + PsiWhiteSpace('\n\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('font-size') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(INT)('10') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('font-size') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(INT)('1\\n0') + PsiWhiteSpace('\n\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('opacity') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FLOAT)('0.4') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('opacity') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FLOAT)('0\\n.5') + PsiWhiteSpace('\n') + ShapeRef + ShapeId + PsiElement(ID)('logs') + PsiElement(DOT)('.') + ShapeProperty + ShapePropertyKey + PsiElement(STYLE_KEYWORD)('style') + PsiElement(DOT)('.') + PsiElement(STYLE_KEYWORDS)('opacity') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + OtherValue + PsiElement(FLOAT)('0.\\n6') \ No newline at end of file diff --git a/src/testSrc/D2ParsingTest.kt b/src/testSrc/D2ParsingTest.kt index 01ddd4b..5d25a9e 100644 --- a/src/testSrc/D2ParsingTest.kt +++ b/src/testSrc/D2ParsingTest.kt @@ -23,6 +23,11 @@ class D2ParsingTest : D2ParsingTestCase() { test() } + @Test + fun `values and labels`() { + test() + } + @Test fun `style object`() { test("""