@logicflow/engine 0.1.1 → 0.1.2
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/dist/index.min.js.map +1 -1
- package/package.json +4 -6
- package/src/EventEmitter.ts +0 -103
- package/src/FlowModel.ts +0 -327
- package/src/Scheduler.ts +0 -244
- package/src/constant/LogCode.ts +0 -34
- package/src/constant/index.ts +0 -25
- package/src/index.ts +0 -300
- package/src/nodes/base.ts +0 -236
- package/src/nodes/index.ts +0 -3
- package/src/nodes/start.ts +0 -8
- package/src/nodes/task.ts +0 -8
- package/src/platform/browser/browserVm.ts +0 -68
- package/src/platform/browser/index.ts +0 -28
- package/src/platform/index.ts +0 -1
- package/src/platform/node/index.ts +0 -28
- package/src/platform/node/nodeVm.ts +0 -14
- package/src/recorder/index.ts +0 -137
- package/src/utils/global.ts +0 -41
- package/src/utils/id.ts +0 -16
- package/src/utils/index.ts +0 -5
- package/src/utils/storage.ts +0 -55
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.min.js","sources":["../../../node_modules/.pnpm/@rollup+plugin-typescript@10.0.1_rollup@4.21.0_tslib@2.6.3_typescript@5.4.5/node_modules/tslib/tslib.es6.js","../src/constant/LogCode.ts","../src/constant/index.ts","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/unraw.js","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/parser.js","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/executor.js","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/Sandbox.js","../src/platform/browser/browserVm.ts","../src/platform/browser/index.ts","../src/nodes/base.ts","../src/nodes/start.ts","../src/nodes/task.ts","../src/EventEmitter.ts","../src/utils/global.ts","../src/utils/storage.ts","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/rng.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/regex.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/validate.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/stringify.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v1.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/parse.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v35.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/md5.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v3.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v4.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/sha1.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v5.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/nil.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/version.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/index.js","../src/utils/id.ts","../src/Scheduler.ts","../src/FlowModel.ts","../src/recorder/index.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export enum ErrorCode {\n // 模型数据错误\n NONE_START_NODE = 1000,\n NONE_NODE_ID = 1001,\n\n // 表达式错误\n NO_DOCUMENT_BODY = 2001,\n}\n\nexport enum WarningCode {\n NONE_START_NODE_IN_DATA = 2000,\n START_NODE_INCOMING = 2001,\n\n // 表达式判断异常\n EXPRESSION_EXEC_ERROR = 3000,\n}\n\n// TODO: 感觉这块可以用个国际化插件,这样配置不同语言加文件就可以了。\nconst errorMsgMapCn = {\n [ErrorCode.NONE_START_NODE]: '未找到入度为0的节点',\n [ErrorCode.NONE_NODE_ID]: '流程数据中存在没有此节点',\n [ErrorCode.NO_DOCUMENT_BODY]: '找不到document.body, 请在DOM加载完成后再执行',\n}\n\nconst warningMsgMapCn = {\n [WarningCode.NONE_START_NODE_IN_DATA]: '初始化数据中未找到入度为0的节点',\n [WarningCode.START_NODE_INCOMING]: '开始节点不允许被连入',\n [WarningCode.EXPRESSION_EXEC_ERROR]: '表达式执行异常',\n}\n\nexport const getErrorMsg = (code: ErrorCode) =>\n `error[${code}]: ${errorMsgMapCn[code]}`\nexport const getWarningMsg = (code: WarningCode) =>\n `warning[${code}]: ${warningMsgMapCn[code]}`\n","export * from './LogCode'\n\n// baseType\nexport const BASE_START_NODE = 'start'\n\n// eventType\nexport const EVENT_INSTANCE_COMPLETE = 'instance:complete'\nexport const EVENT_INSTANCE_INTERRUPTED = 'instance:interrupted'\nexport const EVENT_INSTANCE_ERROR = 'instance:error'\n\n// flowStatus\nexport enum FlowStatus {\n COMPLETED = 'completed',\n INTERRUPTED = 'interrupted',\n RUNNING = 'running',\n PENDING = 'pending',\n ERROR = 'error',\n}\n\n// actionStatus\nexport enum ActionStatus {\n SUCCESS = 'success',\n ERROR = 'error',\n INTERRUPTED = 'interrupted',\n}\n","/**\n * Parse a string as a base-16 number. This is more strict than `parseInt` as it\n * will not allow any other characters, including (for example) \"+\", \"-\", and\n * \".\".\n * @param hex A string containing a hexadecimal number.\n * @returns The parsed integer, or `NaN` if the string is not a valid hex\n * number.\n */\nfunction parseHexToInt(hex) {\n const isOnlyHexChars = !hex.match(/[^a-f0-9]/i);\n return isOnlyHexChars ? parseInt(hex, 16) : NaN;\n}\n/**\n * Check the validity and length of a hexadecimal code and optionally enforces\n * a specific number of hex digits.\n * @param hex The string to validate and parse.\n * @param errorName The name of the error message to throw a `SyntaxError` with\n * if `hex` is invalid. This is used to index `errorMessages`.\n * @param enforcedLength If provided, will throw an error if `hex` is not\n * exactly this many characters.\n * @returns The parsed hex number as a normal number.\n * @throws {SyntaxError} If the code is not valid.\n */\nfunction validateAndParseHex(hex, errorName, enforcedLength) {\n const parsedHex = parseHexToInt(hex);\n if (Number.isNaN(parsedHex) ||\n (enforcedLength !== undefined && enforcedLength !== hex.length)) {\n throw new SyntaxError(errorName + ': ' + hex);\n }\n return parsedHex;\n}\n/**\n * Parse a two-digit hexadecimal character escape code.\n * @param code The two-digit hexadecimal number that represents the character to\n * output.\n * @returns The single character represented by the code.\n * @throws {SyntaxError} If the code is not valid hex or is not the right\n * length.\n */\nfunction parseHexadecimalCode(code) {\n const parsedCode = validateAndParseHex(code, 'Malformed Hexadecimal', 2);\n return String.fromCharCode(parsedCode);\n}\n/**\n * Parse a four-digit Unicode character escape code.\n * @param code The four-digit unicode number that represents the character to\n * output.\n * @param surrogateCode Optional four-digit unicode surrogate that represents\n * the other half of the character to output.\n * @returns The single character represented by the code.\n * @throws {SyntaxError} If the codes are not valid hex or are not the right\n * length.\n */\nfunction parseUnicodeCode(code, surrogateCode) {\n const parsedCode = validateAndParseHex(code, 'Malformed Unicode', 4);\n if (surrogateCode !== undefined) {\n const parsedSurrogateCode = validateAndParseHex(surrogateCode, 'Malformed Unicode', 4);\n return String.fromCharCode(parsedCode, parsedSurrogateCode);\n }\n return String.fromCharCode(parsedCode);\n}\n/**\n * Test if the text is surrounded by curly braces (`{}`).\n * @param text Text to check.\n * @returns `true` if the text is in the form `{*}`.\n */\nfunction isCurlyBraced(text) {\n return text.charAt(0) === \"{\" && text.charAt(text.length - 1) === \"}\";\n}\n/**\n * Parse a Unicode code point character escape code.\n * @param codePoint A unicode escape code point, including the surrounding curly\n * braces.\n * @returns The single character represented by the code.\n * @throws {SyntaxError} If the code is not valid hex or does not have the\n * surrounding curly braces.\n */\nfunction parseUnicodeCodePointCode(codePoint) {\n if (!isCurlyBraced(codePoint)) {\n throw new SyntaxError('Malformed Unicode: +' + codePoint);\n }\n const withoutBraces = codePoint.slice(1, -1);\n const parsedCode = validateAndParseHex(withoutBraces, 'Malformed Unicode');\n try {\n return String.fromCodePoint(parsedCode);\n }\n catch (err) {\n throw err instanceof RangeError\n ? new SyntaxError('Code Point Limit:' + parsedCode)\n : err;\n }\n}\n/**\n * Map of unescaped letters to their corresponding special JS escape characters.\n * Intentionally does not include characters that map to themselves like \"\\'\".\n */\nconst singleCharacterEscapes = new Map([\n [\"b\", \"\\b\"],\n [\"f\", \"\\f\"],\n [\"n\", \"\\n\"],\n [\"r\", \"\\r\"],\n [\"t\", \"\\t\"],\n [\"v\", \"\\v\"],\n [\"0\", \"\\0\"]\n]);\n/**\n * Parse a single character escape sequence and return the matching character.\n * If none is matched, defaults to `code`.\n * @param code A single character code.\n */\nfunction parseSingleCharacterCode(code) {\n return singleCharacterEscapes.get(code) || code;\n}\n/**\n * Matches every escape sequence possible, including invalid ones.\n *\n * All capture groups (described below) are unique (only one will match), except\n * for 4, which can only potentially match if 3 does.\n *\n * **Capture Groups:**\n * 0. A single backslash\n * 1. Hexadecimal code\n * 2. Unicode code point code with surrounding curly braces\n * 3. Unicode escape code with surrogate\n * 4. Surrogate code\n * 5. Unicode escape code without surrogate\n * 6. Octal code _NOTE: includes \"0\"._\n * 7. A single character (will never be \\, x, u, or 0-3)\n */\nconst escapeMatch = /\\\\(?:(\\\\)|x([\\s\\S]{0,2})|u(\\{[^}]*\\}?)|u([\\s\\S]{4})\\\\u([^{][\\s\\S]{0,3})|u([\\s\\S]{0,4})|([0-3]?[0-7]{1,2})|([\\s\\S])|$)/g;\n/**\n * Replace raw escape character strings with their escape characters.\n * @param raw A string where escape characters are represented as raw string\n * values like `\\'` rather than `'`.\n * @param allowOctals If `true`, will process the now-deprecated octal escape\n * sequences (ie, `\\111`).\n * @returns The processed string, with escape characters replaced by their\n * respective actual Unicode characters.\n */\nexport function unraw(raw) {\n return raw.replace(escapeMatch, function (_, backslash, hex, codePoint, unicodeWithSurrogate, surrogate, unicode, octal, singleCharacter) {\n // Compare groups to undefined because empty strings mean different errors\n // Otherwise, `\\u` would fail the same as `\\` which is wrong.\n if (backslash !== undefined) {\n return \"\\\\\";\n }\n if (hex !== undefined) {\n return parseHexadecimalCode(hex);\n }\n if (codePoint !== undefined) {\n return parseUnicodeCodePointCode(codePoint);\n }\n if (unicodeWithSurrogate !== undefined) {\n return parseUnicodeCode(unicodeWithSurrogate, surrogate);\n }\n if (unicode !== undefined) {\n return parseUnicodeCode(unicode);\n }\n if (octal === \"0\") {\n return \"\\0\";\n }\n if (octal !== undefined) {\n throw new SyntaxError('Octal Deprecation: ' + octal);\n }\n if (singleCharacter !== undefined) {\n return parseSingleCharacterCode(singleCharacter);\n }\n throw new SyntaxError('End of string');\n });\n}\nexport default unraw;\n","import unraw from \"./unraw.js\";\nfunction createLisp(obj) {\n return [obj.op, obj.a, obj.b];\n}\nlet lispTypes = new Map();\nexport class ParseError extends Error {\n constructor(message, code) {\n super(message + \": \" + code.substring(0, 40));\n this.code = code;\n }\n}\nconst inlineIfElse = /^:/;\nconst elseIf = /^else(?![\\w\\$])/;\nconst ifElse = /^if(?![\\w\\$])/;\nconst space = /^\\s/;\nexport let expectTypes = {\n splitter: {\n types: {\n opHigh: /^(\\/|\\*\\*|\\*(?!\\*)|\\%)(?!\\=)/,\n op: /^(\\+(?!(\\+))|\\-(?!(\\-)))(?!\\=)/,\n comparitor: /^(<=|>=|<(?!<)|>(?!>)|!==|!=(?!\\=)|===|==)/,\n boolOp: /^(&&|\\|\\||instanceof(?![\\w\\$])|in(?![\\w\\$]))/,\n bitwise: /^(&(?!&)|\\|(?!\\|)|\\^|<<|>>(?!>)|>>>)(?!\\=)/,\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n ]\n },\n inlineIf: {\n types: {\n inlineIf: /^\\?(?!\\.(?!\\d))/,\n },\n next: [\n 'expEnd'\n ]\n },\n assignment: {\n types: {\n assignModify: /^(\\-=|\\+=|\\/=|\\*\\*=|\\*=|%=|\\^=|\\&=|\\|=|>>>=|>>=|<<=)/,\n assign: /^(=)(?!=)/\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n ]\n },\n incrementerBefore: {\n types: { incrementerBefore: /^(\\+\\+|\\-\\-)/ },\n next: [\n 'prop',\n ]\n },\n expEdge: {\n types: {\n call: /^(\\?\\.)?[\\(]/,\n incrementerAfter: /^(\\+\\+|\\-\\-)/\n },\n next: [\n 'splitter',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n modifier: {\n types: {\n not: /^!/,\n inverse: /^~/,\n negative: /^\\-(?!\\-)/,\n positive: /^\\+(?!\\+)/,\n typeof: /^typeof(?![\\w\\$])/,\n delete: /^delete(?![\\w\\$])/,\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n ]\n },\n dot: {\n types: {\n arrayProp: /^(\\?\\.)?\\[/,\n dot: /^(\\?)?\\.(?=\\s*[a-zA-Z\\$\\_])/,\n },\n next: [\n 'splitter',\n 'assignment',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n prop: {\n types: {\n prop: /^[a-zA-Z\\$\\_][a-zA-Z\\d\\$\\_]*/,\n },\n next: [\n 'splitter',\n 'assignment',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n value: {\n types: {\n createObject: /^\\{/,\n createArray: /^\\[/,\n number: /^(0x[\\da-f]+(_[\\da-f]+)*|(\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?|\\.\\d+(_\\d+)*))(e[\\+\\-]?\\d+(_\\d+)*)?(n)?(?!\\d)/i,\n string: /^\"(\\d+)\"/,\n literal: /^`(\\d+)`/,\n regex: /^\\/(\\d+)\\/r(?![\\w\\$])/,\n boolean: /^(true|false)(?![\\w\\$])/,\n null: /^null(?![\\w\\$])/,\n und: /^undefined(?![\\w\\$])/,\n arrowFunctionSingle: /^(async\\s+)?([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*=>\\s*({)?/,\n arrowFunction: /^(async\\s*)?\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)*)?\\s*\\)\\s*=>\\s*({)?/,\n inlineFunction: /^(async\\s+)?function(\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)?\\s*\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)*)?\\s*\\)\\s*{/,\n group: /^\\(/,\n NaN: /^NaN(?![\\w\\$])/,\n Infinity: /^Infinity(?![\\w\\$])/,\n void: /^void(?![\\w\\$])\\s*/,\n await: /^await(?![\\w\\$])\\s*/,\n new: /^new(?![\\w\\$])\\s*/,\n },\n next: [\n 'splitter',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n initialize: {\n types: {\n initialize: /^(var|let|const)\\s+([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*(=)?/,\n return: /^return(?![\\w\\$])/,\n throw: /^throw(?![\\w\\$])\\s*/\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n 'expEnd'\n ]\n },\n spreadObject: {\n types: {\n spreadObject: /^\\.\\.\\./\n },\n next: [\n 'value',\n 'prop',\n ]\n },\n spreadArray: {\n types: {\n spreadArray: /^\\.\\.\\./\n },\n next: [\n 'value',\n 'prop',\n ]\n },\n expEnd: { types: {}, next: [] },\n expFunction: {\n types: {\n function: /^(async\\s+)?function(\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)*)?\\s*\\)\\s*{/,\n },\n next: [\n 'expEdge',\n 'expEnd'\n ]\n },\n expSingle: {\n types: {\n for: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*for\\s*\\(/,\n do: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*do(?![\\w\\$])\\s*(\\{)?/,\n while: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*while\\s*\\(/,\n loopAction: /^(break|continue)(?![\\w\\$])\\s*([a-zA-Z\\$\\_][\\w\\$]*)?/,\n if: /^((([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*)if\\s*\\(/,\n try: /^try\\s*{/,\n block: /^{/,\n switch: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*switch\\s*\\(/,\n },\n next: [\n 'expEnd'\n ]\n }\n};\nlet closings = {\n \"(\": \")\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"'\": \"'\",\n '\"': '\"',\n \"`\": \"`\"\n};\nexport function testMultiple(str, tests) {\n let found;\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n found = test.exec(str);\n if (found)\n break;\n }\n return found;\n}\nexport class CodeString {\n constructor(str) {\n this.ref = { str: \"\" };\n if (str instanceof CodeString) {\n this.ref = str.ref;\n this.start = str.start;\n this.end = str.end;\n }\n else {\n this.ref.str = str;\n this.start = 0;\n this.end = str.length;\n }\n }\n substring(start, end) {\n if (!this.length)\n return this;\n start = this.start + start;\n if (start < 0) {\n start = 0;\n }\n if (start > this.end) {\n start = this.end;\n }\n end = end === undefined ? this.end : this.start + end;\n if (end < 0) {\n end = 0;\n }\n if (end > this.end) {\n end = this.end;\n }\n const code = new CodeString(this);\n code.start = start;\n code.end = end;\n return code;\n }\n get length() {\n const len = this.end - this.start;\n return len < 0 ? 0 : len;\n }\n char(i) {\n if (this.start === this.end)\n return undefined;\n return this.ref.str[this.start + i];\n }\n toString() {\n return this.ref.str.substring(this.start, this.end);\n }\n trimStart() {\n const found = /^\\s+/.exec(this.toString());\n const code = new CodeString(this);\n if (found) {\n code.start += found[0].length;\n }\n return code;\n }\n slice(start, end) {\n if (start < 0) {\n start = this.end - this.start + start;\n }\n if (start < 0) {\n start = 0;\n }\n if (end === undefined) {\n end = this.end - this.start;\n }\n if (end < 0) {\n end = this.end - this.start + end;\n }\n if (end < 0) {\n end = 0;\n }\n return this.substring(start, end);\n }\n trim() {\n const code = this.trimStart();\n const found = /\\s+$/.exec(code.toString());\n if (found) {\n code.end -= found[0].length;\n }\n return code;\n }\n valueOf() {\n return this.toString();\n }\n}\nconst emptyString = new CodeString(\"\");\nconst okFirstChars = /^[\\+\\-~ !]/;\nconst aChar = /^[\\w\\$]/;\nconst aNumber = expectTypes.value.types.number;\nconst wordReg = /^((if|for|else|while|do|function)(?![\\w\\$])|[\\w\\$]+)/;\nconst semiColon = /^;/;\nconst insertedSemicolons = new WeakMap();\nconst quoteCache = new WeakMap();\nexport function restOfExp(constants, part, tests, quote, firstOpening, closingsTests, details = {}) {\n if (!part.length) {\n return part;\n }\n details.words = details.words || [];\n let isStart = true;\n tests = tests || [];\n const hasSemiTest = tests.includes(semiColon);\n if (hasSemiTest) {\n tests = tests.filter((a) => a !== semiColon);\n }\n const insertedSemis = insertedSemicolons.get(part.ref) || [];\n const cache = quoteCache.get(part.ref) || new Map();\n quoteCache.set(part.ref, cache);\n if (quote && cache.has(part.start - 1)) {\n return part.substring(0, cache.get(part.start - 1) - part.start);\n }\n let escape = false;\n let done = false;\n let lastChar = \"\";\n let isOneLiner = false;\n let i;\n let lastInertedSemi = false;\n for (i = 0; i < part.length && !done; i++) {\n let char = part.char(i);\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n if (quote === \"`\" && char === \"$\" && part.char(i + 1) === \"{\" && !escape) {\n let skip = restOfExp(constants, part.substring(i + 2), [], \"{\");\n i += skip.length + 2;\n }\n else if (char === quote && !escape) {\n return part.substring(0, i);\n }\n escape = !escape && char === \"\\\\\";\n }\n else if (closings[char]) {\n if (!lastInertedSemi && insertedSemis[i + part.start]) {\n lastInertedSemi = true;\n if (hasSemiTest) {\n break;\n }\n i--;\n lastChar = ';';\n continue;\n }\n if (isOneLiner && char === \"{\") {\n isOneLiner = false;\n }\n if (char === firstOpening) {\n done = true;\n break;\n }\n else {\n let skip = restOfExp(constants, part.substring(i + 1), [], char);\n cache.set(skip.start - 1, skip.end);\n i += skip.length + 1;\n isStart = false;\n if (closingsTests) {\n let sub = part.substring(i);\n let found;\n if (found = testMultiple(sub.toString(), closingsTests)) {\n details.regRes = found;\n done = true;\n }\n }\n }\n }\n else if (!quote) {\n let sub = part.substring(i).toString();\n let foundWord;\n let foundNumber;\n if (closingsTests) {\n let found;\n if (found = testMultiple(sub, closingsTests)) {\n details.regRes = found;\n i++;\n done = true;\n break;\n }\n }\n if (foundNumber = aNumber.exec(sub)) {\n i += foundNumber[0].length - 1;\n sub = part.substring(i).toString();\n }\n else if (lastChar != char) {\n let found;\n if (char === ';' || (insertedSemis[i + part.start] && !isStart && !lastInertedSemi)) {\n if (hasSemiTest) {\n found = [\";\"];\n }\n else if (insertedSemis[i + part.start]) {\n lastInertedSemi = true;\n i--;\n lastChar = ';';\n continue;\n }\n char = sub = ';';\n }\n else {\n lastInertedSemi = false;\n }\n if (!found) {\n found = testMultiple(sub, tests);\n }\n if (found) {\n done = true;\n }\n if (!done && (foundWord = wordReg.exec(sub))) {\n isOneLiner = true;\n if (foundWord[0].length > 1) {\n details.words.push(foundWord[1]);\n details.lastAnyWord = foundWord[1];\n if (foundWord[2]) {\n details.lastWord = foundWord[2];\n }\n }\n if (foundWord[0].length > 2) {\n i += foundWord[0].length - 2;\n }\n }\n }\n if (isStart) {\n if (okFirstChars.test(sub)) {\n done = false;\n }\n else {\n isStart = false;\n }\n }\n if (done)\n break;\n }\n else if (char === closings[quote]) {\n return part.substring(0, i);\n }\n lastChar = char;\n }\n if (quote) {\n throw new SyntaxError(\"Unclosed '\" + quote + \"'\");\n }\n if (details) {\n details.oneliner = isOneLiner;\n }\n return part.substring(0, i);\n}\nrestOfExp.next = [\n 'splitter',\n 'expEnd',\n 'inlineIf'\n];\nconst startingExecpted = ['initialize', 'expSingle', 'expFunction', 'value', 'modifier', 'prop', 'incrementerBefore', 'expEnd'];\nexport const setLispType = (types, fn) => {\n types.forEach((type) => {\n lispTypes.set(type, fn);\n });\n};\nconst closingsCreate = {\n 'createArray': /^\\]/,\n 'createObject': /^\\}/,\n 'group': /^\\)/,\n 'arrayProp': /^\\]/,\n 'call': /^\\)/\n};\nconst typesCreate = {\n 'createArray': 12 /* LispType.CreateArray */,\n 'createObject': 22 /* LispType.CreateObject */,\n 'group': 23 /* LispType.Group */,\n 'arrayProp': 19 /* LispType.ArrayProp */,\n 'call': 5 /* LispType.Call */,\n 'prop': 1 /* LispType.Prop */,\n '?prop': 20 /* LispType.PropOptional */,\n '?call': 21 /* LispType.CallOptional */,\n};\nsetLispType(['createArray', 'createObject', 'group', 'arrayProp', 'call'], (constants, type, part, res, expect, ctx) => {\n let extract = emptyString;\n let arg = [];\n let end = false;\n let i = res[0].length;\n const start = i;\n while (i < part.length && !end) {\n extract = restOfExp(constants, part.substring(i), [\n closingsCreate[type],\n /^,/\n ]);\n i += extract.length;\n if (extract.trim().length) {\n arg.push(extract);\n }\n if (part.char(i) !== ',') {\n end = true;\n }\n else {\n i++;\n }\n }\n const next = ['value', 'modifier', 'prop', 'incrementerBefore', 'expEnd'];\n let l;\n let funcFound;\n switch (type) {\n case 'group':\n case 'arrayProp':\n l = lispifyExpr(constants, part.substring(start, i));\n break;\n case 'call':\n case 'createArray':\n // @TODO: support 'empty' values\n l = arg.map((e) => lispify(constants, e, [...next, 'spreadArray']));\n break;\n case 'createObject':\n l = arg.map((str) => {\n str = str.trimStart();\n let value;\n let key = '';\n funcFound = expectTypes.expFunction.types.function.exec('function ' + str);\n if (funcFound) {\n key = funcFound[2].trimStart();\n value = lispify(constants, new CodeString('function ' + str.toString().replace(key, \"\")));\n }\n else {\n let extract = restOfExp(constants, str, [/^:/]);\n key = lispify(constants, extract, [...next, 'spreadObject']);\n if (key[0] === 1 /* LispType.Prop */) {\n key = key[2];\n }\n value = lispify(constants, str.substring(extract.length + 1));\n }\n return createLisp({\n op: 6 /* LispType.KeyVal */,\n a: key,\n b: value\n });\n });\n break;\n }\n let lisptype = (type === 'arrayProp' ? (res[1] ? 20 /* LispType.PropOptional */ : 1 /* LispType.Prop */) : (type === 'call' ? (res[1] ? 21 /* LispType.CallOptional */ : 5 /* LispType.Call */) : typesCreate[type]));\n ctx.lispTree = lispify(constants, part.substring(i + 1), expectTypes[expect].next, createLisp({\n op: lisptype,\n a: ctx.lispTree,\n b: l,\n }));\n});\nconst modifierTypes = {\n 'inverse': 64 /* LispType.Inverse */,\n 'not': 24 /* LispType.Not */,\n 'positive': 59 /* LispType.Positive */,\n 'negative': 58 /* LispType.Negative */,\n 'typeof': 60 /* LispType.Typeof */,\n 'delete': 61 /* LispType.Delete */\n};\nsetLispType(['inverse', 'not', 'negative', 'positive', 'typeof', 'delete'], (constants, type, part, res, expect, ctx) => {\n let extract = restOfExp(constants, part.substring(res[0].length), [/^([^\\s\\.\\?\\w\\$]|\\?[^\\.])/]);\n ctx.lispTree = lispify(constants, part.substring(extract.length + res[0].length), restOfExp.next, createLisp({\n op: modifierTypes[type],\n a: ctx.lispTree,\n b: lispify(constants, extract, expectTypes[expect].next),\n }));\n});\nconst incrementTypes = {\n '++$': 25 /* LispType.IncrementBefore */,\n '--$': 27 /* LispType.DecrementBefore */,\n '$++': 26 /* LispType.IncrementAfter */,\n '$--': 28 /* LispType.DecrementAfter */\n};\nsetLispType(['incrementerBefore'], (constants, type, part, res, expect, ctx) => {\n let extract = restOfExp(constants, part.substring(2), [/^[^\\s\\.\\w\\$]/]);\n ctx.lispTree = lispify(constants, part.substring(extract.length + 2), restOfExp.next, createLisp({\n op: incrementTypes[res[0] + \"$\"],\n a: lispify(constants, extract, expectTypes[expect].next),\n b: 0 /* LispType.None */\n }));\n});\nsetLispType(['incrementerAfter'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: incrementTypes[\"$\" + res[0]],\n a: ctx.lispTree,\n b: 0 /* LispType.None */\n }));\n});\nconst adderTypes = {\n '&&': 29 /* LispType.And */,\n '||': 30 /* LispType.Or */,\n 'instanceof': 62 /* LispType.Instanceof */,\n 'in': 63 /* LispType.In */,\n '=': 9 /* LispType.Assign */,\n '-=': 65 /* LispType.SubractEquals */,\n '+=': 66 /* LispType.AddEquals */,\n '/=': 67 /* LispType.DivideEquals */,\n '**=': 68 /* LispType.PowerEquals */,\n '*=': 69 /* LispType.MultiplyEquals */,\n '%=': 70 /* LispType.ModulusEquals */,\n '^=': 71 /* LispType.BitNegateEquals */,\n '&=': 72 /* LispType.BitAndEquals */,\n '|=': 73 /* LispType.BitOrEquals */,\n '>>>=': 74 /* LispType.UnsignedShiftRightEquals */,\n '<<=': 76 /* LispType.ShiftLeftEquals */,\n '>>=': 75 /* LispType.ShiftRightEquals */,\n};\nsetLispType(['assign', 'assignModify', 'boolOp'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: adderTypes[res[0]],\n a: ctx.lispTree,\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next)\n });\n});\nconst opTypes = {\n '&': 77 /* LispType.BitAnd */,\n '|': 78 /* LispType.BitOr */,\n '^': 79 /* LispType.BitNegate */,\n '<<': 80 /* LispType.BitShiftLeft */,\n '>>': 81 /* LispType.BitShiftRight */,\n '>>>': 82 /* LispType.BitUnsignedShiftRight */,\n '<=': 54 /* LispType.SmallerEqualThan */,\n '>=': 55 /* LispType.LargerEqualThan */,\n '<': 56 /* LispType.SmallerThan */,\n '>': 57 /* LispType.LargerThan */,\n '!==': 31 /* LispType.StrictNotEqual */,\n '!=': 53 /* LispType.NotEqual */,\n '===': 32 /* LispType.StrictEqual */,\n '==': 52 /* LispType.Equal */,\n '+': 33 /* LispType.Plus */,\n '-': 47 /* LispType.Minus */,\n '/': 48 /* LispType.Divide */,\n '**': 49 /* LispType.Power */,\n '*': 50 /* LispType.Multiply */,\n '%': 51 /* LispType.Modulus */,\n};\nsetLispType(['opHigh', 'op', 'comparitor', 'bitwise'], (constants, type, part, res, expect, ctx) => {\n const next = [\n expectTypes.inlineIf.types.inlineIf,\n inlineIfElse\n ];\n switch (type) {\n case 'opHigh':\n next.push(expectTypes.splitter.types.opHigh);\n case 'op':\n next.push(expectTypes.splitter.types.op);\n case 'comparitor':\n next.push(expectTypes.splitter.types.comparitor);\n case 'bitwise':\n next.push(expectTypes.splitter.types.bitwise);\n next.push(expectTypes.splitter.types.boolOp);\n }\n let extract = restOfExp(constants, part.substring(res[0].length), next);\n ctx.lispTree = lispify(constants, part.substring(extract.length + res[0].length), restOfExp.next, createLisp({\n op: opTypes[res[0]],\n a: ctx.lispTree,\n b: lispify(constants, extract, expectTypes[expect].next),\n }));\n});\nsetLispType(['inlineIf'], (constants, type, part, res, expect, ctx) => {\n let found = false;\n let extract = part.substring(0, 0);\n let quoteCount = 1;\n while (!found && extract.length < part.length) {\n extract.end = restOfExp(constants, part.substring(extract.length + 1), [\n expectTypes.inlineIf.types.inlineIf,\n inlineIfElse\n ]).end;\n if (part.char(extract.length) === '?') {\n quoteCount++;\n }\n else {\n quoteCount--;\n }\n if (!quoteCount) {\n found = true;\n }\n }\n extract.start = part.start + 1;\n ctx.lispTree = createLisp({\n op: 15 /* LispType.InlineIf */,\n a: ctx.lispTree,\n b: createLisp({\n op: 16 /* LispType.InlineIfCase */,\n a: lispifyExpr(constants, extract),\n b: lispifyExpr(constants, part.substring(res[0].length + extract.length + 1))\n })\n });\n});\nfunction extractIfElse(constants, part) {\n let count = 0;\n let found = part.substring(0, 0);\n let foundElse = emptyString;\n let foundTrue;\n let first = true;\n let elseReg;\n let details = {};\n while ((found = restOfExp(constants, part.substring(found.end - part.start), [elseIf, ifElse, semiColon], undefined, undefined, undefined, details)).length || first) {\n first = false;\n const f = part.substring(found.end - part.start).toString();\n if (f.startsWith(\"if\")) {\n found.end++;\n count++;\n }\n else if (f.startsWith('else')) {\n foundTrue = part.substring(0, found.end - part.start);\n found.end++;\n count--;\n if (!count) {\n found.end--;\n }\n }\n else if (elseReg = /^;?\\s*else(?![\\w\\$])/.exec(f)) {\n foundTrue = part.substring(0, found.end - part.start);\n found.end += elseReg[0].length - 1;\n count--;\n if (!count) {\n found.end -= elseReg[0].length - 1;\n }\n }\n else {\n foundTrue = foundElse.length ? foundTrue : part.substring(0, found.end - part.start);\n break;\n }\n if (!count) {\n let ie = extractIfElse(constants, part.substring(found.end - part.start + (/^;?\\s*else(?![\\w\\$])/.exec(f)?.[0].length)));\n foundElse = ie.all;\n break;\n }\n details = {};\n }\n foundTrue = foundTrue || part.substring(0, found.end - part.start);\n return { all: part.substring(0, Math.max(foundTrue.end, foundElse.end) - part.start), true: foundTrue, false: foundElse };\n}\nsetLispType(['if'], (constants, type, part, res, expect, ctx) => {\n let condition = restOfExp(constants, part.substring(res[0].length), [], \"(\");\n const ie = extractIfElse(constants, part.substring(res[1].length));\n const isBlock = /^\\s*\\{/.exec(part.substring(res[0].length + condition.length + 1).toString());\n const startTrue = res[0].length - res[1].length + condition.length + 1;\n let trueBlock = ie.true.substring(startTrue);\n let elseBlock = ie.false;\n condition = condition.trim();\n trueBlock = trueBlock.trim();\n elseBlock = elseBlock.trim();\n if (trueBlock.char(0) === \"{\")\n trueBlock = trueBlock.slice(1, -1);\n if (elseBlock.char(0) === \"{\")\n elseBlock = elseBlock.slice(1, -1);\n ctx.lispTree = createLisp({\n op: 13 /* LispType.If */,\n a: lispifyExpr(constants, condition),\n b: createLisp({\n op: 14 /* LispType.IfCase */,\n a: lispifyBlock(trueBlock, constants),\n b: lispifyBlock(elseBlock, constants)\n })\n });\n});\nsetLispType(['switch'], (constants, type, part, res, expect, ctx) => {\n const test = restOfExp(constants, part.substring(res[0].length), [], \"(\");\n let start = part.toString().indexOf(\"{\", res[0].length + test.length + 1);\n if (start === -1)\n throw new SyntaxError(\"Invalid switch\");\n let statement = insertSemicolons(constants, restOfExp(constants, part.substring(start + 1), [], \"{\"));\n let caseFound;\n const caseTest = /^\\s*(case\\s|default)\\s*/;\n let cases = [];\n let defaultFound = false;\n while (caseFound = caseTest.exec(statement.toString())) {\n if (caseFound[1] === 'default') {\n if (defaultFound)\n throw new SyntaxError(\"Only one default switch case allowed\");\n defaultFound = true;\n }\n let cond = restOfExp(constants, statement.substring(caseFound[0].length), [/^:/]);\n let found = emptyString;\n let i = start = caseFound[0].length + cond.length + 1;\n let bracketFound = /^\\s*\\{/.exec(statement.substring(i).toString());\n let exprs = [];\n if (bracketFound) {\n i += bracketFound[0].length;\n found = restOfExp(constants, statement.substring(i), [], \"{\");\n i += found.length + 1;\n exprs = lispifyBlock(found, constants);\n }\n else {\n let notEmpty = restOfExp(constants, statement.substring(i), [caseTest]);\n if (!notEmpty.trim().length) {\n exprs = [];\n i += notEmpty.length;\n }\n else {\n while ((found = restOfExp(constants, statement.substring(i), [semiColon])).length) {\n i += found.length + (statement.char(i + found.length) === ';' ? 1 : 0);\n if (caseTest.test(statement.substring(i).toString())) {\n break;\n }\n }\n exprs = lispifyBlock(statement.substring(start, found.end - statement.start), constants);\n }\n }\n statement = statement.substring(i);\n cases.push(createLisp({\n op: 41 /* LispType.SwitchCase */,\n a: caseFound[1] === \"default\" ? undefined : lispifyExpr(constants, cond),\n b: exprs\n }));\n }\n ctx.lispTree = createLisp({\n op: 40 /* LispType.Switch */,\n a: lispifyExpr(constants, test),\n b: cases\n });\n});\nsetLispType(['dot', 'prop'], (constants, type, part, res, expect, ctx) => {\n let prop = res[0];\n let index = res[0].length;\n let op = 'prop';\n if (type === 'dot') {\n if (res[1]) {\n op = '?prop';\n }\n let matches = part.substring(res[0].length).toString().match(expectTypes.prop.types.prop);\n if (matches && matches.length) {\n prop = matches[0];\n index = prop.length + res[0].length;\n }\n else {\n throw new SyntaxError('Hanging dot');\n }\n }\n ctx.lispTree = lispify(constants, part.substring(index), expectTypes[expect].next, createLisp({\n op: typesCreate[op],\n a: ctx.lispTree,\n b: prop\n }));\n});\nsetLispType(['spreadArray', 'spreadObject'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: type === 'spreadArray' ? 18 /* LispType.SpreadArray */ : 17 /* LispType.SpreadObject */,\n a: 0 /* LispType.None */,\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next)\n });\n});\nsetLispType(['return', 'throw'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: type === 'return' ? 8 /* LispType.Return */ : 46 /* LispType.Throw */,\n a: 0 /* LispType.None */,\n b: lispifyExpr(constants, part.substring(res[0].length))\n });\n});\nsetLispType(['number', 'boolean', 'null', 'und', 'NaN', 'Infinity'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: type === \"number\" ? res[10] ? 83 /* LispType.BigInt */ : 7 /* LispType.Number */ : 35 /* LispType.GlobalSymbol */,\n a: 0 /* LispType.None */,\n b: res[10] ? res[1] : res[0]\n }));\n});\nsetLispType(['string', 'literal', 'regex'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: type === 'string' ? 2 /* LispType.StringIndex */ : type === 'literal' ? 84 /* LispType.LiteralIndex */ : 85 /* LispType.RegexIndex */,\n a: 0 /* LispType.None */,\n b: res[1],\n }));\n});\nsetLispType(['initialize'], (constants, type, part, res, expect, ctx) => {\n const lt = res[1] === 'var' ? 34 /* LispType.Var */ : res[1] === 'let' ? 3 /* LispType.Let */ : 4 /* LispType.Const */;\n if (!res[3]) {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: lt,\n a: res[2],\n b: 0 /* LispType.None */\n }));\n }\n else {\n ctx.lispTree = createLisp({\n op: lt,\n a: res[2],\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next)\n });\n }\n});\nsetLispType(['function', 'inlineFunction', 'arrowFunction', 'arrowFunctionSingle'], (constants, type, part, res, expect, ctx) => {\n const isArrow = type !== 'function' && type !== 'inlineFunction';\n const isReturn = isArrow && !res[res.length - 1];\n const argPos = isArrow ? 2 : 3;\n const isAsync = res[1] ? 88 /* LispType.True */ : 0 /* LispType.None */;\n const args = res[argPos] ? res[argPos].replace(/\\s+/g, \"\").split(/,/g) : [];\n if (!isArrow) {\n args.unshift((res[2] || \"\").trimStart());\n }\n let ended = false;\n args.forEach((arg) => {\n if (ended)\n throw new SyntaxError('Rest parameter must be last formal parameter');\n if (arg.startsWith('...'))\n ended = true;\n });\n args.unshift(isAsync);\n const f = restOfExp(constants, part.substring(res[0].length), !isReturn ? [/^}/] : [/^[,\\)\\}\\]]/, semiColon]);\n const func = (isReturn ? 'return ' + f : f.toString());\n ctx.lispTree = lispify(constants, part.substring(res[0].length + func.length + 1), expectTypes[expect].next, createLisp({\n op: isArrow ? 11 /* LispType.ArrowFunction */ : type === 'function' ? 37 /* LispType.Function */ : 10 /* LispType.InlineFunction */,\n a: args,\n b: constants.eager ? lispifyFunction(new CodeString(func), constants) : func\n }));\n});\nconst iteratorRegex = /^((let|var|const)\\s+)?\\s*([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s+(in|of)(?![\\w\\$])/;\nsetLispType(['for', 'do', 'while'], (constants, type, part, res, expect, ctx) => {\n let i = 0;\n let startStep = 88 /* LispType.True */;\n let startInternal = [];\n let getIterator;\n let beforeStep = 0 /* LispType.None */;\n let checkFirst = 88 /* LispType.True */;\n let condition;\n let step = 88 /* LispType.True */;\n let body;\n switch (type) {\n case 'while':\n i = part.toString().indexOf(\"(\") + 1;\n let extract = restOfExp(constants, part.substring(i), [], \"(\");\n condition = lispifyReturnExpr(constants, extract);\n body = restOfExp(constants, part.substring(i + extract.length + 1)).trim();\n if (body[0] === \"{\")\n body = body.slice(1, -1);\n break;\n case 'for':\n i = part.toString().indexOf(\"(\") + 1;\n let args = [];\n let extract2 = emptyString;\n for (let k = 0; k < 3; k++) {\n extract2 = restOfExp(constants, part.substring(i), [/^[;\\)]/]);\n args.push(extract2.trim());\n i += extract2.length + 1;\n if (part.char(i - 1) === \")\")\n break;\n }\n let iterator;\n if (args.length === 1 && (iterator = iteratorRegex.exec(args[0].toString()))) {\n if (iterator[4] === 'of') {\n getIterator = lispifyReturnExpr(constants, args[0].substring(iterator[0].length)),\n startInternal = [\n ofStart2,\n ofStart3\n ];\n condition = ofCondition;\n step = ofStep;\n beforeStep = lispify(constants, new CodeString((iterator[1] || 'let ') + iterator[3] + ' = $$next.value'), ['initialize']);\n }\n else {\n getIterator = lispifyReturnExpr(constants, args[0].substring(iterator[0].length)),\n startInternal = [\n inStart2,\n inStart3\n ];\n step = inStep;\n condition = inCondition;\n beforeStep = lispify(constants, new CodeString((iterator[1] || 'let ') + iterator[3] + ' = $$keys[$$keyIndex]'), ['initialize']);\n }\n }\n else if (args.length === 3) {\n startStep = lispifyExpr(constants, args.shift(), startingExecpted);\n condition = lispifyReturnExpr(constants, args.shift());\n step = lispifyExpr(constants, args.shift());\n }\n else {\n throw new SyntaxError(\"Invalid for loop definition\");\n }\n body = restOfExp(constants, part.substring(i)).trim();\n if (body[0] === \"{\")\n body = body.slice(1, -1);\n break;\n case 'do':\n checkFirst = 0 /* LispType.None */;\n const isBlock = !!res[3];\n body = restOfExp(constants, part.substring(res[0].length), isBlock ? [/^\\}/] : [semiColon]);\n condition = lispifyReturnExpr(constants, restOfExp(constants, part.substring(part.toString().indexOf(\"(\", res[0].length + body.length) + 1), [], \"(\"));\n break;\n }\n const a = [checkFirst, startInternal, getIterator, startStep, step, condition, beforeStep];\n ctx.lispTree = createLisp({\n op: 38 /* LispType.Loop */,\n a,\n b: lispifyBlock(body, constants)\n });\n});\nsetLispType(['block'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: 42 /* LispType.Block */,\n a: lispifyBlock(restOfExp(constants, part.substring(1), [], \"{\"), constants),\n b: 0 /* LispType.None */\n });\n});\nsetLispType(['loopAction'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: 86 /* LispType.LoopAction */,\n a: res[1],\n b: 0 /* LispType.None */\n });\n});\nconst catchReg = /^\\s*(catch\\s*(\\(\\s*([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*\\))?|finally)\\s*\\{/;\nsetLispType(['try'], (constants, type, part, res, expect, ctx) => {\n const body = restOfExp(constants, part.substring(res[0].length), [], \"{\");\n let catchRes = catchReg.exec(part.substring(res[0].length + body.length + 1).toString());\n let finallyBody;\n let exception = \"\";\n let catchBody;\n let offset = 0;\n if (catchRes[1].startsWith('catch')) {\n catchRes = catchReg.exec(part.substring(res[0].length + body.length + 1).toString());\n exception = catchRes[2];\n catchBody = restOfExp(constants, part.substring(res[0].length + body.length + 1 + catchRes[0].length), [], \"{\");\n offset = res[0].length + body.length + 1 + catchRes[0].length + catchBody.length + 1;\n if ((catchRes = catchReg.exec(part.substring(offset).toString())) && catchRes[1].startsWith('finally')) {\n finallyBody = restOfExp(constants, part.substring(offset + catchRes[0].length), [], \"{\");\n }\n }\n else {\n finallyBody = restOfExp(constants, part.substring(res[0].length + body.length + 1 + catchRes[0].length), [], \"{\");\n }\n const b = [\n exception,\n lispifyBlock(insertSemicolons(constants, catchBody || emptyString), constants),\n lispifyBlock(insertSemicolons(constants, finallyBody || emptyString), constants),\n ];\n ctx.lispTree = createLisp({\n op: 39 /* LispType.Try */,\n a: lispifyBlock(insertSemicolons(constants, body), constants),\n b\n });\n});\nsetLispType(['void', 'await'], (constants, type, part, res, expect, ctx) => {\n const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\\s\\.\\?\\w\\$]|\\?[^\\.])/]);\n ctx.lispTree = lispify(constants, part.substring(res[0].length + extract.length), expectTypes[expect].next, createLisp({\n op: type === 'void' ? 87 /* LispType.Void */ : 44 /* LispType.Await */,\n a: lispify(constants, extract),\n b: 0 /* LispType.None */\n }));\n});\nsetLispType(['new'], (constants, type, part, res, expect, ctx) => {\n let i = res[0].length;\n const obj = restOfExp(constants, part.substring(i), [], undefined, \"(\");\n i += obj.length + 1;\n const args = [];\n if (part.char(i - 1) === \"(\") {\n const argsString = restOfExp(constants, part.substring(i), [], \"(\");\n i += argsString.length + 1;\n let found;\n let j = 0;\n while ((found = restOfExp(constants, argsString.substring(j), [/^,/])).length) {\n j += found.length + 1;\n args.push(found.trim());\n }\n }\n ctx.lispTree = lispify(constants, part.substring(i), expectTypes.expEdge.next, createLisp({\n op: 45 /* LispType.New */,\n a: lispify(constants, obj, expectTypes.initialize.next),\n b: args.map((arg) => lispify(constants, arg, expectTypes.initialize.next)),\n }));\n});\nconst ofStart2 = lispify(undefined, new CodeString('let $$iterator = $$obj[Symbol.iterator]()'), ['initialize']);\nconst ofStart3 = lispify(undefined, new CodeString('let $$next = $$iterator.next()'), ['initialize']);\nconst ofCondition = lispify(undefined, new CodeString('return !$$next.done'), ['initialize']);\nconst ofStep = lispify(undefined, new CodeString('$$next = $$iterator.next()'));\nconst inStart2 = lispify(undefined, new CodeString('let $$keys = Object.keys($$obj)'), ['initialize']);\nconst inStart3 = lispify(undefined, new CodeString('let $$keyIndex = 0'), ['initialize']);\nconst inStep = lispify(undefined, new CodeString('$$keyIndex++'));\nconst inCondition = lispify(undefined, new CodeString('return $$keyIndex < $$keys.length'), ['initialize']);\nvar lastType;\nvar lastPart;\nvar lastLastPart;\nvar lastLastLastPart;\nvar lastLastLastLastPart;\nfunction lispify(constants, part, expected, lispTree, topLevel = false) {\n lispTree = lispTree || [0 /* LispType.None */, 0 /* LispType.None */, 0 /* LispType.None */];\n expected = expected || expectTypes.initialize.next;\n if (part === undefined)\n return lispTree;\n part = part.trimStart();\n const str = part.toString();\n if (!part.length && !expected.includes('expEnd')) {\n throw new SyntaxError(\"Unexpected end of expression\");\n }\n if (!part.length)\n return lispTree;\n let ctx = { lispTree: lispTree };\n let res;\n for (let expect of expected) {\n if (expect === 'expEnd') {\n continue;\n }\n for (let type in expectTypes[expect].types) {\n if (type === 'expEnd') {\n continue;\n }\n if (res = expectTypes[expect].types[type].exec(str)) {\n lastType = type;\n lastLastLastLastPart = lastLastLastPart;\n lastLastLastPart = lastLastPart;\n lastLastPart = lastPart;\n lastPart = part;\n try {\n lispTypes.get(type)(constants, type, part, res, expect, ctx);\n }\n catch (e) {\n if (topLevel && e instanceof SyntaxError) {\n throw new ParseError(e.message, str);\n }\n throw e;\n }\n break;\n }\n }\n if (res)\n break;\n }\n if (!res && part.length) {\n let msg = `Unexpected token after ${lastType}: ${part.char(0)}`;\n if (topLevel) {\n throw new ParseError(`Unexpected token after ${lastType}: ${part.char(0)}`, str);\n }\n throw new SyntaxError(`Unexpected token after ${lastType}: ${part.char(0)}`);\n }\n return ctx.lispTree;\n}\nconst startingExpectedWithoutSingle = startingExecpted.filter((r) => r !== 'expSingle');\nfunction lispifyExpr(constants, str, expected) {\n if (!str.trimStart().length)\n return undefined;\n let subExpressions = [];\n let sub;\n let pos = 0;\n expected = expected || expectTypes.initialize.next;\n if (expected.includes('expSingle')) {\n if (testMultiple(str.toString(), Object.values(expectTypes.expSingle.types))) {\n return lispify(constants, str, ['expSingle'], undefined, true);\n }\n }\n if (expected === startingExecpted)\n expected = startingExpectedWithoutSingle;\n while ((sub = restOfExp(constants, str.substring(pos), [/^,/])).length) {\n subExpressions.push(sub.trimStart());\n pos += sub.length + 1;\n }\n if (subExpressions.length === 1) {\n return lispify(constants, str, expected, undefined, true);\n }\n if (expected.includes('initialize')) {\n let defined = expectTypes.initialize.types.initialize.exec(subExpressions[0].toString());\n if (defined) {\n return createLisp({\n op: 42 /* LispType.Block */,\n a: subExpressions.map((str, i) => lispify(constants, i ? new CodeString(defined[1] + ' ' + str) : str, ['initialize'], undefined, true)),\n b: 0 /* LispType.None */\n });\n }\n else if (expectTypes.initialize.types.return.exec(subExpressions[0].toString())) {\n return lispify(constants, str, expected, undefined, true);\n }\n }\n const exprs = subExpressions.map((str, i) => lispify(constants, str, expected, undefined, true));\n return createLisp({ op: 43 /* LispType.Expression */, a: exprs, b: 0 /* LispType.None */ });\n}\nexport function lispifyReturnExpr(constants, str) {\n return createLisp({ op: 8 /* LispType.Return */, a: 0 /* LispType.None */, b: lispifyExpr(constants, str) });\n}\nexport function lispifyBlock(str, constants, expression = false) {\n str = insertSemicolons(constants, str);\n if (!str.trim().length)\n return [];\n let parts = [];\n let part;\n let pos = 0;\n let start = 0;\n let details = {};\n let skipped = false;\n let isInserted = false;\n while ((part = restOfExp(constants, str.substring(pos), [semiColon], undefined, undefined, undefined, details)).length) {\n isInserted = str.char(pos + part.length) && str.char(pos + part.length) !== ';';\n pos += part.length + (isInserted ? 0 : 1);\n if (/^\\s*else(?![\\w\\$])/.test(str.substring(pos).toString())) {\n skipped = true;\n }\n else if (details.words.includes('do') && /^\\s*while(?![\\w\\$])/.test(str.substring(pos).toString())) {\n skipped = true;\n }\n else {\n skipped = false;\n parts.push(str.substring(start, pos - (isInserted ? 0 : 1)));\n start = pos;\n }\n details = {};\n if (expression)\n break;\n }\n if (skipped) {\n parts.push(str.substring(start, pos - (isInserted ? 0 : 1)));\n }\n return parts.map((str) => str.trimStart()).filter((str) => str.length).map((str, j) => {\n return lispifyExpr(constants, str.trimStart(), startingExecpted);\n });\n}\nexport function lispifyFunction(str, constants, expression = false) {\n if (!str.trim().length)\n return [];\n const tree = lispifyBlock(str, constants, expression);\n let hoisted = [];\n hoist(tree, hoisted);\n return hoisted.concat(tree);\n}\nexport function isLisp(item) {\n return Array.isArray(item) && typeof item[0] === 'number' && item[0] !== 0 /* LispType.None */ && item[0] !== 88 /* LispType.True */;\n}\nfunction hoist(item, res) {\n if (isLisp(item)) {\n const [op, a, b] = item;\n if (op === 39 /* LispType.Try */ || op === 13 /* LispType.If */ || op === 38 /* LispType.Loop */ || op === 40 /* LispType.Switch */) {\n hoist(a, res);\n hoist(b, res);\n }\n else if (op === 34 /* LispType.Var */) {\n res.push(createLisp({ op: 34 /* LispType.Var */, a: a, b: 0 /* LispType.None */ }));\n }\n else if (op === 37 /* LispType.Function */ && a[1]) {\n res.push(item);\n return true;\n }\n }\n else if (Array.isArray(item)) {\n const rep = [];\n for (let it of item) {\n if (!hoist(it, res)) {\n rep.push(it);\n }\n }\n if (rep.length !== item.length) {\n item.length = 0;\n item.push(...rep);\n }\n }\n return false;\n}\nconst closingsNoInsertion = /^(\\})\\s*(catch|finally|else|while|instanceof)(?![\\w\\$])/;\n// \\w|)|] \\n \\w = 2 // \\} \\w|\\{ = 5 \nconst colonsRegex = /^((([\\w\\$\\]\\)\\\"\\'\\`]|\\+\\+|\\-\\-)\\s*\\r?\\n\\s*([\\w\\$\\+\\-\\!~]))|(\\}\\s*[\\w\\$\\!~\\+\\-\\{\\(\\\"\\'\\`]))/;\n// if () \\w \\n; \\w == \\w \\n \\w | last === if a\n// if () { }; \\w == \\} ^else | last === if b\n// if () \\w \\n; else \\n \\w \\n; == \\w \\n \\w | last === else a\n// if () {} else {}; \\w == \\} \\w | last === else b\n// while () \\n \\w \\n; \\w == \\w \\n \\w | last === while a\n// while () { }; \\w == \\} \\w | last === while b\n// do \\w \\n; while (); \\w == \\w \\n while | last === do a\n// do { } while (); \\w == \\) \\w | last === while c\n// try {} catch () {}; \\w == \\} \\w | last === catch|finally b\n// \\w \\n; \\w == \\w \\n \\w | last === none a\n// cb() \\n \\w == \\) \\n \\w | last === none a\n// obj[a] \\n \\w == \\] \\n \\w | last === none a\n// {} {} == \\} \\{ | last === none b\nexport function insertSemicolons(constants, str) {\n let rest = str;\n let sub = emptyString;\n let details = {};\n const inserted = insertedSemicolons.get(str.ref) || new Array(str.ref.str.length);\n while ((sub = restOfExp(constants, rest, [], undefined, undefined, [colonsRegex], details)).length) {\n let valid = false;\n let part = sub;\n let edge = sub.length;\n if (details.regRes) {\n valid = true;\n const [, , a, , , b] = details.regRes;\n edge = details.regRes[3] === \"++\" || details.regRes[3] === \"--\" ? sub.length + 1 : sub.length;\n part = rest.substring(0, edge);\n if (b) {\n let res = closingsNoInsertion.exec(rest.substring(sub.length - 1).toString());\n if (res) {\n if (res[2] === 'while') {\n valid = details.lastWord !== 'do';\n }\n else {\n valid = false;\n }\n }\n else if (details.lastWord === 'function' && details.regRes[5][0] === \"}\" && details.regRes[5].slice(-1) === '(') {\n valid = false;\n }\n }\n else if (a) {\n if (details.lastWord === 'if' || details.lastWord === 'while' || details.lastWord === 'for' || details.lastWord === 'else') {\n valid = false;\n }\n }\n }\n if (valid) {\n inserted[part.end] = true;\n }\n rest = rest.substring(edge);\n details = {};\n }\n insertedSemicolons.set(str.ref, inserted);\n return str;\n}\nexport function checkRegex(str) {\n let i = 1;\n let escape = false;\n let done = false;\n let cancel = false;\n while (i < str.length && !done && !cancel) {\n done = (str[i] === '/' && !escape);\n escape = str[i] === '\\\\' && !escape;\n cancel = str[i] === '\\n';\n i++;\n }\n let after = str.substring(i);\n cancel = (cancel || !done) || /^\\s*\\d/.test(after);\n if (cancel)\n return null;\n let flags = /^[a-z]*/.exec(after);\n if (/^\\s+[\\w\\$]/.test(str.substring(i + flags[0].length))) {\n return null;\n }\n return {\n regex: str.substring(1, i - 1),\n flags: (flags && flags[0]) || \"\",\n length: i + ((flags && flags[0].length) || 0)\n };\n}\nconst notDivide = /(typeof|delete|instanceof|return|in|of|throw|new|void|do|if)$/;\nconst possibleDivide = /^([\\w\\$\\]\\)]|\\+\\+|\\-\\-)[\\s\\/]/;\nexport function extractConstants(constants, str, currentEnclosure = \"\") {\n let quote;\n let extract = [];\n let escape = false;\n let regexFound;\n let comment = \"\";\n let commentStart = -1;\n let currJs = [];\n let char = \"\";\n const strRes = [];\n const enclosures = [];\n let isPossibleDivide;\n for (var i = 0; i < str.length; i++) {\n char = str[i];\n if (comment) {\n if (char === comment) {\n if (comment === \"*\" && str[i + 1] === \"/\") {\n comment = \"\";\n i++;\n }\n else if (comment === \"\\n\") {\n comment = \"\";\n }\n }\n }\n else {\n if (escape) {\n escape = false;\n extract.push(char);\n continue;\n }\n if (quote) {\n if (quote === \"`\" && char === \"$\" && str[i + 1] === \"{\") {\n let skip = extractConstants(constants, str.substring(i + 2), \"{\");\n currJs.push(skip.str);\n extract.push('${', currJs.length - 1, `}`);\n i += skip.length + 2;\n }\n else if (quote === char) {\n if (quote === '`') {\n const li = createLisp({\n op: 36 /* LispType.Literal */,\n a: unraw(extract.join(\"\")),\n b: [],\n });\n li.tempJsStrings = currJs;\n constants.literals.push(li);\n strRes.push(`\\``, constants.literals.length - 1, `\\``);\n }\n else {\n constants.strings.push(unraw(extract.join(\"\")));\n strRes.push(`\"`, constants.strings.length - 1, `\"`);\n }\n quote = null;\n extract = [];\n }\n else {\n extract.push(char);\n }\n }\n else {\n if ((char === \"'\" || char === '\"' || char === '`')) {\n currJs = [];\n quote = char;\n }\n else if (closings[currentEnclosure] === char && !enclosures.length) {\n return { str: strRes.join(\"\"), length: i };\n }\n else if (closings[char]) {\n enclosures.push(char);\n strRes.push(char);\n }\n else if (closings[enclosures[enclosures.length - 1]] === char) {\n enclosures.pop();\n strRes.push(char);\n }\n else if (char === \"/\" && (str[i + 1] === \"*\" || str[i + 1] === \"/\")) {\n comment = str[i + 1] === \"*\" ? \"*\" : \"\\n\";\n commentStart = i;\n }\n else if (char === '/' && !isPossibleDivide && (regexFound = checkRegex(str.substring(i)))) {\n constants.regexes.push(regexFound);\n strRes.push(`/`, constants.regexes.length - 1, `/r`);\n i += regexFound.length - 1;\n }\n else {\n strRes.push(char);\n }\n if (!isPossibleDivide || !space.test(char)) {\n if (isPossibleDivide = possibleDivide.exec(str.substring(i))) {\n if (notDivide.test(str.substring(0, i + isPossibleDivide[1].length))) {\n isPossibleDivide = null;\n }\n }\n }\n }\n escape = quote && char === \"\\\\\";\n }\n }\n if (comment) {\n if (comment === \"*\") {\n throw new SyntaxError(`Unclosed comment '/*': ${str.substring(commentStart)}`);\n }\n }\n return { str: strRes.join(\"\"), length: i };\n}\nexport function parse(code, eager = false, expression = false) {\n if (typeof code !== 'string')\n throw new ParseError(`Cannot parse ${code}`, code);\n let str = ' ' + code;\n const constants = { strings: [], literals: [], regexes: [], eager };\n str = extractConstants(constants, str).str;\n for (let l of constants.literals) {\n l[2] = l.tempJsStrings.map((js) => lispifyExpr(constants, new CodeString(js)));\n delete l.tempJsStrings;\n }\n return { tree: lispifyFunction(new CodeString(str), constants, expression), constants };\n}\n","import { parse, lispifyFunction, CodeString, isLisp } from \"./parser.js\";\nexport class ExecReturn {\n constructor(auditReport, result, returned, breakLoop = false, continueLoop = false) {\n this.auditReport = auditReport;\n this.result = result;\n this.returned = returned;\n this.breakLoop = breakLoop;\n this.continueLoop = continueLoop;\n }\n}\nexport class Prop {\n constructor(context, prop, isConst = false, isGlobal = false, isVariable = false) {\n this.context = context;\n this.prop = prop;\n this.isConst = isConst;\n this.isGlobal = isGlobal;\n this.isVariable = isVariable;\n }\n get(context) {\n if (this.context === undefined)\n throw new ReferenceError(`${this.prop} is not defined`);\n context.getSubscriptions.forEach((cb) => cb(this.context, this.prop));\n return this.context[this.prop];\n }\n}\nconst optional = {};\nconst reservedWords = new Set([\n 'instanceof',\n 'typeof',\n 'return',\n 'try',\n 'catch',\n 'if',\n 'finally',\n 'else',\n 'in',\n 'of',\n 'var',\n 'let',\n 'const',\n 'for',\n 'delete',\n 'false',\n 'true',\n 'while',\n 'do',\n 'break',\n 'continue',\n 'new',\n 'function',\n 'async',\n 'await',\n 'switch',\n 'case'\n]);\nvar VarType;\n(function (VarType) {\n VarType[\"let\"] = \"let\";\n VarType[\"const\"] = \"const\";\n VarType[\"var\"] = \"var\";\n})(VarType || (VarType = {}));\nfunction keysOnly(obj) {\n const ret = Object.assign({}, obj);\n for (let key in ret) {\n ret[key] = true;\n }\n return ret;\n}\nexport class Scope {\n constructor(parent, vars = {}, functionThis) {\n this.const = {};\n this.let = {};\n this.var = {};\n const isFuncScope = functionThis !== undefined || parent === null;\n this.parent = parent;\n this.allVars = vars;\n this.let = isFuncScope ? this.let : keysOnly(vars);\n this.var = isFuncScope ? keysOnly(vars) : this.var;\n this.globals = parent === null ? keysOnly(vars) : {};\n this.functionThis = functionThis;\n }\n get(key, functionScope = false) {\n if (key === 'this' && this.functionThis !== undefined) {\n return new Prop({ this: this.functionThis }, key, true, false, true);\n }\n if (reservedWords.has(key))\n throw new SyntaxError(\"Unexepected token '\" + key + \"'\");\n if (this.parent === null || !functionScope || this.functionThis !== undefined) {\n if (this.globals.hasOwnProperty(key)) {\n return new Prop(this.functionThis, key, false, true, true);\n }\n if (key in this.allVars && (!(key in {}) || this.allVars.hasOwnProperty(key))) {\n return new Prop(this.allVars, key, this.const.hasOwnProperty(key), this.globals.hasOwnProperty(key), true);\n }\n if (this.parent === null) {\n return new Prop(undefined, key);\n }\n }\n return this.parent.get(key, functionScope);\n }\n set(key, val) {\n if (key === 'this')\n throw new SyntaxError('\"this\" cannot be assigned');\n if (reservedWords.has(key))\n throw new SyntaxError(\"Unexepected token '\" + key + \"'\");\n let prop = this.get(key);\n if (prop.context === undefined) {\n throw new ReferenceError(`Variable '${key}' was not declared.`);\n }\n if (prop.isConst) {\n throw new TypeError(`Cannot assign to const variable '${key}'`);\n }\n if (prop.isGlobal) {\n throw new SandboxError(`Cannot override global variable '${key}'`);\n }\n prop.context[prop.prop] = val;\n return prop;\n }\n declare(key, type = null, value = undefined, isGlobal = false) {\n if (key === 'this')\n throw new SyntaxError('\"this\" cannot be declared');\n if (reservedWords.has(key))\n throw new SyntaxError(\"Unexepected token '\" + key + \"'\");\n if (type === 'var' && this.functionThis === undefined && this.parent !== null) {\n return this.parent.declare(key, type, value, isGlobal);\n }\n else if ((this[type].hasOwnProperty(key) && type !== 'const' && !this.globals.hasOwnProperty(key)) || !(key in this.allVars)) {\n if (isGlobal) {\n this.globals[key] = true;\n }\n this[type][key] = true;\n this.allVars[key] = value;\n }\n else {\n throw new SandboxError(`Identifier '${key}' has already been declared`);\n }\n return new Prop(this.allVars, key, this.const.hasOwnProperty(key), isGlobal);\n }\n}\nexport class FunctionScope {\n}\nexport class LocalScope {\n}\nexport class SandboxError extends Error {\n}\nlet currentTicks;\nexport function sandboxFunction(context, ticks) {\n return SandboxFunction;\n function SandboxFunction(...params) {\n let code = params.pop() || \"\";\n let parsed = parse(code);\n return createFunction(params, parsed.tree, ticks || currentTicks, {\n ...context,\n constants: parsed.constants,\n tree: parsed.tree\n }, undefined, 'anonymous');\n }\n}\nfunction generateArgs(argNames, args) {\n const vars = {};\n argNames.forEach((arg, i) => {\n if (arg.startsWith('...')) {\n vars[arg.substring(3)] = args.slice(i);\n }\n else {\n vars[arg] = args[i];\n }\n });\n return vars;\n}\nconst sandboxedFunctions = new WeakSet();\nexport function createFunction(argNames, parsed, ticks, context, scope, name) {\n if (context.ctx.options.forbidFunctionCreation) {\n throw new SandboxError(\"Function creation is forbidden\");\n }\n let func;\n if (name === undefined) {\n func = (...args) => {\n const vars = generateArgs(argNames, args);\n const res = executeTree(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars)]);\n return res.result;\n };\n }\n else {\n func = function sandboxedObject(...args) {\n const vars = generateArgs(argNames, args);\n const res = executeTree(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars, this)]);\n return res.result;\n };\n }\n context.registerSandboxFunction(func);\n sandboxedFunctions.add(func);\n return func;\n}\nexport function createFunctionAsync(argNames, parsed, ticks, context, scope, name) {\n if (context.ctx.options.forbidFunctionCreation) {\n throw new SandboxError(\"Function creation is forbidden\");\n }\n if (!context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\n throw new SandboxError(\"Async/await not permitted\");\n }\n let func;\n if (name === undefined) {\n func = async (...args) => {\n const vars = generateArgs(argNames, args);\n const res = await executeTreeAsync(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars)]);\n return res.result;\n };\n }\n else {\n func = async function sandboxedObject(...args) {\n const vars = generateArgs(argNames, args);\n const res = await executeTreeAsync(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars, this)]);\n return res.result;\n };\n }\n context.registerSandboxFunction(func);\n sandboxedFunctions.add(func);\n return func;\n}\nexport function sandboxedEval(func) {\n return sandboxEval;\n function sandboxEval(code) {\n return func(code)();\n }\n}\nexport function sandboxedSetTimeout(func) {\n return function sandboxSetTimeout(handler, ...args) {\n if (typeof handler !== 'string')\n return setTimeout(handler, ...args);\n return setTimeout(func(handler), ...args);\n };\n}\nexport function sandboxedSetInterval(func) {\n return function sandboxSetInterval(handler, ...args) {\n if (typeof handler !== 'string')\n return setInterval(handler, ...args);\n return setInterval(func(handler), ...args);\n };\n}\nexport function assignCheck(obj, context, op = 'assign') {\n if (obj.context === undefined) {\n throw new ReferenceError(`Cannot ${op} value to undefined.`);\n }\n if (typeof obj.context !== 'object' && typeof obj.context !== 'function') {\n throw new SyntaxError(`Cannot ${op} value to a primitive.`);\n }\n if (obj.isConst) {\n throw new TypeError(`Cannot set value to const variable '${obj.prop}'`);\n }\n if (obj.isGlobal) {\n throw new SandboxError(`Cannot ${op} property '${obj.prop}' of a global object`);\n }\n if (typeof obj.context[obj.prop] === 'function' && !obj.context.hasOwnProperty(obj.prop)) {\n throw new SandboxError(`Override prototype property '${obj.prop}' not allowed`);\n }\n if (op === \"delete\") {\n if (obj.context.hasOwnProperty(obj.prop)) {\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb({ type: \"delete\", prop: obj.prop }));\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb({ type: \"delete\", prop: obj.prop }));\n }\n }\n else if (obj.context.hasOwnProperty(obj.prop)) {\n context.setSubscriptions.get(obj.context)?.get(obj.prop)?.forEach((cb) => cb({\n type: \"replace\"\n }));\n context.setSubscriptionsGlobal.get(obj.context)?.get(obj.prop)?.forEach((cb) => cb({\n type: \"replace\"\n }));\n }\n else {\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb({ type: \"create\", prop: obj.prop }));\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb({ type: \"create\", prop: obj.prop }));\n }\n}\nconst arrayChange = new Set([\n [].push,\n [].pop,\n [].shift,\n [].unshift,\n [].splice,\n [].reverse,\n [].sort,\n [].copyWithin\n]);\nexport class KeyVal {\n constructor(key, val) {\n this.key = key;\n this.val = val;\n }\n}\nexport class SpreadObject {\n constructor(item) {\n this.item = item;\n }\n}\nexport class SpreadArray {\n constructor(item) {\n this.item = item;\n }\n}\nexport class If {\n constructor(t, f) {\n this.t = t;\n this.f = f;\n }\n}\nconst literalRegex = /(\\$\\$)*(\\$)?\\${(\\d+)}/g;\nexport const ops = new Map();\nexport function addOps(type, cb) {\n ops.set(type, cb);\n}\naddOps(1 /* LispType.Prop */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (a === null) {\n throw new TypeError(`Cannot get property ${b} of null`);\n }\n const type = typeof a;\n if (type === 'undefined' && obj === undefined) {\n let prop = scope.get(b);\n if (prop.context === context.ctx.sandboxGlobal) {\n if (context.ctx.options.audit) {\n context.ctx.auditReport.globalsAccess.add(b);\n }\n const rep = context.ctx.globalsWhitelist.has(context.ctx.sandboxGlobal[b]) ? context.evals.get(context.ctx.sandboxGlobal[b]) : undefined;\n if (rep) {\n done(undefined, rep);\n return;\n }\n }\n if (prop.context && prop.context[b] === globalThis) {\n done(undefined, context.ctx.globalScope.get('this'));\n return;\n }\n done(undefined, prop);\n return;\n }\n else if (a === undefined) {\n throw new SandboxError(\"Cannot get property '\" + b + \"' of undefined\");\n }\n if (type !== 'object') {\n if (type === 'number') {\n a = new Number(a);\n }\n else if (type === 'string') {\n a = new String(a);\n }\n else if (type === 'boolean') {\n a = new Boolean(a);\n }\n }\n else if (typeof a.hasOwnProperty === 'undefined') {\n done(undefined, new Prop(undefined, b));\n return;\n }\n const isFunction = type === 'function';\n let prototypeAccess = isFunction || !(a.hasOwnProperty(b) || typeof b === 'number');\n if (context.ctx.options.audit && prototypeAccess) {\n if (typeof b === 'string') {\n let prot = Object.getPrototypeOf(a);\n do {\n if (prot.hasOwnProperty(b)) {\n if (!context.ctx.auditReport.prototypeAccess[prot.constructor.name]) {\n context.ctx.auditReport.prototypeAccess[prot.constructor.name] = new Set();\n }\n context.ctx.auditReport.prototypeAccess[prot.constructor.name].add(b);\n }\n } while (prot = Object.getPrototypeOf(prot));\n }\n }\n if (prototypeAccess) {\n if (isFunction) {\n if (!['name', 'length', 'constructor'].includes(b) && a.hasOwnProperty(b)) {\n const whitelist = context.ctx.prototypeWhitelist.get(a.prototype);\n const replace = context.ctx.options.prototypeReplacements.get(a);\n if (replace) {\n done(undefined, new Prop(replace(a, true), b));\n return;\n }\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\n }\n else {\n throw new SandboxError(`Static method or property access not permitted: ${a.name}.${b}`);\n }\n }\n }\n else if (b !== 'constructor') {\n let prot = a;\n while (prot = Object.getPrototypeOf(prot)) {\n if (prot.hasOwnProperty(b)) {\n const whitelist = context.ctx.prototypeWhitelist.get(prot);\n const replace = context.ctx.options.prototypeReplacements.get(prot.constuctor);\n if (replace) {\n done(undefined, new Prop(replace(a, false), b));\n return;\n }\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\n break;\n }\n throw new SandboxError(`Method or property access not permitted: ${prot.constructor.name}.${b}`);\n }\n }\n ;\n }\n }\n if (context.evals.has(a[b])) {\n done(undefined, context.evals.get(a[b]));\n return;\n }\n if (a[b] === globalThis) {\n done(undefined, context.ctx.globalScope.get('this'));\n return;\n }\n let g = obj.isGlobal || (isFunction && !sandboxedFunctions.has(a)) || context.ctx.globalsWhitelist.has(a);\n done(undefined, new Prop(a, b, false, g));\n});\naddOps(5 /* LispType.Call */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (context.ctx.options.forbidFunctionCalls)\n throw new SandboxError(\"Function invocations are not allowed\");\n if (typeof a !== 'function') {\n throw new TypeError(`${typeof obj.prop === 'symbol' ? 'Symbol' : obj.prop} is not a function`);\n }\n const vals = b.map((item) => {\n if (item instanceof SpreadArray) {\n return [...item.item];\n }\n else {\n return [item];\n }\n }).flat().map((item) => valueOrProp(item, context));\n if (typeof obj === 'function') {\n done(undefined, obj(...vals));\n return;\n }\n if (obj.context[obj.prop] === JSON.stringify && context.getSubscriptions.size) {\n const cache = new Set();\n const recurse = (x) => {\n if (!x || !(typeof x === 'object') || cache.has(x))\n return;\n cache.add(x);\n for (let y in x) {\n context.getSubscriptions.forEach((cb) => cb(x, y));\n recurse(x[y]);\n }\n };\n recurse(vals[0]);\n }\n if (obj.context instanceof Array && arrayChange.has(obj.context[obj.prop]) && (context.changeSubscriptions.get(obj.context) || context.changeSubscriptionsGlobal.get(obj.context))) {\n let change;\n let changed = false;\n if (obj.prop === \"push\") {\n change = {\n type: \"push\",\n added: vals\n };\n changed = !!vals.length;\n }\n else if (obj.prop === \"pop\") {\n change = {\n type: \"pop\",\n removed: obj.context.slice(-1)\n };\n changed = !!change.removed.length;\n }\n else if (obj.prop === \"shift\") {\n change = {\n type: \"shift\",\n removed: obj.context.slice(0, 1)\n };\n changed = !!change.removed.length;\n }\n else if (obj.prop === \"unshift\") {\n change = {\n type: \"unshift\",\n added: vals\n };\n changed = !!vals.length;\n }\n else if (obj.prop === \"splice\") {\n change = {\n type: \"splice\",\n startIndex: vals[0],\n deleteCount: vals[1] === undefined ? obj.context.length : vals[1],\n added: vals.slice(2),\n removed: obj.context.slice(vals[0], vals[1] === undefined ? undefined : vals[0] + vals[1])\n };\n changed = !!change.added.length || !!change.removed.length;\n }\n else if (obj.prop === \"reverse\" || obj.prop === \"sort\") {\n change = { type: obj.prop };\n changed = !!obj.context.length;\n }\n else if (obj.prop === \"copyWithin\") {\n let len = vals[2] === undefined ? obj.context.length - vals[1] : Math.min(obj.context.length, vals[2] - vals[1]);\n change = {\n type: \"copyWithin\",\n startIndex: vals[0],\n endIndex: vals[0] + len,\n added: obj.context.slice(vals[1], vals[1] + len),\n removed: obj.context.slice(vals[0], vals[0] + len)\n };\n changed = !!change.added.length || !!change.removed.length;\n }\n if (changed) {\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb(change));\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb(change));\n }\n }\n obj.get(context);\n done(undefined, obj.context[obj.prop](...vals));\n});\naddOps(22 /* LispType.CreateObject */, (exec, done, ticks, a, b, obj, context, scope) => {\n let res = {};\n for (let item of b) {\n if (item.key instanceof SpreadObject) {\n res = { ...res, ...item.key.item };\n }\n else {\n res[item.key] = item.val;\n }\n }\n done(undefined, res);\n});\naddOps(6 /* LispType.KeyVal */, (exec, done, ticks, a, b) => done(undefined, new KeyVal(a, b)));\naddOps(12 /* LispType.CreateArray */, (exec, done, ticks, a, b, obj, context, scope) => {\n const items = b.map((item) => {\n if (item instanceof SpreadArray) {\n return [...item.item];\n }\n else {\n return [item];\n }\n }).flat().map((item) => valueOrProp(item, context));\n done(undefined, items);\n});\naddOps(23 /* LispType.Group */, (exec, done, ticks, a, b) => done(undefined, b));\naddOps(35 /* LispType.GlobalSymbol */, (exec, done, ticks, a, b) => {\n switch (b) {\n case 'true': return done(undefined, true);\n case 'false': return done(undefined, false);\n case 'null': return done(undefined, null);\n case 'undefined': return done(undefined, undefined);\n case 'NaN': return done(undefined, NaN);\n case 'Infinity': return done(undefined, Infinity);\n }\n done(new Error('Unknown symbol: ' + b));\n});\naddOps(7 /* LispType.Number */, (exec, done, ticks, a, b) => done(undefined, Number(b)));\naddOps(83 /* LispType.BigInt */, (exec, done, ticks, a, b) => done(undefined, BigInt(b)));\naddOps(2 /* LispType.StringIndex */, (exec, done, ticks, a, b, obj, context) => done(undefined, context.constants.strings[parseInt(b)]));\naddOps(85 /* LispType.RegexIndex */, (exec, done, ticks, a, b, obj, context) => {\n const reg = context.constants.regexes[parseInt(b)];\n if (!context.ctx.globalsWhitelist.has(RegExp)) {\n throw new SandboxError(\"Regex not permitted\");\n }\n else {\n done(undefined, new RegExp(reg.regex, reg.flags));\n }\n});\naddOps(84 /* LispType.LiteralIndex */, (exec, done, ticks, a, b, obj, context, scope) => {\n let item = context.constants.literals[parseInt(b)];\n const [, name, js] = item;\n let found = [];\n let f;\n let resnums = [];\n while (f = literalRegex.exec(name)) {\n if (!f[2]) {\n found.push(js[parseInt(f[3], 10)]);\n resnums.push(f[3]);\n }\n }\n exec(ticks, found, scope, context, (err, processed) => {\n const reses = {};\n if (err) {\n done(err);\n return;\n }\n for (let i in resnums) {\n const num = resnums[i];\n reses[num] = processed[i];\n }\n done(undefined, name.replace(/(\\\\\\\\)*(\\\\)?\\${(\\d+)}/g, (match, $$, $, num) => {\n if ($)\n return match;\n let res = reses[num];\n return ($$ ? $$ : '') + `${valueOrProp(res, context)}`;\n }));\n });\n});\naddOps(18 /* LispType.SpreadArray */, (exec, done, ticks, a, b, obj, context, scope) => {\n done(undefined, new SpreadArray(b));\n});\naddOps(17 /* LispType.SpreadObject */, (exec, done, ticks, a, b, obj, context, scope) => {\n done(undefined, new SpreadObject(b));\n});\naddOps(24 /* LispType.Not */, (exec, done, ticks, a, b) => done(undefined, !b));\naddOps(64 /* LispType.Inverse */, (exec, done, ticks, a, b) => done(undefined, ~b));\naddOps(25 /* LispType.IncrementBefore */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, ++obj.context[obj.prop]);\n});\naddOps(26 /* LispType.IncrementAfter */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop]++);\n});\naddOps(27 /* LispType.DecrementBefore */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, --obj.context[obj.prop]);\n});\naddOps(28 /* LispType.DecrementAfter */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop]--);\n});\naddOps(9 /* LispType.Assign */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] = b);\n});\naddOps(66 /* LispType.AddEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] += b);\n});\naddOps(65 /* LispType.SubractEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] -= b);\n});\naddOps(67 /* LispType.DivideEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] /= b);\n});\naddOps(69 /* LispType.MultiplyEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] *= b);\n});\naddOps(68 /* LispType.PowerEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] **= b);\n});\naddOps(70 /* LispType.ModulusEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] %= b);\n});\naddOps(71 /* LispType.BitNegateEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] ^= b);\n});\naddOps(72 /* LispType.BitAndEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] &= b);\n});\naddOps(73 /* LispType.BitOrEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] |= b);\n});\naddOps(76 /* LispType.ShiftLeftEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] <<= b);\n});\naddOps(75 /* LispType.ShiftRightEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] >>= b);\n});\naddOps(74 /* LispType.UnsignedShiftRightEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] >>= b);\n});\naddOps(57 /* LispType.LargerThan */, (exec, done, ticks, a, b) => done(undefined, a > b));\naddOps(56 /* LispType.SmallerThan */, (exec, done, ticks, a, b) => done(undefined, a < b));\naddOps(55 /* LispType.LargerEqualThan */, (exec, done, ticks, a, b) => done(undefined, a >= b));\naddOps(54 /* LispType.SmallerEqualThan */, (exec, done, ticks, a, b) => done(undefined, a <= b));\naddOps(52 /* LispType.Equal */, (exec, done, ticks, a, b) => done(undefined, a == b));\naddOps(32 /* LispType.StrictEqual */, (exec, done, ticks, a, b) => done(undefined, a === b));\naddOps(53 /* LispType.NotEqual */, (exec, done, ticks, a, b) => done(undefined, a != b));\naddOps(31 /* LispType.StrictNotEqual */, (exec, done, ticks, a, b) => done(undefined, a !== b));\naddOps(29 /* LispType.And */, (exec, done, ticks, a, b) => done(undefined, a && b));\naddOps(30 /* LispType.Or */, (exec, done, ticks, a, b) => done(undefined, a || b));\naddOps(77 /* LispType.BitAnd */, (exec, done, ticks, a, b) => done(undefined, a & b));\naddOps(78 /* LispType.BitOr */, (exec, done, ticks, a, b) => done(undefined, a | b));\naddOps(33 /* LispType.Plus */, (exec, done, ticks, a, b) => done(undefined, a + b));\naddOps(47 /* LispType.Minus */, (exec, done, ticks, a, b) => done(undefined, a - b));\naddOps(59 /* LispType.Positive */, (exec, done, ticks, a, b) => done(undefined, +b));\naddOps(58 /* LispType.Negative */, (exec, done, ticks, a, b) => done(undefined, -b));\naddOps(48 /* LispType.Divide */, (exec, done, ticks, a, b) => done(undefined, a / b));\naddOps(79 /* LispType.BitNegate */, (exec, done, ticks, a, b) => done(undefined, a ^ b));\naddOps(50 /* LispType.Multiply */, (exec, done, ticks, a, b) => done(undefined, a * b));\naddOps(51 /* LispType.Modulus */, (exec, done, ticks, a, b) => done(undefined, a % b));\naddOps(80 /* LispType.BitShiftLeft */, (exec, done, ticks, a, b) => done(undefined, a << b));\naddOps(81 /* LispType.BitShiftRight */, (exec, done, ticks, a, b) => done(undefined, a >> b));\naddOps(82 /* LispType.BitUnsignedShiftRight */, (exec, done, ticks, a, b) => done(undefined, a >>> b));\naddOps(60 /* LispType.Typeof */, (exec, done, ticks, a, b, obj, context, scope) => {\n exec(ticks, b, scope, context, (e, prop) => {\n done(undefined, typeof valueOrProp(prop, context));\n });\n});\naddOps(62 /* LispType.Instanceof */, (exec, done, ticks, a, b) => done(undefined, a instanceof b));\naddOps(63 /* LispType.In */, (exec, done, ticks, a, b) => done(undefined, a in b));\naddOps(61 /* LispType.Delete */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n if (bobj.context === undefined) {\n done(undefined, true);\n return;\n }\n assignCheck(bobj, context, 'delete');\n if (bobj.isVariable) {\n done(undefined, false);\n return;\n }\n done(undefined, delete bobj.context[bobj.prop]);\n});\naddOps(8 /* LispType.Return */, (exec, done, ticks, a, b, obj, context) => done(undefined, b));\naddOps(34 /* LispType.Var */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n done(undefined, scope.declare(a, VarType.var, b));\n});\naddOps(3 /* LispType.Let */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n done(undefined, scope.declare(a, VarType.let, b, bobj && bobj.isGlobal));\n});\naddOps(4 /* LispType.Const */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n done(undefined, scope.declare(a, VarType.const, b));\n});\naddOps(11 /* LispType.ArrowFunction */, (exec, done, ticks, a, b, obj, context, scope) => {\n a = [...a];\n if (typeof obj[2] === \"string\" || obj[2] instanceof CodeString) {\n obj[2] = b = lispifyFunction(new CodeString(obj[2]), context.constants);\n }\n if (a.shift()) {\n done(undefined, createFunctionAsync(a, b, ticks, context, scope));\n }\n else {\n done(undefined, createFunction(a, b, ticks, context, scope));\n }\n});\naddOps(37 /* LispType.Function */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (typeof obj[2] === \"string\" || obj[2] instanceof CodeString) {\n obj[2] = b = lispifyFunction(new CodeString(obj[2]), context.constants);\n }\n let isAsync = a.shift();\n let name = a.shift();\n let func;\n if (isAsync === 88 /* LispType.True */) {\n func = createFunctionAsync(a, b, ticks, context, scope, name);\n }\n else {\n func = createFunction(a, b, ticks, context, scope, name);\n }\n if (name) {\n scope.declare(name, VarType.var, func);\n }\n done(undefined, func);\n});\naddOps(10 /* LispType.InlineFunction */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (typeof obj[2] === \"string\" || obj[2] instanceof CodeString) {\n obj[2] = b = lispifyFunction(new CodeString(obj[2]), context.constants);\n }\n let isAsync = a.shift();\n let name = a.shift();\n if (name) {\n scope = new Scope(scope, {});\n }\n let func;\n if (isAsync === 88 /* LispType.True */) {\n func = createFunctionAsync(a, b, ticks, context, scope, name);\n }\n else {\n func = createFunction(a, b, ticks, context, scope, name);\n }\n if (name) {\n scope.declare(name, VarType.let, func);\n }\n done(undefined, func);\n});\naddOps(38 /* LispType.Loop */, (exec, done, ticks, a, b, obj, context, scope) => {\n const [checkFirst, startInternal, getIterator, startStep, step, condition, beforeStep] = a;\n let loop = true;\n const loopScope = new Scope(scope, {});\n let internalVars = {\n '$$obj': undefined\n };\n const interalScope = new Scope(loopScope, internalVars);\n if (exec === execAsync) {\n (async () => {\n let ad;\n ad = asyncDone((d) => exec(ticks, startStep, loopScope, context, d));\n internalVars['$$obj'] = (ad = asyncDone((d) => exec(ticks, getIterator, loopScope, context, d))).isInstant === true ? ad.instant : (await ad.p).result;\n ad = asyncDone((d) => exec(ticks, startInternal, interalScope, context, d));\n if (checkFirst)\n loop = (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant === true ? ad.instant : (await ad.p).result;\n while (loop) {\n let innerLoopVars = {};\n ad = asyncDone((d) => exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d));\n ad.isInstant === true ? ad.instant : (await ad.p).result;\n let res = await executeTreeAsync(ticks, context, b, [new Scope(loopScope, innerLoopVars)], \"loop\");\n if (res instanceof ExecReturn && res.returned) {\n done(undefined, res);\n return;\n }\n if (res instanceof ExecReturn && res.breakLoop) {\n break;\n }\n ad = asyncDone((d) => exec(ticks, step, interalScope, context, d));\n loop = (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n done();\n })().catch(done);\n }\n else {\n syncDone((d) => exec(ticks, startStep, loopScope, context, d));\n internalVars['$$obj'] = syncDone((d) => exec(ticks, getIterator, loopScope, context, d)).result;\n syncDone((d) => exec(ticks, startInternal, interalScope, context, d));\n if (checkFirst)\n loop = (syncDone((d) => exec(ticks, condition, interalScope, context, d))).result;\n while (loop) {\n let innerLoopVars = {};\n syncDone((d) => exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d));\n let res = executeTree(ticks, context, b, [new Scope(loopScope, innerLoopVars)], \"loop\");\n if (res instanceof ExecReturn && res.returned) {\n done(undefined, res);\n return;\n }\n if (res instanceof ExecReturn && res.breakLoop) {\n break;\n }\n syncDone((d) => exec(ticks, step, interalScope, context, d));\n loop = (syncDone((d) => exec(ticks, condition, interalScope, context, d))).result;\n }\n done();\n }\n});\naddOps(86 /* LispType.LoopAction */, (exec, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch) => {\n if ((inLoopOrSwitch === \"switch\" && a === \"continue\") || !inLoopOrSwitch) {\n throw new SandboxError(\"Illegal \" + a + \" statement\");\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false, a === \"break\", a === \"continue\"));\n});\naddOps(13 /* LispType.If */, (exec, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch) => {\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done);\n});\naddOps(15 /* LispType.InlineIf */, (exec, done, ticks, a, b, obj, context, scope) => {\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done);\n});\naddOps(16 /* LispType.InlineIfCase */, (exec, done, ticks, a, b) => done(undefined, new If(a, b)));\naddOps(14 /* LispType.IfCase */, (exec, done, ticks, a, b) => done(undefined, new If(a, b)));\naddOps(40 /* LispType.Switch */, (exec, done, ticks, a, b, obj, context, scope) => {\n exec(ticks, a, scope, context, (err, toTest) => {\n if (err) {\n done(err);\n return;\n }\n toTest = valueOrProp(toTest, context);\n if (exec === execSync) {\n let res;\n let isTrue = false;\n for (let caseItem of b) {\n if (isTrue || (isTrue = !caseItem[1] || toTest === valueOrProp((syncDone((d) => exec(ticks, caseItem[1], scope, context, d))).result, context))) {\n if (!caseItem[2])\n continue;\n res = executeTree(ticks, context, caseItem[2], [scope], \"switch\");\n if (res.breakLoop)\n break;\n if (res.returned) {\n done(undefined, res);\n return;\n }\n if (!caseItem[1]) { // default case\n break;\n }\n }\n }\n done();\n }\n else {\n (async () => {\n let res;\n let isTrue = false;\n for (let caseItem of b) {\n let ad;\n if (isTrue || (isTrue = !caseItem[1] || toTest === valueOrProp((ad = asyncDone((d) => exec(ticks, caseItem[1], scope, context, d))).isInstant === true ? ad.instant : (await ad.p).result, context))) {\n if (!caseItem[2])\n continue;\n res = await executeTreeAsync(ticks, context, caseItem[2], [scope], \"switch\");\n if (res.breakLoop)\n break;\n if (res.returned) {\n done(undefined, res);\n return;\n }\n if (!caseItem[1]) { // default case\n break;\n }\n }\n }\n done();\n })().catch(done);\n }\n });\n});\naddOps(39 /* LispType.Try */, (exec, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch) => {\n const [exception, catchBody, finallyBody] = b;\n executeTreeWithDone(exec, (err, res) => {\n executeTreeWithDone(exec, (e) => {\n if (e)\n done(e);\n else if (err) {\n let sc = {};\n if (exception)\n sc[exception] = err;\n executeTreeWithDone(exec, done, ticks, context, catchBody, [new Scope(scope)], inLoopOrSwitch);\n }\n else {\n done(undefined, res);\n }\n }, ticks, context, finallyBody, [new Scope(scope, {})]);\n }, ticks, context, a, [new Scope(scope)], inLoopOrSwitch);\n});\naddOps(87 /* LispType.Void */, (exec, done, ticks, a) => { done(); });\naddOps(45 /* LispType.New */, (exec, done, ticks, a, b, obj, context) => {\n if (!context.ctx.globalsWhitelist.has(a) && !sandboxedFunctions.has(a)) {\n throw new SandboxError(`Object construction not allowed: ${a.constructor.name}`);\n }\n done(undefined, new a(...b));\n});\naddOps(46 /* LispType.Throw */, (exec, done, ticks, a, b) => { done(b); });\naddOps(43 /* LispType.Expression */, (exec, done, ticks, a) => done(undefined, a.pop()));\naddOps(0 /* LispType.None */, (exec, done, ticks, a) => done());\nfunction valueOrProp(a, context) {\n if (a instanceof Prop)\n return a.get(context);\n if (a === optional)\n return undefined;\n return a;\n}\nexport function execMany(ticks, exec, tree, done, scope, context, inLoopOrSwitch) {\n if (exec === execSync) {\n _execManySync(ticks, tree, done, scope, context, inLoopOrSwitch);\n }\n else {\n _execManyAsync(ticks, tree, done, scope, context, inLoopOrSwitch).catch(done);\n }\n}\nfunction _execManySync(ticks, tree, done, scope, context, inLoopOrSwitch) {\n let ret = [];\n for (let i = 0; i < tree.length; i++) {\n let res;\n try {\n res = syncDone((d) => execSync(ticks, tree[i], scope, context, d, inLoopOrSwitch)).result;\n }\n catch (e) {\n done(e);\n return;\n }\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\n done(undefined, res);\n return;\n }\n if (isLisp(tree[i]) && tree[i][0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n ret.push(res);\n }\n done(undefined, ret);\n}\nasync function _execManyAsync(ticks, tree, done, scope, context, inLoopOrSwitch) {\n let ret = [];\n for (let i = 0; i < tree.length; i++) {\n let res;\n try {\n let ad;\n res = (ad = asyncDone((d) => execAsync(ticks, tree[i], scope, context, d, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n catch (e) {\n done(e);\n return;\n }\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\n done(undefined, res);\n return;\n }\n if (isLisp(tree[i]) && tree[i][0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n ret.push(res);\n }\n done(undefined, ret);\n}\nexport function asyncDone(callback) {\n let isInstant = false;\n let instant;\n const p = new Promise((resolve, reject) => {\n callback((err, result) => {\n if (err)\n reject(err);\n else {\n isInstant = true;\n instant = result;\n resolve({ result });\n }\n ;\n });\n });\n return {\n isInstant,\n instant,\n p\n };\n}\nexport function syncDone(callback) {\n let result;\n let err;\n callback((e, r) => {\n err = e;\n result = r;\n });\n if (err)\n throw err;\n return { result };\n}\nexport async function execAsync(ticks, tree, scope, context, doneOriginal, inLoopOrSwitch) {\n let done = doneOriginal;\n const p = new Promise((resolve) => {\n done = (e, r) => {\n doneOriginal(e, r);\n resolve();\n };\n });\n if (_execNoneRecurse(ticks, tree, scope, context, done, true, inLoopOrSwitch)) {\n }\n else if (isLisp(tree)) {\n let op = tree[0];\n let obj;\n try {\n let ad;\n obj = (ad = asyncDone((d) => execAsync(ticks, tree[1], scope, context, d, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let a = obj;\n try {\n a = obj instanceof Prop ? obj.get(context) : obj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (op === 20 /* LispType.PropOptional */ || op === 21 /* LispType.CallOptional */) {\n if (a === undefined || a === null) {\n done(undefined, optional);\n return;\n }\n op = op === 20 /* LispType.PropOptional */ ? 1 /* LispType.Prop */ : 5 /* LispType.Call */;\n }\n if (a === optional) {\n if (op === 1 /* LispType.Prop */ || op === 5 /* LispType.Call */) {\n done(undefined, a);\n return;\n }\n else {\n a = undefined;\n }\n }\n let bobj;\n try {\n let ad;\n bobj = (ad = asyncDone((d) => execAsync(ticks, tree[2], scope, context, d, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let b = bobj;\n try {\n b = bobj instanceof Prop ? bobj.get(context) : bobj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (b === optional) {\n b = undefined;\n }\n if (ops.has(op)) {\n try {\n ops.get(op)(execAsync, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch);\n }\n catch (err) {\n done(err);\n }\n }\n else {\n done(new SyntaxError('Unknown operator: ' + op));\n }\n }\n await p;\n}\nexport function execSync(ticks, tree, scope, context, done, inLoopOrSwitch) {\n if (_execNoneRecurse(ticks, tree, scope, context, done, false, inLoopOrSwitch)) {\n }\n else if (isLisp(tree)) {\n let op = tree[0];\n let obj;\n try {\n obj = syncDone((d) => execSync(ticks, tree[1], scope, context, d, inLoopOrSwitch)).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let a = obj;\n try {\n a = obj instanceof Prop ? obj.get(context) : obj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (op === 20 /* LispType.PropOptional */ || op === 21 /* LispType.CallOptional */) {\n if (a === undefined || a === null) {\n done(undefined, optional);\n return;\n }\n op = op === 20 /* LispType.PropOptional */ ? 1 /* LispType.Prop */ : 5 /* LispType.Call */;\n }\n if (a === optional) {\n if (op === 1 /* LispType.Prop */ || op === 5 /* LispType.Call */) {\n done(undefined, a);\n return;\n }\n else {\n a = undefined;\n }\n }\n let bobj;\n try {\n bobj = syncDone((d) => execSync(ticks, tree[2], scope, context, d, inLoopOrSwitch)).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let b = bobj;\n try {\n b = bobj instanceof Prop ? bobj.get(context) : bobj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (b === optional) {\n b = undefined;\n }\n if (ops.has(op)) {\n try {\n ops.get(op)(execSync, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch);\n }\n catch (err) {\n done(err);\n }\n }\n else {\n done(new SyntaxError('Unknown operator: ' + op));\n }\n }\n}\nconst unexecTypes = new Set([\n 11 /* LispType.ArrowFunction */,\n 37 /* LispType.Function */,\n 10 /* LispType.InlineFunction */,\n 38 /* LispType.Loop */,\n 39 /* LispType.Try */,\n 40 /* LispType.Switch */,\n 14 /* LispType.IfCase */,\n 16 /* LispType.InlineIfCase */,\n 60 /* LispType.Typeof */\n]);\nfunction _execNoneRecurse(ticks, tree, scope, context, done, isAsync, inLoopOrSwitch) {\n const exec = isAsync ? execAsync : execSync;\n if (context.ctx.options.executionQuota <= ticks.ticks) {\n if (typeof context.ctx.options.onExecutionQuotaReached === 'function' && context.ctx.options.onExecutionQuotaReached(ticks, scope, context, tree)) {\n }\n else {\n done(new SandboxError(\"Execution quota exceeded\"));\n return;\n }\n }\n ticks.ticks++;\n currentTicks = ticks;\n if (tree instanceof Prop) {\n try {\n done(undefined, tree.get(context));\n }\n catch (err) {\n done(err);\n }\n }\n else if (tree === optional) {\n done();\n }\n else if (Array.isArray(tree) && !isLisp(tree)) {\n if (tree[0] === 0 /* LispType.None */) {\n done();\n }\n else {\n execMany(ticks, exec, tree, done, scope, context, inLoopOrSwitch);\n }\n }\n else if (!isLisp(tree)) {\n done(undefined, tree);\n }\n else if (tree[0] === 42 /* LispType.Block */) {\n execMany(ticks, exec, tree[1], done, scope, context, inLoopOrSwitch);\n }\n else if (tree[0] === 44 /* LispType.Await */) {\n if (!isAsync) {\n done(new SandboxError(\"Illegal use of 'await', must be inside async function\"));\n }\n else if (context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\n execAsync(ticks, tree[1], scope, context, async (e, r) => {\n if (e)\n done(e);\n else\n try {\n done(undefined, await valueOrProp(r, context));\n }\n catch (err) {\n done(err);\n }\n }, inLoopOrSwitch).catch(done);\n }\n else {\n done(new SandboxError('Async/await is not permitted'));\n }\n }\n else if (unexecTypes.has(tree[0])) {\n try {\n ops.get(tree[0])(exec, done, ticks, tree[1], tree[2], tree, context, scope, undefined, inLoopOrSwitch);\n }\n catch (err) {\n done(err);\n }\n }\n else {\n return false;\n }\n return true;\n}\nexport function executeTree(ticks, context, executionTree, scopes = [], inLoopOrSwitch) {\n return syncDone((done) => executeTreeWithDone(execSync, done, ticks, context, executionTree, scopes, inLoopOrSwitch)).result;\n}\nexport async function executeTreeAsync(ticks, context, executionTree, scopes = [], inLoopOrSwitch) {\n let ad;\n return (ad = asyncDone((done) => executeTreeWithDone(execAsync, done, ticks, context, executionTree, scopes, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n}\nfunction executeTreeWithDone(exec, done, ticks, context, executionTree, scopes = [], inLoopOrSwitch) {\n if (!executionTree) {\n done();\n return;\n }\n if (!(executionTree instanceof Array)) {\n throw new SyntaxError('Bad execution tree');\n }\n let scope = context.ctx.globalScope;\n let s;\n while (s = scopes.shift()) {\n if (typeof s !== \"object\")\n continue;\n if (s instanceof Scope) {\n scope = s;\n }\n else {\n scope = new Scope(scope, s, s instanceof LocalScope ? undefined : null);\n }\n }\n if (context.ctx.options.audit && !context.ctx.auditReport) {\n context.ctx.auditReport = {\n globalsAccess: new Set(),\n prototypeAccess: {},\n };\n }\n if (exec === execSync) {\n _executeWithDoneSync(done, ticks, context, executionTree, scope, inLoopOrSwitch);\n }\n else {\n _executeWithDoneAsync(done, ticks, context, executionTree, scope, inLoopOrSwitch).catch(done);\n }\n}\nfunction _executeWithDoneSync(done, ticks, context, executionTree, scope, inLoopOrSwitch) {\n if (!(executionTree instanceof Array))\n throw new SyntaxError('Bad execution tree');\n let i = 0;\n for (i = 0; i < executionTree.length; i++) {\n let res;\n let err;\n const current = executionTree[i];\n try {\n execSync(ticks, current, scope, context, (e, r) => {\n err = e;\n res = r;\n }, inLoopOrSwitch);\n }\n catch (e) {\n err = e;\n }\n if (err) {\n done(err);\n return;\n }\n if (res instanceof ExecReturn) {\n done(undefined, res);\n return;\n }\n if (isLisp(current) && current[0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\n}\nasync function _executeWithDoneAsync(done, ticks, context, executionTree, scope, inLoopOrSwitch) {\n if (!(executionTree instanceof Array))\n throw new SyntaxError('Bad execution tree');\n let i = 0;\n for (i = 0; i < executionTree.length; i++) {\n let res;\n let err;\n const current = executionTree[i];\n try {\n await execAsync(ticks, current, scope, context, (e, r) => {\n err = e;\n res = r;\n }, inLoopOrSwitch);\n }\n catch (e) {\n err = e;\n }\n if (err) {\n done(err);\n return;\n }\n if (res instanceof ExecReturn) {\n done(undefined, res);\n return;\n }\n if (isLisp(current) && current[0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\n}\n","import { sandboxFunction, sandboxedEval, sandboxedSetTimeout, sandboxedSetInterval, executeTree, executeTreeAsync, ops, assignCheck, execMany, execAsync, execSync, asyncDone, Scope, FunctionScope, LocalScope, syncDone } from \"./executor.js\";\nimport { parse, expectTypes, setLispType } from \"./parser.js\";\nexport { expectTypes, setLispType, ops as executionOps, assignCheck, execMany, execAsync, execSync, asyncDone, syncDone, executeTree, executeTreeAsync, FunctionScope, LocalScope, };\nexport class SandboxGlobal {\n constructor(globals) {\n if (globals === globalThis)\n return globalThis;\n for (let i in globals) {\n this[i] = globals[i];\n }\n }\n}\nexport class ExecContext {\n constructor(ctx, constants, tree, getSubscriptions, setSubscriptions, changeSubscriptions, setSubscriptionsGlobal, changeSubscriptionsGlobal, evals, registerSandboxFunction) {\n this.ctx = ctx;\n this.constants = constants;\n this.tree = tree;\n this.getSubscriptions = getSubscriptions;\n this.setSubscriptions = setSubscriptions;\n this.changeSubscriptions = changeSubscriptions;\n this.setSubscriptionsGlobal = setSubscriptionsGlobal;\n this.changeSubscriptionsGlobal = changeSubscriptionsGlobal;\n this.evals = evals;\n this.registerSandboxFunction = registerSandboxFunction;\n }\n}\nfunction subscribeSet(obj, name, callback, context) {\n const names = context.setSubscriptions.get(obj) || new Map();\n context.setSubscriptions.set(obj, names);\n const callbacks = names.get(name) || new Set();\n names.set(name, callbacks);\n callbacks.add(callback);\n let changeCbs;\n if (obj && obj[name] && typeof obj[name] === \"object\") {\n changeCbs = context.changeSubscriptions.get(obj[name]) || new Set();\n changeCbs.add(callback);\n context.changeSubscriptions.set(obj[name], changeCbs);\n }\n return {\n unsubscribe: () => {\n callbacks.delete(callback);\n changeCbs?.delete(callback);\n }\n };\n}\nexport default class Sandbox {\n constructor(options) {\n this.setSubscriptions = new WeakMap();\n this.changeSubscriptions = new WeakMap();\n this.sandboxFunctions = new WeakMap();\n options = Object.assign({\n audit: false,\n forbidFunctionCalls: false,\n forbidFunctionCreation: false,\n globals: Sandbox.SAFE_GLOBALS,\n prototypeWhitelist: Sandbox.SAFE_PROTOTYPES,\n prototypeReplacements: new Map(),\n }, options || {});\n const sandboxGlobal = new SandboxGlobal(options.globals);\n this.context = {\n sandbox: this,\n globalsWhitelist: new Set(Object.values(options.globals)),\n prototypeWhitelist: new Map([...options.prototypeWhitelist].map((a) => [a[0].prototype, a[1]])),\n options,\n globalScope: new Scope(null, options.globals, sandboxGlobal),\n sandboxGlobal\n };\n this.context.prototypeWhitelist.set(Object.getPrototypeOf([][Symbol.iterator]()), new Set());\n }\n static get SAFE_GLOBALS() {\n return {\n Function,\n console: {\n debug: console.debug,\n error: console.error,\n info: console.info,\n log: console.log,\n table: console.table,\n warn: console.warn\n },\n isFinite,\n isNaN,\n parseFloat,\n parseInt,\n decodeURI,\n decodeURIComponent,\n encodeURI,\n encodeURIComponent,\n escape,\n unescape,\n Boolean,\n Number,\n BigInt,\n String,\n Object,\n Array,\n Symbol,\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Promise,\n Intl,\n JSON,\n Math,\n Date,\n RegExp\n };\n }\n static get SAFE_PROTOTYPES() {\n let protos = [\n SandboxGlobal,\n Function,\n Boolean,\n Number,\n BigInt,\n String,\n Date,\n Error,\n Array,\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Promise,\n Symbol,\n Date,\n RegExp\n ];\n let map = new Map();\n protos.forEach((proto) => {\n map.set(proto, new Set());\n });\n map.set(Object, new Set([\n 'entries',\n 'fromEntries',\n 'getOwnPropertyNames',\n 'is',\n 'keys',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf',\n 'values'\n ]));\n return map;\n }\n subscribeGet(callback, context) {\n context.getSubscriptions.add(callback);\n return { unsubscribe: () => context.getSubscriptions.delete(callback) };\n }\n subscribeSet(obj, name, callback, context) {\n return subscribeSet(obj, name, callback, context);\n }\n subscribeSetGlobal(obj, name, callback) {\n return subscribeSet(obj, name, callback, this);\n }\n static audit(code, scopes = []) {\n const globals = {};\n for (let i of Object.getOwnPropertyNames(globalThis)) {\n globals[i] = globalThis[i];\n }\n const sandbox = new Sandbox({\n globals,\n audit: true,\n });\n return sandbox.executeTree(sandbox.createContext(sandbox.context, parse(code)), scopes);\n }\n static parse(code) {\n return parse(code);\n }\n createContext(context, executionTree) {\n const evals = new Map();\n const execContext = new ExecContext(context, executionTree.constants, executionTree.tree, new Set(), new WeakMap(), new WeakMap(), this.setSubscriptions, this.changeSubscriptions, evals, (fn) => this.sandboxFunctions.set(fn, execContext));\n const func = sandboxFunction(execContext);\n evals.set(Function, func);\n evals.set(eval, sandboxedEval(func));\n evals.set(setTimeout, sandboxedSetTimeout(func));\n evals.set(setInterval, sandboxedSetInterval(func));\n return execContext;\n }\n getContext(fn) {\n return this.sandboxFunctions.get(fn);\n }\n executeTree(context, scopes = []) {\n return executeTree({\n ticks: BigInt(0),\n }, context, context.tree, scopes);\n }\n executeTreeAsync(context, scopes = []) {\n return executeTreeAsync({\n ticks: BigInt(0),\n }, context, context.tree, scopes);\n }\n compile(code, optimize = false) {\n const parsed = parse(code, optimize);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTree(context, [...scopes]).result };\n };\n return exec;\n }\n ;\n compileAsync(code, optimize = false) {\n const parsed = parse(code, optimize);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result) };\n };\n return exec;\n }\n ;\n compileExpression(code, optimize = false) {\n const parsed = parse(code, optimize, true);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTree(context, [...scopes]).result };\n };\n return exec;\n }\n compileExpressionAsync(code, optimize = false) {\n const parsed = parse(code, optimize, true);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result) };\n };\n return exec;\n }\n}\n","// import {\n// ErrorCode,\n// getErrorMsg,\n// getWarningMsg,\n// WarningCode,\n// } from '../../constant/logCode'\n//\n// const createContext = (globalData: Record<string, unknown>) => {\n// const iframe = document.createElement('iframe')\n// iframe.style.display = 'none'\n// if (!document || !document.body) {\n// console.error(getErrorMsg(ErrorCode.NO_DOCUMENT_BODY))\n// }\n// document.body.appendChild(iframe)\n// const iframeWindow = iframe.contentWindow\n// if (iframeWindow) {\n// // TODO: 确认是否需要该代码,parent 置为空是为了解决什么问题\n// // @ts-ignore\n// ;(iframeWindow!.parent as any) = null\n// Object.keys(globalData).forEach((key) => {\n// iframeWindow[key] = globalData[key]\n// })\n// }\n// return iframeWindow\n// }\n//\n// const runInContext = (code: string, context: any) => {\n// try {\n// const iframeEval = context.eval\n// iframeEval.call(context, code)\n// console.log('context --->>> ===>>>', context)\n// if (context.frameElement) {\n// document.body.removeChild(context.frameElement)\n// }\n// } catch (e) {\n// console.warn(getWarningMsg(WarningCode.EXPRESSION_EXEC_ERROR), {\n// code,\n// context,\n// e,\n// })\n// }\n// }\n//\n// const runInBrowserContext = async (\n// code: string,\n// globalData = {},\n// ): Promise<any> => {\n// const context = createContext(globalData)\n// runInContext(code, context)\n// return context\n// }\n//\n// export { createContext, runInContext, runInBrowserContext }\n\nimport Sandbox from '@nyariv/sandboxjs'\n\nexport const runInBrowserContext = async (\n code: string,\n globalData = {},\n): Promise<any> => {\n try {\n const sandbox = new Sandbox()\n const exec = sandbox.compile(code)\n return await exec(globalData).run()\n } catch (e) {\n console.log('runInBrowserContext error --->>>', e)\n }\n}\n","import { runInBrowserContext } from './browserVm'\n\nconst isInBrowser = typeof window === 'object' && window.window === window\n\nconst globalScope: any = (() => {\n if (isInBrowser) {\n return window\n }\n\n if (typeof self === 'object' && self.self === self) {\n return self\n }\n\n if (typeof globalThis === 'object') {\n return globalThis\n }\n\n return {\n eval: () => undefined,\n } as Record<string, unknown>\n})()\n\nconst getExpressionResult = async (code: string, context: any) => {\n const r = await runInBrowserContext(code, context)\n return r\n}\n\nexport { isInBrowser, globalScope, getExpressionResult }\n","import { Engine } from '..'\nimport { ActionStatus } from '../constant'\nimport { getExpressionResult } from '../platform'\n\nexport interface IBaseNodeProps {\n nodeConfig: BaseNode.NodeConfig\n context: Record<string, any>\n globalData: Record<string, unknown>\n}\n\nexport class BaseNode implements BaseNode.Base {\n readonly baseType: string\n static nodeTypeName = 'BaseNode'\n\n /**\n * 节点的入边\n */\n incoming: BaseNode.IncomingConfig[]\n /**\n * 节点的出边\n */\n outgoing: BaseNode.OutgoingConfig[]\n /**\n * 节点的属性\n */\n properties?: Record<string, unknown>\n nodeId: Engine.Key\n type: string\n /**\n * 节点的上下文,是调用流程时传入的上下文\n */\n context: Record<string, any>\n /**\n * 节点的全局数据,是调用流程时传入的全局数据\n * 在计算表达式时,即基于全局数据进行计算\n */\n globalData: Record<string, unknown>\n\n constructor({ nodeConfig, context, globalData }: IBaseNodeProps) {\n const { outgoing, incoming, id, type, properties } = nodeConfig\n this.baseType = 'base'\n this.outgoing = outgoing\n this.incoming = incoming\n this.nodeId = id\n this.type = type\n this.properties = properties\n\n this.context = context\n this.globalData = globalData\n }\n\n /**\n * 节点的执行逻辑\n * @overridable 可以自定义节点重写此方法\n * @param param.executionId 流程执行记录 ID\n * @param param.actionId 此节点执行记录 ID\n * @param param.nodeId 节点 ID\n * @return 返回下一步的执行参数\n * 当不返回时,表示此节点执行成功,流程会继续执行下一步。\n * 当返回时,返回格式为\n */\n public async action(\n param?: Engine.ActionParam,\n ): Promise<BaseNode.ActionResult | undefined> {\n console.log('action param --->>>', param)\n return undefined\n }\n\n /**\n * 节点重新恢复执行的逻辑\n * @overridable 可以自定义节点重写此方法\n * @param params.executionId 流程执行记录 ID\n * @param params.actionId 此节点执行记录 ID\n * @param params.nodeId 节点 ID\n */\n public async onResume(params: Engine.ResumeParam): Promise<void> {\n console.log('onResume params --->>>', params)\n return undefined\n }\n\n /**\n * 判断该节点是否满足条件\n */\n private async isPass(properties?: Record<string, unknown>): Promise<boolean> {\n if (!properties) return true\n\n const { conditionExpression } = properties\n if (!conditionExpression) return true\n\n try {\n // bug:uuid 创建的 NodeId 为 xxxx-xxxx-xxxx-zzzz 格式,eval 执行时会将 - 识别为数学减号,导致执行报错\n // 解决方案: 赋值变量直接命名为 isPassResult, 因为每次执行 getExpressionResult 时,都会重新射程一个 context\n return await getExpressionResult(\n `\n const isPassResult = (${conditionExpression})\n return isPassResult\n `,\n {\n ...this.globalData,\n },\n )\n } catch (error) {\n return false\n }\n }\n\n /**\n * 获取当前节点执行的下一个节点\n */\n private async getOutgoing(): Promise<BaseNode.OutgoingConfig[]> {\n const outgoing: BaseNode.OutgoingConfig[] = []\n const expressions: any = []\n for (const item of this.outgoing) {\n const { properties } = item\n expressions.push(this.isPass(properties))\n }\n\n const result = await Promise.all(expressions)\n result.forEach((item, index) => {\n const out = this.outgoing[index]\n out.result = item\n outgoing.push(out)\n })\n return outgoing\n }\n\n /**\n * 节点的每一次执行都会生成一个唯一的 actionId\n */\n public async execute(\n params: Engine.ExecParam,\n ): Promise<Engine.NextActionParam> {\n const { executionId, actionId } = params\n const res = await this.action({\n nodeId: this.nodeId,\n executionId,\n actionId,\n })\n const status = res ? res.status : 'success'\n\n if (status === ActionStatus.SUCCESS) {\n const outgoing = await this.getOutgoing()\n const detail = res ? res.detail : {}\n params.next({\n status: ActionStatus.SUCCESS,\n detail,\n nodeId: this.nodeId,\n nodeType: this.type,\n properties: this.properties,\n executionId,\n actionId,\n outgoing,\n })\n }\n\n return {\n status,\n detail: res?.detail,\n executionId,\n actionId,\n nodeId: this.nodeId,\n nodeType: this.type,\n properties: this.properties,\n outgoing: [],\n }\n }\n\n public async resume(params: Engine.ExecResumeParam): Promise<undefined> {\n const outgoing = await this.getOutgoing()\n await this.onResume({\n executionId: params.executionId,\n actionId: params.actionId,\n nodeId: params.nodeId,\n data: params.data,\n })\n\n params.next({\n executionId: params.executionId,\n actionId: params.actionId,\n nodeId: this.nodeId,\n nodeType: this.type,\n properties: this.properties,\n outgoing,\n status: ActionStatus.SUCCESS,\n })\n return undefined\n }\n}\n\nexport namespace BaseNode {\n export interface Base {\n incoming: IncomingConfig[]\n outgoing: OutgoingConfig[]\n properties?: Record<string, unknown>\n nodeId: Engine.Key\n type: string\n readonly baseType: string\n execute(actionParam: Engine.ActionParam): Promise<Engine.NextActionParam>\n }\n\n export type IncomingConfig = {\n id: Engine.Key\n source: string\n properties?: Record<string, unknown>\n }\n\n export type OutgoingConfig = {\n id: Engine.Key\n target: string\n properties?: Record<string, unknown>\n result?: string | boolean\n }\n\n export type NodeConfig = {\n id: Engine.Key\n type: string\n properties?: Record<string, unknown>\n incoming: IncomingConfig[]\n outgoing: OutgoingConfig[]\n }\n\n export type NodeConstructor = {\n new (config: {\n nodeConfig: NodeConfig\n context: Record<string, any>\n globalData: Record<string, unknown>\n }): BaseNode\n }\n\n export type ActionResult = {\n status: ActionStatus\n detail?: Record<string, unknown>\n }\n}\n\nexport default BaseNode\n","import BaseNode from './base'\n\nexport default class StartNode extends BaseNode {\n readonly baseType = 'start'\n static nodeTypeName = 'StartNode'\n}\n\nexport { StartNode }\n","import BaseNode from './base'\n\nexport default class TaskNode extends BaseNode {\n readonly baseType = 'task'\n static nodeTypeName = 'TaskNode'\n}\n\nexport { TaskNode }\n","export interface EventType {\n readonly callback: (params?: any) => void\n readonly once: boolean\n}\n\nexport type EventArgs = Record<string, unknown>\nexport type EventsType = Record<string, EventType[]>\nexport type CallbackType = (...args: unknown[]) => void\n\nexport default class EventEmitter {\n private _events: EventsType\n constructor() {\n this._events = {}\n }\n\n /**\n * 添加一个监听事件\n * @param evtKey 事件名称\n * @param callback 回调方法\n * @param once 是否触发一次\n * @returns 当前 EventEmitter 实例\n */\n on(evtKey: string, callback: CallbackType, once?: boolean) {\n evtKey = evtKey.trim()\n if (!this._events[evtKey]) {\n this._events[evtKey] = []\n }\n this._events[evtKey].push({\n callback,\n once: !!once,\n })\n }\n\n /**\n * 取消监听一个事件,或者一个 Channel\n * @param evtKey\n * @param callback\n */\n off(evtKey: string, callback?: CallbackType) {\n if (!evtKey) {\n // evtKey 为空全部清除\n this._events = {}\n }\n if (!callback) {\n // evtKey 存在,callback 为空,清除事件所有方法\n delete this._events[evtKey]\n } else {\n // evtKey 存在,callback 存在,清除匹配的\n const events = this._events[evtKey] || []\n let { length } = events\n for (let i = 0; i < length; i++) {\n if (events[i].callback === callback) {\n events.splice(i, 1)\n length--\n i--\n }\n }\n if (events.length === 0) {\n delete this._events[evtKey]\n }\n }\n }\n\n /**\n * 主动触发事件\n * @param evtKey 触发事件名称\n * @param eventArgs 事件参数\n */\n emit(evtKey: string, eventArgs: EventArgs) {\n const events = this._events[evtKey] || []\n // 实际的处理 emit 方法\n const doEmit = (es) => {\n let { length } = es\n for (let i = 0; i < length; i++) {\n if (!es[i]) {\n // eslint-disable-next-line no-continue\n continue\n }\n const { callback, once } = es[i]\n if (once) {\n es.splice(i, 1)\n if (es.length === 0) {\n delete this._events[evtKey]\n }\n length--\n i--\n }\n callback.apply(this, [eventArgs])\n }\n }\n doEmit(events)\n }\n\n /**\n * 获取当前所有事件\n * @returns _events\n */\n getEvents() {\n return this._events\n }\n}\n\nexport { EventEmitter }\n","// 判断当前环境是否为服务端\n// const isServer = typeof window === undefined;\n\n// const isServer = process.env.BROWSER === true;\n\nconst isInBrowser = typeof window === 'object' && window.window === window\n\nconst isInNodeJS = typeof global === 'object' && global.global === global\n\nconst isInWebWorker =\n !isInBrowser && typeof self === 'object' && self.constructor\n\nconst globalScope: any = (() => {\n if (isInBrowser) {\n return window\n }\n\n if (typeof self === 'object' && self.self === self) {\n return self\n }\n\n if (isInNodeJS) {\n return global\n }\n\n if (typeof globalThis === 'object') {\n return globalThis\n }\n\n return {\n eval: () => undefined,\n } as Record<string, unknown>\n})()\n\nexport {\n // 环境相关方法\n globalScope,\n isInWebWorker,\n isInBrowser,\n isInNodeJS,\n}\n","/**\n * 存储执行记录\n */\nimport { globalScope } from './global'\n\nif (!globalScope.sessionStorage) {\n const storage = {\n data: {} as Record<string, unknown>,\n\n setItem(key, value) {\n storage.data[key] = value\n },\n\n getItem(key) {\n return storage.data[key]\n },\n\n removeItem(key) {\n delete storage.data[key]\n },\n\n clear() {\n storage.data = {}\n },\n }\n\n globalScope.sessionStorage = storage\n}\n\nexport default {\n setItem(key, value) {\n if (typeof value === 'object') {\n value = JSON.stringify(value)\n }\n\n globalScope.sessionStorage.setItem(key, value)\n },\n\n getItem(key) {\n const value = globalScope.sessionStorage.getItem(key)\n try {\n return JSON.parse(value)\n } catch (error) {\n return value\n }\n },\n\n removeItem(key) {\n globalScope.sessionStorage.removeItem(key)\n },\n\n clear() {\n globalScope.sessionStorage.clear()\n },\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\n\nfunction rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n _crypto.default.randomFillSync(rnds8Pool);\n\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.default)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.URL = exports.DNS = void 0;\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction _default(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction md5(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('md5').update(bytes).digest();\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction sha1(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('sha1').update(bytes).digest();\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nvar _default = version;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function () {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function () {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function () {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function () {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function () {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function () {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","import { v4 as uuidV4 } from 'uuid'\n\nexport const createExecId = (): string => {\n const uuid = uuidV4()\n return `exec-${uuid}`\n}\n\nexport const createActionId = (): string => {\n const uuid = uuidV4()\n return `action-${uuid}`\n}\n\nexport const createEngineId = (): string => {\n const uuid = uuidV4()\n return `engine-${uuid}`\n}\n","import { Engine } from '.'\nimport Recorder from './recorder'\nimport FlowModel from './FlowModel'\nimport EventEmitter from './EventEmitter'\nimport { createActionId } from './utils'\nimport {\n EVENT_INSTANCE_ERROR,\n EVENT_INSTANCE_COMPLETE,\n EVENT_INSTANCE_INTERRUPTED,\n FlowStatus,\n} from './constant'\n\n/**\n * 调度器\n * 通过一个队列维护需要执行的节点,一个集合维护正在执行的节点\n */\nexport class Scheduler extends EventEmitter {\n /**\n * 当前需要执行的节点队列\n */\n nodeQueueMap: Map<Engine.Key, Engine.NodeParam[]>\n /**\n * 当前正在执行的节点集合\n * 在每个节点执行完成后,会从集合中删除\n * 同时会判断次集合中是否还存在和此节点相同的 executionId,如果不存在,说明该流程已经执行完成\n */\n actionRunningMap: Map<Engine.Key, Scheduler.ActionParamMap>\n /**\n * 流程模型,用于创建节点模型\n */\n flowModel: FlowModel\n /**\n * 执行记录存储器\n * 用于存储节点执行的结果\n */\n recorder?: Recorder\n\n constructor(config: Scheduler.ISchedulerProps) {\n super()\n this.nodeQueueMap = new Map()\n this.actionRunningMap = new Map()\n this.flowModel = config.flowModel\n this.recorder = config.recorder\n }\n\n /**\n * 添加一个任务到队列中。\n * 1. 由流程模型将所有的开始及诶带你添加到队列中\n * 2. 当一个节点执行完成后,将后续的节点添加到队列中\n * @param nodeParam\n */\n public addAction(nodeParam: Engine.NodeParam) {\n const { executionId } = nodeParam\n if (!this.nodeQueueMap.has(executionId)) {\n this.nodeQueueMap.set(executionId, [])\n }\n\n const currentActionQueue: Engine.NodeParam[] | undefined =\n this.nodeQueueMap.get(executionId)\n if (currentActionQueue) {\n currentActionQueue.push(nodeParam)\n }\n console.log('this.nodeQueueMap--->>>', this.nodeQueueMap)\n }\n\n private pushActionToRunningMap(actionParam: Scheduler.ActionParam) {\n const { executionId, actionId } = actionParam\n if (!this.actionRunningMap.has(executionId)) {\n const runningMap: Scheduler.ActionParamMap = new Map()\n this.actionRunningMap.set(executionId, runningMap)\n }\n if (actionId) {\n this.actionRunningMap.get(executionId)?.set(actionId, actionParam)\n }\n }\n\n private removeActionFromRunningMap(actionParam: Engine.ActionParam) {\n const { executionId, actionId } = actionParam\n if (!actionId) return\n\n const runningMap = this.actionRunningMap.get(executionId)\n if (!runningMap) return\n\n runningMap.delete(actionId)\n }\n\n /**\n * 为了防止多次添加导致\n * @param actionParam\n */\n private saveActionResult(actionParam: Engine.NextActionParam) {\n this.recorder?.addActionRecord({\n timestamp: Date.now(),\n ...actionParam,\n })\n }\n\n private hasRunningAction(executionId: Engine.Key): boolean {\n const runningMap = this.actionRunningMap.get(executionId)\n if (!runningMap) return false\n if (runningMap.size === 0) {\n this.actionRunningMap.delete(executionId)\n return false\n }\n return true\n }\n\n /**\n * 调度器执行下一个任务\n * 1. 提供给流程模型,用户开始执行第一个任务\n * 2. 内部任务执行完成后,调用此方法继续执行下一个任务\n * 3. 当判断没有可以继续执行的任务后,触发流程结束事件\n * @param runParam\n */\n public run(runParam: Scheduler.ActionParam) {\n const nodeQueue: Engine.NodeParam[] | undefined = this.nodeQueueMap.get(\n runParam.executionId,\n )\n\n // 将同一个 executionId 当前待执行的节点一起执行\n // 避免出现某一个节点执行时间过长,导致其他节点等待时间过长\n while (nodeQueue?.length) {\n const currentNode = nodeQueue.pop()\n const actionId = createActionId()\n const actionParam: Engine.ActionParam = {\n ...(currentNode as Engine.NodeParam),\n actionId,\n }\n this.pushActionToRunningMap(actionParam)\n this.exec(actionParam)\n }\n\n if (!this.hasRunningAction(runParam.executionId)) {\n // 当一个流程在 nodeQueueMap 和 actionRunningMap 中都不存在执行的节点时,说明这个流程已经执行完成。\n this.emit(EVENT_INSTANCE_COMPLETE, {\n ...runParam,\n status: FlowStatus.COMPLETED,\n })\n }\n }\n\n private next(data: Engine.NextActionParam) {\n if (data.outgoing && data.outgoing.length > 0) {\n data.outgoing.forEach((item) => {\n if (item.result) {\n this.addAction({\n executionId: data.executionId,\n nodeId: item.target,\n })\n }\n })\n }\n\n this.saveActionResult(data)\n this.removeActionFromRunningMap(data)\n this.run(data)\n }\n\n /**\n * 恢复某个任务的执行\n * 可以自定义节点手动实现流程中断,然后通过此方法恢复流程的执行\n * @param resumeParam\n */\n public async resume(resumeParam: Engine.ResumeParam) {\n const { executionId, actionId, nodeId } = resumeParam\n this.pushActionToRunningMap({\n executionId,\n actionId,\n nodeId,\n })\n\n const model = this.flowModel.createAction(nodeId)\n await model?.resume({\n ...resumeParam,\n next: this.next.bind(this),\n })\n }\n\n // 中断时,触发事件\n private interrupted(execResult: Engine.NextActionParam) {\n this.emit(EVENT_INSTANCE_INTERRUPTED, execResult)\n }\n // 报错时,触发事件\n private error(execResult: Engine.NextActionParam) {\n this.emit(EVENT_INSTANCE_ERROR, execResult)\n }\n\n private async exec(actionParam: Engine.ActionParam) {\n const { executionId, actionId, nodeId } = actionParam\n const model = this.flowModel.createAction(nodeId)\n const execResult = await model?.execute({\n executionId,\n actionId,\n nodeId,\n next: this.next.bind(this),\n })\n\n if (execResult) {\n const { nodeType, properties, outgoing, status, detail } = execResult\n const actionResult: Engine.NextActionParam = {\n // actionParam\n executionId,\n actionId,\n nodeId,\n // execResult\n nodeType,\n properties,\n outgoing,\n status,\n detail,\n }\n if (execResult?.status === FlowStatus.INTERRUPTED) {\n this.interrupted(execResult)\n this.saveActionResult(actionResult)\n this.removeActionFromRunningMap(actionParam)\n }\n\n if (execResult?.status === FlowStatus.ERROR) {\n this.error(execResult)\n this.saveActionResult(actionResult)\n this.removeActionFromRunningMap(actionParam)\n }\n }\n // TODO: 考虑停下所有的任务\n }\n}\n\nexport namespace Scheduler {\n export type ActionParam = {\n executionId: Engine.Key\n actionId?: Engine.Key\n nodeId?: Engine.Key\n data?: Record<string, unknown>\n [key: string]: unknown\n }\n export type ActionParamMap = Map<Engine.Key, ActionParam>\n\n export interface ISchedulerProps {\n flowModel: FlowModel\n recorder?: Recorder\n }\n}\n\nexport default Scheduler\n","import { Engine } from '.'\nimport { Recorder } from './recorder'\nimport { Scheduler } from './Scheduler'\nimport { BaseNode } from './nodes'\nimport { createExecId } from './utils'\nimport {\n EVENT_INSTANCE_COMPLETE,\n EVENT_INSTANCE_INTERRUPTED,\n EVENT_INSTANCE_ERROR,\n ErrorCode,\n getErrorMsg,\n} from './constant'\n\nexport class FlowModel {\n /**\n * 流程支持的节点类型.\n */\n nodeModelMap: Map<string, BaseNode.NodeConstructor>\n /**\n * 调度器,用于调度节点执行\n */\n scheduler: Scheduler\n /**\n * 待执行的队列,当流程正在执行时,如果再次触发执行。那么会将执行参数放到队列中,等待上一次执行完成后再执行。\n */\n executeList: Partial<FlowModel.ExecParam>[]\n /**\n * 当前正在执行的任务。当监听到调度器执行完成时,触发执行参数中的回调,告知外部执行完成。\n */\n executingInstance?: FlowModel.ExecParam | null\n /**\n * 当前流程模型中的所有节点,边会被转换成节点的 incoming 和 outgoing 属性\n */\n nodeConfigMap: Map<Engine.Key, BaseNode.NodeConfig> = new Map()\n /**\n * 当流程正在执行时,如果再次触发执行。那么会将执行参数放入到队列中,等待上一次执行完成后再执行。\n */\n isRunning: boolean\n /**\n * 开始接地那类型,在执行流程时,会从这些节点开始执行\n */\n startNodeType: string\n /**\n * 当前流程中开始节点组成的数组\n */\n startNodes: BaseNode.NodeConfig[] = []\n /**\n * 用于存储全局数据,最终会传递给每个节点\n */\n globalData: Record<string, unknown> = {}\n\n /**\n * 外部传入的上下文,最终会传递给每个节点\n * 例如:\n * const context = {\n * request: {\n * get: (url) => {\n * return fetch(url);\n * },\n * },\n * }\n * 在节点内可以通过 this.context.request.get(url) 来调用。\n */\n context: Record<string, unknown>\n\n constructor({\n nodeModelMap,\n recorder,\n context = {},\n globalData = {},\n startNodeType = 'StartNode',\n }: FlowModel.IFlowModelProps) {\n // 流程包含的节点类型 ??? 在 load 代码中又初始化了一遍,为什么要传进来\n this.nodeModelMap = nodeModelMap\n // 需要执行的队列\n this.executeList = []\n // 执行中的任务\n this.executingInstance = null\n // 外部传入的上下文,最终会传递给每个节点\n this.context = context\n // 用于存储全局数据,可以在流程中共享\n this.globalData = globalData\n // 开始节点类型,在执行流程时,会从这些节点开始执行\n this.startNodeType = startNodeType\n this.isRunning = false\n this.scheduler = new Scheduler({\n flowModel: this,\n recorder,\n })\n\n this.scheduler.on(EVENT_INSTANCE_COMPLETE, (result) => {\n this.onExecuteFinished(result)\n })\n\n this.scheduler.on(EVENT_INSTANCE_INTERRUPTED, (result) => {\n this.onExecuteFinished(result)\n })\n\n this.scheduler.on(EVENT_INSTANCE_ERROR, (result) => {\n this.onExecuteFinished(result)\n })\n }\n\n /**\n * 解析LogicFlow图数据,将nodes和edges转换成节点格式。\n * 例如:\n * graphData: {\n * nodes: [\n * { id: 'node1', type: 'StartNode', properties: {} },\n * { id: 'node2', type: 'TaskNode', properties: {} },\n * ],\n * edges: [\n * { id: 'edge1', sourceNodeId: 'node1', targetNodeId: 'node2', properties: {} },\n * ]\n * }\n * 转换成:\n * nodeConfigMap: {\n * node1: {\n * id: 'node1',\n * type: 'StartNode',\n * properties: {},\n * incoming: [],\n * outgoing: [{ id: 'edge1', properties: {}, target: 'node2' }]\n * },\n * node2: {\n * id: 'node2',\n * type: 'TaskNode',\n * properties: {},\n * incoming: [{ id: 'edge1', properties: {}, source: 'node1' }],\n * outgoing: [],\n * }\n * }\n * 此格式方便后续执行时,根据节点id快速找到节点和执行初始化节点模型。\n * 同时此方法还会找到所有的开始节点,方便后续执行时,从开始节点开始执行。\n * @param graphData 流程图数据\n */\n public load(graphData: Engine.GraphConfigData) {\n const { nodes = [], edges = [] } = graphData\n nodes.forEach((node) => {\n if (this.nodeModelMap.has(node.type)) {\n const nodeConfig: BaseNode.NodeConfig = {\n id: node.id,\n type: node.type,\n properties: node.properties,\n incoming: [],\n outgoing: [],\n }\n this.nodeConfigMap.set(node.id, nodeConfig)\n if (node.type === this.startNodeType) {\n this.startNodes.push(nodeConfig)\n }\n } else {\n console.warn(`未识别的节点类型:${node.type}`)\n }\n })\n\n edges.forEach((edge) => {\n const sourceNode = this.nodeConfigMap.get(edge.sourceNodeId)\n const targetNode = this.nodeConfigMap.get(edge.targetNodeId)\n if (sourceNode) {\n sourceNode.outgoing.push({\n id: edge.id,\n properties: edge.properties,\n target: edge.targetNodeId,\n })\n }\n if (targetNode && targetNode.type !== this.startNodeType) {\n targetNode.incoming.push({\n id: edge.id,\n properties: edge.properties,\n source: edge.sourceNodeId,\n })\n }\n })\n }\n\n /**\n * 从待执行队列中取出需要执行的内容。\n * 会依次判断是否有 actionId、nodeId、executionId。\n * 若存在 actionId,那么表示恢复执行\n * 若存在 nodeId,那么表示从指定节点开始执行\n * 若都不存在,那么新建一个 executionId,从开始节点开始执行\n * @private\n */\n private createExecution(execParam: Partial<FlowModel.ExecParam>) {\n this.executeList.push(execParam)\n\n // 如果有 actionId,则表示恢复执行\n // TODO: 待测试,确认该流程\n if (execParam.actionId && execParam.nodeId && execParam.executionId) {\n this.scheduler.resume({\n executionId: execParam.executionId,\n actionId: execParam.actionId,\n nodeId: execParam.nodeId,\n data: execParam.data,\n })\n return\n }\n\n // 否则,判断 executionId 是否存在,使用 executionId 或创建新的 execution,从开始节点开始执行\n // const executionId = execParam?.executionId || createExecId()\n const executionId = createExecId()\n execParam.executionId = executionId\n\n // 当指定了具体需要执行的节点时,执行下面方法\n if (execParam?.nodeId) {\n const nodeConfig = this.nodeConfigMap.get(execParam.nodeId)\n if (!nodeConfig) {\n execParam?.onError?.(\n new Error(\n `${getErrorMsg(ErrorCode.NONE_NODE_ID)}(${execParam.nodeId})`,\n ),\n )\n return\n }\n // 当指定了开始节点,且该节点存在,则直接以这个节点开始执行\n this.startNodes = [nodeConfig]\n }\n\n this.startNodes.forEach((startNode) => {\n this.scheduler.addAction({\n executionId,\n nodeId: startNode.id,\n })\n })\n // 所有的开始节点都执行\n this.scheduler.run({\n executionId,\n })\n }\n\n /**\n * 执行流程,每次执行都会生成一个唯一的 executionId,用于区分不同的执行。\n * 同一次执行,这次执行内部的节点执行顺序为并行。内部并行是为了避免异步节点阻塞其他节点的执行\n * 多次执行,多次执行之间为串行,这里选择串行的原因是避免多次执行之间的数据冲突。\n * 例如:\n * 一个流程存在两个开始节点,A 和 B,A 和 B 的下一个节点都是 C,C 的下两个节点是 D 和 E\n * 外部分别触发了 A 和 B 的执行,那么 A 和 B 的执行是串行(即 A 执行完再执行 B),但是 D 和 E 的执行是并行的。\n * 如果希望 A 和 B 的执行时并行的,就不能使用同一个流程模型执行,应该初始化两个。\n * 下面直接使用调度器的队列\n * @param params\n */\n public async execute(params: Partial<FlowModel.ExecParam>) {\n this.createExecution(params)\n }\n\n public async resume(params: Partial<FlowModel.ExecParam>) {\n this.createExecution(params)\n }\n\n /**\n * 创建节点实例,每个节点实例都会有一个唯一的 actionId\n * 通过 executionId, nodeId, actionId 可以唯一确定一个节点的某一次执行\n * @param nodeId\n * @returns 节点实例\n */\n // TODO: 确认下面这种场景,类型如何定义\n public createAction(nodeId: Engine.Key) {\n const nodeConfig = this.nodeConfigMap.get(nodeId)\n if (nodeConfig) {\n const NodeModel = this.nodeModelMap.get(nodeConfig.type)\n if (!NodeModel) {\n throw new Error('该 NodeModel 不存在,抛出异常')\n }\n return new NodeModel({\n nodeConfig,\n globalData: this.globalData,\n context: this.context,\n })\n }\n }\n\n public setStartNodeType(type: string) {\n this.startNodeType = type\n }\n\n public updateGlobalData(data: Record<string, unknown>) {\n // TODO: 数据的合并,是否考虑子项的合并(默认值的替换)\n this.globalData = {\n ...this.globalData,\n ...data,\n }\n return this.globalData\n }\n\n /**\n * 在执行完成后,通知外部此次之行完成\n * 如果还存在待执行的任务,那么继续执行\n * @param result\n * @private\n */\n private onExecuteFinished(result) {\n const index = this.executeList.findIndex(\n (i) => i.executionId === result.executionId,\n )\n if (index > -1) {\n const { callback } = this.executeList[index]\n this.executeList.splice(index, 1)\n callback?.(result)\n }\n }\n}\n\nexport namespace FlowModel {\n export type FlowResult =\n | ({\n result?: Record<string, unknown>\n } & Engine.ActionParam)\n | Engine.NextActionParam\n\n export type ActionParam = Scheduler.ActionParam\n\n export type ExecParam = {\n callback?: (result: Engine.NextActionParam) => void\n onError?: (error: Error) => void\n } & ActionParam\n\n export interface IFlowModelProps {\n nodeModelMap: Map<string, BaseNode.NodeConstructor>\n recorder?: Recorder\n context?: Record<string, unknown>\n globalData?: Record<string, unknown>\n startNodeType?: string\n }\n}\n\nexport default FlowModel\n","import { Engine } from '..'\nimport { storage } from '../utils'\n\nexport const MAX_RECORDER = 100\nexport const MAX_INSTANCE = 100\nexport const LOGICFLOW_ENGINE_INSTANCES = 'LOGICFLOW_ENGINE_INSTANCES'\n\nexport class Recorder implements Recorder.Base {\n instanceId: Engine.Key\n maxRecorder: number\n\n constructor({ instanceId }) {\n this.instanceId = instanceId\n this.maxRecorder = MAX_RECORDER\n\n const instances = this.getItem(LOGICFLOW_ENGINE_INSTANCES) || []\n if (instances.indexOf(instanceId) === -1) {\n instances.push(instanceId)\n }\n if (instances.length > MAX_INSTANCE) {\n const clearInstance = instances.shift()\n this.clearInstance(clearInstance)\n }\n this.setItem(LOGICFLOW_ENGINE_INSTANCES, instances)\n }\n\n setMaxRecorderNumber(max: number) {\n this.maxRecorder = max\n }\n\n // 将存储 storage 的方法收敛到此处,并在此处做异常处理 - setItem\n setItem(key: string | number, value: unknown) {\n try {\n storage.setItem(key, value)\n } catch (error) {\n console.error('Ops, something wrong with storage.setItem !!!')\n storage.clear()\n storage.setItem(key, value)\n }\n }\n\n // getItem 方法\n getItem(key: string | number) {\n return storage.getItem(key)\n }\n\n async getExecutionActions(executionId: Engine.Key) {\n return this.getItem(executionId)\n }\n\n async getExecutionList() {\n return this.getItem(this.instanceId) || []\n }\n\n private addExecution(executionId: Engine.Key) {\n const instanceExecutions = this.getItem(this.instanceId) || []\n if (instanceExecutions.length >= this.maxRecorder) {\n const toBeRemovedItem = instanceExecutions.shift()\n this.popExecution(toBeRemovedItem)\n }\n instanceExecutions.push(executionId)\n this.setItem(this.instanceId, instanceExecutions)\n }\n\n private popExecution(executionId: Engine.Key) {\n const instanceData = this.getItem(executionId) || []\n instanceData.forEach((actionId) => {\n storage.removeItem(actionId)\n })\n storage.removeItem(executionId)\n }\n\n private pushActionToExecution(executionId: Engine.Key, actionId: Engine.Key) {\n const actions = this.getItem(executionId) || []\n actions.push(actionId)\n this.setItem(executionId, actions)\n }\n\n /**\n * @param {Object} action\n * {\n * actionId: '',\n * nodeId: '',\n * executionId: '',\n * nodeType: '',\n * timestamp: '',\n * properties: {},\n * }\n */\n async addActionRecord(action: Recorder.Info) {\n const { executionId, actionId } = action\n const instanceData = await this.getExecutionActions(executionId)\n\n if (!instanceData) {\n this.addExecution(executionId)\n }\n this.pushActionToExecution(executionId, actionId)\n this.setItem(actionId, action)\n }\n\n async getActionRecord(actionId: Engine.Key): Promise<Recorder.Info> {\n return this.getItem(actionId)\n }\n\n clear() {\n this.clearInstance(this.instanceId)\n }\n\n clearInstance(instanceId: Engine.Key) {\n const instanceExecutions = this.getItem(instanceId) || []\n // TODO: 完善类型定义\n instanceExecutions.forEach((executionId) => {\n storage.removeItem(executionId)\n const instanceData = this.getItem(executionId) || []\n instanceData.forEach((actionId) => {\n storage.removeItem(actionId)\n })\n })\n\n storage.removeItem(instanceId)\n }\n}\n\nexport namespace Recorder {\n export interface Base {\n addActionRecord: (action: Info) => Promise<void>\n getActionRecord: (actionId: Engine.Key) => Promise<Info>\n getExecutionActions: (executionId: Engine.Key) => Promise<string[]>\n clear: () => void\n }\n\n export type Info = {\n timestamp: number\n } & Engine.NextActionParam\n}\n\nexport default Recorder\n","// import { LogicFlow } from '@logicflow/core';\nimport { BaseNode, StartNode, TaskNode } from './nodes'\nimport { FlowModel } from './FlowModel'\nimport { Recorder } from './recorder'\nimport { createEngineId } from './utils'\n\nexport class Engine {\n readonly instanceId: string\n graphData?: Engine.GraphConfigData\n\n flowModel?: FlowModel\n recorder?: Recorder\n context?: Record<string, unknown>\n nodeModelMap: Map<string, BaseNode.NodeConstructor>\n\n constructor(options?: Engine.Options) {\n this.nodeModelMap = new Map()\n this.instanceId = createEngineId()\n if (options?.debug) {\n this.recorder = new Recorder({\n instanceId: this.instanceId,\n })\n }\n // 默认注册节点 register default nodes\n this.register({\n type: StartNode.nodeTypeName,\n model: StartNode,\n })\n this.register({\n type: TaskNode.nodeTypeName,\n model: TaskNode,\n })\n this.context = options?.context || {}\n }\n\n /**\n * 注册节点\n * @param nodeConfig { type: 'custom-node', model: NodeClass }\n */\n register(nodeConfig: Engine.NodeConfig) {\n this.nodeModelMap.set(nodeConfig.type, nodeConfig.model)\n }\n\n /**\n * 自定义执行记录的存储,默认浏览器使用 sessionStorage, nodejs 使用内存存储\n * 注意:由于执行记录不全会主动删除,所以需要自行清理。\n * nodejs 环境建议自定义为持久化存储。\n * engine.setCustomRecorder({{\n * async addActionRecord(task) {}\n * async getTask(actionId) {}\n * async getExecutionTasks(executionId) {}\n * clear(instanceId) {}\n * }}\n * @param recorder\n */\n setCustomRecorder(recorder: Recorder) {\n this.recorder = recorder\n }\n\n /**\n * 加载流程图数据\n */\n load({\n graphData,\n startNodeType = 'StartNode',\n globalData = {},\n }: Engine.LoadGraphParam): FlowModel {\n this.graphData = graphData\n const flowModel = new FlowModel({\n nodeModelMap: this.nodeModelMap,\n recorder: this.recorder,\n context: this.context,\n globalData,\n startNodeType,\n })\n\n flowModel.load(graphData)\n this.flowModel = flowModel\n return flowModel\n }\n\n /**\n * 执行流程,允许多次调用\n */\n async execute(\n param?: Partial<Engine.ActionParam>,\n ): Promise<Engine.NextActionParam> {\n return new Promise((resolve, reject) => {\n let execParam = param\n if (!param) {\n execParam = {}\n }\n\n this.flowModel?.execute({\n ...execParam,\n callback: (result) => {\n resolve(result)\n },\n onError: (error) => {\n reject(error)\n },\n })\n })\n }\n\n /**\n * 中断流程恢复\n * @param resumeParam\n * @returns\n */\n async resume(\n resumeParam: Engine.ResumeParam,\n ): Promise<Engine.NextActionParam | undefined> {\n return new Promise((resolve, reject) => {\n this.flowModel?.resume({\n ...resumeParam,\n callback: (result) => {\n resolve(result)\n },\n onError: (error) => {\n reject(error)\n },\n })\n })\n }\n\n async getExecutionList() {\n return await this.recorder?.getExecutionList()\n }\n\n /**\n * 获取执行任务记录\n * @param executionId\n * @returns\n */\n async getExecutionRecord(\n executionId: Engine.Key,\n ): Promise<Recorder.Info[] | null> {\n const actions = await this.recorder?.getExecutionActions(executionId)\n\n if (!actions) {\n return null\n }\n\n // DONE: 确认 records 的类型\n const records: Promise<Recorder.Info>[] = []\n for (let i = 0; i < actions?.length; i++) {\n const action = actions[i]\n if (this.recorder) {\n records.push(this.recorder?.getActionRecord(action))\n }\n }\n\n return Promise.all(records)\n }\n\n destroy() {\n this.recorder?.clear()\n }\n\n getGlobalData() {\n return this.flowModel?.globalData\n }\n\n setGlobalData(data: Record<string, unknown>) {\n if (this.flowModel) {\n this.flowModel.globalData = data\n }\n }\n\n updateGlobalData(data: Record<string, unknown>) {\n if (this.flowModel) {\n Object.assign(this.flowModel.globalData, data)\n }\n }\n}\n\nexport namespace Engine {\n export type Point = {\n id?: string\n x: number\n y: number\n [key: string]: unknown\n }\n\n export type TextConfig = {\n value: string\n } & Point\n\n export type NodeData = {\n id: string\n type: string\n x?: number\n y?: number\n text?: TextConfig | string\n zIndex?: number\n properties?: Record<string, unknown>\n }\n\n export type EdgeData = {\n id: string\n /**\n * 边的类型,不传默认为lf.setDefaultEdgeType(type)传入的类型。\n * LogicFlow内部默认为polyline\n */\n type?: string\n sourceNodeId: string\n sourceAnchorId?: string\n targetNodeId: string\n targetAnchorId?: string\n startPoint?: {\n x: number\n y: number\n }\n endPoint?: {\n x: number\n y: number\n }\n text?:\n | {\n x: number\n y: number\n value: string\n }\n | string\n pointsList?: Point[]\n zIndex?: number\n properties?: Record<string, unknown>\n }\n\n export type GraphConfigData = {\n nodes: NodeData[]\n edges: EdgeData[]\n }\n\n export type LoadGraphParam = {\n graphData: GraphConfigData\n startNodeType?: string\n globalData?: Record<string, unknown>\n }\n\n export type Options = {\n context?: Record<string, unknown>\n debug?: boolean\n }\n export type Key = string | number\n export type NodeConfig = {\n type: string\n model: any // TODO: NodeModel 可能有多个,类型该如何定义呢???\n }\n\n export type NodeParam = {\n executionId: Key\n nodeId: Key\n }\n\n export type CommonActionInfo = {\n actionId: Key\n } & NodeParam\n\n export type ActionParam = CommonActionInfo\n\n export type ResumeParam = {\n data?: Record<string, unknown>\n } & CommonActionInfo\n\n export type ExecParam = {\n next: (data: NextActionParam) => void\n } & ActionParam\n\n export type ExecResumeParam = {\n next: (data: NextActionParam) => void\n } & ResumeParam\n\n export type ActionStatus = 'success' | 'error' | 'interrupted' | '' // ??? Question: '' 状态是什么状态\n\n export type NextActionParam = {\n executionId: Key\n nodeId: Key\n actionId: Key\n nodeType: string\n outgoing: BaseNode.OutgoingConfig[]\n properties?: Record<string, unknown>\n detail?: Record<string, unknown>\n status?: ActionStatus\n }\n\n export type ActionResult = NextActionParam\n\n export type NodeExecResult = {\n nodeType: string\n properties?: Record<string, unknown>\n } & CommonActionInfo &\n ActionResult\n}\n\nexport * from './constant'\nexport { BaseNode, StartNode, TaskNode, Recorder }\n\nexport default Engine\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","ErrorCode","WarningCode","SuppressedError","exports","errorMsgMapCn","NONE_START_NODE","NONE_NODE_ID","NO_DOCUMENT_BODY","warningMsgMapCn","NONE_START_NODE_IN_DATA","START_NODE_INCOMING","EXPRESSION_EXEC_ERROR","getErrorMsg","code","getWarningMsg","BASE_START_NODE","EVENT_INSTANCE_COMPLETE","EVENT_INSTANCE_INTERRUPTED","EVENT_INSTANCE_ERROR","FlowStatus","ActionStatus","parseHexToInt","hex","match","parseInt","NaN","validateAndParseHex","errorName","enforcedLength","parsedHex","Number","isNaN","undefined","length","SyntaxError","parseHexadecimalCode","parsedCode","String","fromCharCode","parseUnicodeCode","surrogateCode","parsedSurrogateCode","isCurlyBraced","text","charAt","parseUnicodeCodePointCode","codePoint","slice","fromCodePoint","err","RangeError","singleCharacterEscapes","Map","parseSingleCharacterCode","get","escapeMatch","unraw","raw","replace","_","backslash","unicodeWithSurrogate","surrogate","unicode","octal","singleCharacter","createLisp","obj","op","a","b","lispTypes","ParseError","Error","constructor","message","super","substring","this","inlineIfElse","elseIf","ifElse","space","expectTypes","splitter","types","opHigh","comparitor","boolOp","bitwise","inlineIf","assignment","assignModify","assign","incrementerBefore","expEdge","call","incrementerAfter","modifier","not","inverse","negative","positive","typeof","delete","dot","arrayProp","prop","createObject","createArray","number","string","literal","regex","boolean","null","und","arrowFunctionSingle","arrowFunction","inlineFunction","group","Infinity","void","await","new","initialize","return","throw","spreadObject","spreadArray","expEnd","expFunction","function","expSingle","for","do","while","loopAction","if","try","block","switch","closings","testMultiple","str","tests","found","i","exec","CodeString","ref","start","end","len","char","toString","trimStart","trim","valueOf","emptyString","okFirstChars","aNumber","wordReg","semiColon","insertedSemicolons","WeakMap","quoteCache","restOfExp","constants","part","quote","firstOpening","closingsTests","details","words","isStart","hasSemiTest","includes","filter","insertedSemis","cache","set","has","escape","lastChar","isOneLiner","lastInertedSemi","skip","regRes","foundWord","foundNumber","sub","push","lastAnyWord","lastWord","test","oneliner","startingExecpted","setLispType","fn","forEach","type","closingsCreate","typesCreate","res","expect","ctx","extract","arg","l","funcFound","lispifyExpr","map","lispify","key","lisptype","lispTree","modifierTypes","incrementTypes","adderTypes","instanceof","in","opTypes","extractIfElse","foundTrue","elseReg","count","foundElse","first","f","startsWith","all","Math","max","true","false","quoteCount","condition","ie","startTrue","trueBlock","elseBlock","lispifyBlock","indexOf","caseFound","statement","insertSemicolons","caseTest","cases","defaultFound","cond","bracketFound","exprs","notEmpty","index","matches","lt","isArrow","isReturn","argPos","isAsync","args","split","unshift","ended","func","eager","lispifyFunction","iteratorRegex","getIterator","body","startStep","startInternal","beforeStep","checkFirst","lispifyReturnExpr","iterator","extract2","k","ofStart2","ofStart3","ofCondition","ofStep","inStart2","inStart3","inStep","inCondition","shift","isBlock","catchReg","finallyBody","catchBody","catchRes","exception","offset","argsString","j","lastType","expected","topLevel","startingExpectedWithoutSingle","r","subExpressions","pos","Object","values","defined","expression","parts","skipped","isInserted","tree","hoisted","hoist","concat","isLisp","item","Array","isArray","rep","it","closingsNoInsertion","colonsRegex","rest","inserted","valid","edge","checkRegex","cancel","after","flags","notDivide","possibleDivide","extractConstants","currentEnclosure","regexFound","comment","commentStart","currJs","strRes","enclosures","isPossibleDivide","li","join","tempJsStrings","literals","strings","pop","regexes","parse","js","ExecReturn","auditReport","returned","breakLoop","continueLoop","Prop","context","isConst","isGlobal","isVariable","ReferenceError","getSubscriptions","cb","optional","reservedWords","Set","VarType","keysOnly","ret","Scope","parent","vars","functionThis","const","let","var","isFuncScope","allVars","globals","functionScope","hasOwnProperty","val","TypeError","SandboxError","declare","LocalScope","currentTicks","sandboxFunction","ticks","params","parsed","createFunction","generateArgs","argNames","sandboxedFunctions","WeakSet","scope","name","options","forbidFunctionCreation","executeTree","registerSandboxFunction","add","createFunctionAsync","prototypeWhitelist","prototype","async","executeTreeAsync","sandboxedEval","sandboxedSetTimeout","handler","setTimeout","sandboxedSetInterval","setInterval","assignCheck","changeSubscriptions","changeSubscriptionsGlobal","setSubscriptions","setSubscriptionsGlobal","arrayChange","splice","reverse","sort","copyWithin","KeyVal","SpreadObject","SpreadArray","If","t","literalRegex","ops","addOps","valueOrProp","execMany","inLoopOrSwitch","execSync","_execManySync","_execManyAsync","catch","syncDone","d","ad","asyncDone","execAsync","isInstant","instant","p","callback","doneOriginal","_execNoneRecurse","bobj","sandboxGlobal","audit","globalsAccess","globalsWhitelist","evals","globalThis","globalScope","Boolean","isFunction","prototypeAccess","prot","getPrototypeOf","whitelist","prototypeReplacements","size","constuctor","g","forbidFunctionCalls","vals","flat","JSON","stringify","recurse","x","y","change","changed","added","removed","startIndex","deleteCount","min","endIndex","BigInt","reg","RegExp","resnums","processed","reses","num","$$","$","loop","loopScope","internalVars","$$obj","interalScope","innerLoopVars","toTest","isTrue","caseItem","executeTreeWithDone","unexecTypes","executionQuota","onExecutionQuotaReached","executionTree","scopes","s","_executeWithDoneSync","_executeWithDoneAsync","current","SandboxGlobal","ExecContext","subscribeSet","names","callbacks","changeCbs","unsubscribe","Sandbox","sandboxFunctions","SAFE_GLOBALS","SAFE_PROTOTYPES","sandbox","Symbol","Function","console","debug","error","info","log","table","warn","isFinite","parseFloat","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","unescape","EvalError","URIError","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","Intl","Date","protos","proto","subscribeGet","subscribeSetGlobal","getOwnPropertyNames","createContext","execContext","eval","getContext","compile","optimize","run","compileAsync","compileExpression","compileExpressionAsync","runInBrowserContext","code_1","args_1","globalData","getExpressionResult","BaseNode","nodeConfig","outgoing","incoming","id","properties","baseType","nodeId","action","param","onResume","isPass","conditionExpression","getOutgoing","expressions","out","execute","executionId","actionId","status","SUCCESS","detail","nodeType","resume","data","nodeTypeName","StartNode","TaskNode","EventEmitter","_events","on","evtKey","once","off","events","emit","eventArgs","es","doEmit","getEvents","isInBrowser","window","isInNodeJS","global","self","sessionStorage","storage","setItem","getItem","removeItem","clear","defineProperty","rng$1","default","rng","_crypto","_interopRequireDefault","require","__esModule","rnds8Pool","poolPtr","randomFillSync","_default","validate_1","_regex","validate","uuid","stringify_1","_validate","byteToHex","substr","arr","toLowerCase","v1_1","_rng","_stringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","buf","node","clockseq","seedBytes","random","msecs","now","nsecs","dt","tl","tmh","n","parse_1","v","v35","_parse","stringToBytes","bytes","charCodeAt","DNS","URL","version","hashfunc","generateUUID","namespace","md5_1","md5","Buffer","from","createHash","update","digest","v3_1","_v","_md","v3","v4_1","v4","rnds","sha1_1","sha1","v5_1","_sha","v5","nil","version_1","enumerable","_v2","_v3","_v4","_nil","_version","createExecId","uuidV4","createActionId","createEngineId","Scheduler","config","nodeQueueMap","actionRunningMap","flowModel","recorder","addAction","nodeParam","currentActionQueue","pushActionToRunningMap","actionParam","runningMap","_a","removeActionFromRunningMap","saveActionResult","addActionRecord","timestamp","hasRunningAction","runParam","nodeQueue","currentNode","COMPLETED","target","resumeParam","model","createAction","bind","interrupted","execResult","actionResult","INTERRUPTED","ERROR","FlowModel","nodeModelMap","startNodeType","nodeConfigMap","startNodes","executeList","executingInstance","isRunning","scheduler","onExecuteFinished","load","graphData","nodes","edges","sourceNode","sourceNodeId","targetNode","targetNodeId","source","createExecution","execParam","onError","startNode","NodeModel","setStartNodeType","updateGlobalData","findIndex","MAX_RECORDER","MAX_INSTANCE","LOGICFLOW_ENGINE_INSTANCES","Recorder","instanceId","maxRecorder","instances","clearInstance","setMaxRecorderNumber","getExecutionActions","getExecutionList","addExecution","instanceExecutions","toBeRemovedItem","popExecution","pushActionToExecution","actions","getActionRecord","Engine","register","setCustomRecorder","getExecutionRecord","records","_b","destroy","getGlobalData","setGlobalData"],"mappings":"oPAkHO,SAASA,UAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAU,CAAC,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC1F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC7F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAQ,KAIjBO,KAAKR,EAAWK,EAAW,CAC7GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OAClE,GACJ,CC1HA,IAAYO,UASAC,YDsTsC,mBAApBC,iBAAiCA,gBCxT9DC,QAAAH,eAAA,EAPWA,UAAAA,oBAAAA,QAAAA,UAOX,CAAA,GALCA,UAAAA,UAAA,gBAAA,KAAA,kBACAA,UAAAA,UAAA,aAAA,MAAA,eAGAA,UAAAA,UAAA,iBAAA,MAAA,mBASDG,QAAAF,iBAAA,EANWA,YAAAA,sBAAAA,QAAAA,YAMX,CAAA,GALCA,YAAAA,YAAA,wBAAA,KAAA,0BACAA,YAAAA,YAAA,oBAAA,MAAA,sBAGAA,YAAAA,YAAA,sBAAA,KAAA,wBAIF,MAAMG,cAAgB,CACpB,CAACJ,QAAAA,UAAUK,iBAAkB,aAC7B,CAACL,QAAAA,UAAUM,cAAe,eAC1B,CAACN,QAAAA,UAAUO,kBAAmB,mCAG1BC,gBAAkB,CACtB,CAACP,QAAAA,YAAYQ,yBAA0B,mBACvC,CAACR,QAAAA,YAAYS,qBAAsB,aACnC,CAACT,QAAAA,YAAYU,uBAAwB,WAG1BC,YAAeC,GAC1B,SAASA,OAAUT,cAAcS,KACtBC,cAAiBD,GAC5B,WAAWA,OAAUL,gBAAgBK,KC9B1BE,gBAAkB,QAGlBC,wBAA0B,oBAC1BC,2BAA6B,uBAC7BC,qBAAuB,iBAGpC,IAAYC,WASAC,aCZZ,SAASC,cAAcC,GAEnB,OADwBA,EAAIC,MAAM,cACVC,SAASF,EAAK,IAAMG,GAChD,CAYA,SAASC,oBAAoBJ,EAAKK,EAAWC,GACzC,MAAMC,EAAYR,cAAcC,GAChC,GAAIQ,OAAOC,MAAMF,SACOG,IAAnBJ,GAAgCA,IAAmBN,EAAIW,OACxD,MAAM,IAAIC,YAAYP,EAAY,KAAOL,GAE7C,OAAOO,CACX,CASA,SAASM,qBAAqBtB,GAC1B,MAAMuB,EAAaV,oBAAoBb,EAAM,wBAAyB,GACtE,OAAOwB,OAAOC,aAAaF,EAC/B,CAWA,SAASG,iBAAiB1B,EAAM2B,GAC5B,MAAMJ,EAAaV,oBAAoBb,EAAM,oBAAqB,GAClE,QAAsBmB,IAAlBQ,EAA6B,CAC7B,MAAMC,EAAsBf,oBAAoBc,EAAe,oBAAqB,GACpF,OAAOH,OAAOC,aAAaF,EAAYK,EAC3C,CACA,OAAOJ,OAAOC,aAAaF,EAC/B,CAMA,SAASM,cAAcC,GACnB,MAA0B,MAAnBA,EAAKC,OAAO,IAA+C,MAAjCD,EAAKC,OAAOD,EAAKV,OAAS,EAC/D,CASA,SAASY,0BAA0BC,GAC/B,IAAKJ,cAAcI,GACf,MAAM,IAAIZ,YAAY,uBAAyBY,GAEnD,MACMV,EAAaV,oBADGoB,EAAUC,MAAM,GAAI,GACY,qBACtD,IACI,OAAOV,OAAOW,cAAcZ,EAC/B,CACD,MAAOa,GACH,MAAMA,aAAeC,WACf,IAAIhB,YAAY,oBAAsBE,GACtCa,CACV,CACJ,CD1EC9C,QAAAgB,gBAAA,EANWA,WAAAA,qBAAAA,QAAAA,WAMX,CAAA,GALCA,WAAA,UAAA,YACAA,WAAA,YAAA,cACAA,WAAA,QAAA,UACAA,WAAA,QAAA,UACAA,WAAA,MAAA,QAQDhB,QAAAiB,kBAAA,EAJWA,aAAAA,QAAYA,eAAZA,qBAIX,CAAA,GAHCA,aAAA,QAAA,UACAA,aAAA,MAAA,QACAA,aAAA,YAAA,cCyEF,MAAM+B,uBAAyB,IAAIC,IAAI,CACnC,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,QAOV,SAASC,yBAAyBxC,GAC9B,OAAOsC,uBAAuBG,IAAIzC,IAASA,CAC/C,CAiBA,MAAM0C,YAAc,yHAUb,SAASC,MAAMC,GAClB,OAAOA,EAAIC,QAAQH,aAAa,SAAUI,EAAGC,EAAWtC,EAAKwB,EAAWe,EAAsBC,EAAWC,EAASC,EAAOC,GAGrH,QAAkBjC,IAAd4B,EACA,MAAO,KAEX,QAAY5B,IAARV,EACA,OAAOa,qBAAqBb,GAEhC,QAAkBU,IAAdc,EACA,OAAOD,0BAA0BC,GAErC,QAA6Bd,IAAzB6B,EACA,OAAOtB,iBAAiBsB,EAAsBC,GAElD,QAAgB9B,IAAZ+B,EACA,OAAOxB,iBAAiBwB,GAE5B,GAAc,MAAVC,EACA,MAAO,KAEX,QAAchC,IAAVgC,EACA,MAAM,IAAI9B,YAAY,sBAAwB8B,GAElD,QAAwBhC,IAApBiC,EACA,OAAOZ,yBAAyBY,GAEpC,MAAM,IAAI/B,YAAY,gBAC1B,GACJ,CCxKA,SAASgC,WAAWC,GAChB,MAAO,CAACA,EAAIC,GAAID,EAAIE,EAAGF,EAAIG,EAC/B,CACA,IAAIC,UAAY,IAAInB,IACb,MAAMoB,mBAAmBC,MAC5BC,WAAAA,CAAYC,EAAS9D,GACjB+D,MAAMD,EAAU,KAAO9D,EAAKgE,UAAU,EAAG,KACzCC,KAAKjE,KAAOA,CAChB,EAEJ,MAAMkE,aAAe,KACfC,OAAS,kBACTC,OAAS,gBACTC,MAAQ,MACP,IAAIC,YAAc,CACrBC,SAAU,CACNC,MAAO,CACHC,OAAQ,+BACRlB,GAAI,iCACJmB,WAAY,6CACZC,OAAQ,+CACRC,QAAS,8CAEbhG,KAAM,CACF,WACA,QACA,OACA,sBAGRiG,SAAU,CACNL,MAAO,CACHK,SAAU,mBAEdjG,KAAM,CACF,WAGRkG,WAAY,CACRN,MAAO,CACHO,aAAc,uDACdC,OAAQ,aAEZpG,KAAM,CACF,WACA,QACA,OACA,sBAGRqG,kBAAmB,CACfT,MAAO,CAAES,kBAAmB,gBAC5BrG,KAAM,CACF,SAGRsG,QAAS,CACLV,MAAO,CACHW,KAAM,eACNC,iBAAkB,gBAEtBxG,KAAM,CACF,WACA,UACA,MACA,WACA,WAGRyG,SAAU,CACNb,MAAO,CACHc,IAAK,KACLC,QAAS,KACTC,SAAU,YACVC,SAAU,YACVC,OAAQ,oBACRC,OAAQ,qBAEZ/G,KAAM,CACF,WACA,QACA,OACA,sBAGRgH,IAAK,CACDpB,MAAO,CACHqB,UAAW,aACXD,IAAK,+BAEThH,KAAM,CACF,WACA,aACA,UACA,MACA,WACA,WAGRkH,KAAM,CACFtB,MAAO,CACHsB,KAAM,gCAEVlH,KAAM,CACF,WACA,aACA,UACA,MACA,WACA,WAGRF,MAAO,CACH8F,MAAO,CACHuB,aAAc,MACdC,YAAa,MACbC,OAAQ,qGACRC,OAAQ,WACRC,QAAS,WACTC,MAAO,wBACPC,QAAS,0BACTC,KAAM,kBACNC,IAAK,uBACLC,oBAAqB,sDACrBC,cAAe,4HACfC,eAAgB,8JAChBC,MAAO,MACP/F,IAAK,iBACLgG,SAAU,sBACVC,KAAM,qBACNC,MAAO,sBACPC,IAAK,qBAETnI,KAAM,CACF,WACA,UACA,MACA,WACA,WAGRoI,WAAY,CACRxC,MAAO,CACHwC,WAAY,wDACZC,OAAQ,oBACRC,MAAO,uBAEXtI,KAAM,CACF,WACA,QACA,OACA,oBACA,WAGRuI,aAAc,CACV3C,MAAO,CACH2C,aAAc,WAElBvI,KAAM,CACF,QACA,SAGRwI,YAAa,CACT5C,MAAO,CACH4C,YAAa,WAEjBxI,KAAM,CACF,QACA,SAGRyI,OAAQ,CAAE7C,MAAO,CAAE,EAAE5F,KAAM,IAC3B0I,YAAa,CACT9C,MAAO,CACH+C,SAAU,8JAEd3I,KAAM,CACF,UACA,WAGR4I,UAAW,CACPhD,MAAO,CACHiD,IAAK,2CACLC,GAAI,uDACJC,MAAO,6CACPC,WAAY,uDACZC,GAAI,4CACJC,IAAK,WACLC,MAAO,KACPC,OAAQ,+CAEZpJ,KAAM,CACF,YAIRqJ,SAAW,CACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAEF,SAASC,aAAaC,EAAKC,GAC9B,IAAIC,EACJ,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAMhH,OAAQkH,IAAK,CAGnC,GADAD,EADaD,EAAME,GACNC,KAAKJ,GACdE,EACA,KACR,CACA,OAAOA,CACX,CACO,MAAMG,WACT3E,WAAAA,CAAYsE,GACRlE,KAAKwE,IAAM,CAAEN,IAAK,IACdA,aAAeK,YACfvE,KAAKwE,IAAMN,EAAIM,IACfxE,KAAKyE,MAAQP,EAAIO,MACjBzE,KAAK0E,IAAMR,EAAIQ,MAGf1E,KAAKwE,IAAIN,IAAMA,EACflE,KAAKyE,MAAQ,EACbzE,KAAK0E,IAAMR,EAAI/G,OAEvB,CACA4C,SAAAA,CAAU0E,EAAOC,GACb,IAAK1E,KAAK7C,OACN,OAAO6C,MACXyE,EAAQzE,KAAKyE,MAAQA,GACT,IACRA,EAAQ,GAERA,EAAQzE,KAAK0E,MACbD,EAAQzE,KAAK0E,MAEjBA,OAAcxH,IAARwH,EAAoB1E,KAAK0E,IAAM1E,KAAKyE,MAAQC,GACxC,IACNA,EAAM,GAENA,EAAM1E,KAAK0E,MACXA,EAAM1E,KAAK0E,KAEf,MAAM3I,EAAO,IAAIwI,WAAWvE,MAG5B,OAFAjE,EAAK0I,MAAQA,EACb1I,EAAK2I,IAAMA,EACJ3I,CACX,CACA,UAAIoB,GACA,MAAMwH,EAAM3E,KAAK0E,IAAM1E,KAAKyE,MAC5B,OAAOE,EAAM,EAAI,EAAIA,CACzB,CACAC,IAAAA,CAAKP,GACD,GAAIrE,KAAKyE,QAAUzE,KAAK0E,IAExB,OAAO1E,KAAKwE,IAAIN,IAAIlE,KAAKyE,MAAQJ,EACrC,CACAQ,QAAAA,GACI,OAAO7E,KAAKwE,IAAIN,IAAInE,UAAUC,KAAKyE,MAAOzE,KAAK0E,IACnD,CACAI,SAAAA,GACI,MAAMV,EAAQ,OAAOE,KAAKtE,KAAK6E,YACzB9I,EAAO,IAAIwI,WAAWvE,MAI5B,OAHIoE,IACArI,EAAK0I,OAASL,EAAM,GAAGjH,QAEpBpB,CACX,CACAkC,KAAAA,CAAMwG,EAAOC,GAgBT,OAfID,EAAQ,IACRA,EAAQzE,KAAK0E,IAAM1E,KAAKyE,MAAQA,GAEhCA,EAAQ,IACRA,EAAQ,QAEAvH,IAARwH,IACAA,EAAM1E,KAAK0E,IAAM1E,KAAKyE,OAEtBC,EAAM,IACNA,EAAM1E,KAAK0E,IAAM1E,KAAKyE,MAAQC,GAE9BA,EAAM,IACNA,EAAM,GAEH1E,KAAKD,UAAU0E,EAAOC,EACjC,CACAK,IAAAA,GACI,MAAMhJ,EAAOiE,KAAK8E,YACZV,EAAQ,OAAOE,KAAKvI,EAAK8I,YAI/B,OAHIT,IACArI,EAAK2I,KAAON,EAAM,GAAGjH,QAElBpB,CACX,CACAiJ,OAAAA,GACI,OAAOhF,KAAK6E,UAChB,EAEJ,MAAMI,YAAc,IAAIV,WAAW,IAC7BW,aAAe,aAEfC,QAAU9E,YAAY5F,MAAM8F,MAAMyB,OAClCoD,QAAU,uDACVC,UAAY,KACZC,mBAAqB,IAAIC,QACzBC,WAAa,IAAID,QAChB,SAASE,UAAUC,EAAWC,EAAMxB,EAAOyB,EAAOC,EAAcC,EAAeC,EAAU,IAC5F,IAAKJ,EAAKxI,OACN,OAAOwI,EAEXI,EAAQC,MAAQD,EAAQC,OAAS,GACjC,IAAIC,GAAU,EAEd,MAAMC,GADN/B,EAAQA,GAAS,IACSgC,SAASd,WAC/Ba,IACA/B,EAAQA,EAAMiC,QAAQ7G,GAAMA,IAAM8F,aAEtC,MAAMgB,EAAgBf,mBAAmB9G,IAAImH,EAAKnB,MAAQ,GACpD8B,EAAQd,WAAWhH,IAAImH,EAAKnB,MAAQ,IAAIlG,IAE9C,GADAkH,WAAWe,IAAIZ,EAAKnB,IAAK8B,GACrBV,GAASU,EAAME,IAAIb,EAAKlB,MAAQ,GAChC,OAAOkB,EAAK5F,UAAU,EAAGuG,EAAM9H,IAAImH,EAAKlB,MAAQ,GAAKkB,EAAKlB,OAE9D,IAIIJ,EAJAoC,GAAS,EACT1L,GAAO,EACP2L,EAAW,GACXC,GAAa,EAEbC,GAAkB,EACtB,IAAKvC,EAAI,EAAGA,EAAIsB,EAAKxI,SAAWpC,EAAMsJ,IAAK,CACvC,IAAIO,EAAOe,EAAKf,KAAKP,GACrB,GAAc,MAAVuB,GAA2B,MAAVA,GAA2B,MAAVA,EAAe,CACjD,GAAc,MAAVA,GAA0B,MAAThB,GAAqC,MAArBe,EAAKf,KAAKP,EAAI,IAAeoC,GAI7D,GAAI7B,IAASgB,IAAUa,EACxB,OAAOd,EAAK5F,UAAU,EAAGsE,OAL6C,CAEtEA,GADWoB,UAAUC,EAAWC,EAAK5F,UAAUsE,EAAI,GAAI,GAAI,KACjDlH,OAAS,CACtB,CAIDsJ,GAAUA,GAAmB,OAAT7B,CACxB,MACK,GAAIZ,SAASY,GAAO,CACrB,IAAKgC,GAAmBP,EAAchC,EAAIsB,EAAKlB,OAAQ,CAEnD,GADAmC,GAAkB,EACdV,EACA,MAEJ7B,IACAqC,EAAW,IACX,QACJ,CAIA,GAHIC,GAAuB,MAAT/B,IACd+B,GAAa,GAEb/B,IAASiB,EAAc,CACvB9K,GAAO,EACP,KACJ,CACK,CACD,IAAI8L,EAAOpB,UAAUC,EAAWC,EAAK5F,UAAUsE,EAAI,GAAI,GAAIO,GAI3D,GAHA0B,EAAMC,IAAIM,EAAKpC,MAAQ,EAAGoC,EAAKnC,KAC/BL,GAAKwC,EAAK1J,OAAS,EACnB8I,GAAU,EACNH,EAAe,CACf,IACI1B,GACAA,EAAQH,aAFF0B,EAAK5F,UAAUsE,GAEIQ,WAAYiB,MACrCC,EAAQe,OAAS1C,EACjBrJ,GAAO,EAEf,CACJ,CACJ,MACK,GAAK6K,GAiEL,GAAIhB,IAASZ,SAAS4B,GACvB,OAAOD,EAAK5F,UAAU,EAAGsE,OAlEZ,CACb,IACI0C,EACAC,EAFAC,EAAMtB,EAAK5F,UAAUsE,GAAGQ,WAG5B,GAAIiB,EAAe,CACf,IAAI1B,EACJ,GAAIA,EAAQH,aAAagD,EAAKnB,GAAgB,CAC1CC,EAAQe,OAAS1C,EACjBC,IACAtJ,GAAO,EACP,KACJ,CACJ,CACA,GAAIiM,EAAc7B,QAAQb,KAAK2C,GAC3B5C,GAAK2C,EAAY,GAAG7J,OAAS,EAC7B8J,EAAMtB,EAAK5F,UAAUsE,GAAGQ,gBAEvB,GAAI6B,GAAY9B,EAAM,CACvB,IAAIR,EACJ,GAAa,MAATQ,GAAiByB,EAAchC,EAAIsB,EAAKlB,SAAWwB,IAAYW,EAAkB,CACjF,GAAIV,EACA9B,EAAQ,CAAC,UAER,GAAIiC,EAAchC,EAAIsB,EAAKlB,OAAQ,CACpCmC,GAAkB,EAClBvC,IACAqC,EAAW,IACX,QACJ,CACA9B,EAAOqC,EAAM,GACjB,MAEIL,GAAkB,EAEjBxC,IACDA,EAAQH,aAAagD,EAAK9C,IAE1BC,IACArJ,GAAO,IAENA,IAASgM,EAAY3B,QAAQd,KAAK2C,MACnCN,GAAa,EACTI,EAAU,GAAG5J,OAAS,IACtB4I,EAAQC,MAAMkB,KAAKH,EAAU,IAC7BhB,EAAQoB,YAAcJ,EAAU,GAC5BA,EAAU,KACVhB,EAAQqB,SAAWL,EAAU,KAGjCA,EAAU,GAAG5J,OAAS,IACtBkH,GAAK0C,EAAU,GAAG5J,OAAS,GAGvC,CASA,GARI8I,IACIf,aAAamC,KAAKJ,GAClBlM,GAAO,EAGPkL,GAAU,GAGdlL,EACA,KACP,CAID2L,EAAW9B,CACf,CACA,GAAIgB,EACA,MAAM,IAAIxI,YAAY,aAAewI,EAAQ,KAKjD,OAHIG,IACAA,EAAQuB,SAAWX,GAEhBhB,EAAK5F,UAAU,EAAGsE,EAC7B,CACAoB,UAAU9K,KAAO,CACb,WACA,SACA,YAEJ,MAAM4M,iBAAmB,CAAC,aAAc,YAAa,cAAe,QAAS,WAAY,OAAQ,oBAAqB,UACzGC,YAAcA,CAACjH,EAAOkH,KAC/BlH,EAAMmH,SAASC,IACXlI,UAAU8G,IAAIoB,EAAMF,EAAG,GACzB,EAEAG,eAAiB,CACnB7F,YAAe,MACfD,aAAgB,MAChBY,MAAS,MACTd,UAAa,MACbV,KAAQ,OAEN2G,YAAc,CAChB9F,YAAe,GACfD,aAAgB,GAChBY,MAAS,GACTd,UAAa,GACbV,KAAQ,EACRW,KAAQ,EACR,QAAS,GACT,QAAS,IAEb2F,YAAY,CAAC,cAAe,eAAgB,QAAS,YAAa,SAAS,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC5G,IAAIC,EAAUhD,YACViD,EAAM,GACNxD,GAAM,EACNL,EAAIyD,EAAI,GAAG3K,OACf,MAAMsH,EAAQJ,EACd,KAAOA,EAAIsB,EAAKxI,SAAWuH,GACvBuD,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,CAC9CuD,eAAeD,GACf,OAEJtD,GAAK4D,EAAQ9K,OACT8K,EAAQlD,OAAO5H,QACf+K,EAAIhB,KAAKe,GAEQ,MAAjBtC,EAAKf,KAAKP,GACVK,GAAM,EAGNL,IAGR,MAAM1J,EAAO,CAAC,QAAS,WAAY,OAAQ,oBAAqB,UAChE,IAAIwN,EACAC,EACJ,OAAQT,GACJ,IAAK,QACL,IAAK,YACDQ,EAAIE,YAAY3C,EAAWC,EAAK5F,UAAU0E,EAAOJ,IACjD,MACJ,IAAK,OACL,IAAK,cAED8D,EAAID,EAAII,KAAK1N,GAAM2N,QAAQ7C,EAAW9K,EAAG,IAAID,EAAM,kBACnD,MACJ,IAAK,eACDwN,EAAID,EAAII,KAAKpE,IAET,IAAIzJ,EADJyJ,EAAMA,EAAIY,YAEV,IAAI0D,EAAM,GAEV,GADAJ,EAAY/H,YAAYgD,YAAY9C,MAAM+C,SAASgB,KAAK,YAAcJ,GAClEkE,EACAI,EAAMJ,EAAU,GAAGtD,YACnBrK,EAAQ8N,QAAQ7C,EAAW,IAAInB,WAAW,YAAcL,EAAIW,WAAWjG,QAAQ4J,EAAK,UAEnF,CACD,IAAIP,EAAUxC,UAAUC,EAAWxB,EAAK,CAAC,OACzCsE,EAAMD,QAAQ7C,EAAWuC,EAAS,IAAItN,EAAM,iBAC7B,IAAX6N,EAAI,KACJA,EAAMA,EAAI,IAEd/N,EAAQ8N,QAAQ7C,EAAWxB,EAAInE,UAAUkI,EAAQ9K,OAAS,GAC9D,CACA,OAAOiC,WAAW,CACdE,GAAI,EACJC,EAAGiJ,EACHhJ,EAAG/E,GACL,IAId,IAAIgO,EAAqB,cAATd,EAAwBG,EAAI,GAAK,GAAiC,EAAmC,SAATH,EAAmBG,EAAI,GAAK,GAAiC,EAAyBD,YAAYF,GAC9MK,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUsE,EAAI,GAAIhE,YAAY0H,GAAQpN,KAAMyE,WAAW,CAC1FE,GAAImJ,EACJlJ,EAAGyI,EAAIU,SACPlJ,EAAG2I,IACJ,IAEP,MAAMQ,cAAgB,CAClBrH,QAAW,GACXD,IAAO,GACPG,SAAY,GACZD,SAAY,GACZE,OAAU,GACVC,OAAU,IAEd8F,YAAY,CAAC,UAAW,MAAO,WAAY,WAAY,SAAU,WAAW,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7G,IAAIC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,CAAC,6BACnE6K,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS2K,EAAI,GAAG3K,QAASsI,UAAU9K,KAAMyE,WAAW,CACzGE,GAAIqJ,cAAchB,GAClBpI,EAAGyI,EAAIU,SACPlJ,EAAG+I,QAAQ7C,EAAWuC,EAAS5H,YAAY0H,GAAQpN,QACpD,IAEP,MAAMiO,eAAiB,CACnB,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,IAEXpB,YAAY,CAAC,sBAAsB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACpE,IAAIC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU,GAAI,CAAC,iBACvDiI,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS,GAAIsI,UAAU9K,KAAMyE,WAAW,CAC7FE,GAAIsJ,eAAed,EAAI,GAAK,KAC5BvI,EAAGgJ,QAAQ7C,EAAWuC,EAAS5H,YAAY0H,GAAQpN,MACnD6E,EAAG,IACJ,IAEPgI,YAAY,CAAC,qBAAqB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACnEA,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAIsJ,eAAe,IAAMd,EAAI,IAC7BvI,EAAGyI,EAAIU,SACPlJ,EAAG,IACJ,IAEP,MAAMqJ,WAAa,CACf,KAAM,GACN,KAAM,GACNC,WAAc,GACdC,GAAM,GACN,IAAK,EACL,KAAM,GACN,KAAM,GACN,KAAM,GACN,MAAO,GACP,KAAM,GACN,KAAM,GACN,KAAM,GACN,KAAM,GACN,KAAM,GACN,OAAQ,GACR,MAAO,GACP,MAAO,IAEXvB,YAAY,CAAC,SAAU,eAAgB,WAAW,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACnFA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAIuJ,WAAWf,EAAI,IACnBvI,EAAGyI,EAAIU,SACPlJ,EAAG+I,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,OAC3E,IAEN,MAAMqO,QAAU,CACZ,IAAK,GACL,IAAK,GACL,IAAK,GACL,KAAM,GACN,KAAM,GACN,MAAO,GACP,KAAM,GACN,KAAM,GACN,IAAK,GACL,IAAK,GACL,MAAO,GACP,KAAM,GACN,MAAO,GACP,KAAM,GACN,IAAK,GACL,IAAK,GACL,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,IAuDT,SAASC,cAAcvD,EAAWC,GAC9B,IAGIuD,EAEAC,EALAC,EAAQ,EACRhF,EAAQuB,EAAK5F,UAAU,EAAG,GAC1BsJ,EAAYpE,YAEZqE,GAAQ,EAERvD,EAAU,CAAA,EACd,MAAQ3B,EAAQqB,UAAUC,EAAWC,EAAK5F,UAAUqE,EAAMM,IAAMiB,EAAKlB,OAAQ,CAACvE,OAAQC,OAAQkF,gBAAYnI,OAAWA,OAAWA,EAAW6I,IAAU5I,QAAUmM,GAAO,CAClKA,GAAQ,EACR,MAAMC,EAAI5D,EAAK5F,UAAUqE,EAAMM,IAAMiB,EAAKlB,OAAOI,WACjD,GAAI0E,EAAEC,WAAW,MACbpF,EAAMM,MACN0E,SAEC,GAAIG,EAAEC,WAAW,QAClBN,EAAYvD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OAC/CL,EAAMM,MACN0E,IACKA,GACDhF,EAAMM,UAGT,MAAIyE,EAAU,uBAAuB7E,KAAKiF,IAQ1C,CACDL,EAAYG,EAAUlM,OAAS+L,EAAYvD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OAC9E,KACJ,CAVIyE,EAAYvD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OAC/CL,EAAMM,KAAOyE,EAAQ,GAAGhM,OAAS,EACjCiM,IACKA,IACDhF,EAAMM,KAAOyE,EAAQ,GAAGhM,OAAS,EAMzC,CACA,IAAKiM,EAAO,CAERC,EADSJ,cAAcvD,EAAWC,EAAK5F,UAAUqE,EAAMM,IAAMiB,EAAKlB,MAAS,uBAAuBH,KAAKiF,KAAK,GAAGpM,SAChGsM,IACf,KACJ,CACA1D,EAAU,CAAA,CACd,CAEA,OADAmD,EAAYA,GAAavD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OACrD,CAAEgF,IAAK9D,EAAK5F,UAAU,EAAG2J,KAAKC,IAAIT,EAAUxE,IAAK2E,EAAU3E,KAAOiB,EAAKlB,OAAQmF,KAAMV,EAAWW,MAAOR,EAClH,CAjGA7B,YAAY,CAAC,SAAU,KAAM,aAAc,YAAY,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACxF,MAAMrN,EAAO,CACT0F,YAAYO,SAASL,MAAMK,SAC3BX,cAEJ,OAAQ0H,GACJ,IAAK,SACDhN,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMC,QACzC,IAAK,KACD7F,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMjB,IACzC,IAAK,aACD3E,EAAKuM,KAAK7G,YAAYC,SAASC,MAAME,YACzC,IAAK,UACD9F,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMI,SACrChG,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMG,QAE7C,IAAIuH,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASxC,GAClEqN,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS2K,EAAI,GAAG3K,QAASsI,UAAU9K,KAAMyE,WAAW,CACzGE,GAAI0J,QAAQlB,EAAI,IAChBvI,EAAGyI,EAAIU,SACPlJ,EAAG+I,QAAQ7C,EAAWuC,EAAS5H,YAAY0H,GAAQpN,QACpD,IAEP6M,YAAY,CAAC,aAAa,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC3D,IAAI5D,GAAQ,EACR6D,EAAUtC,EAAK5F,UAAU,EAAG,GAC5B+J,EAAa,EACjB,MAAQ1F,GAAS6D,EAAQ9K,OAASwI,EAAKxI,QACnC8K,EAAQvD,IAAMe,UAAUC,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS,GAAI,CACnEkD,YAAYO,SAASL,MAAMK,SAC3BX,eACDyE,IAC+B,MAA9BiB,EAAKf,KAAKqD,EAAQ9K,QAClB2M,IAGAA,IAECA,IACD1F,GAAQ,GAGhB6D,EAAQxD,MAAQkB,EAAKlB,MAAQ,EAC7BuD,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAGyI,EAAIU,SACPlJ,EAAGJ,WAAW,CACVE,GAAI,GACJC,EAAG8I,YAAY3C,EAAWuC,GAC1BzI,EAAG6I,YAAY3C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS8K,EAAQ9K,OAAS,OAEhF,IA+CNqK,YAAY,CAAC,OAAO,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACrD,IAAI+B,EAAYtE,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,GAAI,KACxE,MAAM6M,EAAKf,cAAcvD,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,SAC1C,SAASmH,KAAKqB,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS4M,EAAU5M,OAAS,GAAG0H,YACnF,MAAMoF,EAAYnC,EAAI,GAAG3K,OAAS2K,EAAI,GAAG3K,OAAS4M,EAAU5M,OAAS,EACrE,IAAI+M,EAAYF,EAAGJ,KAAK7J,UAAUkK,GAC9BE,EAAYH,EAAGH,MACnBE,EAAYA,EAAUhF,OACtBmF,EAAYA,EAAUnF,OACtBoF,EAAYA,EAAUpF,OACI,MAAtBmF,EAAUtF,KAAK,KACfsF,EAAYA,EAAUjM,MAAM,GAAI,IACV,MAAtBkM,EAAUvF,KAAK,KACfuF,EAAYA,EAAUlM,MAAM,GAAI,IACpC+J,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG8I,YAAY3C,EAAWqE,GAC1BvK,EAAGJ,WAAW,CACVE,GAAI,GACJC,EAAG6K,aAAaF,EAAWxE,GAC3BlG,EAAG4K,aAAaD,EAAWzE,MAEjC,IAEN8B,YAAY,CAAC,WAAW,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACzD,MAAMX,EAAO5B,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,GAAI,KACrE,IAAIsH,EAAQkB,EAAKd,WAAWwF,QAAQ,IAAKvC,EAAI,GAAG3K,OAASkK,EAAKlK,OAAS,GACvE,IAAe,IAAXsH,EACA,MAAM,IAAIrH,YAAY,kBAC1B,IACIkN,EADAC,EAAYC,iBAAiB9E,EAAWD,UAAUC,EAAWC,EAAK5F,UAAU0E,EAAQ,GAAI,GAAI,MAEhG,MAAMgG,EAAW,0BACjB,IAAIC,EAAQ,GACRC,GAAe,EACnB,KAAOL,EAAYG,EAASnG,KAAKiG,EAAU1F,aAAa,CACpD,GAAqB,YAAjByF,EAAU,GAAkB,CAC5B,GAAIK,EACA,MAAM,IAAIvN,YAAY,wCAC1BuN,GAAe,CACnB,CACA,IAAIC,EAAOnF,UAAUC,EAAW6E,EAAUxK,UAAUuK,EAAU,GAAGnN,QAAS,CAAC,OACvEiH,EAAQa,YACRZ,EAAII,EAAQ6F,EAAU,GAAGnN,OAASyN,EAAKzN,OAAS,EAChD0N,EAAe,SAASvG,KAAKiG,EAAUxK,UAAUsE,GAAGQ,YACpDiG,EAAQ,GACZ,GAAID,EACAxG,GAAKwG,EAAa,GAAG1N,OACrBiH,EAAQqB,UAAUC,EAAW6E,EAAUxK,UAAUsE,GAAI,GAAI,KACzDA,GAAKD,EAAMjH,OAAS,EACpB2N,EAAQV,aAAahG,EAAOsB,OAE3B,CACD,IAAIqF,EAAWtF,UAAUC,EAAW6E,EAAUxK,UAAUsE,GAAI,CAACoG,IAC7D,GAAKM,EAAShG,OAAO5H,OAIhB,CACD,MAAQiH,EAAQqB,UAAUC,EAAW6E,EAAUxK,UAAUsE,GAAI,CAACgB,aAAalI,SACvEkH,GAAKD,EAAMjH,QAA+C,MAArCoN,EAAU3F,KAAKP,EAAID,EAAMjH,QAAkB,EAAI,IAChEsN,EAASpD,KAAKkD,EAAUxK,UAAUsE,GAAGQ,eAI7CiG,EAAQV,aAAaG,EAAUxK,UAAU0E,EAAOL,EAAMM,IAAM6F,EAAU9F,OAAQiB,EAClF,MAXIoF,EAAQ,GACRzG,GAAK0G,EAAS5N,MAWtB,CACAoN,EAAYA,EAAUxK,UAAUsE,GAChCqG,EAAMxD,KAAK9H,WAAW,CAClBE,GAAI,GACJC,EAAoB,YAAjB+K,EAAU,QAAmBpN,EAAYmL,YAAY3C,EAAWkF,GACnEpL,EAAGsL,IAEX,CACA9C,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG8I,YAAY3C,EAAW2B,GAC1B7H,EAAGkL,GACL,IAENlD,YAAY,CAAC,MAAO,SAAS,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC9D,IAAInG,EAAOiG,EAAI,GACXkD,EAAQlD,EAAI,GAAG3K,OACfmC,EAAK,OACT,GAAa,QAATqI,EAAgB,CACZG,EAAI,KACJxI,EAAK,SAET,IAAI2L,EAAUtF,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAQ0H,WAAWpI,MAAM4D,YAAYwB,KAAKtB,MAAMsB,MACpF,IAAIoJ,IAAWA,EAAQ9N,OAKnB,MAAM,IAAIC,YAAY,gBAJtByE,EAAOoJ,EAAQ,GACfD,EAAQnJ,EAAK1E,OAAS2K,EAAI,GAAG3K,MAKrC,CACA6K,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUiL,GAAQ3K,YAAY0H,GAAQpN,KAAMyE,WAAW,CAC1FE,GAAIuI,YAAYvI,GAChBC,EAAGyI,EAAIU,SACPlJ,EAAGqC,IACJ,IAEP2F,YAAY,CAAC,cAAe,iBAAiB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC9EA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAa,gBAATqI,EAAyB,GAAgC,GAC7DpI,EAAG,EACHC,EAAG+I,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,OAC3E,IAEN6M,YAAY,CAAC,SAAU,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAClEA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAa,WAATqI,EAAoB,EAA0B,GAClDpI,EAAG,EACHC,EAAG6I,YAAY3C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,UAClD,IAENqK,YAAY,CAAC,SAAU,UAAW,OAAQ,MAAO,MAAO,aAAa,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACtGA,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAa,WAATqI,EAAoBG,EAAI,IAAM,GAA2B,EAA0B,GACvFvI,EAAG,EACHC,EAAGsI,EAAI,IAAMA,EAAI,GAAKA,EAAI,KAC3B,IAEPN,YAAY,CAAC,SAAU,UAAW,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7EA,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAa,WAATqI,EAAoB,EAAwC,YAATA,EAAqB,GAAiC,GAC7GpI,EAAG,EACHC,EAAGsI,EAAI,KACR,IAEPN,YAAY,CAAC,eAAe,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7D,MAAMkD,EAAgB,QAAXpD,EAAI,GAAe,GAAmC,QAAXA,EAAI,GAAe,EAAuB,EAC3FA,EAAI,GAQLE,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI4L,EACJ3L,EAAGuI,EAAI,GACPtI,EAAG+I,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,QAV7EqN,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAI4L,EACJ3L,EAAGuI,EAAI,GACPtI,EAAG,IASX,IAEJgI,YAAY,CAAC,WAAY,iBAAkB,gBAAiB,wBAAwB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACrH,MAAMmD,EAAmB,aAATxD,GAAgC,mBAATA,EACjCyD,EAAWD,IAAYrD,EAAIA,EAAI3K,OAAS,GACxCkO,EAASF,EAAU,EAAI,EACvBG,EAAUxD,EAAI,GAAK,GAAyB,EAC5CyD,EAAOzD,EAAIuD,GAAUvD,EAAIuD,GAAQzM,QAAQ,OAAQ,IAAI4M,MAAM,MAAQ,GACpEL,GACDI,EAAKE,SAAS3D,EAAI,IAAM,IAAIhD,aAEhC,IAAI4G,GAAQ,EACZH,EAAK7D,SAASQ,IACV,GAAIwD,EACA,MAAM,IAAItO,YAAY,gDACtB8K,EAAIsB,WAAW,SACfkC,GAAQ,EAAI,IAEpBH,EAAKE,QAAQH,GACb,MAAM/B,EAAI9D,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAUiO,EAAoB,CAAC,aAAc/F,WAAxB,CAAC,OACrEsG,EAAQP,EAAW,UAAY7B,EAAIA,EAAE1E,WAC3CmD,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAASwO,EAAKxO,OAAS,GAAIkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CACpHE,GAAI6L,EAAU,GAA2C,aAATxD,EAAsB,GAA6B,GACnGpI,EAAGgM,EACH/L,EAAGkG,EAAUkG,MAAQC,gBAAgB,IAAItH,WAAWoH,GAAOjG,GAAaiG,IACzE,IAEP,MAAMG,cAAgB,2EACtBtE,YAAY,CAAC,MAAO,KAAM,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACrE,IAGI+D,EAGAhC,EAEAiC,EARA3H,EAAI,EACJ4H,EAAY,GACZC,EAAgB,GAEhBC,EAAa,EACbC,EAAa,GAEb1R,EAAO,GAEX,OAAQiN,GACJ,IAAK,QACDtD,EAAIsB,EAAKd,WAAWwF,QAAQ,KAAO,EACnC,IAAIpC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,GAAI,KAC1D0F,EAAYsC,kBAAkB3G,EAAWuC,GACzC+D,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAUsE,EAAI4D,EAAQ9K,OAAS,IAAI4H,OACpD,MAAZiH,EAAK,KACLA,EAAOA,EAAK/N,MAAM,GAAI,IAC1B,MACJ,IAAK,MACDoG,EAAIsB,EAAKd,WAAWwF,QAAQ,KAAO,EACnC,IASIiC,EATAf,EAAO,GACPgB,EAAWtH,YACf,IAAK,IAAIuH,EAAI,EAAGA,EAAI,IAChBD,EAAW9G,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,CAAC,WACpDkH,EAAKrE,KAAKqF,EAASxH,QACnBV,GAAKkI,EAASpP,OAAS,EACE,MAArBwI,EAAKf,KAAKP,EAAI,IAJCmI,KAQvB,GAAoB,IAAhBjB,EAAKpO,SAAiBmP,EAAWR,cAAcxH,KAAKiH,EAAK,GAAG1G,aACxC,OAAhByH,EAAS,IACTP,EAAcM,kBAAkB3G,EAAW6F,EAAK,GAAGxL,UAAUuM,EAAS,GAAGnP,SACrE+O,EAAgB,CACZO,SACAC,UAER3C,EAAY4C,YACZjS,EAAOkS,OACPT,EAAa5D,QAAQ7C,EAAW,IAAInB,YAAY+H,EAAS,IAAM,QAAUA,EAAS,GAAK,mBAAoB,CAAC,iBAG5GP,EAAcM,kBAAkB3G,EAAW6F,EAAK,GAAGxL,UAAUuM,EAAS,GAAGnP,SACrE+O,EAAgB,CACZW,SACAC,UAERpS,EAAOqS,OACPhD,EAAYiD,YACZb,EAAa5D,QAAQ7C,EAAW,IAAInB,YAAY+H,EAAS,IAAM,QAAUA,EAAS,GAAK,yBAA0B,CAAC,oBAGrH,IAAoB,IAAhBf,EAAKpO,OAMV,MAAM,IAAIC,YAAY,+BALtB6O,EAAY5D,YAAY3C,EAAW6F,EAAK0B,QAAS1F,kBACjDwC,EAAYsC,kBAAkB3G,EAAW6F,EAAK0B,SAC9CvS,EAAO2N,YAAY3C,EAAW6F,EAAK0B,QAIvC,CACAjB,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAUsE,IAAIU,OAC/B,MAAZiH,EAAK,KACLA,EAAOA,EAAK/N,MAAM,GAAI,IAC1B,MACJ,IAAK,KACDmO,EAAa,EACb,MAAMc,IAAYpF,EAAI,GACtBkE,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS+P,EAAU,CAAC,OAAS,CAAC7H,YAChF0E,EAAYsC,kBAAkB3G,EAAWD,UAAUC,EAAWC,EAAK5F,UAAU4F,EAAKd,WAAWwF,QAAQ,IAAKvC,EAAI,GAAG3K,OAAS6O,EAAK7O,QAAU,GAAI,GAAI,MAGzJ,MAAMoC,EAAI,CAAC6M,EAAYF,EAAeH,EAAaE,EAAWvR,EAAMqP,EAAWoC,GAC/EnE,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,IACAC,EAAG4K,aAAa4B,EAAMtG,IACxB,IAEN8B,YAAY,CAAC,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACxDA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG6K,aAAa3E,UAAUC,EAAWC,EAAK5F,UAAU,GAAI,GAAI,KAAM2F,GAClElG,EAAG,GACL,IAENgI,YAAY,CAAC,eAAe,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7DA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAGuI,EAAI,GACPtI,EAAG,GACL,IAEN,MAAM2N,SAAW,sEACjB3F,YAAY,CAAC,QAAQ,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACtD,MAAMgE,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,GAAI,KACrE,IACIiQ,EAEAC,EAHAC,EAAWH,SAAS7I,KAAKqB,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,GAAG0H,YAEzE0I,EAAY,GAEZC,EAAS,EACTF,EAAS,GAAG9D,WAAW,UACvB8D,EAAWH,SAAS7I,KAAKqB,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,GAAG0H,YACzE0I,EAAYD,EAAS,GACrBD,EAAY5H,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,EAAImQ,EAAS,GAAGnQ,QAAS,GAAI,KAC3GqQ,EAAS1F,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,EAAImQ,EAAS,GAAGnQ,OAASkQ,EAAUlQ,OAAS,GAC9EmQ,EAAWH,SAAS7I,KAAKqB,EAAK5F,UAAUyN,GAAQ3I,cAAgByI,EAAS,GAAG9D,WAAW,aACxF4D,EAAc3H,UAAUC,EAAWC,EAAK5F,UAAUyN,EAASF,EAAS,GAAGnQ,QAAS,GAAI,OAIxFiQ,EAAc3H,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,EAAImQ,EAAS,GAAGnQ,QAAS,GAAI,KAEjH,MAAMqC,EAAI,CACN+N,EACAnD,aAAaI,iBAAiB9E,EAAW2H,GAAapI,aAAcS,GACpE0E,aAAaI,iBAAiB9E,EAAW0H,GAAenI,aAAcS,IAE1EsC,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG6K,aAAaI,iBAAiB9E,EAAWsG,GAAOtG,GACnDlG,KACF,IAENgI,YAAY,CAAC,OAAQ,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAChE,MAAMC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,CAAC,6BACrE6K,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS8K,EAAQ9K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CACnHE,GAAa,SAATqI,EAAkB,GAAyB,GAC/CpI,EAAGgJ,QAAQ7C,EAAWuC,GACtBzI,EAAG,IACJ,IAEPgI,YAAY,CAAC,QAAQ,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACtD,IAAI3D,EAAIyD,EAAI,GAAG3K,OACf,MAAMkC,EAAMoG,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,QAAInH,EAAW,KACnEmH,GAAKhF,EAAIlC,OAAS,EAClB,MAAMoO,EAAO,GACb,GAAyB,MAArB5F,EAAKf,KAAKP,EAAI,GAAY,CAC1B,MAAMoJ,EAAahI,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,GAAI,KAE/D,IAAID,EADJC,GAAKoJ,EAAWtQ,OAAS,EAEzB,IAAIuQ,EAAI,EACR,MAAQtJ,EAAQqB,UAAUC,EAAW+H,EAAW1N,UAAU2N,GAAI,CAAC,QAAQvQ,QACnEuQ,GAAKtJ,EAAMjH,OAAS,EACpBoO,EAAKrE,KAAK9C,EAAMW,OAExB,CACAiD,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUsE,GAAIhE,YAAYY,QAAQtG,KAAMyE,WAAW,CACtFE,GAAI,GACJC,EAAGgJ,QAAQ7C,EAAWrG,EAAKgB,YAAY0C,WAAWpI,MAClD6E,EAAG+L,EAAKjD,KAAKJ,GAAQK,QAAQ7C,EAAWwC,EAAK7H,YAAY0C,WAAWpI,UACrE,IAEP,MAAM8R,SAAWlE,aAAQrL,EAAW,IAAIqH,WAAW,6CAA8C,CAAC,eAC5FmI,SAAWnE,aAAQrL,EAAW,IAAIqH,WAAW,kCAAmC,CAAC,eACjFoI,YAAcpE,aAAQrL,EAAW,IAAIqH,WAAW,uBAAwB,CAAC,eACzEqI,OAASrE,aAAQrL,EAAW,IAAIqH,WAAW,+BAC3CsI,SAAWtE,aAAQrL,EAAW,IAAIqH,WAAW,mCAAoC,CAAC,eAClFuI,SAAWvE,aAAQrL,EAAW,IAAIqH,WAAW,sBAAuB,CAAC,eACrEwI,OAASxE,aAAQrL,EAAW,IAAIqH,WAAW,iBAC3CyI,YAAczE,aAAQrL,EAAW,IAAIqH,WAAW,qCAAsC,CAAC,eAC7F,IAAIoJ,SAKJ,SAASpF,QAAQ7C,EAAWC,EAAMiI,EAAUlF,EAAUmF,GAAW,GAG7D,GAFAnF,EAAWA,GAAY,CAAC,EAAuB,EAAuB,GACtEkF,EAAWA,GAAYvN,YAAY0C,WAAWpI,UACjCuC,IAATyI,EACA,OAAO+C,EAEX,MAAMxE,GADNyB,EAAOA,EAAKb,aACKD,WACjB,IAAKc,EAAKxI,SAAWyQ,EAASzH,SAAS,UACnC,MAAM,IAAI/I,YAAY,gCAE1B,IAAKuI,EAAKxI,OACN,OAAOuL,EACX,IACIZ,EADAE,EAAM,CAAEU,SAAUA,GAEtB,IAAK,IAAIX,KAAU6F,EACf,GAAe,WAAX7F,EAAJ,CAGA,IAAK,IAAIJ,KAAQtH,YAAY0H,GAAQxH,MACjC,GAAa,WAAToH,IAGAG,EAAMzH,YAAY0H,GAAQxH,MAAMoH,GAAMrD,KAAKJ,IAAM,CACjDyJ,SAAWhG,EAKX,IACIlI,UAAUjB,IAAImJ,EAAdlI,CAAoBiG,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,EAC3D,CACD,MAAOpN,GACH,GAAIiT,GAAYjT,aAAawC,YACzB,MAAM,IAAIsC,WAAW9E,EAAEiF,QAASqE,GAEpC,MAAMtJ,CACV,CACA,KACJ,CAEJ,GAAIkN,EACA,KAxBJ,CA0BJ,IAAKA,GAAOnC,EAAKxI,OAAQ,CAErB,GADiDwI,EAAKf,KAAK,GACvDiJ,EACA,MAAM,IAAInO,WAAW,0BAA0BiO,aAAahI,EAAKf,KAAK,KAAMV,GAEhF,MAAM,IAAI9G,YAAY,0BAA0BuQ,aAAahI,EAAKf,KAAK,KAC3E,CACA,OAAOoD,EAAIU,QACf,CACA,MAAMoF,8BAAgCvG,iBAAiBnB,QAAQ2H,GAAY,cAANA,IACrE,SAAS1F,YAAY3C,EAAWxB,EAAK0J,GACjC,IAAK1J,EAAIY,YAAY3H,OACjB,OACJ,IACI8J,EADA+G,EAAiB,GAEjBC,EAAM,EAEV,IADAL,EAAWA,GAAYvN,YAAY0C,WAAWpI,MACjCwL,SAAS,cACdlC,aAAaC,EAAIW,WAAYqJ,OAAOC,OAAO9N,YAAYkD,UAAUhD,QACjE,OAAOgI,QAAQ7C,EAAWxB,EAAK,CAAC,kBAAchH,GAAW,GAKjE,IAFI0Q,IAAarG,mBACbqG,EAAWE,gCACP7G,EAAMxB,UAAUC,EAAWxB,EAAInE,UAAUkO,GAAM,CAAC,QAAQ9Q,QAC5D6Q,EAAe9G,KAAKD,EAAInC,aACxBmJ,GAAOhH,EAAI9J,OAAS,EAExB,GAA8B,IAA1B6Q,EAAe7Q,OACf,OAAOoL,QAAQ7C,EAAWxB,EAAK0J,OAAU1Q,GAAW,GAExD,GAAI0Q,EAASzH,SAAS,cAAe,CACjC,IAAIiI,EAAU/N,YAAY0C,WAAWxC,MAAMwC,WAAWuB,KAAK0J,EAAe,GAAGnJ,YAC7E,GAAIuJ,EACA,OAAOhP,WAAW,CACdE,GAAI,GACJC,EAAGyO,EAAe1F,KAAI,CAACpE,EAAKG,IAAMkE,QAAQ7C,EAAWrB,EAAI,IAAIE,WAAW6J,EAAQ,GAAK,IAAMlK,GAAOA,EAAK,CAAC,mBAAehH,GAAW,KAClIsC,EAAG,IAGN,GAAIa,YAAY0C,WAAWxC,MAAMyC,OAAOsB,KAAK0J,EAAe,GAAGnJ,YAChE,OAAO0D,QAAQ7C,EAAWxB,EAAK0J,OAAU1Q,GAAW,EAE5D,CACA,MAAM4N,EAAQkD,EAAe1F,KAAI,CAACpE,EAAKG,IAAMkE,QAAQ7C,EAAWxB,EAAK0J,OAAU1Q,GAAW,KAC1F,OAAOkC,WAAW,CAAEE,GAAI,GAA8BC,EAAGuL,EAAOtL,EAAG,GACvE,CACO,SAAS6M,kBAAkB3G,EAAWxB,GACzC,OAAO9E,WAAW,CAAEE,GAAI,EAAyBC,EAAG,EAAuBC,EAAG6I,YAAY3C,EAAWxB,IACzG,CACO,SAASkG,aAAalG,EAAKwB,EAAW2I,GAAa,GAEtD,KADAnK,EAAMsG,iBAAiB9E,EAAWxB,IACzBa,OAAO5H,OACZ,MAAO,GACX,IACIwI,EADA2I,EAAQ,GAERL,EAAM,EACNxJ,EAAQ,EACRsB,EAAU,CAAA,EACVwI,GAAU,EACVC,GAAa,EACjB,MAAQ7I,EAAOF,UAAUC,EAAWxB,EAAInE,UAAUkO,GAAM,CAAC5I,gBAAYnI,OAAWA,OAAWA,EAAW6I,IAAU5I,SAC5GqR,EAAatK,EAAIU,KAAKqJ,EAAMtI,EAAKxI,SAA2C,MAAhC+G,EAAIU,KAAKqJ,EAAMtI,EAAKxI,QAChE8Q,GAAOtI,EAAKxI,QAAUqR,EAAa,EAAI,GACnC,qBAAqBnH,KAAKnD,EAAInE,UAAUkO,GAAKpJ,aAGxCkB,EAAQC,MAAMG,SAAS,OAAS,sBAAsBkB,KAAKnD,EAAInE,UAAUkO,GAAKpJ,YAFnF0J,GAAU,GAMVA,GAAU,EACVD,EAAMpH,KAAKhD,EAAInE,UAAU0E,EAAOwJ,GAAOO,EAAa,EAAI,KACxD/J,EAAQwJ,GAEZlI,EAAU,CAAA,GACNsI,KAMR,OAHIE,GACAD,EAAMpH,KAAKhD,EAAInE,UAAU0E,EAAOwJ,GAAOO,EAAa,EAAI,KAErDF,EAAMhG,KAAKpE,GAAQA,EAAIY,cAAasB,QAAQlC,GAAQA,EAAI/G,SAAQmL,KAAI,CAACpE,EAAKwJ,IACtErF,YAAY3C,EAAWxB,EAAIY,YAAayC,mBAEvD,CACO,SAASsE,gBAAgB3H,EAAKwB,EAAW2I,GAAa,GACzD,IAAKnK,EAAIa,OAAO5H,OACZ,MAAO,GACX,MAAMsR,EAAOrE,aAAalG,EAAKwB,EAAW2I,GAC1C,IAAIK,EAAU,GAEd,OADAC,MAAMF,EAAMC,GACLA,EAAQE,OAAOH,EAC1B,CACO,SAASI,OAAOC,GACnB,OAAOC,MAAMC,QAAQF,IAA4B,iBAAZA,EAAK,IAA+B,IAAZA,EAAK,IAA4C,KAAZA,EAAK,EAC3G,CACA,SAASH,MAAMG,EAAMhH,GACjB,GAAI+G,OAAOC,GAAO,CACd,MAAOxP,EAAIC,EAAGC,GAAKsP,EACnB,GAAW,KAAPxP,GAAuC,KAAPA,GAAsC,KAAPA,GAAwC,KAAPA,EAChGqP,MAAMpP,EAAGuI,GACT6G,MAAMnP,EAAGsI,QAER,GAAW,KAAPxI,EACLwI,EAAIZ,KAAK9H,WAAW,CAAEE,GAAI,GAAuBC,EAAGA,EAAGC,EAAG,UAEzD,GAAW,KAAPF,GAAqCC,EAAE,GAE5C,OADAuI,EAAIZ,KAAK4H,IACF,CAEd,MACI,GAAIC,MAAMC,QAAQF,GAAO,CAC1B,MAAMG,EAAM,GACZ,IAAK,IAAIC,KAAMJ,EACNH,MAAMO,EAAIpH,IACXmH,EAAI/H,KAAKgI,GAGbD,EAAI9R,SAAW2R,EAAK3R,SACpB2R,EAAK3R,OAAS,EACd2R,EAAK5H,QAAQ+H,GAErB,CACA,OAAO,CACX,CACA,MAAME,oBAAsB,0DAEtBC,YAAc,6FAcb,SAAS5E,iBAAiB9E,EAAWxB,GACxC,IAAImL,EAAOnL,EACP+C,EAAMhC,YACNc,EAAU,CAAA,EACd,MAAMuJ,EAAWhK,mBAAmB9G,IAAI0F,EAAIM,MAAQ,IAAIuK,MAAM7K,EAAIM,IAAIN,IAAI/G,QAC1E,MAAQ8J,EAAMxB,UAAUC,EAAW2J,EAAM,QAAInS,OAAWA,EAAW,CAACkS,aAAcrJ,IAAU5I,QAAQ,CAChG,IAAIoS,GAAQ,EACR5J,EAAOsB,EACPuI,EAAOvI,EAAI9J,OACf,GAAI4I,EAAQe,OAAQ,CAChByI,GAAQ,EACR,MAAWhQ,CAAAA,CAAAA,EAAOC,CAAAA,CAAAA,GAAKuG,EAAQe,OAG/B,GAFA0I,EAA6B,OAAtBzJ,EAAQe,OAAO,IAAqC,OAAtBf,EAAQe,OAAO,GAAcG,EAAI9J,OAAS,EAAI8J,EAAI9J,OACvFwI,EAAO0J,EAAKtP,UAAU,EAAGyP,GACrBhQ,EAAG,CACH,IAAIsI,EAAMqH,oBAAoB7K,KAAK+K,EAAKtP,UAAUkH,EAAI9J,OAAS,GAAG0H,YAC9DiD,EAEIyH,EADW,UAAXzH,EAAI,IACyB,OAArB/B,EAAQqB,SAMM,aAArBrB,EAAQqB,UAAoD,MAAzBrB,EAAQe,OAAO,GAAG,IAA8C,MAAhCf,EAAQe,OAAO,GAAG7I,OAAO,KACjGsR,GAAQ,EAEf,MACQhQ,IACoB,OAArBwG,EAAQqB,UAA0C,UAArBrB,EAAQqB,UAA6C,QAArBrB,EAAQqB,UAA2C,SAArBrB,EAAQqB,WACnGmI,GAAQ,GAGpB,CACIA,IACAD,EAAS3J,EAAKjB,MAAO,GAEzB2K,EAAOA,EAAKtP,UAAUyP,GACtBzJ,EAAU,CAAA,CACd,CAEA,OADAT,mBAAmBiB,IAAIrC,EAAIM,IAAK8K,GACzBpL,CACX,CACO,SAASuL,WAAWvL,GACvB,IAAIG,EAAI,EACJoC,GAAS,EACT1L,GAAO,EACP2U,GAAS,EACb,KAAOrL,EAAIH,EAAI/G,SAAWpC,IAAS2U,GAC/B3U,EAAmB,MAAXmJ,EAAIG,KAAeoC,EAC3BA,EAAoB,OAAXvC,EAAIG,KAAgBoC,EAC7BiJ,EAAoB,OAAXxL,EAAIG,GACbA,IAEJ,IAAIsL,EAAQzL,EAAInE,UAAUsE,GAE1B,GADAqL,EAAUA,IAAW3U,GAAS,SAASsM,KAAKsI,GACxCD,EACA,OAAO,KACX,IAAIE,EAAQ,UAAUtL,KAAKqL,GAC3B,MAAI,aAAatI,KAAKnD,EAAInE,UAAUsE,EAAIuL,EAAM,GAAGzS,SACtC,KAEJ,CACHgF,MAAO+B,EAAInE,UAAU,EAAGsE,EAAI,GAC5BuL,MAAQA,GAASA,EAAM,IAAO,GAC9BzS,OAAQkH,GAAMuL,GAASA,EAAM,GAAGzS,QAAW,GAEnD,CACA,MAAM0S,UAAY,gEACZC,eAAiB,gCAChB,SAASC,iBAAiBrK,EAAWxB,EAAK8L,EAAmB,IAChE,IAAIpK,EAGAqK,EAFAhI,EAAU,GACVxB,GAAS,EAETyJ,EAAU,GACVC,GAAgB,EAChBC,EAAS,GACTxL,EAAO,GACX,MAAMyL,EAAS,GACTC,EAAa,GACnB,IAAIC,EACJ,IAAK,IAAIlM,EAAI,EAAGA,EAAIH,EAAI/G,OAAQkH,IAE5B,GADAO,EAAOV,EAAIG,GACP6L,EACItL,IAASsL,IACO,MAAZA,GAAkC,MAAfhM,EAAIG,EAAI,IAC3B6L,EAAU,GACV7L,KAEiB,OAAZ6L,IACLA,EAAU,SAIjB,CACD,GAAIzJ,EAAQ,CACRA,GAAS,EACTwB,EAAQf,KAAKtC,GACb,QACJ,CACA,GAAIgB,EACA,GAAc,MAAVA,GAA0B,MAAThB,GAA+B,MAAfV,EAAIG,EAAI,GAAY,CACrD,IAAIwC,EAAOkJ,iBAAiBrK,EAAWxB,EAAInE,UAAUsE,EAAI,GAAI,KAC7D+L,EAAOlJ,KAAKL,EAAK3C,KACjB+D,EAAQf,KAAK,KAAMkJ,EAAOjT,OAAS,EAAG,KACtCkH,GAAKwC,EAAK1J,OAAS,CACvB,MACK,GAAIyI,IAAUhB,EAAM,CACrB,GAAc,MAAVgB,EAAe,CACf,MAAM4K,EAAKpR,WAAW,CAClBE,GAAI,GACJC,EAAGb,MAAMuJ,EAAQwI,KAAK,KACtBjR,EAAG,KAEPgR,EAAGE,cAAgBN,EACnB1K,EAAUiL,SAASzJ,KAAKsJ,GACxBH,EAAOnJ,KAAK,IAAMxB,EAAUiL,SAASxT,OAAS,EAAG,IACrD,MAEIuI,EAAUkL,QAAQ1J,KAAKxI,MAAMuJ,EAAQwI,KAAK,MAC1CJ,EAAOnJ,KAAK,IAAKxB,EAAUkL,QAAQzT,OAAS,EAAG,KAEnDyI,EAAQ,KACRqC,EAAU,EACd,MAEIA,EAAQf,KAAKtC,OAGhB,CACD,GAAc,MAATA,GAAyB,MAATA,GAAyB,MAATA,EACjCwL,EAAS,GACTxK,EAAQhB,MAEP,IAAIZ,SAASgM,KAAsBpL,IAAS0L,EAAWnT,OACxD,MAAO,CAAE+G,IAAKmM,EAAOI,KAAK,IAAKtT,OAAQkH,GAElCL,SAASY,IACd0L,EAAWpJ,KAAKtC,GAChByL,EAAOnJ,KAAKtC,IAEPZ,SAASsM,EAAWA,EAAWnT,OAAS,MAAQyH,GACrD0L,EAAWO,MACXR,EAAOnJ,KAAKtC,IAEE,MAATA,GAAgC,MAAfV,EAAIG,EAAI,IAA6B,MAAfH,EAAIG,EAAI,GAItC,MAATO,IAAiB2L,IAAqBN,EAAaR,WAAWvL,EAAInE,UAAUsE,MACjFqB,EAAUoL,QAAQ5J,KAAK+I,GACvBI,EAAOnJ,KAAK,IAAKxB,EAAUoL,QAAQ3T,OAAS,EAAG,MAC/CkH,GAAK4L,EAAW9S,OAAS,GAGzBkT,EAAOnJ,KAAKtC,IATZsL,EAAyB,MAAfhM,EAAIG,EAAI,GAAa,IAAM,KACrC8L,EAAe9L,EASnB,CACKkM,GAAqBnQ,MAAMiH,KAAKzC,KAC7B2L,EAAmBT,eAAexL,KAAKJ,EAAInE,UAAUsE,MACjDwL,UAAUxI,KAAKnD,EAAInE,UAAU,EAAGsE,EAAIkM,EAAiB,GAAGpT,WACxDoT,EAAmB,KAInC,CACA9J,EAASb,GAAkB,OAAThB,CACtB,CAEJ,GAAIsL,GACgB,MAAZA,EACA,MAAM,IAAI9S,YAAY,0BAA0B8G,EAAInE,UAAUoQ,MAGtE,MAAO,CAAEjM,IAAKmM,EAAOI,KAAK,IAAKtT,OAAQkH,EAC3C,CACO,SAAS0M,QAAMhV,EAAM6P,GAAQ,EAAOyC,GAAa,GACpD,GAAoB,iBAATtS,EACP,MAAM,IAAI2D,WAAW,gBAAgB3D,IAAQA,GACjD,IAAImI,EAAM,IAAMnI,EAChB,MAAM2J,EAAY,CAAEkL,QAAS,GAAID,SAAU,GAAIG,QAAS,GAAIlF,SAC5D1H,EAAM6L,iBAAiBrK,EAAWxB,GAAKA,IACvC,IAAK,IAAIiE,KAAKzC,EAAUiL,SACpBxI,EAAE,GAAKA,EAAEuI,cAAcpI,KAAK0I,GAAO3I,YAAY3C,EAAW,IAAInB,WAAWyM,aAClE7I,EAAEuI,cAEb,MAAO,CAAEjC,KAAM5C,gBAAgB,IAAItH,WAAWL,GAAMwB,EAAW2I,GAAa3I,YAChF,CCv6CO,MAAMuL,WACTrR,WAAAA,CAAYsR,EAAapW,EAAQqW,EAAUC,GAAY,EAAOC,GAAe,GACzErR,KAAKkR,YAAcA,EACnBlR,KAAKlF,OAASA,EACdkF,KAAKmR,SAAWA,EAChBnR,KAAKoR,UAAYA,EACjBpR,KAAKqR,aAAeA,CACxB,EAEG,MAAMC,KACT1R,WAAAA,CAAY2R,EAAS1P,EAAM2P,GAAU,EAAOC,GAAW,EAAOC,GAAa,GACvE1R,KAAKuR,QAAUA,EACfvR,KAAK6B,KAAOA,EACZ7B,KAAKwR,QAAUA,EACfxR,KAAKyR,SAAWA,EAChBzR,KAAK0R,WAAaA,CACtB,CACAlT,GAAAA,CAAI+S,GACA,QAAqBrU,IAAjB8C,KAAKuR,QACL,MAAM,IAAII,eAAe,GAAG3R,KAAK6B,uBAErC,OADA0P,EAAQK,iBAAiBlK,SAASmK,GAAOA,EAAG7R,KAAKuR,QAASvR,KAAK6B,QACxD7B,KAAKuR,QAAQvR,KAAK6B,KAC7B,EAEJ,MAAMiQ,SAAW,CAAA,EACXC,cAAgB,IAAIC,IAAI,CAC1B,aACA,SACA,SACA,MACA,QACA,KACA,UACA,OACA,KACA,KACA,MACA,MACA,QACA,MACA,SACA,QACA,OACA,QACA,KACA,QACA,WACA,MACA,WACA,QACA,QACA,SACA,SAEJ,IAAIC,QAMJ,SAASC,SAAS7S,GACd,MAAM8S,EAAMjE,OAAOnN,OAAO,CAAE,EAAE1B,GAC9B,IAAK,IAAImJ,KAAO2J,EACZA,EAAI3J,IAAO,EAEf,OAAO2J,CACX,EAXA,SAAWF,GACPA,EAAa,IAAI,MACjBA,EAAe,MAAI,QACnBA,EAAa,IAAI,KACpB,CAJD,CAIGA,UAAYA,QAAU,CAAE,IAQpB,MAAMG,MACTxS,WAAAA,CAAYyS,EAAQC,EAAO,CAAA,EAAIC,GAC3BvS,KAAKwS,MAAQ,GACbxS,KAAKyS,IAAM,GACXzS,KAAK0S,IAAM,GACX,MAAMC,OAA+BzV,IAAjBqV,GAAyC,OAAXF,EAClDrS,KAAKqS,OAASA,EACdrS,KAAK4S,QAAUN,EACftS,KAAKyS,IAAME,EAAc3S,KAAKyS,IAAMP,SAASI,GAC7CtS,KAAK0S,IAAMC,EAAcT,SAASI,GAAQtS,KAAK0S,IAC/C1S,KAAK6S,QAAqB,OAAXR,EAAkBH,SAASI,GAAQ,GAClDtS,KAAKuS,aAAeA,CACxB,CACA/T,GAAAA,CAAIgK,EAAKsK,GAAgB,GACrB,GAAY,SAARtK,QAAwCtL,IAAtB8C,KAAKuS,aACvB,OAAO,IAAIjB,KAAK,CAAEtR,KAAMA,KAAKuS,cAAgB/J,GAAK,GAAM,GAAO,GAEnE,GAAIuJ,cAAcvL,IAAIgC,GAClB,MAAM,IAAIpL,YAAY,sBAAwBoL,EAAM,KACxD,GAAoB,OAAhBxI,KAAKqS,SAAoBS,QAAuC5V,IAAtB8C,KAAKuS,aAA4B,CAC3E,GAAIvS,KAAK6S,QAAQE,eAAevK,GAC5B,OAAO,IAAI8I,KAAKtR,KAAKuS,aAAc/J,GAAK,GAAO,GAAM,GAEzD,GAAIA,KAAOxI,KAAK4S,YAAcpK,IAAO,CAAA,IAAOxI,KAAK4S,QAAQG,eAAevK,IACpE,OAAO,IAAI8I,KAAKtR,KAAK4S,QAASpK,EAAKxI,KAAKwS,MAAMO,eAAevK,GAAMxI,KAAK6S,QAAQE,eAAevK,IAAM,GAEzG,GAAoB,OAAhBxI,KAAKqS,OACL,OAAO,IAAIf,UAAKpU,EAAWsL,EAEnC,CACA,OAAOxI,KAAKqS,OAAO7T,IAAIgK,EAAKsK,EAChC,CACAvM,GAAAA,CAAIiC,EAAKwK,GACL,GAAY,SAARxK,EACA,MAAM,IAAIpL,YAAY,6BAC1B,GAAI2U,cAAcvL,IAAIgC,GAClB,MAAM,IAAIpL,YAAY,sBAAwBoL,EAAM,KACxD,IAAI3G,EAAO7B,KAAKxB,IAAIgK,GACpB,QAAqBtL,IAAjB2E,EAAK0P,QACL,MAAM,IAAII,eAAe,aAAanJ,wBAE1C,GAAI3G,EAAK2P,QACL,MAAM,IAAIyB,UAAU,oCAAoCzK,MAE5D,GAAI3G,EAAK4P,SACL,MAAM,IAAIyB,aAAa,oCAAoC1K,MAG/D,OADA3G,EAAK0P,QAAQ1P,EAAKA,MAAQmR,EACnBnR,CACX,CACAsR,OAAAA,CAAQ3K,EAAKb,EAAO,KAAMlN,OAAQyC,EAAWuU,GAAW,GACpD,GAAY,SAARjJ,EACA,MAAM,IAAIpL,YAAY,6BAC1B,GAAI2U,cAAcvL,IAAIgC,GAClB,MAAM,IAAIpL,YAAY,sBAAwBoL,EAAM,KACxD,GAAa,QAATb,QAAwCzK,IAAtB8C,KAAKuS,cAA8C,OAAhBvS,KAAKqS,OAC1D,OAAOrS,KAAKqS,OAAOc,QAAQ3K,EAAKb,EAAMlN,EAAOgX,GAE5C,KAAKzR,KAAK2H,GAAMoL,eAAevK,IAAiB,UAATb,GAAqB3H,KAAK6S,QAAQE,eAAevK,KAAWA,KAAOxI,KAAK4S,QAQhH,MAAM,IAAIM,aAAa,eAAe1K,gCAE1C,OATQiJ,IACAzR,KAAK6S,QAAQrK,IAAO,GAExBxI,KAAK2H,GAAMa,IAAO,EAClBxI,KAAK4S,QAAQpK,GAAO/N,EAKjB,IAAI6W,KAAKtR,KAAK4S,QAASpK,EAAKxI,KAAKwS,MAAMO,eAAevK,GAAMiJ,EACvE,EAIG,MAAM2B,YAEN,MAAMF,qBAAqBvT,OAElC,IAAI0T,aACG,SAASC,gBAAgB/B,EAASgC,GACrC,OACA,YAA4BC,GACxB,IACIC,EAAS1C,QADFyC,EAAO3C,OAAS,IAE3B,OAAO6C,eAAeF,EAAQC,EAAOhF,KAAe4E,aAAc,IAC3D9B,EACH7L,UAAW+N,EAAO/N,UAClB+I,KAAMgF,EAAOhF,WACdvR,EAAW,YAClB,CACJ,CACA,SAASyW,aAAaC,EAAUrI,GAC5B,MAAM+G,EAAO,CAAA,EASb,OARAsB,EAASlM,SAAQ,CAACQ,EAAK7D,KACf6D,EAAIsB,WAAW,OACf8I,EAAKpK,EAAInI,UAAU,IAAMwL,EAAKtN,MAAMoG,GAGpCiO,EAAKpK,GAAOqD,EAAKlH,EACrB,IAEGiO,CACX,CACA,MAAMuB,mBAAqB,IAAIC,QACxB,SAASJ,eAAeE,EAAUH,EAAQF,EAAOhC,EAASwC,EAAOC,GACpE,GAAIzC,EAAQvJ,IAAIiM,QAAQC,uBACpB,MAAM,IAAIhB,aAAa,kCAE3B,IAAIvH,EAiBJ,OAfIA,OADSzO,IAAT8W,EACOrI,IAAIJ,KACP,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,OADY4I,YAAYZ,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,KAClFxX,MAAM,EAId,YAA4ByQ,GAC/B,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,OADY4I,YAAYZ,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,EAAMtS,QACxFlF,QAGnByW,EAAQ6C,wBAAwBzI,GAChCkI,mBAAmBQ,IAAI1I,GAChBA,CACX,CACO,SAAS2I,oBAAoBV,EAAUH,EAAQF,EAAOhC,EAASwC,EAAOC,GACzE,GAAIzC,EAAQvJ,IAAIiM,QAAQC,uBACpB,MAAM,IAAIhB,aAAa,kCAE3B,IAAK3B,EAAQvJ,IAAIuM,oBAAoB/N,IAAInM,QAAQma,WAC7C,MAAM,IAAItB,aAAa,6BAE3B,IAAIvH,EAiBJ,OAfIA,OADSzO,IAAT8W,EACOS,SAAUlJ,KACb,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,aADkBmJ,iBAAiBnB,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,MAC7FxX,MAAM,EAId2Z,kBAAkClJ,GACrC,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,aADkBmJ,iBAAiBnB,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,EAAMtS,SACnGlF,QAGnByW,EAAQ6C,wBAAwBzI,GAChCkI,mBAAmBQ,IAAI1I,GAChBA,CACX,CACO,SAASgJ,cAAchJ,GAC1B,OACA,SAAqB5P,GACjB,OAAO4P,EAAK5P,EAAL4P,EACX,CACJ,CACO,SAASiJ,oBAAoBjJ,GAChC,OAAO,SAA2BkJ,KAAYtJ,GAC1C,MAAuB,iBAAZsJ,EACAC,WAAWD,KAAYtJ,GAC3BuJ,WAAWnJ,EAAKkJ,MAAatJ,GAE5C,CACO,SAASwJ,qBAAqBpJ,GACjC,OAAO,SAA4BkJ,KAAYtJ,GAC3C,MAAuB,iBAAZsJ,EACAG,YAAYH,KAAYtJ,GAC5ByJ,YAAYrJ,EAAKkJ,MAAatJ,GAE7C,CACO,SAAS0J,YAAY5V,EAAKkS,EAASjS,EAAK,UAC3C,QAAoBpC,IAAhBmC,EAAIkS,QACJ,MAAM,IAAII,eAAe,UAAUrS,yBAEvC,GAA2B,iBAAhBD,EAAIkS,SAA+C,mBAAhBlS,EAAIkS,QAC9C,MAAM,IAAInU,YAAY,UAAUkC,2BAEpC,GAAID,EAAImS,QACJ,MAAM,IAAIyB,UAAU,uCAAuC5T,EAAIwC,SAEnE,GAAIxC,EAAIoS,SACJ,MAAM,IAAIyB,aAAa,UAAU5T,eAAgBD,EAAIwC,4BAEzD,GAAqC,mBAA1BxC,EAAIkS,QAAQlS,EAAIwC,QAAyBxC,EAAIkS,QAAQwB,eAAe1T,EAAIwC,MAC/E,MAAM,IAAIqR,aAAa,gCAAgC7T,EAAIwC,qBAEpD,WAAPvC,EACID,EAAIkS,QAAQwB,eAAe1T,EAAIwC,QAC/B0P,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,SAC7F0P,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,UAGlGxC,EAAIkS,QAAQwB,eAAe1T,EAAIwC,OACpC0P,EAAQ6D,iBAAiB5W,IAAIa,EAAIkS,UAAU/S,IAAIa,EAAIwC,OAAO6F,SAASmK,GAAOA,EAAG,CACzElK,KAAM,cAEV4J,EAAQ8D,uBAAuB7W,IAAIa,EAAIkS,UAAU/S,IAAIa,EAAIwC,OAAO6F,SAASmK,GAAOA,EAAG,CAC/ElK,KAAM,gBAIV4J,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,SAC7F0P,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,SAE3G,CACA,MAAMyT,YAAc,IAAItD,IAAI,CACxB,GAAG9K,KACH,GAAG2J,IACH,GAAG5D,MACH,GAAGxB,QACH,GAAG8J,OACH,GAAGC,QACH,GAAGC,KACH,GAAGC,aAEA,MAAMC,OACT/V,WAAAA,CAAY4I,EAAKwK,GACbhT,KAAKwI,IAAMA,EACXxI,KAAKgT,IAAMA,CACf,EAEG,MAAM4C,aACThW,WAAAA,CAAYkP,GACR9O,KAAK8O,KAAOA,CAChB,EAEG,MAAM+G,YACTjW,WAAAA,CAAYkP,GACR9O,KAAK8O,KAAOA,CAChB,EAEG,MAAMgH,GACTlW,WAAAA,CAAYmW,EAAGxM,GACXvJ,KAAK+V,EAAIA,EACT/V,KAAKuJ,EAAIA,CACb,EAEJ,MAAMyM,aAAe,yBACRC,IAAM,IAAI3X,IAChB,SAAS4X,OAAOvO,EAAMkK,GACzBoE,IAAI1P,IAAIoB,EAAMkK,EAClB,CAimBA,SAASsE,YAAY5W,EAAGgS,GACpB,OAAIhS,aAAa+R,KACN/R,EAAEf,IAAI+S,GACbhS,IAAMuS,SAEHvS,OAFP,CAGJ,CACO,SAAS6W,SAAS7C,EAAOjP,EAAMmK,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAC1D/R,IAASgS,SACTC,cAAchD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAGjDG,eAAejD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAAgBI,MAAM1b,EAEhF,CACA,SAASwb,cAAchD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GACtD,IAAIlE,EAAM,GACV,IAAK,IAAI9N,EAAI,EAAGA,EAAIoK,EAAKtR,OAAQkH,IAAK,CAClC,IAAIyD,EACJ,IACIA,EAAM4O,UAAUC,GAAML,SAAS/C,EAAO9E,EAAKpK,GAAI0P,EAAOxC,EAASoF,EAAGN,KAAiBvb,MACtF,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,GAAIkN,aAAemJ,aAAenJ,EAAIqJ,UAAYrJ,EAAIsJ,WAAatJ,EAAIuJ,cAEnE,YADAtW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOJ,EAAKpK,KAAsB,IAAfoK,EAAKpK,GAAG,GAE3B,YADAtJ,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,IAGjEqK,EAAIjL,KAAKY,EACb,CACA/M,OAAKmC,EAAWiV,EACpB,CACAsC,eAAe+B,eAAejD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAC7D,IAAIlE,EAAM,GACV,IAAK,IAAI9N,EAAI,EAAGA,EAAIoK,EAAKtR,OAAQkH,IAAK,CAClC,IAAIyD,EACJ,IACI,IAAI8O,EACJ9O,GAA0G,KAAnG8O,EAAKC,WAAWF,GAAMG,UAAUvD,EAAO9E,EAAKpK,GAAI0P,EAAOxC,EAASoF,EAAGN,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAC9I,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,GAAIkN,aAAemJ,aAAenJ,EAAIqJ,UAAYrJ,EAAIsJ,WAAatJ,EAAIuJ,cAEnE,YADAtW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOJ,EAAKpK,KAAsB,IAAfoK,EAAKpK,GAAG,GAE3B,YADAtJ,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,IAGjEqK,EAAIjL,KAAKY,EACb,CACA/M,OAAKmC,EAAWiV,EACpB,CACO,SAAS0E,UAAUK,GACtB,IACIF,EADAD,GAAY,EAEhB,MAAME,EAAI,IAAI5c,SAAQ,CAACC,EAASC,KAC5B2c,GAAS,CAAC/Y,EAAKrD,KACPqD,EACA5D,EAAO4D,IAEP4Y,GAAY,EACZC,EAAUlc,EACVR,EAAQ,CAAEQ,WACd,GAEF,IAEN,MAAO,CACHic,YACAC,UACAC,IAER,CACO,SAASP,SAASQ,GACrB,IAAIpc,EACAqD,EAKJ,GAJA+Y,GAAS,CAACtc,EAAGmT,KACT5P,EAAMvD,EACNE,EAASiT,CAAC,IAEV5P,EACA,MAAMA,EACV,MAAO,CAAErD,SACb,CACO2Z,eAAeqC,UAAUvD,EAAO9E,EAAMsF,EAAOxC,EAAS4F,EAAcd,GACvE,IAAItb,EAAOoc,EACX,MAAMF,EAAI,IAAI5c,SAASC,IACnBS,EAAOA,CAACH,EAAGmT,KACPoJ,EAAavc,EAAGmT,GAChBzT,GAAS,CACZ,IAEL,GAAI8c,iBAAiB7D,EAAO9E,EAAMsF,EAAOxC,EAASxW,GAAM,EAAMsb,SAEzD,GAAIxH,OAAOJ,GAAO,CACnB,IACIpP,EADAC,EAAKmP,EAAK,GAEd,IACI,IAAImI,EACJvX,GAA0G,KAAnGuX,EAAKC,WAAWF,GAAMG,UAAUvD,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAC9I,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAwBIyc,EAxBA9X,EAAIF,EACR,IACIE,EAAIF,aAAeiS,KAAOjS,EAAIb,IAAI+S,GAAWlS,CAChD,CACD,MAAOzE,GAEH,YADAG,EAAKH,EAET,CACA,GAAW,KAAP0E,GAAgD,KAAPA,EAAuC,CAChF,GAAIC,QAEA,YADAxE,OAAKmC,EAAW4U,UAGpBxS,EAAY,KAAPA,EAAwC,EAAwB,CACzE,CACA,GAAIC,IAAMuS,SAAU,CAChB,GAAW,IAAPxS,GAAuC,IAAPA,EAEhC,YADAvE,OAAKmC,EAAWqC,GAIhBA,OAAIrC,CAEZ,CAEA,IACI,IAAI0Z,EACJS,GAA2G,KAAnGT,EAAKC,WAAWF,GAAMG,UAAUvD,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAC/I,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAAI4E,EAAI6X,EACR,IACI7X,EAAI6X,aAAgB/F,KAAO+F,EAAK7Y,IAAI+S,GAAW8F,CAClD,CACD,MAAOzc,GAEH,YADAG,EAAKH,EAET,CAIA,GAHI4E,IAAMsS,WACNtS,OAAItC,GAEJ+Y,IAAIzP,IAAIlH,GACR,IACI2W,IAAIzX,IAAIc,EAAR2W,CAAYa,UAAW/b,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,EACxE,CACD,MAAOlY,GACHpD,EAAKoD,EACT,MAGApD,EAAK,IAAIqC,YAAY,qBAAuBkC,GAEpD,OACM2X,CACV,CACO,SAASX,SAAS/C,EAAO9E,EAAMsF,EAAOxC,EAASxW,EAAMsb,GACxD,GAAIe,iBAAiB7D,EAAO9E,EAAMsF,EAAOxC,EAASxW,GAAM,EAAOsb,SAE1D,GAAIxH,OAAOJ,GAAO,CACnB,IACIpP,EADAC,EAAKmP,EAAK,GAEd,IACIpP,EAAMqX,UAAUC,GAAML,SAAS/C,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,KAAiBvb,MACtF,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAwBIyc,EAxBA9X,EAAIF,EACR,IACIE,EAAIF,aAAeiS,KAAOjS,EAAIb,IAAI+S,GAAWlS,CAChD,CACD,MAAOzE,GAEH,YADAG,EAAKH,EAET,CACA,GAAW,KAAP0E,GAAgD,KAAPA,EAAuC,CAChF,GAAIC,QAEA,YADAxE,OAAKmC,EAAW4U,UAGpBxS,EAAY,KAAPA,EAAwC,EAAwB,CACzE,CACA,GAAIC,IAAMuS,SAAU,CAChB,GAAW,IAAPxS,GAAuC,IAAPA,EAEhC,YADAvE,OAAKmC,EAAWqC,GAIhBA,OAAIrC,CAEZ,CAEA,IACIma,EAAOX,UAAUC,GAAML,SAAS/C,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,KAAiBvb,MACvF,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAAI4E,EAAI6X,EACR,IACI7X,EAAI6X,aAAgB/F,KAAO+F,EAAK7Y,IAAI+S,GAAW8F,CAClD,CACD,MAAOzc,GAEH,YADAG,EAAKH,EAET,CAIA,GAHI4E,IAAMsS,WACNtS,OAAItC,GAEJ+Y,IAAIzP,IAAIlH,GACR,IACI2W,IAAIzX,IAAIc,EAAR2W,CAAYK,SAAUvb,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,EACvE,CACD,MAAOlY,GACHpD,EAAKoD,EACT,MAGApD,EAAK,IAAIqC,YAAY,qBAAuBkC,GAEpD,CACJ,CAj1BA4W,OAAO,GAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAClE,GAAU,OAANxU,EACA,MAAM,IAAI0T,UAAU,uBAAuBzT,aAE/C,MAAMmI,SAAcpI,EACpB,GAAa,cAAToI,QAAgCzK,IAARmC,EAAmB,CAC3C,IAAIwC,EAAOkS,EAAMvV,IAAIgB,GACrB,GAAIqC,EAAK0P,UAAYA,EAAQvJ,IAAIsP,cAAe,CACxC/F,EAAQvJ,IAAIiM,QAAQsD,OACpBhG,EAAQvJ,IAAIkJ,YAAYsG,cAAcnD,IAAI7U,GAE9C,MAAMyP,EAAMsC,EAAQvJ,IAAIyP,iBAAiBjR,IAAI+K,EAAQvJ,IAAIsP,cAAc9X,IAAM+R,EAAQmG,MAAMlZ,IAAI+S,EAAQvJ,IAAIsP,cAAc9X,SAAMtC,EAC/H,GAAI+R,EAEA,YADAlU,OAAKmC,EAAW+R,EAGxB,CACA,OAAIpN,EAAK0P,SAAW1P,EAAK0P,QAAQ/R,KAAOmY,gBACpC5c,OAAKmC,EAAWqU,EAAQvJ,IAAI4P,YAAYpZ,IAAI,cAGhDzD,OAAKmC,EAAW2E,EAEpB,CACK,QAAU3E,IAANqC,EACL,MAAM,IAAI2T,aAAa,wBAA0B1T,EAAI,kBAEzD,GAAa,WAATmI,EACa,WAATA,EACApI,EAAI,IAAIvC,OAAOuC,GAED,WAAToI,EACLpI,EAAI,IAAIhC,OAAOgC,GAED,YAAToI,IACLpI,EAAI,IAAIsY,QAAQtY,SAGnB,QAAgC,IAArBA,EAAEwT,eAEd,YADAhY,OAAKmC,EAAW,IAAIoU,UAAKpU,EAAWsC,IAGxC,MAAMsY,EAAsB,aAATnQ,EACnB,IAAIoQ,EAAkBD,KAAgBvY,EAAEwT,eAAevT,IAAmB,iBAANA,GACpE,GAAI+R,EAAQvJ,IAAIiM,QAAQsD,OAASQ,GACZ,iBAANvY,EAAgB,CACvB,IAAIwY,EAAO9J,OAAO+J,eAAe1Y,GACjC,GACQyY,EAAKjF,eAAevT,KACf+R,EAAQvJ,IAAIkJ,YAAY6G,gBAAgBC,EAAKpY,YAAYoU,QAC1DzC,EAAQvJ,IAAIkJ,YAAY6G,gBAAgBC,EAAKpY,YAAYoU,MAAQ,IAAIhC,KAEzET,EAAQvJ,IAAIkJ,YAAY6G,gBAAgBC,EAAKpY,YAAYoU,MAAMK,IAAI7U,UAElEwY,EAAO9J,OAAO+J,eAAeD,GAC1C,CAEJ,GAAID,EACA,GAAID,GACA,IAAK,CAAC,OAAQ,SAAU,eAAe3R,SAAS3G,IAAMD,EAAEwT,eAAevT,GAAI,CACvE,MAAM0Y,EAAY3G,EAAQvJ,IAAIuM,mBAAmB/V,IAAIe,EAAEiV,WACjD5V,EAAU2S,EAAQvJ,IAAIiM,QAAQkE,sBAAsB3Z,IAAIe,GAC9D,GAAIX,EAEA,YADA7D,OAAKmC,EAAW,IAAIoU,KAAK1S,EAAQW,GAAG,GAAOC,IAG/C,IAAI0Y,GAAeA,EAAUE,OAAQF,EAAU1R,IAAIhH,GAG/C,MAAM,IAAI0T,aAAa,mDAAmD3T,EAAEyU,QAAQxU,IAE5F,OAEC,GAAU,gBAANA,EAAqB,CAC1B,IAAIwY,EAAOzY,EACX,KAAOyY,EAAO9J,OAAO+J,eAAeD,IAChC,GAAIA,EAAKjF,eAAevT,GAAI,CACxB,MAAM0Y,EAAY3G,EAAQvJ,IAAIuM,mBAAmB/V,IAAIwZ,GAC/CpZ,EAAU2S,EAAQvJ,IAAIiM,QAAQkE,sBAAsB3Z,IAAIwZ,EAAKK,YACnE,GAAIzZ,EAEA,YADA7D,OAAKmC,EAAW,IAAIoU,KAAK1S,EAAQW,GAAG,GAAQC,IAGhD,GAAI0Y,KAAeA,EAAUE,MAAQF,EAAU1R,IAAIhH,IAC/C,MAEJ,MAAM,IAAI0T,aAAa,4CAA4C8E,EAAKpY,YAAYoU,QAAQxU,IAChG,CAGR,CAEJ,GAAI+R,EAAQmG,MAAMlR,IAAIjH,EAAEC,IAEpB,YADAzE,OAAKmC,EAAWqU,EAAQmG,MAAMlZ,IAAIe,EAAEC,KAGxC,GAAID,EAAEC,KAAOmY,WAET,YADA5c,OAAKmC,EAAWqU,EAAQvJ,IAAI4P,YAAYpZ,IAAI,SAGhD,IAAI8Z,EAAIjZ,EAAIoS,UAAaqG,IAAejE,mBAAmBrN,IAAIjH,IAAOgS,EAAQvJ,IAAIyP,iBAAiBjR,IAAIjH,GACvGxE,OAAKmC,EAAW,IAAIoU,KAAK/R,EAAGC,GAAG,EAAO8Y,GAAG,IAE7CpC,OAAO,GAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAClE,GAAIxC,EAAQvJ,IAAIiM,QAAQsE,oBACpB,MAAM,IAAIrF,aAAa,wCAC3B,GAAiB,mBAAN3T,EACP,MAAM,IAAI0T,UAAU,GAAuB,iBAAb5T,EAAIwC,KAAoB,SAAWxC,EAAIwC,0BAEzE,MAAM2W,EAAOhZ,EAAE8I,KAAKwG,GACZA,aAAgB+G,YACT,IAAI/G,EAAKA,MAGT,CAACA,KAEb2J,OAAOnQ,KAAKwG,GAASqH,YAAYrH,EAAMyC,KAC1C,GAAmB,mBAARlS,EAAX,CAIA,GAAIA,EAAIkS,QAAQlS,EAAIwC,QAAU6W,KAAKC,WAAapH,EAAQK,iBAAiBwG,KAAM,CAC3E,MAAM9R,EAAQ,IAAI0L,IACZ4G,EAAWC,IACb,GAAKA,GAAoB,iBAANA,IAAmBvS,EAAME,IAAIqS,GAAhD,CAEAvS,EAAM+N,IAAIwE,GACV,IAAK,IAAIC,KAAKD,EACVtH,EAAQK,iBAAiBlK,SAASmK,GAAOA,EAAGgH,EAAGC,KAC/CF,EAAQC,EAAEC,GAJV,CAKJ,EAEJF,EAAQJ,EAAK,GACjB,CACA,GAAInZ,EAAIkS,mBAAmBxC,OAASuG,YAAY9O,IAAInH,EAAIkS,QAAQlS,EAAIwC,SAAW0P,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAYA,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAW,CAChL,IAAIwH,EACAC,GAAU,EACd,GAAiB,SAAb3Z,EAAIwC,KACJkX,EAAS,CACLpR,KAAM,OACNsR,MAAOT,GAEXQ,IAAYR,EAAKrb,YAEhB,GAAiB,QAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,MACNuR,QAAS7Z,EAAIkS,QAAQtT,OAAO,IAEhC+a,IAAYD,EAAOG,QAAQ/b,YAE1B,GAAiB,UAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,QACNuR,QAAS7Z,EAAIkS,QAAQtT,MAAM,EAAG,IAElC+a,IAAYD,EAAOG,QAAQ/b,YAE1B,GAAiB,YAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,UACNsR,MAAOT,GAEXQ,IAAYR,EAAKrb,YAEhB,GAAiB,WAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,SACNwR,WAAYX,EAAK,GACjBY,iBAAyBlc,IAAZsb,EAAK,GAAmBnZ,EAAIkS,QAAQpU,OAASqb,EAAK,GAC/DS,MAAOT,EAAKva,MAAM,GAClBib,QAAS7Z,EAAIkS,QAAQtT,MAAMua,EAAK,QAAgBtb,IAAZsb,EAAK,QAAmBtb,EAAYsb,EAAK,GAAKA,EAAK,KAE3FQ,IAAYD,EAAOE,MAAM9b,UAAY4b,EAAOG,QAAQ/b,YAEnD,GAAiB,YAAbkC,EAAIwC,MAAmC,SAAbxC,EAAIwC,KACnCkX,EAAS,CAAEpR,KAAMtI,EAAIwC,MACrBmX,IAAY3Z,EAAIkS,QAAQpU,YAEvB,GAAiB,eAAbkC,EAAIwC,KAAuB,CAChC,IAAI8C,OAAkBzH,IAAZsb,EAAK,GAAmBnZ,EAAIkS,QAAQpU,OAASqb,EAAK,GAAK9O,KAAK2P,IAAIha,EAAIkS,QAAQpU,OAAQqb,EAAK,GAAKA,EAAK,IAC7GO,EAAS,CACLpR,KAAM,aACNwR,WAAYX,EAAK,GACjBc,SAAUd,EAAK,GAAK7T,EACpBsU,MAAO5Z,EAAIkS,QAAQtT,MAAMua,EAAK,GAAIA,EAAK,GAAK7T,GAC5CuU,QAAS7Z,EAAIkS,QAAQtT,MAAMua,EAAK,GAAIA,EAAK,GAAK7T,IAElDqU,IAAYD,EAAOE,MAAM9b,UAAY4b,EAAOG,QAAQ/b,MACxD,CACI6b,IACAzH,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAGkH,KACjExH,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAGkH,KAE/E,CACA1Z,EAAIb,IAAI+S,GACRxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,SAAS2W,GA5EzC,MAFIzd,OAAKmC,EAAWmC,KAAOmZ,GA8EoB,IAEnDtC,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC3E,IAAIjM,EAAM,CAAA,EACV,IAAK,IAAIgH,KAAQtP,EACTsP,EAAKtG,eAAeoN,aACpB9N,EAAM,IAAKA,KAAQgH,EAAKtG,IAAIsG,MAG5BhH,EAAIgH,EAAKtG,KAAOsG,EAAKkE,IAG7BjY,OAAKmC,EAAW4K,EAAI,IAExBoO,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAW,IAAIyY,OAAOpW,EAAGC,MAC3F0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAS1EhZ,OAAKmC,EARSsC,EAAE8I,KAAKwG,GACbA,aAAgB+G,YACT,IAAI/G,EAAKA,MAGT,CAACA,KAEb2J,OAAOnQ,KAAKwG,GAASqH,YAAYrH,EAAMyC,KACpB,IAE1B2E,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWsC,KAC7E0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,KAC1D,OAAQA,GACJ,IAAK,OAAQ,OAAOzE,OAAKmC,GAAW,GACpC,IAAK,QAAS,OAAOnC,OAAKmC,GAAW,GACrC,IAAK,OAAQ,OAAOnC,OAAKmC,EAAW,MACpC,IAAK,YAAa,OAAOnC,OAAKmC,OAAWA,GACzC,IAAK,MAAO,OAAOnC,OAAKmC,EAAWP,KACnC,IAAK,WAAY,OAAO5B,OAAKmC,EAAWyF,KAE5C5H,EAAK,IAAI4E,MAAM,mBAAqBH,GAAG,IAE3C0W,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWF,OAAOwC,MACpF0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqc,OAAO/Z,MACrF0W,OAAO,GAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,IAAYxW,OAAKmC,EAAWqU,EAAQ7L,UAAUkL,QAAQlU,SAAS8C,OACnI0W,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAChE,MAAMiI,EAAMjI,EAAQ7L,UAAUoL,QAAQpU,SAAS8C,IAC/C,IAAK+R,EAAQvJ,IAAIyP,iBAAiBjR,IAAIiT,QAClC,MAAM,IAAIvG,aAAa,uBAGvBnY,OAAKmC,EAAW,IAAIuc,OAAOD,EAAIrX,MAAOqX,EAAI5J,OAC9C,IAEJsG,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC3E,IAAIjF,EAAOyC,EAAQ7L,UAAUiL,SAASjU,SAAS8C,IAC/C,OAASwU,EAAMhD,GAAMlC,EACrB,IACIvF,EADAnF,EAAQ,GAERsV,EAAU,GACd,KAAOnQ,EAAIyM,aAAa1R,KAAK0P,IACpBzK,EAAE,KACHnF,EAAM8C,KAAK8J,EAAGtU,SAAS6M,EAAE,GAAI,MAC7BmQ,EAAQxS,KAAKqC,EAAE,KAGvBjF,EAAKiP,EAAOnP,EAAO2P,EAAOxC,GAAS,CAACpT,EAAKwb,KACrC,MAAMC,EAAQ,CAAA,EACd,GAAIzb,EACApD,EAAKoD,OADT,CAIA,IAAK,IAAIkG,KAAKqV,EAAS,CACnB,MAAMG,EAAMH,EAAQrV,GACpBuV,EAAMC,GAAOF,EAAUtV,EAC3B,CACAtJ,OAAKmC,EAAW8W,EAAKpV,QAAQ,0BAA0B,CAACnC,EAAOqd,EAAIC,EAAGF,KAClE,GAAIE,EACA,OAAOtd,EAEX,OAAQqd,GAAU,IAAM,GAAG3D,YADjByD,EAAMC,GAC4BtI,IAAU,IAT1D,CAUG,GACL,IAEN2E,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC1EhZ,OAAKmC,EAAW,IAAI2Y,YAAYrW,GAAG,IAEvC0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC3EhZ,OAAKmC,EAAW,IAAI0Y,aAAapW,GAAG,IAExC0W,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KAC5E0W,OAAO,IAA2B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KAChF0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,IAAamC,EAAIkS,QAAQlS,EAAIwC,MAAM,IAE5CqU,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACpE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAQ,IAE5CqU,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,IAAamC,EAAIkS,QAAQlS,EAAIwC,MAAM,IAE5CqU,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACpE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAQ,IAE5CqU,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAC3D0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,MAAQrC,EAAE,IAE9C0W,OAAO,IAA6B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAC/D0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACnE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAClE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACpE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACjE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACnE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAClE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACjE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAAoC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACtE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAA4C,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAC9E0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACtF0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACvF0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC5F0W,OAAO,IAAoC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC7F0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAClF0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,IAAMC,KACzF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KACrF0W,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,IAAMC,KAC5F0W,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAChF0W,OAAO,IAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC/E0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KAClF0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACjF0W,OAAO,IAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KAChF0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACjF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KACjF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KACjF0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KAClF0W,OAAO,IAA6B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACrF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACpF0W,OAAO,IAA2B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACnF0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KACzF0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC1F0W,OAAO,IAAyC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,IAAMC,KACnG0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACrEzP,EAAKiP,EAAO/T,EAAGuU,EAAOxC,GAAS,CAAC3W,EAAGiH,KAC/B9G,OAAKmC,SAAkBiZ,YAAYtU,EAAM0P,GAAS,GACpD,IAEN2E,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,aAAaC,KAC/F0W,OAAO,IAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,KAAKC,KAC/E0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,UACvDna,IAAjBma,EAAK9F,SAIT0D,YAAYoC,EAAM9F,EAAS,UACvB8F,EAAK3F,WACL3W,OAAKmC,GAAW,GAGpBnC,OAAKmC,SAAkBma,EAAK9F,QAAQ8F,EAAKxV,QARrC9G,OAAKmC,GAAW,EAQ2B,IAEnDgZ,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,IAAYxW,OAAKmC,EAAWsC,KAC3F0W,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,KACzEtc,OAAKmC,EAAW6W,EAAMZ,QAAQ5T,EAAG0S,QAAQS,IAAKlT,GAAG,IAErD0W,OAAO,GAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,KACxEtc,OAAKmC,EAAW6W,EAAMZ,QAAQ5T,EAAG0S,QAAQQ,IAAKjT,EAAG6X,GAAQA,EAAK5F,UAAU,IAE5EyE,OAAO,GAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,KAC1Etc,OAAKmC,EAAW6W,EAAMZ,QAAQ5T,EAAG0S,QAAQO,MAAOhT,GAAG,IAEvD0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC5ExU,EAAI,IAAIA,IACc,iBAAXF,EAAI,IAAmBA,EAAI,aAAckF,cAChDlF,EAAI,GAAKG,EAAIqM,gBAAgB,IAAItH,WAAWlF,EAAI,IAAKkS,EAAQ7L,YAE7DnG,EAAE0N,QACFlS,OAAKmC,EAAWoX,oBAAoB/U,EAAGC,EAAG+T,EAAOhC,EAASwC,IAG1DhZ,OAAKmC,EAAWwW,eAAenU,EAAGC,EAAG+T,EAAOhC,EAASwC,GACzD,IAEJmC,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,MACjD,iBAAX1U,EAAI,IAAmBA,EAAI,aAAckF,cAChDlF,EAAI,GAAKG,EAAIqM,gBAAgB,IAAItH,WAAWlF,EAAI,IAAKkS,EAAQ7L,YAEjE,IAEIiG,EAFAL,EAAU/L,EAAE0N,QACZ+G,EAAOzU,EAAE0N,QAGTtB,EADY,KAAZL,EACOgJ,oBAAoB/U,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAGjDN,eAAenU,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAEnDA,GACAD,EAAMZ,QAAQa,EAAM/B,QAAQS,IAAK/G,GAErC5Q,OAAKmC,EAAWyO,EAAK,IAEzBuK,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,MACvD,iBAAX1U,EAAI,IAAmBA,EAAI,aAAckF,cAChDlF,EAAI,GAAKG,EAAIqM,gBAAgB,IAAItH,WAAWlF,EAAI,IAAKkS,EAAQ7L,YAEjE,IAKIiG,EALAL,EAAU/L,EAAE0N,QACZ+G,EAAOzU,EAAE0N,QACT+G,IACAD,EAAQ,IAAI3B,MAAM2B,EAAO,CAAE,IAI3BpI,EADY,KAAZL,EACOgJ,oBAAoB/U,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAGjDN,eAAenU,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAEnDA,GACAD,EAAMZ,QAAQa,EAAM/B,QAAQQ,IAAK9G,GAErC5Q,OAAKmC,EAAWyO,EAAK,IAEzBuK,OAAO,IAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACnE,MAAO3H,EAAYF,EAAeH,EAAaE,EAAWvR,EAAMqP,EAAWoC,GAAc5M,EACzF,IAAIya,GAAO,EACX,MAAMC,EAAY,IAAI7H,MAAM2B,EAAO,CAAE,GACrC,IAAImG,EAAe,CACfC,WAASjd,GAEb,MAAMkd,EAAe,IAAIhI,MAAM6H,EAAWC,GAC1C,GAAI5V,IAASwS,UACT,WACI,IAAIF,EAMJ,IALAA,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOtH,EAAWgO,EAAW1I,EAASoF,KACjEuD,EAAoB,OAA2F,KAAtFtD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOxH,EAAakO,EAAW1I,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,OAChJ8b,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOrH,EAAekO,EAAc7I,EAASoF,KACpEvK,IACA4N,GAA+F,KAAvFpD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,QAC7Hkf,GAAM,CACT,IAAIK,EAAgB,CAAA,EACpBzD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOpH,EAAY,IAAIiG,MAAMgI,EAAcC,GAAgB9I,EAASoF,MAC9E,IAAjBC,EAAGG,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,OAClD,IAAIgN,QAAY4M,iBAAiBnB,EAAOhC,EAAS/R,EAAG,CAAC,IAAI4S,MAAM6H,EAAWI,IAAiB,QAC3F,GAAIvS,aAAemJ,YAAcnJ,EAAIqJ,SAEjC,YADApW,OAAKmC,EAAW4K,GAGpB,GAAIA,aAAemJ,YAAcnJ,EAAIsJ,UACjC,MAEJwF,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAO7Y,EAAM0f,EAAc7I,EAASoF,KAC/DqD,GAA+F,KAAvFpD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MACpI,CACAC,GACH,EAvBD,GAuBK0b,MAAM1b,OAEV,CAMD,IALA2b,UAAUC,GAAMrS,EAAKiP,EAAOtH,EAAWgO,EAAW1I,EAASoF,KAC3DuD,EAAoB,MAAIxD,UAAUC,GAAMrS,EAAKiP,EAAOxH,EAAakO,EAAW1I,EAASoF,KAAI7b,OACzF4b,UAAUC,GAAMrS,EAAKiP,EAAOrH,EAAekO,EAAc7I,EAASoF,KAC9DvK,IACA4N,EAAQtD,UAAUC,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,KAAK7b,QACxEkf,GAAM,CACT,IAAIK,EAAgB,CAAA,EACpB3D,UAAUC,GAAMrS,EAAKiP,EAAOpH,EAAY,IAAIiG,MAAMgI,EAAcC,GAAgB9I,EAASoF,KACzF,IAAI7O,EAAMqM,YAAYZ,EAAOhC,EAAS/R,EAAG,CAAC,IAAI4S,MAAM6H,EAAWI,IAAiB,QAChF,GAAIvS,aAAemJ,YAAcnJ,EAAIqJ,SAEjC,YADApW,OAAKmC,EAAW4K,GAGpB,GAAIA,aAAemJ,YAAcnJ,EAAIsJ,UACjC,MAEJsF,UAAUC,GAAMrS,EAAKiP,EAAO7Y,EAAM0f,EAAc7I,EAASoF,KACzDqD,EAAQtD,UAAUC,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,KAAK7b,MAC/E,CACAC,GACJ,KAEJmb,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,KACtF,GAAwB,WAAnBA,GAAqC,aAAN9W,IAAsB8W,EACtD,MAAM,IAAInD,aAAa,WAAa3T,EAAI,cAE5CxE,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,iBAAahU,GAAW,EAAa,UAANqC,EAAqB,aAANA,GAAkB,IAE/G2W,OAAO,IAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,KAC9E/R,EAAKiP,EAAO4C,YAAY5W,EAAGgS,GAAW/R,EAAEuW,EAAIvW,EAAE+J,EAAGwK,EAAOxC,EAASxW,EAAK,IAE1Emb,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACvEzP,EAAKiP,EAAO4C,YAAY5W,EAAGgS,GAAW/R,EAAEuW,EAAIvW,EAAE+J,EAAGwK,EAAOxC,EAASxW,EAAK,IAE1Emb,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAW,IAAI4Y,GAAGvW,EAAGC,MAC9F0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAW,IAAI4Y,GAAGvW,EAAGC,MACxF0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACrEzP,EAAKiP,EAAOhU,EAAGwU,EAAOxC,GAAS,CAACpT,EAAKmc,KACjC,GAAInc,EACApD,EAAKoD,QAIT,GADAmc,EAASnE,YAAYmE,EAAQ/I,GACzBjN,IAASgS,SAAU,CACnB,IAAIxO,EACAyS,GAAS,EACb,IAAK,IAAIC,KAAYhb,EACjB,GAAI+a,IAAWA,GAAUC,EAAS,IAAMF,IAAWnE,YAAaO,UAAUC,GAAMrS,EAAKiP,EAAOiH,EAAS,GAAIzG,EAAOxC,EAASoF,KAAK7b,OAAQyW,IAAW,CAC7I,IAAKiJ,EAAS,GACV,SAEJ,GADA1S,EAAMqM,YAAYZ,EAAOhC,EAASiJ,EAAS,GAAI,CAACzG,GAAQ,UACpDjM,EAAIsJ,UACJ,MACJ,GAAItJ,EAAIqJ,SAEJ,YADApW,OAAKmC,EAAW4K,GAGpB,IAAK0S,EAAS,GACV,KAER,CAEJzf,GACJ,KAEI,WACI,IAAI+M,EACAyS,GAAS,EACb,IAAK,IAAIC,KAAYhb,EAAG,CACpB,IAAIoX,EACJ,GAAI2D,IAAWA,GAAUC,EAAS,IAAMF,IAAWnE,aAA+F,KAAlFS,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOiH,EAAS,GAAIzG,EAAOxC,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,OAAQyW,IAAW,CAClM,IAAKiJ,EAAS,GACV,SAEJ,GADA1S,QAAY4M,iBAAiBnB,EAAOhC,EAASiJ,EAAS,GAAI,CAACzG,GAAQ,UAC/DjM,EAAIsJ,UACJ,MACJ,GAAItJ,EAAIqJ,SAEJ,YADApW,OAAKmC,EAAW4K,GAGpB,IAAK0S,EAAS,GACV,KAER,CACJ,CACAzf,GACH,EArBD,GAqBK0b,MAAM1b,EACf,GACF,IAENmb,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,KAC/E,MAAO9I,EAAWF,EAAWD,GAAe5N,EAC5Cib,oBAAoBnW,GAAM,CAACnG,EAAK2J,KAC5B2S,oBAAoBnW,GAAO1J,IACnBA,EACAG,EAAKH,GACAuD,EAILsc,oBAAoBnW,EAAMvJ,EAAMwY,EAAOhC,EAASlE,EAAW,CAAC,IAAI+E,MAAM2B,IAASsC,GAG/Etb,OAAKmC,EAAW4K,EACpB,GACDyL,EAAOhC,EAASnE,EAAa,CAAC,IAAIgF,MAAM2B,EAAO,KAAK,GACxDR,EAAOhC,EAAShS,EAAG,CAAC,IAAI6S,MAAM2B,IAASsC,EAAe,IAE7DH,OAAO,IAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,KAAQxE,GAAM,IACjEmb,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACzD,IAAKA,EAAQvJ,IAAIyP,iBAAiBjR,IAAIjH,KAAOsU,mBAAmBrN,IAAIjH,GAChE,MAAM,IAAI2T,aAAa,oCAAoC3T,EAAEK,YAAYoU,QAE7EjZ,OAAKmC,EAAW,IAAIqC,KAAKC,GAAG,IAEhC0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,KAAQzE,EAAKyE,EAAE,IACtE0W,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,IAAMxE,OAAKmC,EAAWqC,EAAEsR,SACjFqF,OAAO,GAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,IAAMxE,MAmPxD,MAAM2f,YAAc,IAAI1I,IAAI,CACxB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,KAEJ,SAASoF,iBAAiB7D,EAAO9E,EAAMsF,EAAOxC,EAASxW,EAAMuQ,EAAS+K,GAClE,MAAM/R,EAAOgH,EAAUwL,UAAYR,SACnC,KAAI/E,EAAQvJ,IAAIiM,QAAQ0G,gBAAkBpH,EAAMA,QACe,mBAAhDhC,EAAQvJ,IAAIiM,QAAQ2G,yBAA0CrJ,EAAQvJ,IAAIiM,QAAQ2G,wBAAwBrH,EAAOQ,EAAOxC,EAAS9C,GADhJ,CAUA,GAFA8E,EAAMA,QACNF,aAAeE,EACX9E,aAAgB6C,KAChB,IACIvW,OAAKmC,EAAWuR,EAAKjQ,IAAI+S,GAC5B,CACD,MAAOpT,GACHpD,EAAKoD,EACT,MAEC,GAAIsQ,IAASqD,SACd/W,SAEC,GAAIgU,MAAMC,QAAQP,KAAUI,OAAOJ,GACpB,IAAZA,EAAK,GACL1T,IAGAqb,SAAS7C,EAAOjP,EAAMmK,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,QAGrD,GAAKxH,OAAOJ,GAGZ,GAAgB,KAAZA,EAAK,GACV2H,SAAS7C,EAAOjP,EAAMmK,EAAK,GAAI1T,EAAMgZ,EAAOxC,EAAS8E,QAEpD,GAAgB,KAAZ5H,EAAK,GACLnD,EAGIiG,EAAQvJ,IAAIuM,oBAAoB/N,IAAInM,QAAQma,WACjDsC,UAAUvD,EAAO9E,EAAK,GAAIsF,EAAOxC,GAASkD,MAAO7Z,EAAGmT,KAChD,GAAInT,EACAG,EAAKH,QAEL,IACIG,OAAKmC,QAAiBiZ,YAAYpI,EAAGwD,GACxC,CACD,MAAOpT,GACHpD,EAAKoD,EACT,IACLkY,GAAgBI,MAAM1b,GAGzBA,EAAK,IAAImY,aAAa,iCAhBtBnY,EAAK,IAAImY,aAAa,8DAmBzB,KAAIwH,YAAYlU,IAAIiI,EAAK,IAS1B,OAAO,EARP,IACIwH,IAAIzX,IAAIiQ,EAAK,GAAbwH,CAAiB3R,EAAMvJ,EAAMwY,EAAO9E,EAAK,GAAIA,EAAK,GAAIA,EAAM8C,EAASwC,OAAO7W,EAAWmZ,EAC1F,CACD,MAAOlY,GACHpD,EAAKoD,EACT,CAIJ,MApCIpD,OAAKmC,EAAWuR,GAqCpB,OAAO,CA5DP,CAHQ1T,EAAK,IAAImY,aAAa,4BAgElC,CACO,SAASiB,YAAYZ,EAAOhC,EAASsJ,EAAeC,EAAS,GAAIzE,GACpE,OAAOK,UAAU3b,GAAS0f,oBAAoBnE,SAAUvb,EAAMwY,EAAOhC,EAASsJ,EAAeC,EAAQzE,KAAiBvb,MAC1H,CACO2Z,eAAeC,iBAAiBnB,EAAOhC,EAASsJ,EAAeC,EAAS,GAAIzE,GAC/E,IAAIO,EACJ,OAA6I,KAArIA,EAAKC,WAAW9b,GAAS0f,oBAAoB3D,UAAW/b,EAAMwY,EAAOhC,EAASsJ,EAAeC,EAAQzE,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAClL,CACA,SAAS2f,oBAAoBnW,EAAMvJ,EAAMwY,EAAOhC,EAASsJ,EAAeC,EAAS,GAAIzE,GACjF,IAAKwE,EAED,YADA9f,IAGJ,KAAM8f,aAAyB9L,OAC3B,MAAM,IAAI3R,YAAY,sBAE1B,IACI2d,EADAhH,EAAQxC,EAAQvJ,IAAI4P,YAExB,KAAOmD,EAAID,EAAO7N,SACG,iBAAN8N,IAGPhH,EADAgH,aAAa3I,MACL2I,EAGA,IAAI3I,MAAM2B,EAAOgH,EAAGA,aAAa3H,gBAAalW,EAAY,OAGtEqU,EAAQvJ,IAAIiM,QAAQsD,QAAUhG,EAAQvJ,IAAIkJ,cAC1CK,EAAQvJ,IAAIkJ,YAAc,CACtBsG,cAAe,IAAIxF,IACnB+F,gBAAiB,CAAC,IAGtBzT,IAASgS,SACT0E,qBAAqBjgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GAGjE4E,sBAAsBlgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GAAgBI,MAAM1b,EAEhG,CACA,SAASigB,qBAAqBjgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GACtE,KAAMwE,aAAyB9L,OAC3B,MAAM,IAAI3R,YAAY,sBAC1B,IAAIiH,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAIwW,EAAc1d,OAAQkH,IAAK,CACvC,IAAIyD,EACA3J,EACJ,MAAM+c,EAAUL,EAAcxW,GAC9B,IACIiS,SAAS/C,EAAO2H,EAASnH,EAAOxC,GAAS,CAAC3W,EAAGmT,KACzC5P,EAAMvD,EACNkN,EAAMiG,CAAC,GACRsI,EACN,CACD,MAAOzb,GACHuD,EAAMvD,CACV,CACA,GAAIuD,EAEA,YADApD,EAAKoD,GAGT,GAAI2J,aAAemJ,WAEf,YADAlW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOqM,IAA2B,IAAfA,EAAQ,GAE3B,YADAngB,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,GAGrE,CACA/M,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,iBAAahU,GAAW,GACvE,CACAuX,eAAewG,sBAAsBlgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GAC7E,KAAMwE,aAAyB9L,OAC3B,MAAM,IAAI3R,YAAY,sBAC1B,IAAIiH,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAIwW,EAAc1d,OAAQkH,IAAK,CACvC,IAAIyD,EACA3J,EACJ,MAAM+c,EAAUL,EAAcxW,GAC9B,UACUyS,UAAUvD,EAAO2H,EAASnH,EAAOxC,GAAS,CAAC3W,EAAGmT,KAChD5P,EAAMvD,EACNkN,EAAMiG,CAAC,GACRsI,EACN,CACD,MAAOzb,GACHuD,EAAMvD,CACV,CACA,GAAIuD,EAEA,YADApD,EAAKoD,GAGT,GAAI2J,aAAemJ,WAEf,YADAlW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOqM,IAA2B,IAAfA,EAAQ,GAE3B,YADAngB,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,GAGrE,CACA/M,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,iBAAahU,GAAW,GACvE,CCh0CO,MAAMie,cACTvb,WAAAA,CAAYiT,GACR,GAAIA,IAAY8E,WACZ,OAAOA,WACX,IAAK,IAAItT,KAAKwO,EACV7S,KAAKqE,GAAKwO,EAAQxO,EAE1B,EAEG,MAAM+W,YACTxb,WAAAA,CAAYoI,EAAKtC,EAAW+I,EAAMmD,EAAkBwD,EAAkBF,EAAqBG,EAAwBF,EAA2BuC,EAAOtD,GACjJpU,KAAKgI,IAAMA,EACXhI,KAAK0F,UAAYA,EACjB1F,KAAKyO,KAAOA,EACZzO,KAAK4R,iBAAmBA,EACxB5R,KAAKoV,iBAAmBA,EACxBpV,KAAKkV,oBAAsBA,EAC3BlV,KAAKqV,uBAAyBA,EAC9BrV,KAAKmV,0BAA4BA,EACjCnV,KAAK0X,MAAQA,EACb1X,KAAKoU,wBAA0BA,CACnC,EAEJ,SAASiH,aAAahc,EAAK2U,EAAMkD,EAAU3F,GACvC,MAAM+J,EAAQ/J,EAAQ6D,iBAAiB5W,IAAIa,IAAQ,IAAIf,IACvDiT,EAAQ6D,iBAAiB7O,IAAIlH,EAAKic,GAClC,MAAMC,EAAYD,EAAM9c,IAAIwV,IAAS,IAAIhC,IAGzC,IAAIwJ,EAMJ,OARAF,EAAM/U,IAAIyN,EAAMuH,GAChBA,EAAUlH,IAAI6C,GAEV7X,GAAOA,EAAI2U,IAA8B,iBAAd3U,EAAI2U,KAC/BwH,EAAYjK,EAAQ2D,oBAAoB1W,IAAIa,EAAI2U,KAAU,IAAIhC,IAC9DwJ,EAAUnH,IAAI6C,GACd3F,EAAQ2D,oBAAoB3O,IAAIlH,EAAI2U,GAAOwH,IAExC,CACHC,YAAaA,KACTF,EAAU7Z,OAAOwV,GACjBsE,GAAW9Z,OAAOwV,EAAS,EAGvC,CACe,MAAMwE,QACjB9b,WAAAA,CAAYqU,GACRjU,KAAKoV,iBAAmB,IAAI7P,QAC5BvF,KAAKkV,oBAAsB,IAAI3P,QAC/BvF,KAAK2b,iBAAmB,IAAIpW,QAC5B0O,EAAU/F,OAAOnN,OAAO,CACpBwW,OAAO,EACPgB,qBAAqB,EACrBrE,wBAAwB,EACxBrB,QAAS6I,QAAQE,aACjBrH,mBAAoBmH,QAAQG,gBAC5B1D,sBAAuB,IAAI7Z,KAC5B2V,GAAW,CAAA,GACd,MAAMqD,EAAgB,IAAI6D,cAAclH,EAAQpB,SAChD7S,KAAKuR,QAAU,CACXuK,QAAS9b,KACTyX,iBAAkB,IAAIzF,IAAI9D,OAAOC,OAAO8F,EAAQpB,UAChD0B,mBAAoB,IAAIjW,IAAI,IAAI2V,EAAQM,oBAAoBjM,KAAK/I,GAAM,CAACA,EAAE,GAAGiV,UAAWjV,EAAE,OAC1F0U,UACA2D,YAAa,IAAIxF,MAAM,KAAM6B,EAAQpB,QAASyE,GAC9CA,iBAEJtX,KAAKuR,QAAQgD,mBAAmBhO,IAAI2H,OAAO+J,eAAe,GAAG8D,OAAOzP,aAAc,IAAI0F,IAC1F,CACA,uBAAW4J,GACP,MAAO,CACHI,kBACAC,QAAS,CACLC,MAAOD,QAAQC,MACfC,MAAOF,QAAQE,MACfC,KAAMH,QAAQG,KACdC,IAAKJ,QAAQI,IACbC,MAAOL,QAAQK,MACfC,KAAMN,QAAQM,MAElBC,kBACAvf,YACAwf,sBACA/f,kBACAggB,oBACAC,sCACAC,oBACAC,sCACApW,cACAqW,kBACAjF,gBACA7a,cACAuc,cACAhc,cACA2Q,cACAa,YACAgN,cACApc,YACAod,oBACA3e,sBACAuT,8BACAvU,wBACA6V,oBACA+J,kBACAC,oBACAC,sBACAC,oCACAC,sBACAC,wBACAC,sBACAC,wBACAC,0BACAC,0BACAnf,QACA0T,QACAzM,gBACAuO,gBACAzZ,gBACAqjB,UACAhF,UACAhP,UACAiU,UACAlE,cAER,CACA,0BAAWoC,GACP,IAAI+B,EAAS,CACTzC,cACAa,SACAnE,QACA7a,OACAuc,OACAhc,OACAogB,KACAhe,MACAoP,MACAkO,UACAC,WACAC,kBACAC,WACAC,YACAC,WACAC,YACAC,aACAC,aACAnf,IACA0T,IACAzM,QACAuO,QACAzZ,QACA0hB,OACA4B,KACAlE,QAEAnR,EAAM,IAAIhK,IAkBd,OAjBAsf,EAAOlW,SAASmW,IACZvV,EAAI/B,IAAIsX,EAAO,IAAI7L,IAAM,IAE7B1J,EAAI/B,IAAI2H,OAAQ,IAAI8D,IAAI,CACpB,UACA,cACA,sBACA,KACA,OACA,iBACA,gBACA,uBACA,iBACA,WACA,UACA,YAEG1J,CACX,CACAwV,YAAAA,CAAa5G,EAAU3F,GAEnB,OADAA,EAAQK,iBAAiByC,IAAI6C,GACtB,CAAEuE,YAAaA,IAAMlK,EAAQK,iBAAiBlQ,OAAOwV,GAChE,CACAmE,YAAAA,CAAahc,EAAK2U,EAAMkD,EAAU3F,GAC9B,OAAO8J,aAAahc,EAAK2U,EAAMkD,EAAU3F,EAC7C,CACAwM,kBAAAA,CAAmB1e,EAAK2U,EAAMkD,GAC1B,OAAOmE,aAAahc,EAAK2U,EAAMkD,EAAUlX,KAC7C,CACA,YAAOuX,CAAMxb,EAAM+e,EAAS,IACxB,MAAMjI,EAAU,CAAA,EAChB,IAAK,IAAIxO,KAAK6J,OAAO8P,oBAAoBrG,YACrC9E,EAAQxO,GAAKsT,WAAWtT,GAE5B,MAAMyX,EAAU,IAAIJ,QAAQ,CACxB7I,UACA0E,OAAO,IAEX,OAAOuE,EAAQ3H,YAAY2H,EAAQmC,cAAcnC,EAAQvK,QAASR,QAAMhV,IAAQ+e,EACpF,CACA,YAAO/J,CAAMhV,GACT,OAAOgV,QAAMhV,EACjB,CACAkiB,aAAAA,CAAc1M,QAASsJ,eACnB,MAAMnD,MAAQ,IAAIpZ,IACZ4f,YAAc,IAAI9C,YAAY7J,QAASsJ,cAAcnV,UAAWmV,cAAcpM,KAAM,IAAIuD,IAAO,IAAIzM,QAAW,IAAIA,QAAWvF,KAAKoV,iBAAkBpV,KAAKkV,oBAAqBwC,OAAQjQ,GAAOzH,KAAK2b,iBAAiBpV,IAAIkB,EAAIyW,eAC3NvS,KAAO2H,gBAAgB4K,aAK7B,OAJAxG,MAAMnR,IAAIyV,SAAUrQ,MACpB+L,MAAMnR,IAAI4X,KAAMxJ,cAAchJ,OAC9B+L,MAAMnR,IAAIuO,WAAYF,oBAAoBjJ,OAC1C+L,MAAMnR,IAAIyO,YAAaD,qBAAqBpJ,OACrCuS,WACX,CACAE,UAAAA,CAAW3W,GACP,OAAOzH,KAAK2b,iBAAiBnd,IAAIiJ,EACrC,CACA0M,WAAAA,CAAY5C,EAASuJ,EAAS,IAC1B,OAAO3G,YAAY,CACfZ,MAAOgG,OAAO,IACfhI,EAASA,EAAQ9C,KAAMqM,EAC9B,CACApG,gBAAAA,CAAiBnD,EAASuJ,EAAS,IAC/B,OAAOpG,iBAAiB,CACpBnB,MAAOgG,OAAO,IACfhI,EAASA,EAAQ9C,KAAMqM,EAC9B,CACAuD,OAAAA,CAAQtiB,EAAMuiB,GAAW,GACrB,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAK3B,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAKmU,YAAY5C,EAAS,IAAIuJ,IAAShgB,OAAQ,CAGpF,CAEA0jB,YAAAA,CAAaziB,EAAMuiB,GAAW,GAC1B,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAK3B,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAK0U,iBAAiBnD,EAAS,IAAIuJ,IAAS9f,MAAMmX,GAAQA,EAAIrX,SAAS,CAG5G,CAEA2jB,iBAAAA,CAAkB1iB,EAAMuiB,GAAW,GAC/B,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAAU,GAKrC,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAKmU,YAAY5C,EAAS,IAAIuJ,IAAShgB,OAAQ,CAGpF,CACA4jB,sBAAAA,CAAuB3iB,EAAMuiB,GAAW,GACpC,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAAU,GAKrC,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAK0U,iBAAiBnD,EAAS,IAAIuJ,IAAS9f,MAAMmX,GAAQA,EAAIrX,SAAS,CAG5G,ECtMG,MAAM6jB,oBAAsB,CAAAC,KAAAC,IAGjB7kB,eAAA,EAAA,CAAA4kB,KAAAC,QAAA,GAAA,UAFhB9iB,EACA+iB,EAAa,IAEb,IACE,MACMxa,GADU,IAAIoX,SACC2C,QAAQtiB,GAC7B,aAAauI,EAAKwa,GAAYP,KAC/B,CAAC,MAAO3jB,GAER,CACH,IC7CMmkB,oBAAsB,CAAOhjB,EAAcwV,IAAgBvX,eAAA,OAAA,OAAA,GAAA,YAE/D,aADgB2kB,oBAAoB5iB,EAAMwV,EAE5C,UCfayN,SA4BX,WAAApf,EAAYqf,WAAEA,EAAU1N,QAAEA,EAAOuN,WAAEA,IACjC,MAAMI,SAAEA,EAAQC,SAAEA,EAAQC,GAAEA,EAAEzX,KAAEA,EAAI0X,WAAEA,GAAeJ,EACrDjf,KAAKsf,SAAW,OAChBtf,KAAKkf,SAAWA,EAChBlf,KAAKmf,SAAWA,EAChBnf,KAAKuf,OAASH,EACdpf,KAAK2H,KAAOA,EACZ3H,KAAKqf,WAAaA,EAElBrf,KAAKuR,QAAUA,EACfvR,KAAK8e,WAAaA,CACnB,CAYY,MAAAU,CACXC,uDAID,CASY,QAAAC,CAASlM,uDAGrB,CAKa,MAAAmM,CAAON,oDACnB,IAAKA,EAAY,OAAO,EAExB,MAAMO,oBAAEA,GAAwBP,EAChC,IAAKO,EAAqB,OAAO,EAEjC,IAGE,aAAab,oBACX,qCAC0Ba,8CAEzB1R,OAAAnN,OAAA,CAAA,EAEIf,KAAK8e,YAGb,CAAC,MAAO3C,GACP,OAAO,CACR,IACF,CAKa,WAAA0D,oDACZ,MAAMX,EAAsC,GACtCY,EAAmB,GACzB,IAAK,MAAMhR,KAAQ9O,KAAKkf,SAAU,CAChC,MAAMG,WAAEA,GAAevQ,EACvBgR,EAAY5Y,KAAKlH,KAAK2f,OAAON,GAC9B,CAQD,aANqBhlB,QAAQoP,IAAIqW,IAC1BpY,SAAQ,CAACoH,EAAM9D,KACpB,MAAM+U,EAAM/f,KAAKkf,SAASlU,GAC1B+U,EAAIjlB,OAASgU,EACboQ,EAAShY,KAAK6Y,EAAI,IAEbb,IACR,CAKY,OAAAc,CACXxM,oDAEA,MAAMyM,YAAEA,EAAWC,SAAEA,GAAa1M,EAC5B1L,QAAY9H,KAAKwf,OAAO,CAC5BD,OAAQvf,KAAKuf,OACbU,cACAC,aAEIC,EAASrY,EAAMA,EAAIqY,OAAS,UAElC,GAAIA,IAAW7jB,QAAYA,aAAC8jB,QAAS,CACnC,MAAMlB,QAAiBlf,KAAK6f,cACtBQ,EAASvY,EAAMA,EAAIuY,OAAS,CAAA,EAClC7M,EAAO7Y,KAAK,CACVwlB,OAAQ7jB,QAAYA,aAAC8jB,QACrBC,SACAd,OAAQvf,KAAKuf,OACbe,SAAUtgB,KAAK2H,KACf0X,WAAYrf,KAAKqf,WACjBY,cACAC,WACAhB,YAEH,CAED,MAAO,CACLiB,SACAE,OAAQvY,aAAA,EAAAA,EAAKuY,OACbJ,cACAC,WACAX,OAAQvf,KAAKuf,OACbe,SAAUtgB,KAAK2H,KACf0X,WAAYrf,KAAKqf,WACjBH,SAAU,MAEb,CAEY,MAAAqB,CAAO/M,oDAClB,MAAM0L,QAAiBlf,KAAK6f,oBACtB7f,KAAK0f,SAAS,CAClBO,YAAazM,EAAOyM,YACpBC,SAAU1M,EAAO0M,SACjBX,OAAQ/L,EAAO+L,OACfiB,KAAMhN,EAAOgN,OAGfhN,EAAO7Y,KAAK,CACVslB,YAAazM,EAAOyM,YACpBC,SAAU1M,EAAO0M,SACjBX,OAAQvf,KAAKuf,OACbe,SAAUtgB,KAAK2H,KACf0X,WAAYrf,KAAKqf,WACjBH,WACAiB,OAAQ7jB,QAAYA,aAAC8jB,YAGxB,EA9KMpB,SAAYyB,aAAG,WCVxB,MAAqBC,kBAAkB1B,SAAvC,WAAApf,uBACWI,KAAQsf,SAAG,OAErB,EADQoB,UAAYD,aAAG,YCFxB,MAAqBE,iBAAiB3B,SAAtC,WAAApf,uBACWI,KAAQsf,SAAG,MAErB,EADQqB,SAAYF,aAAG,WCKV,MAAOG,aAEnB,WAAAhhB,GACEI,KAAK6gB,QAAU,EAChB,CASD,EAAAC,CAAGC,EAAgB7J,EAAwB8J,GACzCD,EAASA,EAAOhc,OACX/E,KAAK6gB,QAAQE,KAChB/gB,KAAK6gB,QAAQE,GAAU,IAEzB/gB,KAAK6gB,QAAQE,GAAQ7Z,KAAK,CACxBgQ,WACA8J,OAAQA,GAEX,CAOD,GAAAC,CAAIF,EAAgB7J,GAKlB,GAJK6J,IAEH/gB,KAAK6gB,QAAU,IAEZ3J,EAGE,CAEL,MAAMgK,EAASlhB,KAAK6gB,QAAQE,IAAW,GACvC,IAAI5jB,OAAEA,GAAW+jB,EACjB,IAAK,IAAI7c,EAAI,EAAGA,EAAIlH,EAAQkH,IACtB6c,EAAO7c,GAAG6S,WAAaA,IACzBgK,EAAO3L,OAAOlR,EAAG,GACjBlH,IACAkH,KAGkB,IAAlB6c,EAAO/jB,eACF6C,KAAK6gB,QAAQE,EAEvB,aAfQ/gB,KAAK6gB,QAAQE,EAgBvB,CAOD,IAAAI,CAAKJ,EAAgBK,GAGJ,CAACC,IACd,IAAIlkB,OAAEA,GAAWkkB,EACjB,IAAK,IAAIhd,EAAI,EAAGA,EAAIlH,EAAQkH,IAAK,CAC/B,IAAKgd,EAAGhd,GAEN,SAEF,MAAM6S,SAAEA,EAAQ8J,KAAEA,GAASK,EAAGhd,GAC1B2c,IACFK,EAAG9L,OAAOlR,EAAG,GACK,IAAdgd,EAAGlkB,eACE6C,KAAK6gB,QAAQE,GAEtB5jB,IACAkH,KAEF6S,EAASjc,MAAM+E,KAAM,CAACohB,GACvB,GAEHE,CArBethB,KAAK6gB,QAAQE,IAAW,GAsBxC,CAMD,SAAAQ,GACE,OAAOvhB,KAAK6gB,OACb,EC9FH,MAAMW,YAAgC,iBAAXC,QAAuBA,OAAOA,SAAWA,OAE9DC,WAA+B,iBAAXC,QAAuBA,OAAOA,SAAWA,OAK7D/J,YACA4J,YACKC,OAGW,iBAATG,MAAqBA,KAAKA,OAASA,KACrCA,KAGLF,WACKC,OAGiB,iBAAfhK,WACFA,WAGF,CACLwG,KAAM,KAAe,GCzBzB,IAAKvG,YAAYiK,eAAgB,CAC/B,MAAMC,EAAU,CACdtB,KAAM,CAA6B,EAEnC,OAAAuB,CAAQvZ,EAAK/N,GACXqnB,EAAQtB,KAAKhY,GAAO/N,CACrB,EAEDunB,QAAQxZ,GACCsZ,EAAQtB,KAAKhY,GAGtB,UAAAyZ,CAAWzZ,UACFsZ,EAAQtB,KAAKhY,EACrB,EAED,KAAA0Z,GACEJ,EAAQtB,KAAO,EAChB,GAGH5I,YAAYiK,eAAiBC,CAC/B,CAEe,IAAAA,QAAA,CACb,OAAAC,CAAQvZ,EAAK/N,GACU,iBAAVA,IACTA,EAAQie,KAAKC,UAAUle,IAGzBmd,YAAYiK,eAAeE,QAAQvZ,EAAK/N,EACzC,EAED,OAAAunB,CAAQxZ,GACN,MAAM/N,EAAQmd,YAAYiK,eAAeG,QAAQxZ,GACjD,IACE,OAAOkQ,KAAK3H,MAAMtW,EACnB,CAAC,MAAO0hB,GACP,OAAO1hB,CACR,CACF,EAED,UAAAwnB,CAAWzZ,GACToP,YAAYiK,eAAeI,WAAWzZ,EACvC,EAED,KAAA0Z,GACEtK,YAAYiK,eAAeK,OAC5B,2rBCnDHhU,OAAOiU,eAAe9mB,MAAS,aAAc,CAC3CZ,OAAO,IAEM2nB,MAAAC,QAAGC,IAElB,IAAIC,UAAUC,yBAAuBC,YAErC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,MAAMsjB,UAAY,IAAIzF,WAAW,KAEjC,IAAI0F,QAAUD,UAAUxlB,OAExB,SAASmlB,MAOP,OANIM,QAAUD,UAAUxlB,OAAS,KAC/BolB,UAAQF,QAAQQ,eAAeF,WAE/BC,QAAU,GAGLD,UAAU1kB,MAAM2kB,QAASA,SAAW,GAC7C,2CCrBA1U,OAAOiU,eAAe9mB,MAAS,aAAc,CAC3CZ,OAAO,IAEM0H,MAAAkgB,aAAG,EAClB,IAAIS,WAAW,sHACfznB,MAAAA,QAAkBynB,WCLlB5U,OAAOiU,eAAe9mB,WAAS,aAAc,CAC3CZ,OAAO,IAEMsoB,WAAAV,aAAG,EAElB,IAAIW,OAASR,yBAAuBC,OAEpC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAAS4jB,SAASC,GAChB,MAAuB,iBAATA,GAAqBF,OAAOX,QAAQhb,KAAK6b,EACzD,CAEA,IAAIJ,WAAWG,SACf5nB,WAAAA,QAAkBynB,WCdlB5U,OAAOiU,eAAe9mB,YAAS,aAAc,CAC3CZ,OAAO,IAEM0oB,YAAAd,aAAG,EAElB,IAAIe,YAAYZ,yBAAuBC,YAEvC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAM9F,MAAMgkB,UAAY,GAElB,IAAK,IAAIhf,EAAI,EAAGA,EAAI,MAAOA,EACzBgf,UAAUnc,MAAM7C,EAAI,KAAOQ,SAAS,IAAIye,OAAO,IAGjD,SAAS3K,UAAU4K,EAAK/V,EAAS,GAG/B,MAAM0V,GAAQG,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,MAAMgW,cAM3f,KAAK,EAAIJ,YAAUf,SAASa,GAC1B,MAAMjQ,UAAU,+BAGlB,OAAOiQ,CACT,CAEA,IAAIJ,WAAWnK,UACftd,YAAAA,QAAkBynB,WCpClB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEMgpB,KAAApB,aAAG,EAElB,IAAIqB,OAAOlB,yBAAuBC,OAE9BkB,aAAanB,yBAAuBC,aAExC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAM9F,IAAIukB,QAEAC,UAGAC,WAAa,EACbC,WAAa,EAEjB,SAASC,GAAG/P,EAASgQ,EAAKzW,GACxB,IAAInJ,EAAI4f,GAAOzW,GAAU,EACzB,MAAMhO,EAAIykB,GAAO,IAAIlV,MAAM,IAE3B,IAAImV,GADJjQ,EAAUA,GAAW,IACFiQ,MAAQN,QACvBO,OAAgCjnB,IAArB+W,EAAQkQ,SAAyBlQ,EAAQkQ,SAAWN,UAInE,GAAY,MAARK,GAA4B,MAAZC,EAAkB,CACpC,MAAMC,EAAYnQ,EAAQoQ,SAAWpQ,EAAQqO,KAAOoB,OAAKrB,WAE7C,MAAR6B,IAEFA,EAAON,QAAU,CAAgB,EAAfQ,EAAU,GAAWA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAG3F,MAAZD,IAEFA,EAAWN,UAAiD,OAApCO,EAAU,IAAM,EAAIA,EAAU,IAEzD,CAMD,IAAIE,OAA0BpnB,IAAlB+W,EAAQqQ,MAAsBrQ,EAAQqQ,MAAQ3G,KAAK4G,MAG3DC,OAA0BtnB,IAAlB+W,EAAQuQ,MAAsBvQ,EAAQuQ,MAAQT,WAAa,EAEvE,MAAMU,EAAKH,EAAQR,YAAcU,EAAQT,YAAc,IAavD,GAXIU,EAAK,QAA0BvnB,IAArB+W,EAAQkQ,WACpBA,EAAWA,EAAW,EAAI,QAKvBM,EAAK,GAAKH,EAAQR,kBAAiC5mB,IAAlB+W,EAAQuQ,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAI7kB,MAAM,mDAGlBmkB,WAAaQ,EACbP,WAAaS,EACbX,UAAYM,EAEZG,GAAS,YAET,MAAMI,GAA4B,KAAb,UAARJ,GAA6BE,GAAS,WACnDhlB,EAAE6E,KAAOqgB,IAAO,GAAK,IACrBllB,EAAE6E,KAAOqgB,IAAO,GAAK,IACrBllB,EAAE6E,KAAOqgB,IAAO,EAAI,IACpBllB,EAAE6E,KAAY,IAALqgB,EAET,MAAMC,EAAML,EAAQ,WAAc,IAAQ,UAC1C9kB,EAAE6E,KAAOsgB,IAAQ,EAAI,IACrBnlB,EAAE6E,KAAa,IAANsgB,EAETnlB,EAAE6E,KAAOsgB,IAAQ,GAAK,GAAM,GAE5BnlB,EAAE6E,KAAOsgB,IAAQ,GAAK,IAEtBnlB,EAAE6E,KAAO8f,IAAa,EAAI,IAE1B3kB,EAAE6E,KAAkB,IAAX8f,EAET,IAAK,IAAIS,EAAI,EAAGA,EAAI,IAAKA,EACvBplB,EAAE6E,EAAIugB,GAAKV,EAAKU,GAGlB,OAAOX,IAAO,EAAIN,aAAWtB,SAAS7iB,EACxC,CAEA,IAAIsjB,WAAWkB,GACf3oB,KAAAA,QAAkBynB,yCCxGlB5U,OAAOiU,eAAe9mB,QAAS,aAAc,CAC3CZ,OAAO,IAEMoqB,QAAAxC,aAAG,EAElB,IAAIe,YAAYZ,yBAAuBC,YAEvC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAAS0R,MAAMmS,GACb,KAAK,EAAIE,YAAUf,SAASa,GAC1B,MAAMjQ,UAAU,gBAGlB,IAAI6R,EACJ,MAAMvB,EAAM,IAAIrG,WAAW,IAuB3B,OArBAqG,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,EAAG,GAAI,OAAS,GAClDslB,EAAI,GAAKuB,IAAM,GAAK,IACpBvB,EAAI,GAAKuB,IAAM,EAAI,IACnBvB,EAAI,GAAS,IAAJuB,EAETvB,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,EAAG,IAAK,OAAS,EACnDslB,EAAI,GAAS,IAAJuB,EAETvB,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,GAAI,IAAK,OAAS,EACpDslB,EAAI,GAAS,IAAJuB,EAETvB,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,GAAI,IAAK,OAAS,EACpDslB,EAAI,GAAS,IAAJuB,EAGTvB,EAAI,KAAOuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,GAAI,IAAK,KAAO,cAAgB,IACnEslB,EAAI,IAAMuB,EAAI,WAAc,IAC5BvB,EAAI,IAAMuB,IAAM,GAAK,IACrBvB,EAAI,IAAMuB,IAAM,GAAK,IACrBvB,EAAI,IAAMuB,IAAM,EAAI,IACpBvB,EAAI,IAAU,IAAJuB,EACHvB,CACT,CAEA,IAAIT,WAAW/R,MACf1V,QAAAA,QAAkBynB,WC1ClB5U,OAAOiU,eAAe9mB,IAAS,aAAc,CAC3CZ,OAAO,IAEMsqB,IAAA1C,QAAGS,WAClBznB,IAAAA,IAAcA,IAAAA,SAAc,EAE5B,IAAIsoB,aAAanB,yBAAuBC,aAEpCuC,OAASxC,yBAAuBC,SAEpC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAAS4lB,cAAc/gB,GACrBA,EAAM4Y,SAASD,mBAAmB3Y,IAElC,MAAMghB,EAAQ,GAEd,IAAK,IAAI7gB,EAAI,EAAGA,EAAIH,EAAI/G,SAAUkH,EAChC6gB,EAAMhe,KAAKhD,EAAIihB,WAAW9gB,IAG5B,OAAO6gB,CACT,CAEA,MAAME,IAAM,uCACDL,IAAAK,IAAGA,IACd,MAAMC,IAAM,uCAGZ,SAASvC,WAAS9O,EAAMsR,EAASC,GAC/B,SAASC,EAAa/qB,EAAOgrB,EAAWxB,EAAKzW,GAS3C,GARqB,iBAAV/S,IACTA,EAAQwqB,cAAcxqB,IAGC,iBAAdgrB,IACTA,GAAY,EAAIT,OAAO3C,SAASoD,IAGT,KAArBA,EAAUtoB,OACZ,MAAM8V,UAAU,oEAMlB,IAAIiS,EAAQ,IAAIhI,WAAW,GAAKziB,EAAM0C,QAOtC,GANA+nB,EAAM3e,IAAIkf,GACVP,EAAM3e,IAAI9L,EAAOgrB,EAAUtoB,QAC3B+nB,EAAQK,EAASL,GACjBA,EAAM,GAAgB,GAAXA,EAAM,GAAYI,EAC7BJ,EAAM,GAAgB,GAAXA,EAAM,GAAY,IAEzBjB,EAAK,CACPzW,EAASA,GAAU,EAEnB,IAAK,IAAInJ,EAAI,EAAGA,EAAI,KAAMA,EACxB4f,EAAIzW,EAASnJ,GAAK6gB,EAAM7gB,GAG1B,OAAO4f,CACT,CAEA,OAAO,EAAIN,aAAWtB,SAAS6C,EAChC,CAGD,IACEM,EAAaxR,KAAOA,CACtB,CAAE,MAAO7V,GAAO,CAKhB,OAFAqnB,EAAaJ,IAAMA,IACnBI,EAAaH,IAAMA,IACZG,CACT,CAhDWT,IAAAM,IAAGA,iBC3BdnX,OAAOiU,eAAe9mB,MAAS,aAAc,CAC3CZ,OAAO,IAEMirB,MAAArD,aAAG,EAElB,IAAIE,UAAUC,yBAAuBC,YAErC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASsmB,IAAIT,GAOX,OANInW,MAAMC,QAAQkW,GAChBA,EAAQU,OAAOC,KAAKX,GACM,iBAAVA,IAChBA,EAAQU,OAAOC,KAAKX,EAAO,SAGtB3C,UAAQF,QAAQyD,WAAW,OAAOC,OAAOb,GAAOc,QACzD,CAEA,IAAIlD,WAAW6C,IACftqB,MAAAA,QAAkBynB,WCpBlB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEMwrB,KAAA5D,aAAG,EAElB,IAAI6D,KAAK1D,yBAAuBC,KAE5B0D,IAAM3D,yBAAuBC,OAEjC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,MAAM+mB,IAAK,EAAIF,KAAG7D,SAAS,KAAM,GAAM8D,IAAI9D,SAC3C,IAAIS,WAAWsD,GACf/qB,KAAAA,QAAkBynB,uBCblB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEM4rB,KAAAhE,aAAG,EAElB,IAAIqB,KAAOlB,yBAAuBC,OAE9BkB,WAAanB,yBAAuBC,aAExC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASinB,GAAGrS,EAASgQ,EAAKzW,GAGxB,MAAM+Y,GAFNtS,EAAUA,GAAW,IAEAoQ,SAAWpQ,EAAQqO,KAAOoB,KAAKrB,WAMpD,GAHAkE,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBtC,EAAK,CACPzW,EAASA,GAAU,EAEnB,IAAK,IAAInJ,EAAI,EAAGA,EAAI,KAAMA,EACxB4f,EAAIzW,EAASnJ,GAAKkiB,EAAKliB,GAGzB,OAAO4f,CACT,CAEA,OAAO,EAAIN,WAAWtB,SAASkE,EACjC,CAEA,IAAIzD,WAAWwD,GACfjrB,KAAAA,QAAkBynB,iCClClB5U,OAAOiU,eAAe9mB,OAAS,aAAc,CAC3CZ,OAAO,IAEM+rB,OAAAnE,aAAG,EAElB,IAAIE,QAAUC,yBAAuBC,YAErC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASonB,KAAKvB,GAOZ,OANInW,MAAMC,QAAQkW,GAChBA,EAAQU,OAAOC,KAAKX,GACM,iBAAVA,IAChBA,EAAQU,OAAOC,KAAKX,EAAO,SAGtB3C,QAAQF,QAAQyD,WAAW,QAAQC,OAAOb,GAAOc,QAC1D,CAEA,IAAIlD,WAAW2D,KACfprB,OAAAA,QAAkBynB,WCpBlB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEMisB,KAAArE,aAAG,EAElB,IAAI6D,GAAK1D,yBAAuBC,KAE5BkE,KAAOnE,yBAAuBC,QAElC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,MAAMunB,IAAK,EAAIV,GAAG7D,SAAS,KAAM,GAAMsE,KAAKtE,SAC5C,IAAIS,WAAW8D,GACfvrB,KAAAA,QAAkBynB,sBCblB5U,OAAOiU,eAAe9mB,IAAS,aAAc,CAC3CZ,OAAO,IAEMosB,IAAAxE,aAAG,EAClB,IAAIS,WAAW,uCACfznB,IAAAA,QAAkBynB,4BCLlB5U,OAAOiU,eAAe9mB,UAAS,aAAc,CAC3CZ,OAAO,IAEMqsB,UAAAzE,aAAG,EAElB,IAAIe,UAAYZ,uBAAuBC,YAEvC,SAASD,uBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASimB,QAAQpC,GACf,KAAK,EAAIE,UAAUf,SAASa,GAC1B,MAAMjQ,UAAU,gBAGlB,OAAOvW,SAASwmB,EAAKI,OAAO,GAAI,GAAI,GACtC,CAEA,IAAIR,SAAWwC,QACfjqB,UAAAA,QAAkBynB,qBClBlB5U,OAAOiU,eAAwB9mB,EAAA,aAAc,CAC3CZ,OAAO,IAETyT,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO0nB,EAAG7D,OACZ,IAEFnU,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAOwoB,EAAI3E,OACb,IAEFnU,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAOyoB,EAAI5E,OACb,IAEFnU,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO0oB,EAAI7E,OACb,IAEFnU,OAAOiU,eAAe9mB,EAAS,MAAO,CACpC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO2oB,EAAK9E,OACd,IAEFnU,OAAOiU,eAAe9mB,EAAS,UAAW,CACxC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO4oB,EAAS/E,OAClB,IAEFnU,OAAOiU,eAAe9mB,EAAS,WAAY,CACzC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO4kB,EAAUf,OACnB,IAEFnU,OAAOiU,eAAe9mB,EAAS,YAAa,CAC1C0rB,YAAY,EACZvoB,IAAK,WACH,OAAOmlB,EAAWtB,OACpB,IAEFnU,OAAOiU,eAAe9mB,EAAS,QAAS,CACtC0rB,YAAY,EACZvoB,IAAK,WACH,OAAOwmB,EAAO3C,OAChB,IAGF,IAAI6D,EAAK1D,EAAuBC,MAE5BuE,EAAMxE,EAAuBC,MAE7BwE,EAAMzE,EAAuBC,MAE7ByE,EAAM1E,EAAuBC,MAE7B0E,EAAO3E,EAAuBC,KAE9B2E,EAAW5E,EAAuBC,WAElCW,EAAYZ,EAAuBC,YAEnCkB,EAAanB,EAAuBC,aAEpCuC,EAASxC,EAAuBC,SAEpC,SAASD,EAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,SC5EvF,MAAMgoB,aAAe,IAEnB,QADMC,KAAAA,OAIFC,eAAiB,IAErB,UADMD,KAAAA,OAIFE,eAAiB,IAErB,UADMF,KAAAA,OCGT,MAAOG,kBAAkB7G,aAqB7B,WAAAhhB,CAAY8nB,GACV5nB,QACAE,KAAK2nB,aAAe,IAAIrpB,IACxB0B,KAAK4nB,iBAAmB,IAAItpB,IAC5B0B,KAAK6nB,UAAYH,EAAOG,UACxB7nB,KAAK8nB,SAAWJ,EAAOI,QACxB,CAQM,SAAAC,CAAUC,GACf,MAAM/H,YAAEA,GAAgB+H,EACnBhoB,KAAK2nB,aAAanhB,IAAIyZ,IACzBjgB,KAAK2nB,aAAaphB,IAAI0Z,EAAa,IAGrC,MAAMgI,EACJjoB,KAAK2nB,aAAanpB,IAAIyhB,GACpBgI,GACFA,EAAmB/gB,KAAK8gB,EAG3B,CAEO,sBAAAE,CAAuBC,SAC7B,MAAMlI,YAAEA,EAAWC,SAAEA,GAAaiI,EAClC,IAAKnoB,KAAK4nB,iBAAiBphB,IAAIyZ,GAAc,CAC3C,MAAMmI,EAAuC,IAAI9pB,IACjD0B,KAAK4nB,iBAAiBrhB,IAAI0Z,EAAamI,EACxC,CACGlI,IACoC,QAAtCmI,EAAAroB,KAAK4nB,iBAAiBppB,IAAIyhB,UAAY,IAAAoI,GAAAA,EAAE9hB,IAAI2Z,EAAUiI,GAEzD,CAEO,0BAAAG,CAA2BH,GACjC,MAAMlI,YAAEA,EAAWC,SAAEA,GAAaiI,EAClC,IAAKjI,EAAU,OAEf,MAAMkI,EAAapoB,KAAK4nB,iBAAiBppB,IAAIyhB,GACxCmI,GAELA,EAAW1mB,OAAOwe,EACnB,CAMO,gBAAAqI,CAAiBJ,SACV,QAAbE,EAAAroB,KAAK8nB,gBAAQ,IAAAO,GAAAA,EAAEG,gBACbta,OAAAnN,OAAA,CAAA0nB,UAAW9K,KAAK4G,OACb4D,GAEN,CAEO,gBAAAO,CAAiBzI,GACvB,MAAMmI,EAAapoB,KAAK4nB,iBAAiBppB,IAAIyhB,GAC7C,QAAKmI,IACmB,IAApBA,EAAWhQ,OACbpY,KAAK4nB,iBAAiBlmB,OAAOue,IACtB,GAGV,CASM,GAAA1B,CAAIoK,GACT,MAAMC,EAA4C5oB,KAAK2nB,aAAanpB,IAClEmqB,EAAS1I,aAKX,KAAO2I,aAAS,EAATA,EAAWzrB,QAAQ,CACxB,MAAM0rB,EAAcD,EAAU/X,MACxBqP,EAAWqH,iBACXY,EACAja,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAAA8nB,GACJ,CAAA3I,aAEFlgB,KAAKkoB,uBAAuBC,GAC5BnoB,KAAKsE,KAAK6jB,EACX,CAEInoB,KAAK0oB,iBAAiBC,EAAS1I,cAElCjgB,KAAKmhB,KAAKjlB,wBACLgS,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAAA4nB,GACH,CAAAxI,OAAQ9jB,QAAUA,WAACysB,YAGxB,CAEO,IAAAnuB,CAAK6lB,GACPA,EAAKtB,UAAYsB,EAAKtB,SAAS/hB,OAAS,GAC1CqjB,EAAKtB,SAASxX,SAASoH,IACjBA,EAAKhU,QACPkF,KAAK+nB,UAAU,CACb9H,YAAaO,EAAKP,YAClBV,OAAQzQ,EAAKia,QAEhB,IAIL/oB,KAAKuoB,iBAAiB/H,GACtBxgB,KAAKsoB,2BAA2B9H,GAChCxgB,KAAKue,IAAIiC,EACV,CAOY,MAAAD,CAAOyI,oDAClB,MAAM/I,YAAEA,EAAWC,SAAEA,EAAQX,OAAEA,GAAWyJ,EAC1ChpB,KAAKkoB,uBAAuB,CAC1BjI,cACAC,WACAX,WAGF,MAAM0J,EAAQjpB,KAAK6nB,UAAUqB,aAAa3J,SACpC0J,eAAAA,EAAO1I,OAAMrS,OAAAnN,OAAAmN,OAAAnN,OAAA,GACdioB,GAAW,CACdruB,KAAMqF,KAAKrF,KAAKwuB,KAAKnpB,WAExB,CAGO,WAAAopB,CAAYC,GAClBrpB,KAAKmhB,KAAKhlB,2BAA4BktB,EACvC,CAEO,KAAAlN,CAAMkN,GACZrpB,KAAKmhB,KAAK/kB,qBAAsBitB,EACjC,CAEa,IAAA/kB,CAAK6jB,oDACjB,MAAMlI,YAAEA,EAAWC,SAAEA,EAAQX,OAAEA,GAAW4I,EACpCc,EAAQjpB,KAAK6nB,UAAUqB,aAAa3J,GACpC8J,QAAmBJ,aAAA,EAAAA,EAAOjJ,QAAQ,CACtCC,cACAC,WACAX,SACA5kB,KAAMqF,KAAKrF,KAAKwuB,KAAKnpB,QAGvB,GAAIqpB,EAAY,CACd,MAAM/I,SAAEA,EAAQjB,WAAEA,EAAUH,SAAEA,EAAQiB,OAAEA,EAAME,OAAEA,GAAWgJ,EACrDC,EAAuC,CAE3CrJ,cACAC,WACAX,SAEAe,WACAjB,aACAH,WACAiB,SACAE,WAEEgJ,aAAA,EAAAA,EAAYlJ,UAAW9jB,QAAAA,WAAWktB,cACpCvpB,KAAKopB,YAAYC,GACjBrpB,KAAKuoB,iBAAiBe,GACtBtpB,KAAKsoB,2BAA2BH,KAG9BkB,aAAA,EAAAA,EAAYlJ,UAAW9jB,QAAAA,WAAWmtB,QACpCxpB,KAAKmc,MAAMkN,GACXrpB,KAAKuoB,iBAAiBe,GACtBtpB,KAAKsoB,2BAA2BH,GAEnC,IAEF,QCnNUsB,UAoDX,WAAA7pB,EAAY8pB,aACVA,EAAY5B,SACZA,EAAQvW,QACRA,EAAU,GAAEuN,WACZA,EAAa,CAAE,EAAA6K,cACfA,EAAgB,cArClB3pB,KAAA4pB,cAAsD,IAAItrB,IAY1D0B,KAAU6pB,WAA0B,GAIpC7pB,KAAU8e,WAA4B,GAwBpC9e,KAAK0pB,aAAeA,EAEpB1pB,KAAK8pB,YAAc,GAEnB9pB,KAAK+pB,kBAAoB,KAEzB/pB,KAAKuR,QAAUA,EAEfvR,KAAK8e,WAAaA,EAElB9e,KAAK2pB,cAAgBA,EACrB3pB,KAAKgqB,WAAY,EACjBhqB,KAAKiqB,UAAY,IAAIxC,UAAU,CAC7BI,UAAW7nB,KACX8nB,aAGF9nB,KAAKiqB,UAAUnJ,GAAG5kB,yBAA0BpB,IAC1CkF,KAAKkqB,kBAAkBpvB,EAAO,IAGhCkF,KAAKiqB,UAAUnJ,GAAG3kB,4BAA6BrB,IAC7CkF,KAAKkqB,kBAAkBpvB,EAAO,IAGhCkF,KAAKiqB,UAAUnJ,GAAG1kB,sBAAuBtB,IACvCkF,KAAKkqB,kBAAkBpvB,EAAO,GAEjC,CAmCM,IAAAqvB,CAAKC,GACV,MAAMC,MAAEA,EAAQ,GAAEC,MAAEA,EAAQ,IAAOF,EACnCC,EAAM3iB,SAASwc,IACb,GAAIlkB,KAAK0pB,aAAaljB,IAAI0d,EAAKvc,MAAO,CACpC,MAAMsX,EAAkC,CACtCG,GAAI8E,EAAK9E,GACTzX,KAAMuc,EAAKvc,KACX0X,WAAY6E,EAAK7E,WACjBF,SAAU,GACVD,SAAU,IAEZlf,KAAK4pB,cAAcrjB,IAAI2d,EAAK9E,GAAIH,GAC5BiF,EAAKvc,OAAS3H,KAAK2pB,eACrB3pB,KAAK6pB,WAAW3iB,KAAK+X,EAExB,CAEA,IAGHqL,EAAM5iB,SAAS8H,IACb,MAAM+a,EAAavqB,KAAK4pB,cAAcprB,IAAIgR,EAAKgb,cACzCC,EAAazqB,KAAK4pB,cAAcprB,IAAIgR,EAAKkb,cAC3CH,GACFA,EAAWrL,SAAShY,KAAK,CACvBkY,GAAI5P,EAAK4P,GACTC,WAAY7P,EAAK6P,WACjB0J,OAAQvZ,EAAKkb,eAGbD,GAAcA,EAAW9iB,OAAS3H,KAAK2pB,eACzCc,EAAWtL,SAASjY,KAAK,CACvBkY,GAAI5P,EAAK4P,GACTC,WAAY7P,EAAK6P,WACjBsL,OAAQnb,EAAKgb,cAEhB,GAEJ,CAUO,eAAAI,CAAgBC,SAKtB,GAJA7qB,KAAK8pB,YAAY5iB,KAAK2jB,GAIlBA,EAAU3K,UAAY2K,EAAUtL,QAAUsL,EAAU5K,YAOtD,YANAjgB,KAAKiqB,UAAU1J,OAAO,CACpBN,YAAa4K,EAAU5K,YACvBC,SAAU2K,EAAU3K,SACpBX,OAAQsL,EAAUtL,OAClBiB,KAAMqK,EAAUrK,OAOpB,MAAMP,EAAcoH,eAIpB,GAHAwD,EAAU5K,YAAcA,EAGpB4K,aAAS,EAATA,EAAWtL,OAAQ,CACrB,MAAMN,EAAajf,KAAK4pB,cAAcprB,IAAIqsB,EAAUtL,QACpD,IAAKN,EAMH,YALkB,QAAlBoJ,EAAAwC,aAAA,EAAAA,EAAWC,eAAO,IAAAzC,GAAAA,EAAAnnB,KAAA2pB,EAChB,IAAIlrB,MACF,GAAG7D,YAAYZ,QAAAA,UAAUM,iBAAiBqvB,EAAUtL,aAM1Dvf,KAAK6pB,WAAa,CAAC5K,EACpB,CAEDjf,KAAK6pB,WAAWniB,SAASqjB,IACvB/qB,KAAKiqB,UAAUlC,UAAU,CACvB9H,cACAV,OAAQwL,EAAU3L,IAClB,IAGJpf,KAAKiqB,UAAU1L,IAAI,CACjB0B,eAEH,CAaY,OAAAD,CAAQxM,oDACnBxT,KAAK4qB,gBAAgBpX,KACtB,CAEY,MAAA+M,CAAO/M,oDAClBxT,KAAK4qB,gBAAgBpX,KACtB,CASM,YAAA0V,CAAa3J,GAClB,MAAMN,EAAajf,KAAK4pB,cAAcprB,IAAI+gB,GAC1C,GAAIN,EAAY,CACd,MAAM+L,EAAYhrB,KAAK0pB,aAAalrB,IAAIygB,EAAWtX,MACnD,IAAKqjB,EACH,MAAM,IAAIrrB,MAAM,wBAElB,OAAO,IAAIqrB,EAAU,CACnB/L,aACAH,WAAY9e,KAAK8e,WACjBvN,QAASvR,KAAKuR,SAEjB,CACF,CAEM,gBAAA0Z,CAAiBtjB,GACtB3H,KAAK2pB,cAAgBhiB,CACtB,CAEM,gBAAAujB,CAAiB1K,GAMtB,OAJAxgB,KAAK8e,WACA5Q,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAAAf,KAAK8e,YACL0B,GAEExgB,KAAK8e,UACb,CAQO,iBAAAoL,CAAkBpvB,GACxB,MAAMkQ,EAAQhL,KAAK8pB,YAAYqB,WAC5B9mB,GAAMA,EAAE4b,cAAgBnlB,EAAOmlB,cAElC,GAAIjV,GAAS,EAAG,CACd,MAAMkM,SAAEA,GAAalX,KAAK8pB,YAAY9e,GACtChL,KAAK8pB,YAAYvU,OAAOvK,EAAO,GAC/BkM,SAAAA,EAAWpc,EACZ,CACF,ECzSI,MAAMswB,aAAe,IACfC,aAAe,IACfC,2BAA6B,mCAE7BC,SAIX,WAAA3rB,EAAY4rB,WAAEA,IACZxrB,KAAKwrB,WAAaA,EAClBxrB,KAAKyrB,YAAcL,aAEnB,MAAMM,EAAY1rB,KAAKgiB,QAAQsJ,6BAA+B,GAI9D,IAHuC,IAAnCI,EAAUrhB,QAAQmhB,IACpBE,EAAUxkB,KAAKskB,GAEbE,EAAUvuB,OAASkuB,aAAc,CACnC,MAAMM,EAAgBD,EAAUze,QAChCjN,KAAK2rB,cAAcA,EACpB,CACD3rB,KAAK+hB,QAAQuJ,2BAA4BI,EAC1C,CAED,oBAAAE,CAAqBjiB,GACnB3J,KAAKyrB,YAAc9hB,CACpB,CAGD,OAAAoY,CAAQvZ,EAAsB/N,GAC5B,IACEqnB,QAAQC,QAAQvZ,EAAK/N,EACtB,CAAC,MAAO0hB,GAEP2F,QAAQI,QACRJ,QAAQC,QAAQvZ,EAAK/N,EACtB,CACF,CAGD,OAAAunB,CAAQxZ,GACN,OAAOsZ,QAAQE,QAAQxZ,EACxB,CAEK,mBAAAqjB,CAAoB5L,oDACxB,OAAOjgB,KAAKgiB,QAAQ/B,KACrB,CAEK,gBAAA6L,oDACJ,OAAO9rB,KAAKgiB,QAAQhiB,KAAKwrB,aAAe,KACzC,CAEO,YAAAO,CAAa9L,GACnB,MAAM+L,EAAqBhsB,KAAKgiB,QAAQhiB,KAAKwrB,aAAe,GAC5D,GAAIQ,EAAmB7uB,QAAU6C,KAAKyrB,YAAa,CACjD,MAAMQ,EAAkBD,EAAmB/e,QAC3CjN,KAAKksB,aAAaD,EACnB,CACDD,EAAmB9kB,KAAK+Y,GACxBjgB,KAAK+hB,QAAQ/hB,KAAKwrB,WAAYQ,EAC/B,CAEO,YAAAE,CAAajM,IACEjgB,KAAKgiB,QAAQ/B,IAAgB,IACrCvY,SAASwY,IACpB4B,QAAQG,WAAW/B,EAAS,IAE9B4B,QAAQG,WAAWhC,EACpB,CAEO,qBAAAkM,CAAsBlM,EAAyBC,GACrD,MAAMkM,EAAUpsB,KAAKgiB,QAAQ/B,IAAgB,GAC7CmM,EAAQllB,KAAKgZ,GACblgB,KAAK+hB,QAAQ9B,EAAamM,EAC3B,CAaK,eAAA5D,CAAgBhJ,oDACpB,MAAMS,YAAEA,EAAWC,SAAEA,GAAaV,SACPxf,KAAK6rB,oBAAoB5L,KAGlDjgB,KAAK+rB,aAAa9L,GAEpBjgB,KAAKmsB,sBAAsBlM,EAAaC,GACxClgB,KAAK+hB,QAAQ7B,EAAUV,KACxB,CAEK,eAAA6M,CAAgBnM,oDACpB,OAAOlgB,KAAKgiB,QAAQ9B,KACrB,CAED,KAAAgC,GACEliB,KAAK2rB,cAAc3rB,KAAKwrB,WACzB,CAED,aAAAG,CAAcH,IACexrB,KAAKgiB,QAAQwJ,IAAe,IAEpC9jB,SAASuY,IAC1B6B,QAAQG,WAAWhC,IACEjgB,KAAKgiB,QAAQ/B,IAAgB,IACrCvY,SAASwY,IACpB4B,QAAQG,WAAW/B,EAAS,GAC5B,IAGJ4B,QAAQG,WAAWuJ,EACpB,QClHUc,OASX,WAAA1sB,CAAYqU,GACVjU,KAAK0pB,aAAe,IAAIprB,IACxB0B,KAAKwrB,WAAahE,kBACdvT,aAAO,EAAPA,EAASiI,SACXlc,KAAK8nB,SAAW,IAAIyD,SAAS,CAC3BC,WAAYxrB,KAAKwrB,cAIrBxrB,KAAKusB,SAAS,CACZ5kB,KAAM+Y,UAAUD,aAChBwI,MAAOvI,YAET1gB,KAAKusB,SAAS,CACZ5kB,KAAMgZ,SAASF,aACfwI,MAAOtI,WAET3gB,KAAKuR,SAAU0C,aAAO,EAAPA,EAAS1C,UAAW,CAAA,CACpC,CAMD,QAAAgb,CAAStN,GACPjf,KAAK0pB,aAAanjB,IAAI0Y,EAAWtX,KAAMsX,EAAWgK,MACnD,CAcD,iBAAAuD,CAAkB1E,GAChB9nB,KAAK8nB,SAAWA,CACjB,CAKD,IAAAqC,EAAKC,UACHA,EAAST,cACTA,EAAgB,YAAW7K,WAC3BA,EAAa,CAAA,IAEb9e,KAAKoqB,UAAYA,EACjB,MAAMvC,EAAY,IAAI4B,UAAU,CAC9BC,aAAc1pB,KAAK0pB,aACnB5B,SAAU9nB,KAAK8nB,SACfvW,QAASvR,KAAKuR,QACduN,aACA6K,kBAKF,OAFA9B,EAAUsC,KAAKC,GACfpqB,KAAK6nB,UAAYA,EACVA,CACR,CAKK,OAAA7H,CACJP,oDAEA,OAAO,IAAIplB,SAAQ,CAACC,EAASC,WAC3B,IAAIswB,EAAYpL,EACXA,IACHoL,EAAY,CAAA,GAGA,QAAdxC,EAAAroB,KAAK6nB,iBAAS,IAAAQ,GAAAA,EAAErI,QAAO9R,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAClB8pB,GAAS,CACZ3T,SAAWpc,IACTR,EAAQQ,EAAO,EAEjBgwB,QAAU3O,IACR5hB,EAAO4hB,EAAM,IAEf,MAEL,CAOK,MAAAoE,CACJyI,oDAEA,OAAO,IAAI3uB,SAAQ,CAACC,EAASC,WACb,QAAd8tB,EAAAroB,KAAK6nB,iBAAS,IAAAQ,GAAAA,EAAE9H,OAAMrS,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EACjBioB,GAAW,CACd9R,SAAWpc,IACTR,EAAQQ,EAAO,EAEjBgwB,QAAU3O,IACR5hB,EAAO4hB,EAAM,IAEf,MAEL,CAEK,gBAAA2P,0DACJ,aAA4B,QAAfzD,EAAAroB,KAAK8nB,gBAAU,IAAAO,OAAA,EAAAA,EAAAyD,qBAC7B,CAOK,kBAAAW,CACJxM,4DAEA,MAAMmM,QAA6B,UAAbpsB,KAAK8nB,gBAAQ,IAAAO,OAAA,EAAAA,EAAEwD,oBAAoB5L,GAEzD,IAAKmM,EACH,OAAO,KAIT,MAAMM,EAAoC,GAC1C,IAAK,IAAIroB,EAAI,EAAGA,GAAI+nB,aAAA,EAAAA,EAASjvB,QAAQkH,IAAK,CACxC,MAAMmb,EAAS4M,EAAQ/nB,GACnBrE,KAAK8nB,UACP4E,EAAQxlB,KAAkB,QAAbylB,EAAA3sB,KAAK8nB,gBAAQ,IAAA6E,OAAA,EAAAA,EAAEN,gBAAgB7M,GAE/C,CAED,OAAOnlB,QAAQoP,IAAIijB,KACpB,CAED,OAAAE,SACiB,QAAfvE,EAAAroB,KAAK8nB,gBAAU,IAAAO,GAAAA,EAAAnG,OAChB,CAED,aAAA2K,SACE,OAAqB,UAAd7sB,KAAK6nB,iBAAS,IAAAQ,OAAA,EAAAA,EAAEvJ,UACxB,CAED,aAAAgO,CAActM,GACRxgB,KAAK6nB,YACP7nB,KAAK6nB,UAAU/I,WAAa0B,EAE/B,CAED,gBAAA0K,CAAiB1K,GACXxgB,KAAK6nB,WACP3Z,OAAOnN,OAAOf,KAAK6nB,UAAU/I,WAAY0B,EAE5C","x_google_ignoreList":[0,3,4,5,6,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]}
|
|
1
|
+
{"version":3,"file":"index.min.js","sources":["../../../node_modules/.pnpm/@rollup+plugin-typescript@10.0.1_rollup@4.22.4_tslib@2.6.3_typescript@5.4.5/node_modules/tslib/tslib.es6.js","../src/constant/LogCode.ts","../src/constant/index.ts","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/unraw.js","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/parser.js","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/executor.js","../../../node_modules/.pnpm/@nyariv+sandboxjs@0.8.23/node_modules/@nyariv/sandboxjs/build/Sandbox.js","../src/platform/browser/browserVm.ts","../src/platform/browser/index.ts","../src/nodes/base.ts","../src/nodes/start.ts","../src/nodes/task.ts","../src/EventEmitter.ts","../src/utils/global.ts","../src/utils/storage.ts","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/rng.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/regex.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/validate.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/stringify.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v1.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/parse.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v35.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/md5.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v3.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v4.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/sha1.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/v5.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/nil.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/version.js","../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/index.js","../src/utils/id.ts","../src/Scheduler.ts","../src/FlowModel.ts","../src/recorder/index.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export enum ErrorCode {\n // 模型数据错误\n NONE_START_NODE = 1000,\n NONE_NODE_ID = 1001,\n\n // 表达式错误\n NO_DOCUMENT_BODY = 2001,\n}\n\nexport enum WarningCode {\n NONE_START_NODE_IN_DATA = 2000,\n START_NODE_INCOMING = 2001,\n\n // 表达式判断异常\n EXPRESSION_EXEC_ERROR = 3000,\n}\n\n// TODO: 感觉这块可以用个国际化插件,这样配置不同语言加文件就可以了。\nconst errorMsgMapCn = {\n [ErrorCode.NONE_START_NODE]: '未找到入度为0的节点',\n [ErrorCode.NONE_NODE_ID]: '流程数据中存在没有此节点',\n [ErrorCode.NO_DOCUMENT_BODY]: '找不到document.body, 请在DOM加载完成后再执行',\n}\n\nconst warningMsgMapCn = {\n [WarningCode.NONE_START_NODE_IN_DATA]: '初始化数据中未找到入度为0的节点',\n [WarningCode.START_NODE_INCOMING]: '开始节点不允许被连入',\n [WarningCode.EXPRESSION_EXEC_ERROR]: '表达式执行异常',\n}\n\nexport const getErrorMsg = (code: ErrorCode) =>\n `error[${code}]: ${errorMsgMapCn[code]}`\nexport const getWarningMsg = (code: WarningCode) =>\n `warning[${code}]: ${warningMsgMapCn[code]}`\n","export * from './LogCode'\n\n// baseType\nexport const BASE_START_NODE = 'start'\n\n// eventType\nexport const EVENT_INSTANCE_COMPLETE = 'instance:complete'\nexport const EVENT_INSTANCE_INTERRUPTED = 'instance:interrupted'\nexport const EVENT_INSTANCE_ERROR = 'instance:error'\n\n// flowStatus\nexport enum FlowStatus {\n COMPLETED = 'completed',\n INTERRUPTED = 'interrupted',\n RUNNING = 'running',\n PENDING = 'pending',\n ERROR = 'error',\n}\n\n// actionStatus\nexport enum ActionStatus {\n SUCCESS = 'success',\n ERROR = 'error',\n INTERRUPTED = 'interrupted',\n}\n","/**\n * Parse a string as a base-16 number. This is more strict than `parseInt` as it\n * will not allow any other characters, including (for example) \"+\", \"-\", and\n * \".\".\n * @param hex A string containing a hexadecimal number.\n * @returns The parsed integer, or `NaN` if the string is not a valid hex\n * number.\n */\nfunction parseHexToInt(hex) {\n const isOnlyHexChars = !hex.match(/[^a-f0-9]/i);\n return isOnlyHexChars ? parseInt(hex, 16) : NaN;\n}\n/**\n * Check the validity and length of a hexadecimal code and optionally enforces\n * a specific number of hex digits.\n * @param hex The string to validate and parse.\n * @param errorName The name of the error message to throw a `SyntaxError` with\n * if `hex` is invalid. This is used to index `errorMessages`.\n * @param enforcedLength If provided, will throw an error if `hex` is not\n * exactly this many characters.\n * @returns The parsed hex number as a normal number.\n * @throws {SyntaxError} If the code is not valid.\n */\nfunction validateAndParseHex(hex, errorName, enforcedLength) {\n const parsedHex = parseHexToInt(hex);\n if (Number.isNaN(parsedHex) ||\n (enforcedLength !== undefined && enforcedLength !== hex.length)) {\n throw new SyntaxError(errorName + ': ' + hex);\n }\n return parsedHex;\n}\n/**\n * Parse a two-digit hexadecimal character escape code.\n * @param code The two-digit hexadecimal number that represents the character to\n * output.\n * @returns The single character represented by the code.\n * @throws {SyntaxError} If the code is not valid hex or is not the right\n * length.\n */\nfunction parseHexadecimalCode(code) {\n const parsedCode = validateAndParseHex(code, 'Malformed Hexadecimal', 2);\n return String.fromCharCode(parsedCode);\n}\n/**\n * Parse a four-digit Unicode character escape code.\n * @param code The four-digit unicode number that represents the character to\n * output.\n * @param surrogateCode Optional four-digit unicode surrogate that represents\n * the other half of the character to output.\n * @returns The single character represented by the code.\n * @throws {SyntaxError} If the codes are not valid hex or are not the right\n * length.\n */\nfunction parseUnicodeCode(code, surrogateCode) {\n const parsedCode = validateAndParseHex(code, 'Malformed Unicode', 4);\n if (surrogateCode !== undefined) {\n const parsedSurrogateCode = validateAndParseHex(surrogateCode, 'Malformed Unicode', 4);\n return String.fromCharCode(parsedCode, parsedSurrogateCode);\n }\n return String.fromCharCode(parsedCode);\n}\n/**\n * Test if the text is surrounded by curly braces (`{}`).\n * @param text Text to check.\n * @returns `true` if the text is in the form `{*}`.\n */\nfunction isCurlyBraced(text) {\n return text.charAt(0) === \"{\" && text.charAt(text.length - 1) === \"}\";\n}\n/**\n * Parse a Unicode code point character escape code.\n * @param codePoint A unicode escape code point, including the surrounding curly\n * braces.\n * @returns The single character represented by the code.\n * @throws {SyntaxError} If the code is not valid hex or does not have the\n * surrounding curly braces.\n */\nfunction parseUnicodeCodePointCode(codePoint) {\n if (!isCurlyBraced(codePoint)) {\n throw new SyntaxError('Malformed Unicode: +' + codePoint);\n }\n const withoutBraces = codePoint.slice(1, -1);\n const parsedCode = validateAndParseHex(withoutBraces, 'Malformed Unicode');\n try {\n return String.fromCodePoint(parsedCode);\n }\n catch (err) {\n throw err instanceof RangeError\n ? new SyntaxError('Code Point Limit:' + parsedCode)\n : err;\n }\n}\n/**\n * Map of unescaped letters to their corresponding special JS escape characters.\n * Intentionally does not include characters that map to themselves like \"\\'\".\n */\nconst singleCharacterEscapes = new Map([\n [\"b\", \"\\b\"],\n [\"f\", \"\\f\"],\n [\"n\", \"\\n\"],\n [\"r\", \"\\r\"],\n [\"t\", \"\\t\"],\n [\"v\", \"\\v\"],\n [\"0\", \"\\0\"]\n]);\n/**\n * Parse a single character escape sequence and return the matching character.\n * If none is matched, defaults to `code`.\n * @param code A single character code.\n */\nfunction parseSingleCharacterCode(code) {\n return singleCharacterEscapes.get(code) || code;\n}\n/**\n * Matches every escape sequence possible, including invalid ones.\n *\n * All capture groups (described below) are unique (only one will match), except\n * for 4, which can only potentially match if 3 does.\n *\n * **Capture Groups:**\n * 0. A single backslash\n * 1. Hexadecimal code\n * 2. Unicode code point code with surrounding curly braces\n * 3. Unicode escape code with surrogate\n * 4. Surrogate code\n * 5. Unicode escape code without surrogate\n * 6. Octal code _NOTE: includes \"0\"._\n * 7. A single character (will never be \\, x, u, or 0-3)\n */\nconst escapeMatch = /\\\\(?:(\\\\)|x([\\s\\S]{0,2})|u(\\{[^}]*\\}?)|u([\\s\\S]{4})\\\\u([^{][\\s\\S]{0,3})|u([\\s\\S]{0,4})|([0-3]?[0-7]{1,2})|([\\s\\S])|$)/g;\n/**\n * Replace raw escape character strings with their escape characters.\n * @param raw A string where escape characters are represented as raw string\n * values like `\\'` rather than `'`.\n * @param allowOctals If `true`, will process the now-deprecated octal escape\n * sequences (ie, `\\111`).\n * @returns The processed string, with escape characters replaced by their\n * respective actual Unicode characters.\n */\nexport function unraw(raw) {\n return raw.replace(escapeMatch, function (_, backslash, hex, codePoint, unicodeWithSurrogate, surrogate, unicode, octal, singleCharacter) {\n // Compare groups to undefined because empty strings mean different errors\n // Otherwise, `\\u` would fail the same as `\\` which is wrong.\n if (backslash !== undefined) {\n return \"\\\\\";\n }\n if (hex !== undefined) {\n return parseHexadecimalCode(hex);\n }\n if (codePoint !== undefined) {\n return parseUnicodeCodePointCode(codePoint);\n }\n if (unicodeWithSurrogate !== undefined) {\n return parseUnicodeCode(unicodeWithSurrogate, surrogate);\n }\n if (unicode !== undefined) {\n return parseUnicodeCode(unicode);\n }\n if (octal === \"0\") {\n return \"\\0\";\n }\n if (octal !== undefined) {\n throw new SyntaxError('Octal Deprecation: ' + octal);\n }\n if (singleCharacter !== undefined) {\n return parseSingleCharacterCode(singleCharacter);\n }\n throw new SyntaxError('End of string');\n });\n}\nexport default unraw;\n","import unraw from \"./unraw.js\";\nfunction createLisp(obj) {\n return [obj.op, obj.a, obj.b];\n}\nlet lispTypes = new Map();\nexport class ParseError extends Error {\n constructor(message, code) {\n super(message + \": \" + code.substring(0, 40));\n this.code = code;\n }\n}\nconst inlineIfElse = /^:/;\nconst elseIf = /^else(?![\\w\\$])/;\nconst ifElse = /^if(?![\\w\\$])/;\nconst space = /^\\s/;\nexport let expectTypes = {\n splitter: {\n types: {\n opHigh: /^(\\/|\\*\\*|\\*(?!\\*)|\\%)(?!\\=)/,\n op: /^(\\+(?!(\\+))|\\-(?!(\\-)))(?!\\=)/,\n comparitor: /^(<=|>=|<(?!<)|>(?!>)|!==|!=(?!\\=)|===|==)/,\n boolOp: /^(&&|\\|\\||instanceof(?![\\w\\$])|in(?![\\w\\$]))/,\n bitwise: /^(&(?!&)|\\|(?!\\|)|\\^|<<|>>(?!>)|>>>)(?!\\=)/,\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n ]\n },\n inlineIf: {\n types: {\n inlineIf: /^\\?(?!\\.(?!\\d))/,\n },\n next: [\n 'expEnd'\n ]\n },\n assignment: {\n types: {\n assignModify: /^(\\-=|\\+=|\\/=|\\*\\*=|\\*=|%=|\\^=|\\&=|\\|=|>>>=|>>=|<<=)/,\n assign: /^(=)(?!=)/\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n ]\n },\n incrementerBefore: {\n types: { incrementerBefore: /^(\\+\\+|\\-\\-)/ },\n next: [\n 'prop',\n ]\n },\n expEdge: {\n types: {\n call: /^(\\?\\.)?[\\(]/,\n incrementerAfter: /^(\\+\\+|\\-\\-)/\n },\n next: [\n 'splitter',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n modifier: {\n types: {\n not: /^!/,\n inverse: /^~/,\n negative: /^\\-(?!\\-)/,\n positive: /^\\+(?!\\+)/,\n typeof: /^typeof(?![\\w\\$])/,\n delete: /^delete(?![\\w\\$])/,\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n ]\n },\n dot: {\n types: {\n arrayProp: /^(\\?\\.)?\\[/,\n dot: /^(\\?)?\\.(?=\\s*[a-zA-Z\\$\\_])/,\n },\n next: [\n 'splitter',\n 'assignment',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n prop: {\n types: {\n prop: /^[a-zA-Z\\$\\_][a-zA-Z\\d\\$\\_]*/,\n },\n next: [\n 'splitter',\n 'assignment',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n value: {\n types: {\n createObject: /^\\{/,\n createArray: /^\\[/,\n number: /^(0x[\\da-f]+(_[\\da-f]+)*|(\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?|\\.\\d+(_\\d+)*))(e[\\+\\-]?\\d+(_\\d+)*)?(n)?(?!\\d)/i,\n string: /^\"(\\d+)\"/,\n literal: /^`(\\d+)`/,\n regex: /^\\/(\\d+)\\/r(?![\\w\\$])/,\n boolean: /^(true|false)(?![\\w\\$])/,\n null: /^null(?![\\w\\$])/,\n und: /^undefined(?![\\w\\$])/,\n arrowFunctionSingle: /^(async\\s+)?([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*=>\\s*({)?/,\n arrowFunction: /^(async\\s*)?\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)*)?\\s*\\)\\s*=>\\s*({)?/,\n inlineFunction: /^(async\\s+)?function(\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)?\\s*\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)*)?\\s*\\)\\s*{/,\n group: /^\\(/,\n NaN: /^NaN(?![\\w\\$])/,\n Infinity: /^Infinity(?![\\w\\$])/,\n void: /^void(?![\\w\\$])\\s*/,\n await: /^await(?![\\w\\$])\\s*/,\n new: /^new(?![\\w\\$])\\s*/,\n },\n next: [\n 'splitter',\n 'expEdge',\n 'dot',\n 'inlineIf',\n 'expEnd'\n ]\n },\n initialize: {\n types: {\n initialize: /^(var|let|const)\\s+([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*(=)?/,\n return: /^return(?![\\w\\$])/,\n throw: /^throw(?![\\w\\$])\\s*/\n },\n next: [\n 'modifier',\n 'value',\n 'prop',\n 'incrementerBefore',\n 'expEnd'\n ]\n },\n spreadObject: {\n types: {\n spreadObject: /^\\.\\.\\./\n },\n next: [\n 'value',\n 'prop',\n ]\n },\n spreadArray: {\n types: {\n spreadArray: /^\\.\\.\\./\n },\n next: [\n 'value',\n 'prop',\n ]\n },\n expEnd: { types: {}, next: [] },\n expFunction: {\n types: {\n function: /^(async\\s+)?function(\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z\\$_][a-zA-Z\\d\\$_]*)*)?\\s*\\)\\s*{/,\n },\n next: [\n 'expEdge',\n 'expEnd'\n ]\n },\n expSingle: {\n types: {\n for: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*for\\s*\\(/,\n do: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*do(?![\\w\\$])\\s*(\\{)?/,\n while: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*while\\s*\\(/,\n loopAction: /^(break|continue)(?![\\w\\$])\\s*([a-zA-Z\\$\\_][\\w\\$]*)?/,\n if: /^((([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*)if\\s*\\(/,\n try: /^try\\s*{/,\n block: /^{/,\n switch: /^(([a-zA-Z\\$\\_][\\w\\$]*)\\s*:)?\\s*switch\\s*\\(/,\n },\n next: [\n 'expEnd'\n ]\n }\n};\nlet closings = {\n \"(\": \")\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"'\": \"'\",\n '\"': '\"',\n \"`\": \"`\"\n};\nexport function testMultiple(str, tests) {\n let found;\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n found = test.exec(str);\n if (found)\n break;\n }\n return found;\n}\nexport class CodeString {\n constructor(str) {\n this.ref = { str: \"\" };\n if (str instanceof CodeString) {\n this.ref = str.ref;\n this.start = str.start;\n this.end = str.end;\n }\n else {\n this.ref.str = str;\n this.start = 0;\n this.end = str.length;\n }\n }\n substring(start, end) {\n if (!this.length)\n return this;\n start = this.start + start;\n if (start < 0) {\n start = 0;\n }\n if (start > this.end) {\n start = this.end;\n }\n end = end === undefined ? this.end : this.start + end;\n if (end < 0) {\n end = 0;\n }\n if (end > this.end) {\n end = this.end;\n }\n const code = new CodeString(this);\n code.start = start;\n code.end = end;\n return code;\n }\n get length() {\n const len = this.end - this.start;\n return len < 0 ? 0 : len;\n }\n char(i) {\n if (this.start === this.end)\n return undefined;\n return this.ref.str[this.start + i];\n }\n toString() {\n return this.ref.str.substring(this.start, this.end);\n }\n trimStart() {\n const found = /^\\s+/.exec(this.toString());\n const code = new CodeString(this);\n if (found) {\n code.start += found[0].length;\n }\n return code;\n }\n slice(start, end) {\n if (start < 0) {\n start = this.end - this.start + start;\n }\n if (start < 0) {\n start = 0;\n }\n if (end === undefined) {\n end = this.end - this.start;\n }\n if (end < 0) {\n end = this.end - this.start + end;\n }\n if (end < 0) {\n end = 0;\n }\n return this.substring(start, end);\n }\n trim() {\n const code = this.trimStart();\n const found = /\\s+$/.exec(code.toString());\n if (found) {\n code.end -= found[0].length;\n }\n return code;\n }\n valueOf() {\n return this.toString();\n }\n}\nconst emptyString = new CodeString(\"\");\nconst okFirstChars = /^[\\+\\-~ !]/;\nconst aChar = /^[\\w\\$]/;\nconst aNumber = expectTypes.value.types.number;\nconst wordReg = /^((if|for|else|while|do|function)(?![\\w\\$])|[\\w\\$]+)/;\nconst semiColon = /^;/;\nconst insertedSemicolons = new WeakMap();\nconst quoteCache = new WeakMap();\nexport function restOfExp(constants, part, tests, quote, firstOpening, closingsTests, details = {}) {\n if (!part.length) {\n return part;\n }\n details.words = details.words || [];\n let isStart = true;\n tests = tests || [];\n const hasSemiTest = tests.includes(semiColon);\n if (hasSemiTest) {\n tests = tests.filter((a) => a !== semiColon);\n }\n const insertedSemis = insertedSemicolons.get(part.ref) || [];\n const cache = quoteCache.get(part.ref) || new Map();\n quoteCache.set(part.ref, cache);\n if (quote && cache.has(part.start - 1)) {\n return part.substring(0, cache.get(part.start - 1) - part.start);\n }\n let escape = false;\n let done = false;\n let lastChar = \"\";\n let isOneLiner = false;\n let i;\n let lastInertedSemi = false;\n for (i = 0; i < part.length && !done; i++) {\n let char = part.char(i);\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n if (quote === \"`\" && char === \"$\" && part.char(i + 1) === \"{\" && !escape) {\n let skip = restOfExp(constants, part.substring(i + 2), [], \"{\");\n i += skip.length + 2;\n }\n else if (char === quote && !escape) {\n return part.substring(0, i);\n }\n escape = !escape && char === \"\\\\\";\n }\n else if (closings[char]) {\n if (!lastInertedSemi && insertedSemis[i + part.start]) {\n lastInertedSemi = true;\n if (hasSemiTest) {\n break;\n }\n i--;\n lastChar = ';';\n continue;\n }\n if (isOneLiner && char === \"{\") {\n isOneLiner = false;\n }\n if (char === firstOpening) {\n done = true;\n break;\n }\n else {\n let skip = restOfExp(constants, part.substring(i + 1), [], char);\n cache.set(skip.start - 1, skip.end);\n i += skip.length + 1;\n isStart = false;\n if (closingsTests) {\n let sub = part.substring(i);\n let found;\n if (found = testMultiple(sub.toString(), closingsTests)) {\n details.regRes = found;\n done = true;\n }\n }\n }\n }\n else if (!quote) {\n let sub = part.substring(i).toString();\n let foundWord;\n let foundNumber;\n if (closingsTests) {\n let found;\n if (found = testMultiple(sub, closingsTests)) {\n details.regRes = found;\n i++;\n done = true;\n break;\n }\n }\n if (foundNumber = aNumber.exec(sub)) {\n i += foundNumber[0].length - 1;\n sub = part.substring(i).toString();\n }\n else if (lastChar != char) {\n let found;\n if (char === ';' || (insertedSemis[i + part.start] && !isStart && !lastInertedSemi)) {\n if (hasSemiTest) {\n found = [\";\"];\n }\n else if (insertedSemis[i + part.start]) {\n lastInertedSemi = true;\n i--;\n lastChar = ';';\n continue;\n }\n char = sub = ';';\n }\n else {\n lastInertedSemi = false;\n }\n if (!found) {\n found = testMultiple(sub, tests);\n }\n if (found) {\n done = true;\n }\n if (!done && (foundWord = wordReg.exec(sub))) {\n isOneLiner = true;\n if (foundWord[0].length > 1) {\n details.words.push(foundWord[1]);\n details.lastAnyWord = foundWord[1];\n if (foundWord[2]) {\n details.lastWord = foundWord[2];\n }\n }\n if (foundWord[0].length > 2) {\n i += foundWord[0].length - 2;\n }\n }\n }\n if (isStart) {\n if (okFirstChars.test(sub)) {\n done = false;\n }\n else {\n isStart = false;\n }\n }\n if (done)\n break;\n }\n else if (char === closings[quote]) {\n return part.substring(0, i);\n }\n lastChar = char;\n }\n if (quote) {\n throw new SyntaxError(\"Unclosed '\" + quote + \"'\");\n }\n if (details) {\n details.oneliner = isOneLiner;\n }\n return part.substring(0, i);\n}\nrestOfExp.next = [\n 'splitter',\n 'expEnd',\n 'inlineIf'\n];\nconst startingExecpted = ['initialize', 'expSingle', 'expFunction', 'value', 'modifier', 'prop', 'incrementerBefore', 'expEnd'];\nexport const setLispType = (types, fn) => {\n types.forEach((type) => {\n lispTypes.set(type, fn);\n });\n};\nconst closingsCreate = {\n 'createArray': /^\\]/,\n 'createObject': /^\\}/,\n 'group': /^\\)/,\n 'arrayProp': /^\\]/,\n 'call': /^\\)/\n};\nconst typesCreate = {\n 'createArray': 12 /* LispType.CreateArray */,\n 'createObject': 22 /* LispType.CreateObject */,\n 'group': 23 /* LispType.Group */,\n 'arrayProp': 19 /* LispType.ArrayProp */,\n 'call': 5 /* LispType.Call */,\n 'prop': 1 /* LispType.Prop */,\n '?prop': 20 /* LispType.PropOptional */,\n '?call': 21 /* LispType.CallOptional */,\n};\nsetLispType(['createArray', 'createObject', 'group', 'arrayProp', 'call'], (constants, type, part, res, expect, ctx) => {\n let extract = emptyString;\n let arg = [];\n let end = false;\n let i = res[0].length;\n const start = i;\n while (i < part.length && !end) {\n extract = restOfExp(constants, part.substring(i), [\n closingsCreate[type],\n /^,/\n ]);\n i += extract.length;\n if (extract.trim().length) {\n arg.push(extract);\n }\n if (part.char(i) !== ',') {\n end = true;\n }\n else {\n i++;\n }\n }\n const next = ['value', 'modifier', 'prop', 'incrementerBefore', 'expEnd'];\n let l;\n let funcFound;\n switch (type) {\n case 'group':\n case 'arrayProp':\n l = lispifyExpr(constants, part.substring(start, i));\n break;\n case 'call':\n case 'createArray':\n // @TODO: support 'empty' values\n l = arg.map((e) => lispify(constants, e, [...next, 'spreadArray']));\n break;\n case 'createObject':\n l = arg.map((str) => {\n str = str.trimStart();\n let value;\n let key = '';\n funcFound = expectTypes.expFunction.types.function.exec('function ' + str);\n if (funcFound) {\n key = funcFound[2].trimStart();\n value = lispify(constants, new CodeString('function ' + str.toString().replace(key, \"\")));\n }\n else {\n let extract = restOfExp(constants, str, [/^:/]);\n key = lispify(constants, extract, [...next, 'spreadObject']);\n if (key[0] === 1 /* LispType.Prop */) {\n key = key[2];\n }\n value = lispify(constants, str.substring(extract.length + 1));\n }\n return createLisp({\n op: 6 /* LispType.KeyVal */,\n a: key,\n b: value\n });\n });\n break;\n }\n let lisptype = (type === 'arrayProp' ? (res[1] ? 20 /* LispType.PropOptional */ : 1 /* LispType.Prop */) : (type === 'call' ? (res[1] ? 21 /* LispType.CallOptional */ : 5 /* LispType.Call */) : typesCreate[type]));\n ctx.lispTree = lispify(constants, part.substring(i + 1), expectTypes[expect].next, createLisp({\n op: lisptype,\n a: ctx.lispTree,\n b: l,\n }));\n});\nconst modifierTypes = {\n 'inverse': 64 /* LispType.Inverse */,\n 'not': 24 /* LispType.Not */,\n 'positive': 59 /* LispType.Positive */,\n 'negative': 58 /* LispType.Negative */,\n 'typeof': 60 /* LispType.Typeof */,\n 'delete': 61 /* LispType.Delete */\n};\nsetLispType(['inverse', 'not', 'negative', 'positive', 'typeof', 'delete'], (constants, type, part, res, expect, ctx) => {\n let extract = restOfExp(constants, part.substring(res[0].length), [/^([^\\s\\.\\?\\w\\$]|\\?[^\\.])/]);\n ctx.lispTree = lispify(constants, part.substring(extract.length + res[0].length), restOfExp.next, createLisp({\n op: modifierTypes[type],\n a: ctx.lispTree,\n b: lispify(constants, extract, expectTypes[expect].next),\n }));\n});\nconst incrementTypes = {\n '++$': 25 /* LispType.IncrementBefore */,\n '--$': 27 /* LispType.DecrementBefore */,\n '$++': 26 /* LispType.IncrementAfter */,\n '$--': 28 /* LispType.DecrementAfter */\n};\nsetLispType(['incrementerBefore'], (constants, type, part, res, expect, ctx) => {\n let extract = restOfExp(constants, part.substring(2), [/^[^\\s\\.\\w\\$]/]);\n ctx.lispTree = lispify(constants, part.substring(extract.length + 2), restOfExp.next, createLisp({\n op: incrementTypes[res[0] + \"$\"],\n a: lispify(constants, extract, expectTypes[expect].next),\n b: 0 /* LispType.None */\n }));\n});\nsetLispType(['incrementerAfter'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: incrementTypes[\"$\" + res[0]],\n a: ctx.lispTree,\n b: 0 /* LispType.None */\n }));\n});\nconst adderTypes = {\n '&&': 29 /* LispType.And */,\n '||': 30 /* LispType.Or */,\n 'instanceof': 62 /* LispType.Instanceof */,\n 'in': 63 /* LispType.In */,\n '=': 9 /* LispType.Assign */,\n '-=': 65 /* LispType.SubractEquals */,\n '+=': 66 /* LispType.AddEquals */,\n '/=': 67 /* LispType.DivideEquals */,\n '**=': 68 /* LispType.PowerEquals */,\n '*=': 69 /* LispType.MultiplyEquals */,\n '%=': 70 /* LispType.ModulusEquals */,\n '^=': 71 /* LispType.BitNegateEquals */,\n '&=': 72 /* LispType.BitAndEquals */,\n '|=': 73 /* LispType.BitOrEquals */,\n '>>>=': 74 /* LispType.UnsignedShiftRightEquals */,\n '<<=': 76 /* LispType.ShiftLeftEquals */,\n '>>=': 75 /* LispType.ShiftRightEquals */,\n};\nsetLispType(['assign', 'assignModify', 'boolOp'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: adderTypes[res[0]],\n a: ctx.lispTree,\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next)\n });\n});\nconst opTypes = {\n '&': 77 /* LispType.BitAnd */,\n '|': 78 /* LispType.BitOr */,\n '^': 79 /* LispType.BitNegate */,\n '<<': 80 /* LispType.BitShiftLeft */,\n '>>': 81 /* LispType.BitShiftRight */,\n '>>>': 82 /* LispType.BitUnsignedShiftRight */,\n '<=': 54 /* LispType.SmallerEqualThan */,\n '>=': 55 /* LispType.LargerEqualThan */,\n '<': 56 /* LispType.SmallerThan */,\n '>': 57 /* LispType.LargerThan */,\n '!==': 31 /* LispType.StrictNotEqual */,\n '!=': 53 /* LispType.NotEqual */,\n '===': 32 /* LispType.StrictEqual */,\n '==': 52 /* LispType.Equal */,\n '+': 33 /* LispType.Plus */,\n '-': 47 /* LispType.Minus */,\n '/': 48 /* LispType.Divide */,\n '**': 49 /* LispType.Power */,\n '*': 50 /* LispType.Multiply */,\n '%': 51 /* LispType.Modulus */,\n};\nsetLispType(['opHigh', 'op', 'comparitor', 'bitwise'], (constants, type, part, res, expect, ctx) => {\n const next = [\n expectTypes.inlineIf.types.inlineIf,\n inlineIfElse\n ];\n switch (type) {\n case 'opHigh':\n next.push(expectTypes.splitter.types.opHigh);\n case 'op':\n next.push(expectTypes.splitter.types.op);\n case 'comparitor':\n next.push(expectTypes.splitter.types.comparitor);\n case 'bitwise':\n next.push(expectTypes.splitter.types.bitwise);\n next.push(expectTypes.splitter.types.boolOp);\n }\n let extract = restOfExp(constants, part.substring(res[0].length), next);\n ctx.lispTree = lispify(constants, part.substring(extract.length + res[0].length), restOfExp.next, createLisp({\n op: opTypes[res[0]],\n a: ctx.lispTree,\n b: lispify(constants, extract, expectTypes[expect].next),\n }));\n});\nsetLispType(['inlineIf'], (constants, type, part, res, expect, ctx) => {\n let found = false;\n let extract = part.substring(0, 0);\n let quoteCount = 1;\n while (!found && extract.length < part.length) {\n extract.end = restOfExp(constants, part.substring(extract.length + 1), [\n expectTypes.inlineIf.types.inlineIf,\n inlineIfElse\n ]).end;\n if (part.char(extract.length) === '?') {\n quoteCount++;\n }\n else {\n quoteCount--;\n }\n if (!quoteCount) {\n found = true;\n }\n }\n extract.start = part.start + 1;\n ctx.lispTree = createLisp({\n op: 15 /* LispType.InlineIf */,\n a: ctx.lispTree,\n b: createLisp({\n op: 16 /* LispType.InlineIfCase */,\n a: lispifyExpr(constants, extract),\n b: lispifyExpr(constants, part.substring(res[0].length + extract.length + 1))\n })\n });\n});\nfunction extractIfElse(constants, part) {\n let count = 0;\n let found = part.substring(0, 0);\n let foundElse = emptyString;\n let foundTrue;\n let first = true;\n let elseReg;\n let details = {};\n while ((found = restOfExp(constants, part.substring(found.end - part.start), [elseIf, ifElse, semiColon], undefined, undefined, undefined, details)).length || first) {\n first = false;\n const f = part.substring(found.end - part.start).toString();\n if (f.startsWith(\"if\")) {\n found.end++;\n count++;\n }\n else if (f.startsWith('else')) {\n foundTrue = part.substring(0, found.end - part.start);\n found.end++;\n count--;\n if (!count) {\n found.end--;\n }\n }\n else if (elseReg = /^;?\\s*else(?![\\w\\$])/.exec(f)) {\n foundTrue = part.substring(0, found.end - part.start);\n found.end += elseReg[0].length - 1;\n count--;\n if (!count) {\n found.end -= elseReg[0].length - 1;\n }\n }\n else {\n foundTrue = foundElse.length ? foundTrue : part.substring(0, found.end - part.start);\n break;\n }\n if (!count) {\n let ie = extractIfElse(constants, part.substring(found.end - part.start + (/^;?\\s*else(?![\\w\\$])/.exec(f)?.[0].length)));\n foundElse = ie.all;\n break;\n }\n details = {};\n }\n foundTrue = foundTrue || part.substring(0, found.end - part.start);\n return { all: part.substring(0, Math.max(foundTrue.end, foundElse.end) - part.start), true: foundTrue, false: foundElse };\n}\nsetLispType(['if'], (constants, type, part, res, expect, ctx) => {\n let condition = restOfExp(constants, part.substring(res[0].length), [], \"(\");\n const ie = extractIfElse(constants, part.substring(res[1].length));\n const isBlock = /^\\s*\\{/.exec(part.substring(res[0].length + condition.length + 1).toString());\n const startTrue = res[0].length - res[1].length + condition.length + 1;\n let trueBlock = ie.true.substring(startTrue);\n let elseBlock = ie.false;\n condition = condition.trim();\n trueBlock = trueBlock.trim();\n elseBlock = elseBlock.trim();\n if (trueBlock.char(0) === \"{\")\n trueBlock = trueBlock.slice(1, -1);\n if (elseBlock.char(0) === \"{\")\n elseBlock = elseBlock.slice(1, -1);\n ctx.lispTree = createLisp({\n op: 13 /* LispType.If */,\n a: lispifyExpr(constants, condition),\n b: createLisp({\n op: 14 /* LispType.IfCase */,\n a: lispifyBlock(trueBlock, constants),\n b: lispifyBlock(elseBlock, constants)\n })\n });\n});\nsetLispType(['switch'], (constants, type, part, res, expect, ctx) => {\n const test = restOfExp(constants, part.substring(res[0].length), [], \"(\");\n let start = part.toString().indexOf(\"{\", res[0].length + test.length + 1);\n if (start === -1)\n throw new SyntaxError(\"Invalid switch\");\n let statement = insertSemicolons(constants, restOfExp(constants, part.substring(start + 1), [], \"{\"));\n let caseFound;\n const caseTest = /^\\s*(case\\s|default)\\s*/;\n let cases = [];\n let defaultFound = false;\n while (caseFound = caseTest.exec(statement.toString())) {\n if (caseFound[1] === 'default') {\n if (defaultFound)\n throw new SyntaxError(\"Only one default switch case allowed\");\n defaultFound = true;\n }\n let cond = restOfExp(constants, statement.substring(caseFound[0].length), [/^:/]);\n let found = emptyString;\n let i = start = caseFound[0].length + cond.length + 1;\n let bracketFound = /^\\s*\\{/.exec(statement.substring(i).toString());\n let exprs = [];\n if (bracketFound) {\n i += bracketFound[0].length;\n found = restOfExp(constants, statement.substring(i), [], \"{\");\n i += found.length + 1;\n exprs = lispifyBlock(found, constants);\n }\n else {\n let notEmpty = restOfExp(constants, statement.substring(i), [caseTest]);\n if (!notEmpty.trim().length) {\n exprs = [];\n i += notEmpty.length;\n }\n else {\n while ((found = restOfExp(constants, statement.substring(i), [semiColon])).length) {\n i += found.length + (statement.char(i + found.length) === ';' ? 1 : 0);\n if (caseTest.test(statement.substring(i).toString())) {\n break;\n }\n }\n exprs = lispifyBlock(statement.substring(start, found.end - statement.start), constants);\n }\n }\n statement = statement.substring(i);\n cases.push(createLisp({\n op: 41 /* LispType.SwitchCase */,\n a: caseFound[1] === \"default\" ? undefined : lispifyExpr(constants, cond),\n b: exprs\n }));\n }\n ctx.lispTree = createLisp({\n op: 40 /* LispType.Switch */,\n a: lispifyExpr(constants, test),\n b: cases\n });\n});\nsetLispType(['dot', 'prop'], (constants, type, part, res, expect, ctx) => {\n let prop = res[0];\n let index = res[0].length;\n let op = 'prop';\n if (type === 'dot') {\n if (res[1]) {\n op = '?prop';\n }\n let matches = part.substring(res[0].length).toString().match(expectTypes.prop.types.prop);\n if (matches && matches.length) {\n prop = matches[0];\n index = prop.length + res[0].length;\n }\n else {\n throw new SyntaxError('Hanging dot');\n }\n }\n ctx.lispTree = lispify(constants, part.substring(index), expectTypes[expect].next, createLisp({\n op: typesCreate[op],\n a: ctx.lispTree,\n b: prop\n }));\n});\nsetLispType(['spreadArray', 'spreadObject'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: type === 'spreadArray' ? 18 /* LispType.SpreadArray */ : 17 /* LispType.SpreadObject */,\n a: 0 /* LispType.None */,\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next)\n });\n});\nsetLispType(['return', 'throw'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: type === 'return' ? 8 /* LispType.Return */ : 46 /* LispType.Throw */,\n a: 0 /* LispType.None */,\n b: lispifyExpr(constants, part.substring(res[0].length))\n });\n});\nsetLispType(['number', 'boolean', 'null', 'und', 'NaN', 'Infinity'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: type === \"number\" ? res[10] ? 83 /* LispType.BigInt */ : 7 /* LispType.Number */ : 35 /* LispType.GlobalSymbol */,\n a: 0 /* LispType.None */,\n b: res[10] ? res[1] : res[0]\n }));\n});\nsetLispType(['string', 'literal', 'regex'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: type === 'string' ? 2 /* LispType.StringIndex */ : type === 'literal' ? 84 /* LispType.LiteralIndex */ : 85 /* LispType.RegexIndex */,\n a: 0 /* LispType.None */,\n b: res[1],\n }));\n});\nsetLispType(['initialize'], (constants, type, part, res, expect, ctx) => {\n const lt = res[1] === 'var' ? 34 /* LispType.Var */ : res[1] === 'let' ? 3 /* LispType.Let */ : 4 /* LispType.Const */;\n if (!res[3]) {\n ctx.lispTree = lispify(constants, part.substring(res[0].length), expectTypes[expect].next, createLisp({\n op: lt,\n a: res[2],\n b: 0 /* LispType.None */\n }));\n }\n else {\n ctx.lispTree = createLisp({\n op: lt,\n a: res[2],\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next)\n });\n }\n});\nsetLispType(['function', 'inlineFunction', 'arrowFunction', 'arrowFunctionSingle'], (constants, type, part, res, expect, ctx) => {\n const isArrow = type !== 'function' && type !== 'inlineFunction';\n const isReturn = isArrow && !res[res.length - 1];\n const argPos = isArrow ? 2 : 3;\n const isAsync = res[1] ? 88 /* LispType.True */ : 0 /* LispType.None */;\n const args = res[argPos] ? res[argPos].replace(/\\s+/g, \"\").split(/,/g) : [];\n if (!isArrow) {\n args.unshift((res[2] || \"\").trimStart());\n }\n let ended = false;\n args.forEach((arg) => {\n if (ended)\n throw new SyntaxError('Rest parameter must be last formal parameter');\n if (arg.startsWith('...'))\n ended = true;\n });\n args.unshift(isAsync);\n const f = restOfExp(constants, part.substring(res[0].length), !isReturn ? [/^}/] : [/^[,\\)\\}\\]]/, semiColon]);\n const func = (isReturn ? 'return ' + f : f.toString());\n ctx.lispTree = lispify(constants, part.substring(res[0].length + func.length + 1), expectTypes[expect].next, createLisp({\n op: isArrow ? 11 /* LispType.ArrowFunction */ : type === 'function' ? 37 /* LispType.Function */ : 10 /* LispType.InlineFunction */,\n a: args,\n b: constants.eager ? lispifyFunction(new CodeString(func), constants) : func\n }));\n});\nconst iteratorRegex = /^((let|var|const)\\s+)?\\s*([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s+(in|of)(?![\\w\\$])/;\nsetLispType(['for', 'do', 'while'], (constants, type, part, res, expect, ctx) => {\n let i = 0;\n let startStep = 88 /* LispType.True */;\n let startInternal = [];\n let getIterator;\n let beforeStep = 0 /* LispType.None */;\n let checkFirst = 88 /* LispType.True */;\n let condition;\n let step = 88 /* LispType.True */;\n let body;\n switch (type) {\n case 'while':\n i = part.toString().indexOf(\"(\") + 1;\n let extract = restOfExp(constants, part.substring(i), [], \"(\");\n condition = lispifyReturnExpr(constants, extract);\n body = restOfExp(constants, part.substring(i + extract.length + 1)).trim();\n if (body[0] === \"{\")\n body = body.slice(1, -1);\n break;\n case 'for':\n i = part.toString().indexOf(\"(\") + 1;\n let args = [];\n let extract2 = emptyString;\n for (let k = 0; k < 3; k++) {\n extract2 = restOfExp(constants, part.substring(i), [/^[;\\)]/]);\n args.push(extract2.trim());\n i += extract2.length + 1;\n if (part.char(i - 1) === \")\")\n break;\n }\n let iterator;\n if (args.length === 1 && (iterator = iteratorRegex.exec(args[0].toString()))) {\n if (iterator[4] === 'of') {\n getIterator = lispifyReturnExpr(constants, args[0].substring(iterator[0].length)),\n startInternal = [\n ofStart2,\n ofStart3\n ];\n condition = ofCondition;\n step = ofStep;\n beforeStep = lispify(constants, new CodeString((iterator[1] || 'let ') + iterator[3] + ' = $$next.value'), ['initialize']);\n }\n else {\n getIterator = lispifyReturnExpr(constants, args[0].substring(iterator[0].length)),\n startInternal = [\n inStart2,\n inStart3\n ];\n step = inStep;\n condition = inCondition;\n beforeStep = lispify(constants, new CodeString((iterator[1] || 'let ') + iterator[3] + ' = $$keys[$$keyIndex]'), ['initialize']);\n }\n }\n else if (args.length === 3) {\n startStep = lispifyExpr(constants, args.shift(), startingExecpted);\n condition = lispifyReturnExpr(constants, args.shift());\n step = lispifyExpr(constants, args.shift());\n }\n else {\n throw new SyntaxError(\"Invalid for loop definition\");\n }\n body = restOfExp(constants, part.substring(i)).trim();\n if (body[0] === \"{\")\n body = body.slice(1, -1);\n break;\n case 'do':\n checkFirst = 0 /* LispType.None */;\n const isBlock = !!res[3];\n body = restOfExp(constants, part.substring(res[0].length), isBlock ? [/^\\}/] : [semiColon]);\n condition = lispifyReturnExpr(constants, restOfExp(constants, part.substring(part.toString().indexOf(\"(\", res[0].length + body.length) + 1), [], \"(\"));\n break;\n }\n const a = [checkFirst, startInternal, getIterator, startStep, step, condition, beforeStep];\n ctx.lispTree = createLisp({\n op: 38 /* LispType.Loop */,\n a,\n b: lispifyBlock(body, constants)\n });\n});\nsetLispType(['block'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: 42 /* LispType.Block */,\n a: lispifyBlock(restOfExp(constants, part.substring(1), [], \"{\"), constants),\n b: 0 /* LispType.None */\n });\n});\nsetLispType(['loopAction'], (constants, type, part, res, expect, ctx) => {\n ctx.lispTree = createLisp({\n op: 86 /* LispType.LoopAction */,\n a: res[1],\n b: 0 /* LispType.None */\n });\n});\nconst catchReg = /^\\s*(catch\\s*(\\(\\s*([a-zA-Z\\$_][a-zA-Z\\d\\$_]*)\\s*\\))?|finally)\\s*\\{/;\nsetLispType(['try'], (constants, type, part, res, expect, ctx) => {\n const body = restOfExp(constants, part.substring(res[0].length), [], \"{\");\n let catchRes = catchReg.exec(part.substring(res[0].length + body.length + 1).toString());\n let finallyBody;\n let exception = \"\";\n let catchBody;\n let offset = 0;\n if (catchRes[1].startsWith('catch')) {\n catchRes = catchReg.exec(part.substring(res[0].length + body.length + 1).toString());\n exception = catchRes[2];\n catchBody = restOfExp(constants, part.substring(res[0].length + body.length + 1 + catchRes[0].length), [], \"{\");\n offset = res[0].length + body.length + 1 + catchRes[0].length + catchBody.length + 1;\n if ((catchRes = catchReg.exec(part.substring(offset).toString())) && catchRes[1].startsWith('finally')) {\n finallyBody = restOfExp(constants, part.substring(offset + catchRes[0].length), [], \"{\");\n }\n }\n else {\n finallyBody = restOfExp(constants, part.substring(res[0].length + body.length + 1 + catchRes[0].length), [], \"{\");\n }\n const b = [\n exception,\n lispifyBlock(insertSemicolons(constants, catchBody || emptyString), constants),\n lispifyBlock(insertSemicolons(constants, finallyBody || emptyString), constants),\n ];\n ctx.lispTree = createLisp({\n op: 39 /* LispType.Try */,\n a: lispifyBlock(insertSemicolons(constants, body), constants),\n b\n });\n});\nsetLispType(['void', 'await'], (constants, type, part, res, expect, ctx) => {\n const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\\s\\.\\?\\w\\$]|\\?[^\\.])/]);\n ctx.lispTree = lispify(constants, part.substring(res[0].length + extract.length), expectTypes[expect].next, createLisp({\n op: type === 'void' ? 87 /* LispType.Void */ : 44 /* LispType.Await */,\n a: lispify(constants, extract),\n b: 0 /* LispType.None */\n }));\n});\nsetLispType(['new'], (constants, type, part, res, expect, ctx) => {\n let i = res[0].length;\n const obj = restOfExp(constants, part.substring(i), [], undefined, \"(\");\n i += obj.length + 1;\n const args = [];\n if (part.char(i - 1) === \"(\") {\n const argsString = restOfExp(constants, part.substring(i), [], \"(\");\n i += argsString.length + 1;\n let found;\n let j = 0;\n while ((found = restOfExp(constants, argsString.substring(j), [/^,/])).length) {\n j += found.length + 1;\n args.push(found.trim());\n }\n }\n ctx.lispTree = lispify(constants, part.substring(i), expectTypes.expEdge.next, createLisp({\n op: 45 /* LispType.New */,\n a: lispify(constants, obj, expectTypes.initialize.next),\n b: args.map((arg) => lispify(constants, arg, expectTypes.initialize.next)),\n }));\n});\nconst ofStart2 = lispify(undefined, new CodeString('let $$iterator = $$obj[Symbol.iterator]()'), ['initialize']);\nconst ofStart3 = lispify(undefined, new CodeString('let $$next = $$iterator.next()'), ['initialize']);\nconst ofCondition = lispify(undefined, new CodeString('return !$$next.done'), ['initialize']);\nconst ofStep = lispify(undefined, new CodeString('$$next = $$iterator.next()'));\nconst inStart2 = lispify(undefined, new CodeString('let $$keys = Object.keys($$obj)'), ['initialize']);\nconst inStart3 = lispify(undefined, new CodeString('let $$keyIndex = 0'), ['initialize']);\nconst inStep = lispify(undefined, new CodeString('$$keyIndex++'));\nconst inCondition = lispify(undefined, new CodeString('return $$keyIndex < $$keys.length'), ['initialize']);\nvar lastType;\nvar lastPart;\nvar lastLastPart;\nvar lastLastLastPart;\nvar lastLastLastLastPart;\nfunction lispify(constants, part, expected, lispTree, topLevel = false) {\n lispTree = lispTree || [0 /* LispType.None */, 0 /* LispType.None */, 0 /* LispType.None */];\n expected = expected || expectTypes.initialize.next;\n if (part === undefined)\n return lispTree;\n part = part.trimStart();\n const str = part.toString();\n if (!part.length && !expected.includes('expEnd')) {\n throw new SyntaxError(\"Unexpected end of expression\");\n }\n if (!part.length)\n return lispTree;\n let ctx = { lispTree: lispTree };\n let res;\n for (let expect of expected) {\n if (expect === 'expEnd') {\n continue;\n }\n for (let type in expectTypes[expect].types) {\n if (type === 'expEnd') {\n continue;\n }\n if (res = expectTypes[expect].types[type].exec(str)) {\n lastType = type;\n lastLastLastLastPart = lastLastLastPart;\n lastLastLastPart = lastLastPart;\n lastLastPart = lastPart;\n lastPart = part;\n try {\n lispTypes.get(type)(constants, type, part, res, expect, ctx);\n }\n catch (e) {\n if (topLevel && e instanceof SyntaxError) {\n throw new ParseError(e.message, str);\n }\n throw e;\n }\n break;\n }\n }\n if (res)\n break;\n }\n if (!res && part.length) {\n let msg = `Unexpected token after ${lastType}: ${part.char(0)}`;\n if (topLevel) {\n throw new ParseError(`Unexpected token after ${lastType}: ${part.char(0)}`, str);\n }\n throw new SyntaxError(`Unexpected token after ${lastType}: ${part.char(0)}`);\n }\n return ctx.lispTree;\n}\nconst startingExpectedWithoutSingle = startingExecpted.filter((r) => r !== 'expSingle');\nfunction lispifyExpr(constants, str, expected) {\n if (!str.trimStart().length)\n return undefined;\n let subExpressions = [];\n let sub;\n let pos = 0;\n expected = expected || expectTypes.initialize.next;\n if (expected.includes('expSingle')) {\n if (testMultiple(str.toString(), Object.values(expectTypes.expSingle.types))) {\n return lispify(constants, str, ['expSingle'], undefined, true);\n }\n }\n if (expected === startingExecpted)\n expected = startingExpectedWithoutSingle;\n while ((sub = restOfExp(constants, str.substring(pos), [/^,/])).length) {\n subExpressions.push(sub.trimStart());\n pos += sub.length + 1;\n }\n if (subExpressions.length === 1) {\n return lispify(constants, str, expected, undefined, true);\n }\n if (expected.includes('initialize')) {\n let defined = expectTypes.initialize.types.initialize.exec(subExpressions[0].toString());\n if (defined) {\n return createLisp({\n op: 42 /* LispType.Block */,\n a: subExpressions.map((str, i) => lispify(constants, i ? new CodeString(defined[1] + ' ' + str) : str, ['initialize'], undefined, true)),\n b: 0 /* LispType.None */\n });\n }\n else if (expectTypes.initialize.types.return.exec(subExpressions[0].toString())) {\n return lispify(constants, str, expected, undefined, true);\n }\n }\n const exprs = subExpressions.map((str, i) => lispify(constants, str, expected, undefined, true));\n return createLisp({ op: 43 /* LispType.Expression */, a: exprs, b: 0 /* LispType.None */ });\n}\nexport function lispifyReturnExpr(constants, str) {\n return createLisp({ op: 8 /* LispType.Return */, a: 0 /* LispType.None */, b: lispifyExpr(constants, str) });\n}\nexport function lispifyBlock(str, constants, expression = false) {\n str = insertSemicolons(constants, str);\n if (!str.trim().length)\n return [];\n let parts = [];\n let part;\n let pos = 0;\n let start = 0;\n let details = {};\n let skipped = false;\n let isInserted = false;\n while ((part = restOfExp(constants, str.substring(pos), [semiColon], undefined, undefined, undefined, details)).length) {\n isInserted = str.char(pos + part.length) && str.char(pos + part.length) !== ';';\n pos += part.length + (isInserted ? 0 : 1);\n if (/^\\s*else(?![\\w\\$])/.test(str.substring(pos).toString())) {\n skipped = true;\n }\n else if (details.words.includes('do') && /^\\s*while(?![\\w\\$])/.test(str.substring(pos).toString())) {\n skipped = true;\n }\n else {\n skipped = false;\n parts.push(str.substring(start, pos - (isInserted ? 0 : 1)));\n start = pos;\n }\n details = {};\n if (expression)\n break;\n }\n if (skipped) {\n parts.push(str.substring(start, pos - (isInserted ? 0 : 1)));\n }\n return parts.map((str) => str.trimStart()).filter((str) => str.length).map((str, j) => {\n return lispifyExpr(constants, str.trimStart(), startingExecpted);\n });\n}\nexport function lispifyFunction(str, constants, expression = false) {\n if (!str.trim().length)\n return [];\n const tree = lispifyBlock(str, constants, expression);\n let hoisted = [];\n hoist(tree, hoisted);\n return hoisted.concat(tree);\n}\nexport function isLisp(item) {\n return Array.isArray(item) && typeof item[0] === 'number' && item[0] !== 0 /* LispType.None */ && item[0] !== 88 /* LispType.True */;\n}\nfunction hoist(item, res) {\n if (isLisp(item)) {\n const [op, a, b] = item;\n if (op === 39 /* LispType.Try */ || op === 13 /* LispType.If */ || op === 38 /* LispType.Loop */ || op === 40 /* LispType.Switch */) {\n hoist(a, res);\n hoist(b, res);\n }\n else if (op === 34 /* LispType.Var */) {\n res.push(createLisp({ op: 34 /* LispType.Var */, a: a, b: 0 /* LispType.None */ }));\n }\n else if (op === 37 /* LispType.Function */ && a[1]) {\n res.push(item);\n return true;\n }\n }\n else if (Array.isArray(item)) {\n const rep = [];\n for (let it of item) {\n if (!hoist(it, res)) {\n rep.push(it);\n }\n }\n if (rep.length !== item.length) {\n item.length = 0;\n item.push(...rep);\n }\n }\n return false;\n}\nconst closingsNoInsertion = /^(\\})\\s*(catch|finally|else|while|instanceof)(?![\\w\\$])/;\n// \\w|)|] \\n \\w = 2 // \\} \\w|\\{ = 5 \nconst colonsRegex = /^((([\\w\\$\\]\\)\\\"\\'\\`]|\\+\\+|\\-\\-)\\s*\\r?\\n\\s*([\\w\\$\\+\\-\\!~]))|(\\}\\s*[\\w\\$\\!~\\+\\-\\{\\(\\\"\\'\\`]))/;\n// if () \\w \\n; \\w == \\w \\n \\w | last === if a\n// if () { }; \\w == \\} ^else | last === if b\n// if () \\w \\n; else \\n \\w \\n; == \\w \\n \\w | last === else a\n// if () {} else {}; \\w == \\} \\w | last === else b\n// while () \\n \\w \\n; \\w == \\w \\n \\w | last === while a\n// while () { }; \\w == \\} \\w | last === while b\n// do \\w \\n; while (); \\w == \\w \\n while | last === do a\n// do { } while (); \\w == \\) \\w | last === while c\n// try {} catch () {}; \\w == \\} \\w | last === catch|finally b\n// \\w \\n; \\w == \\w \\n \\w | last === none a\n// cb() \\n \\w == \\) \\n \\w | last === none a\n// obj[a] \\n \\w == \\] \\n \\w | last === none a\n// {} {} == \\} \\{ | last === none b\nexport function insertSemicolons(constants, str) {\n let rest = str;\n let sub = emptyString;\n let details = {};\n const inserted = insertedSemicolons.get(str.ref) || new Array(str.ref.str.length);\n while ((sub = restOfExp(constants, rest, [], undefined, undefined, [colonsRegex], details)).length) {\n let valid = false;\n let part = sub;\n let edge = sub.length;\n if (details.regRes) {\n valid = true;\n const [, , a, , , b] = details.regRes;\n edge = details.regRes[3] === \"++\" || details.regRes[3] === \"--\" ? sub.length + 1 : sub.length;\n part = rest.substring(0, edge);\n if (b) {\n let res = closingsNoInsertion.exec(rest.substring(sub.length - 1).toString());\n if (res) {\n if (res[2] === 'while') {\n valid = details.lastWord !== 'do';\n }\n else {\n valid = false;\n }\n }\n else if (details.lastWord === 'function' && details.regRes[5][0] === \"}\" && details.regRes[5].slice(-1) === '(') {\n valid = false;\n }\n }\n else if (a) {\n if (details.lastWord === 'if' || details.lastWord === 'while' || details.lastWord === 'for' || details.lastWord === 'else') {\n valid = false;\n }\n }\n }\n if (valid) {\n inserted[part.end] = true;\n }\n rest = rest.substring(edge);\n details = {};\n }\n insertedSemicolons.set(str.ref, inserted);\n return str;\n}\nexport function checkRegex(str) {\n let i = 1;\n let escape = false;\n let done = false;\n let cancel = false;\n while (i < str.length && !done && !cancel) {\n done = (str[i] === '/' && !escape);\n escape = str[i] === '\\\\' && !escape;\n cancel = str[i] === '\\n';\n i++;\n }\n let after = str.substring(i);\n cancel = (cancel || !done) || /^\\s*\\d/.test(after);\n if (cancel)\n return null;\n let flags = /^[a-z]*/.exec(after);\n if (/^\\s+[\\w\\$]/.test(str.substring(i + flags[0].length))) {\n return null;\n }\n return {\n regex: str.substring(1, i - 1),\n flags: (flags && flags[0]) || \"\",\n length: i + ((flags && flags[0].length) || 0)\n };\n}\nconst notDivide = /(typeof|delete|instanceof|return|in|of|throw|new|void|do|if)$/;\nconst possibleDivide = /^([\\w\\$\\]\\)]|\\+\\+|\\-\\-)[\\s\\/]/;\nexport function extractConstants(constants, str, currentEnclosure = \"\") {\n let quote;\n let extract = [];\n let escape = false;\n let regexFound;\n let comment = \"\";\n let commentStart = -1;\n let currJs = [];\n let char = \"\";\n const strRes = [];\n const enclosures = [];\n let isPossibleDivide;\n for (var i = 0; i < str.length; i++) {\n char = str[i];\n if (comment) {\n if (char === comment) {\n if (comment === \"*\" && str[i + 1] === \"/\") {\n comment = \"\";\n i++;\n }\n else if (comment === \"\\n\") {\n comment = \"\";\n }\n }\n }\n else {\n if (escape) {\n escape = false;\n extract.push(char);\n continue;\n }\n if (quote) {\n if (quote === \"`\" && char === \"$\" && str[i + 1] === \"{\") {\n let skip = extractConstants(constants, str.substring(i + 2), \"{\");\n currJs.push(skip.str);\n extract.push('${', currJs.length - 1, `}`);\n i += skip.length + 2;\n }\n else if (quote === char) {\n if (quote === '`') {\n const li = createLisp({\n op: 36 /* LispType.Literal */,\n a: unraw(extract.join(\"\")),\n b: [],\n });\n li.tempJsStrings = currJs;\n constants.literals.push(li);\n strRes.push(`\\``, constants.literals.length - 1, `\\``);\n }\n else {\n constants.strings.push(unraw(extract.join(\"\")));\n strRes.push(`\"`, constants.strings.length - 1, `\"`);\n }\n quote = null;\n extract = [];\n }\n else {\n extract.push(char);\n }\n }\n else {\n if ((char === \"'\" || char === '\"' || char === '`')) {\n currJs = [];\n quote = char;\n }\n else if (closings[currentEnclosure] === char && !enclosures.length) {\n return { str: strRes.join(\"\"), length: i };\n }\n else if (closings[char]) {\n enclosures.push(char);\n strRes.push(char);\n }\n else if (closings[enclosures[enclosures.length - 1]] === char) {\n enclosures.pop();\n strRes.push(char);\n }\n else if (char === \"/\" && (str[i + 1] === \"*\" || str[i + 1] === \"/\")) {\n comment = str[i + 1] === \"*\" ? \"*\" : \"\\n\";\n commentStart = i;\n }\n else if (char === '/' && !isPossibleDivide && (regexFound = checkRegex(str.substring(i)))) {\n constants.regexes.push(regexFound);\n strRes.push(`/`, constants.regexes.length - 1, `/r`);\n i += regexFound.length - 1;\n }\n else {\n strRes.push(char);\n }\n if (!isPossibleDivide || !space.test(char)) {\n if (isPossibleDivide = possibleDivide.exec(str.substring(i))) {\n if (notDivide.test(str.substring(0, i + isPossibleDivide[1].length))) {\n isPossibleDivide = null;\n }\n }\n }\n }\n escape = quote && char === \"\\\\\";\n }\n }\n if (comment) {\n if (comment === \"*\") {\n throw new SyntaxError(`Unclosed comment '/*': ${str.substring(commentStart)}`);\n }\n }\n return { str: strRes.join(\"\"), length: i };\n}\nexport function parse(code, eager = false, expression = false) {\n if (typeof code !== 'string')\n throw new ParseError(`Cannot parse ${code}`, code);\n let str = ' ' + code;\n const constants = { strings: [], literals: [], regexes: [], eager };\n str = extractConstants(constants, str).str;\n for (let l of constants.literals) {\n l[2] = l.tempJsStrings.map((js) => lispifyExpr(constants, new CodeString(js)));\n delete l.tempJsStrings;\n }\n return { tree: lispifyFunction(new CodeString(str), constants, expression), constants };\n}\n","import { parse, lispifyFunction, CodeString, isLisp } from \"./parser.js\";\nexport class ExecReturn {\n constructor(auditReport, result, returned, breakLoop = false, continueLoop = false) {\n this.auditReport = auditReport;\n this.result = result;\n this.returned = returned;\n this.breakLoop = breakLoop;\n this.continueLoop = continueLoop;\n }\n}\nexport class Prop {\n constructor(context, prop, isConst = false, isGlobal = false, isVariable = false) {\n this.context = context;\n this.prop = prop;\n this.isConst = isConst;\n this.isGlobal = isGlobal;\n this.isVariable = isVariable;\n }\n get(context) {\n if (this.context === undefined)\n throw new ReferenceError(`${this.prop} is not defined`);\n context.getSubscriptions.forEach((cb) => cb(this.context, this.prop));\n return this.context[this.prop];\n }\n}\nconst optional = {};\nconst reservedWords = new Set([\n 'instanceof',\n 'typeof',\n 'return',\n 'try',\n 'catch',\n 'if',\n 'finally',\n 'else',\n 'in',\n 'of',\n 'var',\n 'let',\n 'const',\n 'for',\n 'delete',\n 'false',\n 'true',\n 'while',\n 'do',\n 'break',\n 'continue',\n 'new',\n 'function',\n 'async',\n 'await',\n 'switch',\n 'case'\n]);\nvar VarType;\n(function (VarType) {\n VarType[\"let\"] = \"let\";\n VarType[\"const\"] = \"const\";\n VarType[\"var\"] = \"var\";\n})(VarType || (VarType = {}));\nfunction keysOnly(obj) {\n const ret = Object.assign({}, obj);\n for (let key in ret) {\n ret[key] = true;\n }\n return ret;\n}\nexport class Scope {\n constructor(parent, vars = {}, functionThis) {\n this.const = {};\n this.let = {};\n this.var = {};\n const isFuncScope = functionThis !== undefined || parent === null;\n this.parent = parent;\n this.allVars = vars;\n this.let = isFuncScope ? this.let : keysOnly(vars);\n this.var = isFuncScope ? keysOnly(vars) : this.var;\n this.globals = parent === null ? keysOnly(vars) : {};\n this.functionThis = functionThis;\n }\n get(key, functionScope = false) {\n if (key === 'this' && this.functionThis !== undefined) {\n return new Prop({ this: this.functionThis }, key, true, false, true);\n }\n if (reservedWords.has(key))\n throw new SyntaxError(\"Unexepected token '\" + key + \"'\");\n if (this.parent === null || !functionScope || this.functionThis !== undefined) {\n if (this.globals.hasOwnProperty(key)) {\n return new Prop(this.functionThis, key, false, true, true);\n }\n if (key in this.allVars && (!(key in {}) || this.allVars.hasOwnProperty(key))) {\n return new Prop(this.allVars, key, this.const.hasOwnProperty(key), this.globals.hasOwnProperty(key), true);\n }\n if (this.parent === null) {\n return new Prop(undefined, key);\n }\n }\n return this.parent.get(key, functionScope);\n }\n set(key, val) {\n if (key === 'this')\n throw new SyntaxError('\"this\" cannot be assigned');\n if (reservedWords.has(key))\n throw new SyntaxError(\"Unexepected token '\" + key + \"'\");\n let prop = this.get(key);\n if (prop.context === undefined) {\n throw new ReferenceError(`Variable '${key}' was not declared.`);\n }\n if (prop.isConst) {\n throw new TypeError(`Cannot assign to const variable '${key}'`);\n }\n if (prop.isGlobal) {\n throw new SandboxError(`Cannot override global variable '${key}'`);\n }\n prop.context[prop.prop] = val;\n return prop;\n }\n declare(key, type = null, value = undefined, isGlobal = false) {\n if (key === 'this')\n throw new SyntaxError('\"this\" cannot be declared');\n if (reservedWords.has(key))\n throw new SyntaxError(\"Unexepected token '\" + key + \"'\");\n if (type === 'var' && this.functionThis === undefined && this.parent !== null) {\n return this.parent.declare(key, type, value, isGlobal);\n }\n else if ((this[type].hasOwnProperty(key) && type !== 'const' && !this.globals.hasOwnProperty(key)) || !(key in this.allVars)) {\n if (isGlobal) {\n this.globals[key] = true;\n }\n this[type][key] = true;\n this.allVars[key] = value;\n }\n else {\n throw new SandboxError(`Identifier '${key}' has already been declared`);\n }\n return new Prop(this.allVars, key, this.const.hasOwnProperty(key), isGlobal);\n }\n}\nexport class FunctionScope {\n}\nexport class LocalScope {\n}\nexport class SandboxError extends Error {\n}\nlet currentTicks;\nexport function sandboxFunction(context, ticks) {\n return SandboxFunction;\n function SandboxFunction(...params) {\n let code = params.pop() || \"\";\n let parsed = parse(code);\n return createFunction(params, parsed.tree, ticks || currentTicks, {\n ...context,\n constants: parsed.constants,\n tree: parsed.tree\n }, undefined, 'anonymous');\n }\n}\nfunction generateArgs(argNames, args) {\n const vars = {};\n argNames.forEach((arg, i) => {\n if (arg.startsWith('...')) {\n vars[arg.substring(3)] = args.slice(i);\n }\n else {\n vars[arg] = args[i];\n }\n });\n return vars;\n}\nconst sandboxedFunctions = new WeakSet();\nexport function createFunction(argNames, parsed, ticks, context, scope, name) {\n if (context.ctx.options.forbidFunctionCreation) {\n throw new SandboxError(\"Function creation is forbidden\");\n }\n let func;\n if (name === undefined) {\n func = (...args) => {\n const vars = generateArgs(argNames, args);\n const res = executeTree(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars)]);\n return res.result;\n };\n }\n else {\n func = function sandboxedObject(...args) {\n const vars = generateArgs(argNames, args);\n const res = executeTree(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars, this)]);\n return res.result;\n };\n }\n context.registerSandboxFunction(func);\n sandboxedFunctions.add(func);\n return func;\n}\nexport function createFunctionAsync(argNames, parsed, ticks, context, scope, name) {\n if (context.ctx.options.forbidFunctionCreation) {\n throw new SandboxError(\"Function creation is forbidden\");\n }\n if (!context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\n throw new SandboxError(\"Async/await not permitted\");\n }\n let func;\n if (name === undefined) {\n func = async (...args) => {\n const vars = generateArgs(argNames, args);\n const res = await executeTreeAsync(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars)]);\n return res.result;\n };\n }\n else {\n func = async function sandboxedObject(...args) {\n const vars = generateArgs(argNames, args);\n const res = await executeTreeAsync(ticks, context, parsed, scope === undefined ? [] : [new Scope(scope, vars, this)]);\n return res.result;\n };\n }\n context.registerSandboxFunction(func);\n sandboxedFunctions.add(func);\n return func;\n}\nexport function sandboxedEval(func) {\n return sandboxEval;\n function sandboxEval(code) {\n return func(code)();\n }\n}\nexport function sandboxedSetTimeout(func) {\n return function sandboxSetTimeout(handler, ...args) {\n if (typeof handler !== 'string')\n return setTimeout(handler, ...args);\n return setTimeout(func(handler), ...args);\n };\n}\nexport function sandboxedSetInterval(func) {\n return function sandboxSetInterval(handler, ...args) {\n if (typeof handler !== 'string')\n return setInterval(handler, ...args);\n return setInterval(func(handler), ...args);\n };\n}\nexport function assignCheck(obj, context, op = 'assign') {\n if (obj.context === undefined) {\n throw new ReferenceError(`Cannot ${op} value to undefined.`);\n }\n if (typeof obj.context !== 'object' && typeof obj.context !== 'function') {\n throw new SyntaxError(`Cannot ${op} value to a primitive.`);\n }\n if (obj.isConst) {\n throw new TypeError(`Cannot set value to const variable '${obj.prop}'`);\n }\n if (obj.isGlobal) {\n throw new SandboxError(`Cannot ${op} property '${obj.prop}' of a global object`);\n }\n if (typeof obj.context[obj.prop] === 'function' && !obj.context.hasOwnProperty(obj.prop)) {\n throw new SandboxError(`Override prototype property '${obj.prop}' not allowed`);\n }\n if (op === \"delete\") {\n if (obj.context.hasOwnProperty(obj.prop)) {\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb({ type: \"delete\", prop: obj.prop }));\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb({ type: \"delete\", prop: obj.prop }));\n }\n }\n else if (obj.context.hasOwnProperty(obj.prop)) {\n context.setSubscriptions.get(obj.context)?.get(obj.prop)?.forEach((cb) => cb({\n type: \"replace\"\n }));\n context.setSubscriptionsGlobal.get(obj.context)?.get(obj.prop)?.forEach((cb) => cb({\n type: \"replace\"\n }));\n }\n else {\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb({ type: \"create\", prop: obj.prop }));\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb({ type: \"create\", prop: obj.prop }));\n }\n}\nconst arrayChange = new Set([\n [].push,\n [].pop,\n [].shift,\n [].unshift,\n [].splice,\n [].reverse,\n [].sort,\n [].copyWithin\n]);\nexport class KeyVal {\n constructor(key, val) {\n this.key = key;\n this.val = val;\n }\n}\nexport class SpreadObject {\n constructor(item) {\n this.item = item;\n }\n}\nexport class SpreadArray {\n constructor(item) {\n this.item = item;\n }\n}\nexport class If {\n constructor(t, f) {\n this.t = t;\n this.f = f;\n }\n}\nconst literalRegex = /(\\$\\$)*(\\$)?\\${(\\d+)}/g;\nexport const ops = new Map();\nexport function addOps(type, cb) {\n ops.set(type, cb);\n}\naddOps(1 /* LispType.Prop */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (a === null) {\n throw new TypeError(`Cannot get property ${b} of null`);\n }\n const type = typeof a;\n if (type === 'undefined' && obj === undefined) {\n let prop = scope.get(b);\n if (prop.context === context.ctx.sandboxGlobal) {\n if (context.ctx.options.audit) {\n context.ctx.auditReport.globalsAccess.add(b);\n }\n const rep = context.ctx.globalsWhitelist.has(context.ctx.sandboxGlobal[b]) ? context.evals.get(context.ctx.sandboxGlobal[b]) : undefined;\n if (rep) {\n done(undefined, rep);\n return;\n }\n }\n if (prop.context && prop.context[b] === globalThis) {\n done(undefined, context.ctx.globalScope.get('this'));\n return;\n }\n done(undefined, prop);\n return;\n }\n else if (a === undefined) {\n throw new SandboxError(\"Cannot get property '\" + b + \"' of undefined\");\n }\n if (type !== 'object') {\n if (type === 'number') {\n a = new Number(a);\n }\n else if (type === 'string') {\n a = new String(a);\n }\n else if (type === 'boolean') {\n a = new Boolean(a);\n }\n }\n else if (typeof a.hasOwnProperty === 'undefined') {\n done(undefined, new Prop(undefined, b));\n return;\n }\n const isFunction = type === 'function';\n let prototypeAccess = isFunction || !(a.hasOwnProperty(b) || typeof b === 'number');\n if (context.ctx.options.audit && prototypeAccess) {\n if (typeof b === 'string') {\n let prot = Object.getPrototypeOf(a);\n do {\n if (prot.hasOwnProperty(b)) {\n if (!context.ctx.auditReport.prototypeAccess[prot.constructor.name]) {\n context.ctx.auditReport.prototypeAccess[prot.constructor.name] = new Set();\n }\n context.ctx.auditReport.prototypeAccess[prot.constructor.name].add(b);\n }\n } while (prot = Object.getPrototypeOf(prot));\n }\n }\n if (prototypeAccess) {\n if (isFunction) {\n if (!['name', 'length', 'constructor'].includes(b) && a.hasOwnProperty(b)) {\n const whitelist = context.ctx.prototypeWhitelist.get(a.prototype);\n const replace = context.ctx.options.prototypeReplacements.get(a);\n if (replace) {\n done(undefined, new Prop(replace(a, true), b));\n return;\n }\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\n }\n else {\n throw new SandboxError(`Static method or property access not permitted: ${a.name}.${b}`);\n }\n }\n }\n else if (b !== 'constructor') {\n let prot = a;\n while (prot = Object.getPrototypeOf(prot)) {\n if (prot.hasOwnProperty(b)) {\n const whitelist = context.ctx.prototypeWhitelist.get(prot);\n const replace = context.ctx.options.prototypeReplacements.get(prot.constuctor);\n if (replace) {\n done(undefined, new Prop(replace(a, false), b));\n return;\n }\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\n break;\n }\n throw new SandboxError(`Method or property access not permitted: ${prot.constructor.name}.${b}`);\n }\n }\n ;\n }\n }\n if (context.evals.has(a[b])) {\n done(undefined, context.evals.get(a[b]));\n return;\n }\n if (a[b] === globalThis) {\n done(undefined, context.ctx.globalScope.get('this'));\n return;\n }\n let g = obj.isGlobal || (isFunction && !sandboxedFunctions.has(a)) || context.ctx.globalsWhitelist.has(a);\n done(undefined, new Prop(a, b, false, g));\n});\naddOps(5 /* LispType.Call */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (context.ctx.options.forbidFunctionCalls)\n throw new SandboxError(\"Function invocations are not allowed\");\n if (typeof a !== 'function') {\n throw new TypeError(`${typeof obj.prop === 'symbol' ? 'Symbol' : obj.prop} is not a function`);\n }\n const vals = b.map((item) => {\n if (item instanceof SpreadArray) {\n return [...item.item];\n }\n else {\n return [item];\n }\n }).flat().map((item) => valueOrProp(item, context));\n if (typeof obj === 'function') {\n done(undefined, obj(...vals));\n return;\n }\n if (obj.context[obj.prop] === JSON.stringify && context.getSubscriptions.size) {\n const cache = new Set();\n const recurse = (x) => {\n if (!x || !(typeof x === 'object') || cache.has(x))\n return;\n cache.add(x);\n for (let y in x) {\n context.getSubscriptions.forEach((cb) => cb(x, y));\n recurse(x[y]);\n }\n };\n recurse(vals[0]);\n }\n if (obj.context instanceof Array && arrayChange.has(obj.context[obj.prop]) && (context.changeSubscriptions.get(obj.context) || context.changeSubscriptionsGlobal.get(obj.context))) {\n let change;\n let changed = false;\n if (obj.prop === \"push\") {\n change = {\n type: \"push\",\n added: vals\n };\n changed = !!vals.length;\n }\n else if (obj.prop === \"pop\") {\n change = {\n type: \"pop\",\n removed: obj.context.slice(-1)\n };\n changed = !!change.removed.length;\n }\n else if (obj.prop === \"shift\") {\n change = {\n type: \"shift\",\n removed: obj.context.slice(0, 1)\n };\n changed = !!change.removed.length;\n }\n else if (obj.prop === \"unshift\") {\n change = {\n type: \"unshift\",\n added: vals\n };\n changed = !!vals.length;\n }\n else if (obj.prop === \"splice\") {\n change = {\n type: \"splice\",\n startIndex: vals[0],\n deleteCount: vals[1] === undefined ? obj.context.length : vals[1],\n added: vals.slice(2),\n removed: obj.context.slice(vals[0], vals[1] === undefined ? undefined : vals[0] + vals[1])\n };\n changed = !!change.added.length || !!change.removed.length;\n }\n else if (obj.prop === \"reverse\" || obj.prop === \"sort\") {\n change = { type: obj.prop };\n changed = !!obj.context.length;\n }\n else if (obj.prop === \"copyWithin\") {\n let len = vals[2] === undefined ? obj.context.length - vals[1] : Math.min(obj.context.length, vals[2] - vals[1]);\n change = {\n type: \"copyWithin\",\n startIndex: vals[0],\n endIndex: vals[0] + len,\n added: obj.context.slice(vals[1], vals[1] + len),\n removed: obj.context.slice(vals[0], vals[0] + len)\n };\n changed = !!change.added.length || !!change.removed.length;\n }\n if (changed) {\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb(change));\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb(change));\n }\n }\n obj.get(context);\n done(undefined, obj.context[obj.prop](...vals));\n});\naddOps(22 /* LispType.CreateObject */, (exec, done, ticks, a, b, obj, context, scope) => {\n let res = {};\n for (let item of b) {\n if (item.key instanceof SpreadObject) {\n res = { ...res, ...item.key.item };\n }\n else {\n res[item.key] = item.val;\n }\n }\n done(undefined, res);\n});\naddOps(6 /* LispType.KeyVal */, (exec, done, ticks, a, b) => done(undefined, new KeyVal(a, b)));\naddOps(12 /* LispType.CreateArray */, (exec, done, ticks, a, b, obj, context, scope) => {\n const items = b.map((item) => {\n if (item instanceof SpreadArray) {\n return [...item.item];\n }\n else {\n return [item];\n }\n }).flat().map((item) => valueOrProp(item, context));\n done(undefined, items);\n});\naddOps(23 /* LispType.Group */, (exec, done, ticks, a, b) => done(undefined, b));\naddOps(35 /* LispType.GlobalSymbol */, (exec, done, ticks, a, b) => {\n switch (b) {\n case 'true': return done(undefined, true);\n case 'false': return done(undefined, false);\n case 'null': return done(undefined, null);\n case 'undefined': return done(undefined, undefined);\n case 'NaN': return done(undefined, NaN);\n case 'Infinity': return done(undefined, Infinity);\n }\n done(new Error('Unknown symbol: ' + b));\n});\naddOps(7 /* LispType.Number */, (exec, done, ticks, a, b) => done(undefined, Number(b)));\naddOps(83 /* LispType.BigInt */, (exec, done, ticks, a, b) => done(undefined, BigInt(b)));\naddOps(2 /* LispType.StringIndex */, (exec, done, ticks, a, b, obj, context) => done(undefined, context.constants.strings[parseInt(b)]));\naddOps(85 /* LispType.RegexIndex */, (exec, done, ticks, a, b, obj, context) => {\n const reg = context.constants.regexes[parseInt(b)];\n if (!context.ctx.globalsWhitelist.has(RegExp)) {\n throw new SandboxError(\"Regex not permitted\");\n }\n else {\n done(undefined, new RegExp(reg.regex, reg.flags));\n }\n});\naddOps(84 /* LispType.LiteralIndex */, (exec, done, ticks, a, b, obj, context, scope) => {\n let item = context.constants.literals[parseInt(b)];\n const [, name, js] = item;\n let found = [];\n let f;\n let resnums = [];\n while (f = literalRegex.exec(name)) {\n if (!f[2]) {\n found.push(js[parseInt(f[3], 10)]);\n resnums.push(f[3]);\n }\n }\n exec(ticks, found, scope, context, (err, processed) => {\n const reses = {};\n if (err) {\n done(err);\n return;\n }\n for (let i in resnums) {\n const num = resnums[i];\n reses[num] = processed[i];\n }\n done(undefined, name.replace(/(\\\\\\\\)*(\\\\)?\\${(\\d+)}/g, (match, $$, $, num) => {\n if ($)\n return match;\n let res = reses[num];\n return ($$ ? $$ : '') + `${valueOrProp(res, context)}`;\n }));\n });\n});\naddOps(18 /* LispType.SpreadArray */, (exec, done, ticks, a, b, obj, context, scope) => {\n done(undefined, new SpreadArray(b));\n});\naddOps(17 /* LispType.SpreadObject */, (exec, done, ticks, a, b, obj, context, scope) => {\n done(undefined, new SpreadObject(b));\n});\naddOps(24 /* LispType.Not */, (exec, done, ticks, a, b) => done(undefined, !b));\naddOps(64 /* LispType.Inverse */, (exec, done, ticks, a, b) => done(undefined, ~b));\naddOps(25 /* LispType.IncrementBefore */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, ++obj.context[obj.prop]);\n});\naddOps(26 /* LispType.IncrementAfter */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop]++);\n});\naddOps(27 /* LispType.DecrementBefore */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, --obj.context[obj.prop]);\n});\naddOps(28 /* LispType.DecrementAfter */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop]--);\n});\naddOps(9 /* LispType.Assign */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] = b);\n});\naddOps(66 /* LispType.AddEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] += b);\n});\naddOps(65 /* LispType.SubractEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] -= b);\n});\naddOps(67 /* LispType.DivideEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] /= b);\n});\naddOps(69 /* LispType.MultiplyEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] *= b);\n});\naddOps(68 /* LispType.PowerEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] **= b);\n});\naddOps(70 /* LispType.ModulusEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] %= b);\n});\naddOps(71 /* LispType.BitNegateEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] ^= b);\n});\naddOps(72 /* LispType.BitAndEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] &= b);\n});\naddOps(73 /* LispType.BitOrEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] |= b);\n});\naddOps(76 /* LispType.ShiftLeftEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] <<= b);\n});\naddOps(75 /* LispType.ShiftRightEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] >>= b);\n});\naddOps(74 /* LispType.UnsignedShiftRightEquals */, (exec, done, ticks, a, b, obj, context) => {\n assignCheck(obj, context);\n done(undefined, obj.context[obj.prop] >>= b);\n});\naddOps(57 /* LispType.LargerThan */, (exec, done, ticks, a, b) => done(undefined, a > b));\naddOps(56 /* LispType.SmallerThan */, (exec, done, ticks, a, b) => done(undefined, a < b));\naddOps(55 /* LispType.LargerEqualThan */, (exec, done, ticks, a, b) => done(undefined, a >= b));\naddOps(54 /* LispType.SmallerEqualThan */, (exec, done, ticks, a, b) => done(undefined, a <= b));\naddOps(52 /* LispType.Equal */, (exec, done, ticks, a, b) => done(undefined, a == b));\naddOps(32 /* LispType.StrictEqual */, (exec, done, ticks, a, b) => done(undefined, a === b));\naddOps(53 /* LispType.NotEqual */, (exec, done, ticks, a, b) => done(undefined, a != b));\naddOps(31 /* LispType.StrictNotEqual */, (exec, done, ticks, a, b) => done(undefined, a !== b));\naddOps(29 /* LispType.And */, (exec, done, ticks, a, b) => done(undefined, a && b));\naddOps(30 /* LispType.Or */, (exec, done, ticks, a, b) => done(undefined, a || b));\naddOps(77 /* LispType.BitAnd */, (exec, done, ticks, a, b) => done(undefined, a & b));\naddOps(78 /* LispType.BitOr */, (exec, done, ticks, a, b) => done(undefined, a | b));\naddOps(33 /* LispType.Plus */, (exec, done, ticks, a, b) => done(undefined, a + b));\naddOps(47 /* LispType.Minus */, (exec, done, ticks, a, b) => done(undefined, a - b));\naddOps(59 /* LispType.Positive */, (exec, done, ticks, a, b) => done(undefined, +b));\naddOps(58 /* LispType.Negative */, (exec, done, ticks, a, b) => done(undefined, -b));\naddOps(48 /* LispType.Divide */, (exec, done, ticks, a, b) => done(undefined, a / b));\naddOps(79 /* LispType.BitNegate */, (exec, done, ticks, a, b) => done(undefined, a ^ b));\naddOps(50 /* LispType.Multiply */, (exec, done, ticks, a, b) => done(undefined, a * b));\naddOps(51 /* LispType.Modulus */, (exec, done, ticks, a, b) => done(undefined, a % b));\naddOps(80 /* LispType.BitShiftLeft */, (exec, done, ticks, a, b) => done(undefined, a << b));\naddOps(81 /* LispType.BitShiftRight */, (exec, done, ticks, a, b) => done(undefined, a >> b));\naddOps(82 /* LispType.BitUnsignedShiftRight */, (exec, done, ticks, a, b) => done(undefined, a >>> b));\naddOps(60 /* LispType.Typeof */, (exec, done, ticks, a, b, obj, context, scope) => {\n exec(ticks, b, scope, context, (e, prop) => {\n done(undefined, typeof valueOrProp(prop, context));\n });\n});\naddOps(62 /* LispType.Instanceof */, (exec, done, ticks, a, b) => done(undefined, a instanceof b));\naddOps(63 /* LispType.In */, (exec, done, ticks, a, b) => done(undefined, a in b));\naddOps(61 /* LispType.Delete */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n if (bobj.context === undefined) {\n done(undefined, true);\n return;\n }\n assignCheck(bobj, context, 'delete');\n if (bobj.isVariable) {\n done(undefined, false);\n return;\n }\n done(undefined, delete bobj.context[bobj.prop]);\n});\naddOps(8 /* LispType.Return */, (exec, done, ticks, a, b, obj, context) => done(undefined, b));\naddOps(34 /* LispType.Var */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n done(undefined, scope.declare(a, VarType.var, b));\n});\naddOps(3 /* LispType.Let */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n done(undefined, scope.declare(a, VarType.let, b, bobj && bobj.isGlobal));\n});\naddOps(4 /* LispType.Const */, (exec, done, ticks, a, b, obj, context, scope, bobj) => {\n done(undefined, scope.declare(a, VarType.const, b));\n});\naddOps(11 /* LispType.ArrowFunction */, (exec, done, ticks, a, b, obj, context, scope) => {\n a = [...a];\n if (typeof obj[2] === \"string\" || obj[2] instanceof CodeString) {\n obj[2] = b = lispifyFunction(new CodeString(obj[2]), context.constants);\n }\n if (a.shift()) {\n done(undefined, createFunctionAsync(a, b, ticks, context, scope));\n }\n else {\n done(undefined, createFunction(a, b, ticks, context, scope));\n }\n});\naddOps(37 /* LispType.Function */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (typeof obj[2] === \"string\" || obj[2] instanceof CodeString) {\n obj[2] = b = lispifyFunction(new CodeString(obj[2]), context.constants);\n }\n let isAsync = a.shift();\n let name = a.shift();\n let func;\n if (isAsync === 88 /* LispType.True */) {\n func = createFunctionAsync(a, b, ticks, context, scope, name);\n }\n else {\n func = createFunction(a, b, ticks, context, scope, name);\n }\n if (name) {\n scope.declare(name, VarType.var, func);\n }\n done(undefined, func);\n});\naddOps(10 /* LispType.InlineFunction */, (exec, done, ticks, a, b, obj, context, scope) => {\n if (typeof obj[2] === \"string\" || obj[2] instanceof CodeString) {\n obj[2] = b = lispifyFunction(new CodeString(obj[2]), context.constants);\n }\n let isAsync = a.shift();\n let name = a.shift();\n if (name) {\n scope = new Scope(scope, {});\n }\n let func;\n if (isAsync === 88 /* LispType.True */) {\n func = createFunctionAsync(a, b, ticks, context, scope, name);\n }\n else {\n func = createFunction(a, b, ticks, context, scope, name);\n }\n if (name) {\n scope.declare(name, VarType.let, func);\n }\n done(undefined, func);\n});\naddOps(38 /* LispType.Loop */, (exec, done, ticks, a, b, obj, context, scope) => {\n const [checkFirst, startInternal, getIterator, startStep, step, condition, beforeStep] = a;\n let loop = true;\n const loopScope = new Scope(scope, {});\n let internalVars = {\n '$$obj': undefined\n };\n const interalScope = new Scope(loopScope, internalVars);\n if (exec === execAsync) {\n (async () => {\n let ad;\n ad = asyncDone((d) => exec(ticks, startStep, loopScope, context, d));\n internalVars['$$obj'] = (ad = asyncDone((d) => exec(ticks, getIterator, loopScope, context, d))).isInstant === true ? ad.instant : (await ad.p).result;\n ad = asyncDone((d) => exec(ticks, startInternal, interalScope, context, d));\n if (checkFirst)\n loop = (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant === true ? ad.instant : (await ad.p).result;\n while (loop) {\n let innerLoopVars = {};\n ad = asyncDone((d) => exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d));\n ad.isInstant === true ? ad.instant : (await ad.p).result;\n let res = await executeTreeAsync(ticks, context, b, [new Scope(loopScope, innerLoopVars)], \"loop\");\n if (res instanceof ExecReturn && res.returned) {\n done(undefined, res);\n return;\n }\n if (res instanceof ExecReturn && res.breakLoop) {\n break;\n }\n ad = asyncDone((d) => exec(ticks, step, interalScope, context, d));\n loop = (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n done();\n })().catch(done);\n }\n else {\n syncDone((d) => exec(ticks, startStep, loopScope, context, d));\n internalVars['$$obj'] = syncDone((d) => exec(ticks, getIterator, loopScope, context, d)).result;\n syncDone((d) => exec(ticks, startInternal, interalScope, context, d));\n if (checkFirst)\n loop = (syncDone((d) => exec(ticks, condition, interalScope, context, d))).result;\n while (loop) {\n let innerLoopVars = {};\n syncDone((d) => exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d));\n let res = executeTree(ticks, context, b, [new Scope(loopScope, innerLoopVars)], \"loop\");\n if (res instanceof ExecReturn && res.returned) {\n done(undefined, res);\n return;\n }\n if (res instanceof ExecReturn && res.breakLoop) {\n break;\n }\n syncDone((d) => exec(ticks, step, interalScope, context, d));\n loop = (syncDone((d) => exec(ticks, condition, interalScope, context, d))).result;\n }\n done();\n }\n});\naddOps(86 /* LispType.LoopAction */, (exec, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch) => {\n if ((inLoopOrSwitch === \"switch\" && a === \"continue\") || !inLoopOrSwitch) {\n throw new SandboxError(\"Illegal \" + a + \" statement\");\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false, a === \"break\", a === \"continue\"));\n});\naddOps(13 /* LispType.If */, (exec, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch) => {\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done);\n});\naddOps(15 /* LispType.InlineIf */, (exec, done, ticks, a, b, obj, context, scope) => {\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done);\n});\naddOps(16 /* LispType.InlineIfCase */, (exec, done, ticks, a, b) => done(undefined, new If(a, b)));\naddOps(14 /* LispType.IfCase */, (exec, done, ticks, a, b) => done(undefined, new If(a, b)));\naddOps(40 /* LispType.Switch */, (exec, done, ticks, a, b, obj, context, scope) => {\n exec(ticks, a, scope, context, (err, toTest) => {\n if (err) {\n done(err);\n return;\n }\n toTest = valueOrProp(toTest, context);\n if (exec === execSync) {\n let res;\n let isTrue = false;\n for (let caseItem of b) {\n if (isTrue || (isTrue = !caseItem[1] || toTest === valueOrProp((syncDone((d) => exec(ticks, caseItem[1], scope, context, d))).result, context))) {\n if (!caseItem[2])\n continue;\n res = executeTree(ticks, context, caseItem[2], [scope], \"switch\");\n if (res.breakLoop)\n break;\n if (res.returned) {\n done(undefined, res);\n return;\n }\n if (!caseItem[1]) { // default case\n break;\n }\n }\n }\n done();\n }\n else {\n (async () => {\n let res;\n let isTrue = false;\n for (let caseItem of b) {\n let ad;\n if (isTrue || (isTrue = !caseItem[1] || toTest === valueOrProp((ad = asyncDone((d) => exec(ticks, caseItem[1], scope, context, d))).isInstant === true ? ad.instant : (await ad.p).result, context))) {\n if (!caseItem[2])\n continue;\n res = await executeTreeAsync(ticks, context, caseItem[2], [scope], \"switch\");\n if (res.breakLoop)\n break;\n if (res.returned) {\n done(undefined, res);\n return;\n }\n if (!caseItem[1]) { // default case\n break;\n }\n }\n }\n done();\n })().catch(done);\n }\n });\n});\naddOps(39 /* LispType.Try */, (exec, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch) => {\n const [exception, catchBody, finallyBody] = b;\n executeTreeWithDone(exec, (err, res) => {\n executeTreeWithDone(exec, (e) => {\n if (e)\n done(e);\n else if (err) {\n let sc = {};\n if (exception)\n sc[exception] = err;\n executeTreeWithDone(exec, done, ticks, context, catchBody, [new Scope(scope)], inLoopOrSwitch);\n }\n else {\n done(undefined, res);\n }\n }, ticks, context, finallyBody, [new Scope(scope, {})]);\n }, ticks, context, a, [new Scope(scope)], inLoopOrSwitch);\n});\naddOps(87 /* LispType.Void */, (exec, done, ticks, a) => { done(); });\naddOps(45 /* LispType.New */, (exec, done, ticks, a, b, obj, context) => {\n if (!context.ctx.globalsWhitelist.has(a) && !sandboxedFunctions.has(a)) {\n throw new SandboxError(`Object construction not allowed: ${a.constructor.name}`);\n }\n done(undefined, new a(...b));\n});\naddOps(46 /* LispType.Throw */, (exec, done, ticks, a, b) => { done(b); });\naddOps(43 /* LispType.Expression */, (exec, done, ticks, a) => done(undefined, a.pop()));\naddOps(0 /* LispType.None */, (exec, done, ticks, a) => done());\nfunction valueOrProp(a, context) {\n if (a instanceof Prop)\n return a.get(context);\n if (a === optional)\n return undefined;\n return a;\n}\nexport function execMany(ticks, exec, tree, done, scope, context, inLoopOrSwitch) {\n if (exec === execSync) {\n _execManySync(ticks, tree, done, scope, context, inLoopOrSwitch);\n }\n else {\n _execManyAsync(ticks, tree, done, scope, context, inLoopOrSwitch).catch(done);\n }\n}\nfunction _execManySync(ticks, tree, done, scope, context, inLoopOrSwitch) {\n let ret = [];\n for (let i = 0; i < tree.length; i++) {\n let res;\n try {\n res = syncDone((d) => execSync(ticks, tree[i], scope, context, d, inLoopOrSwitch)).result;\n }\n catch (e) {\n done(e);\n return;\n }\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\n done(undefined, res);\n return;\n }\n if (isLisp(tree[i]) && tree[i][0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n ret.push(res);\n }\n done(undefined, ret);\n}\nasync function _execManyAsync(ticks, tree, done, scope, context, inLoopOrSwitch) {\n let ret = [];\n for (let i = 0; i < tree.length; i++) {\n let res;\n try {\n let ad;\n res = (ad = asyncDone((d) => execAsync(ticks, tree[i], scope, context, d, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n catch (e) {\n done(e);\n return;\n }\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\n done(undefined, res);\n return;\n }\n if (isLisp(tree[i]) && tree[i][0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n ret.push(res);\n }\n done(undefined, ret);\n}\nexport function asyncDone(callback) {\n let isInstant = false;\n let instant;\n const p = new Promise((resolve, reject) => {\n callback((err, result) => {\n if (err)\n reject(err);\n else {\n isInstant = true;\n instant = result;\n resolve({ result });\n }\n ;\n });\n });\n return {\n isInstant,\n instant,\n p\n };\n}\nexport function syncDone(callback) {\n let result;\n let err;\n callback((e, r) => {\n err = e;\n result = r;\n });\n if (err)\n throw err;\n return { result };\n}\nexport async function execAsync(ticks, tree, scope, context, doneOriginal, inLoopOrSwitch) {\n let done = doneOriginal;\n const p = new Promise((resolve) => {\n done = (e, r) => {\n doneOriginal(e, r);\n resolve();\n };\n });\n if (_execNoneRecurse(ticks, tree, scope, context, done, true, inLoopOrSwitch)) {\n }\n else if (isLisp(tree)) {\n let op = tree[0];\n let obj;\n try {\n let ad;\n obj = (ad = asyncDone((d) => execAsync(ticks, tree[1], scope, context, d, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let a = obj;\n try {\n a = obj instanceof Prop ? obj.get(context) : obj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (op === 20 /* LispType.PropOptional */ || op === 21 /* LispType.CallOptional */) {\n if (a === undefined || a === null) {\n done(undefined, optional);\n return;\n }\n op = op === 20 /* LispType.PropOptional */ ? 1 /* LispType.Prop */ : 5 /* LispType.Call */;\n }\n if (a === optional) {\n if (op === 1 /* LispType.Prop */ || op === 5 /* LispType.Call */) {\n done(undefined, a);\n return;\n }\n else {\n a = undefined;\n }\n }\n let bobj;\n try {\n let ad;\n bobj = (ad = asyncDone((d) => execAsync(ticks, tree[2], scope, context, d, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let b = bobj;\n try {\n b = bobj instanceof Prop ? bobj.get(context) : bobj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (b === optional) {\n b = undefined;\n }\n if (ops.has(op)) {\n try {\n ops.get(op)(execAsync, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch);\n }\n catch (err) {\n done(err);\n }\n }\n else {\n done(new SyntaxError('Unknown operator: ' + op));\n }\n }\n await p;\n}\nexport function execSync(ticks, tree, scope, context, done, inLoopOrSwitch) {\n if (_execNoneRecurse(ticks, tree, scope, context, done, false, inLoopOrSwitch)) {\n }\n else if (isLisp(tree)) {\n let op = tree[0];\n let obj;\n try {\n obj = syncDone((d) => execSync(ticks, tree[1], scope, context, d, inLoopOrSwitch)).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let a = obj;\n try {\n a = obj instanceof Prop ? obj.get(context) : obj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (op === 20 /* LispType.PropOptional */ || op === 21 /* LispType.CallOptional */) {\n if (a === undefined || a === null) {\n done(undefined, optional);\n return;\n }\n op = op === 20 /* LispType.PropOptional */ ? 1 /* LispType.Prop */ : 5 /* LispType.Call */;\n }\n if (a === optional) {\n if (op === 1 /* LispType.Prop */ || op === 5 /* LispType.Call */) {\n done(undefined, a);\n return;\n }\n else {\n a = undefined;\n }\n }\n let bobj;\n try {\n bobj = syncDone((d) => execSync(ticks, tree[2], scope, context, d, inLoopOrSwitch)).result;\n }\n catch (e) {\n done(e);\n return;\n }\n let b = bobj;\n try {\n b = bobj instanceof Prop ? bobj.get(context) : bobj;\n }\n catch (e) {\n done(e);\n return;\n }\n if (b === optional) {\n b = undefined;\n }\n if (ops.has(op)) {\n try {\n ops.get(op)(execSync, done, ticks, a, b, obj, context, scope, bobj, inLoopOrSwitch);\n }\n catch (err) {\n done(err);\n }\n }\n else {\n done(new SyntaxError('Unknown operator: ' + op));\n }\n }\n}\nconst unexecTypes = new Set([\n 11 /* LispType.ArrowFunction */,\n 37 /* LispType.Function */,\n 10 /* LispType.InlineFunction */,\n 38 /* LispType.Loop */,\n 39 /* LispType.Try */,\n 40 /* LispType.Switch */,\n 14 /* LispType.IfCase */,\n 16 /* LispType.InlineIfCase */,\n 60 /* LispType.Typeof */\n]);\nfunction _execNoneRecurse(ticks, tree, scope, context, done, isAsync, inLoopOrSwitch) {\n const exec = isAsync ? execAsync : execSync;\n if (context.ctx.options.executionQuota <= ticks.ticks) {\n if (typeof context.ctx.options.onExecutionQuotaReached === 'function' && context.ctx.options.onExecutionQuotaReached(ticks, scope, context, tree)) {\n }\n else {\n done(new SandboxError(\"Execution quota exceeded\"));\n return;\n }\n }\n ticks.ticks++;\n currentTicks = ticks;\n if (tree instanceof Prop) {\n try {\n done(undefined, tree.get(context));\n }\n catch (err) {\n done(err);\n }\n }\n else if (tree === optional) {\n done();\n }\n else if (Array.isArray(tree) && !isLisp(tree)) {\n if (tree[0] === 0 /* LispType.None */) {\n done();\n }\n else {\n execMany(ticks, exec, tree, done, scope, context, inLoopOrSwitch);\n }\n }\n else if (!isLisp(tree)) {\n done(undefined, tree);\n }\n else if (tree[0] === 42 /* LispType.Block */) {\n execMany(ticks, exec, tree[1], done, scope, context, inLoopOrSwitch);\n }\n else if (tree[0] === 44 /* LispType.Await */) {\n if (!isAsync) {\n done(new SandboxError(\"Illegal use of 'await', must be inside async function\"));\n }\n else if (context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\n execAsync(ticks, tree[1], scope, context, async (e, r) => {\n if (e)\n done(e);\n else\n try {\n done(undefined, await valueOrProp(r, context));\n }\n catch (err) {\n done(err);\n }\n }, inLoopOrSwitch).catch(done);\n }\n else {\n done(new SandboxError('Async/await is not permitted'));\n }\n }\n else if (unexecTypes.has(tree[0])) {\n try {\n ops.get(tree[0])(exec, done, ticks, tree[1], tree[2], tree, context, scope, undefined, inLoopOrSwitch);\n }\n catch (err) {\n done(err);\n }\n }\n else {\n return false;\n }\n return true;\n}\nexport function executeTree(ticks, context, executionTree, scopes = [], inLoopOrSwitch) {\n return syncDone((done) => executeTreeWithDone(execSync, done, ticks, context, executionTree, scopes, inLoopOrSwitch)).result;\n}\nexport async function executeTreeAsync(ticks, context, executionTree, scopes = [], inLoopOrSwitch) {\n let ad;\n return (ad = asyncDone((done) => executeTreeWithDone(execAsync, done, ticks, context, executionTree, scopes, inLoopOrSwitch))).isInstant === true ? ad.instant : (await ad.p).result;\n}\nfunction executeTreeWithDone(exec, done, ticks, context, executionTree, scopes = [], inLoopOrSwitch) {\n if (!executionTree) {\n done();\n return;\n }\n if (!(executionTree instanceof Array)) {\n throw new SyntaxError('Bad execution tree');\n }\n let scope = context.ctx.globalScope;\n let s;\n while (s = scopes.shift()) {\n if (typeof s !== \"object\")\n continue;\n if (s instanceof Scope) {\n scope = s;\n }\n else {\n scope = new Scope(scope, s, s instanceof LocalScope ? undefined : null);\n }\n }\n if (context.ctx.options.audit && !context.ctx.auditReport) {\n context.ctx.auditReport = {\n globalsAccess: new Set(),\n prototypeAccess: {},\n };\n }\n if (exec === execSync) {\n _executeWithDoneSync(done, ticks, context, executionTree, scope, inLoopOrSwitch);\n }\n else {\n _executeWithDoneAsync(done, ticks, context, executionTree, scope, inLoopOrSwitch).catch(done);\n }\n}\nfunction _executeWithDoneSync(done, ticks, context, executionTree, scope, inLoopOrSwitch) {\n if (!(executionTree instanceof Array))\n throw new SyntaxError('Bad execution tree');\n let i = 0;\n for (i = 0; i < executionTree.length; i++) {\n let res;\n let err;\n const current = executionTree[i];\n try {\n execSync(ticks, current, scope, context, (e, r) => {\n err = e;\n res = r;\n }, inLoopOrSwitch);\n }\n catch (e) {\n err = e;\n }\n if (err) {\n done(err);\n return;\n }\n if (res instanceof ExecReturn) {\n done(undefined, res);\n return;\n }\n if (isLisp(current) && current[0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\n}\nasync function _executeWithDoneAsync(done, ticks, context, executionTree, scope, inLoopOrSwitch) {\n if (!(executionTree instanceof Array))\n throw new SyntaxError('Bad execution tree');\n let i = 0;\n for (i = 0; i < executionTree.length; i++) {\n let res;\n let err;\n const current = executionTree[i];\n try {\n await execAsync(ticks, current, scope, context, (e, r) => {\n err = e;\n res = r;\n }, inLoopOrSwitch);\n }\n catch (e) {\n err = e;\n }\n if (err) {\n done(err);\n return;\n }\n if (res instanceof ExecReturn) {\n done(undefined, res);\n return;\n }\n if (isLisp(current) && current[0] === 8 /* LispType.Return */) {\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\n return;\n }\n }\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\n}\n","import { sandboxFunction, sandboxedEval, sandboxedSetTimeout, sandboxedSetInterval, executeTree, executeTreeAsync, ops, assignCheck, execMany, execAsync, execSync, asyncDone, Scope, FunctionScope, LocalScope, syncDone } from \"./executor.js\";\nimport { parse, expectTypes, setLispType } from \"./parser.js\";\nexport { expectTypes, setLispType, ops as executionOps, assignCheck, execMany, execAsync, execSync, asyncDone, syncDone, executeTree, executeTreeAsync, FunctionScope, LocalScope, };\nexport class SandboxGlobal {\n constructor(globals) {\n if (globals === globalThis)\n return globalThis;\n for (let i in globals) {\n this[i] = globals[i];\n }\n }\n}\nexport class ExecContext {\n constructor(ctx, constants, tree, getSubscriptions, setSubscriptions, changeSubscriptions, setSubscriptionsGlobal, changeSubscriptionsGlobal, evals, registerSandboxFunction) {\n this.ctx = ctx;\n this.constants = constants;\n this.tree = tree;\n this.getSubscriptions = getSubscriptions;\n this.setSubscriptions = setSubscriptions;\n this.changeSubscriptions = changeSubscriptions;\n this.setSubscriptionsGlobal = setSubscriptionsGlobal;\n this.changeSubscriptionsGlobal = changeSubscriptionsGlobal;\n this.evals = evals;\n this.registerSandboxFunction = registerSandboxFunction;\n }\n}\nfunction subscribeSet(obj, name, callback, context) {\n const names = context.setSubscriptions.get(obj) || new Map();\n context.setSubscriptions.set(obj, names);\n const callbacks = names.get(name) || new Set();\n names.set(name, callbacks);\n callbacks.add(callback);\n let changeCbs;\n if (obj && obj[name] && typeof obj[name] === \"object\") {\n changeCbs = context.changeSubscriptions.get(obj[name]) || new Set();\n changeCbs.add(callback);\n context.changeSubscriptions.set(obj[name], changeCbs);\n }\n return {\n unsubscribe: () => {\n callbacks.delete(callback);\n changeCbs?.delete(callback);\n }\n };\n}\nexport default class Sandbox {\n constructor(options) {\n this.setSubscriptions = new WeakMap();\n this.changeSubscriptions = new WeakMap();\n this.sandboxFunctions = new WeakMap();\n options = Object.assign({\n audit: false,\n forbidFunctionCalls: false,\n forbidFunctionCreation: false,\n globals: Sandbox.SAFE_GLOBALS,\n prototypeWhitelist: Sandbox.SAFE_PROTOTYPES,\n prototypeReplacements: new Map(),\n }, options || {});\n const sandboxGlobal = new SandboxGlobal(options.globals);\n this.context = {\n sandbox: this,\n globalsWhitelist: new Set(Object.values(options.globals)),\n prototypeWhitelist: new Map([...options.prototypeWhitelist].map((a) => [a[0].prototype, a[1]])),\n options,\n globalScope: new Scope(null, options.globals, sandboxGlobal),\n sandboxGlobal\n };\n this.context.prototypeWhitelist.set(Object.getPrototypeOf([][Symbol.iterator]()), new Set());\n }\n static get SAFE_GLOBALS() {\n return {\n Function,\n console: {\n debug: console.debug,\n error: console.error,\n info: console.info,\n log: console.log,\n table: console.table,\n warn: console.warn\n },\n isFinite,\n isNaN,\n parseFloat,\n parseInt,\n decodeURI,\n decodeURIComponent,\n encodeURI,\n encodeURIComponent,\n escape,\n unescape,\n Boolean,\n Number,\n BigInt,\n String,\n Object,\n Array,\n Symbol,\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Promise,\n Intl,\n JSON,\n Math,\n Date,\n RegExp\n };\n }\n static get SAFE_PROTOTYPES() {\n let protos = [\n SandboxGlobal,\n Function,\n Boolean,\n Number,\n BigInt,\n String,\n Date,\n Error,\n Array,\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Promise,\n Symbol,\n Date,\n RegExp\n ];\n let map = new Map();\n protos.forEach((proto) => {\n map.set(proto, new Set());\n });\n map.set(Object, new Set([\n 'entries',\n 'fromEntries',\n 'getOwnPropertyNames',\n 'is',\n 'keys',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf',\n 'values'\n ]));\n return map;\n }\n subscribeGet(callback, context) {\n context.getSubscriptions.add(callback);\n return { unsubscribe: () => context.getSubscriptions.delete(callback) };\n }\n subscribeSet(obj, name, callback, context) {\n return subscribeSet(obj, name, callback, context);\n }\n subscribeSetGlobal(obj, name, callback) {\n return subscribeSet(obj, name, callback, this);\n }\n static audit(code, scopes = []) {\n const globals = {};\n for (let i of Object.getOwnPropertyNames(globalThis)) {\n globals[i] = globalThis[i];\n }\n const sandbox = new Sandbox({\n globals,\n audit: true,\n });\n return sandbox.executeTree(sandbox.createContext(sandbox.context, parse(code)), scopes);\n }\n static parse(code) {\n return parse(code);\n }\n createContext(context, executionTree) {\n const evals = new Map();\n const execContext = new ExecContext(context, executionTree.constants, executionTree.tree, new Set(), new WeakMap(), new WeakMap(), this.setSubscriptions, this.changeSubscriptions, evals, (fn) => this.sandboxFunctions.set(fn, execContext));\n const func = sandboxFunction(execContext);\n evals.set(Function, func);\n evals.set(eval, sandboxedEval(func));\n evals.set(setTimeout, sandboxedSetTimeout(func));\n evals.set(setInterval, sandboxedSetInterval(func));\n return execContext;\n }\n getContext(fn) {\n return this.sandboxFunctions.get(fn);\n }\n executeTree(context, scopes = []) {\n return executeTree({\n ticks: BigInt(0),\n }, context, context.tree, scopes);\n }\n executeTreeAsync(context, scopes = []) {\n return executeTreeAsync({\n ticks: BigInt(0),\n }, context, context.tree, scopes);\n }\n compile(code, optimize = false) {\n const parsed = parse(code, optimize);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTree(context, [...scopes]).result };\n };\n return exec;\n }\n ;\n compileAsync(code, optimize = false) {\n const parsed = parse(code, optimize);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result) };\n };\n return exec;\n }\n ;\n compileExpression(code, optimize = false) {\n const parsed = parse(code, optimize, true);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTree(context, [...scopes]).result };\n };\n return exec;\n }\n compileExpressionAsync(code, optimize = false) {\n const parsed = parse(code, optimize, true);\n const exec = (...scopes) => {\n const context = this.createContext(this.context, parsed);\n return { context, run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result) };\n };\n return exec;\n }\n}\n","// import {\n// ErrorCode,\n// getErrorMsg,\n// getWarningMsg,\n// WarningCode,\n// } from '../../constant/logCode'\n//\n// const createContext = (globalData: Record<string, unknown>) => {\n// const iframe = document.createElement('iframe')\n// iframe.style.display = 'none'\n// if (!document || !document.body) {\n// console.error(getErrorMsg(ErrorCode.NO_DOCUMENT_BODY))\n// }\n// document.body.appendChild(iframe)\n// const iframeWindow = iframe.contentWindow\n// if (iframeWindow) {\n// // TODO: 确认是否需要该代码,parent 置为空是为了解决什么问题\n// // @ts-ignore\n// ;(iframeWindow!.parent as any) = null\n// Object.keys(globalData).forEach((key) => {\n// iframeWindow[key] = globalData[key]\n// })\n// }\n// return iframeWindow\n// }\n//\n// const runInContext = (code: string, context: any) => {\n// try {\n// const iframeEval = context.eval\n// iframeEval.call(context, code)\n// console.log('context --->>> ===>>>', context)\n// if (context.frameElement) {\n// document.body.removeChild(context.frameElement)\n// }\n// } catch (e) {\n// console.warn(getWarningMsg(WarningCode.EXPRESSION_EXEC_ERROR), {\n// code,\n// context,\n// e,\n// })\n// }\n// }\n//\n// const runInBrowserContext = async (\n// code: string,\n// globalData = {},\n// ): Promise<any> => {\n// const context = createContext(globalData)\n// runInContext(code, context)\n// return context\n// }\n//\n// export { createContext, runInContext, runInBrowserContext }\n\nimport Sandbox from '@nyariv/sandboxjs'\n\nexport const runInBrowserContext = async (\n code: string,\n globalData = {},\n): Promise<any> => {\n try {\n const sandbox = new Sandbox()\n const exec = sandbox.compile(code)\n return await exec(globalData).run()\n } catch (e) {\n console.log('runInBrowserContext error --->>>', e)\n }\n}\n","import { runInBrowserContext } from './browserVm'\n\nconst isInBrowser = typeof window === 'object' && window.window === window\n\nconst globalScope: any = (() => {\n if (isInBrowser) {\n return window\n }\n\n if (typeof self === 'object' && self.self === self) {\n return self\n }\n\n if (typeof globalThis === 'object') {\n return globalThis\n }\n\n return {\n eval: () => undefined,\n } as Record<string, unknown>\n})()\n\nconst getExpressionResult = async (code: string, context: any) => {\n const r = await runInBrowserContext(code, context)\n return r\n}\n\nexport { isInBrowser, globalScope, getExpressionResult }\n","import { Engine } from '..'\nimport { ActionStatus } from '../constant'\nimport { getExpressionResult } from '../platform'\n\nexport interface IBaseNodeProps {\n nodeConfig: BaseNode.NodeConfig\n context: Record<string, any>\n globalData: Record<string, unknown>\n}\n\nexport class BaseNode implements BaseNode.Base {\n readonly baseType: string\n static nodeTypeName = 'BaseNode'\n\n /**\n * 节点的入边\n */\n incoming: BaseNode.IncomingConfig[]\n /**\n * 节点的出边\n */\n outgoing: BaseNode.OutgoingConfig[]\n /**\n * 节点的属性\n */\n properties?: Record<string, unknown>\n nodeId: Engine.Key\n type: string\n /**\n * 节点的上下文,是调用流程时传入的上下文\n */\n context: Record<string, any>\n /**\n * 节点的全局数据,是调用流程时传入的全局数据\n * 在计算表达式时,即基于全局数据进行计算\n */\n globalData: Record<string, unknown>\n\n constructor({ nodeConfig, context, globalData }: IBaseNodeProps) {\n const { outgoing, incoming, id, type, properties } = nodeConfig\n this.baseType = 'base'\n this.outgoing = outgoing\n this.incoming = incoming\n this.nodeId = id\n this.type = type\n this.properties = properties\n\n this.context = context\n this.globalData = globalData\n }\n\n /**\n * 节点的执行逻辑\n * @overridable 可以自定义节点重写此方法\n * @param param.executionId 流程执行记录 ID\n * @param param.actionId 此节点执行记录 ID\n * @param param.nodeId 节点 ID\n * @return 返回下一步的执行参数\n * 当不返回时,表示此节点执行成功,流程会继续执行下一步。\n * 当返回时,返回格式为\n */\n public async action(\n param?: Engine.ActionParam,\n ): Promise<BaseNode.ActionResult | undefined> {\n console.log('action param --->>>', param)\n return undefined\n }\n\n /**\n * 节点重新恢复执行的逻辑\n * @overridable 可以自定义节点重写此方法\n * @param params.executionId 流程执行记录 ID\n * @param params.actionId 此节点执行记录 ID\n * @param params.nodeId 节点 ID\n */\n public async onResume(params: Engine.ResumeParam): Promise<void> {\n console.log('onResume params --->>>', params)\n return undefined\n }\n\n /**\n * 判断该节点是否满足条件\n */\n private async isPass(properties?: Record<string, unknown>): Promise<boolean> {\n if (!properties) return true\n\n const { conditionExpression } = properties\n if (!conditionExpression) return true\n\n try {\n // bug:uuid 创建的 NodeId 为 xxxx-xxxx-xxxx-zzzz 格式,eval 执行时会将 - 识别为数学减号,导致执行报错\n // 解决方案: 赋值变量直接命名为 isPassResult, 因为每次执行 getExpressionResult 时,都会重新射程一个 context\n return await getExpressionResult(\n `\n const isPassResult = (${conditionExpression})\n return isPassResult\n `,\n {\n ...this.globalData,\n },\n )\n } catch (error) {\n return false\n }\n }\n\n /**\n * 获取当前节点执行的下一个节点\n */\n private async getOutgoing(): Promise<BaseNode.OutgoingConfig[]> {\n const outgoing: BaseNode.OutgoingConfig[] = []\n const expressions: any = []\n for (const item of this.outgoing) {\n const { properties } = item\n expressions.push(this.isPass(properties))\n }\n\n const result = await Promise.all(expressions)\n result.forEach((item, index) => {\n const out = this.outgoing[index]\n out.result = item\n outgoing.push(out)\n })\n return outgoing\n }\n\n /**\n * 节点的每一次执行都会生成一个唯一的 actionId\n */\n public async execute(\n params: Engine.ExecParam,\n ): Promise<Engine.NextActionParam> {\n const { executionId, actionId } = params\n const res = await this.action({\n nodeId: this.nodeId,\n executionId,\n actionId,\n })\n const status = res ? res.status : 'success'\n\n if (status === ActionStatus.SUCCESS) {\n const outgoing = await this.getOutgoing()\n const detail = res ? res.detail : {}\n params.next({\n status: ActionStatus.SUCCESS,\n detail,\n nodeId: this.nodeId,\n nodeType: this.type,\n properties: this.properties,\n executionId,\n actionId,\n outgoing,\n })\n }\n\n return {\n status,\n detail: res?.detail,\n executionId,\n actionId,\n nodeId: this.nodeId,\n nodeType: this.type,\n properties: this.properties,\n outgoing: [],\n }\n }\n\n public async resume(params: Engine.ExecResumeParam): Promise<undefined> {\n const outgoing = await this.getOutgoing()\n await this.onResume({\n executionId: params.executionId,\n actionId: params.actionId,\n nodeId: params.nodeId,\n data: params.data,\n })\n\n params.next({\n executionId: params.executionId,\n actionId: params.actionId,\n nodeId: this.nodeId,\n nodeType: this.type,\n properties: this.properties,\n outgoing,\n status: ActionStatus.SUCCESS,\n })\n return undefined\n }\n}\n\nexport namespace BaseNode {\n export interface Base {\n incoming: IncomingConfig[]\n outgoing: OutgoingConfig[]\n properties?: Record<string, unknown>\n nodeId: Engine.Key\n type: string\n readonly baseType: string\n execute(actionParam: Engine.ActionParam): Promise<Engine.NextActionParam>\n }\n\n export type IncomingConfig = {\n id: Engine.Key\n source: string\n properties?: Record<string, unknown>\n }\n\n export type OutgoingConfig = {\n id: Engine.Key\n target: string\n properties?: Record<string, unknown>\n result?: string | boolean\n }\n\n export type NodeConfig = {\n id: Engine.Key\n type: string\n properties?: Record<string, unknown>\n incoming: IncomingConfig[]\n outgoing: OutgoingConfig[]\n }\n\n export type NodeConstructor = {\n new (config: {\n nodeConfig: NodeConfig\n context: Record<string, any>\n globalData: Record<string, unknown>\n }): BaseNode\n }\n\n export type ActionResult = {\n status: ActionStatus\n detail?: Record<string, unknown>\n }\n}\n\nexport default BaseNode\n","import BaseNode from './base'\n\nexport default class StartNode extends BaseNode {\n readonly baseType = 'start'\n static nodeTypeName = 'StartNode'\n}\n\nexport { StartNode }\n","import BaseNode from './base'\n\nexport default class TaskNode extends BaseNode {\n readonly baseType = 'task'\n static nodeTypeName = 'TaskNode'\n}\n\nexport { TaskNode }\n","export interface EventType {\n readonly callback: (params?: any) => void\n readonly once: boolean\n}\n\nexport type EventArgs = Record<string, unknown>\nexport type EventsType = Record<string, EventType[]>\nexport type CallbackType = (...args: unknown[]) => void\n\nexport default class EventEmitter {\n private _events: EventsType\n constructor() {\n this._events = {}\n }\n\n /**\n * 添加一个监听事件\n * @param evtKey 事件名称\n * @param callback 回调方法\n * @param once 是否触发一次\n * @returns 当前 EventEmitter 实例\n */\n on(evtKey: string, callback: CallbackType, once?: boolean) {\n evtKey = evtKey.trim()\n if (!this._events[evtKey]) {\n this._events[evtKey] = []\n }\n this._events[evtKey].push({\n callback,\n once: !!once,\n })\n }\n\n /**\n * 取消监听一个事件,或者一个 Channel\n * @param evtKey\n * @param callback\n */\n off(evtKey: string, callback?: CallbackType) {\n if (!evtKey) {\n // evtKey 为空全部清除\n this._events = {}\n }\n if (!callback) {\n // evtKey 存在,callback 为空,清除事件所有方法\n delete this._events[evtKey]\n } else {\n // evtKey 存在,callback 存在,清除匹配的\n const events = this._events[evtKey] || []\n let { length } = events\n for (let i = 0; i < length; i++) {\n if (events[i].callback === callback) {\n events.splice(i, 1)\n length--\n i--\n }\n }\n if (events.length === 0) {\n delete this._events[evtKey]\n }\n }\n }\n\n /**\n * 主动触发事件\n * @param evtKey 触发事件名称\n * @param eventArgs 事件参数\n */\n emit(evtKey: string, eventArgs: EventArgs) {\n const events = this._events[evtKey] || []\n // 实际的处理 emit 方法\n const doEmit = (es) => {\n let { length } = es\n for (let i = 0; i < length; i++) {\n if (!es[i]) {\n // eslint-disable-next-line no-continue\n continue\n }\n const { callback, once } = es[i]\n if (once) {\n es.splice(i, 1)\n if (es.length === 0) {\n delete this._events[evtKey]\n }\n length--\n i--\n }\n callback.apply(this, [eventArgs])\n }\n }\n doEmit(events)\n }\n\n /**\n * 获取当前所有事件\n * @returns _events\n */\n getEvents() {\n return this._events\n }\n}\n\nexport { EventEmitter }\n","// 判断当前环境是否为服务端\n// const isServer = typeof window === undefined;\n\n// const isServer = process.env.BROWSER === true;\n\nconst isInBrowser = typeof window === 'object' && window.window === window\n\nconst isInNodeJS = typeof global === 'object' && global.global === global\n\nconst isInWebWorker =\n !isInBrowser && typeof self === 'object' && self.constructor\n\nconst globalScope: any = (() => {\n if (isInBrowser) {\n return window\n }\n\n if (typeof self === 'object' && self.self === self) {\n return self\n }\n\n if (isInNodeJS) {\n return global\n }\n\n if (typeof globalThis === 'object') {\n return globalThis\n }\n\n return {\n eval: () => undefined,\n } as Record<string, unknown>\n})()\n\nexport {\n // 环境相关方法\n globalScope,\n isInWebWorker,\n isInBrowser,\n isInNodeJS,\n}\n","/**\n * 存储执行记录\n */\nimport { globalScope } from './global'\n\nif (!globalScope.sessionStorage) {\n const storage = {\n data: {} as Record<string, unknown>,\n\n setItem(key, value) {\n storage.data[key] = value\n },\n\n getItem(key) {\n return storage.data[key]\n },\n\n removeItem(key) {\n delete storage.data[key]\n },\n\n clear() {\n storage.data = {}\n },\n }\n\n globalScope.sessionStorage = storage\n}\n\nexport default {\n setItem(key, value) {\n if (typeof value === 'object') {\n value = JSON.stringify(value)\n }\n\n globalScope.sessionStorage.setItem(key, value)\n },\n\n getItem(key) {\n const value = globalScope.sessionStorage.getItem(key)\n try {\n return JSON.parse(value)\n } catch (error) {\n return value\n }\n },\n\n removeItem(key) {\n globalScope.sessionStorage.removeItem(key)\n },\n\n clear() {\n globalScope.sessionStorage.clear()\n },\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\n\nfunction rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n _crypto.default.randomFillSync(rnds8Pool);\n\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.default)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.URL = exports.DNS = void 0;\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction _default(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction md5(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('md5').update(bytes).digest();\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _crypto = _interopRequireDefault(require(\"crypto\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction sha1(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return _crypto.default.createHash('sha1').update(bytes).digest();\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nvar _default = version;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function () {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function () {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function () {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function () {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function () {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function () {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","import { v4 as uuidV4 } from 'uuid'\n\nexport const createExecId = (): string => {\n const uuid = uuidV4()\n return `exec-${uuid}`\n}\n\nexport const createActionId = (): string => {\n const uuid = uuidV4()\n return `action-${uuid}`\n}\n\nexport const createEngineId = (): string => {\n const uuid = uuidV4()\n return `engine-${uuid}`\n}\n","import { Engine } from '.'\nimport Recorder from './recorder'\nimport FlowModel from './FlowModel'\nimport EventEmitter from './EventEmitter'\nimport { createActionId } from './utils'\nimport {\n EVENT_INSTANCE_ERROR,\n EVENT_INSTANCE_COMPLETE,\n EVENT_INSTANCE_INTERRUPTED,\n FlowStatus,\n} from './constant'\n\n/**\n * 调度器\n * 通过一个队列维护需要执行的节点,一个集合维护正在执行的节点\n */\nexport class Scheduler extends EventEmitter {\n /**\n * 当前需要执行的节点队列\n */\n nodeQueueMap: Map<Engine.Key, Engine.NodeParam[]>\n /**\n * 当前正在执行的节点集合\n * 在每个节点执行完成后,会从集合中删除\n * 同时会判断次集合中是否还存在和此节点相同的 executionId,如果不存在,说明该流程已经执行完成\n */\n actionRunningMap: Map<Engine.Key, Scheduler.ActionParamMap>\n /**\n * 流程模型,用于创建节点模型\n */\n flowModel: FlowModel\n /**\n * 执行记录存储器\n * 用于存储节点执行的结果\n */\n recorder?: Recorder\n\n constructor(config: Scheduler.ISchedulerProps) {\n super()\n this.nodeQueueMap = new Map()\n this.actionRunningMap = new Map()\n this.flowModel = config.flowModel\n this.recorder = config.recorder\n }\n\n /**\n * 添加一个任务到队列中。\n * 1. 由流程模型将所有的开始及诶带你添加到队列中\n * 2. 当一个节点执行完成后,将后续的节点添加到队列中\n * @param nodeParam\n */\n public addAction(nodeParam: Engine.NodeParam) {\n const { executionId } = nodeParam\n if (!this.nodeQueueMap.has(executionId)) {\n this.nodeQueueMap.set(executionId, [])\n }\n\n const currentActionQueue: Engine.NodeParam[] | undefined =\n this.nodeQueueMap.get(executionId)\n if (currentActionQueue) {\n currentActionQueue.push(nodeParam)\n }\n console.log('this.nodeQueueMap--->>>', this.nodeQueueMap)\n }\n\n private pushActionToRunningMap(actionParam: Scheduler.ActionParam) {\n const { executionId, actionId } = actionParam\n if (!this.actionRunningMap.has(executionId)) {\n const runningMap: Scheduler.ActionParamMap = new Map()\n this.actionRunningMap.set(executionId, runningMap)\n }\n if (actionId) {\n this.actionRunningMap.get(executionId)?.set(actionId, actionParam)\n }\n }\n\n private removeActionFromRunningMap(actionParam: Engine.ActionParam) {\n const { executionId, actionId } = actionParam\n if (!actionId) return\n\n const runningMap = this.actionRunningMap.get(executionId)\n if (!runningMap) return\n\n runningMap.delete(actionId)\n }\n\n /**\n * 为了防止多次添加导致\n * @param actionParam\n */\n private saveActionResult(actionParam: Engine.NextActionParam) {\n this.recorder?.addActionRecord({\n timestamp: Date.now(),\n ...actionParam,\n })\n }\n\n private hasRunningAction(executionId: Engine.Key): boolean {\n const runningMap = this.actionRunningMap.get(executionId)\n if (!runningMap) return false\n if (runningMap.size === 0) {\n this.actionRunningMap.delete(executionId)\n return false\n }\n return true\n }\n\n /**\n * 调度器执行下一个任务\n * 1. 提供给流程模型,用户开始执行第一个任务\n * 2. 内部任务执行完成后,调用此方法继续执行下一个任务\n * 3. 当判断没有可以继续执行的任务后,触发流程结束事件\n * @param runParam\n */\n public run(runParam: Scheduler.ActionParam) {\n const nodeQueue: Engine.NodeParam[] | undefined = this.nodeQueueMap.get(\n runParam.executionId,\n )\n\n // 将同一个 executionId 当前待执行的节点一起执行\n // 避免出现某一个节点执行时间过长,导致其他节点等待时间过长\n while (nodeQueue?.length) {\n const currentNode = nodeQueue.pop()\n const actionId = createActionId()\n const actionParam: Engine.ActionParam = {\n ...(currentNode as Engine.NodeParam),\n actionId,\n }\n this.pushActionToRunningMap(actionParam)\n this.exec(actionParam)\n }\n\n if (!this.hasRunningAction(runParam.executionId)) {\n // 当一个流程在 nodeQueueMap 和 actionRunningMap 中都不存在执行的节点时,说明这个流程已经执行完成。\n this.emit(EVENT_INSTANCE_COMPLETE, {\n ...runParam,\n status: FlowStatus.COMPLETED,\n })\n }\n }\n\n private next(data: Engine.NextActionParam) {\n if (data.outgoing && data.outgoing.length > 0) {\n data.outgoing.forEach((item) => {\n if (item.result) {\n this.addAction({\n executionId: data.executionId,\n nodeId: item.target,\n })\n }\n })\n }\n\n this.saveActionResult(data)\n this.removeActionFromRunningMap(data)\n this.run(data)\n }\n\n /**\n * 恢复某个任务的执行\n * 可以自定义节点手动实现流程中断,然后通过此方法恢复流程的执行\n * @param resumeParam\n */\n public async resume(resumeParam: Engine.ResumeParam) {\n const { executionId, actionId, nodeId } = resumeParam\n this.pushActionToRunningMap({\n executionId,\n actionId,\n nodeId,\n })\n\n const model = this.flowModel.createAction(nodeId)\n await model?.resume({\n ...resumeParam,\n next: this.next.bind(this),\n })\n }\n\n // 中断时,触发事件\n private interrupted(execResult: Engine.NextActionParam) {\n this.emit(EVENT_INSTANCE_INTERRUPTED, execResult)\n }\n // 报错时,触发事件\n private error(execResult: Engine.NextActionParam) {\n this.emit(EVENT_INSTANCE_ERROR, execResult)\n }\n\n private async exec(actionParam: Engine.ActionParam) {\n const { executionId, actionId, nodeId } = actionParam\n const model = this.flowModel.createAction(nodeId)\n const execResult = await model?.execute({\n executionId,\n actionId,\n nodeId,\n next: this.next.bind(this),\n })\n\n if (execResult) {\n const { nodeType, properties, outgoing, status, detail } = execResult\n const actionResult: Engine.NextActionParam = {\n // actionParam\n executionId,\n actionId,\n nodeId,\n // execResult\n nodeType,\n properties,\n outgoing,\n status,\n detail,\n }\n if (execResult?.status === FlowStatus.INTERRUPTED) {\n this.interrupted(execResult)\n this.saveActionResult(actionResult)\n this.removeActionFromRunningMap(actionParam)\n }\n\n if (execResult?.status === FlowStatus.ERROR) {\n this.error(execResult)\n this.saveActionResult(actionResult)\n this.removeActionFromRunningMap(actionParam)\n }\n }\n // TODO: 考虑停下所有的任务\n }\n}\n\nexport namespace Scheduler {\n export type ActionParam = {\n executionId: Engine.Key\n actionId?: Engine.Key\n nodeId?: Engine.Key\n data?: Record<string, unknown>\n [key: string]: unknown\n }\n export type ActionParamMap = Map<Engine.Key, ActionParam>\n\n export interface ISchedulerProps {\n flowModel: FlowModel\n recorder?: Recorder\n }\n}\n\nexport default Scheduler\n","import { Engine } from '.'\nimport { Recorder } from './recorder'\nimport { Scheduler } from './Scheduler'\nimport { BaseNode } from './nodes'\nimport { createExecId } from './utils'\nimport {\n EVENT_INSTANCE_COMPLETE,\n EVENT_INSTANCE_INTERRUPTED,\n EVENT_INSTANCE_ERROR,\n ErrorCode,\n getErrorMsg,\n} from './constant'\n\nexport class FlowModel {\n /**\n * 流程支持的节点类型.\n */\n nodeModelMap: Map<string, BaseNode.NodeConstructor>\n /**\n * 调度器,用于调度节点执行\n */\n scheduler: Scheduler\n /**\n * 待执行的队列,当流程正在执行时,如果再次触发执行。那么会将执行参数放到队列中,等待上一次执行完成后再执行。\n */\n executeList: Partial<FlowModel.ExecParam>[]\n /**\n * 当前正在执行的任务。当监听到调度器执行完成时,触发执行参数中的回调,告知外部执行完成。\n */\n executingInstance?: FlowModel.ExecParam | null\n /**\n * 当前流程模型中的所有节点,边会被转换成节点的 incoming 和 outgoing 属性\n */\n nodeConfigMap: Map<Engine.Key, BaseNode.NodeConfig> = new Map()\n /**\n * 当流程正在执行时,如果再次触发执行。那么会将执行参数放入到队列中,等待上一次执行完成后再执行。\n */\n isRunning: boolean\n /**\n * 开始接地那类型,在执行流程时,会从这些节点开始执行\n */\n startNodeType: string\n /**\n * 当前流程中开始节点组成的数组\n */\n startNodes: BaseNode.NodeConfig[] = []\n /**\n * 用于存储全局数据,最终会传递给每个节点\n */\n globalData: Record<string, unknown> = {}\n\n /**\n * 外部传入的上下文,最终会传递给每个节点\n * 例如:\n * const context = {\n * request: {\n * get: (url) => {\n * return fetch(url);\n * },\n * },\n * }\n * 在节点内可以通过 this.context.request.get(url) 来调用。\n */\n context: Record<string, unknown>\n\n constructor({\n nodeModelMap,\n recorder,\n context = {},\n globalData = {},\n startNodeType = 'StartNode',\n }: FlowModel.IFlowModelProps) {\n // 流程包含的节点类型 ??? 在 load 代码中又初始化了一遍,为什么要传进来\n this.nodeModelMap = nodeModelMap\n // 需要执行的队列\n this.executeList = []\n // 执行中的任务\n this.executingInstance = null\n // 外部传入的上下文,最终会传递给每个节点\n this.context = context\n // 用于存储全局数据,可以在流程中共享\n this.globalData = globalData\n // 开始节点类型,在执行流程时,会从这些节点开始执行\n this.startNodeType = startNodeType\n this.isRunning = false\n this.scheduler = new Scheduler({\n flowModel: this,\n recorder,\n })\n\n this.scheduler.on(EVENT_INSTANCE_COMPLETE, (result) => {\n this.onExecuteFinished(result)\n })\n\n this.scheduler.on(EVENT_INSTANCE_INTERRUPTED, (result) => {\n this.onExecuteFinished(result)\n })\n\n this.scheduler.on(EVENT_INSTANCE_ERROR, (result) => {\n this.onExecuteFinished(result)\n })\n }\n\n /**\n * 解析LogicFlow图数据,将nodes和edges转换成节点格式。\n * 例如:\n * graphData: {\n * nodes: [\n * { id: 'node1', type: 'StartNode', properties: {} },\n * { id: 'node2', type: 'TaskNode', properties: {} },\n * ],\n * edges: [\n * { id: 'edge1', sourceNodeId: 'node1', targetNodeId: 'node2', properties: {} },\n * ]\n * }\n * 转换成:\n * nodeConfigMap: {\n * node1: {\n * id: 'node1',\n * type: 'StartNode',\n * properties: {},\n * incoming: [],\n * outgoing: [{ id: 'edge1', properties: {}, target: 'node2' }]\n * },\n * node2: {\n * id: 'node2',\n * type: 'TaskNode',\n * properties: {},\n * incoming: [{ id: 'edge1', properties: {}, source: 'node1' }],\n * outgoing: [],\n * }\n * }\n * 此格式方便后续执行时,根据节点id快速找到节点和执行初始化节点模型。\n * 同时此方法还会找到所有的开始节点,方便后续执行时,从开始节点开始执行。\n * @param graphData 流程图数据\n */\n public load(graphData: Engine.GraphConfigData) {\n const { nodes = [], edges = [] } = graphData\n nodes.forEach((node) => {\n if (this.nodeModelMap.has(node.type)) {\n const nodeConfig: BaseNode.NodeConfig = {\n id: node.id,\n type: node.type,\n properties: node.properties,\n incoming: [],\n outgoing: [],\n }\n this.nodeConfigMap.set(node.id, nodeConfig)\n if (node.type === this.startNodeType) {\n this.startNodes.push(nodeConfig)\n }\n } else {\n console.warn(`未识别的节点类型:${node.type}`)\n }\n })\n\n edges.forEach((edge) => {\n const sourceNode = this.nodeConfigMap.get(edge.sourceNodeId)\n const targetNode = this.nodeConfigMap.get(edge.targetNodeId)\n if (sourceNode) {\n sourceNode.outgoing.push({\n id: edge.id,\n properties: edge.properties,\n target: edge.targetNodeId,\n })\n }\n if (targetNode && targetNode.type !== this.startNodeType) {\n targetNode.incoming.push({\n id: edge.id,\n properties: edge.properties,\n source: edge.sourceNodeId,\n })\n }\n })\n }\n\n /**\n * 从待执行队列中取出需要执行的内容。\n * 会依次判断是否有 actionId、nodeId、executionId。\n * 若存在 actionId,那么表示恢复执行\n * 若存在 nodeId,那么表示从指定节点开始执行\n * 若都不存在,那么新建一个 executionId,从开始节点开始执行\n * @private\n */\n private createExecution(execParam: Partial<FlowModel.ExecParam>) {\n this.executeList.push(execParam)\n\n // 如果有 actionId,则表示恢复执行\n // TODO: 待测试,确认该流程\n if (execParam.actionId && execParam.nodeId && execParam.executionId) {\n this.scheduler.resume({\n executionId: execParam.executionId,\n actionId: execParam.actionId,\n nodeId: execParam.nodeId,\n data: execParam.data,\n })\n return\n }\n\n // 否则,判断 executionId 是否存在,使用 executionId 或创建新的 execution,从开始节点开始执行\n // const executionId = execParam?.executionId || createExecId()\n const executionId = createExecId()\n execParam.executionId = executionId\n\n // 当指定了具体需要执行的节点时,执行下面方法\n if (execParam?.nodeId) {\n const nodeConfig = this.nodeConfigMap.get(execParam.nodeId)\n if (!nodeConfig) {\n execParam?.onError?.(\n new Error(\n `${getErrorMsg(ErrorCode.NONE_NODE_ID)}(${execParam.nodeId})`,\n ),\n )\n return\n }\n // 当指定了开始节点,且该节点存在,则直接以这个节点开始执行\n this.startNodes = [nodeConfig]\n }\n\n this.startNodes.forEach((startNode) => {\n this.scheduler.addAction({\n executionId,\n nodeId: startNode.id,\n })\n })\n // 所有的开始节点都执行\n this.scheduler.run({\n executionId,\n })\n }\n\n /**\n * 执行流程,每次执行都会生成一个唯一的 executionId,用于区分不同的执行。\n * 同一次执行,这次执行内部的节点执行顺序为并行。内部并行是为了避免异步节点阻塞其他节点的执行\n * 多次执行,多次执行之间为串行,这里选择串行的原因是避免多次执行之间的数据冲突。\n * 例如:\n * 一个流程存在两个开始节点,A 和 B,A 和 B 的下一个节点都是 C,C 的下两个节点是 D 和 E\n * 外部分别触发了 A 和 B 的执行,那么 A 和 B 的执行是串行(即 A 执行完再执行 B),但是 D 和 E 的执行是并行的。\n * 如果希望 A 和 B 的执行时并行的,就不能使用同一个流程模型执行,应该初始化两个。\n * 下面直接使用调度器的队列\n * @param params\n */\n public async execute(params: Partial<FlowModel.ExecParam>) {\n this.createExecution(params)\n }\n\n public async resume(params: Partial<FlowModel.ExecParam>) {\n this.createExecution(params)\n }\n\n /**\n * 创建节点实例,每个节点实例都会有一个唯一的 actionId\n * 通过 executionId, nodeId, actionId 可以唯一确定一个节点的某一次执行\n * @param nodeId\n * @returns 节点实例\n */\n // TODO: 确认下面这种场景,类型如何定义\n public createAction(nodeId: Engine.Key) {\n const nodeConfig = this.nodeConfigMap.get(nodeId)\n if (nodeConfig) {\n const NodeModel = this.nodeModelMap.get(nodeConfig.type)\n if (!NodeModel) {\n throw new Error('该 NodeModel 不存在,抛出异常')\n }\n return new NodeModel({\n nodeConfig,\n globalData: this.globalData,\n context: this.context,\n })\n }\n }\n\n public setStartNodeType(type: string) {\n this.startNodeType = type\n }\n\n public updateGlobalData(data: Record<string, unknown>) {\n // TODO: 数据的合并,是否考虑子项的合并(默认值的替换)\n this.globalData = {\n ...this.globalData,\n ...data,\n }\n return this.globalData\n }\n\n /**\n * 在执行完成后,通知外部此次之行完成\n * 如果还存在待执行的任务,那么继续执行\n * @param result\n * @private\n */\n private onExecuteFinished(result) {\n const index = this.executeList.findIndex(\n (i) => i.executionId === result.executionId,\n )\n if (index > -1) {\n const { callback } = this.executeList[index]\n this.executeList.splice(index, 1)\n callback?.(result)\n }\n }\n}\n\nexport namespace FlowModel {\n export type FlowResult =\n | ({\n result?: Record<string, unknown>\n } & Engine.ActionParam)\n | Engine.NextActionParam\n\n export type ActionParam = Scheduler.ActionParam\n\n export type ExecParam = {\n callback?: (result: Engine.NextActionParam) => void\n onError?: (error: Error) => void\n } & ActionParam\n\n export interface IFlowModelProps {\n nodeModelMap: Map<string, BaseNode.NodeConstructor>\n recorder?: Recorder\n context?: Record<string, unknown>\n globalData?: Record<string, unknown>\n startNodeType?: string\n }\n}\n\nexport default FlowModel\n","import { Engine } from '..'\nimport { storage } from '../utils'\n\nexport const MAX_RECORDER = 100\nexport const MAX_INSTANCE = 100\nexport const LOGICFLOW_ENGINE_INSTANCES = 'LOGICFLOW_ENGINE_INSTANCES'\n\nexport class Recorder implements Recorder.Base {\n instanceId: Engine.Key\n maxRecorder: number\n\n constructor({ instanceId }) {\n this.instanceId = instanceId\n this.maxRecorder = MAX_RECORDER\n\n const instances = this.getItem(LOGICFLOW_ENGINE_INSTANCES) || []\n if (instances.indexOf(instanceId) === -1) {\n instances.push(instanceId)\n }\n if (instances.length > MAX_INSTANCE) {\n const clearInstance = instances.shift()\n this.clearInstance(clearInstance)\n }\n this.setItem(LOGICFLOW_ENGINE_INSTANCES, instances)\n }\n\n setMaxRecorderNumber(max: number) {\n this.maxRecorder = max\n }\n\n // 将存储 storage 的方法收敛到此处,并在此处做异常处理 - setItem\n setItem(key: string | number, value: unknown) {\n try {\n storage.setItem(key, value)\n } catch (error) {\n console.error('Ops, something wrong with storage.setItem !!!')\n storage.clear()\n storage.setItem(key, value)\n }\n }\n\n // getItem 方法\n getItem(key: string | number) {\n return storage.getItem(key)\n }\n\n async getExecutionActions(executionId: Engine.Key) {\n return this.getItem(executionId)\n }\n\n async getExecutionList() {\n return this.getItem(this.instanceId) || []\n }\n\n private addExecution(executionId: Engine.Key) {\n const instanceExecutions = this.getItem(this.instanceId) || []\n if (instanceExecutions.length >= this.maxRecorder) {\n const toBeRemovedItem = instanceExecutions.shift()\n this.popExecution(toBeRemovedItem)\n }\n instanceExecutions.push(executionId)\n this.setItem(this.instanceId, instanceExecutions)\n }\n\n private popExecution(executionId: Engine.Key) {\n const instanceData = this.getItem(executionId) || []\n instanceData.forEach((actionId) => {\n storage.removeItem(actionId)\n })\n storage.removeItem(executionId)\n }\n\n private pushActionToExecution(executionId: Engine.Key, actionId: Engine.Key) {\n const actions = this.getItem(executionId) || []\n actions.push(actionId)\n this.setItem(executionId, actions)\n }\n\n /**\n * @param {Object} action\n * {\n * actionId: '',\n * nodeId: '',\n * executionId: '',\n * nodeType: '',\n * timestamp: '',\n * properties: {},\n * }\n */\n async addActionRecord(action: Recorder.Info) {\n const { executionId, actionId } = action\n const instanceData = await this.getExecutionActions(executionId)\n\n if (!instanceData) {\n this.addExecution(executionId)\n }\n this.pushActionToExecution(executionId, actionId)\n this.setItem(actionId, action)\n }\n\n async getActionRecord(actionId: Engine.Key): Promise<Recorder.Info> {\n return this.getItem(actionId)\n }\n\n clear() {\n this.clearInstance(this.instanceId)\n }\n\n clearInstance(instanceId: Engine.Key) {\n const instanceExecutions = this.getItem(instanceId) || []\n // TODO: 完善类型定义\n instanceExecutions.forEach((executionId) => {\n storage.removeItem(executionId)\n const instanceData = this.getItem(executionId) || []\n instanceData.forEach((actionId) => {\n storage.removeItem(actionId)\n })\n })\n\n storage.removeItem(instanceId)\n }\n}\n\nexport namespace Recorder {\n export interface Base {\n addActionRecord: (action: Info) => Promise<void>\n getActionRecord: (actionId: Engine.Key) => Promise<Info>\n getExecutionActions: (executionId: Engine.Key) => Promise<string[]>\n clear: () => void\n }\n\n export type Info = {\n timestamp: number\n } & Engine.NextActionParam\n}\n\nexport default Recorder\n","// import { LogicFlow } from '@logicflow/core';\nimport { BaseNode, StartNode, TaskNode } from './nodes'\nimport { FlowModel } from './FlowModel'\nimport { Recorder } from './recorder'\nimport { createEngineId } from './utils'\n\nexport class Engine {\n readonly instanceId: string\n graphData?: Engine.GraphConfigData\n\n flowModel?: FlowModel\n recorder?: Recorder\n context?: Record<string, unknown>\n nodeModelMap: Map<string, BaseNode.NodeConstructor>\n\n constructor(options?: Engine.Options) {\n this.nodeModelMap = new Map()\n this.instanceId = createEngineId()\n if (options?.debug) {\n this.recorder = new Recorder({\n instanceId: this.instanceId,\n })\n }\n // 默认注册节点 register default nodes\n this.register({\n type: StartNode.nodeTypeName,\n model: StartNode,\n })\n this.register({\n type: TaskNode.nodeTypeName,\n model: TaskNode,\n })\n this.context = options?.context || {}\n }\n\n /**\n * 注册节点\n * @param nodeConfig { type: 'custom-node', model: NodeClass }\n */\n register(nodeConfig: Engine.NodeConfig) {\n this.nodeModelMap.set(nodeConfig.type, nodeConfig.model)\n }\n\n /**\n * 自定义执行记录的存储,默认浏览器使用 sessionStorage, nodejs 使用内存存储\n * 注意:由于执行记录不全会主动删除,所以需要自行清理。\n * nodejs 环境建议自定义为持久化存储。\n * engine.setCustomRecorder({{\n * async addActionRecord(task) {}\n * async getTask(actionId) {}\n * async getExecutionTasks(executionId) {}\n * clear(instanceId) {}\n * }}\n * @param recorder\n */\n setCustomRecorder(recorder: Recorder) {\n this.recorder = recorder\n }\n\n /**\n * 加载流程图数据\n */\n load({\n graphData,\n startNodeType = 'StartNode',\n globalData = {},\n }: Engine.LoadGraphParam): FlowModel {\n this.graphData = graphData\n const flowModel = new FlowModel({\n nodeModelMap: this.nodeModelMap,\n recorder: this.recorder,\n context: this.context,\n globalData,\n startNodeType,\n })\n\n flowModel.load(graphData)\n this.flowModel = flowModel\n return flowModel\n }\n\n /**\n * 执行流程,允许多次调用\n */\n async execute(\n param?: Partial<Engine.ActionParam>,\n ): Promise<Engine.NextActionParam> {\n return new Promise((resolve, reject) => {\n let execParam = param\n if (!param) {\n execParam = {}\n }\n\n this.flowModel?.execute({\n ...execParam,\n callback: (result) => {\n resolve(result)\n },\n onError: (error) => {\n reject(error)\n },\n })\n })\n }\n\n /**\n * 中断流程恢复\n * @param resumeParam\n * @returns\n */\n async resume(\n resumeParam: Engine.ResumeParam,\n ): Promise<Engine.NextActionParam | undefined> {\n return new Promise((resolve, reject) => {\n this.flowModel?.resume({\n ...resumeParam,\n callback: (result) => {\n resolve(result)\n },\n onError: (error) => {\n reject(error)\n },\n })\n })\n }\n\n async getExecutionList() {\n return await this.recorder?.getExecutionList()\n }\n\n /**\n * 获取执行任务记录\n * @param executionId\n * @returns\n */\n async getExecutionRecord(\n executionId: Engine.Key,\n ): Promise<Recorder.Info[] | null> {\n const actions = await this.recorder?.getExecutionActions(executionId)\n\n if (!actions) {\n return null\n }\n\n // DONE: 确认 records 的类型\n const records: Promise<Recorder.Info>[] = []\n for (let i = 0; i < actions?.length; i++) {\n const action = actions[i]\n if (this.recorder) {\n records.push(this.recorder?.getActionRecord(action))\n }\n }\n\n return Promise.all(records)\n }\n\n destroy() {\n this.recorder?.clear()\n }\n\n getGlobalData() {\n return this.flowModel?.globalData\n }\n\n setGlobalData(data: Record<string, unknown>) {\n if (this.flowModel) {\n this.flowModel.globalData = data\n }\n }\n\n updateGlobalData(data: Record<string, unknown>) {\n if (this.flowModel) {\n Object.assign(this.flowModel.globalData, data)\n }\n }\n}\n\nexport namespace Engine {\n export type Point = {\n id?: string\n x: number\n y: number\n [key: string]: unknown\n }\n\n export type TextConfig = {\n value: string\n } & Point\n\n export type NodeData = {\n id: string\n type: string\n x?: number\n y?: number\n text?: TextConfig | string\n zIndex?: number\n properties?: Record<string, unknown>\n }\n\n export type EdgeData = {\n id: string\n /**\n * 边的类型,不传默认为lf.setDefaultEdgeType(type)传入的类型。\n * LogicFlow内部默认为polyline\n */\n type?: string\n sourceNodeId: string\n sourceAnchorId?: string\n targetNodeId: string\n targetAnchorId?: string\n startPoint?: {\n x: number\n y: number\n }\n endPoint?: {\n x: number\n y: number\n }\n text?:\n | {\n x: number\n y: number\n value: string\n }\n | string\n pointsList?: Point[]\n zIndex?: number\n properties?: Record<string, unknown>\n }\n\n export type GraphConfigData = {\n nodes: NodeData[]\n edges: EdgeData[]\n }\n\n export type LoadGraphParam = {\n graphData: GraphConfigData\n startNodeType?: string\n globalData?: Record<string, unknown>\n }\n\n export type Options = {\n context?: Record<string, unknown>\n debug?: boolean\n }\n export type Key = string | number\n export type NodeConfig = {\n type: string\n model: any // TODO: NodeModel 可能有多个,类型该如何定义呢???\n }\n\n export type NodeParam = {\n executionId: Key\n nodeId: Key\n }\n\n export type CommonActionInfo = {\n actionId: Key\n } & NodeParam\n\n export type ActionParam = CommonActionInfo\n\n export type ResumeParam = {\n data?: Record<string, unknown>\n } & CommonActionInfo\n\n export type ExecParam = {\n next: (data: NextActionParam) => void\n } & ActionParam\n\n export type ExecResumeParam = {\n next: (data: NextActionParam) => void\n } & ResumeParam\n\n export type ActionStatus = 'success' | 'error' | 'interrupted' | '' // ??? Question: '' 状态是什么状态\n\n export type NextActionParam = {\n executionId: Key\n nodeId: Key\n actionId: Key\n nodeType: string\n outgoing: BaseNode.OutgoingConfig[]\n properties?: Record<string, unknown>\n detail?: Record<string, unknown>\n status?: ActionStatus\n }\n\n export type ActionResult = NextActionParam\n\n export type NodeExecResult = {\n nodeType: string\n properties?: Record<string, unknown>\n } & CommonActionInfo &\n ActionResult\n}\n\nexport * from './constant'\nexport { BaseNode, StartNode, TaskNode, Recorder }\n\nexport default Engine\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","ErrorCode","WarningCode","SuppressedError","exports","errorMsgMapCn","NONE_START_NODE","NONE_NODE_ID","NO_DOCUMENT_BODY","warningMsgMapCn","NONE_START_NODE_IN_DATA","START_NODE_INCOMING","EXPRESSION_EXEC_ERROR","getErrorMsg","code","getWarningMsg","BASE_START_NODE","EVENT_INSTANCE_COMPLETE","EVENT_INSTANCE_INTERRUPTED","EVENT_INSTANCE_ERROR","FlowStatus","ActionStatus","parseHexToInt","hex","match","parseInt","NaN","validateAndParseHex","errorName","enforcedLength","parsedHex","Number","isNaN","undefined","length","SyntaxError","parseHexadecimalCode","parsedCode","String","fromCharCode","parseUnicodeCode","surrogateCode","parsedSurrogateCode","isCurlyBraced","text","charAt","parseUnicodeCodePointCode","codePoint","slice","fromCodePoint","err","RangeError","singleCharacterEscapes","Map","parseSingleCharacterCode","get","escapeMatch","unraw","raw","replace","_","backslash","unicodeWithSurrogate","surrogate","unicode","octal","singleCharacter","createLisp","obj","op","a","b","lispTypes","ParseError","Error","constructor","message","super","substring","this","inlineIfElse","elseIf","ifElse","space","expectTypes","splitter","types","opHigh","comparitor","boolOp","bitwise","inlineIf","assignment","assignModify","assign","incrementerBefore","expEdge","call","incrementerAfter","modifier","not","inverse","negative","positive","typeof","delete","dot","arrayProp","prop","createObject","createArray","number","string","literal","regex","boolean","null","und","arrowFunctionSingle","arrowFunction","inlineFunction","group","Infinity","void","await","new","initialize","return","throw","spreadObject","spreadArray","expEnd","expFunction","function","expSingle","for","do","while","loopAction","if","try","block","switch","closings","testMultiple","str","tests","found","i","exec","CodeString","ref","start","end","len","char","toString","trimStart","trim","valueOf","emptyString","okFirstChars","aNumber","wordReg","semiColon","insertedSemicolons","WeakMap","quoteCache","restOfExp","constants","part","quote","firstOpening","closingsTests","details","words","isStart","hasSemiTest","includes","filter","insertedSemis","cache","set","has","escape","lastChar","isOneLiner","lastInertedSemi","skip","regRes","foundWord","foundNumber","sub","push","lastAnyWord","lastWord","test","oneliner","startingExecpted","setLispType","fn","forEach","type","closingsCreate","typesCreate","res","expect","ctx","extract","arg","l","funcFound","lispifyExpr","map","lispify","key","lisptype","lispTree","modifierTypes","incrementTypes","adderTypes","instanceof","in","opTypes","extractIfElse","foundTrue","elseReg","count","foundElse","first","f","startsWith","all","Math","max","true","false","quoteCount","condition","ie","startTrue","trueBlock","elseBlock","lispifyBlock","indexOf","caseFound","statement","insertSemicolons","caseTest","cases","defaultFound","cond","bracketFound","exprs","notEmpty","index","matches","lt","isArrow","isReturn","argPos","isAsync","args","split","unshift","ended","func","eager","lispifyFunction","iteratorRegex","getIterator","body","startStep","startInternal","beforeStep","checkFirst","lispifyReturnExpr","iterator","extract2","k","ofStart2","ofStart3","ofCondition","ofStep","inStart2","inStart3","inStep","inCondition","shift","isBlock","catchReg","finallyBody","catchBody","catchRes","exception","offset","argsString","j","lastType","expected","topLevel","startingExpectedWithoutSingle","r","subExpressions","pos","Object","values","defined","expression","parts","skipped","isInserted","tree","hoisted","hoist","concat","isLisp","item","Array","isArray","rep","it","closingsNoInsertion","colonsRegex","rest","inserted","valid","edge","checkRegex","cancel","after","flags","notDivide","possibleDivide","extractConstants","currentEnclosure","regexFound","comment","commentStart","currJs","strRes","enclosures","isPossibleDivide","li","join","tempJsStrings","literals","strings","pop","regexes","parse","js","ExecReturn","auditReport","returned","breakLoop","continueLoop","Prop","context","isConst","isGlobal","isVariable","ReferenceError","getSubscriptions","cb","optional","reservedWords","Set","VarType","keysOnly","ret","Scope","parent","vars","functionThis","const","let","var","isFuncScope","allVars","globals","functionScope","hasOwnProperty","val","TypeError","SandboxError","declare","LocalScope","currentTicks","sandboxFunction","ticks","params","parsed","createFunction","generateArgs","argNames","sandboxedFunctions","WeakSet","scope","name","options","forbidFunctionCreation","executeTree","registerSandboxFunction","add","createFunctionAsync","prototypeWhitelist","prototype","async","executeTreeAsync","sandboxedEval","sandboxedSetTimeout","handler","setTimeout","sandboxedSetInterval","setInterval","assignCheck","changeSubscriptions","changeSubscriptionsGlobal","setSubscriptions","setSubscriptionsGlobal","arrayChange","splice","reverse","sort","copyWithin","KeyVal","SpreadObject","SpreadArray","If","t","literalRegex","ops","addOps","valueOrProp","execMany","inLoopOrSwitch","execSync","_execManySync","_execManyAsync","catch","syncDone","d","ad","asyncDone","execAsync","isInstant","instant","p","callback","doneOriginal","_execNoneRecurse","bobj","sandboxGlobal","audit","globalsAccess","globalsWhitelist","evals","globalThis","globalScope","Boolean","isFunction","prototypeAccess","prot","getPrototypeOf","whitelist","prototypeReplacements","size","constuctor","g","forbidFunctionCalls","vals","flat","JSON","stringify","recurse","x","y","change","changed","added","removed","startIndex","deleteCount","min","endIndex","BigInt","reg","RegExp","resnums","processed","reses","num","$$","$","loop","loopScope","internalVars","$$obj","interalScope","innerLoopVars","toTest","isTrue","caseItem","executeTreeWithDone","unexecTypes","executionQuota","onExecutionQuotaReached","executionTree","scopes","s","_executeWithDoneSync","_executeWithDoneAsync","current","SandboxGlobal","ExecContext","subscribeSet","names","callbacks","changeCbs","unsubscribe","Sandbox","sandboxFunctions","SAFE_GLOBALS","SAFE_PROTOTYPES","sandbox","Symbol","Function","console","debug","error","info","log","table","warn","isFinite","parseFloat","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","unescape","EvalError","URIError","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","Intl","Date","protos","proto","subscribeGet","subscribeSetGlobal","getOwnPropertyNames","createContext","execContext","eval","getContext","compile","optimize","run","compileAsync","compileExpression","compileExpressionAsync","runInBrowserContext","code_1","args_1","globalData","getExpressionResult","BaseNode","nodeConfig","outgoing","incoming","id","properties","baseType","nodeId","action","param","onResume","isPass","conditionExpression","getOutgoing","expressions","out","execute","executionId","actionId","status","SUCCESS","detail","nodeType","resume","data","nodeTypeName","StartNode","TaskNode","EventEmitter","_events","on","evtKey","once","off","events","emit","eventArgs","es","doEmit","getEvents","isInBrowser","window","isInNodeJS","global","self","sessionStorage","storage","setItem","getItem","removeItem","clear","defineProperty","rng$1","default","rng","_crypto","_interopRequireDefault","require","__esModule","rnds8Pool","poolPtr","randomFillSync","_default","validate_1","_regex","validate","uuid","stringify_1","_validate","byteToHex","substr","arr","toLowerCase","v1_1","_rng","_stringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","buf","node","clockseq","seedBytes","random","msecs","now","nsecs","dt","tl","tmh","n","parse_1","v","v35","_parse","stringToBytes","bytes","charCodeAt","DNS","URL","version","hashfunc","generateUUID","namespace","md5_1","md5","Buffer","from","createHash","update","digest","v3_1","_v","_md","v3","v4_1","v4","rnds","sha1_1","sha1","v5_1","_sha","v5","nil","version_1","enumerable","_v2","_v3","_v4","_nil","_version","createExecId","uuidV4","createActionId","createEngineId","Scheduler","config","nodeQueueMap","actionRunningMap","flowModel","recorder","addAction","nodeParam","currentActionQueue","pushActionToRunningMap","actionParam","runningMap","_a","removeActionFromRunningMap","saveActionResult","addActionRecord","timestamp","hasRunningAction","runParam","nodeQueue","currentNode","COMPLETED","target","resumeParam","model","createAction","bind","interrupted","execResult","actionResult","INTERRUPTED","ERROR","FlowModel","nodeModelMap","startNodeType","nodeConfigMap","startNodes","executeList","executingInstance","isRunning","scheduler","onExecuteFinished","load","graphData","nodes","edges","sourceNode","sourceNodeId","targetNode","targetNodeId","source","createExecution","execParam","onError","startNode","NodeModel","setStartNodeType","updateGlobalData","findIndex","MAX_RECORDER","MAX_INSTANCE","LOGICFLOW_ENGINE_INSTANCES","Recorder","instanceId","maxRecorder","instances","clearInstance","setMaxRecorderNumber","getExecutionActions","getExecutionList","addExecution","instanceExecutions","toBeRemovedItem","popExecution","pushActionToExecution","actions","getActionRecord","Engine","register","setCustomRecorder","getExecutionRecord","records","_b","destroy","getGlobalData","setGlobalData"],"mappings":"oPAkHO,SAASA,UAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAU,CAAC,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC1F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC7F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAQ,KAIjBO,KAAKR,EAAWK,EAAW,CAC7GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OAClE,GACJ,CC1HA,IAAYO,UASAC,YDsTsC,mBAApBC,iBAAiCA,gBCxT9DC,QAAAH,eAAA,EAPWA,UAAAA,oBAAAA,QAAAA,UAOX,CAAA,GALCA,UAAAA,UAAA,gBAAA,KAAA,kBACAA,UAAAA,UAAA,aAAA,MAAA,eAGAA,UAAAA,UAAA,iBAAA,MAAA,mBASDG,QAAAF,iBAAA,EANWA,YAAAA,sBAAAA,QAAAA,YAMX,CAAA,GALCA,YAAAA,YAAA,wBAAA,KAAA,0BACAA,YAAAA,YAAA,oBAAA,MAAA,sBAGAA,YAAAA,YAAA,sBAAA,KAAA,wBAIF,MAAMG,cAAgB,CACpB,CAACJ,QAAAA,UAAUK,iBAAkB,aAC7B,CAACL,QAAAA,UAAUM,cAAe,eAC1B,CAACN,QAAAA,UAAUO,kBAAmB,mCAG1BC,gBAAkB,CACtB,CAACP,QAAAA,YAAYQ,yBAA0B,mBACvC,CAACR,QAAAA,YAAYS,qBAAsB,aACnC,CAACT,QAAAA,YAAYU,uBAAwB,WAG1BC,YAAeC,GAC1B,SAASA,OAAUT,cAAcS,KACtBC,cAAiBD,GAC5B,WAAWA,OAAUL,gBAAgBK,KC9B1BE,gBAAkB,QAGlBC,wBAA0B,oBAC1BC,2BAA6B,uBAC7BC,qBAAuB,iBAGpC,IAAYC,WASAC,aCZZ,SAASC,cAAcC,GAEnB,OADwBA,EAAIC,MAAM,cACVC,SAASF,EAAK,IAAMG,GAChD,CAYA,SAASC,oBAAoBJ,EAAKK,EAAWC,GACzC,MAAMC,EAAYR,cAAcC,GAChC,GAAIQ,OAAOC,MAAMF,SACOG,IAAnBJ,GAAgCA,IAAmBN,EAAIW,OACxD,MAAM,IAAIC,YAAYP,EAAY,KAAOL,GAE7C,OAAOO,CACX,CASA,SAASM,qBAAqBtB,GAC1B,MAAMuB,EAAaV,oBAAoBb,EAAM,wBAAyB,GACtE,OAAOwB,OAAOC,aAAaF,EAC/B,CAWA,SAASG,iBAAiB1B,EAAM2B,GAC5B,MAAMJ,EAAaV,oBAAoBb,EAAM,oBAAqB,GAClE,QAAsBmB,IAAlBQ,EAA6B,CAC7B,MAAMC,EAAsBf,oBAAoBc,EAAe,oBAAqB,GACpF,OAAOH,OAAOC,aAAaF,EAAYK,EAC3C,CACA,OAAOJ,OAAOC,aAAaF,EAC/B,CAMA,SAASM,cAAcC,GACnB,MAA0B,MAAnBA,EAAKC,OAAO,IAA+C,MAAjCD,EAAKC,OAAOD,EAAKV,OAAS,EAC/D,CASA,SAASY,0BAA0BC,GAC/B,IAAKJ,cAAcI,GACf,MAAM,IAAIZ,YAAY,uBAAyBY,GAEnD,MACMV,EAAaV,oBADGoB,EAAUC,MAAM,GAAI,GACY,qBACtD,IACI,OAAOV,OAAOW,cAAcZ,EAC/B,CACD,MAAOa,GACH,MAAMA,aAAeC,WACf,IAAIhB,YAAY,oBAAsBE,GACtCa,CACV,CACJ,CD1EC9C,QAAAgB,gBAAA,EANWA,WAAAA,qBAAAA,QAAAA,WAMX,CAAA,GALCA,WAAA,UAAA,YACAA,WAAA,YAAA,cACAA,WAAA,QAAA,UACAA,WAAA,QAAA,UACAA,WAAA,MAAA,QAQDhB,QAAAiB,kBAAA,EAJWA,aAAAA,QAAYA,eAAZA,qBAIX,CAAA,GAHCA,aAAA,QAAA,UACAA,aAAA,MAAA,QACAA,aAAA,YAAA,cCyEF,MAAM+B,uBAAyB,IAAIC,IAAI,CACnC,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,QAOV,SAASC,yBAAyBxC,GAC9B,OAAOsC,uBAAuBG,IAAIzC,IAASA,CAC/C,CAiBA,MAAM0C,YAAc,yHAUb,SAASC,MAAMC,GAClB,OAAOA,EAAIC,QAAQH,aAAa,SAAUI,EAAGC,EAAWtC,EAAKwB,EAAWe,EAAsBC,EAAWC,EAASC,EAAOC,GAGrH,QAAkBjC,IAAd4B,EACA,MAAO,KAEX,QAAY5B,IAARV,EACA,OAAOa,qBAAqBb,GAEhC,QAAkBU,IAAdc,EACA,OAAOD,0BAA0BC,GAErC,QAA6Bd,IAAzB6B,EACA,OAAOtB,iBAAiBsB,EAAsBC,GAElD,QAAgB9B,IAAZ+B,EACA,OAAOxB,iBAAiBwB,GAE5B,GAAc,MAAVC,EACA,MAAO,KAEX,QAAchC,IAAVgC,EACA,MAAM,IAAI9B,YAAY,sBAAwB8B,GAElD,QAAwBhC,IAApBiC,EACA,OAAOZ,yBAAyBY,GAEpC,MAAM,IAAI/B,YAAY,gBAC1B,GACJ,CCxKA,SAASgC,WAAWC,GAChB,MAAO,CAACA,EAAIC,GAAID,EAAIE,EAAGF,EAAIG,EAC/B,CACA,IAAIC,UAAY,IAAInB,IACb,MAAMoB,mBAAmBC,MAC5BC,WAAAA,CAAYC,EAAS9D,GACjB+D,MAAMD,EAAU,KAAO9D,EAAKgE,UAAU,EAAG,KACzCC,KAAKjE,KAAOA,CAChB,EAEJ,MAAMkE,aAAe,KACfC,OAAS,kBACTC,OAAS,gBACTC,MAAQ,MACP,IAAIC,YAAc,CACrBC,SAAU,CACNC,MAAO,CACHC,OAAQ,+BACRlB,GAAI,iCACJmB,WAAY,6CACZC,OAAQ,+CACRC,QAAS,8CAEbhG,KAAM,CACF,WACA,QACA,OACA,sBAGRiG,SAAU,CACNL,MAAO,CACHK,SAAU,mBAEdjG,KAAM,CACF,WAGRkG,WAAY,CACRN,MAAO,CACHO,aAAc,uDACdC,OAAQ,aAEZpG,KAAM,CACF,WACA,QACA,OACA,sBAGRqG,kBAAmB,CACfT,MAAO,CAAES,kBAAmB,gBAC5BrG,KAAM,CACF,SAGRsG,QAAS,CACLV,MAAO,CACHW,KAAM,eACNC,iBAAkB,gBAEtBxG,KAAM,CACF,WACA,UACA,MACA,WACA,WAGRyG,SAAU,CACNb,MAAO,CACHc,IAAK,KACLC,QAAS,KACTC,SAAU,YACVC,SAAU,YACVC,OAAQ,oBACRC,OAAQ,qBAEZ/G,KAAM,CACF,WACA,QACA,OACA,sBAGRgH,IAAK,CACDpB,MAAO,CACHqB,UAAW,aACXD,IAAK,+BAEThH,KAAM,CACF,WACA,aACA,UACA,MACA,WACA,WAGRkH,KAAM,CACFtB,MAAO,CACHsB,KAAM,gCAEVlH,KAAM,CACF,WACA,aACA,UACA,MACA,WACA,WAGRF,MAAO,CACH8F,MAAO,CACHuB,aAAc,MACdC,YAAa,MACbC,OAAQ,qGACRC,OAAQ,WACRC,QAAS,WACTC,MAAO,wBACPC,QAAS,0BACTC,KAAM,kBACNC,IAAK,uBACLC,oBAAqB,sDACrBC,cAAe,4HACfC,eAAgB,8JAChBC,MAAO,MACP/F,IAAK,iBACLgG,SAAU,sBACVC,KAAM,qBACNC,MAAO,sBACPC,IAAK,qBAETnI,KAAM,CACF,WACA,UACA,MACA,WACA,WAGRoI,WAAY,CACRxC,MAAO,CACHwC,WAAY,wDACZC,OAAQ,oBACRC,MAAO,uBAEXtI,KAAM,CACF,WACA,QACA,OACA,oBACA,WAGRuI,aAAc,CACV3C,MAAO,CACH2C,aAAc,WAElBvI,KAAM,CACF,QACA,SAGRwI,YAAa,CACT5C,MAAO,CACH4C,YAAa,WAEjBxI,KAAM,CACF,QACA,SAGRyI,OAAQ,CAAE7C,MAAO,CAAE,EAAE5F,KAAM,IAC3B0I,YAAa,CACT9C,MAAO,CACH+C,SAAU,8JAEd3I,KAAM,CACF,UACA,WAGR4I,UAAW,CACPhD,MAAO,CACHiD,IAAK,2CACLC,GAAI,uDACJC,MAAO,6CACPC,WAAY,uDACZC,GAAI,4CACJC,IAAK,WACLC,MAAO,KACPC,OAAQ,+CAEZpJ,KAAM,CACF,YAIRqJ,SAAW,CACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAEF,SAASC,aAAaC,EAAKC,GAC9B,IAAIC,EACJ,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAMhH,OAAQkH,IAAK,CAGnC,GADAD,EADaD,EAAME,GACNC,KAAKJ,GACdE,EACA,KACR,CACA,OAAOA,CACX,CACO,MAAMG,WACT3E,WAAAA,CAAYsE,GACRlE,KAAKwE,IAAM,CAAEN,IAAK,IACdA,aAAeK,YACfvE,KAAKwE,IAAMN,EAAIM,IACfxE,KAAKyE,MAAQP,EAAIO,MACjBzE,KAAK0E,IAAMR,EAAIQ,MAGf1E,KAAKwE,IAAIN,IAAMA,EACflE,KAAKyE,MAAQ,EACbzE,KAAK0E,IAAMR,EAAI/G,OAEvB,CACA4C,SAAAA,CAAU0E,EAAOC,GACb,IAAK1E,KAAK7C,OACN,OAAO6C,MACXyE,EAAQzE,KAAKyE,MAAQA,GACT,IACRA,EAAQ,GAERA,EAAQzE,KAAK0E,MACbD,EAAQzE,KAAK0E,MAEjBA,OAAcxH,IAARwH,EAAoB1E,KAAK0E,IAAM1E,KAAKyE,MAAQC,GACxC,IACNA,EAAM,GAENA,EAAM1E,KAAK0E,MACXA,EAAM1E,KAAK0E,KAEf,MAAM3I,EAAO,IAAIwI,WAAWvE,MAG5B,OAFAjE,EAAK0I,MAAQA,EACb1I,EAAK2I,IAAMA,EACJ3I,CACX,CACA,UAAIoB,GACA,MAAMwH,EAAM3E,KAAK0E,IAAM1E,KAAKyE,MAC5B,OAAOE,EAAM,EAAI,EAAIA,CACzB,CACAC,IAAAA,CAAKP,GACD,GAAIrE,KAAKyE,QAAUzE,KAAK0E,IAExB,OAAO1E,KAAKwE,IAAIN,IAAIlE,KAAKyE,MAAQJ,EACrC,CACAQ,QAAAA,GACI,OAAO7E,KAAKwE,IAAIN,IAAInE,UAAUC,KAAKyE,MAAOzE,KAAK0E,IACnD,CACAI,SAAAA,GACI,MAAMV,EAAQ,OAAOE,KAAKtE,KAAK6E,YACzB9I,EAAO,IAAIwI,WAAWvE,MAI5B,OAHIoE,IACArI,EAAK0I,OAASL,EAAM,GAAGjH,QAEpBpB,CACX,CACAkC,KAAAA,CAAMwG,EAAOC,GAgBT,OAfID,EAAQ,IACRA,EAAQzE,KAAK0E,IAAM1E,KAAKyE,MAAQA,GAEhCA,EAAQ,IACRA,EAAQ,QAEAvH,IAARwH,IACAA,EAAM1E,KAAK0E,IAAM1E,KAAKyE,OAEtBC,EAAM,IACNA,EAAM1E,KAAK0E,IAAM1E,KAAKyE,MAAQC,GAE9BA,EAAM,IACNA,EAAM,GAEH1E,KAAKD,UAAU0E,EAAOC,EACjC,CACAK,IAAAA,GACI,MAAMhJ,EAAOiE,KAAK8E,YACZV,EAAQ,OAAOE,KAAKvI,EAAK8I,YAI/B,OAHIT,IACArI,EAAK2I,KAAON,EAAM,GAAGjH,QAElBpB,CACX,CACAiJ,OAAAA,GACI,OAAOhF,KAAK6E,UAChB,EAEJ,MAAMI,YAAc,IAAIV,WAAW,IAC7BW,aAAe,aAEfC,QAAU9E,YAAY5F,MAAM8F,MAAMyB,OAClCoD,QAAU,uDACVC,UAAY,KACZC,mBAAqB,IAAIC,QACzBC,WAAa,IAAID,QAChB,SAASE,UAAUC,EAAWC,EAAMxB,EAAOyB,EAAOC,EAAcC,EAAeC,EAAU,IAC5F,IAAKJ,EAAKxI,OACN,OAAOwI,EAEXI,EAAQC,MAAQD,EAAQC,OAAS,GACjC,IAAIC,GAAU,EAEd,MAAMC,GADN/B,EAAQA,GAAS,IACSgC,SAASd,WAC/Ba,IACA/B,EAAQA,EAAMiC,QAAQ7G,GAAMA,IAAM8F,aAEtC,MAAMgB,EAAgBf,mBAAmB9G,IAAImH,EAAKnB,MAAQ,GACpD8B,EAAQd,WAAWhH,IAAImH,EAAKnB,MAAQ,IAAIlG,IAE9C,GADAkH,WAAWe,IAAIZ,EAAKnB,IAAK8B,GACrBV,GAASU,EAAME,IAAIb,EAAKlB,MAAQ,GAChC,OAAOkB,EAAK5F,UAAU,EAAGuG,EAAM9H,IAAImH,EAAKlB,MAAQ,GAAKkB,EAAKlB,OAE9D,IAIIJ,EAJAoC,GAAS,EACT1L,GAAO,EACP2L,EAAW,GACXC,GAAa,EAEbC,GAAkB,EACtB,IAAKvC,EAAI,EAAGA,EAAIsB,EAAKxI,SAAWpC,EAAMsJ,IAAK,CACvC,IAAIO,EAAOe,EAAKf,KAAKP,GACrB,GAAc,MAAVuB,GAA2B,MAAVA,GAA2B,MAAVA,EAAe,CACjD,GAAc,MAAVA,GAA0B,MAAThB,GAAqC,MAArBe,EAAKf,KAAKP,EAAI,IAAeoC,GAI7D,GAAI7B,IAASgB,IAAUa,EACxB,OAAOd,EAAK5F,UAAU,EAAGsE,OAL6C,CAEtEA,GADWoB,UAAUC,EAAWC,EAAK5F,UAAUsE,EAAI,GAAI,GAAI,KACjDlH,OAAS,CACtB,CAIDsJ,GAAUA,GAAmB,OAAT7B,CACxB,MACK,GAAIZ,SAASY,GAAO,CACrB,IAAKgC,GAAmBP,EAAchC,EAAIsB,EAAKlB,OAAQ,CAEnD,GADAmC,GAAkB,EACdV,EACA,MAEJ7B,IACAqC,EAAW,IACX,QACJ,CAIA,GAHIC,GAAuB,MAAT/B,IACd+B,GAAa,GAEb/B,IAASiB,EAAc,CACvB9K,GAAO,EACP,KACJ,CACK,CACD,IAAI8L,EAAOpB,UAAUC,EAAWC,EAAK5F,UAAUsE,EAAI,GAAI,GAAIO,GAI3D,GAHA0B,EAAMC,IAAIM,EAAKpC,MAAQ,EAAGoC,EAAKnC,KAC/BL,GAAKwC,EAAK1J,OAAS,EACnB8I,GAAU,EACNH,EAAe,CACf,IACI1B,GACAA,EAAQH,aAFF0B,EAAK5F,UAAUsE,GAEIQ,WAAYiB,MACrCC,EAAQe,OAAS1C,EACjBrJ,GAAO,EAEf,CACJ,CACJ,MACK,GAAK6K,GAiEL,GAAIhB,IAASZ,SAAS4B,GACvB,OAAOD,EAAK5F,UAAU,EAAGsE,OAlEZ,CACb,IACI0C,EACAC,EAFAC,EAAMtB,EAAK5F,UAAUsE,GAAGQ,WAG5B,GAAIiB,EAAe,CACf,IAAI1B,EACJ,GAAIA,EAAQH,aAAagD,EAAKnB,GAAgB,CAC1CC,EAAQe,OAAS1C,EACjBC,IACAtJ,GAAO,EACP,KACJ,CACJ,CACA,GAAIiM,EAAc7B,QAAQb,KAAK2C,GAC3B5C,GAAK2C,EAAY,GAAG7J,OAAS,EAC7B8J,EAAMtB,EAAK5F,UAAUsE,GAAGQ,gBAEvB,GAAI6B,GAAY9B,EAAM,CACvB,IAAIR,EACJ,GAAa,MAATQ,GAAiByB,EAAchC,EAAIsB,EAAKlB,SAAWwB,IAAYW,EAAkB,CACjF,GAAIV,EACA9B,EAAQ,CAAC,UAER,GAAIiC,EAAchC,EAAIsB,EAAKlB,OAAQ,CACpCmC,GAAkB,EAClBvC,IACAqC,EAAW,IACX,QACJ,CACA9B,EAAOqC,EAAM,GACjB,MAEIL,GAAkB,EAEjBxC,IACDA,EAAQH,aAAagD,EAAK9C,IAE1BC,IACArJ,GAAO,IAENA,IAASgM,EAAY3B,QAAQd,KAAK2C,MACnCN,GAAa,EACTI,EAAU,GAAG5J,OAAS,IACtB4I,EAAQC,MAAMkB,KAAKH,EAAU,IAC7BhB,EAAQoB,YAAcJ,EAAU,GAC5BA,EAAU,KACVhB,EAAQqB,SAAWL,EAAU,KAGjCA,EAAU,GAAG5J,OAAS,IACtBkH,GAAK0C,EAAU,GAAG5J,OAAS,GAGvC,CASA,GARI8I,IACIf,aAAamC,KAAKJ,GAClBlM,GAAO,EAGPkL,GAAU,GAGdlL,EACA,KACP,CAID2L,EAAW9B,CACf,CACA,GAAIgB,EACA,MAAM,IAAIxI,YAAY,aAAewI,EAAQ,KAKjD,OAHIG,IACAA,EAAQuB,SAAWX,GAEhBhB,EAAK5F,UAAU,EAAGsE,EAC7B,CACAoB,UAAU9K,KAAO,CACb,WACA,SACA,YAEJ,MAAM4M,iBAAmB,CAAC,aAAc,YAAa,cAAe,QAAS,WAAY,OAAQ,oBAAqB,UACzGC,YAAcA,CAACjH,EAAOkH,KAC/BlH,EAAMmH,SAASC,IACXlI,UAAU8G,IAAIoB,EAAMF,EAAG,GACzB,EAEAG,eAAiB,CACnB7F,YAAe,MACfD,aAAgB,MAChBY,MAAS,MACTd,UAAa,MACbV,KAAQ,OAEN2G,YAAc,CAChB9F,YAAe,GACfD,aAAgB,GAChBY,MAAS,GACTd,UAAa,GACbV,KAAQ,EACRW,KAAQ,EACR,QAAS,GACT,QAAS,IAEb2F,YAAY,CAAC,cAAe,eAAgB,QAAS,YAAa,SAAS,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC5G,IAAIC,EAAUhD,YACViD,EAAM,GACNxD,GAAM,EACNL,EAAIyD,EAAI,GAAG3K,OACf,MAAMsH,EAAQJ,EACd,KAAOA,EAAIsB,EAAKxI,SAAWuH,GACvBuD,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,CAC9CuD,eAAeD,GACf,OAEJtD,GAAK4D,EAAQ9K,OACT8K,EAAQlD,OAAO5H,QACf+K,EAAIhB,KAAKe,GAEQ,MAAjBtC,EAAKf,KAAKP,GACVK,GAAM,EAGNL,IAGR,MAAM1J,EAAO,CAAC,QAAS,WAAY,OAAQ,oBAAqB,UAChE,IAAIwN,EACAC,EACJ,OAAQT,GACJ,IAAK,QACL,IAAK,YACDQ,EAAIE,YAAY3C,EAAWC,EAAK5F,UAAU0E,EAAOJ,IACjD,MACJ,IAAK,OACL,IAAK,cAED8D,EAAID,EAAII,KAAK1N,GAAM2N,QAAQ7C,EAAW9K,EAAG,IAAID,EAAM,kBACnD,MACJ,IAAK,eACDwN,EAAID,EAAII,KAAKpE,IAET,IAAIzJ,EADJyJ,EAAMA,EAAIY,YAEV,IAAI0D,EAAM,GAEV,GADAJ,EAAY/H,YAAYgD,YAAY9C,MAAM+C,SAASgB,KAAK,YAAcJ,GAClEkE,EACAI,EAAMJ,EAAU,GAAGtD,YACnBrK,EAAQ8N,QAAQ7C,EAAW,IAAInB,WAAW,YAAcL,EAAIW,WAAWjG,QAAQ4J,EAAK,UAEnF,CACD,IAAIP,EAAUxC,UAAUC,EAAWxB,EAAK,CAAC,OACzCsE,EAAMD,QAAQ7C,EAAWuC,EAAS,IAAItN,EAAM,iBAC7B,IAAX6N,EAAI,KACJA,EAAMA,EAAI,IAEd/N,EAAQ8N,QAAQ7C,EAAWxB,EAAInE,UAAUkI,EAAQ9K,OAAS,GAC9D,CACA,OAAOiC,WAAW,CACdE,GAAI,EACJC,EAAGiJ,EACHhJ,EAAG/E,GACL,IAId,IAAIgO,EAAqB,cAATd,EAAwBG,EAAI,GAAK,GAAiC,EAAmC,SAATH,EAAmBG,EAAI,GAAK,GAAiC,EAAyBD,YAAYF,GAC9MK,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUsE,EAAI,GAAIhE,YAAY0H,GAAQpN,KAAMyE,WAAW,CAC1FE,GAAImJ,EACJlJ,EAAGyI,EAAIU,SACPlJ,EAAG2I,IACJ,IAEP,MAAMQ,cAAgB,CAClBrH,QAAW,GACXD,IAAO,GACPG,SAAY,GACZD,SAAY,GACZE,OAAU,GACVC,OAAU,IAEd8F,YAAY,CAAC,UAAW,MAAO,WAAY,WAAY,SAAU,WAAW,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7G,IAAIC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,CAAC,6BACnE6K,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS2K,EAAI,GAAG3K,QAASsI,UAAU9K,KAAMyE,WAAW,CACzGE,GAAIqJ,cAAchB,GAClBpI,EAAGyI,EAAIU,SACPlJ,EAAG+I,QAAQ7C,EAAWuC,EAAS5H,YAAY0H,GAAQpN,QACpD,IAEP,MAAMiO,eAAiB,CACnB,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,IAEXpB,YAAY,CAAC,sBAAsB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACpE,IAAIC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU,GAAI,CAAC,iBACvDiI,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS,GAAIsI,UAAU9K,KAAMyE,WAAW,CAC7FE,GAAIsJ,eAAed,EAAI,GAAK,KAC5BvI,EAAGgJ,QAAQ7C,EAAWuC,EAAS5H,YAAY0H,GAAQpN,MACnD6E,EAAG,IACJ,IAEPgI,YAAY,CAAC,qBAAqB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACnEA,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAIsJ,eAAe,IAAMd,EAAI,IAC7BvI,EAAGyI,EAAIU,SACPlJ,EAAG,IACJ,IAEP,MAAMqJ,WAAa,CACf,KAAM,GACN,KAAM,GACNC,WAAc,GACdC,GAAM,GACN,IAAK,EACL,KAAM,GACN,KAAM,GACN,KAAM,GACN,MAAO,GACP,KAAM,GACN,KAAM,GACN,KAAM,GACN,KAAM,GACN,KAAM,GACN,OAAQ,GACR,MAAO,GACP,MAAO,IAEXvB,YAAY,CAAC,SAAU,eAAgB,WAAW,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACnFA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAIuJ,WAAWf,EAAI,IACnBvI,EAAGyI,EAAIU,SACPlJ,EAAG+I,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,OAC3E,IAEN,MAAMqO,QAAU,CACZ,IAAK,GACL,IAAK,GACL,IAAK,GACL,KAAM,GACN,KAAM,GACN,MAAO,GACP,KAAM,GACN,KAAM,GACN,IAAK,GACL,IAAK,GACL,MAAO,GACP,KAAM,GACN,MAAO,GACP,KAAM,GACN,IAAK,GACL,IAAK,GACL,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,IAuDT,SAASC,cAAcvD,EAAWC,GAC9B,IAGIuD,EAEAC,EALAC,EAAQ,EACRhF,EAAQuB,EAAK5F,UAAU,EAAG,GAC1BsJ,EAAYpE,YAEZqE,GAAQ,EAERvD,EAAU,CAAA,EACd,MAAQ3B,EAAQqB,UAAUC,EAAWC,EAAK5F,UAAUqE,EAAMM,IAAMiB,EAAKlB,OAAQ,CAACvE,OAAQC,OAAQkF,gBAAYnI,OAAWA,OAAWA,EAAW6I,IAAU5I,QAAUmM,GAAO,CAClKA,GAAQ,EACR,MAAMC,EAAI5D,EAAK5F,UAAUqE,EAAMM,IAAMiB,EAAKlB,OAAOI,WACjD,GAAI0E,EAAEC,WAAW,MACbpF,EAAMM,MACN0E,SAEC,GAAIG,EAAEC,WAAW,QAClBN,EAAYvD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OAC/CL,EAAMM,MACN0E,IACKA,GACDhF,EAAMM,UAGT,MAAIyE,EAAU,uBAAuB7E,KAAKiF,IAQ1C,CACDL,EAAYG,EAAUlM,OAAS+L,EAAYvD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OAC9E,KACJ,CAVIyE,EAAYvD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OAC/CL,EAAMM,KAAOyE,EAAQ,GAAGhM,OAAS,EACjCiM,IACKA,IACDhF,EAAMM,KAAOyE,EAAQ,GAAGhM,OAAS,EAMzC,CACA,IAAKiM,EAAO,CAERC,EADSJ,cAAcvD,EAAWC,EAAK5F,UAAUqE,EAAMM,IAAMiB,EAAKlB,MAAS,uBAAuBH,KAAKiF,KAAK,GAAGpM,SAChGsM,IACf,KACJ,CACA1D,EAAU,CAAA,CACd,CAEA,OADAmD,EAAYA,GAAavD,EAAK5F,UAAU,EAAGqE,EAAMM,IAAMiB,EAAKlB,OACrD,CAAEgF,IAAK9D,EAAK5F,UAAU,EAAG2J,KAAKC,IAAIT,EAAUxE,IAAK2E,EAAU3E,KAAOiB,EAAKlB,OAAQmF,KAAMV,EAAWW,MAAOR,EAClH,CAjGA7B,YAAY,CAAC,SAAU,KAAM,aAAc,YAAY,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACxF,MAAMrN,EAAO,CACT0F,YAAYO,SAASL,MAAMK,SAC3BX,cAEJ,OAAQ0H,GACJ,IAAK,SACDhN,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMC,QACzC,IAAK,KACD7F,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMjB,IACzC,IAAK,aACD3E,EAAKuM,KAAK7G,YAAYC,SAASC,MAAME,YACzC,IAAK,UACD9F,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMI,SACrChG,EAAKuM,KAAK7G,YAAYC,SAASC,MAAMG,QAE7C,IAAIuH,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASxC,GAClEqN,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS2K,EAAI,GAAG3K,QAASsI,UAAU9K,KAAMyE,WAAW,CACzGE,GAAI0J,QAAQlB,EAAI,IAChBvI,EAAGyI,EAAIU,SACPlJ,EAAG+I,QAAQ7C,EAAWuC,EAAS5H,YAAY0H,GAAQpN,QACpD,IAEP6M,YAAY,CAAC,aAAa,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC3D,IAAI5D,GAAQ,EACR6D,EAAUtC,EAAK5F,UAAU,EAAG,GAC5B+J,EAAa,EACjB,MAAQ1F,GAAS6D,EAAQ9K,OAASwI,EAAKxI,QACnC8K,EAAQvD,IAAMe,UAAUC,EAAWC,EAAK5F,UAAUkI,EAAQ9K,OAAS,GAAI,CACnEkD,YAAYO,SAASL,MAAMK,SAC3BX,eACDyE,IAC+B,MAA9BiB,EAAKf,KAAKqD,EAAQ9K,QAClB2M,IAGAA,IAECA,IACD1F,GAAQ,GAGhB6D,EAAQxD,MAAQkB,EAAKlB,MAAQ,EAC7BuD,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAGyI,EAAIU,SACPlJ,EAAGJ,WAAW,CACVE,GAAI,GACJC,EAAG8I,YAAY3C,EAAWuC,GAC1BzI,EAAG6I,YAAY3C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS8K,EAAQ9K,OAAS,OAEhF,IA+CNqK,YAAY,CAAC,OAAO,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACrD,IAAI+B,EAAYtE,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,GAAI,KACxE,MAAM6M,EAAKf,cAAcvD,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,SAC1C,SAASmH,KAAKqB,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS4M,EAAU5M,OAAS,GAAG0H,YACnF,MAAMoF,EAAYnC,EAAI,GAAG3K,OAAS2K,EAAI,GAAG3K,OAAS4M,EAAU5M,OAAS,EACrE,IAAI+M,EAAYF,EAAGJ,KAAK7J,UAAUkK,GAC9BE,EAAYH,EAAGH,MACnBE,EAAYA,EAAUhF,OACtBmF,EAAYA,EAAUnF,OACtBoF,EAAYA,EAAUpF,OACI,MAAtBmF,EAAUtF,KAAK,KACfsF,EAAYA,EAAUjM,MAAM,GAAI,IACV,MAAtBkM,EAAUvF,KAAK,KACfuF,EAAYA,EAAUlM,MAAM,GAAI,IACpC+J,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG8I,YAAY3C,EAAWqE,GAC1BvK,EAAGJ,WAAW,CACVE,GAAI,GACJC,EAAG6K,aAAaF,EAAWxE,GAC3BlG,EAAG4K,aAAaD,EAAWzE,MAEjC,IAEN8B,YAAY,CAAC,WAAW,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACzD,MAAMX,EAAO5B,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,GAAI,KACrE,IAAIsH,EAAQkB,EAAKd,WAAWwF,QAAQ,IAAKvC,EAAI,GAAG3K,OAASkK,EAAKlK,OAAS,GACvE,IAAe,IAAXsH,EACA,MAAM,IAAIrH,YAAY,kBAC1B,IACIkN,EADAC,EAAYC,iBAAiB9E,EAAWD,UAAUC,EAAWC,EAAK5F,UAAU0E,EAAQ,GAAI,GAAI,MAEhG,MAAMgG,EAAW,0BACjB,IAAIC,EAAQ,GACRC,GAAe,EACnB,KAAOL,EAAYG,EAASnG,KAAKiG,EAAU1F,aAAa,CACpD,GAAqB,YAAjByF,EAAU,GAAkB,CAC5B,GAAIK,EACA,MAAM,IAAIvN,YAAY,wCAC1BuN,GAAe,CACnB,CACA,IAAIC,EAAOnF,UAAUC,EAAW6E,EAAUxK,UAAUuK,EAAU,GAAGnN,QAAS,CAAC,OACvEiH,EAAQa,YACRZ,EAAII,EAAQ6F,EAAU,GAAGnN,OAASyN,EAAKzN,OAAS,EAChD0N,EAAe,SAASvG,KAAKiG,EAAUxK,UAAUsE,GAAGQ,YACpDiG,EAAQ,GACZ,GAAID,EACAxG,GAAKwG,EAAa,GAAG1N,OACrBiH,EAAQqB,UAAUC,EAAW6E,EAAUxK,UAAUsE,GAAI,GAAI,KACzDA,GAAKD,EAAMjH,OAAS,EACpB2N,EAAQV,aAAahG,EAAOsB,OAE3B,CACD,IAAIqF,EAAWtF,UAAUC,EAAW6E,EAAUxK,UAAUsE,GAAI,CAACoG,IAC7D,GAAKM,EAAShG,OAAO5H,OAIhB,CACD,MAAQiH,EAAQqB,UAAUC,EAAW6E,EAAUxK,UAAUsE,GAAI,CAACgB,aAAalI,SACvEkH,GAAKD,EAAMjH,QAA+C,MAArCoN,EAAU3F,KAAKP,EAAID,EAAMjH,QAAkB,EAAI,IAChEsN,EAASpD,KAAKkD,EAAUxK,UAAUsE,GAAGQ,eAI7CiG,EAAQV,aAAaG,EAAUxK,UAAU0E,EAAOL,EAAMM,IAAM6F,EAAU9F,OAAQiB,EAClF,MAXIoF,EAAQ,GACRzG,GAAK0G,EAAS5N,MAWtB,CACAoN,EAAYA,EAAUxK,UAAUsE,GAChCqG,EAAMxD,KAAK9H,WAAW,CAClBE,GAAI,GACJC,EAAoB,YAAjB+K,EAAU,QAAmBpN,EAAYmL,YAAY3C,EAAWkF,GACnEpL,EAAGsL,IAEX,CACA9C,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG8I,YAAY3C,EAAW2B,GAC1B7H,EAAGkL,GACL,IAENlD,YAAY,CAAC,MAAO,SAAS,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC9D,IAAInG,EAAOiG,EAAI,GACXkD,EAAQlD,EAAI,GAAG3K,OACfmC,EAAK,OACT,GAAa,QAATqI,EAAgB,CACZG,EAAI,KACJxI,EAAK,SAET,IAAI2L,EAAUtF,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAQ0H,WAAWpI,MAAM4D,YAAYwB,KAAKtB,MAAMsB,MACpF,IAAIoJ,IAAWA,EAAQ9N,OAKnB,MAAM,IAAIC,YAAY,gBAJtByE,EAAOoJ,EAAQ,GACfD,EAAQnJ,EAAK1E,OAAS2K,EAAI,GAAG3K,MAKrC,CACA6K,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUiL,GAAQ3K,YAAY0H,GAAQpN,KAAMyE,WAAW,CAC1FE,GAAIuI,YAAYvI,GAChBC,EAAGyI,EAAIU,SACPlJ,EAAGqC,IACJ,IAEP2F,YAAY,CAAC,cAAe,iBAAiB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC9EA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAa,gBAATqI,EAAyB,GAAgC,GAC7DpI,EAAG,EACHC,EAAG+I,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,OAC3E,IAEN6M,YAAY,CAAC,SAAU,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAClEA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAa,WAATqI,EAAoB,EAA0B,GAClDpI,EAAG,EACHC,EAAG6I,YAAY3C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,UAClD,IAENqK,YAAY,CAAC,SAAU,UAAW,OAAQ,MAAO,MAAO,aAAa,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACtGA,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAa,WAATqI,EAAoBG,EAAI,IAAM,GAA2B,EAA0B,GACvFvI,EAAG,EACHC,EAAGsI,EAAI,IAAMA,EAAI,GAAKA,EAAI,KAC3B,IAEPN,YAAY,CAAC,SAAU,UAAW,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7EA,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAa,WAATqI,EAAoB,EAAwC,YAATA,EAAqB,GAAiC,GAC7GpI,EAAG,EACHC,EAAGsI,EAAI,KACR,IAEPN,YAAY,CAAC,eAAe,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7D,MAAMkD,EAAgB,QAAXpD,EAAI,GAAe,GAAmC,QAAXA,EAAI,GAAe,EAAuB,EAC3FA,EAAI,GAQLE,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI4L,EACJ3L,EAAGuI,EAAI,GACPtI,EAAG+I,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,QAV7EqN,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CAClGE,GAAI4L,EACJ3L,EAAGuI,EAAI,GACPtI,EAAG,IASX,IAEJgI,YAAY,CAAC,WAAY,iBAAkB,gBAAiB,wBAAwB,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACrH,MAAMmD,EAAmB,aAATxD,GAAgC,mBAATA,EACjCyD,EAAWD,IAAYrD,EAAIA,EAAI3K,OAAS,GACxCkO,EAASF,EAAU,EAAI,EACvBG,EAAUxD,EAAI,GAAK,GAAyB,EAC5CyD,EAAOzD,EAAIuD,GAAUvD,EAAIuD,GAAQzM,QAAQ,OAAQ,IAAI4M,MAAM,MAAQ,GACpEL,GACDI,EAAKE,SAAS3D,EAAI,IAAM,IAAIhD,aAEhC,IAAI4G,GAAQ,EACZH,EAAK7D,SAASQ,IACV,GAAIwD,EACA,MAAM,IAAItO,YAAY,gDACtB8K,EAAIsB,WAAW,SACfkC,GAAQ,EAAI,IAEpBH,EAAKE,QAAQH,GACb,MAAM/B,EAAI9D,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAUiO,EAAoB,CAAC,aAAc/F,WAAxB,CAAC,OACrEsG,EAAQP,EAAW,UAAY7B,EAAIA,EAAE1E,WAC3CmD,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAASwO,EAAKxO,OAAS,GAAIkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CACpHE,GAAI6L,EAAU,GAA2C,aAATxD,EAAsB,GAA6B,GACnGpI,EAAGgM,EACH/L,EAAGkG,EAAUkG,MAAQC,gBAAgB,IAAItH,WAAWoH,GAAOjG,GAAaiG,IACzE,IAEP,MAAMG,cAAgB,2EACtBtE,YAAY,CAAC,MAAO,KAAM,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACrE,IAGI+D,EAGAhC,EAEAiC,EARA3H,EAAI,EACJ4H,EAAY,GACZC,EAAgB,GAEhBC,EAAa,EACbC,EAAa,GAEb1R,EAAO,GAEX,OAAQiN,GACJ,IAAK,QACDtD,EAAIsB,EAAKd,WAAWwF,QAAQ,KAAO,EACnC,IAAIpC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,GAAI,KAC1D0F,EAAYsC,kBAAkB3G,EAAWuC,GACzC+D,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAUsE,EAAI4D,EAAQ9K,OAAS,IAAI4H,OACpD,MAAZiH,EAAK,KACLA,EAAOA,EAAK/N,MAAM,GAAI,IAC1B,MACJ,IAAK,MACDoG,EAAIsB,EAAKd,WAAWwF,QAAQ,KAAO,EACnC,IASIiC,EATAf,EAAO,GACPgB,EAAWtH,YACf,IAAK,IAAIuH,EAAI,EAAGA,EAAI,IAChBD,EAAW9G,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,CAAC,WACpDkH,EAAKrE,KAAKqF,EAASxH,QACnBV,GAAKkI,EAASpP,OAAS,EACE,MAArBwI,EAAKf,KAAKP,EAAI,IAJCmI,KAQvB,GAAoB,IAAhBjB,EAAKpO,SAAiBmP,EAAWR,cAAcxH,KAAKiH,EAAK,GAAG1G,aACxC,OAAhByH,EAAS,IACTP,EAAcM,kBAAkB3G,EAAW6F,EAAK,GAAGxL,UAAUuM,EAAS,GAAGnP,SACrE+O,EAAgB,CACZO,SACAC,UAER3C,EAAY4C,YACZjS,EAAOkS,OACPT,EAAa5D,QAAQ7C,EAAW,IAAInB,YAAY+H,EAAS,IAAM,QAAUA,EAAS,GAAK,mBAAoB,CAAC,iBAG5GP,EAAcM,kBAAkB3G,EAAW6F,EAAK,GAAGxL,UAAUuM,EAAS,GAAGnP,SACrE+O,EAAgB,CACZW,SACAC,UAERpS,EAAOqS,OACPhD,EAAYiD,YACZb,EAAa5D,QAAQ7C,EAAW,IAAInB,YAAY+H,EAAS,IAAM,QAAUA,EAAS,GAAK,yBAA0B,CAAC,oBAGrH,IAAoB,IAAhBf,EAAKpO,OAMV,MAAM,IAAIC,YAAY,+BALtB6O,EAAY5D,YAAY3C,EAAW6F,EAAK0B,QAAS1F,kBACjDwC,EAAYsC,kBAAkB3G,EAAW6F,EAAK0B,SAC9CvS,EAAO2N,YAAY3C,EAAW6F,EAAK0B,QAIvC,CACAjB,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAUsE,IAAIU,OAC/B,MAAZiH,EAAK,KACLA,EAAOA,EAAK/N,MAAM,GAAI,IAC1B,MACJ,IAAK,KACDmO,EAAa,EACb,MAAMc,IAAYpF,EAAI,GACtBkE,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS+P,EAAU,CAAC,OAAS,CAAC7H,YAChF0E,EAAYsC,kBAAkB3G,EAAWD,UAAUC,EAAWC,EAAK5F,UAAU4F,EAAKd,WAAWwF,QAAQ,IAAKvC,EAAI,GAAG3K,OAAS6O,EAAK7O,QAAU,GAAI,GAAI,MAGzJ,MAAMoC,EAAI,CAAC6M,EAAYF,EAAeH,EAAaE,EAAWvR,EAAMqP,EAAWoC,GAC/EnE,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,IACAC,EAAG4K,aAAa4B,EAAMtG,IACxB,IAEN8B,YAAY,CAAC,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACxDA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG6K,aAAa3E,UAAUC,EAAWC,EAAK5F,UAAU,GAAI,GAAI,KAAM2F,GAClElG,EAAG,GACL,IAENgI,YAAY,CAAC,eAAe,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAC7DA,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAGuI,EAAI,GACPtI,EAAG,GACL,IAEN,MAAM2N,SAAW,sEACjB3F,YAAY,CAAC,QAAQ,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACtD,MAAMgE,EAAOvG,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,GAAI,KACrE,IACIiQ,EAEAC,EAHAC,EAAWH,SAAS7I,KAAKqB,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,GAAG0H,YAEzE0I,EAAY,GAEZC,EAAS,EACTF,EAAS,GAAG9D,WAAW,UACvB8D,EAAWH,SAAS7I,KAAKqB,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,GAAG0H,YACzE0I,EAAYD,EAAS,GACrBD,EAAY5H,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,EAAImQ,EAAS,GAAGnQ,QAAS,GAAI,KAC3GqQ,EAAS1F,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,EAAImQ,EAAS,GAAGnQ,OAASkQ,EAAUlQ,OAAS,GAC9EmQ,EAAWH,SAAS7I,KAAKqB,EAAK5F,UAAUyN,GAAQ3I,cAAgByI,EAAS,GAAG9D,WAAW,aACxF4D,EAAc3H,UAAUC,EAAWC,EAAK5F,UAAUyN,EAASF,EAAS,GAAGnQ,QAAS,GAAI,OAIxFiQ,EAAc3H,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS6O,EAAK7O,OAAS,EAAImQ,EAAS,GAAGnQ,QAAS,GAAI,KAEjH,MAAMqC,EAAI,CACN+N,EACAnD,aAAaI,iBAAiB9E,EAAW2H,GAAapI,aAAcS,GACpE0E,aAAaI,iBAAiB9E,EAAW0H,GAAenI,aAAcS,IAE1EsC,EAAIU,SAAWtJ,WAAW,CACtBE,GAAI,GACJC,EAAG6K,aAAaI,iBAAiB9E,EAAWsG,GAAOtG,GACnDlG,KACF,IAENgI,YAAY,CAAC,OAAQ,UAAU,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KAChE,MAAMC,EAAUxC,UAAUC,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,QAAS,CAAC,6BACrE6K,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAU+H,EAAI,GAAG3K,OAAS8K,EAAQ9K,QAASkD,YAAY0H,GAAQpN,KAAMyE,WAAW,CACnHE,GAAa,SAATqI,EAAkB,GAAyB,GAC/CpI,EAAGgJ,QAAQ7C,EAAWuC,GACtBzI,EAAG,IACJ,IAEPgI,YAAY,CAAC,QAAQ,CAAC9B,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,KACtD,IAAI3D,EAAIyD,EAAI,GAAG3K,OACf,MAAMkC,EAAMoG,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,QAAInH,EAAW,KACnEmH,GAAKhF,EAAIlC,OAAS,EAClB,MAAMoO,EAAO,GACb,GAAyB,MAArB5F,EAAKf,KAAKP,EAAI,GAAY,CAC1B,MAAMoJ,EAAahI,UAAUC,EAAWC,EAAK5F,UAAUsE,GAAI,GAAI,KAE/D,IAAID,EADJC,GAAKoJ,EAAWtQ,OAAS,EAEzB,IAAIuQ,EAAI,EACR,MAAQtJ,EAAQqB,UAAUC,EAAW+H,EAAW1N,UAAU2N,GAAI,CAAC,QAAQvQ,QACnEuQ,GAAKtJ,EAAMjH,OAAS,EACpBoO,EAAKrE,KAAK9C,EAAMW,OAExB,CACAiD,EAAIU,SAAWH,QAAQ7C,EAAWC,EAAK5F,UAAUsE,GAAIhE,YAAYY,QAAQtG,KAAMyE,WAAW,CACtFE,GAAI,GACJC,EAAGgJ,QAAQ7C,EAAWrG,EAAKgB,YAAY0C,WAAWpI,MAClD6E,EAAG+L,EAAKjD,KAAKJ,GAAQK,QAAQ7C,EAAWwC,EAAK7H,YAAY0C,WAAWpI,UACrE,IAEP,MAAM8R,SAAWlE,aAAQrL,EAAW,IAAIqH,WAAW,6CAA8C,CAAC,eAC5FmI,SAAWnE,aAAQrL,EAAW,IAAIqH,WAAW,kCAAmC,CAAC,eACjFoI,YAAcpE,aAAQrL,EAAW,IAAIqH,WAAW,uBAAwB,CAAC,eACzEqI,OAASrE,aAAQrL,EAAW,IAAIqH,WAAW,+BAC3CsI,SAAWtE,aAAQrL,EAAW,IAAIqH,WAAW,mCAAoC,CAAC,eAClFuI,SAAWvE,aAAQrL,EAAW,IAAIqH,WAAW,sBAAuB,CAAC,eACrEwI,OAASxE,aAAQrL,EAAW,IAAIqH,WAAW,iBAC3CyI,YAAczE,aAAQrL,EAAW,IAAIqH,WAAW,qCAAsC,CAAC,eAC7F,IAAIoJ,SAKJ,SAASpF,QAAQ7C,EAAWC,EAAMiI,EAAUlF,EAAUmF,GAAW,GAG7D,GAFAnF,EAAWA,GAAY,CAAC,EAAuB,EAAuB,GACtEkF,EAAWA,GAAYvN,YAAY0C,WAAWpI,UACjCuC,IAATyI,EACA,OAAO+C,EAEX,MAAMxE,GADNyB,EAAOA,EAAKb,aACKD,WACjB,IAAKc,EAAKxI,SAAWyQ,EAASzH,SAAS,UACnC,MAAM,IAAI/I,YAAY,gCAE1B,IAAKuI,EAAKxI,OACN,OAAOuL,EACX,IACIZ,EADAE,EAAM,CAAEU,SAAUA,GAEtB,IAAK,IAAIX,KAAU6F,EACf,GAAe,WAAX7F,EAAJ,CAGA,IAAK,IAAIJ,KAAQtH,YAAY0H,GAAQxH,MACjC,GAAa,WAAToH,IAGAG,EAAMzH,YAAY0H,GAAQxH,MAAMoH,GAAMrD,KAAKJ,IAAM,CACjDyJ,SAAWhG,EAKX,IACIlI,UAAUjB,IAAImJ,EAAdlI,CAAoBiG,EAAWiC,EAAMhC,EAAMmC,EAAKC,EAAQC,EAC3D,CACD,MAAOpN,GACH,GAAIiT,GAAYjT,aAAawC,YACzB,MAAM,IAAIsC,WAAW9E,EAAEiF,QAASqE,GAEpC,MAAMtJ,CACV,CACA,KACJ,CAEJ,GAAIkN,EACA,KAxBJ,CA0BJ,IAAKA,GAAOnC,EAAKxI,OAAQ,CAErB,GADiDwI,EAAKf,KAAK,GACvDiJ,EACA,MAAM,IAAInO,WAAW,0BAA0BiO,aAAahI,EAAKf,KAAK,KAAMV,GAEhF,MAAM,IAAI9G,YAAY,0BAA0BuQ,aAAahI,EAAKf,KAAK,KAC3E,CACA,OAAOoD,EAAIU,QACf,CACA,MAAMoF,8BAAgCvG,iBAAiBnB,QAAQ2H,GAAY,cAANA,IACrE,SAAS1F,YAAY3C,EAAWxB,EAAK0J,GACjC,IAAK1J,EAAIY,YAAY3H,OACjB,OACJ,IACI8J,EADA+G,EAAiB,GAEjBC,EAAM,EAEV,IADAL,EAAWA,GAAYvN,YAAY0C,WAAWpI,MACjCwL,SAAS,cACdlC,aAAaC,EAAIW,WAAYqJ,OAAOC,OAAO9N,YAAYkD,UAAUhD,QACjE,OAAOgI,QAAQ7C,EAAWxB,EAAK,CAAC,kBAAchH,GAAW,GAKjE,IAFI0Q,IAAarG,mBACbqG,EAAWE,gCACP7G,EAAMxB,UAAUC,EAAWxB,EAAInE,UAAUkO,GAAM,CAAC,QAAQ9Q,QAC5D6Q,EAAe9G,KAAKD,EAAInC,aACxBmJ,GAAOhH,EAAI9J,OAAS,EAExB,GAA8B,IAA1B6Q,EAAe7Q,OACf,OAAOoL,QAAQ7C,EAAWxB,EAAK0J,OAAU1Q,GAAW,GAExD,GAAI0Q,EAASzH,SAAS,cAAe,CACjC,IAAIiI,EAAU/N,YAAY0C,WAAWxC,MAAMwC,WAAWuB,KAAK0J,EAAe,GAAGnJ,YAC7E,GAAIuJ,EACA,OAAOhP,WAAW,CACdE,GAAI,GACJC,EAAGyO,EAAe1F,KAAI,CAACpE,EAAKG,IAAMkE,QAAQ7C,EAAWrB,EAAI,IAAIE,WAAW6J,EAAQ,GAAK,IAAMlK,GAAOA,EAAK,CAAC,mBAAehH,GAAW,KAClIsC,EAAG,IAGN,GAAIa,YAAY0C,WAAWxC,MAAMyC,OAAOsB,KAAK0J,EAAe,GAAGnJ,YAChE,OAAO0D,QAAQ7C,EAAWxB,EAAK0J,OAAU1Q,GAAW,EAE5D,CACA,MAAM4N,EAAQkD,EAAe1F,KAAI,CAACpE,EAAKG,IAAMkE,QAAQ7C,EAAWxB,EAAK0J,OAAU1Q,GAAW,KAC1F,OAAOkC,WAAW,CAAEE,GAAI,GAA8BC,EAAGuL,EAAOtL,EAAG,GACvE,CACO,SAAS6M,kBAAkB3G,EAAWxB,GACzC,OAAO9E,WAAW,CAAEE,GAAI,EAAyBC,EAAG,EAAuBC,EAAG6I,YAAY3C,EAAWxB,IACzG,CACO,SAASkG,aAAalG,EAAKwB,EAAW2I,GAAa,GAEtD,KADAnK,EAAMsG,iBAAiB9E,EAAWxB,IACzBa,OAAO5H,OACZ,MAAO,GACX,IACIwI,EADA2I,EAAQ,GAERL,EAAM,EACNxJ,EAAQ,EACRsB,EAAU,CAAA,EACVwI,GAAU,EACVC,GAAa,EACjB,MAAQ7I,EAAOF,UAAUC,EAAWxB,EAAInE,UAAUkO,GAAM,CAAC5I,gBAAYnI,OAAWA,OAAWA,EAAW6I,IAAU5I,SAC5GqR,EAAatK,EAAIU,KAAKqJ,EAAMtI,EAAKxI,SAA2C,MAAhC+G,EAAIU,KAAKqJ,EAAMtI,EAAKxI,QAChE8Q,GAAOtI,EAAKxI,QAAUqR,EAAa,EAAI,GACnC,qBAAqBnH,KAAKnD,EAAInE,UAAUkO,GAAKpJ,aAGxCkB,EAAQC,MAAMG,SAAS,OAAS,sBAAsBkB,KAAKnD,EAAInE,UAAUkO,GAAKpJ,YAFnF0J,GAAU,GAMVA,GAAU,EACVD,EAAMpH,KAAKhD,EAAInE,UAAU0E,EAAOwJ,GAAOO,EAAa,EAAI,KACxD/J,EAAQwJ,GAEZlI,EAAU,CAAA,GACNsI,KAMR,OAHIE,GACAD,EAAMpH,KAAKhD,EAAInE,UAAU0E,EAAOwJ,GAAOO,EAAa,EAAI,KAErDF,EAAMhG,KAAKpE,GAAQA,EAAIY,cAAasB,QAAQlC,GAAQA,EAAI/G,SAAQmL,KAAI,CAACpE,EAAKwJ,IACtErF,YAAY3C,EAAWxB,EAAIY,YAAayC,mBAEvD,CACO,SAASsE,gBAAgB3H,EAAKwB,EAAW2I,GAAa,GACzD,IAAKnK,EAAIa,OAAO5H,OACZ,MAAO,GACX,MAAMsR,EAAOrE,aAAalG,EAAKwB,EAAW2I,GAC1C,IAAIK,EAAU,GAEd,OADAC,MAAMF,EAAMC,GACLA,EAAQE,OAAOH,EAC1B,CACO,SAASI,OAAOC,GACnB,OAAOC,MAAMC,QAAQF,IAA4B,iBAAZA,EAAK,IAA+B,IAAZA,EAAK,IAA4C,KAAZA,EAAK,EAC3G,CACA,SAASH,MAAMG,EAAMhH,GACjB,GAAI+G,OAAOC,GAAO,CACd,MAAOxP,EAAIC,EAAGC,GAAKsP,EACnB,GAAW,KAAPxP,GAAuC,KAAPA,GAAsC,KAAPA,GAAwC,KAAPA,EAChGqP,MAAMpP,EAAGuI,GACT6G,MAAMnP,EAAGsI,QAER,GAAW,KAAPxI,EACLwI,EAAIZ,KAAK9H,WAAW,CAAEE,GAAI,GAAuBC,EAAGA,EAAGC,EAAG,UAEzD,GAAW,KAAPF,GAAqCC,EAAE,GAE5C,OADAuI,EAAIZ,KAAK4H,IACF,CAEd,MACI,GAAIC,MAAMC,QAAQF,GAAO,CAC1B,MAAMG,EAAM,GACZ,IAAK,IAAIC,KAAMJ,EACNH,MAAMO,EAAIpH,IACXmH,EAAI/H,KAAKgI,GAGbD,EAAI9R,SAAW2R,EAAK3R,SACpB2R,EAAK3R,OAAS,EACd2R,EAAK5H,QAAQ+H,GAErB,CACA,OAAO,CACX,CACA,MAAME,oBAAsB,0DAEtBC,YAAc,6FAcb,SAAS5E,iBAAiB9E,EAAWxB,GACxC,IAAImL,EAAOnL,EACP+C,EAAMhC,YACNc,EAAU,CAAA,EACd,MAAMuJ,EAAWhK,mBAAmB9G,IAAI0F,EAAIM,MAAQ,IAAIuK,MAAM7K,EAAIM,IAAIN,IAAI/G,QAC1E,MAAQ8J,EAAMxB,UAAUC,EAAW2J,EAAM,QAAInS,OAAWA,EAAW,CAACkS,aAAcrJ,IAAU5I,QAAQ,CAChG,IAAIoS,GAAQ,EACR5J,EAAOsB,EACPuI,EAAOvI,EAAI9J,OACf,GAAI4I,EAAQe,OAAQ,CAChByI,GAAQ,EACR,MAAWhQ,CAAAA,CAAAA,EAAOC,CAAAA,CAAAA,GAAKuG,EAAQe,OAG/B,GAFA0I,EAA6B,OAAtBzJ,EAAQe,OAAO,IAAqC,OAAtBf,EAAQe,OAAO,GAAcG,EAAI9J,OAAS,EAAI8J,EAAI9J,OACvFwI,EAAO0J,EAAKtP,UAAU,EAAGyP,GACrBhQ,EAAG,CACH,IAAIsI,EAAMqH,oBAAoB7K,KAAK+K,EAAKtP,UAAUkH,EAAI9J,OAAS,GAAG0H,YAC9DiD,EAEIyH,EADW,UAAXzH,EAAI,IACyB,OAArB/B,EAAQqB,SAMM,aAArBrB,EAAQqB,UAAoD,MAAzBrB,EAAQe,OAAO,GAAG,IAA8C,MAAhCf,EAAQe,OAAO,GAAG7I,OAAO,KACjGsR,GAAQ,EAEf,MACQhQ,IACoB,OAArBwG,EAAQqB,UAA0C,UAArBrB,EAAQqB,UAA6C,QAArBrB,EAAQqB,UAA2C,SAArBrB,EAAQqB,WACnGmI,GAAQ,GAGpB,CACIA,IACAD,EAAS3J,EAAKjB,MAAO,GAEzB2K,EAAOA,EAAKtP,UAAUyP,GACtBzJ,EAAU,CAAA,CACd,CAEA,OADAT,mBAAmBiB,IAAIrC,EAAIM,IAAK8K,GACzBpL,CACX,CACO,SAASuL,WAAWvL,GACvB,IAAIG,EAAI,EACJoC,GAAS,EACT1L,GAAO,EACP2U,GAAS,EACb,KAAOrL,EAAIH,EAAI/G,SAAWpC,IAAS2U,GAC/B3U,EAAmB,MAAXmJ,EAAIG,KAAeoC,EAC3BA,EAAoB,OAAXvC,EAAIG,KAAgBoC,EAC7BiJ,EAAoB,OAAXxL,EAAIG,GACbA,IAEJ,IAAIsL,EAAQzL,EAAInE,UAAUsE,GAE1B,GADAqL,EAAUA,IAAW3U,GAAS,SAASsM,KAAKsI,GACxCD,EACA,OAAO,KACX,IAAIE,EAAQ,UAAUtL,KAAKqL,GAC3B,MAAI,aAAatI,KAAKnD,EAAInE,UAAUsE,EAAIuL,EAAM,GAAGzS,SACtC,KAEJ,CACHgF,MAAO+B,EAAInE,UAAU,EAAGsE,EAAI,GAC5BuL,MAAQA,GAASA,EAAM,IAAO,GAC9BzS,OAAQkH,GAAMuL,GAASA,EAAM,GAAGzS,QAAW,GAEnD,CACA,MAAM0S,UAAY,gEACZC,eAAiB,gCAChB,SAASC,iBAAiBrK,EAAWxB,EAAK8L,EAAmB,IAChE,IAAIpK,EAGAqK,EAFAhI,EAAU,GACVxB,GAAS,EAETyJ,EAAU,GACVC,GAAgB,EAChBC,EAAS,GACTxL,EAAO,GACX,MAAMyL,EAAS,GACTC,EAAa,GACnB,IAAIC,EACJ,IAAK,IAAIlM,EAAI,EAAGA,EAAIH,EAAI/G,OAAQkH,IAE5B,GADAO,EAAOV,EAAIG,GACP6L,EACItL,IAASsL,IACO,MAAZA,GAAkC,MAAfhM,EAAIG,EAAI,IAC3B6L,EAAU,GACV7L,KAEiB,OAAZ6L,IACLA,EAAU,SAIjB,CACD,GAAIzJ,EAAQ,CACRA,GAAS,EACTwB,EAAQf,KAAKtC,GACb,QACJ,CACA,GAAIgB,EACA,GAAc,MAAVA,GAA0B,MAAThB,GAA+B,MAAfV,EAAIG,EAAI,GAAY,CACrD,IAAIwC,EAAOkJ,iBAAiBrK,EAAWxB,EAAInE,UAAUsE,EAAI,GAAI,KAC7D+L,EAAOlJ,KAAKL,EAAK3C,KACjB+D,EAAQf,KAAK,KAAMkJ,EAAOjT,OAAS,EAAG,KACtCkH,GAAKwC,EAAK1J,OAAS,CACvB,MACK,GAAIyI,IAAUhB,EAAM,CACrB,GAAc,MAAVgB,EAAe,CACf,MAAM4K,EAAKpR,WAAW,CAClBE,GAAI,GACJC,EAAGb,MAAMuJ,EAAQwI,KAAK,KACtBjR,EAAG,KAEPgR,EAAGE,cAAgBN,EACnB1K,EAAUiL,SAASzJ,KAAKsJ,GACxBH,EAAOnJ,KAAK,IAAMxB,EAAUiL,SAASxT,OAAS,EAAG,IACrD,MAEIuI,EAAUkL,QAAQ1J,KAAKxI,MAAMuJ,EAAQwI,KAAK,MAC1CJ,EAAOnJ,KAAK,IAAKxB,EAAUkL,QAAQzT,OAAS,EAAG,KAEnDyI,EAAQ,KACRqC,EAAU,EACd,MAEIA,EAAQf,KAAKtC,OAGhB,CACD,GAAc,MAATA,GAAyB,MAATA,GAAyB,MAATA,EACjCwL,EAAS,GACTxK,EAAQhB,MAEP,IAAIZ,SAASgM,KAAsBpL,IAAS0L,EAAWnT,OACxD,MAAO,CAAE+G,IAAKmM,EAAOI,KAAK,IAAKtT,OAAQkH,GAElCL,SAASY,IACd0L,EAAWpJ,KAAKtC,GAChByL,EAAOnJ,KAAKtC,IAEPZ,SAASsM,EAAWA,EAAWnT,OAAS,MAAQyH,GACrD0L,EAAWO,MACXR,EAAOnJ,KAAKtC,IAEE,MAATA,GAAgC,MAAfV,EAAIG,EAAI,IAA6B,MAAfH,EAAIG,EAAI,GAItC,MAATO,IAAiB2L,IAAqBN,EAAaR,WAAWvL,EAAInE,UAAUsE,MACjFqB,EAAUoL,QAAQ5J,KAAK+I,GACvBI,EAAOnJ,KAAK,IAAKxB,EAAUoL,QAAQ3T,OAAS,EAAG,MAC/CkH,GAAK4L,EAAW9S,OAAS,GAGzBkT,EAAOnJ,KAAKtC,IATZsL,EAAyB,MAAfhM,EAAIG,EAAI,GAAa,IAAM,KACrC8L,EAAe9L,EASnB,CACKkM,GAAqBnQ,MAAMiH,KAAKzC,KAC7B2L,EAAmBT,eAAexL,KAAKJ,EAAInE,UAAUsE,MACjDwL,UAAUxI,KAAKnD,EAAInE,UAAU,EAAGsE,EAAIkM,EAAiB,GAAGpT,WACxDoT,EAAmB,KAInC,CACA9J,EAASb,GAAkB,OAAThB,CACtB,CAEJ,GAAIsL,GACgB,MAAZA,EACA,MAAM,IAAI9S,YAAY,0BAA0B8G,EAAInE,UAAUoQ,MAGtE,MAAO,CAAEjM,IAAKmM,EAAOI,KAAK,IAAKtT,OAAQkH,EAC3C,CACO,SAAS0M,QAAMhV,EAAM6P,GAAQ,EAAOyC,GAAa,GACpD,GAAoB,iBAATtS,EACP,MAAM,IAAI2D,WAAW,gBAAgB3D,IAAQA,GACjD,IAAImI,EAAM,IAAMnI,EAChB,MAAM2J,EAAY,CAAEkL,QAAS,GAAID,SAAU,GAAIG,QAAS,GAAIlF,SAC5D1H,EAAM6L,iBAAiBrK,EAAWxB,GAAKA,IACvC,IAAK,IAAIiE,KAAKzC,EAAUiL,SACpBxI,EAAE,GAAKA,EAAEuI,cAAcpI,KAAK0I,GAAO3I,YAAY3C,EAAW,IAAInB,WAAWyM,aAClE7I,EAAEuI,cAEb,MAAO,CAAEjC,KAAM5C,gBAAgB,IAAItH,WAAWL,GAAMwB,EAAW2I,GAAa3I,YAChF,CCv6CO,MAAMuL,WACTrR,WAAAA,CAAYsR,EAAapW,EAAQqW,EAAUC,GAAY,EAAOC,GAAe,GACzErR,KAAKkR,YAAcA,EACnBlR,KAAKlF,OAASA,EACdkF,KAAKmR,SAAWA,EAChBnR,KAAKoR,UAAYA,EACjBpR,KAAKqR,aAAeA,CACxB,EAEG,MAAMC,KACT1R,WAAAA,CAAY2R,EAAS1P,EAAM2P,GAAU,EAAOC,GAAW,EAAOC,GAAa,GACvE1R,KAAKuR,QAAUA,EACfvR,KAAK6B,KAAOA,EACZ7B,KAAKwR,QAAUA,EACfxR,KAAKyR,SAAWA,EAChBzR,KAAK0R,WAAaA,CACtB,CACAlT,GAAAA,CAAI+S,GACA,QAAqBrU,IAAjB8C,KAAKuR,QACL,MAAM,IAAII,eAAe,GAAG3R,KAAK6B,uBAErC,OADA0P,EAAQK,iBAAiBlK,SAASmK,GAAOA,EAAG7R,KAAKuR,QAASvR,KAAK6B,QACxD7B,KAAKuR,QAAQvR,KAAK6B,KAC7B,EAEJ,MAAMiQ,SAAW,CAAA,EACXC,cAAgB,IAAIC,IAAI,CAC1B,aACA,SACA,SACA,MACA,QACA,KACA,UACA,OACA,KACA,KACA,MACA,MACA,QACA,MACA,SACA,QACA,OACA,QACA,KACA,QACA,WACA,MACA,WACA,QACA,QACA,SACA,SAEJ,IAAIC,QAMJ,SAASC,SAAS7S,GACd,MAAM8S,EAAMjE,OAAOnN,OAAO,CAAE,EAAE1B,GAC9B,IAAK,IAAImJ,KAAO2J,EACZA,EAAI3J,IAAO,EAEf,OAAO2J,CACX,EAXA,SAAWF,GACPA,EAAa,IAAI,MACjBA,EAAe,MAAI,QACnBA,EAAa,IAAI,KACpB,CAJD,CAIGA,UAAYA,QAAU,CAAE,IAQpB,MAAMG,MACTxS,WAAAA,CAAYyS,EAAQC,EAAO,CAAA,EAAIC,GAC3BvS,KAAKwS,MAAQ,GACbxS,KAAKyS,IAAM,GACXzS,KAAK0S,IAAM,GACX,MAAMC,OAA+BzV,IAAjBqV,GAAyC,OAAXF,EAClDrS,KAAKqS,OAASA,EACdrS,KAAK4S,QAAUN,EACftS,KAAKyS,IAAME,EAAc3S,KAAKyS,IAAMP,SAASI,GAC7CtS,KAAK0S,IAAMC,EAAcT,SAASI,GAAQtS,KAAK0S,IAC/C1S,KAAK6S,QAAqB,OAAXR,EAAkBH,SAASI,GAAQ,GAClDtS,KAAKuS,aAAeA,CACxB,CACA/T,GAAAA,CAAIgK,EAAKsK,GAAgB,GACrB,GAAY,SAARtK,QAAwCtL,IAAtB8C,KAAKuS,aACvB,OAAO,IAAIjB,KAAK,CAAEtR,KAAMA,KAAKuS,cAAgB/J,GAAK,GAAM,GAAO,GAEnE,GAAIuJ,cAAcvL,IAAIgC,GAClB,MAAM,IAAIpL,YAAY,sBAAwBoL,EAAM,KACxD,GAAoB,OAAhBxI,KAAKqS,SAAoBS,QAAuC5V,IAAtB8C,KAAKuS,aAA4B,CAC3E,GAAIvS,KAAK6S,QAAQE,eAAevK,GAC5B,OAAO,IAAI8I,KAAKtR,KAAKuS,aAAc/J,GAAK,GAAO,GAAM,GAEzD,GAAIA,KAAOxI,KAAK4S,YAAcpK,IAAO,CAAA,IAAOxI,KAAK4S,QAAQG,eAAevK,IACpE,OAAO,IAAI8I,KAAKtR,KAAK4S,QAASpK,EAAKxI,KAAKwS,MAAMO,eAAevK,GAAMxI,KAAK6S,QAAQE,eAAevK,IAAM,GAEzG,GAAoB,OAAhBxI,KAAKqS,OACL,OAAO,IAAIf,UAAKpU,EAAWsL,EAEnC,CACA,OAAOxI,KAAKqS,OAAO7T,IAAIgK,EAAKsK,EAChC,CACAvM,GAAAA,CAAIiC,EAAKwK,GACL,GAAY,SAARxK,EACA,MAAM,IAAIpL,YAAY,6BAC1B,GAAI2U,cAAcvL,IAAIgC,GAClB,MAAM,IAAIpL,YAAY,sBAAwBoL,EAAM,KACxD,IAAI3G,EAAO7B,KAAKxB,IAAIgK,GACpB,QAAqBtL,IAAjB2E,EAAK0P,QACL,MAAM,IAAII,eAAe,aAAanJ,wBAE1C,GAAI3G,EAAK2P,QACL,MAAM,IAAIyB,UAAU,oCAAoCzK,MAE5D,GAAI3G,EAAK4P,SACL,MAAM,IAAIyB,aAAa,oCAAoC1K,MAG/D,OADA3G,EAAK0P,QAAQ1P,EAAKA,MAAQmR,EACnBnR,CACX,CACAsR,OAAAA,CAAQ3K,EAAKb,EAAO,KAAMlN,OAAQyC,EAAWuU,GAAW,GACpD,GAAY,SAARjJ,EACA,MAAM,IAAIpL,YAAY,6BAC1B,GAAI2U,cAAcvL,IAAIgC,GAClB,MAAM,IAAIpL,YAAY,sBAAwBoL,EAAM,KACxD,GAAa,QAATb,QAAwCzK,IAAtB8C,KAAKuS,cAA8C,OAAhBvS,KAAKqS,OAC1D,OAAOrS,KAAKqS,OAAOc,QAAQ3K,EAAKb,EAAMlN,EAAOgX,GAE5C,KAAKzR,KAAK2H,GAAMoL,eAAevK,IAAiB,UAATb,GAAqB3H,KAAK6S,QAAQE,eAAevK,KAAWA,KAAOxI,KAAK4S,QAQhH,MAAM,IAAIM,aAAa,eAAe1K,gCAE1C,OATQiJ,IACAzR,KAAK6S,QAAQrK,IAAO,GAExBxI,KAAK2H,GAAMa,IAAO,EAClBxI,KAAK4S,QAAQpK,GAAO/N,EAKjB,IAAI6W,KAAKtR,KAAK4S,QAASpK,EAAKxI,KAAKwS,MAAMO,eAAevK,GAAMiJ,EACvE,EAIG,MAAM2B,YAEN,MAAMF,qBAAqBvT,OAElC,IAAI0T,aACG,SAASC,gBAAgB/B,EAASgC,GACrC,OACA,YAA4BC,GACxB,IACIC,EAAS1C,QADFyC,EAAO3C,OAAS,IAE3B,OAAO6C,eAAeF,EAAQC,EAAOhF,KAAe4E,aAAc,IAC3D9B,EACH7L,UAAW+N,EAAO/N,UAClB+I,KAAMgF,EAAOhF,WACdvR,EAAW,YAClB,CACJ,CACA,SAASyW,aAAaC,EAAUrI,GAC5B,MAAM+G,EAAO,CAAA,EASb,OARAsB,EAASlM,SAAQ,CAACQ,EAAK7D,KACf6D,EAAIsB,WAAW,OACf8I,EAAKpK,EAAInI,UAAU,IAAMwL,EAAKtN,MAAMoG,GAGpCiO,EAAKpK,GAAOqD,EAAKlH,EACrB,IAEGiO,CACX,CACA,MAAMuB,mBAAqB,IAAIC,QACxB,SAASJ,eAAeE,EAAUH,EAAQF,EAAOhC,EAASwC,EAAOC,GACpE,GAAIzC,EAAQvJ,IAAIiM,QAAQC,uBACpB,MAAM,IAAIhB,aAAa,kCAE3B,IAAIvH,EAiBJ,OAfIA,OADSzO,IAAT8W,EACOrI,IAAIJ,KACP,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,OADY4I,YAAYZ,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,KAClFxX,MAAM,EAId,YAA4ByQ,GAC/B,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,OADY4I,YAAYZ,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,EAAMtS,QACxFlF,QAGnByW,EAAQ6C,wBAAwBzI,GAChCkI,mBAAmBQ,IAAI1I,GAChBA,CACX,CACO,SAAS2I,oBAAoBV,EAAUH,EAAQF,EAAOhC,EAASwC,EAAOC,GACzE,GAAIzC,EAAQvJ,IAAIiM,QAAQC,uBACpB,MAAM,IAAIhB,aAAa,kCAE3B,IAAK3B,EAAQvJ,IAAIuM,oBAAoB/N,IAAInM,QAAQma,WAC7C,MAAM,IAAItB,aAAa,6BAE3B,IAAIvH,EAiBJ,OAfIA,OADSzO,IAAT8W,EACOS,SAAUlJ,KACb,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,aADkBmJ,iBAAiBnB,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,MAC7FxX,MAAM,EAId2Z,kBAAkClJ,GACrC,MAAM+G,EAAOqB,aAAaC,EAAUrI,GAEpC,aADkBmJ,iBAAiBnB,EAAOhC,EAASkC,OAAkBvW,IAAV6W,EAAsB,GAAK,CAAC,IAAI3B,MAAM2B,EAAOzB,EAAMtS,SACnGlF,QAGnByW,EAAQ6C,wBAAwBzI,GAChCkI,mBAAmBQ,IAAI1I,GAChBA,CACX,CACO,SAASgJ,cAAchJ,GAC1B,OACA,SAAqB5P,GACjB,OAAO4P,EAAK5P,EAAL4P,EACX,CACJ,CACO,SAASiJ,oBAAoBjJ,GAChC,OAAO,SAA2BkJ,KAAYtJ,GAC1C,MAAuB,iBAAZsJ,EACAC,WAAWD,KAAYtJ,GAC3BuJ,WAAWnJ,EAAKkJ,MAAatJ,GAE5C,CACO,SAASwJ,qBAAqBpJ,GACjC,OAAO,SAA4BkJ,KAAYtJ,GAC3C,MAAuB,iBAAZsJ,EACAG,YAAYH,KAAYtJ,GAC5ByJ,YAAYrJ,EAAKkJ,MAAatJ,GAE7C,CACO,SAAS0J,YAAY5V,EAAKkS,EAASjS,EAAK,UAC3C,QAAoBpC,IAAhBmC,EAAIkS,QACJ,MAAM,IAAII,eAAe,UAAUrS,yBAEvC,GAA2B,iBAAhBD,EAAIkS,SAA+C,mBAAhBlS,EAAIkS,QAC9C,MAAM,IAAInU,YAAY,UAAUkC,2BAEpC,GAAID,EAAImS,QACJ,MAAM,IAAIyB,UAAU,uCAAuC5T,EAAIwC,SAEnE,GAAIxC,EAAIoS,SACJ,MAAM,IAAIyB,aAAa,UAAU5T,eAAgBD,EAAIwC,4BAEzD,GAAqC,mBAA1BxC,EAAIkS,QAAQlS,EAAIwC,QAAyBxC,EAAIkS,QAAQwB,eAAe1T,EAAIwC,MAC/E,MAAM,IAAIqR,aAAa,gCAAgC7T,EAAIwC,qBAEpD,WAAPvC,EACID,EAAIkS,QAAQwB,eAAe1T,EAAIwC,QAC/B0P,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,SAC7F0P,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,UAGlGxC,EAAIkS,QAAQwB,eAAe1T,EAAIwC,OACpC0P,EAAQ6D,iBAAiB5W,IAAIa,EAAIkS,UAAU/S,IAAIa,EAAIwC,OAAO6F,SAASmK,GAAOA,EAAG,CACzElK,KAAM,cAEV4J,EAAQ8D,uBAAuB7W,IAAIa,EAAIkS,UAAU/S,IAAIa,EAAIwC,OAAO6F,SAASmK,GAAOA,EAAG,CAC/ElK,KAAM,gBAIV4J,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,SAC7F0P,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAG,CAAElK,KAAM,SAAU9F,KAAMxC,EAAIwC,SAE3G,CACA,MAAMyT,YAAc,IAAItD,IAAI,CACxB,GAAG9K,KACH,GAAG2J,IACH,GAAG5D,MACH,GAAGxB,QACH,GAAG8J,OACH,GAAGC,QACH,GAAGC,KACH,GAAGC,aAEA,MAAMC,OACT/V,WAAAA,CAAY4I,EAAKwK,GACbhT,KAAKwI,IAAMA,EACXxI,KAAKgT,IAAMA,CACf,EAEG,MAAM4C,aACThW,WAAAA,CAAYkP,GACR9O,KAAK8O,KAAOA,CAChB,EAEG,MAAM+G,YACTjW,WAAAA,CAAYkP,GACR9O,KAAK8O,KAAOA,CAChB,EAEG,MAAMgH,GACTlW,WAAAA,CAAYmW,EAAGxM,GACXvJ,KAAK+V,EAAIA,EACT/V,KAAKuJ,EAAIA,CACb,EAEJ,MAAMyM,aAAe,yBACRC,IAAM,IAAI3X,IAChB,SAAS4X,OAAOvO,EAAMkK,GACzBoE,IAAI1P,IAAIoB,EAAMkK,EAClB,CAimBA,SAASsE,YAAY5W,EAAGgS,GACpB,OAAIhS,aAAa+R,KACN/R,EAAEf,IAAI+S,GACbhS,IAAMuS,SAEHvS,OAFP,CAGJ,CACO,SAAS6W,SAAS7C,EAAOjP,EAAMmK,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAC1D/R,IAASgS,SACTC,cAAchD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAGjDG,eAAejD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAAgBI,MAAM1b,EAEhF,CACA,SAASwb,cAAchD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GACtD,IAAIlE,EAAM,GACV,IAAK,IAAI9N,EAAI,EAAGA,EAAIoK,EAAKtR,OAAQkH,IAAK,CAClC,IAAIyD,EACJ,IACIA,EAAM4O,UAAUC,GAAML,SAAS/C,EAAO9E,EAAKpK,GAAI0P,EAAOxC,EAASoF,EAAGN,KAAiBvb,MACtF,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,GAAIkN,aAAemJ,aAAenJ,EAAIqJ,UAAYrJ,EAAIsJ,WAAatJ,EAAIuJ,cAEnE,YADAtW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOJ,EAAKpK,KAAsB,IAAfoK,EAAKpK,GAAG,GAE3B,YADAtJ,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,IAGjEqK,EAAIjL,KAAKY,EACb,CACA/M,OAAKmC,EAAWiV,EACpB,CACAsC,eAAe+B,eAAejD,EAAO9E,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,GAC7D,IAAIlE,EAAM,GACV,IAAK,IAAI9N,EAAI,EAAGA,EAAIoK,EAAKtR,OAAQkH,IAAK,CAClC,IAAIyD,EACJ,IACI,IAAI8O,EACJ9O,GAA0G,KAAnG8O,EAAKC,WAAWF,GAAMG,UAAUvD,EAAO9E,EAAKpK,GAAI0P,EAAOxC,EAASoF,EAAGN,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAC9I,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,GAAIkN,aAAemJ,aAAenJ,EAAIqJ,UAAYrJ,EAAIsJ,WAAatJ,EAAIuJ,cAEnE,YADAtW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOJ,EAAKpK,KAAsB,IAAfoK,EAAKpK,GAAG,GAE3B,YADAtJ,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,IAGjEqK,EAAIjL,KAAKY,EACb,CACA/M,OAAKmC,EAAWiV,EACpB,CACO,SAAS0E,UAAUK,GACtB,IACIF,EADAD,GAAY,EAEhB,MAAME,EAAI,IAAI5c,SAAQ,CAACC,EAASC,KAC5B2c,GAAS,CAAC/Y,EAAKrD,KACPqD,EACA5D,EAAO4D,IAEP4Y,GAAY,EACZC,EAAUlc,EACVR,EAAQ,CAAEQ,WACd,GAEF,IAEN,MAAO,CACHic,YACAC,UACAC,IAER,CACO,SAASP,SAASQ,GACrB,IAAIpc,EACAqD,EAKJ,GAJA+Y,GAAS,CAACtc,EAAGmT,KACT5P,EAAMvD,EACNE,EAASiT,CAAC,IAEV5P,EACA,MAAMA,EACV,MAAO,CAAErD,SACb,CACO2Z,eAAeqC,UAAUvD,EAAO9E,EAAMsF,EAAOxC,EAAS4F,EAAcd,GACvE,IAAItb,EAAOoc,EACX,MAAMF,EAAI,IAAI5c,SAASC,IACnBS,EAAOA,CAACH,EAAGmT,KACPoJ,EAAavc,EAAGmT,GAChBzT,GAAS,CACZ,IAEL,GAAI8c,iBAAiB7D,EAAO9E,EAAMsF,EAAOxC,EAASxW,GAAM,EAAMsb,SAEzD,GAAIxH,OAAOJ,GAAO,CACnB,IACIpP,EADAC,EAAKmP,EAAK,GAEd,IACI,IAAImI,EACJvX,GAA0G,KAAnGuX,EAAKC,WAAWF,GAAMG,UAAUvD,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAC9I,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAwBIyc,EAxBA9X,EAAIF,EACR,IACIE,EAAIF,aAAeiS,KAAOjS,EAAIb,IAAI+S,GAAWlS,CAChD,CACD,MAAOzE,GAEH,YADAG,EAAKH,EAET,CACA,GAAW,KAAP0E,GAAgD,KAAPA,EAAuC,CAChF,GAAIC,QAEA,YADAxE,OAAKmC,EAAW4U,UAGpBxS,EAAY,KAAPA,EAAwC,EAAwB,CACzE,CACA,GAAIC,IAAMuS,SAAU,CAChB,GAAW,IAAPxS,GAAuC,IAAPA,EAEhC,YADAvE,OAAKmC,EAAWqC,GAIhBA,OAAIrC,CAEZ,CAEA,IACI,IAAI0Z,EACJS,GAA2G,KAAnGT,EAAKC,WAAWF,GAAMG,UAAUvD,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAC/I,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAAI4E,EAAI6X,EACR,IACI7X,EAAI6X,aAAgB/F,KAAO+F,EAAK7Y,IAAI+S,GAAW8F,CAClD,CACD,MAAOzc,GAEH,YADAG,EAAKH,EAET,CAIA,GAHI4E,IAAMsS,WACNtS,OAAItC,GAEJ+Y,IAAIzP,IAAIlH,GACR,IACI2W,IAAIzX,IAAIc,EAAR2W,CAAYa,UAAW/b,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,EACxE,CACD,MAAOlY,GACHpD,EAAKoD,EACT,MAGApD,EAAK,IAAIqC,YAAY,qBAAuBkC,GAEpD,OACM2X,CACV,CACO,SAASX,SAAS/C,EAAO9E,EAAMsF,EAAOxC,EAASxW,EAAMsb,GACxD,GAAIe,iBAAiB7D,EAAO9E,EAAMsF,EAAOxC,EAASxW,GAAM,EAAOsb,SAE1D,GAAIxH,OAAOJ,GAAO,CACnB,IACIpP,EADAC,EAAKmP,EAAK,GAEd,IACIpP,EAAMqX,UAAUC,GAAML,SAAS/C,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,KAAiBvb,MACtF,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAwBIyc,EAxBA9X,EAAIF,EACR,IACIE,EAAIF,aAAeiS,KAAOjS,EAAIb,IAAI+S,GAAWlS,CAChD,CACD,MAAOzE,GAEH,YADAG,EAAKH,EAET,CACA,GAAW,KAAP0E,GAAgD,KAAPA,EAAuC,CAChF,GAAIC,QAEA,YADAxE,OAAKmC,EAAW4U,UAGpBxS,EAAY,KAAPA,EAAwC,EAAwB,CACzE,CACA,GAAIC,IAAMuS,SAAU,CAChB,GAAW,IAAPxS,GAAuC,IAAPA,EAEhC,YADAvE,OAAKmC,EAAWqC,GAIhBA,OAAIrC,CAEZ,CAEA,IACIma,EAAOX,UAAUC,GAAML,SAAS/C,EAAO9E,EAAK,GAAIsF,EAAOxC,EAASoF,EAAGN,KAAiBvb,MACvF,CACD,MAAOF,GAEH,YADAG,EAAKH,EAET,CACA,IAAI4E,EAAI6X,EACR,IACI7X,EAAI6X,aAAgB/F,KAAO+F,EAAK7Y,IAAI+S,GAAW8F,CAClD,CACD,MAAOzc,GAEH,YADAG,EAAKH,EAET,CAIA,GAHI4E,IAAMsS,WACNtS,OAAItC,GAEJ+Y,IAAIzP,IAAIlH,GACR,IACI2W,IAAIzX,IAAIc,EAAR2W,CAAYK,SAAUvb,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,EACvE,CACD,MAAOlY,GACHpD,EAAKoD,EACT,MAGApD,EAAK,IAAIqC,YAAY,qBAAuBkC,GAEpD,CACJ,CAj1BA4W,OAAO,GAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAClE,GAAU,OAANxU,EACA,MAAM,IAAI0T,UAAU,uBAAuBzT,aAE/C,MAAMmI,SAAcpI,EACpB,GAAa,cAAToI,QAAgCzK,IAARmC,EAAmB,CAC3C,IAAIwC,EAAOkS,EAAMvV,IAAIgB,GACrB,GAAIqC,EAAK0P,UAAYA,EAAQvJ,IAAIsP,cAAe,CACxC/F,EAAQvJ,IAAIiM,QAAQsD,OACpBhG,EAAQvJ,IAAIkJ,YAAYsG,cAAcnD,IAAI7U,GAE9C,MAAMyP,EAAMsC,EAAQvJ,IAAIyP,iBAAiBjR,IAAI+K,EAAQvJ,IAAIsP,cAAc9X,IAAM+R,EAAQmG,MAAMlZ,IAAI+S,EAAQvJ,IAAIsP,cAAc9X,SAAMtC,EAC/H,GAAI+R,EAEA,YADAlU,OAAKmC,EAAW+R,EAGxB,CACA,OAAIpN,EAAK0P,SAAW1P,EAAK0P,QAAQ/R,KAAOmY,gBACpC5c,OAAKmC,EAAWqU,EAAQvJ,IAAI4P,YAAYpZ,IAAI,cAGhDzD,OAAKmC,EAAW2E,EAEpB,CACK,QAAU3E,IAANqC,EACL,MAAM,IAAI2T,aAAa,wBAA0B1T,EAAI,kBAEzD,GAAa,WAATmI,EACa,WAATA,EACApI,EAAI,IAAIvC,OAAOuC,GAED,WAAToI,EACLpI,EAAI,IAAIhC,OAAOgC,GAED,YAAToI,IACLpI,EAAI,IAAIsY,QAAQtY,SAGnB,QAAgC,IAArBA,EAAEwT,eAEd,YADAhY,OAAKmC,EAAW,IAAIoU,UAAKpU,EAAWsC,IAGxC,MAAMsY,EAAsB,aAATnQ,EACnB,IAAIoQ,EAAkBD,KAAgBvY,EAAEwT,eAAevT,IAAmB,iBAANA,GACpE,GAAI+R,EAAQvJ,IAAIiM,QAAQsD,OAASQ,GACZ,iBAANvY,EAAgB,CACvB,IAAIwY,EAAO9J,OAAO+J,eAAe1Y,GACjC,GACQyY,EAAKjF,eAAevT,KACf+R,EAAQvJ,IAAIkJ,YAAY6G,gBAAgBC,EAAKpY,YAAYoU,QAC1DzC,EAAQvJ,IAAIkJ,YAAY6G,gBAAgBC,EAAKpY,YAAYoU,MAAQ,IAAIhC,KAEzET,EAAQvJ,IAAIkJ,YAAY6G,gBAAgBC,EAAKpY,YAAYoU,MAAMK,IAAI7U,UAElEwY,EAAO9J,OAAO+J,eAAeD,GAC1C,CAEJ,GAAID,EACA,GAAID,GACA,IAAK,CAAC,OAAQ,SAAU,eAAe3R,SAAS3G,IAAMD,EAAEwT,eAAevT,GAAI,CACvE,MAAM0Y,EAAY3G,EAAQvJ,IAAIuM,mBAAmB/V,IAAIe,EAAEiV,WACjD5V,EAAU2S,EAAQvJ,IAAIiM,QAAQkE,sBAAsB3Z,IAAIe,GAC9D,GAAIX,EAEA,YADA7D,OAAKmC,EAAW,IAAIoU,KAAK1S,EAAQW,GAAG,GAAOC,IAG/C,IAAI0Y,GAAeA,EAAUE,OAAQF,EAAU1R,IAAIhH,GAG/C,MAAM,IAAI0T,aAAa,mDAAmD3T,EAAEyU,QAAQxU,IAE5F,OAEC,GAAU,gBAANA,EAAqB,CAC1B,IAAIwY,EAAOzY,EACX,KAAOyY,EAAO9J,OAAO+J,eAAeD,IAChC,GAAIA,EAAKjF,eAAevT,GAAI,CACxB,MAAM0Y,EAAY3G,EAAQvJ,IAAIuM,mBAAmB/V,IAAIwZ,GAC/CpZ,EAAU2S,EAAQvJ,IAAIiM,QAAQkE,sBAAsB3Z,IAAIwZ,EAAKK,YACnE,GAAIzZ,EAEA,YADA7D,OAAKmC,EAAW,IAAIoU,KAAK1S,EAAQW,GAAG,GAAQC,IAGhD,GAAI0Y,KAAeA,EAAUE,MAAQF,EAAU1R,IAAIhH,IAC/C,MAEJ,MAAM,IAAI0T,aAAa,4CAA4C8E,EAAKpY,YAAYoU,QAAQxU,IAChG,CAGR,CAEJ,GAAI+R,EAAQmG,MAAMlR,IAAIjH,EAAEC,IAEpB,YADAzE,OAAKmC,EAAWqU,EAAQmG,MAAMlZ,IAAIe,EAAEC,KAGxC,GAAID,EAAEC,KAAOmY,WAET,YADA5c,OAAKmC,EAAWqU,EAAQvJ,IAAI4P,YAAYpZ,IAAI,SAGhD,IAAI8Z,EAAIjZ,EAAIoS,UAAaqG,IAAejE,mBAAmBrN,IAAIjH,IAAOgS,EAAQvJ,IAAIyP,iBAAiBjR,IAAIjH,GACvGxE,OAAKmC,EAAW,IAAIoU,KAAK/R,EAAGC,GAAG,EAAO8Y,GAAG,IAE7CpC,OAAO,GAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAClE,GAAIxC,EAAQvJ,IAAIiM,QAAQsE,oBACpB,MAAM,IAAIrF,aAAa,wCAC3B,GAAiB,mBAAN3T,EACP,MAAM,IAAI0T,UAAU,GAAuB,iBAAb5T,EAAIwC,KAAoB,SAAWxC,EAAIwC,0BAEzE,MAAM2W,EAAOhZ,EAAE8I,KAAKwG,GACZA,aAAgB+G,YACT,IAAI/G,EAAKA,MAGT,CAACA,KAEb2J,OAAOnQ,KAAKwG,GAASqH,YAAYrH,EAAMyC,KAC1C,GAAmB,mBAARlS,EAAX,CAIA,GAAIA,EAAIkS,QAAQlS,EAAIwC,QAAU6W,KAAKC,WAAapH,EAAQK,iBAAiBwG,KAAM,CAC3E,MAAM9R,EAAQ,IAAI0L,IACZ4G,EAAWC,IACb,GAAKA,GAAoB,iBAANA,IAAmBvS,EAAME,IAAIqS,GAAhD,CAEAvS,EAAM+N,IAAIwE,GACV,IAAK,IAAIC,KAAKD,EACVtH,EAAQK,iBAAiBlK,SAASmK,GAAOA,EAAGgH,EAAGC,KAC/CF,EAAQC,EAAEC,GAJV,CAKJ,EAEJF,EAAQJ,EAAK,GACjB,CACA,GAAInZ,EAAIkS,mBAAmBxC,OAASuG,YAAY9O,IAAInH,EAAIkS,QAAQlS,EAAIwC,SAAW0P,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAYA,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAW,CAChL,IAAIwH,EACAC,GAAU,EACd,GAAiB,SAAb3Z,EAAIwC,KACJkX,EAAS,CACLpR,KAAM,OACNsR,MAAOT,GAEXQ,IAAYR,EAAKrb,YAEhB,GAAiB,QAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,MACNuR,QAAS7Z,EAAIkS,QAAQtT,OAAO,IAEhC+a,IAAYD,EAAOG,QAAQ/b,YAE1B,GAAiB,UAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,QACNuR,QAAS7Z,EAAIkS,QAAQtT,MAAM,EAAG,IAElC+a,IAAYD,EAAOG,QAAQ/b,YAE1B,GAAiB,YAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,UACNsR,MAAOT,GAEXQ,IAAYR,EAAKrb,YAEhB,GAAiB,WAAbkC,EAAIwC,KACTkX,EAAS,CACLpR,KAAM,SACNwR,WAAYX,EAAK,GACjBY,iBAAyBlc,IAAZsb,EAAK,GAAmBnZ,EAAIkS,QAAQpU,OAASqb,EAAK,GAC/DS,MAAOT,EAAKva,MAAM,GAClBib,QAAS7Z,EAAIkS,QAAQtT,MAAMua,EAAK,QAAgBtb,IAAZsb,EAAK,QAAmBtb,EAAYsb,EAAK,GAAKA,EAAK,KAE3FQ,IAAYD,EAAOE,MAAM9b,UAAY4b,EAAOG,QAAQ/b,YAEnD,GAAiB,YAAbkC,EAAIwC,MAAmC,SAAbxC,EAAIwC,KACnCkX,EAAS,CAAEpR,KAAMtI,EAAIwC,MACrBmX,IAAY3Z,EAAIkS,QAAQpU,YAEvB,GAAiB,eAAbkC,EAAIwC,KAAuB,CAChC,IAAI8C,OAAkBzH,IAAZsb,EAAK,GAAmBnZ,EAAIkS,QAAQpU,OAASqb,EAAK,GAAK9O,KAAK2P,IAAIha,EAAIkS,QAAQpU,OAAQqb,EAAK,GAAKA,EAAK,IAC7GO,EAAS,CACLpR,KAAM,aACNwR,WAAYX,EAAK,GACjBc,SAAUd,EAAK,GAAK7T,EACpBsU,MAAO5Z,EAAIkS,QAAQtT,MAAMua,EAAK,GAAIA,EAAK,GAAK7T,GAC5CuU,QAAS7Z,EAAIkS,QAAQtT,MAAMua,EAAK,GAAIA,EAAK,GAAK7T,IAElDqU,IAAYD,EAAOE,MAAM9b,UAAY4b,EAAOG,QAAQ/b,MACxD,CACI6b,IACAzH,EAAQ2D,oBAAoB1W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAGkH,KACjExH,EAAQ4D,0BAA0B3W,IAAIa,EAAIkS,UAAU7J,SAASmK,GAAOA,EAAGkH,KAE/E,CACA1Z,EAAIb,IAAI+S,GACRxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,SAAS2W,GA5EzC,MAFIzd,OAAKmC,EAAWmC,KAAOmZ,GA8EoB,IAEnDtC,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC3E,IAAIjM,EAAM,CAAA,EACV,IAAK,IAAIgH,KAAQtP,EACTsP,EAAKtG,eAAeoN,aACpB9N,EAAM,IAAKA,KAAQgH,EAAKtG,IAAIsG,MAG5BhH,EAAIgH,EAAKtG,KAAOsG,EAAKkE,IAG7BjY,OAAKmC,EAAW4K,EAAI,IAExBoO,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAW,IAAIyY,OAAOpW,EAAGC,MAC3F0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAS1EhZ,OAAKmC,EARSsC,EAAE8I,KAAKwG,GACbA,aAAgB+G,YACT,IAAI/G,EAAKA,MAGT,CAACA,KAEb2J,OAAOnQ,KAAKwG,GAASqH,YAAYrH,EAAMyC,KACpB,IAE1B2E,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWsC,KAC7E0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,KAC1D,OAAQA,GACJ,IAAK,OAAQ,OAAOzE,OAAKmC,GAAW,GACpC,IAAK,QAAS,OAAOnC,OAAKmC,GAAW,GACrC,IAAK,OAAQ,OAAOnC,OAAKmC,EAAW,MACpC,IAAK,YAAa,OAAOnC,OAAKmC,OAAWA,GACzC,IAAK,MAAO,OAAOnC,OAAKmC,EAAWP,KACnC,IAAK,WAAY,OAAO5B,OAAKmC,EAAWyF,KAE5C5H,EAAK,IAAI4E,MAAM,mBAAqBH,GAAG,IAE3C0W,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWF,OAAOwC,MACpF0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqc,OAAO/Z,MACrF0W,OAAO,GAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,IAAYxW,OAAKmC,EAAWqU,EAAQ7L,UAAUkL,QAAQlU,SAAS8C,OACnI0W,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAChE,MAAMiI,EAAMjI,EAAQ7L,UAAUoL,QAAQpU,SAAS8C,IAC/C,IAAK+R,EAAQvJ,IAAIyP,iBAAiBjR,IAAIiT,QAClC,MAAM,IAAIvG,aAAa,uBAGvBnY,OAAKmC,EAAW,IAAIuc,OAAOD,EAAIrX,MAAOqX,EAAI5J,OAC9C,IAEJsG,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC3E,IAAIjF,EAAOyC,EAAQ7L,UAAUiL,SAASjU,SAAS8C,IAC/C,OAASwU,EAAMhD,GAAMlC,EACrB,IACIvF,EADAnF,EAAQ,GAERsV,EAAU,GACd,KAAOnQ,EAAIyM,aAAa1R,KAAK0P,IACpBzK,EAAE,KACHnF,EAAM8C,KAAK8J,EAAGtU,SAAS6M,EAAE,GAAI,MAC7BmQ,EAAQxS,KAAKqC,EAAE,KAGvBjF,EAAKiP,EAAOnP,EAAO2P,EAAOxC,GAAS,CAACpT,EAAKwb,KACrC,MAAMC,EAAQ,CAAA,EACd,GAAIzb,EACApD,EAAKoD,OADT,CAIA,IAAK,IAAIkG,KAAKqV,EAAS,CACnB,MAAMG,EAAMH,EAAQrV,GACpBuV,EAAMC,GAAOF,EAAUtV,EAC3B,CACAtJ,OAAKmC,EAAW8W,EAAKpV,QAAQ,0BAA0B,CAACnC,EAAOqd,EAAIC,EAAGF,KAClE,GAAIE,EACA,OAAOtd,EAEX,OAAQqd,GAAU,IAAM,GAAG3D,YADjByD,EAAMC,GAC4BtI,IAAU,IAT1D,CAUG,GACL,IAEN2E,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC1EhZ,OAAKmC,EAAW,IAAI2Y,YAAYrW,GAAG,IAEvC0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC3EhZ,OAAKmC,EAAW,IAAI0Y,aAAapW,GAAG,IAExC0W,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KAC5E0W,OAAO,IAA2B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KAChF0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,IAAamC,EAAIkS,QAAQlS,EAAIwC,MAAM,IAE5CqU,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACpE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAQ,IAE5CqU,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,IAAamC,EAAIkS,QAAQlS,EAAIwC,MAAM,IAE5CqU,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACpE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAQ,IAE5CqU,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAC3D0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,MAAQrC,EAAE,IAE9C0W,OAAO,IAA6B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAC/D0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACnE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAClE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACpE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACjE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACnE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAClE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACjE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,OAASrC,EAAE,IAE/C0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACrE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAAoC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACtE0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAA4C,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KAC9E0D,YAAY5V,EAAKkS,GACjBxW,OAAKmC,EAAWmC,EAAIkS,QAAQlS,EAAIwC,QAAUrC,EAAE,IAEhD0W,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACtF0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACvF0W,OAAO,IAAmC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC5F0W,OAAO,IAAoC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC7F0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAClF0W,OAAO,IAA+B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,IAAMC,KACzF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KACrF0W,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,IAAMC,KAC5F0W,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAChF0W,OAAO,IAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC/E0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KAClF0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACjF0W,OAAO,IAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KAChF0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACjF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KACjF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,GAAYsC,KACjF0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KAClF0W,OAAO,IAA6B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACrF0W,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACpF0W,OAAO,IAA2B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,EAAIC,KACnF0W,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KACzF0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,GAAKC,KAC1F0W,OAAO,IAAyC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,IAAMC,KACnG0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACrEzP,EAAKiP,EAAO/T,EAAGuU,EAAOxC,GAAS,CAAC3W,EAAGiH,KAC/B9G,OAAKmC,SAAkBiZ,YAAYtU,EAAM0P,GAAS,GACpD,IAEN2E,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,aAAaC,KAC/F0W,OAAO,IAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAWqC,KAAKC,KAC/E0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,UACvDna,IAAjBma,EAAK9F,SAIT0D,YAAYoC,EAAM9F,EAAS,UACvB8F,EAAK3F,WACL3W,OAAKmC,GAAW,GAGpBnC,OAAKmC,SAAkBma,EAAK9F,QAAQ8F,EAAKxV,QARrC9G,OAAKmC,GAAW,EAQ2B,IAEnDgZ,OAAO,GAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,IAAYxW,OAAKmC,EAAWsC,KAC3F0W,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,KACzEtc,OAAKmC,EAAW6W,EAAMZ,QAAQ5T,EAAG0S,QAAQS,IAAKlT,GAAG,IAErD0W,OAAO,GAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,KACxEtc,OAAKmC,EAAW6W,EAAMZ,QAAQ5T,EAAG0S,QAAQQ,IAAKjT,EAAG6X,GAAQA,EAAK5F,UAAU,IAE5EyE,OAAO,GAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,KAC1Etc,OAAKmC,EAAW6W,EAAMZ,QAAQ5T,EAAG0S,QAAQO,MAAOhT,GAAG,IAEvD0W,OAAO,IAAiC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KAC5ExU,EAAI,IAAIA,IACc,iBAAXF,EAAI,IAAmBA,EAAI,aAAckF,cAChDlF,EAAI,GAAKG,EAAIqM,gBAAgB,IAAItH,WAAWlF,EAAI,IAAKkS,EAAQ7L,YAE7DnG,EAAE0N,QACFlS,OAAKmC,EAAWoX,oBAAoB/U,EAAGC,EAAG+T,EAAOhC,EAASwC,IAG1DhZ,OAAKmC,EAAWwW,eAAenU,EAAGC,EAAG+T,EAAOhC,EAASwC,GACzD,IAEJmC,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,MACjD,iBAAX1U,EAAI,IAAmBA,EAAI,aAAckF,cAChDlF,EAAI,GAAKG,EAAIqM,gBAAgB,IAAItH,WAAWlF,EAAI,IAAKkS,EAAQ7L,YAEjE,IAEIiG,EAFAL,EAAU/L,EAAE0N,QACZ+G,EAAOzU,EAAE0N,QAGTtB,EADY,KAAZL,EACOgJ,oBAAoB/U,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAGjDN,eAAenU,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAEnDA,GACAD,EAAMZ,QAAQa,EAAM/B,QAAQS,IAAK/G,GAErC5Q,OAAKmC,EAAWyO,EAAK,IAEzBuK,OAAO,IAAkC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,MACvD,iBAAX1U,EAAI,IAAmBA,EAAI,aAAckF,cAChDlF,EAAI,GAAKG,EAAIqM,gBAAgB,IAAItH,WAAWlF,EAAI,IAAKkS,EAAQ7L,YAEjE,IAKIiG,EALAL,EAAU/L,EAAE0N,QACZ+G,EAAOzU,EAAE0N,QACT+G,IACAD,EAAQ,IAAI3B,MAAM2B,EAAO,CAAE,IAI3BpI,EADY,KAAZL,EACOgJ,oBAAoB/U,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAGjDN,eAAenU,EAAGC,EAAG+T,EAAOhC,EAASwC,EAAOC,GAEnDA,GACAD,EAAMZ,QAAQa,EAAM/B,QAAQQ,IAAK9G,GAErC5Q,OAAKmC,EAAWyO,EAAK,IAEzBuK,OAAO,IAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACnE,MAAO3H,EAAYF,EAAeH,EAAaE,EAAWvR,EAAMqP,EAAWoC,GAAc5M,EACzF,IAAIya,GAAO,EACX,MAAMC,EAAY,IAAI7H,MAAM2B,EAAO,CAAE,GACrC,IAAImG,EAAe,CACfC,WAASjd,GAEb,MAAMkd,EAAe,IAAIhI,MAAM6H,EAAWC,GAC1C,GAAI5V,IAASwS,UACT,WACI,IAAIF,EAMJ,IALAA,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOtH,EAAWgO,EAAW1I,EAASoF,KACjEuD,EAAoB,OAA2F,KAAtFtD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOxH,EAAakO,EAAW1I,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,OAChJ8b,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOrH,EAAekO,EAAc7I,EAASoF,KACpEvK,IACA4N,GAA+F,KAAvFpD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,QAC7Hkf,GAAM,CACT,IAAIK,EAAgB,CAAA,EACpBzD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOpH,EAAY,IAAIiG,MAAMgI,EAAcC,GAAgB9I,EAASoF,MAC9E,IAAjBC,EAAGG,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,OAClD,IAAIgN,QAAY4M,iBAAiBnB,EAAOhC,EAAS/R,EAAG,CAAC,IAAI4S,MAAM6H,EAAWI,IAAiB,QAC3F,GAAIvS,aAAemJ,YAAcnJ,EAAIqJ,SAEjC,YADApW,OAAKmC,EAAW4K,GAGpB,GAAIA,aAAemJ,YAAcnJ,EAAIsJ,UACjC,MAEJwF,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAO7Y,EAAM0f,EAAc7I,EAASoF,KAC/DqD,GAA+F,KAAvFpD,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MACpI,CACAC,GACH,EAvBD,GAuBK0b,MAAM1b,OAEV,CAMD,IALA2b,UAAUC,GAAMrS,EAAKiP,EAAOtH,EAAWgO,EAAW1I,EAASoF,KAC3DuD,EAAoB,MAAIxD,UAAUC,GAAMrS,EAAKiP,EAAOxH,EAAakO,EAAW1I,EAASoF,KAAI7b,OACzF4b,UAAUC,GAAMrS,EAAKiP,EAAOrH,EAAekO,EAAc7I,EAASoF,KAC9DvK,IACA4N,EAAQtD,UAAUC,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,KAAK7b,QACxEkf,GAAM,CACT,IAAIK,EAAgB,CAAA,EACpB3D,UAAUC,GAAMrS,EAAKiP,EAAOpH,EAAY,IAAIiG,MAAMgI,EAAcC,GAAgB9I,EAASoF,KACzF,IAAI7O,EAAMqM,YAAYZ,EAAOhC,EAAS/R,EAAG,CAAC,IAAI4S,MAAM6H,EAAWI,IAAiB,QAChF,GAAIvS,aAAemJ,YAAcnJ,EAAIqJ,SAEjC,YADApW,OAAKmC,EAAW4K,GAGpB,GAAIA,aAAemJ,YAAcnJ,EAAIsJ,UACjC,MAEJsF,UAAUC,GAAMrS,EAAKiP,EAAO7Y,EAAM0f,EAAc7I,EAASoF,KACzDqD,EAAQtD,UAAUC,GAAMrS,EAAKiP,EAAOxJ,EAAWqQ,EAAc7I,EAASoF,KAAK7b,MAC/E,CACAC,GACJ,KAEJmb,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,KACtF,GAAwB,WAAnBA,GAAqC,aAAN9W,IAAsB8W,EACtD,MAAM,IAAInD,aAAa,WAAa3T,EAAI,cAE5CxE,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,iBAAahU,GAAW,EAAa,UAANqC,EAAqB,aAANA,GAAkB,IAE/G2W,OAAO,IAAsB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,KAC9E/R,EAAKiP,EAAO4C,YAAY5W,EAAGgS,GAAW/R,EAAEuW,EAAIvW,EAAE+J,EAAGwK,EAAOxC,EAASxW,EAAK,IAE1Emb,OAAO,IAA4B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACvEzP,EAAKiP,EAAO4C,YAAY5W,EAAGgS,GAAW/R,EAAEuW,EAAIvW,EAAE+J,EAAGwK,EAAOxC,EAASxW,EAAK,IAE1Emb,OAAO,IAAgC,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAW,IAAI4Y,GAAGvW,EAAGC,MAC9F0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,IAAMzE,OAAKmC,EAAW,IAAI4Y,GAAGvW,EAAGC,MACxF0W,OAAO,IAA0B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,KACrEzP,EAAKiP,EAAOhU,EAAGwU,EAAOxC,GAAS,CAACpT,EAAKmc,KACjC,GAAInc,EACApD,EAAKoD,QAIT,GADAmc,EAASnE,YAAYmE,EAAQ/I,GACzBjN,IAASgS,SAAU,CACnB,IAAIxO,EACAyS,GAAS,EACb,IAAK,IAAIC,KAAYhb,EACjB,GAAI+a,IAAWA,GAAUC,EAAS,IAAMF,IAAWnE,YAAaO,UAAUC,GAAMrS,EAAKiP,EAAOiH,EAAS,GAAIzG,EAAOxC,EAASoF,KAAK7b,OAAQyW,IAAW,CAC7I,IAAKiJ,EAAS,GACV,SAEJ,GADA1S,EAAMqM,YAAYZ,EAAOhC,EAASiJ,EAAS,GAAI,CAACzG,GAAQ,UACpDjM,EAAIsJ,UACJ,MACJ,GAAItJ,EAAIqJ,SAEJ,YADApW,OAAKmC,EAAW4K,GAGpB,IAAK0S,EAAS,GACV,KAER,CAEJzf,GACJ,KAEI,WACI,IAAI+M,EACAyS,GAAS,EACb,IAAK,IAAIC,KAAYhb,EAAG,CACpB,IAAIoX,EACJ,GAAI2D,IAAWA,GAAUC,EAAS,IAAMF,IAAWnE,aAA+F,KAAlFS,EAAKC,WAAWF,GAAMrS,EAAKiP,EAAOiH,EAAS,GAAIzG,EAAOxC,EAASoF,MAAKI,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,OAAQyW,IAAW,CAClM,IAAKiJ,EAAS,GACV,SAEJ,GADA1S,QAAY4M,iBAAiBnB,EAAOhC,EAASiJ,EAAS,GAAI,CAACzG,GAAQ,UAC/DjM,EAAIsJ,UACJ,MACJ,GAAItJ,EAAIqJ,SAEJ,YADApW,OAAKmC,EAAW4K,GAGpB,IAAK0S,EAAS,GACV,KAER,CACJ,CACAzf,GACH,EArBD,GAqBK0b,MAAM1b,EACf,GACF,IAENmb,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,EAASwC,EAAOsD,EAAMhB,KAC/E,MAAO9I,EAAWF,EAAWD,GAAe5N,EAC5Cib,oBAAoBnW,GAAM,CAACnG,EAAK2J,KAC5B2S,oBAAoBnW,GAAO1J,IACnBA,EACAG,EAAKH,GACAuD,EAILsc,oBAAoBnW,EAAMvJ,EAAMwY,EAAOhC,EAASlE,EAAW,CAAC,IAAI+E,MAAM2B,IAASsC,GAG/Etb,OAAKmC,EAAW4K,EACpB,GACDyL,EAAOhC,EAASnE,EAAa,CAAC,IAAIgF,MAAM2B,EAAO,KAAK,GACxDR,EAAOhC,EAAShS,EAAG,CAAC,IAAI6S,MAAM2B,IAASsC,EAAe,IAE7DH,OAAO,IAAwB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,KAAQxE,GAAM,IACjEmb,OAAO,IAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,EAAGH,EAAKkS,KACzD,IAAKA,EAAQvJ,IAAIyP,iBAAiBjR,IAAIjH,KAAOsU,mBAAmBrN,IAAIjH,GAChE,MAAM,IAAI2T,aAAa,oCAAoC3T,EAAEK,YAAYoU,QAE7EjZ,OAAKmC,EAAW,IAAIqC,KAAKC,GAAG,IAEhC0W,OAAO,IAAyB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,EAAGC,KAAQzE,EAAKyE,EAAE,IACtE0W,OAAO,IAA8B,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,IAAMxE,OAAKmC,EAAWqC,EAAEsR,SACjFqF,OAAO,GAAuB,CAAC5R,EAAMvJ,EAAMwY,EAAOhU,IAAMxE,MAmPxD,MAAM2f,YAAc,IAAI1I,IAAI,CACxB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,KAEJ,SAASoF,iBAAiB7D,EAAO9E,EAAMsF,EAAOxC,EAASxW,EAAMuQ,EAAS+K,GAClE,MAAM/R,EAAOgH,EAAUwL,UAAYR,SACnC,KAAI/E,EAAQvJ,IAAIiM,QAAQ0G,gBAAkBpH,EAAMA,QACe,mBAAhDhC,EAAQvJ,IAAIiM,QAAQ2G,yBAA0CrJ,EAAQvJ,IAAIiM,QAAQ2G,wBAAwBrH,EAAOQ,EAAOxC,EAAS9C,GADhJ,CAUA,GAFA8E,EAAMA,QACNF,aAAeE,EACX9E,aAAgB6C,KAChB,IACIvW,OAAKmC,EAAWuR,EAAKjQ,IAAI+S,GAC5B,CACD,MAAOpT,GACHpD,EAAKoD,EACT,MAEC,GAAIsQ,IAASqD,SACd/W,SAEC,GAAIgU,MAAMC,QAAQP,KAAUI,OAAOJ,GACpB,IAAZA,EAAK,GACL1T,IAGAqb,SAAS7C,EAAOjP,EAAMmK,EAAM1T,EAAMgZ,EAAOxC,EAAS8E,QAGrD,GAAKxH,OAAOJ,GAGZ,GAAgB,KAAZA,EAAK,GACV2H,SAAS7C,EAAOjP,EAAMmK,EAAK,GAAI1T,EAAMgZ,EAAOxC,EAAS8E,QAEpD,GAAgB,KAAZ5H,EAAK,GACLnD,EAGIiG,EAAQvJ,IAAIuM,oBAAoB/N,IAAInM,QAAQma,WACjDsC,UAAUvD,EAAO9E,EAAK,GAAIsF,EAAOxC,GAASkD,MAAO7Z,EAAGmT,KAChD,GAAInT,EACAG,EAAKH,QAEL,IACIG,OAAKmC,QAAiBiZ,YAAYpI,EAAGwD,GACxC,CACD,MAAOpT,GACHpD,EAAKoD,EACT,IACLkY,GAAgBI,MAAM1b,GAGzBA,EAAK,IAAImY,aAAa,iCAhBtBnY,EAAK,IAAImY,aAAa,8DAmBzB,KAAIwH,YAAYlU,IAAIiI,EAAK,IAS1B,OAAO,EARP,IACIwH,IAAIzX,IAAIiQ,EAAK,GAAbwH,CAAiB3R,EAAMvJ,EAAMwY,EAAO9E,EAAK,GAAIA,EAAK,GAAIA,EAAM8C,EAASwC,OAAO7W,EAAWmZ,EAC1F,CACD,MAAOlY,GACHpD,EAAKoD,EACT,CAIJ,MApCIpD,OAAKmC,EAAWuR,GAqCpB,OAAO,CA5DP,CAHQ1T,EAAK,IAAImY,aAAa,4BAgElC,CACO,SAASiB,YAAYZ,EAAOhC,EAASsJ,EAAeC,EAAS,GAAIzE,GACpE,OAAOK,UAAU3b,GAAS0f,oBAAoBnE,SAAUvb,EAAMwY,EAAOhC,EAASsJ,EAAeC,EAAQzE,KAAiBvb,MAC1H,CACO2Z,eAAeC,iBAAiBnB,EAAOhC,EAASsJ,EAAeC,EAAS,GAAIzE,GAC/E,IAAIO,EACJ,OAA6I,KAArIA,EAAKC,WAAW9b,GAAS0f,oBAAoB3D,UAAW/b,EAAMwY,EAAOhC,EAASsJ,EAAeC,EAAQzE,MAAkBU,UAAqBH,EAAGI,eAAiBJ,EAAGK,GAAGnc,MAClL,CACA,SAAS2f,oBAAoBnW,EAAMvJ,EAAMwY,EAAOhC,EAASsJ,EAAeC,EAAS,GAAIzE,GACjF,IAAKwE,EAED,YADA9f,IAGJ,KAAM8f,aAAyB9L,OAC3B,MAAM,IAAI3R,YAAY,sBAE1B,IACI2d,EADAhH,EAAQxC,EAAQvJ,IAAI4P,YAExB,KAAOmD,EAAID,EAAO7N,SACG,iBAAN8N,IAGPhH,EADAgH,aAAa3I,MACL2I,EAGA,IAAI3I,MAAM2B,EAAOgH,EAAGA,aAAa3H,gBAAalW,EAAY,OAGtEqU,EAAQvJ,IAAIiM,QAAQsD,QAAUhG,EAAQvJ,IAAIkJ,cAC1CK,EAAQvJ,IAAIkJ,YAAc,CACtBsG,cAAe,IAAIxF,IACnB+F,gBAAiB,CAAC,IAGtBzT,IAASgS,SACT0E,qBAAqBjgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GAGjE4E,sBAAsBlgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GAAgBI,MAAM1b,EAEhG,CACA,SAASigB,qBAAqBjgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GACtE,KAAMwE,aAAyB9L,OAC3B,MAAM,IAAI3R,YAAY,sBAC1B,IAAIiH,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAIwW,EAAc1d,OAAQkH,IAAK,CACvC,IAAIyD,EACA3J,EACJ,MAAM+c,EAAUL,EAAcxW,GAC9B,IACIiS,SAAS/C,EAAO2H,EAASnH,EAAOxC,GAAS,CAAC3W,EAAGmT,KACzC5P,EAAMvD,EACNkN,EAAMiG,CAAC,GACRsI,EACN,CACD,MAAOzb,GACHuD,EAAMvD,CACV,CACA,GAAIuD,EAEA,YADApD,EAAKoD,GAGT,GAAI2J,aAAemJ,WAEf,YADAlW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOqM,IAA2B,IAAfA,EAAQ,GAE3B,YADAngB,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,GAGrE,CACA/M,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,iBAAahU,GAAW,GACvE,CACAuX,eAAewG,sBAAsBlgB,EAAMwY,EAAOhC,EAASsJ,EAAe9G,EAAOsC,GAC7E,KAAMwE,aAAyB9L,OAC3B,MAAM,IAAI3R,YAAY,sBAC1B,IAAIiH,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAIwW,EAAc1d,OAAQkH,IAAK,CACvC,IAAIyD,EACA3J,EACJ,MAAM+c,EAAUL,EAAcxW,GAC9B,UACUyS,UAAUvD,EAAO2H,EAASnH,EAAOxC,GAAS,CAAC3W,EAAGmT,KAChD5P,EAAMvD,EACNkN,EAAMiG,CAAC,GACRsI,EACN,CACD,MAAOzb,GACHuD,EAAMvD,CACV,CACA,GAAIuD,EAEA,YADApD,EAAKoD,GAGT,GAAI2J,aAAemJ,WAEf,YADAlW,OAAKmC,EAAW4K,GAGpB,GAAI+G,OAAOqM,IAA2B,IAAfA,EAAQ,GAE3B,YADAngB,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,YAAapJ,GAAK,GAGrE,CACA/M,OAAKmC,EAAW,IAAI+T,WAAWM,EAAQvJ,IAAIkJ,iBAAahU,GAAW,GACvE,CCh0CO,MAAMie,cACTvb,WAAAA,CAAYiT,GACR,GAAIA,IAAY8E,WACZ,OAAOA,WACX,IAAK,IAAItT,KAAKwO,EACV7S,KAAKqE,GAAKwO,EAAQxO,EAE1B,EAEG,MAAM+W,YACTxb,WAAAA,CAAYoI,EAAKtC,EAAW+I,EAAMmD,EAAkBwD,EAAkBF,EAAqBG,EAAwBF,EAA2BuC,EAAOtD,GACjJpU,KAAKgI,IAAMA,EACXhI,KAAK0F,UAAYA,EACjB1F,KAAKyO,KAAOA,EACZzO,KAAK4R,iBAAmBA,EACxB5R,KAAKoV,iBAAmBA,EACxBpV,KAAKkV,oBAAsBA,EAC3BlV,KAAKqV,uBAAyBA,EAC9BrV,KAAKmV,0BAA4BA,EACjCnV,KAAK0X,MAAQA,EACb1X,KAAKoU,wBAA0BA,CACnC,EAEJ,SAASiH,aAAahc,EAAK2U,EAAMkD,EAAU3F,GACvC,MAAM+J,EAAQ/J,EAAQ6D,iBAAiB5W,IAAIa,IAAQ,IAAIf,IACvDiT,EAAQ6D,iBAAiB7O,IAAIlH,EAAKic,GAClC,MAAMC,EAAYD,EAAM9c,IAAIwV,IAAS,IAAIhC,IAGzC,IAAIwJ,EAMJ,OARAF,EAAM/U,IAAIyN,EAAMuH,GAChBA,EAAUlH,IAAI6C,GAEV7X,GAAOA,EAAI2U,IAA8B,iBAAd3U,EAAI2U,KAC/BwH,EAAYjK,EAAQ2D,oBAAoB1W,IAAIa,EAAI2U,KAAU,IAAIhC,IAC9DwJ,EAAUnH,IAAI6C,GACd3F,EAAQ2D,oBAAoB3O,IAAIlH,EAAI2U,GAAOwH,IAExC,CACHC,YAAaA,KACTF,EAAU7Z,OAAOwV,GACjBsE,GAAW9Z,OAAOwV,EAAS,EAGvC,CACe,MAAMwE,QACjB9b,WAAAA,CAAYqU,GACRjU,KAAKoV,iBAAmB,IAAI7P,QAC5BvF,KAAKkV,oBAAsB,IAAI3P,QAC/BvF,KAAK2b,iBAAmB,IAAIpW,QAC5B0O,EAAU/F,OAAOnN,OAAO,CACpBwW,OAAO,EACPgB,qBAAqB,EACrBrE,wBAAwB,EACxBrB,QAAS6I,QAAQE,aACjBrH,mBAAoBmH,QAAQG,gBAC5B1D,sBAAuB,IAAI7Z,KAC5B2V,GAAW,CAAA,GACd,MAAMqD,EAAgB,IAAI6D,cAAclH,EAAQpB,SAChD7S,KAAKuR,QAAU,CACXuK,QAAS9b,KACTyX,iBAAkB,IAAIzF,IAAI9D,OAAOC,OAAO8F,EAAQpB,UAChD0B,mBAAoB,IAAIjW,IAAI,IAAI2V,EAAQM,oBAAoBjM,KAAK/I,GAAM,CAACA,EAAE,GAAGiV,UAAWjV,EAAE,OAC1F0U,UACA2D,YAAa,IAAIxF,MAAM,KAAM6B,EAAQpB,QAASyE,GAC9CA,iBAEJtX,KAAKuR,QAAQgD,mBAAmBhO,IAAI2H,OAAO+J,eAAe,GAAG8D,OAAOzP,aAAc,IAAI0F,IAC1F,CACA,uBAAW4J,GACP,MAAO,CACHI,kBACAC,QAAS,CACLC,MAAOD,QAAQC,MACfC,MAAOF,QAAQE,MACfC,KAAMH,QAAQG,KACdC,IAAKJ,QAAQI,IACbC,MAAOL,QAAQK,MACfC,KAAMN,QAAQM,MAElBC,kBACAvf,YACAwf,sBACA/f,kBACAggB,oBACAC,sCACAC,oBACAC,sCACApW,cACAqW,kBACAjF,gBACA7a,cACAuc,cACAhc,cACA2Q,cACAa,YACAgN,cACApc,YACAod,oBACA3e,sBACAuT,8BACAvU,wBACA6V,oBACA+J,kBACAC,oBACAC,sBACAC,oCACAC,sBACAC,wBACAC,sBACAC,wBACAC,0BACAC,0BACAnf,QACA0T,QACAzM,gBACAuO,gBACAzZ,gBACAqjB,UACAhF,UACAhP,UACAiU,UACAlE,cAER,CACA,0BAAWoC,GACP,IAAI+B,EAAS,CACTzC,cACAa,SACAnE,QACA7a,OACAuc,OACAhc,OACAogB,KACAhe,MACAoP,MACAkO,UACAC,WACAC,kBACAC,WACAC,YACAC,WACAC,YACAC,aACAC,aACAnf,IACA0T,IACAzM,QACAuO,QACAzZ,QACA0hB,OACA4B,KACAlE,QAEAnR,EAAM,IAAIhK,IAkBd,OAjBAsf,EAAOlW,SAASmW,IACZvV,EAAI/B,IAAIsX,EAAO,IAAI7L,IAAM,IAE7B1J,EAAI/B,IAAI2H,OAAQ,IAAI8D,IAAI,CACpB,UACA,cACA,sBACA,KACA,OACA,iBACA,gBACA,uBACA,iBACA,WACA,UACA,YAEG1J,CACX,CACAwV,YAAAA,CAAa5G,EAAU3F,GAEnB,OADAA,EAAQK,iBAAiByC,IAAI6C,GACtB,CAAEuE,YAAaA,IAAMlK,EAAQK,iBAAiBlQ,OAAOwV,GAChE,CACAmE,YAAAA,CAAahc,EAAK2U,EAAMkD,EAAU3F,GAC9B,OAAO8J,aAAahc,EAAK2U,EAAMkD,EAAU3F,EAC7C,CACAwM,kBAAAA,CAAmB1e,EAAK2U,EAAMkD,GAC1B,OAAOmE,aAAahc,EAAK2U,EAAMkD,EAAUlX,KAC7C,CACA,YAAOuX,CAAMxb,EAAM+e,EAAS,IACxB,MAAMjI,EAAU,CAAA,EAChB,IAAK,IAAIxO,KAAK6J,OAAO8P,oBAAoBrG,YACrC9E,EAAQxO,GAAKsT,WAAWtT,GAE5B,MAAMyX,EAAU,IAAIJ,QAAQ,CACxB7I,UACA0E,OAAO,IAEX,OAAOuE,EAAQ3H,YAAY2H,EAAQmC,cAAcnC,EAAQvK,QAASR,QAAMhV,IAAQ+e,EACpF,CACA,YAAO/J,CAAMhV,GACT,OAAOgV,QAAMhV,EACjB,CACAkiB,aAAAA,CAAc1M,QAASsJ,eACnB,MAAMnD,MAAQ,IAAIpZ,IACZ4f,YAAc,IAAI9C,YAAY7J,QAASsJ,cAAcnV,UAAWmV,cAAcpM,KAAM,IAAIuD,IAAO,IAAIzM,QAAW,IAAIA,QAAWvF,KAAKoV,iBAAkBpV,KAAKkV,oBAAqBwC,OAAQjQ,GAAOzH,KAAK2b,iBAAiBpV,IAAIkB,EAAIyW,eAC3NvS,KAAO2H,gBAAgB4K,aAK7B,OAJAxG,MAAMnR,IAAIyV,SAAUrQ,MACpB+L,MAAMnR,IAAI4X,KAAMxJ,cAAchJ,OAC9B+L,MAAMnR,IAAIuO,WAAYF,oBAAoBjJ,OAC1C+L,MAAMnR,IAAIyO,YAAaD,qBAAqBpJ,OACrCuS,WACX,CACAE,UAAAA,CAAW3W,GACP,OAAOzH,KAAK2b,iBAAiBnd,IAAIiJ,EACrC,CACA0M,WAAAA,CAAY5C,EAASuJ,EAAS,IAC1B,OAAO3G,YAAY,CACfZ,MAAOgG,OAAO,IACfhI,EAASA,EAAQ9C,KAAMqM,EAC9B,CACApG,gBAAAA,CAAiBnD,EAASuJ,EAAS,IAC/B,OAAOpG,iBAAiB,CACpBnB,MAAOgG,OAAO,IACfhI,EAASA,EAAQ9C,KAAMqM,EAC9B,CACAuD,OAAAA,CAAQtiB,EAAMuiB,GAAW,GACrB,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAK3B,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAKmU,YAAY5C,EAAS,IAAIuJ,IAAShgB,OAAQ,CAGpF,CAEA0jB,YAAAA,CAAaziB,EAAMuiB,GAAW,GAC1B,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAK3B,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAK0U,iBAAiBnD,EAAS,IAAIuJ,IAAS9f,MAAMmX,GAAQA,EAAIrX,SAAS,CAG5G,CAEA2jB,iBAAAA,CAAkB1iB,EAAMuiB,GAAW,GAC/B,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAAU,GAKrC,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAKmU,YAAY5C,EAAS,IAAIuJ,IAAShgB,OAAQ,CAGpF,CACA4jB,sBAAAA,CAAuB3iB,EAAMuiB,GAAW,GACpC,MAAM7K,EAAS1C,QAAMhV,EAAMuiB,GAAU,GAKrC,MAJaha,IAAIwW,KACb,MAAMvJ,EAAUvR,KAAKie,cAAcje,KAAKuR,QAASkC,GACjD,MAAO,CAAElC,UAASgN,IAAKA,IAAMve,KAAK0U,iBAAiBnD,EAAS,IAAIuJ,IAAS9f,MAAMmX,GAAQA,EAAIrX,SAAS,CAG5G,ECtMG,MAAM6jB,oBAAsB,CAAAC,KAAAC,IAGjB7kB,eAAA,EAAA,CAAA4kB,KAAAC,QAAA,GAAA,UAFhB9iB,EACA+iB,EAAa,IAEb,IACE,MACMxa,GADU,IAAIoX,SACC2C,QAAQtiB,GAC7B,aAAauI,EAAKwa,GAAYP,KAC/B,CAAC,MAAO3jB,GAER,CACH,IC7CMmkB,oBAAsB,CAAOhjB,EAAcwV,IAAgBvX,eAAA,OAAA,OAAA,GAAA,YAE/D,aADgB2kB,oBAAoB5iB,EAAMwV,EAE5C,UCfayN,SA4BX,WAAApf,EAAYqf,WAAEA,EAAU1N,QAAEA,EAAOuN,WAAEA,IACjC,MAAMI,SAAEA,EAAQC,SAAEA,EAAQC,GAAEA,EAAEzX,KAAEA,EAAI0X,WAAEA,GAAeJ,EACrDjf,KAAKsf,SAAW,OAChBtf,KAAKkf,SAAWA,EAChBlf,KAAKmf,SAAWA,EAChBnf,KAAKuf,OAASH,EACdpf,KAAK2H,KAAOA,EACZ3H,KAAKqf,WAAaA,EAElBrf,KAAKuR,QAAUA,EACfvR,KAAK8e,WAAaA,CACnB,CAYY,MAAAU,CACXC,uDAID,CASY,QAAAC,CAASlM,uDAGrB,CAKa,MAAAmM,CAAON,oDACnB,IAAKA,EAAY,OAAO,EAExB,MAAMO,oBAAEA,GAAwBP,EAChC,IAAKO,EAAqB,OAAO,EAEjC,IAGE,aAAab,oBACX,qCAC0Ba,8CAEzB1R,OAAAnN,OAAA,CAAA,EAEIf,KAAK8e,YAGb,CAAC,MAAO3C,GACP,OAAO,CACR,IACF,CAKa,WAAA0D,oDACZ,MAAMX,EAAsC,GACtCY,EAAmB,GACzB,IAAK,MAAMhR,KAAQ9O,KAAKkf,SAAU,CAChC,MAAMG,WAAEA,GAAevQ,EACvBgR,EAAY5Y,KAAKlH,KAAK2f,OAAON,GAC9B,CAQD,aANqBhlB,QAAQoP,IAAIqW,IAC1BpY,SAAQ,CAACoH,EAAM9D,KACpB,MAAM+U,EAAM/f,KAAKkf,SAASlU,GAC1B+U,EAAIjlB,OAASgU,EACboQ,EAAShY,KAAK6Y,EAAI,IAEbb,IACR,CAKY,OAAAc,CACXxM,oDAEA,MAAMyM,YAAEA,EAAWC,SAAEA,GAAa1M,EAC5B1L,QAAY9H,KAAKwf,OAAO,CAC5BD,OAAQvf,KAAKuf,OACbU,cACAC,aAEIC,EAASrY,EAAMA,EAAIqY,OAAS,UAElC,GAAIA,IAAW7jB,QAAYA,aAAC8jB,QAAS,CACnC,MAAMlB,QAAiBlf,KAAK6f,cACtBQ,EAASvY,EAAMA,EAAIuY,OAAS,CAAA,EAClC7M,EAAO7Y,KAAK,CACVwlB,OAAQ7jB,QAAYA,aAAC8jB,QACrBC,SACAd,OAAQvf,KAAKuf,OACbe,SAAUtgB,KAAK2H,KACf0X,WAAYrf,KAAKqf,WACjBY,cACAC,WACAhB,YAEH,CAED,MAAO,CACLiB,SACAE,OAAQvY,aAAA,EAAAA,EAAKuY,OACbJ,cACAC,WACAX,OAAQvf,KAAKuf,OACbe,SAAUtgB,KAAK2H,KACf0X,WAAYrf,KAAKqf,WACjBH,SAAU,MAEb,CAEY,MAAAqB,CAAO/M,oDAClB,MAAM0L,QAAiBlf,KAAK6f,oBACtB7f,KAAK0f,SAAS,CAClBO,YAAazM,EAAOyM,YACpBC,SAAU1M,EAAO0M,SACjBX,OAAQ/L,EAAO+L,OACfiB,KAAMhN,EAAOgN,OAGfhN,EAAO7Y,KAAK,CACVslB,YAAazM,EAAOyM,YACpBC,SAAU1M,EAAO0M,SACjBX,OAAQvf,KAAKuf,OACbe,SAAUtgB,KAAK2H,KACf0X,WAAYrf,KAAKqf,WACjBH,WACAiB,OAAQ7jB,QAAYA,aAAC8jB,YAGxB,EA9KMpB,SAAYyB,aAAG,WCVxB,MAAqBC,kBAAkB1B,SAAvC,WAAApf,uBACWI,KAAQsf,SAAG,OAErB,EADQoB,UAAYD,aAAG,YCFxB,MAAqBE,iBAAiB3B,SAAtC,WAAApf,uBACWI,KAAQsf,SAAG,MAErB,EADQqB,SAAYF,aAAG,WCKV,MAAOG,aAEnB,WAAAhhB,GACEI,KAAK6gB,QAAU,EAChB,CASD,EAAAC,CAAGC,EAAgB7J,EAAwB8J,GACzCD,EAASA,EAAOhc,OACX/E,KAAK6gB,QAAQE,KAChB/gB,KAAK6gB,QAAQE,GAAU,IAEzB/gB,KAAK6gB,QAAQE,GAAQ7Z,KAAK,CACxBgQ,WACA8J,OAAQA,GAEX,CAOD,GAAAC,CAAIF,EAAgB7J,GAKlB,GAJK6J,IAEH/gB,KAAK6gB,QAAU,IAEZ3J,EAGE,CAEL,MAAMgK,EAASlhB,KAAK6gB,QAAQE,IAAW,GACvC,IAAI5jB,OAAEA,GAAW+jB,EACjB,IAAK,IAAI7c,EAAI,EAAGA,EAAIlH,EAAQkH,IACtB6c,EAAO7c,GAAG6S,WAAaA,IACzBgK,EAAO3L,OAAOlR,EAAG,GACjBlH,IACAkH,KAGkB,IAAlB6c,EAAO/jB,eACF6C,KAAK6gB,QAAQE,EAEvB,aAfQ/gB,KAAK6gB,QAAQE,EAgBvB,CAOD,IAAAI,CAAKJ,EAAgBK,GAGJ,CAACC,IACd,IAAIlkB,OAAEA,GAAWkkB,EACjB,IAAK,IAAIhd,EAAI,EAAGA,EAAIlH,EAAQkH,IAAK,CAC/B,IAAKgd,EAAGhd,GAEN,SAEF,MAAM6S,SAAEA,EAAQ8J,KAAEA,GAASK,EAAGhd,GAC1B2c,IACFK,EAAG9L,OAAOlR,EAAG,GACK,IAAdgd,EAAGlkB,eACE6C,KAAK6gB,QAAQE,GAEtB5jB,IACAkH,KAEF6S,EAASjc,MAAM+E,KAAM,CAACohB,GACvB,GAEHE,CArBethB,KAAK6gB,QAAQE,IAAW,GAsBxC,CAMD,SAAAQ,GACE,OAAOvhB,KAAK6gB,OACb,EC9FH,MAAMW,YAAgC,iBAAXC,QAAuBA,OAAOA,SAAWA,OAE9DC,WAA+B,iBAAXC,QAAuBA,OAAOA,SAAWA,OAK7D/J,YACA4J,YACKC,OAGW,iBAATG,MAAqBA,KAAKA,OAASA,KACrCA,KAGLF,WACKC,OAGiB,iBAAfhK,WACFA,WAGF,CACLwG,KAAM,KAAe,GCzBzB,IAAKvG,YAAYiK,eAAgB,CAC/B,MAAMC,EAAU,CACdtB,KAAM,CAA6B,EAEnC,OAAAuB,CAAQvZ,EAAK/N,GACXqnB,EAAQtB,KAAKhY,GAAO/N,CACrB,EAEDunB,QAAQxZ,GACCsZ,EAAQtB,KAAKhY,GAGtB,UAAAyZ,CAAWzZ,UACFsZ,EAAQtB,KAAKhY,EACrB,EAED,KAAA0Z,GACEJ,EAAQtB,KAAO,EAChB,GAGH5I,YAAYiK,eAAiBC,CAC/B,CAEe,IAAAA,QAAA,CACb,OAAAC,CAAQvZ,EAAK/N,GACU,iBAAVA,IACTA,EAAQie,KAAKC,UAAUle,IAGzBmd,YAAYiK,eAAeE,QAAQvZ,EAAK/N,EACzC,EAED,OAAAunB,CAAQxZ,GACN,MAAM/N,EAAQmd,YAAYiK,eAAeG,QAAQxZ,GACjD,IACE,OAAOkQ,KAAK3H,MAAMtW,EACnB,CAAC,MAAO0hB,GACP,OAAO1hB,CACR,CACF,EAED,UAAAwnB,CAAWzZ,GACToP,YAAYiK,eAAeI,WAAWzZ,EACvC,EAED,KAAA0Z,GACEtK,YAAYiK,eAAeK,OAC5B,2rBCnDHhU,OAAOiU,eAAe9mB,MAAS,aAAc,CAC3CZ,OAAO,IAEM2nB,MAAAC,QAAGC,IAElB,IAAIC,UAAUC,yBAAuBC,YAErC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,MAAMsjB,UAAY,IAAIzF,WAAW,KAEjC,IAAI0F,QAAUD,UAAUxlB,OAExB,SAASmlB,MAOP,OANIM,QAAUD,UAAUxlB,OAAS,KAC/BolB,UAAQF,QAAQQ,eAAeF,WAE/BC,QAAU,GAGLD,UAAU1kB,MAAM2kB,QAASA,SAAW,GAC7C,2CCrBA1U,OAAOiU,eAAe9mB,MAAS,aAAc,CAC3CZ,OAAO,IAEM0H,MAAAkgB,aAAG,EAClB,IAAIS,WAAW,sHACfznB,MAAAA,QAAkBynB,WCLlB5U,OAAOiU,eAAe9mB,WAAS,aAAc,CAC3CZ,OAAO,IAEMsoB,WAAAV,aAAG,EAElB,IAAIW,OAASR,yBAAuBC,OAEpC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAAS4jB,SAASC,GAChB,MAAuB,iBAATA,GAAqBF,OAAOX,QAAQhb,KAAK6b,EACzD,CAEA,IAAIJ,WAAWG,SACf5nB,WAAAA,QAAkBynB,WCdlB5U,OAAOiU,eAAe9mB,YAAS,aAAc,CAC3CZ,OAAO,IAEM0oB,YAAAd,aAAG,EAElB,IAAIe,YAAYZ,yBAAuBC,YAEvC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAM9F,MAAMgkB,UAAY,GAElB,IAAK,IAAIhf,EAAI,EAAGA,EAAI,MAAOA,EACzBgf,UAAUnc,MAAM7C,EAAI,KAAOQ,SAAS,IAAIye,OAAO,IAGjD,SAAS3K,UAAU4K,EAAK/V,EAAS,GAG/B,MAAM0V,GAAQG,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM6V,UAAUE,EAAI/V,EAAS,IAAM,IAAM6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,KAAO6V,UAAUE,EAAI/V,EAAS,MAAMgW,cAM3f,KAAK,EAAIJ,YAAUf,SAASa,GAC1B,MAAMjQ,UAAU,+BAGlB,OAAOiQ,CACT,CAEA,IAAIJ,WAAWnK,UACftd,YAAAA,QAAkBynB,WCpClB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEMgpB,KAAApB,aAAG,EAElB,IAAIqB,OAAOlB,yBAAuBC,OAE9BkB,aAAanB,yBAAuBC,aAExC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAM9F,IAAIukB,QAEAC,UAGAC,WAAa,EACbC,WAAa,EAEjB,SAASC,GAAG/P,EAASgQ,EAAKzW,GACxB,IAAInJ,EAAI4f,GAAOzW,GAAU,EACzB,MAAMhO,EAAIykB,GAAO,IAAIlV,MAAM,IAE3B,IAAImV,GADJjQ,EAAUA,GAAW,IACFiQ,MAAQN,QACvBO,OAAgCjnB,IAArB+W,EAAQkQ,SAAyBlQ,EAAQkQ,SAAWN,UAInE,GAAY,MAARK,GAA4B,MAAZC,EAAkB,CACpC,MAAMC,EAAYnQ,EAAQoQ,SAAWpQ,EAAQqO,KAAOoB,OAAKrB,WAE7C,MAAR6B,IAEFA,EAAON,QAAU,CAAgB,EAAfQ,EAAU,GAAWA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAG3F,MAAZD,IAEFA,EAAWN,UAAiD,OAApCO,EAAU,IAAM,EAAIA,EAAU,IAEzD,CAMD,IAAIE,OAA0BpnB,IAAlB+W,EAAQqQ,MAAsBrQ,EAAQqQ,MAAQ3G,KAAK4G,MAG3DC,OAA0BtnB,IAAlB+W,EAAQuQ,MAAsBvQ,EAAQuQ,MAAQT,WAAa,EAEvE,MAAMU,EAAKH,EAAQR,YAAcU,EAAQT,YAAc,IAavD,GAXIU,EAAK,QAA0BvnB,IAArB+W,EAAQkQ,WACpBA,EAAWA,EAAW,EAAI,QAKvBM,EAAK,GAAKH,EAAQR,kBAAiC5mB,IAAlB+W,EAAQuQ,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAI7kB,MAAM,mDAGlBmkB,WAAaQ,EACbP,WAAaS,EACbX,UAAYM,EAEZG,GAAS,YAET,MAAMI,GAA4B,KAAb,UAARJ,GAA6BE,GAAS,WACnDhlB,EAAE6E,KAAOqgB,IAAO,GAAK,IACrBllB,EAAE6E,KAAOqgB,IAAO,GAAK,IACrBllB,EAAE6E,KAAOqgB,IAAO,EAAI,IACpBllB,EAAE6E,KAAY,IAALqgB,EAET,MAAMC,EAAML,EAAQ,WAAc,IAAQ,UAC1C9kB,EAAE6E,KAAOsgB,IAAQ,EAAI,IACrBnlB,EAAE6E,KAAa,IAANsgB,EAETnlB,EAAE6E,KAAOsgB,IAAQ,GAAK,GAAM,GAE5BnlB,EAAE6E,KAAOsgB,IAAQ,GAAK,IAEtBnlB,EAAE6E,KAAO8f,IAAa,EAAI,IAE1B3kB,EAAE6E,KAAkB,IAAX8f,EAET,IAAK,IAAIS,EAAI,EAAGA,EAAI,IAAKA,EACvBplB,EAAE6E,EAAIugB,GAAKV,EAAKU,GAGlB,OAAOX,IAAO,EAAIN,aAAWtB,SAAS7iB,EACxC,CAEA,IAAIsjB,WAAWkB,GACf3oB,KAAAA,QAAkBynB,yCCxGlB5U,OAAOiU,eAAe9mB,QAAS,aAAc,CAC3CZ,OAAO,IAEMoqB,QAAAxC,aAAG,EAElB,IAAIe,YAAYZ,yBAAuBC,YAEvC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAAS0R,MAAMmS,GACb,KAAK,EAAIE,YAAUf,SAASa,GAC1B,MAAMjQ,UAAU,gBAGlB,IAAI6R,EACJ,MAAMvB,EAAM,IAAIrG,WAAW,IAuB3B,OArBAqG,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,EAAG,GAAI,OAAS,GAClDslB,EAAI,GAAKuB,IAAM,GAAK,IACpBvB,EAAI,GAAKuB,IAAM,EAAI,IACnBvB,EAAI,GAAS,IAAJuB,EAETvB,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,EAAG,IAAK,OAAS,EACnDslB,EAAI,GAAS,IAAJuB,EAETvB,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,GAAI,IAAK,OAAS,EACpDslB,EAAI,GAAS,IAAJuB,EAETvB,EAAI,IAAMuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,GAAI,IAAK,OAAS,EACpDslB,EAAI,GAAS,IAAJuB,EAGTvB,EAAI,KAAOuB,EAAIpoB,SAASwmB,EAAKjlB,MAAM,GAAI,IAAK,KAAO,cAAgB,IACnEslB,EAAI,IAAMuB,EAAI,WAAc,IAC5BvB,EAAI,IAAMuB,IAAM,GAAK,IACrBvB,EAAI,IAAMuB,IAAM,GAAK,IACrBvB,EAAI,IAAMuB,IAAM,EAAI,IACpBvB,EAAI,IAAU,IAAJuB,EACHvB,CACT,CAEA,IAAIT,WAAW/R,MACf1V,QAAAA,QAAkBynB,WC1ClB5U,OAAOiU,eAAe9mB,IAAS,aAAc,CAC3CZ,OAAO,IAEMsqB,IAAA1C,QAAGS,WAClBznB,IAAAA,IAAcA,IAAAA,SAAc,EAE5B,IAAIsoB,aAAanB,yBAAuBC,aAEpCuC,OAASxC,yBAAuBC,SAEpC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAAS4lB,cAAc/gB,GACrBA,EAAM4Y,SAASD,mBAAmB3Y,IAElC,MAAMghB,EAAQ,GAEd,IAAK,IAAI7gB,EAAI,EAAGA,EAAIH,EAAI/G,SAAUkH,EAChC6gB,EAAMhe,KAAKhD,EAAIihB,WAAW9gB,IAG5B,OAAO6gB,CACT,CAEA,MAAME,IAAM,uCACDL,IAAAK,IAAGA,IACd,MAAMC,IAAM,uCAGZ,SAASvC,WAAS9O,EAAMsR,EAASC,GAC/B,SAASC,EAAa/qB,EAAOgrB,EAAWxB,EAAKzW,GAS3C,GARqB,iBAAV/S,IACTA,EAAQwqB,cAAcxqB,IAGC,iBAAdgrB,IACTA,GAAY,EAAIT,OAAO3C,SAASoD,IAGT,KAArBA,EAAUtoB,OACZ,MAAM8V,UAAU,oEAMlB,IAAIiS,EAAQ,IAAIhI,WAAW,GAAKziB,EAAM0C,QAOtC,GANA+nB,EAAM3e,IAAIkf,GACVP,EAAM3e,IAAI9L,EAAOgrB,EAAUtoB,QAC3B+nB,EAAQK,EAASL,GACjBA,EAAM,GAAgB,GAAXA,EAAM,GAAYI,EAC7BJ,EAAM,GAAgB,GAAXA,EAAM,GAAY,IAEzBjB,EAAK,CACPzW,EAASA,GAAU,EAEnB,IAAK,IAAInJ,EAAI,EAAGA,EAAI,KAAMA,EACxB4f,EAAIzW,EAASnJ,GAAK6gB,EAAM7gB,GAG1B,OAAO4f,CACT,CAEA,OAAO,EAAIN,aAAWtB,SAAS6C,EAChC,CAGD,IACEM,EAAaxR,KAAOA,CACtB,CAAE,MAAO7V,GAAO,CAKhB,OAFAqnB,EAAaJ,IAAMA,IACnBI,EAAaH,IAAMA,IACZG,CACT,CAhDWT,IAAAM,IAAGA,iBC3BdnX,OAAOiU,eAAe9mB,MAAS,aAAc,CAC3CZ,OAAO,IAEMirB,MAAArD,aAAG,EAElB,IAAIE,UAAUC,yBAAuBC,YAErC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASsmB,IAAIT,GAOX,OANInW,MAAMC,QAAQkW,GAChBA,EAAQU,OAAOC,KAAKX,GACM,iBAAVA,IAChBA,EAAQU,OAAOC,KAAKX,EAAO,SAGtB3C,UAAQF,QAAQyD,WAAW,OAAOC,OAAOb,GAAOc,QACzD,CAEA,IAAIlD,WAAW6C,IACftqB,MAAAA,QAAkBynB,WCpBlB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEMwrB,KAAA5D,aAAG,EAElB,IAAI6D,KAAK1D,yBAAuBC,KAE5B0D,IAAM3D,yBAAuBC,OAEjC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,MAAM+mB,IAAK,EAAIF,KAAG7D,SAAS,KAAM,GAAM8D,IAAI9D,SAC3C,IAAIS,WAAWsD,GACf/qB,KAAAA,QAAkBynB,uBCblB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEM4rB,KAAAhE,aAAG,EAElB,IAAIqB,KAAOlB,yBAAuBC,OAE9BkB,WAAanB,yBAAuBC,aAExC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASinB,GAAGrS,EAASgQ,EAAKzW,GAGxB,MAAM+Y,GAFNtS,EAAUA,GAAW,IAEAoQ,SAAWpQ,EAAQqO,KAAOoB,KAAKrB,WAMpD,GAHAkE,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBtC,EAAK,CACPzW,EAASA,GAAU,EAEnB,IAAK,IAAInJ,EAAI,EAAGA,EAAI,KAAMA,EACxB4f,EAAIzW,EAASnJ,GAAKkiB,EAAKliB,GAGzB,OAAO4f,CACT,CAEA,OAAO,EAAIN,WAAWtB,SAASkE,EACjC,CAEA,IAAIzD,WAAWwD,GACfjrB,KAAAA,QAAkBynB,iCClClB5U,OAAOiU,eAAe9mB,OAAS,aAAc,CAC3CZ,OAAO,IAEM+rB,OAAAnE,aAAG,EAElB,IAAIE,QAAUC,yBAAuBC,YAErC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASonB,KAAKvB,GAOZ,OANInW,MAAMC,QAAQkW,GAChBA,EAAQU,OAAOC,KAAKX,GACM,iBAAVA,IAChBA,EAAQU,OAAOC,KAAKX,EAAO,SAGtB3C,QAAQF,QAAQyD,WAAW,QAAQC,OAAOb,GAAOc,QAC1D,CAEA,IAAIlD,WAAW2D,KACfprB,OAAAA,QAAkBynB,WCpBlB5U,OAAOiU,eAAe9mB,KAAS,aAAc,CAC3CZ,OAAO,IAEMisB,KAAArE,aAAG,EAElB,IAAI6D,GAAK1D,yBAAuBC,KAE5BkE,KAAOnE,yBAAuBC,QAElC,SAASD,yBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,MAAMunB,IAAK,EAAIV,GAAG7D,SAAS,KAAM,GAAMsE,KAAKtE,SAC5C,IAAIS,WAAW8D,GACfvrB,KAAAA,QAAkBynB,sBCblB5U,OAAOiU,eAAe9mB,IAAS,aAAc,CAC3CZ,OAAO,IAEMosB,IAAAxE,aAAG,EAClB,IAAIS,WAAW,uCACfznB,IAAAA,QAAkBynB,4BCLlB5U,OAAOiU,eAAe9mB,UAAS,aAAc,CAC3CZ,OAAO,IAEMqsB,UAAAzE,aAAG,EAElB,IAAIe,UAAYZ,uBAAuBC,YAEvC,SAASD,uBAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,CAE9F,SAASimB,QAAQpC,GACf,KAAK,EAAIE,UAAUf,SAASa,GAC1B,MAAMjQ,UAAU,gBAGlB,OAAOvW,SAASwmB,EAAKI,OAAO,GAAI,GAAI,GACtC,CAEA,IAAIR,SAAWwC,QACfjqB,UAAAA,QAAkBynB,qBClBlB5U,OAAOiU,eAAwB9mB,EAAA,aAAc,CAC3CZ,OAAO,IAETyT,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO0nB,EAAG7D,OACZ,IAEFnU,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAOwoB,EAAI3E,OACb,IAEFnU,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAOyoB,EAAI5E,OACb,IAEFnU,OAAOiU,eAAe9mB,EAAS,KAAM,CACnC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO0oB,EAAI7E,OACb,IAEFnU,OAAOiU,eAAe9mB,EAAS,MAAO,CACpC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO2oB,EAAK9E,OACd,IAEFnU,OAAOiU,eAAe9mB,EAAS,UAAW,CACxC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO4oB,EAAS/E,OAClB,IAEFnU,OAAOiU,eAAe9mB,EAAS,WAAY,CACzC0rB,YAAY,EACZvoB,IAAK,WACH,OAAO4kB,EAAUf,OACnB,IAEFnU,OAAOiU,eAAe9mB,EAAS,YAAa,CAC1C0rB,YAAY,EACZvoB,IAAK,WACH,OAAOmlB,EAAWtB,OACpB,IAEFnU,OAAOiU,eAAe9mB,EAAS,QAAS,CACtC0rB,YAAY,EACZvoB,IAAK,WACH,OAAOwmB,EAAO3C,OAChB,IAGF,IAAI6D,EAAK1D,EAAuBC,MAE5BuE,EAAMxE,EAAuBC,MAE7BwE,EAAMzE,EAAuBC,MAE7ByE,EAAM1E,EAAuBC,MAE7B0E,EAAO3E,EAAuBC,KAE9B2E,EAAW5E,EAAuBC,WAElCW,EAAYZ,EAAuBC,YAEnCkB,EAAanB,EAAuBC,aAEpCuC,EAASxC,EAAuBC,SAEpC,SAASD,EAAuBnjB,GAAO,OAAOA,GAAOA,EAAIqjB,WAAarjB,EAAM,CAAEgjB,QAAShjB,EAAO,SC5EvF,MAAMgoB,aAAe,IAEnB,QADMC,KAAAA,OAIFC,eAAiB,IAErB,UADMD,KAAAA,OAIFE,eAAiB,IAErB,UADMF,KAAAA,OCGT,MAAOG,kBAAkB7G,aAqB7B,WAAAhhB,CAAY8nB,GACV5nB,QACAE,KAAK2nB,aAAe,IAAIrpB,IACxB0B,KAAK4nB,iBAAmB,IAAItpB,IAC5B0B,KAAK6nB,UAAYH,EAAOG,UACxB7nB,KAAK8nB,SAAWJ,EAAOI,QACxB,CAQM,SAAAC,CAAUC,GACf,MAAM/H,YAAEA,GAAgB+H,EACnBhoB,KAAK2nB,aAAanhB,IAAIyZ,IACzBjgB,KAAK2nB,aAAaphB,IAAI0Z,EAAa,IAGrC,MAAMgI,EACJjoB,KAAK2nB,aAAanpB,IAAIyhB,GACpBgI,GACFA,EAAmB/gB,KAAK8gB,EAG3B,CAEO,sBAAAE,CAAuBC,SAC7B,MAAMlI,YAAEA,EAAWC,SAAEA,GAAaiI,EAClC,IAAKnoB,KAAK4nB,iBAAiBphB,IAAIyZ,GAAc,CAC3C,MAAMmI,EAAuC,IAAI9pB,IACjD0B,KAAK4nB,iBAAiBrhB,IAAI0Z,EAAamI,EACxC,CACGlI,IACoC,QAAtCmI,EAAAroB,KAAK4nB,iBAAiBppB,IAAIyhB,UAAY,IAAAoI,GAAAA,EAAE9hB,IAAI2Z,EAAUiI,GAEzD,CAEO,0BAAAG,CAA2BH,GACjC,MAAMlI,YAAEA,EAAWC,SAAEA,GAAaiI,EAClC,IAAKjI,EAAU,OAEf,MAAMkI,EAAapoB,KAAK4nB,iBAAiBppB,IAAIyhB,GACxCmI,GAELA,EAAW1mB,OAAOwe,EACnB,CAMO,gBAAAqI,CAAiBJ,SACV,QAAbE,EAAAroB,KAAK8nB,gBAAQ,IAAAO,GAAAA,EAAEG,gBACbta,OAAAnN,OAAA,CAAA0nB,UAAW9K,KAAK4G,OACb4D,GAEN,CAEO,gBAAAO,CAAiBzI,GACvB,MAAMmI,EAAapoB,KAAK4nB,iBAAiBppB,IAAIyhB,GAC7C,QAAKmI,IACmB,IAApBA,EAAWhQ,OACbpY,KAAK4nB,iBAAiBlmB,OAAOue,IACtB,GAGV,CASM,GAAA1B,CAAIoK,GACT,MAAMC,EAA4C5oB,KAAK2nB,aAAanpB,IAClEmqB,EAAS1I,aAKX,KAAO2I,aAAS,EAATA,EAAWzrB,QAAQ,CACxB,MAAM0rB,EAAcD,EAAU/X,MACxBqP,EAAWqH,iBACXY,EACAja,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAAA8nB,GACJ,CAAA3I,aAEFlgB,KAAKkoB,uBAAuBC,GAC5BnoB,KAAKsE,KAAK6jB,EACX,CAEInoB,KAAK0oB,iBAAiBC,EAAS1I,cAElCjgB,KAAKmhB,KAAKjlB,wBACLgS,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAAA4nB,GACH,CAAAxI,OAAQ9jB,QAAUA,WAACysB,YAGxB,CAEO,IAAAnuB,CAAK6lB,GACPA,EAAKtB,UAAYsB,EAAKtB,SAAS/hB,OAAS,GAC1CqjB,EAAKtB,SAASxX,SAASoH,IACjBA,EAAKhU,QACPkF,KAAK+nB,UAAU,CACb9H,YAAaO,EAAKP,YAClBV,OAAQzQ,EAAKia,QAEhB,IAIL/oB,KAAKuoB,iBAAiB/H,GACtBxgB,KAAKsoB,2BAA2B9H,GAChCxgB,KAAKue,IAAIiC,EACV,CAOY,MAAAD,CAAOyI,oDAClB,MAAM/I,YAAEA,EAAWC,SAAEA,EAAQX,OAAEA,GAAWyJ,EAC1ChpB,KAAKkoB,uBAAuB,CAC1BjI,cACAC,WACAX,WAGF,MAAM0J,EAAQjpB,KAAK6nB,UAAUqB,aAAa3J,SACpC0J,eAAAA,EAAO1I,OAAMrS,OAAAnN,OAAAmN,OAAAnN,OAAA,GACdioB,GAAW,CACdruB,KAAMqF,KAAKrF,KAAKwuB,KAAKnpB,WAExB,CAGO,WAAAopB,CAAYC,GAClBrpB,KAAKmhB,KAAKhlB,2BAA4BktB,EACvC,CAEO,KAAAlN,CAAMkN,GACZrpB,KAAKmhB,KAAK/kB,qBAAsBitB,EACjC,CAEa,IAAA/kB,CAAK6jB,oDACjB,MAAMlI,YAAEA,EAAWC,SAAEA,EAAQX,OAAEA,GAAW4I,EACpCc,EAAQjpB,KAAK6nB,UAAUqB,aAAa3J,GACpC8J,QAAmBJ,aAAA,EAAAA,EAAOjJ,QAAQ,CACtCC,cACAC,WACAX,SACA5kB,KAAMqF,KAAKrF,KAAKwuB,KAAKnpB,QAGvB,GAAIqpB,EAAY,CACd,MAAM/I,SAAEA,EAAQjB,WAAEA,EAAUH,SAAEA,EAAQiB,OAAEA,EAAME,OAAEA,GAAWgJ,EACrDC,EAAuC,CAE3CrJ,cACAC,WACAX,SAEAe,WACAjB,aACAH,WACAiB,SACAE,WAEEgJ,aAAA,EAAAA,EAAYlJ,UAAW9jB,QAAAA,WAAWktB,cACpCvpB,KAAKopB,YAAYC,GACjBrpB,KAAKuoB,iBAAiBe,GACtBtpB,KAAKsoB,2BAA2BH,KAG9BkB,aAAA,EAAAA,EAAYlJ,UAAW9jB,QAAAA,WAAWmtB,QACpCxpB,KAAKmc,MAAMkN,GACXrpB,KAAKuoB,iBAAiBe,GACtBtpB,KAAKsoB,2BAA2BH,GAEnC,IAEF,QCnNUsB,UAoDX,WAAA7pB,EAAY8pB,aACVA,EAAY5B,SACZA,EAAQvW,QACRA,EAAU,GAAEuN,WACZA,EAAa,CAAE,EAAA6K,cACfA,EAAgB,cArClB3pB,KAAA4pB,cAAsD,IAAItrB,IAY1D0B,KAAU6pB,WAA0B,GAIpC7pB,KAAU8e,WAA4B,GAwBpC9e,KAAK0pB,aAAeA,EAEpB1pB,KAAK8pB,YAAc,GAEnB9pB,KAAK+pB,kBAAoB,KAEzB/pB,KAAKuR,QAAUA,EAEfvR,KAAK8e,WAAaA,EAElB9e,KAAK2pB,cAAgBA,EACrB3pB,KAAKgqB,WAAY,EACjBhqB,KAAKiqB,UAAY,IAAIxC,UAAU,CAC7BI,UAAW7nB,KACX8nB,aAGF9nB,KAAKiqB,UAAUnJ,GAAG5kB,yBAA0BpB,IAC1CkF,KAAKkqB,kBAAkBpvB,EAAO,IAGhCkF,KAAKiqB,UAAUnJ,GAAG3kB,4BAA6BrB,IAC7CkF,KAAKkqB,kBAAkBpvB,EAAO,IAGhCkF,KAAKiqB,UAAUnJ,GAAG1kB,sBAAuBtB,IACvCkF,KAAKkqB,kBAAkBpvB,EAAO,GAEjC,CAmCM,IAAAqvB,CAAKC,GACV,MAAMC,MAAEA,EAAQ,GAAEC,MAAEA,EAAQ,IAAOF,EACnCC,EAAM3iB,SAASwc,IACb,GAAIlkB,KAAK0pB,aAAaljB,IAAI0d,EAAKvc,MAAO,CACpC,MAAMsX,EAAkC,CACtCG,GAAI8E,EAAK9E,GACTzX,KAAMuc,EAAKvc,KACX0X,WAAY6E,EAAK7E,WACjBF,SAAU,GACVD,SAAU,IAEZlf,KAAK4pB,cAAcrjB,IAAI2d,EAAK9E,GAAIH,GAC5BiF,EAAKvc,OAAS3H,KAAK2pB,eACrB3pB,KAAK6pB,WAAW3iB,KAAK+X,EAExB,CAEA,IAGHqL,EAAM5iB,SAAS8H,IACb,MAAM+a,EAAavqB,KAAK4pB,cAAcprB,IAAIgR,EAAKgb,cACzCC,EAAazqB,KAAK4pB,cAAcprB,IAAIgR,EAAKkb,cAC3CH,GACFA,EAAWrL,SAAShY,KAAK,CACvBkY,GAAI5P,EAAK4P,GACTC,WAAY7P,EAAK6P,WACjB0J,OAAQvZ,EAAKkb,eAGbD,GAAcA,EAAW9iB,OAAS3H,KAAK2pB,eACzCc,EAAWtL,SAASjY,KAAK,CACvBkY,GAAI5P,EAAK4P,GACTC,WAAY7P,EAAK6P,WACjBsL,OAAQnb,EAAKgb,cAEhB,GAEJ,CAUO,eAAAI,CAAgBC,SAKtB,GAJA7qB,KAAK8pB,YAAY5iB,KAAK2jB,GAIlBA,EAAU3K,UAAY2K,EAAUtL,QAAUsL,EAAU5K,YAOtD,YANAjgB,KAAKiqB,UAAU1J,OAAO,CACpBN,YAAa4K,EAAU5K,YACvBC,SAAU2K,EAAU3K,SACpBX,OAAQsL,EAAUtL,OAClBiB,KAAMqK,EAAUrK,OAOpB,MAAMP,EAAcoH,eAIpB,GAHAwD,EAAU5K,YAAcA,EAGpB4K,aAAS,EAATA,EAAWtL,OAAQ,CACrB,MAAMN,EAAajf,KAAK4pB,cAAcprB,IAAIqsB,EAAUtL,QACpD,IAAKN,EAMH,YALkB,QAAlBoJ,EAAAwC,aAAA,EAAAA,EAAWC,eAAO,IAAAzC,GAAAA,EAAAnnB,KAAA2pB,EAChB,IAAIlrB,MACF,GAAG7D,YAAYZ,QAAAA,UAAUM,iBAAiBqvB,EAAUtL,aAM1Dvf,KAAK6pB,WAAa,CAAC5K,EACpB,CAEDjf,KAAK6pB,WAAWniB,SAASqjB,IACvB/qB,KAAKiqB,UAAUlC,UAAU,CACvB9H,cACAV,OAAQwL,EAAU3L,IAClB,IAGJpf,KAAKiqB,UAAU1L,IAAI,CACjB0B,eAEH,CAaY,OAAAD,CAAQxM,oDACnBxT,KAAK4qB,gBAAgBpX,KACtB,CAEY,MAAA+M,CAAO/M,oDAClBxT,KAAK4qB,gBAAgBpX,KACtB,CASM,YAAA0V,CAAa3J,GAClB,MAAMN,EAAajf,KAAK4pB,cAAcprB,IAAI+gB,GAC1C,GAAIN,EAAY,CACd,MAAM+L,EAAYhrB,KAAK0pB,aAAalrB,IAAIygB,EAAWtX,MACnD,IAAKqjB,EACH,MAAM,IAAIrrB,MAAM,wBAElB,OAAO,IAAIqrB,EAAU,CACnB/L,aACAH,WAAY9e,KAAK8e,WACjBvN,QAASvR,KAAKuR,SAEjB,CACF,CAEM,gBAAA0Z,CAAiBtjB,GACtB3H,KAAK2pB,cAAgBhiB,CACtB,CAEM,gBAAAujB,CAAiB1K,GAMtB,OAJAxgB,KAAK8e,WACA5Q,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAAAf,KAAK8e,YACL0B,GAEExgB,KAAK8e,UACb,CAQO,iBAAAoL,CAAkBpvB,GACxB,MAAMkQ,EAAQhL,KAAK8pB,YAAYqB,WAC5B9mB,GAAMA,EAAE4b,cAAgBnlB,EAAOmlB,cAElC,GAAIjV,GAAS,EAAG,CACd,MAAMkM,SAAEA,GAAalX,KAAK8pB,YAAY9e,GACtChL,KAAK8pB,YAAYvU,OAAOvK,EAAO,GAC/BkM,SAAAA,EAAWpc,EACZ,CACF,ECzSI,MAAMswB,aAAe,IACfC,aAAe,IACfC,2BAA6B,mCAE7BC,SAIX,WAAA3rB,EAAY4rB,WAAEA,IACZxrB,KAAKwrB,WAAaA,EAClBxrB,KAAKyrB,YAAcL,aAEnB,MAAMM,EAAY1rB,KAAKgiB,QAAQsJ,6BAA+B,GAI9D,IAHuC,IAAnCI,EAAUrhB,QAAQmhB,IACpBE,EAAUxkB,KAAKskB,GAEbE,EAAUvuB,OAASkuB,aAAc,CACnC,MAAMM,EAAgBD,EAAUze,QAChCjN,KAAK2rB,cAAcA,EACpB,CACD3rB,KAAK+hB,QAAQuJ,2BAA4BI,EAC1C,CAED,oBAAAE,CAAqBjiB,GACnB3J,KAAKyrB,YAAc9hB,CACpB,CAGD,OAAAoY,CAAQvZ,EAAsB/N,GAC5B,IACEqnB,QAAQC,QAAQvZ,EAAK/N,EACtB,CAAC,MAAO0hB,GAEP2F,QAAQI,QACRJ,QAAQC,QAAQvZ,EAAK/N,EACtB,CACF,CAGD,OAAAunB,CAAQxZ,GACN,OAAOsZ,QAAQE,QAAQxZ,EACxB,CAEK,mBAAAqjB,CAAoB5L,oDACxB,OAAOjgB,KAAKgiB,QAAQ/B,KACrB,CAEK,gBAAA6L,oDACJ,OAAO9rB,KAAKgiB,QAAQhiB,KAAKwrB,aAAe,KACzC,CAEO,YAAAO,CAAa9L,GACnB,MAAM+L,EAAqBhsB,KAAKgiB,QAAQhiB,KAAKwrB,aAAe,GAC5D,GAAIQ,EAAmB7uB,QAAU6C,KAAKyrB,YAAa,CACjD,MAAMQ,EAAkBD,EAAmB/e,QAC3CjN,KAAKksB,aAAaD,EACnB,CACDD,EAAmB9kB,KAAK+Y,GACxBjgB,KAAK+hB,QAAQ/hB,KAAKwrB,WAAYQ,EAC/B,CAEO,YAAAE,CAAajM,IACEjgB,KAAKgiB,QAAQ/B,IAAgB,IACrCvY,SAASwY,IACpB4B,QAAQG,WAAW/B,EAAS,IAE9B4B,QAAQG,WAAWhC,EACpB,CAEO,qBAAAkM,CAAsBlM,EAAyBC,GACrD,MAAMkM,EAAUpsB,KAAKgiB,QAAQ/B,IAAgB,GAC7CmM,EAAQllB,KAAKgZ,GACblgB,KAAK+hB,QAAQ9B,EAAamM,EAC3B,CAaK,eAAA5D,CAAgBhJ,oDACpB,MAAMS,YAAEA,EAAWC,SAAEA,GAAaV,SACPxf,KAAK6rB,oBAAoB5L,KAGlDjgB,KAAK+rB,aAAa9L,GAEpBjgB,KAAKmsB,sBAAsBlM,EAAaC,GACxClgB,KAAK+hB,QAAQ7B,EAAUV,KACxB,CAEK,eAAA6M,CAAgBnM,oDACpB,OAAOlgB,KAAKgiB,QAAQ9B,KACrB,CAED,KAAAgC,GACEliB,KAAK2rB,cAAc3rB,KAAKwrB,WACzB,CAED,aAAAG,CAAcH,IACexrB,KAAKgiB,QAAQwJ,IAAe,IAEpC9jB,SAASuY,IAC1B6B,QAAQG,WAAWhC,IACEjgB,KAAKgiB,QAAQ/B,IAAgB,IACrCvY,SAASwY,IACpB4B,QAAQG,WAAW/B,EAAS,GAC5B,IAGJ4B,QAAQG,WAAWuJ,EACpB,QClHUc,OASX,WAAA1sB,CAAYqU,GACVjU,KAAK0pB,aAAe,IAAIprB,IACxB0B,KAAKwrB,WAAahE,kBACdvT,aAAO,EAAPA,EAASiI,SACXlc,KAAK8nB,SAAW,IAAIyD,SAAS,CAC3BC,WAAYxrB,KAAKwrB,cAIrBxrB,KAAKusB,SAAS,CACZ5kB,KAAM+Y,UAAUD,aAChBwI,MAAOvI,YAET1gB,KAAKusB,SAAS,CACZ5kB,KAAMgZ,SAASF,aACfwI,MAAOtI,WAET3gB,KAAKuR,SAAU0C,aAAO,EAAPA,EAAS1C,UAAW,CAAA,CACpC,CAMD,QAAAgb,CAAStN,GACPjf,KAAK0pB,aAAanjB,IAAI0Y,EAAWtX,KAAMsX,EAAWgK,MACnD,CAcD,iBAAAuD,CAAkB1E,GAChB9nB,KAAK8nB,SAAWA,CACjB,CAKD,IAAAqC,EAAKC,UACHA,EAAST,cACTA,EAAgB,YAAW7K,WAC3BA,EAAa,CAAA,IAEb9e,KAAKoqB,UAAYA,EACjB,MAAMvC,EAAY,IAAI4B,UAAU,CAC9BC,aAAc1pB,KAAK0pB,aACnB5B,SAAU9nB,KAAK8nB,SACfvW,QAASvR,KAAKuR,QACduN,aACA6K,kBAKF,OAFA9B,EAAUsC,KAAKC,GACfpqB,KAAK6nB,UAAYA,EACVA,CACR,CAKK,OAAA7H,CACJP,oDAEA,OAAO,IAAIplB,SAAQ,CAACC,EAASC,WAC3B,IAAIswB,EAAYpL,EACXA,IACHoL,EAAY,CAAA,GAGA,QAAdxC,EAAAroB,KAAK6nB,iBAAS,IAAAQ,GAAAA,EAAErI,QAAO9R,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EAClB8pB,GAAS,CACZ3T,SAAWpc,IACTR,EAAQQ,EAAO,EAEjBgwB,QAAU3O,IACR5hB,EAAO4hB,EAAM,IAEf,MAEL,CAOK,MAAAoE,CACJyI,oDAEA,OAAO,IAAI3uB,SAAQ,CAACC,EAASC,WACb,QAAd8tB,EAAAroB,KAAK6nB,iBAAS,IAAAQ,GAAAA,EAAE9H,OAAMrS,OAAAnN,OAAAmN,OAAAnN,OAAA,CAAA,EACjBioB,GAAW,CACd9R,SAAWpc,IACTR,EAAQQ,EAAO,EAEjBgwB,QAAU3O,IACR5hB,EAAO4hB,EAAM,IAEf,MAEL,CAEK,gBAAA2P,0DACJ,aAA4B,QAAfzD,EAAAroB,KAAK8nB,gBAAU,IAAAO,OAAA,EAAAA,EAAAyD,qBAC7B,CAOK,kBAAAW,CACJxM,4DAEA,MAAMmM,QAA6B,UAAbpsB,KAAK8nB,gBAAQ,IAAAO,OAAA,EAAAA,EAAEwD,oBAAoB5L,GAEzD,IAAKmM,EACH,OAAO,KAIT,MAAMM,EAAoC,GAC1C,IAAK,IAAIroB,EAAI,EAAGA,GAAI+nB,aAAA,EAAAA,EAASjvB,QAAQkH,IAAK,CACxC,MAAMmb,EAAS4M,EAAQ/nB,GACnBrE,KAAK8nB,UACP4E,EAAQxlB,KAAkB,QAAbylB,EAAA3sB,KAAK8nB,gBAAQ,IAAA6E,OAAA,EAAAA,EAAEN,gBAAgB7M,GAE/C,CAED,OAAOnlB,QAAQoP,IAAIijB,KACpB,CAED,OAAAE,SACiB,QAAfvE,EAAAroB,KAAK8nB,gBAAU,IAAAO,GAAAA,EAAAnG,OAChB,CAED,aAAA2K,SACE,OAAqB,UAAd7sB,KAAK6nB,iBAAS,IAAAQ,OAAA,EAAAA,EAAEvJ,UACxB,CAED,aAAAgO,CAActM,GACRxgB,KAAK6nB,YACP7nB,KAAK6nB,UAAU/I,WAAa0B,EAE/B,CAED,gBAAA0K,CAAiB1K,GACXxgB,KAAK6nB,WACP3Z,OAAOnN,OAAOf,KAAK6nB,UAAU/I,WAAY0B,EAE5C","x_google_ignoreList":[0,3,4,5,6,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]}
|