re2js 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +273 -0
- package/build/index.cjs.js +12 -0
- package/build/index.cjs.js.map +1 -0
- package/build/index.esm.js +12 -0
- package/build/index.esm.js.map +1 -0
- package/build/index.umd.js +12 -0
- package/build/index.umd.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/RE2Flags.js","../src/Codepoint.js","../src/UnicodeTables.js","../src/Unicode.js","../src/Utils.js","../src/helpers.js","../src/MatcherInput.js","../src/Matcher.js","../src/MachineInput.js","../src/Regexp.js","../src/Inst.js","../src/Prog.js","../src/Compiler.js","../src/Simplify.js","../src/CharGroup.js","../src/CharClass.js","../src/RE2JSSyntaxException.js","../src/Parser.js","../src/Machine.js","../src/RE2.js","../src/index.js"],"sourcesContent":["//// Parser flags.\nclass RE2Flags {\n // Fold case during matching (case-insensitive).\n static FOLD_CASE = 0x01\n // Treat pattern as a literal string instead of a regexp.\n static LITERAL = 0x02\n // Allow character classes like [^a-z] and [[:space:]] to match newline.\n static CLASS_NL = 0x04\n // Allow '.' to match newline.\n static DOT_NL = 0x08\n // Treat ^ and $ as only matching at beginning and end of text, not\n // around embedded newlines. (Perl's default).\n static ONE_LINE = 0x10\n // Make repetition operators default to non-greedy.\n static NON_GREEDY = 0x20\n // allow Perl extensions:\n // non-capturing parens - (?: )\n // non-greedy operators - *? +? ?? {}?\n // flag edits - (?i) (?-i) (?i: )\n // i - FoldCase\n // m - !OneLine\n // s - DotNL\n // U - NonGreedy\n // line ends: \\A \\z\n // \\Q and \\E to disable/enable metacharacters\n // (?P<name>expr) for named captures\n // \\C (any byte) is not supported.\n static PERL_X = 0x40\n // Allow \\p{Han}, \\P{Han} for Unicode group and negation.\n static UNICODE_GROUPS = 0x80\n // Regexp END_TEXT was $, not \\z. Internal use only.\n static WAS_DOLLAR = 0x100\n\n static MATCH_NL = RE2Flags.CLASS_NL | RE2Flags.DOT_NL\n // As close to Perl as possible.\n static PERL = RE2Flags.CLASS_NL | RE2Flags.ONE_LINE | RE2Flags.PERL_X | RE2Flags.UNICODE_GROUPS\n // POSIX syntax.\n static POSIX = 0\n //// Anchors\n static UNANCHORED = 0\n static ANCHOR_START = 1\n static ANCHOR_BOTH = 2\n}\n\nexport { RE2Flags }\n","/**\n * Various constants and helper for unicode codepoints.\n */\nclass Codepoint {\n // codePointAt(0)\n static CODES = new Map([\n ['\\x07', 7],\n ['\\b', 8],\n ['\\t', 9],\n ['\\n', 10],\n ['\\v', 11],\n ['\\f', 12],\n ['\\r', 13],\n [' ', 32],\n ['\"', 34],\n ['$', 36],\n ['(', 40],\n [')', 41],\n ['*', 42],\n ['+', 43],\n ['-', 45],\n ['.', 46],\n ['0', 48],\n ['1', 49],\n ['2', 50],\n ['3', 51],\n ['4', 52],\n ['5', 53],\n ['6', 54],\n ['7', 55],\n ['8', 56],\n ['9', 57],\n [':', 58],\n ['?', 63],\n ['A', 65],\n ['B', 66],\n ['C', 67],\n ['F', 70],\n ['P', 80],\n ['Q', 81],\n ['U', 85],\n ['Z', 90],\n ['[', 91],\n ['\\\\', 92],\n [']', 93],\n ['^', 94],\n ['_', 95],\n ['a', 97],\n ['b', 98],\n ['f', 102],\n ['i', 105],\n ['m', 109],\n ['n', 110],\n ['r', 114],\n ['s', 115],\n ['t', 116],\n ['v', 118],\n ['x', 120],\n ['z', 122],\n ['{', 123],\n ['|', 124],\n ['}', 125]\n ])\n\n // convert unicode codepoint to upper case codepoint\n // return same codepoint, if cannot do it (or codepoint not have upper variation)\n static toUpperCase(codepoint) {\n const s = String.fromCodePoint(codepoint).toUpperCase()\n if (s.length > 1) {\n return codepoint\n }\n const sOrigin = String.fromCodePoint(s.codePointAt(0)).toLowerCase()\n if (sOrigin.length > 1 || sOrigin.codePointAt(0) !== codepoint) {\n return codepoint\n }\n return s.codePointAt(0)\n }\n\n // convert unicode codepoint to lower case codepoint\n // return same codepoint, if cannot do it (or codepoint not have lower variation)\n static toLowerCase(codepoint) {\n const s = String.fromCodePoint(codepoint).toLowerCase()\n if (s.length > 1) {\n return codepoint\n }\n const sOrigin = String.fromCodePoint(s.codePointAt(0)).toUpperCase()\n if (sOrigin.length > 1 || sOrigin.codePointAt(0) !== codepoint) {\n return codepoint\n }\n return s.codePointAt(0)\n }\n}\n\nexport { Codepoint }\n","// GENERATED BY tools/scripts/genUnicodeTable.js; DO NOT EDIT.\n// yarn node ./tools/scripts/genUnicodeTable.js > src/UnicodeTables.js\n\nclass UnicodeTables {\n static CASE_ORBIT = new Map([\n [75, 107],\n [107, 8490],\n [8490, 75],\n [83, 115],\n [115, 383],\n [383, 83],\n [181, 924],\n [924, 956],\n [956, 181],\n [197, 229],\n [229, 8491],\n [8491, 197],\n [452, 453],\n [453, 454],\n [454, 452],\n [455, 456],\n [456, 457],\n [457, 455],\n [458, 459],\n [459, 460],\n [460, 458],\n [497, 498],\n [498, 499],\n [499, 497],\n [837, 921],\n [921, 953],\n [953, 8126],\n [8126, 837],\n [914, 946],\n [946, 976],\n [976, 914],\n [917, 949],\n [949, 1013],\n [1013, 917],\n [920, 952],\n [952, 977],\n [977, 1012],\n [1012, 920],\n [922, 954],\n [954, 1008],\n [1008, 922],\n [928, 960],\n [960, 982],\n [982, 928],\n [929, 961],\n [961, 1009],\n [1009, 929],\n [931, 962],\n [962, 963],\n [963, 931],\n [934, 966],\n [966, 981],\n [981, 934],\n [937, 969],\n [969, 8486],\n [8486, 937],\n [1042, 1074],\n [1074, 7296],\n [7296, 1042],\n [1044, 1076],\n [1076, 7297],\n [7297, 1044],\n [1054, 1086],\n [1086, 7298],\n [7298, 1054],\n [1057, 1089],\n [1089, 7299],\n [7299, 1057],\n [1058, 1090],\n [1090, 7300],\n [7300, 7301],\n [7301, 1058],\n [1066, 1098],\n [1098, 7302],\n [7302, 1066],\n [1122, 1123],\n [1123, 7303],\n [7303, 1122],\n [7304, 42570],\n [42570, 42571],\n [42571, 7304],\n [7776, 7777],\n [7777, 7835],\n [7835, 7776],\n [223, 7838],\n [7838, 223],\n [8064, 8072],\n [8072, 8064],\n [8065, 8073],\n [8073, 8065],\n [8066, 8074],\n [8074, 8066],\n [8067, 8075],\n [8075, 8067],\n [8068, 8076],\n [8076, 8068],\n [8069, 8077],\n [8077, 8069],\n [8070, 8078],\n [8078, 8070],\n [8071, 8079],\n [8079, 8071],\n [8080, 8088],\n [8088, 8080],\n [8081, 8089],\n [8089, 8081],\n [8082, 8090],\n [8090, 8082],\n [8083, 8091],\n [8091, 8083],\n [8084, 8092],\n [8092, 8084],\n [8085, 8093],\n [8093, 8085],\n [8086, 8094],\n [8094, 8086],\n [8087, 8095],\n [8095, 8087],\n [8096, 8104],\n [8104, 8096],\n [8097, 8105],\n [8105, 8097],\n [8098, 8106],\n [8106, 8098],\n [8099, 8107],\n [8107, 8099],\n [8100, 8108],\n [8108, 8100],\n [8101, 8109],\n [8109, 8101],\n [8102, 8110],\n [8110, 8102],\n [8103, 8111],\n [8111, 8103],\n [8115, 8124],\n [8124, 8115],\n [8131, 8140],\n [8140, 8131],\n [8179, 8188],\n [8188, 8179],\n [66560, 66600],\n [66600, 66560],\n [66561, 66601],\n [66601, 66561],\n [66562, 66602],\n [66602, 66562],\n [66563, 66603],\n [66603, 66563],\n [66564, 66604],\n [66604, 66564],\n [66565, 66605],\n [66605, 66565],\n [66566, 66606],\n [66606, 66566],\n [66567, 66607],\n [66607, 66567],\n [66568, 66608],\n [66608, 66568],\n [66569, 66609],\n [66609, 66569],\n [66570, 66610],\n [66610, 66570],\n [66571, 66611],\n [66611, 66571],\n [66572, 66612],\n [66612, 66572],\n [66573, 66613],\n [66613, 66573],\n [66574, 66614],\n [66614, 66574],\n [66575, 66615],\n [66615, 66575],\n [66576, 66616],\n [66616, 66576],\n [66577, 66617],\n [66617, 66577],\n [66578, 66618],\n [66618, 66578],\n [66579, 66619],\n [66619, 66579],\n [66580, 66620],\n [66620, 66580],\n [66581, 66621],\n [66621, 66581],\n [66582, 66622],\n [66622, 66582],\n [66583, 66623],\n [66623, 66583],\n [66584, 66624],\n [66624, 66584],\n [66585, 66625],\n [66625, 66585],\n [66586, 66626],\n [66626, 66586],\n [66587, 66627],\n [66627, 66587],\n [66588, 66628],\n [66628, 66588],\n [66589, 66629],\n [66629, 66589],\n [66590, 66630],\n [66630, 66590],\n [66591, 66631],\n [66631, 66591],\n [66592, 66632],\n [66632, 66592],\n [66593, 66633],\n [66633, 66593],\n [66594, 66634],\n [66634, 66594],\n [66595, 66635],\n [66635, 66595],\n [66596, 66636],\n [66636, 66596],\n [66597, 66637],\n [66637, 66597],\n [66598, 66638],\n [66638, 66598],\n [66599, 66639],\n [66639, 66599],\n [66736, 66776],\n [66776, 66736],\n [66737, 66777],\n [66777, 66737],\n [66738, 66778],\n [66778, 66738],\n [66739, 66779],\n [66779, 66739],\n [66740, 66780],\n [66780, 66740],\n [66741, 66781],\n [66781, 66741],\n [66742, 66782],\n [66782, 66742],\n [66743, 66783],\n [66783, 66743],\n [66744, 66784],\n [66784, 66744],\n [66745, 66785],\n [66785, 66745],\n [66746, 66786],\n [66786, 66746],\n [66747, 66787],\n [66787, 66747],\n [66748, 66788],\n [66788, 66748],\n [66749, 66789],\n [66789, 66749],\n [66750, 66790],\n [66790, 66750],\n [66751, 66791],\n [66791, 66751],\n [66752, 66792],\n [66792, 66752],\n [66753, 66793],\n [66793, 66753],\n [66754, 66794],\n [66794, 66754],\n [66755, 66795],\n [66795, 66755],\n [66756, 66796],\n [66796, 66756],\n [66757, 66797],\n [66797, 66757],\n [66758, 66798],\n [66798, 66758],\n [66759, 66799],\n [66799, 66759],\n [66760, 66800],\n [66800, 66760],\n [66761, 66801],\n [66801, 66761],\n [66762, 66802],\n [66802, 66762],\n [66763, 66803],\n [66803, 66763],\n [66764, 66804],\n [66804, 66764],\n [66765, 66805],\n [66805, 66765],\n [66766, 66806],\n [66806, 66766],\n [66767, 66807],\n [66807, 66767],\n [66768, 66808],\n [66808, 66768],\n [66769, 66809],\n [66809, 66769],\n [66770, 66810],\n [66810, 66770],\n [66771, 66811],\n [66811, 66771],\n [66928, 66967],\n [66967, 66928],\n [66929, 66968],\n [66968, 66929],\n [66930, 66969],\n [66969, 66930],\n [66931, 66970],\n [66970, 66931],\n [66932, 66971],\n [66971, 66932],\n [66933, 66972],\n [66972, 66933],\n [66934, 66973],\n [66973, 66934],\n [66935, 66974],\n [66974, 66935],\n [66936, 66975],\n [66975, 66936],\n [66937, 66976],\n [66976, 66937],\n [66938, 66977],\n [66977, 66938],\n [66940, 66979],\n [66979, 66940],\n [66941, 66980],\n [66980, 66941],\n [66942, 66981],\n [66981, 66942],\n [66943, 66982],\n [66982, 66943],\n [66944, 66983],\n [66983, 66944],\n [66945, 66984],\n [66984, 66945],\n [66946, 66985],\n [66985, 66946],\n [66947, 66986],\n [66986, 66947],\n [66948, 66987],\n [66987, 66948],\n [66949, 66988],\n [66988, 66949],\n [66950, 66989],\n [66989, 66950],\n [66951, 66990],\n [66990, 66951],\n [66952, 66991],\n [66991, 66952],\n [66953, 66992],\n [66992, 66953],\n [66954, 66993],\n [66993, 66954],\n [66956, 66995],\n [66995, 66956],\n [66957, 66996],\n [66996, 66957],\n [66958, 66997],\n [66997, 66958],\n [66959, 66998],\n [66998, 66959],\n [66960, 66999],\n [66999, 66960],\n [66961, 67000],\n [67000, 66961],\n [66962, 67001],\n [67001, 66962],\n [66964, 67003],\n [67003, 66964],\n [66965, 67004],\n [67004, 66965],\n [68736, 68800],\n [68800, 68736],\n [68737, 68801],\n [68801, 68737],\n [68738, 68802],\n [68802, 68738],\n [68739, 68803],\n [68803, 68739],\n [68740, 68804],\n [68804, 68740],\n [68741, 68805],\n [68805, 68741],\n [68742, 68806],\n [68806, 68742],\n [68743, 68807],\n [68807, 68743],\n [68744, 68808],\n [68808, 68744],\n [68745, 68809],\n [68809, 68745],\n [68746, 68810],\n [68810, 68746],\n [68747, 68811],\n [68811, 68747],\n [68748, 68812],\n [68812, 68748],\n [68749, 68813],\n [68813, 68749],\n [68750, 68814],\n [68814, 68750],\n [68751, 68815],\n [68815, 68751],\n [68752, 68816],\n [68816, 68752],\n [68753, 68817],\n [68817, 68753],\n [68754, 68818],\n [68818, 68754],\n [68755, 68819],\n [68819, 68755],\n [68756, 68820],\n [68820, 68756],\n [68757, 68821],\n [68821, 68757],\n [68758, 68822],\n [68822, 68758],\n [68759, 68823],\n [68823, 68759],\n [68760, 68824],\n [68824, 68760],\n [68761, 68825],\n [68825, 68761],\n [68762, 68826],\n [68826, 68762],\n [68763, 68827],\n [68827, 68763],\n [68764, 68828],\n [68828, 68764],\n [68765, 68829],\n [68829, 68765],\n [68766, 68830],\n [68830, 68766],\n [68767, 68831],\n [68831, 68767],\n [68768, 68832],\n [68832, 68768],\n [68769, 68833],\n [68833, 68769],\n [68770, 68834],\n [68834, 68770],\n [68771, 68835],\n [68835, 68771],\n [68772, 68836],\n [68836, 68772],\n [68773, 68837],\n [68837, 68773],\n [68774, 68838],\n [68838, 68774],\n [68775, 68839],\n [68839, 68775],\n [68776, 68840],\n [68840, 68776],\n [68777, 68841],\n [68841, 68777],\n [68778, 68842],\n [68842, 68778],\n [68779, 68843],\n [68843, 68779],\n [68780, 68844],\n [68844, 68780],\n [68781, 68845],\n [68845, 68781],\n [68782, 68846],\n [68846, 68782],\n [68783, 68847],\n [68847, 68783],\n [68784, 68848],\n [68848, 68784],\n [68785, 68849],\n [68849, 68785],\n [68786, 68850],\n [68850, 68786],\n [71840, 71872],\n [71872, 71840],\n [71841, 71873],\n [71873, 71841],\n [71842, 71874],\n [71874, 71842],\n [71843, 71875],\n [71875, 71843],\n [71844, 71876],\n [71876, 71844],\n [71845, 71877],\n [71877, 71845],\n [71846, 71878],\n [71878, 71846],\n [71847, 71879],\n [71879, 71847],\n [71848, 71880],\n [71880, 71848],\n [71849, 71881],\n [71881, 71849],\n [71850, 71882],\n [71882, 71850],\n [71851, 71883],\n [71883, 71851],\n [71852, 71884],\n [71884, 71852],\n [71853, 71885],\n [71885, 71853],\n [71854, 71886],\n [71886, 71854],\n [71855, 71887],\n [71887, 71855],\n [71856, 71888],\n [71888, 71856],\n [71857, 71889],\n [71889, 71857],\n [71858, 71890],\n [71890, 71858],\n [71859, 71891],\n [71891, 71859],\n [71860, 71892],\n [71892, 71860],\n [71861, 71893],\n [71893, 71861],\n [71862, 71894],\n [71894, 71862],\n [71863, 71895],\n [71895, 71863],\n [71864, 71896],\n [71896, 71864],\n [71865, 71897],\n [71897, 71865],\n [71866, 71898],\n [71898, 71866],\n [71867, 71899],\n [71899, 71867],\n [71868, 71900],\n [71900, 71868],\n [71869, 71901],\n [71901, 71869],\n [71870, 71902],\n [71902, 71870],\n [71871, 71903],\n [71903, 71871],\n [93760, 93792],\n [93792, 93760],\n [93761, 93793],\n [93793, 93761],\n [93762, 93794],\n [93794, 93762],\n [93763, 93795],\n [93795, 93763],\n [93764, 93796],\n [93796, 93764],\n [93765, 93797],\n [93797, 93765],\n [93766, 93798],\n [93798, 93766],\n [93767, 93799],\n [93799, 93767],\n [93768, 93800],\n [93800, 93768],\n [93769, 93801],\n [93801, 93769],\n [93770, 93802],\n [93802, 93770],\n [93771, 93803],\n [93803, 93771],\n [93772, 93804],\n [93804, 93772],\n [93773, 93805],\n [93805, 93773],\n [93774, 93806],\n [93806, 93774],\n [93775, 93807],\n [93807, 93775],\n [93776, 93808],\n [93808, 93776],\n [93777, 93809],\n [93809, 93777],\n [93778, 93810],\n [93810, 93778],\n [93779, 93811],\n [93811, 93779],\n [93780, 93812],\n [93812, 93780],\n [93781, 93813],\n [93813, 93781],\n [93782, 93814],\n [93814, 93782],\n [93783, 93815],\n [93815, 93783],\n [93784, 93816],\n [93816, 93784],\n [93785, 93817],\n [93817, 93785],\n [93786, 93818],\n [93818, 93786],\n [93787, 93819],\n [93819, 93787],\n [93788, 93820],\n [93820, 93788],\n [93789, 93821],\n [93821, 93789],\n [93790, 93822],\n [93822, 93790],\n [93791, 93823],\n [93823, 93791],\n [125184, 125218],\n [125218, 125184],\n [125185, 125219],\n [125219, 125185],\n [125186, 125220],\n [125220, 125186],\n [125187, 125221],\n [125221, 125187],\n [125188, 125222],\n [125222, 125188],\n [125189, 125223],\n [125223, 125189],\n [125190, 125224],\n [125224, 125190],\n [125191, 125225],\n [125225, 125191],\n [125192, 125226],\n [125226, 125192],\n [125193, 125227],\n [125227, 125193],\n [125194, 125228],\n [125228, 125194],\n [125195, 125229],\n [125229, 125195],\n [125196, 125230],\n [125230, 125196],\n [125197, 125231],\n [125231, 125197],\n [125198, 125232],\n [125232, 125198],\n [125199, 125233],\n [125233, 125199],\n [125200, 125234],\n [125234, 125200],\n [125201, 125235],\n [125235, 125201],\n [125202, 125236],\n [125236, 125202],\n [125203, 125237],\n [125237, 125203],\n [125204, 125238],\n [125238, 125204],\n [125205, 125239],\n [125239, 125205],\n [125206, 125240],\n [125240, 125206],\n [125207, 125241],\n [125241, 125207],\n [125208, 125242],\n [125242, 125208],\n [125209, 125243],\n [125243, 125209],\n [125210, 125244],\n [125244, 125210],\n [125211, 125245],\n [125245, 125211],\n [125212, 125246],\n [125246, 125212],\n [125213, 125247],\n [125247, 125213],\n [125214, 125248],\n [125248, 125214],\n [125215, 125249],\n [125249, 125215],\n [125216, 125250],\n [125250, 125216],\n [125217, 125251],\n [125251, 125217]\n ])\n static C = [\n [0, 31, 1],\n [127, 159, 1],\n [173, 888, 715],\n [889, 896, 7],\n [897, 899, 1],\n [907, 909, 2],\n [930, 1328, 398],\n [1367, 1368, 1],\n [1419, 1420, 1],\n [1424, 1480, 56],\n [1481, 1487, 1],\n [1515, 1518, 1],\n [1525, 1541, 1],\n [1564, 1757, 193],\n [1806, 1807, 1],\n [1867, 1868, 1],\n [1970, 1983, 1],\n [2043, 2044, 1],\n [2094, 2095, 1],\n [2111, 2140, 29],\n [2141, 2143, 2],\n [2155, 2159, 1],\n [2191, 2199, 1],\n [2274, 2436, 162],\n [2445, 2446, 1],\n [2449, 2450, 1],\n [2473, 2481, 8],\n [2483, 2485, 1],\n [2490, 2491, 1],\n [2501, 2502, 1],\n [2505, 2506, 1],\n [2511, 2518, 1],\n [2520, 2523, 1],\n [2526, 2532, 6],\n [2533, 2559, 26],\n [2560, 2564, 4],\n [2571, 2574, 1],\n [2577, 2578, 1],\n [2601, 2609, 8],\n [2612, 2618, 3],\n [2619, 2621, 2],\n [2627, 2630, 1],\n [2633, 2634, 1],\n [2638, 2640, 1],\n [2642, 2648, 1],\n [2653, 2655, 2],\n [2656, 2661, 1],\n [2679, 2688, 1],\n [2692, 2702, 10],\n [2706, 2729, 23],\n [2737, 2740, 3],\n [2746, 2747, 1],\n [2758, 2766, 4],\n [2767, 2769, 2],\n [2770, 2783, 1],\n [2788, 2789, 1],\n [2802, 2808, 1],\n [2816, 2820, 4],\n [2829, 2830, 1],\n [2833, 2834, 1],\n [2857, 2865, 8],\n [2868, 2874, 6],\n [2875, 2885, 10],\n [2886, 2889, 3],\n [2890, 2894, 4],\n [2895, 2900, 1],\n [2904, 2907, 1],\n [2910, 2916, 6],\n [2917, 2936, 19],\n [2937, 2945, 1],\n [2948, 2955, 7],\n [2956, 2957, 1],\n [2961, 2966, 5],\n [2967, 2968, 1],\n [2971, 2973, 2],\n [2976, 2978, 1],\n [2981, 2983, 1],\n [2987, 2989, 1],\n [3002, 3005, 1],\n [3011, 3013, 1],\n [3017, 3022, 5],\n [3023, 3025, 2],\n [3026, 3030, 1],\n [3032, 3045, 1],\n [3067, 3071, 1],\n [3085, 3089, 4],\n [3113, 3130, 17],\n [3131, 3141, 10],\n [3145, 3150, 5],\n [3151, 3156, 1],\n [3159, 3163, 4],\n [3164, 3166, 2],\n [3167, 3172, 5],\n [3173, 3184, 11],\n [3185, 3190, 1],\n [3213, 3217, 4],\n [3241, 3252, 11],\n [3258, 3259, 1],\n [3269, 3273, 4],\n [3278, 3284, 1],\n [3287, 3292, 1],\n [3295, 3300, 5],\n [3301, 3312, 11],\n [3316, 3327, 1],\n [3341, 3345, 4],\n [3397, 3401, 4],\n [3408, 3411, 1],\n [3428, 3429, 1],\n [3456, 3460, 4],\n [3479, 3481, 1],\n [3506, 3516, 10],\n [3518, 3519, 1],\n [3527, 3529, 1],\n [3531, 3534, 1],\n [3541, 3543, 2],\n [3552, 3557, 1],\n [3568, 3569, 1],\n [3573, 3584, 1],\n [3643, 3646, 1],\n [3676, 3712, 1],\n [3715, 3717, 2],\n [3723, 3748, 25],\n [3750, 3774, 24],\n [3775, 3781, 6],\n [3783, 3791, 8],\n [3802, 3803, 1],\n [3808, 3839, 1],\n [3912, 3949, 37],\n [3950, 3952, 1],\n [3992, 4029, 37],\n [4045, 4059, 14],\n [4060, 4095, 1],\n [4294, 4296, 2],\n [4297, 4300, 1],\n [4302, 4303, 1],\n [4681, 4686, 5],\n [4687, 4695, 8],\n [4697, 4702, 5],\n [4703, 4745, 42],\n [4750, 4751, 1],\n [4785, 4790, 5],\n [4791, 4799, 8],\n [4801, 4806, 5],\n [4807, 4823, 16],\n [4881, 4886, 5],\n [4887, 4955, 68],\n [4956, 4989, 33],\n [4990, 4991, 1],\n [5018, 5023, 1],\n [5110, 5111, 1],\n [5118, 5119, 1],\n [5789, 5791, 1],\n [5881, 5887, 1],\n [5910, 5918, 1],\n [5943, 5951, 1],\n [5972, 5983, 1],\n [5997, 6001, 4],\n [6004, 6015, 1],\n [6110, 6111, 1],\n [6122, 6127, 1],\n [6138, 6143, 1],\n [6158, 6170, 12],\n [6171, 6175, 1],\n [6265, 6271, 1],\n [6315, 6319, 1],\n [6390, 6399, 1],\n [6431, 6444, 13],\n [6445, 6447, 1],\n [6460, 6463, 1],\n [6465, 6467, 1],\n [6510, 6511, 1],\n [6517, 6527, 1],\n [6572, 6575, 1],\n [6602, 6607, 1],\n [6619, 6621, 1],\n [6684, 6685, 1],\n [6751, 6781, 30],\n [6782, 6794, 12],\n [6795, 6799, 1],\n [6810, 6815, 1],\n [6830, 6831, 1],\n [6863, 6911, 1],\n [6989, 6991, 1],\n [7039, 7156, 117],\n [7157, 7163, 1],\n [7224, 7226, 1],\n [7242, 7244, 1],\n [7305, 7311, 1],\n [7355, 7356, 1],\n [7368, 7375, 1],\n [7419, 7423, 1],\n [7958, 7959, 1],\n [7966, 7967, 1],\n [8006, 8007, 1],\n [8014, 8015, 1],\n [8024, 8030, 2],\n [8062, 8063, 1],\n [8117, 8133, 16],\n [8148, 8149, 1],\n [8156, 8176, 20],\n [8177, 8181, 4],\n [8191, 8203, 12],\n [8204, 8207, 1],\n [8234, 8238, 1],\n [8288, 8303, 1],\n [8306, 8307, 1],\n [8335, 8349, 14],\n [8350, 8351, 1],\n [8385, 8399, 1],\n [8433, 8447, 1],\n [8588, 8591, 1],\n [9255, 9279, 1],\n [9291, 9311, 1],\n [11124, 11125, 1],\n [11158, 11508, 350],\n [11509, 11512, 1],\n [11558, 11560, 2],\n [11561, 11564, 1],\n [11566, 11567, 1],\n [11624, 11630, 1],\n [11633, 11646, 1],\n [11671, 11679, 1],\n [11687, 11743, 8],\n [11870, 11903, 1],\n [11930, 12020, 90],\n [12021, 12031, 1],\n [12246, 12271, 1],\n [12352, 12439, 87],\n [12440, 12544, 104],\n [12545, 12548, 1],\n [12592, 12687, 95],\n [12772, 12782, 1],\n [12831, 42125, 29294],\n [42126, 42127, 1],\n [42183, 42191, 1],\n [42540, 42559, 1],\n [42744, 42751, 1],\n [42955, 42959, 1],\n [42962, 42964, 2],\n [42970, 42993, 1],\n [43053, 43055, 1],\n [43066, 43071, 1],\n [43128, 43135, 1],\n [43206, 43213, 1],\n [43226, 43231, 1],\n [43348, 43358, 1],\n [43389, 43391, 1],\n [43470, 43482, 12],\n [43483, 43485, 1],\n [43519, 43575, 56],\n [43576, 43583, 1],\n [43598, 43599, 1],\n [43610, 43611, 1],\n [43715, 43738, 1],\n [43767, 43776, 1],\n [43783, 43784, 1],\n [43791, 43792, 1],\n [43799, 43807, 1],\n [43815, 43823, 8],\n [43884, 43887, 1],\n [44014, 44015, 1],\n [44026, 44031, 1],\n [55204, 55215, 1],\n [55239, 55242, 1],\n [55292, 63743, 1],\n [64110, 64111, 1],\n [64218, 64255, 1],\n [64263, 64274, 1],\n [64280, 64284, 1],\n [64311, 64317, 6],\n [64319, 64325, 3],\n [64451, 64466, 1],\n [64912, 64913, 1],\n [64968, 64974, 1],\n [64976, 65007, 1],\n [65050, 65055, 1],\n [65107, 65127, 20],\n [65132, 65135, 1],\n [65141, 65277, 136],\n [65278, 65280, 1],\n [65471, 65473, 1],\n [65480, 65481, 1],\n [65488, 65489, 1],\n [65496, 65497, 1],\n [65501, 65503, 1],\n [65511, 65519, 8],\n [65520, 65531, 1],\n [65534, 65535, 1],\n [65548, 65575, 27],\n [65595, 65598, 3],\n [65614, 65615, 1],\n [65630, 65663, 1],\n [65787, 65791, 1],\n [65795, 65798, 1],\n [65844, 65846, 1],\n [65935, 65949, 14],\n [65950, 65951, 1],\n [65953, 65999, 1],\n [66046, 66175, 1],\n [66205, 66207, 1],\n [66257, 66271, 1],\n [66300, 66303, 1],\n [66340, 66348, 1],\n [66379, 66383, 1],\n [66427, 66431, 1],\n [66462, 66500, 38],\n [66501, 66503, 1],\n [66518, 66559, 1],\n [66718, 66719, 1],\n [66730, 66735, 1],\n [66772, 66775, 1],\n [66812, 66815, 1],\n [66856, 66863, 1],\n [66916, 66926, 1],\n [66939, 66955, 16],\n [66963, 66966, 3],\n [66978, 66994, 16],\n [67002, 67005, 3],\n [67006, 67071, 1],\n [67383, 67391, 1],\n [67414, 67423, 1],\n [67432, 67455, 1],\n [67462, 67505, 43],\n [67515, 67583, 1],\n [67590, 67591, 1],\n [67593, 67638, 45],\n [67641, 67643, 1],\n [67645, 67646, 1],\n [67670, 67743, 73],\n [67744, 67750, 1],\n [67760, 67807, 1],\n [67827, 67830, 3],\n [67831, 67834, 1],\n [67868, 67870, 1],\n [67898, 67902, 1],\n [67904, 67967, 1],\n [68024, 68027, 1],\n [68048, 68049, 1],\n [68100, 68103, 3],\n [68104, 68107, 1],\n [68116, 68120, 4],\n [68150, 68151, 1],\n [68155, 68158, 1],\n [68169, 68175, 1],\n [68185, 68191, 1],\n [68256, 68287, 1],\n [68327, 68330, 1],\n [68343, 68351, 1],\n [68406, 68408, 1],\n [68438, 68439, 1],\n [68467, 68471, 1],\n [68498, 68504, 1],\n [68509, 68520, 1],\n [68528, 68607, 1],\n [68681, 68735, 1],\n [68787, 68799, 1],\n [68851, 68857, 1],\n [68904, 68911, 1],\n [68922, 69215, 1],\n [69247, 69290, 43],\n [69294, 69295, 1],\n [69298, 69372, 1],\n [69416, 69423, 1],\n [69466, 69487, 1],\n [69514, 69551, 1],\n [69580, 69599, 1],\n [69623, 69631, 1],\n [69710, 69713, 1],\n [69750, 69758, 1],\n [69821, 69827, 6],\n [69828, 69839, 1],\n [69865, 69871, 1],\n [69882, 69887, 1],\n [69941, 69960, 19],\n [69961, 69967, 1],\n [70007, 70015, 1],\n [70112, 70133, 21],\n [70134, 70143, 1],\n [70162, 70210, 48],\n [70211, 70271, 1],\n [70279, 70281, 2],\n [70286, 70302, 16],\n [70314, 70319, 1],\n [70379, 70383, 1],\n [70394, 70399, 1],\n [70404, 70413, 9],\n [70414, 70417, 3],\n [70418, 70441, 23],\n [70449, 70452, 3],\n [70458, 70469, 11],\n [70470, 70473, 3],\n [70474, 70478, 4],\n [70479, 70481, 2],\n [70482, 70486, 1],\n [70488, 70492, 1],\n [70500, 70501, 1],\n [70509, 70511, 1],\n [70517, 70655, 1],\n [70748, 70754, 6],\n [70755, 70783, 1],\n [70856, 70863, 1],\n [70874, 71039, 1],\n [71094, 71095, 1],\n [71134, 71167, 1],\n [71237, 71247, 1],\n [71258, 71263, 1],\n [71277, 71295, 1],\n [71354, 71359, 1],\n [71370, 71423, 1],\n [71451, 71452, 1],\n [71468, 71471, 1],\n [71495, 71679, 1],\n [71740, 71839, 1],\n [71923, 71934, 1],\n [71943, 71944, 1],\n [71946, 71947, 1],\n [71956, 71959, 3],\n [71990, 71993, 3],\n [71994, 72007, 13],\n [72008, 72015, 1],\n [72026, 72095, 1],\n [72104, 72105, 1],\n [72152, 72153, 1],\n [72165, 72191, 1],\n [72264, 72271, 1],\n [72355, 72367, 1],\n [72441, 72447, 1],\n [72458, 72703, 1],\n [72713, 72759, 46],\n [72774, 72783, 1],\n [72813, 72815, 1],\n [72848, 72849, 1],\n [72872, 72887, 15],\n [72888, 72959, 1],\n [72967, 72970, 3],\n [73015, 73017, 1],\n [73019, 73022, 3],\n [73032, 73039, 1],\n [73050, 73055, 1],\n [73062, 73065, 3],\n [73103, 73106, 3],\n [73113, 73119, 1],\n [73130, 73439, 1],\n [73465, 73471, 1],\n [73489, 73531, 42],\n [73532, 73533, 1],\n [73562, 73647, 1],\n [73649, 73663, 1],\n [73714, 73726, 1],\n [74650, 74751, 1],\n [74863, 74869, 6],\n [74870, 74879, 1],\n [75076, 77711, 1],\n [77811, 77823, 1],\n [78896, 78911, 1],\n [78934, 82943, 1],\n [83527, 92159, 1],\n [92729, 92735, 1],\n [92767, 92778, 11],\n [92779, 92781, 1],\n [92863, 92874, 11],\n [92875, 92879, 1],\n [92910, 92911, 1],\n [92918, 92927, 1],\n [92998, 93007, 1],\n [93018, 93026, 8],\n [93048, 93052, 1],\n [93072, 93759, 1],\n [93851, 93951, 1],\n [94027, 94030, 1],\n [94088, 94094, 1],\n [94112, 94175, 1],\n [94181, 94191, 1],\n [94194, 94207, 1],\n [100344, 100351, 1],\n [101590, 101631, 1],\n [101641, 110575, 1],\n [110580, 110588, 8],\n [110591, 110883, 292],\n [110884, 110897, 1],\n [110899, 110927, 1],\n [110931, 110932, 1],\n [110934, 110947, 1],\n [110952, 110959, 1],\n [111356, 113663, 1],\n [113771, 113775, 1],\n [113789, 113791, 1],\n [113801, 113807, 1],\n [113818, 113819, 1],\n [113824, 118527, 1],\n [118574, 118575, 1],\n [118599, 118607, 1],\n [118724, 118783, 1],\n [119030, 119039, 1],\n [119079, 119080, 1],\n [119155, 119162, 1],\n [119275, 119295, 1],\n [119366, 119487, 1],\n [119508, 119519, 1],\n [119540, 119551, 1],\n [119639, 119647, 1],\n [119673, 119807, 1],\n [119893, 119965, 72],\n [119968, 119969, 1],\n [119971, 119972, 1],\n [119975, 119976, 1],\n [119981, 119994, 13],\n [119996, 120004, 8],\n [120070, 120075, 5],\n [120076, 120085, 9],\n [120093, 120122, 29],\n [120127, 120133, 6],\n [120135, 120137, 1],\n [120145, 120486, 341],\n [120487, 120780, 293],\n [120781, 121484, 703],\n [121485, 121498, 1],\n [121504, 121520, 16],\n [121521, 122623, 1],\n [122655, 122660, 1],\n [122667, 122879, 1],\n [122887, 122905, 18],\n [122906, 122914, 8],\n [122917, 122923, 6],\n [122924, 122927, 1],\n [122990, 123022, 1],\n [123024, 123135, 1],\n [123181, 123183, 1],\n [123198, 123199, 1],\n [123210, 123213, 1],\n [123216, 123535, 1],\n [123567, 123583, 1],\n [123642, 123646, 1],\n [123648, 124111, 1],\n [124154, 124895, 1],\n [124903, 124908, 5],\n [124911, 124927, 16],\n [125125, 125126, 1],\n [125143, 125183, 1],\n [125260, 125263, 1],\n [125274, 125277, 1],\n [125280, 126064, 1],\n [126133, 126208, 1],\n [126270, 126463, 1],\n [126468, 126496, 28],\n [126499, 126501, 2],\n [126502, 126504, 2],\n [126515, 126520, 5],\n [126522, 126524, 2],\n [126525, 126529, 1],\n [126531, 126534, 1],\n [126536, 126540, 2],\n [126544, 126547, 3],\n [126549, 126550, 1],\n [126552, 126560, 2],\n [126563, 126565, 2],\n [126566, 126571, 5],\n [126579, 126589, 5],\n [126591, 126602, 11],\n [126620, 126624, 1],\n [126628, 126634, 6],\n [126652, 126703, 1],\n [126706, 126975, 1],\n [127020, 127023, 1],\n [127124, 127135, 1],\n [127151, 127152, 1],\n [127168, 127184, 16],\n [127222, 127231, 1],\n [127406, 127461, 1],\n [127491, 127503, 1],\n [127548, 127551, 1],\n [127561, 127567, 1],\n [127570, 127583, 1],\n [127590, 127743, 1],\n [128728, 128731, 1],\n [128749, 128751, 1],\n [128765, 128767, 1],\n [128887, 128890, 1],\n [128986, 128991, 1],\n [129004, 129007, 1],\n [129009, 129023, 1],\n [129036, 129039, 1],\n [129096, 129103, 1],\n [129114, 129119, 1],\n [129160, 129167, 1],\n [129198, 129199, 1],\n [129202, 129279, 1],\n [129620, 129631, 1],\n [129646, 129647, 1],\n [129661, 129663, 1],\n [129673, 129679, 1],\n [129726, 129734, 8],\n [129735, 129741, 1],\n [129756, 129759, 1],\n [129769, 129775, 1],\n [129785, 129791, 1],\n [129939, 129995, 56],\n [129996, 130031, 1],\n [130042, 131071, 1],\n [173792, 173823, 1],\n [177978, 177983, 1],\n [178206, 178207, 1],\n [183970, 183983, 1],\n [191457, 194559, 1],\n [195102, 196607, 1],\n [201547, 201551, 1],\n [205744, 917759, 1],\n [918000, 1114111, 1]\n ]\n static Cc = [\n [0, 31, 1],\n [127, 159, 1]\n ]\n static Cf = [\n [173, 1536, 1363],\n [1537, 1541, 1],\n [1564, 1757, 193],\n [1807, 2192, 385],\n [2193, 2274, 81],\n [6158, 8203, 2045],\n [8204, 8207, 1],\n [8234, 8238, 1],\n [8288, 8292, 1],\n [8294, 8303, 1],\n [65279, 65529, 250],\n [65530, 65531, 1],\n [69821, 69837, 16],\n [78896, 78911, 1],\n [113824, 113827, 1],\n [119155, 119162, 1],\n [917505, 917536, 31],\n [917537, 917631, 1]\n ]\n static Co = [\n [57344, 63743, 1],\n [983040, 1048573, 1],\n [1048576, 1114109, 1]\n ]\n static Cs = [[55296, 57343, 1]]\n static L = [\n [65, 90, 1],\n [97, 122, 1],\n [170, 181, 11],\n [186, 192, 6],\n [193, 214, 1],\n [216, 246, 1],\n [248, 705, 1],\n [710, 721, 1],\n [736, 740, 1],\n [748, 750, 2],\n [880, 884, 1],\n [886, 887, 1],\n [890, 893, 1],\n [895, 902, 7],\n [904, 906, 1],\n [908, 910, 2],\n [911, 929, 1],\n [931, 1013, 1],\n [1015, 1153, 1],\n [1162, 1327, 1],\n [1329, 1366, 1],\n [1369, 1376, 7],\n [1377, 1416, 1],\n [1488, 1514, 1],\n [1519, 1522, 1],\n [1568, 1610, 1],\n [1646, 1647, 1],\n [1649, 1747, 1],\n [1749, 1765, 16],\n [1766, 1774, 8],\n [1775, 1786, 11],\n [1787, 1788, 1],\n [1791, 1808, 17],\n [1810, 1839, 1],\n [1869, 1957, 1],\n [1969, 1994, 25],\n [1995, 2026, 1],\n [2036, 2037, 1],\n [2042, 2048, 6],\n [2049, 2069, 1],\n [2074, 2084, 10],\n [2088, 2112, 24],\n [2113, 2136, 1],\n [2144, 2154, 1],\n [2160, 2183, 1],\n [2185, 2190, 1],\n [2208, 2249, 1],\n [2308, 2361, 1],\n [2365, 2384, 19],\n [2392, 2401, 1],\n [2417, 2432, 1],\n [2437, 2444, 1],\n [2447, 2448, 1],\n [2451, 2472, 1],\n [2474, 2480, 1],\n [2482, 2486, 4],\n [2487, 2489, 1],\n [2493, 2510, 17],\n [2524, 2525, 1],\n [2527, 2529, 1],\n [2544, 2545, 1],\n [2556, 2565, 9],\n [2566, 2570, 1],\n [2575, 2576, 1],\n [2579, 2600, 1],\n [2602, 2608, 1],\n [2610, 2611, 1],\n [2613, 2614, 1],\n [2616, 2617, 1],\n [2649, 2652, 1],\n [2654, 2674, 20],\n [2675, 2676, 1],\n [2693, 2701, 1],\n [2703, 2705, 1],\n [2707, 2728, 1],\n [2730, 2736, 1],\n [2738, 2739, 1],\n [2741, 2745, 1],\n [2749, 2768, 19],\n [2784, 2785, 1],\n [2809, 2821, 12],\n [2822, 2828, 1],\n [2831, 2832, 1],\n [2835, 2856, 1],\n [2858, 2864, 1],\n [2866, 2867, 1],\n [2869, 2873, 1],\n [2877, 2908, 31],\n [2909, 2911, 2],\n [2912, 2913, 1],\n [2929, 2947, 18],\n [2949, 2954, 1],\n [2958, 2960, 1],\n [2962, 2965, 1],\n [2969, 2970, 1],\n [2972, 2974, 2],\n [2975, 2979, 4],\n [2980, 2984, 4],\n [2985, 2986, 1],\n [2990, 3001, 1],\n [3024, 3077, 53],\n [3078, 3084, 1],\n [3086, 3088, 1],\n [3090, 3112, 1],\n [3114, 3129, 1],\n [3133, 3160, 27],\n [3161, 3162, 1],\n [3165, 3168, 3],\n [3169, 3200, 31],\n [3205, 3212, 1],\n [3214, 3216, 1],\n [3218, 3240, 1],\n [3242, 3251, 1],\n [3253, 3257, 1],\n [3261, 3293, 32],\n [3294, 3296, 2],\n [3297, 3313, 16],\n [3314, 3332, 18],\n [3333, 3340, 1],\n [3342, 3344, 1],\n [3346, 3386, 1],\n [3389, 3406, 17],\n [3412, 3414, 1],\n [3423, 3425, 1],\n [3450, 3455, 1],\n [3461, 3478, 1],\n [3482, 3505, 1],\n [3507, 3515, 1],\n [3517, 3520, 3],\n [3521, 3526, 1],\n [3585, 3632, 1],\n [3634, 3635, 1],\n [3648, 3654, 1],\n [3713, 3714, 1],\n [3716, 3718, 2],\n [3719, 3722, 1],\n [3724, 3747, 1],\n [3749, 3751, 2],\n [3752, 3760, 1],\n [3762, 3763, 1],\n [3773, 3776, 3],\n [3777, 3780, 1],\n [3782, 3804, 22],\n [3805, 3807, 1],\n [3840, 3904, 64],\n [3905, 3911, 1],\n [3913, 3948, 1],\n [3976, 3980, 1],\n [4096, 4138, 1],\n [4159, 4176, 17],\n [4177, 4181, 1],\n [4186, 4189, 1],\n [4193, 4197, 4],\n [4198, 4206, 8],\n [4207, 4208, 1],\n [4213, 4225, 1],\n [4238, 4256, 18],\n [4257, 4293, 1],\n [4295, 4301, 6],\n [4304, 4346, 1],\n [4348, 4680, 1],\n [4682, 4685, 1],\n [4688, 4694, 1],\n [4696, 4698, 2],\n [4699, 4701, 1],\n [4704, 4744, 1],\n [4746, 4749, 1],\n [4752, 4784, 1],\n [4786, 4789, 1],\n [4792, 4798, 1],\n [4800, 4802, 2],\n [4803, 4805, 1],\n [4808, 4822, 1],\n [4824, 4880, 1],\n [4882, 4885, 1],\n [4888, 4954, 1],\n [4992, 5007, 1],\n [5024, 5109, 1],\n [5112, 5117, 1],\n [5121, 5740, 1],\n [5743, 5759, 1],\n [5761, 5786, 1],\n [5792, 5866, 1],\n [5873, 5880, 1],\n [5888, 5905, 1],\n [5919, 5937, 1],\n [5952, 5969, 1],\n [5984, 5996, 1],\n [5998, 6000, 1],\n [6016, 6067, 1],\n [6103, 6108, 5],\n [6176, 6264, 1],\n [6272, 6276, 1],\n [6279, 6312, 1],\n [6314, 6320, 6],\n [6321, 6389, 1],\n [6400, 6430, 1],\n [6480, 6509, 1],\n [6512, 6516, 1],\n [6528, 6571, 1],\n [6576, 6601, 1],\n [6656, 6678, 1],\n [6688, 6740, 1],\n [6823, 6917, 94],\n [6918, 6963, 1],\n [6981, 6988, 1],\n [7043, 7072, 1],\n [7086, 7087, 1],\n [7098, 7141, 1],\n [7168, 7203, 1],\n [7245, 7247, 1],\n [7258, 7293, 1],\n [7296, 7304, 1],\n [7312, 7354, 1],\n [7357, 7359, 1],\n [7401, 7404, 1],\n [7406, 7411, 1],\n [7413, 7414, 1],\n [7418, 7424, 6],\n [7425, 7615, 1],\n [7680, 7957, 1],\n [7960, 7965, 1],\n [7968, 8005, 1],\n [8008, 8013, 1],\n [8016, 8023, 1],\n [8025, 8031, 2],\n [8032, 8061, 1],\n [8064, 8116, 1],\n [8118, 8124, 1],\n [8126, 8130, 4],\n [8131, 8132, 1],\n [8134, 8140, 1],\n [8144, 8147, 1],\n [8150, 8155, 1],\n [8160, 8172, 1],\n [8178, 8180, 1],\n [8182, 8188, 1],\n [8305, 8319, 14],\n [8336, 8348, 1],\n [8450, 8455, 5],\n [8458, 8467, 1],\n [8469, 8473, 4],\n [8474, 8477, 1],\n [8484, 8490, 2],\n [8491, 8493, 1],\n [8495, 8505, 1],\n [8508, 8511, 1],\n [8517, 8521, 1],\n [8526, 8579, 53],\n [8580, 11264, 2684],\n [11265, 11492, 1],\n [11499, 11502, 1],\n [11506, 11507, 1],\n [11520, 11557, 1],\n [11559, 11565, 6],\n [11568, 11623, 1],\n [11631, 11648, 17],\n [11649, 11670, 1],\n [11680, 11686, 1],\n [11688, 11694, 1],\n [11696, 11702, 1],\n [11704, 11710, 1],\n [11712, 11718, 1],\n [11720, 11726, 1],\n [11728, 11734, 1],\n [11736, 11742, 1],\n [11823, 12293, 470],\n [12294, 12337, 43],\n [12338, 12341, 1],\n [12347, 12348, 1],\n [12353, 12438, 1],\n [12445, 12447, 1],\n [12449, 12538, 1],\n [12540, 12543, 1],\n [12549, 12591, 1],\n [12593, 12686, 1],\n [12704, 12735, 1],\n [12784, 12799, 1],\n [13312, 19903, 1],\n [19968, 42124, 1],\n [42192, 42237, 1],\n [42240, 42508, 1],\n [42512, 42527, 1],\n [42538, 42539, 1],\n [42560, 42606, 1],\n [42623, 42653, 1],\n [42656, 42725, 1],\n [42775, 42783, 1],\n [42786, 42888, 1],\n [42891, 42954, 1],\n [42960, 42961, 1],\n [42963, 42965, 2],\n [42966, 42969, 1],\n [42994, 43009, 1],\n [43011, 43013, 1],\n [43015, 43018, 1],\n [43020, 43042, 1],\n [43072, 43123, 1],\n [43138, 43187, 1],\n [43250, 43255, 1],\n [43259, 43261, 2],\n [43262, 43274, 12],\n [43275, 43301, 1],\n [43312, 43334, 1],\n [43360, 43388, 1],\n [43396, 43442, 1],\n [43471, 43488, 17],\n [43489, 43492, 1],\n [43494, 43503, 1],\n [43514, 43518, 1],\n [43520, 43560, 1],\n [43584, 43586, 1],\n [43588, 43595, 1],\n [43616, 43638, 1],\n [43642, 43646, 4],\n [43647, 43695, 1],\n [43697, 43701, 4],\n [43702, 43705, 3],\n [43706, 43709, 1],\n [43712, 43714, 2],\n [43739, 43741, 1],\n [43744, 43754, 1],\n [43762, 43764, 1],\n [43777, 43782, 1],\n [43785, 43790, 1],\n [43793, 43798, 1],\n [43808, 43814, 1],\n [43816, 43822, 1],\n [43824, 43866, 1],\n [43868, 43881, 1],\n [43888, 44002, 1],\n [44032, 55203, 1],\n [55216, 55238, 1],\n [55243, 55291, 1],\n [63744, 64109, 1],\n [64112, 64217, 1],\n [64256, 64262, 1],\n [64275, 64279, 1],\n [64285, 64287, 2],\n [64288, 64296, 1],\n [64298, 64310, 1],\n [64312, 64316, 1],\n [64318, 64320, 2],\n [64321, 64323, 2],\n [64324, 64326, 2],\n [64327, 64433, 1],\n [64467, 64829, 1],\n [64848, 64911, 1],\n [64914, 64967, 1],\n [65008, 65019, 1],\n [65136, 65140, 1],\n [65142, 65276, 1],\n [65313, 65338, 1],\n [65345, 65370, 1],\n [65382, 65470, 1],\n [65474, 65479, 1],\n [65482, 65487, 1],\n [65490, 65495, 1],\n [65498, 65500, 1],\n [65536, 65547, 1],\n [65549, 65574, 1],\n [65576, 65594, 1],\n [65596, 65597, 1],\n [65599, 65613, 1],\n [65616, 65629, 1],\n [65664, 65786, 1],\n [66176, 66204, 1],\n [66208, 66256, 1],\n [66304, 66335, 1],\n [66349, 66368, 1],\n [66370, 66377, 1],\n [66384, 66421, 1],\n [66432, 66461, 1],\n [66464, 66499, 1],\n [66504, 66511, 1],\n [66560, 66717, 1],\n [66736, 66771, 1],\n [66776, 66811, 1],\n [66816, 66855, 1],\n [66864, 66915, 1],\n [66928, 66938, 1],\n [66940, 66954, 1],\n [66956, 66962, 1],\n [66964, 66965, 1],\n [66967, 66977, 1],\n [66979, 66993, 1],\n [66995, 67001, 1],\n [67003, 67004, 1],\n [67072, 67382, 1],\n [67392, 67413, 1],\n [67424, 67431, 1],\n [67456, 67461, 1],\n [67463, 67504, 1],\n [67506, 67514, 1],\n [67584, 67589, 1],\n [67592, 67594, 2],\n [67595, 67637, 1],\n [67639, 67640, 1],\n [67644, 67647, 3],\n [67648, 67669, 1],\n [67680, 67702, 1],\n [67712, 67742, 1],\n [67808, 67826, 1],\n [67828, 67829, 1],\n [67840, 67861, 1],\n [67872, 67897, 1],\n [67968, 68023, 1],\n [68030, 68031, 1],\n [68096, 68112, 16],\n [68113, 68115, 1],\n [68117, 68119, 1],\n [68121, 68149, 1],\n [68192, 68220, 1],\n [68224, 68252, 1],\n [68288, 68295, 1],\n [68297, 68324, 1],\n [68352, 68405, 1],\n [68416, 68437, 1],\n [68448, 68466, 1],\n [68480, 68497, 1],\n [68608, 68680, 1],\n [68736, 68786, 1],\n [68800, 68850, 1],\n [68864, 68899, 1],\n [69248, 69289, 1],\n [69296, 69297, 1],\n [69376, 69404, 1],\n [69415, 69424, 9],\n [69425, 69445, 1],\n [69488, 69505, 1],\n [69552, 69572, 1],\n [69600, 69622, 1],\n [69635, 69687, 1],\n [69745, 69746, 1],\n [69749, 69763, 14],\n [69764, 69807, 1],\n [69840, 69864, 1],\n [69891, 69926, 1],\n [69956, 69959, 3],\n [69968, 70002, 1],\n [70006, 70019, 13],\n [70020, 70066, 1],\n [70081, 70084, 1],\n [70106, 70108, 2],\n [70144, 70161, 1],\n [70163, 70187, 1],\n [70207, 70208, 1],\n [70272, 70278, 1],\n [70280, 70282, 2],\n [70283, 70285, 1],\n [70287, 70301, 1],\n [70303, 70312, 1],\n [70320, 70366, 1],\n [70405, 70412, 1],\n [70415, 70416, 1],\n [70419, 70440, 1],\n [70442, 70448, 1],\n [70450, 70451, 1],\n [70453, 70457, 1],\n [70461, 70480, 19],\n [70493, 70497, 1],\n [70656, 70708, 1],\n [70727, 70730, 1],\n [70751, 70753, 1],\n [70784, 70831, 1],\n [70852, 70853, 1],\n [70855, 71040, 185],\n [71041, 71086, 1],\n [71128, 71131, 1],\n [71168, 71215, 1],\n [71236, 71296, 60],\n [71297, 71338, 1],\n [71352, 71424, 72],\n [71425, 71450, 1],\n [71488, 71494, 1],\n [71680, 71723, 1],\n [71840, 71903, 1],\n [71935, 71942, 1],\n [71945, 71948, 3],\n [71949, 71955, 1],\n [71957, 71958, 1],\n [71960, 71983, 1],\n [71999, 72001, 2],\n [72096, 72103, 1],\n [72106, 72144, 1],\n [72161, 72163, 2],\n [72192, 72203, 11],\n [72204, 72242, 1],\n [72250, 72272, 22],\n [72284, 72329, 1],\n [72349, 72368, 19],\n [72369, 72440, 1],\n [72704, 72712, 1],\n [72714, 72750, 1],\n [72768, 72818, 50],\n [72819, 72847, 1],\n [72960, 72966, 1],\n [72968, 72969, 1],\n [72971, 73008, 1],\n [73030, 73056, 26],\n [73057, 73061, 1],\n [73063, 73064, 1],\n [73066, 73097, 1],\n [73112, 73440, 328],\n [73441, 73458, 1],\n [73474, 73476, 2],\n [73477, 73488, 1],\n [73490, 73523, 1],\n [73648, 73728, 80],\n [73729, 74649, 1],\n [74880, 75075, 1],\n [77712, 77808, 1],\n [77824, 78895, 1],\n [78913, 78918, 1],\n [82944, 83526, 1],\n [92160, 92728, 1],\n [92736, 92766, 1],\n [92784, 92862, 1],\n [92880, 92909, 1],\n [92928, 92975, 1],\n [92992, 92995, 1],\n [93027, 93047, 1],\n [93053, 93071, 1],\n [93760, 93823, 1],\n [93952, 94026, 1],\n [94032, 94099, 67],\n [94100, 94111, 1],\n [94176, 94177, 1],\n [94179, 94208, 29],\n [94209, 100343, 1],\n [100352, 101589, 1],\n [101632, 101640, 1],\n [110576, 110579, 1],\n [110581, 110587, 1],\n [110589, 110590, 1],\n [110592, 110882, 1],\n [110898, 110928, 30],\n [110929, 110930, 1],\n [110933, 110948, 15],\n [110949, 110951, 1],\n [110960, 111355, 1],\n [113664, 113770, 1],\n [113776, 113788, 1],\n [113792, 113800, 1],\n [113808, 113817, 1],\n [119808, 119892, 1],\n [119894, 119964, 1],\n [119966, 119967, 1],\n [119970, 119973, 3],\n [119974, 119977, 3],\n [119978, 119980, 1],\n [119982, 119993, 1],\n [119995, 119997, 2],\n [119998, 120003, 1],\n [120005, 120069, 1],\n [120071, 120074, 1],\n [120077, 120084, 1],\n [120086, 120092, 1],\n [120094, 120121, 1],\n [120123, 120126, 1],\n [120128, 120132, 1],\n [120134, 120138, 4],\n [120139, 120144, 1],\n [120146, 120485, 1],\n [120488, 120512, 1],\n [120514, 120538, 1],\n [120540, 120570, 1],\n [120572, 120596, 1],\n [120598, 120628, 1],\n [120630, 120654, 1],\n [120656, 120686, 1],\n [120688, 120712, 1],\n [120714, 120744, 1],\n [120746, 120770, 1],\n [120772, 120779, 1],\n [122624, 122654, 1],\n [122661, 122666, 1],\n [122928, 122989, 1],\n [123136, 123180, 1],\n [123191, 123197, 1],\n [123214, 123536, 322],\n [123537, 123565, 1],\n [123584, 123627, 1],\n [124112, 124139, 1],\n [124896, 124902, 1],\n [124904, 124907, 1],\n [124909, 124910, 1],\n [124912, 124926, 1],\n [124928, 125124, 1],\n [125184, 125251, 1],\n [125259, 126464, 1205],\n [126465, 126467, 1],\n [126469, 126495, 1],\n [126497, 126498, 1],\n [126500, 126503, 3],\n [126505, 126514, 1],\n [126516, 126519, 1],\n [126521, 126523, 2],\n [126530, 126535, 5],\n [126537, 126541, 2],\n [126542, 126543, 1],\n [126545, 126546, 1],\n [126548, 126551, 3],\n [126553, 126561, 2],\n [126562, 126564, 2],\n [126567, 126570, 1],\n [126572, 126578, 1],\n [126580, 126583, 1],\n [126585, 126588, 1],\n [126590, 126592, 2],\n [126593, 126601, 1],\n [126603, 126619, 1],\n [126625, 126627, 1],\n [126629, 126633, 1],\n [126635, 126651, 1],\n [131072, 173791, 1],\n [173824, 177977, 1],\n [177984, 178205, 1],\n [178208, 183969, 1],\n [183984, 191456, 1],\n [194560, 195101, 1],\n [196608, 201546, 1],\n [201552, 205743, 1]\n ]\n static foldL = [[837, 837, 1]]\n static Ll = [\n [97, 122, 1],\n [181, 223, 42],\n [224, 246, 1],\n [248, 255, 1],\n [257, 311, 2],\n [312, 328, 2],\n [329, 375, 2],\n [378, 382, 2],\n [383, 384, 1],\n [387, 389, 2],\n [392, 396, 4],\n [397, 402, 5],\n [405, 409, 4],\n [410, 411, 1],\n [414, 417, 3],\n [419, 421, 2],\n [424, 426, 2],\n [427, 429, 2],\n [432, 436, 4],\n [438, 441, 3],\n [442, 445, 3],\n [446, 447, 1],\n [454, 460, 3],\n [462, 476, 2],\n [477, 495, 2],\n [496, 499, 3],\n [501, 505, 4],\n [507, 563, 2],\n [564, 569, 1],\n [572, 575, 3],\n [576, 578, 2],\n [583, 591, 2],\n [592, 659, 1],\n [661, 687, 1],\n [881, 883, 2],\n [887, 891, 4],\n [892, 893, 1],\n [912, 940, 28],\n [941, 974, 1],\n [976, 977, 1],\n [981, 983, 1],\n [985, 1007, 2],\n [1008, 1011, 1],\n [1013, 1019, 3],\n [1020, 1072, 52],\n [1073, 1119, 1],\n [1121, 1153, 2],\n [1163, 1215, 2],\n [1218, 1230, 2],\n [1231, 1327, 2],\n [1376, 1416, 1],\n [4304, 4346, 1],\n [4349, 4351, 1],\n [5112, 5117, 1],\n [7296, 7304, 1],\n [7424, 7467, 1],\n [7531, 7543, 1],\n [7545, 7578, 1],\n [7681, 7829, 2],\n [7830, 7837, 1],\n [7839, 7935, 2],\n [7936, 7943, 1],\n [7952, 7957, 1],\n [7968, 7975, 1],\n [7984, 7991, 1],\n [8000, 8005, 1],\n [8016, 8023, 1],\n [8032, 8039, 1],\n [8048, 8061, 1],\n [8064, 8071, 1],\n [8080, 8087, 1],\n [8096, 8103, 1],\n [8112, 8116, 1],\n [8118, 8119, 1],\n [8126, 8130, 4],\n [8131, 8132, 1],\n [8134, 8135, 1],\n [8144, 8147, 1],\n [8150, 8151, 1],\n [8160, 8167, 1],\n [8178, 8180, 1],\n [8182, 8183, 1],\n [8458, 8462, 4],\n [8463, 8467, 4],\n [8495, 8505, 5],\n [8508, 8509, 1],\n [8518, 8521, 1],\n [8526, 8580, 54],\n [11312, 11359, 1],\n [11361, 11365, 4],\n [11366, 11372, 2],\n [11377, 11379, 2],\n [11380, 11382, 2],\n [11383, 11387, 1],\n [11393, 11491, 2],\n [11492, 11500, 8],\n [11502, 11507, 5],\n [11520, 11557, 1],\n [11559, 11565, 6],\n [42561, 42605, 2],\n [42625, 42651, 2],\n [42787, 42799, 2],\n [42800, 42801, 1],\n [42803, 42865, 2],\n [42866, 42872, 1],\n [42874, 42876, 2],\n [42879, 42887, 2],\n [42892, 42894, 2],\n [42897, 42899, 2],\n [42900, 42901, 1],\n [42903, 42921, 2],\n [42927, 42933, 6],\n [42935, 42947, 2],\n [42952, 42954, 2],\n [42961, 42969, 2],\n [42998, 43002, 4],\n [43824, 43866, 1],\n [43872, 43880, 1],\n [43888, 43967, 1],\n [64256, 64262, 1],\n [64275, 64279, 1],\n [65345, 65370, 1],\n [66600, 66639, 1],\n [66776, 66811, 1],\n [66967, 66977, 1],\n [66979, 66993, 1],\n [66995, 67001, 1],\n [67003, 67004, 1],\n [68800, 68850, 1],\n [71872, 71903, 1],\n [93792, 93823, 1],\n [119834, 119859, 1],\n [119886, 119892, 1],\n [119894, 119911, 1],\n [119938, 119963, 1],\n [119990, 119993, 1],\n [119995, 119997, 2],\n [119998, 120003, 1],\n [120005, 120015, 1],\n [120042, 120067, 1],\n [120094, 120119, 1],\n [120146, 120171, 1],\n [120198, 120223, 1],\n [120250, 120275, 1],\n [120302, 120327, 1],\n [120354, 120379, 1],\n [120406, 120431, 1],\n [120458, 120485, 1],\n [120514, 120538, 1],\n [120540, 120545, 1],\n [120572, 120596, 1],\n [120598, 120603, 1],\n [120630, 120654, 1],\n [120656, 120661, 1],\n [120688, 120712, 1],\n [120714, 120719, 1],\n [120746, 120770, 1],\n [120772, 120777, 1],\n [120779, 122624, 1845],\n [122625, 122633, 1],\n [122635, 122654, 1],\n [122661, 122666, 1],\n [125218, 125251, 1]\n ]\n static foldLl = [\n [65, 90, 1],\n [192, 214, 1],\n [216, 222, 1],\n [256, 302, 2],\n [306, 310, 2],\n [313, 327, 2],\n [330, 376, 2],\n [377, 381, 2],\n [385, 386, 1],\n [388, 390, 2],\n [391, 393, 2],\n [394, 395, 1],\n [398, 401, 1],\n [403, 404, 1],\n [406, 408, 1],\n [412, 413, 1],\n [415, 416, 1],\n [418, 422, 2],\n [423, 425, 2],\n [428, 430, 2],\n [431, 433, 2],\n [434, 435, 1],\n [437, 439, 2],\n [440, 444, 4],\n [452, 453, 1],\n [455, 456, 1],\n [458, 459, 1],\n [461, 475, 2],\n [478, 494, 2],\n [497, 498, 1],\n [500, 502, 2],\n [503, 504, 1],\n [506, 562, 2],\n [570, 571, 1],\n [573, 574, 1],\n [577, 579, 2],\n [580, 582, 1],\n [584, 590, 2],\n [837, 880, 43],\n [882, 886, 4],\n [895, 902, 7],\n [904, 906, 1],\n [908, 910, 2],\n [911, 913, 2],\n [914, 929, 1],\n [931, 939, 1],\n [975, 984, 9],\n [986, 1006, 2],\n [1012, 1015, 3],\n [1017, 1018, 1],\n [1021, 1071, 1],\n [1120, 1152, 2],\n [1162, 1216, 2],\n [1217, 1229, 2],\n [1232, 1326, 2],\n [1329, 1366, 1],\n [4256, 4293, 1],\n [4295, 4301, 6],\n [5024, 5109, 1],\n [7312, 7354, 1],\n [7357, 7359, 1],\n [7680, 7828, 2],\n [7838, 7934, 2],\n [7944, 7951, 1],\n [7960, 7965, 1],\n [7976, 7983, 1],\n [7992, 7999, 1],\n [8008, 8013, 1],\n [8025, 8031, 2],\n [8040, 8047, 1],\n [8072, 8079, 1],\n [8088, 8095, 1],\n [8104, 8111, 1],\n [8120, 8124, 1],\n [8136, 8140, 1],\n [8152, 8155, 1],\n [8168, 8172, 1],\n [8184, 8188, 1],\n [8486, 8490, 4],\n [8491, 8498, 7],\n [8579, 11264, 2685],\n [11265, 11311, 1],\n [11360, 11362, 2],\n [11363, 11364, 1],\n [11367, 11373, 2],\n [11374, 11376, 1],\n [11378, 11381, 3],\n [11390, 11392, 1],\n [11394, 11490, 2],\n [11499, 11501, 2],\n [11506, 42560, 31054],\n [42562, 42604, 2],\n [42624, 42650, 2],\n [42786, 42798, 2],\n [42802, 42862, 2],\n [42873, 42877, 2],\n [42878, 42886, 2],\n [42891, 42893, 2],\n [42896, 42898, 2],\n [42902, 42922, 2],\n [42923, 42926, 1],\n [42928, 42932, 1],\n [42934, 42948, 2],\n [42949, 42951, 1],\n [42953, 42960, 7],\n [42966, 42968, 2],\n [42997, 65313, 22316],\n [65314, 65338, 1],\n [66560, 66599, 1],\n [66736, 66771, 1],\n [66928, 66938, 1],\n [66940, 66954, 1],\n [66956, 66962, 1],\n [66964, 66965, 1],\n [68736, 68786, 1],\n [71840, 71871, 1],\n [93760, 93791, 1],\n [125184, 125217, 1]\n ]\n static Lm = [\n [688, 705, 1],\n [710, 721, 1],\n [736, 740, 1],\n [748, 750, 2],\n [884, 890, 6],\n [1369, 1600, 231],\n [1765, 1766, 1],\n [2036, 2037, 1],\n [2042, 2074, 32],\n [2084, 2088, 4],\n [2249, 2417, 168],\n [3654, 3782, 128],\n [4348, 6103, 1755],\n [6211, 6823, 612],\n [7288, 7293, 1],\n [7468, 7530, 1],\n [7544, 7579, 35],\n [7580, 7615, 1],\n [8305, 8319, 14],\n [8336, 8348, 1],\n [11388, 11389, 1],\n [11631, 11823, 192],\n [12293, 12337, 44],\n [12338, 12341, 1],\n [12347, 12445, 98],\n [12446, 12540, 94],\n [12541, 12542, 1],\n [40981, 42232, 1251],\n [42233, 42237, 1],\n [42508, 42623, 115],\n [42652, 42653, 1],\n [42775, 42783, 1],\n [42864, 42888, 24],\n [42994, 42996, 1],\n [43000, 43001, 1],\n [43471, 43494, 23],\n [43632, 43741, 109],\n [43763, 43764, 1],\n [43868, 43871, 1],\n [43881, 65392, 21511],\n [65438, 65439, 1],\n [67456, 67461, 1],\n [67463, 67504, 1],\n [67506, 67514, 1],\n [92992, 92995, 1],\n [94099, 94111, 1],\n [94176, 94177, 1],\n [94179, 110576, 16397],\n [110577, 110579, 1],\n [110581, 110587, 1],\n [110589, 110590, 1],\n [122928, 122989, 1],\n [123191, 123197, 1],\n [124139, 125259, 1120]\n ]\n static Lo = [\n [170, 186, 16],\n [443, 448, 5],\n [449, 451, 1],\n [660, 1488, 828],\n [1489, 1514, 1],\n [1519, 1522, 1],\n [1568, 1599, 1],\n [1601, 1610, 1],\n [1646, 1647, 1],\n [1649, 1747, 1],\n [1749, 1774, 25],\n [1775, 1786, 11],\n [1787, 1788, 1],\n [1791, 1808, 17],\n [1810, 1839, 1],\n [1869, 1957, 1],\n [1969, 1994, 25],\n [1995, 2026, 1],\n [2048, 2069, 1],\n [2112, 2136, 1],\n [2144, 2154, 1],\n [2160, 2183, 1],\n [2185, 2190, 1],\n [2208, 2248, 1],\n [2308, 2361, 1],\n [2365, 2384, 19],\n [2392, 2401, 1],\n [2418, 2432, 1],\n [2437, 2444, 1],\n [2447, 2448, 1],\n [2451, 2472, 1],\n [2474, 2480, 1],\n [2482, 2486, 4],\n [2487, 2489, 1],\n [2493, 2510, 17],\n [2524, 2525, 1],\n [2527, 2529, 1],\n [2544, 2545, 1],\n [2556, 2565, 9],\n [2566, 2570, 1],\n [2575, 2576, 1],\n [2579, 2600, 1],\n [2602, 2608, 1],\n [2610, 2611, 1],\n [2613, 2614, 1],\n [2616, 2617, 1],\n [2649, 2652, 1],\n [2654, 2674, 20],\n [2675, 2676, 1],\n [2693, 2701, 1],\n [2703, 2705, 1],\n [2707, 2728, 1],\n [2730, 2736, 1],\n [2738, 2739, 1],\n [2741, 2745, 1],\n [2749, 2768, 19],\n [2784, 2785, 1],\n [2809, 2821, 12],\n [2822, 2828, 1],\n [2831, 2832, 1],\n [2835, 2856, 1],\n [2858, 2864, 1],\n [2866, 2867, 1],\n [2869, 2873, 1],\n [2877, 2908, 31],\n [2909, 2911, 2],\n [2912, 2913, 1],\n [2929, 2947, 18],\n [2949, 2954, 1],\n [2958, 2960, 1],\n [2962, 2965, 1],\n [2969, 2970, 1],\n [2972, 2974, 2],\n [2975, 2979, 4],\n [2980, 2984, 4],\n [2985, 2986, 1],\n [2990, 3001, 1],\n [3024, 3077, 53],\n [3078, 3084, 1],\n [3086, 3088, 1],\n [3090, 3112, 1],\n [3114, 3129, 1],\n [3133, 3160, 27],\n [3161, 3162, 1],\n [3165, 3168, 3],\n [3169, 3200, 31],\n [3205, 3212, 1],\n [3214, 3216, 1],\n [3218, 3240, 1],\n [3242, 3251, 1],\n [3253, 3257, 1],\n [3261, 3293, 32],\n [3294, 3296, 2],\n [3297, 3313, 16],\n [3314, 3332, 18],\n [3333, 3340, 1],\n [3342, 3344, 1],\n [3346, 3386, 1],\n [3389, 3406, 17],\n [3412, 3414, 1],\n [3423, 3425, 1],\n [3450, 3455, 1],\n [3461, 3478, 1],\n [3482, 3505, 1],\n [3507, 3515, 1],\n [3517, 3520, 3],\n [3521, 3526, 1],\n [3585, 3632, 1],\n [3634, 3635, 1],\n [3648, 3653, 1],\n [3713, 3714, 1],\n [3716, 3718, 2],\n [3719, 3722, 1],\n [3724, 3747, 1],\n [3749, 3751, 2],\n [3752, 3760, 1],\n [3762, 3763, 1],\n [3773, 3776, 3],\n [3777, 3780, 1],\n [3804, 3807, 1],\n [3840, 3904, 64],\n [3905, 3911, 1],\n [3913, 3948, 1],\n [3976, 3980, 1],\n [4096, 4138, 1],\n [4159, 4176, 17],\n [4177, 4181, 1],\n [4186, 4189, 1],\n [4193, 4197, 4],\n [4198, 4206, 8],\n [4207, 4208, 1],\n [4213, 4225, 1],\n [4238, 4352, 114],\n [4353, 4680, 1],\n [4682, 4685, 1],\n [4688, 4694, 1],\n [4696, 4698, 2],\n [4699, 4701, 1],\n [4704, 4744, 1],\n [4746, 4749, 1],\n [4752, 4784, 1],\n [4786, 4789, 1],\n [4792, 4798, 1],\n [4800, 4802, 2],\n [4803, 4805, 1],\n [4808, 4822, 1],\n [4824, 4880, 1],\n [4882, 4885, 1],\n [4888, 4954, 1],\n [4992, 5007, 1],\n [5121, 5740, 1],\n [5743, 5759, 1],\n [5761, 5786, 1],\n [5792, 5866, 1],\n [5873, 5880, 1],\n [5888, 5905, 1],\n [5919, 5937, 1],\n [5952, 5969, 1],\n [5984, 5996, 1],\n [5998, 6000, 1],\n [6016, 6067, 1],\n [6108, 6176, 68],\n [6177, 6210, 1],\n [6212, 6264, 1],\n [6272, 6276, 1],\n [6279, 6312, 1],\n [6314, 6320, 6],\n [6321, 6389, 1],\n [6400, 6430, 1],\n [6480, 6509, 1],\n [6512, 6516, 1],\n [6528, 6571, 1],\n [6576, 6601, 1],\n [6656, 6678, 1],\n [6688, 6740, 1],\n [6917, 6963, 1],\n [6981, 6988, 1],\n [7043, 7072, 1],\n [7086, 7087, 1],\n [7098, 7141, 1],\n [7168, 7203, 1],\n [7245, 7247, 1],\n [7258, 7287, 1],\n [7401, 7404, 1],\n [7406, 7411, 1],\n [7413, 7414, 1],\n [7418, 8501, 1083],\n [8502, 8504, 1],\n [11568, 11623, 1],\n [11648, 11670, 1],\n [11680, 11686, 1],\n [11688, 11694, 1],\n [11696, 11702, 1],\n [11704, 11710, 1],\n [11712, 11718, 1],\n [11720, 11726, 1],\n [11728, 11734, 1],\n [11736, 11742, 1],\n [12294, 12348, 54],\n [12353, 12438, 1],\n [12447, 12449, 2],\n [12450, 12538, 1],\n [12543, 12549, 6],\n [12550, 12591, 1],\n [12593, 12686, 1],\n [12704, 12735, 1],\n [12784, 12799, 1],\n [13312, 19903, 1],\n [19968, 40980, 1],\n [40982, 42124, 1],\n [42192, 42231, 1],\n [42240, 42507, 1],\n [42512, 42527, 1],\n [42538, 42539, 1],\n [42606, 42656, 50],\n [42657, 42725, 1],\n [42895, 42999, 104],\n [43003, 43009, 1],\n [43011, 43013, 1],\n [43015, 43018, 1],\n [43020, 43042, 1],\n [43072, 43123, 1],\n [43138, 43187, 1],\n [43250, 43255, 1],\n [43259, 43261, 2],\n [43262, 43274, 12],\n [43275, 43301, 1],\n [43312, 43334, 1],\n [43360, 43388, 1],\n [43396, 43442, 1],\n [43488, 43492, 1],\n [43495, 43503, 1],\n [43514, 43518, 1],\n [43520, 43560, 1],\n [43584, 43586, 1],\n [43588, 43595, 1],\n [43616, 43631, 1],\n [43633, 43638, 1],\n [43642, 43646, 4],\n [43647, 43695, 1],\n [43697, 43701, 4],\n [43702, 43705, 3],\n [43706, 43709, 1],\n [43712, 43714, 2],\n [43739, 43740, 1],\n [43744, 43754, 1],\n [43762, 43777, 15],\n [43778, 43782, 1],\n [43785, 43790, 1],\n [43793, 43798, 1],\n [43808, 43814, 1],\n [43816, 43822, 1],\n [43968, 44002, 1],\n [44032, 55203, 1],\n [55216, 55238, 1],\n [55243, 55291, 1],\n [63744, 64109, 1],\n [64112, 64217, 1],\n [64285, 64287, 2],\n [64288, 64296, 1],\n [64298, 64310, 1],\n [64312, 64316, 1],\n [64318, 64320, 2],\n [64321, 64323, 2],\n [64324, 64326, 2],\n [64327, 64433, 1],\n [64467, 64829, 1],\n [64848, 64911, 1],\n [64914, 64967, 1],\n [65008, 65019, 1],\n [65136, 65140, 1],\n [65142, 65276, 1],\n [65382, 65391, 1],\n [65393, 65437, 1],\n [65440, 65470, 1],\n [65474, 65479, 1],\n [65482, 65487, 1],\n [65490, 65495, 1],\n [65498, 65500, 1],\n [65536, 65547, 1],\n [65549, 65574, 1],\n [65576, 65594, 1],\n [65596, 65597, 1],\n [65599, 65613, 1],\n [65616, 65629, 1],\n [65664, 65786, 1],\n [66176, 66204, 1],\n [66208, 66256, 1],\n [66304, 66335, 1],\n [66349, 66368, 1],\n [66370, 66377, 1],\n [66384, 66421, 1],\n [66432, 66461, 1],\n [66464, 66499, 1],\n [66504, 66511, 1],\n [66640, 66717, 1],\n [66816, 66855, 1],\n [66864, 66915, 1],\n [67072, 67382, 1],\n [67392, 67413, 1],\n [67424, 67431, 1],\n [67584, 67589, 1],\n [67592, 67594, 2],\n [67595, 67637, 1],\n [67639, 67640, 1],\n [67644, 67647, 3],\n [67648, 67669, 1],\n [67680, 67702, 1],\n [67712, 67742, 1],\n [67808, 67826, 1],\n [67828, 67829, 1],\n [67840, 67861, 1],\n [67872, 67897, 1],\n [67968, 68023, 1],\n [68030, 68031, 1],\n [68096, 68112, 16],\n [68113, 68115, 1],\n [68117, 68119, 1],\n [68121, 68149, 1],\n [68192, 68220, 1],\n [68224, 68252, 1],\n [68288, 68295, 1],\n [68297, 68324, 1],\n [68352, 68405, 1],\n [68416, 68437, 1],\n [68448, 68466, 1],\n [68480, 68497, 1],\n [68608, 68680, 1],\n [68864, 68899, 1],\n [69248, 69289, 1],\n [69296, 69297, 1],\n [69376, 69404, 1],\n [69415, 69424, 9],\n [69425, 69445, 1],\n [69488, 69505, 1],\n [69552, 69572, 1],\n [69600, 69622, 1],\n [69635, 69687, 1],\n [69745, 69746, 1],\n [69749, 69763, 14],\n [69764, 69807, 1],\n [69840, 69864, 1],\n [69891, 69926, 1],\n [69956, 69959, 3],\n [69968, 70002, 1],\n [70006, 70019, 13],\n [70020, 70066, 1],\n [70081, 70084, 1],\n [70106, 70108, 2],\n [70144, 70161, 1],\n [70163, 70187, 1],\n [70207, 70208, 1],\n [70272, 70278, 1],\n [70280, 70282, 2],\n [70283, 70285, 1],\n [70287, 70301, 1],\n [70303, 70312, 1],\n [70320, 70366, 1],\n [70405, 70412, 1],\n [70415, 70416, 1],\n [70419, 70440, 1],\n [70442, 70448, 1],\n [70450, 70451, 1],\n [70453, 70457, 1],\n [70461, 70480, 19],\n [70493, 70497, 1],\n [70656, 70708, 1],\n [70727, 70730, 1],\n [70751, 70753, 1],\n [70784, 70831, 1],\n [70852, 70853, 1],\n [70855, 71040, 185],\n [71041, 71086, 1],\n [71128, 71131, 1],\n [71168, 71215, 1],\n [71236, 71296, 60],\n [71297, 71338, 1],\n [71352, 71424, 72],\n [71425, 71450, 1],\n [71488, 71494, 1],\n [71680, 71723, 1],\n [71935, 71942, 1],\n [71945, 71948, 3],\n [71949, 71955, 1],\n [71957, 71958, 1],\n [71960, 71983, 1],\n [71999, 72001, 2],\n [72096, 72103, 1],\n [72106, 72144, 1],\n [72161, 72163, 2],\n [72192, 72203, 11],\n [72204, 72242, 1],\n [72250, 72272, 22],\n [72284, 72329, 1],\n [72349, 72368, 19],\n [72369, 72440, 1],\n [72704, 72712, 1],\n [72714, 72750, 1],\n [72768, 72818, 50],\n [72819, 72847, 1],\n [72960, 72966, 1],\n [72968, 72969, 1],\n [72971, 73008, 1],\n [73030, 73056, 26],\n [73057, 73061, 1],\n [73063, 73064, 1],\n [73066, 73097, 1],\n [73112, 73440, 328],\n [73441, 73458, 1],\n [73474, 73476, 2],\n [73477, 73488, 1],\n [73490, 73523, 1],\n [73648, 73728, 80],\n [73729, 74649, 1],\n [74880, 75075, 1],\n [77712, 77808, 1],\n [77824, 78895, 1],\n [78913, 78918, 1],\n [82944, 83526, 1],\n [92160, 92728, 1],\n [92736, 92766, 1],\n [92784, 92862, 1],\n [92880, 92909, 1],\n [92928, 92975, 1],\n [93027, 93047, 1],\n [93053, 93071, 1],\n [93952, 94026, 1],\n [94032, 94208, 176],\n [94209, 100343, 1],\n [100352, 101589, 1],\n [101632, 101640, 1],\n [110592, 110882, 1],\n [110898, 110928, 30],\n [110929, 110930, 1],\n [110933, 110948, 15],\n [110949, 110951, 1],\n [110960, 111355, 1],\n [113664, 113770, 1],\n [113776, 113788, 1],\n [113792, 113800, 1],\n [113808, 113817, 1],\n [122634, 123136, 502],\n [123137, 123180, 1],\n [123214, 123536, 322],\n [123537, 123565, 1],\n [123584, 123627, 1],\n [124112, 124138, 1],\n [124896, 124902, 1],\n [124904, 124907, 1],\n [124909, 124910, 1],\n [124912, 124926, 1],\n [124928, 125124, 1],\n [126464, 126467, 1],\n [126469, 126495, 1],\n [126497, 126498, 1],\n [126500, 126503, 3],\n [126505, 126514, 1],\n [126516, 126519, 1],\n [126521, 126523, 2],\n [126530, 126535, 5],\n [126537, 126541, 2],\n [126542, 126543, 1],\n [126545, 126546, 1],\n [126548, 126551, 3],\n [126553, 126561, 2],\n [126562, 126564, 2],\n [126567, 126570, 1],\n [126572, 126578, 1],\n [126580, 126583, 1],\n [126585, 126588, 1],\n [126590, 126592, 2],\n [126593, 126601, 1],\n [126603, 126619, 1],\n [126625, 126627, 1],\n [126629, 126633, 1],\n [126635, 126651, 1],\n [131072, 173791, 1],\n [173824, 177977, 1],\n [177984, 178205, 1],\n [178208, 183969, 1],\n [183984, 191456, 1],\n [194560, 195101, 1],\n [196608, 201546, 1],\n [201552, 205743, 1]\n ]\n static Lt = [\n [453, 459, 3],\n [498, 8072, 7574],\n [8073, 8079, 1],\n [8088, 8095, 1],\n [8104, 8111, 1],\n [8124, 8140, 16],\n [8188, 8188, 1]\n ]\n static foldLt = [\n [452, 454, 2],\n [455, 457, 2],\n [458, 460, 2],\n [497, 499, 2],\n [8064, 8071, 1],\n [8080, 8087, 1],\n [8096, 8103, 1],\n [8115, 8131, 16],\n [8179, 8179, 1]\n ]\n static Lu = [\n [65, 90, 1],\n [192, 214, 1],\n [216, 222, 1],\n [256, 310, 2],\n [313, 327, 2],\n [330, 376, 2],\n [377, 381, 2],\n [385, 386, 1],\n [388, 390, 2],\n [391, 393, 2],\n [394, 395, 1],\n [398, 401, 1],\n [403, 404, 1],\n [406, 408, 1],\n [412, 413, 1],\n [415, 416, 1],\n [418, 422, 2],\n [423, 425, 2],\n [428, 430, 2],\n [431, 433, 2],\n [434, 435, 1],\n [437, 439, 2],\n [440, 444, 4],\n [452, 461, 3],\n [463, 475, 2],\n [478, 494, 2],\n [497, 500, 3],\n [502, 504, 1],\n [506, 562, 2],\n [570, 571, 1],\n [573, 574, 1],\n [577, 579, 2],\n [580, 582, 1],\n [584, 590, 2],\n [880, 882, 2],\n [886, 895, 9],\n [902, 904, 2],\n [905, 906, 1],\n [908, 910, 2],\n [911, 913, 2],\n [914, 929, 1],\n [931, 939, 1],\n [975, 978, 3],\n [979, 980, 1],\n [984, 1006, 2],\n [1012, 1015, 3],\n [1017, 1018, 1],\n [1021, 1071, 1],\n [1120, 1152, 2],\n [1162, 1216, 2],\n [1217, 1229, 2],\n [1232, 1326, 2],\n [1329, 1366, 1],\n [4256, 4293, 1],\n [4295, 4301, 6],\n [5024, 5109, 1],\n [7312, 7354, 1],\n [7357, 7359, 1],\n [7680, 7828, 2],\n [7838, 7934, 2],\n [7944, 7951, 1],\n [7960, 7965, 1],\n [7976, 7983, 1],\n [7992, 7999, 1],\n [8008, 8013, 1],\n [8025, 8031, 2],\n [8040, 8047, 1],\n [8120, 8123, 1],\n [8136, 8139, 1],\n [8152, 8155, 1],\n [8168, 8172, 1],\n [8184, 8187, 1],\n [8450, 8455, 5],\n [8459, 8461, 1],\n [8464, 8466, 1],\n [8469, 8473, 4],\n [8474, 8477, 1],\n [8484, 8490, 2],\n [8491, 8493, 1],\n [8496, 8499, 1],\n [8510, 8511, 1],\n [8517, 8579, 62],\n [11264, 11311, 1],\n [11360, 11362, 2],\n [11363, 11364, 1],\n [11367, 11373, 2],\n [11374, 11376, 1],\n [11378, 11381, 3],\n [11390, 11392, 1],\n [11394, 11490, 2],\n [11499, 11501, 2],\n [11506, 42560, 31054],\n [42562, 42604, 2],\n [42624, 42650, 2],\n [42786, 42798, 2],\n [42802, 42862, 2],\n [42873, 42877, 2],\n [42878, 42886, 2],\n [42891, 42893, 2],\n [42896, 42898, 2],\n [42902, 42922, 2],\n [42923, 42926, 1],\n [42928, 42932, 1],\n [42934, 42948, 2],\n [42949, 42951, 1],\n [42953, 42960, 7],\n [42966, 42968, 2],\n [42997, 65313, 22316],\n [65314, 65338, 1],\n [66560, 66599, 1],\n [66736, 66771, 1],\n [66928, 66938, 1],\n [66940, 66954, 1],\n [66956, 66962, 1],\n [66964, 66965, 1],\n [68736, 68786, 1],\n [71840, 71871, 1],\n [93760, 93791, 1],\n [119808, 119833, 1],\n [119860, 119885, 1],\n [119912, 119937, 1],\n [119964, 119966, 2],\n [119967, 119973, 3],\n [119974, 119977, 3],\n [119978, 119980, 1],\n [119982, 119989, 1],\n [120016, 120041, 1],\n [120068, 120069, 1],\n [120071, 120074, 1],\n [120077, 120084, 1],\n [120086, 120092, 1],\n [120120, 120121, 1],\n [120123, 120126, 1],\n [120128, 120132, 1],\n [120134, 120138, 4],\n [120139, 120144, 1],\n [120172, 120197, 1],\n [120224, 120249, 1],\n [120276, 120301, 1],\n [120328, 120353, 1],\n [120380, 120405, 1],\n [120432, 120457, 1],\n [120488, 120512, 1],\n [120546, 120570, 1],\n [120604, 120628, 1],\n [120662, 120686, 1],\n [120720, 120744, 1],\n [120778, 125184, 4406],\n [125185, 125217, 1]\n ]\n static Upper = this.Lu\n static foldLu = [\n [97, 122, 1],\n [181, 223, 42],\n [224, 246, 1],\n [248, 255, 1],\n [257, 303, 2],\n [307, 311, 2],\n [314, 328, 2],\n [331, 375, 2],\n [378, 382, 2],\n [383, 384, 1],\n [387, 389, 2],\n [392, 396, 4],\n [402, 405, 3],\n [409, 410, 1],\n [414, 417, 3],\n [419, 421, 2],\n [424, 429, 5],\n [432, 436, 4],\n [438, 441, 3],\n [445, 447, 2],\n [453, 454, 1],\n [456, 457, 1],\n [459, 460, 1],\n [462, 476, 2],\n [477, 495, 2],\n [498, 499, 1],\n [501, 505, 4],\n [507, 543, 2],\n [547, 563, 2],\n [572, 575, 3],\n [576, 578, 2],\n [583, 591, 2],\n [592, 596, 1],\n [598, 599, 1],\n [601, 603, 2],\n [604, 608, 4],\n [609, 613, 2],\n [614, 616, 2],\n [617, 620, 1],\n [623, 625, 2],\n [626, 629, 3],\n [637, 640, 3],\n [642, 643, 1],\n [647, 652, 1],\n [658, 669, 11],\n [670, 837, 167],\n [881, 883, 2],\n [887, 891, 4],\n [892, 893, 1],\n [940, 943, 1],\n [945, 974, 1],\n [976, 977, 1],\n [981, 983, 1],\n [985, 1007, 2],\n [1008, 1011, 1],\n [1013, 1019, 3],\n [1072, 1119, 1],\n [1121, 1153, 2],\n [1163, 1215, 2],\n [1218, 1230, 2],\n [1231, 1327, 2],\n [1377, 1414, 1],\n [4304, 4346, 1],\n [4349, 4351, 1],\n [5112, 5117, 1],\n [7296, 7304, 1],\n [7545, 7549, 4],\n [7566, 7681, 115],\n [7683, 7829, 2],\n [7835, 7841, 6],\n [7843, 7935, 2],\n [7936, 7943, 1],\n [7952, 7957, 1],\n [7968, 7975, 1],\n [7984, 7991, 1],\n [8000, 8005, 1],\n [8017, 8023, 2],\n [8032, 8039, 1],\n [8048, 8061, 1],\n [8112, 8113, 1],\n [8126, 8144, 18],\n [8145, 8160, 15],\n [8161, 8165, 4],\n [8526, 8580, 54],\n [11312, 11359, 1],\n [11361, 11365, 4],\n [11366, 11372, 2],\n [11379, 11382, 3],\n [11393, 11491, 2],\n [11500, 11502, 2],\n [11507, 11520, 13],\n [11521, 11557, 1],\n [11559, 11565, 6],\n [42561, 42605, 2],\n [42625, 42651, 2],\n [42787, 42799, 2],\n [42803, 42863, 2],\n [42874, 42876, 2],\n [42879, 42887, 2],\n [42892, 42897, 5],\n [42899, 42900, 1],\n [42903, 42921, 2],\n [42933, 42947, 2],\n [42952, 42954, 2],\n [42961, 42967, 6],\n [42969, 42998, 29],\n [43859, 43888, 29],\n [43889, 43967, 1],\n [65345, 65370, 1],\n [66600, 66639, 1],\n [66776, 66811, 1],\n [66967, 66977, 1],\n [66979, 66993, 1],\n [66995, 67001, 1],\n [67003, 67004, 1],\n [68800, 68850, 1],\n [71872, 71903, 1],\n [93792, 93823, 1],\n [125218, 125251, 1]\n ]\n static M = [\n [768, 879, 1],\n [1155, 1161, 1],\n [1425, 1469, 1],\n [1471, 1473, 2],\n [1474, 1476, 2],\n [1477, 1479, 2],\n [1552, 1562, 1],\n [1611, 1631, 1],\n [1648, 1750, 102],\n [1751, 1756, 1],\n [1759, 1764, 1],\n [1767, 1768, 1],\n [1770, 1773, 1],\n [1809, 1840, 31],\n [1841, 1866, 1],\n [1958, 1968, 1],\n [2027, 2035, 1],\n [2045, 2070, 25],\n [2071, 2073, 1],\n [2075, 2083, 1],\n [2085, 2087, 1],\n [2089, 2093, 1],\n [2137, 2139, 1],\n [2200, 2207, 1],\n [2250, 2273, 1],\n [2275, 2307, 1],\n [2362, 2364, 1],\n [2366, 2383, 1],\n [2385, 2391, 1],\n [2402, 2403, 1],\n [2433, 2435, 1],\n [2492, 2494, 2],\n [2495, 2500, 1],\n [2503, 2504, 1],\n [2507, 2509, 1],\n [2519, 2530, 11],\n [2531, 2558, 27],\n [2561, 2563, 1],\n [2620, 2622, 2],\n [2623, 2626, 1],\n [2631, 2632, 1],\n [2635, 2637, 1],\n [2641, 2672, 31],\n [2673, 2677, 4],\n [2689, 2691, 1],\n [2748, 2750, 2],\n [2751, 2757, 1],\n [2759, 2761, 1],\n [2763, 2765, 1],\n [2786, 2787, 1],\n [2810, 2815, 1],\n [2817, 2819, 1],\n [2876, 2878, 2],\n [2879, 2884, 1],\n [2887, 2888, 1],\n [2891, 2893, 1],\n [2901, 2903, 1],\n [2914, 2915, 1],\n [2946, 3006, 60],\n [3007, 3010, 1],\n [3014, 3016, 1],\n [3018, 3021, 1],\n [3031, 3072, 41],\n [3073, 3076, 1],\n [3132, 3134, 2],\n [3135, 3140, 1],\n [3142, 3144, 1],\n [3146, 3149, 1],\n [3157, 3158, 1],\n [3170, 3171, 1],\n [3201, 3203, 1],\n [3260, 3262, 2],\n [3263, 3268, 1],\n [3270, 3272, 1],\n [3274, 3277, 1],\n [3285, 3286, 1],\n [3298, 3299, 1],\n [3315, 3328, 13],\n [3329, 3331, 1],\n [3387, 3388, 1],\n [3390, 3396, 1],\n [3398, 3400, 1],\n [3402, 3405, 1],\n [3415, 3426, 11],\n [3427, 3457, 30],\n [3458, 3459, 1],\n [3530, 3535, 5],\n [3536, 3540, 1],\n [3542, 3544, 2],\n [3545, 3551, 1],\n [3570, 3571, 1],\n [3633, 3636, 3],\n [3637, 3642, 1],\n [3655, 3662, 1],\n [3761, 3764, 3],\n [3765, 3772, 1],\n [3784, 3790, 1],\n [3864, 3865, 1],\n [3893, 3897, 2],\n [3902, 3903, 1],\n [3953, 3972, 1],\n [3974, 3975, 1],\n [3981, 3991, 1],\n [3993, 4028, 1],\n [4038, 4139, 101],\n [4140, 4158, 1],\n [4182, 4185, 1],\n [4190, 4192, 1],\n [4194, 4196, 1],\n [4199, 4205, 1],\n [4209, 4212, 1],\n [4226, 4237, 1],\n [4239, 4250, 11],\n [4251, 4253, 1],\n [4957, 4959, 1],\n [5906, 5909, 1],\n [5938, 5940, 1],\n [5970, 5971, 1],\n [6002, 6003, 1],\n [6068, 6099, 1],\n [6109, 6155, 46],\n [6156, 6157, 1],\n [6159, 6277, 118],\n [6278, 6313, 35],\n [6432, 6443, 1],\n [6448, 6459, 1],\n [6679, 6683, 1],\n [6741, 6750, 1],\n [6752, 6780, 1],\n [6783, 6832, 49],\n [6833, 6862, 1],\n [6912, 6916, 1],\n [6964, 6980, 1],\n [7019, 7027, 1],\n [7040, 7042, 1],\n [7073, 7085, 1],\n [7142, 7155, 1],\n [7204, 7223, 1],\n [7376, 7378, 1],\n [7380, 7400, 1],\n [7405, 7412, 7],\n [7415, 7417, 1],\n [7616, 7679, 1],\n [8400, 8432, 1],\n [11503, 11505, 1],\n [11647, 11744, 97],\n [11745, 11775, 1],\n [12330, 12335, 1],\n [12441, 12442, 1],\n [42607, 42610, 1],\n [42612, 42621, 1],\n [42654, 42655, 1],\n [42736, 42737, 1],\n [43010, 43014, 4],\n [43019, 43043, 24],\n [43044, 43047, 1],\n [43052, 43136, 84],\n [43137, 43188, 51],\n [43189, 43205, 1],\n [43232, 43249, 1],\n [43263, 43302, 39],\n [43303, 43309, 1],\n [43335, 43347, 1],\n [43392, 43395, 1],\n [43443, 43456, 1],\n [43493, 43561, 68],\n [43562, 43574, 1],\n [43587, 43596, 9],\n [43597, 43643, 46],\n [43644, 43645, 1],\n [43696, 43698, 2],\n [43699, 43700, 1],\n [43703, 43704, 1],\n [43710, 43711, 1],\n [43713, 43755, 42],\n [43756, 43759, 1],\n [43765, 43766, 1],\n [44003, 44010, 1],\n [44012, 44013, 1],\n [64286, 65024, 738],\n [65025, 65039, 1],\n [65056, 65071, 1],\n [66045, 66272, 227],\n [66422, 66426, 1],\n [68097, 68099, 1],\n [68101, 68102, 1],\n [68108, 68111, 1],\n [68152, 68154, 1],\n [68159, 68325, 166],\n [68326, 68900, 574],\n [68901, 68903, 1],\n [69291, 69292, 1],\n [69373, 69375, 1],\n [69446, 69456, 1],\n [69506, 69509, 1],\n [69632, 69634, 1],\n [69688, 69702, 1],\n [69744, 69747, 3],\n [69748, 69759, 11],\n [69760, 69762, 1],\n [69808, 69818, 1],\n [69826, 69888, 62],\n [69889, 69890, 1],\n [69927, 69940, 1],\n [69957, 69958, 1],\n [70003, 70016, 13],\n [70017, 70018, 1],\n [70067, 70080, 1],\n [70089, 70092, 1],\n [70094, 70095, 1],\n [70188, 70199, 1],\n [70206, 70209, 3],\n [70367, 70378, 1],\n [70400, 70403, 1],\n [70459, 70460, 1],\n [70462, 70468, 1],\n [70471, 70472, 1],\n [70475, 70477, 1],\n [70487, 70498, 11],\n [70499, 70502, 3],\n [70503, 70508, 1],\n [70512, 70516, 1],\n [70709, 70726, 1],\n [70750, 70832, 82],\n [70833, 70851, 1],\n [71087, 71093, 1],\n [71096, 71104, 1],\n [71132, 71133, 1],\n [71216, 71232, 1],\n [71339, 71351, 1],\n [71453, 71467, 1],\n [71724, 71738, 1],\n [71984, 71989, 1],\n [71991, 71992, 1],\n [71995, 71998, 1],\n [72000, 72002, 2],\n [72003, 72145, 142],\n [72146, 72151, 1],\n [72154, 72160, 1],\n [72164, 72193, 29],\n [72194, 72202, 1],\n [72243, 72249, 1],\n [72251, 72254, 1],\n [72263, 72273, 10],\n [72274, 72283, 1],\n [72330, 72345, 1],\n [72751, 72758, 1],\n [72760, 72767, 1],\n [72850, 72871, 1],\n [72873, 72886, 1],\n [73009, 73014, 1],\n [73018, 73020, 2],\n [73021, 73023, 2],\n [73024, 73029, 1],\n [73031, 73098, 67],\n [73099, 73102, 1],\n [73104, 73105, 1],\n [73107, 73111, 1],\n [73459, 73462, 1],\n [73472, 73473, 1],\n [73475, 73524, 49],\n [73525, 73530, 1],\n [73534, 73538, 1],\n [78912, 78919, 7],\n [78920, 78933, 1],\n [92912, 92916, 1],\n [92976, 92982, 1],\n [94031, 94033, 2],\n [94034, 94087, 1],\n [94095, 94098, 1],\n [94180, 94192, 12],\n [94193, 113821, 19628],\n [113822, 118528, 4706],\n [118529, 118573, 1],\n [118576, 118598, 1],\n [119141, 119145, 1],\n [119149, 119154, 1],\n [119163, 119170, 1],\n [119173, 119179, 1],\n [119210, 119213, 1],\n [119362, 119364, 1],\n [121344, 121398, 1],\n [121403, 121452, 1],\n [121461, 121476, 15],\n [121499, 121503, 1],\n [121505, 121519, 1],\n [122880, 122886, 1],\n [122888, 122904, 1],\n [122907, 122913, 1],\n [122915, 122916, 1],\n [122918, 122922, 1],\n [123023, 123184, 161],\n [123185, 123190, 1],\n [123566, 123628, 62],\n [123629, 123631, 1],\n [124140, 124143, 1],\n [125136, 125142, 1],\n [125252, 125258, 1],\n [917760, 917999, 1]\n ]\n static foldM = [\n [921, 953, 32],\n [8126, 8126, 1]\n ]\n static Mc = [\n [2307, 2363, 56],\n [2366, 2368, 1],\n [2377, 2380, 1],\n [2382, 2383, 1],\n [2434, 2435, 1],\n [2494, 2496, 1],\n [2503, 2504, 1],\n [2507, 2508, 1],\n [2519, 2563, 44],\n [2622, 2624, 1],\n [2691, 2750, 59],\n [2751, 2752, 1],\n [2761, 2763, 2],\n [2764, 2818, 54],\n [2819, 2878, 59],\n [2880, 2887, 7],\n [2888, 2891, 3],\n [2892, 2903, 11],\n [3006, 3007, 1],\n [3009, 3010, 1],\n [3014, 3016, 1],\n [3018, 3020, 1],\n [3031, 3073, 42],\n [3074, 3075, 1],\n [3137, 3140, 1],\n [3202, 3203, 1],\n [3262, 3264, 2],\n [3265, 3268, 1],\n [3271, 3272, 1],\n [3274, 3275, 1],\n [3285, 3286, 1],\n [3315, 3330, 15],\n [3331, 3390, 59],\n [3391, 3392, 1],\n [3398, 3400, 1],\n [3402, 3404, 1],\n [3415, 3458, 43],\n [3459, 3535, 76],\n [3536, 3537, 1],\n [3544, 3551, 1],\n [3570, 3571, 1],\n [3902, 3903, 1],\n [3967, 4139, 172],\n [4140, 4145, 5],\n [4152, 4155, 3],\n [4156, 4182, 26],\n [4183, 4194, 11],\n [4195, 4196, 1],\n [4199, 4205, 1],\n [4227, 4228, 1],\n [4231, 4236, 1],\n [4239, 4250, 11],\n [4251, 4252, 1],\n [5909, 5940, 31],\n [6070, 6078, 8],\n [6079, 6085, 1],\n [6087, 6088, 1],\n [6435, 6438, 1],\n [6441, 6443, 1],\n [6448, 6449, 1],\n [6451, 6456, 1],\n [6681, 6682, 1],\n [6741, 6743, 2],\n [6753, 6755, 2],\n [6756, 6765, 9],\n [6766, 6770, 1],\n [6916, 6965, 49],\n [6971, 6973, 2],\n [6974, 6977, 1],\n [6979, 6980, 1],\n [7042, 7073, 31],\n [7078, 7079, 1],\n [7082, 7143, 61],\n [7146, 7148, 1],\n [7150, 7154, 4],\n [7155, 7204, 49],\n [7205, 7211, 1],\n [7220, 7221, 1],\n [7393, 7415, 22],\n [12334, 12335, 1],\n [43043, 43044, 1],\n [43047, 43136, 89],\n [43137, 43188, 51],\n [43189, 43203, 1],\n [43346, 43347, 1],\n [43395, 43444, 49],\n [43445, 43450, 5],\n [43451, 43454, 3],\n [43455, 43456, 1],\n [43567, 43568, 1],\n [43571, 43572, 1],\n [43597, 43643, 46],\n [43645, 43755, 110],\n [43758, 43759, 1],\n [43765, 44003, 238],\n [44004, 44006, 2],\n [44007, 44009, 2],\n [44010, 44012, 2],\n [69632, 69634, 2],\n [69762, 69808, 46],\n [69809, 69810, 1],\n [69815, 69816, 1],\n [69932, 69957, 25],\n [69958, 70018, 60],\n [70067, 70069, 1],\n [70079, 70080, 1],\n [70094, 70188, 94],\n [70189, 70190, 1],\n [70194, 70195, 1],\n [70197, 70368, 171],\n [70369, 70370, 1],\n [70402, 70403, 1],\n [70462, 70463, 1],\n [70465, 70468, 1],\n [70471, 70472, 1],\n [70475, 70477, 1],\n [70487, 70498, 11],\n [70499, 70709, 210],\n [70710, 70711, 1],\n [70720, 70721, 1],\n [70725, 70832, 107],\n [70833, 70834, 1],\n [70841, 70843, 2],\n [70844, 70846, 1],\n [70849, 71087, 238],\n [71088, 71089, 1],\n [71096, 71099, 1],\n [71102, 71216, 114],\n [71217, 71218, 1],\n [71227, 71228, 1],\n [71230, 71340, 110],\n [71342, 71343, 1],\n [71350, 71456, 106],\n [71457, 71462, 5],\n [71724, 71726, 1],\n [71736, 71984, 248],\n [71985, 71989, 1],\n [71991, 71992, 1],\n [71997, 72000, 3],\n [72002, 72145, 143],\n [72146, 72147, 1],\n [72156, 72159, 1],\n [72164, 72249, 85],\n [72279, 72280, 1],\n [72343, 72751, 408],\n [72766, 72873, 107],\n [72881, 72884, 3],\n [73098, 73102, 1],\n [73107, 73108, 1],\n [73110, 73461, 351],\n [73462, 73475, 13],\n [73524, 73525, 1],\n [73534, 73535, 1],\n [73537, 94033, 20496],\n [94034, 94087, 1],\n [94192, 94193, 1],\n [119141, 119142, 1],\n [119149, 119154, 1]\n ]\n static Me = [\n [1160, 1161, 1],\n [6846, 8413, 1567],\n [8414, 8416, 1],\n [8418, 8420, 1],\n [42608, 42610, 1]\n ]\n static Mn = [\n [768, 879, 1],\n [1155, 1159, 1],\n [1425, 1469, 1],\n [1471, 1473, 2],\n [1474, 1476, 2],\n [1477, 1479, 2],\n [1552, 1562, 1],\n [1611, 1631, 1],\n [1648, 1750, 102],\n [1751, 1756, 1],\n [1759, 1764, 1],\n [1767, 1768, 1],\n [1770, 1773, 1],\n [1809, 1840, 31],\n [1841, 1866, 1],\n [1958, 1968, 1],\n [2027, 2035, 1],\n [2045, 2070, 25],\n [2071, 2073, 1],\n [2075, 2083, 1],\n [2085, 2087, 1],\n [2089, 2093, 1],\n [2137, 2139, 1],\n [2200, 2207, 1],\n [2250, 2273, 1],\n [2275, 2306, 1],\n [2362, 2364, 2],\n [2369, 2376, 1],\n [2381, 2385, 4],\n [2386, 2391, 1],\n [2402, 2403, 1],\n [2433, 2492, 59],\n [2497, 2500, 1],\n [2509, 2530, 21],\n [2531, 2558, 27],\n [2561, 2562, 1],\n [2620, 2625, 5],\n [2626, 2631, 5],\n [2632, 2635, 3],\n [2636, 2637, 1],\n [2641, 2672, 31],\n [2673, 2677, 4],\n [2689, 2690, 1],\n [2748, 2753, 5],\n [2754, 2757, 1],\n [2759, 2760, 1],\n [2765, 2786, 21],\n [2787, 2810, 23],\n [2811, 2815, 1],\n [2817, 2876, 59],\n [2879, 2881, 2],\n [2882, 2884, 1],\n [2893, 2901, 8],\n [2902, 2914, 12],\n [2915, 2946, 31],\n [3008, 3021, 13],\n [3072, 3076, 4],\n [3132, 3134, 2],\n [3135, 3136, 1],\n [3142, 3144, 1],\n [3146, 3149, 1],\n [3157, 3158, 1],\n [3170, 3171, 1],\n [3201, 3260, 59],\n [3263, 3270, 7],\n [3276, 3277, 1],\n [3298, 3299, 1],\n [3328, 3329, 1],\n [3387, 3388, 1],\n [3393, 3396, 1],\n [3405, 3426, 21],\n [3427, 3457, 30],\n [3530, 3538, 8],\n [3539, 3540, 1],\n [3542, 3633, 91],\n [3636, 3642, 1],\n [3655, 3662, 1],\n [3761, 3764, 3],\n [3765, 3772, 1],\n [3784, 3790, 1],\n [3864, 3865, 1],\n [3893, 3897, 2],\n [3953, 3966, 1],\n [3968, 3972, 1],\n [3974, 3975, 1],\n [3981, 3991, 1],\n [3993, 4028, 1],\n [4038, 4141, 103],\n [4142, 4144, 1],\n [4146, 4151, 1],\n [4153, 4154, 1],\n [4157, 4158, 1],\n [4184, 4185, 1],\n [4190, 4192, 1],\n [4209, 4212, 1],\n [4226, 4229, 3],\n [4230, 4237, 7],\n [4253, 4957, 704],\n [4958, 4959, 1],\n [5906, 5908, 1],\n [5938, 5939, 1],\n [5970, 5971, 1],\n [6002, 6003, 1],\n [6068, 6069, 1],\n [6071, 6077, 1],\n [6086, 6089, 3],\n [6090, 6099, 1],\n [6109, 6155, 46],\n [6156, 6157, 1],\n [6159, 6277, 118],\n [6278, 6313, 35],\n [6432, 6434, 1],\n [6439, 6440, 1],\n [6450, 6457, 7],\n [6458, 6459, 1],\n [6679, 6680, 1],\n [6683, 6742, 59],\n [6744, 6750, 1],\n [6752, 6754, 2],\n [6757, 6764, 1],\n [6771, 6780, 1],\n [6783, 6832, 49],\n [6833, 6845, 1],\n [6847, 6862, 1],\n [6912, 6915, 1],\n [6964, 6966, 2],\n [6967, 6970, 1],\n [6972, 6978, 6],\n [7019, 7027, 1],\n [7040, 7041, 1],\n [7074, 7077, 1],\n [7080, 7081, 1],\n [7083, 7085, 1],\n [7142, 7144, 2],\n [7145, 7149, 4],\n [7151, 7153, 1],\n [7212, 7219, 1],\n [7222, 7223, 1],\n [7376, 7378, 1],\n [7380, 7392, 1],\n [7394, 7400, 1],\n [7405, 7412, 7],\n [7416, 7417, 1],\n [7616, 7679, 1],\n [8400, 8412, 1],\n [8417, 8421, 4],\n [8422, 8432, 1],\n [11503, 11505, 1],\n [11647, 11744, 97],\n [11745, 11775, 1],\n [12330, 12333, 1],\n [12441, 12442, 1],\n [42607, 42612, 5],\n [42613, 42621, 1],\n [42654, 42655, 1],\n [42736, 42737, 1],\n [43010, 43014, 4],\n [43019, 43045, 26],\n [43046, 43052, 6],\n [43204, 43205, 1],\n [43232, 43249, 1],\n [43263, 43302, 39],\n [43303, 43309, 1],\n [43335, 43345, 1],\n [43392, 43394, 1],\n [43443, 43446, 3],\n [43447, 43449, 1],\n [43452, 43453, 1],\n [43493, 43561, 68],\n [43562, 43566, 1],\n [43569, 43570, 1],\n [43573, 43574, 1],\n [43587, 43596, 9],\n [43644, 43696, 52],\n [43698, 43700, 1],\n [43703, 43704, 1],\n [43710, 43711, 1],\n [43713, 43756, 43],\n [43757, 43766, 9],\n [44005, 44008, 3],\n [44013, 64286, 20273],\n [65024, 65039, 1],\n [65056, 65071, 1],\n [66045, 66272, 227],\n [66422, 66426, 1],\n [68097, 68099, 1],\n [68101, 68102, 1],\n [68108, 68111, 1],\n [68152, 68154, 1],\n [68159, 68325, 166],\n [68326, 68900, 574],\n [68901, 68903, 1],\n [69291, 69292, 1],\n [69373, 69375, 1],\n [69446, 69456, 1],\n [69506, 69509, 1],\n [69633, 69688, 55],\n [69689, 69702, 1],\n [69744, 69747, 3],\n [69748, 69759, 11],\n [69760, 69761, 1],\n [69811, 69814, 1],\n [69817, 69818, 1],\n [69826, 69888, 62],\n [69889, 69890, 1],\n [69927, 69931, 1],\n [69933, 69940, 1],\n [70003, 70016, 13],\n [70017, 70070, 53],\n [70071, 70078, 1],\n [70089, 70092, 1],\n [70095, 70191, 96],\n [70192, 70193, 1],\n [70196, 70198, 2],\n [70199, 70206, 7],\n [70209, 70367, 158],\n [70371, 70378, 1],\n [70400, 70401, 1],\n [70459, 70460, 1],\n [70464, 70502, 38],\n [70503, 70508, 1],\n [70512, 70516, 1],\n [70712, 70719, 1],\n [70722, 70724, 1],\n [70726, 70750, 24],\n [70835, 70840, 1],\n [70842, 70847, 5],\n [70848, 70850, 2],\n [70851, 71090, 239],\n [71091, 71093, 1],\n [71100, 71101, 1],\n [71103, 71104, 1],\n [71132, 71133, 1],\n [71219, 71226, 1],\n [71229, 71231, 2],\n [71232, 71339, 107],\n [71341, 71344, 3],\n [71345, 71349, 1],\n [71351, 71453, 102],\n [71454, 71455, 1],\n [71458, 71461, 1],\n [71463, 71467, 1],\n [71727, 71735, 1],\n [71737, 71738, 1],\n [71995, 71996, 1],\n [71998, 72003, 5],\n [72148, 72151, 1],\n [72154, 72155, 1],\n [72160, 72193, 33],\n [72194, 72202, 1],\n [72243, 72248, 1],\n [72251, 72254, 1],\n [72263, 72273, 10],\n [72274, 72278, 1],\n [72281, 72283, 1],\n [72330, 72342, 1],\n [72344, 72345, 1],\n [72752, 72758, 1],\n [72760, 72765, 1],\n [72767, 72850, 83],\n [72851, 72871, 1],\n [72874, 72880, 1],\n [72882, 72883, 1],\n [72885, 72886, 1],\n [73009, 73014, 1],\n [73018, 73020, 2],\n [73021, 73023, 2],\n [73024, 73029, 1],\n [73031, 73104, 73],\n [73105, 73109, 4],\n [73111, 73459, 348],\n [73460, 73472, 12],\n [73473, 73526, 53],\n [73527, 73530, 1],\n [73536, 73538, 2],\n [78912, 78919, 7],\n [78920, 78933, 1],\n [92912, 92916, 1],\n [92976, 92982, 1],\n [94031, 94095, 64],\n [94096, 94098, 1],\n [94180, 113821, 19641],\n [113822, 118528, 4706],\n [118529, 118573, 1],\n [118576, 118598, 1],\n [119143, 119145, 1],\n [119163, 119170, 1],\n [119173, 119179, 1],\n [119210, 119213, 1],\n [119362, 119364, 1],\n [121344, 121398, 1],\n [121403, 121452, 1],\n [121461, 121476, 15],\n [121499, 121503, 1],\n [121505, 121519, 1],\n [122880, 122886, 1],\n [122888, 122904, 1],\n [122907, 122913, 1],\n [122915, 122916, 1],\n [122918, 122922, 1],\n [123023, 123184, 161],\n [123185, 123190, 1],\n [123566, 123628, 62],\n [123629, 123631, 1],\n [124140, 124143, 1],\n [125136, 125142, 1],\n [125252, 125258, 1],\n [917760, 917999, 1]\n ]\n static foldMn = [\n [921, 953, 32],\n [8126, 8126, 1]\n ]\n static N = [\n [48, 57, 1],\n [178, 179, 1],\n [185, 188, 3],\n [189, 190, 1],\n [1632, 1641, 1],\n [1776, 1785, 1],\n [1984, 1993, 1],\n [2406, 2415, 1],\n [2534, 2543, 1],\n [2548, 2553, 1],\n [2662, 2671, 1],\n [2790, 2799, 1],\n [2918, 2927, 1],\n [2930, 2935, 1],\n [3046, 3058, 1],\n [3174, 3183, 1],\n [3192, 3198, 1],\n [3302, 3311, 1],\n [3416, 3422, 1],\n [3430, 3448, 1],\n [3558, 3567, 1],\n [3664, 3673, 1],\n [3792, 3801, 1],\n [3872, 3891, 1],\n [4160, 4169, 1],\n [4240, 4249, 1],\n [4969, 4988, 1],\n [5870, 5872, 1],\n [6112, 6121, 1],\n [6128, 6137, 1],\n [6160, 6169, 1],\n [6470, 6479, 1],\n [6608, 6618, 1],\n [6784, 6793, 1],\n [6800, 6809, 1],\n [6992, 7001, 1],\n [7088, 7097, 1],\n [7232, 7241, 1],\n [7248, 7257, 1],\n [8304, 8308, 4],\n [8309, 8313, 1],\n [8320, 8329, 1],\n [8528, 8578, 1],\n [8581, 8585, 1],\n [9312, 9371, 1],\n [9450, 9471, 1],\n [10102, 10131, 1],\n [11517, 12295, 778],\n [12321, 12329, 1],\n [12344, 12346, 1],\n [12690, 12693, 1],\n [12832, 12841, 1],\n [12872, 12879, 1],\n [12881, 12895, 1],\n [12928, 12937, 1],\n [12977, 12991, 1],\n [42528, 42537, 1],\n [42726, 42735, 1],\n [43056, 43061, 1],\n [43216, 43225, 1],\n [43264, 43273, 1],\n [43472, 43481, 1],\n [43504, 43513, 1],\n [43600, 43609, 1],\n [44016, 44025, 1],\n [65296, 65305, 1],\n [65799, 65843, 1],\n [65856, 65912, 1],\n [65930, 65931, 1],\n [66273, 66299, 1],\n [66336, 66339, 1],\n [66369, 66378, 9],\n [66513, 66517, 1],\n [66720, 66729, 1],\n [67672, 67679, 1],\n [67705, 67711, 1],\n [67751, 67759, 1],\n [67835, 67839, 1],\n [67862, 67867, 1],\n [68028, 68029, 1],\n [68032, 68047, 1],\n [68050, 68095, 1],\n [68160, 68168, 1],\n [68221, 68222, 1],\n [68253, 68255, 1],\n [68331, 68335, 1],\n [68440, 68447, 1],\n [68472, 68479, 1],\n [68521, 68527, 1],\n [68858, 68863, 1],\n [68912, 68921, 1],\n [69216, 69246, 1],\n [69405, 69414, 1],\n [69457, 69460, 1],\n [69573, 69579, 1],\n [69714, 69743, 1],\n [69872, 69881, 1],\n [69942, 69951, 1],\n [70096, 70105, 1],\n [70113, 70132, 1],\n [70384, 70393, 1],\n [70736, 70745, 1],\n [70864, 70873, 1],\n [71248, 71257, 1],\n [71360, 71369, 1],\n [71472, 71483, 1],\n [71904, 71922, 1],\n [72016, 72025, 1],\n [72784, 72812, 1],\n [73040, 73049, 1],\n [73120, 73129, 1],\n [73552, 73561, 1],\n [73664, 73684, 1],\n [74752, 74862, 1],\n [92768, 92777, 1],\n [92864, 92873, 1],\n [93008, 93017, 1],\n [93019, 93025, 1],\n [93824, 93846, 1],\n [119488, 119507, 1],\n [119520, 119539, 1],\n [119648, 119672, 1],\n [120782, 120831, 1],\n [123200, 123209, 1],\n [123632, 123641, 1],\n [124144, 124153, 1],\n [125127, 125135, 1],\n [125264, 125273, 1],\n [126065, 126123, 1],\n [126125, 126127, 1],\n [126129, 126132, 1],\n [126209, 126253, 1],\n [126255, 126269, 1],\n [127232, 127244, 1],\n [130032, 130041, 1]\n ]\n static Nd = [\n [48, 57, 1],\n [1632, 1641, 1],\n [1776, 1785, 1],\n [1984, 1993, 1],\n [2406, 2415, 1],\n [2534, 2543, 1],\n [2662, 2671, 1],\n [2790, 2799, 1],\n [2918, 2927, 1],\n [3046, 3055, 1],\n [3174, 3183, 1],\n [3302, 3311, 1],\n [3430, 3439, 1],\n [3558, 3567, 1],\n [3664, 3673, 1],\n [3792, 3801, 1],\n [3872, 3881, 1],\n [4160, 4169, 1],\n [4240, 4249, 1],\n [6112, 6121, 1],\n [6160, 6169, 1],\n [6470, 6479, 1],\n [6608, 6617, 1],\n [6784, 6793, 1],\n [6800, 6809, 1],\n [6992, 7001, 1],\n [7088, 7097, 1],\n [7232, 7241, 1],\n [7248, 7257, 1],\n [42528, 42537, 1],\n [43216, 43225, 1],\n [43264, 43273, 1],\n [43472, 43481, 1],\n [43504, 43513, 1],\n [43600, 43609, 1],\n [44016, 44025, 1],\n [65296, 65305, 1],\n [66720, 66729, 1],\n [68912, 68921, 1],\n [69734, 69743, 1],\n [69872, 69881, 1],\n [69942, 69951, 1],\n [70096, 70105, 1],\n [70384, 70393, 1],\n [70736, 70745, 1],\n [70864, 70873, 1],\n [71248, 71257, 1],\n [71360, 71369, 1],\n [71472, 71481, 1],\n [71904, 71913, 1],\n [72016, 72025, 1],\n [72784, 72793, 1],\n [73040, 73049, 1],\n [73120, 73129, 1],\n [73552, 73561, 1],\n [92768, 92777, 1],\n [92864, 92873, 1],\n [93008, 93017, 1],\n [120782, 120831, 1],\n [123200, 123209, 1],\n [123632, 123641, 1],\n [124144, 124153, 1],\n [125264, 125273, 1],\n [130032, 130041, 1]\n ]\n static Nl = [\n [5870, 5872, 1],\n [8544, 8578, 1],\n [8581, 8584, 1],\n [12295, 12321, 26],\n [12322, 12329, 1],\n [12344, 12346, 1],\n [42726, 42735, 1],\n [65856, 65908, 1],\n [66369, 66378, 9],\n [66513, 66517, 1],\n [74752, 74862, 1]\n ]\n static No = [\n [178, 179, 1],\n [185, 188, 3],\n [189, 190, 1],\n [2548, 2553, 1],\n [2930, 2935, 1],\n [3056, 3058, 1],\n [3192, 3198, 1],\n [3416, 3422, 1],\n [3440, 3448, 1],\n [3882, 3891, 1],\n [4969, 4988, 1],\n [6128, 6137, 1],\n [6618, 8304, 1686],\n [8308, 8313, 1],\n [8320, 8329, 1],\n [8528, 8543, 1],\n [8585, 9312, 727],\n [9313, 9371, 1],\n [9450, 9471, 1],\n [10102, 10131, 1],\n [11517, 12690, 1173],\n [12691, 12693, 1],\n [12832, 12841, 1],\n [12872, 12879, 1],\n [12881, 12895, 1],\n [12928, 12937, 1],\n [12977, 12991, 1],\n [43056, 43061, 1],\n [65799, 65843, 1],\n [65909, 65912, 1],\n [65930, 65931, 1],\n [66273, 66299, 1],\n [66336, 66339, 1],\n [67672, 67679, 1],\n [67705, 67711, 1],\n [67751, 67759, 1],\n [67835, 67839, 1],\n [67862, 67867, 1],\n [68028, 68029, 1],\n [68032, 68047, 1],\n [68050, 68095, 1],\n [68160, 68168, 1],\n [68221, 68222, 1],\n [68253, 68255, 1],\n [68331, 68335, 1],\n [68440, 68447, 1],\n [68472, 68479, 1],\n [68521, 68527, 1],\n [68858, 68863, 1],\n [69216, 69246, 1],\n [69405, 69414, 1],\n [69457, 69460, 1],\n [69573, 69579, 1],\n [69714, 69733, 1],\n [70113, 70132, 1],\n [71482, 71483, 1],\n [71914, 71922, 1],\n [72794, 72812, 1],\n [73664, 73684, 1],\n [93019, 93025, 1],\n [93824, 93846, 1],\n [119488, 119507, 1],\n [119520, 119539, 1],\n [119648, 119672, 1],\n [125127, 125135, 1],\n [126065, 126123, 1],\n [126125, 126127, 1],\n [126129, 126132, 1],\n [126209, 126253, 1],\n [126255, 126269, 1],\n [127232, 127244, 1]\n ]\n static P = [\n [33, 35, 1],\n [37, 42, 1],\n [44, 47, 1],\n [58, 59, 1],\n [63, 64, 1],\n [91, 93, 1],\n [95, 123, 28],\n [125, 161, 36],\n [167, 171, 4],\n [182, 183, 1],\n [187, 191, 4],\n [894, 903, 9],\n [1370, 1375, 1],\n [1417, 1418, 1],\n [1470, 1472, 2],\n [1475, 1478, 3],\n [1523, 1524, 1],\n [1545, 1546, 1],\n [1548, 1549, 1],\n [1563, 1565, 2],\n [1566, 1567, 1],\n [1642, 1645, 1],\n [1748, 1792, 44],\n [1793, 1805, 1],\n [2039, 2041, 1],\n [2096, 2110, 1],\n [2142, 2404, 262],\n [2405, 2416, 11],\n [2557, 2678, 121],\n [2800, 3191, 391],\n [3204, 3572, 368],\n [3663, 3674, 11],\n [3675, 3844, 169],\n [3845, 3858, 1],\n [3860, 3898, 38],\n [3899, 3901, 1],\n [3973, 4048, 75],\n [4049, 4052, 1],\n [4057, 4058, 1],\n [4170, 4175, 1],\n [4347, 4960, 613],\n [4961, 4968, 1],\n [5120, 5742, 622],\n [5787, 5788, 1],\n [5867, 5869, 1],\n [5941, 5942, 1],\n [6100, 6102, 1],\n [6104, 6106, 1],\n [6144, 6154, 1],\n [6468, 6469, 1],\n [6686, 6687, 1],\n [6816, 6822, 1],\n [6824, 6829, 1],\n [7002, 7008, 1],\n [7037, 7038, 1],\n [7164, 7167, 1],\n [7227, 7231, 1],\n [7294, 7295, 1],\n [7360, 7367, 1],\n [7379, 8208, 829],\n [8209, 8231, 1],\n [8240, 8259, 1],\n [8261, 8273, 1],\n [8275, 8286, 1],\n [8317, 8318, 1],\n [8333, 8334, 1],\n [8968, 8971, 1],\n [9001, 9002, 1],\n [10088, 10101, 1],\n [10181, 10182, 1],\n [10214, 10223, 1],\n [10627, 10648, 1],\n [10712, 10715, 1],\n [10748, 10749, 1],\n [11513, 11516, 1],\n [11518, 11519, 1],\n [11632, 11776, 144],\n [11777, 11822, 1],\n [11824, 11855, 1],\n [11858, 11869, 1],\n [12289, 12291, 1],\n [12296, 12305, 1],\n [12308, 12319, 1],\n [12336, 12349, 13],\n [12448, 12539, 91],\n [42238, 42239, 1],\n [42509, 42511, 1],\n [42611, 42622, 11],\n [42738, 42743, 1],\n [43124, 43127, 1],\n [43214, 43215, 1],\n [43256, 43258, 1],\n [43260, 43310, 50],\n [43311, 43359, 48],\n [43457, 43469, 1],\n [43486, 43487, 1],\n [43612, 43615, 1],\n [43742, 43743, 1],\n [43760, 43761, 1],\n [44011, 64830, 20819],\n [64831, 65040, 209],\n [65041, 65049, 1],\n [65072, 65106, 1],\n [65108, 65121, 1],\n [65123, 65128, 5],\n [65130, 65131, 1],\n [65281, 65283, 1],\n [65285, 65290, 1],\n [65292, 65295, 1],\n [65306, 65307, 1],\n [65311, 65312, 1],\n [65339, 65341, 1],\n [65343, 65371, 28],\n [65373, 65375, 2],\n [65376, 65381, 1],\n [65792, 65794, 1],\n [66463, 66512, 49],\n [66927, 67671, 744],\n [67871, 67903, 32],\n [68176, 68184, 1],\n [68223, 68336, 113],\n [68337, 68342, 1],\n [68409, 68415, 1],\n [68505, 68508, 1],\n [69293, 69461, 168],\n [69462, 69465, 1],\n [69510, 69513, 1],\n [69703, 69709, 1],\n [69819, 69820, 1],\n [69822, 69825, 1],\n [69952, 69955, 1],\n [70004, 70005, 1],\n [70085, 70088, 1],\n [70093, 70107, 14],\n [70109, 70111, 1],\n [70200, 70205, 1],\n [70313, 70731, 418],\n [70732, 70735, 1],\n [70746, 70747, 1],\n [70749, 70854, 105],\n [71105, 71127, 1],\n [71233, 71235, 1],\n [71264, 71276, 1],\n [71353, 71484, 131],\n [71485, 71486, 1],\n [71739, 72004, 265],\n [72005, 72006, 1],\n [72162, 72255, 93],\n [72256, 72262, 1],\n [72346, 72348, 1],\n [72350, 72354, 1],\n [72448, 72457, 1],\n [72769, 72773, 1],\n [72816, 72817, 1],\n [73463, 73464, 1],\n [73539, 73551, 1],\n [73727, 74864, 1137],\n [74865, 74868, 1],\n [77809, 77810, 1],\n [92782, 92783, 1],\n [92917, 92983, 66],\n [92984, 92987, 1],\n [92996, 93847, 851],\n [93848, 93850, 1],\n [94178, 113823, 19645],\n [121479, 121483, 1],\n [125278, 125279, 1]\n ]\n static Pc = [\n [95, 8255, 8160],\n [8256, 8276, 20],\n [65075, 65076, 1],\n [65101, 65103, 1],\n [65343, 65343, 1]\n ]\n static Pd = [\n [45, 1418, 1373],\n [1470, 5120, 3650],\n [6150, 8208, 2058],\n [8209, 8213, 1],\n [11799, 11802, 3],\n [11834, 11835, 1],\n [11840, 11869, 29],\n [12316, 12336, 20],\n [12448, 65073, 52625],\n [65074, 65112, 38],\n [65123, 65293, 170],\n [69293, 69293, 1]\n ]\n static Pe = [\n [41, 93, 52],\n [125, 3899, 3774],\n [3901, 5788, 1887],\n [8262, 8318, 56],\n [8334, 8969, 635],\n [8971, 9002, 31],\n [10089, 10101, 2],\n [10182, 10215, 33],\n [10217, 10223, 2],\n [10628, 10648, 2],\n [10713, 10715, 2],\n [10749, 11811, 1062],\n [11813, 11817, 2],\n [11862, 11868, 2],\n [12297, 12305, 2],\n [12309, 12315, 2],\n [12318, 12319, 1],\n [64830, 65048, 218],\n [65078, 65092, 2],\n [65096, 65114, 18],\n [65116, 65118, 2],\n [65289, 65341, 52],\n [65373, 65379, 3]\n ]\n static Pf = [\n [187, 8217, 8030],\n [8221, 8250, 29],\n [11779, 11781, 2],\n [11786, 11789, 3],\n [11805, 11809, 4]\n ]\n static Pi = [\n [171, 8216, 8045],\n [8219, 8220, 1],\n [8223, 8249, 26],\n [11778, 11780, 2],\n [11785, 11788, 3],\n [11804, 11808, 4]\n ]\n static Po = [\n [33, 35, 1],\n [37, 39, 1],\n [42, 46, 2],\n [47, 58, 11],\n [59, 63, 4],\n [64, 92, 28],\n [161, 167, 6],\n [182, 183, 1],\n [191, 894, 703],\n [903, 1370, 467],\n [1371, 1375, 1],\n [1417, 1472, 55],\n [1475, 1478, 3],\n [1523, 1524, 1],\n [1545, 1546, 1],\n [1548, 1549, 1],\n [1563, 1565, 2],\n [1566, 1567, 1],\n [1642, 1645, 1],\n [1748, 1792, 44],\n [1793, 1805, 1],\n [2039, 2041, 1],\n [2096, 2110, 1],\n [2142, 2404, 262],\n [2405, 2416, 11],\n [2557, 2678, 121],\n [2800, 3191, 391],\n [3204, 3572, 368],\n [3663, 3674, 11],\n [3675, 3844, 169],\n [3845, 3858, 1],\n [3860, 3973, 113],\n [4048, 4052, 1],\n [4057, 4058, 1],\n [4170, 4175, 1],\n [4347, 4960, 613],\n [4961, 4968, 1],\n [5742, 5867, 125],\n [5868, 5869, 1],\n [5941, 5942, 1],\n [6100, 6102, 1],\n [6104, 6106, 1],\n [6144, 6149, 1],\n [6151, 6154, 1],\n [6468, 6469, 1],\n [6686, 6687, 1],\n [6816, 6822, 1],\n [6824, 6829, 1],\n [7002, 7008, 1],\n [7037, 7038, 1],\n [7164, 7167, 1],\n [7227, 7231, 1],\n [7294, 7295, 1],\n [7360, 7367, 1],\n [7379, 8214, 835],\n [8215, 8224, 9],\n [8225, 8231, 1],\n [8240, 8248, 1],\n [8251, 8254, 1],\n [8257, 8259, 1],\n [8263, 8273, 1],\n [8275, 8277, 2],\n [8278, 8286, 1],\n [11513, 11516, 1],\n [11518, 11519, 1],\n [11632, 11776, 144],\n [11777, 11782, 5],\n [11783, 11784, 1],\n [11787, 11790, 3],\n [11791, 11798, 1],\n [11800, 11801, 1],\n [11803, 11806, 3],\n [11807, 11818, 11],\n [11819, 11822, 1],\n [11824, 11833, 1],\n [11836, 11839, 1],\n [11841, 11843, 2],\n [11844, 11855, 1],\n [11858, 11860, 1],\n [12289, 12291, 1],\n [12349, 12539, 190],\n [42238, 42239, 1],\n [42509, 42511, 1],\n [42611, 42622, 11],\n [42738, 42743, 1],\n [43124, 43127, 1],\n [43214, 43215, 1],\n [43256, 43258, 1],\n [43260, 43310, 50],\n [43311, 43359, 48],\n [43457, 43469, 1],\n [43486, 43487, 1],\n [43612, 43615, 1],\n [43742, 43743, 1],\n [43760, 43761, 1],\n [44011, 65040, 21029],\n [65041, 65046, 1],\n [65049, 65072, 23],\n [65093, 65094, 1],\n [65097, 65100, 1],\n [65104, 65106, 1],\n [65108, 65111, 1],\n [65119, 65121, 1],\n [65128, 65130, 2],\n [65131, 65281, 150],\n [65282, 65283, 1],\n [65285, 65287, 1],\n [65290, 65294, 2],\n [65295, 65306, 11],\n [65307, 65311, 4],\n [65312, 65340, 28],\n [65377, 65380, 3],\n [65381, 65792, 411],\n [65793, 65794, 1],\n [66463, 66512, 49],\n [66927, 67671, 744],\n [67871, 67903, 32],\n [68176, 68184, 1],\n [68223, 68336, 113],\n [68337, 68342, 1],\n [68409, 68415, 1],\n [68505, 68508, 1],\n [69461, 69465, 1],\n [69510, 69513, 1],\n [69703, 69709, 1],\n [69819, 69820, 1],\n [69822, 69825, 1],\n [69952, 69955, 1],\n [70004, 70005, 1],\n [70085, 70088, 1],\n [70093, 70107, 14],\n [70109, 70111, 1],\n [70200, 70205, 1],\n [70313, 70731, 418],\n [70732, 70735, 1],\n [70746, 70747, 1],\n [70749, 70854, 105],\n [71105, 71127, 1],\n [71233, 71235, 1],\n [71264, 71276, 1],\n [71353, 71484, 131],\n [71485, 71486, 1],\n [71739, 72004, 265],\n [72005, 72006, 1],\n [72162, 72255, 93],\n [72256, 72262, 1],\n [72346, 72348, 1],\n [72350, 72354, 1],\n [72448, 72457, 1],\n [72769, 72773, 1],\n [72816, 72817, 1],\n [73463, 73464, 1],\n [73539, 73551, 1],\n [73727, 74864, 1137],\n [74865, 74868, 1],\n [77809, 77810, 1],\n [92782, 92783, 1],\n [92917, 92983, 66],\n [92984, 92987, 1],\n [92996, 93847, 851],\n [93848, 93850, 1],\n [94178, 113823, 19645],\n [121479, 121483, 1],\n [125278, 125279, 1]\n ]\n static Ps = [\n [40, 91, 51],\n [123, 3898, 3775],\n [3900, 5787, 1887],\n [8218, 8222, 4],\n [8261, 8317, 56],\n [8333, 8968, 635],\n [8970, 9001, 31],\n [10088, 10100, 2],\n [10181, 10214, 33],\n [10216, 10222, 2],\n [10627, 10647, 2],\n [10712, 10714, 2],\n [10748, 11810, 1062],\n [11812, 11816, 2],\n [11842, 11861, 19],\n [11863, 11867, 2],\n [12296, 12304, 2],\n [12308, 12314, 2],\n [12317, 64831, 52514],\n [65047, 65077, 30],\n [65079, 65091, 2],\n [65095, 65113, 18],\n [65115, 65117, 2],\n [65288, 65339, 51],\n [65371, 65375, 4],\n [65378, 65378, 1]\n ]\n static S = [\n [36, 43, 7],\n [60, 62, 1],\n [94, 96, 2],\n [124, 126, 2],\n [162, 166, 1],\n [168, 169, 1],\n [172, 174, 2],\n [175, 177, 1],\n [180, 184, 4],\n [215, 247, 32],\n [706, 709, 1],\n [722, 735, 1],\n [741, 747, 1],\n [749, 751, 2],\n [752, 767, 1],\n [885, 900, 15],\n [901, 1014, 113],\n [1154, 1421, 267],\n [1422, 1423, 1],\n [1542, 1544, 1],\n [1547, 1550, 3],\n [1551, 1758, 207],\n [1769, 1789, 20],\n [1790, 2038, 248],\n [2046, 2047, 1],\n [2184, 2546, 362],\n [2547, 2554, 7],\n [2555, 2801, 246],\n [2928, 3059, 131],\n [3060, 3066, 1],\n [3199, 3407, 208],\n [3449, 3647, 198],\n [3841, 3843, 1],\n [3859, 3861, 2],\n [3862, 3863, 1],\n [3866, 3871, 1],\n [3892, 3896, 2],\n [4030, 4037, 1],\n [4039, 4044, 1],\n [4046, 4047, 1],\n [4053, 4056, 1],\n [4254, 4255, 1],\n [5008, 5017, 1],\n [5741, 6107, 366],\n [6464, 6622, 158],\n [6623, 6655, 1],\n [7009, 7018, 1],\n [7028, 7036, 1],\n [8125, 8127, 2],\n [8128, 8129, 1],\n [8141, 8143, 1],\n [8157, 8159, 1],\n [8173, 8175, 1],\n [8189, 8190, 1],\n [8260, 8274, 14],\n [8314, 8316, 1],\n [8330, 8332, 1],\n [8352, 8384, 1],\n [8448, 8449, 1],\n [8451, 8454, 1],\n [8456, 8457, 1],\n [8468, 8470, 2],\n [8471, 8472, 1],\n [8478, 8483, 1],\n [8485, 8489, 2],\n [8494, 8506, 12],\n [8507, 8512, 5],\n [8513, 8516, 1],\n [8522, 8525, 1],\n [8527, 8586, 59],\n [8587, 8592, 5],\n [8593, 8967, 1],\n [8972, 9000, 1],\n [9003, 9254, 1],\n [9280, 9290, 1],\n [9372, 9449, 1],\n [9472, 10087, 1],\n [10132, 10180, 1],\n [10183, 10213, 1],\n [10224, 10626, 1],\n [10649, 10711, 1],\n [10716, 10747, 1],\n [10750, 11123, 1],\n [11126, 11157, 1],\n [11159, 11263, 1],\n [11493, 11498, 1],\n [11856, 11857, 1],\n [11904, 11929, 1],\n [11931, 12019, 1],\n [12032, 12245, 1],\n [12272, 12287, 1],\n [12292, 12306, 14],\n [12307, 12320, 13],\n [12342, 12343, 1],\n [12350, 12351, 1],\n [12443, 12444, 1],\n [12688, 12689, 1],\n [12694, 12703, 1],\n [12736, 12771, 1],\n [12783, 12800, 17],\n [12801, 12830, 1],\n [12842, 12871, 1],\n [12880, 12896, 16],\n [12897, 12927, 1],\n [12938, 12976, 1],\n [12992, 13311, 1],\n [19904, 19967, 1],\n [42128, 42182, 1],\n [42752, 42774, 1],\n [42784, 42785, 1],\n [42889, 42890, 1],\n [43048, 43051, 1],\n [43062, 43065, 1],\n [43639, 43641, 1],\n [43867, 43882, 15],\n [43883, 64297, 20414],\n [64434, 64450, 1],\n [64832, 64847, 1],\n [64975, 65020, 45],\n [65021, 65023, 1],\n [65122, 65124, 2],\n [65125, 65126, 1],\n [65129, 65284, 155],\n [65291, 65308, 17],\n [65309, 65310, 1],\n [65342, 65344, 2],\n [65372, 65374, 2],\n [65504, 65510, 1],\n [65512, 65518, 1],\n [65532, 65533, 1],\n [65847, 65855, 1],\n [65913, 65929, 1],\n [65932, 65934, 1],\n [65936, 65948, 1],\n [65952, 66000, 48],\n [66001, 66044, 1],\n [67703, 67704, 1],\n [68296, 71487, 3191],\n [73685, 73713, 1],\n [92988, 92991, 1],\n [92997, 113820, 20823],\n [118608, 118723, 1],\n [118784, 119029, 1],\n [119040, 119078, 1],\n [119081, 119140, 1],\n [119146, 119148, 1],\n [119171, 119172, 1],\n [119180, 119209, 1],\n [119214, 119274, 1],\n [119296, 119361, 1],\n [119365, 119552, 187],\n [119553, 119638, 1],\n [120513, 120539, 26],\n [120571, 120597, 26],\n [120629, 120655, 26],\n [120687, 120713, 26],\n [120745, 120771, 26],\n [120832, 121343, 1],\n [121399, 121402, 1],\n [121453, 121460, 1],\n [121462, 121475, 1],\n [121477, 121478, 1],\n [123215, 123647, 432],\n [126124, 126128, 4],\n [126254, 126704, 450],\n [126705, 126976, 271],\n [126977, 127019, 1],\n [127024, 127123, 1],\n [127136, 127150, 1],\n [127153, 127167, 1],\n [127169, 127183, 1],\n [127185, 127221, 1],\n [127245, 127405, 1],\n [127462, 127490, 1],\n [127504, 127547, 1],\n [127552, 127560, 1],\n [127568, 127569, 1],\n [127584, 127589, 1],\n [127744, 128727, 1],\n [128732, 128748, 1],\n [128752, 128764, 1],\n [128768, 128886, 1],\n [128891, 128985, 1],\n [128992, 129003, 1],\n [129008, 129024, 16],\n [129025, 129035, 1],\n [129040, 129095, 1],\n [129104, 129113, 1],\n [129120, 129159, 1],\n [129168, 129197, 1],\n [129200, 129201, 1],\n [129280, 129619, 1],\n [129632, 129645, 1],\n [129648, 129660, 1],\n [129664, 129672, 1],\n [129680, 129725, 1],\n [129727, 129733, 1],\n [129742, 129755, 1],\n [129760, 129768, 1],\n [129776, 129784, 1],\n [129792, 129938, 1],\n [129940, 129994, 1]\n ]\n static Sc = [\n [36, 162, 126],\n [163, 165, 1],\n [1423, 1547, 124],\n [2046, 2047, 1],\n [2546, 2547, 1],\n [2555, 2801, 246],\n [3065, 3647, 582],\n [6107, 8352, 2245],\n [8353, 8384, 1],\n [43064, 65020, 21956],\n [65129, 65284, 155],\n [65504, 65505, 1],\n [65509, 65510, 1],\n [73693, 73696, 1],\n [123647, 126128, 2481]\n ]\n static Sk = [\n [94, 96, 2],\n [168, 175, 7],\n [180, 184, 4],\n [706, 709, 1],\n [722, 735, 1],\n [741, 747, 1],\n [749, 751, 2],\n [752, 767, 1],\n [885, 900, 15],\n [901, 2184, 1283],\n [8125, 8127, 2],\n [8128, 8129, 1],\n [8141, 8143, 1],\n [8157, 8159, 1],\n [8173, 8175, 1],\n [8189, 8190, 1],\n [12443, 12444, 1],\n [42752, 42774, 1],\n [42784, 42785, 1],\n [42889, 42890, 1],\n [43867, 43882, 15],\n [43883, 64434, 20551],\n [64435, 64450, 1],\n [65342, 65344, 2],\n [65507, 127995, 62488],\n [127996, 127999, 1]\n ]\n static Sm = [\n [43, 60, 17],\n [61, 62, 1],\n [124, 126, 2],\n [172, 177, 5],\n [215, 247, 32],\n [1014, 1542, 528],\n [1543, 1544, 1],\n [8260, 8274, 14],\n [8314, 8316, 1],\n [8330, 8332, 1],\n [8472, 8512, 40],\n [8513, 8516, 1],\n [8523, 8592, 69],\n [8593, 8596, 1],\n [8602, 8603, 1],\n [8608, 8614, 3],\n [8622, 8654, 32],\n [8655, 8658, 3],\n [8660, 8692, 32],\n [8693, 8959, 1],\n [8992, 8993, 1],\n [9084, 9115, 31],\n [9116, 9139, 1],\n [9180, 9185, 1],\n [9655, 9665, 10],\n [9720, 9727, 1],\n [9839, 10176, 337],\n [10177, 10180, 1],\n [10183, 10213, 1],\n [10224, 10239, 1],\n [10496, 10626, 1],\n [10649, 10711, 1],\n [10716, 10747, 1],\n [10750, 11007, 1],\n [11056, 11076, 1],\n [11079, 11084, 1],\n [64297, 65122, 825],\n [65124, 65126, 1],\n [65291, 65308, 17],\n [65309, 65310, 1],\n [65372, 65374, 2],\n [65506, 65513, 7],\n [65514, 65516, 1],\n [120513, 120539, 26],\n [120571, 120597, 26],\n [120629, 120655, 26],\n [120687, 120713, 26],\n [120745, 120771, 26],\n [126704, 126705, 1]\n ]\n static So = [\n [166, 169, 3],\n [174, 176, 2],\n [1154, 1421, 267],\n [1422, 1550, 128],\n [1551, 1758, 207],\n [1769, 1789, 20],\n [1790, 2038, 248],\n [2554, 2928, 374],\n [3059, 3064, 1],\n [3066, 3199, 133],\n [3407, 3449, 42],\n [3841, 3843, 1],\n [3859, 3861, 2],\n [3862, 3863, 1],\n [3866, 3871, 1],\n [3892, 3896, 2],\n [4030, 4037, 1],\n [4039, 4044, 1],\n [4046, 4047, 1],\n [4053, 4056, 1],\n [4254, 4255, 1],\n [5008, 5017, 1],\n [5741, 6464, 723],\n [6622, 6655, 1],\n [7009, 7018, 1],\n [7028, 7036, 1],\n [8448, 8449, 1],\n [8451, 8454, 1],\n [8456, 8457, 1],\n [8468, 8470, 2],\n [8471, 8478, 7],\n [8479, 8483, 1],\n [8485, 8489, 2],\n [8494, 8506, 12],\n [8507, 8522, 15],\n [8524, 8525, 1],\n [8527, 8586, 59],\n [8587, 8597, 10],\n [8598, 8601, 1],\n [8604, 8607, 1],\n [8609, 8610, 1],\n [8612, 8613, 1],\n [8615, 8621, 1],\n [8623, 8653, 1],\n [8656, 8657, 1],\n [8659, 8661, 2],\n [8662, 8691, 1],\n [8960, 8967, 1],\n [8972, 8991, 1],\n [8994, 9000, 1],\n [9003, 9083, 1],\n [9085, 9114, 1],\n [9140, 9179, 1],\n [9186, 9254, 1],\n [9280, 9290, 1],\n [9372, 9449, 1],\n [9472, 9654, 1],\n [9656, 9664, 1],\n [9666, 9719, 1],\n [9728, 9838, 1],\n [9840, 10087, 1],\n [10132, 10175, 1],\n [10240, 10495, 1],\n [11008, 11055, 1],\n [11077, 11078, 1],\n [11085, 11123, 1],\n [11126, 11157, 1],\n [11159, 11263, 1],\n [11493, 11498, 1],\n [11856, 11857, 1],\n [11904, 11929, 1],\n [11931, 12019, 1],\n [12032, 12245, 1],\n [12272, 12287, 1],\n [12292, 12306, 14],\n [12307, 12320, 13],\n [12342, 12343, 1],\n [12350, 12351, 1],\n [12688, 12689, 1],\n [12694, 12703, 1],\n [12736, 12771, 1],\n [12783, 12800, 17],\n [12801, 12830, 1],\n [12842, 12871, 1],\n [12880, 12896, 16],\n [12897, 12927, 1],\n [12938, 12976, 1],\n [12992, 13311, 1],\n [19904, 19967, 1],\n [42128, 42182, 1],\n [43048, 43051, 1],\n [43062, 43063, 1],\n [43065, 43639, 574],\n [43640, 43641, 1],\n [64832, 64847, 1],\n [64975, 65021, 46],\n [65022, 65023, 1],\n [65508, 65512, 4],\n [65517, 65518, 1],\n [65532, 65533, 1],\n [65847, 65855, 1],\n [65913, 65929, 1],\n [65932, 65934, 1],\n [65936, 65948, 1],\n [65952, 66000, 48],\n [66001, 66044, 1],\n [67703, 67704, 1],\n [68296, 71487, 3191],\n [73685, 73692, 1],\n [73697, 73713, 1],\n [92988, 92991, 1],\n [92997, 113820, 20823],\n [118608, 118723, 1],\n [118784, 119029, 1],\n [119040, 119078, 1],\n [119081, 119140, 1],\n [119146, 119148, 1],\n [119171, 119172, 1],\n [119180, 119209, 1],\n [119214, 119274, 1],\n [119296, 119361, 1],\n [119365, 119552, 187],\n [119553, 119638, 1],\n [120832, 121343, 1],\n [121399, 121402, 1],\n [121453, 121460, 1],\n [121462, 121475, 1],\n [121477, 121478, 1],\n [123215, 126124, 2909],\n [126254, 126976, 722],\n [126977, 127019, 1],\n [127024, 127123, 1],\n [127136, 127150, 1],\n [127153, 127167, 1],\n [127169, 127183, 1],\n [127185, 127221, 1],\n [127245, 127405, 1],\n [127462, 127490, 1],\n [127504, 127547, 1],\n [127552, 127560, 1],\n [127568, 127569, 1],\n [127584, 127589, 1],\n [127744, 127994, 1],\n [128000, 128727, 1],\n [128732, 128748, 1],\n [128752, 128764, 1],\n [128768, 128886, 1],\n [128891, 128985, 1],\n [128992, 129003, 1],\n [129008, 129024, 16],\n [129025, 129035, 1],\n [129040, 129095, 1],\n [129104, 129113, 1],\n [129120, 129159, 1],\n [129168, 129197, 1],\n [129200, 129201, 1],\n [129280, 129619, 1],\n [129632, 129645, 1],\n [129648, 129660, 1],\n [129664, 129672, 1],\n [129680, 129725, 1],\n [129727, 129733, 1],\n [129742, 129755, 1],\n [129760, 129768, 1],\n [129776, 129784, 1],\n [129792, 129938, 1],\n [129940, 129994, 1]\n ]\n static Z = [\n [32, 160, 128],\n [5760, 8192, 2432],\n [8193, 8202, 1],\n [8232, 8233, 1],\n [8239, 8287, 48],\n [12288, 12288, 1]\n ]\n static Zl = [[8232, 8232, 1]]\n static Zp = [[8233, 8233, 1]]\n static Zs = [\n [32, 160, 128],\n [5760, 8192, 2432],\n [8193, 8202, 1],\n [8239, 8287, 48],\n [12288, 12288, 1]\n ]\n static Adlam = [\n [125184, 125259, 1],\n [125264, 125273, 1],\n [125278, 125279, 1]\n ]\n static Ahom = [\n [71424, 71450, 1],\n [71453, 71467, 1],\n [71472, 71494, 1]\n ]\n static Anatolian_Hieroglyphs = [[82944, 83526, 1]]\n static Arabic = [\n [1536, 1540, 1],\n [1542, 1547, 1],\n [1549, 1562, 1],\n [1564, 1566, 1],\n [1568, 1599, 1],\n [1601, 1610, 1],\n [1622, 1647, 1],\n [1649, 1756, 1],\n [1758, 1791, 1],\n [1872, 1919, 1],\n [2160, 2190, 1],\n [2192, 2193, 1],\n [2200, 2273, 1],\n [2275, 2303, 1],\n [64336, 64450, 1],\n [64467, 64829, 1],\n [64832, 64911, 1],\n [64914, 64967, 1],\n [64975, 65008, 33],\n [65009, 65023, 1],\n [65136, 65140, 1],\n [65142, 65276, 1],\n [69216, 69246, 1],\n [69373, 69375, 1],\n [126464, 126467, 1],\n [126469, 126495, 1],\n [126497, 126498, 1],\n [126500, 126503, 3],\n [126505, 126514, 1],\n [126516, 126519, 1],\n [126521, 126523, 2],\n [126530, 126535, 5],\n [126537, 126541, 2],\n [126542, 126543, 1],\n [126545, 126546, 1],\n [126548, 126551, 3],\n [126553, 126561, 2],\n [126562, 126564, 2],\n [126567, 126570, 1],\n [126572, 126578, 1],\n [126580, 126583, 1],\n [126585, 126588, 1],\n [126590, 126592, 2],\n [126593, 126601, 1],\n [126603, 126619, 1],\n [126625, 126627, 1],\n [126629, 126633, 1],\n [126635, 126651, 1],\n [126704, 126705, 1]\n ]\n static Armenian = [\n [1329, 1366, 1],\n [1369, 1418, 1],\n [1421, 1423, 1],\n [64275, 64279, 1]\n ]\n static Avestan = [\n [68352, 68405, 1],\n [68409, 68415, 1]\n ]\n static Balinese = [\n [6912, 6988, 1],\n [6992, 7038, 1]\n ]\n static Bamum = [\n [42656, 42743, 1],\n [92160, 92728, 1]\n ]\n static Bassa_Vah = [\n [92880, 92909, 1],\n [92912, 92917, 1]\n ]\n static Batak = [\n [7104, 7155, 1],\n [7164, 7167, 1]\n ]\n static Bengali = [\n [2432, 2435, 1],\n [2437, 2444, 1],\n [2447, 2448, 1],\n [2451, 2472, 1],\n [2474, 2480, 1],\n [2482, 2486, 4],\n [2487, 2489, 1],\n [2492, 2500, 1],\n [2503, 2504, 1],\n [2507, 2510, 1],\n [2519, 2524, 5],\n [2525, 2527, 2],\n [2528, 2531, 1],\n [2534, 2558, 1]\n ]\n static Bhaiksuki = [\n [72704, 72712, 1],\n [72714, 72758, 1],\n [72760, 72773, 1],\n [72784, 72812, 1]\n ]\n static Bopomofo = [\n [746, 747, 1],\n [12549, 12591, 1],\n [12704, 12735, 1]\n ]\n static Brahmi = [\n [69632, 69709, 1],\n [69714, 69749, 1],\n [69759, 69759, 1]\n ]\n static Braille = [[10240, 10495, 1]]\n static Buginese = [\n [6656, 6683, 1],\n [6686, 6687, 1]\n ]\n static Buhid = [[5952, 5971, 1]]\n static Canadian_Aboriginal = [\n [5120, 5759, 1],\n [6320, 6389, 1],\n [72368, 72383, 1]\n ]\n static Carian = [[66208, 66256, 1]]\n static Caucasian_Albanian = [\n [66864, 66915, 1],\n [66927, 66927, 1]\n ]\n static Chakma = [\n [69888, 69940, 1],\n [69942, 69959, 1]\n ]\n static Cham = [\n [43520, 43574, 1],\n [43584, 43597, 1],\n [43600, 43609, 1],\n [43612, 43615, 1]\n ]\n static Cherokee = [\n [5024, 5109, 1],\n [5112, 5117, 1],\n [43888, 43967, 1]\n ]\n static Chorasmian = [[69552, 69579, 1]]\n static Common = [\n [0, 64, 1],\n [91, 96, 1],\n [123, 169, 1],\n [171, 185, 1],\n [187, 191, 1],\n [215, 247, 32],\n [697, 735, 1],\n [741, 745, 1],\n [748, 767, 1],\n [884, 894, 10],\n [901, 903, 2],\n [1541, 1548, 7],\n [1563, 1567, 4],\n [1600, 1757, 157],\n [2274, 2404, 130],\n [2405, 3647, 1242],\n [4053, 4056, 1],\n [4347, 5867, 1520],\n [5868, 5869, 1],\n [5941, 5942, 1],\n [6146, 6147, 1],\n [6149, 7379, 1230],\n [7393, 7401, 8],\n [7402, 7404, 1],\n [7406, 7411, 1],\n [7413, 7415, 1],\n [7418, 8192, 774],\n [8193, 8203, 1],\n [8206, 8292, 1],\n [8294, 8304, 1],\n [8308, 8318, 1],\n [8320, 8334, 1],\n [8352, 8384, 1],\n [8448, 8485, 1],\n [8487, 8489, 1],\n [8492, 8497, 1],\n [8499, 8525, 1],\n [8527, 8543, 1],\n [8585, 8587, 1],\n [8592, 9254, 1],\n [9280, 9290, 1],\n [9312, 10239, 1],\n [10496, 11123, 1],\n [11126, 11157, 1],\n [11159, 11263, 1],\n [11776, 11869, 1],\n [12272, 12292, 1],\n [12294, 12296, 2],\n [12297, 12320, 1],\n [12336, 12343, 1],\n [12348, 12351, 1],\n [12443, 12444, 1],\n [12448, 12539, 91],\n [12540, 12688, 148],\n [12689, 12703, 1],\n [12736, 12771, 1],\n [12783, 12832, 49],\n [12833, 12895, 1],\n [12927, 13007, 1],\n [13055, 13144, 89],\n [13145, 13311, 1],\n [19904, 19967, 1],\n [42752, 42785, 1],\n [42888, 42890, 1],\n [43056, 43065, 1],\n [43310, 43471, 161],\n [43867, 43882, 15],\n [43883, 64830, 20947],\n [64831, 65040, 209],\n [65041, 65049, 1],\n [65072, 65106, 1],\n [65108, 65126, 1],\n [65128, 65131, 1],\n [65279, 65281, 2],\n [65282, 65312, 1],\n [65339, 65344, 1],\n [65371, 65381, 1],\n [65392, 65438, 46],\n [65439, 65504, 65],\n [65505, 65510, 1],\n [65512, 65518, 1],\n [65529, 65533, 1],\n [65792, 65794, 1],\n [65799, 65843, 1],\n [65847, 65855, 1],\n [65936, 65948, 1],\n [66000, 66044, 1],\n [66273, 66299, 1],\n [113824, 113827, 1],\n [118608, 118723, 1],\n [118784, 119029, 1],\n [119040, 119078, 1],\n [119081, 119142, 1],\n [119146, 119162, 1],\n [119171, 119172, 1],\n [119180, 119209, 1],\n [119214, 119274, 1],\n [119488, 119507, 1],\n [119520, 119539, 1],\n [119552, 119638, 1],\n [119648, 119672, 1],\n [119808, 119892, 1],\n [119894, 119964, 1],\n [119966, 119967, 1],\n [119970, 119973, 3],\n [119974, 119977, 3],\n [119978, 119980, 1],\n [119982, 119993, 1],\n [119995, 119997, 2],\n [119998, 120003, 1],\n [120005, 120069, 1],\n [120071, 120074, 1],\n [120077, 120084, 1],\n [120086, 120092, 1],\n [120094, 120121, 1],\n [120123, 120126, 1],\n [120128, 120132, 1],\n [120134, 120138, 4],\n [120139, 120144, 1],\n [120146, 120485, 1],\n [120488, 120779, 1],\n [120782, 120831, 1],\n [126065, 126132, 1],\n [126209, 126269, 1],\n [126976, 127019, 1],\n [127024, 127123, 1],\n [127136, 127150, 1],\n [127153, 127167, 1],\n [127169, 127183, 1],\n [127185, 127221, 1],\n [127232, 127405, 1],\n [127462, 127487, 1],\n [127489, 127490, 1],\n [127504, 127547, 1],\n [127552, 127560, 1],\n [127568, 127569, 1],\n [127584, 127589, 1],\n [127744, 128727, 1],\n [128732, 128748, 1],\n [128752, 128764, 1],\n [128768, 128886, 1],\n [128891, 128985, 1],\n [128992, 129003, 1],\n [129008, 129024, 16],\n [129025, 129035, 1],\n [129040, 129095, 1],\n [129104, 129113, 1],\n [129120, 129159, 1],\n [129168, 129197, 1],\n [129200, 129201, 1],\n [129280, 129619, 1],\n [129632, 129645, 1],\n [129648, 129660, 1],\n [129664, 129672, 1],\n [129680, 129725, 1],\n [129727, 129733, 1],\n [129742, 129755, 1],\n [129760, 129768, 1],\n [129776, 129784, 1],\n [129792, 129938, 1],\n [129940, 129994, 1],\n [130032, 130041, 1],\n [917505, 917536, 31],\n [917537, 917631, 1]\n ]\n static foldCommon = [[924, 956, 32]]\n static Coptic = [\n [994, 1007, 1],\n [11392, 11507, 1],\n [11513, 11519, 1]\n ]\n static Cuneiform = [\n [73728, 74649, 1],\n [74752, 74862, 1],\n [74864, 74868, 1],\n [74880, 75075, 1]\n ]\n static Cypriot = [\n [67584, 67589, 1],\n [67592, 67594, 2],\n [67595, 67637, 1],\n [67639, 67640, 1],\n [67644, 67647, 3]\n ]\n static Cypro_Minoan = [[77712, 77810, 1]]\n static Cyrillic = [\n [1024, 1156, 1],\n [1159, 1327, 1],\n [7296, 7304, 1],\n [7467, 7544, 77],\n [11744, 11775, 1],\n [42560, 42655, 1],\n [65070, 65071, 1],\n [122928, 122989, 1],\n [123023, 123023, 1]\n ]\n static Deseret = [[66560, 66639, 1]]\n static Devanagari = [\n [2304, 2384, 1],\n [2389, 2403, 1],\n [2406, 2431, 1],\n [43232, 43263, 1],\n [72448, 72457, 1]\n ]\n static Dives_Akuru = [\n [71936, 71942, 1],\n [71945, 71948, 3],\n [71949, 71955, 1],\n [71957, 71958, 1],\n [71960, 71989, 1],\n [71991, 71992, 1],\n [71995, 72006, 1],\n [72016, 72025, 1]\n ]\n static Dogra = [[71680, 71739, 1]]\n static Duployan = [\n [113664, 113770, 1],\n [113776, 113788, 1],\n [113792, 113800, 1],\n [113808, 113817, 1],\n [113820, 113823, 1]\n ]\n static Egyptian_Hieroglyphs = [[77824, 78933, 1]]\n static Elbasan = [[66816, 66855, 1]]\n static Elymaic = [[69600, 69622, 1]]\n static Ethiopic = [\n [4608, 4680, 1],\n [4682, 4685, 1],\n [4688, 4694, 1],\n [4696, 4698, 2],\n [4699, 4701, 1],\n [4704, 4744, 1],\n [4746, 4749, 1],\n [4752, 4784, 1],\n [4786, 4789, 1],\n [4792, 4798, 1],\n [4800, 4802, 2],\n [4803, 4805, 1],\n [4808, 4822, 1],\n [4824, 4880, 1],\n [4882, 4885, 1],\n [4888, 4954, 1],\n [4957, 4988, 1],\n [4992, 5017, 1],\n [11648, 11670, 1],\n [11680, 11686, 1],\n [11688, 11694, 1],\n [11696, 11702, 1],\n [11704, 11710, 1],\n [11712, 11718, 1],\n [11720, 11726, 1],\n [11728, 11734, 1],\n [11736, 11742, 1],\n [43777, 43782, 1],\n [43785, 43790, 1],\n [43793, 43798, 1],\n [43808, 43814, 1],\n [43816, 43822, 1],\n [124896, 124902, 1],\n [124904, 124907, 1],\n [124909, 124910, 1],\n [124912, 124926, 1]\n ]\n static Georgian = [\n [4256, 4293, 1],\n [4295, 4301, 6],\n [4304, 4346, 1],\n [4348, 4351, 1],\n [7312, 7354, 1],\n [7357, 7359, 1],\n [11520, 11557, 1],\n [11559, 11565, 6]\n ]\n static Glagolitic = [\n [11264, 11359, 1],\n [122880, 122886, 1],\n [122888, 122904, 1],\n [122907, 122913, 1],\n [122915, 122916, 1],\n [122918, 122922, 1]\n ]\n static Gothic = [[66352, 66378, 1]]\n static Grantha = [\n [70400, 70403, 1],\n [70405, 70412, 1],\n [70415, 70416, 1],\n [70419, 70440, 1],\n [70442, 70448, 1],\n [70450, 70451, 1],\n [70453, 70457, 1],\n [70460, 70468, 1],\n [70471, 70472, 1],\n [70475, 70477, 1],\n [70480, 70487, 7],\n [70493, 70499, 1],\n [70502, 70508, 1],\n [70512, 70516, 1]\n ]\n static Greek = [\n [880, 883, 1],\n [885, 887, 1],\n [890, 893, 1],\n [895, 900, 5],\n [902, 904, 2],\n [905, 906, 1],\n [908, 910, 2],\n [911, 929, 1],\n [931, 993, 1],\n [1008, 1023, 1],\n [7462, 7466, 1],\n [7517, 7521, 1],\n [7526, 7530, 1],\n [7615, 7936, 321],\n [7937, 7957, 1],\n [7960, 7965, 1],\n [7968, 8005, 1],\n [8008, 8013, 1],\n [8016, 8023, 1],\n [8025, 8031, 2],\n [8032, 8061, 1],\n [8064, 8116, 1],\n [8118, 8132, 1],\n [8134, 8147, 1],\n [8150, 8155, 1],\n [8157, 8175, 1],\n [8178, 8180, 1],\n [8182, 8190, 1],\n [8486, 43877, 35391],\n [65856, 65934, 1],\n [65952, 119296, 53344],\n [119297, 119365, 1]\n ]\n static foldGreek = [[181, 837, 656]]\n static Gujarati = [\n [2689, 2691, 1],\n [2693, 2701, 1],\n [2703, 2705, 1],\n [2707, 2728, 1],\n [2730, 2736, 1],\n [2738, 2739, 1],\n [2741, 2745, 1],\n [2748, 2757, 1],\n [2759, 2761, 1],\n [2763, 2765, 1],\n [2768, 2784, 16],\n [2785, 2787, 1],\n [2790, 2801, 1],\n [2809, 2815, 1]\n ]\n static Gunjala_Gondi = [\n [73056, 73061, 1],\n [73063, 73064, 1],\n [73066, 73102, 1],\n [73104, 73105, 1],\n [73107, 73112, 1],\n [73120, 73129, 1]\n ]\n static Gurmukhi = [\n [2561, 2563, 1],\n [2565, 2570, 1],\n [2575, 2576, 1],\n [2579, 2600, 1],\n [2602, 2608, 1],\n [2610, 2611, 1],\n [2613, 2614, 1],\n [2616, 2617, 1],\n [2620, 2622, 2],\n [2623, 2626, 1],\n [2631, 2632, 1],\n [2635, 2637, 1],\n [2641, 2649, 8],\n [2650, 2652, 1],\n [2654, 2662, 8],\n [2663, 2678, 1]\n ]\n static Han = [\n [11904, 11929, 1],\n [11931, 12019, 1],\n [12032, 12245, 1],\n [12293, 12295, 2],\n [12321, 12329, 1],\n [12344, 12347, 1],\n [13312, 19903, 1],\n [19968, 40959, 1],\n [63744, 64109, 1],\n [64112, 64217, 1],\n [94178, 94179, 1],\n [94192, 94193, 1],\n [131072, 173791, 1],\n [173824, 177977, 1],\n [177984, 178205, 1],\n [178208, 183969, 1],\n [183984, 191456, 1],\n [194560, 195101, 1],\n [196608, 201546, 1],\n [201552, 205743, 1]\n ]\n static Hangul = [\n [4352, 4607, 1],\n [12334, 12335, 1],\n [12593, 12686, 1],\n [12800, 12830, 1],\n [12896, 12926, 1],\n [43360, 43388, 1],\n [44032, 55203, 1],\n [55216, 55238, 1],\n [55243, 55291, 1],\n [65440, 65470, 1],\n [65474, 65479, 1],\n [65482, 65487, 1],\n [65490, 65495, 1],\n [65498, 65500, 1]\n ]\n static Hanifi_Rohingya = [\n [68864, 68903, 1],\n [68912, 68921, 1]\n ]\n static Hanunoo = [[5920, 5940, 1]]\n static Hatran = [\n [67808, 67826, 1],\n [67828, 67829, 1],\n [67835, 67839, 1]\n ]\n static Hebrew = [\n [1425, 1479, 1],\n [1488, 1514, 1],\n [1519, 1524, 1],\n [64285, 64310, 1],\n [64312, 64316, 1],\n [64318, 64320, 2],\n [64321, 64323, 2],\n [64324, 64326, 2],\n [64327, 64335, 1]\n ]\n static Hiragana = [\n [12353, 12438, 1],\n [12445, 12447, 1],\n [110593, 110879, 1],\n [110898, 110928, 30],\n [110929, 110930, 1],\n [127488, 127488, 1]\n ]\n static Imperial_Aramaic = [\n [67648, 67669, 1],\n [67671, 67679, 1]\n ]\n static Inherited = [\n [768, 879, 1],\n [1157, 1158, 1],\n [1611, 1621, 1],\n [1648, 2385, 737],\n [2386, 2388, 1],\n [6832, 6862, 1],\n [7376, 7378, 1],\n [7380, 7392, 1],\n [7394, 7400, 1],\n [7405, 7412, 7],\n [7416, 7417, 1],\n [7616, 7679, 1],\n [8204, 8205, 1],\n [8400, 8432, 1],\n [12330, 12333, 1],\n [12441, 12442, 1],\n [65024, 65039, 1],\n [65056, 65069, 1],\n [66045, 66272, 227],\n [70459, 118528, 48069],\n [118529, 118573, 1],\n [118576, 118598, 1],\n [119143, 119145, 1],\n [119163, 119170, 1],\n [119173, 119179, 1],\n [119210, 119213, 1],\n [917760, 917999, 1]\n ]\n static foldInherited = [\n [921, 953, 32],\n [8126, 8126, 1]\n ]\n static Inscriptional_Pahlavi = [\n [68448, 68466, 1],\n [68472, 68479, 1]\n ]\n static Inscriptional_Parthian = [\n [68416, 68437, 1],\n [68440, 68447, 1]\n ]\n static Javanese = [\n [43392, 43469, 1],\n [43472, 43481, 1],\n [43486, 43487, 1]\n ]\n static Kaithi = [\n [69760, 69826, 1],\n [69837, 69837, 1]\n ]\n static Kannada = [\n [3200, 3212, 1],\n [3214, 3216, 1],\n [3218, 3240, 1],\n [3242, 3251, 1],\n [3253, 3257, 1],\n [3260, 3268, 1],\n [3270, 3272, 1],\n [3274, 3277, 1],\n [3285, 3286, 1],\n [3293, 3294, 1],\n [3296, 3299, 1],\n [3302, 3311, 1],\n [3313, 3315, 1]\n ]\n static Katakana = [\n [12449, 12538, 1],\n [12541, 12543, 1],\n [12784, 12799, 1],\n [13008, 13054, 1],\n [13056, 13143, 1],\n [65382, 65391, 1],\n [65393, 65437, 1],\n [110576, 110579, 1],\n [110581, 110587, 1],\n [110589, 110590, 1],\n [110592, 110880, 288],\n [110881, 110882, 1],\n [110933, 110948, 15],\n [110949, 110951, 1]\n ]\n static Kawi = [\n [73472, 73488, 1],\n [73490, 73530, 1],\n [73534, 73561, 1]\n ]\n static Kayah_Li = [\n [43264, 43309, 1],\n [43311, 43311, 1]\n ]\n static Kharoshthi = [\n [68096, 68099, 1],\n [68101, 68102, 1],\n [68108, 68115, 1],\n [68117, 68119, 1],\n [68121, 68149, 1],\n [68152, 68154, 1],\n [68159, 68168, 1],\n [68176, 68184, 1]\n ]\n static Khitan_Small_Script = [\n [94180, 101120, 6940],\n [101121, 101589, 1]\n ]\n static Khmer = [\n [6016, 6109, 1],\n [6112, 6121, 1],\n [6128, 6137, 1],\n [6624, 6655, 1]\n ]\n static Khojki = [\n [70144, 70161, 1],\n [70163, 70209, 1]\n ]\n static Khudawadi = [\n [70320, 70378, 1],\n [70384, 70393, 1]\n ]\n static Lao = [\n [3713, 3714, 1],\n [3716, 3718, 2],\n [3719, 3722, 1],\n [3724, 3747, 1],\n [3749, 3751, 2],\n [3752, 3773, 1],\n [3776, 3780, 1],\n [3782, 3784, 2],\n [3785, 3790, 1],\n [3792, 3801, 1],\n [3804, 3807, 1]\n ]\n static Latin = [\n [65, 90, 1],\n [97, 122, 1],\n [170, 186, 16],\n [192, 214, 1],\n [216, 246, 1],\n [248, 696, 1],\n [736, 740, 1],\n [7424, 7461, 1],\n [7468, 7516, 1],\n [7522, 7525, 1],\n [7531, 7543, 1],\n [7545, 7614, 1],\n [7680, 7935, 1],\n [8305, 8319, 14],\n [8336, 8348, 1],\n [8490, 8491, 1],\n [8498, 8526, 28],\n [8544, 8584, 1],\n [11360, 11391, 1],\n [42786, 42887, 1],\n [42891, 42954, 1],\n [42960, 42961, 1],\n [42963, 42965, 2],\n [42966, 42969, 1],\n [42994, 43007, 1],\n [43824, 43866, 1],\n [43868, 43876, 1],\n [43878, 43881, 1],\n [64256, 64262, 1],\n [65313, 65338, 1],\n [65345, 65370, 1],\n [67456, 67461, 1],\n [67463, 67504, 1],\n [67506, 67514, 1],\n [122624, 122654, 1],\n [122661, 122666, 1]\n ]\n static Lepcha = [\n [7168, 7223, 1],\n [7227, 7241, 1],\n [7245, 7247, 1]\n ]\n static Limbu = [\n [6400, 6430, 1],\n [6432, 6443, 1],\n [6448, 6459, 1],\n [6464, 6468, 4],\n [6469, 6479, 1]\n ]\n static Linear_A = [\n [67072, 67382, 1],\n [67392, 67413, 1],\n [67424, 67431, 1]\n ]\n static Linear_B = [\n [65536, 65547, 1],\n [65549, 65574, 1],\n [65576, 65594, 1],\n [65596, 65597, 1],\n [65599, 65613, 1],\n [65616, 65629, 1],\n [65664, 65786, 1]\n ]\n static Lisu = [\n [42192, 42239, 1],\n [73648, 73648, 1]\n ]\n static Lycian = [[66176, 66204, 1]]\n static Lydian = [\n [67872, 67897, 1],\n [67903, 67903, 1]\n ]\n static Mahajani = [[69968, 70006, 1]]\n static Makasar = [[73440, 73464, 1]]\n static Malayalam = [\n [3328, 3340, 1],\n [3342, 3344, 1],\n [3346, 3396, 1],\n [3398, 3400, 1],\n [3402, 3407, 1],\n [3412, 3427, 1],\n [3430, 3455, 1]\n ]\n static Mandaic = [\n [2112, 2139, 1],\n [2142, 2142, 1]\n ]\n static Manichaean = [\n [68288, 68326, 1],\n [68331, 68342, 1]\n ]\n static Marchen = [\n [72816, 72847, 1],\n [72850, 72871, 1],\n [72873, 72886, 1]\n ]\n static Masaram_Gondi = [\n [72960, 72966, 1],\n [72968, 72969, 1],\n [72971, 73014, 1],\n [73018, 73020, 2],\n [73021, 73023, 2],\n [73024, 73031, 1],\n [73040, 73049, 1]\n ]\n static Medefaidrin = [[93760, 93850, 1]]\n static Meetei_Mayek = [\n [43744, 43766, 1],\n [43968, 44013, 1],\n [44016, 44025, 1]\n ]\n static Mende_Kikakui = [\n [124928, 125124, 1],\n [125127, 125142, 1]\n ]\n static Meroitic_Cursive = [\n [68000, 68023, 1],\n [68028, 68047, 1],\n [68050, 68095, 1]\n ]\n static Meroitic_Hieroglyphs = [[67968, 67999, 1]]\n static Miao = [\n [93952, 94026, 1],\n [94031, 94087, 1],\n [94095, 94111, 1]\n ]\n static Modi = [\n [71168, 71236, 1],\n [71248, 71257, 1]\n ]\n static Mongolian = [\n [6144, 6145, 1],\n [6148, 6150, 2],\n [6151, 6169, 1],\n [6176, 6264, 1],\n [6272, 6314, 1],\n [71264, 71276, 1]\n ]\n static Mro = [\n [92736, 92766, 1],\n [92768, 92777, 1],\n [92782, 92783, 1]\n ]\n static Multani = [\n [70272, 70278, 1],\n [70280, 70282, 2],\n [70283, 70285, 1],\n [70287, 70301, 1],\n [70303, 70313, 1]\n ]\n static Myanmar = [\n [4096, 4255, 1],\n [43488, 43518, 1],\n [43616, 43647, 1]\n ]\n static Nabataean = [\n [67712, 67742, 1],\n [67751, 67759, 1]\n ]\n static Nag_Mundari = [[124112, 124153, 1]]\n static Nandinagari = [\n [72096, 72103, 1],\n [72106, 72151, 1],\n [72154, 72164, 1]\n ]\n static New_Tai_Lue = [\n [6528, 6571, 1],\n [6576, 6601, 1],\n [6608, 6618, 1],\n [6622, 6623, 1]\n ]\n static Newa = [\n [70656, 70747, 1],\n [70749, 70753, 1]\n ]\n static Nko = [\n [1984, 2042, 1],\n [2045, 2047, 1]\n ]\n static Nushu = [\n [94177, 110960, 16783],\n [110961, 111355, 1]\n ]\n static Nyiakeng_Puachue_Hmong = [\n [123136, 123180, 1],\n [123184, 123197, 1],\n [123200, 123209, 1],\n [123214, 123215, 1]\n ]\n static Ogham = [[5760, 5788, 1]]\n static Ol_Chiki = [[7248, 7295, 1]]\n static Old_Hungarian = [\n [68736, 68786, 1],\n [68800, 68850, 1],\n [68858, 68863, 1]\n ]\n static Old_Italic = [\n [66304, 66339, 1],\n [66349, 66351, 1]\n ]\n static Old_North_Arabian = [[68224, 68255, 1]]\n static Old_Permic = [[66384, 66426, 1]]\n static Old_Persian = [\n [66464, 66499, 1],\n [66504, 66517, 1]\n ]\n static Old_Sogdian = [[69376, 69415, 1]]\n static Old_South_Arabian = [[68192, 68223, 1]]\n static Old_Turkic = [[68608, 68680, 1]]\n static Old_Uyghur = [[69488, 69513, 1]]\n static Oriya = [\n [2817, 2819, 1],\n [2821, 2828, 1],\n [2831, 2832, 1],\n [2835, 2856, 1],\n [2858, 2864, 1],\n [2866, 2867, 1],\n [2869, 2873, 1],\n [2876, 2884, 1],\n [2887, 2888, 1],\n [2891, 2893, 1],\n [2901, 2903, 1],\n [2908, 2909, 1],\n [2911, 2915, 1],\n [2918, 2935, 1]\n ]\n static Osage = [\n [66736, 66771, 1],\n [66776, 66811, 1]\n ]\n static Osmanya = [\n [66688, 66717, 1],\n [66720, 66729, 1]\n ]\n static Pahawh_Hmong = [\n [92928, 92997, 1],\n [93008, 93017, 1],\n [93019, 93025, 1],\n [93027, 93047, 1],\n [93053, 93071, 1]\n ]\n static Palmyrene = [[67680, 67711, 1]]\n static Pau_Cin_Hau = [[72384, 72440, 1]]\n static Phags_Pa = [[43072, 43127, 1]]\n static Phoenician = [\n [67840, 67867, 1],\n [67871, 67871, 1]\n ]\n static Psalter_Pahlavi = [\n [68480, 68497, 1],\n [68505, 68508, 1],\n [68521, 68527, 1]\n ]\n static Rejang = [\n [43312, 43347, 1],\n [43359, 43359, 1]\n ]\n static Runic = [\n [5792, 5866, 1],\n [5870, 5880, 1]\n ]\n static Samaritan = [\n [2048, 2093, 1],\n [2096, 2110, 1]\n ]\n static Saurashtra = [\n [43136, 43205, 1],\n [43214, 43225, 1]\n ]\n static Sharada = [[70016, 70111, 1]]\n static Shavian = [[66640, 66687, 1]]\n static Siddham = [\n [71040, 71093, 1],\n [71096, 71133, 1]\n ]\n static SignWriting = [\n [120832, 121483, 1],\n [121499, 121503, 1],\n [121505, 121519, 1]\n ]\n static Sinhala = [\n [3457, 3459, 1],\n [3461, 3478, 1],\n [3482, 3505, 1],\n [3507, 3515, 1],\n [3517, 3520, 3],\n [3521, 3526, 1],\n [3530, 3535, 5],\n [3536, 3540, 1],\n [3542, 3544, 2],\n [3545, 3551, 1],\n [3558, 3567, 1],\n [3570, 3572, 1],\n [70113, 70132, 1]\n ]\n static Sogdian = [[69424, 69465, 1]]\n static Sora_Sompeng = [\n [69840, 69864, 1],\n [69872, 69881, 1]\n ]\n static Soyombo = [[72272, 72354, 1]]\n static Sundanese = [\n [7040, 7103, 1],\n [7360, 7367, 1]\n ]\n static Syloti_Nagri = [[43008, 43052, 1]]\n static Syriac = [\n [1792, 1805, 1],\n [1807, 1866, 1],\n [1869, 1871, 1],\n [2144, 2154, 1]\n ]\n static Tagalog = [\n [5888, 5909, 1],\n [5919, 5919, 1]\n ]\n static Tagbanwa = [\n [5984, 5996, 1],\n [5998, 6000, 1],\n [6002, 6003, 1]\n ]\n static Tai_Le = [\n [6480, 6509, 1],\n [6512, 6516, 1]\n ]\n static Tai_Tham = [\n [6688, 6750, 1],\n [6752, 6780, 1],\n [6783, 6793, 1],\n [6800, 6809, 1],\n [6816, 6829, 1]\n ]\n static Tai_Viet = [\n [43648, 43714, 1],\n [43739, 43743, 1]\n ]\n static Takri = [\n [71296, 71353, 1],\n [71360, 71369, 1]\n ]\n static Tamil = [\n [2946, 2947, 1],\n [2949, 2954, 1],\n [2958, 2960, 1],\n [2962, 2965, 1],\n [2969, 2970, 1],\n [2972, 2974, 2],\n [2975, 2979, 4],\n [2980, 2984, 4],\n [2985, 2986, 1],\n [2990, 3001, 1],\n [3006, 3010, 1],\n [3014, 3016, 1],\n [3018, 3021, 1],\n [3024, 3031, 7],\n [3046, 3066, 1],\n [73664, 73713, 1],\n [73727, 73727, 1]\n ]\n static Tangsa = [\n [92784, 92862, 1],\n [92864, 92873, 1]\n ]\n static Tangut = [\n [94176, 94208, 32],\n [94209, 100343, 1],\n [100352, 101119, 1],\n [101632, 101640, 1]\n ]\n static Telugu = [\n [3072, 3084, 1],\n [3086, 3088, 1],\n [3090, 3112, 1],\n [3114, 3129, 1],\n [3132, 3140, 1],\n [3142, 3144, 1],\n [3146, 3149, 1],\n [3157, 3158, 1],\n [3160, 3162, 1],\n [3165, 3168, 3],\n [3169, 3171, 1],\n [3174, 3183, 1],\n [3191, 3199, 1]\n ]\n static Thaana = [[1920, 1969, 1]]\n static Thai = [\n [3585, 3642, 1],\n [3648, 3675, 1]\n ]\n static Tibetan = [\n [3840, 3911, 1],\n [3913, 3948, 1],\n [3953, 3991, 1],\n [3993, 4028, 1],\n [4030, 4044, 1],\n [4046, 4052, 1],\n [4057, 4058, 1]\n ]\n static Tifinagh = [\n [11568, 11623, 1],\n [11631, 11632, 1],\n [11647, 11647, 1]\n ]\n static Tirhuta = [\n [70784, 70855, 1],\n [70864, 70873, 1]\n ]\n static Toto = [[123536, 123566, 1]]\n static Ugaritic = [\n [66432, 66461, 1],\n [66463, 66463, 1]\n ]\n static Vai = [[42240, 42539, 1]]\n static Vithkuqi = [\n [66928, 66938, 1],\n [66940, 66954, 1],\n [66956, 66962, 1],\n [66964, 66965, 1],\n [66967, 66977, 1],\n [66979, 66993, 1],\n [66995, 67001, 1],\n [67003, 67004, 1]\n ]\n static Wancho = [\n [123584, 123641, 1],\n [123647, 123647, 1]\n ]\n static Warang_Citi = [\n [71840, 71922, 1],\n [71935, 71935, 1]\n ]\n static Yezidi = [\n [69248, 69289, 1],\n [69291, 69293, 1],\n [69296, 69297, 1]\n ]\n static Yi = [\n [40960, 42124, 1],\n [42128, 42182, 1]\n ]\n static Zanabazar_Square = [[72192, 72263, 1]]\n\n static CATEGORIES = new Map([\n ['C', UnicodeTables.C],\n ['Cc', UnicodeTables.Cc],\n ['Cf', UnicodeTables.Cf],\n ['Co', UnicodeTables.Co],\n ['Cs', UnicodeTables.Cs],\n ['L', UnicodeTables.L],\n ['Ll', UnicodeTables.Ll],\n ['Lm', UnicodeTables.Lm],\n ['Lo', UnicodeTables.Lo],\n ['Lt', UnicodeTables.Lt],\n ['Lu', UnicodeTables.Lu],\n ['M', UnicodeTables.M],\n ['Mc', UnicodeTables.Mc],\n ['Me', UnicodeTables.Me],\n ['Mn', UnicodeTables.Mn],\n ['N', UnicodeTables.N],\n ['Nd', UnicodeTables.Nd],\n ['Nl', UnicodeTables.Nl],\n ['No', UnicodeTables.No],\n ['P', UnicodeTables.P],\n ['Pc', UnicodeTables.Pc],\n ['Pd', UnicodeTables.Pd],\n ['Pe', UnicodeTables.Pe],\n ['Pf', UnicodeTables.Pf],\n ['Pi', UnicodeTables.Pi],\n ['Po', UnicodeTables.Po],\n ['Ps', UnicodeTables.Ps],\n ['S', UnicodeTables.S],\n ['Sc', UnicodeTables.Sc],\n ['Sk', UnicodeTables.Sk],\n ['Sm', UnicodeTables.Sm],\n ['So', UnicodeTables.So],\n ['Z', UnicodeTables.Z],\n ['Zl', UnicodeTables.Zl],\n ['Zp', UnicodeTables.Zp],\n ['Zs', UnicodeTables.Zs]\n ])\n\n static SCRIPTS = new Map([\n ['Adlam', UnicodeTables.Adlam],\n ['Ahom', UnicodeTables.Ahom],\n ['Anatolian_Hieroglyphs', UnicodeTables.Anatolian_Hieroglyphs],\n ['Arabic', UnicodeTables.Arabic],\n ['Armenian', UnicodeTables.Armenian],\n ['Avestan', UnicodeTables.Avestan],\n ['Balinese', UnicodeTables.Balinese],\n ['Bamum', UnicodeTables.Bamum],\n ['Bassa_Vah', UnicodeTables.Bassa_Vah],\n ['Batak', UnicodeTables.Batak],\n ['Bengali', UnicodeTables.Bengali],\n ['Bhaiksuki', UnicodeTables.Bhaiksuki],\n ['Bopomofo', UnicodeTables.Bopomofo],\n ['Brahmi', UnicodeTables.Brahmi],\n ['Braille', UnicodeTables.Braille],\n ['Buginese', UnicodeTables.Buginese],\n ['Buhid', UnicodeTables.Buhid],\n ['Canadian_Aboriginal', UnicodeTables.Canadian_Aboriginal],\n ['Carian', UnicodeTables.Carian],\n ['Caucasian_Albanian', UnicodeTables.Caucasian_Albanian],\n ['Chakma', UnicodeTables.Chakma],\n ['Cham', UnicodeTables.Cham],\n ['Cherokee', UnicodeTables.Cherokee],\n ['Chorasmian', UnicodeTables.Chorasmian],\n ['Common', UnicodeTables.Common],\n ['Coptic', UnicodeTables.Coptic],\n ['Cuneiform', UnicodeTables.Cuneiform],\n ['Cypriot', UnicodeTables.Cypriot],\n ['Cypro_Minoan', UnicodeTables.Cypro_Minoan],\n ['Cyrillic', UnicodeTables.Cyrillic],\n ['Deseret', UnicodeTables.Deseret],\n ['Devanagari', UnicodeTables.Devanagari],\n ['Dives_Akuru', UnicodeTables.Dives_Akuru],\n ['Dogra', UnicodeTables.Dogra],\n ['Duployan', UnicodeTables.Duployan],\n ['Egyptian_Hieroglyphs', UnicodeTables.Egyptian_Hieroglyphs],\n ['Elbasan', UnicodeTables.Elbasan],\n ['Elymaic', UnicodeTables.Elymaic],\n ['Ethiopic', UnicodeTables.Ethiopic],\n ['Georgian', UnicodeTables.Georgian],\n ['Glagolitic', UnicodeTables.Glagolitic],\n ['Gothic', UnicodeTables.Gothic],\n ['Grantha', UnicodeTables.Grantha],\n ['Greek', UnicodeTables.Greek],\n ['Gujarati', UnicodeTables.Gujarati],\n ['Gunjala_Gondi', UnicodeTables.Gunjala_Gondi],\n ['Gurmukhi', UnicodeTables.Gurmukhi],\n ['Han', UnicodeTables.Han],\n ['Hangul', UnicodeTables.Hangul],\n ['Hanifi_Rohingya', UnicodeTables.Hanifi_Rohingya],\n ['Hanunoo', UnicodeTables.Hanunoo],\n ['Hatran', UnicodeTables.Hatran],\n ['Hebrew', UnicodeTables.Hebrew],\n ['Hiragana', UnicodeTables.Hiragana],\n ['Imperial_Aramaic', UnicodeTables.Imperial_Aramaic],\n ['Inherited', UnicodeTables.Inherited],\n ['Inscriptional_Pahlavi', UnicodeTables.Inscriptional_Pahlavi],\n ['Inscriptional_Parthian', UnicodeTables.Inscriptional_Parthian],\n ['Javanese', UnicodeTables.Javanese],\n ['Kaithi', UnicodeTables.Kaithi],\n ['Kannada', UnicodeTables.Kannada],\n ['Katakana', UnicodeTables.Katakana],\n ['Kawi', UnicodeTables.Kawi],\n ['Kayah_Li', UnicodeTables.Kayah_Li],\n ['Kharoshthi', UnicodeTables.Kharoshthi],\n ['Khitan_Small_Script', UnicodeTables.Khitan_Small_Script],\n ['Khmer', UnicodeTables.Khmer],\n ['Khojki', UnicodeTables.Khojki],\n ['Khudawadi', UnicodeTables.Khudawadi],\n ['Lao', UnicodeTables.Lao],\n ['Latin', UnicodeTables.Latin],\n ['Lepcha', UnicodeTables.Lepcha],\n ['Limbu', UnicodeTables.Limbu],\n ['Linear_A', UnicodeTables.Linear_A],\n ['Linear_B', UnicodeTables.Linear_B],\n ['Lisu', UnicodeTables.Lisu],\n ['Lycian', UnicodeTables.Lycian],\n ['Lydian', UnicodeTables.Lydian],\n ['Mahajani', UnicodeTables.Mahajani],\n ['Makasar', UnicodeTables.Makasar],\n ['Malayalam', UnicodeTables.Malayalam],\n ['Mandaic', UnicodeTables.Mandaic],\n ['Manichaean', UnicodeTables.Manichaean],\n ['Marchen', UnicodeTables.Marchen],\n ['Masaram_Gondi', UnicodeTables.Masaram_Gondi],\n ['Medefaidrin', UnicodeTables.Medefaidrin],\n ['Meetei_Mayek', UnicodeTables.Meetei_Mayek],\n ['Mende_Kikakui', UnicodeTables.Mende_Kikakui],\n ['Meroitic_Cursive', UnicodeTables.Meroitic_Cursive],\n ['Meroitic_Hieroglyphs', UnicodeTables.Meroitic_Hieroglyphs],\n ['Miao', UnicodeTables.Miao],\n ['Modi', UnicodeTables.Modi],\n ['Mongolian', UnicodeTables.Mongolian],\n ['Mro', UnicodeTables.Mro],\n ['Multani', UnicodeTables.Multani],\n ['Myanmar', UnicodeTables.Myanmar],\n ['Nabataean', UnicodeTables.Nabataean],\n ['Nag_Mundari', UnicodeTables.Nag_Mundari],\n ['Nandinagari', UnicodeTables.Nandinagari],\n ['New_Tai_Lue', UnicodeTables.New_Tai_Lue],\n ['Newa', UnicodeTables.Newa],\n ['Nko', UnicodeTables.Nko],\n ['Nushu', UnicodeTables.Nushu],\n ['Nyiakeng_Puachue_Hmong', UnicodeTables.Nyiakeng_Puachue_Hmong],\n ['Ogham', UnicodeTables.Ogham],\n ['Ol_Chiki', UnicodeTables.Ol_Chiki],\n ['Old_Hungarian', UnicodeTables.Old_Hungarian],\n ['Old_Italic', UnicodeTables.Old_Italic],\n ['Old_North_Arabian', UnicodeTables.Old_North_Arabian],\n ['Old_Permic', UnicodeTables.Old_Permic],\n ['Old_Persian', UnicodeTables.Old_Persian],\n ['Old_Sogdian', UnicodeTables.Old_Sogdian],\n ['Old_South_Arabian', UnicodeTables.Old_South_Arabian],\n ['Old_Turkic', UnicodeTables.Old_Turkic],\n ['Old_Uyghur', UnicodeTables.Old_Uyghur],\n ['Oriya', UnicodeTables.Oriya],\n ['Osage', UnicodeTables.Osage],\n ['Osmanya', UnicodeTables.Osmanya],\n ['Pahawh_Hmong', UnicodeTables.Pahawh_Hmong],\n ['Palmyrene', UnicodeTables.Palmyrene],\n ['Pau_Cin_Hau', UnicodeTables.Pau_Cin_Hau],\n ['Phags_Pa', UnicodeTables.Phags_Pa],\n ['Phoenician', UnicodeTables.Phoenician],\n ['Psalter_Pahlavi', UnicodeTables.Psalter_Pahlavi],\n ['Rejang', UnicodeTables.Rejang],\n ['Runic', UnicodeTables.Runic],\n ['Samaritan', UnicodeTables.Samaritan],\n ['Saurashtra', UnicodeTables.Saurashtra],\n ['Sharada', UnicodeTables.Sharada],\n ['Shavian', UnicodeTables.Shavian],\n ['Siddham', UnicodeTables.Siddham],\n ['SignWriting', UnicodeTables.SignWriting],\n ['Sinhala', UnicodeTables.Sinhala],\n ['Sogdian', UnicodeTables.Sogdian],\n ['Sora_Sompeng', UnicodeTables.Sora_Sompeng],\n ['Soyombo', UnicodeTables.Soyombo],\n ['Sundanese', UnicodeTables.Sundanese],\n ['Syloti_Nagri', UnicodeTables.Syloti_Nagri],\n ['Syriac', UnicodeTables.Syriac],\n ['Tagalog', UnicodeTables.Tagalog],\n ['Tagbanwa', UnicodeTables.Tagbanwa],\n ['Tai_Le', UnicodeTables.Tai_Le],\n ['Tai_Tham', UnicodeTables.Tai_Tham],\n ['Tai_Viet', UnicodeTables.Tai_Viet],\n ['Takri', UnicodeTables.Takri],\n ['Tamil', UnicodeTables.Tamil],\n ['Tangsa', UnicodeTables.Tangsa],\n ['Tangut', UnicodeTables.Tangut],\n ['Telugu', UnicodeTables.Telugu],\n ['Thaana', UnicodeTables.Thaana],\n ['Thai', UnicodeTables.Thai],\n ['Tibetan', UnicodeTables.Tibetan],\n ['Tifinagh', UnicodeTables.Tifinagh],\n ['Tirhuta', UnicodeTables.Tirhuta],\n ['Toto', UnicodeTables.Toto],\n ['Ugaritic', UnicodeTables.Ugaritic],\n ['Vai', UnicodeTables.Vai],\n ['Vithkuqi', UnicodeTables.Vithkuqi],\n ['Wancho', UnicodeTables.Wancho],\n ['Warang_Citi', UnicodeTables.Warang_Citi],\n ['Yezidi', UnicodeTables.Yezidi],\n ['Yi', UnicodeTables.Yi],\n ['Zanabazar_Square', UnicodeTables.Zanabazar_Square]\n ])\n\n static FOLD_CATEGORIES = new Map([\n ['L', UnicodeTables.foldL],\n ['Ll', UnicodeTables.foldLl],\n ['Lt', UnicodeTables.foldLt],\n ['Lu', UnicodeTables.foldLu],\n ['M', UnicodeTables.foldM],\n ['Mn', UnicodeTables.foldMn]\n ])\n\n static FOLD_SCRIPT = new Map([\n ['Common', UnicodeTables.foldCommon],\n ['Greek', UnicodeTables.foldGreek],\n ['Inherited', UnicodeTables.foldInherited]\n ])\n}\n\nexport { UnicodeTables }\n","import { Codepoint } from './Codepoint'\nimport { UnicodeTables } from './UnicodeTables'\n/**\n * Utilities for dealing with Unicode better than JS does.\n */\nclass Unicode {\n // The highest legal rune value.\n static MAX_RUNE = 0x10ffff\n // The highest legal ASCII value.\n static MAX_ASCII = 0x7f\n // The highest legal Latin-1 value.\n static MAX_LATIN1 = 0xff\n // The highest legal Basic Multilingual Plane (BMP) value.\n static MAX_BMP = 0xffff\n // Minimum and maximum runes involved in folding.\n // Checked during test.\n static MIN_FOLD = 0x0041\n static MAX_FOLD = 0x1044f\n\n // is32 uses binary search to test whether rune is in the specified\n // slice of 32-bit ranges.\n static is32(ranges, r) {\n // binary search over ranges\n let lo = 0\n let hi = ranges.length\n while (lo < hi) {\n let m = lo + Math.floor((hi - lo) / 2)\n let range = ranges[m]\n if (range[0] <= r && r <= range[1]) {\n return (r - range[0]) % range[2] === 0\n }\n if (r < range[0]) {\n hi = m\n } else {\n lo = m + 1\n }\n }\n return false\n }\n\n // is tests whether rune is in the specified table of ranges.\n static is(ranges, r) {\n // common case: rune is ASCII or Latin-1, so use linear search.\n if (r <= this.MAX_LATIN1) {\n for (let range of ranges) {\n // range = [lo, hi, stride]\n if (r > range[1]) {\n continue\n }\n if (r < range[0]) {\n return false\n }\n return (r - range[0]) % range[2] === 0\n }\n return false\n }\n return ranges.length > 0 && r >= ranges[0][0] && this.is32(ranges, r)\n }\n\n // isUpper reports whether the rune is an upper case letter.\n static isUpper(r) {\n if (r <= this.MAX_LATIN1) {\n const s = String.fromCodePoint(r)\n return s.toUpperCase() === s && s.toLowerCase() !== s\n }\n return this.is(UnicodeTables.Upper, r)\n }\n\n // isPrint reports whether the rune is printable (Unicode L/M/N/P/S or ' ').\n static isPrint(r) {\n if (r <= this.MAX_LATIN1) {\n return (r >= 0x20 && r < 0x7f) || (r >= 0xa1 && r !== 0xad)\n }\n return (\n this.is(UnicodeTables.L, r) ||\n this.is(UnicodeTables.M, r) ||\n this.is(UnicodeTables.N, r) ||\n this.is(UnicodeTables.P, r) ||\n this.is(UnicodeTables.S, r)\n )\n }\n\n // simpleFold iterates over Unicode code points equivalent under\n // the Unicode-defined simple case folding. Among the code points\n // equivalent to rune (including rune itself), SimpleFold returns the\n // smallest r >= rune if one exists, or else the smallest r >= 0.\n //\n // For example:\n // SimpleFold('A') = 'a'\n // SimpleFold('a') = 'A'\n //\n // SimpleFold('K') = 'k'\n // SimpleFold('k') = '\\u212A' (Kelvin symbol, K)\n // SimpleFold('\\u212A') = 'K'\n //\n // SimpleFold('1') = '1'\n //\n // Derived from Go's unicode.SimpleFold.\n //\n static simpleFold(r) {\n // Consult caseOrbit table for special cases.\n if (UnicodeTables.CASE_ORBIT.has(r)) {\n return UnicodeTables.CASE_ORBIT.get(r)\n }\n\n // No folding specified. This is a one- or two-element\n // equivalence class containing rune and toLower(rune)\n // and toUpper(rune) if they are different from rune.\n const l = Codepoint.toLowerCase(r)\n if (l !== r) {\n return l\n }\n return Codepoint.toUpperCase(r)\n }\n\n // equalsIgnoreCase performs case-insensitive equality comparison\n // on the given runes |r1| and |r2|, with special consideration\n // for the likely scenario where both runes are ASCII characters.\n // -1 is interpreted as the end-of-file mark.\n static equalsIgnoreCase(r1, r2) {\n // Runes already match, or one of them is EOF\n if (r1 < 0 || r2 < 0 || r1 === r2) {\n return true\n }\n\n // Fast path for the common case where both runes are ASCII characters.\n // Coerces both runes to lowercase if applicable.\n if (r1 <= this.MAX_ASCII && r2 <= this.MAX_ASCII) {\n if (Codepoint.CODES.get('A') <= r1 && r1 <= Codepoint.CODES.get('Z')) {\n r1 |= 0x20\n }\n\n if (Codepoint.CODES.get('A') <= r2 && r2 <= Codepoint.CODES.get('Z')) {\n r2 |= 0x20\n }\n\n return r1 === r2\n }\n\n // Fall back to full Unicode case folding otherwise.\n // Invariant: r1 must be non-negative\n for (let r = this.simpleFold(r1); r !== r1; r = this.simpleFold(r)) {\n if (r === r2) {\n return true\n }\n }\n\n return false\n }\n}\n\nexport { Unicode }\n","import { Codepoint } from './Codepoint'\nimport { Unicode } from './Unicode'\n/**\n * Various constants and helper utilities.\n */\nclass Utils {\n static METACHARACTERS = '\\\\.+*?()|[]{}^$'\n\n //// EMPTY_* flags\n static EMPTY_BEGIN_LINE = 0x01\n static EMPTY_END_LINE = 0x02\n static EMPTY_BEGIN_TEXT = 0x04\n static EMPTY_END_TEXT = 0x08\n static EMPTY_WORD_BOUNDARY = 0x10\n static EMPTY_NO_WORD_BOUNDARY = 0x20\n static EMPTY_ALL = -1\n\n static emptyInts() {\n return []\n }\n\n // Returns true iff |c| is an ASCII letter or decimal digit.\n static isalnum(c) {\n return (\n (Codepoint.CODES.get('0') <= c && c <= Codepoint.CODES.get('9')) ||\n (Codepoint.CODES.get('a') <= c && c <= Codepoint.CODES.get('z')) ||\n (Codepoint.CODES.get('A') <= c && c <= Codepoint.CODES.get('Z'))\n )\n }\n\n // If |c| is an ASCII hex digit, returns its value, otherwise -1.\n static unhex(c) {\n if (Codepoint.CODES.get('0') <= c && c <= Codepoint.CODES.get('9')) {\n return c - Codepoint.CODES.get('0')\n }\n if (Codepoint.CODES.get('a') <= c && c <= Codepoint.CODES.get('f')) {\n return c - Codepoint.CODES.get('a') + 10\n }\n if (Codepoint.CODES.get('A') <= c && c <= Codepoint.CODES.get('F')) {\n return c - Codepoint.CODES.get('A') + 10\n }\n return -1\n }\n\n // Appends a RE2 literal to |out| for rune |rune|,\n // with regexp metacharacters escaped.\n static escapeRune(rune) {\n let out = ''\n if (Unicode.isPrint(rune)) {\n if (this.METACHARACTERS.indexOf(String.fromCodePoint(rune)) >= 0) {\n out += '\\\\'\n }\n out += String.fromCodePoint(rune)\n } else {\n switch (rune) {\n case Codepoint.CODES.get('\"'): // '\"'\n out += '\\\\\"'\n break\n case Codepoint.CODES.get('\\\\'): // '\\\\'\n out += '\\\\\\\\'\n break\n case Codepoint.CODES.get('\\t'): // '\\t'\n out += '\\\\t'\n break\n case Codepoint.CODES.get('\\n'): // '\\n'\n out += '\\\\n'\n break\n case Codepoint.CODES.get('\\r'): // '\\r'\n out += '\\\\r'\n break\n case Codepoint.CODES.get('\\b'): // '\\b'\n out += '\\\\b'\n break\n case Codepoint.CODES.get('\\f'): // '\\f'\n out += '\\\\f'\n break\n default: {\n let s = rune.toString(16)\n if (rune < 0x100) {\n out += '\\\\x'\n if (s.length === 1) {\n out += '0'\n }\n out += s\n } else {\n out += `\\\\x{${s}}`\n }\n break\n }\n }\n }\n return out\n }\n\n // Returns the array of runes in the specified Java UTF-16 string.\n static stringToRunes(str) {\n return String(str)\n .split('')\n .map((s) => s.codePointAt(0))\n }\n\n // Returns the Java UTF-16 string containing the single rune |r|.\n static runeToString(r) {\n return String.fromCodePoint(r)\n }\n\n // isWordRune reports whether r is consider a ``word character''\n // during the evaluation of the \\b and \\B zero-width assertions.\n // These assertions are ASCII-only: the word characters are [A-Za-z0-9_].\n static isWordRune(r) {\n return (\n (Codepoint.CODES.get('a') <= r && r <= Codepoint.CODES.get('z')) ||\n (Codepoint.CODES.get('A') <= r && r <= Codepoint.CODES.get('Z')) ||\n (Codepoint.CODES.get('0') <= r && r <= Codepoint.CODES.get('9')) ||\n r === Codepoint.CODES.get('_')\n )\n }\n\n // emptyOpContext returns the zero-width assertions satisfied at the position\n // between the runes r1 and r2, a bitmask of EMPTY_* flags.\n // Passing r1 == -1 indicates that the position is at the beginning of the\n // text.\n // Passing r2 == -1 indicates that the position is at the end of the text.\n // eslint-disable-next-line no-warning-comments\n // TODO(adonovan): move to Machine.\n static emptyOpContext(r1, r2) {\n let op = 0\n if (r1 < 0) {\n op |= this.EMPTY_BEGIN_TEXT | this.EMPTY_BEGIN_LINE\n }\n if (r1 === Codepoint.CODES.get('\\n')) {\n op |= this.EMPTY_BEGIN_LINE\n }\n if (r2 < 0) {\n op |= this.EMPTY_END_TEXT | this.EMPTY_END_LINE\n }\n if (r2 === Codepoint.CODES.get('\\n')) {\n op |= this.EMPTY_END_LINE\n }\n if (this.isWordRune(r1) !== this.isWordRune(r2)) {\n op |= this.EMPTY_WORD_BOUNDARY\n } else {\n op |= this.EMPTY_NO_WORD_BOUNDARY\n }\n return op\n }\n\n /**\n * Returns a string that quotes all regular expression metacharacters inside the argument text;\n * the returned string is a regular expression matching the literal text. For example,\n * {@code quoteMeta(\"[foo]\").equals(\"\\\\[foo\\\\]\")}.\n * @param {string} s\n * @return {string}\n */\n static quoteMeta(str) {\n return str\n .split('') // A char loop is correct because all metacharacters fit in one UTF-16 code.\n .map((s) => {\n if (this.METACHARACTERS.indexOf(s) >= 0) {\n return `\\\\${s}`\n }\n return s\n })\n .join('')\n }\n\n static charCount(codePoint) {\n return codePoint > Unicode.MAX_BMP ? 2 : 1\n }\n\n static stringToUtf8ByteArray(str) {\n if (globalThis.TextEncoder) {\n return Array.from(new TextEncoder().encode(str))\n } else {\n // fallback, if no TextEncoder\n let out = [],\n p = 0\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i)\n if (c < 128) {\n out[p++] = c\n } else if (c < 2048) {\n out[p++] = (c >> 6) | 192\n out[p++] = (c & 63) | 128\n } else if (\n (c & 0xfc00) === 0xd800 &&\n i + 1 < str.length &&\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00\n ) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff)\n out[p++] = (c >> 18) | 240\n out[p++] = ((c >> 12) & 63) | 128\n out[p++] = ((c >> 6) & 63) | 128\n out[p++] = (c & 63) | 128\n } else {\n out[p++] = (c >> 12) | 224\n out[p++] = ((c >> 6) & 63) | 128\n out[p++] = (c & 63) | 128\n }\n }\n return out\n }\n }\n\n static utf8ByteArrayToString(bytes) {\n if (globalThis.TextDecoder) {\n return new TextDecoder('utf-8').decode(new Uint8Array(bytes))\n } else {\n // fallback, if no TextDecoder\n let out = [],\n pos = 0,\n c = 0\n while (pos < bytes.length) {\n let c1 = bytes[pos++]\n if (c1 < 128) {\n out[c++] = String.fromCharCode(c1)\n } else if (c1 > 191 && c1 < 224) {\n let c2 = bytes[pos++]\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63))\n } else if (c1 > 239 && c1 < 365) {\n // Surrogate Pair\n let c2 = bytes[pos++]\n let c3 = bytes[pos++]\n let c4 = bytes[pos++]\n let u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) - 0x10000\n out[c++] = String.fromCharCode(0xd800 + (u >> 10))\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023))\n } else {\n let c2 = bytes[pos++]\n let c3 = bytes[pos++]\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63))\n }\n }\n return out.join('')\n }\n }\n}\n\nexport { Utils }\n","// helper to create enums\n// example\n// Encoding[(Encoding['UTF_16'] = 0)] = 'UTF_16'\n// Encoding[(Encoding['UTF_8'] = 1)] = 'UTF_8'\nconst createEnum = (values = [], initNum = 0) => {\n const enumObject = {}\n for (let i = 0; i < values.length; i++) {\n const val = values[i]\n const keyVal = initNum + i\n enumObject[val] = keyVal\n enumObject[keyVal] = val\n }\n return Object.freeze(enumObject)\n}\n\nexport { createEnum }\n","import { Utils } from './Utils'\nimport { createEnum } from './helpers'\n\n/**\n * Abstract the representations of input text supplied to Matcher.\n */\nclass MatcherInputBase {\n static Encoding = createEnum(['UTF_16', 'UTF_8'])\n\n getEncoding() {\n throw Error('not implemented')\n }\n\n isUTF8Encoding() {\n return this.getEncoding() === MatcherInputBase.Encoding.UTF_8\n }\n\n isUTF16Encoding() {\n return this.getEncoding() === MatcherInputBase.Encoding.UTF_16\n }\n}\n\nclass Utf8MatcherInput extends MatcherInputBase {\n constructor(bytes = null) {\n super()\n this.bytes = bytes\n }\n\n getEncoding() {\n return MatcherInputBase.Encoding.UTF_8\n }\n\n asCharSequence() {\n return Utils.utf8ByteArrayToString(this.bytes)\n }\n\n asBytes() {\n return this.bytes\n }\n\n length() {\n return this.bytes.length\n }\n}\n\nclass Utf16MatcherInput extends MatcherInputBase {\n constructor(charSequence = null) {\n super()\n this.charSequence = charSequence\n }\n\n getEncoding() {\n return MatcherInputBase.Encoding.UTF_16\n }\n\n asCharSequence() {\n return this.charSequence\n }\n\n asBytes() {\n return this.charSequence\n .toString()\n .split('')\n .map((s) => s.codePointAt(0))\n }\n\n length() {\n return this.charSequence.length\n }\n}\n\nclass MatcherInput {\n /**\n * Return the MatcherInput for UTF_16 encoding.\n */\n static utf16(charSequence) {\n return new Utf16MatcherInput(charSequence)\n }\n\n /**\n * Return the MatcherInput for UTF_8 encoding.\n */\n static utf8(input) {\n if (Array.isArray(input)) {\n return new Utf8MatcherInput(input)\n }\n\n return new Utf8MatcherInput(Utils.stringToUtf8ByteArray(input))\n }\n}\n\nexport { MatcherInput, MatcherInputBase }\n","import { Codepoint } from './Codepoint'\nimport { RE2Flags } from './RE2Flags'\nimport { MatcherInput, MatcherInputBase } from './MatcherInput'\nimport { Utils } from './Utils'\n\n/**\n * A stateful iterator that interprets a regex {@code RE2JS} on a specific input.\n *\n * <p>\n * Conceptually, a Matcher consists of four parts:\n * <ol>\n * <li>A compiled regular expression {@code RE2JS}, set at construction and fixed for the lifetime\n * of the matcher.</li>\n *\n * <li>The remainder of the input string, set at construction or {@link #reset()} and advanced by\n * each match operation such as {@link #find}, {@link #matches} or {@link #lookingAt}.</li>\n *\n * <li>The current match information, accessible via {@link #start}, {@link #end}, and\n * {@link #group}, and updated by each match operation.</li>\n *\n * <li>The append position, used and advanced by {@link #appendReplacement} and {@link #appendTail}\n * if performing a search and replace from the input to an external {@code StringBuffer}.\n *\n * </ol>\n *\n *\n * @author rsc@google.com (Russ Cox)\n */\nclass Matcher {\n /**\n * Quotes '\\' and '$' in {@code s}, so that the returned string could be used in\n * {@link #appendReplacement} as a literal replacement of {@code s}.\n *\n * @param {string} s the string to be quoted\n * @return {string} the quoted string\n */\n static quoteReplacement(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('$') < 0) {\n return str\n }\n\n return str\n .split('')\n .map((s) => {\n const c = s.codePointAt(0)\n if (c === Codepoint.CODES['\\\\'] || c === Codepoint.CODES['$']) {\n return `\\\\${s}`\n }\n return s\n })\n .join('')\n }\n\n constructor(pattern, input) {\n if (pattern === null) {\n throw new Error('pattern is null')\n }\n // The pattern being matched.\n this.patternInput = pattern\n const re2 = this.patternInput.re2()\n // The number of submatches (groups) in the pattern.\n this.patternGroupCount = re2.numberOfCapturingGroups()\n // The group indexes, in [start, end) pairs. Zeroth pair is overall match.\n this.groups = []\n this.namedGroups = re2.namedGroups\n\n if (input instanceof MatcherInputBase) {\n this.resetMatcherInput(input)\n } else if (Array.isArray(input)) {\n this.resetMatcherInput(MatcherInput.utf8(input))\n } else {\n this.resetMatcherInput(MatcherInput.utf16(input))\n }\n }\n\n /** Returns the {@code RE2JS} associated with this {@code Matcher}. */\n pattern() {\n return this.patternInput\n }\n\n /**\n * Resets the {@code Matcher}, rewinding input and discarding any match information.\n *\n * @return the {@code Matcher} itself, for chained method calls\n */\n reset() {\n // The input length in UTF16 codes.\n this.matcherInputLength = this.matcherInput.length()\n // The append position: where the next append should start.\n this.appendPos = 0\n // Is there a current match?\n this.hasMatch = false\n // Have we found the submatches (groups) of the current match?\n // group[0], group[1] are set regardless.\n this.hasGroups = false\n // The anchor flag to use when repeating the match to find subgroups.\n this.anchorFlag = 0\n return this\n }\n\n /**\n * Resets the {@code Matcher} and changes the input.\n *\n */\n resetMatcherInput(input) {\n if (input === null) {\n throw new Error('input is null')\n }\n this.matcherInput = input\n this.reset()\n return this\n }\n\n /**\n * Returns the start of the named group of the most recent match, or -1 if the group was not\n * matched.\n *\n */\n start(group = 0) {\n if (typeof group === 'string') {\n const groupInt = this.namedGroups[group]\n if (!Number.isFinite(groupInt)) {\n throw new Error(`group '${group}' not found`)\n }\n group = groupInt\n }\n\n this.loadGroup(group)\n return this.groups[2 * group]\n }\n /**\n * Returns the end of the named group of the most recent match, or -1 if the group was not\n * matched.\n *\n */\n end(group = 0) {\n if (typeof group === 'string') {\n const groupInt = this.namedGroups[group]\n if (!Number.isFinite(groupInt)) {\n throw new Error(`group '${group}' not found`)\n }\n group = groupInt\n }\n\n this.loadGroup(group)\n return this.groups[2 * group + 1]\n }\n\n /**\n * Returns the named group of the most recent match, or {@code null} if the group was not matched.\n *\n */\n group(group = 0) {\n if (typeof group === 'string') {\n const groupInt = this.namedGroups[group]\n if (!Number.isFinite(groupInt)) {\n throw new Error(`group '${group}' not found`)\n }\n group = groupInt\n }\n\n const start = this.start(group)\n const end = this.end(group)\n if (start < 0 && end < 0) {\n return null\n }\n return this.substring(start, end)\n }\n /**\n * Returns the number of subgroups in this pattern.\n *\n * @return {number} the number of subgroups; the overall match (group 0) does not count\n */\n groupCount() {\n return this.patternGroupCount\n }\n\n /**\n * Helper: finds subgroup information if needed for group.\n * @param {number} group\n * @private\n */\n loadGroup(group) {\n if (group < 0 || group > this.patternGroupCount) {\n throw new Error(`Group index out of bounds: ${group}`)\n }\n\n if (!this.hasMatch) {\n throw new Error('perhaps no match attempted')\n }\n\n if (group === 0 || this.hasGroups) {\n return\n }\n\n let end = this.groups[1] + 1\n if (end > this.matcherInputLength) {\n end = this.matcherInputLength\n }\n\n const res = this.patternInput\n .re2()\n .matchMachineInput(\n this.matcherInput,\n this.groups[0],\n end,\n this.anchorFlag,\n 1 + this.patternGroupCount\n )\n\n const ok = res[0]\n if (!ok) {\n throw new Error('inconsistency in matching group data')\n }\n this.groups = res[1]\n this.hasGroups = true\n }\n\n /**\n * Matches the entire input against the pattern (anchored start and end). If there is a match,\n * {@code matches} sets the match state to describe it.\n *\n * @return {boolean} true if the entire input matches the pattern\n */\n matches() {\n return this.genMatch(0, RE2Flags.ANCHOR_BOTH)\n }\n\n /**\n * Matches the beginning of input against the pattern (anchored start). If there is a match,\n * {@code lookingAt} sets the match state to describe it.\n *\n * @return {boolean} true if the beginning of the input matches the pattern\n */\n lookingAt() {\n return this.genMatch(0, RE2Flags.ANCHOR_START)\n }\n\n /**\n * Matches the input against the pattern (unanchored), starting at a specified position. If there\n * is a match, {@code find} sets the match state to describe it.\n *\n * @param start the input position where the search begins\n * @return true if it finds a match\n * @throws IndexOutOfBoundsException if start is not a valid input position\n */\n find(start = null) {\n if (start !== null) {\n if (start < 0 || start > this.matcherInputLength) {\n throw new Error(`start index out of bounds: ${start}`)\n }\n this.reset()\n return this.genMatch(start, 0)\n }\n // no start\n start = 0\n if (this.hasMatch) {\n start = this.groups[1]\n if (this.groups[0] === this.groups[1]) {\n start++\n }\n }\n\n return this.genMatch(start, RE2Flags.UNANCHORED)\n }\n\n /**\n * Helper: does match starting at start, with RE2 anchor flag.\n * @param {number} startByte\n * @param {number} anchor\n * @return {boolean}\n * @private\n */\n genMatch(startByte, anchor) {\n const res = this.patternInput\n .re2()\n .matchMachineInput(this.matcherInput, startByte, this.matcherInputLength, anchor, 1)\n\n const ok = res[0]\n if (!ok) {\n return false\n }\n this.groups = res[1]\n this.hasMatch = true\n this.hasGroups = false\n this.anchorFlag = anchor\n return true\n }\n\n /**\n * Helper: return substring for [start, end).\n * @param {number} start\n * @param {number} end\n * @return {string}\n */\n substring(start, end) {\n if (this.matcherInput.isUTF8Encoding()) {\n return Utils.utf8ByteArrayToString(this.matcherInput.asBytes().slice(start, end))\n }\n return this.matcherInput.asCharSequence().substring(start, end).toString()\n }\n\n /**\n * Helper for Pattern: return input length.\n * @return {number}\n */\n inputLength() {\n return this.matcherInputLength\n }\n\n /**\n * Appends to result two strings: the text from the append position up to the beginning of the\n * most recent match, and then the replacement with submatch groups substituted for references of\n * the form {@code $n}, where {@code n} is the group number in decimal. It advances the append\n * position to where the most recent match ended.\n *\n * <p>\n * To embed a literal {@code $}, use \\$ (actually {@code \"\\\\$\"} with string escapes). The escape\n * is only necessary when {@code $} is followed by a digit, but it is always allowed. Only\n * {@code $} and {@code \\} need escaping, but any character can be escaped.\n *\n * <p>\n * The group number {@code n} in {@code $n} is always at least one digit and expands to use more\n * digits as long as the resulting number is a valid group number for this pattern. To cut it off\n * earlier, escape the first digit that should not be used.\n *\n * @param sb the {@link StringBuilder} to append to\n * @param replacement the replacement string\n * @return the {@code Matcher} itself, for chained method calls\n * @throws IllegalStateException if there was no most recent match\n * @throws IndexOutOfBoundsException if replacement refers to an invalid group\n */\n appendReplacement(replacement) {\n let res = ''\n const s = this.start()\n const e = this.end()\n if (this.appendPos < s) {\n res += this.substring(this.appendPos, s)\n }\n this.appendPos = e\n res += this.appendReplacementInternal(replacement)\n return res\n }\n\n appendReplacementInternal(replacement) {\n let res = ''\n let last = 0\n const m = replacement.length\n\n for (let i = 0; i < m - 1; i++) {\n if (replacement.codePointAt(i) === Codepoint.CODES.get('\\\\')) {\n if (last < i) {\n res += replacement.substring(last, i)\n }\n\n i++\n last = i\n continue\n }\n\n if (replacement.codePointAt(i) === Codepoint.CODES.get('$')) {\n let c = replacement.codePointAt(i + 1)\n\n if (Codepoint.CODES.get('0') <= c && c <= Codepoint.CODES.get('9')) {\n let n = c - Codepoint.CODES.get('0')\n if (last < i) {\n res += replacement.substring(last, i)\n }\n\n for (i += 2; i < m; i++) {\n c = replacement.codePointAt(i)\n if (\n c < Codepoint.CODES.get('0') ||\n c > Codepoint.CODES.get('9') ||\n n * 10 + c - Codepoint.CODES.get('0') > this.patternGroupCount\n ) {\n break\n }\n n = n * 10 + c - Codepoint.CODES.get('0')\n }\n\n if (n > this.patternGroupCount) {\n throw new Error(`n > number of groups: ${n}`)\n }\n\n const group = this.group(n)\n if (group !== null) {\n res += group\n }\n\n last = i\n i--\n continue\n } else if (c === Codepoint.CODES.get('{')) {\n if (last < i) {\n res += replacement.substring(last, i)\n }\n\n i++\n let j = i + 1\n while (\n j < replacement.length &&\n replacement.codePointAt(j) !== Codepoint.CODES.get('}') &&\n replacement.codePointAt(j) !== Codepoint.CODES.get(' ')\n ) {\n j++\n }\n\n if (j === replacement.length || replacement.codePointAt(j) !== Codepoint.CODES.get('}')) {\n throw new Error(\"named capture group is missing trailing '}'\")\n }\n\n const groupName = replacement.substring(i + 1, j)\n res += this.group(groupName)\n last = j + 1\n }\n }\n }\n\n if (last < m) {\n res += replacement.substr(last, m)\n }\n\n return res\n }\n\n /**\n * Return the substring of the input from the append position to the end of the\n * input.\n *\n */\n appendTail() {\n return this.substring(this.appendPos, this.matcherInputLength)\n }\n\n /**\n * Returns the input with all matches replaced by {@code replacement}, interpreted as for\n * {@code appendReplacement}.\n *\n * @param {string} replacement the replacement string\n * @return {string} the input string with the matches replaced\n * @throws IndexOutOfBoundsException if replacement refers to an invalid group\n */\n replaceAll(replacement) {\n return this.replace(replacement, true)\n }\n\n /**\n * Returns the input with the first match replaced by {@code replacement}, interpreted as for\n * {@code appendReplacement}.\n *\n * @param {string} replacement the replacement string\n * @return {string} the input string with the first match replaced\n * @throws IndexOutOfBoundsException if replacement refers to an invalid group\n */\n replaceFirst(replacement) {\n return this.replace(replacement, false)\n }\n\n /**\n * Helper: replaceAll/replaceFirst hybrid.\n * @param {string} replacement\n * @param {boolean} all\n * @return {string}\n * @private\n */\n replace(replacement, all) {\n let res = ''\n\n this.reset()\n while (this.find()) {\n res += this.appendReplacement(replacement)\n if (!all) {\n break\n }\n }\n\n res += this.appendTail()\n return res\n }\n}\n\nexport { Matcher }\n","import { Utils } from './Utils'\n/**\n * MachineInput abstracts different representations of the input text supplied to the Machine. It\n * provides one-character lookahead.\n */\nclass MachineInputBase {\n static EOF() {\n return -1 << 3\n }\n\n // can we look ahead without losing info?\n canCheckPrefix() {\n return true\n }\n\n // Returns the end position in the same units as step().\n endPos() {\n return this.end\n }\n}\n\n// An implementation of MachineInput for UTF-8 byte arrays.\n// |pos| and |width| are byte indices.\nclass MachineUTF8Input extends MachineInputBase {\n constructor(bytes, start = 0, end = bytes.length) {\n super()\n this.bytes = bytes\n this.start = start\n this.end = end\n }\n\n // Returns the rune at the specified index; the units are\n // unspecified, but could be UTF-8 byte, UTF-16 char, or rune\n // indices. Returns the width (in the same units) of the rune in\n // the lower 3 bits, and the rune (Unicode code point) in the high\n // bits. Never negative, except for EOF which is represented as -1\n // << 3 | 0.\n step(i) {\n i += this.start\n if (i >= this.end) {\n return MachineInputBase.EOF()\n }\n let x = this.bytes[i++] & 255\n if ((x & 128) === 0) {\n return (x << 3) | 1\n } else if ((x & 224) === 192) {\n x = x & 31\n if (i >= this.end) {\n return MachineInputBase.EOF()\n }\n x = (x << 6) | (this.bytes[i++] & 63)\n return (x << 3) | 2\n } else if ((x & 240) === 224) {\n x = x & 15\n if (i + 1 >= this.end) {\n return MachineInputBase.EOF()\n }\n x = (x << 6) | (this.bytes[i++] & 63)\n x = (x << 6) | (this.bytes[i++] & 63)\n return (x << 3) | 3\n } else {\n x = x & 7\n if (i + 2 >= this.end) {\n return MachineInputBase.EOF()\n }\n x = (x << 6) | (this.bytes[i++] & 63)\n x = (x << 6) | (this.bytes[i++] & 63)\n x = (x << 6) | (this.bytes[i++] & 63)\n return (x << 3) | 4\n }\n }\n\n // Returns the index relative to |pos| at which |re2.prefix| is found\n // in this input stream, or a negative value if not found.\n index(re2, pos) {\n pos += this.start\n const i = this.indexOf(this.bytes, re2.prefixUTF8, pos)\n return i < 0 ? i : i - pos\n }\n\n // Returns a bitmask of EMPTY_* flags.\n context(pos) {\n pos += this.start\n let r1 = -1\n if (pos > this.start && pos <= this.end) {\n let start = pos - 1\n r1 = this.bytes[start--]\n if (r1 >= 128) {\n let lim = pos - 4\n if (lim < this.start) {\n lim = this.start\n }\n while (start >= lim && (this.bytes[start] & 192) === 128) {\n start--\n }\n\n if (start < this.start) {\n start = this.start\n }\n r1 = this.step(start) >> 3\n }\n }\n const r2 = pos < this.end ? this.step(pos) >> 3 : -1\n return Utils.emptyOpContext(r1, r2)\n }\n\n // Returns the index of the first occurrence of array |target| within\n // array |source| after |fromIndex|, or -1 if not found.\n indexOf(source, target, fromIndex = 0) {\n let targetLength = target.length\n if (targetLength === 0) {\n return -1\n }\n\n let sourceLength = source.length\n for (let i = fromIndex; i <= sourceLength - targetLength; i++) {\n for (let j = 0; j < targetLength; j++) {\n if (source[i + j] !== target[j]) {\n break\n } else if (j === targetLength - 1) {\n return i\n }\n }\n }\n\n return -1\n }\n}\n\n// |pos| and |width| are in JS \"char\" units.\nclass MachineUTF16Input extends MachineInputBase {\n constructor(charSequence, start = 0, end = charSequence.length) {\n super()\n this.charSequence = charSequence\n this.start = start\n this.end = end\n }\n\n // Returns the rune at the specified index; the units are\n // unspecified, but could be UTF-8 byte, UTF-16 char, or rune\n // indices. Returns the width (in the same units) of the rune in\n // the lower 3 bits, and the rune (Unicode code point) in the high\n // bits. Never negative, except for EOF which is represented as -1\n // << 3 | 0.\n step(pos) {\n pos += this.start\n if (pos < this.end) {\n const rune = this.charSequence.codePointAt(pos)\n return (rune << 3) | Utils.charCount(rune)\n } else {\n return MachineInputBase.EOF()\n }\n }\n\n // Returns the index relative to |pos| at which |re2.prefix| is found\n // in this input stream, or a negative value if not found.\n index(re2, pos) {\n pos += this.start\n const i = this.charSequence.indexOf(re2.prefix, pos)\n return i < 0 ? i : i - pos\n }\n\n // Returns a bitmask of EMPTY_* flags.\n context(pos) {\n pos += this.start\n const r1 =\n pos > 0 && pos <= this.charSequence.length ? this.charSequence.codePointAt(pos - 1) : -1\n const r2 = pos < this.charSequence.length ? this.charSequence.codePointAt(pos) : -1\n return Utils.emptyOpContext(r1, r2)\n }\n}\n\nclass MachineInput {\n static fromUTF8(bytes, start = 0, end = bytes.length) {\n return new MachineUTF8Input(bytes, start, end)\n }\n\n static fromUTF16(charSequence, start = 0, end = charSequence.length) {\n return new MachineUTF16Input(charSequence, start, end)\n }\n}\n\nexport { MachineInputBase, MachineInput }\n","import { Codepoint } from './Codepoint'\nimport { RE2Flags } from './RE2Flags'\nimport { Unicode } from './Unicode'\nimport { Utils } from './Utils'\nimport { createEnum } from './helpers'\n\n/**\n * Regular expression abstract syntax tree. Produced by parser, used by compiler. NB, this\n * corresponds to {@code syntax.regexp} in the Go implementation; Go's {@code regexp} is called\n * {@code RE2} in Java.\n */\nexport class Regexp {\n static Op = createEnum([\n 'NO_MATCH', // Matches no strings.\n 'EMPTY_MATCH', // Matches empty string.\n 'LITERAL', // Matches runes[] sequence\n 'CHAR_CLASS', // Matches Runes interpreted as range pair list\n 'ANY_CHAR_NOT_NL', // Matches any character except '\\n'\n 'ANY_CHAR', // Matches any character\n 'BEGIN_LINE', // Matches empty string at end of line\n 'END_LINE', // Matches empty string at end of line\n 'BEGIN_TEXT', // Matches empty string at beginning of text\n 'END_TEXT', // Matches empty string at end of text\n 'WORD_BOUNDARY', // Matches word boundary `\\b`\n 'NO_WORD_BOUNDARY', // Matches word non-boundary `\\B`\n 'CAPTURE', // Capturing subexpr with index cap, optional name name\n 'STAR', // Matches subs[0] zero or more times.\n 'PLUS', // Matches subs[0] one or more times.\n 'QUEST', // Matches subs[0] zero or one times.\n 'REPEAT', // Matches subs[0] [min, max] times; max=-1 => no limit.\n 'CONCAT', // Matches concatenation of subs[]\n 'ALTERNATE', // Matches union of subs[]\n // Pseudo ops, used internally by Parser for parsing stack:\n 'LEFT_PAREN',\n 'VERTICAL_BAR'\n ])\n\n static isPseudoOp(op) {\n return op >= Regexp.Op.LEFT_PAREN\n }\n\n static emptySubs() {\n return []\n }\n\n static quoteIfHyphen(rune) {\n if (rune === Codepoint.CODES.get('-')) {\n return '\\\\'\n }\n return ''\n }\n\n static fromRegexp(re) {\n const regex = new Regexp(re.op)\n regex.flags = re.flags\n regex.subs = re.subs\n regex.runes = re.runes\n regex.cap = re.cap\n regex.min = re.min\n regex.max = re.max\n regex.name = re.name\n regex.namedGroups = re.namedGroups\n return regex\n }\n\n constructor(op) {\n this.op = op // operator\n this.flags = 0 // bitmap of parse flags\n // subexpressions, if any. Never null.\n // subs[0] is used as the freelist.\n this.subs = Regexp.emptySubs()\n this.runes = null // matched runes, for LITERAL, CHAR_CLASS\n this.min = 0 // min for REPEAT\n this.max = 0 // max for REPEAT\n this.cap = 0 // capturing index, for CAPTURE\n this.name = null // capturing name, for CAPTURE\n this.namedGroups = {} // map of group name -> capturing index\n }\n\n reinit() {\n this.flags = 0\n this.subs = Regexp.emptySubs()\n this.runes = null\n this.cap = 0\n this.min = 0\n this.max = 0\n this.name = null\n this.namedGroups = {}\n }\n\n toString() {\n return this.appendTo()\n }\n\n // appendTo() appends the Perl syntax for |this| regular expression to out\n appendTo() {\n let out = ''\n switch (this.op) {\n case Regexp.Op.NO_MATCH:\n out += '[^\\\\x00-\\\\x{10FFFF}]'\n break\n case Regexp.Op.EMPTY_MATCH:\n out += '(?:)'\n break\n case Regexp.Op.STAR:\n case Regexp.Op.PLUS:\n case Regexp.Op.QUEST:\n case Regexp.Op.REPEAT: {\n const sub = this.subs[0]\n if (sub.op > Regexp.Op.CAPTURE || (sub.op === Regexp.Op.LITERAL && sub.runes.length > 1)) {\n out += `(?:${sub.appendTo()})`\n } else {\n out += sub.appendTo()\n }\n switch (this.op) {\n case Regexp.Op.STAR:\n out += '*'\n break\n case Regexp.Op.PLUS:\n out += '+'\n break\n case Regexp.Op.QUEST:\n out += '?'\n break\n case Regexp.Op.REPEAT:\n out += `{${this.min}`\n if (this.min !== this.max) {\n out += ','\n if (this.max >= 0) {\n out += this.max\n }\n }\n out += '}'\n break\n }\n if ((this.flags & RE2Flags.NON_GREEDY) !== 0) {\n out += '?'\n }\n break\n }\n\n case Regexp.Op.CONCAT: {\n for (let sub of this.subs) {\n if (sub.op === Regexp.Op.ALTERNATE) {\n out += `(?:${sub.appendTo()})`\n } else {\n out += sub.appendTo()\n }\n }\n break\n }\n\n case Regexp.Op.ALTERNATE: {\n let sep = ''\n for (let sub of this.subs) {\n out += sep\n sep = '|'\n out += sub.appendTo()\n }\n break\n }\n\n case Regexp.Op.LITERAL:\n if ((this.flags & RE2Flags.FOLD_CASE) !== 0) {\n out += '(?i:'\n }\n for (let rune of this.runes) {\n out += Utils.escapeRune(rune)\n }\n if ((this.flags & RE2Flags.FOLD_CASE) !== 0) {\n out += ')'\n }\n break\n case Regexp.Op.ANY_CHAR_NOT_NL:\n out += '(?-s:.)'\n break\n case Regexp.Op.ANY_CHAR:\n out += '(?s:.)'\n break\n case Regexp.Op.CAPTURE:\n if (this.name === null || this.name.length === 0) {\n out += '('\n } else {\n out += `(?P<${this.name}>`\n }\n if (this.subs[0].op !== Regexp.Op.EMPTY_MATCH) {\n out += this.subs[0].appendTo()\n }\n out += ')'\n break\n case Regexp.Op.BEGIN_TEXT:\n out += '\\\\A'\n break\n case Regexp.Op.END_TEXT:\n if ((this.flags & RE2Flags.WAS_DOLLAR) !== 0) {\n out += '(?-m:$)'\n } else {\n out += '\\\\z'\n }\n break\n case Regexp.Op.BEGIN_LINE:\n out += '^'\n break\n case Regexp.Op.END_LINE:\n out += '$'\n break\n case Regexp.Op.WORD_BOUNDARY:\n out += '\\\\b'\n break\n case Regexp.Op.NO_WORD_BOUNDARY:\n out += '\\\\B'\n break\n case Regexp.Op.CHAR_CLASS:\n if (this.runes.length % 2 !== 0) {\n out += '[invalid char class]'\n break\n }\n\n out += '['\n if (this.runes.length === 0) {\n out += '^\\\\x00-\\\\x{10FFFF}'\n } else if (this.runes[0] === 0 && this.runes[this.runes.length - 1] === Unicode.MAX_RUNE) {\n out += '^'\n\n for (let i = 1; i < this.runes.length - 1; i += 2) {\n const lo = this.runes[i] + 1\n const hi = this.runes[i + 1] - 1\n\n out += Regexp.quoteIfHyphen(lo)\n out += Utils.escapeRune(lo)\n if (lo !== hi) {\n out += '-'\n out += Regexp.quoteIfHyphen(hi)\n out += Utils.escapeRune(hi)\n }\n }\n } else {\n for (let i = 0; i < this.runes.length; i += 2) {\n const lo = this.runes[i]\n const hi = this.runes[i + 1]\n out += Regexp.quoteIfHyphen(lo)\n out += Utils.escapeRune(lo)\n if (lo !== hi) {\n out += '-'\n out += Regexp.quoteIfHyphen(hi)\n out += Utils.escapeRune(hi)\n }\n }\n }\n out += ']'\n break\n default:\n out += this.op\n break\n }\n return out\n }\n\n // maxCap() walks the regexp to find the maximum capture index.\n maxCap() {\n let m = 0\n if (this.op === Regexp.Op.CAPTURE) {\n m = this.cap\n }\n if (this.subs !== null) {\n for (let sub of this.subs) {\n const n = sub.maxCap()\n if (m < n) {\n m = n\n }\n }\n }\n return m\n }\n\n // equals() returns true if this and that have identical structure.\n equals(that) {\n if (!(that !== null && that instanceof Regexp)) {\n return false\n }\n if (this.op !== that.op) {\n return false\n }\n switch (this.op) {\n case Regexp.Op.END_TEXT: {\n if ((this.flags & RE2Flags.WAS_DOLLAR) !== (that.flags & RE2Flags.WAS_DOLLAR)) {\n return false\n }\n break\n }\n case Regexp.Op.LITERAL:\n case Regexp.Op.CHAR_CLASS: {\n if (this.runes === null && that.runes === null) {\n break\n }\n if (this.runes === null || that.runes === null) {\n return false\n }\n if (this.runes.length !== that.runes.length) {\n return false\n }\n for (let i = 0; i < this.runes.length; i++) {\n if (this.runes[i] !== that.runes[i]) {\n return false\n }\n }\n break\n }\n case Regexp.Op.ALTERNATE:\n case Regexp.Op.CONCAT: {\n if (this.subs.length !== that.subs.length) {\n return false\n }\n for (let i = 0; i < this.subs.length; ++i) {\n if (!this.subs[i].equals(that.subs[i])) {\n return false\n }\n }\n break\n }\n case Regexp.Op.STAR:\n case Regexp.Op.PLUS:\n case Regexp.Op.QUEST: {\n if (\n (this.flags & RE2Flags.NON_GREEDY) !== (that.flags & RE2Flags.NON_GREEDY) ||\n !this.subs[0].equals(that.subs[0])\n ) {\n return false\n }\n break\n }\n case Regexp.Op.REPEAT: {\n if (\n (this.flags & RE2Flags.NON_GREEDY) !== (that.flags & RE2Flags.NON_GREEDY) ||\n this.min !== that.min ||\n this.max !== that.max ||\n !this.subs[0].equals(that.subs[0])\n ) {\n return false\n }\n break\n }\n case Regexp.Op.CAPTURE: {\n if (\n this.cap !== that.cap ||\n (this.name === null ? that.name !== null : this.name !== that.name) ||\n !this.subs[0].equals(that.subs[0])\n ) {\n return false\n }\n break\n }\n }\n return true\n }\n}\n","import { RE2Flags } from './RE2Flags'\nimport { Utils } from './Utils'\nimport { Unicode } from './Unicode'\n/**\n * A single instruction in the regular expression virtual machine.\n *\n * @see http://swtch.com/~rsc/regexp/regexp2.html\n */\nclass Inst {\n static ALT = 1\n static ALT_MATCH = 2\n static CAPTURE = 3\n static EMPTY_WIDTH = 4\n static FAIL = 5\n static MATCH = 6\n static NOP = 7\n static RUNE = 8\n static RUNE1 = 9\n static RUNE_ANY = 10\n static RUNE_ANY_NOT_NL = 11\n\n static isRuneOp(op) {\n return Inst.RUNE <= op && op <= Inst.RUNE_ANY_NOT_NL\n }\n\n // Returns an RE2 expression matching exactly |runes|.\n static escapeRunes(runes) {\n let out = '\"'\n for (let rune of runes) {\n out += Utils.escapeRune(rune)\n }\n out += '\"'\n return out\n }\n\n constructor(op) {\n this.op = op\n this.out = 0 // all but MATCH, FAIL\n this.arg = 0 // ALT, ALT_MATCH, CAPTURE, EMPTY_WIDTH\n // length==1 => exact match\n // otherwise a list of [lo,hi] pairs. hi is *inclusive*.\n this.runes = null\n }\n\n // MatchRune returns true if the instruction matches (and consumes) r.\n // It should only be called when op == InstRune.\n matchRune(r) {\n // Special case: single-rune slice is from literal string, not char\n // class.\n if (this.runes.length === 1) {\n const r0 = this.runes[0]\n if ((this.arg & RE2Flags.FOLD_CASE) !== 0) {\n return Unicode.equalsIgnoreCase(r0, r)\n }\n return r === r0\n }\n // Peek at the first few pairs.\n // Should handle ASCII well.\n for (let j = 0; j < this.runes.length && j <= 8; j += 2) {\n if (r < this.runes[j]) {\n return false\n }\n if (r <= this.runes[j + 1]) {\n return true\n }\n }\n // Otherwise binary search.\n let lo = 0\n let hi = (this.runes.length / 2) | 0\n while (lo < hi) {\n const m = lo + (((hi - lo) / 2) | 0)\n const c = this.runes[2 * m]\n if (c <= r) {\n if (r <= this.runes[2 * m + 1]) {\n return true\n }\n lo = m + 1\n } else {\n hi = m\n }\n }\n\n return false\n }\n /**\n *\n * @return {string}\n */\n toString() {\n switch (this.op) {\n case Inst.ALT:\n return `alt -> ${this.out}, ${this.arg}`\n case Inst.ALT_MATCH:\n return `altmatch -> ${this.out}, ${this.arg}`\n case Inst.CAPTURE:\n return `cap ${this.arg} -> ${this.out}`\n case Inst.EMPTY_WIDTH:\n return `empty ${this.arg} -> ${this.out}`\n case Inst.MATCH:\n return 'match'\n case Inst.FAIL:\n return 'fail'\n case Inst.NOP:\n return `nop -> ${this.out}`\n case Inst.RUNE:\n if (this.runes === null) {\n return 'rune <null>'\n }\n return [\n 'rune ',\n Inst.escapeRunes(this.runes),\n (this.arg & RE2Flags.FOLD_CASE) !== 0 ? '/i' : '',\n ' -> ',\n this.out\n ].join('')\n case Inst.RUNE1:\n return `rune1 ${Inst.escapeRunes(this.runes)} -> ${this.out}`\n case Inst.RUNE_ANY:\n return `any -> ${this.out}`\n case Inst.RUNE_ANY_NOT_NL:\n return `anynotnl -> ${this.out}`\n default:\n throw new Error('unhandled case in Inst.toString')\n }\n }\n}\n\nexport { Inst }\n","import { RE2Flags } from './RE2Flags'\nimport { Inst } from './Inst'\n/**\n * A Prog is a compiled regular expression program.\n */\nclass Prog {\n constructor() {\n this.inst = []\n this.start = 0 // index of start instruction\n // number of CAPTURE insts in re\n // 2 => implicit ( and ) for whole match $0\n this.numCap = 2\n }\n\n // Returns the instruction at the specified pc.\n // Precondition: pc > 0 && pc < numInst().\n getInst(pc) {\n return this.inst[pc]\n }\n\n // Returns the number of instructions in this program.\n numInst() {\n return this.inst.length\n }\n\n // Adds a new instruction to this program, with operator |op| and |pc| equal\n // to |numInst()|.\n addInst(op) {\n this.inst.push(new Inst(op))\n }\n\n // skipNop() follows any no-op or capturing instructions and returns the\n // resulting instruction.\n skipNop(pc) {\n let i = this.inst[pc]\n\n while (i.op === Inst.NOP || i.op === Inst.CAPTURE) {\n i = this.inst[pc]\n pc = i.out\n }\n\n return i\n }\n\n // prefix() returns a pair of a literal string that all matches for the\n // regexp must start with, and a boolean which is true if the prefix is the\n // entire match. The string is returned by appending to |prefix|.\n prefix() {\n let prefix = ''\n let i = this.skipNop(this.start)\n\n if (!Inst.isRuneOp(i.op) || i.runes.length !== 1) {\n return [i.op === Inst.MATCH, prefix]\n }\n\n while (Inst.isRuneOp(i.op) && i.runes.length === 1 && (i.arg & RE2Flags.FOLD_CASE) === 0) {\n prefix += String.fromCodePoint(i.runes[0])\n i = this.skipNop(i.out)\n }\n\n return [i.op === Inst.MATCH, prefix]\n }\n\n // startCond() returns the leading empty-width conditions that must be true\n // in any match. It returns -1 (all bits set) if no matches are possible.\n startCond() {\n let flag = 0\n let pc = this.start\n loop: for (;;) {\n const i = this.inst[pc]\n switch (i.op) {\n case Inst.EMPTY_WIDTH:\n flag |= i.arg\n break\n case Inst.FAIL:\n return -1\n case Inst.CAPTURE:\n case Inst.NOP:\n break\n default:\n break loop\n }\n pc = i.out\n }\n return flag\n }\n\n // --- Patch list ---\n\n // A patchlist is a list of instruction pointers that need to be filled in\n // (patched). Because the pointers haven't been filled in yet, we can reuse\n // their storage to hold the list. It's kind of sleazy, but works well in\n // practice. See http://swtch.com/~rsc/regexp/regexp1.html for inspiration.\n\n // These aren't really pointers: they're integers, so we can reinterpret them\n // this way without using package unsafe. A value l denotes p.inst[l>>1].out\n // (l&1==0) or .arg (l&1==1). l == 0 denotes the empty list, okay because we\n // start every program with a fail instruction, so we'll never want to point\n // at its output link.\n\n next(l) {\n const i = this.inst[l >> 1]\n if ((l & 1) === 0) {\n return i.out\n }\n return i.arg\n }\n\n patch(l, val) {\n while (l !== 0) {\n const i = this.inst[l >> 1]\n if ((l & 1) === 0) {\n l = i.out\n i.out = val\n } else {\n l = i.arg\n i.arg = val\n }\n }\n }\n\n append(l1, l2) {\n if (l1 === 0) {\n return l2\n }\n\n if (l2 === 0) {\n return l1\n }\n\n let last = l1\n for (;;) {\n const next = this.next(last)\n if (next === 0) {\n break\n }\n last = next\n }\n\n const i = this.inst[last >> 1]\n if ((last & 1) === 0) {\n i.out = l2\n } else {\n i.arg = l2\n }\n\n return l1\n }\n /**\n *\n * @return {string}\n */\n toString() {\n let out = ''\n for (let pc = 0; pc < this.inst.length; pc++) {\n const len = out.length\n out += pc\n if (pc === this.start) {\n out += '*'\n }\n out += ' '.substring(out.length - len)\n out += this.inst[pc]\n out += '\\n'\n }\n return out\n }\n}\n\nexport { Prog }\n","import { Codepoint } from './Codepoint'\nimport { RE2Flags } from './RE2Flags'\nimport { Unicode } from './Unicode'\nimport { Utils } from './Utils'\nimport { Regexp } from './Regexp'\nimport { Inst } from './Inst'\nimport { Prog } from './Prog'\n\n/**\n * A fragment of a compiled regular expression program.\n *\n * @see http://swtch.com/~rsc/regexp/regexp1.html\n * @class\n */\nclass Frag {\n constructor(i = 0, out = 0, nullable = false) {\n this.i = i // an instruction address (pc).\n this.out = out // a patch list; see explanation in Prog.js\n this.nullable = nullable // whether the fragment can match the empty string\n }\n}\n/**\n * Compiler from {@code Regexp} (RE2 abstract syntax) to {@code RE2} (compiled regular expression).\n *\n * The only entry point is {@link #compileRegexp}.\n */\nclass Compiler {\n static ANY_RUNE_NOT_NL() {\n return [0, Codepoint.CODES.get('\\n') - 1, Codepoint.CODES.get('\\n') + 1, Unicode.MAX_RUNE]\n }\n\n static ANY_RUNE() {\n return [0, Unicode.MAX_RUNE]\n }\n\n static compileRegexp(re) {\n const c = new Compiler()\n const f = c.compile(re)\n c.prog.patch(f.out, c.newInst(Inst.MATCH).i)\n c.prog.start = f.i\n return c.prog\n }\n\n constructor() {\n this.prog = new Prog()\n this.newInst(Inst.FAIL)\n }\n\n newInst(op) {\n this.prog.addInst(op)\n return new Frag(this.prog.numInst() - 1, 0, true)\n }\n\n // Returns a no-op fragment. Sometimes unavoidable.\n nop() {\n const f = this.newInst(Inst.NOP)\n f.out = f.i << 1\n return f\n }\n\n fail() {\n return new Frag()\n }\n\n // Given fragment a, returns (a) capturing as \\n.\n // Given a fragment a, returns a fragment with capturing parens around a.\n cap(arg) {\n const f = this.newInst(Inst.CAPTURE)\n f.out = f.i << 1\n this.prog.getInst(f.i).arg = arg\n if (this.prog.numCap < arg + 1) {\n this.prog.numCap = arg + 1\n }\n return f\n }\n\n // Given fragments a and b, returns ab; a|b\n cat(f1, f2) {\n // concat of failure is failure\n if (f1.i === 0 || f2.i === 0) {\n return this.fail()\n }\n // eslint-disable-next-line no-warning-comments\n // TODO(rsc): elide nop\n this.prog.patch(f1.out, f2.i)\n return new Frag(f1.i, f2.out, f1.nullable && f2.nullable)\n }\n\n // Given fragments for a and b, returns fragment for a|b.\n alt(f1, f2) {\n // alt of failure is other\n if (f1.i === 0) {\n return f2\n }\n if (f2.i === 0) {\n return f1\n }\n const f = this.newInst(Inst.ALT)\n const i = this.prog.getInst(f.i)\n i.out = f1.i\n i.arg = f2.i\n f.out = this.prog.append(f1.out, f2.out)\n f.nullable = f1.nullable || f2.nullable\n return f\n }\n\n // loop returns the fragment for the main loop of a plus or star.\n // For plus, it can be used directly. with f1.i as the entry.\n // For star, it can be used directly when f1 can't match an empty string.\n // (When f1 can match an empty string, f1* must be implemented as (f1+)?\n // to get the priority match order correct.)\n loop(f1, nongreedy) {\n const f = this.newInst(Inst.ALT)\n const i = this.prog.getInst(f.i)\n if (nongreedy) {\n i.arg = f1.i\n f.out = f.i << 1\n } else {\n i.out = f1.i\n f.out = (f.i << 1) | 1\n }\n this.prog.patch(f1.out, f.i)\n return f\n }\n\n // Given a fragment for a, returns a fragment for a? or a?? (if nongreedy)\n quest(f1, nongreedy) {\n const f = this.newInst(Inst.ALT)\n const i = this.prog.getInst(f.i)\n if (nongreedy) {\n i.arg = f1.i\n f.out = f.i << 1\n } else {\n i.out = f1.i\n f.out = (f.i << 1) | 1\n }\n f.out = this.prog.append(f.out, f1.out)\n return f\n }\n\n // Given a fragment a, returns a fragment for a* or a*? (if nongreedy)\n star(f1, nongreedy) {\n if (f1.nullable) {\n return this.quest(this.plus(f1, nongreedy), nongreedy)\n }\n return this.loop(f1, nongreedy)\n }\n\n // Given a fragment for a, returns a fragment for a+ or a+? (if nongreedy)\n plus(f1, nongreedy) {\n return new Frag(f1.i, this.loop(f1, nongreedy).out, f1.nullable)\n }\n\n // op is a bitmask of EMPTY_* flags.\n empty(op) {\n const f = this.newInst(Inst.EMPTY_WIDTH)\n this.prog.getInst(f.i).arg = op\n f.out = f.i << 1\n return f\n }\n\n // flags : parser flags\n rune(runes, flags) {\n const f = this.newInst(Inst.RUNE)\n f.nullable = false\n const i = this.prog.getInst(f.i)\n i.runes = runes\n flags &= RE2Flags.FOLD_CASE\n if (runes.length !== 1 || Unicode.simpleFold(runes[0]) === runes[0]) {\n flags &= ~RE2Flags.FOLD_CASE\n }\n i.arg = flags\n f.out = f.i << 1\n if (\n ((flags & RE2Flags.FOLD_CASE) === 0 && runes.length === 1) ||\n (runes.length === 2 && runes[0] === runes[1])\n ) {\n i.op = Inst.RUNE1\n } else if (runes.length === 2 && runes[0] === 0 && runes[1] === Unicode.MAX_RUNE) {\n i.op = Inst.RUNE_ANY\n } else if (\n runes.length === 4 &&\n runes[0] === 0 &&\n runes[1] === Codepoint.CODES.get('\\n') - 1 &&\n runes[2] === Codepoint.CODES.get('\\n') + 1 &&\n runes[3] === Unicode.MAX_RUNE\n ) {\n i.op = Inst.RUNE_ANY_NOT_NL\n }\n return f\n }\n\n compile(re) {\n switch (re.op) {\n case Regexp.Op.NO_MATCH:\n return this.fail()\n case Regexp.Op.EMPTY_MATCH:\n return this.nop()\n case Regexp.Op.LITERAL:\n if (re.runes.length === 0) {\n return this.nop()\n } else {\n let f = null\n for (let r of re.runes) {\n const f1 = this.rune([r], re.flags)\n f = f === null ? f1 : this.cat(f, f1)\n }\n return f\n }\n case Regexp.Op.CHAR_CLASS:\n return this.rune(re.runes, re.flags)\n case Regexp.Op.ANY_CHAR_NOT_NL:\n return this.rune(Compiler.ANY_RUNE_NOT_NL(), 0)\n case Regexp.Op.ANY_CHAR:\n return this.rune(Compiler.ANY_RUNE(), 0)\n case Regexp.Op.BEGIN_LINE:\n return this.empty(Utils.EMPTY_BEGIN_LINE)\n case Regexp.Op.END_LINE:\n return this.empty(Utils.EMPTY_END_LINE)\n case Regexp.Op.BEGIN_TEXT:\n return this.empty(Utils.EMPTY_BEGIN_TEXT)\n case Regexp.Op.END_TEXT:\n return this.empty(Utils.EMPTY_END_TEXT)\n case Regexp.Op.WORD_BOUNDARY:\n return this.empty(Utils.EMPTY_WORD_BOUNDARY)\n case Regexp.Op.NO_WORD_BOUNDARY:\n return this.empty(Utils.EMPTY_NO_WORD_BOUNDARY)\n case Regexp.Op.CAPTURE: {\n const bra = this.cap(re.cap << 1)\n const sub = this.compile(re.subs[0])\n const ket = this.cap((re.cap << 1) | 1)\n return this.cat(this.cat(bra, sub), ket)\n }\n case Regexp.Op.STAR:\n return this.star(this.compile(re.subs[0]), (re.flags & RE2Flags.NON_GREEDY) !== 0)\n case Regexp.Op.PLUS:\n return this.plus(this.compile(re.subs[0]), (re.flags & RE2Flags.NON_GREEDY) !== 0)\n case Regexp.Op.QUEST:\n return this.quest(this.compile(re.subs[0]), (re.flags & RE2Flags.NON_GREEDY) !== 0)\n case Regexp.Op.CONCAT: {\n if (re.subs.length === 0) {\n return this.nop()\n } else {\n let f = null\n for (let sub of re.subs) {\n const f1 = this.compile(sub)\n f = f === null ? f1 : this.cat(f, f1)\n }\n return f\n }\n }\n case Regexp.Op.ALTERNATE: {\n if (re.subs.length === 0) {\n return this.nop()\n } else {\n let f = null\n for (let sub of re.subs) {\n const f1 = this.compile(sub)\n f = f === null ? f1 : this.alt(f, f1)\n }\n return f\n }\n }\n default:\n throw new Error('regexp: unhandled case in compile')\n }\n }\n}\n\nexport { Compiler }\n","import { RE2Flags } from './RE2Flags'\nimport { Regexp } from './Regexp'\n\nclass Simplify {\n // Simplify returns a regexp equivalent to re but without counted\n // repetitions and with various other simplifications, such as\n // rewriting /(?:a+)+/ to /a+/. The resulting regexp will execute\n // correctly but its string representation will not produce the same\n // parse tree, because capturing parentheses may have been duplicated\n // or removed. For example, the simplified form for /(x){1,2}/ is\n // /(x)(x)?/ but both parentheses capture as $1. The returned regexp\n // may share structure with or be the original.\n static simplify(re) {\n if (re === null) {\n return null\n }\n\n switch (re.op) {\n case Regexp.Op.CAPTURE:\n case Regexp.Op.CONCAT:\n case Regexp.Op.ALTERNATE: {\n let nre = re\n for (let i = 0; i < re.subs.length; i++) {\n const sub = re.subs[i]\n const nsub = Simplify.simplify(sub)\n if (nre === re && nsub !== sub) {\n nre = Regexp.fromRegexp(re)\n nre.runes = null\n nre.subs = re.subs.slice(0, re.subs.length)\n }\n if (nre !== re) {\n nre.subs[i] = nsub\n }\n }\n return nre\n }\n\n case Regexp.Op.STAR:\n case Regexp.Op.PLUS:\n case Regexp.Op.QUEST: {\n const sub = Simplify.simplify(re.subs[0])\n return Simplify.simplify1(re.op, re.flags, sub, re)\n }\n\n case Regexp.Op.REPEAT: {\n // Special special case: x{0} matches the empty string\n // and doesn't even need to consider x.\n if (re.min === 0 && re.max === 0) {\n return new Regexp(Regexp.Op.EMPTY_MATCH)\n }\n // The fun begins.\n const sub = Simplify.simplify(re.subs[0])\n\n // x{n,} means at least n matches of x.\n if (re.max === -1) {\n // Special case: x{0,} is x*.\n if (re.min === 0) {\n return Simplify.simplify1(Regexp.Op.STAR, re.flags, sub, null)\n }\n // Special case: x{1,} is x+.\n if (re.min === 1) {\n return Simplify.simplify1(Regexp.Op.PLUS, re.flags, sub, null)\n }\n // General case: x{4,} is xxxx+.\n const nre = new Regexp(Regexp.Op.CONCAT)\n const subs = []\n for (let i = 0; i < re.min - 1; i++) {\n subs.push(sub)\n }\n subs.push(Simplify.simplify1(Regexp.Op.PLUS, re.flags, sub, null))\n nre.subs = subs.slice(0)\n return nre\n }\n // Special case x{0} handled above.\n\n // Special case: x{1} is just x.\n if (re.min === 1 && re.max === 1) {\n return sub\n }\n\n // General case: x{n,m} means n copies of x and m copies of x?\n // The machine will do less work if we nest the final m copies,\n // so that x{2,5} = xx(x(x(x)?)?)?\n\n // Build leading prefix: xx.\n let prefixSubs = null\n if (re.min > 0) {\n prefixSubs = []\n for (let i = 0; i < re.min; i++) {\n prefixSubs.push(sub)\n }\n }\n\n // Build and attach suffix: (x(x(x)?)?)?\n if (re.max > re.min) {\n let suffix = Simplify.simplify1(Regexp.Op.QUEST, re.flags, sub, null)\n for (let i = re.min + 1; i < re.max; i++) {\n const nre2 = new Regexp(Regexp.Op.CONCAT)\n nre2.subs = [sub, suffix]\n suffix = Simplify.simplify1(Regexp.Op.QUEST, re.flags, nre2, null)\n }\n\n if (prefixSubs === null) {\n return suffix\n }\n\n prefixSubs.push(suffix)\n }\n\n if (prefixSubs !== null) {\n const prefix = new Regexp(Regexp.Op.CONCAT)\n prefix.subs = prefixSubs.slice(0)\n return prefix\n }\n\n // Some degenerate case like min > max or min < max < 0.\n // Handle as impossible match.\n return new Regexp(Regexp.Op.NO_MATCH)\n }\n }\n return re\n }\n\n // simplify1 implements Simplify for the unary OpStar,\n // OpPlus, and OpQuest operators. It returns the simple regexp\n // equivalent to\n //\n // Regexp{Op: op, Flags: flags, Sub: {sub}}\n //\n // under the assumption that sub is already simple, and\n // without first allocating that structure. If the regexp\n // to be returned turns out to be equivalent to re, simplify1\n // returns re instead.\n //\n // simplify1 is factored out of Simplify because the implementation\n // for other operators generates these unary expressions.\n // Letting them call simplify1 makes sure the expressions they\n // generate are simple.\n static simplify1(op, flags, sub, re) {\n // Special case: repeat the empty string as much as\n // you want, but it's still the empty string.\n if (sub.op === Regexp.Op.EMPTY_MATCH) {\n return sub\n }\n\n // The operators are idempotent if the flags match.\n if (op === sub.op && (flags & RE2Flags.NON_GREEDY) === (sub.flags & RE2Flags.NON_GREEDY)) {\n return sub\n }\n\n if (\n re !== null &&\n re.op === op &&\n (re.flags & RE2Flags.NON_GREEDY) === (flags & RE2Flags.NON_GREEDY) &&\n sub === re.subs[0]\n ) {\n return re\n }\n\n re = new Regexp(op)\n re.flags = flags\n re.subs = [sub]\n return re\n }\n}\n\nexport { Simplify }\n","// GENERATED BY tools/scripts/make_perl_groups.pl; DO NOT EDIT.\n// ./tools/scripts/make_perl_groups.pl > src/CharGroup.js\n\nclass CharGroup {\n constructor(sign, cls) {\n this.sign = sign\n this.cls = cls\n }\n}\n\nconst code1 = [0x30, 0x39]\n\nconst code2 = [0x9, 0xa, 0xc, 0xd, 0x20, 0x20]\n\nconst code3 = [0x30, 0x39, 0x41, 0x5a, 0x5f, 0x5f, 0x61, 0x7a]\n\nconst PERL_GROUPS = new Map([\n ['\\\\d', new CharGroup(+1, code1)],\n ['\\\\D', new CharGroup(-1, code1)],\n ['\\\\s', new CharGroup(+1, code2)],\n ['\\\\S', new CharGroup(-1, code2)],\n ['\\\\w', new CharGroup(+1, code3)],\n ['\\\\W', new CharGroup(-1, code3)]\n])\nconst code4 = [0x30, 0x39, 0x41, 0x5a, 0x61, 0x7a]\n\nconst code5 = [0x41, 0x5a, 0x61, 0x7a]\n\nconst code6 = [0x0, 0x7f]\n\nconst code7 = [0x9, 0x9, 0x20, 0x20]\n\nconst code8 = [0x0, 0x1f, 0x7f, 0x7f]\n\nconst code9 = [0x30, 0x39]\n\nconst code10 = [0x21, 0x7e]\n\nconst code11 = [0x61, 0x7a]\n\nconst code12 = [0x20, 0x7e]\n\nconst code13 = [0x21, 0x2f, 0x3a, 0x40, 0x5b, 0x60, 0x7b, 0x7e]\n\nconst code14 = [0x9, 0xd, 0x20, 0x20]\n\nconst code15 = [0x41, 0x5a]\n\nconst code16 = [0x30, 0x39, 0x41, 0x5a, 0x5f, 0x5f, 0x61, 0x7a]\n\nconst code17 = [0x30, 0x39, 0x41, 0x46, 0x61, 0x66]\n\nconst POSIX_GROUPS = new Map([\n ['[:alnum:]', new CharGroup(+1, code4)],\n ['[:^alnum:]', new CharGroup(-1, code4)],\n ['[:alpha:]', new CharGroup(+1, code5)],\n ['[:^alpha:]', new CharGroup(-1, code5)],\n ['[:ascii:]', new CharGroup(+1, code6)],\n ['[:^ascii:]', new CharGroup(-1, code6)],\n ['[:blank:]', new CharGroup(+1, code7)],\n ['[:^blank:]', new CharGroup(-1, code7)],\n ['[:cntrl:]', new CharGroup(+1, code8)],\n ['[:^cntrl:]', new CharGroup(-1, code8)],\n ['[:digit:]', new CharGroup(+1, code9)],\n ['[:^digit:]', new CharGroup(-1, code9)],\n ['[:graph:]', new CharGroup(+1, code10)],\n ['[:^graph:]', new CharGroup(-1, code10)],\n ['[:lower:]', new CharGroup(+1, code11)],\n ['[:^lower:]', new CharGroup(-1, code11)],\n ['[:print:]', new CharGroup(+1, code12)],\n ['[:^print:]', new CharGroup(-1, code12)],\n ['[:punct:]', new CharGroup(+1, code13)],\n ['[:^punct:]', new CharGroup(-1, code13)],\n ['[:space:]', new CharGroup(+1, code14)],\n ['[:^space:]', new CharGroup(-1, code14)],\n ['[:upper:]', new CharGroup(+1, code15)],\n ['[:^upper:]', new CharGroup(-1, code15)],\n ['[:word:]', new CharGroup(+1, code16)],\n ['[:^word:]', new CharGroup(-1, code16)],\n ['[:xdigit:]', new CharGroup(+1, code17)],\n ['[:^xdigit:]', new CharGroup(-1, code17)]\n])\n\nexport { PERL_GROUPS, POSIX_GROUPS }\n","import { RE2Flags } from './RE2Flags'\nimport { Unicode } from './Unicode'\nimport { Utils } from './Utils'\n/**\n * A \"builder\"-style helper class for manipulating character classes represented as an array of\n * pairs of runes [lo, hi], each denoting an inclusive interval.\n *\n * All methods mutate the internal state and return {@code this}, allowing operations to be chained.\n */\nclass CharClass {\n // Exposed, since useful for debugging CharGroups too.\n static charClassToString(r, len) {\n let result = '['\n for (let i = 0; i < len; i += 2) {\n if (i > 0) {\n result += ' '\n }\n const lo = r[i]\n const hi = r[i + 1]\n if (lo === hi) {\n result += `0x${lo.toString(16)}`\n } else {\n result += `0x${lo.toString(16)}-0x${hi.toString(16)}`\n }\n }\n result += ']'\n return result\n }\n\n // cmp() returns the ordering of the pair (a[i], a[i+1]) relative to\n // (pivotFrom, pivotTo), where the first component of the pair (lo) is\n // ordered naturally and the second component (hi) is in reverse order.\n static cmp(array, i, pivotFrom, pivotTo) {\n const cmp = array[i] - pivotFrom\n return cmp !== 0 ? cmp : pivotTo - array[i + 1]\n }\n\n // qsortIntPair() quicksorts pairs of ints in |array| according to lt().\n // Precondition: |left|, |right|, |this.len| must all be even; |this.len > 1|.\n static qsortIntPair(array, left, right) {\n const pivotIndex = (((left + right) / 2) | 0) & ~1\n const pivotFrom = array[pivotIndex]\n const pivotTo = array[pivotIndex + 1]\n let i = left\n let j = right\n while (i <= j) {\n while (i < right && CharClass.cmp(array, i, pivotFrom, pivotTo) < 0) {\n i += 2\n }\n\n while (j > left && CharClass.cmp(array, j, pivotFrom, pivotTo) > 0) {\n j -= 2\n }\n\n if (i <= j) {\n if (i !== j) {\n let temp = array[i]\n array[i] = array[j]\n array[j] = temp\n temp = array[i + 1]\n array[i + 1] = array[j + 1]\n array[j + 1] = temp\n }\n i += 2\n j -= 2\n }\n }\n\n if (left < j) {\n CharClass.qsortIntPair(array, left, j)\n }\n if (i < right) {\n CharClass.qsortIntPair(array, i, right)\n }\n }\n\n constructor(r = Utils.emptyInts()) {\n this.r = r // inclusive ranges, pairs of [lo,hi]. r.length is even.\n this.len = r.length // prefix of |r| that is defined. Even.\n }\n\n // Returns the character class as an int array. Subsequent CharClass\n // operations may mutate this array, so typically this is the last operation\n // performed on a given CharClass instance.\n toArray() {\n if (this.len === this.r.length) {\n return this.r\n } else {\n return this.r.slice(0, this.len)\n }\n }\n\n // cleanClass() sorts the ranges (pairs of elements) of this CharClass,\n // merges them, and eliminates duplicates.\n cleanClass() {\n if (this.len < 4) {\n return this\n }\n // Sort by lo increasing, hi decreasing to break ties.\n CharClass.qsortIntPair(this.r, 0, this.len - 2)\n // Merge abutting, overlapping.\n let w = 2 // write index\n for (let i = 2; i < this.len; i += 2) {\n {\n const lo = this.r[i]\n const hi = this.r[i + 1]\n if (lo <= this.r[w - 1] + 1) {\n // merge with previous range\n if (hi > this.r[w - 1]) {\n this.r[w - 1] = hi\n }\n continue\n }\n // new disjoint range\n this.r[w] = lo\n this.r[w + 1] = hi\n w += 2\n }\n }\n this.len = w\n return this\n }\n\n // appendLiteral() appends the literal |x| to this CharClass.\n appendLiteral(x, flags) {\n return (flags & RE2Flags.FOLD_CASE) !== 0\n ? this.appendFoldedRange(x, x)\n : this.appendRange(x, x)\n }\n\n // appendRange() appends the range [lo-hi] (inclusive) to this CharClass.\n appendRange(lo, hi) {\n // Expand last range or next to last range if it overlaps or abuts.\n // Checking two ranges helps when appending case-folded\n // alphabets, so that one range can be expanding A-Z and the\n // other expanding a-z.\n if (this.len > 0) {\n for (let i = 2; i <= 4; i += 2) {\n // twice, using i=2, i=4\n if (this.len >= i) {\n const rlo = this.r[this.len - i]\n const rhi = this.r[this.len - i + 1]\n if (lo <= rhi + 1 && rlo <= hi + 1) {\n if (lo < rlo) {\n this.r[this.len - i] = lo\n }\n if (hi > rhi) {\n this.r[this.len - i + 1] = hi\n }\n return this\n }\n }\n }\n }\n\n this.r[this.len++] = lo\n this.r[this.len++] = hi\n return this\n }\n\n // appendFoldedRange() appends the range [lo-hi] and its case\n // folding-equivalent runes to this CharClass.\n appendFoldedRange(lo, hi) {\n // Optimizations.\n if (lo <= Unicode.MIN_FOLD && hi >= Unicode.MAX_FOLD) {\n // Range is full: folding can't add more.\n return this.appendRange(lo, hi)\n }\n if (hi < Unicode.MIN_FOLD || lo > Unicode.MAX_FOLD) {\n // Range is outside folding possibilities.\n return this.appendRange(lo, hi)\n }\n if (lo < Unicode.MIN_FOLD) {\n // [lo, minFold-1] needs no folding.\n this.appendRange(lo, Unicode.MIN_FOLD - 1)\n lo = Unicode.MIN_FOLD\n }\n if (hi > Unicode.MAX_FOLD) {\n // [maxFold+1, hi] needs no folding.\n this.appendRange(Unicode.MAX_FOLD + 1, hi)\n hi = Unicode.MAX_FOLD\n }\n\n // Brute force. Depend on appendRange to coalesce ranges on the fly.\n for (let c = lo; c <= hi; c++) {\n this.appendRange(c, c)\n\n for (let f = Unicode.simpleFold(c); f !== c; f = Unicode.simpleFold(f)) {\n this.appendRange(f, f)\n }\n }\n return this\n }\n\n // appendClass() appends the class |x| to this CharClass.\n // It assumes |x| is clean. Does not mutate |x|.\n appendClass(x) {\n for (let i = 0; i < x.length; i += 2) {\n this.appendRange(x[i], x[i + 1])\n }\n return this\n }\n\n // appendFoldedClass() appends the case folding of the class |x| to this\n // CharClass. Does not mutate |x|.\n appendFoldedClass(x) {\n for (let i = 0; i < x.length; i += 2) {\n this.appendFoldedRange(x[i], x[i + 1])\n }\n return this\n }\n\n // appendNegatedClass() append the negation of the class |x| to this\n // CharClass. It assumes |x| is clean. Does not mutate |x|.\n appendNegatedClass(x) {\n let nextLo = 0\n for (let i = 0; i < x.length; i += 2) {\n const lo = x[i]\n const hi = x[i + 1]\n if (nextLo <= lo - 1) {\n this.appendRange(nextLo, lo - 1)\n }\n nextLo = hi + 1\n }\n if (nextLo <= Unicode.MAX_RUNE) {\n this.appendRange(nextLo, Unicode.MAX_RUNE)\n }\n return this\n }\n\n // appendTable() appends the Unicode range table |table| to this CharClass.\n // Does not mutate |table|.\n appendTable(table) {\n for (let triple of table) {\n const lo = triple[0]\n const hi = triple[1]\n const stride = triple[2]\n if (stride === 1) {\n this.appendRange(lo, hi)\n continue\n }\n for (let c = lo; c <= hi; c += stride) {\n this.appendRange(c, c)\n }\n }\n return this\n }\n\n // appendNegatedTable() returns the result of appending the negation of range\n // table |table| to this CharClass. Does not mutate |table|.\n appendNegatedTable(table) {\n let nextLo = 0\n for (let triple of table) {\n const lo = triple[0]\n const hi = triple[1]\n const stride = triple[2]\n if (stride === 1) {\n if (nextLo <= lo - 1) {\n this.appendRange(nextLo, lo - 1)\n }\n nextLo = hi + 1\n continue\n }\n for (let c = lo; c <= hi; c += stride) {\n if (nextLo <= c - 1) {\n this.appendRange(nextLo, c - 1)\n }\n nextLo = c + 1\n }\n }\n if (nextLo <= Unicode.MAX_RUNE) {\n this.appendRange(nextLo, Unicode.MAX_RUNE)\n }\n return this\n }\n\n // appendTableWithSign() calls append{,Negated}Table depending on sign.\n // Does not mutate |table|.\n appendTableWithSign(table, sign) {\n return sign < 0 ? this.appendNegatedTable(table) : this.appendTable(table)\n }\n\n // negateClass() negates this CharClass, which must already be clean.\n negateClass() {\n let nextLo = 0 // lo end of next class to add\n let w = 0 // write index\n for (let i = 0; i < this.len; i += 2) {\n const lo = this.r[i]\n const hi = this.r[i + 1]\n if (nextLo <= lo - 1) {\n this.r[w] = nextLo\n this.r[w + 1] = lo - 1\n w += 2\n }\n nextLo = hi + 1\n }\n this.len = w\n if (nextLo <= Unicode.MAX_RUNE) {\n this.r[this.len++] = nextLo\n this.r[this.len++] = Unicode.MAX_RUNE\n }\n return this\n }\n\n // appendClassWithSign() calls appendClass() if sign is +1 or\n // appendNegatedClass if sign is -1. Does not mutate |x|.\n appendClassWithSign(x, sign) {\n return sign < 0 ? this.appendNegatedClass(x) : this.appendClass(x)\n }\n\n // appendGroup() appends CharGroup |g| to this CharClass, folding iff\n // |foldCase|. Does not mutate |g|.\n appendGroup(g, foldCase) {\n let cls = g.cls\n if (foldCase) {\n cls = new CharClass().appendFoldedClass(cls).cleanClass().toArray()\n }\n return this.appendClassWithSign(cls, g.sign)\n }\n\n toString() {\n return CharClass.charClassToString(this.r, this.len)\n }\n}\n\nexport { CharClass }\n","/**\n * An exception thrown by the parser if the pattern was invalid.\n */\nclass RE2JSSyntaxException extends Error {\n constructor(error, input = null) {\n let message = `error parsing regexp: ${error}`\n if (input) {\n message += `: \\`${input}\\``\n }\n\n super(message)\n this.message = message\n this.error = error\n this.input = input\n }\n\n /**\n * Retrieves the description of the error.\n */\n getDescription() {\n return this.error\n }\n\n /**\n * Retrieves the erroneous regular-expression pattern.\n */\n getPattern() {\n return this.input\n }\n}\n\nexport { RE2JSSyntaxException }\n","import { Codepoint } from './Codepoint'\nimport { RE2Flags } from './RE2Flags'\nimport { Unicode } from './Unicode'\nimport { UnicodeTables } from './UnicodeTables'\nimport { PERL_GROUPS, POSIX_GROUPS } from './CharGroup'\nimport { Utils } from './Utils'\nimport { CharClass } from './CharClass'\nimport { RE2JSSyntaxException } from './RE2JSSyntaxException'\nimport { Regexp } from './Regexp'\n\nclass Pair {\n static of(first, second) {\n return new Pair(first, second)\n }\n\n constructor(first, second) {\n this.first = first\n this.second = second\n }\n}\n\n// StringIterator: a stream of runes with an opaque cursor, permitting\n// rewinding. The units of the cursor are not specified beyond the\n// fact that ASCII characters are single width. (Cursor positions\n// could be UTF-8 byte indices, UTF-16 code indices or rune indices.)\n//\n// In particular, be careful with:\n// - skip: only use this to advance over ASCII characters\n// since these always have a width of 1.\n// - skipString: only use this to advance over strings which are\n// known to be at the current position, e.g. due to prior call to\n// lookingAt().\n// Only use pop() to advance over possibly non-ASCII runes.\nclass StringIterator {\n constructor(str) {\n this.str = str\n this.position = 0\n }\n\n // Returns the cursor position. Do not interpret the result!\n pos() {\n return this.position\n }\n\n // Resets the cursor position to a previous value returned by pos().\n rewindTo(pos) {\n this.position = pos\n }\n\n // Returns true unless the stream is exhausted.\n more() {\n return this.position < this.str.length\n }\n\n // Returns the rune at the cursor position.\n // Precondition: |more()|.\n peek() {\n return this.str.codePointAt(this.position)\n }\n\n // Advances the cursor by |n| positions, which must be ASCII runes.\n //\n // (In practise, this is only ever used to skip over regexp\n // metacharacters that are ASCII, so there is no numeric difference\n // between indices into UTF-8 bytes, UTF-16 codes and runes.)\n skip(n) {\n this.position += n\n }\n\n // Advances the cursor by the number of cursor positions in |s|.\n skipString(s) {\n this.position += s.length\n }\n\n // Returns the rune at the cursor position, and advances the cursor\n // past it. Precondition: |more()|.\n pop() {\n const r = this.str.codePointAt(this.position)\n this.position += Utils.charCount(r)\n return r\n }\n\n lookingAt(s) {\n return this.rest().startsWith(s)\n }\n\n // Returns the rest of the pattern as a Java UTF-16 string.\n rest() {\n return this.str.substring(this.position)\n }\n\n // Returns the substring from |beforePos| to the current position.\n // |beforePos| must have been previously returned by |pos()|.\n from(beforePos) {\n return this.str.substring(beforePos, this.position)\n }\n\n toString() {\n return this.rest()\n }\n}\n/**\n * A parser of regular expression patterns.\n *\n * The only public entry point is {@link #parse(String pattern, int flags)}.\n */\nclass Parser {\n // Unexpected error\n static ERR_INTERNAL_ERROR = 'regexp/syntax: internal error'\n\n // Parse errors\n static ERR_INVALID_CHAR_CLASS = 'invalid character class'\n static ERR_INVALID_CHAR_RANGE = 'invalid character class range'\n static ERR_INVALID_ESCAPE = 'invalid escape sequence'\n static ERR_INVALID_NAMED_CAPTURE = 'invalid named capture'\n static ERR_INVALID_PERL_OP = 'invalid or unsupported Perl syntax'\n static ERR_INVALID_REPEAT_OP = 'invalid nested repetition operator'\n static ERR_INVALID_REPEAT_SIZE = 'invalid repeat count'\n static ERR_MISSING_BRACKET = 'missing closing ]'\n static ERR_MISSING_PAREN = 'missing closing )'\n static ERR_MISSING_REPEAT_ARGUMENT = 'missing argument to repetition operator'\n static ERR_TRAILING_BACKSLASH = 'trailing backslash at end of expression'\n static ERR_DUPLICATE_NAMED_CAPTURE = 'duplicate capture group name'\n\n // RangeTables are represented as int[][], a list of triples (start, end,\n // stride).\n static ANY_TABLE() {\n return [[0, Unicode.MAX_RUNE, 1]]\n }\n\n // unicodeTable() returns the Unicode RangeTable identified by name\n // and the table of additional fold-equivalent code points.\n // Returns null if |name| does not identify a Unicode character range.\n static unicodeTable(name) {\n if (name === 'Any') {\n return Pair.of(Parser.ANY_TABLE(), Parser.ANY_TABLE())\n }\n if (UnicodeTables.CATEGORIES.has(name)) {\n return Pair.of(UnicodeTables.CATEGORIES.get(name), UnicodeTables.FOLD_CATEGORIES.get(name))\n }\n if (UnicodeTables.SCRIPTS.has(name)) {\n return Pair.of(UnicodeTables.SCRIPTS.get(name), UnicodeTables.FOLD_SCRIPT.get(name))\n }\n return null\n }\n\n // minFoldRune returns the minimum rune fold-equivalent to r.\n static minFoldRune(r) {\n if (r < Unicode.MIN_FOLD || r > Unicode.MAX_FOLD) {\n return r\n }\n\n let min = r\n const r0 = r\n for (r = Unicode.simpleFold(r); r !== r0; r = Unicode.simpleFold(r)) {\n if (min > r) {\n min = r\n }\n }\n return min\n }\n\n // leadingRegexp returns the leading regexp that re begins with.\n // The regexp refers to storage in re or its children.\n static leadingRegexp(re) {\n if (re.op === Regexp.Op.EMPTY_MATCH) {\n return null\n }\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n const sub = re.subs[0]\n if (sub.op === Regexp.Op.EMPTY_MATCH) {\n return null\n }\n return sub\n }\n return re\n }\n\n static literalRegexp(s, flags) {\n const re = new Regexp(Regexp.Op.LITERAL)\n re.flags = flags\n re.runes = Utils.stringToRunes(s)\n return re\n }\n /**\n * Parse regular expression pattern {@code pattern} with mode flags {@code flags}.\n */\n static parse(pattern, flags) {\n return new Parser(pattern, flags).parseInternal()\n }\n\n // parseRepeat parses {min} (max=min) or {min,} (max=-1) or {min,max}.\n // If |t| is not of that form, it returns -1.\n // If |t| has the right form but the values are negative or too big,\n // it returns -2.\n // On success, returns a nonnegative number encoding min/max in the\n // high/low signed halfwords of the result. (Note: min >= 0; max may\n // be -1.)\n //\n // On success, advances |t| beyond the repeat; otherwise |t.pos()| is\n // undefined.\n static parseRepeat(t) {\n const start = t.pos()\n if (!t.more() || !t.lookingAt('{')) {\n return -1\n }\n t.skip(1)\n\n const min = Parser.parseInt(t)\n if (min === -1) {\n return -1\n }\n if (!t.more()) {\n return -1\n }\n\n let max\n if (!t.lookingAt(',')) {\n max = min\n } else {\n t.skip(1)\n if (!t.more()) {\n return -1\n }\n if (t.lookingAt('}')) {\n max = -1\n } else if ((max = Parser.parseInt(t)) === -1) {\n return -1\n }\n }\n\n if (!t.more() || !t.lookingAt('}')) {\n return -1\n }\n t.skip(1)\n if (min < 0 || min > 1000 || max === -2 || max > 1000 || (max >= 0 && min > max)) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_REPEAT_SIZE, t.from(start))\n }\n\n return (min << 16) | (max & Unicode.MAX_BMP)\n }\n\n // isValidCaptureName reports whether name\n // is a valid capture name: [A-Za-z0-9_]+.\n // PCRE limits names to 32 bytes.\n // Python rejects names starting with digits.\n // We don't enforce either of those.\n static isValidCaptureName(name) {\n if (name.length === 0) {\n return false\n }\n\n for (let i = 0; i < name.length; i++) {\n const c = name.codePointAt(i)\n if (c !== Codepoint.CODES.get('_') && !Utils.isalnum(c)) {\n return false\n }\n }\n\n return true\n }\n\n // parseInt parses a nonnegative decimal integer.\n // -1 => bad format. -2 => format ok, but integer overflow.\n static parseInt(t) {\n const start = t.pos()\n while (\n t.more() &&\n t.peek() >= Codepoint.CODES.get('0') &&\n t.peek() <= Codepoint.CODES.get('9')\n ) {\n t.skip(1)\n }\n\n const n = t.from(start)\n if (n.length === 0 || (n.length > 1 && n.codePointAt(0) === Codepoint.CODES.get('0'))) {\n return -1\n }\n if (n.length > 8) {\n return -2\n }\n return parseFloat(n, 10)\n }\n\n // can this be represented as a character class?\n // single-rune literal string, char class, ., and .|\\n.\n static isCharClass(re) {\n return (\n (re.op === Regexp.Op.LITERAL && re.runes.length === 1) ||\n re.op === Regexp.Op.CHAR_CLASS ||\n re.op === Regexp.Op.ANY_CHAR_NOT_NL ||\n re.op === Regexp.Op.ANY_CHAR\n )\n }\n\n // does re match r?\n static matchRune(re, r) {\n switch (re.op) {\n case Regexp.Op.LITERAL:\n return re.runes.length === 1 && re.runes[0] === r\n case Regexp.Op.CHAR_CLASS:\n for (let i = 0; i < re.runes.length; i += 2) {\n if (re.runes[i] <= r && r <= re.runes[i + 1]) {\n return true\n }\n }\n return false\n case Regexp.Op.ANY_CHAR_NOT_NL:\n return r !== Codepoint.CODES.get('\\n')\n case Regexp.Op.ANY_CHAR:\n return true\n }\n return false\n }\n\n // mergeCharClass makes dst = dst|src.\n // The caller must ensure that dst.Op >= src.Op,\n // to reduce the amount of copying.\n static mergeCharClass(dst, src) {\n switch (dst.op) {\n case Regexp.Op.ANY_CHAR:\n break\n case Regexp.Op.ANY_CHAR_NOT_NL:\n if (Parser.matchRune(src, Codepoint.CODES.get('\\n'))) {\n dst.op = Regexp.Op.ANY_CHAR\n }\n break\n case Regexp.Op.CHAR_CLASS:\n if (src.op === Regexp.Op.LITERAL) {\n dst.runes = new CharClass(dst.runes).appendLiteral(src.runes[0], src.flags).toArray()\n } else {\n dst.runes = new CharClass(dst.runes).appendClass(src.runes).toArray()\n }\n break\n case Regexp.Op.LITERAL:\n if (src.runes[0] === dst.runes[0] && src.flags === dst.flags) {\n break\n }\n dst.op = Regexp.Op.CHAR_CLASS\n dst.runes = new CharClass()\n .appendLiteral(dst.runes[0], dst.flags)\n .appendLiteral(src.runes[0], src.flags)\n .toArray()\n break\n }\n }\n\n // parseEscape parses an escape sequence at the beginning of s\n // and returns the rune.\n // Pre: t at '\\\\'. Post: after escape.\n static parseEscape(t) {\n const startPos = t.pos()\n t.skip(1) // '\\\\'\n if (!t.more()) {\n throw new RE2JSSyntaxException(Parser.ERR_TRAILING_BACKSLASH)\n }\n let c = t.pop()\n bigswitch: switch (c) {\n case Codepoint.CODES.get('1'):\n case Codepoint.CODES.get('2'):\n case Codepoint.CODES.get('3'):\n case Codepoint.CODES.get('4'):\n case Codepoint.CODES.get('5'):\n case Codepoint.CODES.get('6'):\n case Codepoint.CODES.get('7'): {\n if (\n !t.more() ||\n t.peek() < Codepoint.CODES.get('0') ||\n t.peek() > Codepoint.CODES.get('7')\n ) {\n break\n }\n }\n // eslint-disable-next-line no-fallthrough\n case Codepoint.CODES.get('0'): {\n let r = c - Codepoint.CODES.get('0')\n for (let i = 1; i < 3; i++) {\n if (\n !t.more() ||\n t.peek() < Codepoint.CODES.get('0') ||\n t.peek() > Codepoint.CODES.get('7')\n ) {\n break\n }\n r = r * 8 + t.peek() - Codepoint.CODES.get('0')\n t.skip(1)\n }\n return r\n }\n case Codepoint.CODES.get('x'): {\n if (!t.more()) {\n break\n }\n c = t.pop()\n if (c === Codepoint.CODES.get('{')) {\n let nhex = 0\n let r = 0\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!t.more()) {\n break bigswitch\n }\n c = t.pop()\n if (c === Codepoint.CODES.get('}')) {\n break\n }\n const v = Utils.unhex(c)\n if (v < 0) {\n break bigswitch\n }\n r = r * 16 + v\n if (r > Unicode.MAX_RUNE) {\n break bigswitch\n }\n nhex++\n }\n if (nhex === 0) {\n break bigswitch\n }\n return r\n }\n const x = Utils.unhex(c)\n if (!t.more()) {\n break\n }\n c = t.pop()\n const y = Utils.unhex(c)\n if (x < 0 || y < 0) {\n break\n }\n return x * 16 + y\n }\n case Codepoint.CODES.get('a'):\n return Codepoint.CODES.get('\\x07')\n case Codepoint.CODES.get('f'):\n return Codepoint.CODES.get('\\f')\n case Codepoint.CODES.get('n'):\n return Codepoint.CODES.get('\\n')\n case Codepoint.CODES.get('r'):\n return Codepoint.CODES.get('\\r')\n case Codepoint.CODES.get('t'):\n return Codepoint.CODES.get('\\t')\n case Codepoint.CODES.get('v'):\n return Codepoint.CODES.get('\\v')\n default:\n if (!Utils.isalnum(c)) {\n return c\n }\n break\n }\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_ESCAPE, t.from(startPos))\n }\n\n // parseClassChar parses a character class character and returns it.\n // wholeClassPos is the position of the start of the entire class \"[...\".\n // Pre: t at class char; Post: t after it.\n static parseClassChar(t, wholeClassPos) {\n if (!t.more()) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_BRACKET, t.from(wholeClassPos))\n }\n if (t.lookingAt('\\\\')) {\n return Parser.parseEscape(t)\n }\n return t.pop()\n }\n\n static concatRunes(x, y) {\n return [...x, ...y]\n }\n\n constructor(wholeRegexp, flags = 0) {\n this.wholeRegexp = wholeRegexp\n // Flags control the behavior of the parser and record information about\n // regexp context.\n this.flags = flags\n // number of capturing groups seen\n this.numCap = 0\n this.namedGroups = {}\n // Stack of parsed expressions.\n this.stack = []\n this.free = null\n }\n\n // Allocate a Regexp, from the free list if possible.\n newRegexp(op) {\n let re = this.free\n if (re !== null && re.subs !== null && re.subs.length > 0) {\n this.free = re.subs[0]\n re.reinit()\n re.op = op\n } else {\n re = new Regexp(op)\n }\n return re\n }\n\n reuse(re) {\n if (re.subs !== null && re.subs.length > 0) {\n re.subs[0] = this.free\n }\n this.free = re\n }\n\n // Parse stack manipulation.\n\n pop() {\n return this.stack.pop()\n }\n\n popToPseudo() {\n const n = this.stack.length\n let i = n\n while (i > 0 && !Regexp.isPseudoOp(this.stack[i - 1].op)) {\n i--\n }\n\n const r = this.stack.slice(i, n)\n this.stack = this.stack.slice(0, i)\n return r\n }\n\n // push pushes the regexp re onto the parse stack and returns the regexp.\n // Returns null for a CHAR_CLASS that can be merged with the top-of-stack.\n push(re) {\n if (re.op === Regexp.Op.CHAR_CLASS && re.runes.length === 2 && re.runes[0] === re.runes[1]) {\n if (this.maybeConcat(re.runes[0], this.flags & ~RE2Flags.FOLD_CASE)) {\n return null\n }\n re.op = Regexp.Op.LITERAL\n re.runes = [re.runes[0]]\n re.flags = this.flags & ~RE2Flags.FOLD_CASE\n } else if (\n (re.op === Regexp.Op.CHAR_CLASS &&\n re.runes.length === 4 &&\n re.runes[0] === re.runes[1] &&\n re.runes[2] === re.runes[3] &&\n Unicode.simpleFold(re.runes[0]) === re.runes[2] &&\n Unicode.simpleFold(re.runes[2]) === re.runes[0]) ||\n (re.op === Regexp.Op.CHAR_CLASS &&\n re.runes.length === 2 &&\n re.runes[0] + 1 === re.runes[1] &&\n Unicode.simpleFold(re.runes[0]) === re.runes[1] &&\n Unicode.simpleFold(re.runes[1]) === re.runes[0])\n ) {\n // Case-insensitive rune like [Aa] or [Δδ].\n if (this.maybeConcat(re.runes[0], this.flags | RE2Flags.FOLD_CASE)) {\n return null\n }\n // Rewrite as (case-insensitive) literal.\n re.op = Regexp.Op.LITERAL\n re.runes = [re.runes[0]]\n re.flags = this.flags | RE2Flags.FOLD_CASE\n } else {\n // Incremental concatenation.\n this.maybeConcat(-1, 0)\n }\n this.stack.push(re)\n return re\n }\n\n // maybeConcat implements incremental concatenation\n // of literal runes into string nodes. The parser calls this\n // before each push, so only the top fragment of the stack\n // might need processing. Since this is called before a push,\n // the topmost literal is no longer subject to operators like *\n // (Otherwise ab* would turn into (ab)*.)\n // If (r >= 0 and there's a node left over, maybeConcat uses it\n // to push r with the given flags.\n // maybeConcat reports whether r was pushed.\n maybeConcat(r, flags) {\n const n = this.stack.length\n if (n < 2) {\n return false\n }\n const re1 = this.stack[n - 1]\n const re2 = this.stack[n - 2]\n if (\n re1.op !== Regexp.Op.LITERAL ||\n re2.op !== Regexp.Op.LITERAL ||\n (re1.flags & RE2Flags.FOLD_CASE) !== (re2.flags & RE2Flags.FOLD_CASE)\n ) {\n return false\n }\n // Push re1 into re2.\n re2.runes = Parser.concatRunes(re2.runes, re1.runes)\n // Reuse re1 if possible.\n if (r >= 0) {\n re1.runes = [r]\n re1.flags = flags\n return true\n }\n this.pop()\n this.reuse(re1)\n return false // did not push r\n }\n\n // newLiteral returns a new LITERAL Regexp with the given flags\n newLiteral(r, flags) {\n const re = this.newRegexp(Regexp.Op.LITERAL)\n re.flags = flags\n if ((flags & RE2Flags.FOLD_CASE) !== 0) {\n r = Parser.minFoldRune(r)\n }\n re.runes = [r]\n return re\n }\n\n // literal pushes a literal regexp for the rune r on the stack\n // and returns that regexp.\n literal(r) {\n this.push(this.newLiteral(r, this.flags))\n }\n\n // op pushes a regexp with the given op onto the stack\n // and returns that regexp.\n op(op) {\n const re = this.newRegexp(op)\n re.flags = this.flags\n return this.push(re)\n }\n\n // repeat replaces the top stack element with itself repeated according to\n // op, min, max. beforePos is the start position of the repetition operator.\n // Pre: t is positioned after the initial repetition operator.\n // Post: t advances past an optional perl-mode '?', or stays put.\n // Or, it fails with RE2JSSyntaxException.\n repeat(op, min, max, beforePos, t, lastRepeatPos) {\n let flags = this.flags\n if ((flags & RE2Flags.PERL_X) !== 0) {\n if (t.more() && t.lookingAt('?')) {\n t.skip(1)\n flags ^= RE2Flags.NON_GREEDY\n }\n if (lastRepeatPos !== -1) {\n // In Perl it is not allowed to stack repetition operators:\n // a** is a syntax error, not a doubled star, and a++ means\n // something else entirely, which we don't support!\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_REPEAT_OP, t.from(lastRepeatPos))\n }\n }\n\n const n = this.stack.length\n if (n === 0) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_REPEAT_ARGUMENT, t.from(beforePos))\n }\n\n const sub = this.stack[n - 1]\n if (Regexp.isPseudoOp(sub.op)) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_REPEAT_ARGUMENT, t.from(beforePos))\n }\n\n const re = this.newRegexp(op)\n re.min = min\n re.max = max\n re.flags = flags\n re.subs = [sub]\n this.stack[n - 1] = re\n }\n\n // concat replaces the top of the stack (above the topmost '|' or '(') with\n // its concatenation.\n concat() {\n this.maybeConcat(-1, 0)\n const subs = this.popToPseudo()\n if (subs.length === 0) {\n return this.push(this.newRegexp(Regexp.Op.EMPTY_MATCH))\n }\n return this.push(this.collapse(subs, Regexp.Op.CONCAT))\n }\n\n // alternate replaces the top of the stack (above the topmost '(') with its\n // alternation.\n alternate() {\n // Scan down to find pseudo-operator (.\n // There are no | above (.\n const subs = this.popToPseudo()\n // Make sure top class is clean.\n // All the others already are (see swapVerticalBar).\n if (subs.length > 0) {\n this.cleanAlt(subs[subs.length - 1])\n }\n // Empty alternate is special case\n // (shouldn't happen but easy to handle).\n if (subs.length === 0) {\n return this.push(this.newRegexp(Regexp.Op.NO_MATCH))\n }\n return this.push(this.collapse(subs, Regexp.Op.ALTERNATE))\n }\n\n // cleanAlt cleans re for eventual inclusion in an alternation.\n cleanAlt(re) {\n if (re.op === Regexp.Op.CHAR_CLASS) {\n re.runes = new CharClass(re.runes).cleanClass().toArray()\n if (re.runes.length === 2 && re.runes[0] === 0 && re.runes[1] === Unicode.MAX_RUNE) {\n re.runes = null\n re.op = Regexp.Op.ANY_CHAR\n } else if (\n re.runes.length === 4 &&\n re.runes[0] === 0 &&\n re.runes[1] === Codepoint.CODES.get('\\n') - 1 &&\n re.runes[2] === Codepoint.CODES.get('\\n') + 1 &&\n re.runes[3] === Unicode.MAX_RUNE\n ) {\n re.runes = null\n re.op = Regexp.Op.ANY_CHAR_NOT_NL\n }\n }\n }\n\n // collapse returns the result of applying op to subs[start:end].\n // If (sub contains op nodes, they all get hoisted up\n // so that there is never a concat of a concat or an\n // alternate of an alternate.\n collapse(subs, op) {\n if (subs.length === 1) {\n return subs[0]\n }\n // Concatenate subs iff op is same.\n // Compute length in first pass.\n let len = 0\n for (let sub of subs) {\n len += sub.op === op ? sub.subs.length : 1\n }\n let newsubs = new Array(len).fill(null)\n let i = 0\n for (let sub of subs) {\n if (sub.op === op) {\n newsubs.splice(i, sub.subs.length, ...sub.subs)\n i += sub.subs.length\n this.reuse(sub)\n } else {\n newsubs[i++] = sub\n }\n }\n\n let re = this.newRegexp(op)\n re.subs = newsubs\n if (op === Regexp.Op.ALTERNATE) {\n // re.subs = this.factor(re.subs, re.flags)\n re.subs = this.factor(re.subs)\n if (re.subs.length === 1) {\n const old = re\n re = re.subs[0]\n this.reuse(old)\n }\n }\n return re\n }\n\n // factor factors common prefixes from the alternation list sub. It\n // returns a replacement list that reuses the same storage and frees\n // (passes to p.reuse) any removed *Regexps.\n //\n // For example,\n // ABC|ABD|AEF|BCX|BCY\n // simplifies by literal prefix extraction to\n // A(B(C|D)|EF)|BC(X|Y)\n // which simplifies by character class introduction to\n // A(B[CD]|EF)|BC[XY]\n //\n factor(array) {\n if (array.length < 2) {\n return array\n }\n // The following code is subtle, because it's a literal JS\n // translation of code that makes clever use of Go \"slices\".\n // A slice is a triple (array, offset, length), and the Go\n // implementation uses two slices, |sub| and |out| backed by the\n // same array. In JS, we have to be explicit about all of these\n // variables, so:\n //\n // Go JS\n // sub (array, s, lensub)\n // out (array, 0, lenout) // (always a prefix of |array|)\n //\n // In the comments we'll use the logical notation of go slices, e.g. sub[i]\n // even though the JS code will read array[s + i].\n\n let s = 0 // offset of first |sub| within array.\n let lensub = array.length // = len(sub)\n let lenout = 0 // = len(out)\n // Round 1: Factor out common literal prefixes.\n // Note: (str, strlen) and (istr, istrlen) are like Go slices\n // onto a prefix of some Regexp's runes array (hence offset=0).\n let str = null\n let strlen = 0\n let strflags = 0\n let start = 0\n for (let i = 0; i <= lensub; i++) {\n // Invariant: the Regexps that were in sub[0:start] have been\n // used or marked for reuse, and the slice space has been reused\n // for out (len <= start).\n //\n // Invariant: sub[start:i] consists of regexps that all begin\n // with str as modified by strflags.\n let istr = null\n let istrlen = 0\n let iflags = 0\n if (i < lensub) {\n // NB, we inlined Go's leadingString() since Java has no pair return.\n let re = array[s + i]\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n re = re.subs[0]\n }\n if (re.op === Regexp.Op.LITERAL) {\n istr = re.runes\n istrlen = re.runes.length\n iflags = re.flags & RE2Flags.FOLD_CASE\n }\n // istr is the leading literal string that re begins with.\n // The string refers to storage in re or its children.\n if (iflags === strflags) {\n let same = 0\n while (same < strlen && same < istrlen && str[same] === istr[same]) {\n same++\n }\n\n if (same > 0) {\n // Matches at least one rune in current range.\n // Keep going around.\n strlen = same\n continue\n }\n }\n }\n // Found end of a run with common leading literal string:\n // sub[start:i] all begin with str[0:strlen], but sub[i]\n // does not even begin with str[0].\n //\n // Factor out common string and append factored expression to out.\n if (i === start) {\n // Nothing to do - run of length 0.\n } else if (i === start + 1) {\n // Just one: don't bother factoring.\n array[lenout++] = array[s + start]\n } else {\n // Construct factored form: prefix(suffix1|suffix2|...)\n const prefix = this.newRegexp(Regexp.Op.LITERAL)\n prefix.flags = strflags\n prefix.runes = str.slice(0, strlen)\n for (let j = start; j < i; j++) {\n array[s + j] = this.removeLeadingString(array[s + j], strlen)\n }\n // Recurse.\n const suffix = this.collapse(array.slice(s + start, s + i), Regexp.Op.ALTERNATE)\n const re = this.newRegexp(Regexp.Op.CONCAT)\n re.subs = [prefix, suffix]\n array[lenout++] = re\n }\n // Prepare for next iteration.\n start = i\n str = istr\n strlen = istrlen\n strflags = iflags\n }\n // In Go: sub = out\n lensub = lenout\n s = 0\n // Round 2: Factor out common complex prefixes,\n // just the first piece of each concatenation,\n // whatever it is. This is good enough a lot of the time.\n start = 0\n lenout = 0\n let first = null\n for (let i = 0; i <= lensub; i++) {\n // Invariant: the Regexps that were in sub[0:start] have been\n // used or marked for reuse, and the slice space has been reused\n // for out (lenout <= start).\n //\n // Invariant: sub[start:i] consists of regexps that all begin with\n // ifirst.\n let ifirst = null\n if (i < lensub) {\n ifirst = Parser.leadingRegexp(array[s + i])\n if (\n first !== null &&\n first.equals(ifirst) &&\n (Parser.isCharClass(first) ||\n (first.op === Regexp.Op.REPEAT &&\n first.min === first.max &&\n Parser.isCharClass(first.subs[0])))\n ) {\n continue\n }\n }\n // Found end of a run with common leading regexp:\n // sub[start:i] all begin with first but sub[i] does not.\n //\n // Factor out common regexp and append factored expression to out.\n if (i === start) {\n // Nothing to do - run of length 0.\n } else if (i === start + 1) {\n // Just one: don't bother factoring.\n array[lenout++] = array[s + start]\n } else {\n // Construct factored form: prefix(suffix1|suffix2|...)\n const prefix = first\n for (let j = start; j < i; j++) {\n const reuse = j !== start // prefix came from sub[start]\n array[s + j] = this.removeLeadingRegexp(array[s + j], reuse)\n }\n // recurse\n const suffix = this.collapse(array.slice(s + start, s + i), Regexp.Op.ALTERNATE)\n const re = this.newRegexp(Regexp.Op.CONCAT)\n re.subs = [prefix, suffix]\n array[lenout++] = re\n }\n // Prepare for next iteration.\n start = i\n first = ifirst\n }\n // In Go: sub = out\n lensub = lenout\n s = 0\n // Round 3: Collapse runs of single literals into character classes.\n start = 0\n lenout = 0\n for (let i = 0; i <= lensub; i++) {\n // Invariant: the Regexps that were in sub[0:start] have been\n // used or marked for reuse, and the slice space has been reused\n // for out (lenout <= start).\n //\n // Invariant: sub[start:i] consists of regexps that are either\n // literal runes or character classes.\n if (i < lensub && Parser.isCharClass(array[s + i])) {\n continue\n }\n // sub[i] is not a char or char class;\n // emit char class for sub[start:i]...\n if (i === start) {\n // Nothing to do - run of length 0.\n } else if (i === start + 1) {\n // Just one: don't bother factoring.\n array[lenout++] = array[s + start]\n } else {\n // Make new char class.\n // Start with most complex regexp in sub[start].\n let max = start\n for (let j = start + 1; j < i; j++) {\n const subMax = array[s + max]\n const subJ = array[s + j]\n if (\n subMax.op < subJ.op ||\n (subMax.op === subJ.op &&\n (subMax.runes !== null ? subMax.runes.length : 0) <\n (subJ.runes !== null ? subJ.runes.length : 0))\n ) {\n max = j\n }\n }\n // swap sub[start], sub[max].\n const tmp = array[s + start]\n array[s + start] = array[s + max]\n array[s + max] = tmp\n for (let j = start + 1; j < i; j++) {\n Parser.mergeCharClass(array[s + start], array[s + j])\n this.reuse(array[s + j])\n }\n this.cleanAlt(array[s + start])\n array[lenout++] = array[s + start]\n }\n // ... and then emit sub[i].\n if (i < lensub) {\n array[lenout++] = array[s + i]\n }\n start = i + 1\n }\n // In Go: sub = out\n lensub = lenout\n s = 0\n // Round 4: Collapse runs of empty matches into a single empty match.\n start = 0\n lenout = 0\n for (let i = 0; i < lensub; ++i) {\n if (\n i + 1 < lensub &&\n array[s + i].op === Regexp.Op.EMPTY_MATCH &&\n array[s + i + 1].op === Regexp.Op.EMPTY_MATCH\n ) {\n continue\n }\n array[lenout++] = array[s + i]\n }\n // In Go: sub = out\n lensub = lenout\n s = 0\n return array.slice(s, lensub)\n }\n\n // removeLeadingString removes the first n leading runes\n // from the beginning of re. It returns the replacement for re.\n removeLeadingString(re, n) {\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n // Removing a leading string in a concatenation\n // might simplify the concatenation.\n const sub = this.removeLeadingString(re.subs[0], n)\n re.subs[0] = sub\n if (sub.op === Regexp.Op.EMPTY_MATCH) {\n this.reuse(sub)\n switch (re.subs.length) {\n case 0:\n case 1:\n // Impossible but handle.\n re.op = Regexp.Op.EMPTY_MATCH\n re.subs = null\n break\n case 2: {\n const old = re\n re = re.subs[1]\n this.reuse(old)\n break\n }\n default:\n re.subs = re.subs.slice(1, re.subs.length)\n break\n }\n }\n return re\n }\n if (re.op === Regexp.Op.LITERAL) {\n re.runes = re.runes.slice(n, re.runes.length)\n if (re.runes.length === 0) {\n re.op = Regexp.Op.EMPTY_MATCH\n }\n }\n return re\n }\n\n // removeLeadingRegexp removes the leading regexp in re.\n // It returns the replacement for re.\n // If reuse is true, it passes the removed regexp (if no longer needed) to\n // reuse.\n removeLeadingRegexp(re, reuse) {\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n if (reuse) {\n this.reuse(re.subs[0])\n }\n re.subs = re.subs.slice(1, re.subs.length)\n switch (re.subs.length) {\n case 0: {\n re.op = Regexp.Op.EMPTY_MATCH\n re.subs = Regexp.emptySubs()\n break\n }\n case 1: {\n const old = re\n re = re.subs[0]\n this.reuse(old)\n break\n }\n }\n return re\n }\n if (reuse) {\n this.reuse(re)\n }\n return this.newRegexp(Regexp.Op.EMPTY_MATCH)\n }\n\n parseInternal() {\n if ((this.flags & RE2Flags.LITERAL) !== 0) {\n // Trivial parser for literal string.\n return Parser.literalRegexp(this.wholeRegexp, this.flags)\n }\n // Otherwise, must do real work.\n let lastRepeatPos = -1\n let min = -1\n let max = -1\n const t = new StringIterator(this.wholeRegexp)\n while (t.more()) {\n {\n let repeatPos = -1\n bigswitch: switch (t.peek()) {\n case Codepoint.CODES.get('('):\n if ((this.flags & RE2Flags.PERL_X) !== 0 && t.lookingAt('(?')) {\n // Flag changes and non-capturing groups.\n this.parsePerlFlags(t)\n break\n }\n this.op(Regexp.Op.LEFT_PAREN).cap = ++this.numCap\n t.skip(1) // '('\n break\n case Codepoint.CODES.get('|'):\n this.parseVerticalBar() // '|'\n t.skip(1) // '|'\n break\n case Codepoint.CODES.get(')'):\n this.parseRightParen()\n t.skip(1) // ')'\n break\n case Codepoint.CODES.get('^'):\n if ((this.flags & RE2Flags.ONE_LINE) !== 0) {\n this.op(Regexp.Op.BEGIN_TEXT)\n } else {\n this.op(Regexp.Op.BEGIN_LINE)\n }\n t.skip(1) // '^'\n break\n case Codepoint.CODES.get('$'):\n if ((this.flags & RE2Flags.ONE_LINE) !== 0) {\n this.op(Regexp.Op.END_TEXT).flags |= RE2Flags.WAS_DOLLAR\n } else {\n this.op(Regexp.Op.END_LINE)\n }\n t.skip(1) // '$'\n break\n case Codepoint.CODES.get('.'):\n if ((this.flags & RE2Flags.DOT_NL) !== 0) {\n this.op(Regexp.Op.ANY_CHAR)\n } else {\n this.op(Regexp.Op.ANY_CHAR_NOT_NL)\n }\n t.skip(1) // '.'\n break\n case Codepoint.CODES.get('['):\n this.parseClass(t)\n break\n case Codepoint.CODES.get('*'):\n case Codepoint.CODES.get('+'):\n case Codepoint.CODES.get('?'): {\n repeatPos = t.pos()\n let op = null\n switch (t.pop()) {\n case Codepoint.CODES.get('*'):\n op = Regexp.Op.STAR\n break\n case Codepoint.CODES.get('+'):\n op = Regexp.Op.PLUS\n break\n case Codepoint.CODES.get('?'):\n op = Regexp.Op.QUEST\n break\n }\n this.repeat(op, min, max, repeatPos, t, lastRepeatPos)\n // (min and max are now dead.)\n break\n }\n\n case Codepoint.CODES.get('{'): {\n repeatPos = t.pos()\n const minMax = Parser.parseRepeat(t)\n if (minMax < 0) {\n // If the repeat cannot be parsed, { is a literal.\n t.rewindTo(repeatPos)\n this.literal(t.pop()) // '{'\n break\n }\n min = minMax >> 16\n max = ((minMax & Unicode.MAX_BMP) << 16) >> 16\n this.repeat(Regexp.Op.REPEAT, min, max, repeatPos, t, lastRepeatPos)\n break\n }\n\n case Codepoint.CODES.get('\\\\'): {\n const savedPos = t.pos()\n t.skip(1) // '\\\\'\n if ((this.flags & RE2Flags.PERL_X) !== 0 && t.more()) {\n const c = t.pop()\n switch (c) {\n case Codepoint.CODES.get('A'):\n this.op(Regexp.Op.BEGIN_TEXT)\n break bigswitch\n case Codepoint.CODES.get('b'):\n this.op(Regexp.Op.WORD_BOUNDARY)\n break bigswitch\n case Codepoint.CODES.get('B'):\n this.op(Regexp.Op.NO_WORD_BOUNDARY)\n break bigswitch\n case Codepoint.CODES.get('C'):\n // any byte; not supported\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_ESCAPE, '\\\\C')\n case Codepoint.CODES.get('Q'): {\n // \\Q ... \\E: the ... is always literals\n let lit = t.rest()\n const i = lit.indexOf('\\\\E')\n if (i >= 0) {\n lit = lit.substring(0, i)\n }\n t.skipString(lit)\n t.skipString('\\\\E')\n\n let j = 0\n while (j < lit.length) {\n const codepoint = lit.codePointAt(j)\n this.literal(codepoint)\n j += Utils.charCount(codepoint)\n }\n break bigswitch\n }\n\n case Codepoint.CODES.get('z'):\n this.op(Regexp.Op.END_TEXT)\n break bigswitch\n default:\n t.rewindTo(savedPos)\n break\n }\n }\n\n const re = this.newRegexp(Regexp.Op.CHAR_CLASS)\n re.flags = this.flags\n // Look for Unicode character group like \\p{Han}\n if (t.lookingAt('\\\\p') || t.lookingAt('\\\\P')) {\n const cc = new CharClass()\n if (this.parseUnicodeClass(t, cc)) {\n re.runes = cc.toArray()\n this.push(re)\n break bigswitch\n }\n }\n // Perl character class escape.\n const cc = new CharClass()\n if (this.parsePerlClassEscape(t, cc)) {\n re.runes = cc.toArray()\n this.push(re)\n break bigswitch\n }\n t.rewindTo(savedPos)\n this.reuse(re)\n // Ordinary single-character escape.\n this.literal(Parser.parseEscape(t))\n break\n }\n default:\n this.literal(t.pop())\n break\n }\n lastRepeatPos = repeatPos\n }\n }\n\n this.concat()\n if (this.swapVerticalBar()) {\n this.pop() // pop vertical bar\n }\n this.alternate()\n const n = this.stack.length\n if (n !== 1) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_PAREN, this.wholeRegexp)\n }\n this.stack[0].namedGroups = this.namedGroups\n return this.stack[0]\n }\n\n // parsePerlFlags parses a Perl flag setting or non-capturing group or both,\n // like (?i) or (?: or (?i:.\n // Pre: t at \"(?\". Post: t after \")\".\n // Sets numCap.\n parsePerlFlags(t) {\n const startPos = t.pos()\n // Check for named captures, first introduced in Python's regexp library.\n // As usual, there are three slightly different syntaxes:\n //\n // (?P<name>expr) the original, introduced by Python\n // (?<name>expr) the .NET alteration, adopted by Perl 5.10\n // (?'name'expr) another .NET alteration, adopted by Perl 5.10\n //\n // Perl 5.10 gave in and implemented the Python version too,\n // but they claim that the last two are the preferred forms.\n // PCRE and languages based on it (specifically, PHP and Ruby)\n // support all three as well. EcmaScript 4 uses only the Python form.\n //\n // In both the open source world (via Code Search) and the\n // Google source tree, (?P<expr>name) is the dominant form,\n // so that's the one we implement. One is enough.\n const s = t.rest()\n if (s.startsWith('(?P<')) {\n // Pull out name.\n const end = s.indexOf('>')\n if (end < 0) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_NAMED_CAPTURE, s)\n }\n const name = s.substring(4, end) // \"name\"\n t.skipString(name)\n t.skip(5) // \"(?P<>\"\n if (!Parser.isValidCaptureName(name)) {\n // \"(?P<name>\"\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_NAMED_CAPTURE, s.substring(0, end))\n }\n // Like ordinary capture, but named.\n const re = this.op(Regexp.Op.LEFT_PAREN)\n re.cap = ++this.numCap\n if (this.namedGroups[name]) {\n throw new RE2JSSyntaxException(Parser.ERR_DUPLICATE_NAMED_CAPTURE, name)\n }\n this.namedGroups[name] = this.numCap\n re.name = name\n return\n }\n // Non-capturing group. Might also twiddle Perl flags.\n t.skip(2) // \"(?\"\n\n let flags = this.flags\n let sign = +1\n let sawFlag = false\n loop: while (t.more()) {\n {\n const c = t.pop()\n switch (c) {\n case Codepoint.CODES.get('i'):\n flags |= RE2Flags.FOLD_CASE\n sawFlag = true\n break\n case Codepoint.CODES.get('m'):\n flags &= ~RE2Flags.ONE_LINE\n sawFlag = true\n break\n case Codepoint.CODES.get('s'):\n flags |= RE2Flags.DOT_NL\n sawFlag = true\n break\n case Codepoint.CODES.get('U'):\n flags |= RE2Flags.NON_GREEDY\n sawFlag = true\n break\n // Switch to negation.\n case Codepoint.CODES.get('-'):\n if (sign < 0) {\n break loop\n }\n sign = -1\n // Invert flags so that | above turn into &~ and vice versa.\n // We'll invert flags again before using it below.\n flags = ~flags\n sawFlag = false\n break\n // End of flags, starting group or not.\n case Codepoint.CODES.get(':'):\n case Codepoint.CODES.get(')'):\n if (sign < 0) {\n if (!sawFlag) {\n break loop\n }\n flags = ~flags\n }\n if (c === Codepoint.CODES.get(':')) {\n // Open new group\n this.op(Regexp.Op.LEFT_PAREN)\n }\n this.flags = flags\n return\n default:\n // Flags.\n break loop\n }\n }\n }\n\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_PERL_OP, t.from(startPos))\n }\n\n // parseVerticalBar handles a | in the input.\n parseVerticalBar() {\n this.concat()\n // The concatenation we just parsed is on top of the stack.\n // If it sits above an opVerticalBar, swap it below\n // (things below an opVerticalBar become an alternation).\n // Otherwise, push a new vertical bar.\n if (!this.swapVerticalBar()) {\n this.op(Regexp.Op.VERTICAL_BAR)\n }\n }\n\n // If the top of the stack is an element followed by an opVerticalBar\n // swapVerticalBar swaps the two and returns true.\n // Otherwise it returns false.\n swapVerticalBar() {\n const n = this.stack.length\n // If above and below vertical bar are literal or char class,\n // can merge into a single char class.\n if (\n n >= 3 &&\n this.stack[n - 2].op === Regexp.Op.VERTICAL_BAR &&\n Parser.isCharClass(this.stack[n - 1]) &&\n Parser.isCharClass(this.stack[n - 3])\n ) {\n let re1 = this.stack[n - 1]\n let re3 = this.stack[n - 3]\n // Make re3 the more complex of the two.\n if (re1.op > re3.op) {\n const tmp = re3\n re3 = re1\n re1 = tmp\n this.stack[n - 3] = re3\n }\n Parser.mergeCharClass(re3, re1)\n this.reuse(re1)\n this.pop()\n return true\n }\n if (n >= 2) {\n const re1 = this.stack[n - 1]\n const re2 = this.stack[n - 2]\n if (re2.op === Regexp.Op.VERTICAL_BAR) {\n if (n >= 3) {\n // Now out of reach.\n // Clean opportunistically.\n this.cleanAlt(this.stack[n - 3])\n }\n this.stack[n - 2] = re1\n this.stack[n - 1] = re2\n return true\n }\n }\n return false\n }\n\n // parseRightParen handles a ')' in the input.\n parseRightParen() {\n this.concat()\n if (this.swapVerticalBar()) {\n this.pop() // pop vertical bar\n }\n this.alternate()\n const n = this.stack.length\n if (n < 2) {\n throw new RE2JSSyntaxException(Parser.ERR_INTERNAL_ERROR, 'stack underflow')\n }\n\n const re1 = this.pop()\n const re2 = this.pop()\n if (re2.op !== Regexp.Op.LEFT_PAREN) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_PAREN, this.wholeRegexp)\n }\n // Restore flags at time of paren.\n this.flags = re2.flags\n if (re2.cap === 0) {\n // Just for grouping.\n this.push(re1)\n } else {\n re2.op = Regexp.Op.CAPTURE\n re2.subs = [re1]\n this.push(re2)\n }\n }\n\n // parsePerlClassEscape parses a leading Perl character class escape like \\d\n // from the beginning of |t|. If one is present, it appends the characters\n // to cc and returns true. The iterator is advanced past the escape\n // on success, undefined on failure, in which case false is returned.\n parsePerlClassEscape(t, cc) {\n const beforePos = t.pos()\n if (\n (this.flags & RE2Flags.PERL_X) === 0 ||\n !t.more() ||\n t.pop() !== Codepoint.CODES.get('\\\\') ||\n !t.more()\n ) {\n return false\n }\n t.pop() // e.g. advance past 'd' in \"\\\\d\"\n const p = t.from(beforePos)\n const g = PERL_GROUPS.has(p) ? PERL_GROUPS.get(p) : null\n if (g === null) {\n return false\n }\n cc.appendGroup(g, (this.flags & RE2Flags.FOLD_CASE) !== 0)\n return true\n }\n\n // parseNamedClass parses a leading POSIX named character class like\n // [:alnum:] from the beginning of t. If one is present, it appends the\n // characters to cc, advances the iterator, and returns true.\n // Pre: t at \"[:\". Post: t after \":]\".\n // On failure (no class of than name), throws RE2JSSyntaxException.\n // On misparse, returns false; t.pos() is undefined.\n parseNamedClass(t, cc) {\n // (Go precondition check deleted.)\n const cls = t.rest()\n const i = cls.indexOf(':]')\n if (i < 0) {\n return false\n }\n\n const name = cls.substring(0, i + 2) // \"[:alnum:]\"\n t.skipString(name)\n const g = POSIX_GROUPS.has(name) ? POSIX_GROUPS.get(name) : null\n if (g === null) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, name)\n }\n cc.appendGroup(g, (this.flags & RE2Flags.FOLD_CASE) !== 0)\n return true\n }\n\n // parseUnicodeClass() parses a leading Unicode character class like \\p{Han}\n // from the beginning of t. If one is present, it appends the characters to\n // to |cc|, advances |t| and returns true.\n //\n // Returns false if such a pattern is not present or UNICODE_GROUPS\n // flag is not enabled; |t.pos()| is not advanced in this case.\n // Indicates error by throwing RE2JSSyntaxException.\n parseUnicodeClass(t, cc) {\n const startPos = t.pos()\n if (\n (this.flags & RE2Flags.UNICODE_GROUPS) === 0 ||\n (!t.lookingAt('\\\\p') && !t.lookingAt('\\\\P'))\n ) {\n return false\n }\n\n t.skip(1) // '\\\\'\n // Committed to parse or throw exception.\n let sign = +1\n let c = t.pop() // 'p' or 'P'\n if (c === Codepoint.CODES.get('P')) {\n sign = -1\n }\n if (!t.more()) {\n t.rewindTo(startPos)\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.rest())\n }\n\n c = t.pop()\n let name\n\n if (c !== Codepoint.CODES.get('{')) {\n // Single-letter name.\n name = Utils.runeToString(c)\n } else {\n // Name is in braces.\n const rest = t.rest()\n const end = rest.indexOf('}')\n if (end < 0) {\n t.rewindTo(startPos)\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.rest())\n }\n name = rest.substring(0, end) // e.g. \"Han\"\n t.skipString(name)\n t.skip(1)\n // Don't use skip(end) because it assumes UTF-16 coding, and\n // StringIterator doesn't guarantee that.\n }\n // Group can have leading negation too.\n // \\p{^Han} == \\P{Han}, \\P{^Han} == \\p{Han}.\n if (!(name.length === 0) && name.codePointAt(0) === Codepoint.CODES.get('^')) {\n sign = 0 - sign // -sign\n name = name.substring(1)\n }\n\n const pair = Parser.unicodeTable(name)\n if (pair === null) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.from(startPos))\n }\n\n const tab = pair.first\n const fold = pair.second // fold-equivalent table\n // Variation of CharClass.appendGroup() for tables.\n if ((this.flags & RE2Flags.FOLD_CASE) === 0 || fold === null) {\n cc.appendTableWithSign(tab, sign)\n } else {\n // Merge and clean tab and fold in a temporary buffer.\n // This is necessary for the negative case and just tidy\n // for the positive case.\n const tmp = new CharClass().appendTable(tab).appendTable(fold).cleanClass().toArray()\n cc.appendClassWithSign(tmp, sign)\n }\n return true\n }\n\n // parseClass parses a character class and pushes it onto the parse stack.\n //\n // NOTES:\n // Pre: at '['; Post: after ']'.\n // Mutates stack. Advances iterator. May throw.\n parseClass(t) {\n const startPos = t.pos()\n t.skip(1) // '['\n const re = this.newRegexp(Regexp.Op.CHAR_CLASS)\n re.flags = this.flags\n const cc = new CharClass()\n let sign = +1\n\n if (t.more() && t.lookingAt('^')) {\n sign = -1\n t.skip(1) // '^'\n // If character class does not match \\n, add it here,\n // so that negation later will do the right thing.\n if ((this.flags & RE2Flags.CLASS_NL) === 0) {\n cc.appendRange(Codepoint.CODES.get('\\n'), Codepoint.CODES.get('\\n'))\n }\n }\n\n let first = true // ']' and '-' are okay as first char in class\n while (!t.more() || t.peek() !== Codepoint.CODES.get(']') || first) {\n // POSIX: - is only okay unescaped as first or last in class.\n // Perl: - is okay anywhere.\n if (t.more() && t.lookingAt('-') && (this.flags & RE2Flags.PERL_X) === 0 && !first) {\n const s = t.rest()\n if (s === '-' || !s.startsWith('-]')) {\n t.rewindTo(startPos)\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.rest())\n }\n }\n\n first = false\n const beforePos = t.pos()\n // Look for POSIX [:alnum:] etc.\n if (t.lookingAt('[:')) {\n if (this.parseNamedClass(t, cc)) {\n continue\n }\n t.rewindTo(beforePos)\n }\n\n // Look for Unicode character group like \\p{Han}.\n if (this.parseUnicodeClass(t, cc)) {\n continue\n }\n\n // Look for Perl character class symbols (extension).\n if (this.parsePerlClassEscape(t, cc)) {\n continue\n }\n t.rewindTo(beforePos)\n\n // Single character or simple range.\n const lo = Parser.parseClassChar(t, startPos)\n let hi = lo\n if (t.more() && t.lookingAt('-')) {\n t.skip(1)\n if (t.more() && t.lookingAt(']')) {\n // [a-] means (a|-) so check for final ].\n t.skip(-1)\n } else {\n hi = Parser.parseClassChar(t, startPos)\n if (hi < lo) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.from(beforePos))\n }\n }\n }\n if ((this.flags & RE2Flags.FOLD_CASE) === 0) {\n cc.appendRange(lo, hi)\n } else {\n cc.appendFoldedRange(lo, hi)\n }\n }\n t.skip(1) // ']'\n\n cc.cleanClass()\n if (sign < 0) {\n cc.negateClass()\n }\n re.runes = cc.toArray()\n this.push(re)\n }\n}\n\nexport { Parser }\n","import { Codepoint } from './Codepoint'\nimport { RE2Flags } from './RE2Flags'\nimport { MachineInputBase } from './MachineInput'\nimport { Utils } from './Utils'\nimport { Inst } from './Inst'\n\n// A logical thread in the NFA.\nclass Thread {\n constructor() {\n this.inst = null\n this.cap = []\n }\n}\n\n// A queue is a 'sparse array' holding pending threads of execution. See:\n// research.swtch.com/2008/03/using-uninitialized-memory-for-fun-and.html\nclass Queue {\n constructor() {\n this.sparse = [] // may contain stale but in-bounds values.\n this.densePcs = [] // may contain stale pc in slots >= size\n this.denseThreads = [] // may contain stale Thread in slots >= size\n this.size = 0\n }\n\n contains(pc) {\n const j = this.sparse[pc]\n return j < this.size && this.densePcs[j] === pc\n }\n\n isEmpty() {\n return this.size === 0\n }\n\n add(pc) {\n const j = this.size++\n this.sparse[pc] = j\n this.denseThreads[j] = null\n this.densePcs[j] = pc\n return j\n }\n\n clear() {\n this.sparse = []\n this.densePcs = []\n this.denseThreads = []\n this.size = 0\n }\n\n toString() {\n let out = '{'\n for (let i = 0; i < this.size; i++) {\n if (i !== 0) {\n out += ', '\n }\n out += this.densePcs[i]\n }\n out += '}'\n return out\n }\n}\n// A Machine matches an input string of Unicode characters against an\n// RE2 instance using a simple NFA.\n//\n// Called by RE2.doExecute.\nclass Machine {\n static fromRE2(re2) {\n const m = new Machine()\n m.prog = re2.prog\n m.re2 = re2\n m.q0 = new Queue(m.prog.numInst())\n m.q1 = new Queue(m.prog.numInst())\n m.pool = []\n m.poolSize = 0\n m.matched = false\n m.matchcap = Array(m.prog.numCap < 2 ? 2 : m.prog.numCap).fill(0)\n m.ncap = 0\n return m\n }\n\n static fromMachine(machine) {\n const m = new Machine()\n m.re2 = machine.re2\n m.prog = machine.prog\n m.q0 = machine.q0\n m.q1 = machine.q1\n m.pool = machine.pool\n m.poolSize = machine.poolSize\n m.matched = machine.matched\n m.matchcap = machine.matchcap\n m.ncap = machine.ncap\n return m\n }\n\n // init() reinitializes an existing Machine for re-use on a new input.\n init(ncap) {\n this.ncap = ncap\n if (ncap > this.matchcap.length) {\n this.initNewCap(ncap)\n } else {\n this.resetCap(ncap)\n }\n }\n\n resetCap(ncap) {\n for (let i = 0; i < this.poolSize; i++) {\n const t = this.pool[i]\n t.cap = Array(ncap).fill(0)\n }\n }\n\n initNewCap(ncap) {\n for (let i = 0; i < this.poolSize; i++) {\n const t = this.pool[i]\n t.cap = Array(ncap).fill(0)\n }\n this.matchcap = Array(ncap).fill(0)\n }\n\n submatches() {\n if (this.ncap === 0) {\n return Utils.emptyInts()\n }\n return this.matchcap.slice(0, this.ncap)\n }\n\n // alloc() allocates a new thread with the given instruction.\n // It uses the free pool if possible.\n alloc(inst) {\n let t\n if (this.poolSize > 0) {\n this.poolSize--\n t = this.pool[this.poolSize]\n } else {\n t = new Thread()\n }\n t.inst = inst\n return t\n }\n\n // Frees all threads on the thread queue, returning them to the free pool.\n freeQueue(queue, from = 0) {\n const numberOfThread = queue.size - from\n const requiredPoolLength = this.poolSize + numberOfThread\n if (this.pool.length < requiredPoolLength) {\n this.pool = this.pool.slice(0, Math.max(this.pool.length * 2, requiredPoolLength))\n }\n for (let i = from; i < queue.size; i++) {\n const t = queue.denseThreads[i]\n if (t !== null) {\n this.pool[this.poolSize] = t\n this.poolSize++\n }\n }\n queue.clear()\n }\n\n // freeThread() returns t to the free pool.\n freeThread(t) {\n if (this.pool.length <= this.poolSize) {\n this.pool = this.pool.slice(0, this.pool.length * 2)\n }\n this.pool[this.poolSize] = t\n this.poolSize++\n }\n\n match(input, pos, anchor) {\n const startCond = this.re2.cond\n if (startCond === Utils.EMPTY_ALL) {\n return false\n }\n if ((anchor === RE2Flags.ANCHOR_START || anchor === RE2Flags.ANCHOR_BOTH) && pos !== 0) {\n return false\n }\n this.matched = false\n this.matchcap = Array(this.prog.numCap).fill(-1)\n\n let runq = this.q0\n let nextq = this.q1\n let r = input.step(pos)\n let rune = r >> 3\n let width = r & 7\n let rune1 = -1\n let width1 = 0\n\n if (r !== MachineInputBase.EOF()) {\n r = input.step(pos + width)\n rune1 = r >> 3\n width1 = r & 7\n }\n\n let flag\n if (pos === 0) {\n flag = Utils.emptyOpContext(-1, rune)\n } else {\n flag = input.context(pos)\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (runq.isEmpty()) {\n if ((startCond & Utils.EMPTY_BEGIN_TEXT) !== 0 && pos !== 0) {\n break\n }\n if (this.matched) {\n break\n }\n if (\n !(this.re2.prefix.length === 0) &&\n rune1 !== this.re2.prefixRune &&\n input.canCheckPrefix()\n ) {\n const advance = input.index(this.re2, pos)\n if (advance < 0) {\n break\n }\n pos += advance\n r = input.step(pos)\n rune = r >> 3\n width = r & 7\n r = input.step(pos + width)\n rune1 = r >> 3\n width1 = r & 7\n }\n }\n if (!this.matched && (pos === 0 || anchor === RE2Flags.UNANCHORED)) {\n if (this.ncap > 0) {\n this.matchcap[0] = pos\n }\n this.add(runq, this.prog.start, pos, this.matchcap, flag, null)\n }\n\n const nextPos = pos + width\n flag = input.context(nextPos)\n this.step(runq, nextq, pos, nextPos, rune, flag, anchor, pos === input.endPos())\n\n if (width === 0) {\n break\n }\n if (this.ncap === 0 && this.matched) {\n break\n }\n\n pos += width\n rune = rune1\n width = width1\n if (rune !== -1) {\n r = input.step(pos + width)\n rune1 = r >> 3\n width1 = r & 7\n }\n const tmpq = runq\n runq = nextq\n nextq = tmpq\n }\n this.freeQueue(nextq)\n return this.matched\n }\n\n step(runq, nextq, pos, nextPos, c, nextCond, anchor, atEnd) {\n const longest = this.re2.longest\n for (let j = 0; j < runq.size; j++) {\n let t = runq.denseThreads[j]\n if (t === null) {\n continue\n }\n if (longest && this.matched && this.ncap > 0 && this.matchcap[0] < t.cap[0]) {\n this.freeThread(t)\n continue\n }\n\n const i = t.inst\n let add = false\n switch (i.op) {\n case Inst.MATCH:\n if (anchor === RE2Flags.ANCHOR_BOTH && !atEnd) {\n break\n }\n if (this.ncap > 0 && (!longest || !this.matched || this.matchcap[1] < pos)) {\n t.cap[1] = pos\n this.matchcap = t.cap.slice(0, this.ncap)\n }\n if (!longest) {\n this.freeQueue(runq, j + 1)\n }\n this.matched = true\n break\n case Inst.RUNE:\n add = i.matchRune(c)\n break\n case Inst.RUNE1:\n add = c === i.runes[0]\n break\n case Inst.RUNE_ANY:\n add = true\n break\n case Inst.RUNE_ANY_NOT_NL:\n add = c !== Codepoint.CODES.get('\\n')\n break\n default:\n throw new Error('bad inst')\n }\n if (add) {\n t = this.add(nextq, i.out, nextPos, t.cap, nextCond, t)\n }\n if (t !== null) {\n this.freeThread(t)\n runq.denseThreads[j] = null\n }\n }\n runq.clear()\n }\n\n add(q, pc, pos, cap, cond, t) {\n if (pc === 0) {\n return t\n }\n if (q.contains(pc)) {\n return t\n }\n\n const d = q.add(pc)\n const inst = this.prog.inst[pc]\n switch (inst.op) {\n case Inst.FAIL:\n break\n case Inst.ALT:\n case Inst.ALT_MATCH:\n t = this.add(q, inst.out, pos, cap, cond, t)\n t = this.add(q, inst.arg, pos, cap, cond, t)\n break\n case Inst.EMPTY_WIDTH:\n if ((inst.arg & ~cond) === 0) {\n t = this.add(q, inst.out, pos, cap, cond, t)\n }\n break\n case Inst.NOP:\n t = this.add(q, inst.out, pos, cap, cond, t)\n break\n case Inst.CAPTURE:\n if (inst.arg < this.ncap) {\n const opos = cap[inst.arg]\n cap[inst.arg] = pos\n this.add(q, inst.out, pos, cap, cond, null)\n cap[inst.arg] = opos\n } else {\n t = this.add(q, inst.out, pos, cap, cond, t)\n }\n break\n case Inst.MATCH:\n case Inst.RUNE:\n case Inst.RUNE1:\n case Inst.RUNE_ANY:\n case Inst.RUNE_ANY_NOT_NL:\n if (t === null) {\n t = this.alloc(inst)\n } else {\n t.inst = inst\n }\n if (this.ncap > 0 && t.cap !== cap) {\n t.cap = cap.slice(0, this.ncap)\n }\n q.denseThreads[d] = t\n t = null\n break\n default:\n throw new Error('unhandled')\n }\n return t\n }\n}\n\nexport { Machine }\n","import { RE2Flags } from './RE2Flags'\nimport { Utils } from './Utils'\nimport { MatcherInput, MatcherInputBase } from './MatcherInput'\nimport { MachineInput } from './MachineInput'\nimport { Compiler } from './Compiler'\nimport { Simplify } from './Simplify'\nimport { Parser } from './Parser'\nimport { Machine } from './Machine'\n\nclass AtomicReference {\n constructor(initialValue) {\n this.value = initialValue\n }\n\n // Returns the current value\n get() {\n return this.value\n }\n\n // Sets to the given value\n set(newValue) {\n this.value = newValue\n }\n\n // Atomically sets to the given value and returns true if the current value == the expected value\n compareAndSet(expect, update) {\n if (this.value === expect) {\n this.value = update\n return true\n }\n return false\n }\n}\n\n/**\n * An RE2 class instance is a compiled representation of an RE2 regular expression, independent of\n * the public Java-like Pattern/Matcher API.\n *\n * <p>\n * This class also contains various implementation helpers for RE2 regular expressions.\n *\n * <p>\n * Use the {@link #quoteMeta(String)} utility function to quote all regular expression\n * metacharacters in an arbitrary string.\n *\n */\nclass RE2 {\n // This is visible for testing.\n static initTest(expr) {\n const re2 = RE2.compile(expr)\n const res = new RE2(re2.expr, re2.prog, re2.numSubexp, re2.longest)\n res.cond = re2.cond\n res.prefix = re2.prefix\n res.prefixUTF8 = re2.prefixUTF8\n res.prefixComplete = re2.prefixComplete\n res.prefixRune = re2.prefixRune\n return res\n }\n\n /**\n * Parses a regular expression and returns, if successful, an {@code RE2} instance that can be\n * used to match against text.\n *\n * <p>\n * When matching against text, the regexp returns a match that begins as early as possible in the\n * input (leftmost), and among those it chooses the one that a backtracking search would have\n * found first. This so-called leftmost-first matching is the same semantics that Perl, Python,\n * and other implementations use, although this package implements it without the expense of\n * backtracking. For POSIX leftmost-longest matching, see {@link #compilePOSIX}.\n */\n static compile(expr) {\n return RE2.compileImpl(expr, RE2Flags.PERL, false)\n }\n\n /**\n * {@code compilePOSIX} is like {@link #compile} but restricts the regular expression to POSIX ERE\n * (egrep) syntax and changes the match semantics to leftmost-longest.\n *\n * <p>\n * That is, when matching against text, the regexp returns a match that begins as early as\n * possible in the input (leftmost), and among those it chooses a match that is as long as\n * possible. This so-called leftmost-longest matching is the same semantics that early regular\n * expression implementations used and that POSIX specifies.\n *\n * <p>\n * However, there can be multiple leftmost-longest matches, with different submatch choices, and\n * here this package diverges from POSIX. Among the possible leftmost-longest matches, this\n * package chooses the one that a backtracking search would have found first, while POSIX\n * specifies that the match be chosen to maximize the length of the first subexpression, then the\n * second, and so on from left to right. The POSIX rule is computationally prohibitive and not\n * even well-defined. See http://swtch.com/~rsc/regexp/regexp2.html#posix\n */\n static compilePOSIX(expr) {\n return RE2.compileImpl(expr, RE2Flags.POSIX, true)\n }\n\n // Exposed to ExecTests.\n static compileImpl(expr, mode, longest) {\n let re = Parser.parse(expr, mode)\n const maxCap = re.maxCap()\n re = Simplify.simplify(re)\n\n const prog = Compiler.compileRegexp(re)\n const re2 = new RE2(expr, prog, maxCap, longest)\n\n const [prefixCompl, prefixStr] = prog.prefix()\n re2.prefixComplete = prefixCompl\n re2.prefix = prefixStr\n re2.prefixUTF8 = Utils.stringToUtf8ByteArray(re2.prefix)\n\n if (re2.prefix.length > 0) {\n re2.prefixRune = re2.prefix.codePointAt(0)\n }\n re2.namedGroups = re.namedGroups\n return re2\n }\n\n /**\n * Returns true iff textual regular expression {@code pattern} matches string {@code s}.\n *\n * <p>\n * More complicated queries need to use {@link #compile} and the full {@code RE2} interface.\n */\n // This is visible for testing.\n static match(pattern, s) {\n return RE2.compile(pattern).match(s)\n }\n\n constructor(expr, prog, numSubexp = 0, longest = 0) {\n this.expr = expr // as passed to Compile\n this.prog = prog // compiled program\n this.numSubexp = numSubexp\n this.longest = longest\n this.cond = prog.startCond() // EMPTY_* bitmask: empty-width conditions\n this.prefix = null // required UTF-16 prefix in unanchored matches\n this.prefixUTF8 = null // required UTF-8 prefix in unanchored matches\n this.prefixComplete = false // true if prefix is the entire regexp\n this.prefixRune = 0 // first rune in prefix\n this.pooled = new AtomicReference() // Cache of machines for running regexp. Forms a Treiber stack.\n }\n\n /**\n * Returns the number of parenthesized subexpressions in this regular expression.\n */\n numberOfCapturingGroups() {\n return this.numSubexp\n }\n\n // get() returns a machine to use for matching |this|. It uses |this|'s\n // machine cache if possible, to avoid unnecessary allocation.\n get() {\n // Pop a machine off the stack if available.\n let head\n\n do {\n head = this.pooled.get()\n } while (head && !this.pooled.compareAndSet(head, head.next))\n\n return head\n }\n\n // Clears the memory associated with this machine.\n reset() {\n this.pooled.set(null)\n }\n\n // put() returns a machine to |this|'s machine cache. There is no attempt to\n // limit the size of the cache, so it will grow to the maximum number of\n // simultaneous matches run using |this|. (The cache empties when |this|\n // gets garbage collected or reset is called.)\n put(m, isNew) {\n // To avoid allocation in the single-thread or uncontended case, reuse a node only if\n // it was the only element in the stack when it was popped, and it's the only element\n // in the stack when it's pushed back after use.\n let head = this.pooled.get()\n do {\n head = this.pooled.get()\n if (!isNew && head) {\n // If an element had a null next pointer and it was previously in the stack, another thread\n // might be trying to pop it out right now, and if it sees the same node now in the\n // stack the pop will succeed, but the new top of the stack will be the stale (null) value\n // of next. Allocate a new Machine so that the CAS will not succeed if this node has been\n // popped and re-pushed.\n m = Machine.fromMachine(m)\n isNew = true\n }\n\n // Without this comparison, TSAN will complain about a race condition:\n // Thread A, B, and C all attempt to do a match on the same pattern.\n //\n // A: Allocates Machine 1; executes match; put machine 1. State is now:\n //\n // pooled -> machine 1 -> null\n //\n // B reads pooled, sees machine 1\n //\n // C reads pooled, sees machine 1\n //\n // B successfully CASes pooled to null\n //\n // B executes match; put machine 1, which involves setting machine1.next to\n // null (even though it's already null); preempted before CAS\n //\n // C resumes, and reads machine1.next in order to execute cas(head, head.next)\n //\n // There is no happens-before relationship between B's redundant null write\n // and C's read, thus triggering TSAN.\n //\n // Not needed for JS code\n if (m.next !== head) {\n m.next = head\n }\n } while (!this.pooled.compareAndSet(head, m))\n }\n\n toString() {\n return this.expr\n }\n\n // doExecute() finds the leftmost match in the input and returns\n // the position of its subexpressions.\n // Derived from exec.go.\n doExecute(input, pos, anchor, ncap) {\n let m = this.get()\n // The Treiber stack cannot reuse nodes, unless the node to be reused has only ever been at\n // the bottom of the stack (i.e., next == null).\n let isNew = false\n if (!m) {\n m = Machine.fromRE2(this)\n isNew = true\n } else if (m.next !== null) {\n m = Machine.fromMachine(m)\n isNew = true\n }\n\n m.init(ncap)\n const cap = m.match(input, pos, anchor) ? m.submatches() : null\n this.put(m, isNew)\n return cap\n }\n\n match(s) {\n return this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, 0) !== null\n }\n\n /**\n * Matches the regular expression against input starting at position start and ending at position\n * end, with the given anchoring. Records the submatch boundaries in group, which is [start, end)\n * pairs of byte offsets. The number of boundaries needed is inferred from the size of the group\n * array. It is most efficient not to ask for submatch boundaries.\n *\n * @param input the input byte array\n * @param start the beginning position in the input\n * @param end the end position in the input\n * @param anchor the anchoring flag (UNANCHORED, ANCHOR_START, ANCHOR_BOTH)\n * @param group the array to fill with submatch positions\n * @param ngroup the number of array pairs to fill in\n * @return true if a match was found\n */\n matchWithGroup(input, start, end, anchor, ngroup) {\n if (!(input instanceof MatcherInputBase)) {\n input = MatcherInput.utf16(input)\n }\n\n return this.matchMachineInput(input, start, end, anchor, ngroup)\n }\n\n matchMachineInput(input, start, end, anchor, ngroup) {\n if (start > end) {\n return [false, null]\n }\n const machineInput = input.isUTF16Encoding()\n ? MachineInput.fromUTF16(input.asCharSequence(), 0, end)\n : MachineInput.fromUTF8(input.asBytes(), 0, end)\n\n const groupMatch = this.doExecute(machineInput, start, anchor, 2 * ngroup)\n\n if (groupMatch === null) {\n return [false, null]\n }\n return [true, groupMatch]\n }\n\n /**\n * Returns true iff this regexp matches the UTF-8 byte array {@code b}.\n */\n // This is visible for testing.\n matchUTF8(b) {\n return this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, 0) !== null\n }\n\n /**\n * Returns a copy of {@code src} in which all matches for this regexp have been replaced by\n * {@code repl}. No support is provided for expressions (e.g. {@code \\1} or {@code $1}) in the\n * replacement string.\n */\n // This is visible for testing.\n replaceAll(src, repl) {\n return this.replaceAllFunc(src, () => repl, 2 * src.length + 1)\n }\n\n /**\n * Returns a copy of {@code src} in which only the first match for this regexp has been replaced\n * by {@code repl}. No support is provided for expressions (e.g. {@code \\1} or {@code $1}) in the\n * replacement string.\n */\n // This is visible for testing.\n replaceFirst(src, repl) {\n return this.replaceAllFunc(src, () => repl, 1)\n }\n\n /**\n * Returns a copy of {@code src} in which at most {@code maxReplaces} matches for this regexp have\n * been replaced by the return value of of function {@code repl} (whose first argument is the\n * matched string). No support is provided for expressions (e.g. {@code \\1} or {@code $1}) in the\n * replacement string.\n */\n // This is visible for testing.\n replaceAllFunc(src, replFunc, maxReplaces) {\n let lastMatchEnd = 0\n let searchPos = 0\n let out = ''\n\n const input = MachineInput.fromUTF16(src)\n let numReplaces = 0\n while (searchPos <= src.length) {\n const a = this.doExecute(input, searchPos, RE2Flags.UNANCHORED, 2)\n if (a === null || a.length === 0) {\n break\n }\n out += src.substring(lastMatchEnd, a[0])\n\n if (a[1] > lastMatchEnd || a[0] === 0) {\n out += replFunc(src.substring(a[0], a[1]))\n numReplaces++\n }\n\n lastMatchEnd = a[1]\n const width = input.step(searchPos) & 7\n if (searchPos + width > a[1]) {\n searchPos += width\n } else if (searchPos + 1 > a[1]) {\n searchPos++\n } else {\n searchPos = a[1]\n }\n if (numReplaces >= maxReplaces) {\n break\n }\n }\n\n out += src.substring(lastMatchEnd)\n return out\n }\n\n // The number of capture values in the program may correspond\n // to fewer capturing expressions than are in the regexp.\n // For example, \"(a){0}\" turns into an empty program, so the\n // maximum capture in the program is 0 but we need to return\n // an expression for \\1. Pad returns a with -1s appended as needed;\n // the result may alias a.\n pad(a) {\n if (a === null) {\n return null\n }\n\n let n = (1 + this.numSubexp) * 2\n\n if (a.length < n) {\n let a2 = new Array(n).fill(-1)\n for (let i = 0; i < a.length; i++) {\n a2[i] = a[i]\n }\n a = a2\n }\n return a\n }\n\n // Find matches in input.\n allMatches(input, n, deliverFun = (v) => v) {\n let result = []\n const end = input.endPos()\n if (n < 0) {\n n = end + 1\n }\n\n let pos = 0\n let i = 0\n let prevMatchEnd = -1\n while (i < n && pos <= end) {\n const matches = this.doExecute(input, pos, RE2Flags.UNANCHORED, this.prog.numCap)\n if (matches === null || matches.length === 0) {\n break\n }\n\n let accept = true\n if (matches[1] === pos) {\n if (matches[0] === prevMatchEnd) {\n accept = false\n }\n const r = input.step(pos)\n if (r < 0) {\n pos = end + 1\n } else {\n pos += r & 7\n }\n } else {\n pos = matches[1]\n }\n prevMatchEnd = matches[1]\n\n if (accept) {\n result.push(deliverFun(this.pad(matches)))\n i++\n }\n }\n return result\n }\n\n // Legacy Go-style interface; preserved (package-private) for better\n // test coverage.\n //\n // There are 16 methods of RE2 that match a regular expression and\n // identify the matched text. Their names are matched by this regular\n // expression:\n //\n // find(All)?(UTF8)?(Submatch)?(Index)?\n //\n // If 'All' is present, the routine matches successive non-overlapping\n // matches of the entire expression. Empty matches abutting a\n // preceding match are ignored. The return value is an array\n // containing the successive return values of the corresponding\n // non-All routine. These routines take an extra integer argument, n;\n // if n >= 0, the function returns at most n matches/submatches.\n //\n // If 'UTF8' is present, the argument is a UTF-8 encoded byte[] array;\n // otherwise it is a UTF-16 encoded js string; return values\n // are adjusted as appropriate.\n //\n // If 'Submatch' is present, the return value is an list identifying\n // the successive submatches of the expression. Submatches are\n // matches of parenthesized subexpressions within the regular\n // expression, numbered from left to right in order of opening\n // parenthesis. Submatch 0 is the match of the entire expression,\n // submatch 1 the match of the first parenthesized subexpression, and\n // so on.\n //\n // If 'Index' is present, matches and submatches are identified by\n // byte index pairs within the input string: result[2*n:2*n+1]\n // identifies the indexes of the nth submatch. The pair for n==0\n // identifies the match of the entire expression. If 'Index' is not\n // present, the match is identified by the text of the match/submatch.\n // If an index is negative, it means that subexpression did not match\n // any string in the input.\n\n /**\n * Returns an array holding the text of the leftmost match in {@code b} of this regular\n * expression.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8(b) {\n const a = this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, 2)\n if (a === null) {\n return null\n }\n return b.slice(a[0], a[1])\n }\n\n /**\n * Returns a two-element array of integers defining the location of the leftmost match in\n * {@code b} of this regular expression. The match itself is at {@code b[loc[0]...loc[1]]}.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8Index(b) {\n const a = this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, 2)\n if (a === null) {\n return null\n }\n return a.slice(0, 2)\n }\n\n /**\n * Returns a string holding the text of the leftmost match in {@code s} of this regular\n * expression.\n *\n * <p>\n * If there is no match, the return value is an empty string, but it will also be empty if the\n * regular expression successfully matches an empty string. Use {@link #findIndex} or\n * {@link #findSubmatch} if it is necessary to distinguish these cases.\n */\n // This is visible for testing.\n find(s) {\n const a = this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, 2)\n if (a === null) {\n return ''\n }\n return s.substring(a[0], a[1])\n }\n\n /**\n * Returns a two-element array of integers defining the location of the leftmost match in\n * {@code s} of this regular expression. The match itself is at\n * {@code s.substring(loc[0], loc[1])}.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findIndex(s) {\n return this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, 2)\n }\n\n /**\n * Returns an array of arrays the text of the leftmost match of the regular expression in\n * {@code b} and the matches, if any, of its subexpressions, as defined by the <a\n * href='#submatch'>Submatch</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8Submatch(b) {\n const a = this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, this.prog.numCap)\n if (a === null) {\n return null\n }\n\n const ret = new Array(1 + this.numSubexp).fill(null)\n for (let i = 0; i < ret.length; i++) {\n if (2 * i < a.length && a[2 * i] >= 0) {\n ret[i] = b.slice(a[2 * i], a[2 * i + 1])\n }\n }\n return ret\n }\n\n /**\n * Returns an array holding the index pairs identifying the leftmost match of this regular\n * expression in {@code b} and the matches, if any, of its subexpressions, as defined by the the\n * <a href='#submatch'>Submatch</a> and <a href='#index'>Index</a> descriptions above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8SubmatchIndex(b) {\n return this.pad(\n this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, this.prog.numCap)\n )\n }\n\n /**\n * Returns an array of strings holding the text of the leftmost match of the regular expression in\n * {@code s} and the matches, if any, of its subexpressions, as defined by the <a\n * href='#submatch'>Submatch</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findSubmatch(s) {\n const a = this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, this.prog.numCap)\n if (a === null) {\n return null\n }\n\n const ret = new Array(1 + this.numSubexp).fill(null)\n for (let i = 0; i < ret.length; i++) {\n if (2 * i < a.length && a[2 * i] >= 0) {\n ret[i] = s.substring(a[2 * i], a[2 * i + 1])\n }\n }\n return ret\n }\n\n /**\n * Returns an array holding the index pairs identifying the leftmost match of this regular\n * expression in {@code s} and the matches, if any, of its subexpressions, as defined by the <a\n * href='#submatch'>Submatch</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findSubmatchIndex(s) {\n return this.pad(\n this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, this.prog.numCap)\n )\n }\n\n /**\n * {@code findAllUTF8()} is the <a href='#all'>All</a> version of {@link #findUTF8}; it returns a\n * list of up to {@code n} successive matches of the expression, as defined by the <a\n * href='#all'>All</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n *\n * TODO(adonovan): think about defining a byte slice view class, like a read-only Go slice backed\n * by |b|.\n */\n // This is visible for testing.\n findAllUTF8(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n, (match) =>\n b.slice(match[0], match[1])\n )\n if (result.length === 0) {\n return null\n }\n return result\n }\n\n /**\n * {@code findAllUTF8Index} is the <a href='#all'>All</a> version of {@link #findUTF8Index}; it\n * returns a list of up to {@code n} successive matches of the expression, as defined by the <a\n * href='#all'>All</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllUTF8Index(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n, (match) => match.slice(0, 2))\n if (result.length === 0) {\n return null\n }\n return result\n }\n\n /**\n * {@code findAll} is the <a href='#all'>All</a> version of {@link #find}; it returns a list of up\n * to {@code n} successive matches of the expression, as defined by the <a href='#all'>All</a>\n * description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAll(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n, (match) =>\n s.substring(match[0], match[1])\n )\n if (result.length === 0) {\n return null\n }\n return result\n }\n\n /**\n * {@code findAllIndex} is the <a href='#all'>All</a> version of {@link #findIndex}; it returns a\n * list of up to {@code n} successive matches of the expression, as defined by the <a\n * href='#all'>All</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllIndex(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n, (match) => match.slice(0, 2))\n if (result.length === 0) {\n return null\n }\n return result\n }\n\n /**\n * {@code findAllUTF8Submatch} is the <a href='#all'>All</a> version of {@link #findUTF8Submatch};\n * it returns a list of up to {@code n} successive matches of the expression, as defined by the <a\n * href='#all'>All</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllUTF8Submatch(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n, (match) => {\n let slice = new Array((match.length / 2) | 0).fill(null)\n for (let j = 0; j < slice.length; j++) {\n if (match[2 * j] >= 0) {\n slice[j] = b.slice(match[2 * j], match[2 * j + 1])\n }\n }\n return slice\n })\n if (result.length === 0) {\n return null\n }\n return result\n }\n\n /**\n * {@code findAllUTF8SubmatchIndex} is the <a href='#all'>All</a> version of\n * {@link #findUTF8SubmatchIndex}; it returns a list of up to {@code n} successive matches of the\n * expression, as defined by the <a href='#all'>All</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllUTF8SubmatchIndex(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n)\n if (result.length === 0) {\n return null\n }\n return result\n }\n\n /**\n * {@code findAllSubmatch} is the <a href='#all'>All</a> version of {@link #findSubmatch}; it\n * returns a list of up to {@code n} successive matches of the expression, as defined by the <a\n * href='#all'>All</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllSubmatch(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n, (match) => {\n let slice = new Array((match.length / 2) | 0).fill(null)\n for (let j = 0; j < slice.length; j++) {\n if (match[2 * j] >= 0) {\n slice[j] = s.substring(match[2 * j], match[2 * j + 1])\n }\n }\n return slice\n })\n if (result.length === 0) {\n return null\n }\n return result\n }\n\n /**\n * {@code findAllSubmatchIndex} is the <a href='#all'>All</a> version of\n * {@link #findSubmatchIndex}; it returns a list of up to {@code n} successive matches of the\n * expression, as defined by the <a href='#all'>All</a> description above.\n *\n * <p>\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllSubmatchIndex(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n)\n if (result.length === 0) {\n return null\n }\n return result\n }\n}\n\nexport { RE2 }\n","import { RE2Flags } from './RE2Flags'\nimport { MatcherInput } from './MatcherInput'\nimport { Matcher } from './Matcher'\nimport { RE2 } from './RE2'\nimport { Utils } from './Utils'\nimport { RE2JSSyntaxException } from './RE2JSSyntaxException'\n\n/**\n * A compiled representation of an RE2 regular expression\n *\n * <p>\n * The matching functions take {@code String} arguments instead of the more general Java\n * {@code CharSequence} since the latter doesn't provide UTF-16 decoding.\n *\n *\n * @author rsc@google.com (Russ Cox)\n * @class\n */\nclass RE2JS {\n /**\n * Flag: case insensitive matching.\n */\n static CASE_INSENSITIVE = 1\n /**\n * Flag: dot ({@code .}) matches all characters, including newline.\n */\n static DOTALL = 2\n /**\n * Flag: multiline matching: {@code ^} and {@code $} match at beginning and end of line, not just\n * beginning and end of input.\n */\n static MULTILINE = 4\n /**\n * Flag: Unicode groups (e.g. {@code \\p\\ Greek\\} ) will be syntax errors.\n */\n static DISABLE_UNICODE_GROUPS = 8\n /**\n * Flag: matches longest possible string.\n */\n static LONGEST_MATCH = 16\n\n /**\n * Returns a literal pattern string for the specified string.\n *\n * <p>\n * This method produces a string that can be used to create a <code>RE2JS</code> that would\n * match the string <code>s</code> as if it were a literal pattern.\n * </p>\n * Metacharacters or escape sequences in the input sequence will be given no special meaning.\n *\n * @param {string} str The string to be literalized\n * @return {string} A literal string replacement\n */\n static quote(str) {\n return Utils.quoteMeta(str)\n }\n\n /**\n * Helper: create new RE2JS with given regex and flags. Flregex is the regex with flags applied.\n * @param {string} regex\n * @param {number} flags\n * @return {RE2JS}\n */\n static compile(regex, flags = 0) {\n let fregex = regex\n if ((flags & RE2JS.CASE_INSENSITIVE) !== 0) {\n fregex = `(?i)${fregex}`\n }\n if ((flags & RE2JS.DOTALL) !== 0) {\n fregex = `(?s)${fregex}`\n }\n if ((flags & RE2JS.MULTILINE) !== 0) {\n fregex = `(?m)${fregex}`\n }\n if (\n (flags &\n ~(\n RE2JS.MULTILINE |\n RE2JS.DOTALL |\n RE2JS.CASE_INSENSITIVE |\n RE2JS.DISABLE_UNICODE_GROUPS |\n RE2JS.LONGEST_MATCH\n )) !==\n 0\n ) {\n throw new Error(\n 'Flags should only be a combination of MULTILINE, DOTALL, CASE_INSENSITIVE, DISABLE_UNICODE_GROUPS, LONGEST_MATCH'\n )\n }\n\n let re2Flags = RE2Flags.PERL\n if ((flags & RE2JS.DISABLE_UNICODE_GROUPS) !== 0) {\n re2Flags &= ~RE2Flags.UNICODE_GROUPS\n }\n\n const p = new RE2JS(regex, flags)\n // The compiled RE2 regexp.\n p.re2Input = RE2.compileImpl(fregex, re2Flags, (flags & RE2JS.LONGEST_MATCH) !== 0)\n return p\n }\n\n /**\n * Matches a string against a regular expression.\n *\n * @param {string} regex the regular expression\n * @param {*} input the input\n * @return {boolean} true if the regular expression matches the entire input\n * @throws RE2JSSyntaxException if the regular expression is malformed\n */\n static matches(regex, input) {\n return RE2JS.compile(regex).matcher(input).matches()\n }\n\n // This is visible for testing.\n static initTest(pattern, flags, re2) {\n if (pattern == null) {\n throw new Error('pattern is null')\n }\n if (re2 == null) {\n throw new Error('re2 is null')\n }\n const p = new RE2JS(pattern, flags)\n // The compiled RE2 regexp.\n p.re2Input = re2\n return p\n }\n\n constructor(pattern, flags) {\n // The pattern string at construction time.\n this.patternInput = pattern\n // The flags at construction time.\n this.flagsInput = flags\n }\n\n /**\n * Releases memory used by internal caches associated with this pattern. Does not change the\n * observable behaviour. Useful for tests that detect memory leaks via allocation tracking.\n */\n reset() {\n this.re2Input.reset()\n }\n\n /**\n * Returns the flags used in the constructor.\n * @return {number}\n */\n flags() {\n return this.flagsInput\n }\n\n /**\n * Returns the pattern used in the constructor.\n * @return {string}\n */\n pattern() {\n return this.patternInput\n }\n\n re2() {\n return this.re2Input\n }\n\n /**\n * Matches a string against a regular expression.\n *\n * @param {*} input the input\n * @return {boolean} true if the regular expression matches the entire input\n */\n matches(input) {\n return this.matcher(input).matches()\n }\n\n /**\n * Creates a new {@code Matcher} matching the pattern against the input.\n *\n * @param {*} input the input string\n * @return {Matcher}\n */\n matcher(input) {\n if (Array.isArray(input)) {\n input = MatcherInput.utf8(input)\n }\n\n return new Matcher(this, input)\n }\n\n /**\n * Splits input around instances of the regular expression. It returns an array giving the strings\n * that occur before, between, and after instances of the regular expression.\n *\n * <p>\n * If {@code limit <= 0}, there is no limit on the size of the returned array. If\n * {@code limit == 0}, empty strings that would occur at the end of the array are omitted. If\n * {@code limit > 0}, at most limit strings are returned. The final string contains the remainder\n * of the input, possibly including additional matches of the pattern.\n *\n * @param {string} input the input string to be split\n * @param {number} limit the limit\n * @return {java.lang.String[]} the split strings\n */\n split(input, limit = 0) {\n const m = this.matcher(input)\n\n const result = []\n let emptiesSkipped = 0\n let last = 0\n\n while (m.find()) {\n if (last === 0 && m.end() === 0) {\n // Zero-width match at the beginning, skip\n last = m.end()\n continue\n }\n\n if (limit > 0 && result.length === limit - 1) {\n // no more room for matches\n break\n }\n\n if (last === m.start()) {\n // Empty match, may or may not be trailing.\n if (limit === 0) {\n emptiesSkipped += 1\n last = m.end()\n continue\n }\n } else {\n // If emptiesSkipped > 0 then limit == 0 and we have non-trailing empty matches to add before\n // this non-empty match.\n while (emptiesSkipped > 0) {\n result.push('')\n emptiesSkipped -= 1\n }\n }\n\n result.push(m.substring(last, m.start()))\n last = m.end()\n }\n\n if (limit === 0 && last !== m.inputLength()) {\n // Unlimited match, no more delimiters but we have a non-empty input at the end. Catch up any skipped empty\n // matches, then emit the final match.\n while (emptiesSkipped > 0) {\n result.push('')\n emptiesSkipped -= 1\n }\n\n result.push(m.substring(last, m.inputLength()))\n }\n\n if (limit !== 0 || result.length === 0) {\n result.push(m.substring(last, m.inputLength()))\n }\n\n return result\n }\n\n toString() {\n return this.patternInput\n }\n\n /**\n * Returns the number of capturing groups in this matcher's pattern. Group zero denotes the entire\n * pattern and is excluded from this count.\n *\n * @return {number} the number of capturing groups in this pattern\n */\n groupCount() {\n return this.re2Input.numberOfCapturingGroups()\n }\n\n /**\n * Return a map of the capturing groups in this matcher's pattern, where key is the name and value\n * is the index of the group in the pattern.\n * @return {*}\n */\n namedGroups() {\n return this.re2Input.namedGroups\n }\n\n equals(other) {\n if (this === other) {\n return true\n }\n if (other === null || this.constructor !== other.constructor) {\n return false\n }\n\n return this.flagsInput === other.flagsInput && this.patternInput === other.patternInput\n }\n}\n\nexport { RE2JS, RE2JSSyntaxException }\n"],"names":["RE2Flags","static","CLASS_NL","DOT_NL","ONE_LINE","PERL_X","UNICODE_GROUPS","Codepoint","Map","codepoint","s","String","fromCodePoint","toUpperCase","length","sOrigin","codePointAt","toLowerCase","UnicodeTables","this","Lu","C","Cc","Cf","Co","Cs","L","Ll","Lm","Lo","Lt","M","Mc","Me","Mn","N","Nd","Nl","No","P","Pc","Pd","Pe","Pf","Pi","Po","Ps","S","Sc","Sk","Sm","So","Z","Zl","Zp","Zs","Adlam","Ahom","Anatolian_Hieroglyphs","Arabic","Armenian","Avestan","Balinese","Bamum","Bassa_Vah","Batak","Bengali","Bhaiksuki","Bopomofo","Brahmi","Braille","Buginese","Buhid","Canadian_Aboriginal","Carian","Caucasian_Albanian","Chakma","Cham","Cherokee","Chorasmian","Common","Coptic","Cuneiform","Cypriot","Cypro_Minoan","Cyrillic","Deseret","Devanagari","Dives_Akuru","Dogra","Duployan","Egyptian_Hieroglyphs","Elbasan","Elymaic","Ethiopic","Georgian","Glagolitic","Gothic","Grantha","Greek","Gujarati","Gunjala_Gondi","Gurmukhi","Han","Hangul","Hanifi_Rohingya","Hanunoo","Hatran","Hebrew","Hiragana","Imperial_Aramaic","Inherited","Inscriptional_Pahlavi","Inscriptional_Parthian","Javanese","Kaithi","Kannada","Katakana","Kawi","Kayah_Li","Kharoshthi","Khitan_Small_Script","Khmer","Khojki","Khudawadi","Lao","Latin","Lepcha","Limbu","Linear_A","Linear_B","Lisu","Lycian","Lydian","Mahajani","Makasar","Malayalam","Mandaic","Manichaean","Marchen","Masaram_Gondi","Medefaidrin","Meetei_Mayek","Mende_Kikakui","Meroitic_Cursive","Meroitic_Hieroglyphs","Miao","Modi","Mongolian","Mro","Multani","Myanmar","Nabataean","Nag_Mundari","Nandinagari","New_Tai_Lue","Newa","Nko","Nushu","Nyiakeng_Puachue_Hmong","Ogham","Ol_Chiki","Old_Hungarian","Old_Italic","Old_North_Arabian","Old_Permic","Old_Persian","Old_Sogdian","Old_South_Arabian","Old_Turkic","Old_Uyghur","Oriya","Osage","Osmanya","Pahawh_Hmong","Palmyrene","Pau_Cin_Hau","Phags_Pa","Phoenician","Psalter_Pahlavi","Rejang","Runic","Samaritan","Saurashtra","Sharada","Shavian","Siddham","SignWriting","Sinhala","Sogdian","Sora_Sompeng","Soyombo","Sundanese","Syloti_Nagri","Syriac","Tagalog","Tagbanwa","Tai_Le","Tai_Tham","Tai_Viet","Takri","Tamil","Tangsa","Tangut","Telugu","Thaana","Thai","Tibetan","Tifinagh","Tirhuta","Toto","Ugaritic","Vai","Vithkuqi","Wancho","Warang_Citi","Yezidi","Yi","Zanabazar_Square","foldL","foldLl","foldLt","foldLu","foldM","foldMn","foldCommon","foldGreek","foldInherited","Unicode","ranges","r","lo","hi","m","Math","floor","range","MAX_LATIN1","is32","is","Upper","CASE_ORBIT","has","get","l","r1","r2","MAX_ASCII","CODES","simpleFold","Utils","c","rune","out","isPrint","METACHARACTERS","indexOf","toString","str","split","map","op","EMPTY_BEGIN_TEXT","EMPTY_BEGIN_LINE","EMPTY_END_TEXT","EMPTY_END_LINE","isWordRune","EMPTY_WORD_BOUNDARY","EMPTY_NO_WORD_BOUNDARY","join","codePoint","MAX_BMP","globalThis","TextEncoder","Array","from","encode","p","i","charCodeAt","bytes","TextDecoder","decode","Uint8Array","pos","c1","fromCharCode","c2","u","c3","createEnum","values","arguments","undefined","initNum","enumObject","val","keyVal","Object","freeze","MatcherInputBase","getEncoding","Error","isUTF8Encoding","Encoding","UTF_8","isUTF16Encoding","UTF_16","Utf8MatcherInput","constructor","super","asCharSequence","utf8ByteArrayToString","asBytes","Utf16MatcherInput","charSequence","MatcherInput","input","isArray","stringToUtf8ByteArray","Matcher","pattern","patternInput","re2","patternGroupCount","numberOfCapturingGroups","groups","namedGroups","resetMatcherInput","utf8","utf16","reset","matcherInputLength","matcherInput","appendPos","hasMatch","hasGroups","anchorFlag","start","group","groupInt","Number","isFinite","loadGroup","end","substring","groupCount","res","matchMachineInput","matches","genMatch","ANCHOR_BOTH","lookingAt","ANCHOR_START","find","UNANCHORED","startByte","anchor","slice","inputLength","appendReplacement","replacement","e","appendReplacementInternal","last","n","j","groupName","substr","appendTail","replaceAll","replace","replaceFirst","all","MachineInputBase","canCheckPrefix","endPos","MachineUTF8Input","step","EOF","x","index","prefixUTF8","context","lim","emptyOpContext","source","target","fromIndex","targetLength","sourceLength","MachineUTF16Input","charCount","prefix","MachineInput","Regexp","Op","LEFT_PAREN","re","regex","flags","subs","runes","cap","min","max","name","emptySubs","reinit","appendTo","NO_MATCH","EMPTY_MATCH","STAR","PLUS","QUEST","REPEAT","sub","CAPTURE","LITERAL","NON_GREEDY","CONCAT","ALTERNATE","sep","FOLD_CASE","escapeRune","ANY_CHAR_NOT_NL","ANY_CHAR","BEGIN_TEXT","END_TEXT","WAS_DOLLAR","BEGIN_LINE","END_LINE","WORD_BOUNDARY","NO_WORD_BOUNDARY","CHAR_CLASS","MAX_RUNE","quoteIfHyphen","maxCap","equals","that","Inst","RUNE","RUNE_ANY_NOT_NL","arg","matchRune","r0","equalsIgnoreCase","ALT","ALT_MATCH","EMPTY_WIDTH","MATCH","FAIL","NOP","escapeRunes","RUNE1","RUNE_ANY","Prog","inst","numCap","getInst","pc","numInst","addInst","push","skipNop","isRuneOp","startCond","flag","loop","next","patch","append","l1","l2","len","Frag","nullable","Compiler","f","compile","prog","newInst","nop","fail","cat","f1","f2","alt","nongreedy","quest","star","plus","empty","ANY_RUNE_NOT_NL","ANY_RUNE","bra","ket","Simplify","nre","nsub","simplify","fromRegexp","simplify1","prefixSubs","suffix","nre2","CharGroup","sign","cls","code1","code2","code3","PERL_GROUPS","code4","code5","code6","code7","code8","code9","code10","code11","code12","code13","code14","code15","code16","code17","POSIX_GROUPS","CharClass","result","array","pivotFrom","pivotTo","cmp","left","right","pivotIndex","temp","qsortIntPair","emptyInts","toArray","cleanClass","w","appendLiteral","appendFoldedRange","appendRange","rlo","rhi","MIN_FOLD","MAX_FOLD","appendClass","appendFoldedClass","appendNegatedClass","nextLo","appendTable","table","triple","stride","appendNegatedTable","appendTableWithSign","negateClass","appendClassWithSign","appendGroup","g","foldCase","charClassToString","RE2JSSyntaxException","error","message","getDescription","getPattern","Pair","first","second","StringIterator","position","rewindTo","more","peek","skip","skipString","pop","rest","startsWith","beforePos","Parser","of","ANY_TABLE","CATEGORIES","FOLD_CATEGORIES","SCRIPTS","FOLD_SCRIPT","stringToRunes","parseInternal","t","parseInt","ERR_INVALID_REPEAT_SIZE","isalnum","parseFloat","dst","src","startPos","ERR_TRAILING_BACKSLASH","bigswitch","nhex","v","unhex","y","ERR_INVALID_ESCAPE","wholeClassPos","ERR_MISSING_BRACKET","parseEscape","wholeRegexp","stack","free","newRegexp","reuse","popToPseudo","isPseudoOp","maybeConcat","re1","concatRunes","newLiteral","minFoldRune","literal","repeat","lastRepeatPos","ERR_INVALID_REPEAT_OP","ERR_MISSING_REPEAT_ARGUMENT","concat","collapse","alternate","cleanAlt","newsubs","fill","splice","factor","old","lensub","lenout","strlen","strflags","istr","istrlen","iflags","same","removeLeadingString","ifirst","leadingRegexp","isCharClass","removeLeadingRegexp","subMax","subJ","tmp","mergeCharClass","literalRegexp","repeatPos","parsePerlFlags","parseVerticalBar","parseRightParen","parseClass","minMax","parseRepeat","savedPos","lit","cc","parseUnicodeClass","parsePerlClassEscape","swapVerticalBar","ERR_MISSING_PAREN","ERR_INVALID_NAMED_CAPTURE","isValidCaptureName","ERR_DUPLICATE_NAMED_CAPTURE","sawFlag","ERR_INVALID_PERL_OP","VERTICAL_BAR","re3","ERR_INTERNAL_ERROR","parseNamedClass","ERR_INVALID_CHAR_RANGE","runeToString","pair","unicodeTable","tab","fold","parseClassChar","Thread","Queue","sparse","densePcs","denseThreads","size","contains","isEmpty","add","clear","Machine","q0","q1","pool","poolSize","matched","matchcap","ncap","machine","init","initNewCap","resetCap","submatches","alloc","freeQueue","queue","numberOfThread","requiredPoolLength","freeThread","match","cond","EMPTY_ALL","runq","nextq","width","rune1","width1","prefixRune","advance","nextPos","tmpq","nextCond","atEnd","longest","q","d","opos","AtomicReference","initialValue","value","set","newValue","compareAndSet","expect","update","RE2","expr","numSubexp","prefixComplete","compileImpl","PERL","POSIX","mode","parse","compileRegexp","prefixCompl","prefixStr","pooled","head","put","isNew","fromMachine","doExecute","fromRE2","fromUTF16","matchWithGroup","ngroup","machineInput","fromUTF8","groupMatch","matchUTF8","b","repl","replaceAllFunc","replFunc","maxReplaces","lastMatchEnd","searchPos","numReplaces","a","pad","a2","allMatches","deliverFun","prevMatchEnd","accept","findUTF8","findUTF8Index","findIndex","findUTF8Submatch","ret","findUTF8SubmatchIndex","findSubmatch","findSubmatchIndex","findAllUTF8","findAllUTF8Index","findAll","findAllIndex","findAllUTF8Submatch","findAllUTF8SubmatchIndex","findAllSubmatch","findAllSubmatchIndex","RE2JS","quoteMeta","fregex","CASE_INSENSITIVE","DOTALL","MULTILINE","DISABLE_UNICODE_GROUPS","LONGEST_MATCH","re2Flags","re2Input","matcher","flagsInput","limit","emptiesSkipped","other"],"mappings":"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,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,MACR,CAAC,KAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,OAAQ,UAEXP,SAAW,CACT,CAAC,EAAG,GAAI,GACR,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,KACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,KAAM,KACZ,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,KACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,KACjB,CAAC,OAAQ,OAAQ,KACjB,CAAC,OAAQ,OAAQ,KACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,MAAQ,QAAS,IAEpBA,UAAY,CACV,CAAC,EAAG,GAAI,GACR,CAAC,IAAK,IAAK,IAEbA,UAAY,CACV,CAAC,IAAK,KAAM,MACZ,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,MACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,IAEnBA,UAAY,CACV,CAAC,MAAO,MAAO,GACf,CAAC,OAAQ,QAAS,GAClB,CAAC,QAAS,QAAS,IAErBA,UAAY,CAAC,CAAC,MAAO,MAAO,IAC5BA,SAAW,CACT,CAAC,GAAI,GAAI,GACT,CAAC,GAAI,IAAK,GACV,CAAC,IAAK,IAAK,IACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,KAAM,GACZ,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,IAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,MAAO,MACd,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,OAAQ,GAChB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,KACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,MACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IAEnBA,aAAe,CAAC,CAAC,IAAK,IAAK,IAC3BA,UAAY,CACV,CAAC,GAAI,IAAK,GACV,CAAC,IAAK,IAAK,IACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,IACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,KAAM,GACZ,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,IAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,OAAQ,OAAQ,GACjB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AAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,IAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,MACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,M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ACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,KAAM,GACZ,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,O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CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,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KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,KAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IAEnBA,UAAY,CACV,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,MACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,IAEjBA,UAAY,CACV,CAAC,IAAK,IAAK,GACX,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,OAAQ,OAChB,CAAC,OAAQ,OAAQ,MACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,KACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IAEnBA,cAAgB,CACd,CAAC,IAAK,IAAK,IACX,CAAC,KAAM,KAAM,IAEfA,SAAW,CACT,CAAC,GAAI,GAAI,GACT,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,IAAK,IAAK,GACX,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,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b,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GAC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,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,IACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,KACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,KAAM,KAAM,GACb,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC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,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,OACf,CAAC,MAAO,MAAO,KACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,IACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,KAAO,MAAO,GACf,CAAC,MAAO,MAAO,GACf,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,IACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OAAQ,OAAQ,GACjB,CAAC,OA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"}
|