tjs-lang 0.6.13 → 0.6.14
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/CLAUDE.md +40 -17
- package/demo/docs.json +1 -1
- package/dist/index.js +119 -116
- package/dist/index.js.map +8 -8
- package/dist/src/lang/parser-transforms.d.ts +15 -0
- package/dist/src/lang/runtime.d.ts +4 -2
- package/dist/src/types/Type.d.ts +41 -0
- package/dist/src/types/index.d.ts +1 -1
- package/dist/tjs-full.js +119 -116
- package/dist/tjs-full.js.map +8 -8
- package/dist/tjs-vm.js +37 -37
- package/dist/tjs-vm.js.map +4 -4
- package/docs/function-predicate-design.md +180 -0
- package/package.json +1 -1
- package/src/cli/tjs.ts +1 -1
- package/src/lang/emitters/dts.test.ts +58 -0
- package/src/lang/emitters/dts.ts +84 -0
- package/src/lang/emitters/from-ts.ts +47 -5
- package/src/lang/function-predicate.test.ts +188 -0
- package/src/lang/parser-transforms.ts +103 -0
- package/src/lang/parser.ts +2 -0
- package/src/lang/runtime.ts +4 -0
- package/src/lang/typescript-syntax.test.ts +69 -0
- package/src/types/Type.ts +148 -0
- package/src/types/index.ts +5 -0
package/dist/tjs-vm.js.map
CHANGED
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
"// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"</>/<=/>=\", 7),\n bitShift: binop(\"<</>>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nvar regexpCache = Object.create(null);\n\nfunction wordsRegexp(words) {\n return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called when\n // a semicolon is automatically inserted. It will be passed the\n // position of the inserted semicolon as an offset, and if\n // `locations` is enabled, it is given the location as a `{line,\n // column}` object as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n // When this option has an array as value, objects representing the\n // comments are pushed to it.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_CLASS_FIELD_INIT = 512,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT)) { return false }\n if (flags & SCOPE_FUNCTION) { return (flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n return (flags & SCOPE_SUPER) > 0 || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT) ||\n ((flags & SCOPE_FUNCTION) && !(flags & SCOPE_ARROW))) { return true }\n }\n return false\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\npp$8.isUsingKeyword = function(isAwaitUsing, isFor) {\n if (this.options.ecmaVersion < 17 || !this.isContextual(isAwaitUsing ? \"await\" : \"using\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length;\n\n if (lineBreak.test(this.input.slice(this.pos, next))) { return false }\n\n if (isAwaitUsing) {\n var awaitEndPos = next + 5 /* await */, after;\n if (this.input.slice(next, awaitEndPos) !== \"using\" ||\n awaitEndPos === this.input.length ||\n isIdentifierChar(after = this.input.charCodeAt(awaitEndPos)) ||\n (after > 0xd7ff && after < 0xdc00)\n ) { return false }\n\n skipWhiteSpace.lastIndex = awaitEndPos;\n var skipAfterUsing = skipWhiteSpace.exec(this.input);\n if (skipAfterUsing && lineBreak.test(this.input.slice(awaitEndPos, awaitEndPos + skipAfterUsing[0].length))) { return false }\n }\n\n if (isFor) {\n var ofEndPos = next + 2 /* of */, after$1;\n if (this.input.slice(next, ofEndPos) === \"of\") {\n if (ofEndPos === this.input.length ||\n (!isIdentifierChar(after$1 = this.input.charCodeAt(ofEndPos)) && !(after$1 > 0xd7ff && after$1 < 0xdc00))) { return false }\n }\n }\n\n var ch = this.input.charCodeAt(next);\n return isIdentifierStart(ch, true) || ch === 92 // '\\'\n};\n\npp$8.isAwaitUsing = function(isFor) {\n return this.isUsingKeyword(true, isFor)\n};\n\npp$8.isUsing = function(isFor) {\n return this.isUsingKeyword(false, isFor)\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var usingKind = this.isAwaitUsing(false) ? \"await using\" : this.isUsing(false) ? \"using\" : null;\n if (usingKind) {\n if (topLevel && this.options.sourceType === \"script\") {\n this.raise(this.start, \"Using declaration cannot appear in the top level when source type is `script`\");\n }\n if (usingKind === \"await using\") {\n if (!this.canAwait) {\n this.raise(this.start, \"Await using cannot appear outside of async function\");\n }\n this.next();\n }\n this.next();\n this.parseVar(node, false, usingKind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$1, awaitAt)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n\n var usingKind = this.isUsing(true) ? \"using\" : this.isAwaitUsing(true) ? \"await using\" : null;\n if (usingKind) {\n var init$2 = this.startNode();\n this.next();\n if (usingKind === \"await using\") { this.next(); }\n this.parseVar(init$2, true, usingKind);\n this.finishNode(init$2, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$2, awaitAt)\n }\n var containsEsc = this.containsEsc;\n var refDestructuringErrors = new DestructuringErrors;\n var initPos = this.start;\n var init = awaitAt > -1\n ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n : this.parseExpression(true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n if (this.type === types$1._in) { this.unexpected(awaitAt); }\n node.await = true;\n } else if (isForOf && this.options.ecmaVersion >= 8) {\n if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n else if (this.options.ecmaVersion >= 9) { node.await = false; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\n// Helper method to parse for loop after variable initialization\npp$8.parseForAfterInit = function(node, init, awaitAt) {\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && (kind === \"using\" || kind === \"await using\") && this.options.ecmaVersion >= 17 && this.type !== types$1._in && !this.isContextual(\"of\")) {\n this.raise(this.lastTokEnd, (\"Missing initializer in \" + kind + \" declaration\"));\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = kind === \"using\" || kind === \"await using\"\n ? this.parseIdent()\n : this.parseBindingAtom();\n\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n this.enterScope(SCOPE_CLASS_FIELD_INIT | SCOPE_SUPER);\n field.value = this.parseMaybeAssign();\n this.exitScope();\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseWithClause = function() {\n var nodes = [];\n if (!this.eat(types$1._with)) {\n return nodes\n }\n this.expect(types$1.braceL);\n var attributeKeys = {};\n var first = true;\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var attr = this.parseImportAttribute();\n var keyName = attr.key.type === \"Identifier\" ? attr.key.name : attr.key.value;\n if (hasOwn(attributeKeys, keyName))\n { this.raiseRecoverable(attr.key.start, \"Duplicate attribute key '\" + keyName + \"'\"); }\n attributeKeys[keyName] = true;\n nodes.push(attr);\n }\n return nodes\n};\n\npp$8.parseImportAttribute = function() {\n var node = this.startNode();\n node.key = this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n this.expect(types$1.colon);\n if (this.type !== types$1.string) {\n this.unexpected();\n }\n node.value = this.parseExprAtom();\n return this.finishNode(node, \"ImportAttribute\")\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.colon.updateContext = function() {\n if (this.curContext().token === \"function\") { this.context.pop(); }\n this.exprAllowed = true;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isLocalVariableAccess(node) {\n return (\n node.type === \"Identifier\" ||\n node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n )\n}\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n this.next();\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"import\";\n node.meta = this.finishNode(meta, \"Identifier\");\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n if (this.options.ecmaVersion >= 16) {\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n node.options = this.parseMaybeAssign();\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n this.unexpected();\n }\n }\n } else {\n node.options = null;\n }\n } else {\n node.options = null;\n }\n } else {\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110)\n { node.bigint = node.value != null ? node.value.toString() : node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n this.next();\n if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"new\";\n node.meta = this.finishNode(meta, \"Identifier\");\n this.next();\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n var kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n prop.kind = kind;\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n prop.kind = \"init\";\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.kind = \"init\";\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (!(this.currentThisScope().flags & SCOPE_VAR) && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n this.type = types$1.name;\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n if (this.sourceFile) {\n message += \" in \" + this.sourceFile;\n }\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK)) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK) &&\n !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file was generated by \"bin/generate-unicode-script-values.js\". Do not modify manually!\nvar scriptValuesAddedInUnicode = \"Gara Garay Gukh Gurung_Khema Hrkt Katakana_Or_Hiragana Kawi Kirat_Rai Krai Nag_Mundari Nagm Ol_Onal Onao Sunu Sunuwar Todhri Todr Tulu_Tigalari Tutg Unknown Zzzz\";\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" \" + scriptValuesAddedInUnicode;\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\n// Track disjunction structure to determine whether a duplicate\n// capture group name is allowed because it is in a separate branch.\nvar BranchID = function BranchID(parent, base) {\n // Parent disjunction branch\n this.parent = parent;\n // Identifies this set of sibling branches\n this.base = base || this;\n};\n\nBranchID.prototype.separatedFrom = function separatedFrom (alt) {\n // A branch is separate from another branch if they or any of\n // their parents are siblings in a given disjunction\n for (var self = this; self; self = self.parent) {\n for (var other = alt; other; other = other.parent) {\n if (self.base === other.base && self !== other) { return true }\n }\n }\n return false\n};\n\nBranchID.prototype.sibling = function sibling () {\n return new BranchID(this.parent, this.base)\n};\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = Object.create(null);\n this.backReferenceNames = [];\n this.branchID = null;\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\nfunction hasProp(obj) {\n for (var _ in obj) { return true }\n return false\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames = Object.create(null);\n state.backReferenceNames.length = 0;\n state.branchID = null;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (!state.groupNames[name]) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n var trackDisjunction = this.options.ecmaVersion >= 16;\n if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n this.regexp_alternative(state);\n }\n if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */)) {\n if (this.options.ecmaVersion >= 16) {\n var addModifiers = this.regexp_eatModifiers(state);\n var hasHyphen = state.eat(0x2D /* - */);\n if (addModifiers || hasHyphen) {\n for (var i = 0; i < addModifiers.length; i++) {\n var modifier = addModifiers.charAt(i);\n if (addModifiers.indexOf(modifier, i + 1) > -1) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n if (hasHyphen) {\n var removeModifiers = this.regexp_eatModifiers(state);\n if (!addModifiers && !removeModifiers && state.current() === 0x3A /* : */) {\n state.raise(\"Invalid regular expression modifiers\");\n }\n for (var i$1 = 0; i$1 < removeModifiers.length; i$1++) {\n var modifier$1 = removeModifiers.charAt(i$1);\n if (\n removeModifiers.indexOf(modifier$1, i$1 + 1) > -1 ||\n addModifiers.indexOf(modifier$1) > -1\n ) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n }\n }\n }\n if (state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n// RegularExpressionModifiers ::\n// [empty]\n// RegularExpressionModifiers RegularExpressionModifier\npp$1.regexp_eatModifiers = function(state) {\n var modifiers = \"\";\n var ch = 0;\n while ((ch = state.current()) !== -1 && isRegularExpressionModifier(ch)) {\n modifiers += codePointToString(ch);\n state.advance();\n }\n return modifiers\n};\n// RegularExpressionModifier :: one of\n// `i` `m` `s`\nfunction isRegularExpressionModifier(ch) {\n return ch === 0x69 /* i */ || ch === 0x6d /* m */ || ch === 0x73 /* s */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n var trackDisjunction = this.options.ecmaVersion >= 16;\n var known = state.groupNames[state.lastStringValue];\n if (known) {\n if (trackDisjunction) {\n for (var i = 0, list = known; i < list.length; i += 1) {\n var altID = list[i];\n\n if (!altID.separatedFrom(state.branchID))\n { state.raise(\"Duplicate capture group name\"); }\n }\n } else {\n state.raise(\"Duplicate capture group name\");\n }\n }\n if (trackDisjunction) {\n (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n } else {\n state.groupNames[state.lastStringValue] = true;\n }\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// <ZWNJ>\n// <ZWJ>\npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types$1.relational, size)\n};\n\npp.readToken_eq_excl = function(code) { // '=!'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n this.pos += 2;\n return this.finishToken(types$1.arrow)\n }\n return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n};\n\npp.readToken_question = function() { // '?'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(types$1.coalesce, 2)\n }\n }\n return this.finishOp(types$1.question, 1)\n};\n\npp.readToken_numberSign = function() { // '#'\n var ecmaVersion = this.options.ecmaVersion;\n var code = 35; // '#'\n if (ecmaVersion >= 13) {\n ++this.pos;\n code = this.fullCharCodeAtPos();\n if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n return this.finishToken(types$1.privateId, this.readWord1())\n }\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // '.'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types$1.parenL)\n case 41: ++this.pos; return this.finishToken(types$1.parenR)\n case 59: ++this.pos; return this.finishToken(types$1.semi)\n case 44: ++this.pos; return this.finishToken(types$1.comma)\n case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n case 123: ++this.pos; return this.finishToken(types$1.braceL)\n case 125: ++this.pos; return this.finishToken(types$1.braceR)\n case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n case 96: // '`'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n\n case 48: // '0'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // '\"', \"'\"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. '=' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n case 47: // '/'\n return this.readToken_slash()\n\n case 37: case 42: // '%*'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // '|&'\n return this.readToken_pipe_amp(code)\n\n case 94: // '^'\n return this.readToken_caret()\n\n case 43: case 45: // '+-'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // '<>'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // '=!'\n return this.readToken_eq_excl(code)\n\n case 63: // '?'\n return this.readToken_question()\n\n case 126: // '~'\n return this.finishOp(types$1.prefix, 1)\n\n case 35: // '#'\n return this.readToken_numberSign()\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n};\n\npp.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n if (!escaped) {\n if (ch === \"[\") { inClass = true; }\n else if (ch === \"]\" && inClass) { inClass = false; }\n else if (ch === \"/\" && !inClass) { break }\n escaped = ch === \"\\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n // and isn't fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n if (typeof BigInt !== \"function\") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, \"\"))\n}\n\npp.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // '.'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // 'eE'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // '+-'\n if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types$1.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // '{'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n};\n\npp.readString = function(quote) {\n var out = \"\", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else if (ch === 0x2028 || ch === 0x2029) {\n if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n if (this.options.locations) {\n this.curLine++;\n this.lineStart = this.pos;\n }\n } else {\n if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types$1.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n};\n\npp.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n};\n\npp.readTmplToken = function() {\n var out = \"\", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types$1.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types$1.template, out)\n }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += \"\\n\";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case \"\\\\\":\n ++this.pos;\n break\n\n case \"$\":\n if (this.input[this.pos + 1] !== \"{\") { break }\n // fall through\n case \"`\":\n return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n case \"\\r\":\n if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n // fall through\n case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n ++this.curLine;\n this.lineStart = this.pos + 1;\n break\n }\n }\n this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return \"\\n\" // 'n' -> '\\n'\n case 114: return \"\\r\" // 'r' -> '\\r'\n case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n case 117: return codePointToString(this.readCodePoint()) // 'u'\n case 116: return \"\\t\" // 't' -> '\\t'\n case 98: return \"\\b\" // 'b' -> '\\b'\n case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n case 102: return \"\\f\" // 'f' -> '\\f'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n case 10: // ' \\n'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n case 56:\n case 57:\n if (this.strict) {\n this.invalidStringToken(\n this.pos - 1,\n \"Invalid escape sequence\"\n );\n }\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n \"Invalid escape sequence in template string\"\n );\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? \"Octal literal in template string\"\n : \"Octal literal in strict mode\"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n }\n return String.fromCharCode(ch)\n }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n this.containsEsc = false;\n var word = \"\", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // \"\\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n word += codePointToString(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n var word = this.readWord1();\n var type = types$1.name;\n if (this.keywords.test(word)) {\n type = keywords[word];\n }\n return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n// http://marijnhaverbeke.nl/git/acorn\n// https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n\n\nvar version = \"8.15.0\";\n\nParser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types$1,\n keywordTypes: keywords,\n TokContext: TokContext,\n tokContexts: types,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and returns\n// an abstract syntax tree as specified by the [ESTree spec][estree].\n//\n// [estree]: https://github.com/estree/estree\n\nfunction parse(input, options) {\n return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types as tokContexts, types$1 as tokTypes, tokenizer, version };\n",
|
|
9
9
|
"/**\n * Type definitions for the Agent99 JavaScript transpiler\n */\n\nimport type { Node } from 'acorn'\nimport type { SeqNode } from '../builder'\n\n// ============================================================================\n// Type System Types\n// ============================================================================\n\n/** Represents a type extracted from value patterns */\nexport interface TypeDescriptor {\n kind:\n | 'string'\n | 'number'\n | 'integer'\n | 'non-negative-integer'\n | 'boolean'\n | 'null'\n | 'undefined'\n | 'array'\n | 'object'\n | 'union'\n | 'any'\n nullable?: boolean\n /** For arrays: the element type */\n items?: TypeDescriptor\n /** For objects: the shape */\n shape?: Record<string, TypeDescriptor>\n /** For unions: the member types */\n members?: TypeDescriptor[]\n /** For destructured parameters: full parameter descriptors */\n destructuredParams?: Record<string, ParameterDescriptor>\n}\n\n/** Describes a function parameter */\nexport interface ParameterDescriptor {\n name: string\n type: TypeDescriptor\n required: boolean\n default?: any\n /** The example value used to infer the type (for autocomplete) */\n example?: any\n description?: string\n /** Source location for error reporting */\n loc?: { start: number; end: number }\n}\n\n/** Describes a function's complete signature */\nexport interface FunctionSignature {\n name: string\n description?: string\n parameters: Record<string, ParameterDescriptor>\n returns?: TypeDescriptor\n}\n\n// ============================================================================\n// Transpiler Options and Results\n// ============================================================================\n\n/** Options for the transpile function */\nexport interface TranspileOptions {\n /** Include source locations in output AST */\n sourceMaps?: boolean\n /** Atom registry for validation (optional) */\n atoms?: Record<string, { op: string }>\n /** Filename for error messages */\n filename?: string\n /** Whether to use strict type checking */\n strict?: boolean\n}\n\n/** Result of transpilation */\nexport interface TranspileResult {\n /** The Agent99 AST */\n ast: SeqNode\n /** The function signature with types */\n signature: FunctionSignature\n /** Source map (if enabled) */\n sourceMap?: SourceMap\n /** Warnings (non-fatal issues) */\n warnings: TranspileWarning[]\n}\n\n/** A non-fatal warning during transpilation */\nexport interface TranspileWarning {\n message: string\n line: number\n column: number\n source?: string\n}\n\n/** Source map for debugging */\nexport interface SourceMap {\n version: 3\n file: string\n sources: string[]\n mappings: string\n}\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/** Base class for transpiler errors with source location */\nexport class TranspileError extends Error {\n line: number\n column: number\n source?: string\n filename?: string\n\n constructor(\n message: string,\n location: { line: number; column: number },\n source?: string,\n filename?: string\n ) {\n const loc = `${filename || '<source>'}:${location.line}:${location.column}`\n super(`${message} at ${loc}`)\n this.name = 'TranspileError'\n this.line = location.line\n this.column = location.column\n this.source = source\n this.filename = filename\n }\n}\n\n/** Syntax error during parsing */\nexport class SyntaxError extends TranspileError {\n constructor(\n message: string,\n location: { line: number; column: number },\n source?: string,\n filename?: string\n ) {\n super(message, location, source, filename)\n this.name = 'SyntaxError'\n }\n\n /**\n * Format the error with source context for better debugging\n * Shows the problematic line with a caret pointing to the error location\n */\n formatWithContext(contextLines = 2): string {\n if (!this.source) return this.message\n\n const lines = this.source.split('\\n')\n const errorLine = this.line - 1 // 0-indexed\n const startLine = Math.max(0, errorLine - contextLines)\n const endLine = Math.min(lines.length - 1, errorLine + contextLines)\n\n const output: string[] = []\n const lineNumWidth = String(endLine + 1).length\n\n // Add context before\n for (let i = startLine; i <= endLine; i++) {\n const lineNum = String(i + 1).padStart(lineNumWidth)\n const marker = i === errorLine ? '>' : ' '\n output.push(`${marker} ${lineNum} | ${lines[i]}`)\n\n // Add caret pointing to error column\n if (i === errorLine) {\n const caretPadding = ' '.repeat(lineNumWidth + 4 + this.column)\n output.push(`${caretPadding}^ ${this.message.split(' at ')[0]}`)\n }\n }\n\n return output.join('\\n')\n }\n}\n\n/** Type error during transpilation or runtime */\nexport class TypeError extends TranspileError {\n expected?: string\n received?: string\n suggestion?: string\n\n constructor(\n message: string,\n location: { line: number; column: number },\n options?: {\n expected?: string\n received?: string\n suggestion?: string\n source?: string\n filename?: string\n }\n ) {\n super(message, location, options?.source, options?.filename)\n this.name = 'TypeError'\n this.expected = options?.expected\n this.received = options?.received\n this.suggestion = options?.suggestion\n }\n}\n\n// ============================================================================\n// Transform Context\n// ============================================================================\n\n/** Context passed through the transformer */\nexport interface TransformContext {\n /** Current scope depth */\n depth: number\n /** Variables declared in current scope with their types */\n locals: Map<string, TypeDescriptor>\n /** Parent scope's context (for scope chain) */\n parent?: TransformContext\n /** Function parameters */\n parameters: Map<string, ParameterDescriptor>\n /** Registered atom names */\n atoms: Set<string>\n /** Accumulated warnings */\n warnings: TranspileWarning[]\n /** Source code for error messages */\n source: string\n /** Filename */\n filename: string\n /** Options */\n options: TranspileOptions\n}\n\n/** Create a child context for nested scopes */\nexport function createChildContext(parent: TransformContext): TransformContext {\n return {\n depth: parent.depth + 1,\n locals: new Map(),\n parent,\n parameters: parent.parameters,\n atoms: parent.atoms,\n warnings: parent.warnings,\n source: parent.source,\n filename: parent.filename,\n options: parent.options,\n }\n}\n\n/** Look up a variable in the scope chain */\nexport function lookupVariable(\n name: string,\n ctx: TransformContext\n): TypeDescriptor | undefined {\n // Check locals first\n if (ctx.locals.has(name)) {\n return ctx.locals.get(name)\n }\n // Check parameters\n if (ctx.parameters.has(name)) {\n return ctx.parameters.get(name)?.type\n }\n // Check parent scope\n if (ctx.parent) {\n return lookupVariable(name, ctx.parent)\n }\n return undefined\n}\n\n// ============================================================================\n// AST Node Helpers\n// ============================================================================\n\n/** Extract location from an Acorn node */\nexport function getLocation(node: Node): { line: number; column: number } {\n if (node.loc) {\n return { line: node.loc.start.line, column: node.loc.start.column }\n }\n return { line: 1, column: 0 }\n}\n",
|
|
10
10
|
"/**\n * Parser parameter and annotation processing\n *\n * Handles the unified paren expression transformer that converts TJS syntax\n * (colon defaults, return type annotations, safe/unsafe markers) into valid JS.\n */\n\nimport { SyntaxError } from './types'\nimport type {\n TokenizerState,\n StructuralContext,\n ContextFrame,\n TjsModes,\n} from './parser-types'\n\nexport function transformParenExpressions(\n source: string,\n ctx: {\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n }\n): {\n source: string\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n} {\n let result = ''\n let i = 0\n let firstReturnType: string | undefined\n let firstReturnSafety: 'safe' | 'unsafe' | undefined\n\n // State machine for tokenizing\n let state: TokenizerState = 'normal'\n // Stack for template string interpolation depth (each entry is brace depth within that interpolation)\n const templateStack: number[] = []\n\n // Structural context tracking - know if we're in a class body, function body, etc.\n const contextStack: ContextFrame[] = [{ type: 'top-level', braceDepth: 0 }]\n let braceDepth = 0\n\n // Helper to get current structural context (reserved for future use)\n const _currentContext = (): StructuralContext =>\n contextStack[contextStack.length - 1]?.type || 'top-level'\n\n // Helper to check if we're directly in a class body (not nested in a function/block inside it)\n const isInClassBody = (): boolean => {\n const frame = contextStack[contextStack.length - 1]\n return frame?.type === 'class-body' && braceDepth === frame.braceDepth + 1\n }\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = source[i + 1]\n\n // Handle state transitions based on current state\n switch (state) {\n case 'single-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === \"'\") {\n state = 'normal'\n }\n i++\n continue\n\n case 'double-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '\"') {\n state = 'normal'\n }\n i++\n continue\n\n case 'template-string':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '$' && nextChar === '{') {\n // Enter template expression\n result += nextChar\n i += 2\n templateStack.push(1) // Start with brace depth 1\n state = 'normal' // Back to normal parsing inside ${}\n continue\n }\n if (char === '`') {\n state = 'normal'\n }\n i++\n continue\n\n case 'line-comment':\n result += char\n if (char === '\\n') {\n state = 'normal'\n }\n i++\n continue\n\n case 'block-comment':\n result += char\n if (char === '*' && nextChar === '/') {\n result += nextChar\n i += 2\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'regex':\n result += char\n if (char === '\\\\' && i + 1 < source.length) {\n result += nextChar\n i += 2\n continue\n }\n if (char === '[') {\n // Character class - read until ]\n i++\n while (i < source.length && source[i] !== ']') {\n result += source[i]\n if (source[i] === '\\\\' && i + 1 < source.length) {\n result += source[i + 1]\n i += 2\n } else {\n i++\n }\n }\n if (i < source.length) {\n result += source[i]\n i++\n }\n continue\n }\n if (char === '/') {\n // End of regex, consume flags\n i++\n while (i < source.length && /[gimsuy]/.test(source[i])) {\n result += source[i]\n i++\n }\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'normal':\n // Handle template stack - track braces inside template expressions\n if (templateStack.length > 0) {\n if (char === '{') {\n templateStack[templateStack.length - 1]++\n } else if (char === '}') {\n templateStack[templateStack.length - 1]--\n if (templateStack[templateStack.length - 1] === 0) {\n // Exiting template expression, back to template string\n templateStack.pop()\n result += char\n i++\n state = 'template-string'\n continue\n }\n }\n }\n\n // Check for string/comment/regex start\n if (char === \"'\") {\n result += char\n i++\n state = 'single-string'\n continue\n }\n if (char === '\"') {\n result += char\n i++\n state = 'double-string'\n continue\n }\n if (char === '`') {\n result += char\n i++\n state = 'template-string'\n continue\n }\n if (char === '/' && nextChar === '/') {\n result += char + nextChar\n i += 2\n state = 'line-comment'\n continue\n }\n if (char === '/' && nextChar === '*') {\n result += char + nextChar\n i += 2\n state = 'block-comment'\n continue\n }\n\n // Check for regex literal\n if (char === '/') {\n const before = result.trimEnd()\n const lastChar = before[before.length - 1]\n const isRegexContext =\n !lastChar ||\n /[=(!,;:{[&|?+\\-*%<>~^]$/.test(before) ||\n /\\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)\\s*$/.test(\n before\n )\n if (isRegexContext) {\n result += char\n i++\n state = 'regex'\n continue\n }\n }\n\n // Now handle TJS-specific transformations in normal state\n break\n }\n\n // We're in normal state - look for TJS patterns\n\n // Track braces for structural context\n if (char === '{') {\n braceDepth++\n result += char\n i++\n continue\n }\n if (char === '}') {\n braceDepth--\n // Pop context if we're exiting it\n const frame = contextStack[contextStack.length - 1]\n if (frame && braceDepth === frame.braceDepth) {\n contextStack.pop()\n }\n result += char\n i++\n continue\n }\n\n // Look for class declarations: class Name { or class Name extends Base {\n const classMatch = source\n .slice(i)\n .match(/^class\\s+\\w+(?:\\s+extends\\s+\\w+)?\\s*\\{/)\n if (classMatch) {\n // Output everything up to but not including the {\n const classHeader = classMatch[0].slice(0, -1)\n result += classHeader\n i += classHeader.length\n // Push class-body context (will be entered when we see the {)\n contextStack.push({ type: 'class-body', braceDepth })\n continue\n }\n\n // Look for function declarations: function name( or function name (\n const funcMatch = source.slice(i).match(/^function\\s+(\\w+)\\s*\\(/)\n if (funcMatch) {\n const funcName = funcMatch[1]\n const matchLen = funcMatch[0].length\n\n // Check for safety marker right after opening paren: (? or (!\n const afterParen = source[i + matchLen]\n let safetyMarker: '?' | '!' | null = null\n let paramStart = i + matchLen\n\n if (afterParen === '?' || afterParen === '!') {\n safetyMarker = afterParen\n paramStart++\n if (safetyMarker === '!') {\n ctx.unsafeFunctions.add(funcName)\n } else {\n ctx.safeFunctions.add(funcName)\n }\n }\n\n result += `function ${funcName}(`\n i = paramStart\n\n // Find matching ) using balanced counting\n const paramsResult = extractBalancedContent(source, i, '(', ')')\n if (!paramsResult) {\n // Unbalanced - just copy character and continue\n result += source[i]\n i++\n continue\n }\n\n const { content: params, endPos } = paramsResult\n i = endPos\n\n // Process the params (transform : to = for required params, handle nested arrows)\n const processedParams = processParamString(params, ctx, true)\n result += processedParams + ')'\n\n // Check what follows the closing paren: whitespace then -> or -? or -! (return type)\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-?' ||\n returnArrow === '-!'\n ) {\n // Extract return type\n j += 2\n // Skip whitespace after arrow\n while (j < source.length && /\\s/.test(source[j])) j++\n\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n const { type, endPos: typeEnd } = typeResult\n // Record first return type for metadata\n if (firstReturnType === undefined) {\n firstReturnType = type\n if (returnArrow === '-?') {\n firstReturnSafety = 'safe'\n } else if (returnArrow === '-!') {\n firstReturnSafety = 'unsafe'\n }\n }\n i = typeEnd\n }\n }\n continue\n }\n\n // Look for class method syntax: constructor(, methodName(, get name(, set name(\n // These appear inside class bodies and need param transformation\n // Only match if we're actually in a class body (proper context tracking)\n const methodMatch = source\n .slice(i)\n .match(/^(constructor|(?:get|set)\\s+\\w+|async\\s+\\w+|\\w+)\\s*\\(/)\n if (methodMatch && isInClassBody()) {\n // We're actually in a class body - this is a method definition\n const methodPart = methodMatch[1]\n const matchLen = methodMatch[0].length\n const paramStart = i + matchLen\n\n result += methodPart + '('\n i = paramStart\n\n // Find matching )\n const paramsResult = extractBalancedContent(source, i, '(', ')')\n if (!paramsResult) {\n result += source[i]\n i++\n continue\n }\n\n const { content: params, endPos } = paramsResult\n i = endPos\n\n // Process the params (transform : to = for TJS types)\n const processedParams = processParamString(params, ctx, true)\n result += processedParams + ')'\n\n // Check for return type annotation: ) -> type, ) -! type, ) -? type, ): type\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n\n // Handle ->, -!, -? return type (TJS style)\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-!' ||\n returnArrow === '-?'\n ) {\n j += 2\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n i = typeResult.endPos\n }\n }\n // Handle : return type (TS style) - just strip it\n else if (source[j] === ':') {\n j++\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n i = typeResult.endPos\n }\n }\n\n continue\n }\n\n // Look for arrow function params: (params) =>\n // We need to be careful to only transform when followed by =>\n if (source[i] === '(') {\n // First, find the matching ) without consuming any safety marker\n // We'll check for safety marker only if this is actually an arrow function\n const fullParamsResult = extractBalancedContent(source, i + 1, '(', ')')\n if (!fullParamsResult) {\n result += source[i]\n i++\n continue\n }\n\n const fullContent = fullParamsResult.content\n const endPos = fullParamsResult.endPos\n\n // Check what follows: whitespace then => (arrow function) or -> (return type on arrow)\n let j = endPos\n while (j < source.length && /\\s/.test(source[j])) j++\n\n // Check for return type annotation on arrow function: ) -> type =>\n let arrowReturnType: string | undefined\n const returnArrow = source.slice(j, j + 2)\n if (\n returnArrow === '->' ||\n returnArrow === '-?' ||\n returnArrow === '-!'\n ) {\n j += 2\n while (j < source.length && /\\s/.test(source[j])) j++\n const typeResult = extractReturnTypeValue(source, j)\n if (typeResult) {\n arrowReturnType = typeResult.type\n j = typeResult.endPos\n while (j < source.length && /\\s/.test(source[j])) j++\n }\n }\n\n if (source.slice(j, j + 2) === '=>') {\n // This IS an arrow function - now check for safety marker\n let safetyMarker: '?' | '!' | null = null\n let params = fullContent\n\n // Check if content starts with safety marker (? or !) followed by whitespace\n const trimmedContent = fullContent.trimStart()\n if (\n trimmedContent.startsWith('?') &&\n (trimmedContent.length === 1 || /\\s/.test(trimmedContent[1]))\n ) {\n safetyMarker = '?'\n params = trimmedContent.slice(1)\n } else if (\n trimmedContent.startsWith('!') &&\n (trimmedContent.length === 1 || /\\s/.test(trimmedContent[1]))\n ) {\n safetyMarker = '!'\n params = trimmedContent.slice(1)\n }\n\n // Process the params\n const processedParams = processParamString(params, ctx, false)\n // Add safety marker as comment for arrow functions (since we can't track them by name)\n const safetyComment =\n safetyMarker === '?'\n ? '/* safe */ '\n : safetyMarker === '!'\n ? '/* unsafe */ '\n : ''\n result += `(${safetyComment}${processedParams})`\n // Skip the return type annotation (we extracted it but don't emit it)\n i = endPos\n // Skip to just before the =>\n while (i < j && /\\s/.test(source[i])) {\n result += source[i]\n i++\n }\n // If there was a return type, we need to skip past it to =>\n if (arrowReturnType) {\n i = j\n }\n } else {\n // Not an arrow function - recursively transform the content for nested arrows\n // but don't process as param declarations (no colon-to-equals transform)\n const transformed = transformParenExpressions(fullContent, ctx)\n result += `(${transformed.source})`\n i = endPos\n }\n continue\n }\n\n result += source[i]\n i++\n }\n\n return {\n source: result,\n returnType: firstReturnType,\n returnSafety: firstReturnSafety,\n }\n}\n\n/**\n * Extract balanced content between delimiters\n * @param source The source string\n * @param start Position after the opening delimiter\n * @param open Opening delimiter character (for depth counting of nested structures)\n * @param close Closing delimiter character\n * @returns The content between delimiters and position after closing delimiter, or null if unbalanced\n */\nfunction extractBalancedContent(\n source: string,\n start: number,\n open: string,\n close: string\n): { content: string; endPos: number } | null {\n let depth = 1\n let i = start\n let inString = false\n let stringChar = ''\n\n while (i < source.length && depth > 0) {\n const char = source[i]\n\n // Handle string literals\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n } else if (inString && char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n } else if (!inString) {\n if (char === open) depth++\n else if (char === close) depth--\n }\n i++\n }\n\n if (depth !== 0) return null\n\n return {\n content: source.slice(start, i - 1),\n endPos: i,\n }\n}\n\n/**\n * Extract a JS value starting at a position in source.\n * Handles nested objects {}, arrays [], strings, numbers, booleans, null.\n * Uses state machine to properly track nesting.\n */\nexport function extractJSValue(\n source: string,\n start: number\n): { value: string; endPos: number } | null {\n let i = start\n\n // Skip leading whitespace\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i >= source.length) return null\n\n const valueStart = i\n const firstChar = source[i]\n\n // Handle objects and arrays with balanced parsing\n if (firstChar === '{' || firstChar === '[') {\n const close = firstChar === '{' ? '}' : ']'\n const result = extractBalancedContent(source, i + 1, firstChar, close)\n if (!result) return null\n return {\n value: source.slice(valueStart, result.endPos),\n endPos: result.endPos,\n }\n }\n\n // Handle strings\n if (firstChar === \"'\" || firstChar === '\"' || firstChar === '`') {\n i++\n while (i < source.length) {\n if (source[i] === firstChar && source[i - 1] !== '\\\\') {\n i++\n return { value: source.slice(valueStart, i), endPos: i }\n }\n i++\n }\n return null // Unterminated string\n }\n\n // Handle numbers (including negative and decimals)\n if (/[-+\\d]/.test(firstChar)) {\n while (i < source.length && /[\\d.eE+-]/.test(source[i])) i++\n return { value: source.slice(valueStart, i), endPos: i }\n }\n\n // Handle keywords: true, false, null, undefined\n const keywordMatch = source.slice(i).match(/^(true|false|null|undefined)\\b/)\n if (keywordMatch) {\n return {\n value: keywordMatch[1],\n endPos: i + keywordMatch[1].length,\n }\n }\n\n return null\n}\n\n/**\n * Normalize union syntax in type strings\n * Converts single | to || for TJS consistency (needed for JS parsing)\n */\nfunction normalizeUnionSyntax(type: string): string {\n // Replace single | (not ||) with || for proper JS parsing\n // Use negative lookbehind and lookahead to avoid matching ||\n return type.replace(/(?<!\\|)\\|(?!\\|)/g, ' || ')\n}\n\n/**\n * Extract a return type value starting at the given position\n * Handles: simple types ('', 0, null), objects ({ }), arrays ([ ]), unions (| or ||)\n */\nfunction extractReturnTypeValue(\n source: string,\n start: number\n): { type: string; endPos: number } | null {\n let i = start\n let depth = 0\n let inString = false\n let stringChar = ''\n let sawContent = false\n\n // Helper to create result with normalized type\n const makeResult = (endPos: number) => ({\n type: normalizeUnionSyntax(source.slice(start, endPos).trim()),\n endPos,\n })\n\n while (i < source.length) {\n const char = source[i]\n\n // Handle string literals\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n sawContent = true\n i++\n continue\n }\n if (inString) {\n if (char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n i++ // Move past closing quote\n // Just finished a string at depth 0\n if (depth === 0) {\n // Check if next non-ws is function body { or union |\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n if (source[j] === '{') {\n // Check if it's object type or function body\n const afterBrace = source.slice(j + 1).match(/^\\s*(\\w+)\\s*:/)\n if (!afterBrace) {\n // Function body - type ends here\n return makeResult(i)\n }\n }\n if (source[j] !== '|' && source[j] !== '&') {\n // No union - type ends here\n return makeResult(i)\n }\n }\n continue\n }\n i++\n continue\n }\n\n // Track bracket depth\n if (char === '{' || char === '[' || char === '(') {\n depth++\n sawContent = true\n i++\n continue\n }\n if (char === '}' || char === ']' || char === ')') {\n depth--\n if (depth === 0) {\n i++\n // Check for union after closing bracket\n let j = i\n while (j < source.length && /\\s/.test(source[j])) j++\n if (source[j] === '|' || source[j] === '&') {\n continue // More type content\n }\n return makeResult(i)\n }\n i++\n continue\n }\n\n // At depth 0, check for function body\n if (depth === 0 && char === '{') {\n if (sawContent) {\n return makeResult(i)\n }\n // First { - check if object type or function body\n const afterBrace = source.slice(i + 1).match(/^\\s*(\\w+)\\s*:/)\n if (afterBrace) {\n depth++\n sawContent = true\n i++\n continue\n }\n return makeResult(i)\n }\n\n // Handle union/intersection at depth 0\n if (depth === 0 && (char === '|' || char === '&')) {\n i++\n if (i < source.length && source[i] === '|') i++ // Skip second | for ||\n while (i < source.length && /\\s/.test(source[i])) i++\n continue\n }\n\n // Handle numbers (including decimals like 14.5, -3.14)\n if (\n depth === 0 &&\n (/\\d/.test(char) || (char === '-' && /\\d/.test(source[i + 1])))\n ) {\n let j = i\n if (source[j] === '-') j++ // Skip negative sign\n while (j < source.length && /\\d/.test(source[j])) j++\n // Handle decimal part\n if (j < source.length && source[j] === '.' && /\\d/.test(source[j + 1])) {\n j++ // Skip decimal point\n while (j < source.length && /\\d/.test(source[j])) j++\n }\n // Handle exponent (1e10, 1.5e-3)\n if (j < source.length && (source[j] === 'e' || source[j] === 'E')) {\n j++\n if (j < source.length && (source[j] === '+' || source[j] === '-')) j++\n while (j < source.length && /\\d/.test(source[j])) j++\n }\n sawContent = true\n i = j\n // Check what's next\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i < source.length && source[i] === '{') {\n // Function body - type ends here\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n if (source[i] !== '|' && source[i] !== '&') {\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n continue\n }\n\n // Handle identifiers (null, undefined, true, false, type names)\n if (depth === 0 && /[a-zA-Z_]/.test(char)) {\n let j = i\n while (j < source.length && /\\w/.test(source[j])) j++\n sawContent = true\n i = j\n // Check what's next\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i < source.length && source[i] === '{') {\n // Check if function body\n const afterBrace = source.slice(i + 1).match(/^\\s*(\\w+)\\s*:/)\n if (!afterBrace) {\n // Function body - type ends before whitespace\n let typeEnd = j\n while (typeEnd > start && /\\s/.test(source[typeEnd - 1])) typeEnd--\n return {\n type: normalizeUnionSyntax(source.slice(start, typeEnd).trim()),\n endPos: j,\n }\n }\n }\n if (source[i] !== '|' && source[i] !== '&') {\n return {\n type: normalizeUnionSyntax(source.slice(start, j).trim()),\n endPos: j,\n }\n }\n continue\n }\n\n i++\n }\n\n // Reached end of source\n if (sawContent) {\n return makeResult(i)\n }\n return null\n}\n\n/**\n * Split parameter string respecting nested braces/brackets\n */\nfunction splitParameters(params: string): string[] {\n const result: string[] = []\n let current = ''\n let depth = 0\n let inLineComment = false\n let inBlockComment = false\n let i = 0\n\n while (i < params.length) {\n const char = params[i]\n const nextChar = params[i + 1]\n\n // Handle line comments - preserve them in output\n if (!inBlockComment && char === '/' && nextChar === '/') {\n inLineComment = true\n current += '//'\n i += 2\n continue\n }\n\n // Handle block comments - preserve them in output\n if (!inLineComment && char === '/' && nextChar === '*') {\n inBlockComment = true\n current += '/*'\n i += 2\n continue\n }\n\n // End of line comment\n if (inLineComment && char === '\\n') {\n inLineComment = false\n current += char\n i++\n continue\n }\n\n // End of block comment - preserve closing\n if (inBlockComment && char === '*' && nextChar === '/') {\n inBlockComment = false\n current += '*/'\n i += 2\n continue\n }\n\n // Inside comments - preserve the content\n if (inLineComment || inBlockComment) {\n current += char\n i++\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n current += char\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n current += char\n } else if (char === ',' && depth === 0) {\n result.push(current)\n current = ''\n } else {\n current += char\n }\n i++\n }\n\n if (current.trim()) {\n result.push(current)\n }\n\n return result\n}\n\n/**\n * Process a parameter string, transforming : to = for required params\n * and recursively handling nested arrow functions\n */\nfunction processParamString(\n params: string,\n ctx: {\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n },\n trackRequired: boolean\n): string {\n // First recursively process any nested arrow functions\n const withArrows = transformParenExpressions(params, {\n originalSource: params,\n requiredParams: ctx.requiredParams,\n unsafeFunctions: ctx.unsafeFunctions,\n safeFunctions: ctx.safeFunctions,\n }).source\n\n // Now split and process each parameter\n const paramList = splitParameters(withArrows)\n let sawOptional = false\n const seenNames = new Set<string>()\n\n // Helper to check for duplicate names\n const checkDuplicate = (name: string) => {\n if (trackRequired && /^\\w+$/.test(name)) {\n if (seenNames.has(name)) {\n throw new Error(`Duplicate parameter name '${name}'`)\n }\n seenNames.add(name)\n }\n }\n\n const processed = paramList.map((param) => {\n const trimmed = param.trim()\n if (!trimmed) return param\n\n // Handle destructured object parameters: { name: 'Clara', age = 30 }\n // Transform colons to equals inside the braces (recursive)\n // Order doesn't matter for objects, so don't enforce required-before-optional\n // ONLY do this when trackRequired is true - i.e., actual function parameters\n if (trackRequired && trimmed.startsWith('{') && trimmed.endsWith('}')) {\n const inner = trimmed.slice(1, -1)\n const processedInner = processDestructuredObjectParams(inner, ctx)\n return `{ ${processedInner} }`\n }\n\n // Handle destructured array parameters: [first: '', second: 0]\n // ONLY do this when trackRequired is true - i.e., actual function parameters\n if (trackRequired && trimmed.startsWith('[') && trimmed.endsWith(']')) {\n const inner = trimmed.slice(1, -1)\n const processedInner = processDestructuredObjectParams(inner, ctx)\n return `[ ${processedInner} ]`\n }\n\n // Handle rest parameters: ...args: [0] -> ...args (strip type, JS forbids defaults on rest)\n // The type annotation is still captured by extractFunctionTypeInfo for __tjs metadata\n if (trimmed.startsWith('...')) {\n const restColonPos = findTopLevelColon(trimmed)\n if (restColonPos !== -1) {\n const restName = trimmed.slice(0, restColonPos).trim()\n return restName\n }\n return param\n }\n\n // Handle optional param syntax: x?: type -> x = type (not required)\n const optionalMatch = trimmed.match(/^(\\w+)\\s*\\?\\s*:\\s*(.+)$/)\n if (optionalMatch) {\n const [, name, type] = optionalMatch\n checkDuplicate(name)\n sawOptional = true\n // Optional params are NOT tracked as required\n return `${name} = ${type}`\n }\n\n // Check if param already has a default value (x = value)\n if (!hasColonNotEquals(trimmed)) {\n // Has equals sign (default value) - this is optional\n // Extract name from \"name = value\" pattern\n const eqMatch = trimmed.match(/^(\\w+)\\s*=/)\n if (eqMatch) {\n checkDuplicate(eqMatch[1])\n }\n sawOptional = true\n return param\n }\n\n // Handle required param syntax: x: type -> x = type (tracked as required)\n const colonPos = findTopLevelColon(trimmed)\n if (colonPos !== -1) {\n const name = trimmed.slice(0, colonPos).trim()\n const type = trimmed.slice(colonPos + 1).trim()\n\n checkDuplicate(name)\n\n // Required param after optional — warn but allow.\n // TypeScript permits this, and the TS→TJS converter can produce it\n // when earlier params degrade to 'any' (bare name, no : or =).\n if (sawOptional && trackRequired && /^\\w+$/.test(name)) {\n // Allow it — JavaScript handles this fine (caller passes undefined)\n }\n\n if (trackRequired && /^\\w+$/.test(name)) {\n ctx.requiredParams.add(name)\n }\n return `${name} = ${type}`\n }\n\n return param\n })\n\n return processed.join(',')\n}\n\n/**\n * Process destructured object/array parameters\n *\n * In TJS destructuring patterns:\n * - `name: 'Clara'` means required param with example (transforms to `name = 'Clara'`)\n * - `age = 30` means optional param with default (stays as `age = 30`)\n * - Nested objects like `address: { street: '9 High St', zip = '0000' }` are tricky:\n * the inner object is a value (object literal), not a pattern, so we transform it back\n *\n * Key insight: In destructuring, `foo: value` at top level is a required param,\n * but at nested levels within an object value, `:` is normal object literal syntax.\n *\n * Order does NOT matter in objects (unlike positional function params).\n */\nfunction processDestructuredObjectParams(\n inner: string,\n ctx: {\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n }\n): string {\n // Split on commas at the top level (respecting nested braces)\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Check for nested destructured object: name: { ... }\n // The inner { ... } is an object literal value, not a destructuring pattern\n const nestedObjectMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjectMatch) {\n const [, name, objectLiteral] = nestedObjectMatch\n ctx.requiredParams.add(name)\n // Process the inner object as an object literal (transform = to : for values)\n const processedLiteral = processObjectLiteralValue(objectLiteral)\n return `${name} = ${processedLiteral}`\n }\n\n // Check for nested destructured array: name: [ ... ]\n const nestedArrayMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrayMatch) {\n const [, name, arrayLiteral] = nestedArrayMatch\n ctx.requiredParams.add(name)\n // Process the inner array as an array literal\n const processedLiteral = processArrayLiteralValue(arrayLiteral)\n return `${name} = ${processedLiteral}`\n }\n\n // Handle simple colon syntax: name: 'value' -> name = 'value' (required)\n const colonMatch = trimmed.match(/^(\\w+)\\s*:\\s*([\\s\\S]+)$/)\n if (colonMatch) {\n const [, name, value] = colonMatch\n ctx.requiredParams.add(name)\n return `${name} = ${value}`\n }\n\n // Handle equals syntax: name = value (optional, already valid JS)\n // Just preserve it as-is\n return part\n })\n\n return processed.join(', ')\n}\n\n/**\n * Process an object literal value (nested inside destructuring)\n *\n * In object literals, TJS allows `=` for optional values:\n * { street: '9 High St', zip = '0000' }\n *\n * This must become valid JS object literal syntax:\n * { street: '9 High St', zip: '0000' }\n *\n * (The `=` is TJS shorthand indicating the value is optional/has default,\n * but in an object literal context it must use `:`)\n */\nfunction processObjectLiteralValue(literal: string): string {\n // Remove outer braces, process content, restore braces\n const inner = literal.slice(1, -1).trim()\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Handle nested objects: key: { ... } or key = { ... }\n const nestedObjColonMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjColonMatch) {\n const [, key, nested] = nestedObjColonMatch\n return `${key}: ${processObjectLiteralValue(nested)}`\n }\n const nestedObjEqualsMatch = trimmed.match(/^(\\w+)\\s*=\\s*(\\{[\\s\\S]*\\})$/)\n if (nestedObjEqualsMatch) {\n const [, key, nested] = nestedObjEqualsMatch\n return `${key}: ${processObjectLiteralValue(nested)}`\n }\n\n // Handle nested arrays: key: [ ... ] or key = [ ... ]\n const nestedArrColonMatch = trimmed.match(/^(\\w+)\\s*:\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrColonMatch) {\n const [, key, nested] = nestedArrColonMatch\n return `${key}: ${processArrayLiteralValue(nested)}`\n }\n const nestedArrEqualsMatch = trimmed.match(/^(\\w+)\\s*=\\s*(\\[[\\s\\S]*\\])$/)\n if (nestedArrEqualsMatch) {\n const [, key, nested] = nestedArrEqualsMatch\n return `${key}: ${processArrayLiteralValue(nested)}`\n }\n\n // Transform equals to colon for simple values: key = value -> key: value\n const equalsMatch = trimmed.match(/^(\\w+)\\s*=\\s*([\\s\\S]+)$/)\n if (equalsMatch) {\n const [, key, value] = equalsMatch\n return `${key}: ${value}`\n }\n\n // Colon syntax is already valid: key: value\n return part\n })\n\n return `{ ${processed.join(', ')} }`\n}\n\n/**\n * Process an array literal value (nested inside destructuring)\n * Similar to processObjectLiteralValue but for arrays\n */\nfunction processArrayLiteralValue(literal: string): string {\n // Remove outer brackets, process content, restore brackets\n const inner = literal.slice(1, -1).trim()\n const parts = splitParameters(inner)\n\n const processed = parts.map((part) => {\n const trimmed = part.trim()\n if (!trimmed) return part\n\n // Handle nested objects\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n return processObjectLiteralValue(trimmed)\n }\n\n // Handle nested arrays\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return processArrayLiteralValue(trimmed)\n }\n\n // Array elements are just values, no transformation needed\n return part\n })\n\n return `[ ${processed.join(', ')} ]`\n}\n\n/**\n * Check if param has a top-level colon but no top-level equals\n * This distinguishes x: type from x = type and handles nested structures\n */\nfunction hasColonNotEquals(param: string): boolean {\n let depth = 0\n let hasColon = false\n let hasEquals = false\n let inString = false\n let stringChar = ''\n\n for (let i = 0; i < param.length; i++) {\n const char = param[i]\n\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n continue\n }\n if (inString) {\n if (char === stringChar && param[i - 1] !== '\\\\') inString = false\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n } else if (depth === 0) {\n if (char === ':') hasColon = true\n if (char === '=' && param[i + 1] !== '>') hasEquals = true // Ignore =>\n }\n }\n\n return hasColon && !hasEquals\n}\n\n/**\n * Find the position of the first top-level colon in a param\n */\nfunction findTopLevelColon(param: string): number {\n let depth = 0\n let inString = false\n let stringChar = ''\n\n for (let i = 0; i < param.length; i++) {\n const char = param[i]\n\n if (!inString && (char === \"'\" || char === '\"' || char === '`')) {\n inString = true\n stringChar = char\n continue\n }\n if (inString) {\n if (char === stringChar && param[i - 1] !== '\\\\') inString = false\n continue\n }\n\n if (char === '(' || char === '{' || char === '[') {\n depth++\n } else if (char === ')' || char === '}' || char === ']') {\n depth--\n } else if (depth === 0 && char === ':') {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Preprocess source to handle custom syntax extensions\n *\n * Transforms:\n * function foo(x: 'example') { }\n * Into:\n * function foo(x = 'example') { }\n * And tracks that 'x' is a required parameter.\n *\n * Also handles return type annotation:\n * function foo(x: 'example') -> { result: 'string' } { }\n */\n",
|
|
11
|
-
"/**\n * Parser source transforms\n *\n * All source-to-source text transforms used by the preprocess pipeline.\n * These operate on raw source strings before Acorn parsing.\n */\n\nimport { SyntaxError } from './types'\nimport type {\n WasmBlock,\n TestBlock,\n ExtensionInfo,\n PolyVariant,\n TokenizerState,\n} from './parser-types'\nimport { extractJSValue } from './parser-params'\n\nexport function transformTryWithoutCatch(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'try' keyword followed by '{'\n const tryMatch = source.slice(i).match(/^\\btry\\s*\\{/)\n if (tryMatch) {\n // Found 'try {', now find the matching closing brace\n const startBrace = i + tryMatch[0].length - 1\n const bodyStart = startBrace + 1\n let depth = 1\n let j = bodyStart\n\n while (j < source.length && depth > 0) {\n const char = source[j]\n if (char === '{') depth++\n else if (char === '}') depth--\n j++\n }\n\n if (depth !== 0) {\n // Unbalanced braces, let the parser handle the error\n result += source[i]\n i++\n continue\n }\n\n // Check what comes after the closing brace\n const afterTry = source.slice(j).match(/^\\s*(catch|finally)\\b/)\n\n if (afterTry) {\n // Has catch or finally - leave it alone, copy the try block as-is\n result += source.slice(i, j)\n i = j\n } else {\n // No catch or finally - add monadic error handler\n // Returns MonadicError to maintain monadic flow (propagates through function chains)\n const body = source.slice(bodyStart, j - 1)\n result += `try {${body}} catch (__try_err) { return new (__tjs?.MonadicError ?? Error)(__try_err?.message || String(__try_err), 'try', undefined, undefined, __tjs?.getStack?.()) }`\n i = j\n }\n } else {\n result += source[i]\n i++\n }\n }\n\n return result\n}\n\n/**\n * Extract WASM blocks from source and replace with runtime dispatch code\n *\n * Simple form (body used as both WASM source and JS fallback):\n * wasm {\n * for (let i = 0; i < arr.length; i++) { arr[i] *= 2 }\n * }\n *\n * With explicit fallback (when you need different JS code):\n * wasm {\n * // WASM-optimized version\n * } fallback {\n * // Different JS implementation\n * }\n *\n * Output:\n * (globalThis.__tjs_wasm_0\n * ? globalThis.__tjs_wasm_0(captures...)\n * : (() => { body })())\n *\n * Variables are auto-captured from the body.\n */\nexport function extractWasmBlocks(source: string): {\n source: string\n blocks: WasmBlock[]\n} {\n const blocks: WasmBlock[] = []\n let result = ''\n let i = 0\n let blockId = 0\n\n while (i < source.length) {\n // Look for 'wasm {' or 'wasm{' - simple block without params\n const wasmMatch = source.slice(i).match(/^\\bwasm\\s*\\{/)\n if (wasmMatch) {\n const matchStart = i\n\n // Find the body\n const bodyStart = i + wasmMatch[0].length\n let braceDepth = 1\n let j = bodyStart\n\n while (j < source.length && braceDepth > 0) {\n const char = source[j]\n if (char === '{') braceDepth++\n else if (char === '}') braceDepth--\n j++\n }\n\n if (braceDepth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const body = source.slice(bodyStart, j - 1)\n let fallbackBody: string | undefined\n let matchEnd = j\n\n // Check for optional 'fallback {' block\n const fallbackMatch = source.slice(j).match(/^\\s*fallback\\s*\\{/)\n if (fallbackMatch) {\n const fallbackStart = j + fallbackMatch[0].length\n braceDepth = 1\n let k = fallbackStart\n\n while (k < source.length && braceDepth > 0) {\n const char = source[k]\n if (char === '{') braceDepth++\n else if (char === '}') braceDepth--\n k++\n }\n\n if (braceDepth === 0) {\n fallbackBody = source.slice(fallbackStart, k - 1)\n matchEnd = k\n }\n }\n\n // Auto-detect captured variables from the body\n const captureNames = detectCaptures(body)\n\n // Try to find type annotations from enclosing function parameters\n // Look backwards from matchStart to find the function signature\n const captures = captureNames.map((name) => {\n const typeAnnotation = findParameterType(source, matchStart, name)\n return typeAnnotation ? `${name}: ${typeAnnotation}` : name\n })\n\n // Create the block record\n const block: WasmBlock = {\n id: `__tjs_wasm_${blockId}`,\n body,\n fallback: fallbackBody,\n captures,\n start: matchStart,\n end: matchEnd,\n }\n blocks.push(block)\n\n // Generate runtime dispatch code:\n // The fallback is the body itself (or explicit fallback if provided)\n const fallbackCode = fallbackBody ?? body\n // Strip type annotations from captures for runtime args (e.g., \"xs: Float32Array\" -> \"xs\")\n const captureArgNames = captures.map((c) => c.split(':')[0].trim())\n const captureArgs =\n captureArgNames.length > 0 ? captureArgNames.join(', ') : ''\n\n // For WASM: pass captures as arguments\n // For fallback: just run inline (captures are in scope)\n const wasmCall =\n captureArgNames.length > 0\n ? `globalThis.${block.id}(${captureArgs})`\n : `globalThis.${block.id}()`\n\n const dispatch = `(globalThis.${block.id} ? ${wasmCall} : (() => {${fallbackCode}})())`\n\n result += dispatch\n i = matchEnd\n blockId++\n } else {\n result += source[i]\n i++\n }\n }\n\n return { source: result, blocks }\n}\n\n/** Check if an identifier is a WASM SIMD intrinsic (not a captured variable) */\nfunction isWasmIntrinsic(name: string): boolean {\n return name.startsWith('f32x4_') || name.startsWith('v128_')\n}\n\n/**\n * Detect variables captured from enclosing scope\n *\n * Finds identifiers that are:\n * - Used in the body\n * - Not declared within the body (let, const, var, function params)\n *\n * This is a simple heuristic - a full implementation would use proper AST analysis\n */\nfunction detectCaptures(body: string): string[] {\n // Strip comments first to avoid extracting words from comments\n const bodyWithoutComments = body\n .replace(/\\/\\/[^\\n]*/g, '') // line comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '') // block comments\n\n // Collect identifiers that appear as property accesses (after a dot)\n const propertyOnly = new Set<string>()\n const propPattern = /\\.([a-zA-Z_$][a-zA-Z0-9_$]*)\\b/g\n let match\n while ((match = propPattern.exec(bodyWithoutComments)) !== null) {\n propertyOnly.add(match[1])\n }\n\n // Find all identifiers used in the body (not after a dot)\n const identifierPattern = /(?<!\\.)(\\b[a-zA-Z_$][a-zA-Z0-9_$]*)\\b/g\n const allIdentifiers = new Set<string>()\n while ((match = identifierPattern.exec(bodyWithoutComments)) !== null) {\n allIdentifiers.add(match[1])\n }\n\n // Remove identifiers that ONLY appear as property accesses\n for (const prop of propertyOnly) {\n if (!allIdentifiers.has(prop)) continue\n // Check if this identifier is also used standalone (not just as .prop)\n const standalonePattern = new RegExp(`(?<!\\\\.)\\\\b${prop}\\\\b`, 'g')\n const dotPattern = new RegExp(`\\\\.${prop}\\\\b`, 'g')\n const standaloneMatches =\n bodyWithoutComments.match(standalonePattern)?.length || 0\n const dotMatches = bodyWithoutComments.match(dotPattern)?.length || 0\n // If every occurrence is a property access, remove it\n if (standaloneMatches <= dotMatches) {\n allIdentifiers.delete(prop)\n }\n }\n\n // Find identifiers declared in the body\n const declared = new Set<string>()\n\n // let/const/var declarations\n const declPattern = /\\b(?:let|const|var)\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g\n while ((match = declPattern.exec(bodyWithoutComments)) !== null) {\n declared.add(match[1])\n }\n\n // for loop variables: for (let i = ...)\n const forPattern =\n /\\bfor\\s*\\(\\s*(?:let|const|var)\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g\n while ((match = forPattern.exec(bodyWithoutComments)) !== null) {\n declared.add(match[1])\n }\n\n // function declarations and parameters would go here for full impl\n\n // JS keywords and builtins to exclude\n const reserved = new Set([\n 'if',\n 'else',\n 'for',\n 'while',\n 'do',\n 'switch',\n 'case',\n 'break',\n 'continue',\n 'return',\n 'function',\n 'let',\n 'const',\n 'var',\n 'new',\n 'this',\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'typeof',\n 'instanceof',\n 'in',\n 'of',\n 'try',\n 'catch',\n 'finally',\n 'throw',\n 'async',\n 'await',\n 'class',\n 'extends',\n 'super',\n 'import',\n 'export',\n 'default',\n 'from',\n 'as',\n 'static',\n 'get',\n 'set',\n 'yield',\n // Common globals\n 'console',\n 'Math',\n 'Array',\n 'Object',\n 'String',\n 'Number',\n 'Boolean',\n 'Date',\n 'JSON',\n 'Promise',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'Float32Array',\n 'Float64Array',\n 'Int8Array',\n 'Int16Array',\n 'Int32Array',\n 'Uint8Array',\n 'Uint16Array',\n 'Uint32Array',\n 'BigInt64Array',\n 'BigUint64Array',\n 'ArrayBuffer',\n 'DataView',\n 'Error',\n 'TypeError',\n 'RangeError',\n 'length',\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'slice',\n 'splice',\n 'map',\n 'filter',\n 'reduce',\n 'forEach',\n 'find',\n 'findIndex',\n 'indexOf',\n 'includes',\n 'globalThis',\n 'window',\n 'document',\n 'Infinity',\n 'NaN',\n 'isNaN',\n 'isFinite',\n 'parseInt',\n 'parseFloat',\n 'encodeURI',\n 'decodeURI',\n 'eval',\n 'wasmBuffer',\n ])\n\n // Return identifiers that are used but not declared or reserved\n const captures: string[] = []\n for (const id of allIdentifiers) {\n if (!declared.has(id) && !reserved.has(id) && !isWasmIntrinsic(id)) {\n captures.push(id)\n }\n }\n\n return captures.sort()\n}\n\n/**\n * Find the type annotation for a parameter in the enclosing function\n *\n * Looks backwards from wasmBlockStart to find the function signature,\n * then extracts the type annotation for the given parameter name.\n *\n * Supports:\n * - TJS colon syntax: `param: Float32Array`\n * - TypeScript syntax: `param: Float32Array`\n */\nfunction findParameterType(\n source: string,\n wasmBlockStart: number,\n paramName: string\n): string | undefined {\n // Look backwards to find the function signature\n // Find the nearest 'function' keyword before the wasm block\n const beforeBlock = source.slice(0, wasmBlockStart)\n\n // Match function declaration with parameters\n // This regex finds function signatures and captures the parameter list\n const funcPattern = /function\\s+\\w+\\s*\\(([^)]*)\\)\\s*(?:->.*?)?\\s*\\{[^}]*$/\n const match = beforeBlock.match(funcPattern)\n\n if (!match) {\n // Try arrow function or method syntax\n const arrowPattern =\n /(?:const|let|var)?\\s*\\w+\\s*=\\s*(?:async\\s*)?\\(([^)]*)\\)\\s*(?:=>|->)?\\s*\\{[^}]*$/\n const arrowMatch = beforeBlock.match(arrowPattern)\n if (!arrowMatch) return undefined\n return extractTypeFromParams(arrowMatch[1], paramName)\n }\n\n return extractTypeFromParams(match[1], paramName)\n}\n\n/**\n * Extract the type annotation for a specific parameter from a parameter list string\n */\nfunction extractTypeFromParams(\n paramsStr: string,\n paramName: string\n): string | undefined {\n // Split by comma (handling nested structures)\n const params = paramsStr.split(',').map((p) => p.trim())\n\n for (const param of params) {\n // Match patterns like:\n // - `name: Float32Array`\n // - `name: number`\n // - `name = Float32Array` (TJS example syntax)\n const colonMatch = param.match(\n new RegExp(`^${paramName}\\\\s*:\\\\s*([A-Za-z][A-Za-z0-9]*)`)\n )\n if (colonMatch) {\n return colonMatch[1]\n }\n\n // Match TypeScript-style with equals (default value that's a type constructor)\n const equalsMatch = param.match(\n new RegExp(\n `^${paramName}\\\\s*=\\\\s*(Float32Array|Float64Array|Int32Array|Uint8Array|Int8Array|Int16Array|Uint16Array|Uint32Array)`\n )\n )\n if (equalsMatch) {\n return equalsMatch[1]\n }\n }\n\n return undefined\n}\n\n/**\n * Transform Is/IsNot infix operators to function calls\n *\n * Syntax:\n * a Is b -> Is(a, b)\n * a IsNot b -> IsNot(a, b)\n *\n * This enables structural equality with a clean syntax.\n */\nexport function transformIsOperators(source: string): string {\n // Match: (simpleExpr) IsNot (simpleExpr) - must check IsNot first (longer match)\n // simpleExpr = identifier chain with optional [], () OR literals\n const exprPat =\n '([\\\\w][\\\\w.\\\\[\\\\]()]*|null|undefined|true|false|\\\\d+(?:\\\\.\\\\d+)?|\\'[^\\']*\\'|\"[^\"]*\")'\n\n // Transform IsNot first (longer keyword)\n const isNotRegex = new RegExp(exprPat + '\\\\s+IsNot\\\\s+' + exprPat, 'g')\n source = source.replace(isNotRegex, 'IsNot($1, $2)')\n\n // Transform Is\n const isRegex = new RegExp(exprPat + '\\\\s+Is\\\\s+' + exprPat, 'g')\n source = source.replace(isRegex, 'Is($1, $2)')\n\n return source\n}\n\n/**\n * Insert semicolons to prevent ASI footguns (TjsStandard mode)\n *\n * JavaScript's ASI (Automatic Semicolon Insertion) has notorious footguns:\n *\n * foo // Intended: call foo, then IIFE\n * (() => {})() // Actual: foo(...)(...) - calls foo with IIFE as argument!\n *\n * TjsStandard prevents this by treating newlines as statement terminators\n * (like Go, Swift, Kotlin). When a line starts with a problematic character\n * that could continue the previous line, we insert a semicolon.\n *\n * Problematic line starts: ( [ / + - `\n *\n * We only insert when the previous line doesn't already end with:\n * - A semicolon\n * - An opening brace/bracket/paren (multi-line expression)\n * - A comma (array/object literal or params)\n * - An operator that clearly continues (+, -, *, /, =, etc.)\n * - A keyword that expects continuation (return, throw, etc. followed by value)\n */\nexport function insertAsiProtection(source: string): string {\n // Characters that can continue a previous expression (ASI footguns)\n const continuationStarts = /^[\\s]*[([/+\\-`]/\n\n // Characters/patterns that indicate the previous line expects continuation\n // (don't insert semicolon after these)\n const expectsContinuation = /[{([,;:+\\-*/%=&|?<>!~^]\\s*$|^\\s*$/\n\n // Keywords that expect an expression to follow on same or next line\n const continueKeywords =\n /\\b(return|throw|yield|await|case|default|extends|new|typeof|void|delete|in|of|instanceof)\\s*$/\n\n const lines = source.split('\\n')\n const result: string[] = []\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const prevLine = i > 0 ? lines[i - 1] : ''\n\n // Check if this line starts with a problematic character\n if (i > 0 && continuationStarts.test(line)) {\n // Get the previous line without trailing comment\n const prevNoComment = prevLine\n .replace(/\\/\\/.*$/, '')\n .replace(/\\/\\*.*\\*\\/\\s*$/, '')\n\n // Don't insert if prev line clearly expects continuation\n if (\n !expectsContinuation.test(prevNoComment) &&\n !continueKeywords.test(prevNoComment)\n ) {\n // Insert semicolon at start of this line (preserving whitespace)\n const match = line.match(/^(\\s*)/)\n const indent = match ? match[1] : ''\n const rest = line.slice(indent.length)\n result.push(indent + ';' + rest)\n continue\n }\n }\n\n result.push(line)\n }\n\n return result.join('\\n')\n}\n\n/**\n * Transform == and != to Is() and IsNot() calls\n *\n * In TJS normal mode:\n * a == b -> Is(a, b) (structural equality)\n * a != b -> IsNot(a, b) (structural inequality)\n * a === b -> a === b (identity, unchanged)\n *\n * Uses a two-pass algorithm:\n * 1. Find all == and != positions (outside strings/comments/regex)\n * 2. Transform from end to start (so positions remain valid)\n */\nexport function transformEqualityToStructural(source: string): string {\n // First pass: find all == and != positions (outside strings/comments/regex)\n const equalityOps: Array<{ pos: number; op: '==' | '!=' }> = []\n let i = 0\n let state: TokenizerState = 'normal'\n const templateStack: number[] = []\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = source[i + 1]\n\n // Handle state transitions\n switch (state) {\n case 'single-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === \"'\") state = 'normal'\n i++\n continue\n\n case 'double-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '\"') state = 'normal'\n i++\n continue\n\n case 'template-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '$' && nextChar === '{') {\n i += 2\n templateStack.push(1)\n state = 'normal'\n continue\n }\n if (char === '`') state = 'normal'\n i++\n continue\n\n case 'line-comment':\n if (char === '\\n') state = 'normal'\n i++\n continue\n\n case 'block-comment':\n if (char === '*' && nextChar === '/') {\n i += 2\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'regex':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '[') {\n i++\n while (i < source.length && source[i] !== ']') {\n if (source[i] === '\\\\' && i + 1 < source.length) {\n i += 2\n } else {\n i++\n }\n }\n if (i < source.length) i++\n continue\n }\n if (char === '/') {\n i++\n while (i < source.length && /[gimsuy]/.test(source[i])) i++\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'normal':\n // Handle template stack\n if (templateStack.length > 0) {\n if (char === '{') {\n templateStack[templateStack.length - 1]++\n } else if (char === '}') {\n templateStack[templateStack.length - 1]--\n if (templateStack[templateStack.length - 1] === 0) {\n templateStack.pop()\n i++\n state = 'template-string'\n continue\n }\n }\n }\n\n // Check for string/comment/regex start\n if (char === \"'\") {\n i++\n state = 'single-string'\n continue\n }\n if (char === '\"') {\n i++\n state = 'double-string'\n continue\n }\n if (char === '`') {\n i++\n state = 'template-string'\n continue\n }\n if (char === '/' && nextChar === '/') {\n i += 2\n state = 'line-comment'\n continue\n }\n if (char === '/' && nextChar === '*') {\n i += 2\n state = 'block-comment'\n continue\n }\n\n // Check for regex literal (simplified detection)\n if (char === '/') {\n let j = i - 1\n while (j >= 0 && /\\s/.test(source[j])) j--\n const beforeChar = j >= 0 ? source[j] : ''\n const isRegexContext =\n !beforeChar ||\n /[=(!,;:{[&|?+\\-*%<>~^]/.test(beforeChar) ||\n (j >= 5 &&\n /\\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(\n source.slice(Math.max(0, j - 10), j + 1)\n ))\n if (isRegexContext) {\n i++\n state = 'regex'\n continue\n }\n }\n\n // Look for == or != (but not === or !==)\n // For ==: check it's not part of !== (char before is !)\n // For !=: check it's not !== (third char is =)\n if (\n char === '=' &&\n nextChar === '=' &&\n source[i + 2] !== '=' &&\n source[i - 1] !== '!'\n ) {\n equalityOps.push({ pos: i, op: '==' })\n i += 2\n continue\n }\n if (char === '!' && nextChar === '=' && source[i + 2] !== '=') {\n equalityOps.push({ pos: i, op: '!=' })\n i += 2\n continue\n }\n break\n }\n\n i++\n }\n\n // If no equality operators found, return source unchanged\n if (equalityOps.length === 0) {\n return source\n }\n\n // Second pass: transform from end to start (so positions remain valid)\n let result = source\n for (let k = equalityOps.length - 1; k >= 0; k--) {\n const { pos, op } = equalityOps[k]\n const funcName = op === '==' ? 'Is' : 'IsNot'\n\n // Find left operand boundary\n const leftBoundary = findLeftOperandBoundary(result, pos)\n // Find right operand boundary\n const rightBoundary = findRightOperandBoundary(result, pos + 2)\n\n const leftExpr = result.slice(leftBoundary, pos).trim()\n const rightExpr = result.slice(pos + 2, rightBoundary).trim()\n\n if (leftExpr && rightExpr) {\n // Build the replacement\n const before = result.slice(0, leftBoundary)\n const after = result.slice(rightBoundary)\n // Add space after keyword if needed (e.g., return, throw, typeof)\n const needsSpace = /[a-zA-Z0-9_$]$/.test(before)\n const spacer = needsSpace ? ' ' : ''\n result = `${before}${spacer}${funcName}(${leftExpr}, ${rightExpr})${after}`\n }\n }\n\n return result\n}\n\n/**\n * Find the start position of the left operand\n *\n * Scans backwards from the operator position to find where the left expression starts.\n * Respects operator precedence: == has lower precedence than arithmetic operators,\n * so `x % 2 == 0` has left operand `x % 2`.\n */\nfunction findLeftOperandBoundary(source: string, opPos: number): number {\n let i = opPos - 1\n\n // Skip whitespace before operator\n while (i >= 0 && /\\s/.test(source[i])) i--\n if (i < 0) return 0\n\n let depth = 0\n let inString = false\n let stringChar = ''\n\n while (i >= 0) {\n const char = source[i]\n const prevChar = i > 0 ? source[i - 1] : ''\n\n // Handle string literals (scan backwards through them)\n if (inString) {\n if (char === stringChar && prevChar !== '\\\\') {\n inString = false\n }\n i--\n continue\n }\n\n // Check for string end (we're scanning backwards, so end is opening quote)\n if ((char === '\"' || char === \"'\" || char === '`') && prevChar !== '\\\\') {\n inString = true\n stringChar = char\n i--\n continue\n }\n\n // Track depth of parens/brackets (reversed since we're going backwards)\n if (char === ')' || char === ']') {\n depth++\n i--\n continue\n }\n if (char === '(' || char === '[') {\n if (depth > 0) {\n depth--\n i--\n continue\n }\n // Opening paren/bracket at depth 0 - this is a grouping/call paren\n // The expression starts AFTER it, not including it\n return i + 1\n }\n\n // Inside nested expression - keep scanning\n if (depth > 0) {\n i--\n continue\n }\n\n // At depth 0 - check for expression boundaries\n // Statement delimiters\n if (char === ';' || char === '{' || char === '}') {\n return i + 1\n }\n\n // Check for keywords that precede expressions (return, throw, etc.)\n // We need to look backwards for a word boundary and check if it's a keyword\n if (/[a-z]/.test(char)) {\n // Might be end of a keyword - scan backwards to get full word\n const wordEnd = i + 1\n let wordStart = i\n while (wordStart > 0 && /[a-z]/i.test(source[wordStart - 1])) {\n wordStart--\n }\n const word = source.slice(wordStart, wordEnd)\n // Check if preceded by word char (not a keyword then)\n const beforeWord = wordStart > 0 ? source[wordStart - 1] : ''\n if (!/[a-zA-Z0-9_$]/.test(beforeWord)) {\n // These keywords start an expression - stop after them\n if (\n [\n 'return',\n 'throw',\n 'case',\n 'typeof',\n 'void',\n 'delete',\n 'await',\n 'yield',\n 'new',\n ].includes(word)\n ) {\n return wordEnd\n }\n }\n }\n\n // Arrow function - stop before =>\n if (char === '>' && prevChar === '=') {\n return i + 1\n }\n\n // Assignment operator (but not ==, !=, <=, >=)\n if (\n char === '=' &&\n prevChar !== '=' &&\n prevChar !== '!' &&\n prevChar !== '<' &&\n prevChar !== '>'\n ) {\n return i + 1\n }\n\n // Logical operators (lower precedence than ==)\n if (char === '&' && prevChar === '&') {\n return i + 1\n }\n if (char === '|' && prevChar === '|') {\n return i + 1\n }\n\n // Ternary operators\n if (char === '?' || char === ':') {\n return i + 1\n }\n\n // Comma\n if (char === ',') {\n return i + 1\n }\n\n i--\n }\n\n return 0\n}\n\n/**\n * Find the end position of the right operand\n *\n * Scans forward from after the operator to find where the right expression ends.\n */\nfunction findRightOperandBoundary(\n source: string,\n startAfterOp: number\n): number {\n let i = startAfterOp\n\n // Skip whitespace after operator\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i >= source.length) return source.length\n\n let depth = 0\n let inString = false\n let stringChar = ''\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = i + 1 < source.length ? source[i + 1] : ''\n\n // Handle string literals\n if (inString) {\n if (char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n }\n i++\n continue\n }\n\n if (\n (char === '\"' || char === \"'\" || char === '`') &&\n source[i - 1] !== '\\\\'\n ) {\n inString = true\n stringChar = char\n i++\n continue\n }\n\n // Track depth\n if (char === '(' || char === '[' || char === '{') {\n depth++\n i++\n continue\n }\n if (char === ')' || char === ']' || char === '}') {\n if (depth > 0) {\n depth--\n i++\n continue\n }\n // Closing paren at depth 0 - boundary\n return i\n }\n\n // Inside nested - keep scanning\n if (depth > 0) {\n i++\n continue\n }\n\n // At depth 0 - check for expression boundaries\n if (char === ';') {\n return i\n }\n\n // Logical operators - lower precedence than ==\n if (char === '&' && nextChar === '&') {\n return i\n }\n if (char === '|' && nextChar === '|') {\n return i\n }\n\n // Ternary\n if (char === '?') {\n return i\n }\n if (char === ':') {\n return i\n }\n\n // Comma\n if (char === ',') {\n return i\n }\n\n // Another == or != (chained equality - stop before it)\n if (\n (char === '=' || char === '!') &&\n nextChar === '=' &&\n source[i + 2] !== '='\n ) {\n return i\n }\n\n i++\n }\n\n return source.length\n}\n\n/**\n * Transform Type block declarations\n *\n * Syntax forms:\n * Type Foo 'example' -> const Foo = Type('Foo', 'example')\n * Type Foo { example: 'value' } -> const Foo = Type('Foo', 'value')\n * Type Foo 'description' { example: 'value' }\n * -> const Foo = Type('description', 'value')\n * Type Foo 'description' { example: 0, predicate(x) { return x > 0 } }\n * -> const Foo = Type('description', (x) => { ... }, 0)\n *\n * When predicate + example: auto-generate type guard from example\n */\nexport function transformTypeDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Type' keyword followed by identifier\n const typeMatch = source\n .slice(i)\n .match(/^\\bType\\s+([A-Z_][a-zA-Z0-9_]*)\\s*/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n let j = i + typeMatch[0].length\n\n // Check for optional description string\n // Only treat as description if followed by = or {\n let description = typeName\n let descriptionWasExplicit = false\n const descStringMatch = source.slice(j).match(/^(['\"`])([^]*?)\\1\\s*/)\n if (descStringMatch) {\n const afterString = j + descStringMatch[0].length\n const nextChar = source[afterString]\n // Check if this looks like end of statement (not followed by = or {)\n // Note: the \\s* in the regex consumes trailing whitespace including newlines\n const isEndOfStatement =\n nextChar === undefined ||\n afterString >= source.length ||\n (nextChar !== '=' && nextChar !== '{')\n\n if (nextChar === '=' || nextChar === '{') {\n // It's a description followed by = or { block\n description = descStringMatch[2]\n descriptionWasExplicit = true\n j = afterString\n } else if (isEndOfStatement) {\n // Old simple form: Type Name 'value' - value is both example and default\n const value = descStringMatch[0].trim()\n // Preserve trailing whitespace (newlines) that was consumed by the regex\n const trailingWs = descStringMatch[0].slice(value.length)\n result += `const ${typeName} = Type('${typeName}', ${value})${trailingWs}`\n i = afterString\n continue\n }\n }\n\n // Check for = default value\n let defaultValue: string | undefined\n let posAfterDefault = j // Track position right after the default value\n const equalsMatch = source.slice(j).match(/^=\\s*/)\n if (equalsMatch) {\n j += equalsMatch[0].length\n // Parse the default value (handles +number, strings, objects, arrays, etc.)\n const valueMatch = source\n .slice(j)\n .match(\n /^(\\+?\\d+(?:\\.\\d+)?|['\"`][^'\"`]*['\"`]|\\{[^}]*\\}|\\[[^\\]]*\\]|true|false|null)/\n )\n if (valueMatch) {\n defaultValue = valueMatch[0]\n j += valueMatch[0].length\n posAfterDefault = j // Save position before consuming whitespace\n // Skip whitespace after default (only to check for block)\n const wsMatch = source.slice(j).match(/^\\s*/)\n if (wsMatch) j += wsMatch[0].length\n }\n }\n\n // Check for block { ... }\n if (source[j] === '{') {\n // Block form: Type Foo 'desc'? = default? { ... }\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n // Unbalanced - just copy and continue\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse block body for description (old syntax fallback), example, predicate\n const descInsideMatch = blockBody.match(\n /description\\s*:\\s*(['\"`])([^]*?)\\1/\n )\n if (descInsideMatch && !descriptionWasExplicit) {\n description = descInsideMatch[2]\n }\n\n // Extract example value using state machine for nested structures\n let example: string | undefined\n const exampleKeyword = blockBody.match(/example\\s*:\\s*/)\n if (exampleKeyword) {\n const valueStart = exampleKeyword.index! + exampleKeyword[0].length\n const extracted = extractJSValue(blockBody, valueStart)\n if (extracted) {\n example = extracted.value.trim()\n }\n }\n\n const predicateMatch = blockBody.match(\n /predicate\\s*\\(([^)]*)\\)\\s*\\{([^]*)\\}/\n )\n\n // Build Type() call with appropriate arguments\n // Type(description, predicateOrExample, example?, default?)\n if (predicateMatch && example) {\n // Predicate + example\n const params = predicateMatch[1].trim()\n const body = predicateMatch[2].trim()\n const defaultArg = defaultValue ? `, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', (${params}) => { if (!globalThis.__tjs?.validate(${params}, globalThis.__tjs?.infer(${example}))) return false; ${body} }, ${example}${defaultArg})`\n } else if (predicateMatch) {\n // Predicate only\n const params = predicateMatch[1].trim()\n const body = predicateMatch[2].trim()\n const defaultArg = defaultValue ? `, undefined, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', (${params}) => { ${body} }${defaultArg})`\n } else if (example) {\n // Example only (becomes validation schema)\n const defaultArg = defaultValue ? `, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', undefined, ${example}${defaultArg})`\n } else if (defaultValue) {\n // Default only (infer schema from default)\n result += `const ${typeName} = Type('${description}', ${defaultValue})`\n } else {\n // Empty block - error or description-only type\n result += `const ${typeName} = Type('${description}')`\n }\n\n i = blockEnd\n continue\n } else if (defaultValue) {\n // Simple form with default: Type Foo = 'value' or Type Foo 'desc' = 'value'\n result += `const ${typeName} = Type('${description}', ${defaultValue})`\n i = posAfterDefault // Use position before whitespace was consumed\n continue\n } else if (!descStringMatch) {\n // No description, no default, no block - look for old simple form: Type Foo 'value'\n const valueMatch = source\n .slice(j)\n .match(\n /^(['\"`][^]*?['\"`]|\\+?\\d+(?:\\.\\d+)?|true|false|null|\\{[^]*?\\}|\\[[^]*?\\])/\n )\n if (valueMatch) {\n const example = valueMatch[0]\n result += `const ${typeName} = Type('${typeName}', ${example})`\n i = j + valueMatch[0].length\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform Generic block declarations\n *\n * Syntax:\n * Generic Pair<T, U> { description: '...', predicate(obj, T, U) { ... } }\n * Generic Container<T, U = ''> { ... } // U has default\n *\n * Transforms to:\n * const Pair = Generic(['T', 'U'], (obj, checkT, checkU) => { ... }, '...')\n * const Container = Generic(['T', ['U', '']], (obj, checkT, checkU) => { ... }, '...')\n */\nexport function transformGenericDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Generic' keyword followed by identifier and type params\n const genericMatch = source\n .slice(i)\n .match(/^\\bGeneric\\s+([A-Z][a-zA-Z0-9_]*)\\s*<([^>]+)>\\s*\\{/)\n if (genericMatch) {\n const genericName = genericMatch[1]\n const typeParamsStr = genericMatch[2]\n const blockStart = i + genericMatch[0].length - 1\n const bodyStart = blockStart + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n // Unbalanced - just copy and continue\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse type params: T, U = Default\n const typeParams = typeParamsStr.split(',').map((p) => {\n const parts = p\n .trim()\n .split('=')\n .map((s) => s.trim())\n if (parts.length === 2) {\n // 'any' and 'undefined' aren't valid JS values — use null\n const defaultVal =\n parts[1] === 'any' || parts[1] === 'undefined' ? 'null' : parts[1]\n return `['${parts[0]}', ${defaultVal}]`\n }\n return `'${parts[0]}'`\n })\n\n // Parse the block body\n // Strip declaration { ... } block before parsing (it's .d.ts metadata, not runtime)\n let parsedBody = blockBody\n const declIdx = parsedBody.search(/\\bdeclaration\\s*\\{/)\n if (declIdx !== -1) {\n // Find matching closing brace for the declaration block\n const declBraceStart = parsedBody.indexOf('{', declIdx)\n let dDepth = 1\n let dj = declBraceStart + 1\n while (dj < parsedBody.length && dDepth > 0) {\n if (parsedBody[dj] === '{') dDepth++\n else if (parsedBody[dj] === '}') dDepth--\n dj++\n }\n // Remove the declaration block\n parsedBody = parsedBody.slice(0, declIdx) + parsedBody.slice(dj)\n }\n\n const descMatch = parsedBody.match(/description\\s*:\\s*(['\"`])([^]*?)\\1/)\n const predicateMatch = parsedBody.match(\n /predicate\\s*\\(([^)]*)\\)\\s*\\{([^]*)\\}/\n )\n\n const description = descMatch ? descMatch[2] : genericName\n\n if (predicateMatch) {\n const params = predicateMatch[1]\n .trim()\n .split(',')\n .map((s) => s.trim())\n let body = predicateMatch[2].trim()\n\n // First param is the value, rest are type params\n const valueParam = params[0] || 'x'\n const typeParamNames = params.slice(1)\n const typeCheckParams = typeParamNames.map((p) => `check${p}`)\n\n // Replace type param names with check functions in body\n // e.g., T(x[0]) becomes checkT(x[0])\n typeParamNames.forEach((name, idx) => {\n body = body.replace(\n new RegExp(`\\\\b${name}\\\\s*\\\\(`, 'g'),\n `${typeCheckParams[idx]}(`\n )\n })\n\n result += `const ${genericName} = Generic([${typeParams.join(\n ', '\n )}], (${valueParam}, ${typeCheckParams.join(\n ', '\n )}) => { ${body} }, '${description}')`\n } else {\n // No predicate - create a generic that always passes\n result += `const ${genericName} = Generic([${typeParams.join(\n ', '\n )}], () => true, '${description}')`\n }\n\n i = blockEnd\n continue\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform Union declarations\n *\n * Syntax:\n * Union Direction 'cardinal direction' {\n * 'up' | 'down' | 'left' | 'right'\n * }\n *\n * Transforms to:\n * const Direction = Union('cardinal direction', ['up', 'down', 'left', 'right'])\n *\n * Also supports inline form:\n * Union Direction 'cardinal direction' 'up' | 'down' | 'left' | 'right'\n */\nexport function transformUnionDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Union' keyword followed by identifier and description\n const unionMatch = source\n .slice(i)\n .match(/^\\bUnion\\s+([A-Z][a-zA-Z0-9_]*)\\s+(['\"`])([^]*?)\\2\\s*/)\n if (unionMatch) {\n const unionName = unionMatch[1]\n const description = unionMatch[3]\n const j = i + unionMatch[0].length\n\n // Check what follows: block or inline values\n if (source[j] === '{') {\n // Block form: Union Foo 'desc' { ... }\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse values: 'a' | 'b' | 'c' or \"a\" | \"b\" or mixed\n const values = parseUnionValues(blockBody)\n result += `const ${unionName} = Union('${description}', [${values.join(\n ', '\n )}])`\n i = blockEnd\n continue\n } else {\n // Inline form: Union Foo 'desc' 'a' | 'b' | 'c'\n // Find the end of the line or statement\n let lineEnd = source.indexOf('\\n', j)\n if (lineEnd === -1) lineEnd = source.length\n const inlineValues = source.slice(j, lineEnd).trim()\n\n if (inlineValues) {\n const values = parseUnionValues(inlineValues)\n result += `const ${unionName} = Union('${description}', [${values.join(\n ', '\n )}])`\n i = lineEnd\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Parse union values from a string like: 'a' | 'b' | 123 | true\n * Returns array of value literals as strings\n */\nfunction parseUnionValues(input: string): string[] {\n const values: string[] = []\n // Split on | and trim, preserving quoted strings and literals\n const parts = input.split('|').map((p) => p.trim())\n\n for (const part of parts) {\n if (!part) continue\n // Keep the value as-is (already a valid JS literal)\n values.push(part)\n }\n\n return values\n}\n\n/**\n * Transform Enum declarations\n *\n * Syntax:\n * Enum Status 'task status' {\n * Pending\n * Active\n * Done\n * }\n *\n * Enum Color 'CSS color' {\n * Red = 'red'\n * Green = 'green'\n * Blue = 'blue'\n * }\n *\n * Transforms to:\n * const Status = Enum('task status', { Pending: 0, Active: 1, Done: 2 })\n * const Color = Enum('CSS color', { Red: 'red', Green: 'green', Blue: 'blue' })\n */\nexport function transformEnumDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Enum' keyword followed by identifier and description\n const enumMatch = source\n .slice(i)\n .match(/^\\bEnum\\s+([A-Z][a-zA-Z0-9_]*)\\s+(['\"`])([^]*?)\\2\\s*\\{/)\n if (enumMatch) {\n const enumName = enumMatch[1]\n const description = enumMatch[3]\n const blockStart = i + enumMatch[0].length - 1\n const bodyStart = blockStart + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse enum members\n const members = parseEnumMembers(blockBody)\n const membersStr = members\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')\n\n result += `const ${enumName} = Enum('${description}', { ${membersStr} })`\n i = blockEnd\n continue\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Parse enum members from block body\n * Handles: Pending, Active = 5, Done, Name = 'value'\n * Returns array of [key, value] pairs\n */\nfunction parseEnumMembers(input: string): [string, string][] {\n const members: [string, string][] = []\n let currentNumericValue = 0\n\n // Split on newlines and commas, filter empty\n const lines = input\n .split(/[\\n,]/)\n .map((l) => l.trim())\n .filter((l) => l && !l.startsWith('//'))\n\n for (const line of lines) {\n // Match: Name or Name = value\n const match = line.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*(?:=\\s*(.+))?$/)\n if (match) {\n const key = match[1]\n const explicitValue = match[2]?.trim()\n\n if (explicitValue !== undefined) {\n members.push([key, explicitValue])\n // If it's a number, update the counter\n const numVal = Number(explicitValue)\n if (!isNaN(numVal)) {\n currentNumericValue = numVal + 1\n }\n } else {\n // Auto-increment numeric value\n members.push([key, String(currentNumericValue)])\n currentNumericValue++\n }\n }\n }\n\n return members\n}\n\n/**\n * Extension info for a single extend block\n */\n\nexport function transformExtendDeclarations(source: string): {\n source: string\n extensions: Map<string, Set<string>>\n} {\n const extensions = new Map<string, Set<string>>()\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'extend' keyword at statement boundary\n const remaining = source.slice(i)\n const extendMatch = remaining.match(/^(\\s*)extend\\s+([A-Z]\\w*)\\s*\\{/)\n\n if (!extendMatch) {\n // Check if we're at start of line or after semicolon/brace\n const lineStart =\n i === 0 ||\n source[i - 1] === '\\n' ||\n source[i - 1] === ';' ||\n source[i - 1] === '}'\n\n if (lineStart) {\n const afterWS = remaining.match(/^(\\s*)extend\\s+([A-Z]\\w*)\\s*\\{/)\n if (afterWS) {\n // Already handled above, fall through\n }\n }\n result += source[i]\n i++\n continue\n }\n\n const indent = extendMatch[1]\n const typeName = extendMatch[2]\n const blockStart = i + extendMatch[0].length - 1 // position of {\n\n // Find matching closing brace\n const blockEnd = findFunctionBodyEnd(source, blockStart)\n const blockBody = source.slice(blockStart + 1, blockEnd - 1).trim()\n\n // Parse methods from the block body\n // Match: methodName(params) { body } or async methodName(params) { body }\n const methods: { name: string; isAsync: boolean; fullText: string }[] = []\n let j = 0\n const bodySource = source.slice(blockStart + 1, blockEnd - 1)\n\n while (j < bodySource.length) {\n const methodRemaining = bodySource.slice(j)\n const methodMatch = methodRemaining.match(/^(\\s*)(async\\s+)?(\\w+)\\s*\\(/)\n\n if (!methodMatch) {\n j++\n continue\n }\n\n const methodIndent = methodMatch[1]\n const isAsync = !!methodMatch[2]\n const methodName = methodMatch[3]\n\n // Reject arrow functions — they don't bind `this`\n // We'll check after finding the body\n\n // Find the opening paren\n const parenStart = j + methodMatch[0].length - 1\n let parenDepth = 1\n let k = parenStart + 1\n while (k < bodySource.length && parenDepth > 0) {\n if (bodySource[k] === '(') parenDepth++\n if (bodySource[k] === ')') parenDepth--\n k++\n }\n const paramsStr = bodySource.slice(parenStart + 1, k - 1)\n\n // Skip whitespace to find { or =>\n let afterParams = k\n while (\n afterParams < bodySource.length &&\n /\\s/.test(bodySource[afterParams])\n ) {\n afterParams++\n }\n\n // Check for arrow function\n if (\n bodySource[afterParams] === '=' &&\n bodySource[afterParams + 1] === '>'\n ) {\n const loc = locAt(source, blockStart + 1 + j)\n throw new SyntaxError(\n `Arrow functions are not allowed in extend blocks (method '${methodName}' in extend ${typeName}). ` +\n `Use regular function syntax instead, as extension methods need 'this' binding.`,\n loc\n )\n }\n\n if (bodySource[afterParams] !== '{') {\n j++\n continue\n }\n\n // Find matching closing brace for the method body\n const methodBodyEnd = findFunctionBodyEnd(bodySource, afterParams)\n const fullMethodText = bodySource.slice(j, methodBodyEnd).trim()\n\n // Build: methodName: function(params) { body }\n // Transform TJS colon params (name: value) to JS defaults (name = value)\n const transformedParams = paramsStr\n .split(',')\n .map((p) => p.trim())\n .filter((p) => p.length > 0)\n .map((p) => {\n // name: value -> name = value (TJS colon shorthand)\n const colonMatch = p.match(/^(\\w+)\\s*:\\s*(.+)$/)\n if (colonMatch) return `${colonMatch[1]} = ${colonMatch[2]}`\n return p\n })\n .join(', ')\n const asyncPrefix = isAsync ? 'async ' : ''\n const methodBody = bodySource.slice(afterParams + 1, methodBodyEnd - 1)\n methods.push({\n name: methodName,\n isAsync,\n fullText: `${methodName}: ${asyncPrefix}function(${transformedParams}) {${methodBody}}`,\n })\n\n j = methodBodyEnd\n }\n\n // Track extensions\n const isFirstForType = !extensions.has(typeName)\n if (isFirstForType) {\n extensions.set(typeName, new Set())\n }\n const extSet = extensions.get(typeName)!\n for (const m of methods) {\n extSet.add(m.name)\n }\n\n // Generate the __ext object (or merge into existing)\n const methodEntries = methods.map((m) => ` ${m.fullText}`).join(',\\n')\n let replacement: string\n if (isFirstForType) {\n replacement = `${indent}const __ext_${typeName} = {\\n${methodEntries}\\n${indent}}\\n`\n } else {\n // Merge into existing: Object.assign(__ext_TypeName, { ... })\n replacement = `${indent}Object.assign(__ext_${typeName}, {\\n${methodEntries}\\n${indent}})\\n`\n }\n\n // Generate registration calls\n for (const m of methods) {\n replacement += `${indent}if (__tjs?.registerExtension) { __tjs.registerExtension('${typeName}', '${m.name}', __ext_${typeName}.${m.name}) }\\n`\n }\n\n result += replacement\n i = blockEnd\n }\n\n // Append any remaining source\n if (i <= source.length && result.length < source.length) {\n // Already handled character by character\n }\n\n return { source: result, extensions }\n}\n\n/**\n * Transform method calls on known-type receivers to use extension objects.\n *\n * For literals and typed variables where the type is known:\n * 'hello'.capitalize() -> __ext_String.capitalize.call('hello')\n * [1,2,3].last() -> __ext_Array.last.call([1,2,3])\n *\n * This is a best-effort source-level transform. For unknown types,\n * the runtime fallback (resolveExtension) handles it.\n */\nexport function transformExtensionCalls(\n source: string,\n extensions: Map<string, Set<string>>\n): string {\n if (extensions.size === 0) return source\n\n // Build a map of method names to possible type names for quick lookup\n const methodToTypes = new Map<string, string[]>()\n for (const [typeName, methods] of extensions) {\n for (const method of methods) {\n if (!methodToTypes.has(method)) {\n methodToTypes.set(method, [])\n }\n methodToTypes.get(method)!.push(typeName)\n }\n }\n\n let result = source\n\n // Rewrite calls on string literals: 'str'.method(...) or \"str\".method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('String')) continue\n\n // Match string literal followed by .method(\n // Single-quoted strings\n const singleQuotePattern = new RegExp(\n `('(?:[^'\\\\\\\\]|\\\\\\\\.)*')\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(singleQuotePattern, (_, str, meth, closeParen) => {\n return closeParen\n ? `__ext_String.${meth}.call(${str})`\n : `__ext_String.${meth}.call(${str}, `\n })\n\n // Double-quoted strings\n const doubleQuotePattern = new RegExp(\n `(\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\")\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(doubleQuotePattern, (_, str, meth, closeParen) => {\n return closeParen\n ? `__ext_String.${meth}.call(${str})`\n : `__ext_String.${meth}.call(${str}, `\n })\n\n // Template literals (backtick) — simple case only (no nested templates)\n const templatePattern = new RegExp(\n '(`(?:[^`\\\\\\\\]|\\\\\\\\.)*`)\\\\.' + method + '\\\\((\\\\))?',\n 'g'\n )\n result = result.replace(templatePattern, (_, str, closeParen) => {\n return closeParen\n ? `__ext_String.${method}.call(${str})`\n : `__ext_String.${method}.call(${str}, `\n })\n }\n\n // Rewrite calls on array literals: [1,2,3].method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('Array')) continue\n\n // Match array literal [...].method(\n // This is tricky — we need to find balanced brackets\n // Simple approach: find ].method( and walk backward to find matching [\n const methodDot = `].${method}(`\n let searchFrom = 0\n let idx: number\n while ((idx = result.indexOf(methodDot, searchFrom)) !== -1) {\n // Walk backward from idx to find matching [\n let bracketDepth = 1\n let k = idx - 1\n let inStr: string | false = false\n while (k >= 0 && bracketDepth > 0) {\n const ch = result[k]\n if (inStr) {\n if (ch === inStr && (k === 0 || result[k - 1] !== '\\\\')) {\n inStr = false\n }\n } else {\n if (ch === ']') bracketDepth++\n if (ch === '[') bracketDepth--\n if (ch === \"'\" || ch === '\"' || ch === '`') inStr = ch\n }\n k--\n }\n\n if (bracketDepth === 0) {\n const arrayLiteral = result.slice(k + 1, idx + 1)\n const before = result.slice(0, k + 1)\n const after = result.slice(idx + methodDot.length)\n // Check if no-args call: next char is )\n if (after[0] === ')') {\n result = `${before}__ext_Array.${method}.call(${arrayLiteral})${after.slice(\n 1\n )}`\n } else {\n result = `${before}__ext_Array.${method}.call(${arrayLiteral}, ${after}`\n }\n }\n\n searchFrom = idx + 1\n }\n }\n\n // Rewrite calls on number literals: (42).method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('Number')) continue\n\n const numPattern = new RegExp(\n `(\\\\d+(?:\\\\.\\\\d+)?)\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(numPattern, (_, num, meth, closeParen) => {\n return closeParen\n ? `__ext_Number.${meth}.call(${num})`\n : `__ext_Number.${meth}.call(${num}, `\n })\n }\n\n return result\n}\n\n/**\n * Compute {line, column} from a character offset in source.\n */\nexport function locAt(\n source: string,\n pos: number\n): { line: number; column: number } {\n let line = 1\n let column = 0\n for (let i = 0; i < pos && i < source.length; i++) {\n if (source[i] === '\\n') {\n line++\n column = 0\n } else {\n column++\n }\n }\n return { line, column }\n}\n\n/**\n * Info about a single function variant for polymorphic dispatch\n */\n\nfunction typeCheckForDefault(argExpr: string, defaultValue: string): string {\n const dv = defaultValue.trim()\n\n // String literal\n if (/^['\"`]/.test(dv)) return `typeof ${argExpr} === 'string'`\n\n // Boolean\n if (dv === 'true' || dv === 'false') return `typeof ${argExpr} === 'boolean'`\n\n // null\n if (dv === 'null') return `${argExpr} === null`\n\n // undefined\n if (dv === 'undefined') return `${argExpr} === undefined`\n\n // Array literal\n if (dv.startsWith('[')) return `Array.isArray(${argExpr})`\n\n // Object literal\n if (dv.startsWith('{'))\n return `(typeof ${argExpr} === 'object' && ${argExpr} !== null && !Array.isArray(${argExpr}))`\n\n // Non-negative integer: +N\n if (/^\\+\\d+/.test(dv))\n return `(typeof ${argExpr} === 'number' && Number.isInteger(${argExpr}) && ${argExpr} >= 0)`\n\n // Number with decimal → float\n if (/^-?\\d+\\.\\d+/.test(dv)) return `typeof ${argExpr} === 'number'`\n\n // Integer (whole number, possibly negative)\n if (/^-?\\d+$/.test(dv))\n return `(typeof ${argExpr} === 'number' && Number.isInteger(${argExpr}))`\n\n // Fallback: any\n return 'true'\n}\n\n/**\n * Get a type \"signature\" string from a default value for ambiguity checking.\n * Two params with the same signature at the same position are ambiguous.\n */\nfunction typeSignatureForDefault(defaultValue: string): string {\n const dv = defaultValue.trim()\n if (/^['\"`]/.test(dv)) return 'string'\n if (dv === 'true' || dv === 'false') return 'boolean'\n if (dv === 'null') return 'null'\n if (dv === 'undefined') return 'undefined'\n if (dv.startsWith('[')) return 'array'\n if (dv.startsWith('{')) return 'object'\n if (/^\\+\\d+/.test(dv)) return 'non-negative-integer'\n if (/^-?\\d+\\.\\d+/.test(dv)) return 'number'\n if (/^-?\\d+$/.test(dv)) return 'integer'\n return 'any'\n}\n\n/**\n * Parse a parameter string like \"a = 0, b = 'hello', c = { x: 0 }\"\n * into an array of { name, defaultValue, required } objects.\n * Handles nested braces/brackets/parens and template literals.\n */\nfunction parseParamList(\n paramStr: string,\n requiredParams: Set<string>\n): { name: string; defaultValue: string; required: boolean }[] {\n const params: { name: string; defaultValue: string; required: boolean }[] = []\n let depth = 0\n let current = ''\n let inString: string | false = false\n\n for (let i = 0; i < paramStr.length; i++) {\n const ch = paramStr[i]\n\n // Track string state\n if (!inString && (ch === \"'\" || ch === '\"' || ch === '`')) {\n inString = ch\n current += ch\n continue\n }\n if (inString) {\n current += ch\n if (ch === '\\\\') {\n i++\n if (i < paramStr.length) current += paramStr[i]\n continue\n }\n if (ch === inString) inString = false\n continue\n }\n\n // Track nesting\n if (ch === '(' || ch === '[' || ch === '{') {\n depth++\n current += ch\n continue\n }\n if (ch === ')' || ch === ']' || ch === '}') {\n depth--\n current += ch\n continue\n }\n\n // Split on comma at depth 0\n if (ch === ',' && depth === 0) {\n const param = parseOneParam(current.trim(), requiredParams)\n if (param) params.push(param)\n current = ''\n continue\n }\n\n current += ch\n }\n\n // Last param\n const trimmed = current.trim()\n if (trimmed) {\n const param = parseOneParam(trimmed, requiredParams)\n if (param) params.push(param)\n }\n\n return params\n}\n\n/**\n * Parse a single parameter like \"name = 'Alice'\" or \"/* unsafe * / x = 0\"\n */\nfunction parseOneParam(\n paramStr: string,\n requiredParams: Set<string>\n): { name: string; defaultValue: string; required: boolean } | null {\n // Strip leading /* unsafe */ comment\n const str = paramStr.replace(/^\\/\\*\\s*unsafe\\s*\\*\\/\\s*/, '')\n\n // Rest params not supported in polymorphic functions\n if (str.startsWith('...')) return null\n\n // Find = sign (the param has been transformed from : to = by transformParenExpressions)\n const eqIdx = str.indexOf('=')\n if (eqIdx === -1) {\n // No default value — untyped param\n return { name: str.trim(), defaultValue: '', required: true }\n }\n\n const name = str.slice(0, eqIdx).trim()\n const defaultValue = str.slice(eqIdx + 1).trim()\n return { name, defaultValue, required: requiredParams.has(name) }\n}\n\n/**\n * Find the end of a function body (matching closing brace).\n * Handles nested braces, strings, template literals, comments, and regex.\n * Returns the index AFTER the closing brace.\n */\nexport function findFunctionBodyEnd(\n source: string,\n openBracePos: number\n): number {\n let depth = 1\n let i = openBracePos + 1\n let inString: string | false = false\n let inLineComment = false\n let inBlockComment = false\n\n while (i < source.length && depth > 0) {\n const ch = source[i]\n const next = i + 1 < source.length ? source[i + 1] : ''\n\n // Line comment\n if (inLineComment) {\n if (ch === '\\n') inLineComment = false\n i++\n continue\n }\n\n // Block comment\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n inBlockComment = false\n i += 2\n continue\n }\n i++\n continue\n }\n\n // String tracking\n if (inString) {\n if (ch === '\\\\') {\n i += 2\n continue\n }\n if (ch === inString) inString = false\n i++\n continue\n }\n\n // Start comments\n if (ch === '/' && next === '/') {\n inLineComment = true\n i += 2\n continue\n }\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i += 2\n continue\n }\n\n // Start strings\n if (ch === \"'\" || ch === '\"' || ch === '`') {\n inString = ch\n i++\n continue\n }\n\n // Braces\n if (ch === '{') depth++\n if (ch === '}') depth--\n\n i++\n }\n\n return i\n}\n\n/**\n * Transform polymorphic functions: multiple function declarations with the\n * same name are merged into a single dispatcher function.\n *\n * Must be called AFTER transformParenExpressions (so params have = defaults)\n * but BEFORE wrapClassDeclarations.\n *\n * function greet(name = '') { ... }\n * function greet(first = '', last = '') { ... }\n *\n * becomes:\n *\n * function greet$1(name = '') { ... }\n * function greet$2(first = '', last = '') { ... }\n * function greet(...__args) {\n * if (__args.length === 1 && typeof __args[0] === 'string') return greet$1(__args[0])\n * if (__args.length === 2 && ...) return greet$2(__args[0], __args[1])\n * return __tjs.typeError('greet', 'no matching overload', __args)\n * }\n */\nexport function transformPolymorphicFunctions(\n source: string,\n requiredParams: Set<string>\n): { source: string; polymorphicNames: Set<string> } {\n const polymorphicNames = new Set<string>()\n\n // Phase 1: Find all function declarations and group by name\n // Match: optional \"export\" + optional \"async\" + \"function\" + name + \"(\"\n const funcPattern =\n /(?:^|(?<=[\\n;{}]))\\s*(export\\s+)?(async\\s+)?function\\s+(\\w+)\\s*\\(/gm\n const declarations = new Map<string, PolyVariant[]>()\n let match: RegExpExecArray | null\n\n // First pass: collect all function positions and names\n const allMatches: {\n name: string\n fullMatchStart: number\n funcKeywordStart: number\n exported: boolean\n isAsync: boolean\n }[] = []\n\n while ((match = funcPattern.exec(source)) !== null) {\n const exported = !!match[1]\n const isAsync = !!match[2]\n const name = match[3]\n const fullMatchStart = match.index\n // Find where \"function\" keyword starts (skip whitespace and export/async)\n let funcKeywordStart = fullMatchStart\n const prefix = match[0]\n const funcIdx = prefix.indexOf('function')\n if (funcIdx >= 0) funcKeywordStart = fullMatchStart + funcIdx\n\n allMatches.push({\n name,\n fullMatchStart,\n funcKeywordStart,\n exported,\n isAsync,\n })\n }\n\n // Group by name\n for (const m of allMatches) {\n if (!declarations.has(m.name)) {\n declarations.set(m.name, [])\n }\n }\n\n // Count occurrences — only process names that appear more than once\n const nameCounts = new Map<string, number>()\n for (const m of allMatches) {\n nameCounts.set(m.name, (nameCounts.get(m.name) || 0) + 1)\n }\n\n const polyNames = new Set<string>()\n for (const [name, count] of nameCounts) {\n if (count > 1) polyNames.add(name)\n }\n\n if (polyNames.size === 0) {\n return { source, polymorphicNames }\n }\n\n // Phase 2: For each polymorphic function, extract full details\n for (const m of allMatches) {\n if (!polyNames.has(m.name)) continue\n\n // Find the opening paren\n const afterFunc = source.indexOf('(', m.funcKeywordStart)\n if (afterFunc === -1) continue\n\n // Find matching closing paren\n let parenDepth = 1\n let j = afterFunc + 1\n while (j < source.length && parenDepth > 0) {\n if (source[j] === '(') parenDepth++\n if (source[j] === ')') parenDepth--\n j++\n }\n const closeParen = j - 1\n const paramStr = source.slice(afterFunc + 1, closeParen)\n\n // Find the opening brace of the function body\n let bodyStart = j\n while (bodyStart < source.length && source[bodyStart] !== '{') bodyStart++\n if (bodyStart >= source.length) continue\n\n // Find matching closing brace\n const bodyEnd = findFunctionBodyEnd(source, bodyStart)\n\n // Determine the real start (including leading whitespace, export, async)\n let realStart = m.fullMatchStart\n // Include leading whitespace on the same line\n while (realStart > 0 && source[realStart - 1] === ' ') realStart--\n\n const variants = declarations.get(m.name)!\n const params = parseParamList(paramStr, requiredParams)\n\n // Check for rest params\n const hasRestParam = paramStr.includes('...')\n if (hasRestParam) {\n const loc = locAt(source, m.funcKeywordStart)\n throw new SyntaxError(\n `Rest parameters are not supported in polymorphic function '${m.name}'. ` +\n `Use separate function names instead.`,\n loc\n )\n }\n\n variants.push({\n index: variants.length + 1,\n start: realStart,\n end: bodyEnd,\n text: source.slice(realStart, bodyEnd),\n exported: m.exported,\n isAsync: m.isAsync,\n params,\n })\n }\n\n // Phase 3: Validate — check for ambiguous variants\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n\n // Check async consistency\n const asyncCount = variants.filter((v) => v.isAsync).length\n if (asyncCount > 0 && asyncCount < variants.length) {\n const loc = locAt(source, variants[0].start)\n throw new SyntaxError(\n `Polymorphic function '${name}': all variants must be either sync or async, not mixed.`,\n loc\n )\n }\n\n // Check for ambiguous signatures (same types at same positions, differing only in required/optional)\n for (let i = 0; i < variants.length; i++) {\n for (let j = i + 1; j < variants.length; j++) {\n const a = variants[i]\n const b = variants[j]\n\n // Different max arity is fine\n if (a.params.length !== b.params.length) continue\n\n // Same arity — check if types are identical at every position\n let allSame = true\n for (let k = 0; k < a.params.length; k++) {\n const sigA = a.params[k].defaultValue\n ? typeSignatureForDefault(a.params[k].defaultValue)\n : 'any'\n const sigB = b.params[k].defaultValue\n ? typeSignatureForDefault(b.params[k].defaultValue)\n : 'any'\n if (sigA !== sigB) {\n allSame = false\n break\n }\n }\n\n if (allSame) {\n const loc = locAt(source, b.start)\n throw new SyntaxError(\n `Polymorphic function '${name}': variants ${i + 1} and ${\n j + 1\n } have ambiguous signatures ` +\n `(same parameter types at every position). Overloads must differ by arity or parameter types.`,\n loc\n )\n }\n }\n }\n }\n\n // Phase 4: Build the transformed source\n // Sort all variants by position (reverse order for safe replacement)\n const allVariants: { name: string; variant: PolyVariant }[] = []\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n for (const v of variants) {\n allVariants.push({ name, variant: v })\n }\n }\n allVariants.sort((a, b) => b.variant.start - a.variant.start)\n\n // Replace each variant in reverse order (preserves positions)\n let result = source\n for (const { name, variant } of allVariants) {\n const asyncPrefix = variant.isAsync ? 'async ' : ''\n // Rename: function greet(...) -> function greet$1(...)\n // Strip \"export\" from variants — only the dispatcher is exported\n // Use $$ in replacement to produce literal $ (avoid backreference interpretation)\n const renamed = variant.text.replace(\n new RegExp(\n `(?:export\\\\s+)?${\n asyncPrefix ? asyncPrefix.replace(/\\s+$/, '\\\\s+') : ''\n }function\\\\s+${name}\\\\s*\\\\(`\n ),\n `${asyncPrefix}function ${name}$$${variant.index}(`\n )\n result =\n result.slice(0, variant.start) + renamed + result.slice(variant.end)\n }\n\n // Phase 5: Append dispatcher functions\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n polymorphicNames.add(name)\n\n const isAsync = variants[0].isAsync\n const isExported = variants.some((v) => v.exported)\n const asyncPrefix = isAsync ? 'async ' : ''\n const exportPrefix = isExported ? 'export ' : ''\n\n // Sort variants by specificity for dispatch order:\n // 1. More params first (higher arity)\n // 2. More specific types first (integer before number, object before any)\n const sorted = [...variants].sort((a, b) => {\n // Different arity: more params = more specific (checked first within same arity group)\n if (a.params.length !== b.params.length) return 0 // arity groups handled in dispatch\n\n // Same arity: count specificity\n let specA = 0\n let specB = 0\n for (const p of a.params) {\n const sig = p.defaultValue\n ? typeSignatureForDefault(p.defaultValue)\n : 'any'\n if (sig === 'non-negative-integer') specA += 3\n else if (sig === 'integer') specA += 2\n else if (sig !== 'any') specA += 1\n }\n for (const p of b.params) {\n const sig = p.defaultValue\n ? typeSignatureForDefault(p.defaultValue)\n : 'any'\n if (sig === 'non-negative-integer') specB += 3\n else if (sig === 'integer') specB += 2\n else if (sig !== 'any') specB += 1\n }\n return specB - specA // More specific first\n })\n\n // Generate dispatch branches\n const branches: string[] = []\n for (const v of sorted) {\n const checks: string[] = [`__args.length === ${v.params.length}`]\n const args: string[] = []\n\n for (let k = 0; k < v.params.length; k++) {\n const p = v.params[k]\n args.push(`__args[${k}]`)\n if (p.defaultValue) {\n const check = typeCheckForDefault(`__args[${k}]`, p.defaultValue)\n if (check !== 'true') checks.push(check)\n }\n }\n\n branches.push(\n ` if (${checks.join(' && ')}) return ${name}$${v.index}(${args.join(\n ', '\n )})`\n )\n }\n\n const dispatcher = `\n${exportPrefix}${asyncPrefix}function ${name}(...__args) {\n${branches.join('\\n')}\n return __tjs.typeError('${name}', 'no matching overload', __args)\n}\n`\n result += dispatcher\n }\n\n return { source: result, polymorphicNames }\n}\n\n/**\n * Transform bare assignments to const declarations\n *\n * Foo = ... -> const Foo = ...\n *\n * Only transforms assignments at statement level (start of line or after semicolon/brace)\n * where the identifier starts with uppercase (to avoid breaking normal assignments)\n */\nexport function transformBareAssignments(source: string): string {\n // Match: start of line/statement, uppercase identifier, =, not ==\n // Negative lookbehind for const/let/var to avoid double-declaring\n return source.replace(\n /(?<=^|[;\\n{])\\s*([A-Z][a-zA-Z0-9_]*)\\s*=(?!=)/gm,\n (match, name) => {\n // Check if already has const/let/var before it\n return match.replace(name, `const ${name}`)\n }\n )\n}\n\n/**\n * Parse source code into an Acorn AST\n */\n\nexport function extractAndRunTests(\n source: string,\n skipTests = false\n): {\n source: string\n tests: TestBlock[]\n errors: string[]\n} {\n const tests: TestBlock[] = []\n const errors: string[] = []\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'test' keyword followed by optional string then {\n const testMatch = source.slice(i).match(/^\\btest\\s+/)\n if (testMatch) {\n const start = i\n let j = i + testMatch[0].length\n\n // Check for optional description string\n let description: string | undefined\n const descMatch = source.slice(j).match(/^(['\"`])([^]*?)\\1\\s*/)\n if (descMatch) {\n description = descMatch[2]\n j += descMatch[0].length\n }\n\n // Must have opening brace\n if (source[j] === '{') {\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth === 0) {\n const body = source.slice(bodyStart, k - 1).trim()\n const end = k\n\n const line = (source.slice(0, start).match(/\\n/g) || []).length + 1\n tests.push({ description, body, start, end, line })\n\n // Run the test unless skipped\n if (!skipTests) {\n try {\n // Execute test in isolated context\n // The test has access to the Types defined before it\n const testFn = new Function(body)\n testFn()\n } catch (err: any) {\n const desc = description || `test at line ${line}`\n errors.push(\n `Test failed: ${desc} (line ${line})\\n ${err.message || err}`\n )\n }\n }\n\n // Strip the test block from output (replace with whitespace to preserve line numbers)\n const removed = source.slice(start, end)\n const newlines = (removed.match(/\\n/g) || []).length\n result += '\\n'.repeat(newlines)\n i = end\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return { source: result, tests, errors }\n}\n\n/**\n * Wrap class declarations to make them callable without `new`\n *\n * Transforms:\n * class Foo { ... }\n * To:\n * let Foo = class Foo { ... };\n * Foo = new Proxy(Foo, { apply(t, _, a) { return Reflect.construct(t, a) } });\n *\n * This emits standalone JS with no runtime dependencies.\n */\n\n/**\n * Transform polymorphic constructors into static factory functions.\n *\n * When a class has multiple constructor() declarations, the first becomes\n * the real constructor and the rest become factory functions. The wrapClass\n * Proxy routes through a polymorphic dispatcher.\n *\n * class Point {\n * constructor(x: 0.0, y: 0.0) { this.x = x; this.y = y }\n * constructor(coords: { x: 0.0, y: 0.0 }) { this.x = coords.x; this.y = coords.y }\n * }\n *\n * becomes:\n *\n * class Point {\n * constructor(x = 0.0, y = 0.0) { this.x = x; this.y = y }\n * }\n * function Point$ctor$2(coords = { x: 0.0, y: 0.0 }) { return new Point(coords.x, coords.y) }\n * // wrapClass Proxy dispatches through polymorphic factory\n */\nexport function transformPolymorphicConstructors(\n source: string,\n requiredParams: Set<string>\n): { source: string; polyCtorClasses: Set<string> } {\n const polyCtorClasses = new Set<string>()\n\n // Find classes with multiple constructors\n const classRegex = /\\bclass\\s+(\\w+)(\\s+extends\\s+\\w+)?\\s*\\{/g\n let classMatch\n\n // Collect all class info first\n const classInfos: {\n className: string\n extendsClause: string\n bodyStart: number\n bodyEnd: number\n body: string\n }[] = []\n\n while ((classMatch = classRegex.exec(source)) !== null) {\n const className = classMatch[1]\n const extendsClause = classMatch[2]?.trim() || ''\n const bodyStart = classMatch.index + classMatch[0].length - 1\n\n const bodyEnd = findFunctionBodyEnd(source, bodyStart)\n const body = source.slice(bodyStart, bodyEnd)\n\n classInfos.push({ className, extendsClause, bodyStart, bodyEnd, body })\n }\n\n // Process in reverse order to preserve positions\n let result = source\n for (let ci = classInfos.length - 1; ci >= 0; ci--) {\n const { className, extendsClause, bodyStart, bodyEnd, body } =\n classInfos[ci]\n\n // Find all constructor declarations in the class body\n const ctorPattern = /\\bconstructor\\s*\\(/g\n let ctorMatch\n const ctorPositions: number[] = []\n\n while ((ctorMatch = ctorPattern.exec(body)) !== null) {\n ctorPositions.push(ctorMatch.index)\n }\n\n if (ctorPositions.length < 2) continue // Not polymorphic\n\n polyCtorClasses.add(className)\n\n // Parse each constructor\n interface CtorInfo {\n index: number\n paramStr: string\n bodyText: string\n fullStart: number // relative to class body\n fullEnd: number // relative to class body\n }\n const ctors: CtorInfo[] = []\n\n for (let i = 0; i < ctorPositions.length; i++) {\n const pos = ctorPositions[i]\n\n // Find opening paren\n const parenStart = body.indexOf('(', pos)\n let parenDepth = 1\n let j = parenStart + 1\n while (j < body.length && parenDepth > 0) {\n if (body[j] === '(') parenDepth++\n if (body[j] === ')') parenDepth--\n j++\n }\n const paramStr = body.slice(parenStart + 1, j - 1)\n\n // Find opening brace\n let braceStart = j\n while (braceStart < body.length && body[braceStart] !== '{') braceStart++\n\n // Find matching closing brace\n const ctorBodyEnd = findFunctionBodyEnd(body, braceStart)\n const bodyText = body.slice(braceStart + 1, ctorBodyEnd - 1)\n\n ctors.push({\n index: i + 1,\n paramStr,\n bodyText,\n fullStart: pos,\n fullEnd: ctorBodyEnd,\n })\n }\n\n // Keep the first constructor in the class, remove the rest\n // Build new class body with only the first constructor\n let newBody = body.slice(0, ctors[0].fullEnd)\n // Skip subsequent constructors\n const afterLastCtor = ctors[ctors.length - 1].fullEnd\n newBody += body.slice(afterLastCtor)\n\n // But we need to remove just the extra constructors, keeping other methods\n // Better approach: remove constructors 2..N from the body\n let cleanBody = body\n for (let i = ctors.length - 1; i >= 1; i--) {\n const ctor = ctors[i]\n // Find start of this constructor (including leading whitespace)\n let start = ctor.fullStart\n while (start > 0 && cleanBody[start - 1] === ' ') start--\n if (start > 0 && cleanBody[start - 1] === '\\n') start--\n\n cleanBody = cleanBody.slice(0, start) + cleanBody.slice(ctor.fullEnd)\n }\n\n // Generate factory functions for constructors 2..N\n let factories = ''\n for (let i = 1; i < ctors.length; i++) {\n const ctor = ctors[i]\n // Parse params for type checking in dispatcher\n const params = parseParamList(ctor.paramStr, requiredParams)\n const hasRest = ctor.paramStr.includes('...')\n if (hasRest) {\n const loc = locAt(source, bodyStart + ctor.fullStart)\n throw new SyntaxError(\n `Rest parameters are not supported in polymorphic constructors for '${className}'.`,\n loc\n )\n }\n\n // The factory function creates the object manually\n // For base classes: use Object.create + call constructor body\n // Simpler: just use new ClassName() with the first ctor's params mapped\n // Actually simplest: the factory body IS the constructor body but with\n // `this.x = ...` replaced by building an object... No, that doesn't work\n // for inheritance.\n //\n // Best approach: factory creates via new, then applies the extra ctor body\n factories += `\\nfunction ${className}$ctor$${ctor.index}(${ctor.paramStr}) {`\n factories += `\\n const __obj = Object.create(${className}.prototype)`\n if (extendsClause) {\n // For derived classes, we can't easily call super() outside constructor\n // Just call the constructor body and hope it sets fields\n // Actually — the factory can just do: new ClassName(defaultArgs) then overwrite\n // Let's use a simpler approach: the factory just does new + field assignment\n }\n factories += `\\n ;(function() {${ctor.bodyText}}).call(__obj)`\n factories += `\\n return __obj`\n factories += `\\n}\\n`\n }\n\n // Generate the polymorphic dispatcher for the Proxy's apply trap\n // First constructor variant uses Reflect.construct, rest use factories\n const dispatchBranches: string[] = []\n\n for (let i = 0; i < ctors.length; i++) {\n const ctor = ctors[i]\n const params = parseParamList(ctor.paramStr, requiredParams)\n const checks: string[] = [`a.length === ${params.length}`]\n\n for (let k = 0; k < params.length; k++) {\n const p = params[k]\n if (p.defaultValue) {\n const check = typeCheckForDefault(`a[${k}]`, p.defaultValue)\n if (check !== 'true') checks.push(check)\n }\n }\n\n if (i === 0) {\n // First constructor — use Reflect.construct\n dispatchBranches.push(\n ` if (${checks.join(' && ')}) return Reflect.construct(t, a)`\n )\n } else {\n // Factory function\n const args = params.map((_, k) => `a[${k}]`).join(', ')\n dispatchBranches.push(\n ` if (${checks.join(' && ')}) return ${className}$ctor$${\n ctor.index\n }(${args})`\n )\n }\n }\n\n // Generate the dispatcher function\n factories += `\\nfunction ${className}$dispatch(t, a) {\\n`\n factories += dispatchBranches.join('\\n') + '\\n'\n factories += ` return __tjs.typeError('${className}', 'no matching constructor', a)\\n`\n factories += `}\\n`\n\n // Replace the class body and append factories\n result = result.slice(0, bodyStart) + cleanBody + result.slice(bodyEnd)\n\n // Insert factories after the class\n const insertPos = bodyStart + cleanBody.length\n result = result.slice(0, insertPos) + factories + result.slice(insertPos)\n }\n\n return { source: result, polyCtorClasses }\n}\n\nexport function wrapClassDeclarations(\n source: string,\n polyCtorClasses: Set<string> = new Set()\n): string {\n // Match class declarations: class Name { or class Name extends Base {\n // Capture the class name and find the full class body\n const classRegex = /\\bclass\\s+(\\w+)(\\s+extends\\s+\\w+)?\\s*\\{/g\n let result = ''\n let lastIndex = 0\n let match\n\n while ((match = classRegex.exec(source)) !== null) {\n const className = match[1]\n const extendsClause = match[2] || ''\n const classStart = match.index\n const bodyStart = classStart + match[0].length - 1 // position of {\n\n // Find matching closing brace\n let depth = 1\n let i = bodyStart + 1\n while (i < source.length && depth > 0) {\n const char = source[i]\n if (char === '{') depth++\n else if (char === '}') depth--\n i++\n }\n\n if (depth === 0) {\n const classEnd = i\n const classBody = source.slice(bodyStart, classEnd)\n\n // Emit standalone JS - no runtime dependency\n result += source.slice(lastIndex, classStart)\n result += `let ${className} = class ${className}${extendsClause} ${classBody}; `\n\n if (polyCtorClasses.has(className)) {\n // Polymorphic constructor: use dispatcher function for apply trap\n result += `${className} = new Proxy(${className}, { apply(t, _, a) { return ${className}$dispatch(t, a) }, construct(t, a) { return ${className}$dispatch(t, a) } });`\n } else {\n result += `${className} = new Proxy(${className}, { apply(t, _, a) { return Reflect.construct(t, a) } });`\n }\n lastIndex = classEnd\n }\n }\n\n result += source.slice(lastIndex)\n return result\n}\n\n/**\n * Validate that Date is not used (TjsDate mode)\n * Throws an error if Date constructor or static methods are found\n */\nexport function validateNoDate(source: string): string {\n // Match Date usage: new Date, Date.now, Date.parse, Date.UTC\n const datePatterns = [\n {\n pattern: /\\bnew\\s+Date\\b/,\n message:\n 'new Date() is not allowed in TjsDate mode. Use Timestamp.now() or Timestamp.from()',\n },\n {\n pattern: /\\bDate\\.now\\b/,\n message: 'Date.now() is not allowed in TjsDate mode. Use Timestamp.now()',\n },\n {\n pattern: /\\bDate\\.parse\\b/,\n message:\n 'Date.parse() is not allowed in TjsDate mode. Use Timestamp.parse()',\n },\n {\n pattern: /\\bDate\\.UTC\\b/,\n message:\n 'Date.UTC() is not allowed in TjsDate mode. Use Timestamp.from()',\n },\n ]\n\n for (const { pattern, message } of datePatterns) {\n if (pattern.test(source)) {\n throw new Error(message)\n }\n }\n\n return source\n}\n\n/**\n * Validate that eval and Function constructor are not used (TjsNoeval mode)\n * Note: Eval and SafeFunction from TJS runtime are allowed\n */\nexport function validateNoEval(source: string): string {\n // Match eval() calls - but not Eval() (capital E)\n // Use negative lookbehind to avoid matching inside words\n const evalPattern = /(?<![A-Za-z_$])\\beval\\s*\\(/\n if (evalPattern.test(source)) {\n throw new Error(\n 'eval() is not allowed in TjsNoeval mode. Use Eval() from TJS runtime for safe evaluation.'\n )\n }\n\n // Match new Function() - but not SafeFunction or other *Function names\n const functionPattern = /\\bnew\\s+Function\\s*\\(/\n if (functionPattern.test(source)) {\n throw new Error(\n 'new Function() is not allowed in TjsNoeval mode. Use SafeFunction() from TJS runtime.'\n )\n }\n\n return source\n}\n",
|
|
12
|
-
"/**\n * TJS Parser — Orchestration Layer\n *\n * This module contains the main entry points: preprocess() and parse().\n * Transform functions are in parser-transforms.ts, param processing in parser-params.ts.\n */\n\nimport * as acorn from 'acorn'\nimport type { Program, FunctionDeclaration } from 'acorn'\nimport { SyntaxError } from './types'\n\n// Re-export types so external callers don't need to change imports\nexport type {\n ParseOptions,\n WasmBlock,\n TestBlock,\n PreprocessOptions,\n TjsModes,\n} from './parser-types'\n\nimport type {\n ParseOptions,\n WasmBlock,\n TestBlock,\n PreprocessOptions,\n TjsModes,\n} from './parser-types'\n\nimport { transformParenExpressions } from './parser-params'\n\nimport {\n transformTryWithoutCatch,\n extractWasmBlocks,\n transformIsOperators,\n insertAsiProtection,\n transformEqualityToStructural,\n transformTypeDeclarations,\n transformGenericDeclarations,\n transformUnionDeclarations,\n transformEnumDeclarations,\n transformExtendDeclarations,\n transformPolymorphicFunctions,\n transformPolymorphicConstructors,\n wrapClassDeclarations,\n transformBareAssignments,\n extractAndRunTests,\n validateNoDate,\n validateNoEval,\n transformExtensionCalls,\n} from './parser-transforms'\n\n// Re-export transformExtensionCalls for js.ts\nexport { transformExtensionCalls } from './parser-transforms'\n\nexport function preprocess(\n source: string,\n options: PreprocessOptions = {}\n): {\n source: string\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n moduleSafety?: 'none' | 'inputs' | 'all'\n tjsModes: TjsModes\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n wasmBlocks: WasmBlock[]\n tests: TestBlock[]\n testErrors: string[]\n polymorphicNames: Set<string>\n extensions: Map<string, Set<string>>\n} {\n const originalSource = source\n let moduleSafety: 'none' | 'inputs' | 'all' | undefined\n const requiredParams = new Set<string>()\n const unsafeFunctions = new Set<string>()\n const safeFunctions = new Set<string>()\n\n // TJS modes - all default to false (JS-compatible by default)\n const tjsModes: TjsModes = {\n tjsEquals: false,\n tjsClass: false,\n tjsDate: false,\n tjsNoeval: false,\n tjsStandard: false,\n tjsSafeEval: false,\n }\n\n // Handle module-level safety directive: safety none | safety inputs | safety all\n // Must be at the start of the file (possibly after comments/whitespace)\n const safetyMatch = source.match(\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*safety\\s+(none|inputs|all)\\b/\n )\n if (safetyMatch) {\n moduleSafety = safetyMatch[2] as 'none' | 'inputs' | 'all'\n // Remove the directive from source\n source = source.replace(\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*safety\\s+(none|inputs|all)\\s*/,\n '$1'\n )\n }\n\n // Handle TJS mode directives (can appear in any order after safety)\n // TjsStrict enables all TJS modes\n // Individual modes: TjsEquals, TjsClass, TjsDate, TjsNoeval, TjsStandard, TjsSafeEval\n const directivePattern =\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*(TjsStrict|TjsEquals|TjsClass|TjsDate|TjsNoeval|TjsStandard|TjsSafeEval)\\b/\n\n let match\n while ((match = source.match(directivePattern))) {\n const directive = match[2]\n\n if (directive === 'TjsStrict') {\n // Enable all TJS modes\n tjsModes.tjsEquals = true\n tjsModes.tjsClass = true\n tjsModes.tjsDate = true\n tjsModes.tjsNoeval = true\n tjsModes.tjsStandard = true\n } else if (directive === 'TjsEquals') {\n tjsModes.tjsEquals = true\n } else if (directive === 'TjsClass') {\n tjsModes.tjsClass = true\n } else if (directive === 'TjsDate') {\n tjsModes.tjsDate = true\n } else if (directive === 'TjsNoeval') {\n tjsModes.tjsNoeval = true\n } else if (directive === 'TjsStandard') {\n tjsModes.tjsStandard = true\n } else if (directive === 'TjsSafeEval') {\n tjsModes.tjsSafeEval = true\n }\n\n // Remove the directive from source\n source = source.replace(\n new RegExp(\n `^(\\\\s*(?:\\\\/\\\\/[^\\\\n]*\\\\n|\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/\\\\s*)*)\\\\s*${directive}\\\\s*`\n ),\n '$1'\n )\n }\n\n // TjsStandard mode: insert semicolons to prevent ASI footguns\n // Must happen early before other transformations modify line structure\n if (tjsModes.tjsStandard) {\n source = insertAsiProtection(source)\n }\n\n // Transform Is/IsNot infix operators to function calls\n // a Is b -> Is(a, b)\n // a IsNot b -> IsNot(a, b)\n // These are always available for explicit structural equality\n source = transformIsOperators(source)\n\n // Transform == and != to structural equality (Is/IsNot)\n // Only when TjsEquals mode is enabled and not for VM targets\n // VM targets already handle == correctly at runtime\n if (tjsModes.tjsEquals && !options.vmTarget) {\n source = transformEqualityToStructural(source)\n }\n\n // Transform Type, Generic, Union, and Enum declarations\n // Type Foo { ... } -> const Foo = Type(...)\n // Generic Bar<T, U> { ... } -> const Bar = Generic(...)\n // Union Dir 'up' | 'down' -> const Dir = Union(...)\n // Enum Status { Pending, Active, Done } -> const Status = Enum(...)\n source = transformTypeDeclarations(source)\n source = transformGenericDeclarations(source)\n source = transformUnionDeclarations(source)\n source = transformEnumDeclarations(source)\n\n // Transform bare assignments to const declarations\n // Foo = ... -> const Foo = ...\n source = transformBareAssignments(source)\n\n // Unified paren expression transformer\n // Handles: function params, arrow params, return types, safe/unsafe markers\n // Model: open paren can be ( or (? or (!, close can be ) or )-> or )-? or )-!\n const {\n source: transformedSource,\n returnType,\n returnSafety,\n } = transformParenExpressions(source, {\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n })\n source = transformedSource\n\n // NOTE: unsafe {} blocks removed - they provided no performance benefit because\n // the wrapper decision is made at transpile time. Use (!) on functions instead.\n // See ideas parking lot for potential future approaches.\n\n // Transform extend blocks: extend TypeName { methods } -> __ext_TypeName object\n // Must happen after paren expressions so method params are already transformed\n const extResult = transformExtendDeclarations(source)\n source = extResult.source\n\n // Handle try-without-catch: try { ... } (no catch/finally) -> monadic error handling\n // This is the idiomatic TJS way to convert exceptions to AgentError\n source = transformTryWithoutCatch(source)\n\n // Transform polymorphic functions: multiple declarations with same name -> dispatcher\n // Must happen after param transformation but before class wrapping and test extraction\n const polyResult = transformPolymorphicFunctions(source, requiredParams)\n source = polyResult.source\n\n // Extract WASM blocks: wasm(args) { ... } fallback { ... }\n const wasmBlocks = extractWasmBlocks(source)\n source = wasmBlocks.source\n\n // Extract and run test blocks: test 'desc'? { body }\n // Tests run at transpile time and are stripped from output\n const testResult = extractAndRunTests(source, options.dangerouslySkipTests)\n source = testResult.source\n\n // Transform polymorphic constructors: multiple constructor() -> factory functions\n // Must happen before wrapClassDeclarations (which needs to know about poly ctors)\n const polyCtorResult = transformPolymorphicConstructors(\n source,\n requiredParams\n )\n source = polyCtorResult.source\n\n // Mark $dispatch functions as unsafe (internal Proxy trap params, not user-facing)\n for (const cls of polyCtorResult.polyCtorClasses) {\n unsafeFunctions.add(`${cls}$dispatch`)\n }\n\n // Wrap class declarations to make them callable without `new`\n // Only when TjsClass mode is enabled\n // class Foo { } -> let Foo = class Foo { }; Foo = globalThis.__tjs?.wrapClass?.(Foo) ?? Foo;\n if (tjsModes.tjsClass) {\n source = wrapClassDeclarations(source, polyCtorResult.polyCtorClasses)\n }\n\n // Validate TjsDate mode - check for Date usage\n if (tjsModes.tjsDate) {\n source = validateNoDate(source)\n }\n\n // Validate TjsNoeval mode - check for eval/Function usage\n if (tjsModes.tjsNoeval) {\n source = validateNoEval(source)\n }\n\n // Rewrite extension method calls on known-type receivers\n // Must happen after all other transforms so literals are in final form\n source = transformExtensionCalls(source, extResult.extensions)\n\n return {\n source,\n returnType,\n returnSafety,\n moduleSafety,\n tjsModes,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks: wasmBlocks.blocks,\n tests: testResult.tests,\n testErrors: testResult.errors,\n polymorphicNames: polyResult.polymorphicNames,\n extensions: extResult.extensions,\n }\n}\n\n/**\n * Parse source code into an Acorn AST\n */\nexport function parse(\n source: string,\n options: ParseOptions = {}\n): {\n ast: Program\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n moduleSafety?: 'none' | 'inputs' | 'all'\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n wasmBlocks: WasmBlock[]\n tests: TestBlock[]\n testErrors: string[]\n} {\n const {\n filename = '<source>',\n colonShorthand = true,\n vmTarget = false,\n } = options\n\n // Preprocess for custom syntax\n const {\n source: processedSource,\n returnType,\n returnSafety,\n moduleSafety,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks,\n tests,\n testErrors,\n } = colonShorthand\n ? preprocess(source, { vmTarget })\n : {\n source,\n returnType: undefined,\n returnSafety: undefined,\n moduleSafety: undefined,\n originalSource: source,\n requiredParams: new Set<string>(),\n unsafeFunctions: new Set<string>(),\n safeFunctions: new Set<string>(),\n wasmBlocks: [] as WasmBlock[],\n tests: [] as TestBlock[],\n testErrors: [] as string[],\n }\n\n try {\n const ast = acorn.parse(processedSource, {\n ecmaVersion: 2022,\n sourceType: 'module',\n locations: true,\n allowReturnOutsideFunction: false,\n })\n\n return {\n ast,\n returnType,\n returnSafety,\n moduleSafety,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks,\n tests,\n testErrors,\n }\n } catch (e: any) {\n // Convert Acorn error to our error type\n const loc = e.loc || { line: 1, column: 0 }\n throw new SyntaxError(\n e.message.replace(/\\s*\\(\\d+:\\d+\\)$/, ''), // Remove acorn's location suffix\n loc,\n originalSource,\n filename\n )\n }\n}\n\n/**\n * Validate that the source contains exactly one function declaration\n */\nexport function validateSingleFunction(\n ast: Program,\n filename?: string\n): FunctionDeclaration {\n // Check for unsupported top-level constructs FIRST\n // This gives better error messages for things like classes\n for (const node of ast.body) {\n if (node.type === 'ImportDeclaration') {\n throw new SyntaxError(\n 'Imports are not supported. All atoms must be registered with the VM.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ExportDefaultDeclaration'\n ) {\n throw new SyntaxError(\n 'Exports are not supported. The function is automatically exported.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (node.type === 'ClassDeclaration') {\n throw new SyntaxError(\n 'Classes are not supported. Agent99 uses functional composition.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n }\n\n const functions = ast.body.filter(\n (node): node is FunctionDeclaration => node.type === 'FunctionDeclaration'\n )\n\n if (functions.length === 0) {\n throw new SyntaxError(\n 'Source must contain a function declaration',\n { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (functions.length > 1) {\n const second = functions[1]\n throw new SyntaxError(\n 'Only a single function per agent is allowed',\n second.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n return functions[0]\n}\n\n/**\n * Extract TDoc comment from before a function\n *\n * TJS doc comments use /\\*# ... \\*\\/ syntax and preserve full markdown content.\n * Legacy JSDoc (/\\*\\* ... \\*\\/) is supported as a fallback.\n */\nexport function extractTDoc(\n source: string,\n func: FunctionDeclaration\n): {\n description?: string\n params: Record<string, string>\n} {\n const result: { description?: string; params: Record<string, string> } = {\n params: {},\n }\n\n if (!func.loc) return result\n\n const beforeFunc = source.substring(0, func.start)\n\n // First, check for TJS doc comment: /*# ... */\n // This preserves full markdown content\n // Find the LAST /*# ... */ block and verify it immediately precedes the function\n // (only whitespace and line comments allowed between)\n const allDocBlocks = [...beforeFunc.matchAll(/\\/\\*#([\\s\\S]*?)\\*\\//g)]\n if (allDocBlocks.length > 0) {\n const lastBlock = allDocBlocks[allDocBlocks.length - 1]\n const afterBlock = beforeFunc.substring(\n lastBlock.index! + lastBlock[0].length\n )\n\n // Only attach if nothing but whitespace and line comments between doc and function\n if (/^(?:\\s|\\/\\/[^\\n]*)*$/.test(afterBlock)) {\n // Extract content, trim leading/trailing whitespace, preserve internal formatting\n let content = lastBlock[1]\n\n // Remove common leading whitespace (like dedent)\n const lines = content.split('\\n')\n // Find minimum indentation (ignoring empty lines)\n const minIndent = lines\n .filter((line) => line.trim().length > 0)\n .reduce((min, line) => {\n const indent = line.match(/^(\\s*)/)?.[1].length || 0\n return Math.min(min, indent)\n }, Infinity)\n\n // Remove that indentation from all lines\n if (minIndent > 0 && minIndent < Infinity) {\n content = lines.map((line) => line.slice(minIndent)).join('\\n')\n }\n\n result.description = content.trim()\n return result\n }\n }\n\n // Fall back to JSDoc: /** ... */\n const jsdocMatch = beforeFunc.match(/\\/\\*\\*[\\s\\S]*?\\*\\/\\s*$/)\n if (!jsdocMatch) return result\n\n const jsdoc = jsdocMatch[0]\n\n // Extract description (first non-tag content)\n const descMatch = jsdoc.match(/\\/\\*\\*\\s*\\n?\\s*\\*?\\s*([^@\\n][^\\n]*)/m)\n if (descMatch) {\n result.description = descMatch[1].trim()\n }\n\n // Extract @param tags\n const paramRegex = /@param\\s+(?:\\{[^}]+\\}\\s+)?(\\w+)\\s*-?\\s*(.*)/g\n let match\n while ((match = paramRegex.exec(jsdoc)) !== null) {\n result.params[match[1]] = match[2].trim()\n }\n\n return result\n}\n",
|
|
11
|
+
"/**\n * Parser source transforms\n *\n * All source-to-source text transforms used by the preprocess pipeline.\n * These operate on raw source strings before Acorn parsing.\n */\n\nimport { SyntaxError } from './types'\nimport type {\n WasmBlock,\n TestBlock,\n ExtensionInfo,\n PolyVariant,\n TokenizerState,\n} from './parser-types'\nimport { extractJSValue } from './parser-params'\n\nexport function transformTryWithoutCatch(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'try' keyword followed by '{'\n const tryMatch = source.slice(i).match(/^\\btry\\s*\\{/)\n if (tryMatch) {\n // Found 'try {', now find the matching closing brace\n const startBrace = i + tryMatch[0].length - 1\n const bodyStart = startBrace + 1\n let depth = 1\n let j = bodyStart\n\n while (j < source.length && depth > 0) {\n const char = source[j]\n if (char === '{') depth++\n else if (char === '}') depth--\n j++\n }\n\n if (depth !== 0) {\n // Unbalanced braces, let the parser handle the error\n result += source[i]\n i++\n continue\n }\n\n // Check what comes after the closing brace\n const afterTry = source.slice(j).match(/^\\s*(catch|finally)\\b/)\n\n if (afterTry) {\n // Has catch or finally - leave it alone, copy the try block as-is\n result += source.slice(i, j)\n i = j\n } else {\n // No catch or finally - add monadic error handler\n // Returns MonadicError to maintain monadic flow (propagates through function chains)\n const body = source.slice(bodyStart, j - 1)\n result += `try {${body}} catch (__try_err) { return new (__tjs?.MonadicError ?? Error)(__try_err?.message || String(__try_err), 'try', undefined, undefined, __tjs?.getStack?.()) }`\n i = j\n }\n } else {\n result += source[i]\n i++\n }\n }\n\n return result\n}\n\n/**\n * Extract WASM blocks from source and replace with runtime dispatch code\n *\n * Simple form (body used as both WASM source and JS fallback):\n * wasm {\n * for (let i = 0; i < arr.length; i++) { arr[i] *= 2 }\n * }\n *\n * With explicit fallback (when you need different JS code):\n * wasm {\n * // WASM-optimized version\n * } fallback {\n * // Different JS implementation\n * }\n *\n * Output:\n * (globalThis.__tjs_wasm_0\n * ? globalThis.__tjs_wasm_0(captures...)\n * : (() => { body })())\n *\n * Variables are auto-captured from the body.\n */\nexport function extractWasmBlocks(source: string): {\n source: string\n blocks: WasmBlock[]\n} {\n const blocks: WasmBlock[] = []\n let result = ''\n let i = 0\n let blockId = 0\n\n while (i < source.length) {\n // Look for 'wasm {' or 'wasm{' - simple block without params\n const wasmMatch = source.slice(i).match(/^\\bwasm\\s*\\{/)\n if (wasmMatch) {\n const matchStart = i\n\n // Find the body\n const bodyStart = i + wasmMatch[0].length\n let braceDepth = 1\n let j = bodyStart\n\n while (j < source.length && braceDepth > 0) {\n const char = source[j]\n if (char === '{') braceDepth++\n else if (char === '}') braceDepth--\n j++\n }\n\n if (braceDepth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const body = source.slice(bodyStart, j - 1)\n let fallbackBody: string | undefined\n let matchEnd = j\n\n // Check for optional 'fallback {' block\n const fallbackMatch = source.slice(j).match(/^\\s*fallback\\s*\\{/)\n if (fallbackMatch) {\n const fallbackStart = j + fallbackMatch[0].length\n braceDepth = 1\n let k = fallbackStart\n\n while (k < source.length && braceDepth > 0) {\n const char = source[k]\n if (char === '{') braceDepth++\n else if (char === '}') braceDepth--\n k++\n }\n\n if (braceDepth === 0) {\n fallbackBody = source.slice(fallbackStart, k - 1)\n matchEnd = k\n }\n }\n\n // Auto-detect captured variables from the body\n const captureNames = detectCaptures(body)\n\n // Try to find type annotations from enclosing function parameters\n // Look backwards from matchStart to find the function signature\n const captures = captureNames.map((name) => {\n const typeAnnotation = findParameterType(source, matchStart, name)\n return typeAnnotation ? `${name}: ${typeAnnotation}` : name\n })\n\n // Create the block record\n const block: WasmBlock = {\n id: `__tjs_wasm_${blockId}`,\n body,\n fallback: fallbackBody,\n captures,\n start: matchStart,\n end: matchEnd,\n }\n blocks.push(block)\n\n // Generate runtime dispatch code:\n // The fallback is the body itself (or explicit fallback if provided)\n const fallbackCode = fallbackBody ?? body\n // Strip type annotations from captures for runtime args (e.g., \"xs: Float32Array\" -> \"xs\")\n const captureArgNames = captures.map((c) => c.split(':')[0].trim())\n const captureArgs =\n captureArgNames.length > 0 ? captureArgNames.join(', ') : ''\n\n // For WASM: pass captures as arguments\n // For fallback: just run inline (captures are in scope)\n const wasmCall =\n captureArgNames.length > 0\n ? `globalThis.${block.id}(${captureArgs})`\n : `globalThis.${block.id}()`\n\n const dispatch = `(globalThis.${block.id} ? ${wasmCall} : (() => {${fallbackCode}})())`\n\n result += dispatch\n i = matchEnd\n blockId++\n } else {\n result += source[i]\n i++\n }\n }\n\n return { source: result, blocks }\n}\n\n/** Check if an identifier is a WASM SIMD intrinsic (not a captured variable) */\nfunction isWasmIntrinsic(name: string): boolean {\n return name.startsWith('f32x4_') || name.startsWith('v128_')\n}\n\n/**\n * Detect variables captured from enclosing scope\n *\n * Finds identifiers that are:\n * - Used in the body\n * - Not declared within the body (let, const, var, function params)\n *\n * This is a simple heuristic - a full implementation would use proper AST analysis\n */\nfunction detectCaptures(body: string): string[] {\n // Strip comments first to avoid extracting words from comments\n const bodyWithoutComments = body\n .replace(/\\/\\/[^\\n]*/g, '') // line comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '') // block comments\n\n // Collect identifiers that appear as property accesses (after a dot)\n const propertyOnly = new Set<string>()\n const propPattern = /\\.([a-zA-Z_$][a-zA-Z0-9_$]*)\\b/g\n let match\n while ((match = propPattern.exec(bodyWithoutComments)) !== null) {\n propertyOnly.add(match[1])\n }\n\n // Find all identifiers used in the body (not after a dot)\n const identifierPattern = /(?<!\\.)(\\b[a-zA-Z_$][a-zA-Z0-9_$]*)\\b/g\n const allIdentifiers = new Set<string>()\n while ((match = identifierPattern.exec(bodyWithoutComments)) !== null) {\n allIdentifiers.add(match[1])\n }\n\n // Remove identifiers that ONLY appear as property accesses\n for (const prop of propertyOnly) {\n if (!allIdentifiers.has(prop)) continue\n // Check if this identifier is also used standalone (not just as .prop)\n const standalonePattern = new RegExp(`(?<!\\\\.)\\\\b${prop}\\\\b`, 'g')\n const dotPattern = new RegExp(`\\\\.${prop}\\\\b`, 'g')\n const standaloneMatches =\n bodyWithoutComments.match(standalonePattern)?.length || 0\n const dotMatches = bodyWithoutComments.match(dotPattern)?.length || 0\n // If every occurrence is a property access, remove it\n if (standaloneMatches <= dotMatches) {\n allIdentifiers.delete(prop)\n }\n }\n\n // Find identifiers declared in the body\n const declared = new Set<string>()\n\n // let/const/var declarations\n const declPattern = /\\b(?:let|const|var)\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g\n while ((match = declPattern.exec(bodyWithoutComments)) !== null) {\n declared.add(match[1])\n }\n\n // for loop variables: for (let i = ...)\n const forPattern =\n /\\bfor\\s*\\(\\s*(?:let|const|var)\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g\n while ((match = forPattern.exec(bodyWithoutComments)) !== null) {\n declared.add(match[1])\n }\n\n // function declarations and parameters would go here for full impl\n\n // JS keywords and builtins to exclude\n const reserved = new Set([\n 'if',\n 'else',\n 'for',\n 'while',\n 'do',\n 'switch',\n 'case',\n 'break',\n 'continue',\n 'return',\n 'function',\n 'let',\n 'const',\n 'var',\n 'new',\n 'this',\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'typeof',\n 'instanceof',\n 'in',\n 'of',\n 'try',\n 'catch',\n 'finally',\n 'throw',\n 'async',\n 'await',\n 'class',\n 'extends',\n 'super',\n 'import',\n 'export',\n 'default',\n 'from',\n 'as',\n 'static',\n 'get',\n 'set',\n 'yield',\n // Common globals\n 'console',\n 'Math',\n 'Array',\n 'Object',\n 'String',\n 'Number',\n 'Boolean',\n 'Date',\n 'JSON',\n 'Promise',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'Float32Array',\n 'Float64Array',\n 'Int8Array',\n 'Int16Array',\n 'Int32Array',\n 'Uint8Array',\n 'Uint16Array',\n 'Uint32Array',\n 'BigInt64Array',\n 'BigUint64Array',\n 'ArrayBuffer',\n 'DataView',\n 'Error',\n 'TypeError',\n 'RangeError',\n 'length',\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'slice',\n 'splice',\n 'map',\n 'filter',\n 'reduce',\n 'forEach',\n 'find',\n 'findIndex',\n 'indexOf',\n 'includes',\n 'globalThis',\n 'window',\n 'document',\n 'Infinity',\n 'NaN',\n 'isNaN',\n 'isFinite',\n 'parseInt',\n 'parseFloat',\n 'encodeURI',\n 'decodeURI',\n 'eval',\n 'wasmBuffer',\n ])\n\n // Return identifiers that are used but not declared or reserved\n const captures: string[] = []\n for (const id of allIdentifiers) {\n if (!declared.has(id) && !reserved.has(id) && !isWasmIntrinsic(id)) {\n captures.push(id)\n }\n }\n\n return captures.sort()\n}\n\n/**\n * Find the type annotation for a parameter in the enclosing function\n *\n * Looks backwards from wasmBlockStart to find the function signature,\n * then extracts the type annotation for the given parameter name.\n *\n * Supports:\n * - TJS colon syntax: `param: Float32Array`\n * - TypeScript syntax: `param: Float32Array`\n */\nfunction findParameterType(\n source: string,\n wasmBlockStart: number,\n paramName: string\n): string | undefined {\n // Look backwards to find the function signature\n // Find the nearest 'function' keyword before the wasm block\n const beforeBlock = source.slice(0, wasmBlockStart)\n\n // Match function declaration with parameters\n // This regex finds function signatures and captures the parameter list\n const funcPattern = /function\\s+\\w+\\s*\\(([^)]*)\\)\\s*(?:->.*?)?\\s*\\{[^}]*$/\n const match = beforeBlock.match(funcPattern)\n\n if (!match) {\n // Try arrow function or method syntax\n const arrowPattern =\n /(?:const|let|var)?\\s*\\w+\\s*=\\s*(?:async\\s*)?\\(([^)]*)\\)\\s*(?:=>|->)?\\s*\\{[^}]*$/\n const arrowMatch = beforeBlock.match(arrowPattern)\n if (!arrowMatch) return undefined\n return extractTypeFromParams(arrowMatch[1], paramName)\n }\n\n return extractTypeFromParams(match[1], paramName)\n}\n\n/**\n * Extract the type annotation for a specific parameter from a parameter list string\n */\nfunction extractTypeFromParams(\n paramsStr: string,\n paramName: string\n): string | undefined {\n // Split by comma (handling nested structures)\n const params = paramsStr.split(',').map((p) => p.trim())\n\n for (const param of params) {\n // Match patterns like:\n // - `name: Float32Array`\n // - `name: number`\n // - `name = Float32Array` (TJS example syntax)\n const colonMatch = param.match(\n new RegExp(`^${paramName}\\\\s*:\\\\s*([A-Za-z][A-Za-z0-9]*)`)\n )\n if (colonMatch) {\n return colonMatch[1]\n }\n\n // Match TypeScript-style with equals (default value that's a type constructor)\n const equalsMatch = param.match(\n new RegExp(\n `^${paramName}\\\\s*=\\\\s*(Float32Array|Float64Array|Int32Array|Uint8Array|Int8Array|Int16Array|Uint16Array|Uint32Array)`\n )\n )\n if (equalsMatch) {\n return equalsMatch[1]\n }\n }\n\n return undefined\n}\n\n/**\n * Transform Is/IsNot infix operators to function calls\n *\n * Syntax:\n * a Is b -> Is(a, b)\n * a IsNot b -> IsNot(a, b)\n *\n * This enables structural equality with a clean syntax.\n */\nexport function transformIsOperators(source: string): string {\n // Match: (simpleExpr) IsNot (simpleExpr) - must check IsNot first (longer match)\n // simpleExpr = identifier chain with optional [], () OR literals\n const exprPat =\n '([\\\\w][\\\\w.\\\\[\\\\]()]*|null|undefined|true|false|\\\\d+(?:\\\\.\\\\d+)?|\\'[^\\']*\\'|\"[^\"]*\")'\n\n // Transform IsNot first (longer keyword)\n const isNotRegex = new RegExp(exprPat + '\\\\s+IsNot\\\\s+' + exprPat, 'g')\n source = source.replace(isNotRegex, 'IsNot($1, $2)')\n\n // Transform Is\n const isRegex = new RegExp(exprPat + '\\\\s+Is\\\\s+' + exprPat, 'g')\n source = source.replace(isRegex, 'Is($1, $2)')\n\n return source\n}\n\n/**\n * Insert semicolons to prevent ASI footguns (TjsStandard mode)\n *\n * JavaScript's ASI (Automatic Semicolon Insertion) has notorious footguns:\n *\n * foo // Intended: call foo, then IIFE\n * (() => {})() // Actual: foo(...)(...) - calls foo with IIFE as argument!\n *\n * TjsStandard prevents this by treating newlines as statement terminators\n * (like Go, Swift, Kotlin). When a line starts with a problematic character\n * that could continue the previous line, we insert a semicolon.\n *\n * Problematic line starts: ( [ / + - `\n *\n * We only insert when the previous line doesn't already end with:\n * - A semicolon\n * - An opening brace/bracket/paren (multi-line expression)\n * - A comma (array/object literal or params)\n * - An operator that clearly continues (+, -, *, /, =, etc.)\n * - A keyword that expects continuation (return, throw, etc. followed by value)\n */\nexport function insertAsiProtection(source: string): string {\n // Characters that can continue a previous expression (ASI footguns)\n const continuationStarts = /^[\\s]*[([/+\\-`]/\n\n // Characters/patterns that indicate the previous line expects continuation\n // (don't insert semicolon after these)\n const expectsContinuation = /[{([,;:+\\-*/%=&|?<>!~^]\\s*$|^\\s*$/\n\n // Keywords that expect an expression to follow on same or next line\n const continueKeywords =\n /\\b(return|throw|yield|await|case|default|extends|new|typeof|void|delete|in|of|instanceof)\\s*$/\n\n const lines = source.split('\\n')\n const result: string[] = []\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const prevLine = i > 0 ? lines[i - 1] : ''\n\n // Check if this line starts with a problematic character\n if (i > 0 && continuationStarts.test(line)) {\n // Get the previous line without trailing comment\n const prevNoComment = prevLine\n .replace(/\\/\\/.*$/, '')\n .replace(/\\/\\*.*\\*\\/\\s*$/, '')\n\n // Don't insert if prev line clearly expects continuation\n if (\n !expectsContinuation.test(prevNoComment) &&\n !continueKeywords.test(prevNoComment)\n ) {\n // Insert semicolon at start of this line (preserving whitespace)\n const match = line.match(/^(\\s*)/)\n const indent = match ? match[1] : ''\n const rest = line.slice(indent.length)\n result.push(indent + ';' + rest)\n continue\n }\n }\n\n result.push(line)\n }\n\n return result.join('\\n')\n}\n\n/**\n * Transform == and != to Is() and IsNot() calls\n *\n * In TJS normal mode:\n * a == b -> Is(a, b) (structural equality)\n * a != b -> IsNot(a, b) (structural inequality)\n * a === b -> a === b (identity, unchanged)\n *\n * Uses a two-pass algorithm:\n * 1. Find all == and != positions (outside strings/comments/regex)\n * 2. Transform from end to start (so positions remain valid)\n */\nexport function transformEqualityToStructural(source: string): string {\n // First pass: find all == and != positions (outside strings/comments/regex)\n const equalityOps: Array<{ pos: number; op: '==' | '!=' }> = []\n let i = 0\n let state: TokenizerState = 'normal'\n const templateStack: number[] = []\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = source[i + 1]\n\n // Handle state transitions\n switch (state) {\n case 'single-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === \"'\") state = 'normal'\n i++\n continue\n\n case 'double-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '\"') state = 'normal'\n i++\n continue\n\n case 'template-string':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '$' && nextChar === '{') {\n i += 2\n templateStack.push(1)\n state = 'normal'\n continue\n }\n if (char === '`') state = 'normal'\n i++\n continue\n\n case 'line-comment':\n if (char === '\\n') state = 'normal'\n i++\n continue\n\n case 'block-comment':\n if (char === '*' && nextChar === '/') {\n i += 2\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'regex':\n if (char === '\\\\' && i + 1 < source.length) {\n i += 2\n continue\n }\n if (char === '[') {\n i++\n while (i < source.length && source[i] !== ']') {\n if (source[i] === '\\\\' && i + 1 < source.length) {\n i += 2\n } else {\n i++\n }\n }\n if (i < source.length) i++\n continue\n }\n if (char === '/') {\n i++\n while (i < source.length && /[gimsuy]/.test(source[i])) i++\n state = 'normal'\n continue\n }\n i++\n continue\n\n case 'normal':\n // Handle template stack\n if (templateStack.length > 0) {\n if (char === '{') {\n templateStack[templateStack.length - 1]++\n } else if (char === '}') {\n templateStack[templateStack.length - 1]--\n if (templateStack[templateStack.length - 1] === 0) {\n templateStack.pop()\n i++\n state = 'template-string'\n continue\n }\n }\n }\n\n // Check for string/comment/regex start\n if (char === \"'\") {\n i++\n state = 'single-string'\n continue\n }\n if (char === '\"') {\n i++\n state = 'double-string'\n continue\n }\n if (char === '`') {\n i++\n state = 'template-string'\n continue\n }\n if (char === '/' && nextChar === '/') {\n i += 2\n state = 'line-comment'\n continue\n }\n if (char === '/' && nextChar === '*') {\n i += 2\n state = 'block-comment'\n continue\n }\n\n // Check for regex literal (simplified detection)\n if (char === '/') {\n let j = i - 1\n while (j >= 0 && /\\s/.test(source[j])) j--\n const beforeChar = j >= 0 ? source[j] : ''\n const isRegexContext =\n !beforeChar ||\n /[=(!,;:{[&|?+\\-*%<>~^]/.test(beforeChar) ||\n (j >= 5 &&\n /\\b(return|case|throw|in|of|typeof|instanceof|new|delete|void)$/.test(\n source.slice(Math.max(0, j - 10), j + 1)\n ))\n if (isRegexContext) {\n i++\n state = 'regex'\n continue\n }\n }\n\n // Look for == or != (but not === or !==)\n // For ==: check it's not part of !== (char before is !)\n // For !=: check it's not !== (third char is =)\n if (\n char === '=' &&\n nextChar === '=' &&\n source[i + 2] !== '=' &&\n source[i - 1] !== '!'\n ) {\n equalityOps.push({ pos: i, op: '==' })\n i += 2\n continue\n }\n if (char === '!' && nextChar === '=' && source[i + 2] !== '=') {\n equalityOps.push({ pos: i, op: '!=' })\n i += 2\n continue\n }\n break\n }\n\n i++\n }\n\n // If no equality operators found, return source unchanged\n if (equalityOps.length === 0) {\n return source\n }\n\n // Second pass: transform from end to start (so positions remain valid)\n let result = source\n for (let k = equalityOps.length - 1; k >= 0; k--) {\n const { pos, op } = equalityOps[k]\n const funcName = op === '==' ? 'Is' : 'IsNot'\n\n // Find left operand boundary\n const leftBoundary = findLeftOperandBoundary(result, pos)\n // Find right operand boundary\n const rightBoundary = findRightOperandBoundary(result, pos + 2)\n\n const leftExpr = result.slice(leftBoundary, pos).trim()\n const rightExpr = result.slice(pos + 2, rightBoundary).trim()\n\n if (leftExpr && rightExpr) {\n // Build the replacement\n const before = result.slice(0, leftBoundary)\n const after = result.slice(rightBoundary)\n // Add space after keyword if needed (e.g., return, throw, typeof)\n const needsSpace = /[a-zA-Z0-9_$]$/.test(before)\n const spacer = needsSpace ? ' ' : ''\n result = `${before}${spacer}${funcName}(${leftExpr}, ${rightExpr})${after}`\n }\n }\n\n return result\n}\n\n/**\n * Find the start position of the left operand\n *\n * Scans backwards from the operator position to find where the left expression starts.\n * Respects operator precedence: == has lower precedence than arithmetic operators,\n * so `x % 2 == 0` has left operand `x % 2`.\n */\nfunction findLeftOperandBoundary(source: string, opPos: number): number {\n let i = opPos - 1\n\n // Skip whitespace before operator\n while (i >= 0 && /\\s/.test(source[i])) i--\n if (i < 0) return 0\n\n let depth = 0\n let inString = false\n let stringChar = ''\n\n while (i >= 0) {\n const char = source[i]\n const prevChar = i > 0 ? source[i - 1] : ''\n\n // Handle string literals (scan backwards through them)\n if (inString) {\n if (char === stringChar && prevChar !== '\\\\') {\n inString = false\n }\n i--\n continue\n }\n\n // Check for string end (we're scanning backwards, so end is opening quote)\n if ((char === '\"' || char === \"'\" || char === '`') && prevChar !== '\\\\') {\n inString = true\n stringChar = char\n i--\n continue\n }\n\n // Track depth of parens/brackets (reversed since we're going backwards)\n if (char === ')' || char === ']') {\n depth++\n i--\n continue\n }\n if (char === '(' || char === '[') {\n if (depth > 0) {\n depth--\n i--\n continue\n }\n // Opening paren/bracket at depth 0 - this is a grouping/call paren\n // The expression starts AFTER it, not including it\n return i + 1\n }\n\n // Inside nested expression - keep scanning\n if (depth > 0) {\n i--\n continue\n }\n\n // At depth 0 - check for expression boundaries\n // Statement delimiters\n if (char === ';' || char === '{' || char === '}') {\n return i + 1\n }\n\n // Check for keywords that precede expressions (return, throw, etc.)\n // We need to look backwards for a word boundary and check if it's a keyword\n if (/[a-z]/.test(char)) {\n // Might be end of a keyword - scan backwards to get full word\n const wordEnd = i + 1\n let wordStart = i\n while (wordStart > 0 && /[a-z]/i.test(source[wordStart - 1])) {\n wordStart--\n }\n const word = source.slice(wordStart, wordEnd)\n // Check if preceded by word char (not a keyword then)\n const beforeWord = wordStart > 0 ? source[wordStart - 1] : ''\n if (!/[a-zA-Z0-9_$]/.test(beforeWord)) {\n // These keywords start an expression - stop after them\n if (\n [\n 'return',\n 'throw',\n 'case',\n 'typeof',\n 'void',\n 'delete',\n 'await',\n 'yield',\n 'new',\n ].includes(word)\n ) {\n return wordEnd\n }\n }\n }\n\n // Arrow function - stop before =>\n if (char === '>' && prevChar === '=') {\n return i + 1\n }\n\n // Assignment operator (but not ==, !=, <=, >=)\n if (\n char === '=' &&\n prevChar !== '=' &&\n prevChar !== '!' &&\n prevChar !== '<' &&\n prevChar !== '>'\n ) {\n return i + 1\n }\n\n // Logical operators (lower precedence than ==)\n if (char === '&' && prevChar === '&') {\n return i + 1\n }\n if (char === '|' && prevChar === '|') {\n return i + 1\n }\n\n // Ternary operators\n if (char === '?' || char === ':') {\n return i + 1\n }\n\n // Comma\n if (char === ',') {\n return i + 1\n }\n\n i--\n }\n\n return 0\n}\n\n/**\n * Find the end position of the right operand\n *\n * Scans forward from after the operator to find where the right expression ends.\n */\nfunction findRightOperandBoundary(\n source: string,\n startAfterOp: number\n): number {\n let i = startAfterOp\n\n // Skip whitespace after operator\n while (i < source.length && /\\s/.test(source[i])) i++\n if (i >= source.length) return source.length\n\n let depth = 0\n let inString = false\n let stringChar = ''\n\n while (i < source.length) {\n const char = source[i]\n const nextChar = i + 1 < source.length ? source[i + 1] : ''\n\n // Handle string literals\n if (inString) {\n if (char === stringChar && source[i - 1] !== '\\\\') {\n inString = false\n }\n i++\n continue\n }\n\n if (\n (char === '\"' || char === \"'\" || char === '`') &&\n source[i - 1] !== '\\\\'\n ) {\n inString = true\n stringChar = char\n i++\n continue\n }\n\n // Track depth\n if (char === '(' || char === '[' || char === '{') {\n depth++\n i++\n continue\n }\n if (char === ')' || char === ']' || char === '}') {\n if (depth > 0) {\n depth--\n i++\n continue\n }\n // Closing paren at depth 0 - boundary\n return i\n }\n\n // Inside nested - keep scanning\n if (depth > 0) {\n i++\n continue\n }\n\n // At depth 0 - check for expression boundaries\n if (char === ';') {\n return i\n }\n\n // Logical operators - lower precedence than ==\n if (char === '&' && nextChar === '&') {\n return i\n }\n if (char === '|' && nextChar === '|') {\n return i\n }\n\n // Ternary\n if (char === '?') {\n return i\n }\n if (char === ':') {\n return i\n }\n\n // Comma\n if (char === ',') {\n return i\n }\n\n // Another == or != (chained equality - stop before it)\n if (\n (char === '=' || char === '!') &&\n nextChar === '=' &&\n source[i + 2] !== '='\n ) {\n return i\n }\n\n i++\n }\n\n return source.length\n}\n\n/**\n * Transform Type block declarations\n *\n * Syntax forms:\n * Type Foo 'example' -> const Foo = Type('Foo', 'example')\n * Type Foo { example: 'value' } -> const Foo = Type('Foo', 'value')\n * Type Foo 'description' { example: 'value' }\n * -> const Foo = Type('description', 'value')\n * Type Foo 'description' { example: 0, predicate(x) { return x > 0 } }\n * -> const Foo = Type('description', (x) => { ... }, 0)\n *\n * When predicate + example: auto-generate type guard from example\n */\nexport function transformTypeDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Type' keyword followed by identifier\n const typeMatch = source\n .slice(i)\n .match(/^\\bType\\s+([A-Z_][a-zA-Z0-9_]*)\\s*/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n let j = i + typeMatch[0].length\n\n // Check for optional description string\n // Only treat as description if followed by = or {\n let description = typeName\n let descriptionWasExplicit = false\n const descStringMatch = source.slice(j).match(/^(['\"`])([^]*?)\\1\\s*/)\n if (descStringMatch) {\n const afterString = j + descStringMatch[0].length\n const nextChar = source[afterString]\n // Check if this looks like end of statement (not followed by = or {)\n // Note: the \\s* in the regex consumes trailing whitespace including newlines\n const isEndOfStatement =\n nextChar === undefined ||\n afterString >= source.length ||\n (nextChar !== '=' && nextChar !== '{')\n\n if (nextChar === '=' || nextChar === '{') {\n // It's a description followed by = or { block\n description = descStringMatch[2]\n descriptionWasExplicit = true\n j = afterString\n } else if (isEndOfStatement) {\n // Old simple form: Type Name 'value' - value is both example and default\n const value = descStringMatch[0].trim()\n // Preserve trailing whitespace (newlines) that was consumed by the regex\n const trailingWs = descStringMatch[0].slice(value.length)\n result += `const ${typeName} = Type('${typeName}', ${value})${trailingWs}`\n i = afterString\n continue\n }\n }\n\n // Check for = default value\n let defaultValue: string | undefined\n let posAfterDefault = j // Track position right after the default value\n const equalsMatch = source.slice(j).match(/^=\\s*/)\n if (equalsMatch) {\n j += equalsMatch[0].length\n // Parse the default value (handles +number, strings, objects, arrays, etc.)\n const valueMatch = source\n .slice(j)\n .match(\n /^(\\+?\\d+(?:\\.\\d+)?|['\"`][^'\"`]*['\"`]|\\{[^}]*\\}|\\[[^\\]]*\\]|true|false|null)/\n )\n if (valueMatch) {\n defaultValue = valueMatch[0]\n j += valueMatch[0].length\n posAfterDefault = j // Save position before consuming whitespace\n // Skip whitespace after default (only to check for block)\n const wsMatch = source.slice(j).match(/^\\s*/)\n if (wsMatch) j += wsMatch[0].length\n }\n }\n\n // Check for block { ... }\n if (source[j] === '{') {\n // Block form: Type Foo 'desc'? = default? { ... }\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n // Unbalanced - just copy and continue\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse block body for description (old syntax fallback), example, predicate\n const descInsideMatch = blockBody.match(\n /description\\s*:\\s*(['\"`])([^]*?)\\1/\n )\n if (descInsideMatch && !descriptionWasExplicit) {\n description = descInsideMatch[2]\n }\n\n // Extract example value using state machine for nested structures\n let example: string | undefined\n const exampleKeyword = blockBody.match(/example\\s*:\\s*/)\n if (exampleKeyword) {\n const valueStart = exampleKeyword.index! + exampleKeyword[0].length\n const extracted = extractJSValue(blockBody, valueStart)\n if (extracted) {\n example = extracted.value.trim()\n }\n }\n\n const predicateMatch = blockBody.match(\n /predicate\\s*\\(([^)]*)\\)\\s*\\{([^]*)\\}/\n )\n\n // Build Type() call with appropriate arguments\n // Type(description, predicateOrExample, example?, default?)\n if (predicateMatch && example) {\n // Predicate + example\n const params = predicateMatch[1].trim()\n const body = predicateMatch[2].trim()\n const defaultArg = defaultValue ? `, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', (${params}) => { if (!globalThis.__tjs?.validate(${params}, globalThis.__tjs?.infer(${example}))) return false; ${body} }, ${example}${defaultArg})`\n } else if (predicateMatch) {\n // Predicate only\n const params = predicateMatch[1].trim()\n const body = predicateMatch[2].trim()\n const defaultArg = defaultValue ? `, undefined, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', (${params}) => { ${body} }${defaultArg})`\n } else if (example) {\n // Example only (becomes validation schema)\n const defaultArg = defaultValue ? `, ${defaultValue}` : ''\n result += `const ${typeName} = Type('${description}', undefined, ${example}${defaultArg})`\n } else if (defaultValue) {\n // Default only (infer schema from default)\n result += `const ${typeName} = Type('${description}', ${defaultValue})`\n } else {\n // Empty block - error or description-only type\n result += `const ${typeName} = Type('${description}')`\n }\n\n i = blockEnd\n continue\n } else if (defaultValue) {\n // Simple form with default: Type Foo = 'value' or Type Foo 'desc' = 'value'\n result += `const ${typeName} = Type('${description}', ${defaultValue})`\n i = posAfterDefault // Use position before whitespace was consumed\n continue\n } else if (!descStringMatch) {\n // No description, no default, no block - look for old simple form: Type Foo 'value'\n const valueMatch = source\n .slice(j)\n .match(\n /^(['\"`][^]*?['\"`]|\\+?\\d+(?:\\.\\d+)?|true|false|null|\\{[^]*?\\}|\\[[^]*?\\])/\n )\n if (valueMatch) {\n const example = valueMatch[0]\n result += `const ${typeName} = Type('${typeName}', ${example})`\n i = j + valueMatch[0].length\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform FunctionPredicate declarations\n *\n * Block form:\n * FunctionPredicate Callback {\n * params: { x: 0, y: '' }\n * returns: false\n * }\n * → const Callback = FunctionPredicate('Callback', { params: { x: 0, y: '' }, returns: false })\n *\n * Function form:\n * FunctionPredicate Handler(existingFn, 'description')\n * → const Handler = FunctionPredicate('description', existingFn)\n */\nexport function transformFunctionPredicateDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n const fpMatch = source\n .slice(i)\n .match(/^\\bFunctionPredicate\\s+([A-Z_][a-zA-Z0-9_]*)\\s*/)\n if (fpMatch) {\n const fpName = fpMatch[1]\n const j = i + fpMatch[0].length\n\n // Check for block form: FunctionPredicate Name { ... }\n if (source[j] === '{') {\n // Find matching closing brace\n let depth = 1\n let k = j + 1\n while (k < source.length && depth > 0) {\n if (source[k] === '{') depth++\n else if (source[k] === '}') depth--\n k++\n }\n\n if (depth === 0) {\n const blockBody = source.slice(j + 1, k - 1).trim()\n\n // Extract params: { ... }\n const paramsMatch = blockBody.match(/params\\s*:\\s*(\\{[^}]*\\})/)\n // Extract returns value\n const returnsMatch = blockBody.match(/returns\\s*:\\s*(.+?)(?:\\n|$)/)\n // Extract returnContract\n const contractMatch = blockBody.match(\n /returnContract\\s*:\\s*['\"](\\w+)['\"]/\n )\n // Extract description\n const descMatch = blockBody.match(/description\\s*:\\s*(['\"])([^]*?)\\1/)\n\n const spec: string[] = []\n if (paramsMatch) spec.push(`params: ${paramsMatch[1]}`)\n if (returnsMatch) spec.push(`returns: ${returnsMatch[1].trim()}`)\n if (contractMatch) {\n spec.push(`returnContract: '${contractMatch[1]}'`)\n }\n\n const desc = descMatch ? descMatch[2] : fpName\n result += `const ${fpName} = FunctionPredicate('${desc}', { ${spec.join(\n ', '\n )} })`\n i = k\n continue\n }\n }\n\n // Check for function form: FunctionPredicate Name(fn, 'desc')\n if (source[j] === '(') {\n // Find matching closing paren\n let depth = 1\n let k = j + 1\n while (k < source.length && depth > 0) {\n if (source[k] === '(') depth++\n else if (source[k] === ')') depth--\n k++\n }\n\n if (depth === 0) {\n const args = source.slice(j + 1, k - 1).trim()\n // Split on comma: fn, 'description'\n const commaIdx = args.indexOf(',')\n if (commaIdx !== -1) {\n const fnRef = args.slice(0, commaIdx).trim()\n const desc = args.slice(commaIdx + 1).trim()\n result += `const ${fpName} = FunctionPredicate(${desc}, ${fnRef})`\n } else {\n // Just a function reference, name as description\n result += `const ${fpName} = FunctionPredicate('${fpName}', ${args})`\n }\n i = k\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform Generic block declarations\n *\n * Syntax:\n * Generic Pair<T, U> { description: '...', predicate(obj, T, U) { ... } }\n * Generic Container<T, U = ''> { ... } // U has default\n *\n * Transforms to:\n * const Pair = Generic(['T', 'U'], (obj, checkT, checkU) => { ... }, '...')\n * const Container = Generic(['T', ['U', '']], (obj, checkT, checkU) => { ... }, '...')\n */\nexport function transformGenericDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Generic' keyword followed by identifier and type params\n const genericMatch = source\n .slice(i)\n .match(/^\\bGeneric\\s+([A-Z][a-zA-Z0-9_]*)\\s*<([^>]+)>\\s*\\{/)\n if (genericMatch) {\n const genericName = genericMatch[1]\n const typeParamsStr = genericMatch[2]\n const blockStart = i + genericMatch[0].length - 1\n const bodyStart = blockStart + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n // Unbalanced - just copy and continue\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse type params: T, U = Default\n const typeParams = typeParamsStr.split(',').map((p) => {\n const parts = p\n .trim()\n .split('=')\n .map((s) => s.trim())\n if (parts.length === 2) {\n // 'any' and 'undefined' aren't valid JS values — use null\n const defaultVal =\n parts[1] === 'any' || parts[1] === 'undefined' ? 'null' : parts[1]\n return `['${parts[0]}', ${defaultVal}]`\n }\n return `'${parts[0]}'`\n })\n\n // Parse the block body\n // Strip declaration { ... } block before parsing (it's .d.ts metadata, not runtime)\n let parsedBody = blockBody\n const declIdx = parsedBody.search(/\\bdeclaration\\s*\\{/)\n if (declIdx !== -1) {\n // Find matching closing brace for the declaration block\n const declBraceStart = parsedBody.indexOf('{', declIdx)\n let dDepth = 1\n let dj = declBraceStart + 1\n while (dj < parsedBody.length && dDepth > 0) {\n if (parsedBody[dj] === '{') dDepth++\n else if (parsedBody[dj] === '}') dDepth--\n dj++\n }\n // Remove the declaration block\n parsedBody = parsedBody.slice(0, declIdx) + parsedBody.slice(dj)\n }\n\n const descMatch = parsedBody.match(/description\\s*:\\s*(['\"`])([^]*?)\\1/)\n const predicateMatch = parsedBody.match(\n /predicate\\s*\\(([^)]*)\\)\\s*\\{([^]*)\\}/\n )\n\n const description = descMatch ? descMatch[2] : genericName\n\n if (predicateMatch) {\n const params = predicateMatch[1]\n .trim()\n .split(',')\n .map((s) => s.trim())\n let body = predicateMatch[2].trim()\n\n // First param is the value, rest are type params\n const valueParam = params[0] || 'x'\n const typeParamNames = params.slice(1)\n const typeCheckParams = typeParamNames.map((p) => `check${p}`)\n\n // Replace type param names with check functions in body\n // e.g., T(x[0]) becomes checkT(x[0])\n typeParamNames.forEach((name, idx) => {\n body = body.replace(\n new RegExp(`\\\\b${name}\\\\s*\\\\(`, 'g'),\n `${typeCheckParams[idx]}(`\n )\n })\n\n result += `const ${genericName} = Generic([${typeParams.join(\n ', '\n )}], (${valueParam}, ${typeCheckParams.join(\n ', '\n )}) => { ${body} }, '${description}')`\n } else {\n // No predicate - create a generic that always passes\n result += `const ${genericName} = Generic([${typeParams.join(\n ', '\n )}], () => true, '${description}')`\n }\n\n i = blockEnd\n continue\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Transform Union declarations\n *\n * Syntax:\n * Union Direction 'cardinal direction' {\n * 'up' | 'down' | 'left' | 'right'\n * }\n *\n * Transforms to:\n * const Direction = Union('cardinal direction', ['up', 'down', 'left', 'right'])\n *\n * Also supports inline form:\n * Union Direction 'cardinal direction' 'up' | 'down' | 'left' | 'right'\n */\nexport function transformUnionDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Union' keyword followed by identifier and description\n const unionMatch = source\n .slice(i)\n .match(/^\\bUnion\\s+([A-Z][a-zA-Z0-9_]*)\\s+(['\"`])([^]*?)\\2\\s*/)\n if (unionMatch) {\n const unionName = unionMatch[1]\n const description = unionMatch[3]\n const j = i + unionMatch[0].length\n\n // Check what follows: block or inline values\n if (source[j] === '{') {\n // Block form: Union Foo 'desc' { ... }\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse values: 'a' | 'b' | 'c' or \"a\" | \"b\" or mixed\n const values = parseUnionValues(blockBody)\n result += `const ${unionName} = Union('${description}', [${values.join(\n ', '\n )}])`\n i = blockEnd\n continue\n } else {\n // Inline form: Union Foo 'desc' 'a' | 'b' | 'c'\n // Find the end of the line or statement\n let lineEnd = source.indexOf('\\n', j)\n if (lineEnd === -1) lineEnd = source.length\n const inlineValues = source.slice(j, lineEnd).trim()\n\n if (inlineValues) {\n const values = parseUnionValues(inlineValues)\n result += `const ${unionName} = Union('${description}', [${values.join(\n ', '\n )}])`\n i = lineEnd\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Parse union values from a string like: 'a' | 'b' | 123 | true\n * Returns array of value literals as strings\n */\nfunction parseUnionValues(input: string): string[] {\n const values: string[] = []\n // Split on | and trim, preserving quoted strings and literals\n const parts = input.split('|').map((p) => p.trim())\n\n for (const part of parts) {\n if (!part) continue\n // Keep the value as-is (already a valid JS literal)\n values.push(part)\n }\n\n return values\n}\n\n/**\n * Transform Enum declarations\n *\n * Syntax:\n * Enum Status 'task status' {\n * Pending\n * Active\n * Done\n * }\n *\n * Enum Color 'CSS color' {\n * Red = 'red'\n * Green = 'green'\n * Blue = 'blue'\n * }\n *\n * Transforms to:\n * const Status = Enum('task status', { Pending: 0, Active: 1, Done: 2 })\n * const Color = Enum('CSS color', { Red: 'red', Green: 'green', Blue: 'blue' })\n */\nexport function transformEnumDeclarations(source: string): string {\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'Enum' keyword followed by identifier and description\n const enumMatch = source\n .slice(i)\n .match(/^\\bEnum\\s+([A-Z][a-zA-Z0-9_]*)\\s+(['\"`])([^]*?)\\2\\s*\\{/)\n if (enumMatch) {\n const enumName = enumMatch[1]\n const description = enumMatch[3]\n const blockStart = i + enumMatch[0].length - 1\n const bodyStart = blockStart + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth !== 0) {\n result += source[i]\n i++\n continue\n }\n\n const blockBody = source.slice(bodyStart, k - 1).trim()\n const blockEnd = k\n\n // Parse enum members\n const members = parseEnumMembers(blockBody)\n const membersStr = members\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')\n\n result += `const ${enumName} = Enum('${description}', { ${membersStr} })`\n i = blockEnd\n continue\n }\n\n result += source[i]\n i++\n }\n\n return result\n}\n\n/**\n * Parse enum members from block body\n * Handles: Pending, Active = 5, Done, Name = 'value'\n * Returns array of [key, value] pairs\n */\nfunction parseEnumMembers(input: string): [string, string][] {\n const members: [string, string][] = []\n let currentNumericValue = 0\n\n // Split on newlines and commas, filter empty\n const lines = input\n .split(/[\\n,]/)\n .map((l) => l.trim())\n .filter((l) => l && !l.startsWith('//'))\n\n for (const line of lines) {\n // Match: Name or Name = value\n const match = line.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*(?:=\\s*(.+))?$/)\n if (match) {\n const key = match[1]\n const explicitValue = match[2]?.trim()\n\n if (explicitValue !== undefined) {\n members.push([key, explicitValue])\n // If it's a number, update the counter\n const numVal = Number(explicitValue)\n if (!isNaN(numVal)) {\n currentNumericValue = numVal + 1\n }\n } else {\n // Auto-increment numeric value\n members.push([key, String(currentNumericValue)])\n currentNumericValue++\n }\n }\n }\n\n return members\n}\n\n/**\n * Extension info for a single extend block\n */\n\nexport function transformExtendDeclarations(source: string): {\n source: string\n extensions: Map<string, Set<string>>\n} {\n const extensions = new Map<string, Set<string>>()\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'extend' keyword at statement boundary\n const remaining = source.slice(i)\n const extendMatch = remaining.match(/^(\\s*)extend\\s+([A-Z]\\w*)\\s*\\{/)\n\n if (!extendMatch) {\n // Check if we're at start of line or after semicolon/brace\n const lineStart =\n i === 0 ||\n source[i - 1] === '\\n' ||\n source[i - 1] === ';' ||\n source[i - 1] === '}'\n\n if (lineStart) {\n const afterWS = remaining.match(/^(\\s*)extend\\s+([A-Z]\\w*)\\s*\\{/)\n if (afterWS) {\n // Already handled above, fall through\n }\n }\n result += source[i]\n i++\n continue\n }\n\n const indent = extendMatch[1]\n const typeName = extendMatch[2]\n const blockStart = i + extendMatch[0].length - 1 // position of {\n\n // Find matching closing brace\n const blockEnd = findFunctionBodyEnd(source, blockStart)\n const blockBody = source.slice(blockStart + 1, blockEnd - 1).trim()\n\n // Parse methods from the block body\n // Match: methodName(params) { body } or async methodName(params) { body }\n const methods: { name: string; isAsync: boolean; fullText: string }[] = []\n let j = 0\n const bodySource = source.slice(blockStart + 1, blockEnd - 1)\n\n while (j < bodySource.length) {\n const methodRemaining = bodySource.slice(j)\n const methodMatch = methodRemaining.match(/^(\\s*)(async\\s+)?(\\w+)\\s*\\(/)\n\n if (!methodMatch) {\n j++\n continue\n }\n\n const methodIndent = methodMatch[1]\n const isAsync = !!methodMatch[2]\n const methodName = methodMatch[3]\n\n // Reject arrow functions — they don't bind `this`\n // We'll check after finding the body\n\n // Find the opening paren\n const parenStart = j + methodMatch[0].length - 1\n let parenDepth = 1\n let k = parenStart + 1\n while (k < bodySource.length && parenDepth > 0) {\n if (bodySource[k] === '(') parenDepth++\n if (bodySource[k] === ')') parenDepth--\n k++\n }\n const paramsStr = bodySource.slice(parenStart + 1, k - 1)\n\n // Skip whitespace to find { or =>\n let afterParams = k\n while (\n afterParams < bodySource.length &&\n /\\s/.test(bodySource[afterParams])\n ) {\n afterParams++\n }\n\n // Check for arrow function\n if (\n bodySource[afterParams] === '=' &&\n bodySource[afterParams + 1] === '>'\n ) {\n const loc = locAt(source, blockStart + 1 + j)\n throw new SyntaxError(\n `Arrow functions are not allowed in extend blocks (method '${methodName}' in extend ${typeName}). ` +\n `Use regular function syntax instead, as extension methods need 'this' binding.`,\n loc\n )\n }\n\n if (bodySource[afterParams] !== '{') {\n j++\n continue\n }\n\n // Find matching closing brace for the method body\n const methodBodyEnd = findFunctionBodyEnd(bodySource, afterParams)\n const fullMethodText = bodySource.slice(j, methodBodyEnd).trim()\n\n // Build: methodName: function(params) { body }\n // Transform TJS colon params (name: value) to JS defaults (name = value)\n const transformedParams = paramsStr\n .split(',')\n .map((p) => p.trim())\n .filter((p) => p.length > 0)\n .map((p) => {\n // name: value -> name = value (TJS colon shorthand)\n const colonMatch = p.match(/^(\\w+)\\s*:\\s*(.+)$/)\n if (colonMatch) return `${colonMatch[1]} = ${colonMatch[2]}`\n return p\n })\n .join(', ')\n const asyncPrefix = isAsync ? 'async ' : ''\n const methodBody = bodySource.slice(afterParams + 1, methodBodyEnd - 1)\n methods.push({\n name: methodName,\n isAsync,\n fullText: `${methodName}: ${asyncPrefix}function(${transformedParams}) {${methodBody}}`,\n })\n\n j = methodBodyEnd\n }\n\n // Track extensions\n const isFirstForType = !extensions.has(typeName)\n if (isFirstForType) {\n extensions.set(typeName, new Set())\n }\n const extSet = extensions.get(typeName)!\n for (const m of methods) {\n extSet.add(m.name)\n }\n\n // Generate the __ext object (or merge into existing)\n const methodEntries = methods.map((m) => ` ${m.fullText}`).join(',\\n')\n let replacement: string\n if (isFirstForType) {\n replacement = `${indent}const __ext_${typeName} = {\\n${methodEntries}\\n${indent}}\\n`\n } else {\n // Merge into existing: Object.assign(__ext_TypeName, { ... })\n replacement = `${indent}Object.assign(__ext_${typeName}, {\\n${methodEntries}\\n${indent}})\\n`\n }\n\n // Generate registration calls\n for (const m of methods) {\n replacement += `${indent}if (__tjs?.registerExtension) { __tjs.registerExtension('${typeName}', '${m.name}', __ext_${typeName}.${m.name}) }\\n`\n }\n\n result += replacement\n i = blockEnd\n }\n\n // Append any remaining source\n if (i <= source.length && result.length < source.length) {\n // Already handled character by character\n }\n\n return { source: result, extensions }\n}\n\n/**\n * Transform method calls on known-type receivers to use extension objects.\n *\n * For literals and typed variables where the type is known:\n * 'hello'.capitalize() -> __ext_String.capitalize.call('hello')\n * [1,2,3].last() -> __ext_Array.last.call([1,2,3])\n *\n * This is a best-effort source-level transform. For unknown types,\n * the runtime fallback (resolveExtension) handles it.\n */\nexport function transformExtensionCalls(\n source: string,\n extensions: Map<string, Set<string>>\n): string {\n if (extensions.size === 0) return source\n\n // Build a map of method names to possible type names for quick lookup\n const methodToTypes = new Map<string, string[]>()\n for (const [typeName, methods] of extensions) {\n for (const method of methods) {\n if (!methodToTypes.has(method)) {\n methodToTypes.set(method, [])\n }\n methodToTypes.get(method)!.push(typeName)\n }\n }\n\n let result = source\n\n // Rewrite calls on string literals: 'str'.method(...) or \"str\".method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('String')) continue\n\n // Match string literal followed by .method(\n // Single-quoted strings\n const singleQuotePattern = new RegExp(\n `('(?:[^'\\\\\\\\]|\\\\\\\\.)*')\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(singleQuotePattern, (_, str, meth, closeParen) => {\n return closeParen\n ? `__ext_String.${meth}.call(${str})`\n : `__ext_String.${meth}.call(${str}, `\n })\n\n // Double-quoted strings\n const doubleQuotePattern = new RegExp(\n `(\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\")\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(doubleQuotePattern, (_, str, meth, closeParen) => {\n return closeParen\n ? `__ext_String.${meth}.call(${str})`\n : `__ext_String.${meth}.call(${str}, `\n })\n\n // Template literals (backtick) — simple case only (no nested templates)\n const templatePattern = new RegExp(\n '(`(?:[^`\\\\\\\\]|\\\\\\\\.)*`)\\\\.' + method + '\\\\((\\\\))?',\n 'g'\n )\n result = result.replace(templatePattern, (_, str, closeParen) => {\n return closeParen\n ? `__ext_String.${method}.call(${str})`\n : `__ext_String.${method}.call(${str}, `\n })\n }\n\n // Rewrite calls on array literals: [1,2,3].method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('Array')) continue\n\n // Match array literal [...].method(\n // This is tricky — we need to find balanced brackets\n // Simple approach: find ].method( and walk backward to find matching [\n const methodDot = `].${method}(`\n let searchFrom = 0\n let idx: number\n while ((idx = result.indexOf(methodDot, searchFrom)) !== -1) {\n // Walk backward from idx to find matching [\n let bracketDepth = 1\n let k = idx - 1\n let inStr: string | false = false\n while (k >= 0 && bracketDepth > 0) {\n const ch = result[k]\n if (inStr) {\n if (ch === inStr && (k === 0 || result[k - 1] !== '\\\\')) {\n inStr = false\n }\n } else {\n if (ch === ']') bracketDepth++\n if (ch === '[') bracketDepth--\n if (ch === \"'\" || ch === '\"' || ch === '`') inStr = ch\n }\n k--\n }\n\n if (bracketDepth === 0) {\n const arrayLiteral = result.slice(k + 1, idx + 1)\n const before = result.slice(0, k + 1)\n const after = result.slice(idx + methodDot.length)\n // Check if no-args call: next char is )\n if (after[0] === ')') {\n result = `${before}__ext_Array.${method}.call(${arrayLiteral})${after.slice(\n 1\n )}`\n } else {\n result = `${before}__ext_Array.${method}.call(${arrayLiteral}, ${after}`\n }\n }\n\n searchFrom = idx + 1\n }\n }\n\n // Rewrite calls on number literals: (42).method(...)\n for (const [method, typeNames] of methodToTypes) {\n if (!typeNames.includes('Number')) continue\n\n const numPattern = new RegExp(\n `(\\\\d+(?:\\\\.\\\\d+)?)\\\\.(${method})\\\\((\\\\))?`,\n 'g'\n )\n result = result.replace(numPattern, (_, num, meth, closeParen) => {\n return closeParen\n ? `__ext_Number.${meth}.call(${num})`\n : `__ext_Number.${meth}.call(${num}, `\n })\n }\n\n return result\n}\n\n/**\n * Compute {line, column} from a character offset in source.\n */\nexport function locAt(\n source: string,\n pos: number\n): { line: number; column: number } {\n let line = 1\n let column = 0\n for (let i = 0; i < pos && i < source.length; i++) {\n if (source[i] === '\\n') {\n line++\n column = 0\n } else {\n column++\n }\n }\n return { line, column }\n}\n\n/**\n * Info about a single function variant for polymorphic dispatch\n */\n\nfunction typeCheckForDefault(argExpr: string, defaultValue: string): string {\n const dv = defaultValue.trim()\n\n // String literal\n if (/^['\"`]/.test(dv)) return `typeof ${argExpr} === 'string'`\n\n // Boolean\n if (dv === 'true' || dv === 'false') return `typeof ${argExpr} === 'boolean'`\n\n // null\n if (dv === 'null') return `${argExpr} === null`\n\n // undefined\n if (dv === 'undefined') return `${argExpr} === undefined`\n\n // Array literal\n if (dv.startsWith('[')) return `Array.isArray(${argExpr})`\n\n // Object literal\n if (dv.startsWith('{'))\n return `(typeof ${argExpr} === 'object' && ${argExpr} !== null && !Array.isArray(${argExpr}))`\n\n // Non-negative integer: +N\n if (/^\\+\\d+/.test(dv))\n return `(typeof ${argExpr} === 'number' && Number.isInteger(${argExpr}) && ${argExpr} >= 0)`\n\n // Number with decimal → float\n if (/^-?\\d+\\.\\d+/.test(dv)) return `typeof ${argExpr} === 'number'`\n\n // Integer (whole number, possibly negative)\n if (/^-?\\d+$/.test(dv))\n return `(typeof ${argExpr} === 'number' && Number.isInteger(${argExpr}))`\n\n // Fallback: any\n return 'true'\n}\n\n/**\n * Get a type \"signature\" string from a default value for ambiguity checking.\n * Two params with the same signature at the same position are ambiguous.\n */\nfunction typeSignatureForDefault(defaultValue: string): string {\n const dv = defaultValue.trim()\n if (/^['\"`]/.test(dv)) return 'string'\n if (dv === 'true' || dv === 'false') return 'boolean'\n if (dv === 'null') return 'null'\n if (dv === 'undefined') return 'undefined'\n if (dv.startsWith('[')) return 'array'\n if (dv.startsWith('{')) return 'object'\n if (/^\\+\\d+/.test(dv)) return 'non-negative-integer'\n if (/^-?\\d+\\.\\d+/.test(dv)) return 'number'\n if (/^-?\\d+$/.test(dv)) return 'integer'\n return 'any'\n}\n\n/**\n * Parse a parameter string like \"a = 0, b = 'hello', c = { x: 0 }\"\n * into an array of { name, defaultValue, required } objects.\n * Handles nested braces/brackets/parens and template literals.\n */\nfunction parseParamList(\n paramStr: string,\n requiredParams: Set<string>\n): { name: string; defaultValue: string; required: boolean }[] {\n const params: { name: string; defaultValue: string; required: boolean }[] = []\n let depth = 0\n let current = ''\n let inString: string | false = false\n\n for (let i = 0; i < paramStr.length; i++) {\n const ch = paramStr[i]\n\n // Track string state\n if (!inString && (ch === \"'\" || ch === '\"' || ch === '`')) {\n inString = ch\n current += ch\n continue\n }\n if (inString) {\n current += ch\n if (ch === '\\\\') {\n i++\n if (i < paramStr.length) current += paramStr[i]\n continue\n }\n if (ch === inString) inString = false\n continue\n }\n\n // Track nesting\n if (ch === '(' || ch === '[' || ch === '{') {\n depth++\n current += ch\n continue\n }\n if (ch === ')' || ch === ']' || ch === '}') {\n depth--\n current += ch\n continue\n }\n\n // Split on comma at depth 0\n if (ch === ',' && depth === 0) {\n const param = parseOneParam(current.trim(), requiredParams)\n if (param) params.push(param)\n current = ''\n continue\n }\n\n current += ch\n }\n\n // Last param\n const trimmed = current.trim()\n if (trimmed) {\n const param = parseOneParam(trimmed, requiredParams)\n if (param) params.push(param)\n }\n\n return params\n}\n\n/**\n * Parse a single parameter like \"name = 'Alice'\" or \"/* unsafe * / x = 0\"\n */\nfunction parseOneParam(\n paramStr: string,\n requiredParams: Set<string>\n): { name: string; defaultValue: string; required: boolean } | null {\n // Strip leading /* unsafe */ comment\n const str = paramStr.replace(/^\\/\\*\\s*unsafe\\s*\\*\\/\\s*/, '')\n\n // Rest params not supported in polymorphic functions\n if (str.startsWith('...')) return null\n\n // Find = sign (the param has been transformed from : to = by transformParenExpressions)\n const eqIdx = str.indexOf('=')\n if (eqIdx === -1) {\n // No default value — untyped param\n return { name: str.trim(), defaultValue: '', required: true }\n }\n\n const name = str.slice(0, eqIdx).trim()\n const defaultValue = str.slice(eqIdx + 1).trim()\n return { name, defaultValue, required: requiredParams.has(name) }\n}\n\n/**\n * Find the end of a function body (matching closing brace).\n * Handles nested braces, strings, template literals, comments, and regex.\n * Returns the index AFTER the closing brace.\n */\nexport function findFunctionBodyEnd(\n source: string,\n openBracePos: number\n): number {\n let depth = 1\n let i = openBracePos + 1\n let inString: string | false = false\n let inLineComment = false\n let inBlockComment = false\n\n while (i < source.length && depth > 0) {\n const ch = source[i]\n const next = i + 1 < source.length ? source[i + 1] : ''\n\n // Line comment\n if (inLineComment) {\n if (ch === '\\n') inLineComment = false\n i++\n continue\n }\n\n // Block comment\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n inBlockComment = false\n i += 2\n continue\n }\n i++\n continue\n }\n\n // String tracking\n if (inString) {\n if (ch === '\\\\') {\n i += 2\n continue\n }\n if (ch === inString) inString = false\n i++\n continue\n }\n\n // Start comments\n if (ch === '/' && next === '/') {\n inLineComment = true\n i += 2\n continue\n }\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i += 2\n continue\n }\n\n // Start strings\n if (ch === \"'\" || ch === '\"' || ch === '`') {\n inString = ch\n i++\n continue\n }\n\n // Braces\n if (ch === '{') depth++\n if (ch === '}') depth--\n\n i++\n }\n\n return i\n}\n\n/**\n * Transform polymorphic functions: multiple function declarations with the\n * same name are merged into a single dispatcher function.\n *\n * Must be called AFTER transformParenExpressions (so params have = defaults)\n * but BEFORE wrapClassDeclarations.\n *\n * function greet(name = '') { ... }\n * function greet(first = '', last = '') { ... }\n *\n * becomes:\n *\n * function greet$1(name = '') { ... }\n * function greet$2(first = '', last = '') { ... }\n * function greet(...__args) {\n * if (__args.length === 1 && typeof __args[0] === 'string') return greet$1(__args[0])\n * if (__args.length === 2 && ...) return greet$2(__args[0], __args[1])\n * return __tjs.typeError('greet', 'no matching overload', __args)\n * }\n */\nexport function transformPolymorphicFunctions(\n source: string,\n requiredParams: Set<string>\n): { source: string; polymorphicNames: Set<string> } {\n const polymorphicNames = new Set<string>()\n\n // Phase 1: Find all function declarations and group by name\n // Match: optional \"export\" + optional \"async\" + \"function\" + name + \"(\"\n const funcPattern =\n /(?:^|(?<=[\\n;{}]))\\s*(export\\s+)?(async\\s+)?function\\s+(\\w+)\\s*\\(/gm\n const declarations = new Map<string, PolyVariant[]>()\n let match: RegExpExecArray | null\n\n // First pass: collect all function positions and names\n const allMatches: {\n name: string\n fullMatchStart: number\n funcKeywordStart: number\n exported: boolean\n isAsync: boolean\n }[] = []\n\n while ((match = funcPattern.exec(source)) !== null) {\n const exported = !!match[1]\n const isAsync = !!match[2]\n const name = match[3]\n const fullMatchStart = match.index\n // Find where \"function\" keyword starts (skip whitespace and export/async)\n let funcKeywordStart = fullMatchStart\n const prefix = match[0]\n const funcIdx = prefix.indexOf('function')\n if (funcIdx >= 0) funcKeywordStart = fullMatchStart + funcIdx\n\n allMatches.push({\n name,\n fullMatchStart,\n funcKeywordStart,\n exported,\n isAsync,\n })\n }\n\n // Group by name\n for (const m of allMatches) {\n if (!declarations.has(m.name)) {\n declarations.set(m.name, [])\n }\n }\n\n // Count occurrences — only process names that appear more than once\n const nameCounts = new Map<string, number>()\n for (const m of allMatches) {\n nameCounts.set(m.name, (nameCounts.get(m.name) || 0) + 1)\n }\n\n const polyNames = new Set<string>()\n for (const [name, count] of nameCounts) {\n if (count > 1) polyNames.add(name)\n }\n\n if (polyNames.size === 0) {\n return { source, polymorphicNames }\n }\n\n // Phase 2: For each polymorphic function, extract full details\n for (const m of allMatches) {\n if (!polyNames.has(m.name)) continue\n\n // Find the opening paren\n const afterFunc = source.indexOf('(', m.funcKeywordStart)\n if (afterFunc === -1) continue\n\n // Find matching closing paren\n let parenDepth = 1\n let j = afterFunc + 1\n while (j < source.length && parenDepth > 0) {\n if (source[j] === '(') parenDepth++\n if (source[j] === ')') parenDepth--\n j++\n }\n const closeParen = j - 1\n const paramStr = source.slice(afterFunc + 1, closeParen)\n\n // Find the opening brace of the function body\n let bodyStart = j\n while (bodyStart < source.length && source[bodyStart] !== '{') bodyStart++\n if (bodyStart >= source.length) continue\n\n // Find matching closing brace\n const bodyEnd = findFunctionBodyEnd(source, bodyStart)\n\n // Determine the real start (including leading whitespace, export, async)\n let realStart = m.fullMatchStart\n // Include leading whitespace on the same line\n while (realStart > 0 && source[realStart - 1] === ' ') realStart--\n\n const variants = declarations.get(m.name)!\n const params = parseParamList(paramStr, requiredParams)\n\n // Check for rest params\n const hasRestParam = paramStr.includes('...')\n if (hasRestParam) {\n const loc = locAt(source, m.funcKeywordStart)\n throw new SyntaxError(\n `Rest parameters are not supported in polymorphic function '${m.name}'. ` +\n `Use separate function names instead.`,\n loc\n )\n }\n\n variants.push({\n index: variants.length + 1,\n start: realStart,\n end: bodyEnd,\n text: source.slice(realStart, bodyEnd),\n exported: m.exported,\n isAsync: m.isAsync,\n params,\n })\n }\n\n // Phase 3: Validate — check for ambiguous variants\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n\n // Check async consistency\n const asyncCount = variants.filter((v) => v.isAsync).length\n if (asyncCount > 0 && asyncCount < variants.length) {\n const loc = locAt(source, variants[0].start)\n throw new SyntaxError(\n `Polymorphic function '${name}': all variants must be either sync or async, not mixed.`,\n loc\n )\n }\n\n // Check for ambiguous signatures (same types at same positions, differing only in required/optional)\n for (let i = 0; i < variants.length; i++) {\n for (let j = i + 1; j < variants.length; j++) {\n const a = variants[i]\n const b = variants[j]\n\n // Different max arity is fine\n if (a.params.length !== b.params.length) continue\n\n // Same arity — check if types are identical at every position\n let allSame = true\n for (let k = 0; k < a.params.length; k++) {\n const sigA = a.params[k].defaultValue\n ? typeSignatureForDefault(a.params[k].defaultValue)\n : 'any'\n const sigB = b.params[k].defaultValue\n ? typeSignatureForDefault(b.params[k].defaultValue)\n : 'any'\n if (sigA !== sigB) {\n allSame = false\n break\n }\n }\n\n if (allSame) {\n const loc = locAt(source, b.start)\n throw new SyntaxError(\n `Polymorphic function '${name}': variants ${i + 1} and ${\n j + 1\n } have ambiguous signatures ` +\n `(same parameter types at every position). Overloads must differ by arity or parameter types.`,\n loc\n )\n }\n }\n }\n }\n\n // Phase 4: Build the transformed source\n // Sort all variants by position (reverse order for safe replacement)\n const allVariants: { name: string; variant: PolyVariant }[] = []\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n for (const v of variants) {\n allVariants.push({ name, variant: v })\n }\n }\n allVariants.sort((a, b) => b.variant.start - a.variant.start)\n\n // Replace each variant in reverse order (preserves positions)\n let result = source\n for (const { name, variant } of allVariants) {\n const asyncPrefix = variant.isAsync ? 'async ' : ''\n // Rename: function greet(...) -> function greet$1(...)\n // Strip \"export\" from variants — only the dispatcher is exported\n // Use $$ in replacement to produce literal $ (avoid backreference interpretation)\n const renamed = variant.text.replace(\n new RegExp(\n `(?:export\\\\s+)?${\n asyncPrefix ? asyncPrefix.replace(/\\s+$/, '\\\\s+') : ''\n }function\\\\s+${name}\\\\s*\\\\(`\n ),\n `${asyncPrefix}function ${name}$$${variant.index}(`\n )\n result =\n result.slice(0, variant.start) + renamed + result.slice(variant.end)\n }\n\n // Phase 5: Append dispatcher functions\n for (const [name, variants] of declarations) {\n if (variants.length < 2) continue\n polymorphicNames.add(name)\n\n const isAsync = variants[0].isAsync\n const isExported = variants.some((v) => v.exported)\n const asyncPrefix = isAsync ? 'async ' : ''\n const exportPrefix = isExported ? 'export ' : ''\n\n // Sort variants by specificity for dispatch order:\n // 1. More params first (higher arity)\n // 2. More specific types first (integer before number, object before any)\n const sorted = [...variants].sort((a, b) => {\n // Different arity: more params = more specific (checked first within same arity group)\n if (a.params.length !== b.params.length) return 0 // arity groups handled in dispatch\n\n // Same arity: count specificity\n let specA = 0\n let specB = 0\n for (const p of a.params) {\n const sig = p.defaultValue\n ? typeSignatureForDefault(p.defaultValue)\n : 'any'\n if (sig === 'non-negative-integer') specA += 3\n else if (sig === 'integer') specA += 2\n else if (sig !== 'any') specA += 1\n }\n for (const p of b.params) {\n const sig = p.defaultValue\n ? typeSignatureForDefault(p.defaultValue)\n : 'any'\n if (sig === 'non-negative-integer') specB += 3\n else if (sig === 'integer') specB += 2\n else if (sig !== 'any') specB += 1\n }\n return specB - specA // More specific first\n })\n\n // Generate dispatch branches\n const branches: string[] = []\n for (const v of sorted) {\n const checks: string[] = [`__args.length === ${v.params.length}`]\n const args: string[] = []\n\n for (let k = 0; k < v.params.length; k++) {\n const p = v.params[k]\n args.push(`__args[${k}]`)\n if (p.defaultValue) {\n const check = typeCheckForDefault(`__args[${k}]`, p.defaultValue)\n if (check !== 'true') checks.push(check)\n }\n }\n\n branches.push(\n ` if (${checks.join(' && ')}) return ${name}$${v.index}(${args.join(\n ', '\n )})`\n )\n }\n\n const dispatcher = `\n${exportPrefix}${asyncPrefix}function ${name}(...__args) {\n${branches.join('\\n')}\n return __tjs.typeError('${name}', 'no matching overload', __args)\n}\n`\n result += dispatcher\n }\n\n return { source: result, polymorphicNames }\n}\n\n/**\n * Transform bare assignments to const declarations\n *\n * Foo = ... -> const Foo = ...\n *\n * Only transforms assignments at statement level (start of line or after semicolon/brace)\n * where the identifier starts with uppercase (to avoid breaking normal assignments)\n */\nexport function transformBareAssignments(source: string): string {\n // Match: start of line/statement, uppercase identifier, =, not ==\n // Negative lookbehind for const/let/var to avoid double-declaring\n return source.replace(\n /(?<=^|[;\\n{])\\s*([A-Z][a-zA-Z0-9_]*)\\s*=(?!=)/gm,\n (match, name) => {\n // Check if already has const/let/var before it\n return match.replace(name, `const ${name}`)\n }\n )\n}\n\n/**\n * Parse source code into an Acorn AST\n */\n\nexport function extractAndRunTests(\n source: string,\n skipTests = false\n): {\n source: string\n tests: TestBlock[]\n errors: string[]\n} {\n const tests: TestBlock[] = []\n const errors: string[] = []\n let result = ''\n let i = 0\n\n while (i < source.length) {\n // Look for 'test' keyword followed by optional string then {\n const testMatch = source.slice(i).match(/^\\btest\\s+/)\n if (testMatch) {\n const start = i\n let j = i + testMatch[0].length\n\n // Check for optional description string\n let description: string | undefined\n const descMatch = source.slice(j).match(/^(['\"`])([^]*?)\\1\\s*/)\n if (descMatch) {\n description = descMatch[2]\n j += descMatch[0].length\n }\n\n // Must have opening brace\n if (source[j] === '{') {\n const bodyStart = j + 1\n let depth = 1\n let k = bodyStart\n\n // Find matching closing brace\n while (k < source.length && depth > 0) {\n const char = source[k]\n if (char === '{') depth++\n else if (char === '}') depth--\n k++\n }\n\n if (depth === 0) {\n const body = source.slice(bodyStart, k - 1).trim()\n const end = k\n\n const line = (source.slice(0, start).match(/\\n/g) || []).length + 1\n tests.push({ description, body, start, end, line })\n\n // Run the test unless skipped\n if (!skipTests) {\n try {\n // Execute test in isolated context\n // The test has access to the Types defined before it\n const testFn = new Function(body)\n testFn()\n } catch (err: any) {\n const desc = description || `test at line ${line}`\n errors.push(\n `Test failed: ${desc} (line ${line})\\n ${err.message || err}`\n )\n }\n }\n\n // Strip the test block from output (replace with whitespace to preserve line numbers)\n const removed = source.slice(start, end)\n const newlines = (removed.match(/\\n/g) || []).length\n result += '\\n'.repeat(newlines)\n i = end\n continue\n }\n }\n }\n\n result += source[i]\n i++\n }\n\n return { source: result, tests, errors }\n}\n\n/**\n * Wrap class declarations to make them callable without `new`\n *\n * Transforms:\n * class Foo { ... }\n * To:\n * let Foo = class Foo { ... };\n * Foo = new Proxy(Foo, { apply(t, _, a) { return Reflect.construct(t, a) } });\n *\n * This emits standalone JS with no runtime dependencies.\n */\n\n/**\n * Transform polymorphic constructors into static factory functions.\n *\n * When a class has multiple constructor() declarations, the first becomes\n * the real constructor and the rest become factory functions. The wrapClass\n * Proxy routes through a polymorphic dispatcher.\n *\n * class Point {\n * constructor(x: 0.0, y: 0.0) { this.x = x; this.y = y }\n * constructor(coords: { x: 0.0, y: 0.0 }) { this.x = coords.x; this.y = coords.y }\n * }\n *\n * becomes:\n *\n * class Point {\n * constructor(x = 0.0, y = 0.0) { this.x = x; this.y = y }\n * }\n * function Point$ctor$2(coords = { x: 0.0, y: 0.0 }) { return new Point(coords.x, coords.y) }\n * // wrapClass Proxy dispatches through polymorphic factory\n */\nexport function transformPolymorphicConstructors(\n source: string,\n requiredParams: Set<string>\n): { source: string; polyCtorClasses: Set<string> } {\n const polyCtorClasses = new Set<string>()\n\n // Find classes with multiple constructors\n const classRegex = /\\bclass\\s+(\\w+)(\\s+extends\\s+\\w+)?\\s*\\{/g\n let classMatch\n\n // Collect all class info first\n const classInfos: {\n className: string\n extendsClause: string\n bodyStart: number\n bodyEnd: number\n body: string\n }[] = []\n\n while ((classMatch = classRegex.exec(source)) !== null) {\n const className = classMatch[1]\n const extendsClause = classMatch[2]?.trim() || ''\n const bodyStart = classMatch.index + classMatch[0].length - 1\n\n const bodyEnd = findFunctionBodyEnd(source, bodyStart)\n const body = source.slice(bodyStart, bodyEnd)\n\n classInfos.push({ className, extendsClause, bodyStart, bodyEnd, body })\n }\n\n // Process in reverse order to preserve positions\n let result = source\n for (let ci = classInfos.length - 1; ci >= 0; ci--) {\n const { className, extendsClause, bodyStart, bodyEnd, body } =\n classInfos[ci]\n\n // Find all constructor declarations in the class body\n const ctorPattern = /\\bconstructor\\s*\\(/g\n let ctorMatch\n const ctorPositions: number[] = []\n\n while ((ctorMatch = ctorPattern.exec(body)) !== null) {\n ctorPositions.push(ctorMatch.index)\n }\n\n if (ctorPositions.length < 2) continue // Not polymorphic\n\n polyCtorClasses.add(className)\n\n // Parse each constructor\n interface CtorInfo {\n index: number\n paramStr: string\n bodyText: string\n fullStart: number // relative to class body\n fullEnd: number // relative to class body\n }\n const ctors: CtorInfo[] = []\n\n for (let i = 0; i < ctorPositions.length; i++) {\n const pos = ctorPositions[i]\n\n // Find opening paren\n const parenStart = body.indexOf('(', pos)\n let parenDepth = 1\n let j = parenStart + 1\n while (j < body.length && parenDepth > 0) {\n if (body[j] === '(') parenDepth++\n if (body[j] === ')') parenDepth--\n j++\n }\n const paramStr = body.slice(parenStart + 1, j - 1)\n\n // Find opening brace\n let braceStart = j\n while (braceStart < body.length && body[braceStart] !== '{') braceStart++\n\n // Find matching closing brace\n const ctorBodyEnd = findFunctionBodyEnd(body, braceStart)\n const bodyText = body.slice(braceStart + 1, ctorBodyEnd - 1)\n\n ctors.push({\n index: i + 1,\n paramStr,\n bodyText,\n fullStart: pos,\n fullEnd: ctorBodyEnd,\n })\n }\n\n // Keep the first constructor in the class, remove the rest\n // Build new class body with only the first constructor\n let newBody = body.slice(0, ctors[0].fullEnd)\n // Skip subsequent constructors\n const afterLastCtor = ctors[ctors.length - 1].fullEnd\n newBody += body.slice(afterLastCtor)\n\n // But we need to remove just the extra constructors, keeping other methods\n // Better approach: remove constructors 2..N from the body\n let cleanBody = body\n for (let i = ctors.length - 1; i >= 1; i--) {\n const ctor = ctors[i]\n // Find start of this constructor (including leading whitespace)\n let start = ctor.fullStart\n while (start > 0 && cleanBody[start - 1] === ' ') start--\n if (start > 0 && cleanBody[start - 1] === '\\n') start--\n\n cleanBody = cleanBody.slice(0, start) + cleanBody.slice(ctor.fullEnd)\n }\n\n // Generate factory functions for constructors 2..N\n let factories = ''\n for (let i = 1; i < ctors.length; i++) {\n const ctor = ctors[i]\n // Parse params for type checking in dispatcher\n const params = parseParamList(ctor.paramStr, requiredParams)\n const hasRest = ctor.paramStr.includes('...')\n if (hasRest) {\n const loc = locAt(source, bodyStart + ctor.fullStart)\n throw new SyntaxError(\n `Rest parameters are not supported in polymorphic constructors for '${className}'.`,\n loc\n )\n }\n\n // The factory function creates the object manually\n // For base classes: use Object.create + call constructor body\n // Simpler: just use new ClassName() with the first ctor's params mapped\n // Actually simplest: the factory body IS the constructor body but with\n // `this.x = ...` replaced by building an object... No, that doesn't work\n // for inheritance.\n //\n // Best approach: factory creates via new, then applies the extra ctor body\n factories += `\\nfunction ${className}$ctor$${ctor.index}(${ctor.paramStr}) {`\n factories += `\\n const __obj = Object.create(${className}.prototype)`\n if (extendsClause) {\n // For derived classes, we can't easily call super() outside constructor\n // Just call the constructor body and hope it sets fields\n // Actually — the factory can just do: new ClassName(defaultArgs) then overwrite\n // Let's use a simpler approach: the factory just does new + field assignment\n }\n factories += `\\n ;(function() {${ctor.bodyText}}).call(__obj)`\n factories += `\\n return __obj`\n factories += `\\n}\\n`\n }\n\n // Generate the polymorphic dispatcher for the Proxy's apply trap\n // First constructor variant uses Reflect.construct, rest use factories\n const dispatchBranches: string[] = []\n\n for (let i = 0; i < ctors.length; i++) {\n const ctor = ctors[i]\n const params = parseParamList(ctor.paramStr, requiredParams)\n const checks: string[] = [`a.length === ${params.length}`]\n\n for (let k = 0; k < params.length; k++) {\n const p = params[k]\n if (p.defaultValue) {\n const check = typeCheckForDefault(`a[${k}]`, p.defaultValue)\n if (check !== 'true') checks.push(check)\n }\n }\n\n if (i === 0) {\n // First constructor — use Reflect.construct\n dispatchBranches.push(\n ` if (${checks.join(' && ')}) return Reflect.construct(t, a)`\n )\n } else {\n // Factory function\n const args = params.map((_, k) => `a[${k}]`).join(', ')\n dispatchBranches.push(\n ` if (${checks.join(' && ')}) return ${className}$ctor$${\n ctor.index\n }(${args})`\n )\n }\n }\n\n // Generate the dispatcher function\n factories += `\\nfunction ${className}$dispatch(t, a) {\\n`\n factories += dispatchBranches.join('\\n') + '\\n'\n factories += ` return __tjs.typeError('${className}', 'no matching constructor', a)\\n`\n factories += `}\\n`\n\n // Replace the class body and append factories\n result = result.slice(0, bodyStart) + cleanBody + result.slice(bodyEnd)\n\n // Insert factories after the class\n const insertPos = bodyStart + cleanBody.length\n result = result.slice(0, insertPos) + factories + result.slice(insertPos)\n }\n\n return { source: result, polyCtorClasses }\n}\n\nexport function wrapClassDeclarations(\n source: string,\n polyCtorClasses: Set<string> = new Set()\n): string {\n // Match class declarations: class Name { or class Name extends Base {\n // Capture the class name and find the full class body\n const classRegex = /\\bclass\\s+(\\w+)(\\s+extends\\s+\\w+)?\\s*\\{/g\n let result = ''\n let lastIndex = 0\n let match\n\n while ((match = classRegex.exec(source)) !== null) {\n const className = match[1]\n const extendsClause = match[2] || ''\n const classStart = match.index\n const bodyStart = classStart + match[0].length - 1 // position of {\n\n // Find matching closing brace\n let depth = 1\n let i = bodyStart + 1\n while (i < source.length && depth > 0) {\n const char = source[i]\n if (char === '{') depth++\n else if (char === '}') depth--\n i++\n }\n\n if (depth === 0) {\n const classEnd = i\n const classBody = source.slice(bodyStart, classEnd)\n\n // Emit standalone JS - no runtime dependency\n result += source.slice(lastIndex, classStart)\n result += `let ${className} = class ${className}${extendsClause} ${classBody}; `\n\n if (polyCtorClasses.has(className)) {\n // Polymorphic constructor: use dispatcher function for apply trap\n result += `${className} = new Proxy(${className}, { apply(t, _, a) { return ${className}$dispatch(t, a) }, construct(t, a) { return ${className}$dispatch(t, a) } });`\n } else {\n result += `${className} = new Proxy(${className}, { apply(t, _, a) { return Reflect.construct(t, a) } });`\n }\n lastIndex = classEnd\n }\n }\n\n result += source.slice(lastIndex)\n return result\n}\n\n/**\n * Validate that Date is not used (TjsDate mode)\n * Throws an error if Date constructor or static methods are found\n */\nexport function validateNoDate(source: string): string {\n // Match Date usage: new Date, Date.now, Date.parse, Date.UTC\n const datePatterns = [\n {\n pattern: /\\bnew\\s+Date\\b/,\n message:\n 'new Date() is not allowed in TjsDate mode. Use Timestamp.now() or Timestamp.from()',\n },\n {\n pattern: /\\bDate\\.now\\b/,\n message: 'Date.now() is not allowed in TjsDate mode. Use Timestamp.now()',\n },\n {\n pattern: /\\bDate\\.parse\\b/,\n message:\n 'Date.parse() is not allowed in TjsDate mode. Use Timestamp.parse()',\n },\n {\n pattern: /\\bDate\\.UTC\\b/,\n message:\n 'Date.UTC() is not allowed in TjsDate mode. Use Timestamp.from()',\n },\n ]\n\n for (const { pattern, message } of datePatterns) {\n if (pattern.test(source)) {\n throw new Error(message)\n }\n }\n\n return source\n}\n\n/**\n * Validate that eval and Function constructor are not used (TjsNoeval mode)\n * Note: Eval and SafeFunction from TJS runtime are allowed\n */\nexport function validateNoEval(source: string): string {\n // Match eval() calls - but not Eval() (capital E)\n // Use negative lookbehind to avoid matching inside words\n const evalPattern = /(?<![A-Za-z_$])\\beval\\s*\\(/\n if (evalPattern.test(source)) {\n throw new Error(\n 'eval() is not allowed in TjsNoeval mode. Use Eval() from TJS runtime for safe evaluation.'\n )\n }\n\n // Match new Function() - but not SafeFunction or other *Function names\n const functionPattern = /\\bnew\\s+Function\\s*\\(/\n if (functionPattern.test(source)) {\n throw new Error(\n 'new Function() is not allowed in TjsNoeval mode. Use SafeFunction() from TJS runtime.'\n )\n }\n\n return source\n}\n",
|
|
12
|
+
"/**\n * TJS Parser — Orchestration Layer\n *\n * This module contains the main entry points: preprocess() and parse().\n * Transform functions are in parser-transforms.ts, param processing in parser-params.ts.\n */\n\nimport * as acorn from 'acorn'\nimport type { Program, FunctionDeclaration } from 'acorn'\nimport { SyntaxError } from './types'\n\n// Re-export types so external callers don't need to change imports\nexport type {\n ParseOptions,\n WasmBlock,\n TestBlock,\n PreprocessOptions,\n TjsModes,\n} from './parser-types'\n\nimport type {\n ParseOptions,\n WasmBlock,\n TestBlock,\n PreprocessOptions,\n TjsModes,\n} from './parser-types'\n\nimport { transformParenExpressions } from './parser-params'\n\nimport {\n transformTryWithoutCatch,\n extractWasmBlocks,\n transformIsOperators,\n insertAsiProtection,\n transformEqualityToStructural,\n transformTypeDeclarations,\n transformGenericDeclarations,\n transformFunctionPredicateDeclarations,\n transformUnionDeclarations,\n transformEnumDeclarations,\n transformExtendDeclarations,\n transformPolymorphicFunctions,\n transformPolymorphicConstructors,\n wrapClassDeclarations,\n transformBareAssignments,\n extractAndRunTests,\n validateNoDate,\n validateNoEval,\n transformExtensionCalls,\n} from './parser-transforms'\n\n// Re-export transformExtensionCalls for js.ts\nexport { transformExtensionCalls } from './parser-transforms'\n\nexport function preprocess(\n source: string,\n options: PreprocessOptions = {}\n): {\n source: string\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n moduleSafety?: 'none' | 'inputs' | 'all'\n tjsModes: TjsModes\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n wasmBlocks: WasmBlock[]\n tests: TestBlock[]\n testErrors: string[]\n polymorphicNames: Set<string>\n extensions: Map<string, Set<string>>\n} {\n const originalSource = source\n let moduleSafety: 'none' | 'inputs' | 'all' | undefined\n const requiredParams = new Set<string>()\n const unsafeFunctions = new Set<string>()\n const safeFunctions = new Set<string>()\n\n // TJS modes - all default to false (JS-compatible by default)\n const tjsModes: TjsModes = {\n tjsEquals: false,\n tjsClass: false,\n tjsDate: false,\n tjsNoeval: false,\n tjsStandard: false,\n tjsSafeEval: false,\n }\n\n // Handle module-level safety directive: safety none | safety inputs | safety all\n // Must be at the start of the file (possibly after comments/whitespace)\n const safetyMatch = source.match(\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*safety\\s+(none|inputs|all)\\b/\n )\n if (safetyMatch) {\n moduleSafety = safetyMatch[2] as 'none' | 'inputs' | 'all'\n // Remove the directive from source\n source = source.replace(\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*safety\\s+(none|inputs|all)\\s*/,\n '$1'\n )\n }\n\n // Handle TJS mode directives (can appear in any order after safety)\n // TjsStrict enables all TJS modes\n // Individual modes: TjsEquals, TjsClass, TjsDate, TjsNoeval, TjsStandard, TjsSafeEval\n const directivePattern =\n /^(\\s*(?:\\/\\/[^\\n]*\\n|\\/\\*[\\s\\S]*?\\*\\/\\s*)*)\\s*(TjsStrict|TjsEquals|TjsClass|TjsDate|TjsNoeval|TjsStandard|TjsSafeEval)\\b/\n\n let match\n while ((match = source.match(directivePattern))) {\n const directive = match[2]\n\n if (directive === 'TjsStrict') {\n // Enable all TJS modes\n tjsModes.tjsEquals = true\n tjsModes.tjsClass = true\n tjsModes.tjsDate = true\n tjsModes.tjsNoeval = true\n tjsModes.tjsStandard = true\n } else if (directive === 'TjsEquals') {\n tjsModes.tjsEquals = true\n } else if (directive === 'TjsClass') {\n tjsModes.tjsClass = true\n } else if (directive === 'TjsDate') {\n tjsModes.tjsDate = true\n } else if (directive === 'TjsNoeval') {\n tjsModes.tjsNoeval = true\n } else if (directive === 'TjsStandard') {\n tjsModes.tjsStandard = true\n } else if (directive === 'TjsSafeEval') {\n tjsModes.tjsSafeEval = true\n }\n\n // Remove the directive from source\n source = source.replace(\n new RegExp(\n `^(\\\\s*(?:\\\\/\\\\/[^\\\\n]*\\\\n|\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/\\\\s*)*)\\\\s*${directive}\\\\s*`\n ),\n '$1'\n )\n }\n\n // TjsStandard mode: insert semicolons to prevent ASI footguns\n // Must happen early before other transformations modify line structure\n if (tjsModes.tjsStandard) {\n source = insertAsiProtection(source)\n }\n\n // Transform Is/IsNot infix operators to function calls\n // a Is b -> Is(a, b)\n // a IsNot b -> IsNot(a, b)\n // These are always available for explicit structural equality\n source = transformIsOperators(source)\n\n // Transform == and != to structural equality (Is/IsNot)\n // Only when TjsEquals mode is enabled and not for VM targets\n // VM targets already handle == correctly at runtime\n if (tjsModes.tjsEquals && !options.vmTarget) {\n source = transformEqualityToStructural(source)\n }\n\n // Transform Type, Generic, Union, and Enum declarations\n // Type Foo { ... } -> const Foo = Type(...)\n // Generic Bar<T, U> { ... } -> const Bar = Generic(...)\n // Union Dir 'up' | 'down' -> const Dir = Union(...)\n // Enum Status { Pending, Active, Done } -> const Status = Enum(...)\n source = transformTypeDeclarations(source)\n source = transformGenericDeclarations(source)\n source = transformFunctionPredicateDeclarations(source)\n source = transformUnionDeclarations(source)\n source = transformEnumDeclarations(source)\n\n // Transform bare assignments to const declarations\n // Foo = ... -> const Foo = ...\n source = transformBareAssignments(source)\n\n // Unified paren expression transformer\n // Handles: function params, arrow params, return types, safe/unsafe markers\n // Model: open paren can be ( or (? or (!, close can be ) or )-> or )-? or )-!\n const {\n source: transformedSource,\n returnType,\n returnSafety,\n } = transformParenExpressions(source, {\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n })\n source = transformedSource\n\n // NOTE: unsafe {} blocks removed - they provided no performance benefit because\n // the wrapper decision is made at transpile time. Use (!) on functions instead.\n // See ideas parking lot for potential future approaches.\n\n // Transform extend blocks: extend TypeName { methods } -> __ext_TypeName object\n // Must happen after paren expressions so method params are already transformed\n const extResult = transformExtendDeclarations(source)\n source = extResult.source\n\n // Handle try-without-catch: try { ... } (no catch/finally) -> monadic error handling\n // This is the idiomatic TJS way to convert exceptions to AgentError\n source = transformTryWithoutCatch(source)\n\n // Transform polymorphic functions: multiple declarations with same name -> dispatcher\n // Must happen after param transformation but before class wrapping and test extraction\n const polyResult = transformPolymorphicFunctions(source, requiredParams)\n source = polyResult.source\n\n // Extract WASM blocks: wasm(args) { ... } fallback { ... }\n const wasmBlocks = extractWasmBlocks(source)\n source = wasmBlocks.source\n\n // Extract and run test blocks: test 'desc'? { body }\n // Tests run at transpile time and are stripped from output\n const testResult = extractAndRunTests(source, options.dangerouslySkipTests)\n source = testResult.source\n\n // Transform polymorphic constructors: multiple constructor() -> factory functions\n // Must happen before wrapClassDeclarations (which needs to know about poly ctors)\n const polyCtorResult = transformPolymorphicConstructors(\n source,\n requiredParams\n )\n source = polyCtorResult.source\n\n // Mark $dispatch functions as unsafe (internal Proxy trap params, not user-facing)\n for (const cls of polyCtorResult.polyCtorClasses) {\n unsafeFunctions.add(`${cls}$dispatch`)\n }\n\n // Wrap class declarations to make them callable without `new`\n // Only when TjsClass mode is enabled\n // class Foo { } -> let Foo = class Foo { }; Foo = globalThis.__tjs?.wrapClass?.(Foo) ?? Foo;\n if (tjsModes.tjsClass) {\n source = wrapClassDeclarations(source, polyCtorResult.polyCtorClasses)\n }\n\n // Validate TjsDate mode - check for Date usage\n if (tjsModes.tjsDate) {\n source = validateNoDate(source)\n }\n\n // Validate TjsNoeval mode - check for eval/Function usage\n if (tjsModes.tjsNoeval) {\n source = validateNoEval(source)\n }\n\n // Rewrite extension method calls on known-type receivers\n // Must happen after all other transforms so literals are in final form\n source = transformExtensionCalls(source, extResult.extensions)\n\n return {\n source,\n returnType,\n returnSafety,\n moduleSafety,\n tjsModes,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks: wasmBlocks.blocks,\n tests: testResult.tests,\n testErrors: testResult.errors,\n polymorphicNames: polyResult.polymorphicNames,\n extensions: extResult.extensions,\n }\n}\n\n/**\n * Parse source code into an Acorn AST\n */\nexport function parse(\n source: string,\n options: ParseOptions = {}\n): {\n ast: Program\n returnType?: string\n returnSafety?: 'safe' | 'unsafe'\n moduleSafety?: 'none' | 'inputs' | 'all'\n originalSource: string\n requiredParams: Set<string>\n unsafeFunctions: Set<string>\n safeFunctions: Set<string>\n wasmBlocks: WasmBlock[]\n tests: TestBlock[]\n testErrors: string[]\n} {\n const {\n filename = '<source>',\n colonShorthand = true,\n vmTarget = false,\n } = options\n\n // Preprocess for custom syntax\n const {\n source: processedSource,\n returnType,\n returnSafety,\n moduleSafety,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks,\n tests,\n testErrors,\n } = colonShorthand\n ? preprocess(source, { vmTarget })\n : {\n source,\n returnType: undefined,\n returnSafety: undefined,\n moduleSafety: undefined,\n originalSource: source,\n requiredParams: new Set<string>(),\n unsafeFunctions: new Set<string>(),\n safeFunctions: new Set<string>(),\n wasmBlocks: [] as WasmBlock[],\n tests: [] as TestBlock[],\n testErrors: [] as string[],\n }\n\n try {\n const ast = acorn.parse(processedSource, {\n ecmaVersion: 2022,\n sourceType: 'module',\n locations: true,\n allowReturnOutsideFunction: false,\n })\n\n return {\n ast,\n returnType,\n returnSafety,\n moduleSafety,\n originalSource,\n requiredParams,\n unsafeFunctions,\n safeFunctions,\n wasmBlocks,\n tests,\n testErrors,\n }\n } catch (e: any) {\n // Convert Acorn error to our error type\n const loc = e.loc || { line: 1, column: 0 }\n throw new SyntaxError(\n e.message.replace(/\\s*\\(\\d+:\\d+\\)$/, ''), // Remove acorn's location suffix\n loc,\n originalSource,\n filename\n )\n }\n}\n\n/**\n * Validate that the source contains exactly one function declaration\n */\nexport function validateSingleFunction(\n ast: Program,\n filename?: string\n): FunctionDeclaration {\n // Check for unsupported top-level constructs FIRST\n // This gives better error messages for things like classes\n for (const node of ast.body) {\n if (node.type === 'ImportDeclaration') {\n throw new SyntaxError(\n 'Imports are not supported. All atoms must be registered with the VM.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ExportDefaultDeclaration'\n ) {\n throw new SyntaxError(\n 'Exports are not supported. The function is automatically exported.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (node.type === 'ClassDeclaration') {\n throw new SyntaxError(\n 'Classes are not supported. Agent99 uses functional composition.',\n node.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n }\n\n const functions = ast.body.filter(\n (node): node is FunctionDeclaration => node.type === 'FunctionDeclaration'\n )\n\n if (functions.length === 0) {\n throw new SyntaxError(\n 'Source must contain a function declaration',\n { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n if (functions.length > 1) {\n const second = functions[1]\n throw new SyntaxError(\n 'Only a single function per agent is allowed',\n second.loc?.start || { line: 1, column: 0 },\n undefined,\n filename\n )\n }\n\n return functions[0]\n}\n\n/**\n * Extract TDoc comment from before a function\n *\n * TJS doc comments use /\\*# ... \\*\\/ syntax and preserve full markdown content.\n * Legacy JSDoc (/\\*\\* ... \\*\\/) is supported as a fallback.\n */\nexport function extractTDoc(\n source: string,\n func: FunctionDeclaration\n): {\n description?: string\n params: Record<string, string>\n} {\n const result: { description?: string; params: Record<string, string> } = {\n params: {},\n }\n\n if (!func.loc) return result\n\n const beforeFunc = source.substring(0, func.start)\n\n // First, check for TJS doc comment: /*# ... */\n // This preserves full markdown content\n // Find the LAST /*# ... */ block and verify it immediately precedes the function\n // (only whitespace and line comments allowed between)\n const allDocBlocks = [...beforeFunc.matchAll(/\\/\\*#([\\s\\S]*?)\\*\\//g)]\n if (allDocBlocks.length > 0) {\n const lastBlock = allDocBlocks[allDocBlocks.length - 1]\n const afterBlock = beforeFunc.substring(\n lastBlock.index! + lastBlock[0].length\n )\n\n // Only attach if nothing but whitespace and line comments between doc and function\n if (/^(?:\\s|\\/\\/[^\\n]*)*$/.test(afterBlock)) {\n // Extract content, trim leading/trailing whitespace, preserve internal formatting\n let content = lastBlock[1]\n\n // Remove common leading whitespace (like dedent)\n const lines = content.split('\\n')\n // Find minimum indentation (ignoring empty lines)\n const minIndent = lines\n .filter((line) => line.trim().length > 0)\n .reduce((min, line) => {\n const indent = line.match(/^(\\s*)/)?.[1].length || 0\n return Math.min(min, indent)\n }, Infinity)\n\n // Remove that indentation from all lines\n if (minIndent > 0 && minIndent < Infinity) {\n content = lines.map((line) => line.slice(minIndent)).join('\\n')\n }\n\n result.description = content.trim()\n return result\n }\n }\n\n // Fall back to JSDoc: /** ... */\n const jsdocMatch = beforeFunc.match(/\\/\\*\\*[\\s\\S]*?\\*\\/\\s*$/)\n if (!jsdocMatch) return result\n\n const jsdoc = jsdocMatch[0]\n\n // Extract description (first non-tag content)\n const descMatch = jsdoc.match(/\\/\\*\\*\\s*\\n?\\s*\\*?\\s*([^@\\n][^\\n]*)/m)\n if (descMatch) {\n result.description = descMatch[1].trim()\n }\n\n // Extract @param tags\n const paramRegex = /@param\\s+(?:\\{[^}]+\\}\\s+)?(\\w+)\\s*-?\\s*(.*)/g\n let match\n while ((match = paramRegex.exec(jsdoc)) !== null) {\n result.params[match[1]] = match[2].trim()\n }\n\n return result\n}\n",
|
|
13
13
|
"/**\n * Type inference from value patterns\n *\n * Extracts types from example values:\n * 'string' -> { kind: 'string' }\n * 10 -> { kind: 'number' }\n * ['string'] -> { kind: 'array', items: { kind: 'string' } }\n * { name: 'string' } -> { kind: 'object', shape: { name: { kind: 'string' } } }\n * 'string' | null -> { kind: 'string', nullable: true }\n * 'string' | 0 -> { kind: 'union', members: [{ kind: 'string' }, { kind: 'number' }] }\n */\n\nimport { parseExpressionAt } from 'acorn'\nimport type { Expression, Pattern } from 'acorn'\nimport type { TypeDescriptor, ParameterDescriptor } from './types'\nimport { getLocation, TranspileError } from './types'\n\n/**\n * Infer type from a value expression (example value)\n */\nexport function inferTypeFromValue(node: Expression): TypeDescriptor {\n switch (node.type) {\n case 'Literal': {\n const value = (node as any).value\n if (value === null) {\n return { kind: 'null' }\n }\n if (typeof value === 'string') {\n return { kind: 'string' }\n }\n if (typeof value === 'number') {\n // Distinguish float vs integer by checking if source contains '.'\n // 2.0 -> number (float), 42 -> integer\n const raw = (node as any).raw as string | undefined\n if (raw && raw.includes('.')) {\n return { kind: 'number' }\n }\n return { kind: 'integer' }\n }\n if (typeof value === 'boolean') {\n return { kind: 'boolean' }\n }\n return { kind: 'any' }\n }\n\n case 'ArrayExpression': {\n const elements = (node as any).elements as Expression[]\n if (elements.length === 0) {\n return { kind: 'array', items: { kind: 'any' } }\n }\n // Infer type from all elements — if homogeneous, use that type;\n // if heterogeneous, produce a union of distinct kinds\n const itemTypes = elements\n .filter((el) => el != null)\n .map((el) => inferTypeFromValue(el))\n if (itemTypes.length === 0) {\n return { kind: 'array', items: { kind: 'any' } }\n }\n // Deduplicate by structure\n const seen = new Map<string, TypeDescriptor>()\n for (const t of itemTypes) {\n const key = JSON.stringify(t)\n if (!seen.has(key)) seen.set(key, t)\n }\n const unique = [...seen.values()]\n const items =\n unique.length === 1\n ? unique[0]\n : { kind: 'union' as const, members: unique }\n return { kind: 'array', items }\n }\n\n case 'ObjectExpression': {\n const properties = (node as any).properties as any[]\n const shape: Record<string, TypeDescriptor> = {}\n\n for (const prop of properties) {\n if (prop.type === 'Property' && prop.key.type === 'Identifier') {\n const key = prop.key.name\n shape[key] = inferTypeFromValue(prop.value)\n }\n }\n\n return { kind: 'object', shape }\n }\n\n case 'LogicalExpression': {\n const { operator, left, right } = node as any\n\n if (operator === '||') {\n // || is JavaScript logical OR — infer type from left operand\n return inferTypeFromValue(left)\n }\n\n if (operator === '&&') {\n // null && type means required type (null is just a marker)\n const rightType = inferTypeFromValue(right)\n return rightType\n }\n\n if (operator === '??') {\n // Nullish coalescing: left ?? right - type is the right side (fallback)\n const rightType = inferTypeFromValue(right)\n return rightType\n }\n\n return { kind: 'any' }\n }\n\n case 'BinaryExpression': {\n const { operator, left, right } = node as any\n // | means union type (e.g., 0 | null, '' | undefined)\n if (operator === '|') {\n const leftType = inferTypeFromValue(left)\n const rightType = inferTypeFromValue(right)\n\n if (rightType.kind === 'null') {\n return { ...leftType, nullable: true }\n }\n if (leftType.kind === 'null') {\n return { ...rightType, nullable: true }\n }\n return {\n kind: 'union',\n members: [leftType, rightType],\n }\n }\n return { kind: 'any' }\n }\n\n case 'Identifier': {\n // Handle undefined as a type\n if ((node as any).name === 'undefined') {\n return { kind: 'undefined' }\n }\n // Other identifiers in type position aren't valid example types\n return { kind: 'any' }\n }\n\n case 'UnaryExpression': {\n const op = (node as any).operator\n const arg = (node as any).argument\n\n // +N means non-negative integer (e.g., +1, +3)\n if (op === '+' && arg.type === 'Literal') {\n const value = arg.value\n if (typeof value === 'number') {\n return { kind: 'non-negative-integer' }\n }\n }\n\n // -N means integer or float depending on source\n if (op === '-' && arg.type === 'Literal') {\n const value = arg.value\n if (typeof value === 'number') {\n const raw = arg.raw as string | undefined\n if (raw && raw.includes('.')) {\n return { kind: 'number' }\n }\n return { kind: 'integer' }\n }\n }\n return { kind: 'any' }\n }\n\n default:\n return { kind: 'any' }\n }\n}\n\n/**\n * Parse a parameter and extract its type and default value\n *\n * @param param - The AST node for the parameter\n * @param requiredParams - Optional set of parameter names that are required (from colon syntax)\n */\nexport function parseParameter(\n param: Pattern,\n requiredParams?: Set<string>\n): ParameterDescriptor {\n // Simple identifier: function foo(x) - required, any type\n if (param.type === 'Identifier') {\n return {\n name: (param as any).name,\n type: { kind: 'any' },\n required: true,\n }\n }\n\n // Assignment pattern: function foo(x = value)\n if (param.type === 'AssignmentPattern') {\n const { left, right } = param as any\n\n if (left.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple parameter names are supported',\n getLocation(param)\n )\n }\n\n const name = left.name\n\n // Check if this parameter was marked as required via colon syntax\n const isRequired = requiredParams?.has(name) ?? false\n\n // Infer type from the example value\n const type = inferTypeFromValue(right)\n const exampleValue = extractLiteralValue(right)\n\n return {\n name,\n type,\n required: isRequired,\n default: isRequired ? null : exampleValue,\n example: exampleValue,\n loc: { start: param.start, end: param.end },\n }\n }\n\n // Destructuring pattern: function foo({ a, b })\n if (param.type === 'ObjectPattern') {\n // For destructuring, we create a synthetic \"args\" parameter\n // The individual properties become fields with their own defaults\n const properties = (param as any).properties as any[]\n const shape: Record<string, TypeDescriptor> = {}\n // Store full parameter descriptors for destructured properties\n const destructuredParams: Record<string, ParameterDescriptor> = {}\n\n for (const prop of properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? prop.key.name\n : String(prop.key.value)\n\n if (prop.value.type === 'Identifier') {\n // { name } - required, any type\n shape[key] = { kind: 'any' }\n destructuredParams[key] = {\n name: key,\n type: { kind: 'any' },\n required: true,\n }\n } else if (prop.value.type === 'AssignmentPattern') {\n // { name = default } - check requiredParams to see if this was originally colon syntax\n const innerParam = parseParameter(prop.value, requiredParams)\n const isRequired = requiredParams?.has(key) ?? false\n shape[key] = innerParam.type\n destructuredParams[key] = {\n name: key,\n type: innerParam.type,\n required: isRequired,\n default: isRequired ? null : innerParam.example,\n example: innerParam.example,\n }\n }\n }\n }\n\n return {\n name: '__destructured__',\n type: { kind: 'object', shape, destructuredParams },\n required: true,\n }\n }\n\n throw new TranspileError(\n `Unsupported parameter pattern: ${param.type}`,\n getLocation(param)\n )\n}\n\n/**\n * Extract a literal value from an expression for default values\n */\nexport function extractLiteralValue(node: Expression): any {\n switch (node.type) {\n case 'Literal':\n return (node as any).value\n\n case 'ArrayExpression':\n return (node as any).elements.map((el: Expression) =>\n el ? extractLiteralValue(el) : null\n )\n\n case 'ObjectExpression': {\n const result: Record<string, any> = {}\n for (const prop of (node as any).properties) {\n if (prop.type === 'Property' && prop.key.type === 'Identifier') {\n result[prop.key.name] = extractLiteralValue(prop.value)\n }\n }\n return result\n }\n\n case 'UnaryExpression':\n if ((node as any).operator === '-') {\n const arg = extractLiteralValue((node as any).argument)\n return typeof arg === 'number' ? -arg : undefined\n }\n if ((node as any).operator === '+') {\n const arg = extractLiteralValue((node as any).argument)\n return typeof arg === 'number' ? +arg : undefined\n }\n return undefined\n\n case 'BinaryExpression': {\n const { operator, left } = node as any\n // | is union type — extract the left (primary) example value\n if (operator === '|') {\n return extractLiteralValue(left)\n }\n return undefined\n }\n\n case 'LogicalExpression': {\n const { operator, left, right } = node as any\n if (operator === '&&') {\n // null && type evaluates to null (falsy short-circuit)\n if (left.type === 'Literal' && left.value === null) {\n return null\n }\n }\n if (operator === '||') {\n // value || fallback - return left if truthy\n const leftVal = extractLiteralValue(left)\n return leftVal ?? extractLiteralValue(right)\n }\n if (operator === '??') {\n // value ?? fallback - return left if not null/undefined\n const leftVal = extractLiteralValue(left)\n return leftVal ?? extractLiteralValue(right)\n }\n return undefined\n }\n\n default:\n return undefined\n }\n}\n\n/**\n * Parse return type from a type annotation expression\n */\nexport function parseReturnType(typeExpr: string): TypeDescriptor {\n // Simple approach: parse as expression and infer type\n try {\n const ast = parseExpressionAt(typeExpr, 0, {\n ecmaVersion: 2022,\n })\n return inferTypeFromValue(ast)\n } catch {\n return { kind: 'any' }\n }\n}\n\n/**\n * Convert TypeDescriptor to a human-readable string\n */\nexport function typeToString(type: TypeDescriptor): string {\n switch (type.kind) {\n case 'string':\n return type.nullable ? 'string | null' : 'string'\n case 'number':\n return type.nullable ? 'number | null' : 'number'\n case 'integer':\n return type.nullable ? 'integer | null' : 'integer'\n case 'non-negative-integer':\n return type.nullable\n ? 'non-negative integer | null'\n : 'non-negative integer'\n case 'boolean':\n return type.nullable ? 'boolean | null' : 'boolean'\n case 'null':\n return 'null'\n case 'any':\n return 'any'\n case 'array': {\n const items = type.items ? typeToString(type.items) : 'any'\n return type.nullable ? `${items}[] | null` : `${items}[]`\n }\n case 'object': {\n if (!type.shape || Object.keys(type.shape).length === 0) {\n return type.nullable ? 'object | null' : 'object'\n }\n const props = Object.entries(type.shape)\n .map(([k, v]) => `${k}: ${typeToString(v)}`)\n .join(', ')\n return type.nullable ? `{ ${props} } | null` : `{ ${props} }`\n }\n case 'union':\n return type.members?.map(typeToString).join(' | ') || 'any'\n default:\n return 'any'\n }\n}\n\n/**\n * Check if a value matches a type descriptor\n */\nexport function checkType(value: any, type: TypeDescriptor): boolean {\n // Handle null\n if (value === null || value === undefined) {\n return type.nullable || type.kind === 'null' || type.kind === 'any'\n }\n\n switch (type.kind) {\n case 'any':\n return true\n case 'null':\n return value === null\n case 'string':\n return typeof value === 'string'\n case 'number':\n return typeof value === 'number'\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value)\n case 'non-negative-integer':\n return typeof value === 'number' && Number.isInteger(value) && value >= 0\n case 'boolean':\n return typeof value === 'boolean'\n case 'array':\n if (!Array.isArray(value)) return false\n if (!type.items) return true\n return value.every((item) => checkType(item, type.items!))\n case 'object':\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false\n }\n if (!type.shape) return true\n // Check that all required shape properties exist and match\n for (const [key, propType] of Object.entries(type.shape)) {\n if (!checkType(value[key], propType)) {\n return false\n }\n }\n return true\n case 'union':\n if (!type.members) return true\n return type.members.some((member) => checkType(value, member))\n default:\n return true\n }\n}\n",
|
|
14
14
|
"/**\n * ESTree to Agent99 AST Transformer\n *\n * Converts parsed JavaScript into Agent99's JSON AST format.\n */\n\nimport type {\n Statement,\n Expression,\n FunctionDeclaration,\n BlockStatement,\n VariableDeclaration,\n ExpressionStatement,\n IfStatement,\n WhileStatement,\n ForOfStatement,\n TryStatement,\n ReturnStatement,\n CallExpression,\n AssignmentExpression,\n BinaryExpression,\n LogicalExpression,\n MemberExpression,\n Identifier,\n Literal,\n TemplateLiteral,\n ArrayExpression,\n ObjectExpression,\n} from 'acorn'\nimport type { BaseNode } from '../../builder'\nimport type { ExprNode } from '../../runtime'\nimport type {\n TransformContext,\n TranspileOptions,\n FunctionSignature,\n ParameterDescriptor,\n TypeDescriptor,\n TranspileWarning,\n} from '../types'\nimport { TranspileError, getLocation, createChildContext } from '../types'\nimport {\n parseParameter,\n inferTypeFromValue,\n parseReturnType,\n} from '../inference'\nimport { extractTDoc } from '../parser'\n\n/**\n * Convert TypeDescriptor to JSON Schema\n */\nfunction typeToJsonSchema(type: TypeDescriptor): any {\n switch (type.kind) {\n case 'string':\n return { type: 'string' }\n case 'number':\n return { type: 'number' }\n case 'boolean':\n return { type: 'boolean' }\n case 'null':\n // null as a default value means \"any type, defaults to null\"\n // In JSON Schema, empty object means any type is allowed\n return {}\n case 'undefined':\n return {} // JSON Schema doesn't have undefined, treat as any\n case 'any':\n return {} // No constraints\n case 'array':\n return {\n type: 'array',\n items: type.items ? typeToJsonSchema(type.items) : {},\n }\n case 'object':\n if (type.shape) {\n const properties: Record<string, any> = {}\n for (const [key, propType] of Object.entries(type.shape)) {\n properties[key] = typeToJsonSchema(propType)\n }\n return {\n type: 'object',\n properties,\n additionalProperties: false,\n }\n }\n return { type: 'object' }\n case 'union':\n if (type.members) {\n return { oneOf: type.members.map(typeToJsonSchema) }\n }\n return {}\n default:\n return {}\n }\n}\n\n/**\n * Convert function parameters to JSON Schema for input validation\n */\nfunction parametersToJsonSchema(\n parameters: Record<string, ParameterDescriptor>\n): any {\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n for (const [name, param] of Object.entries(parameters)) {\n properties[name] = typeToJsonSchema(param.type)\n if (param.required) {\n required.push(name)\n }\n }\n\n return {\n type: 'object',\n properties,\n required: required.length > 0 ? required : undefined,\n additionalProperties: false,\n }\n}\n\n/**\n * Transform a function declaration into Agent99 AST\n */\nexport function transformFunction(\n func: FunctionDeclaration,\n source: string,\n returnTypeAnnotation: string | undefined,\n options: TranspileOptions = {},\n requiredParamsFromPreprocess?: Set<string>\n): {\n ast: BaseNode\n signature: FunctionSignature\n warnings: TranspileWarning[]\n} {\n // Extract TDoc (/*# ... */) comments\n const tdoc = extractTDoc(source, func)\n\n // Parse parameters\n const parameters = new Map<string, ParameterDescriptor>()\n\n for (const param of func.params) {\n const parsed = parseParameter(param, requiredParamsFromPreprocess)\n\n // Handle destructured parameters - expand into individual params\n if (\n parsed.name === '__destructured__' &&\n parsed.type.kind === 'object' &&\n parsed.type.destructuredParams\n ) {\n for (const [key, paramDesc] of Object.entries(\n parsed.type.destructuredParams\n )) {\n parameters.set(key, {\n ...(paramDesc as any),\n description: tdoc.params[key],\n })\n }\n } else {\n parsed.description = tdoc.params[parsed.name]\n parameters.set(parsed.name, parsed)\n }\n }\n\n // Parse return type\n let returnType: TypeDescriptor | undefined\n if (returnTypeAnnotation) {\n returnType = parseReturnType(returnTypeAnnotation)\n }\n\n // Create transform context\n const ctx: TransformContext = {\n depth: 0,\n locals: new Map(),\n parameters,\n atoms: new Set(Object.keys(options.atoms || {})),\n warnings: [],\n source,\n filename: options.filename || '<source>',\n options,\n }\n\n // Transform function body\n const bodySteps = transformBlock(func.body, ctx)\n\n // Handle parameters: varsImport for required, varSet with defaults for optional\n const steps: BaseNode[] = []\n const requiredParams: string[] = []\n const optionalParams: Array<{ name: string; defaultValue: any }> = []\n\n for (const [name, param] of parameters.entries()) {\n if (param.required) {\n requiredParams.push(name)\n } else if (param.default !== undefined) {\n optionalParams.push({ name, defaultValue: param.default })\n } else {\n // Optional without explicit default - still import from args\n requiredParams.push(name)\n }\n }\n\n // Import required params directly from args\n if (requiredParams.length > 0) {\n steps.push({\n op: 'varsImport',\n keys: requiredParams,\n })\n }\n\n // For optional params with defaults: import from args, then check and set default if null\n for (const { name, defaultValue } of optionalParams) {\n // Import from args (will be undefined if not provided)\n steps.push({\n op: 'varsImport',\n keys: [name],\n })\n // If null/undefined, set the default\n steps.push({\n op: 'if',\n condition: {\n $expr: 'binary',\n op: '==',\n left: { $expr: 'ident', name },\n right: { $expr: 'literal', value: null },\n },\n then: [\n {\n op: 'varSet',\n key: name,\n value: defaultValue,\n },\n ],\n })\n }\n\n steps.push(...bodySteps)\n\n // Build signature\n const signatureParams = Object.fromEntries(parameters)\n const signature: FunctionSignature = {\n name: func.id?.name || 'anonymous',\n description: tdoc.description,\n parameters: signatureParams,\n returns: returnType,\n }\n\n // Generate input schema for runtime validation\n const inputSchema = parametersToJsonSchema(signatureParams)\n\n return {\n ast: { op: 'seq', steps, inputSchema },\n signature,\n warnings: ctx.warnings,\n }\n}\n\n/**\n * Transform a block statement into a list of steps\n */\nexport function transformBlock(\n block: BlockStatement,\n ctx: TransformContext\n): BaseNode[] {\n const steps: BaseNode[] = []\n\n for (const stmt of block.body) {\n const transformed = transformStatement(stmt, ctx)\n if (transformed) {\n if (Array.isArray(transformed)) {\n steps.push(...transformed)\n } else {\n steps.push(transformed)\n }\n }\n }\n\n return steps\n}\n\n/**\n * Transform a statement\n */\nexport function transformStatement(\n stmt: Statement,\n ctx: TransformContext\n): BaseNode | BaseNode[] | null {\n switch (stmt.type) {\n case 'VariableDeclaration':\n return transformVariableDeclaration(stmt as VariableDeclaration, ctx)\n\n case 'ExpressionStatement':\n return transformExpressionStatement(stmt as ExpressionStatement, ctx)\n\n case 'IfStatement':\n return transformIfStatement(stmt as IfStatement, ctx)\n\n case 'WhileStatement':\n return transformWhileStatement(stmt as WhileStatement, ctx)\n\n case 'ForOfStatement':\n return transformForOfStatement(stmt as ForOfStatement, ctx)\n\n case 'TryStatement':\n return transformTryStatement(stmt as TryStatement, ctx)\n\n case 'ReturnStatement':\n return transformReturnStatement(stmt as ReturnStatement, ctx)\n\n case 'ThrowStatement':\n throw new TranspileError(\n `'throw' is not supported in AsyncJS. Use Error('message') to trigger error flow`,\n getLocation(stmt),\n ctx.source,\n ctx.filename\n )\n\n case 'BlockStatement':\n // Nested block creates a scope\n return {\n op: 'scope',\n steps: transformBlock(stmt as BlockStatement, createChildContext(ctx)),\n }\n\n case 'EmptyStatement':\n return null\n\n default:\n throw new TranspileError(\n `Unsupported statement type: ${stmt.type}`,\n getLocation(stmt),\n ctx.source,\n ctx.filename\n )\n }\n}\n\n/**\n * Transform variable declaration: let x = value or const x = value\n */\nfunction transformVariableDeclaration(\n decl: VariableDeclaration,\n ctx: TransformContext\n): BaseNode[] {\n const steps: BaseNode[] = []\n const isConst = decl.kind === 'const'\n const opName = isConst ? 'constSet' : 'varSet'\n\n for (const declarator of decl.declarations) {\n if (declarator.id.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple variable names are supported',\n getLocation(declarator),\n ctx.source,\n ctx.filename\n )\n }\n\n const name = (declarator.id as Identifier).name\n\n if (declarator.init) {\n // Transform the initializer\n const { step, resultVar } = transformExpressionToStep(\n declarator.init,\n ctx,\n name,\n isConst\n )\n\n if (step) {\n steps.push(step)\n } else if (resultVar !== name) {\n // Simple value assignment\n steps.push({\n op: opName,\n key: name,\n value: resultVar,\n })\n }\n\n // Track variable type\n const type = inferTypeFromValue(declarator.init as Expression)\n ctx.locals.set(name, type)\n } else {\n // Uninitialized variable (only valid for let, not const)\n if (isConst) {\n throw new TranspileError(\n 'const declarations must be initialized',\n getLocation(declarator),\n ctx.source,\n ctx.filename\n )\n }\n steps.push({\n op: 'varSet',\n key: name,\n value: null,\n })\n ctx.locals.set(name, { kind: 'any', nullable: true })\n }\n }\n\n return steps\n}\n\n/**\n * Transform expression statement (e.g., function call)\n */\nfunction transformExpressionStatement(\n stmt: ExpressionStatement,\n ctx: TransformContext\n): BaseNode | null {\n const expr = stmt.expression\n\n // Assignment expression: x = value\n if (expr.type === 'AssignmentExpression') {\n return transformAssignment(expr as AssignmentExpression, ctx)\n }\n\n // Function call (side effect)\n if (expr.type === 'CallExpression') {\n const { step, resultVar } = transformExpressionToStep(expr, ctx)\n if (step) {\n return step\n }\n // If no step but we got an expression (e.g., method call on builtin),\n // we still need to evaluate it for side effects (like s.add(x))\n if (resultVar) {\n return {\n op: 'varSet',\n key: '_',\n value: resultVar,\n }\n }\n return null\n }\n\n // Other expressions (e.g., just a value) - no-op\n ctx.warnings.push({\n message: 'Expression statement has no effect',\n line: getLocation(stmt).line,\n column: getLocation(stmt).column,\n })\n\n return null\n}\n\n/**\n * Transform assignment: x = value\n */\nfunction transformAssignment(\n expr: AssignmentExpression,\n ctx: TransformContext\n): BaseNode {\n if (expr.left.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple variable assignment is supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n const name = (expr.left as Identifier).name\n const { step, resultVar } = transformExpressionToStep(expr.right, ctx, name)\n\n if (step) {\n return step\n }\n\n return {\n op: 'varSet',\n key: name,\n value: resultVar,\n }\n}\n\n/**\n * Transform if statement\n */\nfunction transformIfStatement(\n stmt: IfStatement,\n ctx: TransformContext\n): BaseNode {\n // Convert condition to ExprNode\n const condition = expressionToExprNode(stmt.test, ctx)\n\n // Transform then branch\n const thenSteps =\n stmt.consequent.type === 'BlockStatement'\n ? transformBlock(\n stmt.consequent as BlockStatement,\n createChildContext(ctx)\n )\n : ([transformStatement(stmt.consequent, ctx)].filter(\n Boolean\n ) as BaseNode[])\n\n // Transform else branch if present\n let elseSteps: BaseNode[] | undefined\n if (stmt.alternate) {\n elseSteps =\n stmt.alternate.type === 'BlockStatement'\n ? transformBlock(\n stmt.alternate as BlockStatement,\n createChildContext(ctx)\n )\n : ([transformStatement(stmt.alternate, ctx)].filter(\n Boolean\n ) as BaseNode[])\n }\n\n return {\n op: 'if',\n condition,\n then: thenSteps,\n ...(elseSteps && { else: elseSteps }),\n }\n}\n\n/**\n * Transform while statement\n */\nfunction transformWhileStatement(\n stmt: WhileStatement,\n ctx: TransformContext\n): BaseNode {\n const condition = expressionToExprNode(stmt.test, ctx)\n\n const body =\n stmt.body.type === 'BlockStatement'\n ? transformBlock(stmt.body as BlockStatement, createChildContext(ctx))\n : ([transformStatement(stmt.body, ctx)].filter(Boolean) as BaseNode[])\n\n return {\n op: 'while',\n condition,\n body,\n }\n}\n\n/**\n * Transform for...of statement into map atom\n */\nfunction transformForOfStatement(\n stmt: ForOfStatement,\n ctx: TransformContext\n): BaseNode {\n // Get the loop variable name\n let varName: string\n if (stmt.left.type === 'VariableDeclaration') {\n const decl = stmt.left.declarations[0]\n if (decl.id.type !== 'Identifier') {\n throw new TranspileError(\n 'Only simple variable names are supported in for...of',\n getLocation(stmt.left),\n ctx.source,\n ctx.filename\n )\n }\n varName = (decl.id as Identifier).name\n } else if (stmt.left.type === 'Identifier') {\n varName = (stmt.left as Identifier).name\n } else {\n throw new TranspileError(\n 'Unsupported for...of left-hand side',\n getLocation(stmt.left),\n ctx.source,\n ctx.filename\n )\n }\n\n // Get the iterable\n const items = expressionToValue(stmt.right, ctx)\n\n // Create child context with loop variable\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(varName, { kind: 'any' })\n\n // Transform body\n const steps =\n stmt.body.type === 'BlockStatement'\n ? transformBlock(stmt.body as BlockStatement, childCtx)\n : ([transformStatement(stmt.body, childCtx)].filter(\n Boolean\n ) as BaseNode[])\n\n return {\n op: 'map',\n items,\n as: varName,\n steps,\n }\n}\n\n/**\n * Transform try/catch statement\n */\nfunction transformTryStatement(\n stmt: TryStatement,\n ctx: TransformContext\n): BaseNode {\n const trySteps = transformBlock(stmt.block, createChildContext(ctx))\n\n let catchSteps: BaseNode[] | undefined\n let catchParam: string | undefined\n if (stmt.handler) {\n const catchCtx = createChildContext(ctx)\n // Add error variable to scope if named\n if (stmt.handler.param?.type === 'Identifier') {\n catchParam = (stmt.handler.param as Identifier).name\n catchCtx.locals.set(catchParam, {\n kind: 'any',\n })\n }\n catchSteps = transformBlock(stmt.handler.body, catchCtx)\n }\n\n return {\n op: 'try',\n try: trySteps,\n ...(catchSteps && { catch: catchSteps }),\n ...(catchParam && { catchParam }),\n }\n}\n\n/**\n * Transform return statement\n */\nfunction transformReturnStatement(\n stmt: ReturnStatement,\n ctx: TransformContext\n): BaseNode | BaseNode[] {\n if (!stmt.argument) {\n return { op: 'return', value: {} }\n }\n\n // Check if the return expression requires a preceding step (e.g., atom call)\n const { step, resultVar } = transformExpressionToStep(\n stmt.argument,\n ctx,\n '__returnVal__'\n )\n\n // If there's a step (atom call), emit it first, then return the result variable\n if (step) {\n return [step, { op: 'return', value: resultVar }]\n }\n\n // Otherwise, convert expression directly to a value for return\n const value = expressionToValue(stmt.argument, ctx)\n return { op: 'return', value }\n}\n\n// Known builtins that should be evaluated as expressions, not atom calls\nconst BUILTIN_OBJECTS = new Set([\n 'Math',\n 'JSON',\n 'Array',\n 'Object',\n 'String',\n 'Number',\n 'console',\n 'Date', // Date factory with static methods like Date.now()\n 'Schema', // tosijs-schema fluent API for building JSON Schemas\n])\n\nconst BUILTIN_GLOBALS = new Set([\n 'parseInt',\n 'parseFloat',\n 'isNaN',\n 'isFinite',\n 'encodeURI',\n 'decodeURI',\n 'encodeURIComponent',\n 'decodeURIComponent',\n 'Set', // Factory function for set-like objects\n 'Date', // Factory function for date-like objects\n 'filter', // Schema-based object filtering\n])\n\nconst UNSUPPORTED_BUILTINS = new Set([\n 'RegExp',\n 'Promise',\n 'Map',\n 'WeakSet',\n 'WeakMap',\n 'Symbol',\n 'Proxy',\n 'Reflect',\n 'Function',\n 'eval',\n 'setTimeout',\n 'setInterval',\n 'fetch',\n 'require',\n 'import',\n 'process',\n 'window',\n 'document',\n 'global',\n 'globalThis',\n])\n\n// Instance methods that should be evaluated as expressions, not atom calls\n// These are methods on values (strings, arrays, etc.) that have native implementations\nconst INSTANCE_METHODS = new Set([\n // String methods\n 'toUpperCase',\n 'toLowerCase',\n 'trim',\n 'trimStart',\n 'trimEnd',\n 'charAt',\n 'charCodeAt',\n 'codePointAt',\n 'concat',\n 'includes',\n 'indexOf',\n 'lastIndexOf',\n 'startsWith',\n 'endsWith',\n 'slice',\n 'substring',\n 'substr',\n 'replace',\n 'replaceAll',\n 'match',\n 'search',\n 'padStart',\n 'padEnd',\n 'repeat',\n 'normalize',\n 'localeCompare',\n 'toString',\n 'valueOf',\n 'at',\n // Array methods (that don't need special atom handling)\n 'reverse',\n 'sort',\n 'fill',\n 'copyWithin',\n 'flat',\n 'flatMap',\n 'every',\n 'some',\n 'forEach',\n // Note: map, filter, find, reduce are handled specially as atoms for lambda support\n // Set methods (from Set() builtin)\n 'add',\n 'remove',\n 'has',\n 'clear',\n 'toArray',\n 'union',\n 'intersection',\n 'diff',\n // Date methods (from Date() builtin)\n 'format',\n 'isBefore',\n 'isAfter',\n // Note: Date.add and Date.diff are method calls that return new values\n])\n\n/**\n * Check if a CallExpression is a builtin call (Math.floor, JSON.parse, etc.)\n * or an instance method call (str.toUpperCase(), arr.includes(), etc.)\n */\nfunction isBuiltinCall(expr: CallExpression): boolean {\n // Check for global functions like parseInt()\n if (expr.callee.type === 'Identifier') {\n const name = (expr.callee as Identifier).name\n return BUILTIN_GLOBALS.has(name) || UNSUPPORTED_BUILTINS.has(name)\n }\n\n // Check for method calls\n if (expr.callee.type === 'MemberExpression') {\n const member = expr.callee as MemberExpression\n\n // Check for method calls on builtin objects like Math.floor()\n if (member.object.type === 'Identifier') {\n const objName = (member.object as Identifier).name\n if (BUILTIN_OBJECTS.has(objName) || UNSUPPORTED_BUILTINS.has(objName)) {\n return true\n }\n }\n\n // Check for instance method calls like str.toUpperCase()\n if (member.property.type === 'Identifier') {\n const methodName = (member.property as Identifier).name\n if (INSTANCE_METHODS.has(methodName)) {\n return true\n }\n }\n }\n\n return false\n}\n\n/**\n * Check if a MemberExpression is accessing a builtin object (Math.PI, Number.MAX_VALUE, etc.)\n */\nfunction isBuiltinMemberAccess(expr: MemberExpression): boolean {\n if (expr.object.type === 'Identifier') {\n const objName = (expr.object as Identifier).name\n return BUILTIN_OBJECTS.has(objName) || UNSUPPORTED_BUILTINS.has(objName)\n }\n return false\n}\n\n// Error messages for unsupported builtins\nconst UNSUPPORTED_BUILTIN_MESSAGES: Record<string, string> = {\n RegExp: 'RegExp is not available. Use string methods or the regexMatch atom.',\n Promise: 'Promise is not needed. All operations are implicitly async.',\n Map: 'Map is not available. Use plain objects instead.',\n WeakSet: 'WeakSet is not available.',\n WeakMap: 'WeakMap is not available.',\n Symbol: 'Symbol is not available.',\n Proxy: 'Proxy is not available.',\n Reflect: 'Reflect is not available.',\n Function: 'Function constructor is not available. Define functions normally.',\n eval: 'eval is not available. Code is compiled, not evaluated.',\n setTimeout: 'setTimeout is not available. Use the delay atom.',\n setInterval: 'setInterval is not available. Use while loops with delay.',\n fetch: 'fetch is not available. Use the httpFetch atom.',\n require: 'require is not available. Atoms must be registered with the VM.',\n import: 'import is not available. Atoms must be registered with the VM.',\n process: 'process is not available. AsyncJS runs in a sandboxed environment.',\n window: 'window is not available. AsyncJS runs in a sandboxed environment.',\n document:\n 'document is not available. AsyncJS runs in a sandboxed environment.',\n global: 'global is not available. AsyncJS runs in a sandboxed environment.',\n globalThis: 'globalThis is not available. Use builtins directly.',\n}\n\n/**\n * Check if expression uses an unsupported builtin and return error message if so\n */\nfunction getUnsupportedBuiltinError(expr: CallExpression): string | null {\n if (expr.callee.type === 'Identifier') {\n const name = (expr.callee as Identifier).name\n if (UNSUPPORTED_BUILTINS.has(name)) {\n return (\n UNSUPPORTED_BUILTIN_MESSAGES[name] ||\n `${name} is not available in AsyncJS.`\n )\n }\n }\n\n if (expr.callee.type === 'MemberExpression') {\n const member = expr.callee as MemberExpression\n if (member.object.type === 'Identifier') {\n const objName = (member.object as Identifier).name\n if (UNSUPPORTED_BUILTINS.has(objName)) {\n return (\n UNSUPPORTED_BUILTIN_MESSAGES[objName] ||\n `${objName} is not available in AsyncJS.`\n )\n }\n }\n }\n\n return null\n}\n\n/**\n * Get helpful suggestion for 'new' expression alternatives\n */\nfunction getNewExpressionSuggestion(constructorName: string): string {\n const suggestions: Record<string, string> = {\n Date: \" Use Date() or Date('2024-01-15') instead - no 'new' needed.\",\n Set: \" Use Set([items]) instead - no 'new' needed.\",\n Map: ' Use plain objects instead of Map.',\n Array: ' Use array literals like [1, 2, 3] instead.',\n Object: ' Use object literals like { key: value } instead.',\n Error: \" Return an error object like { error: 'message' } instead.\",\n RegExp: ' Use string methods or the regexMatch atom.',\n Promise: ' Not needed - all operations are implicitly async.',\n WeakSet: ' WeakSet is not available.',\n WeakMap: ' WeakMap is not available.',\n }\n return (\n suggestions[constructorName] ||\n ' Use factory functions or object literals instead.'\n )\n}\n\n/**\n * Transform an expression, potentially into a step with a result variable\n */\nfunction transformExpressionToStep(\n expr: Expression,\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode | null; resultVar: any } {\n const varOp = isConst ? 'constSet' : 'varSet'\n\n // Unwrap ChainExpression (optional chaining wrapper)\n if (expr.type === 'ChainExpression') {\n const chain = expr as any\n // The inner expression has optional: true on the relevant nodes\n // Just recurse with the unwrapped expression\n return transformExpressionToStep(\n chain.expression as Expression,\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Check for 'new' keyword - not supported in AsyncJS\n if (expr.type === 'NewExpression') {\n const newExpr = expr as any\n let constructorName = 'constructor'\n if (newExpr.callee.type === 'Identifier') {\n constructorName = newExpr.callee.name\n }\n const suggestion = getNewExpressionSuggestion(constructorName)\n throw new TranspileError(\n `The 'new' keyword is not supported in AsyncJS.${suggestion}`,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n // Check for unsupported builtins first and give helpful error\n if (expr.type === 'CallExpression') {\n const unsupportedError = getUnsupportedBuiltinError(expr as CallExpression)\n if (unsupportedError) {\n throw new TranspileError(\n unsupportedError,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n }\n\n // Check if this is a builtin call (Math.floor, JSON.parse, parseInt, etc.)\n // Builtins are evaluated as expressions, not atom calls\n if (expr.type === 'CallExpression' && isBuiltinCall(expr as CallExpression)) {\n const exprNode = expressionToExprNode(expr, ctx)\n\n if (resultVar) {\n return {\n step: {\n op: varOp,\n key: resultVar,\n value: exprNode,\n },\n resultVar,\n }\n }\n\n return { step: null, resultVar: exprNode as any }\n }\n\n // Check if this is a builtin member access (Math.PI, Number.MAX_SAFE_INTEGER, etc.)\n if (\n expr.type === 'MemberExpression' &&\n isBuiltinMemberAccess(expr as MemberExpression)\n ) {\n const exprNode = expressionToExprNode(expr, ctx)\n\n if (resultVar) {\n return {\n step: {\n op: varOp,\n key: resultVar,\n value: exprNode,\n },\n resultVar,\n }\n }\n\n return { step: null, resultVar: exprNode as any }\n }\n\n // Function call -> atom invocation\n if (expr.type === 'CallExpression') {\n return transformCallExpression(\n expr as CallExpression,\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Template literal -> template atom\n if (expr.type === 'TemplateLiteral') {\n return transformTemplateLiteral(\n expr as TemplateLiteral,\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Binary/logical/unary expression - convert to ExprNode\n if (\n expr.type === 'BinaryExpression' ||\n expr.type === 'LogicalExpression' ||\n expr.type === 'UnaryExpression'\n ) {\n const exprNode = expressionToExprNode(expr, ctx)\n\n // If we need to store the result, emit a varSet/constSet with the expression node as value\n if (resultVar) {\n return {\n step: {\n op: varOp,\n key: resultVar,\n value: exprNode,\n },\n resultVar,\n }\n }\n\n // No storage needed, just return the expression node as the result\n return { step: null, resultVar: exprNode as any }\n }\n\n // Simple value - no step needed\n const value = expressionToValue(expr, ctx)\n return { step: null, resultVar: value }\n}\n\n/**\n * Transform a function call expression\n */\nfunction transformCallExpression(\n expr: CallExpression,\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode; resultVar: string | undefined } {\n // Get the function name\n let funcName: string\n let isMethodCall = false\n let receiver: any\n\n if (expr.callee.type === 'Identifier') {\n funcName = (expr.callee as Identifier).name\n } else if (expr.callee.type === 'MemberExpression') {\n const member = expr.callee as MemberExpression\n if (member.property.type === 'Identifier') {\n funcName = (member.property as Identifier).name\n isMethodCall = true\n receiver = expressionToValue(member.object as Expression, ctx)\n } else {\n throw new TranspileError(\n 'Computed method names are not supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n } else {\n throw new TranspileError(\n 'Only named function calls are supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n // Handle built-in method calls\n if (isMethodCall) {\n return transformMethodCall(\n funcName,\n receiver,\n expr.arguments as Expression[],\n ctx,\n resultVar,\n isConst\n )\n }\n\n // Handle console.log specially\n if (funcName === 'console' && expr.callee.type === 'MemberExpression') {\n // This would be caught above, but just in case\n }\n\n // Check if it's a known atom\n // For now, we assume any function call is an atom call\n // The VM will validate at runtime\n\n // Extract arguments\n const args = extractCallArguments(expr, ctx)\n\n return {\n step: {\n op: funcName,\n ...args,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n}\n\n/**\n * Handle method calls like arr.map(), str.slice(), etc.\n */\nfunction transformMethodCall(\n method: string,\n receiver: any,\n args: Expression[],\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode; resultVar: string | undefined } {\n switch (method) {\n case 'map':\n // arr.map(x => ...) -> map atom\n if (\n args.length > 0 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const param = callback.params[0]\n const paramName = param?.type === 'Identifier' ? param.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(paramName, { kind: 'any' })\n\n let steps: BaseNode[]\n if (callback.body.type === 'BlockStatement') {\n steps = transformBlock(callback.body, childCtx)\n } else {\n // Expression body: x => x * 2\n const { step, resultVar: exprResult } = transformExpressionToStep(\n callback.body,\n childCtx,\n 'result'\n )\n steps = step\n ? [step]\n : [{ op: 'varSet', key: 'result', value: exprResult }]\n }\n\n return {\n step: {\n op: 'map',\n items: receiver,\n as: paramName,\n steps,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'filter':\n // arr.filter(x => condition) -> filter atom\n if (\n args.length > 0 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const param = callback.params[0]\n const paramName = param?.type === 'Identifier' ? param.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(paramName, { kind: 'any' })\n\n // For filter, the callback should return a boolean expression\n // Convert the body to an ExprNode\n let condition: any\n if (callback.body.type === 'BlockStatement') {\n // Block body - look for return statement\n throw new TranspileError(\n 'filter callback must be an expression, not a block',\n getLocation(args[0]),\n ctx.source,\n ctx.filename\n )\n } else {\n // Expression body: x => x > 5\n condition = expressionToExprNode(callback.body, childCtx)\n }\n\n return {\n step: {\n op: 'filter',\n items: receiver,\n as: paramName,\n condition,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'find':\n // arr.find(x => condition) -> find atom\n if (\n args.length > 0 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const param = callback.params[0]\n const paramName = param?.type === 'Identifier' ? param.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(paramName, { kind: 'any' })\n\n let condition: any\n if (callback.body.type === 'BlockStatement') {\n throw new TranspileError(\n 'find callback must be an expression, not a block',\n getLocation(args[0]),\n ctx.source,\n ctx.filename\n )\n } else {\n condition = expressionToExprNode(callback.body, childCtx)\n }\n\n return {\n step: {\n op: 'find',\n items: receiver,\n as: paramName,\n condition,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'reduce':\n // arr.reduce((acc, x) => expr, initial) -> reduce atom\n if (\n args.length >= 2 &&\n (args[0].type === 'ArrowFunctionExpression' ||\n args[0].type === 'FunctionExpression')\n ) {\n const callback = args[0] as any\n const accParam = callback.params[0]\n const itemParam = callback.params[1]\n const accName = accParam?.type === 'Identifier' ? accParam.name : 'acc'\n const itemName =\n itemParam?.type === 'Identifier' ? itemParam.name : 'item'\n\n const childCtx = createChildContext(ctx)\n childCtx.locals.set(accName, { kind: 'any' })\n childCtx.locals.set(itemName, { kind: 'any' })\n\n let steps: BaseNode[]\n if (callback.body.type === 'BlockStatement') {\n steps = transformBlock(callback.body, childCtx)\n } else {\n // Expression body: (acc, x) => acc + x\n const { step, resultVar: exprResult } = transformExpressionToStep(\n callback.body,\n childCtx,\n 'result'\n )\n steps = step\n ? [step]\n : [{ op: 'varSet', key: 'result', value: exprResult }]\n }\n\n const initial = expressionToValue(args[1], ctx)\n\n return {\n step: {\n op: 'reduce',\n items: receiver,\n as: itemName,\n accumulator: accName,\n initial,\n steps,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n break\n\n case 'slice':\n // TODO: Could map to a slice atom\n break\n\n case 'push':\n return {\n step: {\n op: 'push',\n list: receiver,\n item: expressionToValue(args[0], ctx),\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n\n case 'join':\n return {\n step: {\n op: 'join',\n list: receiver,\n sep: args.length > 0 ? expressionToValue(args[0], ctx) : '',\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n\n case 'split':\n return {\n step: {\n op: 'split',\n str: receiver,\n sep: args.length > 0 ? expressionToValue(args[0], ctx) : '',\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n }\n\n // Unknown method - emit warning and try as generic call\n ctx.warnings.push({\n message: `Unknown method '${method}' - treating as atom call`,\n line: 0,\n column: 0,\n })\n\n return {\n step: {\n op: method,\n receiver,\n args: args.map((a) => expressionToValue(a, ctx)),\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n}\n\n/**\n * Transform template literal\n */\nfunction transformTemplateLiteral(\n expr: TemplateLiteral,\n ctx: TransformContext,\n resultVar?: string,\n isConst?: boolean\n): { step: BaseNode; resultVar: string | undefined } {\n // Build template string with {{var}} placeholders\n let tmpl = ''\n const vars: Record<string, any> = {}\n\n for (let i = 0; i < expr.quasis.length; i++) {\n tmpl += expr.quasis[i].value.cooked || expr.quasis[i].value.raw\n\n if (i < expr.expressions.length) {\n const exprNode = expr.expressions[i]\n const varName = `_${i}`\n vars[varName] = expressionToValue(exprNode as Expression, ctx)\n tmpl += `{{${varName}}}`\n }\n }\n\n return {\n step: {\n op: 'template',\n tmpl,\n vars,\n ...(resultVar && { result: resultVar }),\n ...(resultVar && isConst && { resultConst: true }),\n },\n resultVar,\n }\n}\n\n/**\n * Convert an Acorn expression to an ExprNode for direct VM evaluation.\n * This replaces the string-based condition system.\n */\nfunction expressionToExprNode(\n expr: Expression,\n ctx: TransformContext\n): ExprNode {\n switch (expr.type) {\n case 'Literal': {\n const lit = expr as Literal\n return { $expr: 'literal', value: lit.value }\n }\n\n case 'Identifier': {\n const id = expr as Identifier\n return { $expr: 'ident', name: id.name }\n }\n\n case 'MemberExpression': {\n const mem = expr as MemberExpression\n const obj = expressionToExprNode(mem.object as Expression, ctx)\n const isOptional = (mem as any).optional === true\n\n if (mem.computed) {\n // arr[0] or obj[key] - computed access\n // For now, only support literal indices\n const prop = mem.property as Expression\n if (prop.type === 'Literal') {\n return {\n $expr: 'member',\n object: obj,\n property: String((prop as Literal).value),\n computed: true,\n ...(isOptional && { optional: true }),\n }\n }\n // For computed with variable, we'd need more complex handling\n throw new TranspileError(\n 'Computed member access with variables not yet supported',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n const propName = (mem.property as Identifier).name\n return {\n $expr: 'member',\n object: obj,\n property: propName,\n ...(isOptional && { optional: true }),\n }\n }\n\n case 'ChainExpression': {\n // ChainExpression wraps optional chaining (?.)\n // Just unwrap to the inner expression which will have optional: true\n const chain = expr as any\n return expressionToExprNode(chain.expression as Expression, ctx)\n }\n\n case 'BinaryExpression': {\n const bin = expr as BinaryExpression\n return {\n $expr: 'binary',\n op: bin.operator,\n left: expressionToExprNode(bin.left as Expression, ctx),\n right: expressionToExprNode(bin.right as Expression, ctx),\n }\n }\n\n case 'LogicalExpression': {\n const log = expr as LogicalExpression\n return {\n $expr: 'logical',\n op: log.operator as '&&' | '||' | '??',\n left: expressionToExprNode(log.left as Expression, ctx),\n right: expressionToExprNode(log.right as Expression, ctx),\n }\n }\n\n case 'UnaryExpression': {\n const un = expr as any\n return {\n $expr: 'unary',\n op: un.operator,\n argument: expressionToExprNode(un.argument as Expression, ctx),\n }\n }\n\n case 'ConditionalExpression': {\n const cond = expr as any\n return {\n $expr: 'conditional',\n test: expressionToExprNode(cond.test as Expression, ctx),\n consequent: expressionToExprNode(cond.consequent as Expression, ctx),\n alternate: expressionToExprNode(cond.alternate as Expression, ctx),\n }\n }\n\n case 'ArrayExpression': {\n const arr = expr as ArrayExpression\n return {\n $expr: 'array',\n elements: arr.elements\n .filter((el): el is Expression => el !== null)\n .map((el) => expressionToExprNode(el, ctx)),\n }\n }\n\n case 'ObjectExpression': {\n const obj = expr as ObjectExpression\n const properties: { key: string; value: ExprNode }[] = []\n\n for (const prop of obj.properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? (prop.key as Identifier).name\n : String((prop.key as Literal).value)\n properties.push({\n key,\n value: expressionToExprNode(prop.value as Expression, ctx),\n })\n }\n }\n\n return { $expr: 'object', properties }\n }\n\n case 'CallExpression': {\n const call = expr as CallExpression\n\n // Handle method calls (e.g., Math.floor(x), str.toUpperCase(), arr.push(x))\n if (call.callee.type === 'MemberExpression') {\n const member = call.callee as MemberExpression\n const method =\n member.property.type === 'Identifier'\n ? (member.property as Identifier).name\n : String((member.property as Literal).value)\n\n // Check for optional chaining: obj?.method() or obj.method?.()\n const isOptional =\n (member as any).optional === true || (call as any).optional === true\n\n return {\n $expr: 'methodCall',\n object: expressionToExprNode(member.object as Expression, ctx),\n method,\n arguments: call.arguments.map((arg) =>\n expressionToExprNode(arg as Expression, ctx)\n ),\n ...(isOptional && { optional: true }),\n }\n }\n\n // Handle global function calls (e.g., parseInt(x), parseFloat(x))\n if (call.callee.type === 'Identifier') {\n const funcName = (call.callee as Identifier).name\n return {\n $expr: 'call',\n callee: funcName,\n arguments: call.arguments.map((arg) =>\n expressionToExprNode(arg as Expression, ctx)\n ),\n }\n }\n\n // Other call types not supported in expressions\n throw new TranspileError(\n 'Complex function calls in expressions should be lifted to statements',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n case 'NewExpression': {\n const newExpr = expr as any\n let constructorName = 'constructor'\n if (newExpr.callee.type === 'Identifier') {\n constructorName = newExpr.callee.name\n }\n const suggestion = getNewExpressionSuggestion(constructorName)\n throw new TranspileError(\n `The 'new' keyword is not supported in AsyncJS.${suggestion}`,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n\n case 'TemplateLiteral':\n throw new TranspileError(\n 'Template literals inside expressions are not supported. ' +\n 'Assign to a variable first: const msg = `hello ${name}`; then use msg',\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n\n default:\n throw new TranspileError(\n `Unsupported expression type in condition: ${expr.type}`,\n getLocation(expr),\n ctx.source,\n ctx.filename\n )\n }\n}\n\n// Note: extractCondition, expressionToConditionString, and extractVariablesFromExpression\n// have been removed. Use expressionToExprNode instead - it converts Acorn AST directly\n// to ExprNode format, eliminating the need for JSEP string parsing at runtime.\n\n/**\n * Convert an expression to a runtime value (for varSet, etc.)\n */\nfunction expressionToValue(expr: Expression, ctx: TransformContext): any {\n switch (expr.type) {\n case 'Literal':\n return (expr as Literal).value\n\n case 'Identifier': {\n const name = (expr as Identifier).name\n // Parameters are imported into state via varsImport at function start,\n // so we reference them as state variables (just the name string)\n // No need for $kind: 'arg' since args are copied to state\n return name\n }\n\n case 'MemberExpression': {\n const mem = expr as MemberExpression\n const isOptional = (mem as any).optional === true\n\n // If optional chaining, we need an ExprNode for proper runtime handling\n if (isOptional) {\n return expressionToExprNode(expr, ctx)\n }\n\n const objValue = expressionToValue(mem.object as Expression, ctx)\n\n // If the object resolved to an ExprNode (e.g., from nested optional chaining),\n // we need to build an ExprNode for this access too\n if (objValue && typeof objValue === 'object' && objValue.$expr) {\n const prop = mem.computed\n ? String((mem.property as Literal).value)\n : (mem.property as Identifier).name\n return {\n $expr: 'member',\n object: objValue,\n property: prop,\n ...(mem.computed && { computed: true }),\n }\n }\n\n if (mem.computed) {\n // arr[0] - would need runtime evaluation\n return `${objValue}[${expressionToValue(\n mem.property as Expression,\n ctx\n )}]`\n }\n\n const prop = (mem.property as Identifier).name\n\n // If objValue is a string path, extend it\n if (typeof objValue === 'string') {\n return `${objValue}.${prop}`\n }\n\n // If objValue is an arg ref, extend the path\n if (objValue && objValue.$kind === 'arg') {\n return { $kind: 'arg', path: `${objValue.path}.${prop}` }\n }\n\n return `${objValue}.${prop}`\n }\n\n case 'ChainExpression': {\n // Unwrap ChainExpression and process the inner expression\n const chain = expr as any\n return expressionToValue(chain.expression as Expression, ctx)\n }\n\n case 'ArrayExpression':\n return (expr as ArrayExpression).elements.map((el) =>\n el ? expressionToValue(el as Expression, ctx) : null\n )\n\n case 'ObjectExpression': {\n const result: Record<string, any> = {}\n for (const prop of (expr as ObjectExpression).properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? (prop.key as Identifier).name\n : String((prop.key as Literal).value)\n result[key] = expressionToValue(prop.value as Expression, ctx)\n }\n }\n return result\n }\n\n case 'TemplateLiteral':\n // Template literals need runtime evaluation - convert to ExprNode\n // This will throw a helpful error explaining the limitation\n return expressionToExprNode(expr, ctx)\n\n case 'CallExpression':\n // Method calls like s.toArray() used as values need to be ExprNodes\n return expressionToExprNode(expr, ctx)\n\n case 'BinaryExpression':\n case 'LogicalExpression':\n case 'UnaryExpression':\n case 'ConditionalExpression':\n // Complex expressions need to be ExprNodes for runtime evaluation\n return expressionToExprNode(expr, ctx)\n\n default:\n return null\n }\n}\n\n/**\n * Extract call arguments from a call expression\n */\nfunction extractCallArguments(\n expr: CallExpression,\n ctx: TransformContext\n): Record<string, any> {\n // If single object argument, spread it\n if (\n expr.arguments.length === 1 &&\n expr.arguments[0].type === 'ObjectExpression'\n ) {\n const obj = expr.arguments[0] as ObjectExpression\n const result: Record<string, any> = {}\n\n for (const prop of obj.properties) {\n if (prop.type === 'Property') {\n const key =\n prop.key.type === 'Identifier'\n ? (prop.key as Identifier).name\n : String((prop.key as Literal).value)\n result[key] = expressionToValue(prop.value as Expression, ctx)\n }\n }\n\n return result\n }\n\n // Otherwise, use positional args\n return {\n args: expr.arguments.map((arg) =>\n expressionToValue(arg as Expression, ctx)\n ),\n }\n}\n",
|
|
15
15
|
"/**\n * TJS Core - Essential transpiler functions without TypeScript dependency\n *\n * This module provides the core AJS transpilation functions.\n * Import from here (not ./index) to avoid pulling in the TS compiler.\n */\n\nimport type { SeqNode } from '../builder'\nimport type {\n TranspileOptions,\n TranspileResult,\n FunctionSignature,\n TypeDescriptor,\n} from './types'\nimport { parse, validateSingleFunction } from './parser'\nimport { transformFunction } from './emitters/ast'\nimport {\n transpileToJS,\n type TJSTranspileResult,\n type TJSTranspileOptions,\n} from './emitters/js'\n\nexport * from './types'\nexport {\n parse,\n preprocess,\n extractTDoc,\n validateSingleFunction,\n} from './parser'\nexport { transformFunction } from './emitters/ast'\n\n/**\n * Transpile JavaScript source code to Agent99 AST\n */\nexport function transpile(\n source: string,\n options: TranspileOptions = {}\n): TranspileResult {\n const {\n ast: program,\n returnType,\n originalSource,\n requiredParams,\n } = parse(source, {\n filename: options.filename,\n colonShorthand: true,\n vmTarget: true,\n })\n\n const func = validateSingleFunction(program, options.filename)\n\n const { ast, signature, warnings } = transformFunction(\n func,\n originalSource,\n returnType,\n options,\n requiredParams\n )\n\n return {\n ast: ast as SeqNode,\n signature,\n warnings,\n }\n}\n\n/**\n * Transpile AsyncJS source and return just the AST\n */\nexport function ajs(strings: TemplateStringsArray, ...values: any[]): SeqNode\nexport function ajs(source: string): SeqNode\nexport function ajs(\n sourceOrStrings: string | TemplateStringsArray,\n ...values: any[]\n): SeqNode {\n if (typeof sourceOrStrings === 'string') {\n return transpile(sourceOrStrings).ast\n }\n const source = sourceOrStrings.reduce(\n (acc, str, i) =>\n acc + str + (values[i] !== undefined ? String(values[i]) : ''),\n ''\n )\n return transpile(source).ast\n}\n\n/**\n * Create a function with attached signature for introspection\n */\nexport function createAgent(\n source: string,\n vm: { run: (ast: any, args: any, options?: any) => Promise<any> },\n runOptions?: { fuel?: number; capabilities?: any }\n): ((args: Record<string, any>) => Promise<any>) & {\n signature: FunctionSignature\n ast: SeqNode\n} {\n const { ast, signature } = transpile(source)\n\n const agent = async (args: Record<string, any>) => {\n const result = await vm.run(ast, args, runOptions)\n return result.result\n }\n\n ;(agent as any).signature = signature\n ;(agent as any).ast = ast\n\n return agent as any\n}\n\n/**\n * Convert TypeDescriptor to JSON Schema\n */\nfunction typeDescriptorToJsonSchema(type: TypeDescriptor): any {\n switch (type.kind) {\n case 'string':\n return { type: 'string' }\n case 'number':\n return { type: 'number' }\n case 'boolean':\n return { type: 'boolean' }\n case 'null':\n return { type: 'null' }\n case 'array':\n return {\n type: 'array',\n items: type.items ? typeDescriptorToJsonSchema(type.items) : {},\n }\n case 'object':\n if (!type.shape) {\n return { type: 'object' }\n }\n return {\n type: 'object',\n properties: Object.fromEntries(\n Object.entries(type.shape).map(([k, v]) => [\n k,\n typeDescriptorToJsonSchema(v),\n ])\n ),\n }\n case 'union':\n if (!type.members) {\n return {}\n }\n return {\n anyOf: type.members.map(typeDescriptorToJsonSchema),\n }\n case 'any':\n default:\n return {}\n }\n}\n\n/**\n * Get tool definitions from a set of agent functions\n */\nexport function getToolDefinitions(\n agents: Record<string, { signature: FunctionSignature }>\n): Array<{\n type: 'function'\n function: {\n name: string\n description?: string\n parameters: {\n type: 'object'\n properties: Record<string, any>\n required: string[]\n }\n }\n}> {\n return Object.entries(agents).map(([name, agent]) => {\n const sig = agent.signature\n\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n for (const [paramName, param] of Object.entries(sig.parameters)) {\n properties[paramName] = typeDescriptorToJsonSchema(param.type)\n if (param.description) {\n properties[paramName].description = param.description\n }\n if (param.required) {\n required.push(paramName)\n }\n }\n\n return {\n type: 'function' as const,\n function: {\n name,\n description: sig.description,\n parameters: {\n type: 'object' as const,\n properties,\n required,\n },\n },\n }\n })\n}\n\n/**\n * Transpile TJS source to JavaScript with type metadata.\n * Works as both a function and a tagged template literal.\n */\nexport function tjs(\n strings: TemplateStringsArray,\n ...values: any[]\n): TJSTranspileResult\nexport function tjs(\n source: string,\n options?: TJSTranspileOptions\n): TJSTranspileResult\nexport function tjs(\n sourceOrStrings: string | TemplateStringsArray,\n optionsOrFirstValue?: TJSTranspileOptions | any,\n ...restValues: any[]\n): TJSTranspileResult {\n if (typeof sourceOrStrings === 'string') {\n return transpileToJS(\n sourceOrStrings,\n optionsOrFirstValue as TJSTranspileOptions\n )\n }\n // Tagged template literal\n const values =\n optionsOrFirstValue !== undefined\n ? [optionsOrFirstValue, ...restValues]\n : restValues\n const source = sourceOrStrings.reduce(\n (acc, str, i) =>\n acc + str + (values[i] !== undefined ? String(values[i]) : ''),\n ''\n )\n return transpileToJS(source)\n}\n",
|
|
16
16
|
"import { s } from 'tosijs-schema'\nimport { defineAtom, resolveValue } from '../runtime'\n\n// --- Interfaces ---\n\ninterface VectorBattery {\n embed(text: string): Promise<number[]>\n}\n\ninterface StoreBattery {\n createCollection(\n name: string,\n schema?: any,\n dimension?: number\n ): Promise<void>\n vectorAdd(collection: string, doc: any): Promise<void>\n vectorSearch(\n collection: string,\n vector: number[],\n k?: number,\n filter?: any\n ): Promise<any[]>\n}\n\ninterface LLMBattery {\n predict(\n system: string,\n user: string,\n tools?: any[],\n responseFormat?: any\n ): Promise<any>\n}\n\n// --- Atoms ---\n\n// store.vectorize\nexport const storeVectorize = defineAtom(\n 'storeVectorize',\n s.object({\n text: s.string,\n model: s.string.optional,\n }),\n s.array(s.number),\n async ({ text }, ctx) => {\n const vectorCap = ctx.capabilities.vector as VectorBattery\n if (!vectorCap)\n throw new Error(\n \"Capability 'vector' missing. Ensure vector battery is loaded.\"\n )\n\n const resolvedText = resolveValue(text, ctx)\n return vectorCap.embed(resolvedText)\n },\n { docs: 'Generate embeddings using vector battery', cost: 20 }\n)\n\n// store.createCollection\nexport const storeCreateCollection = defineAtom(\n 'storeCreateCollection',\n s.object({\n collection: s.string,\n dimension: s.number.optional,\n }),\n undefined,\n async ({ collection, dimension }, ctx) => {\n const storeCap = ctx.capabilities.store as unknown as StoreBattery\n if (!storeCap?.createCollection)\n throw new Error(\n \"Capability 'store' missing or does not support createCollection.\"\n )\n\n const resolvedColl = resolveValue(collection, ctx)\n const resolvedDim = resolveValue(dimension, ctx)\n\n return storeCap.createCollection(resolvedColl, undefined, resolvedDim)\n },\n { docs: 'Create a vector store collection', cost: 5 }\n)\n\n// store.vectorAdd\nexport const storeVectorAdd = defineAtom(\n 'storeVectorAdd',\n s.object({\n collection: s.string,\n doc: s.any,\n }),\n undefined,\n async ({ collection, doc }, ctx) => {\n const storeCap = ctx.capabilities.store as unknown as StoreBattery\n if (!storeCap?.vectorAdd)\n throw new Error(\n \"Capability 'store' missing or does not support vectorAdd.\"\n )\n\n const resolvedColl = resolveValue(collection, ctx)\n const resolvedDoc = resolveValue(doc, ctx)\n\n return storeCap.vectorAdd(resolvedColl, resolvedDoc)\n },\n { docs: 'Add a document to a vector store collection', cost: 5 }\n)\n\n// store.search (Vector Search)\nexport const storeSearch = defineAtom(\n 'storeSearch',\n s.object({\n collection: s.string,\n queryVector: s.array(s.number),\n k: s.number.optional,\n filter: s.record(s.any).optional,\n }),\n s.array(s.any),\n async ({ collection, queryVector, k, filter }, ctx) => {\n const storeCap = ctx.capabilities.store as unknown as StoreBattery\n if (!storeCap?.vectorSearch)\n throw new Error(\n \"Capability 'store' missing or does not support vectorSearch.\"\n )\n\n const resolvedColl = resolveValue(collection, ctx)\n const resolvedVec = resolveValue(queryVector, ctx)\n const resolvedK = resolveValue(k, ctx) ?? 5\n const resolvedFilter = resolveValue(filter, ctx)\n\n return storeCap.vectorSearch(\n resolvedColl,\n resolvedVec,\n resolvedK,\n resolvedFilter\n )\n },\n {\n docs: 'Search vector store',\n cost: (input, ctx) => 5 + (resolveValue(input.k, ctx) ?? 5),\n }\n)\n\n// llm.predict (Enhanced with system prompt support for battery)\nexport const llmPredictBattery = defineAtom(\n 'llmPredictBattery',\n s.object({\n system: s.string.optional,\n user: s.string,\n tools: s.array(s.any).optional,\n responseFormat: s.any.optional,\n }),\n s.object({\n role: s.string.optional,\n content: s.string.optional,\n tool_calls: s.array(s.any).optional,\n }),\n async ({ system, user, tools, responseFormat }, ctx) => {\n const llmCap = ctx.capabilities.llmBattery as unknown as LLMBattery\n if (!llmCap?.predict)\n throw new Error(\"Capability 'llmBattery' missing or invalid.\")\n\n const resolvedSystem =\n resolveValue(system, ctx) ?? 'You are a helpful agent.'\n const resolvedUser = resolveValue(user, ctx)\n const resolvedTools = resolveValue(tools, ctx)\n const resolvedFormat = resolveValue(responseFormat, ctx)\n\n return llmCap.predict(\n resolvedSystem,\n resolvedUser,\n resolvedTools,\n resolvedFormat\n )\n },\n { docs: 'Generate completion using LLM battery', cost: 100 }\n)\n\n// Vision battery interface (multimodal)\ninterface VisionBattery {\n predict(\n system: string,\n user: { text: string; images?: string[] },\n tools?: any[],\n responseFormat?: any\n ): Promise<any>\n}\n\n// llm.vision - Analyze images using a vision-capable model\nexport const llmVision = defineAtom(\n 'llmVision',\n s.object({\n system: s.string.optional,\n prompt: s.string,\n images: s.array(s.string), // URLs or data URIs (data:image/...;base64,...)\n responseFormat: s.any.optional,\n }),\n s.object({\n role: s.string.optional,\n content: s.string.optional,\n tool_calls: s.array(s.any).optional,\n }),\n async ({ system, prompt, images, responseFormat }, ctx) => {\n const llmCap = ctx.capabilities.llmBattery as unknown as VisionBattery\n if (!llmCap?.predict)\n throw new Error(\"Capability 'llmBattery' missing or invalid.\")\n\n const resolvedSystem =\n resolveValue(system, ctx) ??\n 'You analyze images accurately and concisely.'\n const resolvedPrompt = resolveValue(prompt, ctx)\n const resolvedImages = resolveValue(images, ctx) ?? []\n const resolvedFormat = resolveValue(responseFormat, ctx)\n\n return llmCap.predict(\n resolvedSystem,\n { text: resolvedPrompt, images: resolvedImages },\n undefined,\n resolvedFormat\n )\n },\n { docs: 'Analyze images using a vision model', timeoutMs: 120000, cost: 150 }\n)\n",
|
|
17
17
|
"import {\n storeCreateCollection,\n storeSearch,\n storeVectorAdd,\n storeVectorize,\n llmPredictBattery,\n llmVision,\n} from './batteries'\nimport { coreAtoms } from '../runtime'\n\nexport const batteryAtoms = {\n storeCreateCollection,\n storeSearch,\n storeVectorAdd,\n storeVectorize,\n llmPredictBattery,\n llmVision,\n}\n\nexport { coreAtoms }\n"
|
|
18
18
|
],
|
|
19
|
-
"mappings": "AAAA,YAAS,cAAG,aAAU,uBAGtB,IAAM,GAAY,OAAO,IAAI,YAAY,EAMzC,SAAS,EAAmB,CAAC,EAAY,EAAqB,CAE5D,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,MAAe,WAEjC,OAAQ,EAAU,IAAW,CAAC,EAEhC,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,MAAe,WAEjC,OAAQ,EAAU,IAAW,CAAC,EAIhC,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,SAAW,WAE7B,OAAQ,EAAU,OAAO,CAAC,EAE5B,GACE,IAAM,MACN,OAAO,IAAM,UACb,OAAQ,EAAU,SAAW,WAE7B,OAAQ,EAAU,OAAO,CAAC,EAG5B,GAAI,IAAM,EAAG,MAAO,GAGpB,IAAK,IAAM,MAAQ,IAAM,UAAe,IAAM,MAAQ,IAAM,QAC1D,MAAO,GAET,GAAI,IAAM,MAAQ,IAAM,QAAa,IAAM,MAAQ,IAAM,OACvD,MAAO,GAET,GAAI,OAAO,IAAM,OAAO,EAAG,MAAO,GAClC,GAAI,OAAO,IAAM,SAAU,MAAO,GAGlC,GAAI,MAAM,QAAQ,CAAC,GAAK,MAAM,QAAQ,CAAC,EAAG,CACxC,GAAI,EAAE,SAAW,EAAE,OAAQ,MAAO,GAClC,OAAO,EAAE,MAAM,CAAC,EAAG,IAAM,GAAoB,EAAG,EAAE,EAAE,CAAC,EAEvD,GAAI,MAAM,QAAQ,CAAC,IAAM,MAAM,QAAQ,CAAC,EAAG,MAAO,GAGlD,IAAM,EAAQ,OAAO,KAAK,CAAW,EAC/B,EAAQ,OAAO,KAAK,CAAW,EACrC,GAAI,EAAM,SAAW,EAAM,OAAQ,MAAO,GAC1C,OAAO,EAAM,MAAM,CAAC,IAAM,GAAqB,EAAU,GAAK,EAAU,EAAE,CAAC,EAUtE,MAAM,CAAW,CACb,OAAS,GACT,QACA,GACA,MAET,WAAW,CAAC,EAAiB,EAAY,EAAe,CACtD,KAAK,QAAU,EACf,KAAK,GAAK,EACV,KAAK,MAAQ,EAGf,QAAQ,EAAW,CACjB,MAAO,cAAc,KAAK,QAAQ,KAAK,UAGzC,MAAM,EAAkD,CACtD,MAAO,CAAE,OAAQ,GAAM,QAAS,KAAK,QAAS,GAAI,KAAK,EAAG,EAE9D,CAKO,SAAS,EAAY,CAAC,EAAiC,CAC5D,OAAO,aAAiB,GAAe,GAAS,EAAM,SAAW,GAqH5D,IAAM,GAAiB,IAAI,IAGrB,GAAwB,QAGxB,GAAuB,OAGvB,GAAyB,QAK/B,SAAS,EAAgB,CAAC,EAA6B,CAC5D,OAAO,OAAO,IAAU,UAAY,EAAM,WAAW,EAAsB,EAOtE,SAAS,EAAqB,CAAC,EAAoB,CACxD,IAAM,EAAQ,GAAe,IAAI,CAAK,EACtC,GAAI,CAAC,EACH,MAAU,MAAM,wBAAwB,GAAO,EAEjD,GAAI,KAAK,IAAI,EAAI,EAAM,UAErB,MADA,GAAe,OAAO,CAAK,EACjB,MAAM,sBAAsB,GAAO,EAE/C,OAAO,EAAM,IAMf,SAAS,EAAsB,EAAW,CACxC,GAAI,OAAO,OAAW,KAAe,OAAO,WAC1C,OAAO,GAAyB,OAAO,WAAW,EAGpD,OACE,GACA,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAClC,KAAK,IAAI,EAAE,SAAS,EAAE,EAU1B,IAAM,GAAuB,IAAI,IAAI,CAAC,YAAa,cAAe,WAAW,CAAC,EAK9E,SAAS,EAAkB,CAAC,EAAoB,CAC9C,GAAI,GAAqB,IAAI,CAAI,EAC/B,MAAU,MAAM,8BAA8B,iBAAoB,EAQtE,IAAM,GAAgB,IAAI,IAAI,CAC5B,YACA,YACA,UACA,QACA,0BACF,CAAC,EAED,SAAS,EAAY,CAAC,EAA4B,CAChD,GAAI,CACF,IAAM,EAAM,IAAI,IAAI,CAAS,EAG7B,GAAI,EAAI,WAAa,SAAW,EAAI,WAAa,SAC/C,MAAO,GAGT,IAAM,EAAO,EAAI,SAAS,YAAY,EAGtC,GAAI,GAAc,IAAI,CAAI,EAAG,MAAO,GAGpC,GAAI,EAAK,SAAS,WAAW,GAAK,EAAK,SAAS,QAAQ,EAAG,MAAO,GAGlE,GAAI,IAAS,kBAAmB,MAAO,GAGvC,GACE,QAAQ,KAAK,CAAI,GACjB,cAAc,KAAK,CAAI,GACvB,6BAA6B,KAAK,CAAI,EAEtC,MAAO,GAGT,MAAO,GACP,KAAM,CACN,MAAO,IAQX,SAAS,EAAiB,CAAC,EAA0B,CAEnD,GAAI,yBAAyB,KAAK,CAAO,EAAG,MAAO,GAGnD,GAAI,uBAAuB,KAAK,CAAO,EAAG,MAAO,GAGjD,GAAI,aAAa,KAAK,CAAO,EAAG,MAAO,GACvC,GAAI,aAAa,KAAK,CAAO,EAAG,MAAO,GACvC,GAAI,iBAAiB,KAAK,CAAO,EAAG,MAAO,GAE3C,MAAO,GASF,SAAS,EAAgB,CAAC,EAAqC,CACpE,MAAO,IACF,EACH,MAAO,OAAO,OAAO,EAAI,KAAK,CAChC,EAMF,SAAS,EAAW,CAClB,EACA,EACqB,CACrB,IAAM,EAA4B,CAAC,EAC7B,EAAU,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,CAAM,EAAG,GAAG,OAAO,KAAK,CAAK,CAAC,CAAC,EAEvE,QAAW,KAAO,EAAS,CACzB,IAAM,EAAY,EAAO,GACnB,EAAW,EAAM,GAEvB,GAAI,IAAa,EAGf,EAAK,GAAO,EAGhB,OAAO,EAGF,SAAS,CAAY,CAAC,EAAU,EAA0B,CAC/D,GAAI,GAAO,OAAO,IAAQ,UAAY,EAAI,QAAU,MAClD,OAAO,EAAI,KAAK,EAAI,MAGtB,GAAI,GAAO,OAAO,IAAQ,UAAY,EAAI,MACxC,OAAO,EAAa,EAAK,CAAG,EAE9B,GAAI,OAAO,IAAQ,SAAU,CAG3B,GAAI,EAAI,WAAW,OAAO,GAAK,EAAE,SAAU,EAAI,OAC7C,OAAO,EAAI,KAAK,EAAI,QAAQ,QAAS,EAAE,GAGzC,GAAI,EAAI,SAAS,GAAG,EAAG,CACrB,IAAM,EAAQ,EAAI,MAAM,GAAG,EAE3B,QAAW,KAAQ,EACjB,GAAI,GAAqB,IAAI,CAAI,EAC/B,MAAU,MAAM,8BAA8B,iBAAoB,EAGtE,IAAI,EAAU,EAAI,MAAM,EAAM,IAE9B,GAAI,IAAY,OAAW,CACzB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,EAAU,IAAU,EAAM,IAE5B,OAAO,GAKX,GAAI,KAAO,EAAI,MACb,OAAO,EAAI,MAAM,GAGnB,OAAO,EAGT,GACE,GACA,OAAO,IAAQ,UACf,CAAC,MAAM,QAAQ,CAAG,GAClB,EAAI,cAAgB,OACpB,CACA,IAAM,EAA8B,CAAC,EACrC,QAAW,KAAO,OAAO,KAAK,CAAG,EAC/B,EAAO,GAAO,EAAa,EAAI,GAAM,CAAG,EAE1C,OAAO,EAGT,GAAI,MAAM,QAAQ,CAAG,EACnB,OAAO,EAAI,IAAI,CAAC,IAAS,EAAa,EAAM,CAAG,CAAC,EAElD,OAAO,EA6CT,SAAS,EAAkB,CACzB,EACA,EACA,EACK,CACL,OAAO,IAAI,MAAM,EAAW,CAC1B,GAAG,CAAC,EAAQ,EAAc,CACxB,GAAI,KAAQ,EACV,OAAO,EAAO,GAEhB,IAAM,EAAM,IAAe,GAC3B,GAAI,EACF,MAAU,MAAM,GAAG,KAAQ,uBAA0B,GAAK,EAE5D,MAAU,MACR,GAAG,KAAQ,2DAA8D,YAC3E,EAEJ,CAAC,EAYH,SAAS,EAAsB,CAAC,EAAmB,CACjD,GAAI,IAAY,KACd,MAAO,CAAE,KAAM,MAAO,EAGxB,GAAI,IAAY,OACd,MAAO,CAAC,EAIV,GACE,OAAO,IAAY,UACnB,IAAY,MACZ,SAAU,GACV,OAAO,EAAQ,OAAS,SAExB,OAAO,EAIT,GACE,OAAO,IAAY,UACnB,IAAY,MACZ,WAAY,GACZ,OAAO,EAAQ,SAAW,SAE1B,OAAO,EAAQ,OAGjB,IAAM,EAAO,OAAO,EAEpB,GAAI,IAAS,SACX,MAAO,CAAE,KAAM,QAAS,EAG1B,GAAI,IAAS,SACX,OAAO,OAAO,UAAU,CAAO,EAAI,CAAE,KAAM,SAAU,EAAI,CAAE,KAAM,QAAS,EAG5E,GAAI,IAAS,UACX,MAAO,CAAE,KAAM,SAAU,EAG3B,GAAI,MAAM,QAAQ,CAAO,EAAG,CAC1B,GAAI,EAAQ,SAAW,EACrB,MAAO,CAAE,KAAM,OAAQ,EAGzB,MAAO,CACL,KAAM,QACN,MAAO,GAAuB,EAAQ,EAAE,CAC1C,EAGF,GAAI,IAAS,SAAU,CACrB,IAAM,EAAkC,CAAC,EACnC,EAAqB,CAAC,EAE5B,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAO,EAC/C,EAAW,GAAO,GAAuB,CAAK,EAC9C,EAAS,KAAK,CAAG,EAGnB,MAAO,CACL,KAAM,SACN,aACA,UACF,EAIF,MAAO,CAAC,EAOH,IAAM,GAAgC,CAE3C,KAAM,GAAmB,OAAQ,CAE/B,GAAI,KAAK,GACT,EAAG,KAAK,EACR,IAAK,KAAK,IACV,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,OAAQ,KAAK,OACb,MAAO,KAAK,MACZ,QAAS,KAAK,QAGd,IAAK,KAAK,IACV,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,KAAM,KAAK,KACX,KAAM,KAAK,KACX,IAAK,KAAK,IACV,IAAK,KAAK,IACV,MAAO,KAAK,MACZ,IAAK,KAAK,IACV,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,IAAK,KAAK,IACV,IAAK,KAAK,IACV,IAAK,KAAK,IACV,KAAM,KAAK,KACX,KAAM,KAAK,KACX,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,KAAM,KAAK,KACX,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,IAAK,KAAK,IACV,IAAK,KAAK,IACV,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,OAAQ,KAAK,OAGb,OAAQ,IAAM,CACZ,GAAI,OAAO,OAAW,KAAe,OAAO,gBAAiB,CAC3D,IAAM,EAAM,IAAI,YAAY,CAAC,EAE7B,OADA,OAAO,gBAAgB,CAAG,EACnB,EAAI,GAAM,WAEnB,OAAO,KAAK,OAAO,EAEvB,CAAC,EAGD,KAAM,GAAmB,OAAQ,CAC/B,MAAO,CAAC,IAAiB,KAAK,MAAM,CAAI,EACxC,UAAW,CAAC,EAAY,EAAgB,IACtC,KAAK,UAAU,EAAO,EAAU,CAAK,CACzC,CAAC,EAGD,QAAS,GACP,UACA,CACE,IAAK,IAAI,IAAiB,CAIxB,QAEF,KAAM,IAAI,IAAc,CAAG,QAC3B,MAAO,IAAI,IAAc,CAAG,QAC5B,KAAM,IAAI,IAAc,CAAG,OAC7B,EACA,CACE,MAAO,2DACP,IAAK,2BACL,MAAO,4CACT,CACF,EAGA,MAAO,GACL,QACA,CACE,QAAS,CAAC,IAAe,MAAM,QAAQ,CAAK,EAC5C,KAAM,CAAC,EAAe,EAAa,IACjC,MAAM,KAAK,EAAU,EAAO,CAAO,EACrC,GAAI,IAAI,IAAiB,MAAM,GAAG,GAAG,CAAK,CAC5C,EACA,CACE,UAAW,kCACb,CACF,EAGA,OAAQ,GACN,SACA,CACE,KAAM,CAAC,IAAa,OAAO,KAAK,CAAG,EACnC,OAAQ,CAAC,IAAa,OAAO,OAAO,CAAG,EACvC,QAAS,CAAC,IAAa,OAAO,QAAQ,CAAG,EACzC,YAAa,CAAC,IAAiB,OAAO,YAAY,CAAO,EACzD,OAAQ,CAAC,KAAgB,IACvB,OAAO,OAAO,CAAC,EAAG,EAAQ,GAAG,CAAO,EACtC,OAAQ,CAAC,EAAU,IAAiB,OAAO,OAAO,EAAK,CAAI,CAC7D,EACA,CACE,UAAW,mCACX,OAAQ,+BACR,eAAgB,0CAChB,eAAgB,mCAChB,eAAgB,wCAClB,CACF,EAGA,OAAQ,GAAmB,SAAU,CACnC,aAAc,IAAI,IAAoB,OAAO,aAAa,GAAG,CAAK,EAClE,cAAe,IAAI,IACjB,OAAO,cAAc,GAAG,CAAU,CACtC,CAAC,EAGD,OAAQ,GAAmB,SAAU,CACnC,MAAO,OAAO,MACd,SAAU,OAAO,SACjB,UAAW,OAAO,UAClB,cAAe,OAAO,cACtB,WACA,SACA,UAAW,OAAO,UAClB,UAAW,OAAO,UAClB,iBAAkB,OAAO,iBACzB,iBAAkB,OAAO,iBACzB,kBAAmB,OAAO,kBAC1B,kBAAmB,OAAO,kBAC1B,IAAK,OAAO,IACZ,QAAS,OAAO,OAClB,CAAC,EAGD,SACA,WACA,MACA,SACA,UACA,UACA,mBACA,mBAGA,UAAW,OACX,KAAM,KACN,IAAK,IACL,SAAU,IAIV,OAAQ,CAAC,EAAW,IAAqB,CAEvC,IAAM,EAAa,GAAuB,CAAM,EAC1C,EAAS,GAAa,EAAM,CAAU,EAC5C,GAAI,aAAkB,MACpB,MAAM,EAER,OAAO,GAMT,OAAQ,IAEH,EAIH,SAAU,CAAC,EAAc,IAAyB,CAChD,IAAM,EACJ,GAAiB,QAAU,KACvB,EAAgB,OAChB,GAAuB,CAAe,EAE5C,MAAO,CACL,KAAM,cACN,YAAa,CACX,OACA,OAAQ,GACR,OAAQ,CACV,CACF,GAIF,YAAa,CAAC,IAAiB,GAAuB,CAAO,EAG7D,QAAS,CAAC,EAAW,IAAkC,CACrD,GAAI,GAAiB,QAAU,KAC7B,OAAO,GAAS,EAAM,CAAe,EAEvC,OAAO,GAAS,EAAM,GAAuB,CAAe,CAAC,EAEjE,EAGA,IAAK,CAAC,EAAe,CAAC,IAAM,CAC1B,IAAM,EAAO,CAAC,GAAG,IAAI,WAAW,IAAI,CAAK,CAAC,EAC1C,MAAO,CAEL,GAAG,CAAC,EAAW,CACb,GAAI,CAAC,EAAK,SAAS,CAAI,EACrB,EAAK,KAAK,CAAI,EAEhB,OAAO,MAET,MAAM,CAAC,EAAW,CAChB,IAAM,EAAM,EAAK,QAAQ,CAAI,EAC7B,GAAI,IAAQ,GACV,EAAK,OAAO,EAAK,CAAC,EAEpB,OAAO,MAET,KAAK,EAAG,CAEN,OADA,EAAK,OAAS,EACP,MAGT,GAAG,CAAC,EAAW,CACb,OAAO,EAAK,SAAS,CAAI,MAEvB,KAAI,EAAG,CACT,OAAO,EAAK,QAEd,OAAO,EAAG,CACR,MAAO,CAAC,GAAG,CAAI,GAGjB,KAAK,CAAC,EAAY,CAChB,IAAM,EAAa,GAAO,UAAU,GAAK,GAAS,CAAC,EACnD,OAAO,GAAS,IAAI,CAAC,GAAG,EAAM,GAAG,CAAU,CAAC,GAE9C,YAAY,CAAC,EAAY,CACvB,IAAM,EAAa,GAAO,UAAU,GAAK,GAAS,CAAC,EACnD,OAAO,GAAS,IAAI,EAAK,OAAO,CAAC,IAAW,EAAW,SAAS,CAAC,CAAC,CAAC,GAErE,IAAI,CAAC,EAAY,CACf,IAAM,EAAa,GAAO,UAAU,GAAK,GAAS,CAAC,EACnD,OAAO,GAAS,IAAI,EAAK,OAAO,CAAC,IAAW,CAAC,EAAW,SAAS,CAAC,CAAC,CAAC,GAGtE,OAAO,CAAC,EAAyB,CAC/B,EAAK,QAAQ,CAAE,GAEjB,GAAG,CAAC,EAAwB,CAC1B,OAAO,GAAS,IAAI,EAAK,IAAI,CAAE,CAAC,GAElC,MAAM,CAAC,EAA4B,CACjC,OAAO,GAAS,IAAI,EAAK,OAAO,CAAE,CAAC,GAGrC,MAAM,EAAG,CACP,MAAO,CAAC,GAAG,CAAI,EAEnB,GAKF,MAAO,IAAM,CACX,IAAM,EAAa,CAAC,KAA6B,IAE3C,MAAK,EAAG,CACV,OAAO,EAAE,YAAY,MAEnB,UAAS,EAAG,CACd,OAAO,EAAE,QAAQ,MAGf,KAAI,EAAG,CACT,OAAO,EAAE,YAAY,MAEnB,MAAK,EAAG,CACV,OAAO,EAAE,SAAS,EAAI,MAEpB,IAAG,EAAG,CACR,OAAO,EAAE,QAAQ,MAEf,MAAK,EAAG,CACV,OAAO,EAAE,SAAS,MAEhB,QAAO,EAAG,CACZ,OAAO,EAAE,WAAW,MAElB,QAAO,EAAG,CACZ,OAAO,EAAE,WAAW,MAElB,UAAS,EAAG,CACd,OAAO,EAAE,OAAO,GAGlB,GAAG,EACD,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,KAAK,GASH,CAAC,EAAG,CACN,IAAM,EAAU,IAAI,WAAW,KAAK,EAAE,QAAQ,CAAC,EAC/C,GAAI,EAAO,EAAQ,YAAY,EAAQ,YAAY,EAAI,CAAK,EAC5D,GAAI,EAAQ,EAAQ,SAAS,EAAQ,SAAS,EAAI,CAAM,EACxD,GAAI,EAAM,EAAQ,QAAQ,EAAQ,QAAQ,EAAI,CAAI,EAClD,GAAI,EAAO,EAAQ,SAAS,EAAQ,SAAS,EAAI,CAAK,EACtD,GAAI,EAAS,EAAQ,WAAW,EAAQ,WAAW,EAAI,CAAO,EAC9D,GAAI,EAAS,EAAQ,WAAW,EAAQ,WAAW,EAAI,CAAO,EAC9D,GAAI,EAAI,EAAQ,gBAAgB,EAAQ,gBAAgB,EAAI,CAAE,EAC9D,OAAO,EAAW,CAAO,GAG3B,IAAI,CACF,EACA,EAAwD,KACxD,CACA,IAAM,EACJ,OAAO,IAAU,UAAY,EAAM,UAC/B,EAAM,UACN,IAAI,WAAW,KAAK,CAAK,EAAE,QAAQ,EACnC,EAAS,EAAE,QAAQ,EAAI,EAC7B,OAAQ,OACD,UACH,OAAO,EAAS,SACb,UACH,OAAO,EAAU,UACd,QACH,OAAO,EAAU,YACd,OACH,OAAO,EAAU,iBAEjB,OAAO,IAIb,MAAM,CAAC,EAAM,MAAO,CAClB,GAAI,IAAQ,MAAO,OAAO,EAAE,YAAY,EACxC,GAAI,IAAQ,OAAQ,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,GACtD,GAAI,IAAQ,OAAQ,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAEpE,OAAO,EACJ,QAAQ,OAAQ,OAAO,EAAE,YAAY,CAAC,CAAC,EACvC,QAAQ,KAAM,OAAO,EAAE,SAAS,EAAI,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EACvD,QAAQ,KAAM,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EAClD,QAAQ,KAAM,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EACnD,QAAQ,KAAM,OAAO,EAAE,WAAW,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EACrD,QAAQ,KAAM,OAAO,EAAE,WAAW,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,GAG1D,QAAQ,CAAC,EAAY,CACnB,IAAM,EACJ,OAAO,IAAU,UAAY,EAAM,UAC/B,EAAM,UACN,IAAI,WAAW,KAAK,CAAK,EAAE,QAAQ,EACzC,OAAO,EAAE,QAAQ,EAAI,GAEvB,OAAO,CAAC,EAAY,CAClB,IAAM,EACJ,OAAO,IAAU,UAAY,EAAM,UAC/B,EAAM,UACN,IAAI,WAAW,KAAK,CAAK,EAAE,QAAQ,EACzC,OAAO,EAAE,QAAQ,EAAI,GAGvB,QAAQ,EAAG,CACT,OAAO,EAAE,YAAY,GAGvB,MAAM,EAAG,CACP,OAAO,EAAE,YAAY,EAEzB,GAGM,EAAc,CAAC,IAA2B,CAC9C,IAAM,EACJ,IAAS,OAAY,IAAI,WAAW,KAAK,CAAI,EAAI,IAAI,WAAW,KAClE,GAAI,MAAM,EAAK,QAAQ,CAAC,EACtB,MAAU,MAAM,iBAAiB,GAAM,EAEzC,OAAO,EAAW,CAAI,GAOxB,OAHA,EAAY,IAAM,IAAM,WAAW,KAAK,IAAI,EAC5C,EAAY,MAAQ,CAAC,IAAgB,EAAW,IAAI,WAAW,KAAK,CAAG,CAAC,EAEjE,IACN,CACL,EAGM,GAA8C,CAClD,OAAQ,sEACR,QAAS,8DACT,IAAK,mDACL,QAAS,4BACT,QAAS,4BACT,OAAQ,2BACR,MAAO,0BACP,QAAS,4BACT,SAAU,oEACV,KAAM,0DACN,WAAY,mDACZ,YAAa,4DACb,MAAO,kDACP,QAAS,kEACT,OAAQ,iEACR,QAAS,qEACT,OAAQ,oEACR,SACE,sEACF,OAAQ,oEACR,WAAY,qDACd,EAGM,GAAiB,KAGjB,GAAuB,OAGvB,GAAyB,MAGzB,GAAqB,IAAI,IAAI,CAEjC,SACA,QACA,MACA,SACA,UACA,OACA,aACA,WACA,YAEA,SACA,WACA,SACA,QACA,OACA,UACA,aACA,YACA,SACA,OACA,YACA,UACA,cACA,cAEA,QACA,WAEA,QACA,WACF,CAAC,EAOM,SAAS,CAAY,CAAC,EAAgB,EAA0B,CAErE,GAAI,IAAS,MAAQ,IAAS,OAC5B,OAAO,EAET,GAAI,OAAO,IAAS,UAAY,EAAE,UAAW,GAE3C,OAAO,EAIT,GAAI,EAAI,MAEN,GADA,EAAI,KAAK,SAAW,GAChB,EAAI,KAAK,SAAW,EACtB,MAAU,MAAM,aAAa,EAIjC,OAAQ,EAAK,WACN,UACH,OAAO,EAAK,UAET,QAAS,CAEZ,GAAI,EAAK,QAAQ,EAAI,MACnB,OAAO,EAAI,MAAM,EAAK,MAExB,GAAI,EAAK,QAAQ,EAAI,KACnB,OAAO,EAAI,KAAK,EAAK,MAGvB,GAAI,EAAK,QAAQ,GACf,OAAO,GAAS,EAAK,MAGvB,GAAI,EAAK,QAAQ,GACf,MAAU,MAAM,GAAoB,EAAK,KAAK,EAEhD,MACF,KAEK,SAAU,CACb,IAAM,EAAM,EAAa,EAAK,OAAQ,CAAG,EAGzC,GAAI,EAAK,WAAa,IAAQ,MAAQ,IAAQ,QAC5C,OAGF,IAAM,EAAO,EAAK,SAGlB,OAFA,GAAmB,CAAI,EAEhB,IAAM,EACf,KAEK,SAAU,CACb,IAAM,EAAO,EAAa,EAAK,KAAM,CAAG,EAClC,EAAQ,EAAa,EAAK,MAAO,CAAG,EAE1C,OAAQ,EAAK,QACN,IAAK,CACR,IAAM,EAAS,EAAO,EAEtB,GAAI,OAAO,IAAW,UAAY,EAAI,MAEpC,GADA,EAAI,KAAK,SAAW,EAAO,OAAS,GAChC,EAAI,KAAK,SAAW,EAAG,CACzB,EAAI,MAAQ,IAAI,EAAW,cAAe,aAAa,EACvD,QAGJ,OAAO,CACT,KACK,IACH,OAAO,EAAO,MACX,IACH,OAAO,EAAO,MACX,IACH,OAAO,EAAO,MACX,IACH,OAAO,EAAO,MACX,KACH,OAAO,GAAQ,MACZ,IACH,OAAO,EAAO,MACX,IACH,OAAO,EAAO,MACX,KACH,OAAO,GAAQ,MACZ,KACH,OAAO,GAAQ,MACZ,KACH,OAAO,GAAoB,EAAM,CAAK,MACnC,KACH,MAAO,CAAC,GAAoB,EAAM,CAAK,MACpC,MACH,OAAO,IAAS,MACb,MACH,OAAO,IAAS,UAEhB,MAAU,MAAM,4BAA4B,EAAK,IAAI,EAE3D,KAEK,QAAS,CACZ,IAAM,EAAM,EAAa,EAAK,SAAU,CAAG,EAC3C,OAAQ,EAAK,QACN,IACH,MAAO,CAAC,MACL,IACH,MAAO,CAAC,MACL,IACH,MAAO,CAAC,MACL,SACH,OAAO,OAAO,UAEd,MAAU,MAAM,2BAA2B,EAAK,IAAI,EAE1D,KAEK,UAAW,CAEd,IAAM,EAAO,EAAa,EAAK,KAAM,CAAG,EACxC,GAAI,EAAK,KAAO,KACd,OAAO,EAAO,EAAa,EAAK,MAAO,CAAG,EAAI,EACzC,QAAI,EAAK,KAAO,KAErB,OAAO,GAAQ,EAAa,EAAK,MAAO,CAAG,EAG3C,YAAO,EAAO,EAAO,EAAa,EAAK,MAAO,CAAG,CAErD,KAEK,cAEH,OADa,EAAa,EAAK,KAAM,CAAG,EAEpC,EAAa,EAAK,WAAY,CAAG,EACjC,EAAa,EAAK,UAAW,CAAG,MAGjC,QACH,OAAO,EAAK,SAAS,IAAI,CAAC,IAAO,EAAa,EAAI,CAAG,CAAC,MAEnD,SAAU,CACb,IAAM,EAA8B,CAAC,EACrC,QAAW,KAAQ,EAAK,WACtB,EAAO,EAAK,KAAO,EAAa,EAAK,MAAO,CAAG,EAEjD,OAAO,CACT,KAEK,OAAQ,CAEX,GAAI,EAAK,SAAW,QAAS,CAC3B,IAAM,EAAO,EAAK,UAAU,IAAI,CAAC,IAAQ,EAAa,EAAK,CAAG,CAAC,EACzD,EAAU,OAAO,EAAK,KAAO,SAAW,EAAK,GAAK,QACxD,EAAI,MAAQ,IAAI,EAAW,EAAS,OAAO,EAC3C,OAIF,GAAI,EAAK,UAAU,GAAU,CAC3B,IAAM,EAAK,GAAS,EAAK,QACzB,GAAI,OAAO,IAAO,WAAY,CAC5B,IAAM,EAAO,EAAK,UAAU,IAAI,CAAC,IAAQ,EAAa,EAAK,CAAG,CAAC,EAC/D,OAAO,EAAG,GAAG,CAAI,GAKrB,GAAI,CADS,EAAI,SAAS,EAAK,MAAM,EAC1B,CAET,GAAI,EAAK,UAAU,GACjB,MAAU,MAAM,GAAoB,EAAK,OAAO,EAElD,MAAU,MAAM,qBAAqB,EAAK,QAAQ,EAIpD,MAAU,MACR,gDAAgD,EAAK,QACvD,CACF,KAEK,aAAc,CAEjB,IAAM,EAAM,EAAa,EAAK,OAAQ,CAAG,EAGzC,GAAI,EAAK,WAAa,IAAQ,MAAQ,IAAQ,QAC5C,OAGF,IAAM,EAAS,EAAK,OAGpB,GAFA,GAAmB,CAAM,EAErB,IAAQ,MAAQ,IAAQ,OAC1B,MAAU,MAAM,uBAAuB,SAAc,GAAK,EAG5D,IAAM,EAAK,EAAI,GACf,GAAI,OAAO,IAAO,WAChB,MAAU,MAAM,IAAI,sBAA2B,EAGjD,IAAM,EAAO,EAAK,UAAU,IAAI,CAAC,IAAQ,EAAa,EAAK,CAAG,CAAC,EACzD,EAAS,EAAG,MAAM,EAAK,CAAI,EAGjC,GAAI,EAAI,MAAQ,GAAmB,IAAI,CAAM,EAAG,CAC9C,IAAI,EAAW,EACf,GAAI,OAAO,IAAW,SACpB,EAAW,EAAO,OAAS,GACtB,QAAI,MAAM,QAAQ,CAAM,EAC7B,EAAW,EAAO,OAAS,GACtB,QAAI,OAAO,IAAW,UAAY,IAAW,KAIlD,EADa,OAAO,KAAK,CAAM,EACf,OAAS,GAG3B,GADA,EAAI,KAAK,SAAW,EAChB,EAAI,KAAK,SAAW,EAAG,CACzB,EAAI,MAAQ,IAAI,EAAW,cAAe,QAAQ,GAAQ,EAC1D,QAIJ,OAAO,CACT,SAGE,MAAU,MAAM,4BAA6B,EAAa,OAAO,GAMhE,SAAS,CAAkD,CAChE,EACA,EACA,EACA,EACA,EAAgC,CAAC,EACrB,CACZ,IACE,OAAO,GACP,YAAY,KACZ,OAAO,GACL,OAAO,IAAY,SAAW,CAAE,KAAM,CAAQ,EAAI,EAoFtD,MAAO,CACL,KACA,cACA,eACA,KAtFqB,MAAO,EAAW,IAAwB,CAC/D,IAAQ,GAAI,EAAK,OAAQ,KAAS,GAAc,EAGhD,GAAI,EAAI,MAAO,OAGf,IAAM,EAAc,EAAI,MAAQ,IAAK,EAAI,KAAM,EAAI,KAC7C,EAAa,EAAI,KAAK,QACxB,EACA,EAEJ,GAAI,CAEF,IAAM,EAAe,EAAI,gBAAgB,GACnC,EAAW,IAAiB,OAAY,EAAe,EACvD,EACJ,OAAO,IAAa,WAAa,EAAS,EAAW,CAAG,EAAI,EAC9D,IAAK,EAAI,KAAK,SAAW,IAAgB,EAAG,CAC1C,EAAI,MAAQ,IAAI,EAAW,cAAe,CAAE,EAC5C,OAIF,IAAI,EACE,EAAU,SAAY,EAAG,EAAW,CAAG,EAgB7C,GAdA,EACE,EAAY,EACR,MAAM,QAAQ,KAAK,CACjB,EAAQ,EACR,IAAI,QAAe,CAAC,EAAG,IAAW,CAChC,EAAQ,WACN,IAAM,EAAW,MAAM,SAAS,cAAe,CAAC,EAChD,CACF,EACD,CACH,CAAC,EAAE,QAAQ,IAAM,aAAa,CAAK,CAAC,EACpC,MAAM,EAAQ,EAGhB,EAAK,OAAQ,CACf,GAAI,EAAI,OAAO,IAAI,EAAK,MAAM,EAC5B,MAAU,MAAM,mCAAmC,EAAK,SAAS,EAGnE,GACE,IAAW,QACX,GACA,CAAC,GAAS,EAAQ,CAAY,EAC9B,CACA,EAAI,MAAQ,IAAI,EAAW,iCAAiC,KAAO,CAAE,EACrE,OAIF,GAFA,EAAI,MAAM,EAAK,QAAU,EAErB,EAAK,YACP,EAAI,OAAO,IAAI,EAAK,MAAM,GAG9B,MAAO,EAAQ,CACf,EAAQ,EAAE,SAAW,OAAO,CAAC,EAE7B,EAAI,MAAQ,IAAI,EAAW,EAAQ,EAAI,CAAC,SACxC,CAEA,GAAI,EAAI,OAAS,EAAa,CAC5B,IAAM,EAAY,GAAY,EAAa,EAAI,KAAK,EACpD,EAAI,MAAM,KAAK,CACb,KACA,MAAO,EACP,YACA,SACA,QACA,aACA,UAAW,EAAI,KAAK,QACpB,UAAW,IAAI,KAAK,EAAE,YAAY,CACpC,CAAC,KAUL,OACA,YACA,OACA,OAAQ,CAAC,KAAc,CAAE,QAAO,CAAM,EACxC,EAuBK,IAAM,GAAM,EACjB,MACA,EAAE,OAAO,CAAE,MAAO,EAAE,MAAM,EAAE,GAAG,CAAE,CAAC,EAClC,OACA,OAAS,SAAS,IAAQ,CACxB,QAAW,KAAQ,EAAO,CACxB,GAAI,EAAI,SAAW,OAAW,OAC9B,GAAI,EAAI,MAAO,OACf,IAAM,EAAO,EAAI,SAAS,EAAK,EAAE,EACjC,GAAI,CAAC,EAAM,MAAU,MAAM,iBAAiB,EAAK,IAAI,EACrD,MAAM,EAAK,KAAK,EAAM,CAAG,IAG7B,CAAE,KAAM,WAAY,UAAW,EAAG,KAAM,GAAI,CAC9C,EAea,GAAM,EACjB,KACA,EAAE,OAAO,CACP,UAAW,EAAE,IACb,KAAM,EAAE,MAAM,EAAE,GAAG,EACnB,KAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QACvB,CAAC,EACD,OACA,MAAO,EAAM,IAAQ,CACnB,GAAI,EAAa,EAAK,UAAW,CAAG,EAClC,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,MAAO,EAAK,IAAK,EAAU,CAAG,EACrD,QAAI,EAAK,KACd,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,MAAO,EAAK,IAAK,EAAU,CAAG,GAG9D,CAAE,KAAM,UAAW,UAAW,EAAG,KAAM,GAAI,CAC7C,EAiBa,GAAY,EACvB,QACA,EAAE,OAAO,CACP,UAAW,EAAE,IACb,KAAM,EAAE,MAAM,EAAE,GAAG,CACrB,CAAC,EACD,OACA,MAAO,EAAM,IAAQ,CACnB,MAAO,EAAa,EAAK,UAAW,CAAG,EAAG,CAExC,GAAI,EAAI,QAAQ,QAAS,MAAU,MAAM,mBAAmB,EAC5D,IAAK,EAAI,KAAK,SAAW,MAAQ,EAAG,MAAU,MAAM,aAAa,EAEjE,GADA,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,MAAO,EAAK,IAAK,EAAU,CAAG,EACtD,EAAI,SAAW,OAAW,SAGlC,CAAE,KAAM,aAAc,UAAW,EAAG,KAAM,GAAI,CAChD,EAaa,GAAM,EACjB,SACA,OACA,EAAE,IACF,MAAO,EAAW,IAAQ,CAExB,GAAI,EAAI,MAEN,OADA,EAAI,OAAS,EAAI,MACV,EAAI,MAIb,GAAI,UAAW,EAAM,CACnB,IAAM,EAAM,EAAa,EAAK,MAAO,CAAG,EAGxC,GACE,IAAQ,QACR,IAAQ,MACR,CAAC,GAAa,CAAG,IAChB,OAAO,IAAQ,UAAY,MAAM,QAAQ,CAAG,GAC7C,CACA,IAAM,EAAM,IAAI,EACd,oCACE,MAAM,QAAQ,CAAG,EAAI,QAAU,OAAO,IAExC,QACF,EAGA,OAFA,EAAI,MAAQ,EACZ,EAAI,OAAS,EACN,EAIT,OADA,EAAI,OAAS,EACN,EAIT,IAAI,EAAW,CAAC,EAChB,GAAI,EAAK,QAAQ,WAAY,CAC3B,QAAW,KAAO,OAAO,KAAK,EAAK,OAAO,UAAU,EAClD,EAAI,GAAO,EAAI,MAAM,GAKvB,GAAI,EAAK,SAAW,GAAO,CACzB,IAAM,EAAe,GAAa,EAAK,EAAK,MAAM,EAClD,GAAI,EAAE,aAAwB,OAC5B,EAAM,GAMZ,OADA,EAAI,OAAS,EACN,GAET,CAAE,KAAM,SAAU,KAAM,GAAI,CAC9B,EAsBa,GAAW,EACtB,MACA,EAAE,OAAO,CACP,IAAK,EAAE,MAAM,EAAE,GAAG,EAClB,MAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SACtB,WAAY,EAAE,OAAO,QACvB,CAAC,EACD,OACA,MAAO,EAAM,IAAQ,CAKnB,GAHA,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,MAAO,EAAK,GAAI,EAAU,CAAG,EAGrD,EAAI,OAAS,EAAK,MAAO,CAG3B,IAAM,EAAY,EAAK,YAAc,QACrC,EAAI,MAAM,GAAa,EAAI,MAAM,QACjC,EAAI,MAAM,QAAa,EAAI,MAAM,GAEjC,EAAI,MAAQ,OAEZ,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,MAAO,EAAK,KAAM,EAAU,CAAG,IAK/D,CAAE,KAAM,YAAa,UAAW,EAAG,KAAM,GAAI,CAC/C,EAEa,GAAY,EACvB,QACA,EAAE,OAAO,CAAE,KAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAS,CAAC,EAC1C,OACA,MAAO,EAAM,IAAQ,CACnB,IAAM,EAAU,EAAK,OAAO,IAAM,QAClC,EAAI,MAAQ,IAAI,EAAW,OAAO,CAAO,EAAG,OAAO,GAErD,CAAE,KAAM,qBAAsB,KAAM,GAAI,CAC1C,EAGa,GAAS,EACpB,SACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAQ,MAAO,EAAE,GAAI,CAAC,EACxC,OACA,OAAS,MAAK,SAAS,IAAQ,CAC7B,GAAI,EAAI,OAAO,IAAI,CAAG,EACpB,MAAU,MAAM,mCAAmC,IAAM,EAE3D,EAAI,MAAM,GAAO,EAAa,EAAO,CAAG,GAE1C,CAAE,KAAM,eAAgB,KAAM,GAAI,CACpC,EAEa,GAAW,EACtB,WACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAQ,MAAO,EAAE,GAAI,CAAC,EACxC,OACA,OAAS,MAAK,SAAS,IAAQ,CAC7B,GAAI,EAAI,OAAO,IAAI,CAAG,EACpB,MAAU,MAAM,mCAAmC,IAAM,EAE3D,GAAI,KAAO,EAAI,MACb,MAAU,MAAM,8BAA8B,aAAe,EAE/D,EAAI,MAAM,GAAO,EAAa,EAAO,CAAG,EACxC,EAAI,OAAO,IAAI,CAAG,GAEpB,CAAE,KAAM,iCAAkC,KAAM,GAAI,CACtD,EAEa,GAAS,EACpB,SACA,EAAE,OAAO,CAAE,IAAK,EAAE,MAAO,CAAC,EAC1B,EAAE,IACF,OAAS,OAAO,IAAQ,CACtB,OAAO,EAAa,EAAK,CAAG,GAE9B,CAAE,KAAM,eAAgB,KAAM,GAAI,CACpC,EAEa,GAAa,EACxB,aACA,EAAE,OAAO,CACP,KAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CACvD,CAAC,EACD,OACA,OAAS,QAAQ,IAAQ,CACvB,GAAI,MAAM,QAAQ,CAAI,EACpB,QAAW,KAAO,EAChB,EAAI,MAAM,GAAO,EAAa,CAAE,MAAO,MAAO,KAAM,CAAI,EAAG,CAAG,EAGhE,aAAY,EAAO,KAAS,OAAO,QAAQ,CAAI,EAC7C,EAAI,MAAM,GAAS,EAAa,CAAE,MAAO,MAAO,KAAM,CAAK,EAAG,CAAG,GAIvE,CACE,KAAM,6EACN,KAAM,GACR,CACF,EAEa,GAAU,EACrB,UACA,EAAE,OAAO,EAAE,GAAG,EACd,OACA,MAAO,EAAM,IAAQ,CACnB,QAAW,KAAO,OAAO,KAAK,CAAI,EAAG,CACnC,GAAI,IAAQ,MAAQ,IAAQ,SAAU,SACtC,EAAI,MAAM,GAAO,EAAa,EAAK,GAAM,CAAG,IAGhD,CACE,KAAM,sFACN,KAAM,GACR,CACF,EAEa,GAAa,EACxB,aACA,EAAE,OAAO,CACP,KAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CACvD,CAAC,EACD,EAAE,OAAO,EAAE,GAAG,EACd,OAAS,QAAQ,IAAQ,CACvB,IAAM,EAA8B,CAAC,EACrC,GAAI,MAAM,QAAQ,CAAI,EACpB,QAAW,KAAO,EAChB,EAAO,GAAO,EAAa,EAAK,CAAG,EAGrC,aAAY,EAAO,KAAS,OAAO,QAAQ,CAAI,EAC7C,EAAO,GAAS,EAAa,EAAM,CAAG,EAG1C,OAAO,GAET,CACE,KAAM,mEACN,KAAM,GACR,CACF,EAEa,GAAQ,EACnB,QACA,EAAE,OAAO,CAAE,MAAO,EAAE,MAAM,EAAE,GAAG,CAAE,CAAC,EAClC,OACA,OAAS,SAAS,IAAQ,CACxB,IAAM,EAAY,GAAiB,CAAG,EAGtC,GAFA,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,OAAM,EAAU,CAAS,EAEjD,EAAU,SAAW,OAAW,EAAI,OAAS,EAAU,QAE7D,CAAE,KAAM,mBAAoB,UAAW,EAAG,KAAM,GAAI,CACtD,EAoBa,GAAM,EACjB,MACA,EAAE,OAAO,CAAE,MAAO,EAAE,MAAM,EAAE,GAAG,EAAG,GAAI,EAAE,OAAQ,MAAO,EAAE,MAAM,EAAE,GAAG,CAAE,CAAC,EACvE,EAAE,MAAM,EAAE,GAAG,EACb,OAAS,QAAO,KAAI,SAAS,IAAQ,CACnC,IAAM,EAAU,CAAC,EACX,EAAgB,EAAa,EAAO,CAAG,EAC7C,GAAI,CAAC,MAAM,QAAQ,CAAa,EAC9B,MAAU,MAAM,4BAA4B,EAC9C,QAAW,KAAQ,EAAe,CAEhC,GAAI,EAAI,QAAQ,QAAS,MAAU,MAAM,mBAAmB,EAC5D,IAAM,EAAY,GAAiB,CAAG,EACtC,EAAU,MAAM,GAAM,EACtB,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,OAAM,EAAU,CAAS,EACrD,EAAQ,KAAK,EAAU,MAAM,QAAa,IAAI,EAEhD,OAAO,GAET,CAAE,KAAM,YAAa,UAAW,EAAG,KAAM,CAAE,CAC7C,EAWa,GAAS,EACpB,SACA,EAAE,OAAO,CACP,MAAO,EAAE,MAAM,EAAE,GAAG,EACpB,GAAI,EAAE,OACN,UAAW,EAAE,GACf,CAAC,EACD,EAAE,MAAM,EAAE,GAAG,EACb,OAAS,QAAO,KAAI,aAAa,IAAQ,CACvC,IAAM,EAAU,CAAC,EACX,EAAgB,EAAa,EAAO,CAAG,EAC7C,GAAI,CAAC,MAAM,QAAQ,CAAa,EAC9B,MAAU,MAAM,+BAA+B,EACjD,QAAW,KAAQ,EAAe,CAEhC,GAAI,EAAI,QAAQ,QAAS,MAAU,MAAM,mBAAmB,EAC5D,IAAM,EAAY,GAAiB,CAAG,EAGtC,GAFA,EAAU,MAAM,GAAM,EACP,EAAa,EAAW,CAAS,EAE9C,EAAQ,KAAK,CAAI,EAGrB,OAAO,GAET,CAAE,KAAM,eAAgB,UAAW,EAAG,KAAM,CAAE,CAChD,EAWa,GAAS,EACpB,SACA,EAAE,OAAO,CACP,MAAO,EAAE,MAAM,EAAE,GAAG,EACpB,GAAI,EAAE,OACN,YAAa,EAAE,OACf,QAAS,EAAE,IACX,MAAO,EAAE,MAAM,EAAE,GAAG,CACtB,CAAC,EACD,EAAE,IACF,OAAS,QAAO,KAAI,cAAa,UAAS,SAAS,IAAQ,CACzD,IAAM,EAAgB,EAAa,EAAO,CAAG,EACvC,EAAkB,EAAa,EAAS,CAAG,EACjD,GAAI,CAAC,MAAM,QAAQ,CAAa,EAC9B,MAAU,MAAM,+BAA+B,EAEjD,IAAI,EAAM,EACV,QAAW,KAAQ,EAAe,CAEhC,GAAI,EAAI,QAAQ,QAAS,MAAU,MAAM,mBAAmB,EAC5D,IAAM,EAAY,GAAiB,CAAG,EACtC,EAAU,MAAM,GAAM,EACtB,EAAU,MAAM,GAAe,EAC/B,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,OAAM,EAAU,CAAS,EACrD,EAAM,EAAU,MAAM,QAAa,EAErC,OAAO,GAET,CAAE,KAAM,eAAgB,UAAW,EAAG,KAAM,CAAE,CAChD,EAWa,GAAO,EAClB,OACA,EAAE,OAAO,CACP,MAAO,EAAE,MAAM,EAAE,GAAG,EACpB,GAAI,EAAE,OACN,UAAW,EAAE,GACf,CAAC,EACD,EAAE,IACF,OAAS,QAAO,KAAI,aAAa,IAAQ,CACvC,IAAM,EAAgB,EAAa,EAAO,CAAG,EAC7C,GAAI,CAAC,MAAM,QAAQ,CAAa,EAC9B,MAAU,MAAM,6BAA6B,EAC/C,QAAW,KAAQ,EAAe,CAEhC,GAAI,EAAI,QAAQ,QAAS,MAAU,MAAM,mBAAmB,EAC5D,IAAM,EAAY,GAAiB,CAAG,EAGtC,GAFA,EAAU,MAAM,GAAM,EACN,EAAa,EAAW,CAAS,EAE/C,OAAO,EAGX,OAAO,MAET,CAAE,KAAM,gBAAiB,UAAW,EAAG,KAAM,CAAE,CACjD,EAEa,GAAO,EAClB,OACA,EAAE,OAAO,CAAE,KAAM,EAAE,MAAM,EAAE,GAAG,EAAG,KAAM,EAAE,GAAI,CAAC,EAC9C,EAAE,MAAM,EAAE,GAAG,EACb,OAAS,OAAM,QAAQ,IAAQ,CAC7B,IAAM,EAAe,EAAa,EAAM,CAAG,EACrC,EAAe,EAAa,EAAM,CAAG,EAC3C,GAAI,MAAM,QAAQ,CAAY,EAAG,EAAa,KAAK,CAAY,EAC/D,OAAO,GAET,CAAE,KAAM,gBAAiB,KAAM,CAAE,CACnC,EAEa,GAAM,EACjB,MACA,EAAE,OAAO,CAAE,KAAM,EAAE,GAAI,CAAC,EACxB,EAAE,OACF,OAAS,QAAQ,IAAQ,CACvB,IAAM,EAAM,EAAa,EAAM,CAAG,EAClC,OAAO,MAAM,QAAQ,CAAG,GAAK,OAAO,IAAQ,SAAW,EAAI,OAAS,GAEtE,CAAE,KAAM,SAAU,KAAM,CAAE,CAC5B,EAGa,GAAQ,EACnB,QACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAQ,IAAK,EAAE,MAAO,CAAC,EACzC,EAAE,MAAM,EAAE,MAAM,EAChB,OAAS,MAAK,OAAO,IACnB,EAAa,EAAK,CAAG,EAAE,MAAM,EAAa,EAAK,CAAG,CAAC,EACrD,CAAE,KAAM,eAAgB,KAAM,CAAE,CAClC,EACa,GAAO,EAClB,OACA,EAAE,OAAO,CAAE,KAAM,EAAE,MAAM,EAAE,MAAM,EAAG,IAAK,EAAE,MAAO,CAAC,EACnD,EAAE,OACF,OAAS,OAAM,OAAO,IACpB,EAAa,EAAM,CAAG,EAAE,KAAK,EAAa,EAAK,CAAG,CAAC,EACrD,CAAE,KAAM,cAAe,KAAM,CAAE,CACjC,EACa,GAAW,EACtB,WACA,EAAE,OAAO,CAAE,KAAM,EAAE,OAAQ,KAAM,EAAE,OAAO,EAAE,GAAG,CAAE,CAAC,EAClD,EAAE,OACF,OAAS,OAAM,QAAqD,IAAQ,CAE1E,OADqB,EAAa,EAAM,CAAG,EACvB,QAAQ,iBAAkB,CAAC,EAAW,IACxD,OAAO,EAAa,EAAK,GAAM,CAAG,GAAK,EAAE,CAC3C,GAEF,CAAE,KAAM,kBAAmB,KAAM,CAAE,CACrC,EAEa,GAAa,EACxB,aACA,EAAE,OAAO,CACP,QAAS,EAAE,OACX,MAAO,EAAE,GACX,CAAC,EACD,EAAE,QACF,OAAS,UAAS,SAAS,IAAwB,CAEjD,GAAI,GAAkB,CAAO,EAC3B,MAAU,MACR,wDAAwD,GAC1D,EAEF,IAAM,EAAgB,EAAa,EAAO,CAAG,EAE7C,OADU,IAAI,OAAO,CAAO,EACnB,KAAK,CAAa,GAE7B,CACE,KAAM,uDACN,KAAM,CACR,CACF,EAGa,GAAO,EAClB,OACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAO,EAAE,GAAG,EAAG,KAAM,EAAE,MAAM,EAAE,MAAM,CAAE,CAAC,EAC1D,EAAE,OAAO,EAAE,GAAG,EACd,OAAS,MAAK,QAAsD,IAAQ,CAC1E,IAAM,EAAc,EAAa,EAAK,CAAG,EACnC,EAAe,EAAa,EAAM,CAAG,EACrC,EAAW,CAAC,EAClB,GAAI,GAAe,MAAM,QAAQ,CAAY,EAC3C,EAAa,QAAQ,CAAC,IAAe,EAAI,GAAK,EAAY,EAAG,EAE/D,OAAO,GAET,CAAE,KAAM,YAAa,KAAM,CAAE,CAC/B,EAEa,GAAO,EAClB,OACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAO,EAAE,GAAG,EAAG,KAAM,EAAE,MAAM,EAAE,MAAM,CAAE,CAAC,EAC1D,EAAE,OAAO,EAAE,GAAG,EACd,OAAS,MAAK,QAAsD,IAAQ,CAC1E,IAAM,EAAc,EAAa,EAAK,CAAG,EACnC,EAAe,IAAI,IAAI,EAAa,EAAM,CAAG,CAAC,EAC9C,EAAW,CAAC,EAClB,GAAI,EACF,OAAO,KAAK,CAAW,EAAE,QAAQ,CAAC,IAAM,CACtC,GAAI,CAAC,EAAa,IAAI,CAAC,EAAG,EAAI,GAAK,EAAY,GAChD,EAEH,OAAO,GAET,CAAE,KAAM,YAAa,KAAM,CAAE,CAC/B,EAEa,GAAQ,EACnB,QACA,EAAE,OAAO,CAAE,EAAG,EAAE,OAAO,EAAE,GAAG,EAAG,EAAG,EAAE,OAAO,EAAE,GAAG,CAAE,CAAC,EACnD,EAAE,OAAO,EAAE,GAAG,EACd,OAAS,IAAG,KAAK,KAAS,IACrB,EAAa,EAAG,CAAG,KACnB,EAAa,EAAG,CAAG,CACxB,GACA,CAAE,KAAM,gBAAiB,KAAM,CAAE,CACnC,EACa,GAAO,EAClB,OACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAO,EAAE,GAAG,CAAE,CAAC,EACjC,EAAE,MAAM,EAAE,MAAM,EAChB,OAAS,OAAO,IAAQ,OAAO,KAAK,EAAa,EAAK,CAAG,GAAK,CAAC,CAAC,EAChE,CAAE,KAAM,cAAe,KAAM,CAAE,CACjC,EA2BM,GAAkB,GAGlB,GAAqB,gBAM3B,SAAS,EAAe,CAAC,EAAmB,EAAmC,CAC7E,GAAI,CAEF,IAAM,EADM,IAAI,IAAI,CAAS,EACZ,SAAS,YAAY,EAEtC,QAAW,KAAW,EAAgB,CACpC,IAAM,EAAI,EAAQ,YAAY,EAC9B,GAAI,EAAE,WAAW,IAAI,EAAG,CAEtB,IAAM,EAAS,EAAE,MAAM,CAAC,EACxB,GAAI,EAAK,SAAS,CAAM,GAAK,IAAS,EAAE,MAAM,CAAC,EAC7C,MAAO,GAEJ,QAAI,IAAS,EAClB,MAAO,GAGX,MAAO,GACP,KAAM,CACN,MAAO,IAIJ,IAAM,GAAQ,EACnB,YACA,EAAE,OAAO,CACP,IAAK,EAAE,OACP,OAAQ,EAAE,OAAO,SACjB,QAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAC5B,KAAM,EAAE,IAAI,SACZ,aAAc,EAAE,OAAO,QACzB,CAAC,EACD,EAAE,IACF,MAAO,EAAM,IAAQ,CACnB,IAAM,EAAM,EAAa,EAAK,IAAK,CAAG,EAChC,EAAS,EAAa,EAAK,OAAQ,CAAG,EACtC,EAAU,EAAa,EAAK,QAAS,CAAG,GAAK,CAAC,EAC9C,EAAO,EAAa,EAAK,KAAM,CAAG,EAClC,EAAe,EAAa,EAAK,aAAc,CAAG,EAGlD,EAAuB,EAAI,SAAS,cAAgB,EAG1D,GAAI,GAAgB,GAClB,MAAU,MACR,qCAAqC,2CACvC,EAGF,GAAI,EAAI,aAAa,MAGnB,OAAO,EAAI,aAAa,MAAM,EAAK,CACjC,SACA,QAAS,IACJ,GACF,IAAqB,OAAO,EAAe,CAAC,CAC/C,EACA,OACA,OAAQ,EAAI,OACZ,cACF,CAAC,EAIH,IAAM,EACJ,EAAI,SAAS,oBACf,GAAI,GAEF,GAAI,CAAC,GAAgB,EAAK,CAAc,EACtC,MAAU,MACR,oDAAoD,EAAe,KACjE,IACF,GACF,EAGG,KAEL,GAAI,GAAa,CAAG,EAClB,MAAU,MACR,sEACF,EAIF,GAAI,CAEF,IAAM,EADS,IAAI,IAAI,CAAG,EACN,SAAS,YAAY,EACzC,GAAI,IAAS,aAAe,IAAS,aAAe,IAAS,QAC3D,MAAU,MACR,6HAEF,EAEF,MAAO,EAAQ,CACf,GAAI,EAAE,QAAQ,SAAS,qBAAqB,EAAG,MAAM,EACrD,MAAU,MAAM,gBAAgB,GAAK,GAKzC,GAAI,OAAO,WAAW,QAAU,WAAY,CAC1C,IAAM,EAAM,MAAM,WAAW,MAAM,EAAK,CACtC,SACA,QAAS,IACJ,GACF,IAAqB,OAAO,EAAe,CAAC,CAC/C,EACA,KAAM,EAAO,KAAK,UAAU,CAAI,EAAI,OACpC,OAAQ,EAAI,MACd,CAAC,EAGD,GAAI,IAAiB,UAAW,CAC9B,IAAM,EAAS,MAAM,EAAI,YAAY,EAC/B,EAAQ,IAAI,WAAW,CAAM,EAC/B,EAAS,GACb,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,GAAU,OAAO,aAAa,EAAM,EAAE,EAExC,IAAM,EAAS,KAAK,CAAM,EAG1B,MAAO,QADL,EAAI,QAAQ,IAAI,cAAc,GAAK,qCACA,IAIvC,IAAM,EAAc,EAAI,QAAQ,IAAI,cAAc,EAClD,GACE,IAAiB,QAChB,GAAe,EAAY,SAAS,kBAAkB,EAEvD,OAAO,EAAI,KAAK,EAElB,OAAO,EAAI,KAAK,EAElB,MAAU,MAAM,0DAA0D,GAE5E,CAAE,KAAM,aAAc,UAAW,MAAO,KAAM,CAAE,CAClD,EAmBa,GAAW,EACtB,WACA,EAAE,OAAO,CAAE,IAAK,EAAE,MAAO,CAAC,EAC1B,EAAE,IACF,OAAS,OAAO,IAAQ,CACtB,IAAM,EAAI,EAAa,EAAK,CAAG,EAC/B,OAAO,EAAI,aAAa,OAAO,IAAI,CAAC,GAEtC,CAAE,KAAM,YAAa,KAAM,CAAE,CAC/B,EAEa,GAAW,EACtB,WACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAQ,MAAO,EAAE,GAAI,CAAC,EACxC,OACA,OAAS,MAAK,SAAS,IAAQ,CAC7B,IAAM,EAAI,EAAa,EAAK,CAAG,EACzB,EAAI,EAAa,EAAO,CAAG,EACjC,OAAO,EAAI,aAAa,OAAO,IAAI,EAAG,CAAC,GAEzC,CAAE,KAAM,YAAa,KAAM,CAAE,CAC/B,EAEa,GAAa,EACxB,aACA,EAAE,OAAO,CAAE,MAAO,EAAE,GAAI,CAAC,EACzB,EAAE,MAAM,EAAE,GAAG,EACb,OAAS,SAAS,IAChB,EAAI,aAAa,OAAO,QAAQ,EAAa,EAAO,CAAG,CAAC,GAAK,CAAC,EAChE,CAAE,KAAM,cAAe,KAAM,CAAE,CACjC,EACa,GAAe,EAC1B,oBACA,EAAE,OAAO,CACP,WAAY,EAAE,OAAO,SACrB,OAAQ,EAAE,MAAM,EAAE,MAAM,EACxB,EAAG,EAAE,OAAO,QACd,CAAC,EACD,EAAE,MAAM,EAAE,GAAG,EACb,OAAS,aAAY,SAAQ,KAAK,IAChC,EAAI,aAAa,OAAO,eACtB,EAAa,EAAY,CAAG,EAC5B,EAAa,EAAQ,CAAG,EACxB,EAAa,EAAG,CAAG,CACrB,GAAK,CAAC,EACR,CACE,KAAM,gBACN,KAAM,CAAC,EAAO,IAAQ,GAAK,EAAa,EAAM,EAAG,CAAG,GAAK,EAC3D,CACF,EAoBa,GAAa,EACxB,aACA,EAAE,OAAO,CAAE,OAAQ,EAAE,OAAQ,QAAS,EAAE,IAAI,QAAS,CAAC,EACtD,EAAE,OACF,OAAS,SAAQ,WAAW,IAAQ,CAClC,GAAI,CAAC,EAAI,aAAa,KAAK,QACzB,MAAU,MAAM,kCAAkC,EACpD,OAAO,EAAI,aAAa,IAAI,QAC1B,EAAa,EAAQ,CAAG,EACxB,EAAa,EAAS,CAAG,CAC3B,GAEF,CAAE,KAAM,cAAe,UAAW,OAAQ,KAAM,GAAI,CACtD,EAEa,GAAW,EACtB,WACA,EAAE,OAAO,CAAE,QAAS,EAAE,IAAK,MAAO,EAAE,GAAI,CAAC,EACzC,EAAE,IACF,OAAS,UAAS,SAAS,IAAQ,CACjC,IAAM,EAAa,EAAa,EAAS,CAAG,EACtC,EAAW,EAAa,EAAO,CAAG,EAEpC,EAAgB,EACpB,GAAI,GAAY,OAAO,IAAa,UAAY,CAAC,MAAM,QAAQ,CAAQ,EAAG,CACxE,EAAgB,CAAC,EACjB,QAAW,KAAK,EACd,EAAc,GAAK,EAAa,EAAS,GAAI,CAAG,EAKpD,GAAI,GAAiB,CAAU,EAAG,CAEhC,IAAM,EAAM,GAAsB,CAAU,EAItC,EAA2B,IAC5B,EACH,KAAM,EACN,MAAO,CAAC,EACR,OAAQ,IAAI,IACZ,OAAQ,OACR,MAAO,MACT,EAEM,EAAU,EAAI,SAAS,KAAK,EAClC,GAAI,CAAC,EAAS,MAAU,MAAM,oBAAoB,EAGlD,GAFA,MAAM,EAAQ,KAAK,EAAK,CAAQ,EAE5B,EAAS,MACX,MAAU,MAAM,EAAS,MAAM,SAAW,kBAAkB,EAG9D,OAAO,EAAS,OAIlB,GAAI,GAAc,OAAO,IAAe,UAAY,OAAQ,EAAY,CAEtE,IAAM,EAA2B,IAC5B,EACH,KAAM,EACN,MAAO,CAAC,EACR,OAAQ,IAAI,IACZ,OAAQ,OACR,MAAO,MACT,EAEM,EAAU,EAAI,SAAS,KAAK,EAClC,GAAI,CAAC,EAAS,MAAU,MAAM,oBAAoB,EAGlD,GAFA,MAAM,EAAQ,KAAK,EAAY,CAAQ,EAEnC,EAAS,MACX,MAAU,MAAM,EAAS,MAAM,SAAW,kBAAkB,EAG9D,OAAO,EAAS,OAIlB,GAAI,CAAC,EAAI,aAAa,OAAO,IAC3B,MAAU,MAAM,gCAAgC,EAElD,IAAM,EAAS,MAAM,EAAI,aAAa,MAAM,IAAI,EAAY,CAAa,EAGzE,GACE,GACA,OAAO,IAAW,UAClB,aAAc,GACd,OAAO,EAAO,WAAa,SAC3B,CAEA,GAAI,EAAO,MACT,MAAU,MAAM,EAAO,MAAM,SAAW,kBAAkB,EAE5D,OAAO,EAAO,OAGhB,OAAO,GAET,CAAE,KAAM,4DAA6D,KAAM,CAAE,CAC/E,EAqBa,GAAgB,EAC3B,gBACA,EAAE,OAAO,CACP,KAAM,EAAE,MACV,CAAC,EACD,EAAE,IACF,OAAS,QAAQ,IAAQ,CACvB,GAAI,CAAC,EAAI,aAAa,MAAM,UAC1B,MAAU,MACR,kGACF,EAGF,IAAM,EAAe,EAAa,EAAM,CAAG,EAE3C,GAAI,CACF,OAAO,EAAI,aAAa,KAAK,UAAU,CAAY,EACnD,MAAO,EAAQ,CACf,MAAU,MAAM,8BAA8B,EAAE,SAAS,IAG7D,CAAE,KAAM,gCAAiC,KAAM,CAAE,CACnD,EAyBM,GAAoB,GAEb,GAAU,EACrB,UACA,EAAE,OAAO,CACP,KAAM,EAAE,OACR,KAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QACxB,CAAC,EACD,EAAE,IACF,OAAS,OAAM,QAAQ,IAAQ,CAE7B,IAAM,EAAe,EAAI,cAAgB,EACzC,GAAI,GAAgB,GAClB,MAAU,MACR,yCAAyC,oFAE3C,EAGF,GAAI,CAAC,EAAI,aAAa,MAAM,UAC1B,MAAU,MACR,sGACF,EAGF,IAAM,EAAe,EAAa,EAAM,CAAG,EACrC,EAAe,EAAO,EAAa,EAAM,CAAG,EAAI,CAAC,EAGnD,EACJ,GAAI,CACF,EAAM,EAAI,aAAa,KAAK,UAAU,CAAY,EAClD,MAAO,EAAQ,CACf,MAAU,MAAM,8BAA8B,EAAE,SAAS,EAG3D,GAAI,EAAI,KAAO,MACb,MAAU,MAAM,oCAAoC,EAKtD,IAAM,EAAW,GAAiB,CAAG,EASrC,GARA,EAAS,KAAO,EAChB,EAAS,OAAS,OAClB,EAAS,aAAe,EAAe,EAGvC,MAAM,GAAI,KAAK,EAAY,CAAQ,EAG/B,EAAS,MAAO,CAClB,EAAI,MAAQ,EAAS,MACrB,OAIF,OAAO,EAAS,QAElB,CAAE,KAAM,yCAA0C,KAAM,CAAE,CAC5D,EAGa,GAAY,EACvB,YACA,EAAE,OAAO,CAAE,IAAK,EAAE,MAAO,CAAC,EAC1B,EAAE,IACF,OAAS,OAAO,IAAQ,KAAK,MAAM,EAAa,EAAK,CAAG,CAAC,EACzD,CAAE,KAAM,aAAc,KAAM,CAAE,CAChC,EACa,GAAgB,EAC3B,gBACA,EAAE,OAAO,CAAE,MAAO,EAAE,GAAI,CAAC,EACzB,EAAE,OACF,OAAS,SAAS,IAAQ,KAAK,UAAU,EAAa,EAAO,CAAG,CAAC,EACjE,CAAE,KAAM,iBAAkB,KAAM,CAAE,CACpC,EACa,GAAW,EACtB,WACA,EAAE,OAAO,CAAE,IAAK,EAAE,MAAO,CAAC,EAC1B,EAAE,IACF,OAAS,OAAO,IAAQ,CACtB,GAAI,CAAC,EAAI,aAAa,KAAK,MACzB,MAAU,MAAM,gCAAgC,EAClD,OAAO,EAAI,aAAa,IAAI,MAAM,EAAa,EAAK,CAAG,CAAC,GAE1D,CAAE,KAAM,YAAa,KAAM,CAAE,CAC/B,EAgBa,GAAU,EACrB,UACA,EAAE,OAAO,CAAE,IAAK,EAAE,OAAO,SAAU,MAAO,EAAE,MAAM,EAAE,GAAG,CAAE,CAAC,EAC1D,EAAE,IACF,OAAS,MAAK,SAAS,IAAQ,CAE7B,GAAI,CAAC,EAAI,KAAM,EAAI,KAAO,IAAI,IAE9B,IAAM,EACJ,EAAa,EAAK,CAAG,GACpB,MAAM,GAAK,KAAK,CAAE,MAAO,EAAO,UAAW,SAAU,EAAG,CAAG,EAG9D,GAAI,EAAI,KAAK,IAAI,CAAC,EAChB,OAAO,EAAI,KAAK,IAAI,CAAC,EAIvB,IAAM,EAAY,GAAiB,CAAG,EACtC,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,OAAM,EAAU,CAAS,EAIrD,IAAM,EAAS,EAAU,QAAU,EAAU,MAAM,OAInD,OADA,EAAI,KAAK,IAAI,EAAG,CAAM,EACf,GAET,CAAE,KAAM,iCAAkC,KAAM,CAAE,CACpD,EAca,GAAQ,EACnB,QACA,EAAE,OAAO,CACP,IAAK,EAAE,OAAO,SACd,MAAO,EAAE,MAAM,EAAE,GAAG,EACpB,MAAO,EAAE,OAAO,QAClB,CAAC,EACD,EAAE,IACF,OAAS,MAAK,QAAO,SAAS,IAAQ,CACpC,GAAI,CAAC,EAAI,aAAa,MACpB,MAAU,MAAM,wCAAwC,EAO1D,IAAM,EAAW,SAJf,EAAa,EAAK,CAAG,GACpB,MAAM,GAAK,KAAK,CAAE,MAAO,EAAO,UAAW,SAAU,EAAG,CAAG,IAIxD,EAAS,MAAM,EAAI,aAAa,MAAM,IAAI,CAAQ,EAExD,GAAI,EAOF,GAAI,OAAO,IAAW,UAAY,EAAO,MACvC,GAAI,KAAK,IAAI,EAAI,EAAO,KAAM,OAAO,EAAO,IAI5C,YAAO,EAKX,IAAM,EAAY,GAAiB,CAAG,EACtC,MAAM,GAAI,KAAK,CAAE,GAAI,MAAO,OAAM,EAAU,CAAS,EACrD,IAAM,EAAS,EAAU,QAAU,EAAU,MAAM,OAG7C,EAAS,KAAK,IAAI,GAAK,GAAS,UAEtC,IAAK,EAAI,KAAK,SAAW,IAAM,EAAG,MAAU,MAAM,aAAa,EAG/D,OAFA,MAAM,EAAI,aAAa,MAAM,IAAI,EAAU,CAAE,IAAK,EAAQ,KAAM,CAAO,CAAC,EAEjE,GAET,CAAE,KAAM,uCAAwC,KAAM,CAAE,CAC1D,EAGa,GAAS,EACpB,SACA,EAAE,OAAO,CACP,IAAK,EAAE,OAAO,SACd,IAAK,EAAE,OAAO,SACd,OAAQ,EAAE,OAAO,SACjB,OAAQ,EAAE,OAAO,QACnB,CAAC,EACD,EAAE,IACF,OAAS,MAAK,MAAK,SAAQ,UAAU,IAAQ,CAC3C,IAAM,EAAI,EAAa,EAAQ,CAAG,GAAK,QACjC,EAAM,EAAa,EAAQ,CAAG,GAAK,GACnC,EAAK,EAAa,EAAK,CAAG,GAAK,EAC/B,EAAK,EAAa,EAAK,CAAG,GAAK,EAErC,GAAI,IAAM,SAAU,CAElB,IAAI,EAAS,GACb,GAAI,OAAO,OAAW,KAAe,OAAO,gBAAiB,CAC3D,IAAM,EAAS,IAAI,WAAW,CAAG,EACjC,OAAO,gBAAgB,CAAM,EAC7B,QAAS,EAAI,EAAG,EAAI,EAAK,IACvB,GANU,uCAMM,EAAO,GAAK,IAG9B,aAAS,EAAI,EAAG,EAAI,EAAK,IACvB,GAVU,uCAUM,OAAO,KAAK,MAAM,KAAK,OAAO,EAAI,EAAE,CAAC,EAGzD,OAAO,EAIT,IAAI,EACJ,GAAI,OAAO,OAAW,KAAe,OAAO,gBAAiB,CAC3D,IAAM,EAAM,IAAI,YAAY,CAAC,EAC7B,OAAO,gBAAgB,CAAG,EAC1B,EAAM,EAAI,GAAM,WAEhB,OAAM,KAAK,OAAO,EAGpB,IAAM,EAAQ,EAAK,EACb,EAAS,EAAM,EAAQ,EAE7B,GAAI,IAAM,UACR,OAAO,KAAK,MAAM,CAAM,EAE1B,OAAO,GAET,CAAE,KAAM,kBAAmB,KAAM,CAAE,CACrC,EAEa,GAAO,EAClB,OACA,OACA,EAAE,OACF,SAAY,CAEV,GAAI,OAAO,OAAW,KAAe,OAAO,WAC1C,OAAO,OAAO,WAAW,EAG3B,GAAI,OAAO,OAAW,KAAe,OAAO,gBAAiB,CAC3D,IAAM,EAAQ,IAAI,WAAW,EAAE,EAC/B,OAAO,gBAAgB,CAAK,EAC5B,EAAM,GAAM,EAAM,GAAK,GAAQ,GAC/B,EAAM,GAAM,EAAM,GAAK,GAAQ,IAC/B,IAAM,EAAM,MAAM,KAAK,EAAO,CAAC,IAC7B,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAChC,EAAE,KAAK,EAAE,EACT,MAAO,GAAG,EAAI,MAAM,EAAG,CAAC,KAAK,EAAI,MAAM,EAAG,EAAE,KAAK,EAAI,MACnD,GACA,EACF,KAAK,EAAI,MAAM,GAAI,EAAE,KAAK,EAAI,MAAM,EAAE,IAGxC,MAAO,uCAAuC,QAAQ,QAAS,CAAC,IAAM,CACpE,IAAM,EAAK,KAAK,OAAO,EAAI,GAAM,EAEjC,OADU,IAAM,IAAM,EAAK,EAAI,EAAO,GAC7B,SAAS,EAAE,EACrB,GAEH,CAAE,KAAM,gBAAiB,KAAM,CAAE,CACnC,EAEa,GAAO,EAClB,OACA,EAAE,OAAO,CACP,MAAO,EAAE,IACT,UAAW,EAAE,OAAO,QACtB,CAAC,EACD,EAAE,OACF,OAAS,QAAO,aAAa,IAAQ,CACnC,IAAM,EACJ,OAAO,IAAU,SACb,EACA,KAAK,UAAU,EAAa,EAAO,CAAG,CAAC,EACvC,EAAO,EAAa,EAAW,CAAG,GAAK,UAE7C,GAAI,OAAO,OAAW,KAAe,OAAO,OAAQ,CAElD,IAAM,EADU,IAAI,YAAY,EACX,OAAO,CAAG,EACzB,EAAa,MAAM,OAAO,OAAO,OAAO,EAAM,CAAI,EAExD,OADkB,MAAM,KAAK,IAAI,WAAW,CAAU,CAAC,EACtC,IAAI,CAAC,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,EAAE,EAItE,IAAI,EAAO,EACX,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,IAAM,EAAO,EAAI,WAAW,CAAC,EAC7B,GAAQ,GAAQ,GAAK,EAAO,EAC5B,GAAQ,EAEV,OAAO,OAAO,CAAI,GAEpB,CAAE,KAAM,eAAgB,KAAM,CAAE,CAClC,EAmBa,GAAa,EACxB,aACA,EAAE,OAAO,CAAE,QAAS,EAAE,GAAI,CAAC,EAC3B,OACA,OAAS,WAAW,IAAQ,CAC1B,IAAM,EAAM,EAAa,EAAS,CAAG,EACrC,GAAI,EAAI,MACN,EAAI,MAAM,KAAK,CACb,GAAI,cACJ,MAAO,CAAE,QAAS,CAAI,EACtB,UAAW,CAAC,EACZ,OAAQ,EACR,WAAY,EAAI,KAAK,QACrB,UAAW,EAAI,KAAK,QACpB,UAAW,IAAI,KAAK,EAAE,YAAY,CACpC,CAAC,GAGL,CAAE,KAAM,eAAgB,KAAM,GAAI,CACpC,EAEa,GAAc,EACzB,cACA,EAAE,OAAO,CAAE,QAAS,EAAE,GAAI,CAAC,EAC3B,OACA,OAAS,WAAW,IAAQ,CAC1B,IAAM,EAAM,EAAa,EAAS,CAAG,EAC/B,EAAS,OAAO,IAAQ,SAAW,EAAM,KAAK,UAAU,CAAG,EAEjE,GAAI,CAAC,EAAI,SAAU,EAAI,SAAW,CAAC,EAGnC,GAFA,EAAI,SAAS,KAAK,CAAM,EAEpB,EAAI,MACN,EAAI,MAAM,KAAK,CACb,GAAI,eACJ,MAAO,CAAE,QAAS,CAAI,EACtB,UAAW,CAAC,EACZ,OAAQ,EACR,WAAY,EAAI,KAAK,QACrB,UAAW,EAAI,KAAK,QACpB,UAAW,IAAI,KAAK,EAAE,YAAY,CACpC,CAAC,GAGL,CAAE,KAAM,cAAe,KAAM,GAAI,CACnC,EAEa,GAAe,EAC1B,eACA,EAAE,OAAO,CAAE,QAAS,EAAE,GAAI,CAAC,EAC3B,OACA,OAAS,WAAW,IAAQ,CAC1B,IAAM,EAAM,EAAa,EAAS,CAAG,EAC/B,EAAS,OAAO,IAAQ,SAAW,EAAM,KAAK,UAAU,CAAG,EACjE,EAAI,MAAQ,IAAI,EAAW,EAAQ,eAAe,GAEpD,CAAE,KAAM,sBAAuB,KAAM,GAAI,CAC3C,EAIa,GAAiB,EAC5B,iBACA,EAAE,OAAO,CACP,IAAK,EAAE,IACP,IAAK,EAAE,OAAO,SACd,QAAS,EAAE,OAAO,QACpB,CAAC,EACD,EAAE,OACF,OAAS,MAAK,MAAK,WAAW,IAAQ,CACpC,IAAM,EAAc,EAAa,EAAK,CAAG,EACnC,EAAc,EAAM,EAAa,EAAK,CAAG,EAAI,GAC7C,EAAkB,EACpB,EAAa,EAAS,CAAG,EACzB,GAGJ,GAAI,CAAC,GAAe,OAAO,IAAgB,UAAY,CAAC,EAAY,GAClE,MAAU,MAAM,sDAAsD,EAIxE,IAAM,EAAU,KAAK,UAAU,CAAW,EAC1C,GAAI,EAAQ,OAAS,EACnB,MAAU,MACR,kBAAkB,EAAQ,iCAAiC,6DAE7D,EAIF,IAAM,EAAQ,GAAuB,EAC/B,EAAM,KAAK,IAAI,EAOrB,OANA,GAAe,IAAI,EAAO,CACxB,IAAK,EACL,UAAW,EACX,UAAW,EAAM,CACnB,CAAC,EAEM,GAET,CAAE,KAAM,sDAAuD,KAAM,CAAE,CACzE,EAEa,GAAmB,EAC9B,mBACA,EAAE,OAAO,CAAE,MAAO,EAAE,MAAO,CAAC,EAC5B,EAAE,QACF,OAAS,SAAS,IAAQ,CACxB,IAAM,EAAgB,EAAa,EAAO,CAAG,EAC7C,OAAO,GAAe,OAAO,CAAa,GAE5C,CAAE,KAAM,sCAAuC,KAAM,GAAI,CAC3D,EAEa,GAAyB,EACpC,yBACA,OACA,EAAE,OACF,SAAY,CACV,IAAM,EAAM,KAAK,IAAI,EACjB,EAAU,EACd,QAAY,EAAO,KAAU,GAC3B,GAAI,EAAM,EAAM,UACd,GAAe,OAAO,CAAK,EAC3B,IAGJ,OAAO,GAET,CAAE,KAAM,gDAAiD,KAAM,GAAI,CACrE,EAIa,GAAY,CACvB,OACA,GAAI,GACJ,MAAO,GACP,OAAQ,GACR,IAAK,GACL,MAAO,GACP,UACA,YACA,UACA,cACA,WACA,cACA,SACA,OACA,UACA,UACA,QACA,QACA,OACA,SACA,QACA,YACA,cACA,QACA,QACA,SACA,QACA,UAAW,GACX,YACA,YACA,cACA,kBAAmB,GACnB,cACA,YACA,iBACA,WACA,aACA,iBACA,YACA,WACA,SACA,UACA,QACA,QACA,cACA,eACA,gBACA,kBACA,oBACA,yBACF,EC77FA,IAAM,GAAiB,IAAI,IAAI,CAC7B,OACA,QACA,OACA,YACA,MACA,KACA,KACF,CAAC,EAmBD,SAAS,EAAe,CAAC,EAAmB,EAAwB,CAElE,IAAM,EAAiB,EACpB,QAAQ,WAAY,IAAI,EACxB,QAAQ,WAAY,IAAI,EAIrB,EAAwB,CAAC,EACzB,EAAQ,wCACV,EACJ,OAAQ,EAAQ,EAAM,KAAK,CAAc,KAAO,KAC9C,EAAY,KAAK,EAAM,EAAE,EAI3B,IAAM,EAFY,CAAC,GAAG,IAAI,IAAI,CAAW,CAAC,EAEhB,OACxB,CAAC,IACC,CAAC,GAAe,IAAI,CAAE,GACtB,EAAE,KAAM,IAER,CAAC,IAAI,OAAO,MAAM,UAAW,EAAE,KAAK,CAAc,CACtD,EAEA,GAAI,EAAQ,OAAS,EACnB,QAAQ,KACN,gCAAgC,gDAAwD,EAAQ,KAC9F,IACF,0FAEF,EAIJ,SAAS,EAAc,CACrB,EACA,EACU,CAEV,GAAgB,EAAW,CAAI,EAE/B,IAAM,EAAS,GAAS,CAAS,EAC3B,EAAS,GAAgB,EAAQ,EAAG,CAAI,EAG9C,GAAI,EAAO,IAAM,EAAO,OAAQ,CAC9B,IAAM,EAAY,EAAO,MAAM,EAAO,GAAG,EAAE,KAAK,GAAG,EACnD,MAAU,MACR,sCAAsC,UAAkB;AAAA,6EAE1D,EAGF,OAAO,EAAO,KAGhB,SAAS,EAAQ,CAAC,EAAwB,CACxC,IAAM,EAAmB,CAAC,EACtB,EAAI,EACR,MAAO,EAAI,EAAK,OAAQ,CAEtB,MAAO,EAAI,EAAK,QAAU,KAAK,KAAK,EAAK,EAAE,EAAG,IAC9C,GAAI,GAAK,EAAK,OAAQ,MAGtB,GAAI,EAAK,KAAO,KAAO,EAAK,KAAO,IAAK,CACtC,IAAM,EAAQ,EAAK,KACf,EAAM,GACV,MAAO,EAAI,EAAK,QAAU,EAAK,KAAO,EACpC,GAAI,EAAK,KAAO,MAAQ,EAAI,EAAI,EAAK,OACnC,IACA,GAAO,EAAK,KAEZ,QAAO,EAAK,KAGhB,IACA,EAAO,KAAK,KAAK,UAAU,CAAG,CAAC,EAC/B,SAIF,GAAI,EAAK,MAAM,EAAG,EAAI,CAAC,EAAE,MAAM,yBAAyB,EAAG,CACzD,EAAO,KAAK,EAAK,MAAM,EAAG,EAAI,CAAC,CAAC,EAChC,GAAK,EACL,SAIF,GAAI,kBAAkB,SAAS,EAAK,EAAE,EAAG,CACvC,EAAO,KAAK,EAAK,EAAE,EACnB,IACA,SAIF,GAAI,KAAK,KAAK,EAAK,EAAE,EAAG,CACtB,IAAI,EAAM,GACV,MAAO,EAAI,EAAK,QAAU,QAAQ,KAAK,EAAK,EAAE,EAC5C,GAAO,EAAK,KAEd,EAAO,KAAK,CAAG,EACf,SAIF,GAAI,YAAY,KAAK,EAAK,EAAE,EAAG,CAC7B,IAAI,EAAK,GACT,MAAO,EAAI,EAAK,QAAU,eAAe,KAAK,EAAK,EAAE,EACnD,GAAM,EAAK,KAEb,EAAO,KAAK,CAAE,EACd,SAGF,IAEF,OAAO,EAGT,SAAS,EAAe,CACtB,EACA,EACA,EACiC,CACjC,OAAO,GAAe,EAAQ,EAAK,CAAI,EAGzC,SAAS,EAAc,CACrB,EACA,EACA,EACiC,CACjC,IAAM,KAAM,EAAM,IAAK,GAAW,GAAgB,EAAQ,EAAK,CAAI,EAEnE,MAAO,EAAO,KAAY,KAAM,CAC9B,IACA,IAAQ,KAAM,EAAO,IAAK,GAAa,GAAgB,EAAQ,EAAQ,CAAI,EAC3E,EAAO,CAAE,MAAO,UAAW,GAAI,KAAM,OAAM,OAAM,EACjD,EAAS,EAGX,MAAO,CAAE,KAAM,EAAM,IAAK,CAAO,EAGnC,SAAS,EAAe,CACtB,EACA,EACA,EACiC,CACjC,IAAM,KAAM,EAAM,IAAK,GAAW,GAAgB,EAAQ,EAAK,CAAI,EAEnE,MAAO,EAAO,KAAY,KAAM,CAC9B,IACA,IAAQ,KAAM,EAAO,IAAK,GAAa,GAAgB,EAAQ,EAAQ,CAAI,EAC3E,EAAO,CAAE,MAAO,UAAW,GAAI,KAAM,OAAM,OAAM,EACjD,EAAS,EAGX,MAAO,CAAE,KAAM,EAAM,IAAK,CAAO,EAGnC,SAAS,EAAe,CACtB,EACA,EACA,EACiC,CACjC,IAAM,KAAM,EAAM,IAAK,GAAW,GAAc,EAAQ,EAAK,CAAI,EAE3D,EAAU,CAAC,KAAM,KAAM,IAAK,IAAK,KAAM,IAAI,EACjD,MAAO,EAAQ,SAAS,EAAO,EAAO,EAAG,CACvC,IAAM,EAAK,EAAO,MACV,KAAM,EAAO,IAAK,GAAa,GAAc,EAAQ,EAAQ,CAAI,EACzE,EAAO,CAAE,MAAO,SAAU,KAAI,OAAM,OAAM,EAC1C,EAAS,EAGX,MAAO,CAAE,KAAM,EAAM,IAAK,CAAO,EAGnC,SAAS,EAAa,CACpB,EACA,EACA,EACiC,CACjC,IAAM,KAAM,EAAM,IAAK,GAAW,GAAoB,EAAQ,EAAK,CAAI,EAEvE,MAAO,EAAO,KAAY,KAAO,EAAO,KAAY,IAAK,CACvD,IAAM,EAAK,EAAO,MACV,KAAM,EAAO,IAAK,GAAa,GACrC,EACA,EACA,CACF,EACA,EAAO,CAAE,MAAO,SAAU,KAAI,OAAM,OAAM,EAC1C,EAAS,EAGX,MAAO,CAAE,KAAM,EAAM,IAAK,CAAO,EAGnC,SAAS,EAAmB,CAC1B,EACA,EACA,EACiC,CACjC,IAAM,KAAM,EAAM,IAAK,GAAW,GAAW,EAAQ,EAAK,CAAI,EAE9D,MACE,EAAO,KAAY,KACnB,EAAO,KAAY,KACnB,EAAO,KAAY,IACnB,CACA,IAAM,EAAK,EAAO,MACV,KAAM,EAAO,IAAK,GAAa,GAAW,EAAQ,EAAQ,CAAI,EACtE,EAAO,CAAE,MAAO,SAAU,KAAI,OAAM,OAAM,EAC1C,EAAS,EAGX,MAAO,CAAE,KAAM,EAAM,IAAK,CAAO,EAGnC,SAAS,EAAU,CACjB,EACA,EACA,EACiC,CACjC,GAAI,EAAO,KAAS,KAAO,EAAO,KAAS,IAAK,CAC9C,IAAM,EAAK,EAAO,MACV,KAAM,EAAU,IAAK,GAAW,GAAW,EAAQ,EAAK,CAAI,EACpE,MAAO,CAAE,KAAM,CAAE,MAAO,QAAS,KAAI,UAAS,EAAG,IAAK,CAAO,EAE/D,OAAO,GAAa,EAAQ,EAAK,CAAI,EAGvC,SAAS,EAAY,CACnB,EACA,EACA,EACiC,CACjC,IAAM,EAAQ,EAAO,GAGrB,GAAI,IAAU,IAAK,CACjB,IAAQ,OAAM,IAAK,GAAW,GAAgB,EAAQ,EAAM,EAAG,CAAI,EAEnE,MAAO,CAAE,OAAM,IAAK,EAAS,CAAE,EAIjC,GAAI,GAAS,EAAM,WAAW,GAAG,EAC/B,MAAO,CACL,KAAM,CAAE,MAAO,UAAW,MAAO,KAAK,MAAM,CAAK,CAAE,EACnD,IAAK,EAAM,CACb,EAIF,GAAI,GAAS,MAAM,KAAK,CAAK,EAC3B,MAAO,CACL,KAAM,CAAE,MAAO,UAAW,MAAO,WAAW,CAAK,CAAE,EACnD,IAAK,EAAM,CACb,EAIF,GAAI,IAAU,OACZ,MAAO,CAAE,KAAM,CAAE,MAAO,UAAW,MAAO,EAAK,EAAG,IAAK,EAAM,CAAE,EACjE,GAAI,IAAU,QACZ,MAAO,CAAE,KAAM,CAAE,MAAO,UAAW,MAAO,EAAM,EAAG,IAAK,EAAM,CAAE,EAClE,GAAI,IAAU,OACZ,MAAO,CAAE,KAAM,CAAE,MAAO,UAAW,MAAO,IAAK,EAAG,IAAK,EAAM,CAAE,EAGjE,GAAI,GAAS,aAAa,KAAK,CAAK,EAAG,CAErC,IAAI,EAAiB,CAAE,MAAO,QAAS,KAAM,CAAM,EAC/C,EAAS,EAAM,EAGnB,MAAO,EAAO,KAAY,IAAK,CAC7B,IACA,IAAM,EAAO,EAAO,KACpB,EAAO,CAAE,MAAO,SAAU,OAAQ,EAAM,SAAU,CAAK,EAGzD,MAAO,CAAE,OAAM,IAAK,CAAO,EAI7B,MAAO,CAAE,KAAM,CAAE,MAAO,UAAW,MAAO,IAAK,EAAG,IAAK,EAAM,CAAE,EA2I1D,MAAM,CAAuD,CAC3D,MAAoB,CAAC,EACpB,MACA,MAER,WAAW,CAAC,EAAU,CAsBpB,OArBA,KAAK,MAAQ,EAGb,KAAK,MAAQ,IAAI,MAAM,KAAM,CAC3B,IAAK,CAAC,EAAQ,EAAuB,IAAa,CAEhD,GAAI,KAAQ,EAAQ,OAAQ,EAAe,GAG3C,GAAI,OAAO,IAAS,UAAY,KAAQ,EAAO,MAC7C,MAAO,CAAC,IAAe,CACrB,IAAM,EAAO,EAAO,MAAM,GAE1B,OADA,EAAO,IAAI,EAAK,OAAO,CAAK,CAAC,EACtB,GAIX,OAEJ,CAAC,EAEM,KAAK,MAGN,GAAG,CAAC,EAAgC,CAE1C,OADA,KAAK,MAAM,KAAK,CAAI,EACb,KAAK,MAKd,EAAE,CAAC,EAAsC,CACvC,GAAI,KAAK,MAAM,SAAW,EAAG,MAAU,MAAM,oBAAoB,EACjE,IAAM,EAAO,KAAK,MAAM,KAAK,MAAM,OAAS,GAE5C,OADA,EAAK,OAAS,EACP,KAAK,MAGd,IAAI,CAAC,EAAgC,CACnC,OAAO,KAAK,IAAI,CAAI,EAGtB,MAAM,CAAC,EAA6B,CAClC,IAAM,EAAO,KAAK,MAAM,OACxB,GAAI,CAAC,EAAM,MAAU,MAAM,yBAAyB,EAEpD,IAAM,EAAU,EAAO,QAAU,EACjC,OAAO,KAAK,IAAI,EAAK,OAAO,CAAE,OAAQ,CAAQ,CAAC,CAAC,EAGlD,MAAM,EAAY,CAChB,MAAO,CACL,GAAI,MACJ,MAAO,CAAC,GAAG,KAAK,KAAK,CACvB,EAKF,UAAU,CAAC,EAAyC,CAClD,OAAO,KAAK,IAAI,KAAK,MAAM,WAAc,OAAO,CAAE,MAAK,CAAC,CAAC,EAG3D,UAAU,CAAC,EAAyC,CAClD,OAAO,KAAK,IAAI,KAAK,MAAM,WAAc,OAAO,CAAE,MAAK,CAAC,CAAC,EAK3D,EAAE,CACA,EACA,EACA,EACA,EACA,CACA,IAAM,EAAQ,IAAI,EAAa,KAAK,KAAK,EACzC,EAAW,CAAY,EAEvB,IAAI,EACJ,GAAI,EAAY,CACd,IAAM,EAAQ,IAAI,EAAa,KAAK,KAAK,EACzC,EAAW,CAAY,EACvB,EAAY,EAAM,MAIpB,IAAM,EAAgB,GAAe,EAAW,CAAI,EAE9C,EAAS,KAAK,MAAM,GAC1B,OAAO,KAAK,IACV,EAAO,OAAO,CACZ,UAAW,EACX,KAAM,EAAM,MACZ,KAAM,CACR,CAAC,CACH,EAGF,KAAK,CACH,EACA,EACA,EACA,CACA,IAAM,EAAQ,IAAI,EAAa,KAAK,KAAK,EACzC,EAAK,CAAY,EAGjB,IAAM,EAAgB,GAAe,EAAW,CAAI,EAE9C,EAAY,KAAK,MAAM,MAC7B,OAAO,KAAK,IACV,EAAU,OAAO,CACf,UAAW,EACX,KAAM,EAAM,KACd,CAAC,CACH,EAGF,KAAK,CAAC,EAA8C,CAClD,IAAM,EAAS,IAAI,EAAa,KAAK,KAAK,EAC1C,EAAM,CAAa,EACnB,IAAM,EAAY,KAAK,MAAM,MAC7B,OAAO,KAAK,IACV,EAAU,OAAO,CACf,MAAO,EAAO,KAChB,CAAC,CACH,EAGF,GAAG,CACD,EACA,EACA,EACA,CACA,IAAM,EAAS,IAAI,EAAa,KAAK,KAAK,EAC1C,EAAM,CAAa,EACnB,IAAM,EAAU,KAAK,MAAM,IAC3B,OAAO,KAAK,IACV,EAAQ,OAAO,CACb,QACA,KACA,MAAO,EAAO,KAChB,CAAC,CACH,EAGF,MAAM,CACJ,EACA,EACA,EACA,EAAmB,CAAC,EACpB,CACA,IAAM,EAAgB,GAAe,EAAW,CAAI,EAC9C,EAAa,KAAK,MAAM,OAC9B,OAAO,KAAK,IACV,EAAW,OAAO,CAChB,QACA,KACA,UAAW,CACb,CAAC,CACH,EAGF,IAAI,CAAC,EAAiB,EAAY,EAAmB,EAAmB,CAAC,EAAG,CAC1E,IAAM,EAAgB,GAAe,EAAW,CAAI,EAC9C,EAAW,KAAK,MAAM,KAC5B,OAAO,KAAK,IACV,EAAS,OAAO,CACd,QACA,KACA,UAAW,CACb,CAAC,CACH,EAGF,MAAS,CACP,EACA,EACA,EACA,EACA,EACA,CACA,IAAM,EAAS,IAAI,EAAa,KAAK,KAAK,EAC1C,EAAM,CAAa,EACnB,IAAM,EAAa,KAAK,MAAM,OAC9B,OAAO,KAAK,IACV,EAAW,OAAO,CAChB,QACA,KACA,cACA,UACA,MAAO,EAAO,KAChB,CAAC,CACH,EAGF,OAAO,CAAC,EAA8C,EAAc,CAClE,IAAM,EAAS,IAAI,EAAa,KAAK,KAAK,EAC1C,EAAM,CAAa,EACnB,IAAM,EAAW,KAAK,MAAM,QAC5B,OAAO,KAAK,IACV,EAAS,OAAO,CACd,MACA,MAAO,EAAO,KAChB,CAAC,CACH,EAGF,KAAK,CACH,EACA,EACA,EACA,CACA,IAAM,EAAS,IAAI,EAAa,KAAK,KAAK,EAC1C,EAAM,CAAa,EACnB,IAAM,EAAY,KAAK,MAAM,MAC7B,OAAO,KAAK,IACV,EAAU,OAAO,CACf,MACA,MAAO,EAAO,MACd,OACF,CAAC,CACH,EAGF,GAAG,CAAC,EAGD,CACD,IAAM,EAAO,IAAI,EAAa,KAAK,KAAK,EACxC,EAAS,IAAI,CAAW,EAExB,IAAI,EACJ,GAAI,EAAS,MAAO,CAClB,IAAM,EAAS,IAAI,EAAa,KAAK,KAAK,EAC1C,EAAS,MAAM,CAAa,EAC5B,EAAa,EAAO,MAGtB,IAAM,EAAU,KAAK,MAAM,IAC3B,OAAO,KAAK,IACV,EAAQ,OAAO,CACb,IAAK,EAAK,MACV,MAAO,CACT,CAAC,CACH,EAEJ,CC3sBA,mBAAS,uBCXT,IAAI,GAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,KAAM,EAAG,EAAG,GAAI,MAAO,GAAI,KAAM,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,MAAO,EAAG,KAAM,EAAG,IAAK,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,KAAM,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,KAAM,EAAG,OAAQ,GAAG,EAGroC,GAA6B,CAAC,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,GAAI,GAAI,KAAM,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,KAAM,GAAI,KAAM,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAA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AAe,OAAO,CAAI,EAK9B,IAAM,EAAW,IAAI,IAGf,EAAc,oDACpB,OAAQ,EAAQ,EAAY,KAAK,CAAmB,KAAO,KACzD,EAAS,IAAI,EAAM,EAAE,EAIvB,IAAM,EACJ,+DACF,OAAQ,EAAQ,EAAW,KAAK,CAAmB,KAAO,KACxD,EAAS,IAAI,EAAM,EAAE,EAMvB,IAAM,EAAW,IAAI,IAAI,CACvB,KACA,OACA,MACA,QACA,KACA,SACA,OACA,QACA,WACA,SACA,WACA,MACA,QACA,MACA,MACA,OACA,OACA,QACA,OACA,YACA,SACA,aACA,KACA,KACA,MACA,QACA,UACA,QACA,QACA,QACA,QACA,UACA,QACA,SACA,SACA,UACA,OACA,KACA,SACA,MACA,MACA,QAEA,UACA,OACA,QACA,SACA,SACA,SACA,UACA,OACA,OACA,UACA,MACA,MACA,UACA,UACA,eACA,eACA,YACA,aACA,aACA,aACA,cACA,cACA,gBACA,iBACA,cACA,WACA,QACA,YACA,aACA,SACA,OACA,MACA,QACA,UACA,QACA,SACA,MACA,SACA,SACA,UACA,OACA,YACA,UACA,WACA,aACA,SACA,WACA,WACA,MACA,QACA,WACA,WACA,aACA,YACA,YACA,OACA,YACF,CAAC,EAGK,EAAqB,CAAC,EAC5B,QAAW,KAAM,EACf,GAAI,CAAC,EAAS,IAAI,CAAE,GAAK,CAAC,EAAS,IAAI,CAAE,GAAK,CAAC,GAAgB,CAAE,EAC/D,EAAS,KAAK,CAAE,EAIpB,OAAO,EAAS,KAAK,EAavB,SAAS,EAAiB,CACxB,EACA,EACA,EACoB,CAGpB,IAAM,EAAc,EAAO,MAAM,EAAG,CAAc,EAI5C,EAAc,uDACd,EAAQ,EAAY,MAAM,CAAW,EAE3C,GAAI,CAAC,EAAO,CAEV,IAAM,EACJ,kFACI,EAAa,EAAY,MAAM,CAAY,EACjD,GAAI,CAAC,EAAY,OACjB,OAAO,GAAsB,EAAW,GAAI,CAAS,EAGvD,OAAO,GAAsB,EAAM,GAAI,CAAS,EAMlD,SAAS,EAAqB,CAC5B,EACA,EACoB,CAEpB,IAAM,EAAS,EAAU,MAAM,GAAG,EAAE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",
|
|
20
|
-
"debugId": "
|
|
19
|
+
"mappings": "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AAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,KAAM,EAAG,EAAG,GAAI,MAAO,GAAI,KAAM,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,MAAO,EAAG,KAAM,EAAG,IAAK,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,KAAM,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,KAAM,EAAG,OAAQ,GAAG,EAGroC,GAA6B,CAAC,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,GAAI,GAAI,KAAM,GAAI,EAAG,GAAI,KAAM,EAAG,IAAK,KAAM,GAAI,KAAM,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAM,MAAO,GAAI,KAAM,EAAG,IAAK,EAAG,KAAM,GAAI,KAAM,GAAI,IAAK,KAAM,IAAK,KAAM,KAAM,EAAG,IAAI,EAG/oE,GAA0B,yjBAG1B,GAA+B,o6BAS/B,GAAgB,CAClB,EAAG,sNACH,EAAG,+CACH,EAAG,OACH,OAAQ,yEACR,WAAY,gBACd,EAII,GAAuB,8KAEvB,GAAa,CACf,EAAG,GACH,UAAW,GAAuB,iBAClC,EAAG,GAAuB,0CAC5B,EAEI,GAA4B,kBAI5B,GAA0B,IAAI,OAAO,IAAM,GAA+B,GAAG,EAC7E,GAAqB,IAAI,OAAO,IAAM,GAA+B,GAA0B,GAAG,EAKtG,SAAS,EAAa,CAAC,EAAM,EAAK,CAChC,IAAI,EAAM,MACV,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EAAG,CAEtC,GADA,GAAO,EAAI,GACP,EAAM,EAAQ,MAAO,GAEzB,GADA,GAAO,EAAI,EAAI,GACX,GAAO,EAAQ,MAAO,GAE5B,MAAO,GAKT,SAAS,EAAiB,CAAC,EAAM,EAAQ,CACvC,GAAI,EAAO,GAAM,OAAO,IAAS,GACjC,GAAI,EAAO,GAAM,MAAO,GACxB,GAAI,EAAO,GAAM,OAAO,IAAS,GACjC,GAAI,EAAO,IAAO,MAAO,GACzB,GAAI,GAAQ,MAAU,OAAO,GAAQ,KAAQ,GAAwB,KAAK,OAAO,aAAa,CAAI,CAAC,EACnG,GAAI,IAAW,GAAS,MAAO,GAC/B,OAAO,GAAc,EAAM,EAA0B,EAKvD,SAAS,EAAgB,CAAC,EAAM,EAAQ,CACtC,GAAI,EAAO,GAAM,OAAO,IAAS,GACjC,GAAI,EAAO,GAAM,MAAO,GACxB,GAAI,EAAO,GAAM,MAAO,GACxB,GAAI,EAAO,GAAM,MAAO,GACxB,GAAI,EAAO,GAAM,OAAO,IAAS,GACjC,GAAI,EAAO,IAAO,MAAO,GACzB,GAAI,GAAQ,MAAU,OAAO,GAAQ,KAAQ,GAAmB,KAAK,OAAO,aAAa,CAAI,CAAC,EAC9F,GAAI,IAAW,GAAS,MAAO,GAC/B,OAAO,GAAc,EAAM,EAA0B,GAAK,GAAc,EAAM,EAAqB,EA0BrG,IAAI,EAAY,QAAkB,CAAC,EAAO,EAAM,CAC9C,GAAK,IAAc,OAAI,EAAO,CAAC,EAE/B,KAAK,MAAQ,EACb,KAAK,QAAU,EAAK,QACpB,KAAK,WAAa,CAAC,CAAC,EAAK,WACzB,KAAK,WAAa,CAAC,CAAC,EAAK,WACzB,KAAK,OAAS,CAAC,CAAC,EAAK,OACrB,KAAK,SAAW,CAAC,CAAC,EAAK,SACvB,KAAK,OAAS,CAAC,CAAC,EAAK,OACrB,KAAK,QAAU,CAAC,CAAC,EAAK,QACtB,KAAK,MAAQ,EAAK,OAAS,KAC3B,KAAK,cAAgB,MAGvB,SAAS,EAAK,CAAC,EAAM,EAAM,CACzB,OAAO,IAAI,EAAU,EAAM,CAAC,WAAY,GAAM,MAAO,CAAI,CAAC,EAE5D,IAAI,GAAa,CAAC,WAAY,EAAI,EAAG,EAAa,CAAC,WAAY,EAAI,EAI/D,GAAW,CAAC,EAGhB,SAAS,CAAE,CAAC,EAAM,EAAS,CACzB,GAAK,IAAiB,OAAI,EAAU,CAAC,EAGrC,OADA,EAAQ,QAAU,EACX,GAAS,GAAQ,IAAI,EAAU,EAAM,CAAO,EAGrD,IAAI,EAAU,CACZ,IAAK,IAAI,EAAU,MAAO,CAAU,EACpC,OAAQ,IAAI,EAAU,SAAU,CAAU,EAC1C,OAAQ,IAAI,EAAU,SAAU,CAAU,EAC1C,KAAM,IAAI,EAAU,OAAQ,CAAU,EACtC,UAAW,IAAI,EAAU,YAAa,CAAU,EAChD,IAAK,IAAI,EAAU,KAAK,EAGxB,SAAU,IAAI,EAAU,IAAK,CAAC,WAAY,GAAM,WAAY,EAAI,CAAC,EACjE,SAAU,IAAI,EAAU,GAAG,EAC3B,OAAQ,IAAI,EAAU,IAAK,CAAC,WAAY,GAAM,WAAY,EAAI,CAAC,EAC/D,OAAQ,IAAI,EAAU,GAAG,EACzB,OAAQ,IAAI,EAAU,IAAK,CAAC,WAAY,GAAM,WAAY,EAAI,CAAC,EAC/D,OAAQ,IAAI,EAAU,GAAG,EACzB,MAAO,IAAI,EAAU,IAAK,EAAU,EACpC,KAAM,IAAI,EAAU,IAAK,EAAU,EACnC,MAAO,IAAI,EAAU,IAAK,EAAU,EACpC,IAAK,IAAI,EAAU,GAAG,EACtB,SAAU,IAAI,EAAU,IAAK,EAAU,EACvC,YAAa,IAAI,EAAU,IAAI,EAC/B,MAAO,IAAI,EAAU,KAAM,EAAU,EACrC,SAAU,IAAI,EAAU,UAAU,EAClC,gBAAiB,IAAI,EAAU,iBAAiB,EAChD,SAAU,IAAI,EAAU,MAAO,EAAU,EACzC,UAAW,IAAI,EAAU,IAAK,CAAU,EACxC,aAAc,IAAI,EAAU,KAAM,CAAC,WAAY,GAAM,WAAY,EAAI,CAAC,EAgBtE,GAAI,IAAI,EAAU,IAAK,CAAC,WAAY,GAAM,SAAU,EAAI,CAAC,EACzD,OAAQ,IAAI,EAAU,KAAM,CAAC,WAAY,GAAM,SAAU,EAAI,CAAC,EAC9D,OAAQ,IAAI,EAAU,QAAS,CAAC,OAAQ,GAAM,QAAS,GAAM,WAAY,EAAI,CAAC,EAC9E,OAAQ,IAAI,EAAU,MAAO,CAAC,WAAY,GAAM,OAAQ,GAAM,WAAY,EAAI,CAAC,EAC/E,UAAW,GAAM,KAAM,CAAC,EACxB,WAAY,GAAM,KAAM,CAAC,EACzB,UAAW,GAAM,IAAK,CAAC,EACvB,WAAY,GAAM,IAAK,CAAC,EACxB,WAAY,GAAM,IAAK,CAAC,EACxB,SAAU,GAAM,gBAAiB,CAAC,EAClC,WAAY,GAAM,YAAa,CAAC,EAChC,SAAU,GAAM,YAAa,CAAC,EAC9B,QAAS,IAAI,EAAU,MAAO,CAAC,WAAY,GAAM,MAAO,EAAG,OAAQ,GAAM,WAAY,EAAI,CAAC,EAC1F,OAAQ,GAAM,IAAK,EAAE,EACrB,KAAM,GAAM,IAAK,EAAE,EACnB,MAAO,GAAM,IAAK,EAAE,EACpB,SAAU,IAAI,EAAU,KAAM,CAAC,WAAY,EAAI,CAAC,EAChD,SAAU,GAAM,KAAM,CAAC,EAGvB,OAAQ,EAAG,OAAO,EAClB,MAAO,EAAG,OAAQ,EAAU,EAC5B,OAAQ,EAAG,OAAO,EAClB,UAAW,EAAG,UAAU,EACxB,UAAW,EAAG,UAAU,EACxB,SAAU,EAAG,UAAW,EAAU,EAClC,IAAK,EAAG,KAAM,CAAC,OAAQ,GAAM,WAAY,EAAI,CAAC,EAC9C,MAAO,EAAG,OAAQ,EAAU,EAC5B,SAAU,EAAG,SAAS,EACtB,KAAM,EAAG,MAAO,CAAC,OAAQ,EAAI,CAAC,EAC9B,UAAW,EAAG,WAAY,CAAU,EACpC,IAAK,EAAG,IAAI,EACZ,QAAS,EAAG,SAAU,EAAU,EAChC,QAAS,EAAG,QAAQ,EACpB,OAAQ,EAAG,QAAS,EAAU,EAC9B,KAAM,EAAG,KAAK,EACd,KAAM,EAAG,KAAK,EACd,OAAQ,EAAG,OAAO,EAClB,OAAQ,EAAG,QAAS,CAAC,OAAQ,EAAI,CAAC,EAClC,MAAO,EAAG,MAAM,EAChB,KAAM,EAAG,MAAO,CAAC,WAAY,GAAM,WAAY,EAAI,CAAC,EACpD,MAAO,EAAG,OAAQ,CAAU,EAC5B,OAAQ,EAAG,QAAS,CAAU,EAC9B,OAAQ,EAAG,QAAS,CAAU,EAC9B,SAAU,EAAG,UAAW,EAAU,EAClC,QAAS,EAAG,QAAQ,EACpB,QAAS,EAAG,SAAU,CAAU,EAChC,MAAO,EAAG,OAAQ,CAAU,EAC5B,MAAO,EAAG,OAAQ,CAAU,EAC5B,OAAQ,EAAG,QAAS,CAAU,EAC9B,IAAK,EAAG,KAAM,CAAC,WAAY,GAAM,MAAO,CAAC,CAAC,EAC1C,YAAa,EAAG,aAAc,CAAC,WAAY,GAAM,MAAO,CAAC,CAAC,EAC1D,QAAS,EAAG,SAAU,CAAC,WAAY,GAAM,OAAQ,GAAM,WAAY,EAAI,CAAC,EACxE,MAAO,EAAG,OAAQ,CAAC,WAAY,GAAM,OAAQ,GAAM,WAAY,EAAI,CAAC,EACpE,QAAS,EAAG,SAAU,CAAC,WAAY,GAAM,OAAQ,GAAM,WAAY,EAAI,CAAC,CAC1E,EAKI,EAAY,yBACZ,GAAa,IAAI,OAAO,EAAU,OAAQ,GAAG,EAEjD,SAAS,EAAS,CAAC,EAAM,CACvB,OAAO,IAAS,IAAM,IAAS,IAAM,IAAS,MAAU,IAAS,KAGnE,SAAS,EAAa,CAAC,EAAM,EAAM,EAAK,CACtC,GAAK,IAAa,OAAI,EAAM,EAAK,OAEjC,QAAS,EAAI,EAAM,EAAI,EAAK,IAAK,CAC/B,IAAI,EAAO,EAAK,WAAW,CAAC,EAC5B,GAAI,GAAU,CAAI,EACd,OAAO,EAAI,EAAM,GAAK,IAAS,IAAM,EAAK,WAAW,EAAI,CAAC,IAAM,GAAK,EAAI,EAAI,EAAI,EAEvF,MAAO,GAGT,IAAI,GAAqB,gDAErB,EAAiB,gCAEjB,GAAM,OAAO,UACb,GAAiB,GAAI,eACrB,GAAW,GAAI,SAEf,GAAS,OAAO,QAAW,QAAS,CAAC,EAAK,EAAU,CAAE,OACxD,GAAe,KAAK,EAAK,CAAQ,GAG/B,GAAU,MAAM,SAAY,QAAS,CAAC,EAAK,CAAE,OAC/C,GAAS,KAAK,CAAG,IAAM,kBAGrB,GAAc,OAAO,OAAO,IAAI,EAEpC,SAAS,EAAW,CAAC,EAAO,CAC1B,OAAO,GAAY,KAAW,GAAY,GAAS,IAAI,OAAO,OAAS,EAAM,QAAQ,KAAM,GAAG,EAAI,IAAI,GAGxG,SAAS,EAAiB,CAAC,EAAM,CAE/B,GAAI,GAAQ,MAAU,OAAO,OAAO,aAAa,CAAI,EAErD,OADA,GAAQ,MACD,OAAO,cAAc,GAAQ,IAAM,OAAS,EAAO,MAAQ,KAAM,EAG1E,IAAI,GAAgB,+EAKhB,GAAW,QAAiB,CAAC,EAAM,EAAK,CAC1C,KAAK,KAAO,EACZ,KAAK,OAAS,GAGhB,GAAS,UAAU,OAAS,QAAgB,CAAC,EAAG,CAC9C,OAAO,IAAI,GAAS,KAAK,KAAM,KAAK,OAAS,CAAC,GAGhD,IAAI,GAAiB,QAAuB,CAAC,EAAG,EAAO,EAAK,CAG1D,GAFA,KAAK,MAAQ,EACb,KAAK,IAAM,EACP,EAAE,aAAe,KAAQ,KAAK,OAAS,EAAE,YAS/C,SAAS,EAAW,CAAC,EAAO,EAAQ,CAClC,QAAS,EAAO,EAAG,EAAM,IAAK,CAC5B,IAAI,EAAY,GAAc,EAAO,EAAK,CAAM,EAChD,GAAI,EAAY,EAAK,OAAO,IAAI,GAAS,EAAM,EAAS,CAAG,EAC3D,EAAE,EACF,EAAM,GAOV,IAAI,GAAiB,CAOnB,YAAa,KAIb,WAAY,SAMZ,oBAAqB,KAGrB,gBAAiB,KAKjB,cAAe,KAGf,2BAA4B,GAI5B,4BAA6B,GAI7B,0BAA2B,KAG3B,wBAAyB,KAIzB,cAAe,GAIf,mBAAoB,GAKpB,UAAW,GAMX,QAAS,KAaT,UAAW,KASX,OAAQ,GAMR,QAAS,KAGT,WAAY,KAGZ,iBAAkB,KAGlB,eAAgB,EAClB,EAII,GAAyB,GAE7B,SAAS,EAAU,CAAC,EAAM,CACxB,IAAI,EAAU,CAAC,EAEf,QAAS,KAAO,GACZ,EAAQ,GAAO,GAAQ,GAAO,EAAM,CAAG,EAAI,EAAK,GAAO,GAAe,GAE1E,GAAI,EAAQ,cAAgB,SAC1B,EAAQ,YAAc,IACjB,QAAI,EAAQ,aAAe,KAAM,CACtC,GAAI,CAAC,IAA0B,OAAO,UAAY,UAAY,QAAQ,KACpE,GAAyB,GACzB,QAAQ,KAAK;AAAA,8DAAoH,EAEnI,EAAQ,YAAc,GACjB,QAAI,EAAQ,aAAe,KAChC,EAAQ,aAAe,KAGzB,GAAI,EAAQ,eAAiB,KACzB,EAAQ,cAAgB,EAAQ,YAAc,EAElD,GAAI,CAAC,GAAQ,EAAK,eAAiB,KAC/B,EAAQ,cAAgB,EAAQ,aAAe,GAEnD,GAAI,GAAQ,EAAQ,OAAO,EAAG,CAC5B,IAAI,EAAS,EAAQ,QACrB,EAAQ,QAAU,QAAS,CAAC,EAAO,CAAE,OAAO,EAAO,KAAK,CAAK,GAE/D,GAAI,GAAQ,EAAQ,SAAS,EACzB,EAAQ,UAAY,GAAY,EAAS,EAAQ,SAAS,EAE9D,OAAO,EAGT,SAAS,EAAW,CAAC,EAAS,EAAO,CACnC,OAAO,QAAQ,CAAC,EAAO,EAAM,EAAO,EAAK,EAAU,EAAQ,CACzD,IAAI,EAAU,CACZ,KAAM,EAAQ,QAAU,OACxB,MAAO,EACP,MAAO,EACP,IAAK,CACP,EACA,GAAI,EAAQ,UACR,EAAQ,IAAM,IAAI,GAAe,KAAM,EAAU,CAAM,EAC3D,GAAI,EAAQ,OACR,EAAQ,MAAQ,CAAC,EAAO,CAAG,EAC/B,EAAM,KAAK,CAAO,GAKtB,IACI,GAAY,EACZ,GAAiB,EACjB,GAAc,EACd,GAAkB,EAClB,GAAc,GACd,GAAqB,GACrB,GAAc,GACd,GAAqB,IACrB,GAA2B,IAC3B,GAAyB,IACzB,GAAY,GAAY,GAAiB,GAE7C,SAAS,EAAa,CAAC,EAAO,EAAW,CACvC,OAAO,IAAkB,EAAQ,GAAc,IAAM,EAAY,GAAkB,GAIrF,IACI,GAAY,EACZ,GAAW,EACX,GAAe,EACf,GAAgB,EAChB,GAAoB,EACpB,GAAe,EAEf,EAAS,QAAe,CAAC,EAAS,EAAO,EAAU,CACrD,KAAK,QAAU,EAAU,GAAW,CAAO,EAC3C,KAAK,WAAa,EAAQ,WAC1B,KAAK,SAAW,GAAY,GAAW,EAAQ,aAAe,EAAI,EAAI,EAAQ,aAAe,SAAW,UAAY,EAAE,EACtH,IAAI,EAAW,GACf,GAAI,EAAQ,gBAAkB,IAE5B,GADA,EAAW,GAAc,EAAQ,aAAe,EAAI,EAAI,EAAQ,cAAgB,EAAI,EAAI,GACpF,EAAQ,aAAe,SAAY,GAAY,SAErD,KAAK,cAAgB,GAAY,CAAQ,EACzC,IAAI,GAAkB,EAAW,EAAW,IAAM,IAAM,GAAc,OAatE,GAZA,KAAK,oBAAsB,GAAY,CAAc,EACrD,KAAK,wBAA0B,GAAY,EAAiB,IAAM,GAAc,UAAU,EAC1F,KAAK,MAAQ,OAAO,CAAK,EAKzB,KAAK,YAAc,GAKf,EACF,KAAK,IAAM,EACX,KAAK,UAAY,KAAK,MAAM,YAAY;AAAA,EAAM,EAAW,CAAC,EAAI,EAC9D,KAAK,QAAU,KAAK,MAAM,MAAM,EAAG,KAAK,SAAS,EAAE,MAAM,CAAS,EAAE,OAEpE,UAAK,IAAM,KAAK,UAAY,EAC5B,KAAK,QAAU,EAwCjB,GAnCA,KAAK,KAAO,EAAQ,IAEpB,KAAK,MAAQ,KAEb,KAAK,MAAQ,KAAK,IAAM,KAAK,IAG7B,KAAK,SAAW,KAAK,OAAS,KAAK,YAAY,EAG/C,KAAK,cAAgB,KAAK,gBAAkB,KAC5C,KAAK,aAAe,KAAK,WAAa,KAAK,IAK3C,KAAK,QAAU,KAAK,eAAe,EACnC,KAAK,YAAc,GAGnB,KAAK,SAAW,EAAQ,aAAe,SACvC,KAAK,OAAS,KAAK,UAAY,KAAK,gBAAgB,KAAK,GAAG,EAG5D,KAAK,iBAAmB,GACxB,KAAK,yBAA2B,GAGhC,KAAK,SAAW,KAAK,SAAW,KAAK,cAAgB,EAErD,KAAK,OAAS,CAAC,EAEf,KAAK,iBAAmB,OAAO,OAAO,IAAI,EAGtC,KAAK,MAAQ,GAAK,EAAQ,eAAiB,KAAK,MAAM,MAAM,EAAG,CAAC,IAAM,KACtE,KAAK,gBAAgB,CAAC,EAG1B,KAAK,WAAa,CAAC,EACnB,KAAK,WAAW,EAAS,EAGzB,KAAK,YAAc,KAKnB,KAAK,iBAAmB,CAAC,GAGvB,GAAqB,CAAE,WAAY,CAAE,aAAc,EAAK,EAAE,YAAa,CAAE,aAAc,EAAK,EAAE,QAAS,CAAE,aAAc,EAAK,EAAE,SAAU,CAAE,aAAc,EAAK,EAAE,WAAY,CAAE,aAAc,EAAK,EAAE,iBAAkB,CAAE,aAAc,EAAK,EAAE,oBAAqB,CAAE,aAAc,EAAK,EAAE,kBAAmB,CAAE,aAAc,EAAK,EAAE,mBAAoB,CAAE,aAAc,EAAK,CAAE,EAEhX,EAAO,UAAU,MAAQ,QAAe,EAAG,CACzC,IAAI,EAAO,KAAK,QAAQ,SAAW,KAAK,UAAU,EAElD,OADA,KAAK,UAAU,EACR,KAAK,cAAc,CAAI,GAGhC,GAAmB,WAAW,IAAM,QAAS,EAAG,CAAE,OAAQ,KAAK,gBAAgB,EAAE,MAAQ,IAAkB,GAE3G,GAAmB,YAAY,IAAM,QAAS,EAAG,CAAE,OAAQ,KAAK,gBAAgB,EAAE,MAAQ,IAAmB,GAE7G,GAAmB,QAAQ,IAAM,QAAS,EAAG,CAAE,OAAQ,KAAK,gBAAgB,EAAE,MAAQ,IAAe,GAErG,GAAmB,SAAS,IAAM,QAAS,EAAG,CAC5C,QAAS,EAAI,KAAK,WAAW,OAAS,EAAG,GAAK,EAAG,IAAK,CACpD,IAAI,EAAM,KAAK,WAAW,GACpB,EAAQ,EAAI,MAClB,GAAI,GAAS,GAA2B,IAA2B,MAAO,GAC1E,GAAI,EAAQ,GAAkB,OAAQ,EAAQ,IAAe,EAE/D,OAAQ,KAAK,UAAY,KAAK,QAAQ,aAAe,IAAO,KAAK,QAAQ,2BAG3E,GAAmB,WAAW,IAAM,QAAS,EAAG,CAC9C,IAAI,EAAM,KAAK,iBAAiB,EAC1B,EAAQ,EAAI,MAClB,OAAQ,EAAQ,IAAe,GAAK,KAAK,QAAQ,yBAGnD,GAAmB,iBAAiB,IAAM,QAAS,EAAG,CAAE,OAAQ,KAAK,iBAAiB,EAAE,MAAQ,IAAsB,GAEtH,GAAmB,oBAAoB,IAAM,QAAS,EAAG,CAAE,OAAO,KAAK,2BAA2B,KAAK,aAAa,CAAC,GAErH,GAAmB,kBAAkB,IAAM,QAAS,EAAG,CACrD,QAAS,EAAI,KAAK,WAAW,OAAS,EAAG,GAAK,EAAG,IAAK,CACpD,IAAI,EAAM,KAAK,WAAW,GACpB,EAAQ,EAAI,MAClB,GAAI,GAAS,GAA2B,KAClC,EAAQ,IAAmB,EAAE,EAAQ,IAAiB,MAAO,GAErE,MAAO,IAGT,GAAmB,mBAAmB,IAAM,QAAS,EAAG,CACtD,OAAQ,KAAK,gBAAgB,EAAE,MAAQ,IAA4B,GAGrE,EAAO,OAAS,QAAgB,EAAG,CAC/B,IAAI,EAAU,CAAC,EAAG,EAAM,UAAU,OAClC,MAAQ,IAAQ,EAAS,GAAQ,UAAW,GAE9C,IAAI,EAAM,KACV,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAO,EAAM,EAAQ,GAAG,CAAG,EAC/D,OAAO,GAGT,EAAO,MAAQ,QAAe,CAAC,EAAO,EAAS,CAC7C,OAAO,IAAI,KAAK,EAAS,CAAK,EAAE,MAAM,GAGxC,EAAO,kBAAoB,QAA2B,CAAC,EAAO,EAAK,EAAS,CAC1E,IAAI,EAAS,IAAI,KAAK,EAAS,EAAO,CAAG,EAEzC,OADA,EAAO,UAAU,EACV,EAAO,gBAAgB,GAGhC,EAAO,UAAY,QAAmB,CAAC,EAAO,EAAS,CACrD,OAAO,IAAI,KAAK,EAAS,CAAK,GAGhC,OAAO,iBAAkB,EAAO,UAAW,EAAmB,EAE9D,IAAI,EAAO,EAAO,UAId,GAAU,qDACd,EAAK,gBAAkB,QAAQ,CAAC,EAAO,CACrC,GAAI,KAAK,QAAQ,YAAc,EAAK,MAAO,GAC3C,OAAS,CAEP,EAAe,UAAY,EAC3B,GAAS,EAAe,KAAK,KAAK,KAAK,EAAE,GAAG,OAC5C,IAAI,EAAQ,GAAQ,KAAK,KAAK,MAAM,MAAM,CAAK,CAAC,EAChD,GAAI,CAAC,EAAS,MAAO,GACrB,IAAK,EAAM,IAAM,EAAM,MAAQ,aAAc,CAC3C,EAAe,UAAY,EAAQ,EAAM,GAAG,OAC5C,IAAI,EAAa,EAAe,KAAK,KAAK,KAAK,EAAG,EAAM,EAAW,MAAQ,EAAW,GAAG,OACrF,EAAO,KAAK,MAAM,OAAO,CAAG,EAChC,OAAO,IAAS,KAAO,IAAS,KAC7B,EAAU,KAAK,EAAW,EAAE,GAC5B,EAAE,sBAAsB,KAAK,CAAI,GAAK,IAAS,KAAO,KAAK,MAAM,OAAO,EAAM,CAAC,IAAM,KAO1F,GALA,GAAS,EAAM,GAAG,OAGlB,EAAe,UAAY,EAC3B,GAAS,EAAe,KAAK,KAAK,KAAK,EAAE,GAAG,OACxC,KAAK,MAAM,KAAW,IACtB,MAOR,EAAK,IAAM,QAAQ,CAAC,EAAM,CACxB,GAAI,KAAK,OAAS,EAEhB,OADA,KAAK,KAAK,EACH,GAEP,WAAO,IAMX,EAAK,aAAe,QAAQ,CAAC,EAAM,CACjC,OAAO,KAAK,OAAS,EAAQ,MAAQ,KAAK,QAAU,GAAQ,CAAC,KAAK,aAKpE,EAAK,cAAgB,QAAQ,CAAC,EAAM,CAClC,GAAI,CAAC,KAAK,aAAa,CAAI,EAAK,MAAO,GAEvC,OADA,KAAK,KAAK,EACH,IAKT,EAAK,iBAAmB,QAAQ,CAAC,EAAM,CACrC,GAAI,CAAC,KAAK,cAAc,CAAI,EAAK,KAAK,WAAW,GAKnD,EAAK,mBAAqB,QAAQ,EAAG,CACnC,OAAO,KAAK,OAAS,EAAQ,KAC3B,KAAK,OAAS,EAAQ,QACtB,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,WAAY,KAAK,KAAK,CAAC,GAGhE,EAAK,gBAAkB,QAAQ,EAAG,CAChC,GAAI,KAAK,mBAAmB,EAAG,CAC7B,GAAI,KAAK,QAAQ,oBACb,KAAK,QAAQ,oBAAoB,KAAK,WAAY,KAAK,aAAa,EACxE,MAAO,KAOX,EAAK,UAAY,QAAQ,EAAG,CAC1B,GAAI,CAAC,KAAK,IAAI,EAAQ,IAAI,GAAK,CAAC,KAAK,gBAAgB,EAAK,KAAK,WAAW,GAG5E,EAAK,mBAAqB,QAAQ,CAAC,EAAS,EAAS,CACnD,GAAI,KAAK,OAAS,EAAS,CACzB,GAAI,KAAK,QAAQ,gBACb,KAAK,QAAQ,gBAAgB,KAAK,aAAc,KAAK,eAAe,EACxE,GAAI,CAAC,EACD,KAAK,KAAK,EACd,MAAO,KAOX,EAAK,OAAS,QAAQ,CAAC,EAAM,CAC3B,KAAK,IAAI,CAAI,GAAK,KAAK,WAAW,GAKpC,EAAK,WAAa,QAAQ,CAAC,EAAK,CAC9B,KAAK,MAAM,GAAO,KAAO,EAAM,KAAK,MAAO,kBAAkB,GAG/D,IAAI,GAAsB,QAA4B,EAAG,CACvD,KAAK,gBACL,KAAK,cACL,KAAK,oBACL,KAAK,kBACL,KAAK,YACH,IAGJ,EAAK,mBAAqB,QAAQ,CAAC,EAAwB,EAAU,CACnE,GAAI,CAAC,EAA0B,OAC/B,GAAI,EAAuB,cAAgB,GACvC,KAAK,iBAAiB,EAAuB,cAAe,+CAA+C,EAC/G,IAAI,EAAS,EAAW,EAAuB,oBAAsB,EAAuB,kBAC5F,GAAI,EAAS,GAAM,KAAK,iBAAiB,EAAQ,EAAW,sBAAwB,uBAAuB,GAG7G,EAAK,sBAAwB,QAAQ,CAAC,EAAwB,EAAU,CACtE,GAAI,CAAC,EAA0B,MAAO,GACtC,IAA6C,gBAAzC,EACqC,YAArC,GAAc,EAClB,GAAI,CAAC,EAAY,OAAO,GAAmB,GAAK,GAAe,EAC/D,GAAI,GAAmB,EACnB,KAAK,MAAM,EAAiB,yEAAyE,EACzG,GAAI,GAAe,EACf,KAAK,iBAAiB,EAAa,oCAAoC,GAG7E,EAAK,+BAAiC,QAAQ,EAAG,CAC/C,GAAI,KAAK,WAAa,CAAC,KAAK,UAAY,KAAK,SAAW,KAAK,UACzD,KAAK,MAAM,KAAK,SAAU,4CAA4C,EAC1E,GAAI,KAAK,SACL,KAAK,MAAM,KAAK,SAAU,4CAA4C,GAG5E,EAAK,qBAAuB,QAAQ,CAAC,EAAM,CACzC,GAAI,EAAK,OAAS,0BACd,OAAO,KAAK,qBAAqB,EAAK,UAAU,EACpD,OAAO,EAAK,OAAS,cAAgB,EAAK,OAAS,oBAGrD,IAAI,EAAO,EAAO,UASlB,EAAK,cAAgB,QAAQ,CAAC,EAAM,CAClC,IAAI,EAAU,OAAO,OAAO,IAAI,EAChC,GAAI,CAAC,EAAK,KAAQ,EAAK,KAAO,CAAC,EAC/B,MAAO,KAAK,OAAS,EAAQ,IAAK,CAChC,IAAI,EAAO,KAAK,eAAe,KAAM,GAAM,CAAO,EAClD,EAAK,KAAK,KAAK,CAAI,EAErB,GAAI,KAAK,SACL,QAAS,EAAI,EAAG,EAAO,OAAO,KAAK,KAAK,gBAAgB,EAAG,EAAI,EAAK,OAAQ,GAAK,EACjF,CACE,IAAI,EAAO,EAAK,GAEhB,KAAK,iBAAiB,KAAK,iBAAiB,GAAM,MAAQ,WAAa,EAAO,kBAAmB,EAKvG,OAHA,KAAK,uBAAuB,EAAK,IAAI,EACrC,KAAK,KAAK,EACV,EAAK,WAAa,KAAK,QAAQ,WACxB,KAAK,WAAW,EAAM,SAAS,GAGxC,IAAI,GAAY,CAAC,KAAM,MAAM,EAAG,GAAc,CAAC,KAAM,QAAQ,EAE7D,EAAK,MAAQ,QAAQ,CAAC,EAAS,CAC7B,GAAI,KAAK,QAAQ,YAAc,GAAK,CAAC,KAAK,aAAa,KAAK,EAAK,MAAO,GACxE,EAAe,UAAY,KAAK,IAChC,IAAI,EAAO,EAAe,KAAK,KAAK,KAAK,EACrC,EAAO,KAAK,IAAM,EAAK,GAAG,OAAQ,EAAS,KAAK,MAAM,WAAW,CAAI,EAKzE,GAAI,IAAW,IAAM,IAAW,GAAM,MAAO,GAC7C,GAAI,EAAW,MAAO,GAEtB,GAAI,IAAW,KAAO,EAAS,OAAU,EAAS,MAAU,MAAO,GACnE,GAAI,GAAkB,EAAQ,EAAI,EAAG,CACnC,IAAI,EAAM,EAAO,EACjB,MAAO,GAAiB,EAAS,KAAK,MAAM,WAAW,CAAG,EAAG,EAAI,EAAK,EAAE,EACxE,GAAI,IAAW,IAAM,EAAS,OAAU,EAAS,MAAU,MAAO,GAClE,IAAI,EAAQ,KAAK,MAAM,MAAM,EAAM,CAAG,EACtC,GAAI,CAAC,GAA0B,KAAK,CAAK,EAAK,MAAO,GAEvD,MAAO,IAMT,EAAK,gBAAkB,QAAQ,EAAG,CAChC,GAAI,KAAK,QAAQ,YAAc,GAAK,CAAC,KAAK,aAAa,OAAO,EAC1D,MAAO,GAEX,EAAe,UAAY,KAAK,IAChC,IAAI,EAAO,EAAe,KAAK,KAAK,KAAK,EACrC,EAAO,KAAK,IAAM,EAAK,GAAG,OAAQ,EACtC,MAAO,CAAC,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,IAAK,CAAI,CAAC,GACrD,KAAK,MAAM,MAAM,EAAM,EAAO,CAAC,IAAM,aACpC,EAAO,IAAM,KAAK,MAAM,QACxB,EAAE,GAAiB,EAAQ,KAAK,MAAM,WAAW,EAAO,CAAC,CAAC,GAAK,EAAQ,OAAU,EAAQ,SAG9F,EAAK,eAAiB,QAAQ,CAAC,EAAc,EAAO,CAClD,GAAI,KAAK,QAAQ,YAAc,IAAM,CAAC,KAAK,aAAa,EAAe,QAAU,OAAO,EACpF,MAAO,GAEX,EAAe,UAAY,KAAK,IAChC,IAAI,EAAO,EAAe,KAAK,KAAK,KAAK,EACrC,EAAO,KAAK,IAAM,EAAK,GAAG,OAE9B,GAAI,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,IAAK,CAAI,CAAC,EAAK,MAAO,GAE/D,GAAI,EAAc,CAChB,IAAI,EAAc,EAAO,EAAe,EACxC,GAAI,KAAK,MAAM,MAAM,EAAM,CAAW,IAAM,SAC1C,IAAgB,KAAK,MAAM,QAC3B,GAAiB,EAAQ,KAAK,MAAM,WAAW,CAAW,CAAC,GAC1D,EAAQ,OAAU,EAAQ,MACzB,MAAO,GAEX,EAAe,UAAY,EAC3B,IAAI,EAAiB,EAAe,KAAK,KAAK,KAAK,EACnD,GAAI,GAAkB,EAAU,KAAK,KAAK,MAAM,MAAM,EAAa,EAAc,EAAe,GAAG,MAAM,CAAC,EAAK,MAAO,GAGxH,GAAI,EAAO,CACT,IAAI,EAAW,EAAO,EAAY,EAClC,GAAI,KAAK,MAAM,MAAM,EAAM,CAAQ,IAAM,MACvC,GAAI,IAAa,KAAK,MAAM,QACzB,CAAC,GAAiB,EAAU,KAAK,MAAM,WAAW,CAAQ,CAAC,GAAK,EAAE,EAAU,OAAU,EAAU,OAAY,MAAO,IAI1H,IAAI,EAAK,KAAK,MAAM,WAAW,CAAI,EACnC,OAAO,GAAkB,EAAI,EAAI,GAAK,IAAO,IAG/C,EAAK,aAAe,QAAQ,CAAC,EAAO,CAClC,OAAO,KAAK,eAAe,GAAM,CAAK,GAGxC,EAAK,QAAU,QAAQ,CAAC,EAAO,CAC7B,OAAO,KAAK,eAAe,GAAO,CAAK,GAUzC,EAAK,eAAiB,QAAQ,CAAC,EAAS,EAAU,EAAS,CACzD,IAAI,EAAY,KAAK,KAAM,EAAO,KAAK,UAAU,EAAG,EAEpD,GAAI,KAAK,MAAM,CAAO,EACpB,EAAY,EAAQ,KACpB,EAAO,MAOT,OAAQ,QACH,EAAQ,YAAa,EAAQ,UAAW,OAAO,KAAK,4BAA4B,EAAM,EAAU,OAAO,OACvG,EAAQ,UAAW,OAAO,KAAK,uBAAuB,CAAI,OAC1D,EAAQ,IAAK,OAAO,KAAK,iBAAiB,CAAI,OAC9C,EAAQ,KAAM,OAAO,KAAK,kBAAkB,CAAI,OAChD,EAAQ,UAIX,GAAK,IAAY,KAAK,QAAU,IAAY,MAAQ,IAAY,UAAa,KAAK,QAAQ,aAAe,EAAK,KAAK,WAAW,EAC9H,OAAO,KAAK,uBAAuB,EAAM,GAAO,CAAC,CAAO,OACrD,EAAQ,OACX,GAAI,EAAW,KAAK,WAAW,EAC/B,OAAO,KAAK,WAAW,EAAM,EAAI,OAC9B,EAAQ,IAAK,OAAO,KAAK,iBAAiB,CAAI,OAC9C,EAAQ,QAAS,OAAO,KAAK,qBAAqB,CAAI,OACtD,EAAQ,QAAS,OAAO,KAAK,qBAAqB,CAAI,OACtD,EAAQ,OAAQ,OAAO,KAAK,oBAAoB,CAAI,OACpD,EAAQ,KAAM,OAAO,KAAK,kBAAkB,CAAI,OAChD,EAAQ,YAAa,EAAQ,KAEhC,GADA,EAAO,GAAQ,KAAK,MAChB,GAAW,IAAS,MAAS,KAAK,WAAW,EACjD,OAAO,KAAK,kBAAkB,EAAM,CAAI,OACrC,EAAQ,OAAQ,OAAO,KAAK,oBAAoB,CAAI,OACpD,EAAQ,MAAO,OAAO,KAAK,mBAAmB,CAAI,OAClD,EAAQ,OAAQ,OAAO,KAAK,WAAW,GAAM,CAAI,OACjD,EAAQ,KAAM,OAAO,KAAK,oBAAoB,CAAI,OAClD,EAAQ,aACR,EAAQ,QACX,GAAI,KAAK,QAAQ,YAAc,IAAM,IAAc,EAAQ,QAAS,CAClE,EAAe,UAAY,KAAK,IAChC,IAAI,EAAO,EAAe,KAAK,KAAK,KAAK,EACrC,EAAO,KAAK,IAAM,EAAK,GAAG,OAAQ,EAAS,KAAK,MAAM,WAAW,CAAI,EACzE,GAAI,IAAW,IAAM,IAAW,GAC5B,OAAO,KAAK,yBAAyB,EAAM,KAAK,gBAAgB,CAAC,EAGvE,GAAI,CAAC,KAAK,QAAQ,4BAA6B,CAC7C,GAAI,CAAC,EACD,KAAK,MAAM,KAAK,MAAO,wDAAwD,EACnF,GAAI,CAAC,KAAK,SACN,KAAK,MAAM,KAAK,MAAO,iEAAiE,EAE9F,OAAO,IAAc,EAAQ,QAAU,KAAK,YAAY,CAAI,EAAI,KAAK,YAAY,EAAM,CAAO,UAQ9F,GAAI,KAAK,gBAAgB,EAAG,CAC1B,GAAI,EAAW,KAAK,WAAW,EAE/B,OADA,KAAK,KAAK,EACH,KAAK,uBAAuB,EAAM,GAAM,CAAC,CAAO,EAGzD,IAAI,EAAY,KAAK,aAAa,EAAK,EAAI,cAAgB,KAAK,QAAQ,EAAK,EAAI,QAAU,KAC3F,GAAI,EAAW,CACb,GAAI,GAAY,KAAK,QAAQ,aAAe,SAC1C,KAAK,MAAM,KAAK,MAAO,+EAA+E,EAExG,GAAI,IAAc,cAAe,CAC/B,GAAI,CAAC,KAAK,SACR,KAAK,MAAM,KAAK,MAAO,qDAAqD,EAE9E,KAAK,KAAK,EAKZ,OAHA,KAAK,KAAK,EACV,KAAK,SAAS,EAAM,GAAO,CAAS,EACpC,KAAK,UAAU,EACR,KAAK,WAAW,EAAM,qBAAqB,EAGpD,IAAI,EAAY,KAAK,MAAO,EAAO,KAAK,gBAAgB,EACxD,GAAI,IAAc,EAAQ,MAAQ,EAAK,OAAS,cAAgB,KAAK,IAAI,EAAQ,KAAK,EAClF,OAAO,KAAK,sBAAsB,EAAM,EAAW,EAAM,CAAO,EAC7D,YAAO,KAAK,yBAAyB,EAAM,CAAI,IAI1D,EAAK,4BAA8B,QAAQ,CAAC,EAAM,EAAS,CACzD,IAAI,EAAU,IAAY,QAE1B,GADA,KAAK,KAAK,EACN,KAAK,IAAI,EAAQ,IAAI,GAAK,KAAK,gBAAgB,EAAK,EAAK,MAAQ,KAChE,QAAI,KAAK,OAAS,EAAQ,KAAQ,KAAK,WAAW,EAErD,OAAK,MAAQ,KAAK,WAAW,EAC7B,KAAK,UAAU,EAKjB,IAAI,EAAI,EACR,KAAO,EAAI,KAAK,OAAO,OAAQ,EAAE,EAAG,CAClC,IAAI,EAAM,KAAK,OAAO,GACtB,GAAI,EAAK,OAAS,MAAQ,EAAI,OAAS,EAAK,MAAM,KAAM,CACtD,GAAI,EAAI,MAAQ,OAAS,GAAW,EAAI,OAAS,QAAW,MAC5D,GAAI,EAAK,OAAS,EAAW,OAGjC,GAAI,IAAM,KAAK,OAAO,OAAU,KAAK,MAAM,EAAK,MAAO,eAAiB,CAAO,EAC/E,OAAO,KAAK,WAAW,EAAM,EAAU,iBAAmB,mBAAmB,GAG/E,EAAK,uBAAyB,QAAQ,CAAC,EAAM,CAG3C,OAFA,KAAK,KAAK,EACV,KAAK,UAAU,EACR,KAAK,WAAW,EAAM,mBAAmB,GAGlD,EAAK,iBAAmB,QAAQ,CAAC,EAAM,CAOrC,GANA,KAAK,KAAK,EACV,KAAK,OAAO,KAAK,EAAS,EAC1B,EAAK,KAAO,KAAK,eAAe,IAAI,EACpC,KAAK,OAAO,IAAI,EAChB,KAAK,OAAO,EAAQ,MAAM,EAC1B,EAAK,KAAO,KAAK,qBAAqB,EAClC,KAAK,QAAQ,aAAe,EAC5B,KAAK,IAAI,EAAQ,IAAI,EAErB,UAAK,UAAU,EACnB,OAAO,KAAK,WAAW,EAAM,kBAAkB,GAWjD,EAAK,kBAAoB,QAAQ,CAAC,EAAM,CACtC,KAAK,KAAK,EACV,IAAI,EAAW,KAAK,QAAQ,aAAe,GAAK,KAAK,UAAY,KAAK,cAAc,OAAO,EAAK,KAAK,aAAe,GAIpH,GAHA,KAAK,OAAO,KAAK,EAAS,EAC1B,KAAK,WAAW,CAAC,EACjB,KAAK,OAAO,EAAQ,MAAM,EACtB,KAAK,OAAS,EAAQ,KAAM,CAC9B,GAAI,EAAU,GAAM,KAAK,WAAW,CAAO,EAC3C,OAAO,KAAK,SAAS,EAAM,IAAI,EAEjC,IAAI,EAAQ,KAAK,MAAM,EACvB,GAAI,KAAK,OAAS,EAAQ,MAAQ,KAAK,OAAS,EAAQ,QAAU,EAAO,CACvE,IAAI,EAAS,KAAK,UAAU,EAAG,EAAO,EAAQ,MAAQ,KAAK,MAI3D,OAHA,KAAK,KAAK,EACV,KAAK,SAAS,EAAQ,GAAM,CAAI,EAChC,KAAK,WAAW,EAAQ,qBAAqB,EACtC,KAAK,kBAAkB,EAAM,EAAQ,CAAO,EAErD,IAAI,EAAgB,KAAK,aAAa,KAAK,EAAG,EAAU,GAEpD,EAAY,KAAK,QAAQ,EAAI,EAAI,QAAU,KAAK,aAAa,EAAI,EAAI,cAAgB,KACzF,GAAI,EAAW,CACb,IAAI,EAAS,KAAK,UAAU,EAE5B,GADA,KAAK,KAAK,EACN,IAAc,cAAiB,KAAK,KAAK,EAG7C,OAFA,KAAK,SAAS,EAAQ,GAAM,CAAS,EACrC,KAAK,WAAW,EAAQ,qBAAqB,EACtC,KAAK,kBAAkB,EAAM,EAAQ,CAAO,EAErD,IAAI,EAAc,KAAK,YACnB,EAAyB,IAAI,GAC7B,EAAU,KAAK,MACf,EAAO,EAAU,GACjB,KAAK,oBAAoB,EAAwB,OAAO,EACxD,KAAK,gBAAgB,GAAM,CAAsB,EACrD,GAAI,KAAK,OAAS,EAAQ,MAAQ,EAAU,KAAK,QAAQ,aAAe,GAAK,KAAK,aAAa,IAAI,GAAI,CACrG,GAAI,EAAU,GAAI,CAChB,GAAI,KAAK,OAAS,EAAQ,IAAO,KAAK,WAAW,CAAO,EACxD,EAAK,MAAQ,GACR,QAAI,GAAW,KAAK,QAAQ,aAAe,GAChD,GAAI,EAAK,QAAU,GAAW,CAAC,GAAe,EAAK,OAAS,cAAgB,EAAK,OAAS,QAAW,KAAK,WAAW,EAChH,QAAI,KAAK,QAAQ,aAAe,EAAK,EAAK,MAAQ,GAEzD,GAAI,GAAiB,EAAW,KAAK,MAAM,EAAK,MAAO,+DAA+D,EAGtH,OAFA,KAAK,aAAa,EAAM,GAAO,CAAsB,EACrD,KAAK,iBAAiB,CAAI,EACnB,KAAK,WAAW,EAAM,CAAI,EAEjC,UAAK,sBAAsB,EAAwB,EAAI,EAEzD,GAAI,EAAU,GAAM,KAAK,WAAW,CAAO,EAC3C,OAAO,KAAK,SAAS,EAAM,CAAI,GAIjC,EAAK,kBAAoB,QAAQ,CAAC,EAAM,EAAM,EAAS,CACrD,IAAK,KAAK,OAAS,EAAQ,KAAQ,KAAK,QAAQ,aAAe,GAAK,KAAK,aAAa,IAAI,IAAO,EAAK,aAAa,SAAW,EAAG,CAC/H,GAAI,KAAK,QAAQ,aAAe,EAC9B,GAAI,KAAK,OAAS,EAAQ,KACxB,GAAI,EAAU,GAAM,KAAK,WAAW,CAAO,EACpC,OAAK,MAAQ,EAAU,GAElC,OAAO,KAAK,WAAW,EAAM,CAAI,EAEnC,GAAI,EAAU,GAAM,KAAK,WAAW,CAAO,EAC3C,OAAO,KAAK,SAAS,EAAM,CAAI,GAGjC,EAAK,uBAAyB,QAAQ,CAAC,EAAM,EAAS,EAAqB,CAEzE,OADA,KAAK,KAAK,EACH,KAAK,cAAc,EAAM,IAAkB,EAAsB,EAAI,IAAyB,GAAO,CAAO,GAGrH,EAAK,iBAAmB,QAAQ,CAAC,EAAM,CAMrC,OALA,KAAK,KAAK,EACV,EAAK,KAAO,KAAK,qBAAqB,EAEtC,EAAK,WAAa,KAAK,eAAe,IAAI,EAC1C,EAAK,UAAY,KAAK,IAAI,EAAQ,KAAK,EAAI,KAAK,eAAe,IAAI,EAAI,KAChE,KAAK,WAAW,EAAM,aAAa,GAG5C,EAAK,qBAAuB,QAAQ,CAAC,EAAM,CACzC,GAAI,CAAC,KAAK,YAAc,CAAC,KAAK,QAAQ,2BAClC,KAAK,MAAM,KAAK,MAAO,8BAA8B,EAOzD,GANA,KAAK,KAAK,EAMN,KAAK,IAAI,EAAQ,IAAI,GAAK,KAAK,gBAAgB,EAAK,EAAK,SAAW,KACjE,OAAK,SAAW,KAAK,gBAAgB,EAAG,KAAK,UAAU,EAC9D,OAAO,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,qBAAuB,QAAQ,CAAC,EAAM,CACzC,KAAK,KAAK,EACV,EAAK,aAAe,KAAK,qBAAqB,EAC9C,EAAK,MAAQ,CAAC,EACd,KAAK,OAAO,EAAQ,MAAM,EAC1B,KAAK,OAAO,KAAK,EAAW,EAC5B,KAAK,WAAW,CAAC,EAMjB,IAAI,EACJ,QAAS,EAAa,GAAO,KAAK,OAAS,EAAQ,QACjD,GAAI,KAAK,OAAS,EAAQ,OAAS,KAAK,OAAS,EAAQ,SAAU,CACjE,IAAI,EAAS,KAAK,OAAS,EAAQ,MACnC,GAAI,EAAO,KAAK,WAAW,EAAK,YAAY,EAI5C,GAHA,EAAK,MAAM,KAAK,EAAM,KAAK,UAAU,CAAC,EACtC,EAAI,WAAa,CAAC,EAClB,KAAK,KAAK,EACN,EACF,EAAI,KAAO,KAAK,gBAAgB,EAC3B,KACL,GAAI,EAAc,KAAK,iBAAiB,KAAK,aAAc,0BAA0B,EACrF,EAAa,GACb,EAAI,KAAO,KAEb,KAAK,OAAO,EAAQ,KAAK,EACpB,KACL,GAAI,CAAC,EAAO,KAAK,WAAW,EAC5B,EAAI,WAAW,KAAK,KAAK,eAAe,IAAI,CAAC,EAIjD,GADA,KAAK,UAAU,EACX,EAAO,KAAK,WAAW,EAAK,YAAY,EAG5C,OAFA,KAAK,KAAK,EACV,KAAK,OAAO,IAAI,EACT,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,oBAAsB,QAAQ,CAAC,EAAM,CAExC,GADA,KAAK,KAAK,EACN,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,WAAY,KAAK,KAAK,CAAC,EAC5D,KAAK,MAAM,KAAK,WAAY,6BAA6B,EAG7D,OAFA,EAAK,SAAW,KAAK,gBAAgB,EACrC,KAAK,UAAU,EACR,KAAK,WAAW,EAAM,gBAAgB,GAK/C,IAAI,GAAU,CAAC,EAEf,EAAK,sBAAwB,QAAQ,EAAG,CACtC,IAAI,EAAQ,KAAK,iBAAiB,EAC9B,EAAS,EAAM,OAAS,aAK5B,OAJA,KAAK,WAAW,EAAS,GAAqB,CAAC,EAC/C,KAAK,iBAAiB,EAAO,EAAS,GAAoB,EAAY,EACtE,KAAK,OAAO,EAAQ,MAAM,EAEnB,GAGT,EAAK,kBAAoB,QAAQ,CAAC,EAAM,CAItC,GAHA,KAAK,KAAK,EACV,EAAK,MAAQ,KAAK,WAAW,EAC7B,EAAK,QAAU,KACX,KAAK,OAAS,EAAQ,OAAQ,CAChC,IAAI,EAAS,KAAK,UAAU,EAE5B,GADA,KAAK,KAAK,EACN,KAAK,IAAI,EAAQ,MAAM,EACzB,EAAO,MAAQ,KAAK,sBAAsB,EACrC,KACL,GAAI,KAAK,QAAQ,YAAc,GAAM,KAAK,WAAW,EACrD,EAAO,MAAQ,KACf,KAAK,WAAW,CAAC,EAEnB,EAAO,KAAO,KAAK,WAAW,EAAK,EACnC,KAAK,UAAU,EACf,EAAK,QAAU,KAAK,WAAW,EAAQ,aAAa,EAGtD,GADA,EAAK,UAAY,KAAK,IAAI,EAAQ,QAAQ,EAAI,KAAK,WAAW,EAAI,KAC9D,CAAC,EAAK,SAAW,CAAC,EAAK,UACvB,KAAK,MAAM,EAAK,MAAO,iCAAiC,EAC5D,OAAO,KAAK,WAAW,EAAM,cAAc,GAG7C,EAAK,kBAAoB,QAAQ,CAAC,EAAM,EAAM,EAAyB,CAIrE,OAHA,KAAK,KAAK,EACV,KAAK,SAAS,EAAM,GAAO,EAAM,CAAuB,EACxD,KAAK,UAAU,EACR,KAAK,WAAW,EAAM,qBAAqB,GAGpD,EAAK,oBAAsB,QAAQ,CAAC,EAAM,CAMxC,OALA,KAAK,KAAK,EACV,EAAK,KAAO,KAAK,qBAAqB,EACtC,KAAK,OAAO,KAAK,EAAS,EAC1B,EAAK,KAAO,KAAK,eAAe,OAAO,EACvC,KAAK,OAAO,IAAI,EACT,KAAK,WAAW,EAAM,gBAAgB,GAG/C,EAAK,mBAAqB,QAAQ,CAAC,EAAM,CACvC,GAAI,KAAK,OAAU,KAAK,MAAM,KAAK,MAAO,uBAAuB,EAIjE,OAHA,KAAK,KAAK,EACV,EAAK,OAAS,KAAK,qBAAqB,EACxC,EAAK,KAAO,KAAK,eAAe,MAAM,EAC/B,KAAK,WAAW,EAAM,eAAe,GAG9C,EAAK,oBAAsB,QAAQ,CAAC,EAAM,CAExC,OADA,KAAK,KAAK,EACH,KAAK,WAAW,EAAM,gBAAgB,GAG/C,EAAK,sBAAwB,QAAQ,CAAC,EAAM,EAAW,EAAM,EAAS,CACpE,QAAS,EAAM,EAAG,EAAO,KAAK,OAAQ,EAAM,EAAK,OAAQ,GAAO,EAC9D,CACA,IAAI,EAAQ,EAAK,GAEjB,GAAI,EAAM,OAAS,EACf,KAAK,MAAM,EAAK,MAAO,UAAY,EAAY,uBAAuB,EAE5E,IAAI,EAAO,KAAK,KAAK,OAAS,OAAS,KAAK,OAAS,EAAQ,QAAU,SAAW,KAClF,QAAS,EAAI,KAAK,OAAO,OAAS,EAAG,GAAK,EAAG,IAAK,CAChD,IAAI,EAAU,KAAK,OAAO,GAC1B,GAAI,EAAQ,iBAAmB,EAAK,MAElC,EAAQ,eAAiB,KAAK,MAC9B,EAAQ,KAAO,EACR,WAMX,OAJA,KAAK,OAAO,KAAK,CAAC,KAAM,EAAW,KAAM,EAAM,eAAgB,KAAK,KAAK,CAAC,EAC1E,EAAK,KAAO,KAAK,eAAe,EAAU,EAAQ,QAAQ,OAAO,IAAM,GAAK,EAAU,QAAU,EAAU,OAAO,EACjH,KAAK,OAAO,IAAI,EAChB,EAAK,MAAQ,EACN,KAAK,WAAW,EAAM,kBAAkB,GAGjD,EAAK,yBAA2B,QAAQ,CAAC,EAAM,EAAM,CAGnD,OAFA,EAAK,WAAa,EAClB,KAAK,UAAU,EACR,KAAK,WAAW,EAAM,qBAAqB,GAOpD,EAAK,WAAa,QAAQ,CAAC,EAAuB,EAAM,EAAY,CAClE,GAAK,IAA+B,OAAI,EAAwB,GAChE,GAAK,IAAc,OAAI,EAAO,KAAK,UAAU,EAI7C,GAFA,EAAK,KAAO,CAAC,EACb,KAAK,OAAO,EAAQ,MAAM,EACtB,EAAyB,KAAK,WAAW,CAAC,EAC9C,MAAO,KAAK,OAAS,EAAQ,OAAQ,CACnC,IAAI,EAAO,KAAK,eAAe,IAAI,EACnC,EAAK,KAAK,KAAK,CAAI,EAErB,GAAI,EAAc,KAAK,OAAS,GAEhC,GADA,KAAK,KAAK,EACN,EAAyB,KAAK,UAAU,EAC5C,OAAO,KAAK,WAAW,EAAM,gBAAgB,GAO/C,EAAK,SAAW,QAAQ,CAAC,EAAM,EAAM,CAUnC,OATA,EAAK,KAAO,EACZ,KAAK,OAAO,EAAQ,IAAI,EACxB,EAAK,KAAO,KAAK,OAAS,EAAQ,KAAO,KAAO,KAAK,gBAAgB,EACrE,KAAK,OAAO,EAAQ,IAAI,EACxB,EAAK,OAAS,KAAK,OAAS,EAAQ,OAAS,KAAO,KAAK,gBAAgB,EACzE,KAAK,OAAO,EAAQ,MAAM,EAC1B,EAAK,KAAO,KAAK,eAAe,KAAK,EACrC,KAAK,UAAU,EACf,KAAK,OAAO,IAAI,EACT,KAAK,WAAW,EAAM,cAAc,GAM7C,EAAK,WAAa,QAAQ,CAAC,EAAM,EAAM,CACrC,IAAI,EAAU,KAAK,OAAS,EAAQ,IAGpC,GAFA,KAAK,KAAK,EAGR,EAAK,OAAS,uBACd,EAAK,aAAa,GAAG,MAAQ,OAE3B,CAAC,GACD,KAAK,QAAQ,YAAc,GAC3B,KAAK,QACL,EAAK,OAAS,OACd,EAAK,aAAa,GAAG,GAAG,OAAS,cAGnC,KAAK,MACH,EAAK,OACH,EAAU,SAAW,UAAY,wDACrC,EAQF,OANA,EAAK,KAAO,EACZ,EAAK,MAAQ,EAAU,KAAK,gBAAgB,EAAI,KAAK,iBAAiB,EACtE,KAAK,OAAO,EAAQ,MAAM,EAC1B,EAAK,KAAO,KAAK,eAAe,KAAK,EACrC,KAAK,UAAU,EACf,KAAK,OAAO,IAAI,EACT,KAAK,WAAW,EAAM,EAAU,iBAAmB,gBAAgB,GAK5E,EAAK,SAAW,QAAQ,CAAC,EAAM,EAAO,EAAM,EAAyB,CACnE,EAAK,aAAe,CAAC,EACrB,EAAK,KAAO,EACZ,OAAS,CACP,IAAI,EAAO,KAAK,UAAU,EAE1B,GADA,KAAK,WAAW,EAAM,CAAI,EACtB,KAAK,IAAI,EAAQ,EAAE,EACrB,EAAK,KAAO,KAAK,iBAAiB,CAAK,EAClC,QAAI,CAAC,GAA2B,IAAS,SAAW,EAAE,KAAK,OAAS,EAAQ,KAAQ,KAAK,QAAQ,aAAe,GAAK,KAAK,aAAa,IAAI,GAChJ,KAAK,WAAW,EACX,QAAI,CAAC,IAA4B,IAAS,SAAW,IAAS,gBAAkB,KAAK,QAAQ,aAAe,IAAM,KAAK,OAAS,EAAQ,KAAO,CAAC,KAAK,aAAa,IAAI,EAC3K,KAAK,MAAM,KAAK,WAAa,0BAA4B,EAAO,cAAe,EAC1E,QAAI,CAAC,GAA2B,EAAK,GAAG,OAAS,cAAgB,EAAE,IAAU,KAAK,OAAS,EAAQ,KAAO,KAAK,aAAa,IAAI,IACrI,KAAK,MAAM,KAAK,WAAY,0DAA0D,EAEtF,OAAK,KAAO,KAGd,GADA,EAAK,aAAa,KAAK,KAAK,WAAW,EAAM,oBAAoB,CAAC,EAC9D,CAAC,KAAK,IAAI,EAAQ,KAAK,EAAK,MAElC,OAAO,GAGT,EAAK,WAAa,QAAQ,CAAC,EAAM,EAAM,CACrC,EAAK,GAAK,IAAS,SAAW,IAAS,cACnC,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAE1B,KAAK,iBAAiB,EAAK,GAAI,IAAS,MAAQ,GAAW,GAAc,EAAK,GAGhF,IAAI,GAAiB,EAAG,GAAyB,EAAG,GAAmB,EAMvE,EAAK,cAAgB,QAAQ,CAAC,EAAM,EAAW,EAAqB,EAAS,EAAS,CAEpF,GADA,KAAK,aAAa,CAAI,EAClB,KAAK,QAAQ,aAAe,GAAK,KAAK,QAAQ,aAAe,GAAK,CAAC,EAAS,CAC9E,GAAI,KAAK,OAAS,EAAQ,MAAS,EAAY,GAC3C,KAAK,WAAW,EACpB,EAAK,UAAY,KAAK,IAAI,EAAQ,IAAI,EAExC,GAAI,KAAK,QAAQ,aAAe,EAC5B,EAAK,MAAQ,CAAC,CAAC,EAEnB,GAAI,EAAY,IAEd,GADA,EAAK,GAAM,EAAY,IAAqB,KAAK,OAAS,EAAQ,KAAO,KAAO,KAAK,WAAW,EAC5F,EAAK,IAAM,EAAE,EAAY,IAKzB,KAAK,gBAAgB,EAAK,GAAK,KAAK,QAAU,EAAK,WAAa,EAAK,MAAS,KAAK,oBAAsB,GAAW,GAAe,EAAa,EAGtJ,IAAI,EAAc,KAAK,SAAU,EAAc,KAAK,SAAU,EAAmB,KAAK,cAMtF,GALA,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EACrB,KAAK,WAAW,GAAc,EAAK,MAAO,EAAK,SAAS,CAAC,EAErD,EAAE,EAAY,IACd,EAAK,GAAK,KAAK,OAAS,EAAQ,KAAO,KAAK,WAAW,EAAI,KAQ/D,OANA,KAAK,oBAAoB,CAAI,EAC7B,KAAK,kBAAkB,EAAM,EAAqB,GAAO,CAAO,EAEhE,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EACd,KAAK,WAAW,EAAO,EAAY,GAAkB,sBAAwB,oBAAoB,GAG1G,EAAK,oBAAsB,QAAQ,CAAC,EAAM,CACxC,KAAK,OAAO,EAAQ,MAAM,EAC1B,EAAK,OAAS,KAAK,iBAAiB,EAAQ,OAAQ,GAAO,KAAK,QAAQ,aAAe,CAAC,EACxF,KAAK,+BAA+B,GAMtC,EAAK,WAAa,QAAQ,CAAC,EAAM,EAAa,CAC5C,KAAK,KAAK,EAIV,IAAI,EAAY,KAAK,OACrB,KAAK,OAAS,GAEd,KAAK,aAAa,EAAM,CAAW,EACnC,KAAK,gBAAgB,CAAI,EACzB,IAAI,EAAiB,KAAK,eAAe,EACrC,EAAY,KAAK,UAAU,EAC3B,EAAiB,GACrB,EAAU,KAAO,CAAC,EAClB,KAAK,OAAO,EAAQ,MAAM,EAC1B,MAAO,KAAK,OAAS,EAAQ,OAAQ,CACnC,IAAI,EAAU,KAAK,kBAAkB,EAAK,aAAe,IAAI,EAC7D,GAAI,GAEF,GADA,EAAU,KAAK,KAAK,CAAO,EACvB,EAAQ,OAAS,oBAAsB,EAAQ,OAAS,cAAe,CACzE,GAAI,EAAkB,KAAK,iBAAiB,EAAQ,MAAO,yCAAyC,EACpG,EAAiB,GACZ,QAAI,EAAQ,KAAO,EAAQ,IAAI,OAAS,qBAAuB,GAAwB,EAAgB,CAAO,EACnH,KAAK,iBAAiB,EAAQ,IAAI,MAAQ,gBAAmB,EAAQ,IAAI,KAAQ,6BAA8B,GAQrH,OAJA,KAAK,OAAS,EACd,KAAK,KAAK,EACV,EAAK,KAAO,KAAK,WAAW,EAAW,WAAW,EAClD,KAAK,cAAc,EACZ,KAAK,WAAW,EAAM,EAAc,mBAAqB,iBAAiB,GAGnF,EAAK,kBAAoB,QAAQ,CAAC,EAAwB,CACxD,GAAI,KAAK,IAAI,EAAQ,IAAI,EAAK,OAAO,KAErC,IAAI,EAAc,KAAK,QAAQ,YAC3B,EAAO,KAAK,UAAU,EACtB,EAAU,GACV,EAAc,GACd,EAAU,GACV,EAAO,SACP,EAAW,GAEf,GAAI,KAAK,cAAc,QAAQ,EAAG,CAEhC,GAAI,GAAe,IAAM,KAAK,IAAI,EAAQ,MAAM,EAE9C,OADA,KAAK,sBAAsB,CAAI,EACxB,EAET,GAAI,KAAK,wBAAwB,GAAK,KAAK,OAAS,EAAQ,KAC1D,EAAW,GAEX,OAAU,SAId,GADA,EAAK,OAAS,EACV,CAAC,GAAW,GAAe,GAAK,KAAK,cAAc,OAAO,EAC5D,IAAK,KAAK,wBAAwB,GAAK,KAAK,OAAS,EAAQ,OAAS,CAAC,KAAK,mBAAmB,EAC7F,EAAU,GAEV,OAAU,QAGd,GAAI,CAAC,IAAY,GAAe,GAAK,CAAC,IAAY,KAAK,IAAI,EAAQ,IAAI,EACrE,EAAc,GAEhB,GAAI,CAAC,GAAW,CAAC,GAAW,CAAC,EAAa,CACxC,IAAI,EAAY,KAAK,MACrB,GAAI,KAAK,cAAc,KAAK,GAAK,KAAK,cAAc,KAAK,EACvD,GAAI,KAAK,wBAAwB,EAC/B,EAAO,EAEP,OAAU,EAMhB,GAAI,EAGF,EAAK,SAAW,GAChB,EAAK,IAAM,KAAK,YAAY,KAAK,aAAc,KAAK,eAAe,EACnE,EAAK,IAAI,KAAO,EAChB,KAAK,WAAW,EAAK,IAAK,YAAY,EAEtC,UAAK,sBAAsB,CAAI,EAIjC,GAAI,EAAc,IAAM,KAAK,OAAS,EAAQ,QAAU,IAAS,UAAY,GAAe,EAAS,CACnG,IAAI,EAAgB,CAAC,EAAK,QAAU,GAAa,EAAM,aAAa,EAChE,EAAoB,GAAiB,EAEzC,GAAI,GAAiB,IAAS,SAAY,KAAK,MAAM,EAAK,IAAI,MAAO,yCAAyC,EAC9G,EAAK,KAAO,EAAgB,cAAgB,EAC5C,KAAK,iBAAiB,EAAM,EAAa,EAAS,CAAiB,EAEnE,UAAK,gBAAgB,CAAI,EAG3B,OAAO,GAGT,EAAK,wBAA0B,QAAQ,EAAG,CACxC,OACE,KAAK,OAAS,EAAQ,MACtB,KAAK,OAAS,EAAQ,WACtB,KAAK,OAAS,EAAQ,KACtB,KAAK,OAAS,EAAQ,QACtB,KAAK,OAAS,EAAQ,UACtB,KAAK,KAAK,SAId,EAAK,sBAAwB,QAAQ,CAAC,EAAS,CAC7C,GAAI,KAAK,OAAS,EAAQ,UAAW,CACnC,GAAI,KAAK,QAAU,cACjB,KAAK,MAAM,KAAK,MAAO,oDAAoD,EAE7E,EAAQ,SAAW,GACnB,EAAQ,IAAM,KAAK,kBAAkB,EAErC,UAAK,kBAAkB,CAAO,GAIlC,EAAK,iBAAmB,QAAQ,CAAC,EAAQ,EAAa,EAAS,EAAmB,CAEhF,IAAI,EAAM,EAAO,IACjB,GAAI,EAAO,OAAS,cAAe,CACjC,GAAI,EAAe,KAAK,MAAM,EAAI,MAAO,kCAAkC,EAC3E,GAAI,EAAW,KAAK,MAAM,EAAI,MAAO,sCAAsC,EACtE,QAAI,EAAO,QAAU,GAAa,EAAQ,WAAW,EAC1D,KAAK,MAAM,EAAI,MAAO,wDAAwD,EAIhF,IAAI,EAAQ,EAAO,MAAQ,KAAK,YAAY,EAAa,EAAS,CAAiB,EAGnF,GAAI,EAAO,OAAS,OAAS,EAAM,OAAO,SAAW,EACjD,KAAK,iBAAiB,EAAM,MAAO,8BAA8B,EACrE,GAAI,EAAO,OAAS,OAAS,EAAM,OAAO,SAAW,EACjD,KAAK,iBAAiB,EAAM,MAAO,sCAAsC,EAC7E,GAAI,EAAO,OAAS,OAAS,EAAM,OAAO,GAAG,OAAS,cAClD,KAAK,iBAAiB,EAAM,OAAO,GAAG,MAAO,+BAA+B,EAEhF,OAAO,KAAK,WAAW,EAAQ,kBAAkB,GAGnD,EAAK,gBAAkB,QAAQ,CAAC,EAAO,CACrC,GAAI,GAAa,EAAO,aAAa,EACnC,KAAK,MAAM,EAAM,IAAI,MAAO,gDAAgD,EACvE,QAAI,EAAM,QAAU,GAAa,EAAO,WAAW,EACxD,KAAK,MAAM,EAAM,IAAI,MAAO,qDAAqD,EAGnF,GAAI,KAAK,IAAI,EAAQ,EAAE,EAErB,KAAK,WAAW,GAAyB,EAAW,EACpD,EAAM,MAAQ,KAAK,iBAAiB,EACpC,KAAK,UAAU,EAEf,OAAM,MAAQ,KAIhB,OAFA,KAAK,UAAU,EAER,KAAK,WAAW,EAAO,oBAAoB,GAGpD,EAAK,sBAAwB,QAAQ,CAAC,EAAM,CAC1C,EAAK,KAAO,CAAC,EAEb,IAAI,EAAY,KAAK,OACrB,KAAK,OAAS,CAAC,EACf,KAAK,WAAW,GAA2B,EAAW,EACtD,MAAO,KAAK,OAAS,EAAQ,OAAQ,CACnC,IAAI,EAAO,KAAK,eAAe,IAAI,EACnC,EAAK,KAAK,KAAK,CAAI,EAMrB,OAJA,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,OAAS,EAEP,KAAK,WAAW,EAAM,aAAa,GAG5C,EAAK,aAAe,QAAQ,CAAC,EAAM,EAAa,CAC9C,GAAI,KAAK,OAAS,EAAQ,MAExB,GADA,EAAK,GAAK,KAAK,WAAW,EACtB,EACA,KAAK,gBAAgB,EAAK,GAAI,GAAc,EAAK,EAChD,KACL,GAAI,IAAgB,GAChB,KAAK,WAAW,EACpB,EAAK,GAAK,OAId,EAAK,gBAAkB,QAAQ,CAAC,EAAM,CACpC,EAAK,WAAa,KAAK,IAAI,EAAQ,QAAQ,EAAI,KAAK,oBAAoB,KAAM,EAAK,EAAI,MAGzF,EAAK,eAAiB,QAAQ,EAAG,CAC/B,IAAI,EAAU,CAAC,SAAU,OAAO,OAAO,IAAI,EAAG,KAAM,CAAC,CAAC,EAEtD,OADA,KAAK,iBAAiB,KAAK,CAAO,EAC3B,EAAQ,UAGjB,EAAK,cAAgB,QAAQ,EAAG,CAC9B,IAAI,EAAM,KAAK,iBAAiB,IAAI,EAChC,EAAW,EAAI,SACf,EAAO,EAAI,KACf,GAAI,CAAC,KAAK,QAAQ,mBAAsB,OACxC,IAAI,EAAM,KAAK,iBAAiB,OAC5B,EAAS,IAAQ,EAAI,KAAO,KAAK,iBAAiB,EAAM,GAC5D,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAE,EAAG,CACpC,IAAI,EAAK,EAAK,GACd,GAAI,CAAC,GAAO,EAAU,EAAG,IAAI,EAC3B,GAAI,EACF,EAAO,KAAK,KAAK,CAAE,EAEnB,UAAK,iBAAiB,EAAG,MAAQ,mBAAsB,EAAG,KAAQ,0CAA2C,IAMrH,SAAS,EAAuB,CAAC,EAAgB,EAAS,CACxD,IAAI,EAAO,EAAQ,IAAI,KACnB,EAAO,EAAe,GAEtB,EAAO,OACX,GAAI,EAAQ,OAAS,qBAAuB,EAAQ,OAAS,OAAS,EAAQ,OAAS,OACrF,GAAQ,EAAQ,OAAS,IAAM,KAAO,EAAQ,KAIhD,GACE,IAAS,QAAU,IAAS,QAC5B,IAAS,QAAU,IAAS,QAC5B,IAAS,QAAU,IAAS,QAC5B,IAAS,QAAU,IAAS,OAG5B,OADA,EAAe,GAAQ,OAChB,GACF,QAAI,CAAC,EAEV,OADA,EAAe,GAAQ,EAChB,GAEP,WAAO,GAIX,SAAS,EAAY,CAAC,EAAM,EAAM,CAChC,IAAoB,SAAhB,EACW,IAAX,GAAM,EACV,MAAO,CAAC,IACN,EAAI,OAAS,cAAgB,EAAI,OAAS,GAC1C,EAAI,OAAS,WAAa,EAAI,QAAU,GAM5C,EAAK,0BAA4B,QAAQ,CAAC,EAAM,EAAS,CACvD,GAAI,KAAK,QAAQ,aAAe,GAC9B,GAAI,KAAK,cAAc,IAAI,EACzB,EAAK,SAAW,KAAK,sBAAsB,EAC3C,KAAK,YAAY,EAAS,EAAK,SAAU,KAAK,YAAY,EAE1D,OAAK,SAAW,KAIpB,GADA,KAAK,iBAAiB,MAAM,EACxB,KAAK,OAAS,EAAQ,OAAU,KAAK,WAAW,EAEpD,GADA,EAAK,OAAS,KAAK,cAAc,EAC7B,KAAK,QAAQ,aAAe,GAC5B,EAAK,WAAa,KAAK,gBAAgB,EAE3C,OADA,KAAK,UAAU,EACR,KAAK,WAAW,EAAM,sBAAsB,GAGrD,EAAK,YAAc,QAAQ,CAAC,EAAM,EAAS,CAGzC,GAFA,KAAK,KAAK,EAEN,KAAK,IAAI,EAAQ,IAAI,EACvB,OAAO,KAAK,0BAA0B,EAAM,CAAO,EAErD,GAAI,KAAK,IAAI,EAAQ,QAAQ,EAG3B,OAFA,KAAK,YAAY,EAAS,UAAW,KAAK,YAAY,EACtD,EAAK,YAAc,KAAK,8BAA8B,EAC/C,KAAK,WAAW,EAAM,0BAA0B,EAGzD,GAAI,KAAK,2BAA2B,EAAG,CAErC,GADA,EAAK,YAAc,KAAK,uBAAuB,CAAI,EAC/C,EAAK,YAAY,OAAS,sBAC1B,KAAK,oBAAoB,EAAS,EAAK,YAAY,YAAY,EAE/D,UAAK,YAAY,EAAS,EAAK,YAAY,GAAI,EAAK,YAAY,GAAG,KAAK,EAG5E,GAFA,EAAK,WAAa,CAAC,EACnB,EAAK,OAAS,KACV,KAAK,QAAQ,aAAe,GAC5B,EAAK,WAAa,CAAC,EAClB,KAGL,GAFA,EAAK,YAAc,KACnB,EAAK,WAAa,KAAK,sBAAsB,CAAO,EAChD,KAAK,cAAc,MAAM,EAAG,CAC9B,GAAI,KAAK,OAAS,EAAQ,OAAU,KAAK,WAAW,EAEpD,GADA,EAAK,OAAS,KAAK,cAAc,EAC7B,KAAK,QAAQ,aAAe,GAC5B,EAAK,WAAa,KAAK,gBAAgB,EACtC,KACL,QAAS,EAAI,EAAG,EAAO,EAAK,WAAY,EAAI,EAAK,OAAQ,GAAK,EAAG,CAE/D,IAAI,EAAO,EAAK,GAMhB,GAJA,KAAK,gBAAgB,EAAK,KAAK,EAE/B,KAAK,iBAAiB,EAAK,KAAK,EAE5B,EAAK,MAAM,OAAS,UACtB,KAAK,MAAM,EAAK,MAAM,MAAO,wEAAwE,EAKzG,GADA,EAAK,OAAS,KACV,KAAK,QAAQ,aAAe,GAC5B,EAAK,WAAa,CAAC,EAEzB,KAAK,UAAU,EAEjB,OAAO,KAAK,WAAW,EAAM,wBAAwB,GAGvD,EAAK,uBAAyB,QAAQ,CAAC,EAAM,CAC3C,OAAO,KAAK,eAAe,IAAI,GAGjC,EAAK,8BAAgC,QAAQ,EAAG,CAC9C,IAAI,EACJ,GAAI,KAAK,OAAS,EAAQ,YAAc,EAAU,KAAK,gBAAgB,GAAI,CACzE,IAAI,EAAQ,KAAK,UAAU,EAE3B,GADA,KAAK,KAAK,EACN,EAAW,KAAK,KAAK,EACzB,OAAO,KAAK,cAAc,EAAO,GAAiB,GAAkB,GAAO,CAAO,EAC7E,QAAI,KAAK,OAAS,EAAQ,OAAQ,CACvC,IAAI,EAAQ,KAAK,UAAU,EAC3B,OAAO,KAAK,WAAW,EAAO,YAAY,EACrC,KACL,IAAI,EAAc,KAAK,iBAAiB,EAExC,OADA,KAAK,UAAU,EACR,IAIX,EAAK,YAAc,QAAQ,CAAC,EAAS,EAAM,EAAK,CAC9C,GAAI,CAAC,EAAW,OAChB,GAAI,OAAO,IAAS,SAChB,EAAO,EAAK,OAAS,aAAe,EAAK,KAAO,EAAK,MACzD,GAAI,GAAO,EAAS,CAAI,EACpB,KAAK,iBAAiB,EAAK,qBAAuB,EAAO,GAAG,EAChE,EAAQ,GAAQ,IAGlB,EAAK,mBAAqB,QAAQ,CAAC,EAAS,EAAK,CAC/C,IAAI,EAAO,EAAI,KACf,GAAI,IAAS,aACT,KAAK,YAAY,EAAS,EAAK,EAAI,KAAK,EACvC,QAAI,IAAS,gBACd,QAAS,EAAI,EAAG,EAAO,EAAI,WAAY,EAAI,EAAK,OAAQ,GAAK,EAC7D,CACE,IAAI,EAAO,EAAK,GAEhB,KAAK,mBAAmB,EAAS,CAAI,EAEtC,QAAI,IAAS,eACd,QAAS,EAAM,EAAG,EAAS,EAAI,SAAU,EAAM,EAAO,OAAQ,GAAO,EAAG,CACxE,IAAI,EAAM,EAAO,GAEf,GAAI,EAAO,KAAK,mBAAmB,EAAS,CAAG,EAEhD,QAAI,IAAS,WACd,KAAK,mBAAmB,EAAS,EAAI,KAAK,EACzC,QAAI,IAAS,oBACd,KAAK,mBAAmB,EAAS,EAAI,IAAI,EACxC,QAAI,IAAS,cACd,KAAK,mBAAmB,EAAS,EAAI,QAAQ,GAGnD,EAAK,oBAAsB,QAAQ,CAAC,EAAS,EAAO,CAClD,GAAI,CAAC,EAAW,OAChB,QAAS,EAAI,EAAG,EAAO,EAAO,EAAI,EAAK,OAAQ,GAAK,EAClD,CACA,IAAI,EAAO,EAAK,GAEhB,KAAK,mBAAmB,EAAS,EAAK,EAAE,IAI5C,EAAK,2BAA6B,QAAQ,EAAG,CAC3C,OAAO,KAAK,KAAK,UAAY,OAC3B,KAAK,KAAK,UAAY,SACtB,KAAK,KAAK,UAAY,SACtB,KAAK,KAAK,UAAY,YACtB,KAAK,MAAM,GACX,KAAK,gBAAgB,GAKzB,EAAK,qBAAuB,QAAQ,CAAC,EAAS,CAC5C,IAAI,EAAO,KAAK,UAAU,EAU1B,OATA,EAAK,MAAQ,KAAK,sBAAsB,EAExC,EAAK,SAAW,KAAK,cAAc,IAAI,EAAI,KAAK,sBAAsB,EAAI,EAAK,MAC/E,KAAK,YACH,EACA,EAAK,SACL,EAAK,SAAS,KAChB,EAEO,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,sBAAwB,QAAQ,CAAC,EAAS,CAC7C,IAAI,EAAQ,CAAC,EAAG,EAAQ,GAExB,KAAK,OAAO,EAAQ,MAAM,EAC1B,MAAO,CAAC,KAAK,IAAI,EAAQ,MAAM,EAAG,CAChC,GAAI,CAAC,GAEH,GADA,KAAK,OAAO,EAAQ,KAAK,EACrB,KAAK,mBAAmB,EAAQ,MAAM,EAAK,MACxC,OAAQ,GAEjB,EAAM,KAAK,KAAK,qBAAqB,CAAO,CAAC,EAE/C,OAAO,GAKT,EAAK,YAAc,QAAQ,CAAC,EAAM,CAIhC,GAHA,KAAK,KAAK,EAGN,KAAK,OAAS,EAAQ,OACxB,EAAK,WAAa,GAClB,EAAK,OAAS,KAAK,cAAc,EAEjC,OAAK,WAAa,KAAK,sBAAsB,EAC7C,KAAK,iBAAiB,MAAM,EAC5B,EAAK,OAAS,KAAK,OAAS,EAAQ,OAAS,KAAK,cAAc,EAAI,KAAK,WAAW,EAEtF,GAAI,KAAK,QAAQ,aAAe,GAC5B,EAAK,WAAa,KAAK,gBAAgB,EAE3C,OADA,KAAK,UAAU,EACR,KAAK,WAAW,EAAM,mBAAmB,GAKlD,EAAK,qBAAuB,QAAQ,EAAG,CACrC,IAAI,EAAO,KAAK,UAAU,EAG1B,GAFA,EAAK,SAAW,KAAK,sBAAsB,EAEvC,KAAK,cAAc,IAAI,EACzB,EAAK,MAAQ,KAAK,WAAW,EAE7B,UAAK,gBAAgB,EAAK,QAAQ,EAClC,EAAK,MAAQ,EAAK,SAIpB,OAFA,KAAK,gBAAgB,EAAK,MAAO,EAAY,EAEtC,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,4BAA8B,QAAQ,EAAG,CAE5C,IAAI,EAAO,KAAK,UAAU,EAG1B,OAFA,EAAK,MAAQ,KAAK,WAAW,EAC7B,KAAK,gBAAgB,EAAK,MAAO,EAAY,EACtC,KAAK,WAAW,EAAM,wBAAwB,GAGvD,EAAK,8BAAgC,QAAQ,EAAG,CAC9C,IAAI,EAAO,KAAK,UAAU,EAK1B,OAJA,KAAK,KAAK,EACV,KAAK,iBAAiB,IAAI,EAC1B,EAAK,MAAQ,KAAK,WAAW,EAC7B,KAAK,gBAAgB,EAAK,MAAO,EAAY,EACtC,KAAK,WAAW,EAAM,0BAA0B,GAGzD,EAAK,sBAAwB,QAAQ,EAAG,CACtC,IAAI,EAAQ,CAAC,EAAG,EAAQ,GACxB,GAAI,KAAK,OAAS,EAAQ,MAExB,GADA,EAAM,KAAK,KAAK,4BAA4B,CAAC,EACzC,CAAC,KAAK,IAAI,EAAQ,KAAK,EAAK,OAAO,EAEzC,GAAI,KAAK,OAAS,EAAQ,KAExB,OADA,EAAM,KAAK,KAAK,8BAA8B,CAAC,EACxC,EAET,KAAK,OAAO,EAAQ,MAAM,EAC1B,MAAO,CAAC,KAAK,IAAI,EAAQ,MAAM,EAAG,CAChC,GAAI,CAAC,GAEH,GADA,KAAK,OAAO,EAAQ,KAAK,EACrB,KAAK,mBAAmB,EAAQ,MAAM,EAAK,MACxC,OAAQ,GAEjB,EAAM,KAAK,KAAK,qBAAqB,CAAC,EAExC,OAAO,GAGT,EAAK,gBAAkB,QAAQ,EAAG,CAChC,IAAI,EAAQ,CAAC,EACb,GAAI,CAAC,KAAK,IAAI,EAAQ,KAAK,EACzB,OAAO,EAET,KAAK,OAAO,EAAQ,MAAM,EAC1B,IAAI,EAAgB,CAAC,EACjB,EAAQ,GACZ,MAAO,CAAC,KAAK,IAAI,EAAQ,MAAM,EAAG,CAChC,GAAI,CAAC,GAEH,GADA,KAAK,OAAO,EAAQ,KAAK,EACrB,KAAK,mBAAmB,EAAQ,MAAM,EAAK,MACxC,OAAQ,GAEjB,IAAI,EAAO,KAAK,qBAAqB,EACjC,EAAU,EAAK,IAAI,OAAS,aAAe,EAAK,IAAI,KAAO,EAAK,IAAI,MACxE,GAAI,GAAO,EAAe,CAAO,EAC7B,KAAK,iBAAiB,EAAK,IAAI,MAAO,4BAA8B,EAAU,GAAG,EACrF,EAAc,GAAW,GACzB,EAAM,KAAK,CAAI,EAEjB,OAAO,GAGT,EAAK,qBAAuB,QAAQ,EAAG,CACrC,IAAI,EAAO,KAAK,UAAU,EAG1B,GAFA,EAAK,IAAM,KAAK,OAAS,EAAQ,OAAS,KAAK,cAAc,EAAI,KAAK,WAAW,KAAK,QAAQ,gBAAkB,OAAO,EACvH,KAAK,OAAO,EAAQ,KAAK,EACrB,KAAK,OAAS,EAAQ,OACxB,KAAK,WAAW,EAGlB,OADA,EAAK,MAAQ,KAAK,cAAc,EACzB,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,sBAAwB,QAAQ,EAAG,CACtC,GAAI,KAAK,QAAQ,aAAe,IAAM,KAAK,OAAS,EAAQ,OAAQ,CAClE,IAAI,EAAgB,KAAK,aAAa,KAAK,KAAK,EAChD,GAAI,GAAc,KAAK,EAAc,KAAK,EACxC,KAAK,MAAM,EAAc,MAAO,iDAAiD,EAEnF,OAAO,EAET,OAAO,KAAK,WAAW,EAAI,GAI7B,EAAK,uBAAyB,QAAQ,CAAC,EAAY,CACjD,QAAS,EAAI,EAAG,EAAI,EAAW,QAAU,KAAK,qBAAqB,EAAW,EAAE,EAAG,EAAE,EACnF,EAAW,GAAG,UAAY,EAAW,GAAG,WAAW,IAAI,MAAM,EAAG,EAAE,GAGtE,EAAK,qBAAuB,QAAQ,CAAC,EAAW,CAC9C,OACE,KAAK,QAAQ,aAAe,GAC5B,EAAU,OAAS,uBACnB,EAAU,WAAW,OAAS,WAC9B,OAAO,EAAU,WAAW,QAAU,WAErC,KAAK,MAAM,EAAU,SAAW,KAAQ,KAAK,MAAM,EAAU,SAAW,MAI7E,IAAI,GAAO,EAAO,UAKlB,GAAK,aAAe,QAAQ,CAAC,EAAM,EAAW,EAAwB,CACpE,GAAI,KAAK,QAAQ,aAAe,GAAK,EACnC,OAAQ,EAAK,UACR,aACH,GAAI,KAAK,SAAW,EAAK,OAAS,QAC9B,KAAK,MAAM,EAAK,MAAO,2DAA2D,EACtF,UAEG,oBACA,mBACA,wBACA,cACH,UAEG,mBAEH,GADA,EAAK,KAAO,gBACR,EAA0B,KAAK,mBAAmB,EAAwB,EAAI,EAClF,QAAS,EAAI,EAAG,EAAO,EAAK,WAAY,EAAI,EAAK,OAAQ,GAAK,EAAG,CAC/D,IAAI,EAAO,EAAK,GAQhB,GANF,KAAK,aAAa,EAAM,CAAS,EAO7B,EAAK,OAAS,gBACb,EAAK,SAAS,OAAS,gBAAkB,EAAK,SAAS,OAAS,iBAEjE,KAAK,MAAM,EAAK,SAAS,MAAO,kBAAkB,EAGtD,UAEG,WAEH,GAAI,EAAK,OAAS,OAAU,KAAK,MAAM,EAAK,IAAI,MAAO,+CAA+C,EACtG,KAAK,aAAa,EAAK,MAAO,CAAS,EACvC,UAEG,kBAEH,GADA,EAAK,KAAO,eACR,EAA0B,KAAK,mBAAmB,EAAwB,EAAI,EAClF,KAAK,iBAAiB,EAAK,SAAU,CAAS,EAC9C,UAEG,gBAGH,GAFA,EAAK,KAAO,cACZ,KAAK,aAAa,EAAK,SAAU,CAAS,EACtC,EAAK,SAAS,OAAS,oBACvB,KAAK,MAAM,EAAK,SAAS,MAAO,2CAA2C,EAC/E,UAEG,uBACH,GAAI,EAAK,WAAa,IAAO,KAAK,MAAM,EAAK,KAAK,IAAK,6DAA6D,EACpH,EAAK,KAAO,oBACZ,OAAO,EAAK,SACZ,KAAK,aAAa,EAAK,KAAM,CAAS,EACtC,UAEG,0BACH,KAAK,aAAa,EAAK,WAAY,EAAW,CAAsB,EACpE,UAEG,kBACH,KAAK,iBAAiB,EAAK,MAAO,mDAAmD,EACrF,UAEG,mBACH,GAAI,CAAC,EAAa,cAGlB,KAAK,MAAM,EAAK,MAAO,qBAAqB,EAEzC,QAAI,EAA0B,KAAK,mBAAmB,EAAwB,EAAI,EACzF,OAAO,GAKT,GAAK,iBAAmB,QAAQ,CAAC,EAAU,EAAW,CACpD,IAAI,EAAM,EAAS,OACnB,QAAS,EAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,IAAI,EAAM,EAAS,GACnB,GAAI,EAAO,KAAK,aAAa,EAAK,CAAS,EAE7C,GAAI,EAAK,CACP,IAAI,EAAO,EAAS,EAAM,GAC1B,GAAI,KAAK,QAAQ,cAAgB,GAAK,GAAa,GAAQ,EAAK,OAAS,eAAiB,EAAK,SAAS,OAAS,aAC7G,KAAK,WAAW,EAAK,SAAS,KAAK,EAEzC,OAAO,GAKT,GAAK,YAAc,QAAQ,CAAC,EAAwB,CAClD,IAAI,EAAO,KAAK,UAAU,EAG1B,OAFA,KAAK,KAAK,EACV,EAAK,SAAW,KAAK,iBAAiB,GAAO,CAAsB,EAC5D,KAAK,WAAW,EAAM,eAAe,GAG9C,GAAK,iBAAmB,QAAQ,EAAG,CACjC,IAAI,EAAO,KAAK,UAAU,EAI1B,GAHA,KAAK,KAAK,EAGN,KAAK,QAAQ,cAAgB,GAAK,KAAK,OAAS,EAAQ,KACxD,KAAK,WAAW,EAIpB,OAFA,EAAK,SAAW,KAAK,iBAAiB,EAE/B,KAAK,WAAW,EAAM,aAAa,GAK5C,GAAK,iBAAmB,QAAQ,EAAG,CACjC,GAAI,KAAK,QAAQ,aAAe,EAC9B,OAAQ,KAAK,WACR,EAAQ,SACX,IAAI,EAAO,KAAK,UAAU,EAG1B,OAFA,KAAK,KAAK,EACV,EAAK,SAAW,KAAK,iBAAiB,EAAQ,SAAU,GAAM,EAAI,EAC3D,KAAK,WAAW,EAAM,cAAc,OAExC,EAAQ,OACX,OAAO,KAAK,SAAS,EAAI,EAG7B,OAAO,KAAK,WAAW,GAGzB,GAAK,iBAAmB,QAAQ,CAAC,EAAO,EAAY,EAAoB,EAAgB,CACtF,IAAI,EAAO,CAAC,EAAG,EAAQ,GACvB,MAAO,CAAC,KAAK,IAAI,CAAK,EAAG,CACvB,GAAI,EAAS,EAAQ,GACd,UAAK,OAAO,EAAQ,KAAK,EAChC,GAAI,GAAc,KAAK,OAAS,EAAQ,MACtC,EAAK,KAAK,IAAI,EACT,QAAI,GAAsB,KAAK,mBAAmB,CAAK,EAC5D,MACK,QAAI,KAAK,OAAS,EAAQ,SAAU,CACzC,IAAI,EAAO,KAAK,iBAAiB,EAGjC,GAFA,KAAK,qBAAqB,CAAI,EAC9B,EAAK,KAAK,CAAI,EACV,KAAK,OAAS,EAAQ,MAAS,KAAK,iBAAiB,KAAK,MAAO,+CAA+C,EACpH,KAAK,OAAO,CAAK,EACjB,MAEA,OAAK,KAAK,KAAK,wBAAwB,CAAc,CAAC,EAG1D,OAAO,GAGT,GAAK,wBAA0B,QAAQ,CAAC,EAAgB,CACtD,IAAI,EAAO,KAAK,kBAAkB,KAAK,MAAO,KAAK,QAAQ,EAE3D,OADA,KAAK,qBAAqB,CAAI,EACvB,GAGT,GAAK,qBAAuB,QAAQ,CAAC,EAAO,CAC1C,OAAO,GAKT,GAAK,kBAAoB,QAAQ,CAAC,EAAU,EAAU,EAAM,CAE1D,GADA,EAAO,GAAQ,KAAK,iBAAiB,EACjC,KAAK,QAAQ,YAAc,GAAK,CAAC,KAAK,IAAI,EAAQ,EAAE,EAAK,OAAO,EACpE,IAAI,EAAO,KAAK,YAAY,EAAU,CAAQ,EAG9C,OAFA,EAAK,KAAO,EACZ,EAAK,MAAQ,KAAK,iBAAiB,EAC5B,KAAK,WAAW,EAAM,mBAAmB,GAmElD,GAAK,gBAAkB,QAAQ,CAAC,EAAM,EAAa,EAAc,CAC/D,GAAK,IAAqB,OAAI,EAAc,GAE5C,IAAI,EAAS,IAAgB,GAE7B,OAAQ,EAAK,UACR,aACH,GAAI,KAAK,QAAU,KAAK,wBAAwB,KAAK,EAAK,IAAI,EAC1D,KAAK,iBAAiB,EAAK,OAAQ,EAAS,WAAa,iBAAmB,EAAK,KAAO,iBAAiB,EAC7G,GAAI,EAAQ,CACV,GAAI,IAAgB,IAAgB,EAAK,OAAS,MAC9C,KAAK,iBAAiB,EAAK,MAAO,6CAA6C,EACnF,GAAI,EAAc,CAChB,GAAI,GAAO,EAAc,EAAK,IAAI,EAC9B,KAAK,iBAAiB,EAAK,MAAO,qBAAqB,EAC3D,EAAa,EAAK,MAAQ,GAE5B,GAAI,IAAgB,GAAgB,KAAK,YAAY,EAAK,KAAM,EAAa,EAAK,KAAK,EAEzF,UAEG,kBACH,KAAK,iBAAiB,EAAK,MAAO,mDAAmD,EACrF,UAEG,mBACH,GAAI,EAAU,KAAK,iBAAiB,EAAK,MAAO,2BAA2B,EAC3E,UAEG,0BACH,GAAI,EAAU,KAAK,iBAAiB,EAAK,MAAO,kCAAkC,EAClF,OAAO,KAAK,gBAAgB,EAAK,WAAY,EAAa,CAAY,UAGtE,KAAK,MAAM,EAAK,OAAQ,EAAS,UAAY,gBAAkB,SAAS,IAI5E,GAAK,iBAAmB,QAAQ,CAAC,EAAM,EAAa,EAAc,CAChE,GAAK,IAAqB,OAAI,EAAc,GAE5C,OAAQ,EAAK,UACR,gBACH,QAAS,EAAI,EAAG,EAAO,EAAK,WAAY,EAAI,EAAK,OAAQ,GAAK,EAAG,CAC/D,IAAI,EAAO,EAAK,GAElB,KAAK,sBAAsB,EAAM,EAAa,CAAY,EAE1D,UAEG,eACH,QAAS,EAAM,EAAG,EAAS,EAAK,SAAU,EAAM,EAAO,OAAQ,GAAO,EAAG,CACvE,IAAI,EAAO,EAAO,GAEpB,GAAI,EAAQ,KAAK,sBAAsB,EAAM,EAAa,CAAY,EAEtE,cAGA,KAAK,gBAAgB,EAAM,EAAa,CAAY,IAIxD,GAAK,sBAAwB,QAAQ,CAAC,EAAM,EAAa,EAAc,CACrE,GAAK,IAAqB,OAAI,EAAc,GAE5C,OAAQ,EAAK,UACR,WAEH,KAAK,sBAAsB,EAAK,MAAO,EAAa,CAAY,EAChE,UAEG,oBACH,KAAK,iBAAiB,EAAK,KAAM,EAAa,CAAY,EAC1D,UAEG,cACH,KAAK,iBAAiB,EAAK,SAAU,EAAa,CAAY,EAC9D,cAGA,KAAK,iBAAiB,EAAM,EAAa,CAAY,IASzD,IAAI,GAAa,QAAmB,CAAC,EAAO,EAAQ,EAAe,EAAU,EAAW,CACtF,KAAK,MAAQ,EACb,KAAK,OAAS,CAAC,CAAC,EAChB,KAAK,cAAgB,CAAC,CAAC,EACvB,KAAK,SAAW,EAChB,KAAK,UAAY,CAAC,CAAC,GAGjB,EAAQ,CACV,OAAQ,IAAI,GAAW,IAAK,EAAK,EACjC,OAAQ,IAAI,GAAW,IAAK,EAAI,EAChC,OAAQ,IAAI,GAAW,KAAM,EAAK,EAClC,OAAQ,IAAI,GAAW,IAAK,EAAK,EACjC,OAAQ,IAAI,GAAW,IAAK,EAAI,EAChC,OAAQ,IAAI,GAAW,IAAK,GAAM,GAAM,QAAS,CAAC,EAAG,CAAE,OAAO,EAAE,qBAAqB,EAAI,EACzF,OAAQ,IAAI,GAAW,WAAY,EAAK,EACxC,OAAQ,IAAI,GAAW,WAAY,EAAI,EACvC,WAAY,IAAI,GAAW,WAAY,GAAM,GAAO,KAAM,EAAI,EAC9D,MAAO,IAAI,GAAW,WAAY,GAAO,GAAO,KAAM,EAAI,CAC5D,EAEI,GAAO,EAAO,UAElB,GAAK,eAAiB,QAAQ,EAAG,CAC/B,MAAO,CAAC,EAAM,MAAM,GAGtB,GAAK,WAAa,QAAQ,EAAG,CAC3B,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAS,IAG5C,GAAK,aAAe,QAAQ,CAAC,EAAU,CACrC,IAAI,EAAS,KAAK,WAAW,EAC7B,GAAI,IAAW,EAAM,QAAU,IAAW,EAAM,OAC5C,MAAO,GACX,GAAI,IAAa,EAAQ,QAAU,IAAW,EAAM,QAAU,IAAW,EAAM,QAC3E,MAAO,CAAC,EAAO,OAKnB,GAAI,IAAa,EAAQ,SAAW,IAAa,EAAQ,MAAQ,KAAK,YAClE,OAAO,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,WAAY,KAAK,KAAK,CAAC,EACvE,GAAI,IAAa,EAAQ,OAAS,IAAa,EAAQ,MAAQ,IAAa,EAAQ,KAAO,IAAa,EAAQ,QAAU,IAAa,EAAQ,MAC3I,MAAO,GACX,GAAI,IAAa,EAAQ,OACrB,OAAO,IAAW,EAAM,OAC5B,GAAI,IAAa,EAAQ,MAAQ,IAAa,EAAQ,QAAU,IAAa,EAAQ,KACjF,MAAO,GACX,MAAO,CAAC,KAAK,aAGf,GAAK,mBAAqB,QAAQ,EAAG,CACnC,QAAS,EAAI,KAAK,QAAQ,OAAS,EAAG,GAAK,EAAG,IAAK,CACjD,IAAI,EAAU,KAAK,QAAQ,GAC3B,GAAI,EAAQ,QAAU,WAClB,OAAO,EAAQ,UAErB,MAAO,IAGT,GAAK,cAAgB,QAAQ,CAAC,EAAU,CACtC,IAAI,EAAQ,EAAO,KAAK,KACxB,GAAI,EAAK,SAAW,IAAa,EAAQ,IACrC,KAAK,YAAc,GAClB,QAAI,EAAS,EAAK,cACnB,EAAO,KAAK,KAAM,CAAQ,EAE1B,UAAK,YAAc,EAAK,YAK9B,GAAK,gBAAkB,QAAQ,CAAC,EAAU,CACxC,GAAI,KAAK,WAAW,IAAM,EACxB,KAAK,QAAQ,KAAK,QAAQ,OAAS,GAAK,GAM5C,EAAQ,OAAO,cAAgB,EAAQ,OAAO,cAAgB,QAAQ,EAAG,CACvE,GAAI,KAAK,QAAQ,SAAW,EAAG,CAC7B,KAAK,YAAc,GACnB,OAEF,IAAI,EAAM,KAAK,QAAQ,IAAI,EAC3B,GAAI,IAAQ,EAAM,QAAU,KAAK,WAAW,EAAE,QAAU,WACtD,EAAM,KAAK,QAAQ,IAAI,EAEzB,KAAK,YAAc,CAAC,EAAI,QAG1B,EAAQ,OAAO,cAAgB,QAAQ,CAAC,EAAU,CAChD,KAAK,QAAQ,KAAK,KAAK,aAAa,CAAQ,EAAI,EAAM,OAAS,EAAM,MAAM,EAC3E,KAAK,YAAc,IAGrB,EAAQ,aAAa,cAAgB,QAAQ,EAAG,CAC9C,KAAK,QAAQ,KAAK,EAAM,MAAM,EAC9B,KAAK,YAAc,IAGrB,EAAQ,OAAO,cAAgB,QAAQ,CAAC,EAAU,CAChD,IAAI,EAAkB,IAAa,EAAQ,KAAO,IAAa,EAAQ,MAAQ,IAAa,EAAQ,OAAS,IAAa,EAAQ,OAClI,KAAK,QAAQ,KAAK,EAAkB,EAAM,OAAS,EAAM,MAAM,EAC/D,KAAK,YAAc,IAGrB,EAAQ,OAAO,cAAgB,QAAQ,EAAG,GAI1C,EAAQ,UAAU,cAAgB,EAAQ,OAAO,cAAgB,QAAQ,CAAC,EAAU,CAClF,GAAI,EAAS,YAAc,IAAa,EAAQ,OAC5C,EAAE,IAAa,EAAQ,MAAQ,KAAK,WAAW,IAAM,EAAM,SAC3D,EAAE,IAAa,EAAQ,SAAW,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,WAAY,KAAK,KAAK,CAAC,IAC9F,GAAG,IAAa,EAAQ,OAAS,IAAa,EAAQ,SAAW,KAAK,WAAW,IAAM,EAAM,QAC7F,KAAK,QAAQ,KAAK,EAAM,MAAM,EAE9B,UAAK,QAAQ,KAAK,EAAM,MAAM,EAClC,KAAK,YAAc,IAGrB,EAAQ,MAAM,cAAgB,QAAQ,EAAG,CACvC,GAAI,KAAK,WAAW,EAAE,QAAU,WAAc,KAAK,QAAQ,IAAI,EAC/D,KAAK,YAAc,IAGrB,EAAQ,UAAU,cAAgB,QAAQ,EAAG,CAC3C,GAAI,KAAK,WAAW,IAAM,EAAM,OAC5B,KAAK,QAAQ,IAAI,EAEjB,UAAK,QAAQ,KAAK,EAAM,MAAM,EAClC,KAAK,YAAc,IAGrB,EAAQ,KAAK,cAAgB,QAAQ,CAAC,EAAU,CAC9C,GAAI,IAAa,EAAQ,UAAW,CAClC,IAAI,EAAQ,KAAK,QAAQ,OAAS,EAClC,GAAI,KAAK,QAAQ,KAAW,EAAM,OAC9B,KAAK,QAAQ,GAAS,EAAM,WAE5B,UAAK,QAAQ,GAAS,EAAM,MAElC,KAAK,YAAc,IAGrB,EAAQ,KAAK,cAAgB,QAAQ,CAAC,EAAU,CAC9C,IAAI,EAAU,GACd,GAAI,KAAK,QAAQ,aAAe,GAAK,IAAa,EAAQ,KACxD,GAAI,KAAK,QAAU,MAAQ,CAAC,KAAK,aAC7B,KAAK,QAAU,SAAW,KAAK,mBAAmB,EAClD,EAAU,GAEhB,KAAK,YAAc,GAsBrB,IAAI,EAAO,EAAO,UAOlB,EAAK,eAAiB,QAAQ,CAAC,EAAM,EAAU,EAAwB,CACrE,GAAI,KAAK,QAAQ,aAAe,GAAK,EAAK,OAAS,gBAC/C,OACJ,GAAI,KAAK,QAAQ,aAAe,IAAM,EAAK,UAAY,EAAK,QAAU,EAAK,WACvE,OACJ,IAAI,EAAM,EAAK,IACX,EACJ,OAAQ,EAAI,UACP,aAAc,EAAO,EAAI,KAAM,UAC/B,UAAW,EAAO,OAAO,EAAI,KAAK,EAAG,cACjC,OAET,IAAI,EAAO,EAAK,KAChB,GAAI,KAAK,QAAQ,aAAe,EAAG,CACjC,GAAI,IAAS,aAAe,IAAS,OAAQ,CAC3C,GAAI,EAAS,MACX,GAAI,GACF,GAAI,EAAuB,YAAc,EACvC,EAAuB,YAAc,EAAI,MAG3C,UAAK,iBAAiB,EAAI,MAAO,oCAAoC,EAGzE,EAAS,MAAQ,GAEnB,OAEF,EAAO,IAAM,EACb,IAAI,EAAQ,EAAS,GACrB,GAAI,EAAO,CACT,IAAI,EACJ,GAAI,IAAS,OACX,EAAe,KAAK,QAAU,EAAM,MAAQ,EAAM,KAAO,EAAM,IAE/D,OAAe,EAAM,MAAQ,EAAM,GAErC,GAAI,EACA,KAAK,iBAAiB,EAAI,MAAO,0BAA0B,EAE/D,OAAQ,EAAS,GAAQ,CACvB,KAAM,GACN,IAAK,GACL,IAAK,EACP,EAEF,EAAM,GAAQ,IAkBhB,EAAK,gBAAkB,QAAQ,CAAC,EAAS,EAAwB,CAC/D,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SACvC,EAAO,KAAK,iBAAiB,EAAS,CAAsB,EAChE,GAAI,KAAK,OAAS,EAAQ,MAAO,CAC/B,IAAI,EAAO,KAAK,YAAY,EAAU,CAAQ,EAC9C,EAAK,YAAc,CAAC,CAAI,EACxB,MAAO,KAAK,IAAI,EAAQ,KAAK,EAAK,EAAK,YAAY,KAAK,KAAK,iBAAiB,EAAS,CAAsB,CAAC,EAC9G,OAAO,KAAK,WAAW,EAAM,oBAAoB,EAEnD,OAAO,GAMT,EAAK,iBAAmB,QAAQ,CAAC,EAAS,EAAwB,EAAgB,CAChF,GAAI,KAAK,aAAa,OAAO,EAC3B,GAAI,KAAK,YAAe,OAAO,KAAK,WAAW,CAAO,EAG/C,UAAK,YAAc,GAG5B,IAAI,EAAyB,GAAO,EAAiB,GAAI,EAAmB,GAAI,EAAiB,GACjG,GAAI,EACF,EAAiB,EAAuB,oBACxC,EAAmB,EAAuB,cAC1C,EAAiB,EAAuB,YACxC,EAAuB,oBAAsB,EAAuB,cAAgB,GAEpF,OAAyB,IAAI,GAC7B,EAAyB,GAG3B,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SAC3C,GAAI,KAAK,OAAS,EAAQ,QAAU,KAAK,OAAS,EAAQ,KACxD,KAAK,iBAAmB,KAAK,MAC7B,KAAK,yBAA2B,IAAY,QAE9C,IAAI,EAAO,KAAK,sBAAsB,EAAS,CAAsB,EACrE,GAAI,EAAkB,EAAO,EAAe,KAAK,KAAM,EAAM,EAAU,CAAQ,EAC/E,GAAI,KAAK,KAAK,SAAU,CACtB,IAAI,EAAO,KAAK,YAAY,EAAU,CAAQ,EAE9C,GADA,EAAK,SAAW,KAAK,MACjB,KAAK,OAAS,EAAQ,GACtB,EAAO,KAAK,aAAa,EAAM,GAAO,CAAsB,EAChE,GAAI,CAAC,EACH,EAAuB,oBAAsB,EAAuB,cAAgB,EAAuB,YAAc,GAE3H,GAAI,EAAuB,iBAAmB,EAAK,MAC/C,EAAuB,gBAAkB,GAC7C,GAAI,KAAK,OAAS,EAAQ,GACtB,KAAK,iBAAiB,CAAI,EAE1B,UAAK,gBAAgB,CAAI,EAI7B,GAHA,EAAK,KAAO,EACZ,KAAK,KAAK,EACV,EAAK,MAAQ,KAAK,iBAAiB,CAAO,EACtC,EAAiB,GAAM,EAAuB,YAAc,EAChE,OAAO,KAAK,WAAW,EAAM,sBAAsB,EAEnD,QAAI,EAA0B,KAAK,sBAAsB,EAAwB,EAAI,EAEvF,GAAI,EAAiB,GAAM,EAAuB,oBAAsB,EACxE,GAAI,EAAmB,GAAM,EAAuB,cAAgB,EACpE,OAAO,GAKT,EAAK,sBAAwB,QAAQ,CAAC,EAAS,EAAwB,CACrE,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SACvC,EAAO,KAAK,aAAa,EAAS,CAAsB,EAC5D,GAAI,KAAK,sBAAsB,CAAsB,EAAK,OAAO,EACjE,GAAI,KAAK,IAAI,EAAQ,QAAQ,EAAG,CAC9B,IAAI,EAAO,KAAK,YAAY,EAAU,CAAQ,EAK9C,OAJA,EAAK,KAAO,EACZ,EAAK,WAAa,KAAK,iBAAiB,EACxC,KAAK,OAAO,EAAQ,KAAK,EACzB,EAAK,UAAY,KAAK,iBAAiB,CAAO,EACvC,KAAK,WAAW,EAAM,uBAAuB,EAEtD,OAAO,GAKT,EAAK,aAAe,QAAQ,CAAC,EAAS,EAAwB,CAC5D,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SACvC,EAAO,KAAK,gBAAgB,EAAwB,GAAO,GAAO,CAAO,EAC7E,GAAI,KAAK,sBAAsB,CAAsB,EAAK,OAAO,EACjE,OAAO,EAAK,QAAU,GAAY,EAAK,OAAS,0BAA4B,EAAO,KAAK,YAAY,EAAM,EAAU,EAAU,GAAI,CAAO,GAS3I,EAAK,YAAc,QAAQ,CAAC,EAAM,EAAc,EAAc,EAAS,EAAS,CAC9E,IAAI,EAAO,KAAK,KAAK,MACrB,GAAI,GAAQ,OAAS,CAAC,GAAW,KAAK,OAAS,EAAQ,MACrD,GAAI,EAAO,EAAS,CAClB,IAAI,EAAU,KAAK,OAAS,EAAQ,WAAa,KAAK,OAAS,EAAQ,WACnE,EAAW,KAAK,OAAS,EAAQ,SACrC,GAAI,EAGF,EAAO,EAAQ,WAAW,MAE5B,IAAI,EAAK,KAAK,MACd,KAAK,KAAK,EACV,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SACvC,EAAQ,KAAK,YAAY,KAAK,gBAAgB,KAAM,GAAO,GAAO,CAAO,EAAG,EAAU,EAAU,EAAM,CAAO,EAC7G,EAAO,KAAK,YAAY,EAAc,EAAc,EAAM,EAAO,EAAI,GAAW,CAAQ,EAC5F,GAAK,GAAW,KAAK,OAAS,EAAQ,UAAc,IAAa,KAAK,OAAS,EAAQ,WAAa,KAAK,OAAS,EAAQ,YACxH,KAAK,iBAAiB,KAAK,MAAO,0FAA0F,EAE9H,OAAO,KAAK,YAAY,EAAM,EAAc,EAAc,EAAS,CAAO,GAG9E,OAAO,GAGT,EAAK,YAAc,QAAQ,CAAC,EAAU,EAAU,EAAM,EAAO,EAAI,EAAS,CACxE,GAAI,EAAM,OAAS,oBAAuB,KAAK,MAAM,EAAM,MAAO,+DAA+D,EACjI,IAAI,EAAO,KAAK,YAAY,EAAU,CAAQ,EAI9C,OAHA,EAAK,KAAO,EACZ,EAAK,SAAW,EAChB,EAAK,MAAQ,EACN,KAAK,WAAW,EAAM,EAAU,oBAAsB,kBAAkB,GAKjF,EAAK,gBAAkB,QAAQ,CAAC,EAAwB,EAAU,EAAQ,EAAS,CACjF,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SAAU,EACrD,GAAI,KAAK,aAAa,OAAO,GAAK,KAAK,SACrC,EAAO,KAAK,WAAW,CAAO,EAC9B,EAAW,GACN,QAAI,KAAK,KAAK,OAAQ,CAC3B,IAAI,EAAO,KAAK,UAAU,EAAG,EAAS,KAAK,OAAS,EAAQ,OAM5D,GALA,EAAK,SAAW,KAAK,MACrB,EAAK,OAAS,GACd,KAAK,KAAK,EACV,EAAK,SAAW,KAAK,gBAAgB,KAAM,GAAM,EAAQ,CAAO,EAChE,KAAK,sBAAsB,EAAwB,EAAI,EACnD,EAAU,KAAK,gBAAgB,EAAK,QAAQ,EAC3C,QAAI,KAAK,QAAU,EAAK,WAAa,UAAY,GAAsB,EAAK,QAAQ,EACrF,KAAK,iBAAiB,EAAK,MAAO,wCAAwC,EACzE,QAAI,EAAK,WAAa,UAAY,GAAqB,EAAK,QAAQ,EACrE,KAAK,iBAAiB,EAAK,MAAO,mCAAmC,EAClE,OAAW,GAClB,EAAO,KAAK,WAAW,EAAM,EAAS,mBAAqB,iBAAiB,EACvE,QAAI,CAAC,GAAY,KAAK,OAAS,EAAQ,UAAW,CACvD,IAAK,GAAW,KAAK,iBAAiB,SAAW,IAAM,KAAK,QAAQ,mBAAsB,KAAK,WAAW,EAG1G,GAFA,EAAO,KAAK,kBAAkB,EAE1B,KAAK,OAAS,EAAQ,IAAO,KAAK,WAAW,EAC5C,KAEL,GADA,EAAO,KAAK,oBAAoB,EAAwB,CAAO,EAC3D,KAAK,sBAAsB,CAAsB,EAAK,OAAO,EACjE,MAAO,KAAK,KAAK,SAAW,CAAC,KAAK,mBAAmB,EAAG,CACtD,IAAI,EAAS,KAAK,YAAY,EAAU,CAAQ,EAChD,EAAO,SAAW,KAAK,MACvB,EAAO,OAAS,GAChB,EAAO,SAAW,EAClB,KAAK,gBAAgB,CAAI,EACzB,KAAK,KAAK,EACV,EAAO,KAAK,WAAW,EAAQ,kBAAkB,GAIrD,GAAI,CAAC,GAAU,KAAK,IAAI,EAAQ,QAAQ,EACtC,GAAI,EACA,KAAK,WAAW,KAAK,YAAY,EAEjC,YAAO,KAAK,YAAY,EAAU,EAAU,EAAM,KAAK,gBAAgB,KAAM,GAAO,GAAO,CAAO,EAAG,KAAM,EAAK,EAEpH,YAAO,GAIX,SAAS,EAAqB,CAAC,EAAM,CACnC,OACE,EAAK,OAAS,cACd,EAAK,OAAS,2BAA6B,GAAsB,EAAK,UAAU,EAIpF,SAAS,EAAoB,CAAC,EAAM,CAClC,OACE,EAAK,OAAS,oBAAsB,EAAK,SAAS,OAAS,qBAC3D,EAAK,OAAS,mBAAqB,GAAqB,EAAK,UAAU,GACvE,EAAK,OAAS,2BAA6B,GAAqB,EAAK,UAAU,EAMnF,EAAK,oBAAsB,QAAQ,CAAC,EAAwB,EAAS,CACnE,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SACvC,EAAO,KAAK,cAAc,EAAwB,CAAO,EAC7D,GAAI,EAAK,OAAS,2BAA6B,KAAK,MAAM,MAAM,KAAK,aAAc,KAAK,UAAU,IAAM,IACpG,OAAO,EACX,IAAI,EAAS,KAAK,gBAAgB,EAAM,EAAU,EAAU,GAAO,CAAO,EAC1E,GAAI,GAA0B,EAAO,OAAS,mBAAoB,CAChE,GAAI,EAAuB,qBAAuB,EAAO,MAAS,EAAuB,oBAAsB,GAC/G,GAAI,EAAuB,mBAAqB,EAAO,MAAS,EAAuB,kBAAoB,GAC3G,GAAI,EAAuB,eAAiB,EAAO,MAAS,EAAuB,cAAgB,GAErG,OAAO,GAGT,EAAK,gBAAkB,QAAQ,CAAC,EAAM,EAAU,EAAU,EAAS,EAAS,CAC1E,IAAI,EAAkB,KAAK,QAAQ,aAAe,GAAK,EAAK,OAAS,cAAgB,EAAK,OAAS,SAC/F,KAAK,aAAe,EAAK,KAAO,CAAC,KAAK,mBAAmB,GAAK,EAAK,IAAM,EAAK,QAAU,GACxF,KAAK,mBAAqB,EAAK,MAC/B,EAAkB,GAEtB,MAAO,GAAM,CACX,IAAI,EAAU,KAAK,eAAe,EAAM,EAAU,EAAU,EAAS,EAAiB,EAAiB,CAAO,EAE9G,GAAI,EAAQ,SAAY,EAAkB,GAC1C,GAAI,IAAY,GAAQ,EAAQ,OAAS,0BAA2B,CAClE,GAAI,EAAiB,CACnB,IAAI,EAAY,KAAK,YAAY,EAAU,CAAQ,EACnD,EAAU,WAAa,EACvB,EAAU,KAAK,WAAW,EAAW,iBAAiB,EAExD,OAAO,EAGT,EAAO,IAIX,EAAK,sBAAwB,QAAQ,EAAG,CACtC,MAAO,CAAC,KAAK,mBAAmB,GAAK,KAAK,IAAI,EAAQ,KAAK,GAG7D,EAAK,yBAA2B,QAAQ,CAAC,EAAU,EAAU,EAAU,EAAS,CAC9E,OAAO,KAAK,qBAAqB,KAAK,YAAY,EAAU,CAAQ,EAAG,EAAU,GAAM,CAAO,GAGhG,EAAK,eAAiB,QAAQ,CAAC,EAAM,EAAU,EAAU,EAAS,EAAiB,EAAiB,EAAS,CAC3G,IAAI,EAAoB,KAAK,QAAQ,aAAe,GAChD,EAAW,GAAqB,KAAK,IAAI,EAAQ,WAAW,EAChE,GAAI,GAAW,EAAY,KAAK,MAAM,KAAK,aAAc,kEAAkE,EAE3H,IAAI,EAAW,KAAK,IAAI,EAAQ,QAAQ,EACxC,GAAI,GAAa,GAAY,KAAK,OAAS,EAAQ,QAAU,KAAK,OAAS,EAAQ,WAAc,KAAK,IAAI,EAAQ,GAAG,EAAG,CACtH,IAAI,EAAO,KAAK,YAAY,EAAU,CAAQ,EAE9C,GADA,EAAK,OAAS,EACV,EACF,EAAK,SAAW,KAAK,gBAAgB,EACrC,KAAK,OAAO,EAAQ,QAAQ,EACvB,QAAI,KAAK,OAAS,EAAQ,WAAa,EAAK,OAAS,QAC1D,EAAK,SAAW,KAAK,kBAAkB,EAEvC,OAAK,SAAW,KAAK,WAAW,KAAK,QAAQ,gBAAkB,OAAO,EAGxE,GADA,EAAK,SAAW,CAAC,CAAC,EACd,EACF,EAAK,SAAW,EAElB,EAAO,KAAK,WAAW,EAAM,kBAAkB,EAC1C,QAAI,CAAC,GAAW,KAAK,IAAI,EAAQ,MAAM,EAAG,CAC/C,IAAI,EAAyB,IAAI,GAAqB,EAAc,KAAK,SAAU,EAAc,KAAK,SAAU,EAAmB,KAAK,cACxI,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EACrB,IAAI,EAAW,KAAK,cAAc,EAAQ,OAAQ,KAAK,QAAQ,aAAe,EAAG,GAAO,CAAsB,EAC9G,GAAI,GAAmB,CAAC,GAAY,KAAK,sBAAsB,EAAG,CAGhE,GAFA,KAAK,mBAAmB,EAAwB,EAAK,EACrD,KAAK,+BAA+B,EAChC,KAAK,cAAgB,EACrB,KAAK,MAAM,KAAK,cAAe,2DAA2D,EAI9F,OAHA,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EACd,KAAK,yBAAyB,EAAU,EAAU,EAAU,CAAO,EAE5E,KAAK,sBAAsB,EAAwB,EAAI,EACvD,KAAK,SAAW,GAAe,KAAK,SACpC,KAAK,SAAW,GAAe,KAAK,SACpC,KAAK,cAAgB,GAAoB,KAAK,cAC9C,IAAI,EAAS,KAAK,YAAY,EAAU,CAAQ,EAGhD,GAFA,EAAO,OAAS,EAChB,EAAO,UAAY,EACf,EACF,EAAO,SAAW,EAEpB,EAAO,KAAK,WAAW,EAAQ,gBAAgB,EAC1C,QAAI,KAAK,OAAS,EAAQ,UAAW,CAC1C,GAAI,GAAY,EACd,KAAK,MAAM,KAAK,MAAO,2EAA2E,EAEpG,IAAI,EAAS,KAAK,YAAY,EAAU,CAAQ,EAChD,EAAO,IAAM,EACb,EAAO,MAAQ,KAAK,cAAc,CAAC,SAAU,EAAI,CAAC,EAClD,EAAO,KAAK,WAAW,EAAQ,0BAA0B,EAE3D,OAAO,GAQT,EAAK,cAAgB,QAAQ,CAAC,EAAwB,EAAS,EAAQ,CAGrE,GAAI,KAAK,OAAS,EAAQ,MAAS,KAAK,WAAW,EAEnD,IAAI,EAAM,EAAa,KAAK,mBAAqB,KAAK,MACtD,OAAQ,KAAK,WACR,EAAQ,OACX,GAAI,CAAC,KAAK,WACN,KAAK,MAAM,KAAK,MAAO,kCAAkC,EAG7D,GAFA,EAAO,KAAK,UAAU,EACtB,KAAK,KAAK,EACN,KAAK,OAAS,EAAQ,QAAU,CAAC,KAAK,iBACtC,KAAK,MAAM,EAAK,MAAO,gDAAgD,EAO3E,GAAI,KAAK,OAAS,EAAQ,KAAO,KAAK,OAAS,EAAQ,UAAY,KAAK,OAAS,EAAQ,OACrF,KAAK,WAAW,EACpB,OAAO,KAAK,WAAW,EAAM,OAAO,OAEjC,EAAQ,MAGX,OAFA,EAAO,KAAK,UAAU,EACtB,KAAK,KAAK,EACH,KAAK,WAAW,EAAM,gBAAgB,OAE1C,EAAQ,KACX,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SAAU,EAAc,KAAK,YACpE,EAAK,KAAK,WAAW,EAAK,EAC9B,GAAI,KAAK,QAAQ,aAAe,GAAK,CAAC,GAAe,EAAG,OAAS,SAAW,CAAC,KAAK,mBAAmB,GAAK,KAAK,IAAI,EAAQ,SAAS,EAElI,OADA,KAAK,gBAAgB,EAAM,MAAM,EAC1B,KAAK,cAAc,KAAK,YAAY,EAAU,CAAQ,EAAG,EAAG,GAAO,GAAM,CAAO,EAEzF,GAAI,GAAc,CAAC,KAAK,mBAAmB,EAAG,CAC5C,GAAI,KAAK,IAAI,EAAQ,KAAK,EACtB,OAAO,KAAK,qBAAqB,KAAK,YAAY,EAAU,CAAQ,EAAG,CAAC,CAAE,EAAG,GAAO,CAAO,EAC/F,GAAI,KAAK,QAAQ,aAAe,GAAK,EAAG,OAAS,SAAW,KAAK,OAAS,EAAQ,MAAQ,CAAC,IACtF,CAAC,KAAK,0BAA4B,KAAK,QAAU,MAAQ,KAAK,aAAc,CAE/E,GADA,EAAK,KAAK,WAAW,EAAK,EACtB,KAAK,mBAAmB,GAAK,CAAC,KAAK,IAAI,EAAQ,KAAK,EACpD,KAAK,WAAW,EACpB,OAAO,KAAK,qBAAqB,KAAK,YAAY,EAAU,CAAQ,EAAG,CAAC,CAAE,EAAG,GAAM,CAAO,GAG9F,OAAO,OAEJ,EAAQ,OACX,IAAI,EAAQ,KAAK,MAGjB,OAFA,EAAO,KAAK,aAAa,EAAM,KAAK,EACpC,EAAK,MAAQ,CAAC,QAAS,EAAM,QAAS,MAAO,EAAM,KAAK,EACjD,OAEJ,EAAQ,SAAU,EAAQ,OAC7B,OAAO,KAAK,aAAa,KAAK,KAAK,OAEhC,EAAQ,WAAY,EAAQ,WAAY,EAAQ,OAKnD,OAJA,EAAO,KAAK,UAAU,EACtB,EAAK,MAAQ,KAAK,OAAS,EAAQ,MAAQ,KAAO,KAAK,OAAS,EAAQ,MACxE,EAAK,IAAM,KAAK,KAAK,QACrB,KAAK,KAAK,EACH,KAAK,WAAW,EAAM,SAAS,OAEnC,EAAQ,OACX,IAAI,EAAQ,KAAK,MAAO,EAAO,KAAK,mCAAmC,EAAY,CAAO,EAC1F,GAAI,EAAwB,CAC1B,GAAI,EAAuB,oBAAsB,GAAK,CAAC,KAAK,qBAAqB,CAAI,EACjF,EAAuB,oBAAsB,EACjD,GAAI,EAAuB,kBAAoB,EAC3C,EAAuB,kBAAoB,EAEjD,OAAO,OAEJ,EAAQ,SAIX,OAHA,EAAO,KAAK,UAAU,EACtB,KAAK,KAAK,EACV,EAAK,SAAW,KAAK,cAAc,EAAQ,SAAU,GAAM,GAAM,CAAsB,EAChF,KAAK,WAAW,EAAM,iBAAiB,OAE3C,EAAQ,OAEX,OADA,KAAK,gBAAgB,EAAM,MAAM,EAC1B,KAAK,SAAS,GAAO,CAAsB,OAE/C,EAAQ,UAGX,OAFA,EAAO,KAAK,UAAU,EACtB,KAAK,KAAK,EACH,KAAK,cAAc,EAAM,CAAC,OAE9B,EAAQ,OACX,OAAO,KAAK,WAAW,KAAK,UAAU,EAAG,EAAK,OAE3C,EAAQ,KACX,OAAO,KAAK,SAAS,OAElB,EAAQ,UACX,OAAO,KAAK,cAAc,OAEvB,EAAQ,QACX,GAAI,KAAK,QAAQ,aAAe,GAC9B,OAAO,KAAK,gBAAgB,CAAM,EAElC,YAAO,KAAK,WAAW,UAIzB,OAAO,KAAK,qBAAqB,IAIrC,EAAK,qBAAuB,QAAQ,EAAG,CACrC,KAAK,WAAW,GAGlB,EAAK,gBAAkB,QAAQ,CAAC,EAAQ,CACtC,IAAI,EAAO,KAAK,UAAU,EAI1B,GAAI,KAAK,YAAe,KAAK,iBAAiB,KAAK,MAAO,mCAAmC,EAG7F,GAFA,KAAK,KAAK,EAEN,KAAK,OAAS,EAAQ,QAAU,CAAC,EACnC,OAAO,KAAK,mBAAmB,CAAI,EAC9B,QAAI,KAAK,OAAS,EAAQ,IAAK,CACpC,IAAI,EAAO,KAAK,YAAY,EAAK,MAAO,EAAK,KAAO,EAAK,IAAI,KAAK,EAGlE,OAFA,EAAK,KAAO,SACZ,EAAK,KAAO,KAAK,WAAW,EAAM,YAAY,EACvC,KAAK,gBAAgB,CAAI,EAEhC,UAAK,WAAW,GAIpB,EAAK,mBAAqB,QAAQ,CAAC,EAAM,CAMvC,GALA,KAAK,KAAK,EAGV,EAAK,OAAS,KAAK,iBAAiB,EAEhC,KAAK,QAAQ,aAAe,GAC9B,GAAI,CAAC,KAAK,IAAI,EAAQ,MAAM,EAE1B,GADA,KAAK,OAAO,EAAQ,KAAK,EACrB,CAAC,KAAK,mBAAmB,EAAQ,MAAM,GAEzC,GADA,EAAK,QAAU,KAAK,iBAAiB,EACjC,CAAC,KAAK,IAAI,EAAQ,MAAM,GAE1B,GADA,KAAK,OAAO,EAAQ,KAAK,EACrB,CAAC,KAAK,mBAAmB,EAAQ,MAAM,EACzC,KAAK,WAAW,GAIpB,OAAK,QAAU,KAGjB,OAAK,QAAU,KAIjB,QAAI,CAAC,KAAK,IAAI,EAAQ,MAAM,EAAG,CAC7B,IAAI,EAAW,KAAK,MACpB,GAAI,KAAK,IAAI,EAAQ,KAAK,GAAK,KAAK,IAAI,EAAQ,MAAM,EACpD,KAAK,iBAAiB,EAAU,2CAA2C,EAE3E,UAAK,WAAW,CAAQ,EAK9B,OAAO,KAAK,WAAW,EAAM,kBAAkB,GAGjD,EAAK,gBAAkB,QAAQ,CAAC,EAAM,CACpC,KAAK,KAAK,EAEV,IAAI,EAAc,KAAK,YAGvB,GAFA,EAAK,SAAW,KAAK,WAAW,EAAI,EAEhC,EAAK,SAAS,OAAS,OACvB,KAAK,iBAAiB,EAAK,SAAS,MAAO,0DAA0D,EACzG,GAAI,EACA,KAAK,iBAAiB,EAAK,MAAO,mDAAmD,EACzF,GAAI,KAAK,QAAQ,aAAe,UAAY,CAAC,KAAK,QAAQ,4BACtD,KAAK,iBAAiB,EAAK,MAAO,2CAA2C,EAEjF,OAAO,KAAK,WAAW,EAAM,cAAc,GAG7C,EAAK,aAAe,QAAQ,CAAC,EAAO,CAClC,IAAI,EAAO,KAAK,UAAU,EAG1B,GAFA,EAAK,MAAQ,EACb,EAAK,IAAM,KAAK,MAAM,MAAM,KAAK,MAAO,KAAK,GAAG,EAC5C,EAAK,IAAI,WAAW,EAAK,IAAI,OAAS,CAAC,IAAM,IAC7C,EAAK,OAAS,EAAK,OAAS,KAAO,EAAK,MAAM,SAAS,EAAI,EAAK,IAAI,MAAM,EAAG,EAAE,EAAE,QAAQ,KAAM,EAAE,EAErG,OADA,KAAK,KAAK,EACH,KAAK,WAAW,EAAM,SAAS,GAGxC,EAAK,qBAAuB,QAAQ,EAAG,CACrC,KAAK,OAAO,EAAQ,MAAM,EAC1B,IAAI,EAAM,KAAK,gBAAgB,EAE/B,OADA,KAAK,OAAO,EAAQ,MAAM,EACnB,GAGT,EAAK,iBAAmB,QAAQ,CAAC,EAAU,CACzC,MAAO,CAAC,KAAK,mBAAmB,GAGlC,EAAK,mCAAqC,QAAQ,CAAC,EAAY,EAAS,CACtE,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SAAU,EAAK,EAAqB,KAAK,QAAQ,aAAe,EAC3G,GAAI,KAAK,QAAQ,aAAe,EAAG,CACjC,KAAK,KAAK,EAEV,IAAI,EAAgB,KAAK,MAAO,EAAgB,KAAK,SACjD,EAAW,CAAC,EAAG,EAAQ,GAAM,EAAc,GAC3C,EAAyB,IAAI,GAAqB,EAAc,KAAK,SAAU,EAAc,KAAK,SAAU,EAChH,KAAK,SAAW,EAChB,KAAK,SAAW,EAEhB,MAAO,KAAK,OAAS,EAAQ,OAE3B,GADA,EAAQ,EAAQ,GAAQ,KAAK,OAAO,EAAQ,KAAK,EAC7C,GAAsB,KAAK,mBAAmB,EAAQ,OAAQ,EAAI,EAAG,CACvE,EAAc,GACd,MACK,QAAI,KAAK,OAAS,EAAQ,SAAU,CAGzC,GAFA,EAAc,KAAK,MACnB,EAAS,KAAK,KAAK,eAAe,KAAK,iBAAiB,CAAC,CAAC,EACtD,KAAK,OAAS,EAAQ,MACxB,KAAK,iBACH,KAAK,MACL,+CACF,EAEF,MAEA,OAAS,KAAK,KAAK,iBAAiB,GAAO,EAAwB,KAAK,cAAc,CAAC,EAG3F,IAAI,EAAc,KAAK,WAAY,EAAc,KAAK,cAGtD,GAFA,KAAK,OAAO,EAAQ,MAAM,EAEtB,GAAc,KAAK,iBAAiB,CAAQ,GAAK,KAAK,IAAI,EAAQ,KAAK,EAKzE,OAJA,KAAK,mBAAmB,EAAwB,EAAK,EACrD,KAAK,+BAA+B,EACpC,KAAK,SAAW,EAChB,KAAK,SAAW,EACT,KAAK,oBAAoB,EAAU,EAAU,EAAU,CAAO,EAGvE,GAAI,CAAC,EAAS,QAAU,EAAe,KAAK,WAAW,KAAK,YAAY,EACxE,GAAI,EAAe,KAAK,WAAW,CAAW,EAK9C,GAJA,KAAK,sBAAsB,EAAwB,EAAI,EACvD,KAAK,SAAW,GAAe,KAAK,SACpC,KAAK,SAAW,GAAe,KAAK,SAEhC,EAAS,OAAS,EACpB,EAAM,KAAK,YAAY,EAAe,CAAa,EACnD,EAAI,YAAc,EAClB,KAAK,aAAa,EAAK,qBAAsB,EAAa,CAAW,EAErE,OAAM,EAAS,GAGjB,OAAM,KAAK,qBAAqB,EAGlC,GAAI,KAAK,QAAQ,eAAgB,CAC/B,IAAI,EAAM,KAAK,YAAY,EAAU,CAAQ,EAE7C,OADA,EAAI,WAAa,EACV,KAAK,WAAW,EAAK,yBAAyB,EAErD,YAAO,GAIX,EAAK,eAAiB,QAAQ,CAAC,EAAM,CACnC,OAAO,GAGT,EAAK,oBAAsB,QAAQ,CAAC,EAAU,EAAU,EAAU,EAAS,CACzE,OAAO,KAAK,qBAAqB,KAAK,YAAY,EAAU,CAAQ,EAAG,EAAU,GAAO,CAAO,GASjG,IAAI,GAAQ,CAAC,EAEb,EAAK,SAAW,QAAQ,EAAG,CACzB,GAAI,KAAK,YAAe,KAAK,iBAAiB,KAAK,MAAO,gCAAgC,EAC1F,IAAI,EAAO,KAAK,UAAU,EAE1B,GADA,KAAK,KAAK,EACN,KAAK,QAAQ,aAAe,GAAK,KAAK,OAAS,EAAQ,IAAK,CAC9D,IAAI,EAAO,KAAK,YAAY,EAAK,MAAO,EAAK,KAAO,EAAK,IAAI,KAAK,EAClE,EAAK,KAAO,MACZ,EAAK,KAAO,KAAK,WAAW,EAAM,YAAY,EAC9C,KAAK,KAAK,EACV,IAAI,EAAc,KAAK,YAEvB,GADA,EAAK,SAAW,KAAK,WAAW,EAAI,EAChC,EAAK,SAAS,OAAS,SACvB,KAAK,iBAAiB,EAAK,SAAS,MAAO,sDAAsD,EACrG,GAAI,EACA,KAAK,iBAAiB,EAAK,MAAO,kDAAkD,EACxF,GAAI,CAAC,KAAK,kBACN,KAAK,iBAAiB,EAAK,MAAO,mEAAmE,EACzG,OAAO,KAAK,WAAW,EAAM,cAAc,EAE7C,IAAI,EAAW,KAAK,MAAO,EAAW,KAAK,SAE3C,GADA,EAAK,OAAS,KAAK,gBAAgB,KAAK,cAAc,KAAM,GAAO,EAAI,EAAG,EAAU,EAAU,GAAM,EAAK,EACrG,KAAK,IAAI,EAAQ,MAAM,EAAK,EAAK,UAAY,KAAK,cAAc,EAAQ,OAAQ,KAAK,QAAQ,aAAe,EAAG,EAAK,EACjH,OAAK,UAAY,GACxB,OAAO,KAAK,WAAW,EAAM,eAAe,GAK9C,EAAK,qBAAuB,QAAQ,CAAC,EAAK,CACxC,IAAI,EAAW,EAAI,SAEf,EAAO,KAAK,UAAU,EAC1B,GAAI,KAAK,OAAS,EAAQ,gBAAiB,CACzC,GAAI,CAAC,EACH,KAAK,iBAAiB,KAAK,MAAO,kDAAkD,EAEtF,EAAK,MAAQ,CACX,IAAK,KAAK,MAAM,QAAQ,SAAU;AAAA,CAAI,EACtC,OAAQ,IACV,EAEA,OAAK,MAAQ,CACX,IAAK,KAAK,MAAM,MAAM,KAAK,MAAO,KAAK,GAAG,EAAE,QAAQ,SAAU;AAAA,CAAI,EAClE,OAAQ,KAAK,KACf,EAIF,OAFA,KAAK,KAAK,EACV,EAAK,KAAO,KAAK,OAAS,EAAQ,UAC3B,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,cAAgB,QAAQ,CAAC,EAAK,CACjC,GAAK,IAAa,OAAI,EAAM,CAAC,EAC7B,IAAI,EAAW,EAAI,SAAU,GAAK,IAAkB,OAAI,EAAW,GAEnE,IAAI,EAAO,KAAK,UAAU,EAC1B,KAAK,KAAK,EACV,EAAK,YAAc,CAAC,EACpB,IAAI,EAAS,KAAK,qBAAqB,CAAC,SAAU,CAAQ,CAAC,EAC3D,EAAK,OAAS,CAAC,CAAM,EACrB,MAAO,CAAC,EAAO,KAAM,CACnB,GAAI,KAAK,OAAS,EAAQ,IAAO,KAAK,MAAM,KAAK,IAAK,+BAA+B,EACrF,KAAK,OAAO,EAAQ,YAAY,EAChC,EAAK,YAAY,KAAK,KAAK,gBAAgB,CAAC,EAC5C,KAAK,OAAO,EAAQ,MAAM,EAC1B,EAAK,OAAO,KAAK,EAAS,KAAK,qBAAqB,CAAC,SAAU,CAAQ,CAAC,CAAC,EAG3E,OADA,KAAK,KAAK,EACH,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,YAAc,QAAQ,CAAC,EAAM,CAChC,MAAO,CAAC,EAAK,UAAY,EAAK,IAAI,OAAS,cAAgB,EAAK,IAAI,OAAS,UAC1E,KAAK,OAAS,EAAQ,MAAQ,KAAK,OAAS,EAAQ,KAAO,KAAK,OAAS,EAAQ,QAAU,KAAK,OAAS,EAAQ,UAAY,KAAK,KAAK,SAAY,KAAK,QAAQ,aAAe,GAAK,KAAK,OAAS,EAAQ,OAC3M,CAAC,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,WAAY,KAAK,KAAK,CAAC,GAKjE,EAAK,SAAW,QAAQ,CAAC,EAAW,EAAwB,CAC1D,IAAI,EAAO,KAAK,UAAU,EAAG,EAAQ,GAAM,EAAW,CAAC,EACvD,EAAK,WAAa,CAAC,EACnB,KAAK,KAAK,EACV,MAAO,CAAC,KAAK,IAAI,EAAQ,MAAM,EAAG,CAChC,GAAI,CAAC,GAEH,GADA,KAAK,OAAO,EAAQ,KAAK,EACrB,KAAK,QAAQ,aAAe,GAAK,KAAK,mBAAmB,EAAQ,MAAM,EAAK,MACzE,OAAQ,GAEjB,IAAI,EAAO,KAAK,cAAc,EAAW,CAAsB,EAC/D,GAAI,CAAC,EAAa,KAAK,eAAe,EAAM,EAAU,CAAsB,EAC5E,EAAK,WAAW,KAAK,CAAI,EAE3B,OAAO,KAAK,WAAW,EAAM,EAAY,gBAAkB,kBAAkB,GAG/E,EAAK,cAAgB,QAAQ,CAAC,EAAW,EAAwB,CAC/D,IAAI,EAAO,KAAK,UAAU,EAAG,EAAa,EAAS,EAAU,EAC7D,GAAI,KAAK,QAAQ,aAAe,GAAK,KAAK,IAAI,EAAQ,QAAQ,EAAG,CAC/D,GAAI,EAAW,CAEb,GADA,EAAK,SAAW,KAAK,WAAW,EAAK,EACjC,KAAK,OAAS,EAAQ,MACxB,KAAK,iBAAiB,KAAK,MAAO,+CAA+C,EAEnF,OAAO,KAAK,WAAW,EAAM,aAAa,EAK5C,GAFA,EAAK,SAAW,KAAK,iBAAiB,GAAO,CAAsB,EAE/D,KAAK,OAAS,EAAQ,OAAS,GAA0B,EAAuB,cAAgB,EAClG,EAAuB,cAAgB,KAAK,MAG9C,OAAO,KAAK,WAAW,EAAM,eAAe,EAE9C,GAAI,KAAK,QAAQ,aAAe,EAAG,CAGjC,GAFA,EAAK,OAAS,GACd,EAAK,UAAY,GACb,GAAa,EACf,EAAW,KAAK,MAChB,EAAW,KAAK,SAElB,GAAI,CAAC,EACD,EAAc,KAAK,IAAI,EAAQ,IAAI,EAEzC,IAAI,EAAc,KAAK,YAEvB,GADA,KAAK,kBAAkB,CAAI,EACvB,CAAC,GAAa,CAAC,GAAe,KAAK,QAAQ,aAAe,GAAK,CAAC,GAAe,KAAK,YAAY,CAAI,EACtG,EAAU,GACV,EAAc,KAAK,QAAQ,aAAe,GAAK,KAAK,IAAI,EAAQ,IAAI,EACpE,KAAK,kBAAkB,CAAI,EAE3B,OAAU,GAGZ,OADA,KAAK,mBAAmB,EAAM,EAAW,EAAa,EAAS,EAAU,EAAU,EAAwB,CAAW,EAC/G,KAAK,WAAW,EAAM,UAAU,GAGzC,EAAK,kBAAoB,QAAQ,CAAC,EAAM,CACtC,IAAI,EAAO,EAAK,IAAI,KACpB,KAAK,kBAAkB,CAAI,EAC3B,EAAK,MAAQ,KAAK,YAAY,EAAK,EACnC,EAAK,KAAO,EACZ,IAAI,EAAa,EAAK,OAAS,MAAQ,EAAI,EAC3C,GAAI,EAAK,MAAM,OAAO,SAAW,EAAY,CAC3C,IAAI,EAAQ,EAAK,MAAM,MACvB,GAAI,EAAK,OAAS,MACd,KAAK,iBAAiB,EAAO,8BAA8B,EAE3D,UAAK,iBAAiB,EAAO,sCAAsC,EAEvE,QAAI,EAAK,OAAS,OAAS,EAAK,MAAM,OAAO,GAAG,OAAS,cACrD,KAAK,iBAAiB,EAAK,MAAM,OAAO,GAAG,MAAO,+BAA+B,GAIzF,EAAK,mBAAqB,QAAQ,CAAC,EAAM,EAAW,EAAa,EAAS,EAAU,EAAU,EAAwB,EAAa,CACjI,IAAK,GAAe,IAAY,KAAK,OAAS,EAAQ,MAClD,KAAK,WAAW,EAEpB,GAAI,KAAK,IAAI,EAAQ,KAAK,EACxB,EAAK,MAAQ,EAAY,KAAK,kBAAkB,KAAK,MAAO,KAAK,QAAQ,EAAI,KAAK,iBAAiB,GAAO,CAAsB,EAChI,EAAK,KAAO,OACP,QAAI,KAAK,QAAQ,aAAe,GAAK,KAAK,OAAS,EAAQ,OAAQ,CACxE,GAAI,EAAa,KAAK,WAAW,EACjC,EAAK,OAAS,GACd,EAAK,MAAQ,KAAK,YAAY,EAAa,CAAO,EAClD,EAAK,KAAO,OACP,QAAI,CAAC,GAAa,CAAC,GACf,KAAK,QAAQ,aAAe,GAAK,CAAC,EAAK,UAAY,EAAK,IAAI,OAAS,eACpE,EAAK,IAAI,OAAS,OAAS,EAAK,IAAI,OAAS,SAC7C,KAAK,OAAS,EAAQ,OAAS,KAAK,OAAS,EAAQ,QAAU,KAAK,OAAS,EAAQ,IAAK,CACpG,GAAI,GAAe,EAAW,KAAK,WAAW,EAC9C,KAAK,kBAAkB,CAAI,EACtB,QAAI,KAAK,QAAQ,aAAe,GAAK,CAAC,EAAK,UAAY,EAAK,IAAI,OAAS,aAAc,CAC5F,GAAI,GAAe,EAAW,KAAK,WAAW,EAE9C,GADA,KAAK,gBAAgB,EAAK,GAAG,EACzB,EAAK,IAAI,OAAS,SAAW,CAAC,KAAK,cACnC,KAAK,cAAgB,EACzB,GAAI,EACF,EAAK,MAAQ,KAAK,kBAAkB,EAAU,EAAU,KAAK,SAAS,EAAK,GAAG,CAAC,EAC1E,QAAI,KAAK,OAAS,EAAQ,IAAM,EAAwB,CAC7D,GAAI,EAAuB,gBAAkB,EACzC,EAAuB,gBAAkB,KAAK,MAClD,EAAK,MAAQ,KAAK,kBAAkB,EAAU,EAAU,KAAK,SAAS,EAAK,GAAG,CAAC,EAE/E,OAAK,MAAQ,KAAK,SAAS,EAAK,GAAG,EAErC,EAAK,KAAO,OACZ,EAAK,UAAY,GACV,UAAK,WAAW,GAG3B,EAAK,kBAAoB,QAAQ,CAAC,EAAM,CACtC,GAAI,KAAK,QAAQ,aAAe,EAC9B,GAAI,KAAK,IAAI,EAAQ,QAAQ,EAI3B,OAHA,EAAK,SAAW,GAChB,EAAK,IAAM,KAAK,iBAAiB,EACjC,KAAK,OAAO,EAAQ,QAAQ,EACrB,EAAK,IAEZ,OAAK,SAAW,GAGpB,OAAO,EAAK,IAAM,KAAK,OAAS,EAAQ,KAAO,KAAK,OAAS,EAAQ,OAAS,KAAK,cAAc,EAAI,KAAK,WAAW,KAAK,QAAQ,gBAAkB,OAAO,GAK7J,EAAK,aAAe,QAAQ,CAAC,EAAM,CAEjC,GADA,EAAK,GAAK,KACN,KAAK,QAAQ,aAAe,EAAK,EAAK,UAAY,EAAK,WAAa,GACxE,GAAI,KAAK,QAAQ,aAAe,EAAK,EAAK,MAAQ,IAKpD,EAAK,YAAc,QAAQ,CAAC,EAAa,EAAS,EAAkB,CAClE,IAAI,EAAO,KAAK,UAAU,EAAG,EAAc,KAAK,SAAU,EAAc,KAAK,SAAU,EAAmB,KAAK,cAG/G,GADA,KAAK,aAAa,CAAI,EAClB,KAAK,QAAQ,aAAe,EAC5B,EAAK,UAAY,EACrB,GAAI,KAAK,QAAQ,aAAe,EAC5B,EAAK,MAAQ,CAAC,CAAC,EAenB,OAbA,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EACrB,KAAK,WAAW,GAAc,EAAS,EAAK,SAAS,EAAI,IAAe,EAAmB,GAAqB,EAAE,EAElH,KAAK,OAAO,EAAQ,MAAM,EAC1B,EAAK,OAAS,KAAK,iBAAiB,EAAQ,OAAQ,GAAO,KAAK,QAAQ,aAAe,CAAC,EACxF,KAAK,+BAA+B,EACpC,KAAK,kBAAkB,EAAM,GAAO,GAAM,EAAK,EAE/C,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EACd,KAAK,WAAW,EAAM,oBAAoB,GAKnD,EAAK,qBAAuB,QAAQ,CAAC,EAAM,EAAQ,EAAS,EAAS,CACnE,IAAI,EAAc,KAAK,SAAU,EAAc,KAAK,SAAU,EAAmB,KAAK,cAItF,GAFA,KAAK,WAAW,GAAc,EAAS,EAAK,EAAI,EAAW,EAC3D,KAAK,aAAa,CAAI,EAClB,KAAK,QAAQ,aAAe,EAAK,EAAK,MAAQ,CAAC,CAAC,EAYpD,OAVA,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EAErB,EAAK,OAAS,KAAK,iBAAiB,EAAQ,EAAI,EAChD,KAAK,kBAAkB,EAAM,GAAM,GAAO,CAAO,EAEjD,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,cAAgB,EACd,KAAK,WAAW,EAAM,yBAAyB,GAKxD,EAAK,kBAAoB,QAAQ,CAAC,EAAM,EAAiB,EAAU,EAAS,CAC1E,IAAI,EAAe,GAAmB,KAAK,OAAS,EAAQ,OACxD,EAAY,KAAK,OAAQ,EAAY,GAEzC,GAAI,EACF,EAAK,KAAO,KAAK,iBAAiB,CAAO,EACzC,EAAK,WAAa,GAClB,KAAK,YAAY,EAAM,EAAK,EACvB,KACL,IAAI,EAAY,KAAK,QAAQ,aAAe,GAAK,CAAC,KAAK,kBAAkB,EAAK,MAAM,EACpF,GAAI,CAAC,GAAa,GAKhB,GAJA,EAAY,KAAK,gBAAgB,KAAK,GAAG,EAIrC,GAAa,EACb,KAAK,iBAAiB,EAAK,MAAO,2EAA2E,EAInH,IAAI,EAAY,KAAK,OAErB,GADA,KAAK,OAAS,CAAC,EACX,EAAa,KAAK,OAAS,GAM/B,GAFA,KAAK,YAAY,EAAM,CAAC,GAAa,CAAC,GAAa,CAAC,GAAmB,CAAC,GAAY,KAAK,kBAAkB,EAAK,MAAM,CAAC,EAEnH,KAAK,QAAU,EAAK,GAAM,KAAK,gBAAgB,EAAK,GAAI,EAAY,EACxE,EAAK,KAAO,KAAK,WAAW,GAAO,OAAW,GAAa,CAAC,CAAS,EACrE,EAAK,WAAa,GAClB,KAAK,uBAAuB,EAAK,KAAK,IAAI,EAC1C,KAAK,OAAS,EAEhB,KAAK,UAAU,GAGjB,EAAK,kBAAoB,QAAQ,CAAC,EAAQ,CACxC,QAAS,EAAI,EAAG,EAAO,EAAQ,EAAI,EAAK,OAAQ,GAAK,EACnD,CACA,IAAI,EAAQ,EAAK,GAEjB,GAAI,EAAM,OAAS,aAAgB,MAAO,GAE5C,MAAO,IAMT,EAAK,YAAc,QAAQ,CAAC,EAAM,EAAiB,CACjD,IAAI,EAAW,OAAO,OAAO,IAAI,EACjC,QAAS,EAAI,EAAG,EAAO,EAAK,OAAQ,EAAI,EAAK,OAAQ,GAAK,EACxD,CACA,IAAI,EAAQ,EAAK,GAEjB,KAAK,sBAAsB,EAAO,GAAU,EAAkB,KAAO,CAAQ,IAUjF,EAAK,cAAgB,QAAQ,CAAC,EAAO,EAAoB,EAAY,EAAwB,CAC3F,IAAI,EAAO,CAAC,EAAG,EAAQ,GACvB,MAAO,CAAC,KAAK,IAAI,CAAK,EAAG,CACvB,GAAI,CAAC,GAEH,GADA,KAAK,OAAO,EAAQ,KAAK,EACrB,GAAsB,KAAK,mBAAmB,CAAK,EAAK,MACrD,OAAQ,GAEjB,IAAI,EAAY,OAChB,GAAI,GAAc,KAAK,OAAS,EAAQ,MACpC,EAAM,KACL,QAAI,KAAK,OAAS,EAAQ,UAE7B,GADA,EAAM,KAAK,YAAY,CAAsB,EACzC,GAA0B,KAAK,OAAS,EAAQ,OAAS,EAAuB,cAAgB,EAChG,EAAuB,cAAgB,KAAK,MAEhD,OAAM,KAAK,iBAAiB,GAAO,CAAsB,EAE3D,EAAK,KAAK,CAAG,EAEf,OAAO,GAGT,EAAK,gBAAkB,QAAQ,CAAC,EAAK,CACnC,IAAgB,MAAZ,EACU,IAAV,EACW,KAAX,GADM,EAGV,GAAI,KAAK,aAAe,IAAS,QAC7B,KAAK,iBAAiB,EAAO,qDAAqD,EACtF,GAAI,KAAK,SAAW,IAAS,QACzB,KAAK,iBAAiB,EAAO,2DAA2D,EAC5F,GAAI,EAAE,KAAK,iBAAiB,EAAE,MAAQ,KAAc,IAAS,YACzD,KAAK,iBAAiB,EAAO,mDAAmD,EACpF,GAAI,KAAK,qBAAuB,IAAS,aAAe,IAAS,SAC7D,KAAK,MAAM,EAAQ,cAAgB,EAAO,uCAAwC,EACtF,GAAI,KAAK,SAAS,KAAK,CAAI,EACvB,KAAK,MAAM,EAAQ,uBAAyB,EAAO,GAAI,EAC3D,GAAI,KAAK,QAAQ,YAAc,GAC7B,KAAK,MAAM,MAAM,EAAO,CAAG,EAAE,QAAQ,IAAI,IAAM,GAAM,OACvD,IAAI,EAAK,KAAK,OAAS,KAAK,oBAAsB,KAAK,cACvD,GAAI,EAAG,KAAK,CAAI,EAAG,CACjB,GAAI,CAAC,KAAK,SAAW,IAAS,QAC1B,KAAK,iBAAiB,EAAO,sDAAsD,EACvF,KAAK,iBAAiB,EAAQ,gBAAkB,EAAO,eAAgB,IAQ3E,EAAK,WAAa,QAAQ,CAAC,EAAS,CAClC,IAAI,EAAO,KAAK,eAAe,EAG/B,GAFA,KAAK,KAAK,CAAC,CAAC,CAAO,EACnB,KAAK,WAAW,EAAM,YAAY,EAC9B,CAAC,GAEH,GADA,KAAK,gBAAgB,CAAI,EACrB,EAAK,OAAS,SAAW,CAAC,KAAK,cAC/B,KAAK,cAAgB,EAAK,MAEhC,OAAO,GAGT,EAAK,eAAiB,QAAQ,EAAG,CAC/B,IAAI,EAAO,KAAK,UAAU,EAC1B,GAAI,KAAK,OAAS,EAAQ,KACxB,EAAK,KAAO,KAAK,MACZ,QAAI,KAAK,KAAK,QAAS,CAO5B,GANA,EAAK,KAAO,KAAK,KAAK,SAMjB,EAAK,OAAS,SAAW,EAAK,OAAS,cACzC,KAAK,aAAe,KAAK,aAAe,GAAK,KAAK,MAAM,WAAW,KAAK,YAAY,IAAM,IAC3F,KAAK,QAAQ,IAAI,EAEnB,KAAK,KAAO,EAAQ,KAEpB,UAAK,WAAW,EAElB,OAAO,GAGT,EAAK,kBAAoB,QAAQ,EAAG,CAClC,IAAI,EAAO,KAAK,UAAU,EAC1B,GAAI,KAAK,OAAS,EAAQ,UACxB,EAAK,KAAO,KAAK,MAEjB,UAAK,WAAW,EAMlB,GAJA,KAAK,KAAK,EACV,KAAK,WAAW,EAAM,mBAAmB,EAGrC,KAAK,QAAQ,mBACf,GAAI,KAAK,iBAAiB,SAAW,EACnC,KAAK,MAAM,EAAK,MAAQ,mBAAsB,EAAK,KAAQ,0CAA2C,EAEtG,UAAK,iBAAiB,KAAK,iBAAiB,OAAS,GAAG,KAAK,KAAK,CAAI,EAI1E,OAAO,GAKT,EAAK,WAAa,QAAQ,CAAC,EAAS,CAClC,GAAI,CAAC,KAAK,SAAY,KAAK,SAAW,KAAK,MAE3C,IAAI,EAAO,KAAK,UAAU,EAE1B,GADA,KAAK,KAAK,EACN,KAAK,OAAS,EAAQ,MAAQ,KAAK,mBAAmB,GAAM,KAAK,OAAS,EAAQ,MAAQ,CAAC,KAAK,KAAK,WACvG,EAAK,SAAW,GAChB,EAAK,SAAW,KAEhB,OAAK,SAAW,KAAK,IAAI,EAAQ,IAAI,EACrC,EAAK,SAAW,KAAK,iBAAiB,CAAO,EAE/C,OAAO,KAAK,WAAW,EAAM,iBAAiB,GAGhD,EAAK,WAAa,QAAQ,CAAC,EAAS,CAClC,GAAI,CAAC,KAAK,SAAY,KAAK,SAAW,KAAK,MAE3C,IAAI,EAAO,KAAK,UAAU,EAG1B,OAFA,KAAK,KAAK,EACV,EAAK,SAAW,KAAK,gBAAgB,KAAM,GAAM,GAAO,CAAO,EACxD,KAAK,WAAW,EAAM,iBAAiB,GAGhD,IAAI,GAAO,EAAO,UAQlB,GAAK,MAAQ,QAAQ,CAAC,EAAK,EAAS,CAClC,IAAI,EAAM,GAAY,KAAK,MAAO,CAAG,EAErC,GADA,GAAW,KAAO,EAAI,KAAO,IAAM,EAAI,OAAS,IAC5C,KAAK,WACP,GAAW,OAAS,KAAK,WAE3B,IAAI,EAAU,YAAY,CAAO,EAEjC,MADA,EAAI,IAAM,EAAK,EAAI,IAAM,EAAK,EAAI,SAAW,KAAK,IAC5C,GAGR,GAAK,iBAAmB,GAAK,MAE7B,GAAK,YAAc,QAAQ,EAAG,CAC5B,GAAI,KAAK,QAAQ,UACf,OAAO,IAAI,GAAS,KAAK,QAAS,KAAK,IAAM,KAAK,SAAS,GAI/D,IAAI,GAAO,EAAO,UAEd,GAAQ,QAAc,CAAC,EAAO,CAChC,KAAK,MAAQ,EAEb,KAAK,IAAM,CAAC,EAEZ,KAAK,QAAU,CAAC,EAEhB,KAAK,UAAY,CAAC,GAKpB,GAAK,WAAa,QAAQ,CAAC,EAAO,CAChC,KAAK,WAAW,KAAK,IAAI,GAAM,CAAK,CAAC,GAGvC,GAAK,UAAY,QAAQ,EAAG,CAC1B,KAAK,WAAW,IAAI,GAMtB,GAAK,2BAA6B,QAAQ,CAAC,EAAO,CAChD,OAAQ,EAAM,MAAQ,IAAmB,CAAC,KAAK,UAAa,EAAM,MAAQ,IAG5E,GAAK,YAAc,QAAQ,CAAC,EAAM,EAAa,EAAK,CAClD,IAAI,EAAa,GACjB,GAAI,IAAgB,GAAc,CAChC,IAAI,EAAQ,KAAK,aAAa,EAG9B,GAFA,EAAa,EAAM,QAAQ,QAAQ,CAAI,EAAI,IAAM,EAAM,UAAU,QAAQ,CAAI,EAAI,IAAM,EAAM,IAAI,QAAQ,CAAI,EAAI,GACjH,EAAM,QAAQ,KAAK,CAAI,EACnB,KAAK,UAAa,EAAM,MAAQ,GAChC,OAAO,KAAK,iBAAiB,GAC5B,QAAI,IAAgB,GAAmB,CAC5C,IAAI,EAAU,KAAK,aAAa,EAChC,EAAQ,QAAQ,KAAK,CAAI,EACpB,QAAI,IAAgB,GAAe,CACxC,IAAI,EAAU,KAAK,aAAa,EAChC,GAAI,KAAK,oBACL,EAAa,EAAQ,QAAQ,QAAQ,CAAI,EAAI,GAE7C,OAAa,EAAQ,QAAQ,QAAQ,CAAI,EAAI,IAAM,EAAQ,IAAI,QAAQ,CAAI,EAAI,GACnF,EAAQ,UAAU,KAAK,CAAI,EAE3B,aAAS,EAAI,KAAK,WAAW,OAAS,EAAG,GAAK,EAAG,EAAE,EAAG,CACpD,IAAI,EAAU,KAAK,WAAW,GAC9B,GAAI,EAAQ,QAAQ,QAAQ,CAAI,EAAI,IAAM,EAAG,EAAQ,MAAQ,IAAuB,EAAQ,QAAQ,KAAO,IACvG,CAAC,KAAK,2BAA2B,CAAO,GAAK,EAAQ,UAAU,QAAQ,CAAI,EAAI,GAAI,CACrF,EAAa,GACb,MAGF,GADA,EAAQ,IAAI,KAAK,CAAI,EACjB,KAAK,UAAa,EAAQ,MAAQ,GAClC,OAAO,KAAK,iBAAiB,GACjC,GAAI,EAAQ,MAAQ,GAAa,MAGrC,GAAI,EAAc,KAAK,iBAAiB,EAAM,eAAiB,EAAO,6BAA8B,GAGtG,GAAK,iBAAmB,QAAQ,CAAC,EAAI,CAEnC,GAAI,KAAK,WAAW,GAAG,QAAQ,QAAQ,EAAG,IAAI,IAAM,IAChD,KAAK,WAAW,GAAG,IAAI,QAAQ,EAAG,IAAI,IAAM,GAC9C,KAAK,iBAAiB,EAAG,MAAQ,GAIrC,GAAK,aAAe,QAAQ,EAAG,CAC7B,OAAO,KAAK,WAAW,KAAK,WAAW,OAAS,IAGlD,GAAK,gBAAkB,QAAQ,EAAG,CAChC,QAAS,EAAI,KAAK,WAAW,OAAS,GAAI,IAAK,CAC7C,IAAI,EAAQ,KAAK,WAAW,GAC5B,GAAI,EAAM,OAAS,GAAY,GAAyB,IAA6B,OAAO,IAKhG,GAAK,iBAAmB,QAAQ,EAAG,CACjC,QAAS,EAAI,KAAK,WAAW,OAAS,GAAI,IAAK,CAC7C,IAAI,EAAQ,KAAK,WAAW,GAC5B,GAAI,EAAM,OAAS,GAAY,GAAyB,KACpD,EAAE,EAAM,MAAQ,IAAgB,OAAO,IAI/C,IAAI,GAAO,QAAa,CAAC,EAAQ,EAAK,EAAK,CAIzC,GAHA,KAAK,KAAO,GACZ,KAAK,MAAQ,EACb,KAAK,IAAM,EACP,EAAO,QAAQ,UACf,KAAK,IAAM,IAAI,GAAe,EAAQ,CAAG,EAC7C,GAAI,EAAO,QAAQ,iBACf,KAAK,WAAa,EAAO,QAAQ,iBACrC,GAAI,EAAO,QAAQ,OACf,KAAK,MAAQ,CAAC,EAAK,CAAC,GAKtB,GAAO,EAAO,UAElB,GAAK,UAAY,QAAQ,EAAG,CAC1B,OAAO,IAAI,GAAK,KAAM,KAAK,MAAO,KAAK,QAAQ,GAGjD,GAAK,YAAc,QAAQ,CAAC,EAAK,EAAK,CACpC,OAAO,IAAI,GAAK,KAAM,EAAK,CAAG,GAKhC,SAAS,EAAY,CAAC,EAAM,EAAM,EAAK,EAAK,CAG1C,GAFA,EAAK,KAAO,EACZ,EAAK,IAAM,EACP,KAAK,QAAQ,UACb,EAAK,IAAI,IAAM,EACnB,GAAI,KAAK,QAAQ,OACb,EAAK,MAAM,GAAK,EACpB,OAAO,EAGT,GAAK,WAAa,QAAQ,CAAC,EAAM,EAAM,CACrC,OAAO,GAAa,KAAK,KAAM,EAAM,EAAM,KAAK,WAAY,KAAK,aAAa,GAKhF,GAAK,aAAe,QAAQ,CAAC,EAAM,EAAM,EAAK,EAAK,CACjD,OAAO,GAAa,KAAK,KAAM,EAAM,EAAM,EAAK,CAAG,GAGrD,GAAK,SAAW,QAAQ,CAAC,EAAM,CAC7B,IAAI,EAAU,IAAI,GAAK,KAAM,EAAK,MAAO,KAAK,QAAQ,EACtD,QAAS,KAAQ,EAAQ,EAAQ,GAAQ,EAAK,GAC9C,OAAO,GAIT,IAAI,GAA6B,oKAO7B,GAAwB,89BACxB,GAAyB,GAAwB,yBACjD,GAAyB,GACzB,GAAyB,GAAyB,kCAClD,GAAyB,GACzB,GAAyB,GAEzB,GAA0B,CAC5B,EAAG,GACH,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EACN,EAGI,GAAkC,gJAElC,GAAmC,CACrC,EAAG,GACH,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EACN,EAGI,GAA+B,qpBAG/B,GAAoB,i+DACpB,GAAqB,GAAoB,kHACzC,GAAqB,GAAqB,yEAC1C,GAAqB,GAAqB,yEAC1C,GAAqB,GAAqB,oEAC1C,GAAqB,GAAqB,IAAM,GAEhD,GAAsB,CACxB,EAAG,GACH,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EACN,EAEI,GAAO,CAAC,EACZ,SAAS,EAAgB,CAAC,EAAa,CACrC,IAAI,EAAI,GAAK,GAAe,CAC1B,OAAQ,GAAY,GAAwB,GAAe,IAAM,EAA4B,EAC7F,gBAAiB,GAAY,GAAiC,EAAY,EAC1E,UAAW,CACT,iBAAkB,GAAY,EAA4B,EAC1D,OAAQ,GAAY,GAAoB,EAAY,CACtD,CACF,EACA,EAAE,UAAU,kBAAoB,EAAE,UAAU,OAE5C,EAAE,UAAU,GAAK,EAAE,UAAU,iBAC7B,EAAE,UAAU,GAAK,EAAE,UAAU,OAC7B,EAAE,UAAU,IAAM,EAAE,UAAU,kBAGhC,IAAS,GAAI,EAAG,GAAO,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAAG,GAAI,GAAK,OAAQ,IAAK,EAChE,GAAc,GAAK,IAEvB,GAAiB,EAAW,EAFxB,OADG,GAAO,GAMZ,EAAO,EAAO,UAId,GAAW,QAAiB,CAAC,EAAQ,EAAM,CAE7C,KAAK,OAAS,EAEd,KAAK,KAAO,GAAQ,MAGtB,GAAS,UAAU,cAAgB,QAAuB,CAAC,EAAK,CAG9D,QAAS,EAAO,KAAM,EAAM,EAAO,EAAK,OACtC,QAAS,EAAQ,EAAK,EAAO,EAAQ,EAAM,OACzC,GAAI,EAAK,OAAS,EAAM,MAAQ,IAAS,EAAS,MAAO,GAG7D,MAAO,IAGT,GAAS,UAAU,QAAU,QAAiB,EAAG,CAC/C,OAAO,IAAI,GAAS,KAAK,OAAQ,KAAK,IAAI,GAG5C,IAAI,GAAwB,QAA8B,CAAC,EAAQ,CACjE,KAAK,OAAS,EACd,KAAK,WAAa,OAAS,EAAO,QAAQ,aAAe,EAAI,KAAO,KAAO,EAAO,QAAQ,aAAe,EAAI,IAAM,KAAO,EAAO,QAAQ,aAAe,GAAK,IAAM,KAAO,EAAO,QAAQ,aAAe,GAAK,IAAM,IACnN,KAAK,kBAAoB,GAAK,EAAO,QAAQ,aAAe,GAAK,GAAK,EAAO,QAAQ,aACrF,KAAK,OAAS,GACd,KAAK,MAAQ,GACb,KAAK,MAAQ,EACb,KAAK,QAAU,GACf,KAAK,QAAU,GACf,KAAK,QAAU,GACf,KAAK,IAAM,EACX,KAAK,aAAe,EACpB,KAAK,gBAAkB,GACvB,KAAK,4BAA8B,GACnC,KAAK,mBAAqB,EAC1B,KAAK,iBAAmB,EACxB,KAAK,WAAa,OAAO,OAAO,IAAI,EACpC,KAAK,mBAAqB,CAAC,EAC3B,KAAK,SAAW,MAGlB,GAAsB,UAAU,MAAQ,QAAe,CAAC,EAAO,EAAS,EAAO,CAC7E,IAAI,EAAc,EAAM,QAAQ,GAAG,IAAM,GACrC,EAAU,EAAM,QAAQ,GAAG,IAAM,GAIrC,GAHA,KAAK,MAAQ,EAAQ,EACrB,KAAK,OAAS,EAAU,GACxB,KAAK,MAAQ,EACT,GAAe,KAAK,OAAO,QAAQ,aAAe,GACpD,KAAK,QAAU,GACf,KAAK,QAAU,GACf,KAAK,QAAU,GAEf,UAAK,QAAU,GAAW,KAAK,OAAO,QAAQ,aAAe,EAC7D,KAAK,QAAU,GACf,KAAK,QAAU,GAAW,KAAK,OAAO,QAAQ,aAAe,GAIjE,GAAsB,UAAU,MAAQ,QAAe,CAAC,EAAS,CAC/D,KAAK,OAAO,iBAAiB,KAAK,MAAQ,gCAAmC,KAAK,OAAU,MAAQ,CAAQ,GAK9G,GAAsB,UAAU,GAAK,QAAY,CAAC,EAAG,EAAQ,CACzD,GAAK,IAAgB,OAAI,EAAS,GAEpC,IAAI,EAAI,KAAK,OACT,EAAI,EAAE,OACV,GAAI,GAAK,EACP,MAAO,GAET,IAAI,EAAI,EAAE,WAAW,CAAC,EACtB,GAAI,EAAE,GAAU,KAAK,UAAY,GAAK,OAAU,GAAK,OAAU,EAAI,GAAK,EACtE,OAAO,EAET,IAAI,EAAO,EAAE,WAAW,EAAI,CAAC,EAC7B,OAAO,GAAQ,OAAU,GAAQ,OAAU,GAAK,IAAM,EAAO,SAAY,GAG3E,GAAsB,UAAU,UAAY,QAAmB,CAAC,EAAG,EAAQ,CACvE,GAAK,IAAgB,OAAI,EAAS,GAEpC,IAAI,EAAI,KAAK,OACT,EAAI,EAAE,OACV,GAAI,GAAK,EACP,OAAO,EAET,IAAI,EAAI,EAAE,WAAW,CAAC,EAAG,EACzB,GAAI,EAAE,GAAU,KAAK,UAAY,GAAK,OAAU,GAAK,OAAU,EAAI,GAAK,IACnE,EAAO,EAAE,WAAW,EAAI,CAAC,GAAK,OAAU,EAAO,MAClD,OAAO,EAAI,EAEb,OAAO,EAAI,GAGb,GAAsB,UAAU,QAAU,QAAiB,CAAC,EAAQ,CAChE,GAAK,IAAgB,OAAI,EAAS,GAEpC,OAAO,KAAK,GAAG,KAAK,IAAK,CAAM,GAGjC,GAAsB,UAAU,UAAY,QAAmB,CAAC,EAAQ,CACpE,GAAK,IAAgB,OAAI,EAAS,GAEpC,OAAO,KAAK,GAAG,KAAK,UAAU,KAAK,IAAK,CAAM,EAAG,CAAM,GAGzD,GAAsB,UAAU,QAAU,QAAiB,CAAC,EAAQ,CAChE,GAAK,IAAgB,OAAI,EAAS,GAEpC,KAAK,IAAM,KAAK,UAAU,KAAK,IAAK,CAAM,GAG5C,GAAsB,UAAU,IAAM,QAAa,CAAC,EAAI,EAAQ,CAC5D,GAAK,IAAgB,OAAI,EAAS,GAEpC,GAAI,KAAK,QAAQ,CAAM,IAAM,EAE3B,OADA,KAAK,QAAQ,CAAM,EACZ,GAET,MAAO,IAGT,GAAsB,UAAU,SAAW,QAAkB,CAAC,EAAK,EAAQ,CACvE,GAAK,IAAgB,OAAI,EAAS,GAEpC,IAAI,EAAM,KAAK,IACf,QAAS,EAAI,EAAG,EAAO,EAAK,EAAI,EAAK,OAAQ,GAAK,EAAG,CACnD,IAAI,EAAK,EAAK,GAER,EAAU,KAAK,GAAG,EAAK,CAAM,EACnC,GAAI,IAAY,IAAM,IAAY,EAChC,MAAO,GAET,EAAM,KAAK,UAAU,EAAK,CAAM,EAGlC,OADA,KAAK,IAAM,EACJ,IAST,EAAK,oBAAsB,QAAQ,CAAC,EAAO,CACzC,IAAuB,WAAnB,EACc,MAAd,GAAQ,EAER,EAAI,GACJ,EAAI,GAER,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAI,EAAO,EAAM,OAAO,CAAC,EACzB,GAAI,EAAW,QAAQ,CAAI,IAAM,GAC/B,KAAK,MAAM,EAAM,MAAO,iCAAiC,EAE3D,GAAI,EAAM,QAAQ,EAAM,EAAI,CAAC,EAAI,GAC/B,KAAK,MAAM,EAAM,MAAO,mCAAmC,EAE7D,GAAI,IAAS,IAAO,EAAI,GACxB,GAAI,IAAS,IAAO,EAAI,GAE1B,GAAI,KAAK,QAAQ,aAAe,IAAM,GAAK,EACzC,KAAK,MAAM,EAAM,MAAO,iCAAiC,GAI7D,SAAS,EAAO,CAAC,EAAK,CACpB,QAAS,KAAK,EAAO,MAAO,GAC5B,MAAO,GAST,EAAK,sBAAwB,QAAQ,CAAC,EAAO,CAQ3C,GAPA,KAAK,eAAe,CAAK,EAOrB,CAAC,EAAM,SAAW,KAAK,QAAQ,aAAe,GAAK,GAAQ,EAAM,UAAU,EAC7E,EAAM,QAAU,GAChB,KAAK,eAAe,CAAK,GAK7B,EAAK,eAAiB,QAAQ,CAAC,EAAO,CAapC,GAZA,EAAM,IAAM,EACZ,EAAM,aAAe,EACrB,EAAM,gBAAkB,GACxB,EAAM,4BAA8B,GACpC,EAAM,mBAAqB,EAC3B,EAAM,iBAAmB,EACzB,EAAM,WAAa,OAAO,OAAO,IAAI,EACrC,EAAM,mBAAmB,OAAS,EAClC,EAAM,SAAW,KAEjB,KAAK,mBAAmB,CAAK,EAEzB,EAAM,MAAQ,EAAM,OAAO,OAAQ,CAErC,GAAI,EAAM,IAAI,EAAY,EACxB,EAAM,MAAM,eAAe,EAE7B,GAAI,EAAM,IAAI,EAAY,GAAK,EAAM,IAAI,GAAY,EACnD,EAAM,MAAM,0BAA0B,EAG1C,GAAI,EAAM,iBAAmB,EAAM,mBACjC,EAAM,MAAM,gBAAgB,EAE9B,QAAS,EAAI,EAAG,EAAO,EAAM,mBAAoB,EAAI,EAAK,OAAQ,GAAK,EAAG,CACxE,IAAI,EAAO,EAAK,GAEhB,GAAI,CAAC,EAAM,WAAW,GACpB,EAAM,MAAM,kCAAkC,IAMpD,EAAK,mBAAqB,QAAQ,CAAC,EAAO,CACxC,IAAI,EAAmB,KAAK,QAAQ,aAAe,GACnD,GAAI,EAAoB,EAAM,SAAW,IAAI,GAAS,EAAM,SAAU,IAAI,EAC1E,KAAK,mBAAmB,CAAK,EAC7B,MAAO,EAAM,IAAI,GAAY,EAAG,CAC9B,GAAI,EAAoB,EAAM,SAAW,EAAM,SAAS,QAAQ,EAChE,KAAK,mBAAmB,CAAK,EAE/B,GAAI,EAAoB,EAAM,SAAW,EAAM,SAAS,OAGxD,GAAI,KAAK,qBAAqB,EAAO,EAAI,EACvC,EAAM,MAAM,mBAAmB,EAEjC,GAAI,EAAM,IAAI,GAAY,EACxB,EAAM,MAAM,0BAA0B,GAK1C,EAAK,mBAAqB,QAAQ,CAAC,EAAO,CACxC,MAAO,EAAM,IAAM,EAAM,OAAO,QAAU,KAAK,eAAe,CAAK,EAAG,GAIxE,EAAK,eAAiB,QAAQ,CAAC,EAAO,CACpC,GAAI,KAAK,oBAAoB,CAAK,EAAG,CAInC,GAAI,EAAM,6BAA+B,KAAK,qBAAqB,CAAK,GAEtE,GAAI,EAAM,QACR,EAAM,MAAM,oBAAoB,EAGpC,MAAO,GAGT,GAAI,EAAM,QAAU,KAAK,eAAe,CAAK,EAAI,KAAK,uBAAuB,CAAK,EAEhF,OADA,KAAK,qBAAqB,CAAK,EACxB,GAGT,MAAO,IAIT,EAAK,oBAAsB,QAAQ,CAAC,EAAO,CACzC,IAAI,EAAQ,EAAM,IAIlB,GAHA,EAAM,4BAA8B,GAGhC,EAAM,IAAI,EAAY,GAAK,EAAM,IAAI,EAAY,EACnD,MAAO,GAIT,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,EAAM,IAAI,EAAY,GAAK,EAAM,IAAI,EAAY,EACnD,MAAO,GAET,EAAM,IAAM,EAId,GAAI,EAAM,IAAI,EAAY,GAAK,EAAM,IAAI,EAAY,EAAG,CACtD,IAAI,EAAa,GACjB,GAAI,KAAK,QAAQ,aAAe,EAC9B,EAAa,EAAM,IAAI,EAAY,EAErC,GAAI,EAAM,IAAI,EAAY,GAAK,EAAM,IAAI,EAAY,EAAG,CAEtD,GADA,KAAK,mBAAmB,CAAK,EACzB,CAAC,EAAM,IAAI,EAAY,EACzB,EAAM,MAAM,oBAAoB,EAGlC,OADA,EAAM,4BAA8B,CAAC,EAC9B,IAKX,OADA,EAAM,IAAM,EACL,IAIT,EAAK,qBAAuB,QAAQ,CAAC,EAAO,EAAS,CACnD,GAAK,IAAiB,OAAI,EAAU,GAEpC,GAAI,KAAK,2BAA2B,EAAO,CAAO,EAEhD,OADA,EAAM,IAAI,EAAY,EACf,GAET,MAAO,IAIT,EAAK,2BAA6B,QAAQ,CAAC,EAAO,EAAS,CACzD,OACE,EAAM,IAAI,EAAY,GACtB,EAAM,IAAI,EAAY,GACtB,EAAM,IAAI,EAAY,GACtB,KAAK,2BAA2B,EAAO,CAAO,GAGlD,EAAK,2BAA6B,QAAQ,CAAC,EAAO,EAAS,CACzD,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,IAAI,GAAY,EAAG,CAC3B,IAAI,EAAM,EAAG,EAAM,GACnB,GAAI,KAAK,wBAAwB,CAAK,EAAG,CAEvC,GADA,EAAM,EAAM,aACR,EAAM,IAAI,EAAY,GAAK,KAAK,wBAAwB,CAAK,EAC/D,EAAM,EAAM,aAEd,GAAI,EAAM,IAAI,GAAY,EAAG,CAE3B,GAAI,IAAQ,IAAM,EAAM,GAAO,CAAC,EAC9B,EAAM,MAAM,uCAAuC,EAErD,MAAO,IAGX,GAAI,EAAM,SAAW,CAAC,EACpB,EAAM,MAAM,uBAAuB,EAErC,EAAM,IAAM,EAEd,MAAO,IAIT,EAAK,eAAiB,QAAQ,CAAC,EAAO,CACpC,OACE,KAAK,4BAA4B,CAAK,GACtC,EAAM,IAAI,EAAY,GACtB,KAAK,mCAAmC,CAAK,GAC7C,KAAK,yBAAyB,CAAK,GACnC,KAAK,2BAA2B,CAAK,GACrC,KAAK,yBAAyB,CAAK,GAGvC,EAAK,mCAAqC,QAAQ,CAAC,EAAO,CACxD,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,KAAK,qBAAqB,CAAK,EACjC,MAAO,GAET,EAAM,IAAM,EAEd,MAAO,IAET,EAAK,2BAA6B,QAAQ,CAAC,EAAO,CAChD,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,KAAK,QAAQ,aAAe,GAAI,CAClC,IAAI,EAAe,KAAK,oBAAoB,CAAK,EAC7C,EAAY,EAAM,IAAI,EAAY,EACtC,GAAI,GAAgB,EAAW,CAC7B,QAAS,EAAI,EAAG,EAAI,EAAa,OAAQ,IAAK,CAC5C,IAAI,EAAW,EAAa,OAAO,CAAC,EACpC,GAAI,EAAa,QAAQ,EAAU,EAAI,CAAC,EAAI,GAC1C,EAAM,MAAM,wCAAwC,EAGxD,GAAI,EAAW,CACb,IAAI,EAAkB,KAAK,oBAAoB,CAAK,EACpD,GAAI,CAAC,GAAgB,CAAC,GAAmB,EAAM,QAAQ,IAAM,GAC3D,EAAM,MAAM,sCAAsC,EAEpD,QAAS,EAAM,EAAG,EAAM,EAAgB,OAAQ,IAAO,CACrD,IAAI,EAAa,EAAgB,OAAO,CAAG,EAC3C,GACE,EAAgB,QAAQ,EAAY,EAAM,CAAC,EAAI,IAC/C,EAAa,QAAQ,CAAU,EAAI,GAEnC,EAAM,MAAM,wCAAwC,KAM9D,GAAI,EAAM,IAAI,EAAY,EAAG,CAE3B,GADA,KAAK,mBAAmB,CAAK,EACzB,EAAM,IAAI,EAAY,EACxB,MAAO,GAET,EAAM,MAAM,oBAAoB,GAGpC,EAAM,IAAM,EAEd,MAAO,IAET,EAAK,yBAA2B,QAAQ,CAAC,EAAO,CAC9C,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,KAAK,QAAQ,aAAe,EAC9B,KAAK,sBAAsB,CAAK,EAC3B,QAAI,EAAM,QAAQ,IAAM,GAC7B,EAAM,MAAM,eAAe,EAG7B,GADA,KAAK,mBAAmB,CAAK,EACzB,EAAM,IAAI,EAAY,EAExB,OADA,EAAM,oBAAsB,EACrB,GAET,EAAM,MAAM,oBAAoB,EAElC,MAAO,IAKT,EAAK,oBAAsB,QAAQ,CAAC,EAAO,CACzC,IAAI,EAAY,GACZ,EAAK,EACT,OAAQ,EAAK,EAAM,QAAQ,KAAO,IAAM,GAA4B,CAAE,EACpE,GAAa,GAAkB,CAAE,EACjC,EAAM,QAAQ,EAEhB,OAAO,GAIT,SAAS,EAA2B,CAAC,EAAI,CACvC,OAAO,IAAO,KAAgB,IAAO,KAAgB,IAAO,IAI9D,EAAK,uBAAyB,QAAQ,CAAC,EAAO,CAC5C,OACE,EAAM,IAAI,EAAY,GACtB,KAAK,mCAAmC,CAAK,GAC7C,KAAK,yBAAyB,CAAK,GACnC,KAAK,2BAA2B,CAAK,GACrC,KAAK,yBAAyB,CAAK,GACnC,KAAK,kCAAkC,CAAK,GAC5C,KAAK,mCAAmC,CAAK,GAKjD,EAAK,kCAAoC,QAAQ,CAAC,EAAO,CACvD,GAAI,KAAK,2BAA2B,EAAO,EAAI,EAC7C,EAAM,MAAM,mBAAmB,EAEjC,MAAO,IAIT,EAAK,0BAA4B,QAAQ,CAAC,EAAO,CAC/C,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,GAAkB,CAAE,EAGtB,OAFA,EAAM,aAAe,EACrB,EAAM,QAAQ,EACP,GAET,MAAO,IAET,SAAS,EAAiB,CAAC,EAAI,CAC7B,OACE,IAAO,IACP,GAAM,IAAgB,GAAM,IAC5B,IAAO,IACP,IAAO,IACP,GAAM,IAAgB,GAAM,IAC5B,GAAM,KAAgB,GAAM,IAMhC,EAAK,4BAA8B,QAAQ,CAAC,EAAO,CACjD,IAAI,EAAQ,EAAM,IACd,EAAK,EACT,OAAQ,EAAK,EAAM,QAAQ,KAAO,IAAM,CAAC,GAAkB,CAAE,EAC3D,EAAM,QAAQ,EAEhB,OAAO,EAAM,MAAQ,GAIvB,EAAK,mCAAqC,QAAQ,CAAC,EAAO,CACxD,IAAI,EAAK,EAAM,QAAQ,EACvB,GACE,IAAO,IACP,IAAO,IACP,EAAE,GAAM,IAAgB,GAAM,KAC9B,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IAGP,OADA,EAAM,QAAQ,EACP,GAET,MAAO,IAMT,EAAK,sBAAwB,QAAQ,CAAC,EAAO,CAC3C,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,CAAC,KAAK,oBAAoB,CAAK,EAAK,EAAM,MAAM,eAAe,EACnE,IAAI,EAAmB,KAAK,QAAQ,aAAe,GAC/C,EAAQ,EAAM,WAAW,EAAM,iBACnC,GAAI,EACF,GAAI,EACF,QAAS,EAAI,EAAG,EAAO,EAAO,EAAI,EAAK,OAAQ,GAAK,EAAG,CACrD,IAAI,EAAQ,EAAK,GAEjB,GAAI,CAAC,EAAM,cAAc,EAAM,QAAQ,EACnC,EAAM,MAAM,8BAA8B,EAGhD,OAAM,MAAM,8BAA8B,EAG9C,GAAI,GACD,IAAU,EAAM,WAAW,EAAM,iBAAmB,CAAC,IAAI,KAAK,EAAM,QAAQ,EAE7E,OAAM,WAAW,EAAM,iBAAmB,KAQhD,EAAK,oBAAsB,QAAQ,CAAC,EAAO,CAEzC,GADA,EAAM,gBAAkB,GACpB,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,KAAK,+BAA+B,CAAK,GAAK,EAAM,IAAI,EAAY,EACtE,MAAO,GAET,EAAM,MAAM,4BAA4B,EAE1C,MAAO,IAOT,EAAK,+BAAiC,QAAQ,CAAC,EAAO,CAEpD,GADA,EAAM,gBAAkB,GACpB,KAAK,gCAAgC,CAAK,EAAG,CAC/C,EAAM,iBAAmB,GAAkB,EAAM,YAAY,EAC7D,MAAO,KAAK,+BAA+B,CAAK,EAC9C,EAAM,iBAAmB,GAAkB,EAAM,YAAY,EAE/D,MAAO,GAET,MAAO,IAQT,EAAK,gCAAkC,QAAQ,CAAC,EAAO,CACrD,IAAI,EAAQ,EAAM,IACd,EAAS,KAAK,QAAQ,aAAe,GACrC,EAAK,EAAM,QAAQ,CAAM,EAG7B,GAFA,EAAM,QAAQ,CAAM,EAEhB,IAAO,IAAgB,KAAK,sCAAsC,EAAO,CAAM,EACjF,EAAK,EAAM,aAEb,GAAI,GAAwB,CAAE,EAE5B,OADA,EAAM,aAAe,EACd,GAIT,OADA,EAAM,IAAM,EACL,IAET,SAAS,EAAuB,CAAC,EAAI,CACnC,OAAO,GAAkB,EAAI,EAAI,GAAK,IAAO,IAAgB,IAAO,GAUtE,EAAK,+BAAiC,QAAQ,CAAC,EAAO,CACpD,IAAI,EAAQ,EAAM,IACd,EAAS,KAAK,QAAQ,aAAe,GACrC,EAAK,EAAM,QAAQ,CAAM,EAG7B,GAFA,EAAM,QAAQ,CAAM,EAEhB,IAAO,IAAgB,KAAK,sCAAsC,EAAO,CAAM,EACjF,EAAK,EAAM,aAEb,GAAI,GAAuB,CAAE,EAE3B,OADA,EAAM,aAAe,EACd,GAIT,OADA,EAAM,IAAM,EACL,IAET,SAAS,EAAsB,CAAC,EAAI,CAClC,OAAO,GAAiB,EAAI,EAAI,GAAK,IAAO,IAAgB,IAAO,IAAgB,IAAO,MAAuB,IAAO,KAI1H,EAAK,qBAAuB,QAAQ,CAAC,EAAO,CAC1C,GACE,KAAK,wBAAwB,CAAK,GAClC,KAAK,+BAA+B,CAAK,GACzC,KAAK,0BAA0B,CAAK,GACnC,EAAM,SAAW,KAAK,qBAAqB,CAAK,EAEjD,MAAO,GAET,GAAI,EAAM,QAAS,CAEjB,GAAI,EAAM,QAAQ,IAAM,GACtB,EAAM,MAAM,wBAAwB,EAEtC,EAAM,MAAM,gBAAgB,EAE9B,MAAO,IAET,EAAK,wBAA0B,QAAQ,CAAC,EAAO,CAC7C,IAAI,EAAQ,EAAM,IAClB,GAAI,KAAK,wBAAwB,CAAK,EAAG,CACvC,IAAI,EAAI,EAAM,aACd,GAAI,EAAM,QAAS,CAEjB,GAAI,EAAI,EAAM,iBACZ,EAAM,iBAAmB,EAE3B,MAAO,GAET,GAAI,GAAK,EAAM,mBACb,MAAO,GAET,EAAM,IAAM,EAEd,MAAO,IAET,EAAK,qBAAuB,QAAQ,CAAC,EAAO,CAC1C,GAAI,EAAM,IAAI,GAAY,EAAG,CAC3B,GAAI,KAAK,oBAAoB,CAAK,EAEhC,OADA,EAAM,mBAAmB,KAAK,EAAM,eAAe,EAC5C,GAET,EAAM,MAAM,yBAAyB,EAEvC,MAAO,IAIT,EAAK,0BAA4B,QAAQ,CAAC,EAAO,CAC/C,OACE,KAAK,wBAAwB,CAAK,GAClC,KAAK,yBAAyB,CAAK,GACnC,KAAK,eAAe,CAAK,GACzB,KAAK,4BAA4B,CAAK,GACtC,KAAK,sCAAsC,EAAO,EAAK,GACtD,CAAC,EAAM,SAAW,KAAK,oCAAoC,CAAK,GACjE,KAAK,yBAAyB,CAAK,GAGvC,EAAK,yBAA2B,QAAQ,CAAC,EAAO,CAC9C,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,KAAK,wBAAwB,CAAK,EACpC,MAAO,GAET,EAAM,IAAM,EAEd,MAAO,IAET,EAAK,eAAiB,QAAQ,CAAC,EAAO,CACpC,GAAI,EAAM,QAAQ,IAAM,IAAgB,CAAC,GAAe,EAAM,UAAU,CAAC,EAGvE,OAFA,EAAM,aAAe,EACrB,EAAM,QAAQ,EACP,GAET,MAAO,IAIT,EAAK,wBAA0B,QAAQ,CAAC,EAAO,CAC7C,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,IAAO,IAGT,OAFA,EAAM,aAAe,EACrB,EAAM,QAAQ,EACP,GAET,GAAI,IAAO,IAGT,OAFA,EAAM,aAAe,GACrB,EAAM,QAAQ,EACP,GAET,GAAI,IAAO,IAGT,OAFA,EAAM,aAAe,GACrB,EAAM,QAAQ,EACP,GAET,GAAI,IAAO,IAGT,OAFA,EAAM,aAAe,GACrB,EAAM,QAAQ,EACP,GAET,GAAI,IAAO,IAGT,OAFA,EAAM,aAAe,GACrB,EAAM,QAAQ,EACP,GAET,MAAO,IAIT,EAAK,wBAA0B,QAAQ,CAAC,EAAO,CAC7C,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,GAAgB,CAAE,EAGpB,OAFA,EAAM,aAAe,EAAK,GAC1B,EAAM,QAAQ,EACP,GAET,MAAO,IAET,SAAS,EAAe,CAAC,EAAI,CAC3B,OACG,GAAM,IAAgB,GAAM,IAC5B,GAAM,IAAgB,GAAM,IAKjC,EAAK,sCAAwC,QAAQ,CAAC,EAAO,EAAQ,CACnE,GAAK,IAAgB,OAAI,EAAS,GAElC,IAAI,EAAQ,EAAM,IACd,EAAU,GAAU,EAAM,QAE9B,GAAI,EAAM,IAAI,GAAY,EAAG,CAC3B,GAAI,KAAK,yBAAyB,EAAO,CAAC,EAAG,CAC3C,IAAI,EAAO,EAAM,aACjB,GAAI,GAAW,GAAQ,OAAU,GAAQ,MAAQ,CAC/C,IAAI,EAAmB,EAAM,IAC7B,GAAI,EAAM,IAAI,EAAY,GAAK,EAAM,IAAI,GAAY,GAAK,KAAK,yBAAyB,EAAO,CAAC,EAAG,CACjG,IAAI,EAAQ,EAAM,aAClB,GAAI,GAAS,OAAU,GAAS,MAE9B,OADA,EAAM,cAAgB,EAAO,OAAU,MAAS,EAAQ,OAAU,MAC3D,GAGX,EAAM,IAAM,EACZ,EAAM,aAAe,EAEvB,MAAO,GAET,GACE,GACA,EAAM,IAAI,GAAY,GACtB,KAAK,oBAAoB,CAAK,GAC9B,EAAM,IAAI,GAAY,GACtB,GAAe,EAAM,YAAY,EAEjC,MAAO,GAET,GAAI,EACF,EAAM,MAAM,wBAAwB,EAEtC,EAAM,IAAM,EAGd,MAAO,IAET,SAAS,EAAc,CAAC,EAAI,CAC1B,OAAO,GAAM,GAAK,GAAM,QAI1B,EAAK,yBAA2B,QAAQ,CAAC,EAAO,CAC9C,GAAI,EAAM,QAAS,CACjB,GAAI,KAAK,0BAA0B,CAAK,EACtC,MAAO,GAET,GAAI,EAAM,IAAI,EAAY,EAExB,OADA,EAAM,aAAe,GACd,GAET,MAAO,GAGT,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,IAAO,KAAiB,CAAC,EAAM,SAAW,IAAO,KAGnD,OAFA,EAAM,aAAe,EACrB,EAAM,QAAQ,EACP,GAGT,MAAO,IAIT,EAAK,wBAA0B,QAAQ,CAAC,EAAO,CAC7C,EAAM,aAAe,EACrB,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,GAAM,IAAgB,GAAM,GAAc,CAC5C,GACE,EAAM,aAAe,GAAK,EAAM,cAAgB,EAAK,IACrD,EAAM,QAAQ,SACN,EAAK,EAAM,QAAQ,IAAM,IAAgB,GAAM,IACzD,MAAO,GAET,MAAO,IAKT,IAAI,GAAc,EACd,GAAY,EACZ,GAAgB,EAGpB,EAAK,+BAAiC,QAAQ,CAAC,EAAO,CACpD,IAAI,EAAK,EAAM,QAAQ,EAEvB,GAAI,GAAuB,CAAE,EAG3B,OAFA,EAAM,aAAe,GACrB,EAAM,QAAQ,EACP,GAGT,IAAI,EAAS,GACb,GACE,EAAM,SACN,KAAK,QAAQ,aAAe,KAC1B,EAAS,IAAO,KAAiB,IAAO,KAC1C,CACA,EAAM,aAAe,GACrB,EAAM,QAAQ,EACd,IAAI,EACJ,GACE,EAAM,IAAI,GAAY,IACrB,EAAS,KAAK,yCAAyC,CAAK,IAC7D,EAAM,IAAI,GAAY,EACtB,CACA,GAAI,GAAU,IAAW,GAAiB,EAAM,MAAM,uBAAuB,EAC7E,OAAO,EAET,EAAM,MAAM,uBAAuB,EAGrC,OAAO,IAGT,SAAS,EAAsB,CAAC,EAAI,CAClC,OACE,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,GAOX,EAAK,yCAA2C,QAAQ,CAAC,EAAO,CAC9D,IAAI,EAAQ,EAAM,IAGlB,GAAI,KAAK,8BAA8B,CAAK,GAAK,EAAM,IAAI,EAAY,EAAG,CACxE,IAAI,EAAO,EAAM,gBACjB,GAAI,KAAK,+BAA+B,CAAK,EAAG,CAC9C,IAAI,EAAQ,EAAM,gBAElB,OADA,KAAK,2CAA2C,EAAO,EAAM,CAAK,EAC3D,IAMX,GAHA,EAAM,IAAM,EAGR,KAAK,yCAAyC,CAAK,EAAG,CACxD,IAAI,EAAc,EAAM,gBACxB,OAAO,KAAK,0CAA0C,EAAO,CAAW,EAE1E,OAAO,IAGT,EAAK,2CAA6C,QAAQ,CAAC,EAAO,EAAM,EAAO,CAC7E,GAAI,CAAC,GAAO,EAAM,kBAAkB,UAAW,CAAI,EAC/C,EAAM,MAAM,uBAAuB,EACvC,GAAI,CAAC,EAAM,kBAAkB,UAAU,GAAM,KAAK,CAAK,EACnD,EAAM,MAAM,wBAAwB,GAG1C,EAAK,0CAA4C,QAAQ,CAAC,EAAO,EAAa,CAC5E,GAAI,EAAM,kBAAkB,OAAO,KAAK,CAAW,EAAK,OAAO,GAC/D,GAAI,EAAM,SAAW,EAAM,kBAAkB,gBAAgB,KAAK,CAAW,EAAK,OAAO,GACzF,EAAM,MAAM,uBAAuB,GAKrC,EAAK,8BAAgC,QAAQ,CAAC,EAAO,CACnD,IAAI,EAAK,EACT,EAAM,gBAAkB,GACxB,MAAO,GAA+B,EAAK,EAAM,QAAQ,CAAC,EACxD,EAAM,iBAAmB,GAAkB,CAAE,EAC7C,EAAM,QAAQ,EAEhB,OAAO,EAAM,kBAAoB,IAGnC,SAAS,EAA8B,CAAC,EAAI,CAC1C,OAAO,GAAgB,CAAE,GAAK,IAAO,GAKvC,EAAK,+BAAiC,QAAQ,CAAC,EAAO,CACpD,IAAI,EAAK,EACT,EAAM,gBAAkB,GACxB,MAAO,GAAgC,EAAK,EAAM,QAAQ,CAAC,EACzD,EAAM,iBAAmB,GAAkB,CAAE,EAC7C,EAAM,QAAQ,EAEhB,OAAO,EAAM,kBAAoB,IAEnC,SAAS,EAA+B,CAAC,EAAI,CAC3C,OAAO,GAA+B,CAAE,GAAK,GAAe,CAAE,EAKhE,EAAK,yCAA2C,QAAQ,CAAC,EAAO,CAC9D,OAAO,KAAK,+BAA+B,CAAK,GAIlD,EAAK,yBAA2B,QAAQ,CAAC,EAAO,CAC9C,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,IAAI,EAAS,EAAM,IAAI,EAAY,EAC/B,EAAS,KAAK,qBAAqB,CAAK,EAC5C,GAAI,CAAC,EAAM,IAAI,EAAY,EACvB,EAAM,MAAM,8BAA8B,EAC9C,GAAI,GAAU,IAAW,GACrB,EAAM,MAAM,6CAA6C,EAC7D,MAAO,GAET,MAAO,IAKT,EAAK,qBAAuB,QAAQ,CAAC,EAAO,CAC1C,GAAI,EAAM,QAAQ,IAAM,GAAgB,OAAO,GAC/C,GAAI,EAAM,QAAW,OAAO,KAAK,0BAA0B,CAAK,EAEhE,OADA,KAAK,2BAA2B,CAAK,EAC9B,IAKT,EAAK,2BAA6B,QAAQ,CAAC,EAAO,CAChD,MAAO,KAAK,oBAAoB,CAAK,EAAG,CACtC,IAAI,EAAO,EAAM,aACjB,GAAI,EAAM,IAAI,EAAY,GAAK,KAAK,oBAAoB,CAAK,EAAG,CAC9D,IAAI,EAAQ,EAAM,aAClB,GAAI,EAAM,UAAY,IAAS,IAAM,IAAU,IAC7C,EAAM,MAAM,yBAAyB,EAEvC,GAAI,IAAS,IAAM,IAAU,IAAM,EAAO,EACxC,EAAM,MAAM,uCAAuC,KAQ3D,EAAK,oBAAsB,QAAQ,CAAC,EAAO,CACzC,IAAI,EAAQ,EAAM,IAElB,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,KAAK,sBAAsB,CAAK,EAClC,MAAO,GAET,GAAI,EAAM,QAAS,CAEjB,IAAI,EAAO,EAAM,QAAQ,EACzB,GAAI,IAAS,IAAgB,GAAa,CAAI,EAC5C,EAAM,MAAM,sBAAsB,EAEpC,EAAM,MAAM,gBAAgB,EAE9B,EAAM,IAAM,EAGd,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,IAAO,GAGT,OAFA,EAAM,aAAe,EACrB,EAAM,QAAQ,EACP,GAGT,MAAO,IAIT,EAAK,sBAAwB,QAAQ,CAAC,EAAO,CAC3C,IAAI,EAAQ,EAAM,IAElB,GAAI,EAAM,IAAI,EAAY,EAExB,OADA,EAAM,aAAe,EACd,GAGT,GAAI,EAAM,SAAW,EAAM,IAAI,EAAY,EAEzC,OADA,EAAM,aAAe,GACd,GAGT,GAAI,CAAC,EAAM,SAAW,EAAM,IAAI,EAAY,EAAG,CAC7C,GAAI,KAAK,6BAA6B,CAAK,EACzC,MAAO,GAET,EAAM,IAAM,EAGd,OACE,KAAK,+BAA+B,CAAK,GACzC,KAAK,0BAA0B,CAAK,GAQxC,EAAK,0BAA4B,QAAQ,CAAC,EAAO,CAC/C,IAAI,EAAS,GAAW,EACxB,GAAI,KAAK,wBAAwB,CAAK,GAAU,QAAI,EAAY,KAAK,0BAA0B,CAAK,EAAG,CACrG,GAAI,IAAc,GAAiB,EAAS,GAE5C,IAAI,EAAQ,EAAM,IAClB,MAAO,EAAM,SAAS,CAAC,GAAM,EAAI,CAAU,EAAG,CAC5C,GACE,EAAM,QAAQ,IAAM,KACnB,EAAY,KAAK,0BAA0B,CAAK,GACjD,CACA,GAAI,IAAc,GAAiB,EAAS,GAC5C,SAEF,EAAM,MAAM,sCAAsC,EAEpD,GAAI,IAAU,EAAM,IAAO,OAAO,EAElC,MAAO,EAAM,SAAS,CAAC,GAAM,EAAI,CAAU,EAAG,CAC5C,GAAI,KAAK,0BAA0B,CAAK,EAAK,SAC7C,EAAM,MAAM,sCAAsC,EAEpD,GAAI,IAAU,EAAM,IAAO,OAAO,EAElC,OAAM,MAAM,sCAAsC,EAGpD,OAAS,CACP,GAAI,KAAK,wBAAwB,CAAK,EAAK,SAE3C,GADA,EAAY,KAAK,0BAA0B,CAAK,EAC5C,CAAC,EAAa,OAAO,EACzB,GAAI,IAAc,GAAiB,EAAS,KAKhD,EAAK,wBAA0B,QAAQ,CAAC,EAAO,CAC7C,IAAI,EAAQ,EAAM,IAClB,GAAI,KAAK,4BAA4B,CAAK,EAAG,CAC3C,IAAI,EAAO,EAAM,aACjB,GAAI,EAAM,IAAI,EAAY,GAAK,KAAK,4BAA4B,CAAK,EAAG,CACtE,IAAI,EAAQ,EAAM,aAClB,GAAI,IAAS,IAAM,IAAU,IAAM,EAAO,EACxC,EAAM,MAAM,uCAAuC,EAErD,MAAO,GAET,EAAM,IAAM,EAEd,MAAO,IAIT,EAAK,0BAA4B,QAAQ,CAAC,EAAO,CAC/C,GAAI,KAAK,4BAA4B,CAAK,EAAK,OAAO,GACtD,OAAO,KAAK,iCAAiC,CAAK,GAAK,KAAK,sBAAsB,CAAK,GAIzF,EAAK,sBAAwB,QAAQ,CAAC,EAAO,CAC3C,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,IAAI,EAAS,EAAM,IAAI,EAAY,EAC/B,EAAS,KAAK,qBAAqB,CAAK,EAC5C,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GAAI,GAAU,IAAW,GACvB,EAAM,MAAM,6CAA6C,EAE3D,OAAO,EAET,EAAM,IAAM,EAEd,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,IAAI,EAAW,KAAK,+BAA+B,CAAK,EACxD,GAAI,EACF,OAAO,EAET,EAAM,IAAM,EAEd,OAAO,MAIT,EAAK,iCAAmC,QAAQ,CAAC,EAAO,CACtD,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,SAAS,CAAC,GAAM,GAAI,CAAU,EAAG,CACzC,GAAI,EAAM,IAAI,GAAY,EAAG,CAC3B,IAAI,EAAS,KAAK,sCAAsC,CAAK,EAC7D,GAAI,EAAM,IAAI,GAAY,EACxB,OAAO,EAIT,OAAM,MAAM,gBAAgB,EAE9B,EAAM,IAAM,EAEd,OAAO,MAIT,EAAK,sCAAwC,QAAQ,CAAC,EAAO,CAC3D,IAAI,EAAS,KAAK,mBAAmB,CAAK,EAC1C,MAAO,EAAM,IAAI,GAAY,EAC3B,GAAI,KAAK,mBAAmB,CAAK,IAAM,GAAiB,EAAS,GAEnE,OAAO,GAKT,EAAK,mBAAqB,QAAQ,CAAC,EAAO,CACxC,IAAI,EAAQ,EACZ,MAAO,KAAK,4BAA4B,CAAK,EAAK,IAClD,OAAO,IAAU,EAAI,GAAY,IAInC,EAAK,4BAA8B,QAAQ,CAAC,EAAO,CACjD,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,IAAI,EAAY,EAAG,CAC3B,GACE,KAAK,0BAA0B,CAAK,GACpC,KAAK,qCAAqC,CAAK,EAE/C,MAAO,GAET,GAAI,EAAM,IAAI,EAAY,EAExB,OADA,EAAM,aAAe,EACd,GAGT,OADA,EAAM,IAAM,EACL,GAET,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,EAAK,GAAK,IAAO,EAAM,UAAU,GAAK,GAA4C,CAAE,EAAK,MAAO,GACpG,GAAI,GAA0B,CAAE,EAAK,MAAO,GAG5C,OAFA,EAAM,QAAQ,EACd,EAAM,aAAe,EACd,IAIT,SAAS,EAA2C,CAAC,EAAI,CACvD,OACE,IAAO,IACP,GAAM,IAAgB,GAAM,IAC5B,GAAM,IAAgB,GAAM,IAC5B,IAAO,IACP,GAAM,IAAgB,GAAM,IAC5B,IAAO,IACP,IAAO,IACP,IAAO,IAKX,SAAS,EAAyB,CAAC,EAAI,CACrC,OACE,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,GAAM,IAAgB,GAAM,IAC5B,GAAM,KAAgB,GAAM,IAKhC,EAAK,qCAAuC,QAAQ,CAAC,EAAO,CAC1D,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,GAA6B,CAAE,EAGjC,OAFA,EAAM,aAAe,EACrB,EAAM,QAAQ,EACP,GAET,MAAO,IAIT,SAAS,EAA4B,CAAC,EAAI,CACxC,OACE,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,GAAM,IAAgB,GAAM,IAC5B,IAAO,IACP,IAAO,IACP,IAAO,IAKX,EAAK,6BAA+B,QAAQ,CAAC,EAAO,CAClD,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,GAAe,CAAE,GAAK,IAAO,GAG/B,OAFA,EAAM,aAAe,EAAK,GAC1B,EAAM,QAAQ,EACP,GAET,MAAO,IAIT,EAAK,4BAA8B,QAAQ,CAAC,EAAO,CACjD,IAAI,EAAQ,EAAM,IAClB,GAAI,EAAM,IAAI,GAAY,EAAG,CAC3B,GAAI,KAAK,yBAAyB,EAAO,CAAC,EACxC,MAAO,GAET,GAAI,EAAM,QACR,EAAM,MAAM,gBAAgB,EAE9B,EAAM,IAAM,EAEd,MAAO,IAIT,EAAK,wBAA0B,QAAQ,CAAC,EAAO,CAC7C,IAAI,EAAQ,EAAM,IACd,EAAK,EACT,EAAM,aAAe,EACrB,MAAO,GAAe,EAAK,EAAM,QAAQ,CAAC,EACxC,EAAM,aAAe,GAAK,EAAM,cAAgB,EAAK,IACrD,EAAM,QAAQ,EAEhB,OAAO,EAAM,MAAQ,GAEvB,SAAS,EAAc,CAAC,EAAI,CAC1B,OAAO,GAAM,IAAgB,GAAM,GAIrC,EAAK,oBAAsB,QAAQ,CAAC,EAAO,CACzC,IAAI,EAAQ,EAAM,IACd,EAAK,EACT,EAAM,aAAe,EACrB,MAAO,GAAW,EAAK,EAAM,QAAQ,CAAC,EACpC,EAAM,aAAe,GAAK,EAAM,aAAe,GAAS,CAAE,EAC1D,EAAM,QAAQ,EAEhB,OAAO,EAAM,MAAQ,GAEvB,SAAS,EAAU,CAAC,EAAI,CACtB,OACG,GAAM,IAAgB,GAAM,IAC5B,GAAM,IAAgB,GAAM,IAC5B,GAAM,IAAgB,GAAM,IAGjC,SAAS,EAAQ,CAAC,EAAI,CACpB,GAAI,GAAM,IAAgB,GAAM,GAC9B,MAAO,KAAM,EAAK,IAEpB,GAAI,GAAM,IAAgB,GAAM,IAC9B,MAAO,KAAM,EAAK,IAEpB,OAAO,EAAK,GAKd,EAAK,oCAAsC,QAAQ,CAAC,EAAO,CACzD,GAAI,KAAK,qBAAqB,CAAK,EAAG,CACpC,IAAI,EAAK,EAAM,aACf,GAAI,KAAK,qBAAqB,CAAK,EAAG,CACpC,IAAI,EAAK,EAAM,aACf,GAAI,GAAM,GAAK,KAAK,qBAAqB,CAAK,EAC5C,EAAM,aAAe,EAAK,GAAK,EAAK,EAAI,EAAM,aAE9C,OAAM,aAAe,EAAK,EAAI,EAGhC,OAAM,aAAe,EAEvB,MAAO,GAET,MAAO,IAIT,EAAK,qBAAuB,QAAQ,CAAC,EAAO,CAC1C,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,GAAa,CAAE,EAGjB,OAFA,EAAM,aAAe,EAAK,GAC1B,EAAM,QAAQ,EACP,GAGT,OADA,EAAM,aAAe,EACd,IAET,SAAS,EAAY,CAAC,EAAI,CACxB,OAAO,GAAM,IAAgB,GAAM,GAMrC,EAAK,yBAA2B,QAAQ,CAAC,EAAO,EAAQ,CACtD,IAAI,EAAQ,EAAM,IAClB,EAAM,aAAe,EACrB,QAAS,EAAI,EAAG,EAAI,EAAQ,EAAE,EAAG,CAC/B,IAAI,EAAK,EAAM,QAAQ,EACvB,GAAI,CAAC,GAAW,CAAE,EAEhB,OADA,EAAM,IAAM,EACL,GAET,EAAM,aAAe,GAAK,EAAM,aAAe,GAAS,CAAE,EAC1D,EAAM,QAAQ,EAEhB,MAAO,IAOT,IAAI,GAAQ,QAAc,CAAC,EAAG,CAK5B,GAJA,KAAK,KAAO,EAAE,KACd,KAAK,MAAQ,EAAE,MACf,KAAK,MAAQ,EAAE,MACf,KAAK,IAAM,EAAE,IACT,EAAE,QAAQ,UACV,KAAK,IAAM,IAAI,GAAe,EAAG,EAAE,SAAU,EAAE,MAAM,EACzD,GAAI,EAAE,QAAQ,OACV,KAAK,MAAQ,CAAC,EAAE,MAAO,EAAE,GAAG,GAK9B,EAAK,EAAO,UAIhB,EAAG,KAAO,QAAQ,CAAC,EAA+B,CAChD,GAAI,CAAC,GAAiC,KAAK,KAAK,SAAW,KAAK,YAC5D,KAAK,iBAAiB,KAAK,MAAO,8BAAgC,KAAK,KAAK,OAAO,EACvF,GAAI,KAAK,QAAQ,QACb,KAAK,QAAQ,QAAQ,IAAI,GAAM,IAAI,CAAC,EAExC,KAAK,WAAa,KAAK,IACvB,KAAK,aAAe,KAAK,MACzB,KAAK,cAAgB,KAAK,OAC1B,KAAK,gBAAkB,KAAK,SAC5B,KAAK,UAAU,GAGjB,EAAG,SAAW,QAAQ,EAAG,CAEvB,OADA,KAAK,KAAK,EACH,IAAI,GAAM,IAAI,GAIvB,GAAI,OAAO,OAAW,IAClB,EAAG,OAAO,UAAY,QAAQ,EAAG,CACjC,IAAI,EAAW,KAEf,MAAO,CACL,KAAM,QAAS,EAAG,CAChB,IAAI,EAAQ,EAAS,SAAS,EAC9B,MAAO,CACL,KAAM,EAAM,OAAS,EAAQ,IAC7B,MAAO,CACT,EAEJ,GASJ,EAAG,UAAY,QAAQ,EAAG,CACxB,IAAI,EAAa,KAAK,WAAW,EACjC,GAAI,CAAC,GAAc,CAAC,EAAW,cAAiB,KAAK,UAAU,EAG/D,GADA,KAAK,MAAQ,KAAK,IACd,KAAK,QAAQ,UAAa,KAAK,SAAW,KAAK,YAAY,EAC/D,GAAI,KAAK,KAAO,KAAK,MAAM,OAAU,OAAO,KAAK,YAAY,EAAQ,GAAG,EAExE,GAAI,EAAW,SAAY,OAAO,EAAW,SAAS,IAAI,EACnD,UAAK,UAAU,KAAK,kBAAkB,CAAC,GAGhD,EAAG,UAAY,QAAQ,CAAC,EAAM,CAG5B,GAAI,GAAkB,EAAM,KAAK,QAAQ,aAAe,CAAC,GAAK,IAAS,GACnE,OAAO,KAAK,SAAS,EAEzB,OAAO,KAAK,iBAAiB,CAAI,GAGnC,EAAG,kBAAoB,QAAQ,EAAG,CAChC,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,GAAG,EACzC,GAAI,GAAQ,OAAU,GAAQ,MAAU,OAAO,EAC/C,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,OAAO,GAAQ,OAAU,GAAQ,MAAS,GAAQ,GAAQ,IAAM,EAAO,UAGzE,EAAG,iBAAmB,QAAQ,EAAG,CAC/B,IAAI,EAAW,KAAK,QAAQ,WAAa,KAAK,YAAY,EACtD,EAAQ,KAAK,IAAK,EAAM,KAAK,MAAM,QAAQ,KAAM,KAAK,KAAO,CAAC,EAClE,GAAI,IAAQ,GAAM,KAAK,MAAM,KAAK,IAAM,EAAG,sBAAsB,EAEjE,GADA,KAAK,IAAM,EAAM,EACb,KAAK,QAAQ,UACf,QAAS,EAAkB,OAAI,EAAM,GAAQ,EAAY,GAAc,KAAK,MAAO,EAAK,KAAK,GAAG,GAAK,IACnG,EAAE,KAAK,QACP,EAAM,KAAK,UAAY,EAG3B,GAAI,KAAK,QAAQ,UACb,KAAK,QAAQ,UAAU,GAAM,KAAK,MAAM,MAAM,EAAQ,EAAG,CAAG,EAAG,EAAO,KAAK,IACtD,EAAU,KAAK,YAAY,CAAC,GAGvD,EAAG,gBAAkB,QAAQ,CAAC,EAAW,CACvC,IAAI,EAAQ,KAAK,IACb,EAAW,KAAK,QAAQ,WAAa,KAAK,YAAY,EACtD,EAAK,KAAK,MAAM,WAAW,KAAK,KAAO,CAAS,EACpD,MAAO,KAAK,IAAM,KAAK,MAAM,QAAU,CAAC,GAAU,CAAE,EAClD,EAAK,KAAK,MAAM,WAAW,EAAE,KAAK,GAAG,EAEvC,GAAI,KAAK,QAAQ,UACb,KAAK,QAAQ,UAAU,GAAO,KAAK,MAAM,MAAM,EAAQ,EAAW,KAAK,GAAG,EAAG,EAAO,KAAK,IACpE,EAAU,KAAK,YAAY,CAAC,GAMvD,EAAG,UAAY,QAAQ,EAAG,CACxB,EAAM,MAAO,KAAK,IAAM,KAAK,MAAM,OAAQ,CACzC,IAAI,EAAK,KAAK,MAAM,WAAW,KAAK,GAAG,EACvC,OAAQ,OACH,QAAS,KACZ,EAAE,KAAK,IACP,UACG,IACH,GAAI,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,IAAM,GAC1C,EAAE,KAAK,QAEN,QAAS,UAAW,MAEvB,GADA,EAAE,KAAK,IACH,KAAK,QAAQ,UACf,EAAE,KAAK,QACP,KAAK,UAAY,KAAK,IAExB,UACG,IACH,OAAQ,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,OACrC,IACH,KAAK,iBAAiB,EACtB,UACG,IACH,KAAK,gBAAgB,CAAC,EACtB,cAEA,QAEF,cAEA,GAAI,EAAK,GAAK,EAAK,IAAM,GAAM,MAAQ,GAAmB,KAAK,OAAO,aAAa,CAAE,CAAC,EACpF,EAAE,KAAK,IAEP,gBAWR,EAAG,YAAc,QAAQ,CAAC,EAAM,EAAK,CAEnC,GADA,KAAK,IAAM,KAAK,IACZ,KAAK,QAAQ,UAAa,KAAK,OAAS,KAAK,YAAY,EAC7D,IAAI,EAAW,KAAK,KACpB,KAAK,KAAO,EACZ,KAAK,MAAQ,EAEb,KAAK,cAAc,CAAQ,GAY7B,EAAG,cAAgB,QAAQ,EAAG,CAC5B,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,GAAQ,IAAM,GAAQ,GAAM,OAAO,KAAK,WAAW,EAAI,EAC3D,IAAI,EAAQ,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC9C,GAAI,KAAK,QAAQ,aAAe,GAAK,IAAS,IAAM,IAAU,GAE5D,OADA,KAAK,KAAO,EACL,KAAK,YAAY,EAAQ,QAAQ,EAGxC,WADA,EAAE,KAAK,IACA,KAAK,YAAY,EAAQ,GAAG,GAIvC,EAAG,gBAAkB,QAAQ,EAAG,CAC9B,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,KAAK,YAA2B,MAAZ,EAAE,KAAK,IAAY,KAAK,WAAW,EAC3D,GAAI,IAAS,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,EACzD,OAAO,KAAK,SAAS,EAAQ,MAAO,CAAC,GAGvC,EAAG,0BAA4B,QAAQ,CAAC,EAAM,CAC5C,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EACzC,EAAO,EACP,EAAY,IAAS,GAAK,EAAQ,KAAO,EAAQ,OAGrD,GAAI,KAAK,QAAQ,aAAe,GAAK,IAAS,IAAM,IAAS,GAC3D,EAAE,EACF,EAAY,EAAQ,SACpB,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAG3C,GAAI,IAAS,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,EAAO,CAAC,EAChE,OAAO,KAAK,SAAS,EAAW,CAAI,GAGtC,EAAG,mBAAqB,QAAQ,CAAC,EAAM,CACrC,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,IAAS,EAAM,CACjB,GAAI,KAAK,QAAQ,aAAe,GAAI,CAClC,IAAI,EAAQ,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC9C,GAAI,IAAU,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,EAE5D,OAAO,KAAK,SAAS,IAAS,IAAM,EAAQ,UAAY,EAAQ,WAAY,CAAC,EAE/E,GAAI,IAAS,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,EACzD,OAAO,KAAK,SAAS,IAAS,IAAM,EAAQ,UAAY,EAAQ,WAAY,CAAC,GAG/E,EAAG,gBAAkB,QAAQ,EAAG,CAC9B,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,IAAS,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,EACzD,OAAO,KAAK,SAAS,EAAQ,WAAY,CAAC,GAG5C,EAAG,mBAAqB,QAAQ,CAAC,EAAM,CACrC,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,IAAS,EAAM,CACjB,GAAI,IAAS,IAAM,CAAC,KAAK,UAAY,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,IAAM,KACxE,KAAK,aAAe,GAAK,EAAU,KAAK,KAAK,MAAM,MAAM,KAAK,WAAY,KAAK,GAAG,CAAC,GAItF,OAFA,KAAK,gBAAgB,CAAC,EACtB,KAAK,UAAU,EACR,KAAK,UAAU,EAExB,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,EAExC,GAAI,IAAS,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,EACzD,OAAO,KAAK,SAAS,EAAQ,QAAS,CAAC,GAGzC,EAAG,gBAAkB,QAAQ,CAAC,EAAM,CAClC,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EACzC,EAAO,EACX,GAAI,IAAS,EAAM,CAEjB,GADA,EAAO,IAAS,IAAM,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,IAAM,GAAK,EAAI,EACnE,KAAK,MAAM,WAAW,KAAK,IAAM,CAAI,IAAM,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,EAAO,CAAC,EAClG,OAAO,KAAK,SAAS,EAAQ,SAAU,CAAI,EAE7C,GAAI,IAAS,IAAM,IAAS,IAAM,CAAC,KAAK,UAAY,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,IAAM,IACxF,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,IAAM,GAI1C,OAFA,KAAK,gBAAgB,CAAC,EACtB,KAAK,UAAU,EACR,KAAK,UAAU,EAExB,GAAI,IAAS,GAAM,EAAO,EAC1B,OAAO,KAAK,SAAS,EAAQ,WAAY,CAAI,GAG/C,EAAG,kBAAoB,QAAQ,CAAC,EAAM,CACpC,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,IAAS,GAAM,OAAO,KAAK,SAAS,EAAQ,SAAU,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,IAAM,GAAK,EAAI,CAAC,EAC5G,GAAI,IAAS,IAAM,IAAS,IAAM,KAAK,QAAQ,aAAe,EAE5D,OADA,KAAK,KAAO,EACL,KAAK,YAAY,EAAQ,KAAK,EAEvC,OAAO,KAAK,SAAS,IAAS,GAAK,EAAQ,GAAK,EAAQ,OAAQ,CAAC,GAGnE,EAAG,mBAAqB,QAAQ,EAAG,CACjC,IAAI,EAAc,KAAK,QAAQ,YAC/B,GAAI,GAAe,GAAI,CACrB,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,IAAS,GAAI,CACf,IAAI,EAAQ,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC9C,GAAI,EAAQ,IAAM,EAAQ,GAAM,OAAO,KAAK,SAAS,EAAQ,YAAa,CAAC,EAE7E,GAAI,IAAS,GAAI,CACf,GAAI,GAAe,GAAI,CACrB,IAAI,EAAU,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAChD,GAAI,IAAY,GAAM,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,EAE9D,OAAO,KAAK,SAAS,EAAQ,SAAU,CAAC,GAG5C,OAAO,KAAK,SAAS,EAAQ,SAAU,CAAC,GAG1C,EAAG,qBAAuB,QAAQ,EAAG,CACnC,IAAI,EAAc,KAAK,QAAQ,YAC3B,EAAO,GACX,GAAI,GAAe,IAGjB,GAFA,EAAE,KAAK,IACP,EAAO,KAAK,kBAAkB,EAC1B,GAAkB,EAAM,EAAI,GAAK,IAAS,GAC5C,OAAO,KAAK,YAAY,EAAQ,UAAW,KAAK,UAAU,CAAC,EAI/D,KAAK,MAAM,KAAK,IAAK,yBAA2B,GAAkB,CAAI,EAAI,GAAG,GAG/E,EAAG,iBAAmB,QAAQ,CAAC,EAAM,CACnC,OAAQ,OAGH,IACH,OAAO,KAAK,cAAc,MAGvB,IAAgB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,MAAM,MACtD,IAAgB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,MAAM,MACtD,IAAgB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,IAAI,MACpD,IAAgB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,KAAK,MACrD,IAAgB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,QAAQ,MACxD,IAAgB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,QAAQ,MACxD,KAAiB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,MAAM,MACvD,KAAiB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,MAAM,MACvD,IAAgB,MAAZ,EAAE,KAAK,IAAY,KAAK,YAAY,EAAQ,KAAK,MAErD,IACH,GAAI,KAAK,QAAQ,YAAc,EAAK,MAEpC,MADA,EAAE,KAAK,IACA,KAAK,YAAY,EAAQ,SAAS,MAEtC,IACH,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,EAC7C,GAAI,IAAS,KAAO,IAAS,GAAM,OAAO,KAAK,gBAAgB,EAAE,EACjE,GAAI,KAAK,QAAQ,aAAe,EAAG,CACjC,GAAI,IAAS,KAAO,IAAS,GAAM,OAAO,KAAK,gBAAgB,CAAC,EAChE,GAAI,IAAS,IAAM,IAAS,GAAM,OAAO,KAAK,gBAAgB,CAAC,MAK9D,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,IAC3E,OAAO,KAAK,WAAW,EAAK,MAGzB,QAAS,IACZ,OAAO,KAAK,WAAW,CAAI,MAMxB,IACH,OAAO,KAAK,gBAAgB,MAEzB,QAAS,IACZ,OAAO,KAAK,0BAA0B,CAAI,MAEvC,SAAU,IACb,OAAO,KAAK,mBAAmB,CAAI,MAEhC,IACH,OAAO,KAAK,gBAAgB,MAEzB,QAAS,IACZ,OAAO,KAAK,mBAAmB,CAAI,MAEhC,QAAS,IACZ,OAAO,KAAK,gBAAgB,CAAI,MAE7B,QAAS,IACZ,OAAO,KAAK,kBAAkB,CAAI,MAE/B,IACH,OAAO,KAAK,mBAAmB,MAE5B,KACH,OAAO,KAAK,SAAS,EAAQ,OAAQ,CAAC,MAEnC,IACH,OAAO,KAAK,qBAAqB,EAGnC,KAAK,MAAM,KAAK,IAAK,yBAA2B,GAAkB,CAAI,EAAI,GAAG,GAG/E,EAAG,SAAW,QAAQ,CAAC,EAAM,EAAM,CACjC,IAAI,EAAM,KAAK,MAAM,MAAM,KAAK,IAAK,KAAK,IAAM,CAAI,EAEpD,OADA,KAAK,KAAO,EACL,KAAK,YAAY,EAAM,CAAG,GAGnC,EAAG,WAAa,QAAQ,EAAG,CACzB,IAAI,EAAS,EAAS,EAAQ,KAAK,IACnC,OAAS,CACP,GAAI,KAAK,KAAO,KAAK,MAAM,OAAU,KAAK,MAAM,EAAO,iCAAiC,EACxF,IAAI,EAAK,KAAK,MAAM,OAAO,KAAK,GAAG,EACnC,GAAI,EAAU,KAAK,CAAE,EAAK,KAAK,MAAM,EAAO,iCAAiC,EAC7E,GAAI,CAAC,EAAS,CACZ,GAAI,IAAO,IAAO,EAAU,GACvB,QAAI,IAAO,KAAO,EAAW,EAAU,GACvC,QAAI,IAAO,KAAO,CAAC,EAAW,MACnC,EAAU,IAAO,KACV,OAAU,GACnB,EAAE,KAAK,IAET,IAAI,EAAU,KAAK,MAAM,MAAM,EAAO,KAAK,GAAG,EAC9C,EAAE,KAAK,IACP,IAAI,EAAa,KAAK,IAClB,EAAQ,KAAK,UAAU,EAC3B,GAAI,KAAK,YAAe,KAAK,WAAW,CAAU,EAGlD,IAAI,EAAQ,KAAK,cAAgB,KAAK,YAAc,IAAI,GAAsB,IAAI,GAClF,EAAM,MAAM,EAAO,EAAS,CAAK,EACjC,KAAK,oBAAoB,CAAK,EAC9B,KAAK,sBAAsB,CAAK,EAGhC,IAAI,EAAQ,KACZ,GAAI,CACF,EAAQ,IAAI,OAAO,EAAS,CAAK,EACjC,MAAO,EAAG,EAKZ,OAAO,KAAK,YAAY,EAAQ,OAAQ,CAAC,QAAS,EAAS,MAAO,EAAO,MAAO,CAAK,CAAC,GAOxF,EAAG,QAAU,QAAQ,CAAC,EAAO,EAAK,EAAgC,CAEhE,IAAI,EAAkB,KAAK,QAAQ,aAAe,IAAM,IAAQ,OAK5D,EAA8B,GAAkC,KAAK,MAAM,WAAW,KAAK,GAAG,IAAM,GAEpG,EAAQ,KAAK,IAAK,EAAQ,EAAG,EAAW,EAC5C,QAAS,EAAI,EAAG,EAAI,GAAO,KAAO,IAAW,EAAK,EAAI,EAAG,EAAE,EAAG,EAAE,KAAK,IAAK,CACxE,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,GAAG,EAAG,EAAY,OAExD,GAAI,GAAmB,IAAS,GAAI,CAClC,GAAI,EAA+B,KAAK,iBAAiB,KAAK,IAAK,mEAAmE,EACtI,GAAI,IAAa,GAAM,KAAK,iBAAiB,KAAK,IAAK,kDAAkD,EACzG,GAAI,IAAM,EAAK,KAAK,iBAAiB,KAAK,IAAK,yDAAyD,EACxG,EAAW,EACX,SAGF,GAAI,GAAQ,GAAM,EAAM,EAAO,GAAK,GAC/B,QAAI,GAAQ,GAAM,EAAM,EAAO,GAAK,GACpC,QAAI,GAAQ,IAAM,GAAQ,GAAM,EAAM,EAAO,GAC3C,OAAM,IACb,GAAI,GAAO,EAAS,MACpB,EAAW,EACX,EAAQ,EAAQ,EAAQ,EAG1B,GAAI,GAAmB,IAAa,GAAM,KAAK,iBAAiB,KAAK,IAAM,EAAG,wDAAwD,EACtI,GAAI,KAAK,MAAQ,GAAS,GAAO,MAAQ,KAAK,IAAM,IAAU,EAAO,OAAO,KAE5E,OAAO,GAGT,SAAS,EAAc,CAAC,EAAK,EAA6B,CACxD,GAAI,EACF,OAAO,SAAS,EAAK,CAAC,EAIxB,OAAO,WAAW,EAAI,QAAQ,KAAM,EAAE,CAAC,EAGzC,SAAS,EAAc,CAAC,EAAK,CAC3B,GAAI,OAAO,SAAW,WACpB,OAAO,KAIT,OAAO,OAAO,EAAI,QAAQ,KAAM,EAAE,CAAC,EAGrC,EAAG,gBAAkB,QAAQ,CAAC,EAAO,CACnC,IAAI,EAAQ,KAAK,IACjB,KAAK,KAAO,EACZ,IAAI,EAAM,KAAK,QAAQ,CAAK,EAC5B,GAAI,GAAO,KAAQ,KAAK,MAAM,KAAK,MAAQ,EAAG,4BAA8B,CAAK,EACjF,GAAI,KAAK,QAAQ,aAAe,IAAM,KAAK,MAAM,WAAW,KAAK,GAAG,IAAM,IACxE,EAAM,GAAe,KAAK,MAAM,MAAM,EAAO,KAAK,GAAG,CAAC,EACtD,EAAE,KAAK,IACF,QAAI,GAAkB,KAAK,kBAAkB,CAAC,EAAK,KAAK,MAAM,KAAK,IAAK,kCAAkC,EACjH,OAAO,KAAK,YAAY,EAAQ,IAAK,CAAG,GAK1C,EAAG,WAAa,QAAQ,CAAC,EAAe,CACtC,IAAI,EAAQ,KAAK,IACjB,GAAI,CAAC,GAAiB,KAAK,QAAQ,GAAI,OAAW,EAAI,IAAM,KAAQ,KAAK,MAAM,EAAO,gBAAgB,EACtG,IAAI,EAAQ,KAAK,IAAM,GAAS,GAAK,KAAK,MAAM,WAAW,CAAK,IAAM,GACtE,GAAI,GAAS,KAAK,OAAU,KAAK,MAAM,EAAO,gBAAgB,EAC9D,IAAI,EAAO,KAAK,MAAM,WAAW,KAAK,GAAG,EACzC,GAAI,CAAC,GAAS,CAAC,GAAiB,KAAK,QAAQ,aAAe,IAAM,IAAS,IAAK,CAC9E,IAAI,EAAQ,GAAe,KAAK,MAAM,MAAM,EAAO,KAAK,GAAG,CAAC,EAE5D,GADA,EAAE,KAAK,IACH,GAAkB,KAAK,kBAAkB,CAAC,EAAK,KAAK,MAAM,KAAK,IAAK,kCAAkC,EAC1G,OAAO,KAAK,YAAY,EAAQ,IAAK,CAAK,EAE5C,GAAI,GAAS,OAAO,KAAK,KAAK,MAAM,MAAM,EAAO,KAAK,GAAG,CAAC,EAAK,EAAQ,GACvE,GAAI,IAAS,IAAM,CAAC,EAClB,EAAE,KAAK,IACP,KAAK,QAAQ,EAAE,EACf,EAAO,KAAK,MAAM,WAAW,KAAK,GAAG,EAEvC,IAAK,IAAS,IAAM,IAAS,MAAQ,CAAC,EAAO,CAE3C,GADA,EAAO,KAAK,MAAM,WAAW,EAAE,KAAK,GAAG,EACnC,IAAS,IAAM,IAAS,GAAM,EAAE,KAAK,IACzC,GAAI,KAAK,QAAQ,EAAE,IAAM,KAAQ,KAAK,MAAM,EAAO,gBAAgB,EAErE,GAAI,GAAkB,KAAK,kBAAkB,CAAC,EAAK,KAAK,MAAM,KAAK,IAAK,kCAAkC,EAE1G,IAAI,EAAM,GAAe,KAAK,MAAM,MAAM,EAAO,KAAK,GAAG,EAAG,CAAK,EACjE,OAAO,KAAK,YAAY,EAAQ,IAAK,CAAG,GAK1C,EAAG,cAAgB,QAAQ,EAAG,CAC5B,IAAI,EAAK,KAAK,MAAM,WAAW,KAAK,GAAG,EAAG,EAE1C,GAAI,IAAO,IAAK,CACd,GAAI,KAAK,QAAQ,YAAc,EAAK,KAAK,WAAW,EACpD,IAAI,EAAU,EAAE,KAAK,IAGrB,GAFA,EAAO,KAAK,YAAY,KAAK,MAAM,QAAQ,IAAK,KAAK,GAAG,EAAI,KAAK,GAAG,EACpE,EAAE,KAAK,IACH,EAAO,QAAY,KAAK,mBAAmB,EAAS,0BAA0B,EAElF,OAAO,KAAK,YAAY,CAAC,EAE3B,OAAO,GAGT,EAAG,WAAa,QAAQ,CAAC,EAAO,CAC9B,IAAI,EAAM,GAAI,EAAa,EAAE,KAAK,IAClC,OAAS,CACP,GAAI,KAAK,KAAO,KAAK,MAAM,OAAU,KAAK,MAAM,KAAK,MAAO,8BAA8B,EAC1F,IAAI,EAAK,KAAK,MAAM,WAAW,KAAK,GAAG,EACvC,GAAI,IAAO,EAAS,MACpB,GAAI,IAAO,GACT,GAAO,KAAK,MAAM,MAAM,EAAY,KAAK,GAAG,EAC5C,GAAO,KAAK,gBAAgB,EAAK,EACjC,EAAa,KAAK,IACb,QAAI,IAAO,MAAU,IAAO,KAAQ,CACzC,GAAI,KAAK,QAAQ,YAAc,GAAM,KAAK,MAAM,KAAK,MAAO,8BAA8B,EAE1F,GADA,EAAE,KAAK,IACH,KAAK,QAAQ,UACf,KAAK,UACL,KAAK,UAAY,KAAK,IAEnB,KACL,GAAI,GAAU,CAAE,EAAK,KAAK,MAAM,KAAK,MAAO,8BAA8B,EAC1E,EAAE,KAAK,KAIX,OADA,GAAO,KAAK,MAAM,MAAM,EAAY,KAAK,KAAK,EACvC,KAAK,YAAY,EAAQ,OAAQ,CAAG,GAK7C,IAAI,GAAgC,CAAC,EAErC,EAAG,qBAAuB,QAAQ,EAAG,CACnC,KAAK,kBAAoB,GACzB,GAAI,CACF,KAAK,cAAc,EACnB,MAAO,EAAK,CACZ,GAAI,IAAQ,GACV,KAAK,yBAAyB,EAE9B,WAAM,EAIV,KAAK,kBAAoB,IAG3B,EAAG,mBAAqB,QAAQ,CAAC,EAAU,EAAS,CAClD,GAAI,KAAK,mBAAqB,KAAK,QAAQ,aAAe,EACxD,MAAM,GAEN,UAAK,MAAM,EAAU,CAAO,GAIhC,EAAG,cAAgB,QAAQ,EAAG,CAC5B,IAAI,EAAM,GAAI,EAAa,KAAK,IAChC,OAAS,CACP,GAAI,KAAK,KAAO,KAAK,MAAM,OAAU,KAAK,MAAM,KAAK,MAAO,uBAAuB,EACnF,IAAI,EAAK,KAAK,MAAM,WAAW,KAAK,GAAG,EACvC,GAAI,IAAO,IAAM,IAAO,IAAM,KAAK,MAAM,WAAW,KAAK,IAAM,CAAC,IAAM,IAAK,CACzE,GAAI,KAAK,MAAQ,KAAK,QAAU,KAAK,OAAS,EAAQ,UAAY,KAAK,OAAS,EAAQ,iBACtF,GAAI,IAAO,GAET,OADA,KAAK,KAAO,EACL,KAAK,YAAY,EAAQ,YAAY,EAG5C,WADA,EAAE,KAAK,IACA,KAAK,YAAY,EAAQ,SAAS,EAI7C,OADA,GAAO,KAAK,MAAM,MAAM,EAAY,KAAK,GAAG,EACrC,KAAK,YAAY,EAAQ,SAAU,CAAG,EAE/C,GAAI,IAAO,GACT,GAAO,KAAK,MAAM,MAAM,EAAY,KAAK,GAAG,EAC5C,GAAO,KAAK,gBAAgB,EAAI,EAChC,EAAa,KAAK,IACb,QAAI,GAAU,CAAE,EAAG,CAGxB,OAFA,GAAO,KAAK,MAAM,MAAM,EAAY,KAAK,GAAG,EAC5C,EAAE,KAAK,IACC,OACH,IACH,GAAI,KAAK,MAAM,WAAW,KAAK,GAAG,IAAM,GAAM,EAAE,KAAK,QAClD,IACH,GAAO;AAAA,EACP,cAEA,GAAO,OAAO,aAAa,CAAE,EAC7B,MAEF,GAAI,KAAK,QAAQ,UACf,EAAE,KAAK,QACP,KAAK,UAAY,KAAK,IAExB,EAAa,KAAK,IAElB,MAAE,KAAK,MAMb,EAAG,yBAA2B,QAAQ,EAAG,CACvC,KAAO,KAAK,IAAM,KAAK,MAAM,OAAQ,KAAK,MACxC,OAAQ,KAAK,MAAM,KAAK,UACnB,KACH,EAAE,KAAK,IACP,UAEG,IACH,GAAI,KAAK,MAAM,KAAK,IAAM,KAAO,IAAO,UAErC,IACH,OAAO,KAAK,YAAY,EAAQ,gBAAiB,KAAK,MAAM,MAAM,KAAK,MAAO,KAAK,GAAG,CAAC,MAEpF,KACH,GAAI,KAAK,MAAM,KAAK,IAAM,KAAO;AAAA,EAAQ,EAAE,KAAK,QAE7C;AAAA,MAAW,aAAe,SAC7B,EAAE,KAAK,QACP,KAAK,UAAY,KAAK,IAAM,EAC5B,MAGJ,KAAK,MAAM,KAAK,MAAO,uBAAuB,GAKhD,EAAG,gBAAkB,QAAQ,CAAC,EAAY,CACxC,IAAI,EAAK,KAAK,MAAM,WAAW,EAAE,KAAK,GAAG,EAEzC,OADA,EAAE,KAAK,IACC,OACH,KAAK,MAAO;AAAA,MACZ,KAAK,MAAO,SACZ,KAAK,OAAO,OAAO,aAAa,KAAK,YAAY,CAAC,CAAC,MACnD,KAAK,OAAO,GAAkB,KAAK,cAAc,CAAC,MAClD,KAAK,MAAO,SACZ,IAAI,MAAO,SACX,KAAK,MAAO,SACZ,KAAK,MAAO,SACZ,IAAI,GAAI,KAAK,MAAM,WAAW,KAAK,GAAG,IAAM,GAAM,EAAE,KAAK,QACzD,IACH,GAAI,KAAK,QAAQ,UAAa,KAAK,UAAY,KAAK,IAAK,EAAE,KAAK,QAChE,MAAO,OACJ,QACA,IACH,GAAI,KAAK,OACP,KAAK,mBACH,KAAK,IAAM,EACX,yBACF,EAEF,GAAI,EAAY,CACd,IAAI,EAAU,KAAK,IAAM,EAEzB,KAAK,mBACH,EACA,4CACF,UAGF,GAAI,GAAM,IAAM,GAAM,GAAI,CACxB,IAAI,EAAW,KAAK,MAAM,OAAO,KAAK,IAAM,EAAG,CAAC,EAAE,MAAM,SAAS,EAAE,GAC/D,EAAQ,SAAS,EAAU,CAAC,EAChC,GAAI,EAAQ,IACV,EAAW,EAAS,MAAM,EAAG,EAAE,EAC/B,EAAQ,SAAS,EAAU,CAAC,EAI9B,GAFA,KAAK,KAAO,EAAS,OAAS,EAC9B,EAAK,KAAK,MAAM,WAAW,KAAK,GAAG,GAC9B,IAAa,KAAO,IAAO,IAAM,IAAO,MAAQ,KAAK,QAAU,GAClE,KAAK,mBACH,KAAK,IAAM,EAAI,EAAS,OACxB,EACI,mCACA,8BACN,EAEF,OAAO,OAAO,aAAa,CAAK,EAElC,GAAI,GAAU,CAAE,EAAG,CAGjB,GAAI,KAAK,QAAQ,UAAa,KAAK,UAAY,KAAK,IAAK,EAAE,KAAK,QAChE,MAAO,GAET,OAAO,OAAO,aAAa,CAAE,IAMjC,EAAG,YAAc,QAAQ,CAAC,EAAK,CAC7B,IAAI,EAAU,KAAK,IACf,EAAI,KAAK,QAAQ,GAAI,CAAG,EAC5B,GAAI,IAAM,KAAQ,KAAK,mBAAmB,EAAS,+BAA+B,EAClF,OAAO,GAST,EAAG,UAAY,QAAQ,EAAG,CACxB,KAAK,YAAc,GACnB,IAAI,EAAO,GAAI,EAAQ,GAAM,EAAa,KAAK,IAC3C,EAAS,KAAK,QAAQ,aAAe,EACzC,MAAO,KAAK,IAAM,KAAK,MAAM,OAAQ,CACnC,IAAI,EAAK,KAAK,kBAAkB,EAChC,GAAI,GAAiB,EAAI,CAAM,EAC7B,KAAK,KAAO,GAAM,MAAS,EAAI,EAC1B,QAAI,IAAO,GAAI,CACpB,KAAK,YAAc,GACnB,GAAQ,KAAK,MAAM,MAAM,EAAY,KAAK,GAAG,EAC7C,IAAI,EAAW,KAAK,IACpB,GAAI,KAAK,MAAM,WAAW,EAAE,KAAK,GAAG,IAAM,IACtC,KAAK,mBAAmB,KAAK,IAAK,2CAA2C,EACjF,EAAE,KAAK,IACP,IAAI,EAAM,KAAK,cAAc,EAC7B,GAAI,EAAE,EAAQ,GAAoB,IAAkB,EAAK,CAAM,EAC3D,KAAK,mBAAmB,EAAU,wBAAwB,EAC9D,GAAQ,GAAkB,CAAG,EAC7B,EAAa,KAAK,IAElB,WAEF,EAAQ,GAEV,OAAO,EAAO,KAAK,MAAM,MAAM,EAAY,KAAK,GAAG,GAMrD,EAAG,SAAW,QAAQ,EAAG,CACvB,IAAI,EAAO,KAAK,UAAU,EACtB,EAAO,EAAQ,KACnB,GAAI,KAAK,SAAS,KAAK,CAAI,EACzB,EAAO,GAAS,GAElB,OAAO,KAAK,YAAY,EAAM,CAAI,GAkBpC,IAAI,GAAU,SAEd,EAAO,MAAQ,CACb,OAAQ,EACR,QAAS,GACT,eAAgB,GAChB,SAAU,GACV,eAAgB,GAChB,YAAa,GACb,KAAM,GACN,UAAW,EACX,SAAU,EACV,aAAc,GACd,WAAY,GACZ,YAAa,EACb,iBAAkB,GAClB,kBAAmB,GACnB,MAAO,GACP,UAAW,GACX,UAAW,EACX,WAAY,GACZ,mBAAoB,EACtB,EAQA,SAAS,EAAK,CAAC,EAAO,EAAS,CAC7B,OAAO,EAAO,MAAM,EAAO,CAAO,EAOpC,SAAS,EAAiB,CAAC,EAAO,EAAK,EAAS,CAC9C,OAAO,EAAO,kBAAkB,EAAO,EAAK,CAAO,ECp+L9C,MAAM,UAAuB,KAAM,CACxC,KACA,OACA,OACA,SAEA,WAAW,CACT,EACA,EACA,EACA,EACA,CACA,IAAM,EAAM,GAAG,GAAY,cAAc,EAAS,QAAQ,EAAS,SACnE,MAAM,GAAG,QAAc,GAAK,EAC5B,KAAK,KAAO,iBACZ,KAAK,KAAO,EAAS,KACrB,KAAK,OAAS,EAAS,OACvB,KAAK,OAAS,EACd,KAAK,SAAW,EAEpB,CAGO,MAAM,UAAoB,CAAe,CAC9C,WAAW,CACT,EACA,EACA,EACA,EACA,CACA,MAAM,EAAS,EAAU,EAAQ,CAAQ,EACzC,KAAK,KAAO,cAOd,iBAAiB,CAAC,EAAe,EAAW,CAC1C,GAAI,CAAC,KAAK,OAAQ,OAAO,KAAK,QAE9B,IAAM,EAAQ,KAAK,OAAO,MAAM;AAAA,CAAI,EAC9B,EAAY,KAAK,KAAO,EACxB,EAAY,KAAK,IAAI,EAAG,EAAY,CAAY,EAChD,EAAU,KAAK,IAAI,EAAM,OAAS,EAAG,EAAY,CAAY,EAE7D,EAAmB,CAAC,EACpB,EAAe,OAAO,EAAU,CAAC,EAAE,OAGzC,QAAS,EAAI,EAAW,GAAK,EAAS,IAAK,CACzC,IAAM,EAAU,OAAO,EAAI,CAAC,EAAE,SAAS,CAAY,EAC7C,EAAS,IAAM,EAAY,IAAM,IAIvC,GAHA,EAAO,KAAK,GAAG,KAAU,OAAa,EAAM,IAAI,EAG5C,IAAM,EAAW,CACnB,IAAM,EAAe,IAAI,OAAO,EAAe,EAAI,KAAK,MAAM,EAC9D,EAAO,KAAK,GAAG,MAAiB,KAAK,QAAQ,MAAM,MAAM,EAAE,IAAI,GAInE,OAAO,EAAO,KAAK;AAAA,CAAI,EAE3B,CAsDO,SAAS,EAAkB,CAAC,EAA4C,CAC7E,MAAO,CACL,MAAO,EAAO,MAAQ,EACtB,OAAQ,IAAI,IACZ,SACA,WAAY,EAAO,WACnB,MAAO,EAAO,MACd,SAAU,EAAO,SACjB,OAAQ,EAAO,OACf,SAAU,EAAO,SACjB,QAAS,EAAO,OAClB,EA4BK,SAAS,CAAW,CAAC,EAA8C,CACxE,GAAI,EAAK,IACP,MAAO,CAAE,KAAM,EAAK,IAAI,MAAM,KAAM,OAAQ,EAAK,IAAI,MAAM,MAAO,EAEpE,MAAO,CAAE,KAAM,EAAG,OAAQ,CAAE,EC5PvB,SAAS,EAAyB,CACvC,EACA,EAUA,CACA,IAAI,EAAS,GACT,EAAI,EACJ,EACA,EAGA,EAAwB,SAEtB,EAA0B,CAAC,EAG3B,EAA+B,CAAC,CAAE,KAAM,YAAa,WAAY,CAAE,CAAC,EACtE,EAAa,EAGX,EAAkB,IACtB,EAAa,EAAa,OAAS,IAAI,MAAQ,YAG3C,EAAgB,IAAe,CACnC,IAAM,EAAQ,EAAa,EAAa,OAAS,GACjD,OAAO,GAAO,OAAS,cAAgB,IAAe,EAAM,WAAa,GAG3E,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GACd,EAAW,EAAO,EAAI,GAG5B,OAAQ,OACD,gBAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,IACX,EAAQ,SAEV,IACA,aAEG,gBAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,IACX,EAAQ,SAEV,IACA,aAEG,kBAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CAEpC,GAAU,EACV,GAAK,EACL,EAAc,KAAK,CAAC,EACpB,EAAQ,SACR,SAEF,GAAI,IAAS,IACX,EAAQ,SAEV,IACA,aAEG,eAEH,GADA,GAAU,EACN,IAAS;AAAA,EACX,EAAQ,SAEV,IACA,aAEG,gBAEH,GADA,GAAU,EACN,IAAS,KAAO,IAAa,IAAK,CACpC,GAAU,EACV,GAAK,EACL,EAAQ,SACR,SAEF,IACA,aAEG,QAEH,GADA,GAAU,EACN,IAAS,MAAQ,EAAI,EAAI,EAAO,OAAQ,CAC1C,GAAU,EACV,GAAK,EACL,SAEF,GAAI,IAAS,IAAK,CAEhB,IACA,MAAO,EAAI,EAAO,QAAU,EAAO,KAAO,IAExC,GADA,GAAU,EAAO,GACb,EAAO,KAAO,MAAQ,EAAI,EAAI,EAAO,OACvC,GAAU,EAAO,EAAI,GACrB,GAAK,EAEL,SAGJ,GAAI,EAAI,EAAO,OACb,GAAU,EAAO,GACjB,IAEF,SAEF,GAAI,IAAS,IAAK,CAEhB,IACA,MAAO,EAAI,EAAO,QAAU,WAAW,KAAK,EAAO,EAAE,EACnD,GAAU,EAAO,GACjB,IAEF,EAAQ,SACR,SAEF,IACA,aAEG,SAEH,GAAI,EAAc,OAAS,GACzB,GAAI,IAAS,IACX,EAAc,EAAc,OAAS,KAChC,QAAI,IAAS,KAElB,GADA,EAAc,EAAc,OAAS,KACjC,EAAc,EAAc,OAAS,KAAO,EAAG,CAEjD,EAAc,IAAI,EAClB,GAAU,EACV,IACA,EAAQ,kBACR,WAMN,GAAI,IAAS,IAAK,CAChB,GAAU,EACV,IACA,EAAQ,gBACR,SAEF,GAAI,IAAS,IAAK,CAChB,GAAU,EACV,IACA,EAAQ,gBACR,SAEF,GAAI,IAAS,IAAK,CAChB,GAAU,EACV,IACA,EAAQ,kBACR,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAU,EAAO,EACjB,GAAK,EACL,EAAQ,eACR,SAEF,GAAI,IAAS,KAAO,IAAa,IAAK,CACpC,GAAU,EAAO,EACjB,GAAK,EACL,EAAQ,gBACR,SAIF,GAAI,IAAS,IAAK,CAChB,IAAM,EAAS,EAAO,QAAQ,EAQ9B,GALE,CAFe,EAAO,EAAO,OAAS,IAGtC,0BAA0B,KAAK,CAAM,GACrC,oEAAoE,KAClE,CACF,EACkB,CAClB,GAAU,EACV,IACA,EAAQ,QACR,UAKJ,MAMJ,GAAI,IAAS,IAAK,CAChB,IACA,GAAU,EACV,IACA,SAEF,GAAI,IAAS,IAAK,CAChB,IAEA,IAAM,EAAQ,EAAa,EAAa,OAAS,GACjD,GAAI,GAAS,IAAe,EAAM,WAChC,EAAa,IAAI,EAEnB,GAAU,EACV,IACA,SAIF,IAAM,EAAa,EAChB,MAAM,CAAC,EACP,MAAM,wCAAwC,EACjD,GAAI,EAAY,CAEd,IAAM,EAAc,EAAW,GAAG,MAAM,EAAG,EAAE,EAC7C,GAAU,EACV,GAAK,EAAY,OAEjB,EAAa,KAAK,CAAE,KAAM,aAAc,YAAW,CAAC,EACpD,SAIF,IAAM,EAAY,EAAO,MAAM,CAAC,EAAE,MAAM,wBAAwB,EAChE,GAAI,EAAW,CACb,IAAM,EAAW,EAAU,GACrB,EAAW,EAAU,GAAG,OAGxB,EAAa,EAAO,EAAI,GAC1B,EAAiC,KACjC,EAAa,EAAI,EAErB,GAAI,IAAe,KAAO,IAAe,IAGvC,GAFA,EAAe,EACf,IACI,IAAiB,IACnB,EAAI,gBAAgB,IAAI,CAAQ,EAEhC,OAAI,cAAc,IAAI,CAAQ,EAIlC,GAAU,YAAY,KACtB,EAAI,EAGJ,IAAM,EAAe,GAAuB,EAAQ,EAAG,IAAK,GAAG,EAC/D,GAAI,CAAC,EAAc,CAEjB,GAAU,EAAO,GACjB,IACA,SAGF,IAAQ,QAAS,EAAQ,UAAW,EACpC,EAAI,EAGJ,IAAM,EAAkB,GAAmB,EAAQ,EAAK,EAAI,EAC5D,GAAU,EAAkB,IAG5B,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAElD,IAAM,EAAc,EAAO,MAAM,EAAG,EAAI,CAAC,EACzC,GACE,IAAgB,MAChB,IAAgB,MAChB,IAAgB,KAChB,CAEA,GAAK,EAEL,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAElD,IAAM,GAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,GAAY,CACd,IAAQ,OAAM,OAAQ,IAAY,GAElC,GAAI,IAAoB,QAEtB,GADA,EAAkB,EACd,IAAgB,KAClB,EAAoB,OACf,QAAI,IAAgB,KACzB,EAAoB,SAGxB,EAAI,IAGR,SAMF,IAAM,EAAc,EACjB,MAAM,CAAC,EACP,MAAM,uDAAuD,EAChE,GAAI,GAAe,EAAc,EAAG,CAElC,IAAM,EAAa,EAAY,GACzB,EAAW,EAAY,GAAG,OAC1B,EAAa,EAAI,EAEvB,GAAU,EAAa,IACvB,EAAI,EAGJ,IAAM,EAAe,GAAuB,EAAQ,EAAG,IAAK,GAAG,EAC/D,GAAI,CAAC,EAAc,CACjB,GAAU,EAAO,GACjB,IACA,SAGF,IAAQ,QAAS,EAAQ,UAAW,EACpC,EAAI,EAGJ,IAAM,EAAkB,GAAmB,EAAQ,EAAK,EAAI,EAC5D,GAAU,EAAkB,IAG5B,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAGlD,IAAM,EAAc,EAAO,MAAM,EAAG,EAAI,CAAC,EACzC,GACE,IAAgB,MAChB,IAAgB,MAChB,IAAgB,KAChB,CACA,GAAK,EACL,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,IAAM,EAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,EACF,EAAI,EAAW,OAId,QAAI,EAAO,KAAO,IAAK,CAC1B,IACA,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,IAAM,EAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,EACF,EAAI,EAAW,OAInB,SAKF,GAAI,EAAO,KAAO,IAAK,CAGrB,IAAM,EAAmB,GAAuB,EAAQ,EAAI,EAAG,IAAK,GAAG,EACvE,GAAI,CAAC,EAAkB,CACrB,GAAU,EAAO,GACjB,IACA,SAGF,IAAqC,QAA/B,EAC0B,OAA1B,GAAS,EAGX,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAGlD,IAAI,EACE,EAAc,EAAO,MAAM,EAAG,EAAI,CAAC,EACzC,GACE,IAAgB,MAChB,IAAgB,MAChB,IAAgB,KAChB,CACA,GAAK,EACL,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,IAAM,EAAa,GAAuB,EAAQ,CAAC,EACnD,GAAI,EAAY,CACd,EAAkB,EAAW,KAC7B,EAAI,EAAW,OACf,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,KAItD,GAAI,EAAO,MAAM,EAAG,EAAI,CAAC,IAAM,KAAM,CAEnC,IAAI,EAAiC,KACjC,EAAS,EAGP,EAAiB,EAAY,UAAU,EAC7C,GACE,EAAe,WAAW,GAAG,IAC5B,EAAe,SAAW,GAAK,KAAK,KAAK,EAAe,EAAE,GAE3D,EAAe,IACf,EAAS,EAAe,MAAM,CAAC,EAC1B,QACL,EAAe,WAAW,GAAG,IAC5B,EAAe,SAAW,GAAK,KAAK,KAAK,EAAe,EAAE,GAE3D,EAAe,IACf,EAAS,EAAe,MAAM,CAAC,EAIjC,IAAM,EAAkB,GAAmB,EAAQ,EAAK,EAAK,EAQ7D,GAAU,IALR,IAAiB,IACb,cACA,IAAiB,IACjB,gBACA,KACwB,KAE9B,EAAI,EAEJ,MAAO,EAAI,GAAK,KAAK,KAAK,EAAO,EAAE,EACjC,GAAU,EAAO,GACjB,IAGF,GAAI,EACF,EAAI,EAED,KAGL,IAAM,EAAc,GAA0B,EAAa,CAAG,EAC9D,GAAU,IAAI,EAAY,UAC1B,EAAI,EAEN,SAGF,GAAU,EAAO,GACjB,IAGF,MAAO,CACL,OAAQ,EACR,WAAY,EACZ,aAAc,CAChB,EAWF,SAAS,EAAsB,CAC7B,EACA,EACA,EACA,EAC4C,CAC5C,IAAI,EAAQ,EACR,EAAI,EACJ,EAAW,GACX,EAAa,GAEjB,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GAGpB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KACzD,EAAW,GACX,EAAa,EACR,QAAI,GAAY,IAAS,GAAc,EAAO,EAAI,KAAO,KAC9D,EAAW,GACN,QAAI,CAAC,GACV,GAAI,IAAS,EAAM,IACd,QAAI,IAAS,EAAO,IAE3B,IAGF,GAAI,IAAU,EAAG,OAAO,KAExB,MAAO,CACL,QAAS,EAAO,MAAM,EAAO,EAAI,CAAC,EAClC,OAAQ,CACV,EAQK,SAAS,EAAc,CAC5B,EACA,EAC0C,CAC1C,IAAI,EAAI,EAGR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,GAAK,EAAO,OAAQ,OAAO,KAE/B,IAAM,EAAa,EACb,EAAY,EAAO,GAGzB,GAAI,IAAc,KAAO,IAAc,IAAK,CAC1C,IAAM,EAAQ,IAAc,IAAM,IAAM,IAClC,EAAS,GAAuB,EAAQ,EAAI,EAAG,EAAW,CAAK,EACrE,GAAI,CAAC,EAAQ,OAAO,KACpB,MAAO,CACL,MAAO,EAAO,MAAM,EAAY,EAAO,MAAM,EAC7C,OAAQ,EAAO,MACjB,EAIF,GAAI,IAAc,KAAO,IAAc,KAAO,IAAc,IAAK,CAC/D,IACA,MAAO,EAAI,EAAO,OAAQ,CACxB,GAAI,EAAO,KAAO,GAAa,EAAO,EAAI,KAAO,KAE/C,OADA,IACO,CAAE,MAAO,EAAO,MAAM,EAAY,CAAC,EAAG,OAAQ,CAAE,EAEzD,IAEF,OAAO,KAIT,GAAI,SAAS,KAAK,CAAS,EAAG,CAC5B,MAAO,EAAI,EAAO,QAAU,YAAY,KAAK,EAAO,EAAE,EAAG,IACzD,MAAO,CAAE,MAAO,EAAO,MAAM,EAAY,CAAC,EAAG,OAAQ,CAAE,EAIzD,IAAM,EAAe,EAAO,MAAM,CAAC,EAAE,MAAM,gCAAgC,EAC3E,GAAI,EACF,MAAO,CACL,MAAO,EAAa,GACpB,OAAQ,EAAI,EAAa,GAAG,MAC9B,EAGF,OAAO,KAOT,SAAS,EAAoB,CAAC,EAAsB,CAGlD,OAAO,EAAK,QAAQ,mBAAoB,MAAM,EAOhD,SAAS,EAAsB,CAC7B,EACA,EACyC,CACzC,IAAI,EAAI,EACJ,EAAQ,EACR,EAAW,GACX,EAAa,GACb,EAAa,GAGX,EAAa,CAAC,KAAoB,CACtC,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAM,EAAE,KAAK,CAAC,EAC7D,QACF,GAEA,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GAGpB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KAAM,CAC/D,EAAW,GACX,EAAa,EACb,EAAa,GACb,IACA,SAEF,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,EAAO,EAAI,KAAO,KAAM,CAIjD,GAHA,EAAW,GACX,IAEI,IAAU,EAAG,CAEf,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,EAAO,KAAO,KAGhB,GAAI,CADe,EAAO,MAAM,EAAI,CAAC,EAAE,MAAM,eAAe,EAG1D,OAAO,EAAW,CAAC,EAGvB,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IAErC,OAAO,EAAW,CAAC,EAGvB,SAEF,IACA,SAIF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAChD,IACA,EAAa,GACb,IACA,SAEF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAAK,CAEhD,GADA,IACI,IAAU,EAAG,CACf,IAEA,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IACrC,SAEF,OAAO,EAAW,CAAC,EAErB,IACA,SAIF,GAAI,IAAU,GAAK,IAAS,IAAK,CAC/B,GAAI,EACF,OAAO,EAAW,CAAC,EAIrB,GADmB,EAAO,MAAM,EAAI,CAAC,EAAE,MAAM,eAAe,EAC5C,CACd,IACA,EAAa,GACb,IACA,SAEF,OAAO,EAAW,CAAC,EAIrB,GAAI,IAAU,IAAM,IAAS,KAAO,IAAS,KAAM,CAEjD,GADA,IACI,EAAI,EAAO,QAAU,EAAO,KAAO,IAAK,IAC5C,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,SAIF,GACE,IAAU,IACT,KAAK,KAAK,CAAI,GAAM,IAAS,KAAO,KAAK,KAAK,EAAO,EAAI,EAAE,GAC5D,CACA,IAAI,EAAI,EACR,GAAI,EAAO,KAAO,IAAK,IACvB,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAElD,GAAI,EAAI,EAAO,QAAU,EAAO,KAAO,KAAO,KAAK,KAAK,EAAO,EAAI,EAAE,EAAG,CACtE,IACA,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAGpD,GAAI,EAAI,EAAO,SAAW,EAAO,KAAO,KAAO,EAAO,KAAO,KAAM,CAEjE,GADA,IACI,EAAI,EAAO,SAAW,EAAO,KAAO,KAAO,EAAO,KAAO,KAAM,IACnE,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAEpD,EAAa,GACb,EAAI,EAEJ,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,EAAI,EAAO,QAAU,EAAO,KAAO,IAErC,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAC,EAAE,KAAK,CAAC,EACxD,OAAQ,CACV,EAEF,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IACrC,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAC,EAAE,KAAK,CAAC,EACxD,OAAQ,CACV,EAEF,SAIF,GAAI,IAAU,GAAK,YAAY,KAAK,CAAI,EAAG,CACzC,IAAI,EAAI,EACR,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,EAAa,GACb,EAAI,EAEJ,MAAO,EAAI,EAAO,QAAU,KAAK,KAAK,EAAO,EAAE,EAAG,IAClD,GAAI,EAAI,EAAO,QAAU,EAAO,KAAO,KAGrC,GAAI,CADe,EAAO,MAAM,EAAI,CAAC,EAAE,MAAM,eAAe,EAC3C,CAEf,IAAI,EAAU,EACd,MAAO,EAAU,GAAS,KAAK,KAAK,EAAO,EAAU,EAAE,EAAG,IAC1D,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAO,EAAE,KAAK,CAAC,EAC9D,OAAQ,CACV,GAGJ,GAAI,EAAO,KAAO,KAAO,EAAO,KAAO,IACrC,MAAO,CACL,KAAM,GAAqB,EAAO,MAAM,EAAO,CAAC,EAAE,KAAK,CAAC,EACxD,OAAQ,CACV,EAEF,SAGF,IAIF,GAAI,EACF,OAAO,EAAW,CAAC,EAErB,OAAO,KAMT,SAAS,EAAe,CAAC,EAA0B,CACjD,IAAM,EAAmB,CAAC,EACtB,EAAU,GACV,EAAQ,EACR,EAAgB,GAChB,EAAiB,GACjB,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CACxB,IAAM,EAAO,EAAO,GACd,EAAW,EAAO,EAAI,GAG5B,GAAI,CAAC,GAAkB,IAAS,KAAO,IAAa,IAAK,CACvD,EAAgB,GAChB,GAAW,KACX,GAAK,EACL,SAIF,GAAI,CAAC,GAAiB,IAAS,KAAO,IAAa,IAAK,CACtD,EAAiB,GACjB,GAAW,KACX,GAAK,EACL,SAIF,GAAI,GAAiB,IAAS;AAAA,EAAM,CAClC,EAAgB,GAChB,GAAW,EACX,IACA,SAIF,GAAI,GAAkB,IAAS,KAAO,IAAa,IAAK,CACtD,EAAiB,GACjB,GAAW,KACX,GAAK,EACL,SAIF,GAAI,GAAiB,EAAgB,CACnC,GAAW,EACX,IACA,SAGF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAC3C,IACA,GAAW,EACN,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAClD,IACA,GAAW,EACN,QAAI,IAAS,KAAO,IAAU,EACnC,EAAO,KAAK,CAAO,EACnB,EAAU,GAEV,QAAW,EAEb,IAGF,GAAI,EAAQ,KAAK,EACf,EAAO,KAAK,CAAO,EAGrB,OAAO,EAOT,SAAS,EAAkB,CACzB,EACA,EAKA,EACQ,CAER,IAAM,EAAa,GAA0B,EAAQ,CACnD,eAAgB,EAChB,eAAgB,EAAI,eACpB,gBAAiB,EAAI,gBACrB,cAAe,EAAI,aACrB,CAAC,EAAE,OAGG,EAAY,GAAgB,CAAU,EACxC,EAAc,GACZ,EAAY,IAAI,IAGhB,EAAiB,CAAC,IAAiB,CACvC,GAAI,GAAiB,QAAQ,KAAK,CAAI,EAAG,CACvC,GAAI,EAAU,IAAI,CAAI,EACpB,MAAU,MAAM,6BAA6B,IAAO,EAEtD,EAAU,IAAI,CAAI,IAmFtB,OA/EkB,EAAU,IAAI,CAAC,IAAU,CACzC,IAAM,EAAU,EAAM,KAAK,EAC3B,GAAI,CAAC,EAAS,OAAO,EAMrB,GAAI,GAAiB,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EAAG,CACrE,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAEjC,MAAO,KADgB,GAAgC,EAAO,CAAG,MAMnE,GAAI,GAAiB,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EAAG,CACrE,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAEjC,MAAO,KADgB,GAAgC,EAAO,CAAG,MAMnE,GAAI,EAAQ,WAAW,KAAK,EAAG,CAC7B,IAAM,EAAe,GAAkB,CAAO,EAC9C,GAAI,IAAiB,GAEnB,OADiB,EAAQ,MAAM,EAAG,CAAY,EAAE,KAAK,EAGvD,OAAO,EAIT,IAAM,EAAgB,EAAQ,MAAM,yBAAyB,EAC7D,GAAI,EAAe,CACjB,KAAS,EAAM,GAAQ,EAIvB,OAHA,EAAe,CAAI,EACnB,EAAc,GAEP,GAAG,OAAU,IAItB,GAAI,CAAC,GAAkB,CAAO,EAAG,CAG/B,IAAM,EAAU,EAAQ,MAAM,YAAY,EAC1C,GAAI,EACF,EAAe,EAAQ,EAAE,EAG3B,OADA,EAAc,GACP,EAIT,IAAM,EAAW,GAAkB,CAAO,EAC1C,GAAI,IAAa,GAAI,CACnB,IAAM,EAAO,EAAQ,MAAM,EAAG,CAAQ,EAAE,KAAK,EACvC,EAAO,EAAQ,MAAM,EAAW,CAAC,EAAE,KAAK,EAO9C,GALA,EAAe,CAAI,EAKf,GAAe,GAAiB,QAAQ,KAAK,CAAI,EAAG,CAIxD,GAAI,GAAiB,QAAQ,KAAK,CAAI,EACpC,EAAI,eAAe,IAAI,CAAI,EAE7B,MAAO,GAAG,OAAU,IAGtB,OAAO,EACR,EAEgB,KAAK,GAAG,EAiB3B,SAAS,EAA+B,CACtC,EACA,EAKQ,CA0CR,OAxCc,GAAgB,CAAK,EAEX,IAAI,CAAC,IAAS,CACpC,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,CAAC,EAAS,OAAO,EAIrB,IAAM,EAAoB,EAAQ,MAAM,6BAA6B,EACrE,GAAI,EAAmB,CACrB,KAAS,EAAM,GAAiB,EAChC,EAAI,eAAe,IAAI,CAAI,EAE3B,IAAM,EAAmB,GAA0B,CAAa,EAChE,MAAO,GAAG,OAAU,IAItB,IAAM,EAAmB,EAAQ,MAAM,6BAA6B,EACpE,GAAI,EAAkB,CACpB,KAAS,EAAM,GAAgB,EAC/B,EAAI,eAAe,IAAI,CAAI,EAE3B,IAAM,EAAmB,GAAyB,CAAY,EAC9D,MAAO,GAAG,OAAU,IAItB,IAAM,EAAa,EAAQ,MAAM,yBAAyB,EAC1D,GAAI,EAAY,CACd,KAAS,EAAM,GAAS,EAExB,OADA,EAAI,eAAe,IAAI,CAAI,EACpB,GAAG,OAAU,IAKtB,OAAO,EACR,EAEgB,KAAK,IAAI,EAe5B,SAAS,EAAyB,CAAC,EAAyB,CAE1D,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAAE,KAAK,EA0CxC,MAAO,KAzCO,GAAgB,CAAK,EAEX,IAAI,CAAC,IAAS,CACpC,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,CAAC,EAAS,OAAO,EAGrB,IAAM,EAAsB,EAAQ,MAAM,6BAA6B,EACvE,GAAI,EAAqB,CACvB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAA0B,CAAM,IAEpD,IAAM,EAAuB,EAAQ,MAAM,6BAA6B,EACxE,GAAI,EAAsB,CACxB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAA0B,CAAM,IAIpD,IAAM,EAAsB,EAAQ,MAAM,6BAA6B,EACvE,GAAI,EAAqB,CACvB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAAyB,CAAM,IAEnD,IAAM,EAAuB,EAAQ,MAAM,6BAA6B,EACxE,GAAI,EAAsB,CACxB,KAAS,EAAK,GAAU,EACxB,MAAO,GAAG,MAAQ,GAAyB,CAAM,IAInD,IAAM,EAAc,EAAQ,MAAM,yBAAyB,EAC3D,GAAI,EAAa,CACf,KAAS,EAAK,GAAS,EACvB,MAAO,GAAG,MAAQ,IAIpB,OAAO,EACR,EAEqB,KAAK,IAAI,MAOjC,SAAS,EAAwB,CAAC,EAAyB,CAEzD,IAAM,EAAQ,EAAQ,MAAM,EAAG,EAAE,EAAE,KAAK,EAqBxC,MAAO,KApBO,GAAgB,CAAK,EAEX,IAAI,CAAC,IAAS,CACpC,IAAM,EAAU,EAAK,KAAK,EAC1B,GAAI,CAAC,EAAS,OAAO,EAGrB,GAAI,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EACjD,OAAO,GAA0B,CAAO,EAI1C,GAAI,EAAQ,WAAW,GAAG,GAAK,EAAQ,SAAS,GAAG,EACjD,OAAO,GAAyB,CAAO,EAIzC,OAAO,EACR,EAEqB,KAAK,IAAI,MAOjC,SAAS,EAAiB,CAAC,EAAwB,CACjD,IAAI,EAAQ,EACR,EAAW,GACX,EAAY,GACZ,EAAW,GACX,EAAa,GAEjB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GAEnB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KAAM,CAC/D,EAAW,GACX,EAAa,EACb,SAEF,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,EAAM,EAAI,KAAO,KAAM,EAAW,GAC7D,SAGF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAC3C,IACK,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAClD,IACK,QAAI,IAAU,EAAG,CACtB,GAAI,IAAS,IAAK,EAAW,GAC7B,GAAI,IAAS,KAAO,EAAM,EAAI,KAAO,IAAK,EAAY,IAI1D,OAAO,GAAY,CAAC,EAMtB,SAAS,EAAiB,CAAC,EAAuB,CAChD,IAAI,EAAQ,EACR,EAAW,GACX,EAAa,GAEjB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,IAAM,EAAO,EAAM,GAEnB,GAAI,CAAC,IAAa,IAAS,KAAO,IAAS,KAAO,IAAS,KAAM,CAC/D,EAAW,GACX,EAAa,EACb,SAEF,GAAI,EAAU,CACZ,GAAI,IAAS,GAAc,EAAM,EAAI,KAAO,KAAM,EAAW,GAC7D,SAGF,GAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAC3C,IACK,QAAI,IAAS,KAAO,IAAS,KAAO,IAAS,IAClD,IACK,QAAI,IAAU,GAAK,IAAS,IACjC,OAAO,EAIX,MAAO,GChrCF,SAAS,EAAwB,CAAC,EAAwB,CAC/D,IAAI,EAAS,GACT,EAAI,EAER,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAW,EAAO,MAAM,CAAC,EAAE,MAAM,aAAa,EACpD,GAAI,EAAU,CAGZ,IAAM,EADa,EAAI,EAAS,GAAG,OAAS,EACb,EAC3B,EAAQ,EACR,EAAI,EAER,MAAO,EAAI,EAAO,QAAU,EAAQ,EAAG,CACrC,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAU,EAAG,CAEf,GAAU,EAAO,GACjB,IACA,SAMF,GAFiB,EAAO,MAAM,CAAC,EAAE,MAAM,uBAAuB,EAI5D,GAAU,EAAO,MAAM,EAAG,CAAC,EAC3B,EAAI,EACC,KAGL,IAAM,EAAO,EAAO,MAAM,EAAW,EAAI,CAAC,EAC1C,GAAU,QAAQ,gKAClB,EAAI,GAGN,QAAU,EAAO,GACjB,IAIJ,OAAO,EAyBF,SAAS,EAAiB,CAAC,EAGhC,CACA,IAAM,EAAsB,CAAC,EACzB,EAAS,GACT,EAAI,EACJ,EAAU,EAEd,MAAO,EAAI,EAAO,OAAQ,CAExB,IAAM,EAAY,EAAO,MAAM,CAAC,EAAE,MAAM,cAAc,EACtD,GAAI,EAAW,CACb,IAAM,EAAa,EAGb,EAAY,EAAI,EAAU,GAAG,OAC/B,EAAa,EACb,EAAI,EAER,MAAO,EAAI,EAAO,QAAU,EAAa,EAAG,CAC1C,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAe,EAAG,CACpB,GAAU,EAAO,GACjB,IACA,SAGF,IAAM,EAAO,EAAO,MAAM,EAAW,EAAI,CAAC,EACtC,EACA,EAAW,EAGT,EAAgB,EAAO,MAAM,CAAC,EAAE,MAAM,mBAAmB,EAC/D,GAAI,EAAe,CACjB,IAAM,EAAgB,EAAI,EAAc,GAAG,OAC3C,EAAa,EACb,IAAI,EAAI,EAER,MAAO,EAAI,EAAO,QAAU,EAAa,EAAG,CAC1C,IAAM,EAAO,EAAO,GACpB,GAAI,IAAS,IAAK,IACb,QAAI,IAAS,IAAK,IACvB,IAGF,GAAI,IAAe,EACjB,EAAe,EAAO,MAAM,EAAe,EAAI,CAAC,EAChD,EAAW,EASf,IAAM,EAJe,GAAe,CAAI,EAIV,IAAI,CAAC,IAAS,CAC1C,IAAM,EAAiB,GAAkB,EAAQ,EAAY,CAAI,EACjE,OAAO,EAAiB,GAAG,MAAS,IAAmB,EACxD,EAGK,EAAmB,CACvB,GAAI,cAAc,IAClB,OACA,SAAU,EACV,WACA,MAAO,EACP,IAAK,CACP,EACA,EAAO,KAAK,CAAK,EAIjB,IAAM,EAAe,GAAgB,EAE/B,EAAkB,EAAS,IAAI,CAAC,IAAM,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,EAC5D,EACJ,EAAgB,OAAS,EAAI,EAAgB,KAAK,IAAI,EAAI,GAItD,EACJ,EAAgB,OAAS,EACrB,cAAc,EAAM,MAAM,KAC1B,cAAc,EAAM,OAEpB,EAAW,eAAe,EAAM,QAAQ,eAAsB,SAEpE,GAAU,EACV,EAAI,EACJ,IAEA,QAAU,EAAO,GACjB,IAIJ,MAAO,CAAE,OAAQ,EAAQ,QAAO,EAIlC,SAAS,EAAe,CAAC,EAAuB,CAC9C,OAAO,EAAK,WAAW,QAAQ,GAAK,EAAK,WAAW,OAAO,EAY7D,SAAS,EAAc,CAAC,EAAwB,CAE9C,IAAM,EAAsB,EACzB,QAAQ,cAAe,EAAE,EACzB,QAAQ,oBAAqB,EAAE,EAG5B,EAAe,IAAI,IACnB,EAAc,kCAChB,EACJ,OAAQ,EAAQ,EAAY,KAAK,CAAmB,KAAO,KACzD,EAAa,IAAI,EAAM,EAAE,EAI3B,IAAM,EAAoB,yCACpB,EAAiB,IAAI,IAC3B,OAAQ,EAAQ,EAAkB,KAAK,CAAmB,KAAO,KAC/D,EAAe,IAAI,EAAM,EAAE,EAI7B,QAAW,KAAQ,EAAc,CAC/B,GAAI,CAAC,EAAe,IAAI,CAAI,EAAG,SAE/B,IAAM,EAAoB,IAAI,OAAO,cAAc,OAAW,GAAG,EAC3D,EAAa,IAAI,OAAO,MAAM,OAAW,GAAG,EAC5C,EACJ,EAAoB,MAAM,CAAiB,GAAG,QAAU,EACpD,EAAa,EAAoB,MAAM,CAAU,GAAG,QAAU,EAEpE,GAAI,GAAqB,EACvB,EAAe,OAAO,CAAI,EAK9B,IAAM,EAAW,IAAI,IAGf,EAAc,oDACpB,OAAQ,EAAQ,EAAY,KAAK,CAAmB,KAAO,KACzD,EAAS,IAAI,EAAM,EAAE,EAIvB,IAAM,EACJ,+DACF,OAAQ,EAAQ,EAAW,KAAK,CAAmB,KAAO,KACxD,EAAS,IAAI,EAAM,EAAE,EAMvB,IAAM,EAAW,IAAI,IAAI,CACvB,KACA,OACA,MACA,QACA,KACA,SACA,OACA,QACA,WACA,SACA,WACA,MACA,QACA,MACA,MACA,OACA,OACA,QACA,OACA,YACA,SACA,aACA,KACA,KACA,MACA,QACA,UACA,QACA,QACA,QACA,QACA,UACA,QACA,SACA,SACA,UACA,OACA,KACA,SACA,MACA,MACA,QAEA,UACA,OACA,QACA,SACA,SACA,SACA,UACA,OACA,OACA,UACA,MACA,MACA,UACA,UACA,eACA,eACA,YACA,aACA,aACA,aACA,cACA,cACA,gBACA,iBACA,cACA,WACA,QACA,YACA,aACA,SACA,OACA,MACA,QACA,UACA,QACA,SACA,MACA,SACA,SACA,UACA,OACA,YACA,UACA,WACA,aACA,SACA,WACA,WACA,MACA,QACA,WACA,WACA,aACA,YACA,YACA,OACA,YACF,CAAC,EAGK,EAAqB,CAAC,EAC5B,QAAW,KAAM,EACf,GAAI,CAAC,EAAS,IAAI,CAAE,GAAK,CAAC,EAAS,IAAI,CAAE,GAAK,CAAC,GAAgB,CAAE,EAC/D,EAAS,KAAK,CAAE,EAIpB,OAAO,EAAS,KAAK,EAavB,SAAS,EAAiB,CACxB,EACA,EACA,EACoB,CAGpB,IAAM,EAAc,EAAO,MAAM,EAAG,CAAc,EAI5C,EAAc,uDACd,EAAQ,EAAY,MAAM,CAAW,EAE3C,GAAI,CAAC,EAAO,CAEV,IAAM,EACJ,kFACI,EAAa,EAAY,MAAM,CAAY,EACjD,GAAI,CAAC,EAAY,OACjB,OAAO,GAAsB,EAAW,GAAI,CAAS,EAGvD,OAAO,GAAsB,EAAM,GAAI,CAAS,EAMlD,SAAS,EAAqB,CAC5B,EACA,EACoB,CAEpB,IAAM,EAAS,EAAU,MAAM,GAAG,EAAE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",
|
|
20
|
+
"debugId": "931BBCE3C7EEFDA064756E2164756E21",
|
|
21
21
|
"names": []
|
|
22
22
|
}
|