@asgard-js/core 0.3.26 → 0.3.27

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/types/http-error.ts","../src/constants/enum.ts","../../../node_modules/@microsoft/fetch-event-source/lib/esm/parse.js","../../../node_modules/@microsoft/fetch-event-source/lib/esm/fetch.js","../../../node_modules/tslib/tslib.es6.mjs","../../../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../../../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../../../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../../../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../../../node_modules/rxjs/dist/esm5/internal/Subscription.js","../../../node_modules/rxjs/dist/esm5/internal/config.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../../../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../../../node_modules/rxjs/dist/esm5/internal/util/noop.js","../../../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../../../node_modules/rxjs/dist/esm5/internal/Subscriber.js","../../../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../../../node_modules/rxjs/dist/esm5/internal/util/identity.js","../../../node_modules/rxjs/dist/esm5/internal/util/pipe.js","../../../node_modules/rxjs/dist/esm5/internal/Observable.js","../../../node_modules/rxjs/dist/esm5/internal/util/lift.js","../../../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../../../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../../../node_modules/rxjs/dist/esm5/internal/Subject.js","../../../node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../../../node_modules/rxjs/dist/esm5/internal/Scheduler.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../../../node_modules/rxjs/dist/esm5/internal/observable/empty.js","../../../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../../../node_modules/rxjs/dist/esm5/internal/util/args.js","../../../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../../../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../../../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../../../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../../../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../../../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../../../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../../../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../../../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../../../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../../../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../../../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../../../node_modules/rxjs/dist/esm5/internal/observable/from.js","../../../node_modules/rxjs/dist/esm5/internal/observable/of.js","../../../node_modules/rxjs/dist/esm5/internal/util/isDate.js","../../../node_modules/rxjs/dist/esm5/internal/operators/map.js","../../../node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../../../node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js","../../../node_modules/rxjs/dist/esm5/internal/util/createObject.js","../../../node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js","../../../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../../../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../../../node_modules/rxjs/dist/esm5/internal/observable/timer.js","../../../node_modules/rxjs/dist/esm5/internal/operators/concatMap.js","../../../node_modules/rxjs/dist/esm5/internal/operators/take.js","../../../node_modules/rxjs/dist/esm5/internal/operators/mapTo.js","../../../node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js","../../../node_modules/rxjs/dist/esm5/internal/operators/delay.js","../../../node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js","../../../node_modules/rxjs/dist/esm5/internal/operators/finalize.js","../../../node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js","../src/lib/create-sse-observable.ts","../src/lib/event-emitter.ts","../src/lib/client.ts","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/native.js","../node_modules/uuid/dist/v4.js","../src/lib/conversation.ts","../src/lib/task-reducer.ts","../src/lib/subagent-reducer.ts","../src/lib/derived-stores.ts","../src/lib/launched-sandboxes.ts","../src/lib/channel.ts","../src/lib/resolve-sandbox-uri.ts"],"sourcesContent":["export class HttpError extends Error {\n public readonly status: number;\n public readonly statusText: string;\n /**\n * The decoded error payload, when the response carried one.\n *\n * Consumers branch on this — `asgard-ai-data-insight-web` reads `reason_code` off it to raise its\n * credit-limit dialog on a `429` — so **always pass it when constructing from a real response**,\n * even though the parameter is optional.\n */\n public readonly body: unknown;\n\n // `body` is optional because every construction site derives it from a response whose text or JSON\n // may fail to parse, yielding `undefined` or `null`. An absent body is therefore a normal outcome\n // rather than a caller mistake, and a test raising a status-only error need not pass a filler value.\n constructor(status: number, statusText: string, body?: unknown) {\n super(`HTTP ${status}: ${statusText}`);\n this.name = 'HttpError';\n this.status = status;\n this.statusText = statusText;\n this.body = body;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n","export enum FetchSseAction {\n RESET_CHANNEL = 'RESET_CHANNEL',\n NONE = 'NONE',\n RESPONSE_TOOL_CALL_CONSENT = 'RESPONSE_TOOL_CALL_CONSENT',\n NUDGE = 'NUDGE',\n}\n\nexport enum EventType {\n INIT = 'asgard.run.init',\n PROCESS = 'asgard.process',\n PROCESS_START = 'asgard.process.start',\n PROCESS_COMPLETE = 'asgard.process.complete',\n MESSAGE = 'asgard.message',\n MESSAGE_START = 'asgard.message.start',\n MESSAGE_DELTA = 'asgard.message.delta',\n MESSAGE_COMPLETE = 'asgard.message.complete',\n // Persist-only user turn — never on the live plane; only replayed on GET rejoin (F-014).\n MESSAGE_USER = 'asgard.message.user',\n // Extended-thinking (reasoning) stream — same shape as a normal message, rendered as a\n // separate collapsible thinking block (F-001). Independent of and usually earlier than the answer.\n MESSAGE_THINKING_START = 'asgard.message.thinking.start',\n MESSAGE_THINKING_DELTA = 'asgard.message.thinking.delta',\n MESSAGE_THINKING_COMPLETE = 'asgard.message.thinking.complete',\n TOOL_CALL = 'asgard.tool_call',\n TOOL_CALL_START = 'asgard.tool_call.start',\n TOOL_CALL_COMPLETE = 'asgard.tool_call.complete',\n TOOL_CALL_CONSENT = 'asgard.tool_call.consent',\n // Subagent lifecycle — a subagent spawned by an `Agent` tool-call. Its status is driven only by\n // these events, never the `Agent` tool_call.complete (async → completes early). Accumulated into\n // the Subagent list (F-012), keyed by `parentToolUseId` = the `Agent` tool-call's `toolUseId`.\n SUBAGENT_START = 'asgard.subagent.start',\n SUBAGENT_COMPLETE = 'asgard.subagent.complete',\n // Channel title push — reserved for F-016 to consume; enum aligned with asgard-core here (F-014).\n CHANNEL_TITLE_UPDATE = 'asgard.channel.title.update',\n // Sandbox cold-start lifecycle (F-018) — `launch` = the backend is provisioning a compute sandbox,\n // `ready` = it is up. Drives the sandbox-phase store consumed by the Launch HUD; independent of the\n // run seam / RunningIndicator. Fact shape aligns with asgard-sdk-go `{ sandboxName, blueprintName }`.\n SANDBOX_LAUNCH = 'asgard.sandbox.launch',\n SANDBOX_READY = 'asgard.sandbox.ready',\n DONE = 'asgard.run.done',\n ERROR = 'asgard.run.error',\n}\n\nexport enum ToolCallConsentResult {\n ALLOW_ONCE = 'ALLOW_ONCE',\n ALLOW_ALWAYS = 'ALLOW_ALWAYS',\n DENY_ONCE = 'DENY_ONCE',\n}\n\nexport enum MessageTemplateType {\n TEXT = 'TEXT',\n HINT = 'HINT',\n BUTTON = 'BUTTON',\n IMAGE = 'IMAGE',\n VIDEO = 'VIDEO',\n AUDIO = 'AUDIO',\n LOCATION = 'LOCATION',\n CAROUSEL = 'CAROUSEL',\n CHART = 'CHART',\n TABLE = 'TABLE',\n ATTACHMENT = 'ATTACHMENT',\n}\n","export async function getBytes(stream, onChunk) {\r\n const reader = stream.getReader();\r\n let result;\r\n while (!(result = await reader.read()).done) {\r\n onChunk(result.value);\r\n }\r\n}\r\nexport function getLines(onLine) {\r\n let buffer;\r\n let position;\r\n let fieldLength;\r\n let discardTrailingNewline = false;\r\n return function onChunk(arr) {\r\n if (buffer === undefined) {\r\n buffer = arr;\r\n position = 0;\r\n fieldLength = -1;\r\n }\r\n else {\r\n buffer = concat(buffer, arr);\r\n }\r\n const bufLength = buffer.length;\r\n let lineStart = 0;\r\n while (position < bufLength) {\r\n if (discardTrailingNewline) {\r\n if (buffer[position] === 10) {\r\n lineStart = ++position;\r\n }\r\n discardTrailingNewline = false;\r\n }\r\n let lineEnd = -1;\r\n for (; position < bufLength && lineEnd === -1; ++position) {\r\n switch (buffer[position]) {\r\n case 58:\r\n if (fieldLength === -1) {\r\n fieldLength = position - lineStart;\r\n }\r\n break;\r\n case 13:\r\n discardTrailingNewline = true;\r\n case 10:\r\n lineEnd = position;\r\n break;\r\n }\r\n }\r\n if (lineEnd === -1) {\r\n break;\r\n }\r\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\r\n lineStart = position;\r\n fieldLength = -1;\r\n }\r\n if (lineStart === bufLength) {\r\n buffer = undefined;\r\n }\r\n else if (lineStart !== 0) {\r\n buffer = buffer.subarray(lineStart);\r\n position -= lineStart;\r\n }\r\n };\r\n}\r\nexport function getMessages(onId, onRetry, onMessage) {\r\n let message = newMessage();\r\n const decoder = new TextDecoder();\r\n return function onLine(line, fieldLength) {\r\n if (line.length === 0) {\r\n onMessage === null || onMessage === void 0 ? void 0 : onMessage(message);\r\n message = newMessage();\r\n }\r\n else if (fieldLength > 0) {\r\n const field = decoder.decode(line.subarray(0, fieldLength));\r\n const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1);\r\n const value = decoder.decode(line.subarray(valueOffset));\r\n switch (field) {\r\n case 'data':\r\n message.data = message.data\r\n ? message.data + '\\n' + value\r\n : value;\r\n break;\r\n case 'event':\r\n message.event = value;\r\n break;\r\n case 'id':\r\n onId(message.id = value);\r\n break;\r\n case 'retry':\r\n const retry = parseInt(value, 10);\r\n if (!isNaN(retry)) {\r\n onRetry(message.retry = retry);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n}\r\nfunction concat(a, b) {\r\n const res = new Uint8Array(a.length + b.length);\r\n res.set(a);\r\n res.set(b, a.length);\r\n return res;\r\n}\r\nfunction newMessage() {\r\n return {\r\n data: '',\r\n event: '',\r\n id: '',\r\n retry: undefined,\r\n };\r\n}\r\n//# sourceMappingURL=parse.js.map","var __rest = (this && this.__rest) || function (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\nimport { getBytes, getLines, getMessages } from './parse';\r\nexport const EventStreamContentType = 'text/event-stream';\r\nconst DefaultRetryInterval = 1000;\r\nconst LastEventId = 'last-event-id';\r\nexport function fetchEventSource(input, _a) {\r\n var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, [\"signal\", \"headers\", \"onopen\", \"onmessage\", \"onclose\", \"onerror\", \"openWhenHidden\", \"fetch\"]);\r\n return new Promise((resolve, reject) => {\r\n const headers = Object.assign({}, inputHeaders);\r\n if (!headers.accept) {\r\n headers.accept = EventStreamContentType;\r\n }\r\n let curRequestController;\r\n function onVisibilityChange() {\r\n curRequestController.abort();\r\n if (!document.hidden) {\r\n create();\r\n }\r\n }\r\n if (!openWhenHidden) {\r\n document.addEventListener('visibilitychange', onVisibilityChange);\r\n }\r\n let retryInterval = DefaultRetryInterval;\r\n let retryTimer = 0;\r\n function dispose() {\r\n document.removeEventListener('visibilitychange', onVisibilityChange);\r\n window.clearTimeout(retryTimer);\r\n curRequestController.abort();\r\n }\r\n inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener('abort', () => {\r\n dispose();\r\n resolve();\r\n });\r\n const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;\r\n const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;\r\n async function create() {\r\n var _a;\r\n curRequestController = new AbortController();\r\n try {\r\n const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));\r\n await onopen(response);\r\n await getBytes(response.body, getLines(getMessages(id => {\r\n if (id) {\r\n headers[LastEventId] = id;\r\n }\r\n else {\r\n delete headers[LastEventId];\r\n }\r\n }, retry => {\r\n retryInterval = retry;\r\n }, onmessage)));\r\n onclose === null || onclose === void 0 ? void 0 : onclose();\r\n dispose();\r\n resolve();\r\n }\r\n catch (err) {\r\n if (!curRequestController.signal.aborted) {\r\n try {\r\n const interval = (_a = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a !== void 0 ? _a : retryInterval;\r\n window.clearTimeout(retryTimer);\r\n retryTimer = window.setTimeout(create, interval);\r\n }\r\n catch (innerErr) {\r\n dispose();\r\n reject(innerErr);\r\n }\r\n }\r\n }\r\n }\r\n create();\r\n });\r\n}\r\nfunction defaultOnOpen(response) {\r\n const contentType = response.headers.get('content-type');\r\n if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {\r\n throw new Error(`Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`);\r\n }\r\n}\r\n//# sourceMappingURL=fetch.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\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]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\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; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n __extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: false,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, (this._value = value));\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n __extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) { delay = 0; }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n setInterval: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function (handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n __extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n var _a;\n if (delay === void 0) { delay = 0; }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n if (delay === void 0) { delay = 0; }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n if (delay === void 0) { delay = 0; }\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype.unsubscribe = function () {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) { now = Scheduler.now; }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) { delay = 0; }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider.now;\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n __extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) { now = Scheduler.now; }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()));\n this._active = false;\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n//# sourceMappingURL=of.js.map","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","var isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys;\nexport function argsArgArrayOrObject(args) {\n if (args.length === 1) {\n var first_1 = args[0];\n if (isArray(first_1)) {\n return { args: first_1, keys: null };\n }\n if (isPOJO(first_1)) {\n var keys = getKeys(first_1);\n return {\n args: keys.map(function (key) { return first_1[key]; }),\n keys: keys,\n };\n }\n }\n return { args: args, keys: null };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n//# sourceMappingURL=argsArgArrayOrObject.js.map","export function createObject(keys, values) {\n return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {});\n}\n//# sourceMappingURL=createObject.js.map","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;\n if (observables.length === 0) {\n return from([], scheduler);\n }\n var result = new Observable(combineLatestInit(observables, scheduler, keys\n ?\n function (values) { return createObject(keys, values); }\n :\n identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform) {\n if (valueTransform === void 0) { valueTransform = identity; }\n return function (subscriber) {\n maybeSchedule(scheduler, function () {\n var length = observables.length;\n var values = new Array(length);\n var active = length;\n var remainingFirstValues = length;\n var _loop_1 = function (i) {\n maybeSchedule(scheduler, function () {\n var source = from(observables[i], scheduler);\n var hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n values[i] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, function () {\n if (!--active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n };\n for (var i = 0; i < length; i++) {\n _loop_1(i);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n }\n else {\n execute();\n }\n}\n//# sourceMappingURL=combineLatest.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) { dueTime = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function (subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n//# sourceMappingURL=timer.js.map","import { mergeMap } from './mergeMap';\nimport { isFunction } from '../util/isFunction';\nexport function concatMap(project, resultSelector) {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n//# sourceMappingURL=concatMap.js.map","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n function () { return EMPTY; }\n : operate(function (source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n//# sourceMappingURL=take.js.map","import { map } from './map';\nexport function mapTo(value) {\n return map(function () { return value; });\n}\n//# sourceMappingURL=mapTo.js.map","import { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function (source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function (value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); });\n}\n//# sourceMappingURL=delayWhen.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\nexport function delay(due, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration = timer(due, scheduler);\n return delayWhen(function () { return duration; });\n}\n//# sourceMappingURL=delay.js.map","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector) {\n if (keySelector === void 0) { keySelector = identity; }\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate(function (source, subscriber) {\n var previousKey;\n var first = true;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { operate } from '../util/lift';\nexport function finalize(callback) {\n return operate(function (source, subscriber) {\n try {\n source.subscribe(subscriber);\n }\n finally {\n subscriber.add(callback);\n }\n });\n}\n//# sourceMappingURL=finalize.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n return operate(function (source, subscriber) {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=takeUntil.js.map","import { Observable } from 'rxjs';\nimport { EventSourceMessage, fetchEventSource } from '@microsoft/fetch-event-source';\nimport { FetchSsePayload, SseResponse } from '../types';\nimport { HttpError } from '../types/http-error';\nimport { EventType } from '../constants/enum';\n\ninterface CreateSseObservableOptions {\n endpoint: string;\n apiKey?: string;\n debugMode?: boolean;\n /** POST dispatches a run; GET is the transcript cold-start rejoin (F-014). Defaults to POST. */\n method?: 'GET' | 'POST';\n /** Only sent for POST; a GET rejoin carries its params in the URL. */\n payload?: FetchSsePayload;\n customHeaders?: Record<string, string>;\n}\n\nexport function createSseObservable(options: CreateSseObservableOptions): Observable<SseResponse<EventType>> {\n const { endpoint, apiKey, payload, debugMode, customHeaders } = options;\n const method = options.method ?? 'POST';\n\n return new Observable<SseResponse<EventType>>(subscriber => {\n const controller = new AbortController();\n let currentTraceId: string | undefined;\n // Whether a resumable cursor exists — set once any event carries an `id:`. `@microsoft/fetch-event-source`\n // tracks that `id:` and replays it as the `Last-Event-ID` header on its native reconnect (F-002).\n let hasCursor = false;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...customHeaders,\n };\n\n if (apiKey) {\n headers['X-API-KEY'] = apiKey;\n }\n\n // Preserve any query already on the endpoint (e.g. the GET rejoin's `custom_channel_id`) and add\n // `is_debug` on top, rather than overwriting the search string.\n const url = new URL(endpoint);\n\n if (debugMode) {\n url.searchParams.set('is_debug', 'true');\n }\n\n fetchEventSource(url.toString(), {\n method,\n headers,\n body: method === 'POST' && payload ? JSON.stringify(payload) : undefined,\n signal: controller.signal,\n /**\n * Allow SSE to work when the page is hidden.\n * https://github.com/Azure/fetch-event-source/issues/17#issuecomment-1525904929\n */\n openWhenHidden: true,\n onopen: async response => {\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n try {\n body = await response.text();\n } catch {\n body = null;\n }\n }\n\n subscriber.error(new HttpError(response.status, response.statusText, body));\n controller.abort();\n } else {\n currentTraceId = response.headers.get('X-Trace-Id') ?? undefined;\n }\n },\n onmessage: (esm: EventSourceMessage) => {\n // A non-empty `id:` is the resume cursor; from here a mid-stream drop can be resumed (F-002).\n if (esm.id) hasCursor = true;\n\n const data = JSON.parse(esm.data) as SseResponse<EventType>;\n\n if (currentTraceId) {\n data.traceId = currentTraceId;\n } else if (data.requestId) {\n data.traceId = data.requestId;\n if (!currentTraceId) {\n currentTraceId = data.requestId;\n }\n }\n\n subscriber.next(data);\n },\n onclose: () => {\n subscriber.complete();\n },\n onerror: err => {\n // A cursor exists → let @microsoft/fetch-event-source run its native Last-Event-ID reconnect:\n // returning without throwing tells the library to retry (obeying the server `retry:`), and it\n // replays the last `id:` as `Last-Event-ID`, so the backend resumes from the cursor with no\n // re-dispatch (F-002 / UC-003).\n if (hasCursor) return;\n\n // No cursor yet (failure before 200, or no `id:` received) → do NOT reconnect: an empty-cursor\n // POST would be re-dispatched as a new run. Surface the error to the caller instead (F-002 / UC-004).\n subscriber.error(err);\n controller.abort();\n throw err;\n },\n });\n\n return (): void => {\n controller.abort();\n };\n });\n}\n","import { Listeners } from '../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EventEmitter<Events extends Record<string, any>> {\n private listeners: Listeners<Events> = {};\n\n on<K extends keyof Events>(event: K, listener: Events[K]): void {\n this.listeners = Object.assign({}, this.listeners, {\n [event]: (this.listeners[event] ?? []).concat(listener),\n });\n }\n\n off<K extends keyof Events>(event: K, listener: Events[K]): void {\n if (!this.listeners[event]) return;\n\n this.listeners = Object.assign({}, this.listeners, {\n [event]: (this.listeners[event] ?? []).filter((l: Events[K]) => l !== listener),\n });\n }\n\n remove<K extends keyof Events>(event: K): void {\n delete this.listeners[event];\n }\n\n emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void {\n if (!this.listeners[event]) return;\n\n this.listeners[event].forEach((listener: Events[K]) => listener(...args));\n }\n}\n","import {\n ChannelMetadata,\n ClientConfig,\n IAsgardServiceClient,\n FetchSsePayload,\n FetchSseOptions,\n SseResponse,\n SseEvents,\n BlobUploadResponse,\n ChannelHomeDownloadResult,\n SandboxFsCopyMoveOptions,\n SandboxFsCopyResult,\n SandboxFsListResult,\n SandboxFsReadOptions,\n SandboxFsReadResult,\n SandboxFsStatResult,\n SandboxFsWatchEvent,\n SandboxFsWriteOptions,\n SandboxFsWriteResult,\n} from '../types';\nimport { HttpError } from '../types/http-error';\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\nimport { createSseObservable } from './create-sse-observable';\nimport { concatMap, delay, finalize, Observable, of, Subject, Subscription, takeUntil } from 'rxjs';\nimport { EventType } from '../constants/enum';\nimport { EventEmitter } from './event-emitter';\n\nexport default class AsgardServiceClient implements IAsgardServiceClient {\n private apiKey?: string;\n private endpoint!: string;\n private botProviderEndpoint?: string;\n readonly debugMode?: boolean;\n private destroy$ = new Subject<void>();\n private closed = false;\n private detached = false;\n private detachTimer?: ReturnType<typeof setTimeout>;\n private inFlight = 0;\n private sseEmitter = new EventEmitter<SseEvents>();\n private transformSsePayload?: (payload: FetchSsePayload) => FetchSsePayload;\n private customHeaders?: Record<string, string>;\n\n constructor(config: ClientConfig) {\n // Validate that either endpoint or botProviderEndpoint is provided\n if (!config.endpoint && !config.botProviderEndpoint) {\n throw new Error('Either endpoint or botProviderEndpoint must be provided');\n }\n\n this.apiKey = config.apiKey;\n this.debugMode = config.debugMode;\n this.transformSsePayload = config.transformSsePayload;\n this.botProviderEndpoint = config.botProviderEndpoint;\n this.customHeaders = {\n ...config.customHeaders,\n ...(config.userIdentityHint ? { 'X-ASGARD-USER-IDENTITY-HINT': config.userIdentityHint } : {}),\n };\n\n // Handle endpoint derivation and deprecation\n if (!config.endpoint && config.botProviderEndpoint) {\n // Derive endpoint from botProviderEndpoint (new recommended way)\n // Handle trailing slashes to prevent double slashes\n const baseEndpoint = config.botProviderEndpoint.replace(/\\/+$/, '');\n this.endpoint = `${baseEndpoint}/message/sse`;\n } else if (config.endpoint) {\n // Use provided endpoint but warn about deprecation\n this.endpoint = config.endpoint;\n if (this.debugMode) {\n // eslint-disable-next-line no-console\n console.warn(\n '[AsgardServiceClient] The \"endpoint\" option is deprecated and will be removed in the next major version. ' +\n `Please use \"botProviderEndpoint\" instead. The SSE endpoint will be automatically derived as \"\\${botProviderEndpoint}/message/sse\".`,\n );\n }\n }\n }\n\n on<K extends keyof SseEvents>(event: K, listener: SseEvents[K]): void {\n this.sseEmitter.remove(event);\n this.sseEmitter.on(event, listener);\n }\n\n handleEvent(response: SseResponse<EventType>): void {\n switch (response.eventType) {\n case EventType.INIT:\n this.sseEmitter.emit(EventType.INIT, response as SseResponse<EventType.INIT>);\n\n break;\n case EventType.PROCESS_START:\n case EventType.PROCESS_COMPLETE:\n this.sseEmitter.emit(EventType.PROCESS, response as Parameters<SseEvents[EventType.PROCESS]>[0]);\n\n break;\n case EventType.MESSAGE_START:\n case EventType.MESSAGE_DELTA:\n case EventType.MESSAGE_COMPLETE:\n this.sseEmitter.emit(EventType.MESSAGE, response as Parameters<SseEvents[EventType.MESSAGE]>[0]);\n\n break;\n case EventType.TOOL_CALL_START:\n case EventType.TOOL_CALL_COMPLETE:\n this.sseEmitter.emit(EventType.TOOL_CALL, response as Parameters<SseEvents[EventType.TOOL_CALL]>[0]);\n\n break;\n case EventType.TOOL_CALL_CONSENT:\n this.sseEmitter.emit(\n EventType.TOOL_CALL_CONSENT,\n response as Parameters<SseEvents[EventType.TOOL_CALL_CONSENT]>[0],\n );\n\n break;\n case EventType.DONE:\n this.sseEmitter.emit(EventType.DONE, response as SseResponse<EventType.DONE>);\n\n break;\n case EventType.ERROR:\n this.sseEmitter.emit(EventType.ERROR, response as SseResponse<EventType.ERROR>);\n\n break;\n default:\n break;\n }\n }\n\n fetchSse(payload: FetchSsePayload, options?: FetchSseOptions): Subscription {\n options?.onSseStart?.();\n this.inFlight += 1;\n\n return this.runSse(\n createSseObservable({\n apiKey: this.apiKey,\n endpoint: this.endpoint,\n debugMode: this.debugMode,\n payload: this.transformSsePayload?.(payload) ?? payload,\n customHeaders: this.customHeaders,\n }),\n options,\n );\n }\n\n /**\n * Cold-start transcript rejoin (F-014): a `GET /message/sse?custom_channel_id=…` with an empty\n * `Last-Event-ID` replays the collapsed history (`message.user` + self-sufficient `*.complete`),\n * assembled through the same reducer. Reuses the F-002 native Last-Event-ID transport (no re-POST).\n */\n rejoinSse(customChannelId: string, options?: FetchSseOptions): Subscription {\n options?.onSseStart?.();\n this.inFlight += 1;\n\n const url = new URL(this.endpoint);\n url.searchParams.set('custom_channel_id', customChannelId);\n\n return this.runSse(\n createSseObservable({\n apiKey: this.apiKey,\n endpoint: url.toString(),\n debugMode: this.debugMode,\n method: 'GET',\n customHeaders: this.customHeaders,\n }),\n options,\n );\n }\n\n private deriveChannelMetadataEndpoint(): string | null {\n const baseEndpoint = this.getBaseEndpoint();\n\n return baseEndpoint ? `${baseEndpoint}/channel/metadata` : null;\n }\n\n /**\n * Join-init existence + restore gate (F-015): `GET {base}/channel/metadata?custom_channel_id=…`.\n * `200` → parsed {@link ChannelMetadata}; `404` → `null` (channel does not exist); any other non-OK\n * status or network error throws. The caller must never treat an indeterminate result (throw) as\n * \"not exists\" — that would let a mount-time reset wipe an existing channel's history.\n */\n async channelMetadata(customChannelId: string): Promise<ChannelMetadata | null> {\n const endpoint = this.deriveChannelMetadataEndpoint();\n\n if (!endpoint) {\n throw new Error('Unable to derive channel metadata endpoint. Please provide botProviderEndpoint in config.');\n }\n\n const url = new URL(endpoint);\n url.searchParams.set('custom_channel_id', customChannelId);\n\n const headers: Record<string, string> = { ...this.customHeaders };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n const response = await fetch(url.toString(), { method: 'GET', headers });\n\n if (response.status === 404) {\n return null;\n }\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n // Accept both a `{ data: … }` envelope (the convention used by the bot-provider metadata fetch) and\n // a bare body, so the shape can be confirmed against the real backend without a code change here.\n const json: { data?: ChannelMetadata } & Partial<ChannelMetadata> = await response.json();\n const data = json.data ?? (json as ChannelMetadata);\n\n return {\n title: data.title ?? null,\n runState: data.runState ?? 'IDLE',\n lastActivityAt: data.lastActivityAt,\n // F-019 — whitelist-pass the live-sandbox list (map the five backend fields); `[]` for an old\n // backend / a channel with none live. metadata is the sole authority on \"who is live\".\n launchedSandboxes: (data.launchedSandboxes ?? []).map(sandbox => ({\n sandboxName: sandbox.sandboxName,\n sandboxBlueprintName: sandbox.sandboxBlueprintName,\n workingDirectory: sandbox.workingDirectory,\n editorServerEnabled: sandbox.editorServerEnabled,\n browserEnabled: sandbox.browserEnabled,\n })),\n };\n }\n\n private runSse(observable: Observable<SseResponse<EventType>>, options?: FetchSseOptions): Subscription {\n return observable\n .pipe(\n // No RxJS-level retry: re-subscribing would re-POST and the backend would re-dispatch a duplicate\n // run. Mid-stream resume is the library's job (native Last-Event-ID reconnect in\n // create-sse-observable); a no-cursor failure surfaces via `error` below.\n concatMap(event => of(event).pipe(delay(options?.delayTime ?? 50))),\n takeUntil(this.destroy$),\n // Settle the run accounting on every termination path — complete, error, AND a user-initiated\n // unsubscribe (stop-generation aborts the connection without a terminal event).\n finalize(() => this.onRunSettled()),\n )\n .subscribe({\n next: response => {\n // Once detached the connection is kept open only so the backend can\n // finish the run; the owning component is gone, so stop notifying it.\n if (this.detached) return;\n\n options?.onSseMessage?.(response);\n this.handleEvent(response);\n },\n error: error => {\n if (!this.detached) options?.onSseError?.(error);\n },\n complete: () => {\n if (!this.detached) options?.onSseCompleted?.();\n },\n });\n }\n\n /**\n * Detach the client from its owning component without aborting in-flight SSE\n * runs. Used when a chatbot unmounts (e.g. the user navigates to another\n * in-app page) but the current run should be allowed to finish on the\n * backend instead of being cut off. After detaching, the stream is still\n * drained to keep the connection open but consumer callbacks no longer fire.\n *\n * The connection cleans itself up in all cases:\n * - No run in flight → close immediately (nothing to keep alive).\n * - Runs in flight → close once they all settle (`onRunSettled`), so the\n * client never lingers past the work it is keeping alive.\n * - A run gets stuck (stream stays open, no `run.done`/error) → the safety\n * timeout force-closes it so the orphaned connection cannot leak.\n */\n detach(options: { timeoutMs: number }): void {\n if (this.detached || this.closed) return;\n\n this.detached = true;\n\n if (this.inFlight === 0) {\n this.close();\n\n return;\n }\n\n this.detachTimer = setTimeout(() => this.close(), options.timeoutMs);\n }\n\n private onRunSettled(): void {\n this.inFlight = Math.max(0, this.inFlight - 1);\n\n // Close only once every kept run has finished, so one run settling never\n // tears down another that is still streaming on the same client.\n if (this.detached && this.inFlight === 0) {\n this.close();\n }\n }\n\n close(): void {\n if (this.closed) return;\n\n this.closed = true;\n\n if (this.detachTimer) {\n clearTimeout(this.detachTimer);\n this.detachTimer = undefined;\n }\n\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * 上傳檔案到 Blob API\n * 根據 API 文件:/ns/{namespace}/bot-provider/{bot_provider_name}/blob\n */\n async uploadFile(file: File, customChannelId: string): Promise<BlobUploadResponse> {\n const blobEndpoint = this.deriveBlobEndpoint();\n\n if (!blobEndpoint) {\n throw new Error('Unable to derive blob endpoint. Please provide botProviderEndpoint in config.');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('customChannelId', customChannelId);\n\n const headers: HeadersInit = {\n ...this.customHeaders,\n };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n try {\n const response = await fetch(blobEndpoint, {\n method: 'POST',\n headers,\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed: ${response.status} ${response.statusText}`);\n }\n\n const result = await response.json();\n\n if (this.debugMode) {\n // eslint-disable-next-line no-console\n console.log('[AsgardServiceClient] File upload response:', result);\n }\n\n return result as BlobUploadResponse;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[AsgardServiceClient] File upload error:', error);\n throw error;\n }\n }\n\n /**\n * 下載 Channel Home(每個 channel 的檔案交換平面)裡的檔案(channel-home:// URI action)。\n * 呼叫 Edge Server GET <base>/channel-home/download?custom_channel_id=xxx&relative_path=xxx 取回 binary。\n */\n async downloadChannelHomeFile(relativePath: string, customChannelId: string): Promise<ChannelHomeDownloadResult> {\n const baseEndpoint = this.getBaseEndpoint();\n\n if (!baseEndpoint) {\n throw new Error('Unable to derive channel-home download endpoint. Please provide botProviderEndpoint in config.');\n }\n\n const query =\n `custom_channel_id=${encodeURIComponent(customChannelId)}` + `&relative_path=${encodeURIComponent(relativePath)}`;\n const url = `${baseEndpoint}/channel-home/download?${query}`;\n\n const headers: HeadersInit = {\n ...this.customHeaders,\n };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Channel Home download failed: ${response.status} ${response.statusText}`);\n }\n\n const blob = await response.blob();\n // 後端送的 relative_path 是未編碼的原字串,basename 即下載檔名(不做 decode)。\n const filename = relativePath.split('/').pop() || 'download';\n\n if (this.debugMode) {\n // eslint-disable-next-line no-console\n console.log('[AsgardServiceClient] Channel Home download response:', { filename, size: blob.size });\n }\n\n return { blob, filename };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[AsgardServiceClient] Channel Home download error:', error);\n throw error;\n }\n }\n\n /**\n * F-020 — 取得 sandbox 瀏覽器一次性接手 URL(`sandbox://<name>/open-browser` 卡的副作用)。\n * 呼叫 `POST {base}/sandbox/{sandboxName}/browser/open-url`(對標 asgard-core edgeserver\n * `GenerateSandboxBrowserOpenUrl`:path 參數 namespace / bot-provider 已在 base、sandbox_name 在路徑,\n * 不需 custom_channel_id)。回應 `{ data: { openURL } }`(envelope 容錯,比照 `channelMetadata`)。\n */\n async generateSandboxBrowserOpenUrl(sandboxName: string): Promise<string> {\n const baseEndpoint = this.getBaseEndpoint();\n\n if (!baseEndpoint) {\n throw new Error(\n 'Unable to derive sandbox browser open-url endpoint. Please provide botProviderEndpoint in config.',\n );\n }\n\n const url = `${baseEndpoint}/sandbox/${encodeURIComponent(sandboxName)}/browser/open-url`;\n\n const headers: Record<string, string> = { ...this.customHeaders };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n const response = await fetch(url, { method: 'POST', headers });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: { openURL?: string } } & { openURL?: string } = await response.json();\n const openURL = json.data?.openURL ?? json.openURL;\n\n if (!openURL) {\n throw new Error('Sandbox browser open-url response did not contain an openURL.');\n }\n\n return openURL;\n }\n\n /**\n * F-021 — 衍生 sandbox fs 端點 base:`{base}/sandbox/{sandboxName}/fs`(namespace / bot-provider 已在 base)。\n */\n private deriveSandboxFsEndpoint(sandboxName: string): string {\n const baseEndpoint = this.getBaseEndpoint();\n\n if (!baseEndpoint) {\n throw new Error('Unable to derive sandbox fs endpoint. Please provide botProviderEndpoint in config.');\n }\n\n return `${baseEndpoint}/sandbox/${encodeURIComponent(sandboxName)}/fs`;\n }\n\n private sandboxFsHeaders(): Record<string, string> {\n const headers: Record<string, string> = { ...this.customHeaders };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n return headers;\n }\n\n /**\n * F-021 — 列出 sandbox 目錄內容(`GET fs/list?path=`)。回應 `{ data: { entries, truncated } }`(envelope\n * 容錯,比照 `channelMetadata`)。\n */\n async sandboxFsList(sandboxName: string, path: string): Promise<SandboxFsListResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/list`);\n url.searchParams.set('path', path);\n\n const response = await fetch(url.toString(), { method: 'GET', headers: this.sandboxFsHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: SandboxFsListResult } & Partial<SandboxFsListResult> = await response.json();\n const data = json.data ?? (json as SandboxFsListResult);\n\n return { entries: data.entries ?? [], truncated: data.truncated ?? false };\n }\n\n /**\n * F-021 — 讀取 sandbox 檔案(`GET fs/file?path=[&offset_bytes&limit_bytes]`)。回應是 raw octet-stream,\n * 檔案總長度 / 是否截斷走 `X-Total-Bytes` / `X-Truncated` header。\n */\n async sandboxFsRead(sandboxName: string, path: string, options?: SandboxFsReadOptions): Promise<SandboxFsReadResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/file`);\n url.searchParams.set('path', path);\n if (options?.offsetBytes != null) url.searchParams.set('offset_bytes', String(options.offsetBytes));\n\n if (options?.limitBytes != null) url.searchParams.set('limit_bytes', String(options.limitBytes));\n\n const response = await fetch(url.toString(), { method: 'GET', headers: this.sandboxFsHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const content = await response.blob();\n const totalBytesHeader = response.headers.get('X-Total-Bytes');\n\n return {\n content,\n totalBytes: totalBytesHeader != null ? Number(totalBytesHeader) : content.size,\n truncated: response.headers.get('X-Truncated') === 'true',\n };\n }\n\n /**\n * F-021 — 寫入 sandbox 檔案(`PUT fs/file?path=[&mode&create_only]`,`multipart/form-data` 帶 `file`)。\n * 回應 `{ data: { bytesWritten } }`。\n */\n async sandboxFsWrite(\n sandboxName: string,\n path: string,\n content: Blob | string,\n options?: SandboxFsWriteOptions,\n ): Promise<SandboxFsWriteResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/file`);\n url.searchParams.set('path', path);\n if (options?.mode != null) url.searchParams.set('mode', String(options.mode));\n\n if (options?.createOnly) url.searchParams.set('create_only', 'true');\n\n const form = new FormData();\n form.append('file', content instanceof Blob ? content : new Blob([content]));\n\n const response = await fetch(url.toString(), { method: 'PUT', headers: this.sandboxFsHeaders(), body: form });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: SandboxFsWriteResult } & Partial<SandboxFsWriteResult> = await response.json();\n const data = json.data ?? (json as SandboxFsWriteResult);\n\n return { bytesWritten: data.bytesWritten ?? 0 };\n }\n\n /** F-021 Cycle 2 — `sandbox://` fs mutation shared request helper (throws `HttpError` on non-OK). */\n private async sandboxFsRequest(\n sandboxName: string,\n op: string,\n method: 'POST' | 'DELETE',\n query: Record<string, string>,\n ): Promise<unknown> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/${op}`);\n Object.entries(query).forEach(([k, v]) => url.searchParams.set(k, v));\n\n const response = await fetch(url.toString(), { method, headers: this.sandboxFsHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n return response.json().catch(() => null);\n }\n\n /** F-021 — stat a sandbox path (`GET fs/stat?path=`). */\n async sandboxFsStat(sandboxName: string, path: string): Promise<SandboxFsStatResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/stat`);\n url.searchParams.set('path', path);\n\n const response = await fetch(url.toString(), { method: 'GET', headers: this.sandboxFsHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: SandboxFsStatResult } & Partial<SandboxFsStatResult> = await response.json();\n const data = json.data ?? (json as SandboxFsStatResult);\n\n return {\n exists: data.exists ?? false,\n isDir: data.isDir ?? false,\n sizeBytes: data.sizeBytes ?? 0,\n mtimeUnix: data.mtimeUnix ?? 0,\n mode: data.mode ?? 0,\n etag: data.etag,\n };\n }\n\n /** F-021 — create a directory (`POST fs/mkdir?path=`). */\n async sandboxFsMkdir(sandboxName: string, path: string): Promise<void> {\n await this.sandboxFsRequest(sandboxName, 'mkdir', 'POST', { path });\n }\n\n /** F-021 — delete a file (`DELETE fs/item?path=`). */\n async sandboxFsRemove(sandboxName: string, path: string): Promise<void> {\n await this.sandboxFsRequest(sandboxName, 'item', 'DELETE', { path });\n }\n\n /** F-021 — recursively delete a directory (`DELETE fs/all?path=`). */\n async sandboxFsRemoveAll(sandboxName: string, path: string): Promise<void> {\n await this.sandboxFsRequest(sandboxName, 'all', 'DELETE', { path });\n }\n\n /** F-021 — copy a path (`POST fs/copy?src=&dst=[&overwrite]`) → bytes copied. */\n async sandboxFsCopy(\n sandboxName: string,\n src: string,\n dst: string,\n options?: SandboxFsCopyMoveOptions,\n ): Promise<SandboxFsCopyResult> {\n const query: Record<string, string> = { src, dst };\n if (options?.overwrite) query.overwrite = 'true';\n\n const json = (await this.sandboxFsRequest(sandboxName, 'copy', 'POST', query)) as\n | ({ data?: SandboxFsCopyResult } & Partial<SandboxFsCopyResult>)\n | null;\n const data = json?.data ?? (json as SandboxFsCopyResult | null);\n\n return { bytesCopied: data?.bytesCopied ?? 0 };\n }\n\n /** F-021 — move / rename a path (`POST fs/move?src=&dst=[&overwrite]`). */\n async sandboxFsMove(\n sandboxName: string,\n src: string,\n dst: string,\n options?: SandboxFsCopyMoveOptions,\n ): Promise<void> {\n const query: Record<string, string> = { src, dst };\n if (options?.overwrite) query.overwrite = 'true';\n\n await this.sandboxFsRequest(sandboxName, 'move', 'POST', query);\n }\n\n /**\n * F-021 — watch a sandbox path for changes (`GET fs/watch?path=`, SSE). Each `event: change` frame is one\n * `SandboxFsWatchEvent`. The backend probes the path first, so a missing path errors as HTTP rather than\n * as a dead stream. Unsubscribing aborts the request, which ends the sandbox-side watcher.\n */\n sandboxFsWatch(sandboxName: string, path: string): Observable<SandboxFsWatchEvent> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/watch`);\n url.searchParams.set('path', path);\n\n return new Observable<SandboxFsWatchEvent>(subscriber => {\n const controller = new AbortController();\n\n void fetchEventSource(url.toString(), {\n headers: this.sandboxFsHeaders(),\n signal: controller.signal,\n openWhenHidden: true,\n onopen: async response => {\n if (!response.ok) {\n const body = await response.text().catch(() => undefined);\n subscriber.error(new HttpError(response.status, response.statusText, body));\n controller.abort();\n }\n },\n onmessage: esm => {\n if (esm.event === 'change') subscriber.next(JSON.parse(esm.data) as SandboxFsWatchEvent);\n },\n onclose: () => subscriber.complete(),\n onerror: err => {\n // Unlike the run stream this one carries no `id:` cursor, so there is nothing to resume from —\n // surface the failure instead of letting the library silently reconnect forever.\n subscriber.error(err);\n controller.abort();\n throw err;\n },\n });\n\n return (): void => controller.abort();\n });\n }\n\n /**\n * 從 botProviderEndpoint 衍生 Blob API endpoint\n */\n private deriveBlobEndpoint(): string | null {\n const baseEndpoint = this.getBaseEndpoint();\n\n return baseEndpoint ? `${baseEndpoint}/blob` : null;\n }\n\n /**\n * 衍生 bot provider 的 base endpoint(不含子路徑)。\n * 優先用 botProviderEndpoint;若只有 deprecated 的 endpoint 則反推(移除 /message/sse)。已去除尾部斜線。\n */\n private getBaseEndpoint(): string | null {\n let baseEndpoint = this.botProviderEndpoint;\n\n // 如果沒有 botProviderEndpoint,嘗試從 endpoint 反推\n if (!baseEndpoint && this.endpoint) {\n baseEndpoint = this.endpoint.replace('/message/sse', '');\n }\n\n if (!baseEndpoint) {\n return null;\n }\n\n // 移除尾部斜線\n return baseEndpoint.replace(/\\/+$/, '');\n }\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import { v4 as uuidv4 } from 'uuid';\nimport { EventType } from '../constants/enum';\nimport {\n ConversationMessage,\n ConversationSubagentMessage,\n ConversationThinkingMessage,\n ConversationToolCallMessage,\n ConversationUserMessage,\n SseResponse,\n ToolCallConsentEventData,\n} from '../types';\n\ninterface IConversation {\n messages: Map<string, ConversationMessage> | null;\n pendingConsent?: ToolCallConsentEventData | null;\n}\n\nexport default class Conversation implements IConversation {\n public messages: Map<string, ConversationMessage> | null = null;\n public pendingConsent: ToolCallConsentEventData | null = null;\n\n constructor({ messages, pendingConsent = null }: IConversation) {\n this.messages = messages;\n this.pendingConsent = pendingConsent ?? null;\n }\n\n pushMessage(message: ConversationMessage): Conversation {\n const messages = new Map(this.messages);\n messages.set(message.messageId, message);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n clearPendingConsent(): Conversation {\n if (!this.pendingConsent) return this;\n\n return new Conversation({ messages: this.messages, pendingConsent: null });\n }\n\n /**\n * Converge every still-running tool-call to `cancelled` (F-020 AC10). Called when a user-initiated\n * stop-generation aborts the run: an in-flight tool-call (`isComplete === false`) would otherwise\n * linger as `running` forever, since its `tool_call.complete` frame never arrives. Already-settled\n * calls and non-tool-call messages are left untouched; content is preserved (never rolled back).\n * Returns the same instance when nothing is in flight.\n */\n cancelInFlightToolCalls(): Conversation {\n if (!this.messages) return this;\n\n let changed = false;\n const messages = new Map(this.messages);\n for (const [id, message] of messages) {\n if (message.type === 'tool-call' && !message.isComplete) {\n messages.set(id, { ...message, isComplete: true, isCancelled: true });\n changed = true;\n }\n }\n\n if (!changed) return this;\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessage(response: SseResponse<EventType>): Conversation {\n switch (response.eventType) {\n case EventType.MESSAGE_START:\n return this.onMessageStart(response as SseResponse<EventType.MESSAGE_START>);\n case EventType.MESSAGE_DELTA:\n return this.onMessageDelta(response as SseResponse<EventType.MESSAGE_DELTA>);\n case EventType.MESSAGE_COMPLETE:\n return this.onMessageComplete(response as SseResponse<EventType.MESSAGE_COMPLETE>);\n case EventType.MESSAGE_USER:\n return this.onMessageUser(response as SseResponse<EventType.MESSAGE_USER>);\n case EventType.MESSAGE_THINKING_START:\n return this.onThinkingStart(response as SseResponse<EventType.MESSAGE_THINKING_START>);\n case EventType.MESSAGE_THINKING_DELTA:\n return this.onThinkingDelta(response as SseResponse<EventType.MESSAGE_THINKING_DELTA>);\n case EventType.MESSAGE_THINKING_COMPLETE:\n return this.onThinkingComplete(response as SseResponse<EventType.MESSAGE_THINKING_COMPLETE>);\n case EventType.TOOL_CALL_START:\n return this.onToolCallStart(response as SseResponse<EventType.TOOL_CALL_START>);\n case EventType.TOOL_CALL_COMPLETE:\n return this.onToolCallComplete(response as SseResponse<EventType.TOOL_CALL_COMPLETE>);\n case EventType.TOOL_CALL_CONSENT:\n return this.onToolCallConsent(response as SseResponse<EventType.TOOL_CALL_CONSENT>);\n case EventType.SUBAGENT_START:\n return this.onSubagentStart(response as SseResponse<EventType.SUBAGENT_START>);\n case EventType.SUBAGENT_COMPLETE:\n return this.onSubagentComplete(response as SseResponse<EventType.SUBAGENT_COMPLETE>);\n case EventType.ERROR:\n return this.onMessageError(response as SseResponse<EventType.ERROR>);\n default:\n return this;\n }\n }\n\n /**\n * A message is terminal once `complete` has materialized it (a bot message with `isTyping === false`).\n * Terminal messages must never regress to typing/streaming — late `start`/`delta` frames from replay\n * or out-of-order delivery are ignored (F-011 / UC-018).\n */\n private isTerminalBot(message: ConversationMessage | undefined): boolean {\n return message?.type === 'bot' && !message.isTyping;\n }\n\n /**\n * A thinking block is terminal once `thinking.complete` has settled it (`isThinking === false`).\n * Like the bot terminal guard (F-011), it must never regress to the streaming state — late\n * `thinking.start` / `thinking.delta` frames from replay or out-of-order delivery are ignored.\n */\n private isTerminalThinking(message: ConversationMessage | undefined): boolean {\n return message?.type === 'thinking' && !message.isThinking;\n }\n\n onMessageStart(response: SseResponse<EventType.MESSAGE_START>): Conversation {\n const message = response.fact.messageStart.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n // Terminal guard: a completed message stays put; a late `start` must not blank it into a typing bubble.\n if (this.isTerminalBot(this.messages?.get(message.messageId))) return this;\n\n const messages = new Map(this.messages);\n\n messages.set(message.messageId, {\n type: 'bot',\n eventType: EventType.MESSAGE_START,\n isTyping: true,\n typingText: '',\n messageId: message.messageId,\n message,\n time: new Date(),\n traceId: response.traceId,\n raw: '',\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageDelta(response: SseResponse<EventType.MESSAGE_DELTA>): Conversation {\n const message = response.fact.messageDelta.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const currentMessage = this.messages?.get(message.messageId);\n\n // Terminal guard: a late `delta` after `complete` must not flip the message back into typing (UC-018).\n if (this.isTerminalBot(currentMessage)) return this;\n\n // Lazy-init: a `delta` with no existing entry (delta-before-start / mid-stream join) creates the\n // typing message rather than silently dropping its text (UC-017).\n const currentBot = currentMessage?.type === 'bot' ? currentMessage : undefined;\n const messages = new Map(this.messages);\n\n messages.set(message.messageId, {\n type: 'bot',\n eventType: EventType.MESSAGE_DELTA,\n isTyping: true,\n typingText: `${currentBot?.typingText ?? ''}${message.text}`,\n messageId: message.messageId,\n message,\n time: new Date(),\n traceId: response.traceId ?? currentBot?.traceId,\n raw: currentBot?.raw ?? '',\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageComplete(response: SseResponse<EventType.MESSAGE_COMPLETE>): Conversation {\n const message = response.fact.messageComplete.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const messages = new Map(this.messages);\n\n const currentMessage = messages.get(message.messageId);\n\n messages.set(message.messageId, {\n type: 'bot',\n eventType: EventType.MESSAGE_COMPLETE,\n isTyping: false,\n typingText: null,\n messageId: message.messageId,\n message,\n time: new Date(),\n traceId: response.traceId ?? (currentMessage?.type === 'bot' ? currentMessage.traceId : undefined),\n raw: JSON.stringify(response),\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onThinkingStart(response: SseResponse<EventType.MESSAGE_THINKING_START>): Conversation {\n const message = response.fact.messageThinkingStart.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n // Terminal guard: a completed thinking block stays put; a late `start` must not reopen it (F-011).\n if (this.isTerminalThinking(this.messages?.get(message.messageId))) return this;\n\n const messages = new Map(this.messages);\n const thinking: ConversationThinkingMessage = {\n type: 'thinking',\n messageId: message.messageId,\n text: message.text,\n isThinking: true,\n time: new Date(),\n traceId: response.traceId,\n };\n messages.set(message.messageId, thinking);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onThinkingDelta(response: SseResponse<EventType.MESSAGE_THINKING_DELTA>): Conversation {\n const message = response.fact.messageThinkingDelta.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const currentMessage = this.messages?.get(message.messageId);\n\n // Terminal guard: a late `delta` after `complete` must not flip the block back into streaming (F-011).\n if (this.isTerminalThinking(currentMessage)) return this;\n\n // Lazy-init: a `delta` with no existing block (delta-before-start / mid-stream join) creates the\n // streaming block rather than dropping its reasoning text (F-011 / UC-001).\n const currentThinking = currentMessage?.type === 'thinking' ? currentMessage : undefined;\n const messages = new Map(this.messages);\n const thinking: ConversationThinkingMessage = {\n type: 'thinking',\n messageId: message.messageId,\n text: `${currentThinking?.text ?? ''}${message.text}`,\n isThinking: true,\n time: currentThinking?.time ?? new Date(),\n traceId: response.traceId ?? currentThinking?.traceId,\n };\n messages.set(message.messageId, thinking);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onThinkingComplete(response: SseResponse<EventType.MESSAGE_THINKING_COMPLETE>): Conversation {\n const message = response.fact.messageThinkingComplete.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const currentMessage = this.messages?.get(message.messageId);\n const currentThinking = currentMessage?.type === 'thinking' ? currentMessage : undefined;\n\n const messages = new Map(this.messages);\n const thinking: ConversationThinkingMessage = {\n type: 'thinking',\n messageId: message.messageId,\n // Self-sufficient (F-011): the complete frame carries the full reasoning, so a complete-only\n // replay (no start/delta) still renders the whole text.\n text: message.text,\n isThinking: false,\n time: currentThinking?.time ?? new Date(),\n traceId: response.traceId ?? currentThinking?.traceId,\n };\n messages.set(message.messageId, thinking);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageUser(response: SseResponse<EventType.MESSAGE_USER>): Conversation {\n const data = response.fact.messageUser;\n\n // Dedup: the optimistic bubble sent live is keyed by the customMessageId the client generated, which\n // the backend echoes back here as `customMessageId`. If that (or the backend messageId) already maps\n // to a user message, this replayed turn is a duplicate — keep the existing one (F-014 invariant).\n const existing =\n this.messages?.get(data.messageId) ??\n (data.customMessageId ? this.messages?.get(data.customMessageId) : undefined);\n\n if (existing?.type === 'user') return this;\n\n const messages = new Map(this.messages);\n const userMessage: ConversationUserMessage = {\n type: 'user',\n messageId: data.messageId,\n text: data.text,\n blobIds: data.blobIds,\n customMessageId: data.customMessageId,\n identityHint: data.identityHint,\n time: new Date(),\n traceId: response.traceId,\n };\n messages.set(data.messageId, userMessage);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageError(response: SseResponse<EventType.ERROR>): Conversation {\n const messageId = uuidv4();\n const error = response.fact.runError.error;\n\n const messages = new Map(this.messages);\n\n messages.set(messageId, {\n type: 'error',\n eventType: EventType.ERROR,\n messageId,\n error,\n time: new Date(),\n traceId: response.traceId,\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onToolCallStart(response: SseResponse<EventType.TOOL_CALL_START>): Conversation {\n const toolCallStart = response.fact.toolCallStart;\n const messages = new Map(this.messages);\n const toolCallKey = `${toolCallStart.processId}-${toolCallStart.callSeq}`;\n\n const toolCallMessage: ConversationToolCallMessage = {\n type: 'tool-call',\n eventType: EventType.TOOL_CALL_START,\n messageId: toolCallKey,\n processId: toolCallStart.processId,\n callSeq: toolCallStart.callSeq,\n toolName: toolCallStart.toolCall.toolName,\n reason: toolCallStart.toolCall.reason,\n toolsetName: toolCallStart.toolCall.toolsetName,\n parameter: toolCallStart.toolCall.parameter,\n toolUseId: toolCallStart.toolUseId,\n parentToolUseId: toolCallStart.parentToolUseId,\n isComplete: false,\n time: new Date(),\n traceId: response.traceId,\n };\n\n messages.set(toolCallKey, toolCallMessage);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onToolCallComplete(response: SseResponse<EventType.TOOL_CALL_COMPLETE>): Conversation {\n const toolCallComplete = response.fact.toolCallComplete;\n const messages = new Map(this.messages);\n const toolCallKey = `${toolCallComplete.processId}-${toolCallComplete.callSeq}`;\n\n const existingMessage = messages.get(toolCallKey);\n\n if (existingMessage?.type === 'tool-call') {\n const updatedMessage: ConversationToolCallMessage = {\n ...existingMessage,\n eventType: EventType.TOOL_CALL_COMPLETE,\n result: toolCallComplete.toolCallResult,\n isError: toolCallComplete.isError,\n sidecar: toolCallComplete.toolUseResultSidecar,\n isComplete: true,\n traceId: response.traceId ?? existingMessage.traceId,\n };\n messages.set(toolCallKey, updatedMessage);\n }\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onToolCallConsent(response: SseResponse<EventType.TOOL_CALL_CONSENT>): Conversation {\n const consent = response.fact.toolCallConsent;\n\n return new Conversation({ messages: this.messages, pendingConsent: consent });\n }\n\n onSubagentStart(response: SseResponse<EventType.SUBAGENT_START>): Conversation {\n const start = response.fact.subagentStart;\n const messages = new Map(this.messages);\n const key = `subagent:${start.parentToolUseId}:start`;\n\n const message: ConversationSubagentMessage = {\n type: 'subagent',\n messageId: key,\n kind: 'start',\n parentToolUseId: start.parentToolUseId,\n agentId: start.agentId,\n subagentType: start.subagentType,\n description: start.description,\n time: new Date(),\n traceId: response.traceId,\n };\n\n messages.set(key, message);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onSubagentComplete(response: SseResponse<EventType.SUBAGENT_COMPLETE>): Conversation {\n const complete = response.fact.subagentComplete;\n const messages = new Map(this.messages);\n const key = `subagent:${complete.parentToolUseId}:complete`;\n\n const message: ConversationSubagentMessage = {\n type: 'subagent',\n messageId: key,\n kind: 'complete',\n parentToolUseId: complete.parentToolUseId,\n agentId: complete.agentId,\n subagentType: complete.subagentType,\n status: complete.status,\n summary: complete.summary,\n time: new Date(),\n traceId: response.traceId,\n };\n\n messages.set(key, message);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n}\n","// Task Check List accumulation (F-010) — the framework-agnostic data-layer SoT.\n//\n// `TaskCreate` / `TaskUpdate` are native built-in tool-calls (`toolsetName === \"\"`, `reason === \"\"`),\n// but their meaning is \"an incremental edit to one list\", not \"a tool call\". So the react layer:\n// 1. routes them out of the tool-call group via `isTaskTool`;\n// 2. folds them into one current list with `reduceTaskEvents`, presented by `<TaskList>`.\n//\n// Authority (replay-safe): id / status transitions come from the `tool_call.complete` result sidecar,\n// never parsed from the human-readable `toolCallResult` string. `parameter` supplies subject /\n// activeForm / description / the target status fallback.\nimport { Task, TaskStatus } from '../types/task';\n\nconst TASK_TOOLS = new Set(['TaskCreate', 'TaskUpdate']);\n\n/** Native built-in check. `true` → route out of the tool-call group, feed to `reduceTaskEvents`. */\nexport function isTaskTool(call: { toolsetName: string; toolName: string }): boolean {\n return call.toolsetName === '' && TASK_TOOLS.has(call.toolName);\n}\n\n/**\n * A completed task tool-call — the fields `reduceTaskEvents` needs, mirroring a completed\n * `ConversationToolCallMessage` (or the raw `tool_call.complete` fact).\n */\nexport interface TaskToolEvent {\n toolName: string;\n parameter: Record<string, unknown>;\n /** `toolUseResultSidecar`: `TaskCreate` → authoritative id; `TaskUpdate` → `statusChange.to`. */\n sidecar?: Record<string, unknown>;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Fold the `TaskCreate` / `TaskUpdate` complete-event stream into the current list (in create-arrival\n * order). Pure and replay-safe: any prefix of the same stream folds to the same snapshot.\n */\nexport function reduceTaskEvents(events: TaskToolEvent[]): Task[] {\n const order: string[] = [];\n const byId = new Map<string, Task>();\n\n for (const event of events) {\n const parameter = event.parameter ?? {};\n const sidecar = event.sidecar ?? {};\n\n if (event.toolName === 'TaskCreate') {\n const task = asRecord(sidecar.task);\n const id = asString(task?.id);\n\n if (!id) continue; // no authoritative id → skip (never guess from the result string)\n\n if (!byId.has(id)) order.push(id);\n\n byId.set(id, {\n id,\n subject: asString(parameter.subject) || asString(task?.subject) || '',\n activeForm: asString(parameter.activeForm),\n description: asString(parameter.description),\n status: byId.get(id)?.status ?? 'pending', // initial status = pending (keep existing on repeat)\n });\n } else if (event.toolName === 'TaskUpdate') {\n const statusChange = asRecord(sidecar.statusChange);\n const id = asString(parameter.taskId) || asString(sidecar.taskId);\n // sidecar authoritative, parameter.status fallback.\n const to = (asString(statusChange?.to) || asString(parameter.status)) as TaskStatus | undefined;\n\n if (!id || !to) continue;\n\n const prev = byId.get(id);\n\n if (prev) byId.set(id, { ...prev, status: to });\n // update arriving before its create (shouldn't happen in order) → ignore.\n }\n }\n\n return order.map(id => byId.get(id) as Task);\n}\n","// Subagent list accumulation (F-012) — the framework-agnostic data-layer SoT.\n//\n// An `Agent` tool-call spawns a subagent, but it is only the \"launch\" viewpoint and lacks the\n// subagent's detail. So the react layer:\n// 1. routes the `Agent` tool-call (isAgentTool) and every child tool-call (parentToolUseId !== \"\")\n// out of the main tool-call group;\n// 2. folds the `Agent` tool-call + `subagent.{start,complete}` + child tool-calls into one current\n// subagent list with `reduceSubagents`, presented by `<SubagentList>`.\n//\n// Two correctness rules (verified against asgard-sdk-go + the new-example11 dump):\n// - A subagent's status is driven by `subagent.start` → `subagent.complete`, NOT the `Agent`\n// tool_call.complete — async subagents complete the `Agent` tool early (result.status =\n// \"async_launched\") while the subagent is still running.\n// - Correlation key = `parentToolUseId` (= the `Agent` tool-call's `toolUseId`).\nimport { Subagent, SubagentStatus, SubagentToolCall } from '../types/subagent';\n\n/** The spawning `Agent` tool-call (native builtin). `true` → route out of the tool-call group. */\nexport function isAgentTool(call: { toolsetName: string; toolName: string }): boolean {\n return call.toolsetName === '' && call.toolName === 'Agent';\n}\n\n/** Whether a tool-call belongs to a subagent (child). The main group keeps only `parentToolUseId === \"\"`. */\nexport function isSubagentChildTool(parentToolUseId?: string): boolean {\n return !!parentToolUseId;\n}\n\n/** The subagent-related SSE events, adapted from their facts by the react layer, in arrival order. */\nexport type SubagentEvent =\n | { kind: 'agentStart'; toolUseId: string; description?: string }\n | { kind: 'subagentStart'; parentToolUseId: string; agentId?: string; subagentType?: string; description?: string }\n | {\n kind: 'toolStart';\n parentToolUseId: string;\n toolUseId: string;\n toolsetName: string;\n toolName: string;\n parameter?: Record<string, unknown>;\n reason?: string;\n }\n | { kind: 'toolComplete'; parentToolUseId: string; toolUseId: string; isError?: boolean }\n | { kind: 'subagentComplete'; parentToolUseId: string; status: SubagentStatus; summary?: string };\n\ninterface Meta {\n agentId?: string;\n subagentType?: string;\n description?: string;\n status: SubagentStatus;\n summary?: string;\n}\n\n/**\n * Fold the subagent event stream into the current list (in first-seen order). Pure and replay-safe:\n * status goes terminal only via `subagentComplete` (agentStart / subagentStart never change it), so a\n * replay never knocks a completed subagent back to running.\n */\nexport function reduceSubagents(events: SubagentEvent[]): Subagent[] {\n const order: string[] = [];\n const meta = new Map<string, Meta>();\n const tools = new Map<string, Map<string, SubagentToolCall>>(); // parentToolUseId -> (toolUseId -> tool)\n\n const ensure = (id: string): Meta => {\n if (!meta.has(id)) {\n order.push(id);\n meta.set(id, { status: 'running' });\n tools.set(id, new Map());\n }\n\n return meta.get(id) as Meta;\n };\n\n for (const event of events) {\n switch (event.kind) {\n case 'agentStart': {\n const m = ensure(event.toolUseId);\n\n if (event.description && !m.description) m.description = event.description;\n\n break;\n }\n\n case 'subagentStart': {\n const m = ensure(event.parentToolUseId);\n\n m.agentId = event.agentId ?? m.agentId;\n m.subagentType = event.subagentType ?? m.subagentType;\n m.description = event.description ?? m.description;\n\n break; // never touch status (only subagentComplete goes terminal)\n }\n\n case 'toolStart': {\n ensure(event.parentToolUseId);\n (tools.get(event.parentToolUseId) as Map<string, SubagentToolCall>).set(event.toolUseId, {\n toolsetName: event.toolsetName,\n toolName: event.toolName,\n parameter: event.parameter ?? {},\n reason: event.reason,\n status: 'running',\n });\n\n break;\n }\n\n case 'toolComplete': {\n const tool = tools.get(event.parentToolUseId)?.get(event.toolUseId);\n\n if (tool) tool.status = event.isError ? 'error' : 'completed';\n\n break;\n }\n\n case 'subagentComplete': {\n const m = ensure(event.parentToolUseId);\n\n m.status = event.status;\n m.summary = event.summary;\n\n break;\n }\n }\n }\n\n return order.map(id => ({\n parentToolUseId: id,\n ...(meta.get(id) as Meta),\n tools: Array.from((tools.get(id) as Map<string, SubagentToolCall>).values()),\n }));\n}\n","// Derived-state stores (F-013) — framework-agnostic Task / Subagent stores.\n//\n// The Task List (F-010) and Subagent List (F-012) are pure folds over the conversation. This module\n// exposes them as reactive slices so SDK consumers can render the lists *outside* the Chatbot in any\n// framework: a current immutable snapshot + change notification, never a fire-and-forget delta event.\n//\n// The key performance property: `conversation` changes on every message delta (high frequency), but a\n// consumer that \"just wants to draw the list\" must not re-render on unrelated deltas. Each slice is a\n// `BehaviorSubject` fed through `distinctUntilChanged` on structural equality, so it only emits when\n// that slice actually changes.\nimport { BehaviorSubject, distinctUntilChanged, map, Observable, Subscription } from 'rxjs';\nimport Conversation from './conversation';\nimport { isTaskTool, reduceTaskEvents } from './task-reducer';\nimport { isAgentTool, isSubagentChildTool, reduceSubagents, SubagentEvent } from './subagent-reducer';\nimport { ConversationMessage, ConversationToolCallMessage, Subagent, SubagentToolCall, Task } from '../types';\n\nfunction str(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Adapt the ordered conversation messages into the `SubagentEvent[]` that `reduceSubagents` folds. The\n * conversation Map preserves first-insertion order, so iterating its values yields arrival order. A\n * completed child tool emits toolStart + toolComplete back-to-back (its final status is what shows);\n * an in-progress child emits only toolStart (→ running).\n */\nexport function conversationToSubagentEvents(messages: ConversationMessage[]): SubagentEvent[] {\n const events: SubagentEvent[] = [];\n\n for (const message of messages) {\n if (message.type === 'tool-call' && isAgentTool(message)) {\n events.push({\n kind: 'agentStart',\n toolUseId: message.toolUseId ?? message.messageId,\n description: str(message.parameter.description),\n });\n continue;\n }\n\n if (message.type === 'tool-call' && isSubagentChildTool(message.parentToolUseId)) {\n const toolUseId = message.toolUseId ?? message.messageId;\n\n events.push({\n kind: 'toolStart',\n parentToolUseId: message.parentToolUseId as string,\n toolUseId,\n toolsetName: message.toolsetName,\n toolName: message.toolName,\n parameter: message.parameter,\n reason: message.reason,\n });\n\n if (message.isComplete) {\n events.push({\n kind: 'toolComplete',\n parentToolUseId: message.parentToolUseId as string,\n toolUseId,\n isError: message.isError,\n });\n }\n\n continue;\n }\n\n if (message.type === 'subagent' && message.kind === 'start') {\n events.push({\n kind: 'subagentStart',\n parentToolUseId: message.parentToolUseId,\n agentId: message.agentId,\n subagentType: message.subagentType,\n description: message.description,\n });\n continue;\n }\n\n if (message.type === 'subagent' && message.kind === 'complete' && message.status) {\n events.push({\n kind: 'subagentComplete',\n parentToolUseId: message.parentToolUseId,\n status: message.status,\n summary: message.summary,\n });\n }\n }\n\n return events;\n}\n\n/** Fold the conversation's completed Task tool-calls into the current Task list (F-010). */\nexport function deriveTasks(conversation: Conversation): Task[] {\n const messages = Array.from(conversation.messages?.values() ?? []).filter(\n (message): message is ConversationToolCallMessage =>\n message.type === 'tool-call' && message.isComplete && isTaskTool(message),\n );\n\n return reduceTaskEvents(messages);\n}\n\n/** Fold the conversation's Agent / subagent / child tool-call events into the current Subagent list (F-012). */\nexport function deriveSubagents(conversation: Conversation): Subagent[] {\n return reduceSubagents(conversationToSubagentEvents(Array.from(conversation.messages?.values() ?? [])));\n}\n\n/** Structural equality for two derived Task lists (so a slice only emits when the list truly changes). */\nexport function tasksEqual(a: Task[], b: Task[]): boolean {\n if (a === b) return true;\n\n if (a.length !== b.length) return false;\n\n return a.every((task, i) => {\n const other = b[i];\n\n return (\n task.id === other.id &&\n task.status === other.status &&\n task.subject === other.subject &&\n task.activeForm === other.activeForm &&\n task.description === other.description\n );\n });\n}\n\nfunction toolsEqual(a: SubagentToolCall[], b: SubagentToolCall[]): boolean {\n if (a.length !== b.length) return false;\n\n return a.every((tool, i) => {\n const other = b[i];\n\n return (\n tool.toolName === other.toolName &&\n tool.toolsetName === other.toolsetName &&\n tool.status === other.status &&\n tool.reason === other.reason\n );\n });\n}\n\n/** Structural equality for two derived Subagent lists (including each subagent's child tool list). */\nexport function subagentsEqual(a: Subagent[], b: Subagent[]): boolean {\n if (a === b) return true;\n\n if (a.length !== b.length) return false;\n\n return a.every((subagent, i) => {\n const other = b[i];\n\n return (\n subagent.parentToolUseId === other.parentToolUseId &&\n subagent.status === other.status &&\n subagent.subagentType === other.subagentType &&\n subagent.description === other.description &&\n subagent.summary === other.summary &&\n toolsEqual(subagent.tools, other.tools)\n );\n });\n}\n\nexport interface DerivedStores {\n /** Emits the current Task list; only when it changes (not on every conversation delta). */\n tasks$: Observable<Task[]>;\n /** Emits the current Subagent list; only when it changes. */\n subagents$: Observable<Subagent[]>;\n /** The current Task list snapshot (immutable). */\n getTasks: () => Task[];\n /** The current Subagent list snapshot (immutable). */\n getSubagents: () => Subagent[];\n /** Tear down the internal subscriptions. */\n teardown: () => void;\n}\n\n/**\n * Build the per-slice derived stores from a `conversation$` source. Each slice is a `BehaviorSubject`\n * (replays the current snapshot to late subscribers) fed through `distinctUntilChanged`, so it emits\n * only when that slice structurally changes — unrelated high-frequency deltas are suppressed.\n */\nexport function createDerivedStores(conversation$: Observable<Conversation>): DerivedStores {\n const tasks$ = new BehaviorSubject<Task[]>([]);\n const subagents$ = new BehaviorSubject<Subagent[]>([]);\n const subscription = new Subscription();\n\n subscription.add(conversation$.pipe(map(deriveTasks), distinctUntilChanged(tasksEqual)).subscribe(tasks$));\n subscription.add(\n conversation$.pipe(map(deriveSubagents), distinctUntilChanged(subagentsEqual)).subscribe(subagents$),\n );\n\n return {\n tasks$: tasks$.asObservable(),\n subagents$: subagents$.asObservable(),\n getTasks: () => tasks$.value,\n getSubagents: () => subagents$.value,\n teardown: () => subscription.unsubscribe(),\n };\n}\n","import { LaunchedSandbox } from '../types';\n\n/**\n * Normalize a raw `/channel/metadata` `launchedSandboxes[]` snapshot into a stable live list (F-019 /\n * UC-032): dedup by `sandboxName` (metadata should not repeat, but a defensive dedup keeps the UI stable)\n * and sort by display label (`sandboxBlueprintName || sandboxName`) so a different backend ordering never\n * makes a downstream dropdown jump. metadata is the sole authority on \"who is live\" — this folds in no\n * SSE-derived guesses. Never mutates the input.\n */\nexport function reconcileLaunched(metadata: readonly LaunchedSandbox[]): LaunchedSandbox[] {\n const byName = new Map<string, LaunchedSandbox>();\n for (const sandbox of metadata) byName.set(sandbox.sandboxName, sandbox); // last write wins: same name → latest snapshot\n\n return [...byName.values()].sort((a, b) =>\n (a.sandboxBlueprintName || a.sandboxName).localeCompare(b.sandboxBlueprintName || b.sandboxName),\n );\n}\n","import { BehaviorSubject, combineLatest, distinctUntilChanged, map, Observable, Subscription } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n ChannelConfig,\n ChannelStates,\n FetchSseOptions,\n FetchSsePayload,\n IAsgardServiceClient,\n LaunchedSandbox,\n ObserverOrNext,\n SandboxPhase,\n Subagent,\n SseResponse,\n Task,\n ToolCallConsentAnswer,\n} from '../types';\nimport { FetchSseAction, EventType } from '../constants/enum';\nimport Conversation from './conversation';\nimport { createDerivedStores, DerivedStores } from './derived-stores';\nimport { reconcileLaunched } from './launched-sandboxes';\n\nexport default class Channel {\n private client: IAsgardServiceClient;\n\n public customChannelId: string;\n public customMessageId?: string;\n\n private isConnecting$: BehaviorSubject<boolean>;\n private conversation$: BehaviorSubject<Conversation>;\n private channelTitleSubject: BehaviorSubject<string | null>;\n private sandboxPhaseSubject: BehaviorSubject<SandboxPhase>;\n private launchedSandboxesSubject: BehaviorSubject<LaunchedSandbox[]>;\n // Sandboxes hinted live by an `asgard.sandbox.launch` frame but not yet confirmed by metadata (F-019).\n // Never merged into the live list directly — cleared once metadata confirms (or held until it does).\n private pendingLaunches: string[] = [];\n private derivedStores: DerivedStores;\n private statesObserver?: ObserverOrNext<ChannelStates>;\n private statesSubscription?: Subscription;\n\n /** Reactive Task Check List store (F-013): emits only when the list changes; replays the snapshot. */\n public readonly tasks$: Observable<Task[]>;\n /** Reactive Subagent list store (F-013): emits only when the list changes; replays the snapshot. */\n public readonly subagents$: Observable<Subagent[]>;\n /** Reactive channel title store (F-016): seeded from metadata, updated by `title.update`; replay-safe. */\n public readonly channelTitle$: Observable<string | null>;\n /** Reactive sandbox cold-start phase store (F-018): per-slice, derived from the last sandbox event; replay-safe. */\n public readonly sandboxPhase$: Observable<SandboxPhase>;\n /** Reactive live-sandbox list store (F-019): authoritative from `/channel/metadata`, per-slice; replay-safe. */\n public readonly launchedSandboxes$: Observable<LaunchedSandbox[]>;\n private currentUserMessageId?: string;\n // The most-recently-sent user message id. Unlike currentUserMessageId (which\n // is cleared once a traceId is attached), this is kept across the SSE\n // lifecycle so RESPONSE_TOOL_CALL_CONSENT — fired after run.done — can echo\n // back the message id the bot is waiting on.\n private lastSentMessageId?: string;\n // The in-flight SSE run's subscription. Held so a user-initiated stop-generation can abort the\n // connection (unsubscribe → create-sse-observable teardown → AbortController.abort()). Cleared on\n // every terminal (complete / error) and on stop.\n private currentRun?: Subscription;\n\n private constructor(config: ChannelConfig) {\n if (!config.client) {\n throw new Error('client must be required');\n }\n\n if (!config.customChannelId) {\n throw new Error('customChannelId must be required');\n }\n\n this.client = config.client;\n this.customChannelId = config.customChannelId;\n this.customMessageId = config.customMessageId;\n\n this.isConnecting$ = new BehaviorSubject(false);\n this.conversation$ = new BehaviorSubject(config.conversation);\n this.channelTitleSubject = new BehaviorSubject<string | null>(config.channelTitle ?? null);\n this.sandboxPhaseSubject = new BehaviorSubject<SandboxPhase>('idle');\n this.launchedSandboxesSubject = new BehaviorSubject<LaunchedSandbox[]>(\n reconcileLaunched(config.launchedSandboxes ?? []),\n );\n this.derivedStores = createDerivedStores(this.conversation$);\n this.tasks$ = this.derivedStores.tasks$;\n this.subagents$ = this.derivedStores.subagents$;\n // Emit only when the title actually changes (ignore duplicate `title.update`s with the same value).\n this.channelTitle$ = this.channelTitleSubject.pipe(distinctUntilChanged());\n // Per-slice: emit only when the phase actually changes, so unrelated high-frequency message\n // deltas never re-notify the HUD (UC-031, same performance rule as the F-013 derived stores).\n this.sandboxPhase$ = this.sandboxPhaseSubject.pipe(distinctUntilChanged());\n // Per-slice: only `applyLaunchedSandboxes` / `dropSandbox` push here (never the conversation stream),\n // so high-frequency message deltas never re-emit the live-sandbox list (UC-032 ALT2).\n this.launchedSandboxes$ = this.launchedSandboxesSubject.pipe(distinctUntilChanged());\n this.statesObserver = config.statesObserver;\n }\n\n /** Current Task Check List snapshot (F-013) — for framework-agnostic `getSnapshot()` bridging. */\n public getTasks(): Task[] {\n return this.derivedStores.getTasks();\n }\n\n /** Current Subagent list snapshot (F-013) — for framework-agnostic `getSnapshot()` bridging. */\n public getSubagents(): Subagent[] {\n return this.derivedStores.getSubagents();\n }\n\n /** Current channel title snapshot (F-016) — for framework-agnostic `getSnapshot()` bridging. */\n public getChannelTitle(): string | null {\n return this.channelTitleSubject.value;\n }\n\n /** Current sandbox phase snapshot (F-018) — for framework-agnostic `getSnapshot()` bridging. */\n public getSandboxPhase(): SandboxPhase {\n return this.sandboxPhaseSubject.value;\n }\n\n /** Current live-sandbox snapshot (F-019) — for framework-agnostic `getSnapshot()` bridging. */\n public getLaunchedSandboxes(): LaunchedSandbox[] {\n return this.launchedSandboxesSubject.value;\n }\n\n /** Names hinted by `sandbox.launch` but not yet confirmed live by metadata (F-019) — \"starting\" placeholders. */\n public getPendingLaunches(): string[] {\n return this.pendingLaunches;\n }\n\n /**\n * Authoritatively replace the live-sandbox list from a fresh `/channel/metadata` snapshot (F-019). This\n * is the only sanctioned way to change \"who is live\": it reconciles the list and clears any pending\n * launch whose name now appears (promoted to live). metadata (heartbeat-backed) is the sole authority.\n */\n public applyLaunchedSandboxes(list: readonly LaunchedSandbox[]): void {\n const next = reconcileLaunched(list);\n this.pendingLaunches = this.pendingLaunches.filter(name => !next.some(sandbox => sandbox.sandboxName === name));\n this.launchedSandboxesSubject.next(next);\n }\n\n /**\n * Optimistically drop one sandbox (F-019) — e.g. its fs calls keep failing or it is known to be\n * recycled. The next `/channel/metadata` refetch reconciles the authoritative truth.\n */\n public dropSandbox(sandboxName: string): void {\n const current = this.launchedSandboxesSubject.value;\n const next = current.filter(sandbox => sandbox.sandboxName !== sandboxName);\n if (next.length !== current.length) this.launchedSandboxesSubject.next(next);\n }\n\n /**\n * Record an `asgard.sandbox.launch` hint (F-019): the event is not trusted to add a live sandbox (it may\n * not be Ready / heartbeat-visible yet), so the name is held as pending and a metadata refetch is\n * scheduled. `applyLaunchedSandboxes` promotes it to live once metadata confirms.\n */\n public noteSandboxLaunch(sandboxName: string): void {\n if (!this.pendingLaunches.includes(sandboxName)) {\n this.pendingLaunches = [...this.pendingLaunches, sandboxName];\n }\n\n void this.refetchMetadata();\n }\n\n /**\n * Re-fetch `/channel/metadata` and authoritatively apply its `launchedSandboxes` (F-019). Called on a\n * launch hint, and by the react adapter on `visibilitychange` / polling. A client without metadata\n * support is a no-op.\n */\n public async refetchMetadata(): Promise<void> {\n if (!this.client.channelMetadata) return;\n\n const metadata = await this.client.channelMetadata(this.customChannelId);\n if (metadata) this.applyLaunchedSandboxes(metadata.launchedSandboxes);\n }\n\n /** Seed / override the channel title (F-016) — used by the join-restore metadata seed (F-015). */\n public setChannelTitle(title: string | null): void {\n this.channelTitleSubject.next(title);\n }\n\n public static create(config: ChannelConfig): Channel {\n const channel = new Channel(config);\n channel.subscribe();\n\n return channel;\n }\n\n public static async reset(\n config: ChannelConfig,\n payload?: Pick<FetchSsePayload, 'text' | 'payload'>,\n options?: FetchSseOptions,\n onChannelCreated?: (channel: Channel) => void,\n ): Promise<Channel> {\n const channel = new Channel(config);\n\n try {\n channel.subscribe();\n\n // Expose the channel before the RESET_CHANNEL run finishes. The backend\n // can emit a tool_call.consent *during* this run (before run.done), so a\n // reply submitted while the modal is up must reach a non-null channel —\n // otherwise the consent answer is silently dropped.\n onChannelCreated?.(channel);\n\n await channel.resetChannel(payload, options);\n\n return channel;\n } catch (error) {\n channel.close();\n\n throw error;\n }\n }\n\n /**\n * Join an **existing** channel without resetting it (F-015). Seeds the title from `config.channelTitle`\n * (the `GET /channel/metadata` value) at construction, then replays the server transcript via GET\n * `rejoinSse` and holds `isConnecting` until the run reaches a terminal. Never sends `RESET_CHANNEL`,\n * so the channel's history / session / title are preserved — this is the fix for the mount-time\n * \"join an existing channel and wipe its history\" data-loss bug.\n */\n public static async restore(\n config: ChannelConfig,\n options?: FetchSseOptions,\n onChannelCreated?: (channel: Channel) => void,\n ): Promise<Channel> {\n const channel = new Channel(config);\n\n try {\n channel.subscribe();\n\n // Adopt the channel before the replay finishes — a RUNNING restore can stream a tool_call.consent\n // before its terminal, and a reply submitted then must reach a non-null channel (same rationale as\n // reset).\n onChannelCreated?.(channel);\n\n await channel.rejoinChannel(options);\n\n return channel;\n } catch (error) {\n channel.close();\n\n throw error;\n }\n }\n\n private subscribe(): void {\n this.statesSubscription = combineLatest([\n this.isConnecting$,\n this.conversation$,\n this.derivedStores.tasks$,\n this.derivedStores.subagents$,\n this.channelTitle$,\n this.sandboxPhase$,\n this.launchedSandboxes$,\n ])\n .pipe(\n map(([isConnecting, conversation, tasks, subagents, channelTitle, sandboxPhase, launchedSandboxes]) => ({\n isConnecting,\n conversation,\n tasks,\n subagents,\n channelTitle,\n sandboxPhase,\n launchedSandboxes,\n })),\n )\n .subscribe(this.statesObserver);\n }\n\n /**\n * Resolves payload by executing it if it's a function, otherwise returns as-is.\n */\n private resolvePayload(\n payload: Record<string, unknown> | (() => Record<string, unknown>) | undefined,\n ): Record<string, unknown> | undefined {\n if (typeof payload === 'function') {\n try {\n return payload();\n } catch (error) {\n throw new Error(\n `Failed to resolve payload function: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n return payload;\n }\n\n /**\n * Advance the sandbox phase store from an incoming event's type (F-018). Only sandbox / run-boundary\n * events move it; every other event is a no-op, so `distinctUntilChanged` suppresses re-emission on\n * high-frequency message deltas.\n */\n private updateSandboxPhase(eventType: EventType): void {\n switch (eventType) {\n case EventType.SANDBOX_LAUNCH:\n this.sandboxPhaseSubject.next('launching');\n\n break;\n case EventType.SANDBOX_READY:\n this.sandboxPhaseSubject.next('ready');\n\n break;\n case EventType.INIT:\n case EventType.ERROR:\n this.sandboxPhaseSubject.next('idle');\n\n break;\n default:\n break;\n }\n }\n\n /**\n * The SSE run handlers shared by every run kind (POST send/reset and GET rejoin): fold each frame\n * through the conversation reducer, keep the title store in sync, attach the traceId to the pending\n * user bubble, and settle the run promise (releasing `isConnecting`) on completion / error.\n */\n private buildRunHandlers(\n options: FetchSseOptions | undefined,\n resolve: () => void,\n reject: (err: unknown) => void,\n ): FetchSseOptions {\n return {\n onSseStart: options?.onSseStart,\n onSseMessage: (response: SseResponse<EventType>): void => {\n options?.onSseMessage?.(response);\n\n // F-016 — the channel title is run-level state, not a message; keep it out of the conversation\n // (it is ephemeral and must survive rejoin replays, which don't carry this event).\n if (response.eventType === EventType.CHANNEL_TITLE_UPDATE) {\n this.channelTitleSubject.next(\n (response as SseResponse<EventType.CHANNEL_TITLE_UPDATE>).fact.channelTitleUpdate.title,\n );\n }\n\n // F-018 — sandbox cold-start phase, derived from the last sandbox event. Run-level (not a\n // conversation message); folds identically on live and on rejoin replay (replay-safe). Reset to\n // idle on run init (fresh run re-arms) and error (collapse); `done` is left to the react latch so\n // the ready-beat / fade-out can finish (happy path: `done` arrives after `ready`).\n this.updateSandboxPhase(response.eventType);\n\n // F-019 — a `sandbox.launch` frame is only a hint: record the name as pending and schedule a\n // metadata refetch (the authority on \"who is live\"). Never merge it into the live list directly.\n if (response.eventType === EventType.SANDBOX_LAUNCH) {\n this.noteSandboxLaunch((response as SseResponse<EventType.SANDBOX_LAUNCH>).fact.sandboxLaunch.sandboxName);\n }\n\n if (this.currentUserMessageId && response.traceId) {\n const messages = new Map(this.conversation$.value.messages);\n const userMessage = messages.get(this.currentUserMessageId);\n\n if (userMessage && userMessage.type === 'user') {\n messages.set(this.currentUserMessageId, {\n ...userMessage,\n traceId: response.traceId,\n });\n this.conversation$.next(new Conversation({ messages }));\n }\n\n this.currentUserMessageId = undefined;\n }\n\n this.conversation$.next(this.conversation$.value.onMessage(response));\n },\n onSseError: (err: unknown): void => {\n options?.onSseError?.(err);\n this.isConnecting$.next(false);\n this.currentUserMessageId = undefined;\n this.currentRun = undefined;\n reject(err);\n },\n onSseCompleted: (): void => {\n options?.onSseCompleted?.();\n this.isConnecting$.next(false);\n this.currentUserMessageId = undefined;\n this.currentRun = undefined;\n resolve();\n },\n };\n }\n\n private fetchSse(payload: FetchSsePayload, options?: FetchSseOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n this.isConnecting$.next(true);\n this.currentRun = this.client.fetchSse(payload, this.buildRunHandlers(options, resolve, reject));\n });\n }\n\n /**\n * Join-restore transport (F-015): replay the server transcript via GET `rejoinSse` (F-014) and, if a\n * run is still live, keep listening until its terminal — holding `isConnecting` the whole time so the\n * input stays gated (F-003). A client without GET-replay support settles immediately (nothing to\n * restore), so the input is released rather than stuck.\n */\n private rejoinChannel(options?: FetchSseOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this.client.rejoinSse) {\n resolve();\n\n return;\n }\n\n this.isConnecting$.next(true);\n this.currentRun = this.client.rejoinSse(this.customChannelId, this.buildRunHandlers(options, resolve, reject));\n });\n }\n\n private resetChannel(payload?: Pick<FetchSsePayload, 'text' | 'payload'>, options?: FetchSseOptions): Promise<void> {\n return this.fetchSse(\n {\n action: FetchSseAction.RESET_CHANNEL,\n customChannelId: this.customChannelId,\n customMessageId: this.customMessageId,\n text: payload?.text || '',\n payload: this.resolvePayload(payload?.payload),\n },\n options,\n );\n }\n\n public sendMessage(\n payload: Pick<FetchSsePayload, 'customMessageId' | 'text' | 'payload' | 'blobIds'> & {\n filePreviewUrls?: string[];\n documentNames?: string[];\n },\n options?: FetchSseOptions,\n ): Promise<void> {\n const text = payload.text.trim();\n const messageId = payload.customMessageId ?? uuidv4();\n\n this.currentUserMessageId = messageId;\n this.lastSentMessageId = messageId;\n\n this.conversation$.next(\n this.conversation$.value.pushMessage({\n type: 'user',\n messageId,\n text,\n blobIds: payload.blobIds,\n filePreviewUrls: payload.filePreviewUrls,\n documentNames: payload.documentNames,\n time: new Date(),\n }),\n );\n\n return this.fetchSse(\n {\n action: FetchSseAction.NONE,\n customChannelId: this.customChannelId,\n customMessageId: messageId,\n payload: this.resolvePayload(payload?.payload),\n text,\n blobIds: payload?.blobIds,\n },\n options,\n );\n }\n\n public replyToolCallConsents(\n toolCallConsents: ToolCallConsentAnswer[],\n options?: FetchSseOptions,\n payload?: FetchSsePayload['payload'],\n ): Promise<void> {\n this.conversation$.next(this.conversation$.value.clearPendingConsent());\n\n return this.fetchSse(\n {\n action: FetchSseAction.RESPONSE_TOOL_CALL_CONSENT,\n customChannelId: this.customChannelId,\n customMessageId: this.lastSentMessageId ?? this.customMessageId,\n payload: this.resolvePayload(payload),\n text: '',\n toolCallConsents,\n },\n options,\n );\n }\n\n /**\n * Nudge an idle / recycled sandbox back to life (F-021 AC4). Sends an `action=NUDGE` turn with empty\n * text — the backend suppresses `message.*` and writes no transcript, so nothing renders in the\n * conversation; the FE simply waits for the resulting `sandbox.launch`/`ready` frames (and a metadata\n * refetch) to refill `launchedSandboxes$`. An invisible turn, unlike `sendMessage`.\n */\n public nudge(options?: FetchSseOptions): Promise<void> {\n return this.fetchSse(\n {\n action: FetchSseAction.NUDGE,\n customChannelId: this.customChannelId,\n customMessageId: this.lastSentMessageId ?? this.customMessageId,\n text: '',\n },\n options,\n );\n }\n\n /**\n * User-initiated stop-generation: abort the in-flight SSE run (if any) and release the input.\n * Unsubscribing tears down the SSE observable → AbortController.abort() cuts the HTTP stream. The\n * partial assistant message already received stays in the conversation (frozen, not deleted). A no-op\n * when nothing is running.\n */\n public stopGeneration(): void {\n if (!this.currentRun) return;\n\n this.currentRun.unsubscribe();\n this.currentRun = undefined;\n this.isConnecting$.next(false);\n this.currentUserMessageId = undefined;\n // F-020 AC10: converge any tool-call still in flight to `cancelled` — its `tool_call.complete` frame\n // will never arrive now that the run is aborted, so it must not linger as `running`.\n this.conversation$.next(this.conversation$.value.cancelInFlightToolCalls());\n }\n\n public close(): void {\n this.currentRun?.unsubscribe();\n this.currentRun = undefined;\n this.isConnecting$.complete();\n this.conversation$.complete();\n this.channelTitleSubject.complete();\n this.sandboxPhaseSubject.complete();\n this.launchedSandboxesSubject.complete();\n this.derivedStores.teardown();\n this.statesSubscription?.unsubscribe();\n }\n}\n","// F-020 — the typed intent a `sandbox://` custom URI resolves to. The host runs the side effect from this\n// (open-browser → one-time browser URL; open-file → File Explorer preview); it is never a browsable URL.\nexport type SandboxUriIntent =\n | { kind: 'open-browser'; sandboxName: string }\n | { kind: 'open-file'; sandboxName: string; absolutePath: string };\n\n/**\n * Parse `sandbox://<name>/<action>?<query>` into a typed {@link SandboxUriIntent} (F-020 / UC-036).\n * Returns `null` for an unknown action, a missing `absolute_path`, or a non-`sandbox://` / malformed URI —\n * the host must then treat it as a plain card and never `window.open()` the raw scheme.\n *\n * A hand-written regex (not `new URL()`) is used deliberately: absolute paths carry many `/`, and a\n * non-special scheme's host casing is unreliable under the WHATWG URL parser; the query is still handed to\n * `URLSearchParams` (which decodes).\n */\nexport function resolveSandboxUri(uri: string): SandboxUriIntent | null {\n const match = /^sandbox:\\/\\/([^/]+)\\/([^?#]+)(?:\\?([^#]*))?/.exec(uri.trim());\n if (!match) return null;\n\n const sandboxName = decodeURIComponent(match[1]);\n const action = match[2];\n const params = new URLSearchParams(match[3] ?? '');\n\n if (action === 'open-browser') return { kind: 'open-browser', sandboxName };\n\n if (action === 'open-file') {\n const absolutePath = params.get('absolute_path'); // URLSearchParams already decodes\n if (!absolutePath) return null;\n\n return { kind: 'open-file', sandboxName, absolutePath };\n }\n\n return null; // unknown action: do not guess, hand back to the host\n}\n"],"names":["HttpError","status","statusText","body","isHttpError","error","FetchSseAction","EventType","ToolCallConsentResult","MessageTemplateType","getBytes","stream","onChunk","reader","result","getLines","onLine","buffer","position","fieldLength","discardTrailingNewline","arr","concat","bufLength","lineStart","lineEnd","getMessages","onId","onRetry","onMessage","message","newMessage","decoder","line","field","valueOffset","value","retry","a","b","res","__rest","s","e","t","p","i","EventStreamContentType","DefaultRetryInterval","LastEventId","fetchEventSource","input","_a","inputSignal","inputHeaders","inputOnOpen","onmessage","onclose","onerror","openWhenHidden","inputFetch","rest","resolve","reject","headers","curRequestController","onVisibilityChange","create","retryInterval","retryTimer","dispose","fetch","onopen","defaultOnOpen","response","id","err","interval","innerErr","contentType","extendStatics","d","__extends","__","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","step","rejected","__generator","_","f","y","g","verb","n","v","op","__values","o","m","__read","r","ar","__spreadArray","to","from","pack","l","__await","__asyncGenerator","q","awaitReturn","resume","settle","fulfill","__asyncValues","isFunction","createErrorClass","createImpl","_super","instance","ctorFunc","UnsubscriptionError","errors","arrRemove","item","index","Subscription","initialTeardown","e_1","e_2","_b","_parentage","_parentage_1","_parentage_1_1","parent_1","e_1_1","initialFinalizer","_finalizers","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","teardown","parent","empty","EMPTY_SUBSCRIPTION","isSubscription","config","timeoutProvider","handler","timeout","args","_i","handle","reportUnhandledError","noop","errorContext","cb","Subscriber","destination","_this","EMPTY_OBSERVER","next","complete","SafeSubscriber","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","defaultErrorHandler","observable","identity","x","pipeFromArray","fns","prev","fn","Observable","subscribe","operator","subscriber","isSubscriber","source","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","isObserver","hasLift","operate","init","liftedSource","createOperatorSubscriber","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","subject","AnonymousSubject","_c","observer","observers","hasError","isStopped","thrownError","BehaviorSubject","_value","subscription","dateTimestampProvider","Action","scheduler","work","state","delay","intervalProvider","AsyncAction","_id","_scheduler","_delay","errored","errorValue","actions","Scheduler","schedulerActionCtor","now","AsyncScheduler","SchedulerAction","action","asyncScheduler","async","EMPTY","isScheduler","last","popResultSelector","popScheduler","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","obj","createInvalidObservableTypeError","getSymbolIterator","iterator","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","done","isReadableStreamLike","innerFrom","fromInteropObservable","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","obs","array","promise","iterable","iterable_1","iterable_1_1","asyncIterable","process","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleObservable","schedulePromise","scheduleArray","scheduleIterable","scheduleAsyncIterable","scheduleReadableStreamLike","scheduled","of","isValidDate","map","project","isArray","callOrApply","mapOneOrManyArgs","getPrototypeOf","objectProto","getKeys","argsArgArrayOrObject","first_1","isPOJO","keys","key","createObject","values","combineLatest","resultSelector","observables","combineLatestInit","valueTransform","maybeSchedule","length","active","remainingFirstValues","_loop_1","hasFirstValue","execute","mergeInternals","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","mergeMap","ii","timer","dueTime","intervalOrScheduler","intervalDuration","due","concatMap","take","count","seen","mapTo","delayWhen","delayDurationSelector","subscriptionDelay","duration","distinctUntilChanged","comparator","keySelector","defaultCompare","previousKey","first","currentKey","finalize","callback","takeUntil","notifier","createSseObservable","options","endpoint","apiKey","payload","debugMode","customHeaders","method","controller","currentTraceId","hasCursor","url","esm","data","EventEmitter","event","listener","AsgardServiceClient","baseEndpoint","customChannelId","json","sandbox","file","blobEndpoint","formData","relativePath","query","blob","filename","sandboxName","openURL","path","content","totalBytesHeader","form","k","src","dst","byteToHex","unsafeStringify","offset","getRandomValues","rnds8","rng","native","_v4","buf","rnds","v4","Conversation","messages","pendingConsent","changed","currentMessage","currentBot","thinking","currentThinking","userMessage","messageId","uuidv4","toolCallStart","toolCallKey","toolCallMessage","toolCallComplete","existingMessage","updatedMessage","consent","start","TASK_TOOLS","isTaskTool","call","asRecord","asString","reduceTaskEvents","events","order","byId","parameter","sidecar","task","statusChange","isAgentTool","isSubagentChildTool","parentToolUseId","reduceSubagents","meta","tools","ensure","tool","str","conversationToSubagentEvents","toolUseId","deriveTasks","conversation","deriveSubagents","tasksEqual","other","toolsEqual","subagentsEqual","subagent","createDerivedStores","conversation$","tasks$","subagents$","reconcileLaunched","metadata","byName","Channel","list","name","current","title","channel","onChannelCreated","isConnecting","tasks","subagents","channelTitle","sandboxPhase","launchedSandboxes","eventType","text","toolCallConsents","resolveSandboxUri","uri","match","params","absolutePath"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,76,77,78,79]}
1
+ {"version":3,"file":"index.js","sources":["../src/types/http-error.ts","../src/types/channel-busy-error.ts","../src/constants/enum.ts","../../../node_modules/@microsoft/fetch-event-source/lib/esm/parse.js","../../../node_modules/@microsoft/fetch-event-source/lib/esm/fetch.js","../../../node_modules/tslib/tslib.es6.mjs","../../../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../../../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../../../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../../../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../../../node_modules/rxjs/dist/esm5/internal/Subscription.js","../../../node_modules/rxjs/dist/esm5/internal/config.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../../../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../../../node_modules/rxjs/dist/esm5/internal/util/noop.js","../../../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../../../node_modules/rxjs/dist/esm5/internal/Subscriber.js","../../../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../../../node_modules/rxjs/dist/esm5/internal/util/identity.js","../../../node_modules/rxjs/dist/esm5/internal/util/pipe.js","../../../node_modules/rxjs/dist/esm5/internal/Observable.js","../../../node_modules/rxjs/dist/esm5/internal/util/lift.js","../../../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../../../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../../../node_modules/rxjs/dist/esm5/internal/Subject.js","../../../node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../../../node_modules/rxjs/dist/esm5/internal/Scheduler.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../../../node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../../../node_modules/rxjs/dist/esm5/internal/observable/empty.js","../../../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../../../node_modules/rxjs/dist/esm5/internal/util/args.js","../../../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../../../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../../../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../../../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../../../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../../../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../../../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../../../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../../../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../../../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../../../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../../../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../../../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../../../node_modules/rxjs/dist/esm5/internal/observable/from.js","../../../node_modules/rxjs/dist/esm5/internal/observable/of.js","../../../node_modules/rxjs/dist/esm5/internal/util/isDate.js","../../../node_modules/rxjs/dist/esm5/internal/operators/map.js","../../../node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../../../node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js","../../../node_modules/rxjs/dist/esm5/internal/util/createObject.js","../../../node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js","../../../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../../../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../../../node_modules/rxjs/dist/esm5/internal/observable/timer.js","../../../node_modules/rxjs/dist/esm5/internal/operators/concatMap.js","../../../node_modules/rxjs/dist/esm5/internal/operators/take.js","../../../node_modules/rxjs/dist/esm5/internal/operators/mapTo.js","../../../node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js","../../../node_modules/rxjs/dist/esm5/internal/operators/delay.js","../../../node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js","../../../node_modules/rxjs/dist/esm5/internal/operators/finalize.js","../../../node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js","../src/lib/create-sse-observable.ts","../src/lib/event-emitter.ts","../src/lib/client.ts","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/native.js","../node_modules/uuid/dist/v4.js","../src/lib/conversation.ts","../src/lib/task-reducer.ts","../src/lib/subagent-reducer.ts","../src/lib/derived-stores.ts","../src/lib/launched-sandboxes.ts","../src/lib/channel.ts","../src/lib/resolve-sandbox-uri.ts"],"sourcesContent":["export class HttpError extends Error {\n public readonly status: number;\n public readonly statusText: string;\n /**\n * The decoded error payload, when the response carried one.\n *\n * Consumers branch on this — `asgard-ai-data-insight-web` reads `reason_code` off it to raise its\n * credit-limit dialog on a `429` — so **always pass it when constructing from a real response**,\n * even though the parameter is optional.\n */\n public readonly body: unknown;\n\n // `body` is optional because every construction site derives it from a response whose text or JSON\n // may fail to parse, yielding `undefined` or `null`. An absent body is therefore a normal outcome\n // rather than a caller mistake, and a test raising a status-only error need not pass a filler value.\n constructor(status: number, statusText: string, body?: unknown) {\n super(`HTTP ${status}: ${statusText}`);\n this.name = 'HttpError';\n this.status = status;\n this.statusText = statusText;\n this.body = body;\n }\n}\n\nexport function isHttpError(error: unknown): error is HttpError {\n return error instanceof HttpError;\n}\n","import { RunKind } from './channel';\n\n/**\n * Thrown by `Channel.sendMessage()` when a run is already in flight on that channel (F-023 AC6 /\n * UC-045). Because runs execute in the background on the server, dispatching a second one would leave\n * two concurrent runs writing to the same transcript. The SDK's own composer already gates every send\n * entrance, so this only surfaces for programmatic sends — a rejection rather than a silent drop, so\n * the caller can tell the message never left.\n */\nexport class ChannelBusyError extends Error {\n /** Which run is holding the channel. */\n public readonly runKind: RunKind;\n\n constructor(runKind: RunKind) {\n super(`Cannot send a message while a \"${runKind}\" run is in flight on this channel.`);\n this.name = 'ChannelBusyError';\n this.runKind = runKind;\n }\n}\n\nexport function isChannelBusyError(error: unknown): error is ChannelBusyError {\n return error instanceof ChannelBusyError;\n}\n","export enum FetchSseAction {\n RESET_CHANNEL = 'RESET_CHANNEL',\n NONE = 'NONE',\n RESPONSE_TOOL_CALL_CONSENT = 'RESPONSE_TOOL_CALL_CONSENT',\n NUDGE = 'NUDGE',\n}\n\nexport enum EventType {\n INIT = 'asgard.run.init',\n PROCESS = 'asgard.process',\n PROCESS_START = 'asgard.process.start',\n PROCESS_COMPLETE = 'asgard.process.complete',\n MESSAGE = 'asgard.message',\n MESSAGE_START = 'asgard.message.start',\n MESSAGE_DELTA = 'asgard.message.delta',\n MESSAGE_COMPLETE = 'asgard.message.complete',\n // Persist-only user turn — never on the live plane; only replayed on GET rejoin (F-014).\n MESSAGE_USER = 'asgard.message.user',\n // Extended-thinking (reasoning) stream — same shape as a normal message, rendered as a\n // separate collapsible thinking block (F-001). Independent of and usually earlier than the answer.\n MESSAGE_THINKING_START = 'asgard.message.thinking.start',\n MESSAGE_THINKING_DELTA = 'asgard.message.thinking.delta',\n MESSAGE_THINKING_COMPLETE = 'asgard.message.thinking.complete',\n TOOL_CALL = 'asgard.tool_call',\n TOOL_CALL_START = 'asgard.tool_call.start',\n TOOL_CALL_COMPLETE = 'asgard.tool_call.complete',\n TOOL_CALL_CONSENT = 'asgard.tool_call.consent',\n // Subagent lifecycle — a subagent spawned by an `Agent` tool-call. Its status is driven only by\n // these events, never the `Agent` tool_call.complete (async → completes early). Accumulated into\n // the Subagent list (F-012), keyed by `parentToolUseId` = the `Agent` tool-call's `toolUseId`.\n SUBAGENT_START = 'asgard.subagent.start',\n SUBAGENT_COMPLETE = 'asgard.subagent.complete',\n // Channel title push — reserved for F-016 to consume; enum aligned with asgard-core here (F-014).\n CHANNEL_TITLE_UPDATE = 'asgard.channel.title.update',\n // Sandbox cold-start lifecycle (F-018) — `launch` = the backend is provisioning a compute sandbox,\n // `ready` = it is up. Drives the sandbox-phase store consumed by the Launch HUD; independent of the\n // run seam / RunningIndicator. Fact shape aligns with asgard-sdk-go `{ sandboxName, blueprintName }`.\n SANDBOX_LAUNCH = 'asgard.sandbox.launch',\n SANDBOX_READY = 'asgard.sandbox.ready',\n DONE = 'asgard.run.done',\n ERROR = 'asgard.run.error',\n}\n\nexport enum ToolCallConsentResult {\n ALLOW_ONCE = 'ALLOW_ONCE',\n ALLOW_ALWAYS = 'ALLOW_ALWAYS',\n DENY_ONCE = 'DENY_ONCE',\n}\n\nexport enum MessageTemplateType {\n TEXT = 'TEXT',\n HINT = 'HINT',\n BUTTON = 'BUTTON',\n IMAGE = 'IMAGE',\n VIDEO = 'VIDEO',\n AUDIO = 'AUDIO',\n LOCATION = 'LOCATION',\n CAROUSEL = 'CAROUSEL',\n CHART = 'CHART',\n TABLE = 'TABLE',\n ATTACHMENT = 'ATTACHMENT',\n}\n","export async function getBytes(stream, onChunk) {\r\n const reader = stream.getReader();\r\n let result;\r\n while (!(result = await reader.read()).done) {\r\n onChunk(result.value);\r\n }\r\n}\r\nexport function getLines(onLine) {\r\n let buffer;\r\n let position;\r\n let fieldLength;\r\n let discardTrailingNewline = false;\r\n return function onChunk(arr) {\r\n if (buffer === undefined) {\r\n buffer = arr;\r\n position = 0;\r\n fieldLength = -1;\r\n }\r\n else {\r\n buffer = concat(buffer, arr);\r\n }\r\n const bufLength = buffer.length;\r\n let lineStart = 0;\r\n while (position < bufLength) {\r\n if (discardTrailingNewline) {\r\n if (buffer[position] === 10) {\r\n lineStart = ++position;\r\n }\r\n discardTrailingNewline = false;\r\n }\r\n let lineEnd = -1;\r\n for (; position < bufLength && lineEnd === -1; ++position) {\r\n switch (buffer[position]) {\r\n case 58:\r\n if (fieldLength === -1) {\r\n fieldLength = position - lineStart;\r\n }\r\n break;\r\n case 13:\r\n discardTrailingNewline = true;\r\n case 10:\r\n lineEnd = position;\r\n break;\r\n }\r\n }\r\n if (lineEnd === -1) {\r\n break;\r\n }\r\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\r\n lineStart = position;\r\n fieldLength = -1;\r\n }\r\n if (lineStart === bufLength) {\r\n buffer = undefined;\r\n }\r\n else if (lineStart !== 0) {\r\n buffer = buffer.subarray(lineStart);\r\n position -= lineStart;\r\n }\r\n };\r\n}\r\nexport function getMessages(onId, onRetry, onMessage) {\r\n let message = newMessage();\r\n const decoder = new TextDecoder();\r\n return function onLine(line, fieldLength) {\r\n if (line.length === 0) {\r\n onMessage === null || onMessage === void 0 ? void 0 : onMessage(message);\r\n message = newMessage();\r\n }\r\n else if (fieldLength > 0) {\r\n const field = decoder.decode(line.subarray(0, fieldLength));\r\n const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1);\r\n const value = decoder.decode(line.subarray(valueOffset));\r\n switch (field) {\r\n case 'data':\r\n message.data = message.data\r\n ? message.data + '\\n' + value\r\n : value;\r\n break;\r\n case 'event':\r\n message.event = value;\r\n break;\r\n case 'id':\r\n onId(message.id = value);\r\n break;\r\n case 'retry':\r\n const retry = parseInt(value, 10);\r\n if (!isNaN(retry)) {\r\n onRetry(message.retry = retry);\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n}\r\nfunction concat(a, b) {\r\n const res = new Uint8Array(a.length + b.length);\r\n res.set(a);\r\n res.set(b, a.length);\r\n return res;\r\n}\r\nfunction newMessage() {\r\n return {\r\n data: '',\r\n event: '',\r\n id: '',\r\n retry: undefined,\r\n };\r\n}\r\n//# sourceMappingURL=parse.js.map","var __rest = (this && this.__rest) || function (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\nimport { getBytes, getLines, getMessages } from './parse';\r\nexport const EventStreamContentType = 'text/event-stream';\r\nconst DefaultRetryInterval = 1000;\r\nconst LastEventId = 'last-event-id';\r\nexport function fetchEventSource(input, _a) {\r\n var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, [\"signal\", \"headers\", \"onopen\", \"onmessage\", \"onclose\", \"onerror\", \"openWhenHidden\", \"fetch\"]);\r\n return new Promise((resolve, reject) => {\r\n const headers = Object.assign({}, inputHeaders);\r\n if (!headers.accept) {\r\n headers.accept = EventStreamContentType;\r\n }\r\n let curRequestController;\r\n function onVisibilityChange() {\r\n curRequestController.abort();\r\n if (!document.hidden) {\r\n create();\r\n }\r\n }\r\n if (!openWhenHidden) {\r\n document.addEventListener('visibilitychange', onVisibilityChange);\r\n }\r\n let retryInterval = DefaultRetryInterval;\r\n let retryTimer = 0;\r\n function dispose() {\r\n document.removeEventListener('visibilitychange', onVisibilityChange);\r\n window.clearTimeout(retryTimer);\r\n curRequestController.abort();\r\n }\r\n inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener('abort', () => {\r\n dispose();\r\n resolve();\r\n });\r\n const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;\r\n const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;\r\n async function create() {\r\n var _a;\r\n curRequestController = new AbortController();\r\n try {\r\n const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));\r\n await onopen(response);\r\n await getBytes(response.body, getLines(getMessages(id => {\r\n if (id) {\r\n headers[LastEventId] = id;\r\n }\r\n else {\r\n delete headers[LastEventId];\r\n }\r\n }, retry => {\r\n retryInterval = retry;\r\n }, onmessage)));\r\n onclose === null || onclose === void 0 ? void 0 : onclose();\r\n dispose();\r\n resolve();\r\n }\r\n catch (err) {\r\n if (!curRequestController.signal.aborted) {\r\n try {\r\n const interval = (_a = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a !== void 0 ? _a : retryInterval;\r\n window.clearTimeout(retryTimer);\r\n retryTimer = window.setTimeout(create, interval);\r\n }\r\n catch (innerErr) {\r\n dispose();\r\n reject(innerErr);\r\n }\r\n }\r\n }\r\n }\r\n create();\r\n });\r\n}\r\nfunction defaultOnOpen(response) {\r\n const contentType = response.headers.get('content-type');\r\n if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {\r\n throw new Error(`Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`);\r\n }\r\n}\r\n//# sourceMappingURL=fetch.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\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]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\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; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n __extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: false,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, (this._value = value));\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n __extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) { delay = 0; }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n setInterval: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function (handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n __extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n var _a;\n if (delay === void 0) { delay = 0; }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n if (delay === void 0) { delay = 0; }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n if (delay === void 0) { delay = 0; }\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype.unsubscribe = function () {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) { now = Scheduler.now; }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) { delay = 0; }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider.now;\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n __extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) { now = Scheduler.now; }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()));\n this._active = false;\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n//# sourceMappingURL=of.js.map","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","var isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys;\nexport function argsArgArrayOrObject(args) {\n if (args.length === 1) {\n var first_1 = args[0];\n if (isArray(first_1)) {\n return { args: first_1, keys: null };\n }\n if (isPOJO(first_1)) {\n var keys = getKeys(first_1);\n return {\n args: keys.map(function (key) { return first_1[key]; }),\n keys: keys,\n };\n }\n }\n return { args: args, keys: null };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n//# sourceMappingURL=argsArgArrayOrObject.js.map","export function createObject(keys, values) {\n return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {});\n}\n//# sourceMappingURL=createObject.js.map","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;\n if (observables.length === 0) {\n return from([], scheduler);\n }\n var result = new Observable(combineLatestInit(observables, scheduler, keys\n ?\n function (values) { return createObject(keys, values); }\n :\n identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform) {\n if (valueTransform === void 0) { valueTransform = identity; }\n return function (subscriber) {\n maybeSchedule(scheduler, function () {\n var length = observables.length;\n var values = new Array(length);\n var active = length;\n var remainingFirstValues = length;\n var _loop_1 = function (i) {\n maybeSchedule(scheduler, function () {\n var source = from(observables[i], scheduler);\n var hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n values[i] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, function () {\n if (!--active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n };\n for (var i = 0; i < length; i++) {\n _loop_1(i);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n }\n else {\n execute();\n }\n}\n//# sourceMappingURL=combineLatest.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) { dueTime = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function (subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n//# sourceMappingURL=timer.js.map","import { mergeMap } from './mergeMap';\nimport { isFunction } from '../util/isFunction';\nexport function concatMap(project, resultSelector) {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n//# sourceMappingURL=concatMap.js.map","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n function () { return EMPTY; }\n : operate(function (source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n//# sourceMappingURL=take.js.map","import { map } from './map';\nexport function mapTo(value) {\n return map(function () { return value; });\n}\n//# sourceMappingURL=mapTo.js.map","import { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function (source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function (value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); });\n}\n//# sourceMappingURL=delayWhen.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\nexport function delay(due, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration = timer(due, scheduler);\n return delayWhen(function () { return duration; });\n}\n//# sourceMappingURL=delay.js.map","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector) {\n if (keySelector === void 0) { keySelector = identity; }\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate(function (source, subscriber) {\n var previousKey;\n var first = true;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { operate } from '../util/lift';\nexport function finalize(callback) {\n return operate(function (source, subscriber) {\n try {\n source.subscribe(subscriber);\n }\n finally {\n subscriber.add(callback);\n }\n });\n}\n//# sourceMappingURL=finalize.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n return operate(function (source, subscriber) {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=takeUntil.js.map","import { Observable } from 'rxjs';\nimport { EventSourceMessage, fetchEventSource } from '@microsoft/fetch-event-source';\nimport { FetchSsePayload, SseResponse } from '../types';\nimport { HttpError } from '../types/http-error';\nimport { EventType } from '../constants/enum';\n\ninterface CreateSseObservableOptions {\n endpoint: string;\n apiKey?: string;\n debugMode?: boolean;\n /** POST dispatches a run; GET is the transcript cold-start rejoin (F-014). Defaults to POST. */\n method?: 'GET' | 'POST';\n /** Only sent for POST; a GET rejoin carries its params in the URL. */\n payload?: FetchSsePayload;\n customHeaders?: Record<string, string>;\n}\n\nexport function createSseObservable(options: CreateSseObservableOptions): Observable<SseResponse<EventType>> {\n const { endpoint, apiKey, payload, debugMode, customHeaders } = options;\n const method = options.method ?? 'POST';\n\n return new Observable<SseResponse<EventType>>(subscriber => {\n const controller = new AbortController();\n let currentTraceId: string | undefined;\n // Whether a resumable cursor exists — set once any event carries an `id:`. `@microsoft/fetch-event-source`\n // tracks that `id:` and replays it as the `Last-Event-ID` header on its native reconnect (F-002).\n let hasCursor = false;\n // Set by this observable's teardown: the consumer deliberately let go (unsubscribe on unmount,\n // channel switch, or the legacy stop fallback). Distinguishes \"we cut it\" from \"it broke\" (F-023\n // AC10) — an intentional abort must never be reported as an error nor trigger the reconnect below.\n let disposed = false;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...customHeaders,\n };\n\n if (apiKey) {\n headers['X-API-KEY'] = apiKey;\n }\n\n // Preserve any query already on the endpoint (e.g. the GET rejoin's `custom_channel_id`) and add\n // `is_debug` on top, rather than overwriting the search string.\n const url = new URL(endpoint);\n\n if (debugMode) {\n url.searchParams.set('is_debug', 'true');\n }\n\n fetchEventSource(url.toString(), {\n method,\n headers,\n body: method === 'POST' && payload ? JSON.stringify(payload) : undefined,\n signal: controller.signal,\n /**\n * Allow SSE to work when the page is hidden.\n * https://github.com/Azure/fetch-event-source/issues/17#issuecomment-1525904929\n */\n openWhenHidden: true,\n onopen: async response => {\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n try {\n body = await response.text();\n } catch {\n body = null;\n }\n }\n\n subscriber.error(new HttpError(response.status, response.statusText, body));\n controller.abort();\n } else {\n currentTraceId = response.headers.get('X-Trace-Id') ?? undefined;\n }\n },\n onmessage: (esm: EventSourceMessage) => {\n // A non-empty `id:` is the resume cursor; from here a mid-stream drop can be resumed (F-002).\n if (esm.id) hasCursor = true;\n\n const data = JSON.parse(esm.data) as SseResponse<EventType>;\n\n if (currentTraceId) {\n data.traceId = currentTraceId;\n } else if (data.requestId) {\n data.traceId = data.requestId;\n if (!currentTraceId) {\n currentTraceId = data.requestId;\n }\n }\n\n subscriber.next(data);\n },\n onclose: () => {\n subscriber.complete();\n },\n onerror: err => {\n // The consumer aborted on purpose (F-023 AC10). The in-flight fetch rejects with an\n // AbortError, which is not a failure of the stream — swallow it: no `subscriber.error`, and no\n // reconnect (returning here would schedule a retry, resurrecting a connection we just dropped).\n // Throwing is what tells @microsoft/fetch-event-source to stop for good.\n if (disposed) throw err;\n\n // A cursor exists → let @microsoft/fetch-event-source run its native Last-Event-ID reconnect:\n // returning without throwing tells the library to retry (obeying the server `retry:`), and it\n // replays the last `id:` as `Last-Event-ID`, so the backend resumes from the cursor with no\n // re-dispatch (F-002 / UC-003).\n if (hasCursor) return;\n\n // No cursor yet (failure before 200, or no `id:` received) → do NOT reconnect: an empty-cursor\n // POST would be re-dispatched as a new run. Surface the error to the caller instead (F-002 / UC-004).\n subscriber.error(err);\n controller.abort();\n throw err;\n },\n });\n\n return (): void => {\n disposed = true;\n controller.abort();\n };\n });\n}\n","import { Listeners } from '../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EventEmitter<Events extends Record<string, any>> {\n private listeners: Listeners<Events> = {};\n\n on<K extends keyof Events>(event: K, listener: Events[K]): void {\n this.listeners = Object.assign({}, this.listeners, {\n [event]: (this.listeners[event] ?? []).concat(listener),\n });\n }\n\n off<K extends keyof Events>(event: K, listener: Events[K]): void {\n if (!this.listeners[event]) return;\n\n this.listeners = Object.assign({}, this.listeners, {\n [event]: (this.listeners[event] ?? []).filter((l: Events[K]) => l !== listener),\n });\n }\n\n remove<K extends keyof Events>(event: K): void {\n delete this.listeners[event];\n }\n\n emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void {\n if (!this.listeners[event]) return;\n\n this.listeners[event].forEach((listener: Events[K]) => listener(...args));\n }\n}\n","import {\n ChannelMetadata,\n ClientConfig,\n IAsgardServiceClient,\n FetchSsePayload,\n FetchSseOptions,\n SseResponse,\n SseEvents,\n BlobUploadResponse,\n ChannelHomeDownloadResult,\n SandboxFsCopyMoveOptions,\n SandboxFsCopyResult,\n SandboxFsListResult,\n SandboxFsReadOptions,\n SandboxFsReadResult,\n SandboxFsStatResult,\n SandboxFsWatchEvent,\n SandboxFsWriteOptions,\n SandboxFsWriteResult,\n StopGenerationOptions,\n} from '../types';\nimport { HttpError } from '../types/http-error';\nimport { fetchEventSource } from '@microsoft/fetch-event-source';\nimport { createSseObservable } from './create-sse-observable';\nimport { concatMap, delay, finalize, Observable, of, Subject, Subscription, takeUntil } from 'rxjs';\nimport { EventType } from '../constants/enum';\nimport { EventEmitter } from './event-emitter';\n\nexport default class AsgardServiceClient implements IAsgardServiceClient {\n private apiKey?: string;\n private endpoint!: string;\n private botProviderEndpoint?: string;\n readonly debugMode?: boolean;\n private destroy$ = new Subject<void>();\n private closed = false;\n private detached = false;\n private detachTimer?: ReturnType<typeof setTimeout>;\n private inFlight = 0;\n private sseEmitter = new EventEmitter<SseEvents>();\n private transformSsePayload?: (payload: FetchSsePayload) => FetchSsePayload;\n private customHeaders?: Record<string, string>;\n\n constructor(config: ClientConfig) {\n // Validate that either endpoint or botProviderEndpoint is provided\n if (!config.endpoint && !config.botProviderEndpoint) {\n throw new Error('Either endpoint or botProviderEndpoint must be provided');\n }\n\n this.apiKey = config.apiKey;\n this.debugMode = config.debugMode;\n this.transformSsePayload = config.transformSsePayload;\n this.botProviderEndpoint = config.botProviderEndpoint;\n this.customHeaders = {\n ...config.customHeaders,\n ...(config.userIdentityHint ? { 'X-ASGARD-USER-IDENTITY-HINT': config.userIdentityHint } : {}),\n };\n\n // Handle endpoint derivation and deprecation\n if (!config.endpoint && config.botProviderEndpoint) {\n // Derive endpoint from botProviderEndpoint (new recommended way)\n // Handle trailing slashes to prevent double slashes\n const baseEndpoint = config.botProviderEndpoint.replace(/\\/+$/, '');\n this.endpoint = `${baseEndpoint}/message/sse`;\n } else if (config.endpoint) {\n // Use provided endpoint but warn about deprecation\n this.endpoint = config.endpoint;\n if (this.debugMode) {\n // eslint-disable-next-line no-console\n console.warn(\n '[AsgardServiceClient] The \"endpoint\" option is deprecated and will be removed in the next major version. ' +\n `Please use \"botProviderEndpoint\" instead. The SSE endpoint will be automatically derived as \"\\${botProviderEndpoint}/message/sse\".`,\n );\n }\n }\n }\n\n on<K extends keyof SseEvents>(event: K, listener: SseEvents[K]): void {\n this.sseEmitter.remove(event);\n this.sseEmitter.on(event, listener);\n }\n\n handleEvent(response: SseResponse<EventType>): void {\n switch (response.eventType) {\n case EventType.INIT:\n this.sseEmitter.emit(EventType.INIT, response as SseResponse<EventType.INIT>);\n\n break;\n case EventType.PROCESS_START:\n case EventType.PROCESS_COMPLETE:\n this.sseEmitter.emit(EventType.PROCESS, response as Parameters<SseEvents[EventType.PROCESS]>[0]);\n\n break;\n case EventType.MESSAGE_START:\n case EventType.MESSAGE_DELTA:\n case EventType.MESSAGE_COMPLETE:\n this.sseEmitter.emit(EventType.MESSAGE, response as Parameters<SseEvents[EventType.MESSAGE]>[0]);\n\n break;\n case EventType.TOOL_CALL_START:\n case EventType.TOOL_CALL_COMPLETE:\n this.sseEmitter.emit(EventType.TOOL_CALL, response as Parameters<SseEvents[EventType.TOOL_CALL]>[0]);\n\n break;\n case EventType.TOOL_CALL_CONSENT:\n this.sseEmitter.emit(\n EventType.TOOL_CALL_CONSENT,\n response as Parameters<SseEvents[EventType.TOOL_CALL_CONSENT]>[0],\n );\n\n break;\n case EventType.DONE:\n this.sseEmitter.emit(EventType.DONE, response as SseResponse<EventType.DONE>);\n\n break;\n case EventType.ERROR:\n this.sseEmitter.emit(EventType.ERROR, response as SseResponse<EventType.ERROR>);\n\n break;\n default:\n break;\n }\n }\n\n fetchSse(payload: FetchSsePayload, options?: FetchSseOptions): Subscription {\n options?.onSseStart?.();\n this.inFlight += 1;\n\n return this.runSse(\n createSseObservable({\n apiKey: this.apiKey,\n endpoint: this.endpoint,\n debugMode: this.debugMode,\n payload: this.transformSsePayload?.(payload) ?? payload,\n customHeaders: this.customHeaders,\n }),\n options,\n );\n }\n\n /**\n * Cold-start transcript rejoin (F-014): a `GET /message/sse?custom_channel_id=…` with an empty\n * `Last-Event-ID` replays the collapsed history (`message.user` + self-sufficient `*.complete`),\n * assembled through the same reducer. Reuses the F-002 native Last-Event-ID transport (no re-POST).\n */\n rejoinSse(customChannelId: string, options?: FetchSseOptions): Subscription {\n options?.onSseStart?.();\n this.inFlight += 1;\n\n const url = new URL(this.endpoint);\n url.searchParams.set('custom_channel_id', customChannelId);\n\n return this.runSse(\n createSseObservable({\n apiKey: this.apiKey,\n endpoint: url.toString(),\n debugMode: this.debugMode,\n method: 'GET',\n customHeaders: this.customHeaders,\n }),\n options,\n );\n }\n\n private deriveChannelMetadataEndpoint(): string | null {\n const baseEndpoint = this.getBaseEndpoint();\n\n return baseEndpoint ? `${baseEndpoint}/channel/metadata` : null;\n }\n\n /**\n * Join-init existence + restore gate (F-015): `GET {base}/channel/metadata?custom_channel_id=…`.\n * `200` → parsed {@link ChannelMetadata}; `404` → `null` (channel does not exist); any other non-OK\n * status or network error throws. The caller must never treat an indeterminate result (throw) as\n * \"not exists\" — that would let a mount-time reset wipe an existing channel's history.\n */\n async channelMetadata(customChannelId: string): Promise<ChannelMetadata | null> {\n const endpoint = this.deriveChannelMetadataEndpoint();\n\n if (!endpoint) {\n throw new Error('Unable to derive channel metadata endpoint. Please provide botProviderEndpoint in config.');\n }\n\n const url = new URL(endpoint);\n url.searchParams.set('custom_channel_id', customChannelId);\n\n const headers: Record<string, string> = { ...this.customHeaders };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n const response = await fetch(url.toString(), { method: 'GET', headers });\n\n if (response.status === 404) {\n return null;\n }\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n // Accept both a `{ data: … }` envelope (the convention used by the bot-provider metadata fetch) and\n // a bare body, so the shape can be confirmed against the real backend without a code change here.\n const json: { data?: ChannelMetadata } & Partial<ChannelMetadata> = await response.json();\n const data = json.data ?? (json as ChannelMetadata);\n\n return {\n title: data.title ?? null,\n runState: data.runState ?? 'IDLE',\n lastActivityAt: data.lastActivityAt,\n // F-019 — whitelist-pass the live-sandbox list (map the five backend fields); `[]` for an old\n // backend / a channel with none live. metadata is the sole authority on \"who is live\".\n launchedSandboxes: (data.launchedSandboxes ?? []).map(sandbox => ({\n sandboxName: sandbox.sandboxName,\n sandboxBlueprintName: sandbox.sandboxBlueprintName,\n workingDirectory: sandbox.workingDirectory,\n editorServerEnabled: sandbox.editorServerEnabled,\n browserEnabled: sandbox.browserEnabled,\n })),\n };\n }\n\n private deriveSuspendEndpoint(): string | null {\n const baseEndpoint = this.getBaseEndpoint();\n\n return baseEndpoint ? `${baseEndpoint}/message/suspend` : null;\n }\n\n /**\n * Ask the backend to suspend this channel's background run (F-023 AC1):\n * `POST {base}/message/suspend?custom_channel_id=…`. The six downstream relays expose this at the\n * exact same shape as `GET {base}/message/sse`, so it is derived identically with no per-backend case.\n *\n * `custom_channel_id` is always sent — some backends take the channel from the path and ignore it,\n * others require it, and sending it is correct for both (same rule as the GET rejoin).\n *\n * **Resolving means \"accepted\", not \"stopped\".** The run winds down on the server and declares itself\n * finished through the terminal event on the already-open SSE stream (the same event a normal run\n * ends with), so callers must keep that stream connected and wait for it.\n *\n * Success is **any 2xx** — relays variously answer `204 No Content` or `200` with an envelope, so no\n * single status is hardcoded. `404` means the channel was never created, i.e. there is nothing to\n * stop, which is a success rather than an error. Every other non-2xx throws {@link HttpError}.\n */\n async suspendChannel(\n customChannelId: string,\n options?: StopGenerationOptions & { requestId?: string },\n ): Promise<void> {\n const endpoint = this.deriveSuspendEndpoint();\n\n if (!endpoint) {\n throw new Error('Unable to derive channel suspend endpoint. Please provide botProviderEndpoint in config.');\n }\n\n const url = new URL(endpoint);\n url.searchParams.set('custom_channel_id', customChannelId);\n\n if (options?.requestId) {\n url.searchParams.set('request_id', options.requestId);\n }\n\n if (options?.force) {\n url.searchParams.set('force', 'true');\n }\n\n const response = await fetch(url.toString(), { method: 'POST', headers: this.apiHeaders() });\n\n // 404 = the channel does not exist = nothing to stop. Not a failure the user should ever see.\n if (response.ok || response.status === 404) {\n return;\n }\n\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n private runSse(observable: Observable<SseResponse<EventType>>, options?: FetchSseOptions): Subscription {\n return observable\n .pipe(\n // No RxJS-level retry: re-subscribing would re-POST and the backend would re-dispatch a duplicate\n // run. Mid-stream resume is the library's job (native Last-Event-ID reconnect in\n // create-sse-observable); a no-cursor failure surfaces via `error` below.\n concatMap(event => of(event).pipe(delay(options?.delayTime ?? 50))),\n takeUntil(this.destroy$),\n // Settle the run accounting on every termination path — complete, error, AND a user-initiated\n // unsubscribe (stop-generation aborts the connection without a terminal event).\n finalize(() => this.onRunSettled()),\n )\n .subscribe({\n next: response => {\n // Once detached the connection is kept open only so the backend can\n // finish the run; the owning component is gone, so stop notifying it.\n if (this.detached) return;\n\n options?.onSseMessage?.(response);\n this.handleEvent(response);\n },\n error: error => {\n if (!this.detached) options?.onSseError?.(error);\n },\n complete: () => {\n if (!this.detached) options?.onSseCompleted?.();\n },\n });\n }\n\n /**\n * Detach the client from its owning component without aborting in-flight SSE\n * runs. Used when a chatbot unmounts (e.g. the user navigates to another\n * in-app page) but the current run should be allowed to finish on the\n * backend instead of being cut off. After detaching, the stream is still\n * drained to keep the connection open but consumer callbacks no longer fire.\n *\n * The connection cleans itself up in all cases:\n * - No run in flight → close immediately (nothing to keep alive).\n * - Runs in flight → close once they all settle (`onRunSettled`), so the\n * client never lingers past the work it is keeping alive.\n * - A run gets stuck (stream stays open, no `run.done`/error) → the safety\n * timeout force-closes it so the orphaned connection cannot leak.\n */\n detach(options: { timeoutMs: number }): void {\n if (this.detached || this.closed) return;\n\n this.detached = true;\n\n if (this.inFlight === 0) {\n this.close();\n\n return;\n }\n\n this.detachTimer = setTimeout(() => this.close(), options.timeoutMs);\n }\n\n private onRunSettled(): void {\n this.inFlight = Math.max(0, this.inFlight - 1);\n\n // Close only once every kept run has finished, so one run settling never\n // tears down another that is still streaming on the same client.\n if (this.detached && this.inFlight === 0) {\n this.close();\n }\n }\n\n close(): void {\n if (this.closed) return;\n\n this.closed = true;\n\n if (this.detachTimer) {\n clearTimeout(this.detachTimer);\n this.detachTimer = undefined;\n }\n\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * 上傳檔案到 Blob API\n * 根據 API 文件:/ns/{namespace}/bot-provider/{bot_provider_name}/blob\n */\n async uploadFile(file: File, customChannelId: string): Promise<BlobUploadResponse> {\n const blobEndpoint = this.deriveBlobEndpoint();\n\n if (!blobEndpoint) {\n throw new Error('Unable to derive blob endpoint. Please provide botProviderEndpoint in config.');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('customChannelId', customChannelId);\n\n const headers: HeadersInit = {\n ...this.customHeaders,\n };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n try {\n const response = await fetch(blobEndpoint, {\n method: 'POST',\n headers,\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed: ${response.status} ${response.statusText}`);\n }\n\n const result = await response.json();\n\n if (this.debugMode) {\n // eslint-disable-next-line no-console\n console.log('[AsgardServiceClient] File upload response:', result);\n }\n\n return result as BlobUploadResponse;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[AsgardServiceClient] File upload error:', error);\n throw error;\n }\n }\n\n /**\n * 下載 Channel Home(每個 channel 的檔案交換平面)裡的檔案(channel-home:// URI action)。\n * 呼叫 Edge Server GET <base>/channel-home/download?custom_channel_id=xxx&relative_path=xxx 取回 binary。\n */\n async downloadChannelHomeFile(relativePath: string, customChannelId: string): Promise<ChannelHomeDownloadResult> {\n const baseEndpoint = this.getBaseEndpoint();\n\n if (!baseEndpoint) {\n throw new Error('Unable to derive channel-home download endpoint. Please provide botProviderEndpoint in config.');\n }\n\n const query =\n `custom_channel_id=${encodeURIComponent(customChannelId)}` + `&relative_path=${encodeURIComponent(relativePath)}`;\n const url = `${baseEndpoint}/channel-home/download?${query}`;\n\n const headers: HeadersInit = {\n ...this.customHeaders,\n };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Channel Home download failed: ${response.status} ${response.statusText}`);\n }\n\n const blob = await response.blob();\n // 後端送的 relative_path 是未編碼的原字串,basename 即下載檔名(不做 decode)。\n const filename = relativePath.split('/').pop() || 'download';\n\n if (this.debugMode) {\n // eslint-disable-next-line no-console\n console.log('[AsgardServiceClient] Channel Home download response:', { filename, size: blob.size });\n }\n\n return { blob, filename };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[AsgardServiceClient] Channel Home download error:', error);\n throw error;\n }\n }\n\n /**\n * F-020 — 取得 sandbox 瀏覽器一次性接手 URL(`sandbox://<name>/open-browser` 卡的副作用)。\n * 呼叫 `POST {base}/sandbox/{sandboxName}/browser/open-url`(對標 asgard-core edgeserver\n * `GenerateSandboxBrowserOpenUrl`:path 參數 namespace / bot-provider 已在 base、sandbox_name 在路徑,\n * 不需 custom_channel_id)。回應 `{ data: { openURL } }`(envelope 容錯,比照 `channelMetadata`)。\n */\n async generateSandboxBrowserOpenUrl(sandboxName: string): Promise<string> {\n const baseEndpoint = this.getBaseEndpoint();\n\n if (!baseEndpoint) {\n throw new Error(\n 'Unable to derive sandbox browser open-url endpoint. Please provide botProviderEndpoint in config.',\n );\n }\n\n const url = `${baseEndpoint}/sandbox/${encodeURIComponent(sandboxName)}/browser/open-url`;\n\n const headers: Record<string, string> = { ...this.customHeaders };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n const response = await fetch(url, { method: 'POST', headers });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: { openURL?: string } } & { openURL?: string } = await response.json();\n const openURL = json.data?.openURL ?? json.openURL;\n\n if (!openURL) {\n throw new Error('Sandbox browser open-url response did not contain an openURL.');\n }\n\n return openURL;\n }\n\n /**\n * F-021 — 衍生 sandbox fs 端點 base:`{base}/sandbox/{sandboxName}/fs`(namespace / bot-provider 已在 base)。\n */\n private deriveSandboxFsEndpoint(sandboxName: string): string {\n const baseEndpoint = this.getBaseEndpoint();\n\n if (!baseEndpoint) {\n throw new Error('Unable to derive sandbox fs endpoint. Please provide botProviderEndpoint in config.');\n }\n\n return `${baseEndpoint}/sandbox/${encodeURIComponent(sandboxName)}/fs`;\n }\n\n /** The shared auth / custom headers for the client's plain-JSON REST calls (no SSE). */\n private apiHeaders(): Record<string, string> {\n const headers: Record<string, string> = { ...this.customHeaders };\n if (this.apiKey) {\n headers['X-API-KEY'] = this.apiKey;\n }\n\n return headers;\n }\n\n /**\n * F-021 — 列出 sandbox 目錄內容(`GET fs/list?path=`)。回應 `{ data: { entries, truncated } }`(envelope\n * 容錯,比照 `channelMetadata`)。\n */\n async sandboxFsList(sandboxName: string, path: string): Promise<SandboxFsListResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/list`);\n url.searchParams.set('path', path);\n\n const response = await fetch(url.toString(), { method: 'GET', headers: this.apiHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: SandboxFsListResult } & Partial<SandboxFsListResult> = await response.json();\n const data = json.data ?? (json as SandboxFsListResult);\n\n return { entries: data.entries ?? [], truncated: data.truncated ?? false };\n }\n\n /**\n * F-021 — 讀取 sandbox 檔案(`GET fs/file?path=[&offset_bytes&limit_bytes]`)。回應是 raw octet-stream,\n * 檔案總長度 / 是否截斷走 `X-Total-Bytes` / `X-Truncated` header。\n */\n async sandboxFsRead(sandboxName: string, path: string, options?: SandboxFsReadOptions): Promise<SandboxFsReadResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/file`);\n url.searchParams.set('path', path);\n if (options?.offsetBytes != null) url.searchParams.set('offset_bytes', String(options.offsetBytes));\n\n if (options?.limitBytes != null) url.searchParams.set('limit_bytes', String(options.limitBytes));\n\n const response = await fetch(url.toString(), { method: 'GET', headers: this.apiHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const content = await response.blob();\n const totalBytesHeader = response.headers.get('X-Total-Bytes');\n\n return {\n content,\n totalBytes: totalBytesHeader != null ? Number(totalBytesHeader) : content.size,\n truncated: response.headers.get('X-Truncated') === 'true',\n };\n }\n\n /**\n * F-021 — 寫入 sandbox 檔案(`PUT fs/file?path=[&mode&create_only]`,`multipart/form-data` 帶 `file`)。\n * 回應 `{ data: { bytesWritten } }`。\n */\n async sandboxFsWrite(\n sandboxName: string,\n path: string,\n content: Blob | string,\n options?: SandboxFsWriteOptions,\n ): Promise<SandboxFsWriteResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/file`);\n url.searchParams.set('path', path);\n if (options?.mode != null) url.searchParams.set('mode', String(options.mode));\n\n if (options?.createOnly) url.searchParams.set('create_only', 'true');\n\n const form = new FormData();\n form.append('file', content instanceof Blob ? content : new Blob([content]));\n\n const response = await fetch(url.toString(), { method: 'PUT', headers: this.apiHeaders(), body: form });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: SandboxFsWriteResult } & Partial<SandboxFsWriteResult> = await response.json();\n const data = json.data ?? (json as SandboxFsWriteResult);\n\n return { bytesWritten: data.bytesWritten ?? 0 };\n }\n\n /** F-021 Cycle 2 — `sandbox://` fs mutation shared request helper (throws `HttpError` on non-OK). */\n private async sandboxFsRequest(\n sandboxName: string,\n op: string,\n method: 'POST' | 'DELETE',\n query: Record<string, string>,\n ): Promise<unknown> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/${op}`);\n Object.entries(query).forEach(([k, v]) => url.searchParams.set(k, v));\n\n const response = await fetch(url.toString(), { method, headers: this.apiHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n return response.json().catch(() => null);\n }\n\n /** F-021 — stat a sandbox path (`GET fs/stat?path=`). */\n async sandboxFsStat(sandboxName: string, path: string): Promise<SandboxFsStatResult> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/stat`);\n url.searchParams.set('path', path);\n\n const response = await fetch(url.toString(), { method: 'GET', headers: this.apiHeaders() });\n\n if (!response.ok) {\n throw new HttpError(response.status, response.statusText, await response.text().catch(() => undefined));\n }\n\n const json: { data?: SandboxFsStatResult } & Partial<SandboxFsStatResult> = await response.json();\n const data = json.data ?? (json as SandboxFsStatResult);\n\n return {\n exists: data.exists ?? false,\n isDir: data.isDir ?? false,\n sizeBytes: data.sizeBytes ?? 0,\n mtimeUnix: data.mtimeUnix ?? 0,\n mode: data.mode ?? 0,\n etag: data.etag,\n };\n }\n\n /** F-021 — create a directory (`POST fs/mkdir?path=`). */\n async sandboxFsMkdir(sandboxName: string, path: string): Promise<void> {\n await this.sandboxFsRequest(sandboxName, 'mkdir', 'POST', { path });\n }\n\n /** F-021 — delete a file (`DELETE fs/item?path=`). */\n async sandboxFsRemove(sandboxName: string, path: string): Promise<void> {\n await this.sandboxFsRequest(sandboxName, 'item', 'DELETE', { path });\n }\n\n /** F-021 — recursively delete a directory (`DELETE fs/all?path=`). */\n async sandboxFsRemoveAll(sandboxName: string, path: string): Promise<void> {\n await this.sandboxFsRequest(sandboxName, 'all', 'DELETE', { path });\n }\n\n /** F-021 — copy a path (`POST fs/copy?src=&dst=[&overwrite]`) → bytes copied. */\n async sandboxFsCopy(\n sandboxName: string,\n src: string,\n dst: string,\n options?: SandboxFsCopyMoveOptions,\n ): Promise<SandboxFsCopyResult> {\n const query: Record<string, string> = { src, dst };\n if (options?.overwrite) query.overwrite = 'true';\n\n const json = (await this.sandboxFsRequest(sandboxName, 'copy', 'POST', query)) as\n | ({ data?: SandboxFsCopyResult } & Partial<SandboxFsCopyResult>)\n | null;\n const data = json?.data ?? (json as SandboxFsCopyResult | null);\n\n return { bytesCopied: data?.bytesCopied ?? 0 };\n }\n\n /** F-021 — move / rename a path (`POST fs/move?src=&dst=[&overwrite]`). */\n async sandboxFsMove(\n sandboxName: string,\n src: string,\n dst: string,\n options?: SandboxFsCopyMoveOptions,\n ): Promise<void> {\n const query: Record<string, string> = { src, dst };\n if (options?.overwrite) query.overwrite = 'true';\n\n await this.sandboxFsRequest(sandboxName, 'move', 'POST', query);\n }\n\n /**\n * F-021 — watch a sandbox path for changes (`GET fs/watch?path=`, SSE). Each `event: change` frame is one\n * `SandboxFsWatchEvent`. The backend probes the path first, so a missing path errors as HTTP rather than\n * as a dead stream. Unsubscribing aborts the request, which ends the sandbox-side watcher.\n */\n sandboxFsWatch(sandboxName: string, path: string): Observable<SandboxFsWatchEvent> {\n const url = new URL(`${this.deriveSandboxFsEndpoint(sandboxName)}/watch`);\n url.searchParams.set('path', path);\n\n return new Observable<SandboxFsWatchEvent>(subscriber => {\n const controller = new AbortController();\n\n void fetchEventSource(url.toString(), {\n headers: this.apiHeaders(),\n signal: controller.signal,\n openWhenHidden: true,\n onopen: async response => {\n if (!response.ok) {\n const body = await response.text().catch(() => undefined);\n subscriber.error(new HttpError(response.status, response.statusText, body));\n controller.abort();\n }\n },\n onmessage: esm => {\n if (esm.event === 'change') subscriber.next(JSON.parse(esm.data) as SandboxFsWatchEvent);\n },\n onclose: () => subscriber.complete(),\n onerror: err => {\n // Unlike the run stream this one carries no `id:` cursor, so there is nothing to resume from —\n // surface the failure instead of letting the library silently reconnect forever.\n subscriber.error(err);\n controller.abort();\n throw err;\n },\n });\n\n return (): void => controller.abort();\n });\n }\n\n /**\n * 從 botProviderEndpoint 衍生 Blob API endpoint\n */\n private deriveBlobEndpoint(): string | null {\n const baseEndpoint = this.getBaseEndpoint();\n\n return baseEndpoint ? `${baseEndpoint}/blob` : null;\n }\n\n /**\n * 衍生 bot provider 的 base endpoint(不含子路徑)。\n * 優先用 botProviderEndpoint;若只有 deprecated 的 endpoint 則反推(移除 /message/sse)。已去除尾部斜線。\n */\n private getBaseEndpoint(): string | null {\n let baseEndpoint = this.botProviderEndpoint;\n\n // 如果沒有 botProviderEndpoint,嘗試從 endpoint 反推\n if (!baseEndpoint && this.endpoint) {\n baseEndpoint = this.endpoint.replace('/message/sse', '');\n }\n\n if (!baseEndpoint) {\n return null;\n }\n\n // 移除尾部斜線\n return baseEndpoint.replace(/\\/+$/, '');\n }\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import { v4 as uuidv4 } from 'uuid';\nimport { EventType } from '../constants/enum';\nimport {\n ConversationMessage,\n ConversationSubagentMessage,\n ConversationThinkingMessage,\n ConversationToolCallMessage,\n ConversationUserMessage,\n SseResponse,\n ToolCallConsentEventData,\n} from '../types';\n\ninterface IConversation {\n messages: Map<string, ConversationMessage> | null;\n pendingConsent?: ToolCallConsentEventData | null;\n}\n\nexport default class Conversation implements IConversation {\n public messages: Map<string, ConversationMessage> | null = null;\n public pendingConsent: ToolCallConsentEventData | null = null;\n\n constructor({ messages, pendingConsent = null }: IConversation) {\n this.messages = messages;\n this.pendingConsent = pendingConsent ?? null;\n }\n\n pushMessage(message: ConversationMessage): Conversation {\n const messages = new Map(this.messages);\n messages.set(message.messageId, message);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n clearPendingConsent(): Conversation {\n if (!this.pendingConsent) return this;\n\n return new Conversation({ messages: this.messages, pendingConsent: null });\n }\n\n /**\n * Converge everything the aborted run left mid-flight (F-020 AC10, F-023). A stopped run sends no\n * closing frame for whatever was in progress, so without this those messages advertise activity that\n * has ceased — and they persist in the transcript that way:\n *\n * - a tool-call with `isComplete === false` gets no `tool_call.complete`, and would render as\n * `running` forever, so it converges to `cancelled`;\n * - a thinking block with `isThinking === true` gets no `message.thinking.complete`, and would keep\n * its highlighted \"Thinking…\" state forever, so it converges to the settled state.\n *\n * Content is preserved either way — never rolled back. Already-settled messages and every other\n * message type are untouched, and the same instance is returned when nothing was in flight.\n */\n settleInFlightMessages(): Conversation {\n if (!this.messages) return this;\n\n let changed = false;\n const messages = new Map(this.messages);\n for (const [id, message] of messages) {\n if (message.type === 'tool-call' && !message.isComplete) {\n messages.set(id, { ...message, isComplete: true, isCancelled: true });\n changed = true;\n }\n\n // F-023 — found only by stopping a real run mid-thinking: the mock and the unit tests had always\n // interrupted after the thinking block had already completed, so this path went unexercised.\n if (message.type === 'thinking' && message.isThinking) {\n messages.set(id, { ...message, isThinking: false });\n changed = true;\n }\n }\n\n if (!changed) return this;\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n /**\n * @deprecated Renamed to {@link settleInFlightMessages} in 0.3.27 — it settles in-flight thinking\n * blocks as well as tool-calls, which the old name no longer described. Behaviour is unchanged;\n * this alias will be removed in a future major version.\n */\n cancelInFlightToolCalls(): Conversation {\n return this.settleInFlightMessages();\n }\n\n onMessage(response: SseResponse<EventType>): Conversation {\n switch (response.eventType) {\n case EventType.MESSAGE_START:\n return this.onMessageStart(response as SseResponse<EventType.MESSAGE_START>);\n case EventType.MESSAGE_DELTA:\n return this.onMessageDelta(response as SseResponse<EventType.MESSAGE_DELTA>);\n case EventType.MESSAGE_COMPLETE:\n return this.onMessageComplete(response as SseResponse<EventType.MESSAGE_COMPLETE>);\n case EventType.MESSAGE_USER:\n return this.onMessageUser(response as SseResponse<EventType.MESSAGE_USER>);\n case EventType.MESSAGE_THINKING_START:\n return this.onThinkingStart(response as SseResponse<EventType.MESSAGE_THINKING_START>);\n case EventType.MESSAGE_THINKING_DELTA:\n return this.onThinkingDelta(response as SseResponse<EventType.MESSAGE_THINKING_DELTA>);\n case EventType.MESSAGE_THINKING_COMPLETE:\n return this.onThinkingComplete(response as SseResponse<EventType.MESSAGE_THINKING_COMPLETE>);\n case EventType.TOOL_CALL_START:\n return this.onToolCallStart(response as SseResponse<EventType.TOOL_CALL_START>);\n case EventType.TOOL_CALL_COMPLETE:\n return this.onToolCallComplete(response as SseResponse<EventType.TOOL_CALL_COMPLETE>);\n case EventType.TOOL_CALL_CONSENT:\n return this.onToolCallConsent(response as SseResponse<EventType.TOOL_CALL_CONSENT>);\n case EventType.SUBAGENT_START:\n return this.onSubagentStart(response as SseResponse<EventType.SUBAGENT_START>);\n case EventType.SUBAGENT_COMPLETE:\n return this.onSubagentComplete(response as SseResponse<EventType.SUBAGENT_COMPLETE>);\n case EventType.ERROR:\n return this.onMessageError(response as SseResponse<EventType.ERROR>);\n default:\n return this;\n }\n }\n\n /**\n * A message is terminal once `complete` has materialized it (a bot message with `isTyping === false`).\n * Terminal messages must never regress to typing/streaming — late `start`/`delta` frames from replay\n * or out-of-order delivery are ignored (F-011 / UC-018).\n */\n private isTerminalBot(message: ConversationMessage | undefined): boolean {\n return message?.type === 'bot' && !message.isTyping;\n }\n\n /**\n * A thinking block is terminal once `thinking.complete` has settled it (`isThinking === false`).\n * Like the bot terminal guard (F-011), it must never regress to the streaming state — late\n * `thinking.start` / `thinking.delta` frames from replay or out-of-order delivery are ignored.\n */\n private isTerminalThinking(message: ConversationMessage | undefined): boolean {\n return message?.type === 'thinking' && !message.isThinking;\n }\n\n onMessageStart(response: SseResponse<EventType.MESSAGE_START>): Conversation {\n const message = response.fact.messageStart.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n // Terminal guard: a completed message stays put; a late `start` must not blank it into a typing bubble.\n if (this.isTerminalBot(this.messages?.get(message.messageId))) return this;\n\n const messages = new Map(this.messages);\n\n messages.set(message.messageId, {\n type: 'bot',\n eventType: EventType.MESSAGE_START,\n isTyping: true,\n typingText: '',\n messageId: message.messageId,\n message,\n time: new Date(),\n traceId: response.traceId,\n raw: '',\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageDelta(response: SseResponse<EventType.MESSAGE_DELTA>): Conversation {\n const message = response.fact.messageDelta.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const currentMessage = this.messages?.get(message.messageId);\n\n // Terminal guard: a late `delta` after `complete` must not flip the message back into typing (UC-018).\n if (this.isTerminalBot(currentMessage)) return this;\n\n // Lazy-init: a `delta` with no existing entry (delta-before-start / mid-stream join) creates the\n // typing message rather than silently dropping its text (UC-017).\n const currentBot = currentMessage?.type === 'bot' ? currentMessage : undefined;\n const messages = new Map(this.messages);\n\n messages.set(message.messageId, {\n type: 'bot',\n eventType: EventType.MESSAGE_DELTA,\n isTyping: true,\n typingText: `${currentBot?.typingText ?? ''}${message.text}`,\n messageId: message.messageId,\n message,\n time: new Date(),\n traceId: response.traceId ?? currentBot?.traceId,\n raw: currentBot?.raw ?? '',\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageComplete(response: SseResponse<EventType.MESSAGE_COMPLETE>): Conversation {\n const message = response.fact.messageComplete.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const messages = new Map(this.messages);\n\n const currentMessage = messages.get(message.messageId);\n\n messages.set(message.messageId, {\n type: 'bot',\n eventType: EventType.MESSAGE_COMPLETE,\n isTyping: false,\n typingText: null,\n messageId: message.messageId,\n message,\n time: new Date(),\n traceId: response.traceId ?? (currentMessage?.type === 'bot' ? currentMessage.traceId : undefined),\n raw: JSON.stringify(response),\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onThinkingStart(response: SseResponse<EventType.MESSAGE_THINKING_START>): Conversation {\n const message = response.fact.messageThinkingStart.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n // Terminal guard: a completed thinking block stays put; a late `start` must not reopen it (F-011).\n if (this.isTerminalThinking(this.messages?.get(message.messageId))) return this;\n\n const messages = new Map(this.messages);\n const thinking: ConversationThinkingMessage = {\n type: 'thinking',\n messageId: message.messageId,\n text: message.text,\n isThinking: true,\n time: new Date(),\n traceId: response.traceId,\n };\n messages.set(message.messageId, thinking);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onThinkingDelta(response: SseResponse<EventType.MESSAGE_THINKING_DELTA>): Conversation {\n const message = response.fact.messageThinkingDelta.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const currentMessage = this.messages?.get(message.messageId);\n\n // Terminal guard: a late `delta` after `complete` must not flip the block back into streaming (F-011).\n if (this.isTerminalThinking(currentMessage)) return this;\n\n // Lazy-init: a `delta` with no existing block (delta-before-start / mid-stream join) creates the\n // streaming block rather than dropping its reasoning text (F-011 / UC-001).\n const currentThinking = currentMessage?.type === 'thinking' ? currentMessage : undefined;\n const messages = new Map(this.messages);\n const thinking: ConversationThinkingMessage = {\n type: 'thinking',\n messageId: message.messageId,\n text: `${currentThinking?.text ?? ''}${message.text}`,\n isThinking: true,\n time: currentThinking?.time ?? new Date(),\n traceId: response.traceId ?? currentThinking?.traceId,\n };\n messages.set(message.messageId, thinking);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onThinkingComplete(response: SseResponse<EventType.MESSAGE_THINKING_COMPLETE>): Conversation {\n const message = response.fact.messageThinkingComplete.message;\n\n // BUG-001: subagent frames carry a non-empty `parentToolUseId`; hide them from the main conversation.\n if (message.parentToolUseId) return this;\n\n const currentMessage = this.messages?.get(message.messageId);\n const currentThinking = currentMessage?.type === 'thinking' ? currentMessage : undefined;\n\n const messages = new Map(this.messages);\n const thinking: ConversationThinkingMessage = {\n type: 'thinking',\n messageId: message.messageId,\n // Self-sufficient (F-011): the complete frame carries the full reasoning, so a complete-only\n // replay (no start/delta) still renders the whole text.\n text: message.text,\n isThinking: false,\n time: currentThinking?.time ?? new Date(),\n traceId: response.traceId ?? currentThinking?.traceId,\n };\n messages.set(message.messageId, thinking);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageUser(response: SseResponse<EventType.MESSAGE_USER>): Conversation {\n const data = response.fact.messageUser;\n\n // Dedup: the optimistic bubble sent live is keyed by the customMessageId the client generated, which\n // the backend echoes back here as `customMessageId`. If that (or the backend messageId) already maps\n // to a user message, this replayed turn is a duplicate — keep the existing one (F-014 invariant).\n const existing =\n this.messages?.get(data.messageId) ??\n (data.customMessageId ? this.messages?.get(data.customMessageId) : undefined);\n\n if (existing?.type === 'user') return this;\n\n const messages = new Map(this.messages);\n const userMessage: ConversationUserMessage = {\n type: 'user',\n messageId: data.messageId,\n text: data.text,\n blobIds: data.blobIds,\n customMessageId: data.customMessageId,\n identityHint: data.identityHint,\n time: new Date(),\n traceId: response.traceId,\n };\n messages.set(data.messageId, userMessage);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onMessageError(response: SseResponse<EventType.ERROR>): Conversation {\n const messageId = uuidv4();\n const error = response.fact.runError.error;\n\n const messages = new Map(this.messages);\n\n messages.set(messageId, {\n type: 'error',\n eventType: EventType.ERROR,\n messageId,\n error,\n time: new Date(),\n traceId: response.traceId,\n });\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onToolCallStart(response: SseResponse<EventType.TOOL_CALL_START>): Conversation {\n const toolCallStart = response.fact.toolCallStart;\n const messages = new Map(this.messages);\n const toolCallKey = `${toolCallStart.processId}-${toolCallStart.callSeq}`;\n\n const toolCallMessage: ConversationToolCallMessage = {\n type: 'tool-call',\n eventType: EventType.TOOL_CALL_START,\n messageId: toolCallKey,\n processId: toolCallStart.processId,\n callSeq: toolCallStart.callSeq,\n toolName: toolCallStart.toolCall.toolName,\n reason: toolCallStart.toolCall.reason,\n toolsetName: toolCallStart.toolCall.toolsetName,\n parameter: toolCallStart.toolCall.parameter,\n toolUseId: toolCallStart.toolUseId,\n parentToolUseId: toolCallStart.parentToolUseId,\n isComplete: false,\n time: new Date(),\n traceId: response.traceId,\n };\n\n messages.set(toolCallKey, toolCallMessage);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onToolCallComplete(response: SseResponse<EventType.TOOL_CALL_COMPLETE>): Conversation {\n const toolCallComplete = response.fact.toolCallComplete;\n const messages = new Map(this.messages);\n const toolCallKey = `${toolCallComplete.processId}-${toolCallComplete.callSeq}`;\n\n const existingMessage = messages.get(toolCallKey);\n\n if (existingMessage?.type === 'tool-call') {\n const updatedMessage: ConversationToolCallMessage = {\n ...existingMessage,\n eventType: EventType.TOOL_CALL_COMPLETE,\n result: toolCallComplete.toolCallResult,\n isError: toolCallComplete.isError,\n sidecar: toolCallComplete.toolUseResultSidecar,\n isComplete: true,\n traceId: response.traceId ?? existingMessage.traceId,\n };\n messages.set(toolCallKey, updatedMessage);\n }\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onToolCallConsent(response: SseResponse<EventType.TOOL_CALL_CONSENT>): Conversation {\n const consent = response.fact.toolCallConsent;\n\n return new Conversation({ messages: this.messages, pendingConsent: consent });\n }\n\n onSubagentStart(response: SseResponse<EventType.SUBAGENT_START>): Conversation {\n const start = response.fact.subagentStart;\n const messages = new Map(this.messages);\n const key = `subagent:${start.parentToolUseId}:start`;\n\n const message: ConversationSubagentMessage = {\n type: 'subagent',\n messageId: key,\n kind: 'start',\n parentToolUseId: start.parentToolUseId,\n agentId: start.agentId,\n subagentType: start.subagentType,\n description: start.description,\n time: new Date(),\n traceId: response.traceId,\n };\n\n messages.set(key, message);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n\n onSubagentComplete(response: SseResponse<EventType.SUBAGENT_COMPLETE>): Conversation {\n const complete = response.fact.subagentComplete;\n const messages = new Map(this.messages);\n const key = `subagent:${complete.parentToolUseId}:complete`;\n\n const message: ConversationSubagentMessage = {\n type: 'subagent',\n messageId: key,\n kind: 'complete',\n parentToolUseId: complete.parentToolUseId,\n agentId: complete.agentId,\n subagentType: complete.subagentType,\n status: complete.status,\n summary: complete.summary,\n time: new Date(),\n traceId: response.traceId,\n };\n\n messages.set(key, message);\n\n return new Conversation({ messages, pendingConsent: this.pendingConsent });\n }\n}\n","// Task Check List accumulation (F-010) — the framework-agnostic data-layer SoT.\n//\n// `TaskCreate` / `TaskUpdate` are native built-in tool-calls (`toolsetName === \"\"`, `reason === \"\"`),\n// but their meaning is \"an incremental edit to one list\", not \"a tool call\". So the react layer:\n// 1. routes them out of the tool-call group via `isTaskTool`;\n// 2. folds them into one current list with `reduceTaskEvents`, presented by `<TaskList>`.\n//\n// Authority (replay-safe): id / status transitions come from the `tool_call.complete` result sidecar,\n// never parsed from the human-readable `toolCallResult` string. `parameter` supplies subject /\n// activeForm / description / the target status fallback.\nimport { Task, TaskStatus } from '../types/task';\n\nconst TASK_TOOLS = new Set(['TaskCreate', 'TaskUpdate']);\n\n/** Native built-in check. `true` → route out of the tool-call group, feed to `reduceTaskEvents`. */\nexport function isTaskTool(call: { toolsetName: string; toolName: string }): boolean {\n return call.toolsetName === '' && TASK_TOOLS.has(call.toolName);\n}\n\n/**\n * A completed task tool-call — the fields `reduceTaskEvents` needs, mirroring a completed\n * `ConversationToolCallMessage` (or the raw `tool_call.complete` fact).\n */\nexport interface TaskToolEvent {\n toolName: string;\n parameter: Record<string, unknown>;\n /** `toolUseResultSidecar`: `TaskCreate` → authoritative id; `TaskUpdate` → `statusChange.to`. */\n sidecar?: Record<string, unknown>;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Fold the `TaskCreate` / `TaskUpdate` complete-event stream into the current list (in create-arrival\n * order). Pure and replay-safe: any prefix of the same stream folds to the same snapshot.\n */\nexport function reduceTaskEvents(events: TaskToolEvent[]): Task[] {\n const order: string[] = [];\n const byId = new Map<string, Task>();\n\n for (const event of events) {\n const parameter = event.parameter ?? {};\n const sidecar = event.sidecar ?? {};\n\n if (event.toolName === 'TaskCreate') {\n const task = asRecord(sidecar.task);\n const id = asString(task?.id);\n\n if (!id) continue; // no authoritative id → skip (never guess from the result string)\n\n if (!byId.has(id)) order.push(id);\n\n byId.set(id, {\n id,\n subject: asString(parameter.subject) || asString(task?.subject) || '',\n activeForm: asString(parameter.activeForm),\n description: asString(parameter.description),\n status: byId.get(id)?.status ?? 'pending', // initial status = pending (keep existing on repeat)\n });\n } else if (event.toolName === 'TaskUpdate') {\n const statusChange = asRecord(sidecar.statusChange);\n const id = asString(parameter.taskId) || asString(sidecar.taskId);\n // sidecar authoritative, parameter.status fallback.\n const to = (asString(statusChange?.to) || asString(parameter.status)) as TaskStatus | undefined;\n\n if (!id || !to) continue;\n\n const prev = byId.get(id);\n\n if (prev) byId.set(id, { ...prev, status: to });\n // update arriving before its create (shouldn't happen in order) → ignore.\n }\n }\n\n return order.map(id => byId.get(id) as Task);\n}\n","// Subagent list accumulation (F-012) — the framework-agnostic data-layer SoT.\n//\n// An `Agent` tool-call spawns a subagent, but it is only the \"launch\" viewpoint and lacks the\n// subagent's detail. So the react layer:\n// 1. routes the `Agent` tool-call (isAgentTool) and every child tool-call (parentToolUseId !== \"\")\n// out of the main tool-call group;\n// 2. folds the `Agent` tool-call + `subagent.{start,complete}` + child tool-calls into one current\n// subagent list with `reduceSubagents`, presented by `<SubagentList>`.\n//\n// Two correctness rules (verified against asgard-sdk-go + the new-example11 dump):\n// - A subagent's status is driven by `subagent.start` → `subagent.complete`, NOT the `Agent`\n// tool_call.complete — async subagents complete the `Agent` tool early (result.status =\n// \"async_launched\") while the subagent is still running.\n// - Correlation key = `parentToolUseId` (= the `Agent` tool-call's `toolUseId`).\nimport { Subagent, SubagentStatus, SubagentToolCall } from '../types/subagent';\n\n/** The spawning `Agent` tool-call (native builtin). `true` → route out of the tool-call group. */\nexport function isAgentTool(call: { toolsetName: string; toolName: string }): boolean {\n return call.toolsetName === '' && call.toolName === 'Agent';\n}\n\n/** Whether a tool-call belongs to a subagent (child). The main group keeps only `parentToolUseId === \"\"`. */\nexport function isSubagentChildTool(parentToolUseId?: string): boolean {\n return !!parentToolUseId;\n}\n\n/** The subagent-related SSE events, adapted from their facts by the react layer, in arrival order. */\nexport type SubagentEvent =\n | { kind: 'agentStart'; toolUseId: string; description?: string }\n | { kind: 'subagentStart'; parentToolUseId: string; agentId?: string; subagentType?: string; description?: string }\n | {\n kind: 'toolStart';\n parentToolUseId: string;\n toolUseId: string;\n toolsetName: string;\n toolName: string;\n parameter?: Record<string, unknown>;\n reason?: string;\n }\n | { kind: 'toolComplete'; parentToolUseId: string; toolUseId: string; isError?: boolean }\n | { kind: 'subagentComplete'; parentToolUseId: string; status: SubagentStatus; summary?: string };\n\ninterface Meta {\n agentId?: string;\n subagentType?: string;\n description?: string;\n status: SubagentStatus;\n summary?: string;\n}\n\n/**\n * Fold the subagent event stream into the current list (in first-seen order). Pure and replay-safe:\n * status goes terminal only via `subagentComplete` (agentStart / subagentStart never change it), so a\n * replay never knocks a completed subagent back to running.\n */\nexport function reduceSubagents(events: SubagentEvent[]): Subagent[] {\n const order: string[] = [];\n const meta = new Map<string, Meta>();\n const tools = new Map<string, Map<string, SubagentToolCall>>(); // parentToolUseId -> (toolUseId -> tool)\n\n const ensure = (id: string): Meta => {\n if (!meta.has(id)) {\n order.push(id);\n meta.set(id, { status: 'running' });\n tools.set(id, new Map());\n }\n\n return meta.get(id) as Meta;\n };\n\n for (const event of events) {\n switch (event.kind) {\n case 'agentStart': {\n const m = ensure(event.toolUseId);\n\n if (event.description && !m.description) m.description = event.description;\n\n break;\n }\n\n case 'subagentStart': {\n const m = ensure(event.parentToolUseId);\n\n m.agentId = event.agentId ?? m.agentId;\n m.subagentType = event.subagentType ?? m.subagentType;\n m.description = event.description ?? m.description;\n\n break; // never touch status (only subagentComplete goes terminal)\n }\n\n case 'toolStart': {\n ensure(event.parentToolUseId);\n (tools.get(event.parentToolUseId) as Map<string, SubagentToolCall>).set(event.toolUseId, {\n toolsetName: event.toolsetName,\n toolName: event.toolName,\n parameter: event.parameter ?? {},\n reason: event.reason,\n status: 'running',\n });\n\n break;\n }\n\n case 'toolComplete': {\n const tool = tools.get(event.parentToolUseId)?.get(event.toolUseId);\n\n if (tool) tool.status = event.isError ? 'error' : 'completed';\n\n break;\n }\n\n case 'subagentComplete': {\n const m = ensure(event.parentToolUseId);\n\n m.status = event.status;\n m.summary = event.summary;\n\n break;\n }\n }\n }\n\n return order.map(id => ({\n parentToolUseId: id,\n ...(meta.get(id) as Meta),\n tools: Array.from((tools.get(id) as Map<string, SubagentToolCall>).values()),\n }));\n}\n","// Derived-state stores (F-013) — framework-agnostic Task / Subagent stores.\n//\n// The Task List (F-010) and Subagent List (F-012) are pure folds over the conversation. This module\n// exposes them as reactive slices so SDK consumers can render the lists *outside* the Chatbot in any\n// framework: a current immutable snapshot + change notification, never a fire-and-forget delta event.\n//\n// The key performance property: `conversation` changes on every message delta (high frequency), but a\n// consumer that \"just wants to draw the list\" must not re-render on unrelated deltas. Each slice is a\n// `BehaviorSubject` fed through `distinctUntilChanged` on structural equality, so it only emits when\n// that slice actually changes.\nimport { BehaviorSubject, distinctUntilChanged, map, Observable, Subscription } from 'rxjs';\nimport Conversation from './conversation';\nimport { isTaskTool, reduceTaskEvents } from './task-reducer';\nimport { isAgentTool, isSubagentChildTool, reduceSubagents, SubagentEvent } from './subagent-reducer';\nimport { ConversationMessage, ConversationToolCallMessage, Subagent, SubagentToolCall, Task } from '../types';\n\nfunction str(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Adapt the ordered conversation messages into the `SubagentEvent[]` that `reduceSubagents` folds. The\n * conversation Map preserves first-insertion order, so iterating its values yields arrival order. A\n * completed child tool emits toolStart + toolComplete back-to-back (its final status is what shows);\n * an in-progress child emits only toolStart (→ running).\n */\nexport function conversationToSubagentEvents(messages: ConversationMessage[]): SubagentEvent[] {\n const events: SubagentEvent[] = [];\n\n for (const message of messages) {\n if (message.type === 'tool-call' && isAgentTool(message)) {\n events.push({\n kind: 'agentStart',\n toolUseId: message.toolUseId ?? message.messageId,\n description: str(message.parameter.description),\n });\n continue;\n }\n\n if (message.type === 'tool-call' && isSubagentChildTool(message.parentToolUseId)) {\n const toolUseId = message.toolUseId ?? message.messageId;\n\n events.push({\n kind: 'toolStart',\n parentToolUseId: message.parentToolUseId as string,\n toolUseId,\n toolsetName: message.toolsetName,\n toolName: message.toolName,\n parameter: message.parameter,\n reason: message.reason,\n });\n\n if (message.isComplete) {\n events.push({\n kind: 'toolComplete',\n parentToolUseId: message.parentToolUseId as string,\n toolUseId,\n isError: message.isError,\n });\n }\n\n continue;\n }\n\n if (message.type === 'subagent' && message.kind === 'start') {\n events.push({\n kind: 'subagentStart',\n parentToolUseId: message.parentToolUseId,\n agentId: message.agentId,\n subagentType: message.subagentType,\n description: message.description,\n });\n continue;\n }\n\n if (message.type === 'subagent' && message.kind === 'complete' && message.status) {\n events.push({\n kind: 'subagentComplete',\n parentToolUseId: message.parentToolUseId,\n status: message.status,\n summary: message.summary,\n });\n }\n }\n\n return events;\n}\n\n/** Fold the conversation's completed Task tool-calls into the current Task list (F-010). */\nexport function deriveTasks(conversation: Conversation): Task[] {\n const messages = Array.from(conversation.messages?.values() ?? []).filter(\n (message): message is ConversationToolCallMessage =>\n message.type === 'tool-call' && message.isComplete && isTaskTool(message),\n );\n\n return reduceTaskEvents(messages);\n}\n\n/** Fold the conversation's Agent / subagent / child tool-call events into the current Subagent list (F-012). */\nexport function deriveSubagents(conversation: Conversation): Subagent[] {\n return reduceSubagents(conversationToSubagentEvents(Array.from(conversation.messages?.values() ?? [])));\n}\n\n/** Structural equality for two derived Task lists (so a slice only emits when the list truly changes). */\nexport function tasksEqual(a: Task[], b: Task[]): boolean {\n if (a === b) return true;\n\n if (a.length !== b.length) return false;\n\n return a.every((task, i) => {\n const other = b[i];\n\n return (\n task.id === other.id &&\n task.status === other.status &&\n task.subject === other.subject &&\n task.activeForm === other.activeForm &&\n task.description === other.description\n );\n });\n}\n\nfunction toolsEqual(a: SubagentToolCall[], b: SubagentToolCall[]): boolean {\n if (a.length !== b.length) return false;\n\n return a.every((tool, i) => {\n const other = b[i];\n\n return (\n tool.toolName === other.toolName &&\n tool.toolsetName === other.toolsetName &&\n tool.status === other.status &&\n tool.reason === other.reason\n );\n });\n}\n\n/** Structural equality for two derived Subagent lists (including each subagent's child tool list). */\nexport function subagentsEqual(a: Subagent[], b: Subagent[]): boolean {\n if (a === b) return true;\n\n if (a.length !== b.length) return false;\n\n return a.every((subagent, i) => {\n const other = b[i];\n\n return (\n subagent.parentToolUseId === other.parentToolUseId &&\n subagent.status === other.status &&\n subagent.subagentType === other.subagentType &&\n subagent.description === other.description &&\n subagent.summary === other.summary &&\n toolsEqual(subagent.tools, other.tools)\n );\n });\n}\n\nexport interface DerivedStores {\n /** Emits the current Task list; only when it changes (not on every conversation delta). */\n tasks$: Observable<Task[]>;\n /** Emits the current Subagent list; only when it changes. */\n subagents$: Observable<Subagent[]>;\n /** The current Task list snapshot (immutable). */\n getTasks: () => Task[];\n /** The current Subagent list snapshot (immutable). */\n getSubagents: () => Subagent[];\n /** Tear down the internal subscriptions. */\n teardown: () => void;\n}\n\n/**\n * Build the per-slice derived stores from a `conversation$` source. Each slice is a `BehaviorSubject`\n * (replays the current snapshot to late subscribers) fed through `distinctUntilChanged`, so it emits\n * only when that slice structurally changes — unrelated high-frequency deltas are suppressed.\n */\nexport function createDerivedStores(conversation$: Observable<Conversation>): DerivedStores {\n const tasks$ = new BehaviorSubject<Task[]>([]);\n const subagents$ = new BehaviorSubject<Subagent[]>([]);\n const subscription = new Subscription();\n\n subscription.add(conversation$.pipe(map(deriveTasks), distinctUntilChanged(tasksEqual)).subscribe(tasks$));\n subscription.add(\n conversation$.pipe(map(deriveSubagents), distinctUntilChanged(subagentsEqual)).subscribe(subagents$),\n );\n\n return {\n tasks$: tasks$.asObservable(),\n subagents$: subagents$.asObservable(),\n getTasks: () => tasks$.value,\n getSubagents: () => subagents$.value,\n teardown: () => subscription.unsubscribe(),\n };\n}\n","import { LaunchedSandbox } from '../types';\n\n/**\n * Normalize a raw `/channel/metadata` `launchedSandboxes[]` snapshot into a stable live list (F-019 /\n * UC-032): dedup by `sandboxName` (metadata should not repeat, but a defensive dedup keeps the UI stable)\n * and sort by display label (`sandboxBlueprintName || sandboxName`) so a different backend ordering never\n * makes a downstream dropdown jump. metadata is the sole authority on \"who is live\" — this folds in no\n * SSE-derived guesses. Never mutates the input.\n */\nexport function reconcileLaunched(metadata: readonly LaunchedSandbox[]): LaunchedSandbox[] {\n const byName = new Map<string, LaunchedSandbox>();\n for (const sandbox of metadata) byName.set(sandbox.sandboxName, sandbox); // last write wins: same name → latest snapshot\n\n return [...byName.values()].sort((a, b) =>\n (a.sandboxBlueprintName || a.sandboxName).localeCompare(b.sandboxBlueprintName || b.sandboxName),\n );\n}\n","import { BehaviorSubject, combineLatest, distinctUntilChanged, map, Observable, Subscription } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n ChannelConfig,\n ChannelRunState,\n ChannelStates,\n FetchSseOptions,\n FetchSsePayload,\n IAsgardServiceClient,\n LaunchedSandbox,\n ObserverOrNext,\n RunKind,\n RunStatus,\n SandboxPhase,\n StopGenerationOptions,\n Subagent,\n SseResponse,\n Task,\n ToolCallConsentAnswer,\n} from '../types';\nimport { ChannelBusyError } from '../types/channel-busy-error';\nimport { FetchSseAction, EventType } from '../constants/enum';\nimport Conversation from './conversation';\nimport { createDerivedStores, DerivedStores } from './derived-stores';\nimport { reconcileLaunched } from './launched-sandboxes';\n\n/** Nothing running, nothing stopping. */\nconst IDLE_RUN_STATUS: RunStatus = { kind: null, stopPhase: 'idle' };\n\n/** How long an accepted stop waits for the terminal event before offering force-stop (F-023 AC7). */\nexport const FORCE_STOP_TIMEOUT_MS = 10_000;\n\nfunction runStatusEqual(a: RunStatus, b: RunStatus): boolean {\n return a.kind === b.kind && a.stopPhase === b.stopPhase && a.requestId === b.requestId;\n}\n\nexport default class Channel {\n private client: IAsgardServiceClient;\n\n public customChannelId: string;\n public customMessageId?: string;\n // Join-time run state from `GET /channel/metadata` (F-023 AC9): decides whether a rejoin is tailing a\n // live run (`restore`) or replaying a finished transcript (`replay`).\n private joinRunState: ChannelRunState;\n\n private isConnecting$: BehaviorSubject<boolean>;\n private runStatusSubject: BehaviorSubject<RunStatus>;\n private conversation$: BehaviorSubject<Conversation>;\n private channelTitleSubject: BehaviorSubject<string | null>;\n private sandboxPhaseSubject: BehaviorSubject<SandboxPhase>;\n private launchedSandboxesSubject: BehaviorSubject<LaunchedSandbox[]>;\n // Sandboxes hinted live by an `asgard.sandbox.launch` frame but not yet confirmed by metadata (F-019).\n // Never merged into the live list directly — cleared once metadata confirms (or held until it does).\n private pendingLaunches: string[] = [];\n private derivedStores: DerivedStores;\n private statesObserver?: ObserverOrNext<ChannelStates>;\n private statesSubscription?: Subscription;\n\n /** Reactive Task Check List store (F-013): emits only when the list changes; replays the snapshot. */\n public readonly tasks$: Observable<Task[]>;\n /** Reactive Subagent list store (F-013): emits only when the list changes; replays the snapshot. */\n public readonly subagents$: Observable<Subagent[]>;\n /** Reactive channel title store (F-016): seeded from metadata, updated by `title.update`; replay-safe. */\n public readonly channelTitle$: Observable<string | null>;\n /** Reactive sandbox cold-start phase store (F-018): per-slice, derived from the last sandbox event; replay-safe. */\n public readonly sandboxPhase$: Observable<SandboxPhase>;\n /** Reactive live-sandbox list store (F-019): authoritative from `/channel/metadata`, per-slice; replay-safe. */\n public readonly launchedSandboxes$: Observable<LaunchedSandbox[]>;\n /** Reactive run identity + stop lifecycle store (F-023): who holds the connection, and is a stop pending. */\n public readonly runStatus$: Observable<RunStatus>;\n private currentUserMessageId?: string;\n // The most-recently-sent user message id. Unlike currentUserMessageId (which\n // is cleared once a traceId is attached), this is kept across the SSE\n // lifecycle so RESPONSE_TOOL_CALL_CONSENT — fired after run.done — can echo\n // back the message id the bot is waiting on.\n private lastSentMessageId?: string;\n // The in-flight SSE run's subscription. Held so the connection can be aborted locally (unsubscribe →\n // create-sse-observable teardown → AbortController.abort()) on close, on channel switch, and on the\n // legacy stop fallback. Cleared on every terminal (complete / error).\n //\n // NOTE (F-023): a user-initiated stop no longer unsubscribes this. Runs execute in the background on\n // the server, so cutting the stream would only stop *watching* — the stop is requested through\n // `client.suspendChannel()` and declared by this same stream's terminal event.\n private currentRun?: Subscription;\n // Armed when a stop is accepted; fires after FORCE_STOP_TIMEOUT_MS to offer force-stop (F-023 AC7).\n // Cleared on terminal, on suspend failure, and in close() (§1.5).\n private forceStopTimer?: ReturnType<typeof setTimeout>;\n\n private constructor(config: ChannelConfig) {\n if (!config.client) {\n throw new Error('client must be required');\n }\n\n if (!config.customChannelId) {\n throw new Error('customChannelId must be required');\n }\n\n this.client = config.client;\n this.customChannelId = config.customChannelId;\n this.customMessageId = config.customMessageId;\n this.joinRunState = config.runState ?? 'IDLE';\n\n this.isConnecting$ = new BehaviorSubject(false);\n this.runStatusSubject = new BehaviorSubject<RunStatus>(IDLE_RUN_STATUS);\n this.conversation$ = new BehaviorSubject(config.conversation);\n this.channelTitleSubject = new BehaviorSubject<string | null>(config.channelTitle ?? null);\n this.sandboxPhaseSubject = new BehaviorSubject<SandboxPhase>('idle');\n this.launchedSandboxesSubject = new BehaviorSubject<LaunchedSandbox[]>(\n reconcileLaunched(config.launchedSandboxes ?? []),\n );\n this.derivedStores = createDerivedStores(this.conversation$);\n this.tasks$ = this.derivedStores.tasks$;\n this.subagents$ = this.derivedStores.subagents$;\n // Emit only when the title actually changes (ignore duplicate `title.update`s with the same value).\n this.channelTitle$ = this.channelTitleSubject.pipe(distinctUntilChanged());\n // Per-slice: emit only when the phase actually changes, so unrelated high-frequency message\n // deltas never re-notify the HUD (UC-031, same performance rule as the F-013 derived stores).\n this.sandboxPhase$ = this.sandboxPhaseSubject.pipe(distinctUntilChanged());\n // Per-slice: only `applyLaunchedSandboxes` / `dropSandbox` push here (never the conversation stream),\n // so high-frequency message deltas never re-emit the live-sandbox list (UC-032 ALT2).\n this.launchedSandboxes$ = this.launchedSandboxesSubject.pipe(distinctUntilChanged());\n // Per-slice: `RunStatus` is a fresh object on every write, so compare by field — otherwise the\n // states observer would re-notify on every identical write during a run (F-023).\n this.runStatus$ = this.runStatusSubject.pipe(distinctUntilChanged(runStatusEqual));\n this.statesObserver = config.statesObserver;\n }\n\n /** Current Task Check List snapshot (F-013) — for framework-agnostic `getSnapshot()` bridging. */\n public getTasks(): Task[] {\n return this.derivedStores.getTasks();\n }\n\n /** Current Subagent list snapshot (F-013) — for framework-agnostic `getSnapshot()` bridging. */\n public getSubagents(): Subagent[] {\n return this.derivedStores.getSubagents();\n }\n\n /** Current channel title snapshot (F-016) — for framework-agnostic `getSnapshot()` bridging. */\n public getChannelTitle(): string | null {\n return this.channelTitleSubject.value;\n }\n\n /** Current sandbox phase snapshot (F-018) — for framework-agnostic `getSnapshot()` bridging. */\n public getSandboxPhase(): SandboxPhase {\n return this.sandboxPhaseSubject.value;\n }\n\n /** Current live-sandbox snapshot (F-019) — for framework-agnostic `getSnapshot()` bridging. */\n public getLaunchedSandboxes(): LaunchedSandbox[] {\n return this.launchedSandboxesSubject.value;\n }\n\n /** Current run identity + stop lifecycle snapshot (F-023) — for framework-agnostic `getSnapshot()` bridging. */\n public getRunStatus(): RunStatus {\n return this.runStatusSubject.value;\n }\n\n /** Names hinted by `sandbox.launch` but not yet confirmed live by metadata (F-019) — \"starting\" placeholders. */\n public getPendingLaunches(): string[] {\n return this.pendingLaunches;\n }\n\n /**\n * Authoritatively replace the live-sandbox list from a fresh `/channel/metadata` snapshot (F-019). This\n * is the only sanctioned way to change \"who is live\": it reconciles the list and clears any pending\n * launch whose name now appears (promoted to live). metadata (heartbeat-backed) is the sole authority.\n */\n public applyLaunchedSandboxes(list: readonly LaunchedSandbox[]): void {\n const next = reconcileLaunched(list);\n this.pendingLaunches = this.pendingLaunches.filter(name => !next.some(sandbox => sandbox.sandboxName === name));\n this.launchedSandboxesSubject.next(next);\n }\n\n /**\n * Optimistically drop one sandbox (F-019) — e.g. its fs calls keep failing or it is known to be\n * recycled. The next `/channel/metadata` refetch reconciles the authoritative truth.\n */\n public dropSandbox(sandboxName: string): void {\n const current = this.launchedSandboxesSubject.value;\n const next = current.filter(sandbox => sandbox.sandboxName !== sandboxName);\n if (next.length !== current.length) this.launchedSandboxesSubject.next(next);\n }\n\n /**\n * Record an `asgard.sandbox.launch` hint (F-019): the event is not trusted to add a live sandbox (it may\n * not be Ready / heartbeat-visible yet), so the name is held as pending and a metadata refetch is\n * scheduled. `applyLaunchedSandboxes` promotes it to live once metadata confirms.\n */\n public noteSandboxLaunch(sandboxName: string): void {\n if (!this.pendingLaunches.includes(sandboxName)) {\n this.pendingLaunches = [...this.pendingLaunches, sandboxName];\n }\n\n void this.refetchMetadata();\n }\n\n /**\n * Re-fetch `/channel/metadata` and authoritatively apply its `launchedSandboxes` (F-019). Called on a\n * launch hint, and by the react adapter on `visibilitychange` / polling. A client without metadata\n * support is a no-op.\n */\n public async refetchMetadata(): Promise<void> {\n if (!this.client.channelMetadata) return;\n\n const metadata = await this.client.channelMetadata(this.customChannelId);\n if (metadata) this.applyLaunchedSandboxes(metadata.launchedSandboxes);\n }\n\n /** Seed / override the channel title (F-016) — used by the join-restore metadata seed (F-015). */\n public setChannelTitle(title: string | null): void {\n this.channelTitleSubject.next(title);\n }\n\n public static create(config: ChannelConfig): Channel {\n const channel = new Channel(config);\n channel.subscribe();\n\n return channel;\n }\n\n public static async reset(\n config: ChannelConfig,\n payload?: Pick<FetchSsePayload, 'text' | 'payload'>,\n options?: FetchSseOptions,\n onChannelCreated?: (channel: Channel) => void,\n ): Promise<Channel> {\n const channel = new Channel(config);\n\n try {\n channel.subscribe();\n\n // Expose the channel before the RESET_CHANNEL run finishes. The backend\n // can emit a tool_call.consent *during* this run (before run.done), so a\n // reply submitted while the modal is up must reach a non-null channel —\n // otherwise the consent answer is silently dropped.\n onChannelCreated?.(channel);\n\n await channel.resetChannel(payload, options);\n\n return channel;\n } catch (error) {\n channel.close();\n\n throw error;\n }\n }\n\n /**\n * Join an **existing** channel without resetting it (F-015). Seeds the title from `config.channelTitle`\n * (the `GET /channel/metadata` value) at construction, then replays the server transcript via GET\n * `rejoinSse` and holds `isConnecting` until the run reaches a terminal. Never sends `RESET_CHANNEL`,\n * so the channel's history / session / title are preserved — this is the fix for the mount-time\n * \"join an existing channel and wipe its history\" data-loss bug.\n */\n public static async restore(\n config: ChannelConfig,\n options?: FetchSseOptions,\n onChannelCreated?: (channel: Channel) => void,\n ): Promise<Channel> {\n const channel = new Channel(config);\n\n try {\n channel.subscribe();\n\n // Adopt the channel before the replay finishes — a RUNNING restore can stream a tool_call.consent\n // before its terminal, and a reply submitted then must reach a non-null channel (same rationale as\n // reset).\n onChannelCreated?.(channel);\n\n await channel.rejoinChannel(options);\n\n return channel;\n } catch (error) {\n channel.close();\n\n throw error;\n }\n }\n\n private subscribe(): void {\n this.statesSubscription = combineLatest([\n this.isConnecting$,\n this.conversation$,\n this.derivedStores.tasks$,\n this.derivedStores.subagents$,\n this.channelTitle$,\n this.sandboxPhase$,\n this.launchedSandboxes$,\n this.runStatus$,\n ])\n .pipe(\n map(\n ([\n isConnecting,\n conversation,\n tasks,\n subagents,\n channelTitle,\n sandboxPhase,\n launchedSandboxes,\n runStatus,\n ]) => ({\n isConnecting,\n conversation,\n tasks,\n subagents,\n channelTitle,\n sandboxPhase,\n launchedSandboxes,\n runStatus,\n }),\n ),\n )\n .subscribe(this.statesObserver);\n }\n\n /**\n * Resolves payload by executing it if it's a function, otherwise returns as-is.\n */\n private resolvePayload(\n payload: Record<string, unknown> | (() => Record<string, unknown>) | undefined,\n ): Record<string, unknown> | undefined {\n if (typeof payload === 'function') {\n try {\n return payload();\n } catch (error) {\n throw new Error(\n `Failed to resolve payload function: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n return payload;\n }\n\n /**\n * Advance the sandbox phase store from an incoming event's type (F-018). Only sandbox / run-boundary\n * events move it; every other event is a no-op, so `distinctUntilChanged` suppresses re-emission on\n * high-frequency message deltas.\n */\n private updateSandboxPhase(eventType: EventType): void {\n switch (eventType) {\n case EventType.SANDBOX_LAUNCH:\n this.sandboxPhaseSubject.next('launching');\n\n break;\n case EventType.SANDBOX_READY:\n this.sandboxPhaseSubject.next('ready');\n\n break;\n case EventType.INIT:\n case EventType.ERROR:\n this.sandboxPhaseSubject.next('idle');\n\n break;\n default:\n break;\n }\n }\n\n /**\n * The SSE run handlers shared by every run kind (POST send/reset and GET rejoin): fold each frame\n * through the conversation reducer, keep the title store in sync, attach the traceId to the pending\n * user bubble, and settle the run promise (releasing `isConnecting`) on completion / error.\n */\n private buildRunHandlers(\n options: FetchSseOptions | undefined,\n resolve: () => void,\n reject: (err: unknown) => void,\n ): FetchSseOptions {\n return {\n onSseStart: options?.onSseStart,\n onSseMessage: (response: SseResponse<EventType>): void => {\n options?.onSseMessage?.(response);\n\n // F-023 — remember which run this is so a stop can name it (`request_id`), stopping only this\n // run rather than whatever happens to be live when the request lands.\n this.captureRequestId(response.requestId);\n\n // F-016 — the channel title is run-level state, not a message; keep it out of the conversation\n // (it is ephemeral and must survive rejoin replays, which don't carry this event).\n if (response.eventType === EventType.CHANNEL_TITLE_UPDATE) {\n this.channelTitleSubject.next(\n (response as SseResponse<EventType.CHANNEL_TITLE_UPDATE>).fact.channelTitleUpdate.title,\n );\n }\n\n // F-018 — sandbox cold-start phase, derived from the last sandbox event. Run-level (not a\n // conversation message); folds identically on live and on rejoin replay (replay-safe). Reset to\n // idle on run init (fresh run re-arms) and error (collapse); `done` is left to the react latch so\n // the ready-beat / fade-out can finish (happy path: `done` arrives after `ready`).\n this.updateSandboxPhase(response.eventType);\n\n // F-019 — a `sandbox.launch` frame is only a hint: record the name as pending and schedule a\n // metadata refetch (the authority on \"who is live\"). Never merge it into the live list directly.\n if (response.eventType === EventType.SANDBOX_LAUNCH) {\n this.noteSandboxLaunch((response as SseResponse<EventType.SANDBOX_LAUNCH>).fact.sandboxLaunch.sandboxName);\n }\n\n if (this.currentUserMessageId && response.traceId) {\n const messages = new Map(this.conversation$.value.messages);\n const userMessage = messages.get(this.currentUserMessageId);\n\n if (userMessage && userMessage.type === 'user') {\n messages.set(this.currentUserMessageId, {\n ...userMessage,\n traceId: response.traceId,\n });\n this.conversation$.next(new Conversation({ messages }));\n }\n\n this.currentUserMessageId = undefined;\n }\n\n this.conversation$.next(this.conversation$.value.onMessage(response));\n },\n onSseError: (err: unknown): void => {\n options?.onSseError?.(err);\n this.settleRun();\n reject(err);\n },\n onSseCompleted: (): void => {\n options?.onSseCompleted?.();\n this.settleRun();\n resolve();\n },\n };\n }\n\n /**\n * The terminal of a run, whichever way it ended. For a stop in flight this is the moment the backend\n * declares the run actually finished (F-023 AC3) — the same event a normal run ends with — so it is\n * the only place `stopping` is released back to \"waiting for input\".\n */\n private settleRun(): void {\n const wasStopping = this.runStatusSubject.value.stopPhase !== 'idle';\n\n this.clearForceStopTimer();\n this.isConnecting$.next(false);\n this.runStatusSubject.next(IDLE_RUN_STATUS);\n this.currentUserMessageId = undefined;\n this.currentRun = undefined;\n\n // F-020 AC10 / F-023 — a suspended turn is rolled back, so whatever was mid-flight gets no closing\n // frame of its own: a tool-call would spin as `running` forever and a thinking block would stay\n // highlighted as \"Thinking…\". Settle both rather than leaving them advertising activity that stopped.\n if (wasStopping) {\n this.conversation$.next(this.conversation$.value.settleInFlightMessages());\n }\n }\n\n /** Record the backend run id from the first frame that carries one; later frames must not overwrite it. */\n private captureRequestId(requestId: string | undefined): void {\n const current = this.runStatusSubject.value;\n\n if (!requestId || current.requestId || !current.kind) return;\n\n this.runStatusSubject.next({ ...current, requestId });\n }\n\n private clearForceStopTimer(): void {\n if (!this.forceStopTimer) return;\n\n clearTimeout(this.forceStopTimer);\n this.forceStopTimer = undefined;\n }\n\n private fetchSse(kind: RunKind, payload: FetchSsePayload, options?: FetchSseOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n this.isConnecting$.next(true);\n this.runStatusSubject.next({ kind, stopPhase: 'idle' });\n this.currentRun = this.client.fetchSse(payload, this.buildRunHandlers(options, resolve, reject));\n });\n }\n\n /**\n * Join-restore transport (F-015): replay the server transcript via GET `rejoinSse` (F-014) and, if a\n * run is still live, keep listening until its terminal — holding `isConnecting` the whole time so the\n * input stays gated (F-003). A client without GET-replay support settles immediately (nothing to\n * restore), so the input is released rather than stuck.\n */\n private rejoinChannel(options?: FetchSseOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this.client.rejoinSse) {\n resolve();\n\n return;\n }\n\n this.isConnecting$.next(true);\n // Never stoppable either way — a rejoin is not a turn the user just dispatched (F-023 AC8). But\n // the two cases must not look alike on screen (AC9 / UC-046): `restore` is tailing a run the\n // server says is still RUNNING, whereas `replay` is only loading a finished conversation and must\n // not show a run-in-progress indicator.\n this.runStatusSubject.next({\n kind: this.joinRunState === 'RUNNING' ? 'restore' : 'replay',\n stopPhase: 'idle',\n });\n this.currentRun = this.client.rejoinSse(this.customChannelId, this.buildRunHandlers(options, resolve, reject));\n });\n }\n\n private resetChannel(payload?: Pick<FetchSsePayload, 'text' | 'payload'>, options?: FetchSseOptions): Promise<void> {\n return this.fetchSse(\n 'reset',\n {\n action: FetchSseAction.RESET_CHANNEL,\n customChannelId: this.customChannelId,\n customMessageId: this.customMessageId,\n text: payload?.text || '',\n payload: this.resolvePayload(payload?.payload),\n },\n options,\n );\n }\n\n public sendMessage(\n payload: Pick<FetchSsePayload, 'customMessageId' | 'text' | 'payload' | 'blobIds'> & {\n filePreviewUrls?: string[];\n documentNames?: string[];\n },\n options?: FetchSseOptions,\n ): Promise<void> {\n // F-023 AC6 / UC-045 — a channel may only ever hold one run. Runs execute in the background on the\n // server, so dispatching a second would leave two of them writing to the same transcript. Refuse\n // *before* the optimistic user bubble is pushed, so a rejected send leaves no trace in the thread.\n //\n // A rejected promise, not a synchronous throw: this method's contract is `Promise<void>`, and\n // fire-and-forget callers (`sendMessage(...)` inside a DOM handler) must not have it explode\n // underneath them.\n const busyWith = this.runStatusSubject.value.kind;\n\n if (busyWith) return Promise.reject(new ChannelBusyError(busyWith));\n\n const text = payload.text.trim();\n const messageId = payload.customMessageId ?? uuidv4();\n\n this.currentUserMessageId = messageId;\n this.lastSentMessageId = messageId;\n\n this.conversation$.next(\n this.conversation$.value.pushMessage({\n type: 'user',\n messageId,\n text,\n blobIds: payload.blobIds,\n filePreviewUrls: payload.filePreviewUrls,\n documentNames: payload.documentNames,\n time: new Date(),\n }),\n );\n\n return this.fetchSse(\n 'user',\n {\n action: FetchSseAction.NONE,\n customChannelId: this.customChannelId,\n customMessageId: messageId,\n payload: this.resolvePayload(payload?.payload),\n text,\n blobIds: payload?.blobIds,\n },\n options,\n );\n }\n\n public replyToolCallConsents(\n toolCallConsents: ToolCallConsentAnswer[],\n options?: FetchSseOptions,\n payload?: FetchSsePayload['payload'],\n ): Promise<void> {\n this.conversation$.next(this.conversation$.value.clearPendingConsent());\n\n // `user` — answering a consent prompt resumes the user's own turn, so it stays stoppable (F-023 AC8).\n return this.fetchSse(\n 'user',\n {\n action: FetchSseAction.RESPONSE_TOOL_CALL_CONSENT,\n customChannelId: this.customChannelId,\n customMessageId: this.lastSentMessageId ?? this.customMessageId,\n payload: this.resolvePayload(payload),\n text: '',\n toolCallConsents,\n },\n options,\n );\n }\n\n /**\n * Nudge an idle / recycled sandbox back to life (F-021 AC4). Sends an `action=NUDGE` turn with empty\n * text — the backend suppresses `message.*` and writes no transcript, so nothing renders in the\n * conversation; the FE simply waits for the resulting `sandbox.launch`/`ready` frames (and a metadata\n * refetch) to refill `launchedSandboxes$`. An invisible turn, unlike `sendMessage`.\n */\n public nudge(options?: FetchSseOptions): Promise<void> {\n // `nudge` — invisible to the user, so it must never surface a stop control (F-023 AC8).\n return this.fetchSse(\n 'nudge',\n {\n action: FetchSseAction.NUDGE,\n customChannelId: this.customChannelId,\n customMessageId: this.lastSentMessageId ?? this.customMessageId,\n text: '',\n },\n options,\n );\n }\n\n /**\n * User-initiated stop-generation (F-023).\n *\n * Runs execute in the **background on the server**, so aborting the local SSE connection would only\n * stop *watching*: the agent would keep running, keep spending tokens and keep writing the\n * transcript. Instead this asks the backend to suspend the run and **keeps the stream open**, because\n * the stop is declared by that stream's terminal event — the same event a normal run ends with.\n *\n * The call is therefore asynchronous in two stages:\n * 1. resolving here means the backend **accepted** the request, not that the run has stopped;\n * 2. `isConnecting` / `runStatus` only return to idle when the terminal event arrives (AC3).\n *\n * While waiting, `runStatus.stopPhase` is `stopping` and every send entrance must stay gated (AC5).\n * If the terminal event has not arrived within {@link FORCE_STOP_TIMEOUT_MS} the phase becomes\n * `force-stoppable`, and calling again with `{ force: true }` tells the backend to give up on the run\n * rather than let it wind down (AC7).\n *\n * No-ops (resolving) when nothing is running, when the run is not the user's own — a `RESET_CHANNEL`\n * welcome, a transcript replay or an invisible nudge must never be stopped (AC8) — or when a stop is\n * already pending and this is not a force.\n *\n * **Rejects** when the suspend request fails (network error, or a non-2xx that is not `404`). The\n * stop phase is rolled back to `idle` first, so the caller can retry and the UI can never be stuck in\n * `stopping` (AC4).\n *\n * A client that predates the suspend endpoint (a custom `IAsgardServiceClient`) falls back to the old\n * local-abort behavior, so existing integrations keep working.\n */\n public async stopGeneration(options?: StopGenerationOptions): Promise<void> {\n const status = this.runStatusSubject.value;\n\n if (!this.currentRun || status.kind !== 'user') return;\n\n // A second press while stopping does nothing; only an explicit force re-issues the request (AC2).\n if (status.stopPhase !== 'idle' && !options?.force) return;\n\n if (!this.client.suspendChannel) {\n this.abortConnection();\n\n return;\n }\n\n this.clearForceStopTimer();\n this.runStatusSubject.next({ ...status, stopPhase: 'stopping' });\n\n try {\n await this.client.suspendChannel(this.customChannelId, {\n requestId: status.requestId,\n force: options?.force,\n });\n } catch (error) {\n // AC4 — never strand the UI in `stopping`; hand the stop control back so the user can retry.\n this.clearForceStopTimer();\n this.runStatusSubject.next({ ...this.runStatusSubject.value, stopPhase: 'idle' });\n\n throw error;\n }\n\n // Accepted. The stream stays connected; `settleRun()` releases the input when the terminal arrives.\n this.armForceStopTimer();\n }\n\n /**\n * Escalate to `force-stoppable` once an accepted stop has waited too long for the terminal event\n * (F-023 AC7 / UC-044) — the escape hatch for an agent that never winds down. Re-armed on a force\n * retry, so a second timeout offers the same way out again.\n */\n private armForceStopTimer(): void {\n this.clearForceStopTimer();\n\n this.forceStopTimer = setTimeout(() => {\n this.forceStopTimer = undefined;\n\n const current = this.runStatusSubject.value;\n\n if (current.stopPhase !== 'stopping') return;\n\n this.runStatusSubject.next({ ...current, stopPhase: 'force-stoppable' });\n }, FORCE_STOP_TIMEOUT_MS);\n }\n\n /**\n * Cut the local SSE connection without telling the backend. This is *not* stop-generation (see\n * {@link stopGeneration}) — the server-side run keeps going. Used when there is nothing to stop\n * remotely: a client without suspend support, and channel teardown.\n *\n * The deliberate abort must never be read as a transport failure — `create-sse-observable` marks the\n * stream disposed so no reconnect is attempted (F-023 AC10).\n */\n private abortConnection(): void {\n if (!this.currentRun) return;\n\n this.currentRun.unsubscribe();\n this.clearForceStopTimer();\n this.currentRun = undefined;\n this.isConnecting$.next(false);\n this.runStatusSubject.next(IDLE_RUN_STATUS);\n this.currentUserMessageId = undefined;\n // F-020 AC10: settle whatever is still in flight — no closing frame will arrive now that the run is\n // aborted, so a tool-call must not linger as `running` nor a thinking block as \"Thinking…\".\n this.conversation$.next(this.conversation$.value.settleInFlightMessages());\n }\n\n public close(): void {\n this.currentRun?.unsubscribe();\n this.currentRun = undefined;\n this.clearForceStopTimer();\n this.isConnecting$.complete();\n this.runStatusSubject.complete();\n this.conversation$.complete();\n this.channelTitleSubject.complete();\n this.sandboxPhaseSubject.complete();\n this.launchedSandboxesSubject.complete();\n this.derivedStores.teardown();\n this.statesSubscription?.unsubscribe();\n }\n}\n","// F-020 — the typed intent a `sandbox://` custom URI resolves to. The host runs the side effect from this\n// (open-browser → one-time browser URL; open-file → File Explorer preview); it is never a browsable URL.\nexport type SandboxUriIntent =\n | { kind: 'open-browser'; sandboxName: string }\n | { kind: 'open-file'; sandboxName: string; absolutePath: string };\n\n/**\n * Parse `sandbox://<name>/<action>?<query>` into a typed {@link SandboxUriIntent} (F-020 / UC-036).\n * Returns `null` for an unknown action, a missing `absolute_path`, or a non-`sandbox://` / malformed URI —\n * the host must then treat it as a plain card and never `window.open()` the raw scheme.\n *\n * A hand-written regex (not `new URL()`) is used deliberately: absolute paths carry many `/`, and a\n * non-special scheme's host casing is unreliable under the WHATWG URL parser; the query is still handed to\n * `URLSearchParams` (which decodes).\n */\nexport function resolveSandboxUri(uri: string): SandboxUriIntent | null {\n const match = /^sandbox:\\/\\/([^/]+)\\/([^?#]+)(?:\\?([^#]*))?/.exec(uri.trim());\n if (!match) return null;\n\n const sandboxName = decodeURIComponent(match[1]);\n const action = match[2];\n const params = new URLSearchParams(match[3] ?? '');\n\n if (action === 'open-browser') return { kind: 'open-browser', sandboxName };\n\n if (action === 'open-file') {\n const absolutePath = params.get('absolute_path'); // URLSearchParams already decodes\n if (!absolutePath) return null;\n\n return { kind: 'open-file', sandboxName, absolutePath };\n }\n\n return null; // unknown action: do not guess, hand back to the host\n}\n"],"names":["HttpError","status","statusText","body","isHttpError","error","ChannelBusyError","runKind","isChannelBusyError","FetchSseAction","EventType","ToolCallConsentResult","MessageTemplateType","getBytes","stream","onChunk","reader","result","getLines","onLine","buffer","position","fieldLength","discardTrailingNewline","arr","concat","bufLength","lineStart","lineEnd","getMessages","onId","onRetry","onMessage","message","newMessage","decoder","line","field","valueOffset","value","retry","a","b","res","__rest","s","e","t","p","i","EventStreamContentType","DefaultRetryInterval","LastEventId","fetchEventSource","input","_a","inputSignal","inputHeaders","inputOnOpen","onmessage","onclose","onerror","openWhenHidden","inputFetch","rest","resolve","reject","headers","curRequestController","onVisibilityChange","create","retryInterval","retryTimer","dispose","fetch","onopen","defaultOnOpen","response","id","err","interval","innerErr","contentType","extendStatics","d","__extends","__","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","step","rejected","__generator","_","f","y","g","verb","n","v","op","__values","o","m","__read","r","ar","__spreadArray","to","from","pack","l","__await","__asyncGenerator","q","awaitReturn","resume","settle","fulfill","__asyncValues","isFunction","createErrorClass","createImpl","_super","instance","ctorFunc","UnsubscriptionError","errors","arrRemove","item","index","Subscription","initialTeardown","e_1","e_2","_b","_parentage","_parentage_1","_parentage_1_1","parent_1","e_1_1","initialFinalizer","_finalizers","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","teardown","parent","empty","EMPTY_SUBSCRIPTION","isSubscription","config","timeoutProvider","handler","timeout","args","_i","handle","reportUnhandledError","noop","errorContext","cb","Subscriber","destination","_this","EMPTY_OBSERVER","next","complete","SafeSubscriber","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","defaultErrorHandler","observable","identity","x","pipeFromArray","fns","prev","fn","Observable","subscribe","operator","subscriber","isSubscriber","source","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","isObserver","hasLift","operate","init","liftedSource","createOperatorSubscriber","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","subject","AnonymousSubject","_c","observer","observers","hasError","isStopped","thrownError","BehaviorSubject","_value","subscription","dateTimestampProvider","Action","scheduler","work","state","delay","intervalProvider","AsyncAction","_id","_scheduler","_delay","errored","errorValue","actions","Scheduler","schedulerActionCtor","now","AsyncScheduler","SchedulerAction","action","asyncScheduler","async","EMPTY","isScheduler","last","popResultSelector","popScheduler","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","obj","createInvalidObservableTypeError","getSymbolIterator","iterator","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","done","isReadableStreamLike","innerFrom","fromInteropObservable","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","obs","array","promise","iterable","iterable_1","iterable_1_1","asyncIterable","process","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleObservable","schedulePromise","scheduleArray","scheduleIterable","scheduleAsyncIterable","scheduleReadableStreamLike","scheduled","of","isValidDate","map","project","isArray","callOrApply","mapOneOrManyArgs","getPrototypeOf","objectProto","getKeys","argsArgArrayOrObject","first_1","isPOJO","keys","key","createObject","values","combineLatest","resultSelector","observables","combineLatestInit","valueTransform","maybeSchedule","length","active","remainingFirstValues","_loop_1","hasFirstValue","execute","mergeInternals","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","mergeMap","ii","timer","dueTime","intervalOrScheduler","intervalDuration","due","concatMap","take","count","seen","mapTo","delayWhen","delayDurationSelector","subscriptionDelay","duration","distinctUntilChanged","comparator","keySelector","defaultCompare","previousKey","first","currentKey","finalize","callback","takeUntil","notifier","createSseObservable","options","endpoint","apiKey","payload","debugMode","customHeaders","method","controller","currentTraceId","hasCursor","disposed","url","esm","data","EventEmitter","event","listener","AsgardServiceClient","baseEndpoint","customChannelId","json","sandbox","file","blobEndpoint","formData","relativePath","query","blob","filename","sandboxName","openURL","path","content","totalBytesHeader","form","k","src","dst","byteToHex","unsafeStringify","offset","getRandomValues","rnds8","rng","native","_v4","buf","rnds","v4","Conversation","messages","pendingConsent","changed","currentMessage","currentBot","thinking","currentThinking","userMessage","messageId","uuidv4","toolCallStart","toolCallKey","toolCallMessage","toolCallComplete","existingMessage","updatedMessage","consent","start","TASK_TOOLS","isTaskTool","call","asRecord","asString","reduceTaskEvents","events","order","byId","parameter","sidecar","task","statusChange","isAgentTool","isSubagentChildTool","parentToolUseId","reduceSubagents","meta","tools","ensure","tool","str","conversationToSubagentEvents","toolUseId","deriveTasks","conversation","deriveSubagents","tasksEqual","other","toolsEqual","subagentsEqual","subagent","createDerivedStores","conversation$","tasks$","subagents$","reconcileLaunched","metadata","byName","IDLE_RUN_STATUS","FORCE_STOP_TIMEOUT_MS","runStatusEqual","Channel","list","name","current","title","channel","onChannelCreated","isConnecting","tasks","subagents","channelTitle","sandboxPhase","launchedSandboxes","runStatus","eventType","wasStopping","requestId","kind","busyWith","text","toolCallConsents","resolveSandboxUri","uri","match","params","absolutePath"],"mappings":"2OAAO,MAAMA,UAAkB,KAAM,CACnB,OACA,WAQA,KAKhB,YAAYC,EAAgBC,EAAoBC,EAAgB,CAC9D,MAAM,QAAQF,CAAM,KAAKC,CAAU,EAAE,EACrC,KAAK,KAAO,YACZ,KAAK,OAASD,EACd,KAAK,WAAaC,EAClB,KAAK,KAAOC,CACd,CACF,CAEO,SAASC,GAAYC,EAAoC,CAC9D,OAAOA,aAAiBL,CAC1B,CCjBO,MAAMM,UAAyB,KAAM,CAE1B,QAEhB,YAAYC,EAAkB,CAC5B,MAAM,kCAAkCA,CAAO,qCAAqC,EACpF,KAAK,KAAO,mBACZ,KAAK,QAAUA,CACjB,CACF,CAEO,SAASC,GAAmBH,EAA2C,CAC5E,OAAOA,aAAiBC,CAC1B,CCtBO,IAAKG,GAAAA,IACVA,EAAA,cAAgB,gBAChBA,EAAA,KAAO,OACPA,EAAA,2BAA6B,6BAC7BA,EAAA,MAAQ,QAJEA,IAAAA,GAAA,CAAA,CAAA,EAOAC,GAAAA,IACVA,EAAA,KAAO,kBACPA,EAAA,QAAU,iBACVA,EAAA,cAAgB,uBAChBA,EAAA,iBAAmB,0BACnBA,EAAA,QAAU,iBACVA,EAAA,cAAgB,uBAChBA,EAAA,cAAgB,uBAChBA,EAAA,iBAAmB,0BAEnBA,EAAA,aAAe,sBAGfA,EAAA,uBAAyB,gCACzBA,EAAA,uBAAyB,gCACzBA,EAAA,0BAA4B,mCAC5BA,EAAA,UAAY,mBACZA,EAAA,gBAAkB,yBAClBA,EAAA,mBAAqB,4BACrBA,EAAA,kBAAoB,2BAIpBA,EAAA,eAAiB,wBACjBA,EAAA,kBAAoB,2BAEpBA,EAAA,qBAAuB,8BAIvBA,EAAA,eAAiB,wBACjBA,EAAA,cAAgB,uBAChBA,EAAA,KAAO,kBACPA,EAAA,MAAQ,mBAjCEA,IAAAA,GAAA,CAAA,CAAA,EAoCAC,IAAAA,IACVA,EAAA,WAAa,aACbA,EAAA,aAAe,eACfA,EAAA,UAAY,YAHFA,IAAAA,IAAA,CAAA,CAAA,EAMAC,IAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,WAAa,aAXHA,IAAAA,IAAA,CAAA,CAAA,ECjDL,eAAeC,GAASC,EAAQC,EAAS,CAC5C,MAAMC,EAASF,EAAO,YACtB,IAAIG,EACJ,KAAO,EAAEA,EAAS,MAAMD,EAAO,KAAI,GAAI,MACnCD,EAAQE,EAAO,KAAK,CAE5B,CACO,SAASC,GAASC,EAAQ,CAC7B,IAAIC,EACAC,EACAC,EACAC,EAAyB,GAC7B,OAAO,SAAiBC,EAAK,CACrBJ,IAAW,QACXA,EAASI,EACTH,EAAW,EACXC,EAAc,IAGdF,EAASK,GAAOL,EAAQI,CAAG,EAE/B,MAAME,EAAYN,EAAO,OACzB,IAAIO,EAAY,EAChB,KAAON,EAAWK,GAAW,CACrBH,IACIH,EAAOC,CAAQ,IAAM,KACrBM,EAAY,EAAEN,GAElBE,EAAyB,IAE7B,IAAIK,EAAU,GACd,KAAOP,EAAWK,GAAaE,IAAY,GAAI,EAAEP,EAC7C,OAAQD,EAAOC,CAAQ,EAAC,CACpB,IAAK,IACGC,IAAgB,KAChBA,EAAcD,EAAWM,GAE7B,MACJ,IAAK,IACDJ,EAAyB,GAC7B,IAAK,IACDK,EAAUP,EACV,KACxB,CAEY,GAAIO,IAAY,GACZ,MAEJT,EAAOC,EAAO,SAASO,EAAWC,CAAO,EAAGN,CAAW,EACvDK,EAAYN,EACZC,EAAc,EAClB,CACIK,IAAcD,EACdN,EAAS,OAEJO,IAAc,IACnBP,EAASA,EAAO,SAASO,CAAS,EAClCN,GAAYM,EAEpB,CACJ,CACO,SAASE,GAAYC,EAAMC,EAASC,EAAW,CAClD,IAAIC,EAAUC,KACd,MAAMC,EAAU,IAAI,YACpB,OAAO,SAAgBC,EAAMd,EAAa,CACtC,GAAIc,EAAK,SAAW,EACsCJ,IAAUC,CAAO,EACvEA,EAAUC,GAAU,UAEfZ,EAAc,EAAG,CACtB,MAAMe,EAAQF,EAAQ,OAAOC,EAAK,SAAS,EAAGd,CAAW,CAAC,EACpDgB,EAAchB,GAAec,EAAKd,EAAc,CAAC,IAAM,GAAK,EAAI,GAChEiB,EAAQJ,EAAQ,OAAOC,EAAK,SAASE,CAAW,CAAC,EACvD,OAAQD,EAAK,CACT,IAAK,OACDJ,EAAQ,KAAOA,EAAQ,KACjBA,EAAQ,KAAO;AAAA,EAAOM,EACtBA,EACN,MACJ,IAAK,QACDN,EAAQ,MAAQM,EAChB,MACJ,IAAK,KACDT,EAAKG,EAAQ,GAAKM,CAAK,EACvB,MACJ,IAAK,QACD,MAAMC,EAAQ,SAASD,EAAO,EAAE,EAC3B,MAAMC,CAAK,GACZT,EAAQE,EAAQ,MAAQO,CAAK,EAEjC,KACpB,CACQ,CACJ,CACJ,CACA,SAASf,GAAOgB,EAAGC,EAAG,CAClB,MAAMC,EAAM,IAAI,WAAWF,EAAE,OAASC,EAAE,MAAM,EAC9C,OAAAC,EAAI,IAAIF,CAAC,EACTE,EAAI,IAAID,EAAGD,EAAE,MAAM,EACZE,CACX,CACA,SAAST,IAAa,CAClB,MAAO,CACH,KAAM,GACN,MAAO,GACP,GAAI,GACJ,MAAO,MACf,CACA,CC5GA,IAAIU,GAAkC,SAAUC,EAAGC,EAAG,CAClD,IAAIC,EAAI,CAAA,EACR,QAASC,KAAKH,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGG,CAAC,GAAKF,EAAE,QAAQE,CAAC,EAAI,IAC9ED,EAAEC,CAAC,EAAIH,EAAEG,CAAC,GACd,GAAIH,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAASI,EAAI,EAAGD,EAAI,OAAO,sBAAsBH,CAAC,EAAGI,EAAID,EAAE,OAAQC,IAC3DH,EAAE,QAAQE,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKJ,EAAGG,EAAEC,CAAC,CAAC,IACzEF,EAAEC,EAAEC,CAAC,CAAC,EAAIJ,EAAEG,EAAEC,CAAC,CAAC,GAE5B,OAAOF,CACX,EAEO,MAAMG,EAAyB,oBAChCC,GAAuB,IACvBC,GAAc,gBACb,SAASC,GAAiBC,EAAOC,EAAI,CACxC,GAAI,CAAE,OAAQC,EAAa,QAASC,EAAc,OAAQC,EAAa,UAAAC,EAAW,QAAAC,EAAS,QAAAC,EAAS,eAAAC,EAAgB,MAAOC,CAAU,EAAKR,EAAIS,EAAOpB,GAAOW,EAAI,CAAC,SAAU,UAAW,SAAU,YAAa,UAAW,UAAW,iBAAkB,OAAO,CAAC,EAC7P,OAAO,IAAI,QAAQ,CAACU,EAASC,IAAW,CACpC,MAAMC,EAAU,OAAO,OAAO,CAAA,EAAIV,CAAY,EACzCU,EAAQ,SACTA,EAAQ,OAASjB,GAErB,IAAIkB,EACJ,SAASC,GAAqB,CAC1BD,EAAqB,MAAK,EACrB,SAAS,QACVE,IAER,CACKR,GACD,SAAS,iBAAiB,mBAAoBO,CAAkB,EAEpE,IAAIE,EAAgBpB,GAChBqB,EAAa,EACjB,SAASC,GAAU,CACf,SAAS,oBAAoB,mBAAoBJ,CAAkB,EACnE,OAAO,aAAaG,CAAU,EAC9BJ,EAAqB,MAAK,CAC9B,CAC0DZ,GAAY,iBAAiB,QAAS,IAAM,CAClGiB,IACAR,GACJ,CAAC,EACD,MAAMS,GAAQX,GAA4D,OAAO,MAC3EY,GAASjB,GAA+DkB,GAC9E,eAAeN,IAAS,CACpB,IAAIf,GACJa,EAAuB,IAAI,gBAC3B,GAAI,CACA,MAAMS,EAAW,MAAMH,GAAMpB,EAAO,OAAO,OAAO,OAAO,OAAO,CAAA,EAAIU,CAAI,EAAG,CAAE,QAAAG,EAAS,OAAQC,EAAqB,MAAM,CAAE,CAAC,EAC5H,MAAMO,GAAOE,CAAQ,EACrB,MAAMhE,GAASgE,EAAS,KAAM3D,GAASW,GAAYiD,GAAM,CACjDA,EACAX,EAAQf,EAAW,EAAI0B,EAGvB,OAAOX,EAAQf,EAAW,CAElC,EAAGZ,GAAS,CACR+B,EAAgB/B,CACpB,EAAGmB,CAAS,CAAC,CAAC,EACoCC,MAClDa,IACAR,GACJ,OACOc,EAAK,CACR,GAAI,CAACX,EAAqB,OAAO,QAC7B,GAAI,CACA,MAAMY,GAAYzB,GAAuDM,IAAQkB,CAAG,KAAO,MAAQxB,KAAO,OAASA,GAAKgB,EACxH,OAAO,aAAaC,CAAU,EAC9BA,EAAa,OAAO,WAAWF,GAAQU,CAAQ,CACnD,OACOC,EAAU,CACbR,IACAP,EAAOe,CAAQ,CACnB,CAER,CACJ,CACAX,IACJ,CAAC,CACL,CACA,SAASM,GAAcC,EAAU,CAC7B,MAAMK,EAAcL,EAAS,QAAQ,IAAI,cAAc,EACvD,GAAI,CAA4DK,GAAY,WAAWhC,CAAsB,EACzG,MAAM,IAAI,MAAM,+BAA+BA,CAAsB,aAAagC,CAAW,EAAE,CAEvG,CCvEA,IAAIC,EAAgB,SAASC,EAAG1C,EAAG,CACjC,OAAAyC,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAA,aAAgB,OAAS,SAAUC,EAAG1C,EAAG,CAAE0C,EAAE,UAAY1C,CAAG,GAC1E,SAAU0C,EAAG1C,EAAG,CAAE,QAASM,KAAKN,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGM,CAAC,IAAGoC,EAAEpC,CAAC,EAAIN,EAAEM,CAAC,EAAG,EAC7FmC,EAAcC,EAAG1C,CAAC,CAC3B,EAEO,SAAS2C,EAAUD,EAAG1C,EAAG,CAC9B,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FyC,EAAcC,EAAG1C,CAAC,EAClB,SAAS4C,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAY1C,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAK4C,EAAG,UAAY5C,EAAE,UAAW,IAAI4C,EACjF,CAqFO,SAASC,GAAUC,EAASC,EAAYC,EAAGC,EAAW,CAC3D,SAASC,EAAMrD,EAAO,CAAE,OAAOA,aAAiBmD,EAAInD,EAAQ,IAAImD,EAAE,SAAUzB,EAAS,CAAEA,EAAQ1B,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKmD,IAAMA,EAAI,UAAU,SAAUzB,EAASC,EAAQ,CACvD,SAAS2B,EAAUtD,EAAO,CAAE,GAAI,CAAEuD,EAAKH,EAAU,KAAKpD,CAAK,CAAC,CAAG,OAASO,EAAG,CAAEoB,EAAOpB,CAAC,CAAG,CAAE,CAC1F,SAASiD,EAASxD,EAAO,CAAE,GAAI,CAAEuD,EAAKH,EAAU,MAASpD,CAAK,CAAC,CAAG,OAASO,EAAG,CAAEoB,EAAOpB,CAAC,CAAG,CAAE,CAC7F,SAASgD,EAAK7E,EAAQ,CAAEA,EAAO,KAAOgD,EAAQhD,EAAO,KAAK,EAAI2E,EAAM3E,EAAO,KAAK,EAAE,KAAK4E,EAAWE,CAAQ,CAAG,CAC7GD,GAAMH,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAA,CAAE,GAAG,MAAM,CACxE,CAAC,CACH,CAEO,SAASO,GAAYR,EAASrF,EAAM,CACzC,IAAI8F,EAAI,CAAE,MAAO,EAAG,KAAM,UAAW,CAAE,GAAIlD,EAAE,CAAC,EAAI,EAAG,MAAMA,EAAE,CAAC,EAAG,OAAOA,EAAE,CAAC,CAAG,EAAG,KAAM,CAAA,EAAI,IAAK,CAAA,CAAE,EAAImD,EAAGC,EAAGpD,EAAGqD,EAAI,OAAO,QAAQ,OAAO,UAAa,WAAa,SAAW,QAAQ,SAAS,EAC/L,OAAOA,EAAE,KAAOC,EAAK,CAAC,EAAGD,EAAE,MAAWC,EAAK,CAAC,EAAGD,EAAE,OAAYC,EAAK,CAAC,EAAG,OAAO,QAAW,aAAeD,EAAE,OAAO,QAAQ,EAAI,UAAW,CAAE,OAAO,IAAM,GAAIA,EAC1J,SAASC,EAAKC,EAAG,CAAE,OAAO,SAAUC,EAAG,CAAE,OAAOT,EAAK,CAACQ,EAAGC,CAAC,CAAC,CAAG,CAAG,CACjE,SAAST,EAAKU,EAAI,CACd,GAAIN,EAAG,MAAM,IAAI,UAAU,iCAAiC,EAC5D,KAAOE,IAAMA,EAAI,EAAGI,EAAG,CAAC,IAAMP,EAAI,IAAKA,GAAG,GAAI,CAC1C,GAAIC,EAAI,EAAGC,IAAMpD,EAAIyD,EAAG,CAAC,EAAI,EAAIL,EAAE,OAAYK,EAAG,CAAC,EAAIL,EAAE,SAAcpD,EAAIoD,EAAE,SAAcpD,EAAE,KAAKoD,CAAC,EAAG,GAAKA,EAAE,OAAS,EAAEpD,EAAIA,EAAE,KAAKoD,EAAGK,EAAG,CAAC,CAAC,GAAG,KAAM,OAAOzD,EAE3J,OADIoD,EAAI,EAAGpD,IAAGyD,EAAK,CAACA,EAAG,CAAC,EAAI,EAAGzD,EAAE,KAAK,GAC9ByD,EAAG,CAAC,EAAC,CACT,IAAK,GAAG,IAAK,GAAGzD,EAAIyD,EAAI,MACxB,IAAK,GAAG,OAAAP,EAAE,QAAgB,CAAE,MAAOO,EAAG,CAAC,EAAG,KAAM,EAAK,EACrD,IAAK,GAAGP,EAAE,QAASE,EAAIK,EAAG,CAAC,EAAGA,EAAK,CAAC,CAAC,EAAG,SACxC,IAAK,GAAGA,EAAKP,EAAE,IAAI,MAAOA,EAAE,KAAK,IAAG,EAAI,SACxC,QACI,GAAMlD,EAAIkD,EAAE,KAAM,EAAAlD,EAAIA,EAAE,OAAS,GAAKA,EAAEA,EAAE,OAAS,CAAC,KAAOyD,EAAG,CAAC,IAAM,GAAKA,EAAG,CAAC,IAAM,GAAI,CAAEP,EAAI,EAAG,QAAU,CAC3G,GAAIO,EAAG,CAAC,IAAM,IAAM,CAACzD,GAAMyD,EAAG,CAAC,EAAIzD,EAAE,CAAC,GAAKyD,EAAG,CAAC,EAAIzD,EAAE,CAAC,GAAK,CAAEkD,EAAE,MAAQO,EAAG,CAAC,EAAG,KAAO,CACrF,GAAIA,EAAG,CAAC,IAAM,GAAKP,EAAE,MAAQlD,EAAE,CAAC,EAAG,CAAEkD,EAAE,MAAQlD,EAAE,CAAC,EAAGA,EAAIyD,EAAI,KAAO,CACpE,GAAIzD,GAAKkD,EAAE,MAAQlD,EAAE,CAAC,EAAG,CAAEkD,EAAE,MAAQlD,EAAE,CAAC,EAAGkD,EAAE,IAAI,KAAKO,CAAE,EAAG,KAAO,CAC9DzD,EAAE,CAAC,GAAGkD,EAAE,IAAI,IAAG,EACnBA,EAAE,KAAK,IAAG,EAAI,QAChC,CACUO,EAAKrG,EAAK,KAAKqF,EAASS,CAAC,CAC7B,OAASnD,EAAG,CAAE0D,EAAK,CAAC,EAAG1D,CAAC,EAAGqD,EAAI,CAAG,QAAC,CAAWD,EAAInD,EAAI,CAAG,CACzD,GAAIyD,EAAG,CAAC,EAAI,EAAG,MAAMA,EAAG,CAAC,EAAG,MAAO,CAAE,MAAOA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAI,OAAQ,KAAM,EAAI,CAClF,CACF,CAkBO,SAASC,EAASC,EAAG,CAC1B,IAAI7D,EAAI,OAAO,QAAW,YAAc,OAAO,SAAU8D,EAAI9D,GAAK6D,EAAE7D,CAAC,EAAGI,EAAI,EAC5E,GAAI0D,EAAG,OAAOA,EAAE,KAAKD,CAAC,EACtB,GAAIA,GAAK,OAAOA,EAAE,QAAW,SAAU,MAAO,CAC1C,KAAM,UAAY,CACd,OAAIA,GAAKzD,GAAKyD,EAAE,SAAQA,EAAI,QACrB,CAAE,MAAOA,GAAKA,EAAEzD,GAAG,EAAG,KAAM,CAACyD,CAAC,CACzC,CACN,EACE,MAAM,IAAI,UAAU7D,EAAI,0BAA4B,iCAAiC,CACvF,CAEO,SAAS+D,EAAOF,EAAGJ,EAAG,CAC3B,IAAIK,EAAI,OAAO,QAAW,YAAcD,EAAE,OAAO,QAAQ,EACzD,GAAI,CAACC,EAAG,OAAOD,EACf,IAAIzD,EAAI0D,EAAE,KAAKD,CAAC,EAAGG,EAAGC,EAAK,CAAA,EAAIhE,EAC/B,GAAI,CACA,MAAQwD,IAAM,QAAUA,KAAM,IAAM,EAAEO,EAAI5D,EAAE,KAAI,GAAI,MAAM6D,EAAG,KAAKD,EAAE,KAAK,CAC7E,OACOxG,EAAO,CAAEyC,EAAI,CAAE,MAAOzC,CAAK,CAAI,QACxC,CACM,GAAI,CACIwG,GAAK,CAACA,EAAE,OAASF,EAAI1D,EAAE,SAAY0D,EAAE,KAAK1D,CAAC,CACnD,QACN,CAAgB,GAAIH,EAAG,MAAMA,EAAE,KAAO,CACpC,CACA,OAAOgE,CACT,CAkBO,SAASC,EAAcC,EAAIC,EAAMC,EAAM,CAC5C,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAASjE,EAAI,EAAGkE,EAAIF,EAAK,OAAQH,EAAI7D,EAAIkE,EAAGlE,KACxE6D,GAAM,EAAE7D,KAAKgE,MACRH,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKG,EAAM,EAAGhE,CAAC,GACnD6D,EAAG7D,CAAC,EAAIgE,EAAKhE,CAAC,GAGtB,OAAO+D,EAAG,OAAOF,GAAM,MAAM,UAAU,MAAM,KAAKG,CAAI,CAAC,CACzD,CAEO,SAASG,EAAQb,EAAG,CACzB,OAAO,gBAAgBa,GAAW,KAAK,EAAIb,EAAG,MAAQ,IAAIa,EAAQb,CAAC,CACrE,CAEO,SAASc,GAAiB7B,EAASC,EAAYE,EAAW,CAC/D,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAIS,EAAIT,EAAU,MAAMH,EAASC,GAAc,EAAE,EAAGxC,EAAGqE,EAAI,CAAA,EAC3D,OAAOrE,EAAI,OAAO,QAAQ,OAAO,eAAkB,WAAa,cAAgB,QAAQ,SAAS,EAAGoD,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,SAAUkB,CAAW,EAAGtE,EAAE,OAAO,aAAa,EAAI,UAAY,CAAE,OAAO,IAAM,EAAGA,EACtN,SAASsE,EAAYrB,EAAG,CAAE,OAAO,SAAUK,EAAG,CAAE,OAAO,QAAQ,QAAQA,CAAC,EAAE,KAAKL,EAAGhC,CAAM,CAAG,CAAG,CAC9F,SAASmC,EAAKC,EAAGJ,EAAG,CAAME,EAAEE,CAAC,IAAKrD,EAAEqD,CAAC,EAAI,SAAUC,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAU9D,EAAGC,EAAG,CAAE4E,EAAE,KAAK,CAAChB,EAAGC,EAAG9D,EAAGC,CAAC,CAAC,EAAI,GAAK8E,EAAOlB,EAAGC,CAAC,CAAG,CAAC,CAAG,EAAOL,IAAGjD,EAAEqD,CAAC,EAAIJ,EAAEjD,EAAEqD,CAAC,CAAC,GAAK,CACvK,SAASkB,EAAOlB,EAAGC,EAAG,CAAE,GAAI,CAAET,EAAKM,EAAEE,CAAC,EAAEC,CAAC,CAAC,CAAG,OAASzD,EAAG,CAAE2E,EAAOH,EAAE,CAAC,EAAE,CAAC,EAAGxE,CAAC,CAAG,CAAE,CACjF,SAASgD,EAAKe,EAAG,CAAEA,EAAE,iBAAiBO,EAAU,QAAQ,QAAQP,EAAE,MAAM,CAAC,EAAE,KAAKa,EAASxD,CAAM,EAAIuD,EAAOH,EAAE,CAAC,EAAE,CAAC,EAAGT,CAAC,CAAG,CACvH,SAASa,EAAQnF,EAAO,CAAEiF,EAAO,OAAQjF,CAAK,CAAG,CACjD,SAAS2B,EAAO3B,EAAO,CAAEiF,EAAO,QAASjF,CAAK,CAAG,CACjD,SAASkF,EAAOvB,EAAGK,EAAG,CAAML,EAAEK,CAAC,EAAGe,EAAE,MAAK,EAAIA,EAAE,QAAQE,EAAOF,EAAE,CAAC,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAG,CACnF,CAQO,SAASK,GAAcjB,EAAG,CAC/B,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAIC,EAAID,EAAE,OAAO,aAAa,EAAGzD,EACjC,OAAO0D,EAAIA,EAAE,KAAKD,CAAC,GAAKA,EAAI,OAAOD,GAAa,WAAaA,EAASC,CAAC,EAAIA,EAAE,OAAO,QAAQ,EAAC,EAAIzD,EAAI,CAAA,EAAIoD,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,QAAQ,EAAGpD,EAAE,OAAO,aAAa,EAAI,UAAY,CAAE,OAAO,IAAM,EAAGA,GAC9M,SAASoD,EAAKC,EAAG,CAAErD,EAAEqD,CAAC,EAAII,EAAEJ,CAAC,GAAK,SAAUC,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAUtC,EAASC,EAAQ,CAAEqC,EAAIG,EAAEJ,CAAC,EAAEC,CAAC,EAAGkB,EAAOxD,EAASC,EAAQqC,EAAE,KAAMA,EAAE,KAAK,CAAG,CAAC,CAAG,CAAG,CAC/J,SAASkB,EAAOxD,EAASC,EAAQkB,EAAGmB,EAAG,CAAE,QAAQ,QAAQA,CAAC,EAAE,KAAK,SAASA,EAAG,CAAEtC,EAAQ,CAAE,MAAOsC,EAAG,KAAMnB,CAAC,CAAE,CAAG,EAAGlB,CAAM,CAAG,CAC7H,CA2EuB,OAAO,iBAAoB,YAAa,gBCvUxD,SAAS0D,EAAWrF,EAAO,CAC9B,OAAO,OAAOA,GAAU,UAC5B,CCFO,SAASsF,GAAiBC,EAAY,CACzC,IAAIC,EAAS,SAAUC,EAAU,CAC7B,MAAM,KAAKA,CAAQ,EACnBA,EAAS,MAAQ,IAAI,MAAK,EAAG,KACjC,EACIC,EAAWH,EAAWC,CAAM,EAChC,OAAAE,EAAS,UAAY,OAAO,OAAO,MAAM,SAAS,EAClDA,EAAS,UAAU,YAAcA,EAC1BA,CACX,CCRO,IAAIC,EAAsBL,GAAiB,SAAUE,EAAQ,CAChE,OAAO,SAAiCI,EAAQ,CAC5CJ,EAAO,IAAI,EACX,KAAK,QAAUI,EACTA,EAAO,OAAS;AAAA,EAA8CA,EAAO,IAAI,SAAUpD,EAAK9B,EAAG,CAAE,OAAOA,EAAI,EAAI,KAAO8B,EAAI,SAAQ,CAAI,CAAC,EAAE,KAAK;AAAA,GAAM,EACjJ,GACN,KAAK,KAAO,sBACZ,KAAK,OAASoD,CAClB,CACJ,CAAC,ECVM,SAASC,EAAU5G,EAAK6G,EAAM,CACjC,GAAI7G,EAAK,CACL,IAAI8G,EAAQ9G,EAAI,QAAQ6G,CAAI,EAC5B,GAAKC,GAAS9G,EAAI,OAAO8G,EAAO,CAAC,CACrC,CACJ,CCDA,IAAIC,GAAgB,UAAY,CAC5B,SAASA,EAAaC,EAAiB,CACnC,KAAK,gBAAkBA,EACvB,KAAK,OAAS,GACd,KAAK,WAAa,KAClB,KAAK,YAAc,IACvB,CACA,OAAAD,EAAa,UAAU,YAAc,UAAY,CAC7C,IAAIE,EAAKlF,EAAImF,EAAKC,EACdR,EACJ,GAAI,CAAC,KAAK,OAAQ,CACd,KAAK,OAAS,GACd,IAAIS,EAAa,KAAK,WACtB,GAAIA,EAEA,GADA,KAAK,WAAa,KACd,MAAM,QAAQA,CAAU,EACxB,GAAI,CACA,QAASC,EAAepC,EAASmC,CAAU,EAAGE,EAAiBD,EAAa,KAAI,EAAI,CAACC,EAAe,KAAMA,EAAiBD,EAAa,KAAI,EAAI,CAC5I,IAAIE,EAAWD,EAAe,MAC9BC,EAAS,OAAO,IAAI,CACxB,CACJ,OACOC,EAAO,CAAEP,EAAM,CAAE,MAAOO,CAAK,CAAI,QAC5D,CACwB,GAAI,CACIF,GAAkB,CAACA,EAAe,OAASvF,EAAKsF,EAAa,SAAStF,EAAG,KAAKsF,CAAY,CAClG,QACxB,CAAkC,GAAIJ,EAAK,MAAMA,EAAI,KAAO,CACxC,MAGAG,EAAW,OAAO,IAAI,EAG9B,IAAIK,EAAmB,KAAK,gBAC5B,GAAIrB,EAAWqB,CAAgB,EAC3B,GAAI,CACAA,EAAgB,CACpB,OACOnG,EAAG,CACNqF,EAASrF,aAAaoF,EAAsBpF,EAAE,OAAS,CAACA,CAAC,CAC7D,CAEJ,IAAIoG,EAAc,KAAK,YACvB,GAAIA,EAAa,CACb,KAAK,YAAc,KACnB,GAAI,CACA,QAASC,EAAgB1C,EAASyC,CAAW,EAAGE,EAAkBD,EAAc,KAAI,EAAI,CAACC,EAAgB,KAAMA,EAAkBD,EAAc,KAAI,EAAI,CACnJ,IAAIE,EAAYD,EAAgB,MAChC,GAAI,CACAE,GAAcD,CAAS,CAC3B,OACOtE,EAAK,CACRoD,EAASA,GAAgD,CAAA,EACrDpD,aAAemD,EACfC,EAASpB,EAAcA,EAAc,CAAA,EAAIH,EAAOuB,CAAM,CAAC,EAAGvB,EAAO7B,EAAI,MAAM,CAAC,EAG5EoD,EAAO,KAAKpD,CAAG,CAEvB,CACJ,CACJ,OACOwE,EAAO,CAAEb,EAAM,CAAE,MAAOa,CAAK,CAAI,QACxD,CACoB,GAAI,CACIH,GAAmB,CAACA,EAAgB,OAAST,EAAKQ,EAAc,SAASR,EAAG,KAAKQ,CAAa,CACtG,QACpB,CAA8B,GAAIT,EAAK,MAAMA,EAAI,KAAO,CACxC,CACJ,CACA,GAAIP,EACA,MAAM,IAAID,EAAoBC,CAAM,CAE5C,CACJ,EACAI,EAAa,UAAU,IAAM,SAAUiB,EAAU,CAC7C,IAAIjG,EACJ,GAAIiG,GAAYA,IAAa,KACzB,GAAI,KAAK,OACLF,GAAcE,CAAQ,MAErB,CACD,GAAIA,aAAoBjB,EAAc,CAClC,GAAIiB,EAAS,QAAUA,EAAS,WAAW,IAAI,EAC3C,OAEJA,EAAS,WAAW,IAAI,CAC5B,EACC,KAAK,aAAejG,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAASA,EAAK,CAAA,GAAI,KAAKiG,CAAQ,CAClG,CAER,EACAjB,EAAa,UAAU,WAAa,SAAUkB,EAAQ,CAClD,IAAIb,EAAa,KAAK,WACtB,OAAOA,IAAea,GAAW,MAAM,QAAQb,CAAU,GAAKA,EAAW,SAASa,CAAM,CAC5F,EACAlB,EAAa,UAAU,WAAa,SAAUkB,EAAQ,CAClD,IAAIb,EAAa,KAAK,WACtB,KAAK,WAAa,MAAM,QAAQA,CAAU,GAAKA,EAAW,KAAKa,CAAM,EAAGb,GAAcA,EAAa,CAACA,EAAYa,CAAM,EAAIA,CAC9H,EACAlB,EAAa,UAAU,cAAgB,SAAUkB,EAAQ,CACrD,IAAIb,EAAa,KAAK,WAClBA,IAAea,EACf,KAAK,WAAa,KAEb,MAAM,QAAQb,CAAU,GAC7BR,EAAUQ,EAAYa,CAAM,CAEpC,EACAlB,EAAa,UAAU,OAAS,SAAUiB,EAAU,CAChD,IAAIN,EAAc,KAAK,YACvBA,GAAed,EAAUc,EAAaM,CAAQ,EAC1CA,aAAoBjB,GACpBiB,EAAS,cAAc,IAAI,CAEnC,EACAjB,EAAa,OAAS,UAAY,CAC9B,IAAImB,EAAQ,IAAInB,EAChB,OAAAmB,EAAM,OAAS,GACRA,CACX,GAAC,EACMnB,CACX,KAEWoB,GAAqBpB,EAAa,MACtC,SAASqB,GAAerH,EAAO,CAClC,OAAQA,aAAiBgG,GACpBhG,GAAS,WAAYA,GAASqF,EAAWrF,EAAM,MAAM,GAAKqF,EAAWrF,EAAM,GAAG,GAAKqF,EAAWrF,EAAM,WAAW,CACxH,CACA,SAAS+G,GAAcD,EAAW,CAC1BzB,EAAWyB,CAAS,EACpBA,EAAS,EAGTA,EAAU,YAAW,CAE7B,CC7IO,IAAIQ,GAAS,CAGhB,QAAS,MAGb,ECLWC,GAAkB,CACzB,WAAY,SAAUC,EAASC,EAAS,CAEpC,QADIC,EAAO,CAAA,EACFC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,EAAK,CAAC,EAAI,UAAUA,CAAE,EAM/B,OAAO,WAAW,MAAM,OAAQnD,EAAc,CAACgD,EAASC,CAAO,EAAGpD,EAAOqD,CAAI,CAAC,CAAC,CACnF,EACA,aAAc,SAAUE,EAAQ,CAE5B,OAAuF,aAAcA,CAAM,CAC/G,EACA,SAAU,MACd,EChBO,SAASC,GAAqBrF,EAAK,CACtC+E,GAAgB,WAAW,UAAY,CAM/B,MAAM/E,CAEd,CAAC,CACL,CCZO,SAASsF,GAAO,CAAE,CCElB,SAASC,EAAaC,EAAI,CAgBzBA,EAAE,CAEV,CCXA,IAAIC,IAAc,SAAUzC,EAAQ,CAChC1C,EAAUmF,EAAYzC,CAAM,EAC5B,SAASyC,EAAWC,EAAa,CAC7B,IAAIC,EAAQ3C,EAAO,KAAK,IAAI,GAAK,KACjC,OAAA2C,EAAM,UAAY,GACdD,GACAC,EAAM,YAAcD,EAChBb,GAAea,CAAW,GAC1BA,EAAY,IAAIC,CAAK,GAIzBA,EAAM,YAAcC,GAEjBD,CACX,CACA,OAAAF,EAAW,OAAS,SAAUI,EAAMvK,EAAOwK,EAAU,CACjD,OAAO,IAAIC,GAAeF,EAAMvK,EAAOwK,CAAQ,CACnD,EACAL,EAAW,UAAU,KAAO,SAAUjI,EAAO,CACrC,KAAK,WAIL,KAAK,MAAMA,CAAK,CAExB,EACAiI,EAAW,UAAU,MAAQ,SAAUzF,EAAK,CACpC,KAAK,YAIL,KAAK,UAAY,GACjB,KAAK,OAAOA,CAAG,EAEvB,EACAyF,EAAW,UAAU,SAAW,UAAY,CACpC,KAAK,YAIL,KAAK,UAAY,GACjB,KAAK,UAAS,EAEtB,EACAA,EAAW,UAAU,YAAc,UAAY,CACtC,KAAK,SACN,KAAK,UAAY,GACjBzC,EAAO,UAAU,YAAY,KAAK,IAAI,EACtC,KAAK,YAAc,KAE3B,EACAyC,EAAW,UAAU,MAAQ,SAAUjI,EAAO,CAC1C,KAAK,YAAY,KAAKA,CAAK,CAC/B,EACAiI,EAAW,UAAU,OAAS,SAAUzF,EAAK,CACzC,GAAI,CACA,KAAK,YAAY,MAAMA,CAAG,CAC9B,QACR,CACY,KAAK,YAAW,CACpB,CACJ,EACAyF,EAAW,UAAU,UAAY,UAAY,CACzC,GAAI,CACA,KAAK,YAAY,SAAQ,CAC7B,QACR,CACY,KAAK,YAAW,CACpB,CACJ,EACOA,CACX,GAAEjC,CAAY,EAMVwC,IAAoB,UAAY,CAChC,SAASA,EAAiBC,EAAiB,CACvC,KAAK,gBAAkBA,CAC3B,CACA,OAAAD,EAAiB,UAAU,KAAO,SAAUxI,EAAO,CAC/C,IAAIyI,EAAkB,KAAK,gBAC3B,GAAIA,EAAgB,KAChB,GAAI,CACAA,EAAgB,KAAKzI,CAAK,CAC9B,OACOlC,EAAO,CACV4K,EAAqB5K,CAAK,CAC9B,CAER,EACA0K,EAAiB,UAAU,MAAQ,SAAUhG,EAAK,CAC9C,IAAIiG,EAAkB,KAAK,gBAC3B,GAAIA,EAAgB,MAChB,GAAI,CACAA,EAAgB,MAAMjG,CAAG,CAC7B,OACO1E,EAAO,CACV4K,EAAqB5K,CAAK,CAC9B,MAGA4K,EAAqBlG,CAAG,CAEhC,EACAgG,EAAiB,UAAU,SAAW,UAAY,CAC9C,IAAIC,EAAkB,KAAK,gBAC3B,GAAIA,EAAgB,SAChB,GAAI,CACAA,EAAgB,SAAQ,CAC5B,OACO3K,EAAO,CACV4K,EAAqB5K,CAAK,CAC9B,CAER,EACO0K,CACX,KACID,IAAkB,SAAU/C,EAAQ,CACpC1C,EAAUyF,EAAgB/C,CAAM,EAChC,SAAS+C,EAAeI,EAAgB7K,EAAOwK,EAAU,CACrD,IAAIH,EAAQ3C,EAAO,KAAK,IAAI,GAAK,KAC7BiD,EACJ,OAAIpD,EAAWsD,CAAc,GAAK,CAACA,EAC/BF,EAAkB,CACd,KAAOE,GAAwE,OAC/E,MAAO7K,GAA6C,OACpD,SAAUwK,GAAsD,MAChF,EAcgBG,EAAkBE,EAG1BR,EAAM,YAAc,IAAIK,GAAiBC,CAAe,EACjDN,CACX,CACA,OAAOI,CACX,GAAEN,EAAU,EAEZ,SAASS,EAAqB5K,EAAO,CAK7B+J,GAAqB/J,CAAK,CAElC,CACA,SAAS8K,GAAoBpG,EAAK,CAC9B,MAAMA,CACV,CAKO,IAAI4F,GAAiB,CACxB,OAAQ,GACR,KAAMN,EACN,MAAOc,GACP,SAAUd,CACd,ECtLWe,IAAc,UAAY,CAAE,OAAQ,OAAO,QAAW,YAAc,OAAO,YAAe,cAAgB,GAAC,ECA/G,SAASC,EAASC,EAAG,CACxB,OAAOA,CACX,CCMO,SAASC,GAAcC,EAAK,CAC/B,OAAIA,EAAI,SAAW,EACRH,EAEPG,EAAI,SAAW,EACRA,EAAI,CAAC,EAET,SAAelI,EAAO,CACzB,OAAOkI,EAAI,OAAO,SAAUC,EAAMC,EAAI,CAAE,OAAOA,EAAGD,CAAI,CAAG,EAAGnI,CAAK,CACrE,CACJ,CCXA,IAAIqI,GAAc,UAAY,CAC1B,SAASA,EAAWC,EAAW,CACvBA,IACA,KAAK,WAAaA,EAE1B,CACA,OAAAD,EAAW,UAAU,KAAO,SAAUE,EAAU,CAC5C,IAAIT,EAAa,IAAIO,EACrB,OAAAP,EAAW,OAAS,KACpBA,EAAW,SAAWS,EACfT,CACX,EACAO,EAAW,UAAU,UAAY,SAAUT,EAAgB7K,EAAOwK,EAAU,CACxE,IAAIH,EAAQ,KACRoB,EAAaC,GAAab,CAAc,EAAIA,EAAiB,IAAIJ,GAAeI,EAAgB7K,EAAOwK,CAAQ,EACnH,OAAAP,EAAa,UAAY,CACrB,IAAI/G,EAAKmH,EAAOmB,EAAWtI,EAAG,SAAUyI,EAASzI,EAAG,OACpDuI,EAAW,IAAID,EAEPA,EAAS,KAAKC,EAAYE,CAAM,EAClCA,EAEMtB,EAAM,WAAWoB,CAAU,EAE3BpB,EAAM,cAAcoB,CAAU,CAAC,CAC/C,CAAC,EACMA,CACX,EACAH,EAAW,UAAU,cAAgB,SAAUM,EAAM,CACjD,GAAI,CACA,OAAO,KAAK,WAAWA,CAAI,CAC/B,OACOlH,EAAK,CACRkH,EAAK,MAAMlH,CAAG,CAClB,CACJ,EACA4G,EAAW,UAAU,QAAU,SAAUf,EAAMsB,EAAa,CACxD,IAAIxB,EAAQ,KACZ,OAAAwB,EAAcC,GAAeD,CAAW,EACjC,IAAIA,EAAY,SAAUjI,EAASC,EAAQ,CAC9C,IAAI4H,EAAa,IAAIhB,GAAe,CAChC,KAAM,SAAUvI,EAAO,CACnB,GAAI,CACAqI,EAAKrI,CAAK,CACd,OACOwC,EAAK,CACRb,EAAOa,CAAG,EACV+G,EAAW,YAAW,CAC1B,CACJ,EACA,MAAO5H,EACP,SAAUD,CAC1B,CAAa,EACDyG,EAAM,UAAUoB,CAAU,CAC9B,CAAC,CACL,EACAH,EAAW,UAAU,WAAa,SAAUG,EAAY,CACpD,IAAIvI,EACJ,OAAQA,EAAK,KAAK,UAAY,MAAQA,IAAO,OAAS,OAASA,EAAG,UAAUuI,CAAU,CAC1F,EACAH,EAAW,UAAUS,EAAiB,EAAI,UAAY,CAClD,OAAO,IACX,EACAT,EAAW,UAAU,KAAO,UAAY,CAEpC,QADIU,EAAa,CAAA,EACRnC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCmC,EAAWnC,CAAE,EAAI,UAAUA,CAAE,EAEjC,OAAOqB,GAAcc,CAAU,EAAE,IAAI,CACzC,EACAV,EAAW,UAAU,UAAY,SAAUO,EAAa,CACpD,IAAIxB,EAAQ,KACZ,OAAAwB,EAAcC,GAAeD,CAAW,EACjC,IAAIA,EAAY,SAAUjI,EAASC,EAAQ,CAC9C,IAAI3B,EACJmI,EAAM,UAAU,SAAUY,EAAG,CAAE,OAAQ/I,EAAQ+I,CAAI,EAAG,SAAUvG,EAAK,CAAE,OAAOb,EAAOa,CAAG,CAAG,EAAG,UAAY,CAAE,OAAOd,EAAQ1B,CAAK,CAAG,CAAC,CACxI,CAAC,CACL,EACAoJ,EAAW,OAAS,SAAUC,EAAW,CACrC,OAAO,IAAID,EAAWC,CAAS,CACnC,EACOD,CACX,KAEA,SAASQ,GAAeD,EAAa,CACjC,IAAI3I,EACJ,OAAQA,EAAK2I,GAA+DrC,GAAO,WAAa,MAAQtG,IAAO,OAASA,EAAK,OACjI,CACA,SAAS+I,GAAW/J,EAAO,CACvB,OAAOA,GAASqF,EAAWrF,EAAM,IAAI,GAAKqF,EAAWrF,EAAM,KAAK,GAAKqF,EAAWrF,EAAM,QAAQ,CAClG,CACA,SAASwJ,GAAaxJ,EAAO,CACzB,OAAQA,GAASA,aAAiBiI,IAAgB8B,GAAW/J,CAAK,GAAKqH,GAAerH,CAAK,CAC/F,CCnGO,SAASgK,GAAQP,EAAQ,CAC5B,OAAOpE,EAA2DoE,GAAO,IAAI,CACjF,CACO,SAASQ,EAAQC,EAAM,CAC1B,OAAO,SAAUT,EAAQ,CACrB,GAAIO,GAAQP,CAAM,EACd,OAAOA,EAAO,KAAK,SAAUU,EAAc,CACvC,GAAI,CACA,OAAOD,EAAKC,EAAc,IAAI,CAClC,OACO3H,EAAK,CACR,KAAK,MAAMA,CAAG,CAClB,CACJ,CAAC,EAEL,MAAM,IAAI,UAAU,wCAAwC,CAChE,CACJ,CChBO,SAAS4H,EAAyBlC,EAAamC,EAAQC,EAAYC,EAASC,EAAY,CAC3F,OAAO,IAAIC,GAAmBvC,EAAamC,EAAQC,EAAYC,EAASC,CAAU,CACtF,CACA,IAAIC,IAAsB,SAAUjF,EAAQ,CACxC1C,EAAU2H,EAAoBjF,CAAM,EACpC,SAASiF,EAAmBvC,EAAamC,EAAQC,EAAYC,EAASC,EAAYE,EAAmB,CACjG,IAAIvC,EAAQ3C,EAAO,KAAK,KAAM0C,CAAW,GAAK,KAC9C,OAAAC,EAAM,WAAaqC,EACnBrC,EAAM,kBAAoBuC,EAC1BvC,EAAM,MAAQkC,EACR,SAAUrK,EAAO,CACf,GAAI,CACAqK,EAAOrK,CAAK,CAChB,OACOwC,EAAK,CACR0F,EAAY,MAAM1F,CAAG,CACzB,CACJ,EACEgD,EAAO,UAAU,MACvB2C,EAAM,OAASoC,EACT,SAAU/H,EAAK,CACb,GAAI,CACA+H,EAAQ/H,CAAG,CACf,OACOA,EAAK,CACR0F,EAAY,MAAM1F,CAAG,CACzB,QAChB,CACoB,KAAK,YAAW,CACpB,CACJ,EACEgD,EAAO,UAAU,OACvB2C,EAAM,UAAYmC,EACZ,UAAY,CACV,GAAI,CACAA,EAAU,CACd,OACO9H,EAAK,CACR0F,EAAY,MAAM1F,CAAG,CACzB,QAChB,CACoB,KAAK,YAAW,CACpB,CACJ,EACEgD,EAAO,UAAU,UAChB2C,CACX,CACA,OAAAsC,EAAmB,UAAU,YAAc,UAAY,CACnD,IAAIzJ,EACJ,GAAI,CAAC,KAAK,mBAAqB,KAAK,kBAAiB,EAAI,CACrD,IAAI2J,EAAW,KAAK,OACpBnF,EAAO,UAAU,YAAY,KAAK,IAAI,EACtC,CAACmF,KAAc3J,EAAK,KAAK,cAAgB,MAAQA,IAAO,QAAkBA,EAAG,KAAK,IAAI,EAC1F,CACJ,EACOyJ,CACX,GAAExC,EAAU,ECzDD2C,GAA0BtF,GAAiB,SAAUE,EAAQ,CACpE,OAAO,UAAuC,CAC1CA,EAAO,IAAI,EACX,KAAK,KAAO,0BACZ,KAAK,QAAU,qBACnB,CACJ,CAAC,ECDGqF,IAAW,SAAUrF,EAAQ,CAC7B1C,EAAU+H,EAASrF,CAAM,EACzB,SAASqF,GAAU,CACf,IAAI1C,EAAQ3C,EAAO,KAAK,IAAI,GAAK,KACjC,OAAA2C,EAAM,OAAS,GACfA,EAAM,iBAAmB,KACzBA,EAAM,UAAY,CAAA,EAClBA,EAAM,UAAY,GAClBA,EAAM,SAAW,GACjBA,EAAM,YAAc,KACbA,CACX,CACA,OAAA0C,EAAQ,UAAU,KAAO,SAAUvB,EAAU,CACzC,IAAIwB,EAAU,IAAIC,GAAiB,KAAM,IAAI,EAC7C,OAAAD,EAAQ,SAAWxB,EACZwB,CACX,EACAD,EAAQ,UAAU,eAAiB,UAAY,CAC3C,GAAI,KAAK,OACL,MAAM,IAAID,EAElB,EACAC,EAAQ,UAAU,KAAO,SAAU7K,EAAO,CACtC,IAAImI,EAAQ,KACZJ,EAAa,UAAY,CACrB,IAAI7B,EAAKlF,EAET,GADAmH,EAAM,eAAc,EAChB,CAACA,EAAM,UAAW,CACbA,EAAM,mBACPA,EAAM,iBAAmB,MAAM,KAAKA,EAAM,SAAS,GAEvD,GAAI,CACA,QAAS/B,EAAKlC,EAASiE,EAAM,gBAAgB,EAAG6C,EAAK5E,EAAG,KAAI,EAAI,CAAC4E,EAAG,KAAMA,EAAK5E,EAAG,OAAQ,CACtF,IAAI6E,EAAWD,EAAG,MAClBC,EAAS,KAAKjL,CAAK,CACvB,CACJ,OACOyG,EAAO,CAAEP,EAAM,CAAE,MAAOO,CAAK,CAAI,QACxD,CACoB,GAAI,CACIuE,GAAM,CAACA,EAAG,OAAShK,EAAKoF,EAAG,SAASpF,EAAG,KAAKoF,CAAE,CACtD,QACpB,CAA8B,GAAIF,EAAK,MAAMA,EAAI,KAAO,CACxC,CACJ,CACJ,CAAC,CACL,EACA2E,EAAQ,UAAU,MAAQ,SAAUrI,EAAK,CACrC,IAAI2F,EAAQ,KACZJ,EAAa,UAAY,CAErB,GADAI,EAAM,eAAc,EAChB,CAACA,EAAM,UAAW,CAClBA,EAAM,SAAWA,EAAM,UAAY,GACnCA,EAAM,YAAc3F,EAEpB,QADI0I,EAAY/C,EAAM,UACf+C,EAAU,QACbA,EAAU,MAAK,EAAG,MAAM1I,CAAG,CAEnC,CACJ,CAAC,CACL,EACAqI,EAAQ,UAAU,SAAW,UAAY,CACrC,IAAI1C,EAAQ,KACZJ,EAAa,UAAY,CAErB,GADAI,EAAM,eAAc,EAChB,CAACA,EAAM,UAAW,CAClBA,EAAM,UAAY,GAElB,QADI+C,EAAY/C,EAAM,UACf+C,EAAU,QACbA,EAAU,MAAK,EAAG,SAAQ,CAElC,CACJ,CAAC,CACL,EACAL,EAAQ,UAAU,YAAc,UAAY,CACxC,KAAK,UAAY,KAAK,OAAS,GAC/B,KAAK,UAAY,KAAK,iBAAmB,IAC7C,EACA,OAAO,eAAeA,EAAQ,UAAW,WAAY,CACjD,IAAK,UAAY,CACb,IAAI7J,EACJ,QAASA,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,QAAU,CACpF,EACA,WAAY,GACZ,aAAc,EACtB,CAAK,EACD6J,EAAQ,UAAU,cAAgB,SAAUtB,EAAY,CACpD,YAAK,eAAc,EACZ/D,EAAO,UAAU,cAAc,KAAK,KAAM+D,CAAU,CAC/D,EACAsB,EAAQ,UAAU,WAAa,SAAUtB,EAAY,CACjD,YAAK,eAAc,EACnB,KAAK,wBAAwBA,CAAU,EAChC,KAAK,gBAAgBA,CAAU,CAC1C,EACAsB,EAAQ,UAAU,gBAAkB,SAAUtB,EAAY,CACtD,IAAIpB,EAAQ,KACRnH,EAAK,KAAMmK,EAAWnK,EAAG,SAAUoK,EAAYpK,EAAG,UAAWkK,EAAYlK,EAAG,UAChF,OAAImK,GAAYC,EACLhE,IAEX,KAAK,iBAAmB,KACxB8D,EAAU,KAAK3B,CAAU,EAClB,IAAIvD,EAAa,UAAY,CAChCmC,EAAM,iBAAmB,KACzBtC,EAAUqF,EAAW3B,CAAU,CACnC,CAAC,EACL,EACAsB,EAAQ,UAAU,wBAA0B,SAAUtB,EAAY,CAC9D,IAAIvI,EAAK,KAAMmK,EAAWnK,EAAG,SAAUqK,EAAcrK,EAAG,YAAaoK,EAAYpK,EAAG,UAChFmK,EACA5B,EAAW,MAAM8B,CAAW,EAEvBD,GACL7B,EAAW,SAAQ,CAE3B,EACAsB,EAAQ,UAAU,aAAe,UAAY,CACzC,IAAIhC,EAAa,IAAIO,EACrB,OAAAP,EAAW,OAAS,KACbA,CACX,EACAgC,EAAQ,OAAS,SAAU3C,EAAauB,EAAQ,CAC5C,OAAO,IAAIsB,GAAiB7C,EAAauB,CAAM,CACnD,EACOoB,CACX,GAAEzB,CAAU,EAER2B,IAAoB,SAAUvF,EAAQ,CACtC1C,EAAUiI,EAAkBvF,CAAM,EAClC,SAASuF,EAAiB7C,EAAauB,EAAQ,CAC3C,IAAItB,EAAQ3C,EAAO,KAAK,IAAI,GAAK,KACjC,OAAA2C,EAAM,YAAcD,EACpBC,EAAM,OAASsB,EACRtB,CACX,CACA,OAAA4C,EAAiB,UAAU,KAAO,SAAU/K,EAAO,CAC/C,IAAIgB,EAAIoF,GACPA,GAAMpF,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAAS,OAASA,EAAG,QAAU,MAAQoF,IAAO,QAAkBA,EAAG,KAAKpF,EAAIhB,CAAK,CACtI,EACA+K,EAAiB,UAAU,MAAQ,SAAUvI,EAAK,CAC9C,IAAIxB,EAAIoF,GACPA,GAAMpF,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAAS,OAASA,EAAG,SAAW,MAAQoF,IAAO,QAAkBA,EAAG,KAAKpF,EAAIwB,CAAG,CACrI,EACAuI,EAAiB,UAAU,SAAW,UAAY,CAC9C,IAAI/J,EAAIoF,GACPA,GAAMpF,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAAS,OAASA,EAAG,YAAc,MAAQoF,IAAO,QAAkBA,EAAG,KAAKpF,CAAE,CACnI,EACA+J,EAAiB,UAAU,WAAa,SAAUxB,EAAY,CAC1D,IAAIvI,EAAIoF,EACR,OAAQA,GAAMpF,EAAK,KAAK,UAAY,MAAQA,IAAO,OAAS,OAASA,EAAG,UAAUuI,CAAU,KAAO,MAAQnD,IAAO,OAASA,EAAKgB,EACpI,EACO2D,CACX,GAAEF,EAAO,EC7JLS,GAAmB,SAAU9F,EAAQ,CACrC1C,EAAUwI,EAAiB9F,CAAM,EACjC,SAAS8F,EAAgBC,EAAQ,CAC7B,IAAIpD,EAAQ3C,EAAO,KAAK,IAAI,GAAK,KACjC,OAAA2C,EAAM,OAASoD,EACRpD,CACX,CACA,cAAO,eAAemD,EAAgB,UAAW,QAAS,CACtD,IAAK,UAAY,CACb,OAAO,KAAK,SAAQ,CACxB,EACA,WAAY,GACZ,aAAc,EACtB,CAAK,EACDA,EAAgB,UAAU,WAAa,SAAU/B,EAAY,CACzD,IAAIiC,EAAehG,EAAO,UAAU,WAAW,KAAK,KAAM+D,CAAU,EACpE,OAACiC,EAAa,QAAUjC,EAAW,KAAK,KAAK,MAAM,EAC5CiC,CACX,EACAF,EAAgB,UAAU,SAAW,UAAY,CAC7C,IAAItK,EAAK,KAAMmK,EAAWnK,EAAG,SAAUqK,EAAcrK,EAAG,YAAauK,EAASvK,EAAG,OACjF,GAAImK,EACA,MAAME,EAEV,YAAK,eAAc,EACZE,CACX,EACAD,EAAgB,UAAU,KAAO,SAAUtL,EAAO,CAC9CwF,EAAO,UAAU,KAAK,KAAK,KAAO,KAAK,OAASxF,CAAK,CACzD,EACOsL,CACX,GAAET,EAAO,ECjCEY,GAAwB,CAC/B,IAAK,UAAY,CACb,OAA0C,KAAM,IAAG,CACvD,CAEJ,ECHIC,IAAU,SAAUlG,EAAQ,CAC5B1C,EAAU4I,EAAQlG,CAAM,EACxB,SAASkG,EAAOC,EAAWC,EAAM,CAC7B,OAAOpG,EAAO,KAAK,IAAI,GAAK,IAChC,CACA,OAAAkG,EAAO,UAAU,SAAW,SAAUG,EAAOC,EAAO,CAEhD,OAAO,IACX,EACOJ,CACX,GAAE1F,CAAY,ECXH+F,GAAmB,CAC1B,YAAa,SAAUvE,EAASC,EAAS,CAErC,QADIC,EAAO,CAAA,EACFC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,EAAK,CAAC,EAAI,UAAUA,CAAE,EAM/B,OAAO,YAAY,MAAM,OAAQnD,EAAc,CAACgD,EAASC,CAAO,EAAGpD,EAAOqD,CAAI,CAAC,CAAC,CACpF,EACA,cAAe,SAAUE,EAAQ,CAE7B,OAAwF,cAAeA,CAAM,CACjH,EACA,SAAU,MACd,ECdIoE,IAAe,SAAUxG,EAAQ,CACjC1C,EAAUkJ,EAAaxG,CAAM,EAC7B,SAASwG,EAAYL,EAAWC,EAAM,CAClC,IAAIzD,EAAQ3C,EAAO,KAAK,KAAMmG,EAAWC,CAAI,GAAK,KAClD,OAAAzD,EAAM,UAAYwD,EAClBxD,EAAM,KAAOyD,EACbzD,EAAM,QAAU,GACTA,CACX,CACA,OAAA6D,EAAY,UAAU,SAAW,SAAUH,EAAOC,EAAO,CACrD,IAAI9K,EAEJ,GADI8K,IAAU,SAAUA,EAAQ,GAC5B,KAAK,OACL,OAAO,KAEX,KAAK,MAAQD,EACb,IAAItJ,EAAK,KAAK,GACVoJ,EAAY,KAAK,UACrB,OAAIpJ,GAAM,OACN,KAAK,GAAK,KAAK,eAAeoJ,EAAWpJ,EAAIuJ,CAAK,GAEtD,KAAK,QAAU,GACf,KAAK,MAAQA,EACb,KAAK,IAAM9K,EAAK,KAAK,MAAQ,MAAQA,IAAO,OAASA,EAAK,KAAK,eAAe2K,EAAW,KAAK,GAAIG,CAAK,EAChG,IACX,EACAE,EAAY,UAAU,eAAiB,SAAUL,EAAWM,EAAKH,EAAO,CACpE,OAAIA,IAAU,SAAUA,EAAQ,GACzBC,GAAiB,YAAYJ,EAAU,MAAM,KAAKA,EAAW,IAAI,EAAGG,CAAK,CACpF,EACAE,EAAY,UAAU,eAAiB,SAAUE,EAAY3J,EAAIuJ,EAAO,CAEpE,GADIA,IAAU,SAAUA,EAAQ,GAC5BA,GAAS,MAAQ,KAAK,QAAUA,GAAS,KAAK,UAAY,GAC1D,OAAOvJ,EAEPA,GAAM,MACNwJ,GAAiB,cAAcxJ,CAAE,CAGzC,EACAyJ,EAAY,UAAU,QAAU,SAAUH,EAAOC,EAAO,CACpD,GAAI,KAAK,OACL,OAAO,IAAI,MAAM,8BAA8B,EAEnD,KAAK,QAAU,GACf,IAAIhO,EAAQ,KAAK,SAAS+N,EAAOC,CAAK,EACtC,GAAIhO,EACA,OAAOA,EAEF,KAAK,UAAY,IAAS,KAAK,IAAM,OAC1C,KAAK,GAAK,KAAK,eAAe,KAAK,UAAW,KAAK,GAAI,IAAI,EAEnE,EACAkO,EAAY,UAAU,SAAW,SAAUH,EAAOM,EAAQ,CACtD,IAAIC,EAAU,GACVC,EACJ,GAAI,CACA,KAAK,KAAKR,CAAK,CACnB,OACOtL,EAAG,CACN6L,EAAU,GACVC,EAAa9L,GAAQ,IAAI,MAAM,oCAAoC,CACvE,CACA,GAAI6L,EACA,YAAK,YAAW,EACTC,CAEf,EACAL,EAAY,UAAU,YAAc,UAAY,CAC5C,GAAI,CAAC,KAAK,OAAQ,CACd,IAAIhL,EAAK,KAAMuB,EAAKvB,EAAG,GAAI2K,EAAY3K,EAAG,UACtCsL,EAAUX,EAAU,QACxB,KAAK,KAAO,KAAK,MAAQ,KAAK,UAAY,KAC1C,KAAK,QAAU,GACf9F,EAAUyG,EAAS,IAAI,EACnB/J,GAAM,OACN,KAAK,GAAK,KAAK,eAAeoJ,EAAWpJ,EAAI,IAAI,GAErD,KAAK,MAAQ,KACbiD,EAAO,UAAU,YAAY,KAAK,IAAI,CAC1C,CACJ,EACOwG,CACX,GAAEN,EAAM,ECtFJa,IAAa,UAAY,CACzB,SAASA,EAAUC,EAAqBC,EAAK,CACrCA,IAAQ,SAAUA,EAAMF,EAAU,KACtC,KAAK,oBAAsBC,EAC3B,KAAK,IAAMC,CACf,CACA,OAAAF,EAAU,UAAU,SAAW,SAAUX,EAAME,EAAOD,EAAO,CACzD,OAAIC,IAAU,SAAUA,EAAQ,GACzB,IAAI,KAAK,oBAAoB,KAAMF,CAAI,EAAE,SAASC,EAAOC,CAAK,CACzE,EACAS,EAAU,IAAMd,GAAsB,IAC/Bc,CACX,KCXIG,IAAkB,SAAUlH,EAAQ,CACpC1C,EAAU4J,EAAgBlH,CAAM,EAChC,SAASkH,EAAeC,EAAiBF,EAAK,CACtCA,IAAQ,SAAUA,EAAMF,GAAU,KACtC,IAAIpE,EAAQ3C,EAAO,KAAK,KAAMmH,EAAiBF,CAAG,GAAK,KACvD,OAAAtE,EAAM,QAAU,CAAA,EAChBA,EAAM,QAAU,GACTA,CACX,CACA,OAAAuE,EAAe,UAAU,MAAQ,SAAUE,EAAQ,CAC/C,IAAIN,EAAU,KAAK,QACnB,GAAI,KAAK,QAAS,CACdA,EAAQ,KAAKM,CAAM,EACnB,MACJ,CACA,IAAI9O,EACJ,KAAK,QAAU,GACf,EACI,IAAKA,EAAQ8O,EAAO,QAAQA,EAAO,MAAOA,EAAO,KAAK,EAClD,YAEEA,EAASN,EAAQ,MAAK,GAEhC,GADA,KAAK,QAAU,GACXxO,EAAO,CACP,KAAQ8O,EAASN,EAAQ,SACrBM,EAAO,YAAW,EAEtB,MAAM9O,CACV,CACJ,EACO4O,CACX,GAAEH,EAAS,EC/BAM,GAAiB,IAAIH,GAAeV,EAAW,EAC/Cc,GAAQD,GCFRE,GAAQ,IAAI3D,EAAW,SAAUG,EAAY,CAAE,OAAOA,EAAW,UAAY,CAAC,ECAlF,SAASyD,GAAYhN,EAAO,CAC/B,OAAOA,GAASqF,EAAWrF,EAAM,QAAQ,CAC7C,CCDA,SAASiN,GAAKhO,EAAK,CACf,OAAOA,EAAIA,EAAI,OAAS,CAAC,CAC7B,CACO,SAASiO,GAAkBxF,EAAM,CACpC,OAAOrC,EAAW4H,GAAKvF,CAAI,CAAC,EAAIA,EAAK,IAAG,EAAK,MACjD,CACO,SAASyF,GAAazF,EAAM,CAC/B,OAAOsF,GAAYC,GAAKvF,CAAI,CAAC,EAAIA,EAAK,IAAG,EAAK,MAClD,CCVO,IAAI0F,IAAe,SAAUrE,EAAG,CAAE,OAAOA,GAAK,OAAOA,EAAE,QAAW,UAAY,OAAOA,GAAM,UAAY,GCCvG,SAASsE,GAAUrN,EAAO,CAC7B,OAAOqF,EAAyDrF,GAAM,IAAI,CAC9E,CCDO,SAASsN,GAAoBvM,EAAO,CACvC,OAAOsE,EAAWtE,EAAM8I,EAAiB,CAAC,CAC9C,CCHO,SAAS0D,GAAgBC,EAAK,CACjC,OAAO,OAAO,eAAiBnI,EAAqDmI,IAAI,OAAO,aAAa,CAAC,CACjH,CCHO,SAASC,GAAiC1M,EAAO,CACpD,OAAO,IAAI,UAAU,iBAAmBA,IAAU,MAAQ,OAAOA,GAAU,SAAW,oBAAsB,IAAMA,EAAQ,KAAO,0HAA0H,CAC/P,CCFO,SAAS2M,IAAoB,CAChC,OAAI,OAAO,QAAW,YAAc,CAAC,OAAO,SACjC,aAEJ,OAAO,QAClB,CACO,IAAIC,GAAWD,GAAiB,ECJhC,SAASE,GAAW7M,EAAO,CAC9B,OAAOsE,EAAyDtE,IAAM8M,EAAe,CAAC,CAC1F,CCFO,SAASC,GAAmCC,EAAgB,CAC/D,OAAOjJ,GAAiB,KAAM,UAAW,UAAgD,CACrF,IAAIrG,EAAQuC,EAAIhB,EAAOgO,EACvB,OAAOvK,GAAY,KAAM,SAAU2C,EAAI,CACnC,OAAQA,EAAG,MAAK,CACZ,IAAK,GACD3H,EAASsP,EAAe,UAAS,EACjC3H,EAAG,MAAQ,EACf,IAAK,GACDA,EAAG,KAAK,KAAK,CAAC,EAAC,CAAI,EAAG,EAAE,CAAC,EACzBA,EAAG,MAAQ,EACf,IAAK,GAED,MAAO,CAAC,EAAGvB,EAAQpG,EAAO,KAAI,CAAE,CAAC,EACrC,IAAK,GAED,OADAuC,EAAKoF,EAAG,OAAQpG,EAAQgB,EAAG,MAAOgN,EAAOhN,EAAG,KACvCgN,EACE,CAAC,EAAGnJ,EAAQ,MAAM,CAAC,EADR,CAAC,EAAG,CAAC,EAE3B,IAAK,GAAG,MAAO,CAAC,EAAGuB,EAAG,KAAI,CAAE,EAC5B,IAAK,GAAG,MAAO,CAAC,EAAGvB,EAAQ7E,CAAK,CAAC,EACjC,IAAK,GAAG,MAAO,CAAC,EAAGoG,EAAG,KAAI,CAAE,EAC5B,IAAK,GACD,OAAAA,EAAG,KAAI,EACA,CAAC,EAAG,CAAC,EAChB,IAAK,GAAG,MAAO,CAAC,EAAG,EAAE,EACrB,IAAK,GACD,OAAA3H,EAAO,YAAW,EACX,CAAC,CAAC,EACb,IAAK,IAAI,MAAO,CAAC,CAAC,CAClC,CACQ,CAAC,CACL,CAAC,CACL,CACO,SAASwP,GAAqBT,EAAK,CACtC,OAAOnI,EAAqDmI,GAAI,SAAS,CAC7E,CCzBO,SAASU,EAAUnN,EAAO,CAC7B,GAAIA,aAAiBqI,EACjB,OAAOrI,EAEX,GAAIA,GAAS,KAAM,CACf,GAAIuM,GAAoBvM,CAAK,EACzB,OAAOoN,GAAsBpN,CAAK,EAEtC,GAAIqM,GAAYrM,CAAK,EACjB,OAAOqN,GAAcrN,CAAK,EAE9B,GAAIsM,GAAUtM,CAAK,EACf,OAAOsN,GAAYtN,CAAK,EAE5B,GAAIwM,GAAgBxM,CAAK,EACrB,OAAOuN,GAAkBvN,CAAK,EAElC,GAAI6M,GAAW7M,CAAK,EAChB,OAAOwN,GAAaxN,CAAK,EAE7B,GAAIkN,GAAqBlN,CAAK,EAC1B,OAAOyN,GAAuBzN,CAAK,CAE3C,CACA,MAAM0M,GAAiC1M,CAAK,CAChD,CACO,SAASoN,GAAsBX,EAAK,CACvC,OAAO,IAAIpE,EAAW,SAAUG,EAAY,CACxC,IAAIkF,EAAMjB,EAAI3D,EAAiB,EAAC,EAChC,GAAIxE,EAAWoJ,EAAI,SAAS,EACxB,OAAOA,EAAI,UAAUlF,CAAU,EAEnC,MAAM,IAAI,UAAU,gEAAgE,CACxF,CAAC,CACL,CACO,SAAS6E,GAAcM,EAAO,CACjC,OAAO,IAAItF,EAAW,SAAUG,EAAY,CACxC,QAAS7I,EAAI,EAAGA,EAAIgO,EAAM,QAAU,CAACnF,EAAW,OAAQ7I,IACpD6I,EAAW,KAAKmF,EAAMhO,CAAC,CAAC,EAE5B6I,EAAW,SAAQ,CACvB,CAAC,CACL,CACO,SAAS8E,GAAYM,EAAS,CACjC,OAAO,IAAIvF,EAAW,SAAUG,EAAY,CACxCoF,EACK,KAAK,SAAU3O,EAAO,CAClBuJ,EAAW,SACZA,EAAW,KAAKvJ,CAAK,EACrBuJ,EAAW,SAAQ,EAE3B,EAAG,SAAU/G,EAAK,CAAE,OAAO+G,EAAW,MAAM/G,CAAG,CAAG,CAAC,EAC9C,KAAK,KAAMqF,EAAoB,CACxC,CAAC,CACL,CACO,SAAS0G,GAAaK,EAAU,CACnC,OAAO,IAAIxF,EAAW,SAAUG,EAAY,CACxC,IAAIrD,EAAKlF,EACT,GAAI,CACA,QAAS6N,EAAa3K,EAAS0K,CAAQ,EAAGE,EAAeD,EAAW,KAAI,EAAI,CAACC,EAAa,KAAMA,EAAeD,EAAW,KAAI,EAAI,CAC9H,IAAI7O,EAAQ8O,EAAa,MAEzB,GADAvF,EAAW,KAAKvJ,CAAK,EACjBuJ,EAAW,OACX,MAER,CACJ,OACO9C,EAAO,CAAEP,EAAM,CAAE,MAAOO,CAAK,CAAI,QAChD,CACY,GAAI,CACIqI,GAAgB,CAACA,EAAa,OAAS9N,EAAK6N,EAAW,SAAS7N,EAAG,KAAK6N,CAAU,CAC1F,QACZ,CAAsB,GAAI3I,EAAK,MAAMA,EAAI,KAAO,CACxC,CACAqD,EAAW,SAAQ,CACvB,CAAC,CACL,CACO,SAAS+E,GAAkBS,EAAe,CAC7C,OAAO,IAAI3F,EAAW,SAAUG,EAAY,CACxCyF,GAAQD,EAAexF,CAAU,EAAE,MAAM,SAAU/G,EAAK,CAAE,OAAO+G,EAAW,MAAM/G,CAAG,CAAG,CAAC,CAC7F,CAAC,CACL,CACO,SAASgM,GAAuBT,EAAgB,CACnD,OAAOO,GAAkBR,GAAmCC,CAAc,CAAC,CAC/E,CACA,SAASiB,GAAQD,EAAexF,EAAY,CACxC,IAAI0F,EAAiBC,EACjB/I,EAAKnF,EACT,OAAOgC,GAAU,KAAM,OAAQ,OAAQ,UAAY,CAC/C,IAAIhD,EAAOgH,EACX,OAAOvD,GAAY,KAAM,SAAU2C,EAAI,CACnC,OAAQA,EAAG,MAAK,CACZ,IAAK,GACDA,EAAG,KAAK,KAAK,CAAC,EAAG,EAAG,EAAG,EAAE,CAAC,EAC1B6I,EAAkB7J,GAAc2J,CAAa,EAC7C3I,EAAG,MAAQ,EACf,IAAK,GAAG,MAAO,CAAC,EAAG6I,EAAgB,KAAI,CAAE,EACzC,IAAK,GACD,GAAMC,EAAoB9I,EAAG,OAAQ,EAAC8I,EAAkB,KAAO,MAAO,CAAC,EAAG,CAAC,EAG3E,GAFAlP,EAAQkP,EAAkB,MAC1B3F,EAAW,KAAKvJ,CAAK,EACjBuJ,EAAW,OACX,MAAO,CAAC,CAAC,EAEbnD,EAAG,MAAQ,EACf,IAAK,GAAG,MAAO,CAAC,EAAG,CAAC,EACpB,IAAK,GAAG,MAAO,CAAC,EAAG,EAAE,EACrB,IAAK,GACD,OAAAY,EAAQZ,EAAG,KAAI,EACfD,EAAM,CAAE,MAAOa,CAAK,EACb,CAAC,EAAG,EAAE,EACjB,IAAK,GAED,OADAZ,EAAG,KAAK,KAAK,CAAC,EAAC,CAAI,EAAG,EAAE,CAAC,EACnB8I,GAAqB,CAACA,EAAkB,OAASlO,EAAKiO,EAAgB,QACrE,CAAC,EAAGjO,EAAG,KAAKiO,CAAe,CAAC,EAD0D,CAAC,EAAG,CAAC,EAEtG,IAAK,GACD7I,EAAG,KAAI,EACPA,EAAG,MAAQ,EACf,IAAK,GAAG,MAAO,CAAC,EAAG,EAAE,EACrB,IAAK,GACD,GAAID,EAAK,MAAMA,EAAI,MACnB,MAAO,CAAC,CAAC,EACb,IAAK,IAAI,MAAO,CAAC,CAAC,EAClB,IAAK,IACD,OAAAoD,EAAW,SAAQ,EACZ,CAAC,CAAC,CAC7B,CACQ,CAAC,CACL,CAAC,CACL,CC7IO,SAAS4F,EAAgBC,EAAoBzD,EAAWC,EAAME,EAAOuD,EAAQ,CAC5EvD,IAAU,SAAUA,EAAQ,GAC5BuD,IAAW,SAAUA,EAAS,IAClC,IAAIC,EAAuB3D,EAAU,SAAS,UAAY,CACtDC,EAAI,EACAyD,EACAD,EAAmB,IAAI,KAAK,SAAS,KAAMtD,CAAK,CAAC,EAGjD,KAAK,YAAW,CAExB,EAAGA,CAAK,EAER,GADAsD,EAAmB,IAAIE,CAAoB,EACvC,CAACD,EACD,OAAOC,CAEf,CCbO,SAASC,GAAU5D,EAAWG,EAAO,CACxC,OAAIA,IAAU,SAAUA,EAAQ,GACzB7B,EAAQ,SAAUR,EAAQF,EAAY,CACzCE,EAAO,UAAUW,EAAyBb,EAAY,SAAUvJ,EAAO,CAAE,OAAOmP,EAAgB5F,EAAYoC,EAAW,UAAY,CAAE,OAAOpC,EAAW,KAAKvJ,CAAK,CAAG,EAAG8L,CAAK,CAAG,EAAG,UAAY,CAAE,OAAOqD,EAAgB5F,EAAYoC,EAAW,UAAY,CAAE,OAAOpC,EAAW,UAAY,EAAGuC,CAAK,CAAG,EAAG,SAAUtJ,EAAK,CAAE,OAAO2M,EAAgB5F,EAAYoC,EAAW,UAAY,CAAE,OAAOpC,EAAW,MAAM/G,CAAG,CAAG,EAAGsJ,CAAK,CAAG,CAAC,CAAC,CACpa,CAAC,CACL,CCPO,SAAS0D,GAAY7D,EAAWG,EAAO,CAC1C,OAAIA,IAAU,SAAUA,EAAQ,GACzB7B,EAAQ,SAAUR,EAAQF,EAAY,CACzCA,EAAW,IAAIoC,EAAU,SAAS,UAAY,CAAE,OAAOlC,EAAO,UAAUF,CAAU,CAAG,EAAGuC,CAAK,CAAC,CAClG,CAAC,CACL,CCHO,SAAS2D,GAAmB1O,EAAO4K,EAAW,CACjD,OAAOuC,EAAUnN,CAAK,EAAE,KAAKyO,GAAY7D,CAAS,EAAG4D,GAAU5D,CAAS,CAAC,CAC7E,CCFO,SAAS+D,GAAgB3O,EAAO4K,EAAW,CAC9C,OAAOuC,EAAUnN,CAAK,EAAE,KAAKyO,GAAY7D,CAAS,EAAG4D,GAAU5D,CAAS,CAAC,CAC7E,CCJO,SAASgE,GAAc5O,EAAO4K,EAAW,CAC5C,OAAO,IAAIvC,EAAW,SAAUG,EAAY,CACxC,IAAI7I,EAAI,EACR,OAAOiL,EAAU,SAAS,UAAY,CAC9BjL,IAAMK,EAAM,OACZwI,EAAW,SAAQ,GAGnBA,EAAW,KAAKxI,EAAML,GAAG,CAAC,EACrB6I,EAAW,QACZ,KAAK,SAAQ,EAGzB,CAAC,CACL,CAAC,CACL,CCZO,SAASqG,GAAiB7O,EAAO4K,EAAW,CAC/C,OAAO,IAAIvC,EAAW,SAAUG,EAAY,CACxC,IAAIoE,EACJ,OAAAwB,EAAgB5F,EAAYoC,EAAW,UAAY,CAC/CgC,EAAW5M,EAAM8M,EAAe,EAAC,EACjCsB,EAAgB5F,EAAYoC,EAAW,UAAY,CAC/C,IAAI3K,EACAhB,EACAgO,EACJ,GAAI,CACChN,EAAK2M,EAAS,OAAQ3N,EAAQgB,EAAG,MAAOgN,EAAOhN,EAAG,IACvD,OACOwB,EAAK,CACR+G,EAAW,MAAM/G,CAAG,EACpB,MACJ,CACIwL,EACAzE,EAAW,SAAQ,EAGnBA,EAAW,KAAKvJ,CAAK,CAE7B,EAAG,EAAG,EAAI,CACd,CAAC,EACM,UAAY,CAAE,OAAOqF,EAA+DsI,GAAS,MAAM,GAAKA,EAAS,OAAM,CAAI,CACtI,CAAC,CACL,CC5BO,SAASkC,GAAsB9O,EAAO4K,EAAW,CACpD,GAAI,CAAC5K,EACD,MAAM,IAAI,MAAM,yBAAyB,EAE7C,OAAO,IAAIqI,EAAW,SAAUG,EAAY,CACxC4F,EAAgB5F,EAAYoC,EAAW,UAAY,CAC/C,IAAIgC,EAAW5M,EAAM,OAAO,aAAa,EAAC,EAC1CoO,EAAgB5F,EAAYoC,EAAW,UAAY,CAC/CgC,EAAS,KAAI,EAAG,KAAK,SAAUjP,EAAQ,CAC/BA,EAAO,KACP6K,EAAW,SAAQ,EAGnBA,EAAW,KAAK7K,EAAO,KAAK,CAEpC,CAAC,CACL,EAAG,EAAG,EAAI,CACd,CAAC,CACL,CAAC,CACL,CCnBO,SAASoR,GAA2B/O,EAAO4K,EAAW,CACzD,OAAOkE,GAAsB/B,GAAmC/M,CAAK,EAAG4K,CAAS,CACrF,CCSO,SAASoE,GAAUhP,EAAO4K,EAAW,CACxC,GAAI5K,GAAS,KAAM,CACf,GAAIuM,GAAoBvM,CAAK,EACzB,OAAO0O,GAAmB1O,EAAO4K,CAAS,EAE9C,GAAIyB,GAAYrM,CAAK,EACjB,OAAO4O,GAAc5O,EAAO4K,CAAS,EAEzC,GAAI0B,GAAUtM,CAAK,EACf,OAAO2O,GAAgB3O,EAAO4K,CAAS,EAE3C,GAAI4B,GAAgBxM,CAAK,EACrB,OAAO8O,GAAsB9O,EAAO4K,CAAS,EAEjD,GAAIiC,GAAW7M,CAAK,EAChB,OAAO6O,GAAiB7O,EAAO4K,CAAS,EAE5C,GAAIsC,GAAqBlN,CAAK,EAC1B,OAAO+O,GAA2B/O,EAAO4K,CAAS,CAE1D,CACA,MAAM8B,GAAiC1M,CAAK,CAChD,CCjCO,SAAS2D,GAAK3D,EAAO4K,EAAW,CACnC,OAAOA,EAAYoE,GAAUhP,EAAO4K,CAAS,EAAIuC,EAAUnN,CAAK,CACpE,CCFO,SAASiP,IAAK,CAEjB,QADItI,EAAO,CAAA,EACFC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAE3B,IAAIgE,EAAYwB,GAAazF,CAAI,EACjC,OAAOhD,GAAKgD,EAAMiE,CAAS,CAC/B,CCTO,SAASsE,GAAYjQ,EAAO,CAC/B,OAAOA,aAAiB,MAAQ,CAAC,MAAMA,CAAK,CAChD,CCAO,SAASkQ,EAAIC,EAASlN,EAAS,CAClC,OAAOgH,EAAQ,SAAUR,EAAQF,EAAY,CACzC,IAAIxD,EAAQ,EACZ0D,EAAO,UAAUW,EAAyBb,EAAY,SAAUvJ,EAAO,CACnEuJ,EAAW,KAAK4G,EAAQ,KAAKlN,EAASjD,EAAO+F,GAAO,CAAC,CACzD,CAAC,CAAC,CACN,CAAC,CACL,CCPA,IAAIqK,GAAU,MAAM,QACpB,SAASC,GAAYlH,EAAIzB,EAAM,CAC3B,OAAO0I,GAAQ1I,CAAI,EAAIyB,EAAG,MAAM,OAAQ3E,EAAc,CAAA,EAAIH,EAAOqD,CAAI,CAAC,CAAC,EAAIyB,EAAGzB,CAAI,CACtF,CACO,SAAS4I,GAAiBnH,EAAI,CACjC,OAAO+G,EAAI,SAAUxI,EAAM,CAAE,OAAO2I,GAAYlH,EAAIzB,CAAI,CAAG,CAAC,CAChE,CCRA,IAAI0I,GAAU,MAAM,QAChBG,GAAiB,OAAO,eAAgBC,GAAc,OAAO,UAAWC,GAAU,OAAO,KACtF,SAASC,GAAqBhJ,EAAM,CACvC,GAAIA,EAAK,SAAW,EAAG,CACnB,IAAIiJ,EAAUjJ,EAAK,CAAC,EACpB,GAAI0I,GAAQO,CAAO,EACf,MAAO,CAAE,KAAMA,EAAS,KAAM,IAAI,EAEtC,GAAIC,GAAOD,CAAO,EAAG,CACjB,IAAIE,EAAOJ,GAAQE,CAAO,EAC1B,MAAO,CACH,KAAME,EAAK,IAAI,SAAUC,EAAK,CAAE,OAAOH,EAAQG,CAAG,CAAG,CAAC,EACtD,KAAMD,CACtB,CACQ,CACJ,CACA,MAAO,CAAE,KAAMnJ,EAAM,KAAM,IAAI,CACnC,CACA,SAASkJ,GAAOpD,EAAK,CACjB,OAAOA,GAAO,OAAOA,GAAQ,UAAY+C,GAAe/C,CAAG,IAAMgD,EACrE,CCpBO,SAASO,GAAaF,EAAMG,EAAQ,CACvC,OAAOH,EAAK,OAAO,SAAUnS,EAAQoS,EAAKpQ,EAAG,CAAE,OAAShC,EAAOoS,CAAG,EAAIE,EAAOtQ,CAAC,EAAIhC,CAAS,EAAG,EAAE,CACpG,CCOO,SAASuS,IAAgB,CAE5B,QADIvJ,EAAO,CAAA,EACFC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAE3B,IAAIgE,EAAYwB,GAAazF,CAAI,EAC7BwJ,EAAiBhE,GAAkBxF,CAAI,EACvC1G,EAAK0P,GAAqBhJ,CAAI,EAAGyJ,EAAcnQ,EAAG,KAAM6P,EAAO7P,EAAG,KACtE,GAAImQ,EAAY,SAAW,EACvB,OAAOzM,GAAK,CAAA,EAAIiH,CAAS,EAE7B,IAAIjN,EAAS,IAAI0K,EAAWgI,GAAkBD,EAAaxF,EAAWkF,EAE9D,SAAUG,EAAQ,CAAE,OAAOD,GAAaF,EAAMG,CAAM,CAAG,EAEvDlI,CAAQ,CAAC,EACjB,OAAOoI,EAAiBxS,EAAO,KAAK4R,GAAiBY,CAAc,CAAC,EAAIxS,CAC5E,CACO,SAAS0S,GAAkBD,EAAaxF,EAAW0F,EAAgB,CACtE,OAAIA,IAAmB,SAAUA,EAAiBvI,GAC3C,SAAUS,EAAY,CACzB+H,GAAc3F,EAAW,UAAY,CAyBjC,QAxBI4F,EAASJ,EAAY,OACrBH,EAAS,IAAI,MAAMO,CAAM,EACzBC,EAASD,EACTE,EAAuBF,EACvBG,EAAU,SAAUhR,EAAG,CACvB4Q,GAAc3F,EAAW,UAAY,CACjC,IAAIlC,EAAS/E,GAAKyM,EAAYzQ,CAAC,EAAGiL,CAAS,EACvCgG,EAAgB,GACpBlI,EAAO,UAAUW,EAAyBb,EAAY,SAAUvJ,EAAO,CACnEgR,EAAOtQ,CAAC,EAAIV,EACP2R,IACDA,EAAgB,GAChBF,KAECA,GACDlI,EAAW,KAAK8H,EAAeL,EAAO,MAAK,CAAE,CAAC,CAEtD,EAAG,UAAY,CACN,EAAEQ,GACHjI,EAAW,SAAQ,CAE3B,CAAC,CAAC,CACN,EAAGA,CAAU,CACjB,EACS7I,EAAI,EAAGA,EAAI6Q,EAAQ7Q,IACxBgR,EAAQhR,CAAC,CAEjB,EAAG6I,CAAU,CACjB,CACJ,CACA,SAAS+H,GAAc3F,EAAWiG,EAASpG,EAAc,CACjDG,EACAwD,EAAgB3D,EAAcG,EAAWiG,CAAO,EAGhDA,EAAO,CAEf,CCjEO,SAASC,GAAepI,EAAQF,EAAY4G,EAAS2B,EAAYC,EAAcC,EAAQC,EAAmBC,EAAqB,CAClI,IAAIrT,EAAS,CAAA,EACT2S,EAAS,EACTzL,EAAQ,EACRoM,EAAa,GACbC,EAAgB,UAAY,CACxBD,GAAc,CAACtT,EAAO,QAAU,CAAC2S,GACjCjI,EAAW,SAAQ,CAE3B,EACI8I,EAAY,SAAUrS,EAAO,CAAE,OAAQwR,EAASM,EAAaQ,EAAWtS,CAAK,EAAInB,EAAO,KAAKmB,CAAK,CAAI,EACtGsS,EAAa,SAAUtS,EAAO,CAE9BwR,IACA,IAAIe,EAAgB,GACpBrE,EAAUiC,EAAQnQ,EAAO+F,GAAO,CAAC,EAAE,UAAUqE,EAAyBb,EAAY,SAAUiJ,EAAY,CAMhGjJ,EAAW,KAAKiJ,CAAU,CAElC,EAAG,UAAY,CACXD,EAAgB,EACpB,EAAG,OAAW,UAAY,CACtB,GAAIA,EACA,GAAI,CACAf,IAUA,QATIE,EAAU,UAAY,CACtB,IAAIe,EAAgB5T,EAAO,MAAK,EAC5BoT,GAIAK,EAAWG,CAAa,CAEhC,EACO5T,EAAO,QAAU2S,EAASM,GAC7BJ,EAAO,EAEXU,EAAa,CACjB,OACO5P,EAAK,CACR+G,EAAW,MAAM/G,CAAG,CACxB,CAER,CAAC,CAAC,CACN,EACA,OAAAiH,EAAO,UAAUW,EAAyBb,EAAY8I,EAAW,UAAY,CACzEF,EAAa,GACbC,EAAa,CACjB,CAAC,CAAC,EACK,UAAY,CAEnB,CACJ,CCtDO,SAASM,EAASvC,EAASe,EAAgBY,EAAY,CAE1D,OADIA,IAAe,SAAUA,EAAa,KACtCzM,EAAW6L,CAAc,EAClBwB,EAAS,SAAUxS,EAAGQ,EAAG,CAAE,OAAOwP,EAAI,SAAU/P,EAAGwS,EAAI,CAAE,OAAOzB,EAAehR,EAAGC,EAAGO,EAAGiS,CAAE,CAAG,CAAC,EAAEzE,EAAUiC,EAAQjQ,EAAGQ,CAAC,CAAC,CAAC,CAAG,EAAGoR,CAAU,GAE1I,OAAOZ,GAAmB,WAC/BY,EAAaZ,GAEVjH,EAAQ,SAAUR,EAAQF,EAAY,CAAE,OAAOsI,GAAepI,EAAQF,EAAY4G,EAAS2B,CAAU,CAAG,CAAC,EACpH,CCVO,SAASc,GAAMC,EAASC,EAAqBnH,EAAW,CACvDkH,IAAY,SAAUA,EAAU,GAChClH,IAAc,SAAUA,EAAYkB,IACxC,IAAIkG,EAAmB,GACvB,OAAID,GAAuB,OACnB9F,GAAY8F,CAAmB,EAC/BnH,EAAYmH,EAGZC,EAAmBD,GAGpB,IAAI1J,EAAW,SAAUG,EAAY,CACxC,IAAIyJ,EAAM/C,GAAY4C,CAAO,EAAI,CAACA,EAAUlH,EAAU,IAAG,EAAKkH,EAC1DG,EAAM,IACNA,EAAM,GAEV,IAAIjP,EAAI,EACR,OAAO4H,EAAU,SAAS,UAAY,CAC7BpC,EAAW,SACZA,EAAW,KAAKxF,GAAG,EACf,GAAKgP,EACL,KAAK,SAAS,OAAWA,CAAgB,EAGzCxJ,EAAW,SAAQ,EAG/B,EAAGyJ,CAAG,CACV,CAAC,CACL,CChCO,SAASC,GAAU9C,EAASe,EAAgB,CAC/C,OAAO7L,EAAW6L,CAAc,EAAIwB,EAASvC,EAASe,EAAgB,CAAC,EAAIwB,EAASvC,EAAS,CAAC,CAClG,CCDO,SAAS+C,GAAKC,EAAO,CACxB,OAAOA,GAAS,EAER,UAAY,CAAE,OAAOpG,EAAO,EAC9B9C,EAAQ,SAAUR,EAAQF,EAAY,CACpC,IAAI6J,EAAO,EACX3J,EAAO,UAAUW,EAAyBb,EAAY,SAAUvJ,EAAO,CAC/D,EAAEoT,GAAQD,IACV5J,EAAW,KAAKvJ,CAAK,EACjBmT,GAASC,GACT7J,EAAW,SAAQ,EAG/B,CAAC,CAAC,CACN,CAAC,CACT,CCjBO,SAAS8J,GAAMrT,EAAO,CACzB,OAAOkQ,EAAI,UAAY,CAAE,OAAOlQ,CAAO,CAAC,CAC5C,CCGO,SAASsT,GAAUC,EAAuBC,EAAmB,CAMhE,OAAOd,EAAS,SAAU1S,EAAO+F,EAAO,CAAE,OAAOmI,EAAUqF,EAAsBvT,EAAO+F,CAAK,CAAC,EAAE,KAAKmN,GAAK,CAAC,EAAGG,GAAMrT,CAAK,CAAC,CAAG,CAAC,CAClI,CCVO,SAAS8L,GAAMkH,EAAKrH,EAAW,CAC9BA,IAAc,SAAUA,EAAYkB,IACxC,IAAI4G,EAAWb,GAAMI,EAAKrH,CAAS,EACnC,OAAO2H,GAAU,UAAY,CAAE,OAAOG,CAAU,CAAC,CACrD,CCJO,SAASC,EAAqBC,EAAYC,EAAa,CAC1D,OAAIA,IAAgB,SAAUA,EAAc9K,GAC5C6K,EAAaA,GAA4DE,GAClE5J,EAAQ,SAAUR,EAAQF,EAAY,CACzC,IAAIuK,EACAC,EAAQ,GACZtK,EAAO,UAAUW,EAAyBb,EAAY,SAAUvJ,EAAO,CACnE,IAAIgU,EAAaJ,EAAY5T,CAAK,GAC9B+T,GAAS,CAACJ,EAAWG,EAAaE,CAAU,KAC5CD,EAAQ,GACRD,EAAcE,EACdzK,EAAW,KAAKvJ,CAAK,EAE7B,CAAC,CAAC,CACN,CAAC,CACL,CACA,SAAS6T,GAAe3T,EAAGC,EAAG,CAC1B,OAAOD,IAAMC,CACjB,CCpBO,SAAS8T,GAASC,EAAU,CAC/B,OAAOjK,EAAQ,SAAUR,EAAQF,EAAY,CACzC,GAAI,CACAE,EAAO,UAAUF,CAAU,CAC/B,QACR,CACYA,EAAW,IAAI2K,CAAQ,CAC3B,CACJ,CAAC,CACL,CCNO,SAASC,GAAUC,EAAU,CAChC,OAAOnK,EAAQ,SAAUR,EAAQF,EAAY,CACzC2E,EAAUkG,CAAQ,EAAE,UAAUhK,EAAyBb,EAAY,UAAY,CAAE,OAAOA,EAAW,SAAQ,CAAI,EAAGzB,CAAI,CAAC,EACvH,CAACyB,EAAW,QAAUE,EAAO,UAAUF,CAAU,CACrD,CAAC,CACL,CCQO,SAAS8K,GAAoBC,EAAyE,CAC3G,KAAM,CAAE,SAAAC,EAAU,OAAAC,EAAQ,QAAAC,EAAS,UAAAC,EAAW,cAAAC,GAAkBL,EAC1DM,EAASN,EAAQ,QAAU,OAEjC,OAAO,IAAIlL,EAAmCG,GAAc,CAC1D,MAAMsL,EAAa,IAAI,gBACvB,IAAIC,EAGAC,EAAY,GAIZC,EAAW,GAEf,MAAMpT,EAAkC,CACtC,eAAgB,mBAChB,GAAG+S,CAAA,EAGDH,IACF5S,EAAQ,WAAW,EAAI4S,GAKzB,MAAMS,EAAM,IAAI,IAAIV,CAAQ,EAE5B,OAAIG,GACFO,EAAI,aAAa,IAAI,WAAY,MAAM,EAGzCnU,GAAiBmU,EAAI,WAAY,CAC/B,OAAAL,EACA,QAAAhT,EACA,KAAMgT,IAAW,QAAUH,EAAU,KAAK,UAAUA,CAAO,EAAI,OAC/D,OAAQI,EAAW,OAKnB,eAAgB,GAChB,OAAQ,MAAMvS,GAAY,CACxB,GAAKA,EAAS,GAeZwS,EAAiBxS,EAAS,QAAQ,IAAI,YAAY,GAAK,WAfvC,CAChB,IAAI1E,EACJ,GAAI,CACFA,EAAO,MAAM0E,EAAS,KAAA,CACxB,MAAQ,CACN,GAAI,CACF1E,EAAO,MAAM0E,EAAS,KAAA,CACxB,MAAQ,CACN1E,EAAO,IACT,CACF,CAEA2L,EAAW,MAAM,IAAI9L,EAAU6E,EAAS,OAAQA,EAAS,WAAY1E,CAAI,CAAC,EAC1EiX,EAAW,MAAA,CACb,CAGF,EACA,UAAYK,GAA4B,CAElCA,EAAI,KAAIH,EAAY,IAExB,MAAMI,EAAO,KAAK,MAAMD,EAAI,IAAI,EAE5BJ,EACFK,EAAK,QAAUL,EACNK,EAAK,YACdA,EAAK,QAAUA,EAAK,UACfL,IACHA,EAAiBK,EAAK,YAI1B5L,EAAW,KAAK4L,CAAI,CACtB,EACA,QAAS,IAAM,CACb5L,EAAW,SAAA,CACb,EACA,QAAS/G,GAAO,CAKd,GAAIwS,EAAU,MAAMxS,EAMpB,GAAI,CAAAuS,EAIJ,MAAAxL,EAAW,MAAM/G,CAAG,EACpBqS,EAAW,MAAA,EACLrS,CACR,CAAA,CACD,EAEM,IAAY,CACjBwS,EAAW,GACXH,EAAW,MAAA,CACb,CACF,CAAC,CACH,CCzHO,MAAMO,EAAiD,CACpD,UAA+B,CAAA,EAEvC,GAA2BC,EAAUC,EAA2B,CAC9D,KAAK,UAAY,OAAO,OAAO,CAAA,EAAI,KAAK,UAAW,CACjD,CAACD,CAAK,GAAI,KAAK,UAAUA,CAAK,GAAK,CAAA,GAAI,OAAOC,CAAQ,CAAA,CACvD,CACH,CAEA,IAA4BD,EAAUC,EAA2B,CAC1D,KAAK,UAAUD,CAAK,IAEzB,KAAK,UAAY,OAAO,OAAO,CAAA,EAAI,KAAK,UAAW,CACjD,CAACA,CAAK,GAAI,KAAK,UAAUA,CAAK,GAAK,CAAA,GAAI,OAAQzQ,GAAiBA,IAAM0Q,CAAQ,CAAA,CAC/E,EACH,CAEA,OAA+BD,EAAgB,CAC7C,OAAO,KAAK,UAAUA,CAAK,CAC7B,CAEA,KAA6BA,KAAa3N,EAAmC,CACtE,KAAK,UAAU2N,CAAK,GAEzB,KAAK,UAAUA,CAAK,EAAE,QAASC,GAAwBA,EAAS,GAAG5N,CAAI,CAAC,CAC1E,CACF,CCDA,MAAqB6N,EAAoD,CAC/D,OACA,SACA,oBACC,UACD,SAAW,IAAI1K,GACf,OAAS,GACT,SAAW,GACX,YACA,SAAW,EACX,WAAa,IAAIuK,GACjB,oBACA,cAER,YAAY9N,EAAsB,CAEhC,GAAI,CAACA,EAAO,UAAY,CAACA,EAAO,oBAC9B,MAAM,IAAI,MAAM,yDAAyD,EAa3E,GAVA,KAAK,OAASA,EAAO,OACrB,KAAK,UAAYA,EAAO,UACxB,KAAK,oBAAsBA,EAAO,oBAClC,KAAK,oBAAsBA,EAAO,oBAClC,KAAK,cAAgB,CACnB,GAAGA,EAAO,cACV,GAAIA,EAAO,iBAAmB,CAAE,8BAA+BA,EAAO,gBAAA,EAAqB,CAAA,CAAC,EAI1F,CAACA,EAAO,UAAYA,EAAO,oBAAqB,CAGlD,MAAMkO,EAAelO,EAAO,oBAAoB,QAAQ,OAAQ,EAAE,EAClE,KAAK,SAAW,GAAGkO,CAAY,cACjC,MAAWlO,EAAO,WAEhB,KAAK,SAAWA,EAAO,SACnB,KAAK,WAEP,QAAQ,KACN,4OAAA,EAKR,CAEA,GAA8B+N,EAAUC,EAA8B,CACpE,KAAK,WAAW,OAAOD,CAAK,EAC5B,KAAK,WAAW,GAAGA,EAAOC,CAAQ,CACpC,CAEA,YAAYhT,EAAwC,CAClD,OAAQA,EAAS,UAAA,CACf,KAAKnE,EAAU,KACb,KAAK,WAAW,KAAKA,EAAU,KAAMmE,CAAuC,EAE5E,MACF,KAAKnE,EAAU,cACf,KAAKA,EAAU,iBACb,KAAK,WAAW,KAAKA,EAAU,QAASmE,CAAuD,EAE/F,MACF,KAAKnE,EAAU,cACf,KAAKA,EAAU,cACf,KAAKA,EAAU,iBACb,KAAK,WAAW,KAAKA,EAAU,QAASmE,CAAuD,EAE/F,MACF,KAAKnE,EAAU,gBACf,KAAKA,EAAU,mBACb,KAAK,WAAW,KAAKA,EAAU,UAAWmE,CAAyD,EAEnG,MACF,KAAKnE,EAAU,kBACb,KAAK,WAAW,KACdA,EAAU,kBACVmE,CAAA,EAGF,MACF,KAAKnE,EAAU,KACb,KAAK,WAAW,KAAKA,EAAU,KAAMmE,CAAuC,EAE5E,MACF,KAAKnE,EAAU,MACb,KAAK,WAAW,KAAKA,EAAU,MAAOmE,CAAwC,EAE9E,KAEA,CAEN,CAEA,SAASmS,EAA0BH,EAAyC,CAC1E,OAAAA,GAAS,aAAA,EACT,KAAK,UAAY,EAEV,KAAK,OACVD,GAAoB,CAClB,OAAQ,KAAK,OACb,SAAU,KAAK,SACf,UAAW,KAAK,UAChB,QAAS,KAAK,sBAAsBI,CAAO,GAAKA,EAChD,cAAe,KAAK,aAAA,CACrB,EACDH,CAAA,CAEJ,CAOA,UAAUmB,EAAyBnB,EAAyC,CAC1EA,GAAS,aAAA,EACT,KAAK,UAAY,EAEjB,MAAMW,EAAM,IAAI,IAAI,KAAK,QAAQ,EACjC,OAAAA,EAAI,aAAa,IAAI,oBAAqBQ,CAAe,EAElD,KAAK,OACVpB,GAAoB,CAClB,OAAQ,KAAK,OACb,SAAUY,EAAI,SAAA,EACd,UAAW,KAAK,UAChB,OAAQ,MACR,cAAe,KAAK,aAAA,CACrB,EACDX,CAAA,CAEJ,CAEQ,+BAA+C,CACrD,MAAMkB,EAAe,KAAK,gBAAA,EAE1B,OAAOA,EAAe,GAAGA,CAAY,oBAAsB,IAC7D,CAQA,MAAM,gBAAgBC,EAA0D,CAC9E,MAAMlB,EAAW,KAAK,8BAAA,EAEtB,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2FAA2F,EAG7G,MAAMU,EAAM,IAAI,IAAIV,CAAQ,EAC5BU,EAAI,aAAa,IAAI,oBAAqBQ,CAAe,EAEzD,MAAM7T,EAAkC,CAAE,GAAG,KAAK,aAAA,EAC9C,KAAK,SACPA,EAAQ,WAAW,EAAI,KAAK,QAG9B,MAAMU,EAAW,MAAM,MAAM2S,EAAI,SAAA,EAAY,CAAE,OAAQ,MAAO,QAAArT,EAAS,EAEvE,GAAIU,EAAS,SAAW,IACtB,OAAO,KAGT,GAAI,CAACA,EAAS,GACZ,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,EAKxG,MAAMoT,EAA8D,MAAMpT,EAAS,KAAA,EAC7E6S,EAAOO,EAAK,MAASA,EAE3B,MAAO,CACL,MAAOP,EAAK,OAAS,KACrB,SAAUA,EAAK,UAAY,OAC3B,eAAgBA,EAAK,eAGrB,mBAAoBA,EAAK,mBAAqB,CAAA,GAAI,IAAIQ,IAAY,CAChE,YAAaA,EAAQ,YACrB,qBAAsBA,EAAQ,qBAC9B,iBAAkBA,EAAQ,iBAC1B,oBAAqBA,EAAQ,oBAC7B,eAAgBA,EAAQ,cAAA,EACxB,CAAA,CAEN,CAEQ,uBAAuC,CAC7C,MAAMH,EAAe,KAAK,gBAAA,EAE1B,OAAOA,EAAe,GAAGA,CAAY,mBAAqB,IAC5D,CAkBA,MAAM,eACJC,EACAnB,EACe,CACf,MAAMC,EAAW,KAAK,sBAAA,EAEtB,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,0FAA0F,EAG5G,MAAMU,EAAM,IAAI,IAAIV,CAAQ,EAC5BU,EAAI,aAAa,IAAI,oBAAqBQ,CAAe,EAErDnB,GAAS,WACXW,EAAI,aAAa,IAAI,aAAcX,EAAQ,SAAS,EAGlDA,GAAS,OACXW,EAAI,aAAa,IAAI,QAAS,MAAM,EAGtC,MAAM3S,EAAW,MAAM,MAAM2S,EAAI,SAAA,EAAY,CAAE,OAAQ,OAAQ,QAAS,KAAK,WAAA,EAAc,EAG3F,GAAI,EAAA3S,EAAS,IAAMA,EAAS,SAAW,KAIvC,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,CACxG,CAEQ,OAAOuG,EAAgDyL,EAAyC,CACtG,OAAOzL,EACJ,KAICoK,GAAUoC,GAASrF,GAAGqF,CAAK,EAAE,KAAKvJ,GAAMwI,GAAS,WAAa,EAAE,CAAC,CAAC,EAClEH,GAAU,KAAK,QAAQ,EAGvBF,GAAS,IAAM,KAAK,aAAA,CAAc,CAAA,EAEnC,UAAU,CACT,KAAM3R,GAAY,CAGZ,KAAK,WAETgS,GAAS,eAAehS,CAAQ,EAChC,KAAK,YAAYA,CAAQ,EAC3B,EACA,MAAOxE,GAAS,CACT,KAAK,UAAUwW,GAAS,aAAaxW,CAAK,CACjD,EACA,SAAU,IAAM,CACT,KAAK,UAAUwW,GAAS,iBAAA,CAC/B,CAAA,CACD,CACL,CAgBA,OAAOA,EAAsC,CAC3C,GAAI,OAAK,UAAY,KAAK,QAI1B,IAFA,KAAK,SAAW,GAEZ,KAAK,WAAa,EAAG,CACvB,KAAK,MAAA,EAEL,MACF,CAEA,KAAK,YAAc,WAAW,IAAM,KAAK,MAAA,EAASA,EAAQ,SAAS,EACrE,CAEQ,cAAqB,CAC3B,KAAK,SAAW,KAAK,IAAI,EAAG,KAAK,SAAW,CAAC,EAIzC,KAAK,UAAY,KAAK,WAAa,GACrC,KAAK,MAAA,CAET,CAEA,OAAc,CACR,KAAK,SAET,KAAK,OAAS,GAEV,KAAK,cACP,aAAa,KAAK,WAAW,EAC7B,KAAK,YAAc,QAGrB,KAAK,SAAS,KAAA,EACd,KAAK,SAAS,SAAA,EAChB,CAMA,MAAM,WAAWsB,EAAYH,EAAsD,CACjF,MAAMI,EAAe,KAAK,mBAAA,EAE1B,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,+EAA+E,EAGjG,MAAMC,EAAW,IAAI,SACrBA,EAAS,OAAO,OAAQF,CAAI,EAC5BE,EAAS,OAAO,kBAAmBL,CAAe,EAElD,MAAM7T,EAAuB,CAC3B,GAAG,KAAK,aAAA,EAEN,KAAK,SACPA,EAAQ,WAAW,EAAI,KAAK,QAG9B,GAAI,CACF,MAAMU,EAAW,MAAM,MAAMuT,EAAc,CACzC,OAAQ,OACR,QAAAjU,EACA,KAAMkU,CAAA,CACP,EAED,GAAI,CAACxT,EAAS,GACZ,MAAM,IAAI,MAAM,kBAAkBA,EAAS,MAAM,IAAIA,EAAS,UAAU,EAAE,EAG5E,MAAM5D,EAAS,MAAM4D,EAAS,KAAA,EAE9B,OAAI,KAAK,WAEP,QAAQ,IAAI,8CAA+C5D,CAAM,EAG5DA,CACT,OAASZ,EAAO,CAEd,cAAQ,MAAM,2CAA4CA,CAAK,EACzDA,CACR,CACF,CAMA,MAAM,wBAAwBiY,EAAsBN,EAA6D,CAC/G,MAAMD,EAAe,KAAK,gBAAA,EAE1B,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,gGAAgG,EAGlH,MAAMQ,EACJ,qBAAqB,mBAAmBP,CAAe,CAAC,kBAAuB,mBAAmBM,CAAY,CAAC,GAC3Gd,EAAM,GAAGO,CAAY,0BAA0BQ,CAAK,GAEpDpU,EAAuB,CAC3B,GAAG,KAAK,aAAA,EAEN,KAAK,SACPA,EAAQ,WAAW,EAAI,KAAK,QAG9B,GAAI,CACF,MAAMU,EAAW,MAAM,MAAM2S,EAAK,CAChC,OAAQ,MACR,QAAArT,CAAA,CACD,EAED,GAAI,CAACU,EAAS,GACZ,MAAM,IAAI,MAAM,iCAAiCA,EAAS,MAAM,IAAIA,EAAS,UAAU,EAAE,EAG3F,MAAM2T,EAAO,MAAM3T,EAAS,KAAA,EAEtB4T,EAAWH,EAAa,MAAM,GAAG,EAAE,OAAS,WAElD,OAAI,KAAK,WAEP,QAAQ,IAAI,wDAAyD,CAAE,SAAAG,EAAU,KAAMD,EAAK,KAAM,EAG7F,CAAE,KAAAA,EAAM,SAAAC,CAAA,CACjB,OAASpY,EAAO,CAEd,cAAQ,MAAM,qDAAsDA,CAAK,EACnEA,CACR,CACF,CAQA,MAAM,8BAA8BqY,EAAsC,CACxE,MAAMX,EAAe,KAAK,gBAAA,EAE1B,GAAI,CAACA,EACH,MAAM,IAAI,MACR,mGAAA,EAIJ,MAAMP,EAAM,GAAGO,CAAY,YAAY,mBAAmBW,CAAW,CAAC,oBAEhEvU,EAAkC,CAAE,GAAG,KAAK,aAAA,EAC9C,KAAK,SACPA,EAAQ,WAAW,EAAI,KAAK,QAG9B,MAAMU,EAAW,MAAM,MAAM2S,EAAK,CAAE,OAAQ,OAAQ,QAAArT,EAAS,EAE7D,GAAI,CAACU,EAAS,GACZ,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,EAGxG,MAAMoT,EAA+D,MAAMpT,EAAS,KAAA,EAC9E8T,EAAUV,EAAK,MAAM,SAAWA,EAAK,QAE3C,GAAI,CAACU,EACH,MAAM,IAAI,MAAM,+DAA+D,EAGjF,OAAOA,CACT,CAKQ,wBAAwBD,EAA6B,CAC3D,MAAMX,EAAe,KAAK,gBAAA,EAE1B,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,qFAAqF,EAGvG,MAAO,GAAGA,CAAY,YAAY,mBAAmBW,CAAW,CAAC,KACnE,CAGQ,YAAqC,CAC3C,MAAMvU,EAAkC,CAAE,GAAG,KAAK,aAAA,EAClD,OAAI,KAAK,SACPA,EAAQ,WAAW,EAAI,KAAK,QAGvBA,CACT,CAMA,MAAM,cAAcuU,EAAqBE,EAA4C,CACnF,MAAMpB,EAAM,IAAI,IAAI,GAAG,KAAK,wBAAwBkB,CAAW,CAAC,OAAO,EACvElB,EAAI,aAAa,IAAI,OAAQoB,CAAI,EAEjC,MAAM/T,EAAW,MAAM,MAAM2S,EAAI,SAAA,EAAY,CAAE,OAAQ,MAAO,QAAS,KAAK,WAAA,EAAc,EAE1F,GAAI,CAAC3S,EAAS,GACZ,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,EAGxG,MAAMoT,EAAsE,MAAMpT,EAAS,KAAA,EACrF6S,EAAOO,EAAK,MAASA,EAE3B,MAAO,CAAE,QAASP,EAAK,SAAW,CAAA,EAAI,UAAWA,EAAK,WAAa,EAAA,CACrE,CAMA,MAAM,cAAcgB,EAAqBE,EAAc/B,EAA8D,CACnH,MAAMW,EAAM,IAAI,IAAI,GAAG,KAAK,wBAAwBkB,CAAW,CAAC,OAAO,EACvElB,EAAI,aAAa,IAAI,OAAQoB,CAAI,EAC7B/B,GAAS,aAAe,MAAMW,EAAI,aAAa,IAAI,eAAgB,OAAOX,EAAQ,WAAW,CAAC,EAE9FA,GAAS,YAAc,MAAMW,EAAI,aAAa,IAAI,cAAe,OAAOX,EAAQ,UAAU,CAAC,EAE/F,MAAMhS,EAAW,MAAM,MAAM2S,EAAI,SAAA,EAAY,CAAE,OAAQ,MAAO,QAAS,KAAK,WAAA,EAAc,EAE1F,GAAI,CAAC3S,EAAS,GACZ,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,EAGxG,MAAMgU,EAAU,MAAMhU,EAAS,KAAA,EACzBiU,EAAmBjU,EAAS,QAAQ,IAAI,eAAe,EAE7D,MAAO,CACL,QAAAgU,EACA,WAAYC,GAAoB,KAAO,OAAOA,CAAgB,EAAID,EAAQ,KAC1E,UAAWhU,EAAS,QAAQ,IAAI,aAAa,IAAM,MAAA,CAEvD,CAMA,MAAM,eACJ6T,EACAE,EACAC,EACAhC,EAC+B,CAC/B,MAAMW,EAAM,IAAI,IAAI,GAAG,KAAK,wBAAwBkB,CAAW,CAAC,OAAO,EACvElB,EAAI,aAAa,IAAI,OAAQoB,CAAI,EAC7B/B,GAAS,MAAQ,MAAMW,EAAI,aAAa,IAAI,OAAQ,OAAOX,EAAQ,IAAI,CAAC,EAExEA,GAAS,YAAYW,EAAI,aAAa,IAAI,cAAe,MAAM,EAEnE,MAAMuB,EAAO,IAAI,SACjBA,EAAK,OAAO,OAAQF,aAAmB,KAAOA,EAAU,IAAI,KAAK,CAACA,CAAO,CAAC,CAAC,EAE3E,MAAMhU,EAAW,MAAM,MAAM2S,EAAI,WAAY,CAAE,OAAQ,MAAO,QAAS,KAAK,WAAA,EAAc,KAAMuB,EAAM,EAEtG,GAAI,CAAClU,EAAS,GACZ,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,EAGxG,MAAMoT,EAAwE,MAAMpT,EAAS,KAAA,EAG7F,MAAO,CAAE,cAFIoT,EAAK,MAASA,GAEC,cAAgB,CAAA,CAC9C,CAGA,MAAc,iBACZS,EACAlS,EACA2Q,EACAoB,EACkB,CAClB,MAAMf,EAAM,IAAI,IAAI,GAAG,KAAK,wBAAwBkB,CAAW,CAAC,IAAIlS,CAAE,EAAE,EACxE,OAAO,QAAQ+R,CAAK,EAAE,QAAQ,CAAC,CAACS,EAAGzS,CAAC,IAAMiR,EAAI,aAAa,IAAIwB,EAAGzS,CAAC,CAAC,EAEpE,MAAM1B,EAAW,MAAM,MAAM2S,EAAI,SAAA,EAAY,CAAE,OAAAL,EAAQ,QAAS,KAAK,WAAA,CAAW,CAAG,EAEnF,GAAI,CAACtS,EAAS,GACZ,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,EAGxG,OAAOA,EAAS,KAAA,EAAO,MAAM,IAAM,IAAI,CACzC,CAGA,MAAM,cAAc6T,EAAqBE,EAA4C,CACnF,MAAMpB,EAAM,IAAI,IAAI,GAAG,KAAK,wBAAwBkB,CAAW,CAAC,OAAO,EACvElB,EAAI,aAAa,IAAI,OAAQoB,CAAI,EAEjC,MAAM/T,EAAW,MAAM,MAAM2S,EAAI,SAAA,EAAY,CAAE,OAAQ,MAAO,QAAS,KAAK,WAAA,EAAc,EAE1F,GAAI,CAAC3S,EAAS,GACZ,MAAM,IAAI7E,EAAU6E,EAAS,OAAQA,EAAS,WAAY,MAAMA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAe,CAAC,EAGxG,MAAMoT,EAAsE,MAAMpT,EAAS,KAAA,EACrF6S,EAAOO,EAAK,MAASA,EAE3B,MAAO,CACL,OAAQP,EAAK,QAAU,GACvB,MAAOA,EAAK,OAAS,GACrB,UAAWA,EAAK,WAAa,EAC7B,UAAWA,EAAK,WAAa,EAC7B,KAAMA,EAAK,MAAQ,EACnB,KAAMA,EAAK,IAAA,CAEf,CAGA,MAAM,eAAegB,EAAqBE,EAA6B,CACrE,MAAM,KAAK,iBAAiBF,EAAa,QAAS,OAAQ,CAAE,KAAAE,EAAM,CACpE,CAGA,MAAM,gBAAgBF,EAAqBE,EAA6B,CACtE,MAAM,KAAK,iBAAiBF,EAAa,OAAQ,SAAU,CAAE,KAAAE,EAAM,CACrE,CAGA,MAAM,mBAAmBF,EAAqBE,EAA6B,CACzE,MAAM,KAAK,iBAAiBF,EAAa,MAAO,SAAU,CAAE,KAAAE,EAAM,CACpE,CAGA,MAAM,cACJF,EACAO,EACAC,EACArC,EAC8B,CAC9B,MAAM0B,EAAgC,CAAE,IAAAU,EAAK,IAAAC,CAAA,EACzCrC,GAAS,YAAW0B,EAAM,UAAY,QAE1C,MAAMN,EAAQ,MAAM,KAAK,iBAAiBS,EAAa,OAAQ,OAAQH,CAAK,EAK5E,MAAO,CAAE,aAFIN,GAAM,MAASA,IAEA,aAAe,CAAA,CAC7C,CAGA,MAAM,cACJS,EACAO,EACAC,EACArC,EACe,CACf,MAAM0B,EAAgC,CAAE,IAAAU,EAAK,IAAAC,CAAA,EACzCrC,GAAS,YAAW0B,EAAM,UAAY,QAE1C,MAAM,KAAK,iBAAiBG,EAAa,OAAQ,OAAQH,CAAK,CAChE,CAOA,eAAeG,EAAqBE,EAA+C,CACjF,MAAMpB,EAAM,IAAI,IAAI,GAAG,KAAK,wBAAwBkB,CAAW,CAAC,QAAQ,EACxE,OAAAlB,EAAI,aAAa,IAAI,OAAQoB,CAAI,EAE1B,IAAIjN,EAAgCG,GAAc,CACvD,MAAMsL,EAAa,IAAI,gBAEvB,OAAK/T,GAAiBmU,EAAI,WAAY,CACpC,QAAS,KAAK,WAAA,EACd,OAAQJ,EAAW,OACnB,eAAgB,GAChB,OAAQ,MAAMvS,GAAY,CACxB,GAAI,CAACA,EAAS,GAAI,CAChB,MAAM1E,EAAO,MAAM0E,EAAS,OAAO,MAAM,IAAA,EAAe,EACxDiH,EAAW,MAAM,IAAI9L,EAAU6E,EAAS,OAAQA,EAAS,WAAY1E,CAAI,CAAC,EAC1EiX,EAAW,MAAA,CACb,CACF,EACA,UAAWK,GAAO,CACZA,EAAI,QAAU,UAAU3L,EAAW,KAAK,KAAK,MAAM2L,EAAI,IAAI,CAAwB,CACzF,EACA,QAAS,IAAM3L,EAAW,SAAA,EAC1B,QAAS/G,GAAO,CAGd,MAAA+G,EAAW,MAAM/G,CAAG,EACpBqS,EAAW,MAAA,EACLrS,CACR,CAAA,CACD,EAEM,IAAYqS,EAAW,MAAA,CAChC,CAAC,CACH,CAKQ,oBAAoC,CAC1C,MAAMW,EAAe,KAAK,gBAAA,EAE1B,OAAOA,EAAe,GAAGA,CAAY,QAAU,IACjD,CAMQ,iBAAiC,CACvC,IAAIA,EAAe,KAAK,oBAOxB,MAJI,CAACA,GAAgB,KAAK,WACxBA,EAAe,KAAK,SAAS,QAAQ,eAAgB,EAAE,GAGpDA,EAKEA,EAAa,QAAQ,OAAQ,EAAE,EAJ7B,IAKX,CACF,CC5uBA,MAAMoB,EAAY,CAAA,EAClB,QAASlW,EAAI,EAAGA,EAAI,IAAK,EAAEA,EACvBkW,EAAU,MAAMlW,EAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,EAE7C,SAASmW,GAAgB5X,EAAK6X,EAAS,EAAG,CAC7C,OAAQF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EAC7BF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzBF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzBF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzB,IACAF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzBF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzB,IACAF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzBF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzB,IACAF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzBF,EAAU3X,EAAI6X,EAAS,CAAC,CAAC,EACzB,IACAF,EAAU3X,EAAI6X,EAAS,EAAE,CAAC,EAC1BF,EAAU3X,EAAI6X,EAAS,EAAE,CAAC,EAC1BF,EAAU3X,EAAI6X,EAAS,EAAE,CAAC,EAC1BF,EAAU3X,EAAI6X,EAAS,EAAE,CAAC,EAC1BF,EAAU3X,EAAI6X,EAAS,EAAE,CAAC,EAC1BF,EAAU3X,EAAI6X,EAAS,EAAE,CAAC,GAAG,YAAW,CAChD,CC1BA,IAAIC,GACJ,MAAMC,GAAQ,IAAI,WAAW,EAAE,EAChB,SAASC,IAAM,CAC1B,GAAI,CAACF,GAAiB,CAClB,GAAI,OAAO,OAAW,KAAe,CAAC,OAAO,gBACzC,MAAM,IAAI,MAAM,0GAA0G,EAE9HA,GAAkB,OAAO,gBAAgB,KAAK,MAAM,CACxD,CACA,OAAOA,GAAgBC,EAAK,CAChC,CCTA,MAAAE,GAAe,CAAE,WADE,OAAO,OAAW,KAAe,OAAO,YAAc,OAAO,WAAW,KAAK,MAAM,CAC3E,ECE3B,SAASC,GAAI7C,EAAS8C,EAAKN,EAAQ,CAC/BxC,EAAUA,GAAW,CAAA,EACrB,MAAM+C,EAAO/C,EAAQ,QAAUA,EAAQ,MAAG,GAAQ2C,GAAG,EACrD,GAAII,EAAK,OAAS,GACd,MAAM,IAAI,MAAM,mCAAmC,EAEvD,OAAAA,EAAK,CAAC,EAAKA,EAAK,CAAC,EAAI,GAAQ,GAC7BA,EAAK,CAAC,EAAKA,EAAK,CAAC,EAAI,GAAQ,IAWtBR,GAAgBQ,CAAI,CAC/B,CACA,SAASC,GAAGhD,EAAS8C,EAAKN,EAAQ,CAC9B,OAAII,GAAO,YAAsB,CAAC5C,EACvB4C,GAAO,WAAU,EAErBC,GAAI7C,CAAoB,CACnC,CCXA,MAAqBiD,CAAsC,CAClD,SAAoD,KACpD,eAAkD,KAEzD,YAAY,CAAE,SAAAC,EAAU,eAAAC,EAAiB,MAAuB,CAC9D,KAAK,SAAWD,EAChB,KAAK,eAAiBC,GAAkB,IAC1C,CAEA,YAAY/X,EAA4C,CACtD,MAAM8X,EAAW,IAAI,IAAI,KAAK,QAAQ,EACtC,OAAAA,EAAS,IAAI9X,EAAQ,UAAWA,CAAO,EAEhC,IAAI6X,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,qBAAoC,CAClC,OAAK,KAAK,eAEH,IAAID,EAAa,CAAE,SAAU,KAAK,SAAU,eAAgB,KAAM,EAFxC,IAGnC,CAeA,wBAAuC,CACrC,GAAI,CAAC,KAAK,SAAU,OAAO,KAE3B,IAAIG,EAAU,GACd,MAAMF,EAAW,IAAI,IAAI,KAAK,QAAQ,EACtC,SAAW,CAACjV,EAAI7C,CAAO,IAAK8X,EACtB9X,EAAQ,OAAS,aAAe,CAACA,EAAQ,aAC3C8X,EAAS,IAAIjV,EAAI,CAAE,GAAG7C,EAAS,WAAY,GAAM,YAAa,GAAM,EACpEgY,EAAU,IAKRhY,EAAQ,OAAS,YAAcA,EAAQ,aACzC8X,EAAS,IAAIjV,EAAI,CAAE,GAAG7C,EAAS,WAAY,GAAO,EAClDgY,EAAU,IAId,OAAKA,EAEE,IAAIH,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,EAFpD,IAGvB,CAOA,yBAAwC,CACtC,OAAO,KAAK,uBAAA,CACd,CAEA,UAAUlV,EAAgD,CACxD,OAAQA,EAAS,UAAA,CACf,KAAKnE,EAAU,cACb,OAAO,KAAK,eAAemE,CAAgD,EAC7E,KAAKnE,EAAU,cACb,OAAO,KAAK,eAAemE,CAAgD,EAC7E,KAAKnE,EAAU,iBACb,OAAO,KAAK,kBAAkBmE,CAAmD,EACnF,KAAKnE,EAAU,aACb,OAAO,KAAK,cAAcmE,CAA+C,EAC3E,KAAKnE,EAAU,uBACb,OAAO,KAAK,gBAAgBmE,CAAyD,EACvF,KAAKnE,EAAU,uBACb,OAAO,KAAK,gBAAgBmE,CAAyD,EACvF,KAAKnE,EAAU,0BACb,OAAO,KAAK,mBAAmBmE,CAA4D,EAC7F,KAAKnE,EAAU,gBACb,OAAO,KAAK,gBAAgBmE,CAAkD,EAChF,KAAKnE,EAAU,mBACb,OAAO,KAAK,mBAAmBmE,CAAqD,EACtF,KAAKnE,EAAU,kBACb,OAAO,KAAK,kBAAkBmE,CAAoD,EACpF,KAAKnE,EAAU,eACb,OAAO,KAAK,gBAAgBmE,CAAiD,EAC/E,KAAKnE,EAAU,kBACb,OAAO,KAAK,mBAAmBmE,CAAoD,EACrF,KAAKnE,EAAU,MACb,OAAO,KAAK,eAAemE,CAAwC,EACrE,QACE,OAAO,IAAA,CAEb,CAOQ,cAAc5C,EAAmD,CACvE,OAAOA,GAAS,OAAS,OAAS,CAACA,EAAQ,QAC7C,CAOQ,mBAAmBA,EAAmD,CAC5E,OAAOA,GAAS,OAAS,YAAc,CAACA,EAAQ,UAClD,CAEA,eAAe4C,EAA8D,CAC3E,MAAM5C,EAAU4C,EAAS,KAAK,aAAa,QAG3C,GAAI5C,EAAQ,gBAAiB,OAAO,KAGpC,GAAI,KAAK,cAAc,KAAK,UAAU,IAAIA,EAAQ,SAAS,CAAC,EAAG,OAAO,KAEtE,MAAM8X,EAAW,IAAI,IAAI,KAAK,QAAQ,EAEtC,OAAAA,EAAS,IAAI9X,EAAQ,UAAW,CAC9B,KAAM,MACN,UAAWvB,EAAU,cACrB,SAAU,GACV,WAAY,GACZ,UAAWuB,EAAQ,UACnB,QAAAA,EACA,SAAU,KACV,QAAS4C,EAAS,QAClB,IAAK,EAAA,CACN,EAEM,IAAIiV,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,eAAelV,EAA8D,CAC3E,MAAM5C,EAAU4C,EAAS,KAAK,aAAa,QAG3C,GAAI5C,EAAQ,gBAAiB,OAAO,KAEpC,MAAMiY,EAAiB,KAAK,UAAU,IAAIjY,EAAQ,SAAS,EAG3D,GAAI,KAAK,cAAciY,CAAc,EAAG,OAAO,KAI/C,MAAMC,EAAaD,GAAgB,OAAS,MAAQA,EAAiB,OAC/DH,EAAW,IAAI,IAAI,KAAK,QAAQ,EAEtC,OAAAA,EAAS,IAAI9X,EAAQ,UAAW,CAC9B,KAAM,MACN,UAAWvB,EAAU,cACrB,SAAU,GACV,WAAY,GAAGyZ,GAAY,YAAc,EAAE,GAAGlY,EAAQ,IAAI,GAC1D,UAAWA,EAAQ,UACnB,QAAAA,EACA,SAAU,KACV,QAAS4C,EAAS,SAAWsV,GAAY,QACzC,IAAKA,GAAY,KAAO,EAAA,CACzB,EAEM,IAAIL,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,kBAAkBlV,EAAiE,CACjF,MAAM5C,EAAU4C,EAAS,KAAK,gBAAgB,QAG9C,GAAI5C,EAAQ,gBAAiB,OAAO,KAEpC,MAAM8X,EAAW,IAAI,IAAI,KAAK,QAAQ,EAEhCG,EAAiBH,EAAS,IAAI9X,EAAQ,SAAS,EAErD,OAAA8X,EAAS,IAAI9X,EAAQ,UAAW,CAC9B,KAAM,MACN,UAAWvB,EAAU,iBACrB,SAAU,GACV,WAAY,KACZ,UAAWuB,EAAQ,UACnB,QAAAA,EACA,SAAU,KACV,QAAS4C,EAAS,UAAYqV,GAAgB,OAAS,MAAQA,EAAe,QAAU,QACxF,IAAK,KAAK,UAAUrV,CAAQ,CAAA,CAC7B,EAEM,IAAIiV,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,gBAAgBlV,EAAuE,CACrF,MAAM5C,EAAU4C,EAAS,KAAK,qBAAqB,QAGnD,GAAI5C,EAAQ,gBAAiB,OAAO,KAGpC,GAAI,KAAK,mBAAmB,KAAK,UAAU,IAAIA,EAAQ,SAAS,CAAC,EAAG,OAAO,KAE3E,MAAM8X,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChCK,EAAwC,CAC5C,KAAM,WACN,UAAWnY,EAAQ,UACnB,KAAMA,EAAQ,KACd,WAAY,GACZ,SAAU,KACV,QAAS4C,EAAS,OAAA,EAEpB,OAAAkV,EAAS,IAAI9X,EAAQ,UAAWmY,CAAQ,EAEjC,IAAIN,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,gBAAgBlV,EAAuE,CACrF,MAAM5C,EAAU4C,EAAS,KAAK,qBAAqB,QAGnD,GAAI5C,EAAQ,gBAAiB,OAAO,KAEpC,MAAMiY,EAAiB,KAAK,UAAU,IAAIjY,EAAQ,SAAS,EAG3D,GAAI,KAAK,mBAAmBiY,CAAc,EAAG,OAAO,KAIpD,MAAMG,EAAkBH,GAAgB,OAAS,WAAaA,EAAiB,OACzEH,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChCK,EAAwC,CAC5C,KAAM,WACN,UAAWnY,EAAQ,UACnB,KAAM,GAAGoY,GAAiB,MAAQ,EAAE,GAAGpY,EAAQ,IAAI,GACnD,WAAY,GACZ,KAAMoY,GAAiB,MAAQ,IAAI,KACnC,QAASxV,EAAS,SAAWwV,GAAiB,OAAA,EAEhD,OAAAN,EAAS,IAAI9X,EAAQ,UAAWmY,CAAQ,EAEjC,IAAIN,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,mBAAmBlV,EAA0E,CAC3F,MAAM5C,EAAU4C,EAAS,KAAK,wBAAwB,QAGtD,GAAI5C,EAAQ,gBAAiB,OAAO,KAEpC,MAAMiY,EAAiB,KAAK,UAAU,IAAIjY,EAAQ,SAAS,EACrDoY,EAAkBH,GAAgB,OAAS,WAAaA,EAAiB,OAEzEH,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChCK,EAAwC,CAC5C,KAAM,WACN,UAAWnY,EAAQ,UAGnB,KAAMA,EAAQ,KACd,WAAY,GACZ,KAAMoY,GAAiB,MAAQ,IAAI,KACnC,QAASxV,EAAS,SAAWwV,GAAiB,OAAA,EAEhD,OAAAN,EAAS,IAAI9X,EAAQ,UAAWmY,CAAQ,EAEjC,IAAIN,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,cAAclV,EAA6D,CACzE,MAAM6S,EAAO7S,EAAS,KAAK,YAS3B,IAHE,KAAK,UAAU,IAAI6S,EAAK,SAAS,IAChCA,EAAK,gBAAkB,KAAK,UAAU,IAAIA,EAAK,eAAe,EAAI,UAEvD,OAAS,OAAQ,OAAO,KAEtC,MAAMqC,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChCO,EAAuC,CAC3C,KAAM,OACN,UAAW5C,EAAK,UAChB,KAAMA,EAAK,KACX,QAASA,EAAK,QACd,gBAAiBA,EAAK,gBACtB,aAAcA,EAAK,aACnB,SAAU,KACV,QAAS7S,EAAS,OAAA,EAEpB,OAAAkV,EAAS,IAAIrC,EAAK,UAAW4C,CAAW,EAEjC,IAAIR,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,eAAelV,EAAsD,CACnE,MAAM0V,EAAYC,GAAA,EACZna,EAAQwE,EAAS,KAAK,SAAS,MAE/BkV,EAAW,IAAI,IAAI,KAAK,QAAQ,EAEtC,OAAAA,EAAS,IAAIQ,EAAW,CACtB,KAAM,QACN,UAAW7Z,EAAU,MACrB,UAAA6Z,EACA,MAAAla,EACA,SAAU,KACV,QAASwE,EAAS,OAAA,CACnB,EAEM,IAAIiV,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,gBAAgBlV,EAAgE,CAC9E,MAAM4V,EAAgB5V,EAAS,KAAK,cAC9BkV,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChCW,EAAc,GAAGD,EAAc,SAAS,IAAIA,EAAc,OAAO,GAEjEE,EAA+C,CACnD,KAAM,YACN,UAAWja,EAAU,gBACrB,UAAWga,EACX,UAAWD,EAAc,UACzB,QAASA,EAAc,QACvB,SAAUA,EAAc,SAAS,SACjC,OAAQA,EAAc,SAAS,OAC/B,YAAaA,EAAc,SAAS,YACpC,UAAWA,EAAc,SAAS,UAClC,UAAWA,EAAc,UACzB,gBAAiBA,EAAc,gBAC/B,WAAY,GACZ,SAAU,KACV,QAAS5V,EAAS,OAAA,EAGpB,OAAAkV,EAAS,IAAIW,EAAaC,CAAe,EAElC,IAAIb,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,mBAAmBlV,EAAmE,CACpF,MAAM+V,EAAmB/V,EAAS,KAAK,iBACjCkV,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChCW,EAAc,GAAGE,EAAiB,SAAS,IAAIA,EAAiB,OAAO,GAEvEC,EAAkBd,EAAS,IAAIW,CAAW,EAEhD,GAAIG,GAAiB,OAAS,YAAa,CACzC,MAAMC,EAA8C,CAClD,GAAGD,EACH,UAAWna,EAAU,mBACrB,OAAQka,EAAiB,eACzB,QAASA,EAAiB,QAC1B,QAASA,EAAiB,qBAC1B,WAAY,GACZ,QAAS/V,EAAS,SAAWgW,EAAgB,OAAA,EAE/Cd,EAAS,IAAIW,EAAaI,CAAc,CAC1C,CAEA,OAAO,IAAIhB,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,kBAAkBlV,EAAkE,CAClF,MAAMkW,EAAUlW,EAAS,KAAK,gBAE9B,OAAO,IAAIiV,EAAa,CAAE,SAAU,KAAK,SAAU,eAAgBiB,EAAS,CAC9E,CAEA,gBAAgBlW,EAA+D,CAC7E,MAAMmW,EAAQnW,EAAS,KAAK,cACtBkV,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChC1G,EAAM,YAAY2H,EAAM,eAAe,SAEvC/Y,EAAuC,CAC3C,KAAM,WACN,UAAWoR,EACX,KAAM,QACN,gBAAiB2H,EAAM,gBACvB,QAASA,EAAM,QACf,aAAcA,EAAM,aACpB,YAAaA,EAAM,YACnB,SAAU,KACV,QAASnW,EAAS,OAAA,EAGpB,OAAAkV,EAAS,IAAI1G,EAAKpR,CAAO,EAElB,IAAI6X,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CAEA,mBAAmBlV,EAAkE,CACnF,MAAMgG,EAAWhG,EAAS,KAAK,iBACzBkV,EAAW,IAAI,IAAI,KAAK,QAAQ,EAChC1G,EAAM,YAAYxI,EAAS,eAAe,YAE1C5I,EAAuC,CAC3C,KAAM,WACN,UAAWoR,EACX,KAAM,WACN,gBAAiBxI,EAAS,gBAC1B,QAASA,EAAS,QAClB,aAAcA,EAAS,aACvB,OAAQA,EAAS,OACjB,QAASA,EAAS,QAClB,SAAU,KACV,QAAShG,EAAS,OAAA,EAGpB,OAAAkV,EAAS,IAAI1G,EAAKpR,CAAO,EAElB,IAAI6X,EAAa,CAAE,SAAAC,EAAU,eAAgB,KAAK,eAAgB,CAC3E,CACF,CC5aA,MAAMkB,GAAa,IAAI,IAAI,CAAC,aAAc,YAAY,CAAC,EAGhD,SAASC,GAAWC,EAA0D,CACnF,OAAOA,EAAK,cAAgB,IAAMF,GAAW,IAAIE,EAAK,QAAQ,CAChE,CAaA,SAASC,GAAS7Y,EAAqD,CACrE,OAAO,OAAOA,GAAU,UAAYA,IAAU,KAAQA,EAAoC,MAC5F,CAEA,SAAS8Y,EAAS9Y,EAAoC,CACpD,OAAO,OAAOA,GAAU,SAAWA,EAAQ,MAC7C,CAMO,SAAS+Y,GAAiBC,EAAiC,CAChE,MAAMC,EAAkB,CAAA,EAClBC,MAAW,IAEjB,UAAW7D,KAAS2D,EAAQ,CAC1B,MAAMG,EAAY9D,EAAM,WAAa,CAAA,EAC/B+D,EAAU/D,EAAM,SAAW,CAAA,EAEjC,GAAIA,EAAM,WAAa,aAAc,CACnC,MAAMgE,EAAOR,GAASO,EAAQ,IAAI,EAC5B7W,EAAKuW,EAASO,GAAM,EAAE,EAE5B,GAAI,CAAC9W,EAAI,SAEJ2W,EAAK,IAAI3W,CAAE,GAAG0W,EAAM,KAAK1W,CAAE,EAEhC2W,EAAK,IAAI3W,EAAI,CACX,GAAAA,EACA,QAASuW,EAASK,EAAU,OAAO,GAAKL,EAASO,GAAM,OAAO,GAAK,GACnE,WAAYP,EAASK,EAAU,UAAU,EACzC,YAAaL,EAASK,EAAU,WAAW,EAC3C,OAAQD,EAAK,IAAI3W,CAAE,GAAG,QAAU,SAAA,CACjC,CACH,SAAW8S,EAAM,WAAa,aAAc,CAC1C,MAAMiE,EAAeT,GAASO,EAAQ,YAAY,EAC5C7W,EAAKuW,EAASK,EAAU,MAAM,GAAKL,EAASM,EAAQ,MAAM,EAE1D3U,EAAMqU,EAASQ,GAAc,EAAE,GAAKR,EAASK,EAAU,MAAM,EAEnE,GAAI,CAAC5W,GAAM,CAACkC,EAAI,SAEhB,MAAMyE,EAAOgQ,EAAK,IAAI3W,CAAE,EAEpB2G,KAAW,IAAI3G,EAAI,CAAE,GAAG2G,EAAM,OAAQzE,EAAI,CAEhD,CACF,CAEA,OAAOwU,EAAM,IAAI1W,GAAM2W,EAAK,IAAI3W,CAAE,CAAS,CAC7C,CChEO,SAASgX,GAAYX,EAA0D,CACpF,OAAOA,EAAK,cAAgB,IAAMA,EAAK,WAAa,OACtD,CAGO,SAASY,GAAoBC,EAAmC,CACrE,MAAO,CAAC,CAACA,CACX,CA+BO,SAASC,GAAgBV,EAAqC,CACnE,MAAMC,EAAkB,CAAA,EAClBU,MAAW,IACXC,MAAY,IAEZC,EAAUtX,IACToX,EAAK,IAAIpX,CAAE,IACd0W,EAAM,KAAK1W,CAAE,EACboX,EAAK,IAAIpX,EAAI,CAAE,OAAQ,UAAW,EAClCqX,EAAM,IAAIrX,EAAI,IAAI,GAAK,GAGlBoX,EAAK,IAAIpX,CAAE,GAGpB,UAAW8S,KAAS2D,EAClB,OAAQ3D,EAAM,KAAA,CACZ,IAAK,aAAc,CACjB,MAAMjR,EAAIyV,EAAOxE,EAAM,SAAS,EAE5BA,EAAM,aAAe,CAACjR,EAAE,cAAaA,EAAE,YAAciR,EAAM,aAE/D,KACF,CAEA,IAAK,gBAAiB,CACpB,MAAMjR,EAAIyV,EAAOxE,EAAM,eAAe,EAEtCjR,EAAE,QAAUiR,EAAM,SAAWjR,EAAE,QAC/BA,EAAE,aAAeiR,EAAM,cAAgBjR,EAAE,aACzCA,EAAE,YAAciR,EAAM,aAAejR,EAAE,YAEvC,KACF,CAEA,IAAK,YAAa,CAChByV,EAAOxE,EAAM,eAAe,EAC3BuE,EAAM,IAAIvE,EAAM,eAAe,EAAoC,IAAIA,EAAM,UAAW,CACvF,YAAaA,EAAM,YACnB,SAAUA,EAAM,SAChB,UAAWA,EAAM,WAAa,CAAA,EAC9B,OAAQA,EAAM,OACd,OAAQ,SAAA,CACT,EAED,KACF,CAEA,IAAK,eAAgB,CACnB,MAAMyE,EAAOF,EAAM,IAAIvE,EAAM,eAAe,GAAG,IAAIA,EAAM,SAAS,EAE9DyE,IAAMA,EAAK,OAASzE,EAAM,QAAU,QAAU,aAElD,KACF,CAEA,IAAK,mBAAoB,CACvB,MAAMjR,EAAIyV,EAAOxE,EAAM,eAAe,EAEtCjR,EAAE,OAASiR,EAAM,OACjBjR,EAAE,QAAUiR,EAAM,QAElB,KACF,CAAA,CAIJ,OAAO4D,EAAM,IAAI1W,IAAO,CACtB,gBAAiBA,EACjB,GAAIoX,EAAK,IAAIpX,CAAE,EACf,MAAO,MAAM,KAAMqX,EAAM,IAAIrX,CAAE,EAAoC,QAAQ,CAAA,EAC3E,CACJ,CC/GA,SAASwX,GAAI/Z,EAAoC,CAC/C,OAAO,OAAOA,GAAU,SAAWA,EAAQ,MAC7C,CAQO,SAASga,GAA6BxC,EAAkD,CAC7F,MAAMwB,EAA0B,CAAA,EAEhC,UAAWtZ,KAAW8X,EAAU,CAC9B,GAAI9X,EAAQ,OAAS,aAAe6Z,GAAY7Z,CAAO,EAAG,CACxDsZ,EAAO,KAAK,CACV,KAAM,aACN,UAAWtZ,EAAQ,WAAaA,EAAQ,UACxC,YAAaqa,GAAIra,EAAQ,UAAU,WAAW,CAAA,CAC/C,EACD,QACF,CAEA,GAAIA,EAAQ,OAAS,aAAe8Z,GAAoB9Z,EAAQ,eAAe,EAAG,CAChF,MAAMua,EAAYva,EAAQ,WAAaA,EAAQ,UAE/CsZ,EAAO,KAAK,CACV,KAAM,YACN,gBAAiBtZ,EAAQ,gBACzB,UAAAua,EACA,YAAava,EAAQ,YACrB,SAAUA,EAAQ,SAClB,UAAWA,EAAQ,UACnB,OAAQA,EAAQ,MAAA,CACjB,EAEGA,EAAQ,YACVsZ,EAAO,KAAK,CACV,KAAM,eACN,gBAAiBtZ,EAAQ,gBACzB,UAAAua,EACA,QAASva,EAAQ,OAAA,CAClB,EAGH,QACF,CAEA,GAAIA,EAAQ,OAAS,YAAcA,EAAQ,OAAS,QAAS,CAC3DsZ,EAAO,KAAK,CACV,KAAM,gBACN,gBAAiBtZ,EAAQ,gBACzB,QAASA,EAAQ,QACjB,aAAcA,EAAQ,aACtB,YAAaA,EAAQ,WAAA,CACtB,EACD,QACF,CAEIA,EAAQ,OAAS,YAAcA,EAAQ,OAAS,YAAcA,EAAQ,QACxEsZ,EAAO,KAAK,CACV,KAAM,mBACN,gBAAiBtZ,EAAQ,gBACzB,OAAQA,EAAQ,OAChB,QAASA,EAAQ,OAAA,CAClB,CAEL,CAEA,OAAOsZ,CACT,CAGO,SAASkB,GAAYC,EAAoC,CAC9D,MAAM3C,EAAW,MAAM,KAAK2C,EAAa,UAAU,OAAA,GAAY,CAAA,CAAE,EAAE,OAChEza,GACCA,EAAQ,OAAS,aAAeA,EAAQ,YAAciZ,GAAWjZ,CAAO,CAAA,EAG5E,OAAOqZ,GAAiBvB,CAAQ,CAClC,CAGO,SAAS4C,GAAgBD,EAAwC,CACtE,OAAOT,GAAgBM,GAA6B,MAAM,KAAKG,EAAa,UAAU,OAAA,GAAY,CAAA,CAAE,CAAC,CAAC,CACxG,CAGO,SAASE,GAAWna,EAAWC,EAAoB,CACxD,OAAID,IAAMC,EAAU,GAEhBD,EAAE,SAAWC,EAAE,OAAe,GAE3BD,EAAE,MAAM,CAACmZ,EAAM3Y,IAAM,CAC1B,MAAM4Z,EAAQna,EAAEO,CAAC,EAEjB,OACE2Y,EAAK,KAAOiB,EAAM,IAClBjB,EAAK,SAAWiB,EAAM,QACtBjB,EAAK,UAAYiB,EAAM,SACvBjB,EAAK,aAAeiB,EAAM,YAC1BjB,EAAK,cAAgBiB,EAAM,WAE/B,CAAC,CACH,CAEA,SAASC,GAAWra,EAAuBC,EAAgC,CACzE,OAAID,EAAE,SAAWC,EAAE,OAAe,GAE3BD,EAAE,MAAM,CAAC4Z,EAAMpZ,IAAM,CAC1B,MAAM4Z,EAAQna,EAAEO,CAAC,EAEjB,OACEoZ,EAAK,WAAaQ,EAAM,UACxBR,EAAK,cAAgBQ,EAAM,aAC3BR,EAAK,SAAWQ,EAAM,QACtBR,EAAK,SAAWQ,EAAM,MAE1B,CAAC,CACH,CAGO,SAASE,GAAeta,EAAeC,EAAwB,CACpE,OAAID,IAAMC,EAAU,GAEhBD,EAAE,SAAWC,EAAE,OAAe,GAE3BD,EAAE,MAAM,CAACua,EAAU/Z,IAAM,CAC9B,MAAM4Z,EAAQna,EAAEO,CAAC,EAEjB,OACE+Z,EAAS,kBAAoBH,EAAM,iBACnCG,EAAS,SAAWH,EAAM,QAC1BG,EAAS,eAAiBH,EAAM,cAChCG,EAAS,cAAgBH,EAAM,aAC/BG,EAAS,UAAYH,EAAM,SAC3BC,GAAWE,EAAS,MAAOH,EAAM,KAAK,CAE1C,CAAC,CACH,CAoBO,SAASI,GAAoBC,EAAwD,CAC1F,MAAMC,EAAS,IAAItP,EAAwB,EAAE,EACvCuP,EAAa,IAAIvP,EAA4B,EAAE,EAC/CE,EAAe,IAAIxF,EAEzB,OAAAwF,EAAa,IAAImP,EAAc,KAAKzK,EAAIgK,EAAW,EAAGxG,EAAqB2G,EAAU,CAAC,EAAE,UAAUO,CAAM,CAAC,EACzGpP,EAAa,IACXmP,EAAc,KAAKzK,EAAIkK,EAAe,EAAG1G,EAAqB8G,EAAc,CAAC,EAAE,UAAUK,CAAU,CAAA,EAG9F,CACL,OAAQD,EAAO,aAAA,EACf,WAAYC,EAAW,aAAA,EACvB,SAAU,IAAMD,EAAO,MACvB,aAAc,IAAMC,EAAW,MAC/B,SAAU,IAAMrP,EAAa,YAAA,CAAY,CAE7C,CCvLO,SAASsP,GAAkBC,EAAyD,CACzF,MAAMC,MAAa,IACnB,UAAWrF,KAAWoF,EAAUC,EAAO,IAAIrF,EAAQ,YAAaA,CAAO,EAEvE,MAAO,CAAC,GAAGqF,EAAO,OAAA,CAAQ,EAAE,KAAK,CAAC9a,EAAGC,KAClCD,EAAE,sBAAwBA,EAAE,aAAa,cAAcC,EAAE,sBAAwBA,EAAE,WAAW,CAAA,CAEnG,CCWA,MAAM8a,GAA6B,CAAE,KAAM,KAAM,UAAW,MAAA,EAG/CC,GAAwB,IAErC,SAASC,GAAejb,EAAcC,EAAuB,CAC3D,OAAOD,EAAE,OAASC,EAAE,MAAQD,EAAE,YAAcC,EAAE,WAAaD,EAAE,YAAcC,EAAE,SAC/E,CAEA,MAAqBib,CAAQ,CACnB,OAED,gBACA,gBAGC,aAEA,cACA,iBACA,cACA,oBACA,oBACA,yBAGA,gBAA4B,CAAA,EAC5B,cACA,eACA,mBAGQ,OAEA,WAEA,cAEA,cAEA,mBAEA,WACR,qBAKA,kBAQA,WAGA,eAEA,YAAY9T,EAAuB,CACzC,GAAI,CAACA,EAAO,OACV,MAAM,IAAI,MAAM,yBAAyB,EAG3C,GAAI,CAACA,EAAO,gBACV,MAAM,IAAI,MAAM,kCAAkC,EAGpD,KAAK,OAASA,EAAO,OACrB,KAAK,gBAAkBA,EAAO,gBAC9B,KAAK,gBAAkBA,EAAO,gBAC9B,KAAK,aAAeA,EAAO,UAAY,OAEvC,KAAK,cAAgB,IAAIgE,EAAgB,EAAK,EAC9C,KAAK,iBAAmB,IAAIA,EAA2B2P,EAAe,EACtE,KAAK,cAAgB,IAAI3P,EAAgBhE,EAAO,YAAY,EAC5D,KAAK,oBAAsB,IAAIgE,EAA+BhE,EAAO,cAAgB,IAAI,EACzF,KAAK,oBAAsB,IAAIgE,EAA8B,MAAM,EACnE,KAAK,yBAA2B,IAAIA,EAClCwP,GAAkBxT,EAAO,mBAAqB,CAAA,CAAE,CAAA,EAElD,KAAK,cAAgBoT,GAAoB,KAAK,aAAa,EAC3D,KAAK,OAAS,KAAK,cAAc,OACjC,KAAK,WAAa,KAAK,cAAc,WAErC,KAAK,cAAgB,KAAK,oBAAoB,KAAKhH,GAAsB,EAGzE,KAAK,cAAgB,KAAK,oBAAoB,KAAKA,GAAsB,EAGzE,KAAK,mBAAqB,KAAK,yBAAyB,KAAKA,GAAsB,EAGnF,KAAK,WAAa,KAAK,iBAAiB,KAAKA,EAAqByH,EAAc,CAAC,EACjF,KAAK,eAAiB7T,EAAO,cAC/B,CAGO,UAAmB,CACxB,OAAO,KAAK,cAAc,SAAA,CAC5B,CAGO,cAA2B,CAChC,OAAO,KAAK,cAAc,aAAA,CAC5B,CAGO,iBAAiC,CACtC,OAAO,KAAK,oBAAoB,KAClC,CAGO,iBAAgC,CACrC,OAAO,KAAK,oBAAoB,KAClC,CAGO,sBAA0C,CAC/C,OAAO,KAAK,yBAAyB,KACvC,CAGO,cAA0B,CAC/B,OAAO,KAAK,iBAAiB,KAC/B,CAGO,oBAA+B,CACpC,OAAO,KAAK,eACd,CAOO,uBAAuB+T,EAAwC,CACpE,MAAMhT,EAAOyS,GAAkBO,CAAI,EACnC,KAAK,gBAAkB,KAAK,gBAAgB,OAAOC,GAAQ,CAACjT,EAAK,KAAKsN,GAAWA,EAAQ,cAAgB2F,CAAI,CAAC,EAC9G,KAAK,yBAAyB,KAAKjT,CAAI,CACzC,CAMO,YAAY8N,EAA2B,CAC5C,MAAMoF,EAAU,KAAK,yBAAyB,MACxClT,EAAOkT,EAAQ,OAAO5F,GAAWA,EAAQ,cAAgBQ,CAAW,EACtE9N,EAAK,SAAWkT,EAAQ,QAAQ,KAAK,yBAAyB,KAAKlT,CAAI,CAC7E,CAOO,kBAAkB8N,EAA2B,CAC7C,KAAK,gBAAgB,SAASA,CAAW,IAC5C,KAAK,gBAAkB,CAAC,GAAG,KAAK,gBAAiBA,CAAW,GAGzD,KAAK,gBAAA,CACZ,CAOA,MAAa,iBAAiC,CAC5C,GAAI,CAAC,KAAK,OAAO,gBAAiB,OAElC,MAAM4E,EAAW,MAAM,KAAK,OAAO,gBAAgB,KAAK,eAAe,EACnEA,GAAU,KAAK,uBAAuBA,EAAS,iBAAiB,CACtE,CAGO,gBAAgBS,EAA4B,CACjD,KAAK,oBAAoB,KAAKA,CAAK,CACrC,CAEA,OAAc,OAAOlU,EAAgC,CACnD,MAAMmU,EAAU,IAAIL,EAAQ9T,CAAM,EAClC,OAAAmU,EAAQ,UAAA,EAEDA,CACT,CAEA,aAAoB,MAClBnU,EACAmN,EACAH,EACAoH,EACkB,CAClB,MAAMD,EAAU,IAAIL,EAAQ9T,CAAM,EAElC,GAAI,CACF,OAAAmU,EAAQ,UAAA,EAMRC,IAAmBD,CAAO,EAE1B,MAAMA,EAAQ,aAAahH,EAASH,CAAO,EAEpCmH,CACT,OAAS3d,EAAO,CACd,MAAA2d,EAAQ,MAAA,EAEF3d,CACR,CACF,CASA,aAAoB,QAClBwJ,EACAgN,EACAoH,EACkB,CAClB,MAAMD,EAAU,IAAIL,EAAQ9T,CAAM,EAElC,GAAI,CACF,OAAAmU,EAAQ,UAAA,EAKRC,IAAmBD,CAAO,EAE1B,MAAMA,EAAQ,cAAcnH,CAAO,EAE5BmH,CACT,OAAS3d,EAAO,CACd,MAAA2d,EAAQ,MAAA,EAEF3d,CACR,CACF,CAEQ,WAAkB,CACxB,KAAK,mBAAqBmT,GAAc,CACtC,KAAK,cACL,KAAK,cACL,KAAK,cAAc,OACnB,KAAK,cAAc,WACnB,KAAK,cACL,KAAK,cACL,KAAK,mBACL,KAAK,UAAA,CACN,EACE,KACCf,EACE,CAAC,CACCyL,EACAxB,EACAyB,EACAC,EACAC,EACAC,EACAC,EACAC,CAAA,KACK,CACL,aAAAN,EACA,aAAAxB,EACA,MAAAyB,EACA,UAAAC,EACA,aAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,UAAAC,CAAA,EACF,CACF,EAED,UAAU,KAAK,cAAc,CAClC,CAKQ,eACNxH,EACqC,CACrC,GAAI,OAAOA,GAAY,WACrB,GAAI,CACF,OAAOA,EAAA,CACT,OAAS3W,EAAO,CACd,MAAM,IAAI,MACR,uCAAuCA,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,EAAA,CAEjG,CAGF,OAAO2W,CACT,CAOQ,mBAAmByH,EAA4B,CACrD,OAAQA,EAAA,CACN,KAAK/d,EAAU,eACb,KAAK,oBAAoB,KAAK,WAAW,EAEzC,MACF,KAAKA,EAAU,cACb,KAAK,oBAAoB,KAAK,OAAO,EAErC,MACF,KAAKA,EAAU,KACf,KAAKA,EAAU,MACb,KAAK,oBAAoB,KAAK,MAAM,EAEpC,KAEA,CAEN,CAOQ,iBACNmW,EACA5S,EACAC,EACiB,CACjB,MAAO,CACL,WAAY2S,GAAS,WACrB,aAAehS,GAA2C,CA2BxD,GA1BAgS,GAAS,eAAehS,CAAQ,EAIhC,KAAK,iBAAiBA,EAAS,SAAS,EAIpCA,EAAS,YAAcnE,EAAU,sBACnC,KAAK,oBAAoB,KACtBmE,EAAyD,KAAK,mBAAmB,KAAA,EAQtF,KAAK,mBAAmBA,EAAS,SAAS,EAItCA,EAAS,YAAcnE,EAAU,gBACnC,KAAK,kBAAmBmE,EAAmD,KAAK,cAAc,WAAW,EAGvG,KAAK,sBAAwBA,EAAS,QAAS,CACjD,MAAMkV,EAAW,IAAI,IAAI,KAAK,cAAc,MAAM,QAAQ,EACpDO,EAAcP,EAAS,IAAI,KAAK,oBAAoB,EAEtDO,GAAeA,EAAY,OAAS,SACtCP,EAAS,IAAI,KAAK,qBAAsB,CACtC,GAAGO,EACH,QAASzV,EAAS,OAAA,CACnB,EACD,KAAK,cAAc,KAAK,IAAIiV,EAAa,CAAE,SAAAC,CAAA,CAAU,CAAC,GAGxD,KAAK,qBAAuB,MAC9B,CAEA,KAAK,cAAc,KAAK,KAAK,cAAc,MAAM,UAAUlV,CAAQ,CAAC,CACtE,EACA,WAAaE,GAAuB,CAClC8R,GAAS,aAAa9R,CAAG,EACzB,KAAK,UAAA,EACLb,EAAOa,CAAG,CACZ,EACA,eAAgB,IAAY,CAC1B8R,GAAS,iBAAA,EACT,KAAK,UAAA,EACL5S,EAAA,CACF,CAAA,CAEJ,CAOQ,WAAkB,CACxB,MAAMya,EAAc,KAAK,iBAAiB,MAAM,YAAc,OAE9D,KAAK,oBAAA,EACL,KAAK,cAAc,KAAK,EAAK,EAC7B,KAAK,iBAAiB,KAAKlB,EAAe,EAC1C,KAAK,qBAAuB,OAC5B,KAAK,WAAa,OAKdkB,GACF,KAAK,cAAc,KAAK,KAAK,cAAc,MAAM,wBAAwB,CAE7E,CAGQ,iBAAiBC,EAAqC,CAC5D,MAAMb,EAAU,KAAK,iBAAiB,MAElC,CAACa,GAAab,EAAQ,WAAa,CAACA,EAAQ,MAEhD,KAAK,iBAAiB,KAAK,CAAE,GAAGA,EAAS,UAAAa,EAAW,CACtD,CAEQ,qBAA4B,CAC7B,KAAK,iBAEV,aAAa,KAAK,cAAc,EAChC,KAAK,eAAiB,OACxB,CAEQ,SAASC,EAAe5H,EAA0BH,EAA0C,CAClG,OAAO,IAAI,QAAQ,CAAC5S,EAASC,IAAW,CACtC,KAAK,cAAc,KAAK,EAAI,EAC5B,KAAK,iBAAiB,KAAK,CAAE,KAAA0a,EAAM,UAAW,OAAQ,EACtD,KAAK,WAAa,KAAK,OAAO,SAAS5H,EAAS,KAAK,iBAAiBH,EAAS5S,EAASC,CAAM,CAAC,CACjG,CAAC,CACH,CAQQ,cAAc2S,EAA0C,CAC9D,OAAO,IAAI,QAAQ,CAAC5S,EAASC,IAAW,CACtC,GAAI,CAAC,KAAK,OAAO,UAAW,CAC1BD,EAAA,EAEA,MACF,CAEA,KAAK,cAAc,KAAK,EAAI,EAK5B,KAAK,iBAAiB,KAAK,CACzB,KAAM,KAAK,eAAiB,UAAY,UAAY,SACpD,UAAW,MAAA,CACZ,EACD,KAAK,WAAa,KAAK,OAAO,UAAU,KAAK,gBAAiB,KAAK,iBAAiB4S,EAAS5S,EAASC,CAAM,CAAC,CAC/G,CAAC,CACH,CAEQ,aAAa8S,EAAqDH,EAA0C,CAClH,OAAO,KAAK,SACV,QACA,CACE,OAAQpW,EAAe,cACvB,gBAAiB,KAAK,gBACtB,gBAAiB,KAAK,gBACtB,KAAMuW,GAAS,MAAQ,GACvB,QAAS,KAAK,eAAeA,GAAS,OAAO,CAAA,EAE/CH,CAAA,CAEJ,CAEO,YACLG,EAIAH,EACe,CAQf,MAAMgI,EAAW,KAAK,iBAAiB,MAAM,KAE7C,GAAIA,EAAU,OAAO,QAAQ,OAAO,IAAIve,EAAiBue,CAAQ,CAAC,EAElE,MAAMC,EAAO9H,EAAQ,KAAK,KAAA,EACpBuD,EAAYvD,EAAQ,iBAAmBwD,GAAA,EAE7C,YAAK,qBAAuBD,EAC5B,KAAK,kBAAoBA,EAEzB,KAAK,cAAc,KACjB,KAAK,cAAc,MAAM,YAAY,CACnC,KAAM,OACN,UAAAA,EACA,KAAAuE,EACA,QAAS9H,EAAQ,QACjB,gBAAiBA,EAAQ,gBACzB,cAAeA,EAAQ,cACvB,SAAU,IAAK,CAChB,CAAA,EAGI,KAAK,SACV,OACA,CACE,OAAQvW,EAAe,KACvB,gBAAiB,KAAK,gBACtB,gBAAiB8Z,EACjB,QAAS,KAAK,eAAevD,GAAS,OAAO,EAC7C,KAAA8H,EACA,QAAS9H,GAAS,OAAA,EAEpBH,CAAA,CAEJ,CAEO,sBACLkI,EACAlI,EACAG,EACe,CACf,YAAK,cAAc,KAAK,KAAK,cAAc,MAAM,qBAAqB,EAG/D,KAAK,SACV,OACA,CACE,OAAQvW,EAAe,2BACvB,gBAAiB,KAAK,gBACtB,gBAAiB,KAAK,mBAAqB,KAAK,gBAChD,QAAS,KAAK,eAAeuW,CAAO,EACpC,KAAM,GACN,iBAAA+H,CAAA,EAEFlI,CAAA,CAEJ,CAQO,MAAMA,EAA0C,CAErD,OAAO,KAAK,SACV,QACA,CACE,OAAQpW,EAAe,MACvB,gBAAiB,KAAK,gBACtB,gBAAiB,KAAK,mBAAqB,KAAK,gBAChD,KAAM,EAAA,EAERoW,CAAA,CAEJ,CA8BA,MAAa,eAAeA,EAAgD,CAC1E,MAAM5W,EAAS,KAAK,iBAAiB,MAErC,GAAI,GAAC,KAAK,YAAcA,EAAO,OAAS,SAGpC,EAAAA,EAAO,YAAc,QAAU,CAAC4W,GAAS,OAE7C,IAAI,CAAC,KAAK,OAAO,eAAgB,CAC/B,KAAK,gBAAA,EAEL,MACF,CAEA,KAAK,oBAAA,EACL,KAAK,iBAAiB,KAAK,CAAE,GAAG5W,EAAQ,UAAW,WAAY,EAE/D,GAAI,CACF,MAAM,KAAK,OAAO,eAAe,KAAK,gBAAiB,CACrD,UAAWA,EAAO,UAClB,MAAO4W,GAAS,KAAA,CACjB,CACH,OAASxW,EAAO,CAEd,WAAK,oBAAA,EACL,KAAK,iBAAiB,KAAK,CAAE,GAAG,KAAK,iBAAiB,MAAO,UAAW,OAAQ,EAE1EA,CACR,CAGA,KAAK,kBAAA,EACP,CAOQ,mBAA0B,CAChC,KAAK,oBAAA,EAEL,KAAK,eAAiB,WAAW,IAAM,CACrC,KAAK,eAAiB,OAEtB,MAAMyd,EAAU,KAAK,iBAAiB,MAElCA,EAAQ,YAAc,YAE1B,KAAK,iBAAiB,KAAK,CAAE,GAAGA,EAAS,UAAW,kBAAmB,CACzE,EAAGL,EAAqB,CAC1B,CAUQ,iBAAwB,CACzB,KAAK,aAEV,KAAK,WAAW,YAAA,EAChB,KAAK,oBAAA,EACL,KAAK,WAAa,OAClB,KAAK,cAAc,KAAK,EAAK,EAC7B,KAAK,iBAAiB,KAAKD,EAAe,EAC1C,KAAK,qBAAuB,OAG5B,KAAK,cAAc,KAAK,KAAK,cAAc,MAAM,wBAAwB,EAC3E,CAEO,OAAc,CACnB,KAAK,YAAY,YAAA,EACjB,KAAK,WAAa,OAClB,KAAK,oBAAA,EACL,KAAK,cAAc,SAAA,EACnB,KAAK,iBAAiB,SAAA,EACtB,KAAK,cAAc,SAAA,EACnB,KAAK,oBAAoB,SAAA,EACzB,KAAK,oBAAoB,SAAA,EACzB,KAAK,yBAAyB,SAAA,EAC9B,KAAK,cAAc,SAAA,EACnB,KAAK,oBAAoB,YAAA,CAC3B,CACF,CCrsBO,SAASwB,GAAkBC,EAAsC,CACtE,MAAMC,EAAQ,+CAA+C,KAAKD,EAAI,MAAM,EAC5E,GAAI,CAACC,EAAO,OAAO,KAEnB,MAAMxG,EAAc,mBAAmBwG,EAAM,CAAC,CAAC,EACzC/P,EAAS+P,EAAM,CAAC,EAChBC,EAAS,IAAI,gBAAgBD,EAAM,CAAC,GAAK,EAAE,EAEjD,GAAI/P,IAAW,eAAgB,MAAO,CAAE,KAAM,eAAgB,YAAAuJ,CAAA,EAE9D,GAAIvJ,IAAW,YAAa,CAC1B,MAAMiQ,EAAeD,EAAO,IAAI,eAAe,EAC/C,OAAKC,EAEE,CAAE,KAAM,YAAa,YAAA1G,EAAa,aAAA0G,CAAA,EAFf,IAG5B,CAEA,OAAO,IACT","x_google_ignoreList":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,77,78,79,80]}