@bian-womp/spark-graph 0.1.12 → 0.1.13
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/lib/cjs/index.cjs +20 -3
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +1 -0
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/index.js +20 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +1 -0
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/package.json +1 -1
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/builder/Registry.ts","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/AbstractEngine.ts","../../src/runtime/PushEngine.ts","../../src/runtime/LocalRunner.ts","../../src/runtime/BatchedEngine.ts","../../src/runtime/PullEngine.ts","../../src/runtime/HybridEngine.ts","../../src/runtime/StepEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/examples/shared.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts"],"sourcesContent":["import type {\n DataTypeDescriptor,\n NodeContext,\n NodeTypeDescriptor,\n} from \"../core/types\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\n\n// Internal path resolution helpers\ninterface _EdgeStepSync {\n from: string;\n to: string;\n kind: \"sync\";\n convert: (v: unknown) => unknown;\n}\ninterface _EdgeStepAsync {\n from: string;\n to: string;\n kind: \"async\";\n convertAsync: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n}\ntype _EdgeStep = _EdgeStepSync | _EdgeStepAsync;\n\n// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n}\nexport type ResolvedCoercion = ResolvedCoercionSync | ResolvedCoercionAsync;\n\nexport class CategoryRegistry {\n private categories = new Map<string, NodeCategoryDescriptor<any, any>>();\n register<Impl, State>(cat: NodeCategoryDescriptor<Impl, State>): this {\n this.categories.set(cat.id, cat);\n return this;\n }\n get(id: string): NodeCategoryDescriptor<any, any> | undefined {\n return this.categories.get(id);\n }\n has(id: string): boolean {\n return this.categories.has(id);\n }\n}\n\nexport class Registry {\n readonly types = new Map<string, DataTypeDescriptor<any>>();\n readonly nodes = new Map<string, NodeTypeDescriptor>();\n readonly enums = new Map<\n string,\n {\n options: Array<{ value: number; label: string }>;\n valueToLabel: Map<number, string>;\n labelToValue: Map<string, number>;\n }\n >();\n readonly categories = new CategoryRegistry();\n readonly serializers = new Map<\n string,\n {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n >();\n\n private coercions = new Map<\n string,\n { convert: (value: unknown) => unknown; nonTransitive: boolean }\n >();\n private asyncCoercions = new Map<\n string,\n {\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n nonTransitive: boolean;\n }\n >();\n\n private resolvedCache = new Map<\n string,\n | { kind: \"sync\"; convert: (value: unknown) => unknown }\n | {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n }\n >();\n\n registerType(\n desc: DataTypeDescriptor,\n opts?: {\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n }\n ): this {\n this.types.set(desc.id, desc);\n // Any structural change invalidates resolution cache\n this.resolvedCache.clear();\n if (!this.serializers.has(desc.id)) {\n this.registerSerializer(desc.id, {\n serialize: (v) => v,\n deserialize: (d) => d,\n });\n }\n if (opts?.withArray) {\n const arrayId = opts.arrayId ?? `${desc.id}[]`;\n if (!this.types.has(arrayId)) {\n const arrayDesc: DataTypeDescriptor<any[]> = {\n id: arrayId,\n validate: (v: unknown) =>\n Array.isArray(v) &&\n v.every((x) => {\n try {\n return desc.validate(x);\n } catch {\n return false;\n }\n }),\n };\n this.types.set(arrayId, arrayDesc);\n }\n\n this.registerCoercion(desc.id, arrayId, (value) =>\n Array.isArray(value) ? value : [value]\n );\n this.registerCoercion(arrayId, desc.id, (value) => {\n if (!Array.isArray(value)) return value;\n if (opts.arrayPickFirstDefined) {\n for (const x of value) if (x !== undefined) return x;\n return undefined;\n }\n return value[0];\n });\n }\n return this;\n }\n\n registerNode<\n I extends Record<string, string>,\n O extends Record<string, string>,\n State = unknown,\n Impl = (\n inputs: Record<string, unknown>,\n ctx: NodeContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | Promise<void | Record<string, unknown>>\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data,\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr = `${fromTypeId}[]`;\n const toArr = `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr = `${fromTypeId}[]`;\n const toArr = `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted)\n throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = { kind: \"sync\", convert: (v) => v };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = { kind: \"sync\", convert };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = { kind: \"async\", convertAsync };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) =>\n typeof v === \"number\" && valueToLabel.has(Number(v)),\n },\n opts\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n)\n ? n\n : Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","import type {\n GraphDefinition,\n NodeTypeDescriptor,\n ExecutionContext,\n RuntimeEdgeStats,\n RuntimeNodeStats,\n GraphEdgeDefinition,\n GraphNodeDefinition,\n} from \"../core/types\";\nimport type { CategoryRuntime } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => void;\n\nexport type RuntimeEventName = \"value\" | \"invalidate\" | \"error\" | \"stats\";\n\n// Event payloads\nexport interface ValueEvent {\n nodeId: string;\n handle: string;\n value: unknown;\n io: \"input\" | \"output\";\n}\n\nexport type NodeRunErrorEvent = {\n nodeId: string;\n runId: string;\n err: unknown;\n};\n\nexport type EdgeConvertErrorEvent = {\n kind: \"edge-convert\";\n edgeId: string;\n source: { nodeId: string; handle: string };\n target: { nodeId: string; handle: string };\n err: unknown;\n};\n\nexport type RuntimeErrorEvent = NodeRunErrorEvent | EdgeConvertErrorEvent;\n\nexport interface InvalidateEvent {\n reason: string;\n}\n\nexport type NodeStartStats = {\n kind: \"node-start\";\n nodeId: string;\n runId: string;\n};\n\nexport type NodeProgressStats = {\n kind: \"node-progress\";\n nodeId: string;\n runId: string;\n progress: number;\n};\n\nexport type NodeDoneStats = {\n kind: \"node-done\";\n nodeId: string;\n runId: string;\n durationMs?: number;\n};\n\nexport type EdgeStartStats = {\n kind: \"edge-start\";\n edgeId: string;\n source: { nodeId: string; handle: string };\n target: { nodeId: string; handle: string };\n};\n\nexport type EdgeDoneStats = {\n kind: \"edge-done\";\n edgeId: string;\n source: { nodeId: string; handle: string };\n target: { nodeId: string; handle: string };\n durationMs?: number;\n};\n\nexport type StatsEvent =\n | NodeStartStats\n | NodeProgressStats\n | NodeDoneStats\n | EdgeStartStats\n | EdgeDoneStats;\n\nexport interface RuntimeEventMap {\n value: ValueEvent;\n invalidate: InvalidateEvent;\n error: RuntimeErrorEvent;\n stats: StatsEvent;\n}\n\ninterface RuntimeNode<State = any> extends GraphNodeDefinition {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: State;\n runtime: CategoryRuntime<State>;\n lifecycle: NodeTypeDescriptor<\n Record<string, string>,\n Record<string, string>,\n State,\n any\n >[\"lifecycle\"];\n policy?: {\n asyncConcurrency?: \"merge\" | \"switch\" | \"queue\" | \"drop\";\n timeoutMs?: number;\n maxQueue?: number;\n debounceMs?: number;\n throttleMs?: number;\n retry?: { attempts: number; backoffMs: (attemptIndex: number) => number };\n };\n latestRunId?: string;\n activeControllers: Set<AbortController>;\n queue: Array<{ runId: string; inputs: Record<string, unknown> }>;\n lastScheduledAt?: number;\n stats: RuntimeNodeStats;\n}\n\ninterface RuntimeEdge extends GraphEdgeDefinition {\n convert?: (value: unknown) => unknown;\n convertAsync?: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n stats: RuntimeEdgeStats;\n}\nexport class GraphRuntime {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n private environment: Record<string, unknown> = {};\n private paused = false;\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.environment = opts?.environment ?? {};\n\n // Instantiate nodes\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n };\n gr.nodes.set(n.nodeId, rn);\n }\n\n // Instantiate edges\n gr.edges = def.edges.map((e): RuntimeEdge => {\n // infer type from source output if missing\n const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId;\n let srcDeclared: string | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) effectiveTypeId = srcDeclared;\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = dstDesc.inputs[e.target.handle];\n }\n }\n\n // Attach convert if source/target differ but coercible\n let convert = undefined;\n let convertAsync = undefined;\n if (srcDeclared && dstDeclared && srcDeclared !== dstDeclared) {\n const fn = registry.getCoercion(srcDeclared, dstDeclared);\n if (fn) convert = convert ?? fn;\n const afn = registry.getAsyncCoercion(srcDeclared, dstDeclared);\n if (afn) convertAsync = convertAsync ?? afn;\n }\n\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\n convert,\n convertAsync,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n\n return gr;\n }\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event) as Set<RuntimeEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends RuntimeEventName>(\n event: K,\n payload: RuntimeEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.nodes.get(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = this.edges.some(\n (e) => e.target.nodeId === nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n node.inputs[handle] = value;\n // Emit value event for input updates\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n if (!this.paused) this.scheduleInputsChanged(nodeId);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.nodes.get(nodeId);\n return node?.outputs[output];\n }\n\n private scheduleInputsChanged(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (this.paused) return;\n const now = Date.now();\n const policy = node.policy ?? {};\n\n if (\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n ) {\n // debounce: replace latest queued\n node.queue.splice(0, node.queue.length);\n const rid = `${nodeId}:${now}`;\n node.queue.push({ runId: rid, inputs: { ...node.inputs } });\n return;\n }\n node.lastScheduledAt = now;\n\n const rid = `${nodeId}:${now}:${Math.random().toString(36).slice(2, 8)}`;\n node.latestRunId = rid;\n\n const startRun = (\n runId: string,\n capturedInputs: Record<string, unknown>,\n onDone?: () => void\n ) => {\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = now;\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n for (const c of Array.from(node.activeControllers)) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n\n let timeoutId: any;\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n timeoutId = setTimeout(\n () => controller.abort(\"timeout\"),\n policy.timeoutMs\n );\n }\n\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => {\n const m = policy.asyncConcurrency ?? \"switch\";\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.propagate(nodeId, handle, value);\n },\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => capturedInputs[handle],\n environment: this.environment,\n runId: runId,\n abortSignal: controller.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n runId,\n progress: node.stats.progress,\n });\n },\n };\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations (switch)\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (reason === \"switch\") {\n return; // ignore switched runs\n }\n }\n hadError = true;\n // Record last error for node\n node.stats.lastError = err;\n const retry = policy.retry;\n if (retry && attempt < (retry.attempts ?? 0)) {\n const delay = retry.backoffMs ? retry.backoffMs(attempt) : 0;\n await new Promise((r) => setTimeout(r, delay));\n return exec(attempt + 1);\n }\n this.emit(\"error\", { nodeId, runId, err });\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n node.activeControllers.delete(controller);\n node.stats.active = Math.max(0, node.activeControllers.size);\n node.stats.lastEndAt = Date.now();\n node.stats.lastDurationMs =\n node.stats.lastStartAt && node.stats.lastEndAt\n ? node.stats.lastEndAt - node.stats.lastStartAt\n : undefined;\n // Clear lastError upon successful completion\n if (!hadError) node.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n runId,\n durationMs: node.stats.lastDurationMs,\n });\n if (onDone) onDone();\n }\n };\n\n // fire node-start event\n this.emit(\"stats\", { kind: \"node-start\", nodeId, runId });\n void exec(0);\n };\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"drop\" && node.activeControllers.size > 0) return;\n if (mode === \"queue\") {\n const maxQ = policy.maxQueue ?? 8;\n node.queue.push({ runId: rid, inputs: { ...node.inputs } });\n if (node.queue.length > maxQ) node.queue.shift();\n\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n node.latestRunId = next.runId;\n startRun(next.runId, next.inputs, () => {\n // After finishing, schedule next\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n return;\n }\n\n // switch or merge\n startRun(rid, { ...node.inputs });\n }\n\n private invalidateDownstream(nodeId: string): void {\n // Notifies dependents; for now we propagate current outputs\n for (const e of this.edges.filter((e) => e.source.nodeId === nodeId)) {\n const value = this.getOutput(nodeId, e.source.handle);\n if (value !== undefined) this.propagate(nodeId, e.source.handle, value);\n }\n }\n\n private propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown\n ): void {\n // set source output\n const srcNode = this.nodes.get(srcNodeId)!;\n srcNode.outputs[srcHandle] = value;\n this.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n });\n\n // fan-out along all edges from this output\n const outEdges = this.edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\n\n for (const e of outEdges) {\n // Clone per edge to isolate conversions from mutating the shared source value\n let nextVal = structuredClone(value);\n const applyToTarget = (v: unknown) => {\n const dstNode = this.nodes.get(e.target.nodeId);\n if (!dstNode) return;\n dstNode.inputs[e.target.handle] = v;\n // Emit value event for input updates\n this.emit(\"value\", {\n nodeId: e.target.nodeId,\n handle: e.target.handle,\n value: v,\n io: \"input\",\n });\n if (!this.paused) this.scheduleInputsChanged(e.target.nodeId);\n };\n if (e.convertAsync) {\n // emit edge-start before launching async conversion\n this.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n });\n const controller = new AbortController();\n const startAt = Date.now();\n e.stats.runs += 1;\n e.stats.inFlight = true;\n e.stats.progress = 0;\n const sig = controller.signal;\n // Fire async conversion\n void e\n .convertAsync(nextVal, sig)\n .then((v) => {\n e.stats.inFlight = false;\n e.stats.lastEndAt = Date.now();\n e.stats.lastDurationMs = e.stats.lastEndAt - startAt;\n // Clear lastError on successful conversion\n e.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n durationMs: e.stats.lastDurationMs,\n });\n applyToTarget(v);\n })\n .catch((err) => {\n if (sig.aborted) return;\n e.stats.inFlight = false;\n e.stats.lastError = err;\n this.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n });\n } else {\n if (e.convert) nextVal = e.convert(nextVal);\n applyToTarget(nextVal);\n }\n }\n }\n\n launch(): void {\n // call onActivated for nodes that implement it\n for (const node of this.nodes.values()) {\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(node.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(node.nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${node.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n node.lifecycle?.init?.(node.params ?? {}, {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n node.runtime.onActivated?.(ctx);\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${nodeId}:external`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n node.runtime.onExternalEvent?.(event, ctx);\n }\n\n dispose(): void {\n for (const node of this.nodes.values()) {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n }\n this.nodes.clear();\n this.edges = [];\n this.listeners.clear();\n }\n\n // Unsafe helpers for serializer: read-only accessors and hydration\n __unsafe_getNodeData(nodeId: string):\n | {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: unknown;\n params?: Record<string, unknown>;\n stats?: RuntimeNodeStats;\n }\n | undefined {\n const node = this.nodes.get(nodeId);\n if (!node) return undefined;\n return {\n inputs: { ...node.inputs },\n outputs: { ...node.outputs },\n state: node.state,\n params: node.params,\n stats: { ...node.stats },\n };\n }\n\n __unsafe_getEnvironment(): Record<string, unknown> {\n return { ...this.environment };\n }\n\n setEnvironment(env: Record<string, unknown>): void {\n this.environment = { ...env };\n }\n\n __unsafe_setEnvironment(env: Record<string, unknown>): void {\n this.setEnvironment(env);\n }\n\n __unsafe_hydrateNode(\n nodeId: string,\n data: {\n inputs?: Record<string, unknown>;\n outputs?: Record<string, unknown>;\n state?: unknown;\n params?: Record<string, unknown>;\n },\n opts?: { replace?: boolean }\n ): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (opts?.replace) {\n node.inputs = {};\n node.outputs = {};\n node.state = {};\n }\n if (data.inputs) Object.assign(node.inputs, data.inputs);\n if (data.outputs) Object.assign(node.outputs, data.outputs);\n if (data.state !== undefined) node.state = data.state;\n if (data.params) node.params = data.params;\n }\n\n async whenIdle(): Promise<void> {\n const isIdle = (): boolean => {\n for (const n of this.nodes.values()) {\n if (n.activeControllers.size > 0) return false;\n if (n.queue.length > 0) return false;\n }\n return true;\n };\n if (isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (isIdle()) resolve();\n else setTimeout(check, 10);\n };\n setTimeout(check, 10);\n });\n }\n\n pause(): void {\n this.paused = true;\n }\n\n resume(): void {\n this.paused = false;\n }\n\n __unsafe_invalidateDownstream(nodeId: string): void {\n this.invalidateDownstream(nodeId);\n }\n\n __unsafe_reemitNodeOutputs(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n for (const [handle, value] of Object.entries(node.outputs)) {\n this.propagate(nodeId, handle, value);\n }\n }\n\n __unsafe_scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChanged(nodeId);\n }\n\n // Incrementally update nodes/edges to match new definition without full rebuild\n update(def: GraphDefinition, registry: Registry): void {\n // Handle node additions and removals\n const desiredIds = new Set(def.nodes.map((n) => n.nodeId));\n const currentIds = new Set(this.nodes.keys());\n\n // Remove nodes not present\n for (const nodeId of Array.from(currentIds)) {\n if (!desiredIds.has(nodeId)) {\n const node = this.nodes.get(nodeId)!;\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n this.nodes.delete(nodeId);\n }\n }\n\n // Add or update existing nodes\n for (const n of def.nodes) {\n const existing = this.nodes.get(n.nodeId);\n if (!existing) {\n // create new runtime node\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n };\n this.nodes.set(n.nodeId, rn);\n // Activate new node\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: rn.state,\n setState: (next: Partial<any>) => Object.assign(rn.state, next),\n emit: (handle: string, value: unknown) =>\n this.propagate(rn.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(rn.nodeId),\n getInput: (handle: string) => rn.inputs[handle],\n environment: this.environment,\n runId: `${rn.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n };\n rn.lifecycle?.init?.(rn.params ?? {}, {\n state: rn.state,\n setState: (next) => Object.assign(rn.state, next),\n });\n rn.runtime.onActivated?.(ctx);\n } else {\n // update params/policy\n existing.params = n.params;\n if (!existing.stats) {\n existing.stats = {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n };\n }\n }\n }\n\n // Capture previous inbound map before rebuilding edges\n const prevInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = prevInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n prevInbound.set(e.target.nodeId, set);\n }\n\n // Rebuild edges mapping with coercions\n this.edges = def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId;\n let srcDeclared: string | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) effectiveTypeId = srcDeclared;\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = dstDesc.inputs[e.target.handle];\n }\n }\n\n let convert = undefined;\n let convertAsync = undefined;\n if (srcDeclared && dstDeclared && srcDeclared !== dstDeclared) {\n const fn = registry.getCoercion(srcDeclared, dstDeclared);\n if (fn) convert = convert ?? fn;\n const afn = registry.getAsyncCoercion(srcDeclared, dstDeclared);\n if (afn) convertAsync = convertAsync ?? afn;\n }\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\n convert,\n convertAsync,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n\n // Build new inbound map\n const nextInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = nextInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n nextInbound.set(e.target.nodeId, set);\n }\n\n // For inputs that lost inbound connections, clear and schedule recompute\n for (const [nodeId, prevSet] of prevInbound) {\n const currSet = nextInbound.get(nodeId) ?? new Set<string>();\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n if (changed) this.scheduleInputsChanged(nodeId);\n }\n\n // Re-emit existing outputs to populate new edges\n for (const nodeId of this.nodes.keys()) {\n this.__unsafe_reemitNodeOutputs(nodeId);\n }\n }\n}\n","import type { GraphDefinition, NodeTypeDescriptor } from \"../core/types\";\nimport { Registry } from \"./Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface ValidationIssueData {\n nodeId?: string;\n edgeId?: string;\n typeId?: string;\n input?: string;\n output?: string;\n declared?: string;\n effectiveTypeId?: string;\n}\nexport interface ValidationIssue {\n level: \"error\" | \"warning\";\n code: string;\n message: string;\n data?: Partial<ValidationIssueData>;\n}\n\nexport interface ValidationReport {\n ok: boolean;\n issues: ValidationIssue[];\n}\n\nexport interface BuildOptions {\n environment?: Record<string, unknown>;\n}\n\nexport class GraphBuilder {\n constructor(private registry: Registry) {}\n\n validate(def: GraphDefinition): ValidationReport {\n const issues: ValidationIssue[] = [];\n const nodeIds = new Set<string>();\n const edgeIds = new Set<string>();\n\n // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n issues.push({\n level: \"error\",\n code: \"NODE_ID_DUP\",\n message: `Duplicate nodeId ${n.nodeId}`,\n data: { nodeId: n.nodeId },\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n issues.push({\n level: \"error\",\n code: \"NODE_TYPE_MISSING\",\n message: `Unknown node type ${n.typeId}`,\n data: { typeId: n.typeId, nodeId: n.nodeId },\n });\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n issues.push({\n level: \"error\",\n code: \"CATEGORY_MISSING\",\n message: `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`,\n });\n }\n }\n\n // edges validation: nodes exist, handles exist, type exists\n const inboundCounts = new Map<string, number>();\n for (const e of def.edges) {\n if (edgeIds.has(e.id)) {\n issues.push({\n level: \"error\",\n code: \"EDGE_ID_DUP\",\n message: `Duplicate edge id ${e.id}`,\n data: { edgeId: e.id },\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n if (!srcNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_SOURCE_MISSING\",\n message: `Edge ${e.id} source node missing`,\n data: { edgeId: e.id },\n });\n if (!dstNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_TARGET_MISSING\",\n message: `Edge ${e.id} target node missing`,\n data: { edgeId: e.id },\n });\n // infer edge type from source output if missing\n let effectiveTypeId: string | undefined = e.typeId;\n if (!effectiveTypeId && srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType) {\n effectiveTypeId = srcType.outputs[e.source.handle];\n }\n }\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISSING\",\n message: `Edge ${e.id} type missing or unknown`,\n data: { edgeId: e.id },\n });\n }\n\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType && !(e.source.handle in srcType.outputs)) {\n issues.push({\n level: \"error\",\n code: \"OUTPUT_MISSING\",\n message: `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n },\n });\n }\n if (srcType) {\n const declared = srcType.outputs[e.source.handle];\n if (\n declared &&\n effectiveTypeId &&\n declared !== effectiveTypeId &&\n !this.registry.canCoerce(declared, effectiveTypeId)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_OUTPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${declared}) and no coercion exists`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared,\n effectiveTypeId,\n },\n });\n }\n }\n }\n if (dstNode) {\n const dstType = this.registry.nodes.get(dstNode.typeId);\n if (dstType && !(e.target.handle in dstType.inputs)) {\n issues.push({\n level: \"error\",\n code: \"INPUT_MISSING\",\n message: `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n },\n });\n }\n if (dstType) {\n const declared = dstType.inputs[e.target.handle];\n if (\n declared &&\n effectiveTypeId &&\n declared !== effectiveTypeId &&\n !this.registry.canCoerce(effectiveTypeId, declared)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_INPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declared}) and no coercion exists`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared,\n effectiveTypeId,\n },\n });\n }\n }\n }\n\n // Track multiple inbound edges targeting the same input handle\n const inboundKey = `${e.target.nodeId}::${e.target.handle}`;\n inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);\n }\n\n for (const [key, count] of inboundCounts) {\n if (count > 1) {\n issues.push({\n level: \"warning\",\n code: \"MULTI_INBOUND\",\n message: `Input ${key} has ${count} inbound edges (last-write wins).`,\n data: { nodeId: key.split(\"::\")[0], input: key.split(\"::\")[1] },\n });\n }\n }\n\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n build(def: GraphDefinition, opts?: BuildOptions): GraphRuntime {\n return GraphRuntime.create(def, this.registry, opts);\n }\n\n wrapAsNode(\n def: GraphDefinition,\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n },\n nodeTypeId: string,\n displayName?: string\n ): NodeTypeDescriptor<any, any, any, any> {\n // Infer exposed handle types from inner graph using registry\n const inputTypes: Record<string, string> = {};\n const outputTypes: Record<string, string> = {};\n\n for (const [outerIn, map] of Object.entries(exposure.inputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.inputs[map.handle] : undefined;\n inputTypes[outerIn] = typeId ?? \"untyped\";\n }\n\n for (const [outerOut, map] of Object.entries(exposure.outputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n outputTypes[outerOut] = typeId ?? \"untyped\";\n }\n\n return {\n id: nodeTypeId,\n displayName,\n categoryId: \"composite\",\n inputs: inputTypes,\n outputs: outputTypes,\n impl: { def, exposure },\n } as unknown as NodeTypeDescriptor<any, any, any, any>;\n }\n}\n","import type { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport abstract class AbstractEngine implements Engine {\n constructor(public graphRuntime: GraphRuntime) {}\n\n launch(): void {\n this.graphRuntime.launch();\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.graphRuntime.triggerExternal(nodeId, event);\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n return this.graphRuntime.on(event, handler);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.graphRuntime.getOutput(nodeId, output);\n }\n\n whenIdle(): Promise<void> {\n return this.graphRuntime.whenIdle();\n }\n\n dispose(): void {\n this.graphRuntime.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport class PushEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n }\n}\n","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { AbstractEngine } from \"./AbstractEngine\";\nimport { PushEngine } from \"./PushEngine\";\nimport type { RunnerControl } from \"./RunnerControl\";\nimport { Registry } from \"../builder/Registry\";\n\nexport class LocalRunner implements RunnerControl {\n private builder: GraphBuilder;\n private engine?: AbstractEngine;\n\n constructor(private registry: Registry) {\n this.builder = new GraphBuilder(registry);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n const rt = this.builder.build(def, opts);\n this.engine = new PushEngine(rt);\n }\n\n async update(def: GraphDefinition): Promise<void> {\n // If engine exists and is a PushEngine backed by GraphRuntime, use runtime.update\n // Otherwise rebuild.\n const eng = this.engine;\n if (eng && eng.graphRuntime) {\n eng.graphRuntime.update(def, this.registry);\n return;\n }\n await this.build(def);\n }\n\n getEngine(): AbstractEngine {\n if (!this.engine)\n throw new Error(\"Engine not built. Call build(def) first.\");\n return this.engine;\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport interface BatchedEngineOptions {\n flushIntervalMs?: number; // if set, perform periodic flushes\n}\n\nexport class BatchedEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n private timer: NodeJS.Timeout | undefined;\n constructor(\n graphRuntime: GraphRuntime,\n private opts: BatchedEngineOptions = {}\n ) {\n super(graphRuntime);\n }\n\n override launch(): void {\n this.graphRuntime.pause();\n if (this.opts.flushIntervalMs && this.opts.flushIntervalMs > 0) {\n this.timer = setInterval(() => this.flush(), this.opts.flushIntervalMs);\n }\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async flush(): Promise<void> {\n if (this.dirtyNodes.size === 0) return;\n // Resume, schedule dirty nodes, wait idle, then pause again\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n\n override dispose(): void {\n if (this.timer) clearInterval(this.timer);\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// PullEngine computes only when asked, otherwise holds inputs without scheduling\nexport class PullEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n // Pull API\n async computeNode(nodeId: string): Promise<void> {\n this.graphRuntime.resume();\n this.graphRuntime.__unsafe_scheduleInputsChanged(nodeId);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// HybridEngine: push by default, but batch when changes exceed a threshold in a window\nexport interface HybridOptions {\n windowMs?: number;\n batchThreshold?: number;\n}\n\nexport class HybridEngine extends AbstractEngine {\n private windowStart = 0;\n private countInWindow = 0;\n private batching = false;\n private dirtyNodes = new Set<string>();\n private flushTimer: NodeJS.Timeout | undefined;\n constructor(graphRuntime: GraphRuntime, private opts: HybridOptions = {}) {\n super(graphRuntime);\n this.windowStart = Date.now();\n }\n\n private updateWindow(): void {\n const now = Date.now();\n const windowMs = this.opts.windowMs ?? 250;\n if (now - this.windowStart > windowMs) {\n this.windowStart = now;\n this.countInWindow = 0;\n if (this.batching) {\n this.graphRuntime.resume();\n this.batching = false;\n // schedule all dirty nodes accumulated during batching\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes)\n this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n }\n }\n\n override launch(): void {\n this.graphRuntime.resume();\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.updateWindow();\n this.countInWindow += 1;\n const threshold = this.opts.batchThreshold ?? 5;\n if (!this.batching && this.countInWindow >= threshold) {\n this.graphRuntime.pause();\n this.batching = true;\n // ensure flush even if no more inputs arrive\n const windowMs = this.opts.windowMs ?? 250;\n if (this.flushTimer) clearTimeout(this.flushTimer);\n this.flushTimer = setTimeout(() => {\n if (!this.batching) return;\n this.graphRuntime.resume();\n this.batching = false;\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes)\n this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n this.flushTimer = undefined;\n }, windowMs);\n }\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n if (!this.batching)\n this.graphRuntime.__unsafe_scheduleInputsChanged(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n override dispose(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// StepEngine: expose explicit step() to process pending changes once\nexport class StepEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async step(): Promise<void> {\n // resume first so scheduling isn't ignored due to pause\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { ExecutionContext } from \"../core/types\";\n\nexport type ComputeImpl = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<any>\n) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>;\n\nexport const ComputeCategory: NodeCategoryDescriptor<ComputeImpl, {}> = {\n id: \"compute\",\n displayName: \"Compute\",\n createRuntime: ({ impl }) => ({\n async onInputsChanged(inputs, ctx) {\n const out = await impl(inputs, ctx);\n if (out && typeof out === \"object\") {\n for (const [h, v] of Object.entries(out)) ctx.emit(h, v);\n }\n },\n }),\n policy: { mode: \"push\", asyncConcurrency: \"switch\" },\n};\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface CompositeImpl {\n def: GraphDefinition;\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n };\n}\n\nexport const CompositeCategory = (\n registry: Registry\n): NodeCategoryDescriptor<\n CompositeImpl,\n { inner?: GraphRuntime; unsub?: () => void }\n> => ({\n id: \"composite\",\n displayName: \"Composite\",\n validateImpl: (impl) => {\n if (!impl || !impl.def) throw new Error(\"Composite impl requires def\");\n },\n createRuntime: ({ impl }) => {\n let inner: GraphRuntime | undefined;\n let unsub: (() => void) | undefined;\n return {\n onActivated: () => {\n inner = GraphRuntime.create(impl.def, registry);\n // Wire inner outputs to outer emits\n unsub = inner.on(\"value\", (e) => {\n for (const [outHandle, map] of Object.entries(\n impl.exposure.outputs\n )) {\n if (e.nodeId === map.nodeId && e.handle === map.handle) {\n // We cannot access outer ctx here; emit will occur on next input change cycle\n // Instead, we cache outputs and pull them during onInputsChanged\n }\n }\n });\n inner.launch();\n },\n onInputsChanged: (inputs, ctx) => {\n if (!inner) return;\n // map outer input => inner node input\n for (const [inHandle, map] of Object.entries(impl.exposure.inputs)) {\n if (inHandle in inputs)\n inner.setInput(map.nodeId, map.handle, inputs[inHandle]);\n }\n // pull inner exposed outputs and emit\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n const v = inner.getOutput(map.nodeId, map.handle);\n if (v !== undefined) ctx.emit(outHandle, v);\n }\n },\n onDeactivated: () => {\n if (unsub) unsub();\n },\n dispose: () => {\n if (unsub) unsub();\n inner?.dispose();\n },\n };\n },\n policy: { mode: \"hybrid\" },\n});\n","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type { ExecutionContext, GraphDefinition } from \"../core/types\";\nimport { ComputeCategory } from \"../plugins/compute\";\n\n// Helpers\nconst asArray = (v: unknown): number[] =>\n Array.isArray(v) ? (v as number[]) : [Number(v)];\n\nconst broadcast = (\n a: number[] | number,\n b: number[] | number\n): [number[], number[]] => {\n const aa = asArray(a);\n const bb = asArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? 0), new Array(len).fill(bb[0] ?? 0)];\n};\nconst clamp = (x: number, min: number, max: number) =>\n Math.min(max, Math.max(min, x));\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lcg = (seed: number) => {\n let s = seed >>> 0 || 1;\n return () => (s = (s * 1664525 + 1013904223) >>> 0) / 0xffffffff;\n};\n\nexport function setupBasicGraphRegistry(): Registry {\n const registry = new Registry();\n registry.categories.register(ComputeCategory);\n\n registry.registerType(\n {\n id: \"base.float\",\n validate: (v) => typeof v === \"number\" && !Number.isNaN(v),\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.bool\",\n validate: (v) => typeof v === \"boolean\",\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.string\",\n validate: (v) => typeof v === \"string\",\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.vec3\",\n validate: (v) =>\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\"),\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n // float -> vec3 : map x to [x,0,0]\n registry.registerCoercion(\"base.float\", \"base.vec3\", (v) => {\n return [Number(v) || 0, 0, 0] as [number, number, number];\n });\n\n // Async coercion variant for vec3 -> float (chunked + abortable)\n registry.registerAsyncCoercion(\n \"base.vec3\",\n \"base.float\",\n async (value: unknown, signal: AbortSignal): Promise<unknown> => {\n if (signal.aborted) throw new DOMException(\"Aborted\", \"AbortError\");\n const v = value as [number, number, number];\n await new Promise<void>((r) => setTimeout(r, 1000));\n return Math.hypot(\n Number(v[0] ?? 0),\n Number(v[1] ?? 0),\n Number(v[2] ?? 0)\n );\n }\n );\n\n registry.registerCoercion(\"base.bool\", \"base.float\", (v) => (v ? 1 : 0));\n\n registry.registerCoercion(\"base.float\", \"base.bool\", (v) => !!v);\n\n registry.registerCoercion(\"base.float\", \"base.string\", (v) => String(v));\n\n registry.registerCoercion(\"base.string\", \"base.float\", (v) => Number(v));\n\n // Enums: Math Operation\n registry.registerEnum({\n id: \"base.enum:math.operation\",\n options: [\n { value: 0, label: \"Add\" },\n { value: 1, label: \"Subtract\" },\n { value: 2, label: \"Multiply\" },\n { value: 3, label: \"Divide\" },\n { value: 4, label: \"Min\" },\n { value: 5, label: \"Max\" },\n { value: 6, label: \"Modulo\" },\n { value: 7, label: \"Power\" },\n ],\n });\n\n // Enums: Compare Operation\n registry.registerEnum({\n id: \"base.enum:compare.operation\",\n options: [\n { value: 0, label: \"LessThan\" },\n { value: 1, label: \"LessThanOrEqual\" },\n { value: 2, label: \"GreaterThan\" },\n { value: 3, label: \"GreaterThanOrEqual\" },\n { value: 4, label: \"Equal\" },\n { value: 5, label: \"NotEqual\" },\n ],\n });\n\n // Number\n registry.registerNode({\n id: \"base.number\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n impl: (ins: { Value: number }) => ({ Result: Number(ins.Value) }),\n });\n\n // Integer\n registry.registerNode({\n id: \"base.int\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n impl: (ins: { Value: number }) => ({\n Result: Math.trunc(Number(ins.Value)),\n }),\n });\n\n // Number to String\n registry.registerNode({\n id: \"base.numberToString\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Value: number }) => ({ Text: String(ins.Value) }),\n });\n\n // Clamp\n registry.registerNode({\n id: \"base.clamp\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float[]\", Min: \"base.float\", Max: \"base.float\" },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { Value: number[]; Min: number; Max: number }) => {\n const vals = asArray(ins.Value);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n return { Value: vals.map((v) => clamp(Number(v), min, max)) };\n },\n });\n\n // Interpolate (lerp)\n registry.registerNode({\n id: \"base.interpolate\",\n categoryId: \"compute\",\n inputs: {\n ValueA: \"base.float[]\",\n ValueB: \"base.float[]\",\n Factor: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { ValueA: number[]; ValueB: number[]; Factor: number }) => {\n const [a, b] = broadcast(ins.ValueA, ins.ValueB);\n const t = Number(ins.Factor ?? 0);\n const len = Math.max(a.length, b.length);\n const out = new Array(len)\n .fill(0)\n .map((_, i) => lerp(Number(a[i] ?? 0), Number(b[i] ?? 0), t));\n return { Value: out };\n },\n });\n\n // Map Range (linear)\n registry.registerNode({\n id: \"base.mapRange\",\n categoryId: \"compute\",\n inputs: {\n Mode: \"base.string\",\n Clamp: \"base.bool\",\n Value: \"base.float[]\",\n FromMin: \"base.float\",\n FromMax: \"base.float\",\n ToMin: \"base.float\",\n ToMax: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: {\n Value: number[];\n FromMin: number;\n FromMax: number;\n ToMin: number;\n ToMax: number;\n Clamp: boolean;\n }) => {\n const vals = asArray(ins.Value);\n const fromMin = Number(ins.FromMin ?? 0);\n const fromMax = Number(ins.FromMax ?? 1);\n const toMin = Number(ins.ToMin ?? 0);\n const toMax = Number(ins.ToMax ?? 1);\n const doClamp = Boolean(ins.Clamp);\n const out = vals.map((v) => {\n const t = (Number(v) - fromMin) / (fromMax - fromMin || 1);\n const r = toMin + t * (toMax - toMin);\n return doClamp\n ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax))\n : r;\n });\n return { Value: out };\n },\n });\n\n // Math (subset) - scalar version for simple examples\n registry.registerNode({\n id: \"base.math\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"base.enum:math.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.float[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n // Gracefully handle missing inputs by treating them as zeros\n const a = ins.A === undefined ? [] : asArray(ins.A);\n const b = ins.B === undefined ? [] : asArray(ins.B);\n const len = Math.max(a.length, b.length);\n const op = Number(ins.Operation ?? 0) | 0;\n const ops: Array<(x: number, y: number) => number> = [\n (x, y) => x + y,\n (x, y) => x - y,\n (x, y) => x * y,\n (x, y) => x / (y || 1),\n (x, y) => Math.min(x, y),\n (x, y) => Math.max(x, y),\n (x, y) => (y ? x % y : 0),\n (x, y) => Math.pow(x, y),\n ];\n const fn = ops[op] ?? ops[0];\n const out = new Array(len).fill(0).map((_, i) => {\n const ax = a.length === 1 && len > 1 ? a[0] : a[i] ?? 0;\n const bx = b.length === 1 && len > 1 ? b[0] : b[i] ?? 0;\n return fn(Number(ax), Number(bx));\n });\n return { Result: out };\n },\n });\n\n // Compare\n registry.registerNode({\n id: \"base.compare\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"base.enum:compare.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const [a, b] = broadcast(ins.A, ins.B);\n const op = Number(ins.Operation ?? 4) | 0; // default Equal\n const ops: Array<(x: number, y: number) => boolean> = [\n (x, y) => x < y,\n (x, y) => x <= y,\n (x, y) => x > y,\n (x, y) => x >= y,\n (x, y) => x === y,\n (x, y) => x !== y,\n ];\n const fn = ops[op] ?? ops[4];\n return { Result: a.map((x, i) => fn(Number(x), Number(b[i] ?? 0))) };\n },\n });\n\n // Combine XYZ\n registry.registerNode({\n id: \"base.compareXYZ\",\n categoryId: \"compute\",\n inputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n outputs: { XYZ: \"base.vec3[]\" },\n impl: (ins: { X: number[]; Y: number[]; Z: number[] }) => {\n const [x, y] = broadcast(ins.X, ins.Y);\n const [xx, z] = broadcast(x, ins.Z);\n const len = Math.max(xx.length, z.length);\n const out = new Array(len)\n .fill(0)\n .map(\n (_, i) =>\n [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [\n number,\n number,\n number\n ]\n );\n return { XYZ: out };\n },\n });\n\n // Separate XYZ\n registry.registerNode({\n id: \"base.separateXYZ\",\n categoryId: \"compute\",\n inputs: { XYZ: \"base.vec3[]\" },\n outputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n impl: (ins: { XYZ: Array<[number, number, number]> }) => {\n const arr = ins.XYZ ?? [];\n const X = arr.map((v) => Number(v?.[0] ?? 0));\n const Y = arr.map((v) => Number(v?.[1] ?? 0));\n const Z = arr.map((v) => Number(v?.[2] ?? 0));\n return { X, Y, Z };\n },\n });\n\n // Indices\n registry.registerNode({\n id: \"base.indices\",\n categoryId: \"compute\",\n inputs: { Domain: \"base.float\" },\n outputs: { Indices: \"base.float[]\" },\n impl: (ins: { Domain: number }) => {\n const n = Math.trunc(ins.Domain);\n return { Indices: Array.from({ length: n }, (_, i) => i) };\n },\n });\n\n // Random Numbers\n registry.registerNode({\n id: \"base.randomNumbers\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.float\",\n Max: \"base.float\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.float[]\" },\n impl: (ins: { Domain: number; Min: number; Max: number; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from({ length: len }, () => min + rng() * (max - min));\n return { Values: out };\n },\n });\n\n // Random Vectors\n registry.registerNode({\n id: \"base.randomXYZs\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.vec3\",\n Max: \"base.vec3\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.vec3[]\" },\n impl: (ins: {\n Domain: number;\n Min: [number, number, number];\n Max: [number, number, number];\n Seed: number;\n }) => {\n const len = Math.trunc(ins.Domain);\n const min = ins.Min ?? [0, 0, 0];\n const max = ins.Max ?? [1, 1, 1];\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from(\n { length: len },\n () =>\n [\n min[0] + rng() * (max[0] - min[0]),\n min[1] + rng() * (max[1] - min[1]),\n min[2] + rng() * (max[2] - min[2]),\n ] as [number, number, number]\n );\n return { Values: out };\n },\n });\n return registry;\n}\n\nexport function registerDelayNode(registry: Registry) {\n registry.registerNode({\n id: \"async.delay\",\n categoryId: \"compute\",\n inputs: { x: \"base.float\", ms: \"base.float\" },\n outputs: { out: \"base.float\" },\n impl: async (\n ins: { x: number; ms?: number },\n ctx: ExecutionContext<any>\n ) => {\n const ms = Number(ins.ms ?? 200);\n const xRaw = ins.x;\n if (xRaw === undefined || xRaw === null || Number.isNaN(Number(xRaw))) {\n return; // wait until x is present to avoid NaN emissions\n }\n await new Promise<void>((resolve, reject) => {\n const id = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(id);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n if (ctx.abortSignal.aborted) return onAbort();\n ctx.abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n });\n return { out: Number(xRaw) };\n },\n });\n}\n\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const id = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(id);\n cleanup();\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n if (signal.aborted) return onAbort();\n signal.addEventListener(\"abort\", onAbort);\n });\n}\n\nexport function registerProgressNodes(registry: Registry) {\n registry.registerNode({\n id: \"async.progress\",\n categoryId: \"compute\",\n inputs: {\n Steps: \"base.float\",\n DelayMs: \"base.float\",\n ShouldError: \"base.bool\",\n },\n outputs: { Done: \"base.string\" },\n impl: async (\n ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean },\n ctx: any\n ) => {\n const steps = Math.max(1, Math.trunc(Number(ins.Steps ?? 10)));\n const delayMs = Math.max(0, Math.trunc(Number(ins.DelayMs ?? 50)));\n const shouldError = Boolean(ins.ShouldError);\n for (let i = 0; i < steps; i++) {\n ctx.reportProgress?.(i / steps);\n await sleepWithAbort(delayMs, ctx.abortSignal);\n if (shouldError && i >= Math.floor(steps * 0.7)) {\n ctx.reportProgress?.(i / steps);\n throw new Error(\"progressWorker: simulated failure at 70% progress\");\n }\n }\n ctx.reportProgress?.(1);\n return { Done: `Completed ${steps} steps` };\n },\n });\n}\n\nexport function createRuntime(registry: Registry, def: GraphDefinition) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\n \"Validation failed: \" +\n report.issues.map((i) => `${i.code}:${i.message}`).join(\", \")\n );\n\n return builder.build(def);\n}\n","import { GraphDefinition } from \"../core/types\";\nimport { setupBasicGraphRegistry, createRuntime } from \"./shared\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nfunction makeBasicGraphDefinition(): GraphDefinition {\n return {\n nodes: [\n { nodeId: \"n1\", typeId: \"base.math\" },\n { nodeId: \"n2\", typeId: \"base.math\" },\n // Transitivity demo nodes\n { nodeId: \"n3\", typeId: \"base.compare\" },\n { nodeId: \"n4\", typeId: \"base.randomXYZs\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"A\" },\n },\n // Feed n2 result to comparer A\n {\n id: \"e2\",\n source: { nodeId: \"n2\", handle: \"Result\" },\n target: { nodeId: \"n3\", handle: \"A\" },\n },\n // Transitive coercion edge: bool[] (n3.Result) -> vec3 (n4.Min)\n // Path: bool[] -> float[] -> vec3[] -> vec3\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"Result\" },\n target: { nodeId: \"n4\", handle: \"Min\" },\n },\n ],\n };\n}\n\nexport function createSimpleGraphDef() {\n return makeBasicGraphDefinition();\n}\n\nexport function createSimpleGraphRegistry() {\n return setupBasicGraphRegistry();\n}\n\n// Execute when run as a script\nexport async function main() {\n const runtime = createRuntime(\n createSimpleGraphRegistry(),\n createSimpleGraphDef()\n );\n runtime.on(\"value\", (e) => {\n console.log(`[value:${e.io}]`, e.nodeId + \".\" + e.handle, e.value);\n });\n const engine = new PushEngine(runtime);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"B\", 3);\n engine.setInput(\"n2\", \"Operation\", \"Multiply\");\n engine.setInput(\"n2\", \"B\", 10);\n engine.setInput(\"n3\", \"B\", 15);\n // Allow async propagation to flush\n await runtime.whenIdle();\n\n console.log(\"n2.Result =\", runtime.getOutput(\"n2\", \"Result\"));\n engine.dispose();\n}\n","import {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n} from \"./shared\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { BatchedEngine } from \"../runtime/BatchedEngine\";\n\nexport function createAsyncGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n {\n nodeId: \"n1\",\n typeId: \"base.math\",\n },\n {\n nodeId: \"n2\",\n typeId: \"async.delay\",\n params: { policy: { asyncConcurrency: \"queue\", maxQueue: 4 } },\n },\n {\n nodeId: \"n3\",\n typeId: \"base.separateXYZ\",\n },\n {\n nodeId: \"n4\",\n typeId: \"base.compareXYZ\",\n },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"x\" },\n },\n // Demonstrate async edge conversion: vec3[] -> float[] using coercion\n {\n id: \"e2\",\n source: { nodeId: \"n4\", handle: \"XYZ\" },\n target: { nodeId: \"n1\", handle: \"A\" },\n typeId: \"base.vec3[]\",\n // convertAsync,\n },\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"X\" },\n target: { nodeId: \"n4\", handle: \"X\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"n3\", handle: \"Y\" },\n target: { nodeId: \"n4\", handle: \"Y\" },\n },\n {\n id: \"e5\",\n source: { nodeId: \"n3\", handle: \"Z\" },\n target: { nodeId: \"n4\", handle: \"Z\" },\n },\n ],\n };\n return def;\n}\n\nexport function createAsyncGraphRegistry() {\n const registry = setupBasicGraphRegistry();\n registerDelayNode(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createAsyncGraphRegistry(),\n createAsyncGraphDef()\n );\n const engine = new BatchedEngine(runtime, { flushIntervalMs: 0 });\n engine.on(\"value\", (e) =>\n console.log(`[value:${e.io}]`, e.nodeId + \".\" + e.handle, e.value)\n );\n engine.on(\"error\", (e) => console.warn(\"[error]\", e));\n engine.launch();\n\n // Set base ms\n engine.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"B\", 2);\n engine.setInput(\"n2\", \"ms\", 250);\n // Provide XYZ and route through async conversion edge\n engine.setInput(\"n3\", \"XYZ\", [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ]);\n\n // Rapid inputs to n1 should cancel prior runs (switch)\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"A\", 3);\n\n await engine.flush();\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInput(\"n1\", \"A\", 10);\n engine.setInput(\"n1\", \"A\", 11);\n engine.setInput(\"n1\", \"A\", 12);\n await engine.flush();\n\n await new Promise((r) => setTimeout(r, 1500));\n await engine.whenIdle();\n engine.dispose();\n}\n","import {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} from \"./shared\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nexport function createProgressGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"steps\", typeId: \"base.number\" },\n { nodeId: \"async.delay\", typeId: \"base.number\" },\n { nodeId: \"work\", typeId: \"async.progress\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"steps\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"Steps\" },\n },\n {\n id: \"e2\",\n source: { nodeId: \"async.delay\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"DelayMs\" },\n },\n // not wiring ShouldError to show manual input driven error later\n ],\n };\n return def;\n}\n\nexport function createProgressGraphRegistry() {\n const registry = setupBasicGraphRegistry();\n registerProgressNodes(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createProgressGraphRegistry(),\n createProgressGraphDef()\n );\n const engine = new PushEngine(runtime);\n\n engine.on(\"value\", (e: any) => {\n console.log(`[value:${e.io}]`, `${e.nodeId}.${e.handle}`, e.value);\n });\n engine.on(\"error\", (e: any) => {\n console.warn(\"[error]\", e.nodeId, e.runId, e.err?.message ?? e.err);\n });\n engine.on(\"stats\", (s: any) => {\n if (s.kind === \"node-progress\") {\n const pct = Math.round(((s.progress ?? 0) as number) * 100);\n console.log(`[progress] ${s.nodeId}: ${pct}%`);\n } else if (s.kind === \"node-done\") {\n console.log(`[done] ${s.nodeId} in ${s.durationMs ?? 0}ms`);\n } else if (s.kind === \"node-start\") {\n console.log(`[start] ${s.nodeId}`);\n } else if (s.kind === \"edge-start\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`\n );\n } else if (s.kind === \"edge-done\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${\n s.target.handle\n } in ${s.durationMs ?? 0}ms`\n );\n }\n });\n\n engine.launch();\n\n // Seed initial values\n engine.setInput(\"steps\", \"Value\", 12);\n engine.setInput(\"async.delay\", \"Value\", 80);\n // Manually set ShouldError on the worker (unwired input)\n engine.setInput(\"work\", \"ShouldError\", false);\n\n // After 2s, trigger an error run\n setTimeout(() => {\n console.log(\"-- triggering error run --\");\n engine.setInput(\"work\", \"ShouldError\", true);\n }, 2000);\n\n // After 5s, stop and exit\n setTimeout(async () => {\n await engine.whenIdle();\n engine.dispose();\n }, 5000);\n}\n","import { setupBasicGraphRegistry, createRuntime } from \"./shared\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown edge type (wire number to boolean input without coercion)\n // - Missing target input handle\n // - Multi inbound to same input\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"nA\", typeId: \"base.number\" },\n { nodeId: \"nB\", typeId: \"base.number\" },\n { nodeId: \"nC\", typeId: \"base.math\" },\n { nodeId: \"s1\", typeId: \"base.numberToString\" },\n { nodeId: \"cmp\", typeId: \"base.compare\" },\n // Global validation issue: unknown node type (no nodeId/edgeId in data)\n { nodeId: \"bad\", typeId: \"unknownType\" },\n ],\n edges: [\n // Valid: nA.Result -> nC.A (number)\n {\n id: \"e1\",\n source: { nodeId: \"nA\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Invalid input name (INPUT_MISSING)\n {\n id: \"e2\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"NonExistent\" },\n },\n // Multi inbound to same input (warning): another edge to A\n {\n id: \"e3\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Type mismatch to highlight coercion/validation (string -> float[] should error)\n {\n id: \"e4\",\n source: { nodeId: \"s1\", handle: \"Text\" },\n target: { nodeId: \"cmp\", handle: \"A\" },\n },\n ],\n };\n return def;\n}\n\nexport function createValidationGraphRegistry() {\n const registry = setupBasicGraphRegistry();\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createValidationGraphRegistry(),\n createValidationGraphDef()\n );\n const engine = new PushEngine(runtime);\n engine.launch();\n engine.setInput(\"nA\", \"Value\", 1);\n engine.setInput(\"nB\", \"Value\", 2);\n setTimeout(async () => {\n await runtime.whenIdle();\n engine.dispose();\n }, 1000);\n}\n"],"names":[],"mappings":"MAiCa,gBAAgB,CAAA;AAA7B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAA4C;IAW1E;AAVE,IAAA,QAAQ,CAAc,GAAwC,EAAA;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;AAChC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,GAAG,CAAC,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC;AACA,IAAA,GAAG,CAAC,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC;AACD;MAEY,QAAQ,CAAA;AAArB,IAAA,WAAA,GAAA;AACW,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAmC;AAClD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA8B;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAOrB;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,gBAAgB,EAAE;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAM3B;AAEK,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAGxB;AACK,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAM7B;AAEK,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAO5B;IA+aL;IA7aE,YAAY,CACV,IAAwB,EACxB,IAIC,EAAA;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;AAE7B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE;AAC/B,gBAAA,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;AACnB,gBAAA,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC;AACtB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,IAAI,EAAE,SAAS,EAAE;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,EAAA,CAAI;YAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5B,gBAAA,MAAM,SAAS,GAA8B;AAC3C,oBAAA,EAAE,EAAE,OAAO;oBACX,QAAQ,EAAE,CAAC,CAAU,KACnB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAChB,wBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI;AACZ,4BAAA,IAAI;AACF,gCAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;4BACzB;AAAE,4BAAA,MAAM;AACN,gCAAA,OAAO,KAAK;4BACd;AACF,wBAAA,CAAC,CAAC;iBACL;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;YACpC;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,KAC5C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CACvC;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;AAChD,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK;AACvC,gBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBAC9B,KAAK,MAAM,CAAC,IAAI,KAAK;wBAAE,IAAI,CAAC,KAAK,SAAS;AAAE,4BAAA,OAAO,CAAC;AACpD,oBAAA,OAAO,SAAS;gBAClB;AACA,gBAAA,OAAO,KAAK,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,YAAY,CAWV,IAA2C,EAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAA8C,CAAC;AACvE,QAAA,OAAO,IAAI;IACb;IAEA,kBAAkB,CAChB,MAAc,EACd,CAGC,EAAA;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;;;AAG/B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,MAAM,IAAI;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE;AAC5B,gBAAA,SAAS,EAAE,CAAC,KAAc,KACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;AACnE,gBAAA,WAAW,EAAE,CAAC,IAAa,KACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;AACnE,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,gBAAgB,CACd,UAAkB,EAClB,QAAgB,EAChB,OAAoC,EACpC,IAAkC,EAAA;QAElC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,EAAE;YAC/C,OAAO;AACP,YAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,SAAA,CAAC;;AAEF,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,UAAU,IAAI;AACjC,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,QAAQ,IAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;AACzB,oBAAA,OAAO,EAAE,CAAC,KAAc,KAAI;AAC1B,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;;AAE7D,wBAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;AACD,oBAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,qBAAqB,CACnB,UAAkB,EAClB,QAAgB,EAChB,YAAuE,EACvE,IAAkC,EAAA;QAElC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,EAAE;YACpD,YAAY;AACZ,YAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,SAAA,CAAC;;AAEF,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,UAAU,IAAI;AACjC,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,QAAQ,IAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9B,oBAAA,YAAY,EAAE,OAAO,KAAc,EAAE,MAAmB,KAAI;AAC1D,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BACxB,MAAM,GAAG,GAAc,EAAE;AACzB,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACrC,IAAI,MAAM,EAAE,OAAO;oCACjB,MAAM,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC;;AAE7C,gCAAA,GAAG,CAAC,IAAI,CAAC,MAAM,YAAY,CAAE,KAAmB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;4BAC/D;AACA,4BAAA,OAAO,GAAG;wBACZ;wBACA,OAAO,CAAC,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC5C,CAAC;AACD,oBAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,SAAS,CACP,UAA8B,EAC9B,QAA4B,EAAA;AAE5B,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;QAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;IACrD;IAEA,WAAW,CACT,UAAkB,EAClB,QAAgB,EAAA;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC,OAAO;AACrD,QAAA,OAAO,SAAS;IAClB;IAEA,gBAAgB,CACd,UAAkB,EAClB,QAAgB,EAAA;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,QAAQ,CAAC,YAAY;AAC3D,QAAA,OAAO,SAAS;IAClB;;IAGA,aAAa,GAAA;QAMX,MAAM,GAAG,GAKJ,EAAE;AACP,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,EAAE;AACF,gBAAA,KAAK,EAAE,KAAK;gBACZ,aAAa,EAAE,GAAG,CAAC,aAAa;AACjC,aAAA,CAAC;QACJ;AACA,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;AACtD,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;QACvE;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,eAAe,CACb,UAAkB,EAClB,QAAgB,EAAA;AAEhB,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,EAAE;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AAEzB,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,MAAM,GAAG,GAAyB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;YACrE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/C,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,GAAG,GAAyB;AAChC,gBAAA,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,UAAU,CAAC,OAAO;aAC5B;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrD,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,GAAG,GAA0B;AACjC,gBAAA,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,WAAW,CAAC,YAAY;aACvC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;;AAGA,QAAA,MAAM,YAAY,GAAG,CAAC,IAAY,KAAiB;YACjD,MAAM,GAAG,GAAgB,EAAE;AAC3B,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;gBACjD,IAAI,GAAG,CAAC,aAAa;oBAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,KAAK,IAAI;oBACd,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YACxE;AACA,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;gBACtD,IAAI,GAAG,CAAC,aAAa;oBAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,KAAK,IAAI;oBACd,GAAG,CAAC,IAAI,CAAC;AACP,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,EAAE,EAAE,GAAG;AACP,wBAAA,IAAI,EAAE,OAAO;wBACb,YAAY,EAAE,GAAG,CAAC,YAAY;AAC/B,qBAAA,CAAC;YACN;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC;AAQD,QAAA,MAAM,QAAQ,GAAG,CACf,CAA+C,EAC/C,CAAmC,KACjC;AACF,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AACnB,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;AAAE,gBAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACjD,YAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B,QAAA,CAAC;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4C;QAChE,MAAM,KAAK,GAAY,EAAE;AACzB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAQ,KAAI;;YAExB,IAAI,CAAC,GAAG,CAAC;AACT,YAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAClB,IACE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;qBAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAC9D;oBACA;gBACF;AACA,gBAAA,CAAC,EAAE;YACL;YACA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,CAAC;QAED,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE5C,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG;AAC1B,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;;AAEzB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;gBACzD,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,MAAM,OAAO,GAAG,CAAC,KAAc,KAAI;wBACjC,IAAI,GAAG,GAAG,KAAK;AACf,wBAAA,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;;AAE3B,4BAAA,GAAG,GAAI,IAAsB,CAAC,OAAO,CAAC,GAAG,CAAC;wBAC5C;AACA,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;oBACD,MAAM,GAAG,GAAyB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC3D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,oBAAA,OAAO,GAAG;gBACZ;qBAAO;oBACL,MAAM,YAAY,GAAG,OAAO,KAAc,EAAE,MAAmB,KAAI;wBACjE,IAAI,GAAG,GAAY,KAAK;AACxB,wBAAA,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;AAC3B,4BAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,gCAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;4BACzB;iCAAO;gCACL,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;4BAC5C;wBACF;AACA,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;oBACD,MAAM,GAAG,GAA0B,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE;oBAClE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,oBAAA,OAAO,GAAG;gBACZ;YACF;;YAEA,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzC,gBAAA,MAAM,QAAQ,GAAG;AACf,oBAAA,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;oBACzB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;iBACxD;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;oBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;oBAC3B,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACpE;YACF;QACF;AAEA,QAAA,OAAO,SAAS;IAClB;;AAGA,IAAA,YAAY,CAAC,IAWZ,EAAA;QACC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI;AAC/C,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,YAAY;AAEjD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;AAC9C,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE;AACtC,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;YAC9B,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC;QAC9C;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;YACjB,OAAO;YACP,YAAY;YACZ,YAAY;AACb,SAAA,CAAC;;QAEF,IAAI,CAAC,YAAY,CACf;YACE,EAAE;YACF,WAAW;AACX,YAAA,QAAQ,EAAE,CAAC,CAAU,KACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACvD,EACD,IAAI,CACL;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE;AAC1B,YAAA,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;YACnB,WAAW,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAC9B,SAAA,CAAC;;QAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;AACzB,iBAAA,IAAI;AACJ,iBAAA,WAAW,EAAE;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK;AACtB,YAAA,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;AACvE,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK;AACtB,YAAA,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,kBAAE;AACF,kBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;AAC7C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AACD;;MCvYY,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA4B;QAC3C,IAAA,CAAA,KAAK,GAAkB,EAAE;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAGxB;QACK,IAAA,CAAA,WAAW,GAA4B,EAAE;QACzC,IAAA,CAAA,MAAM,GAAG,KAAK;IAksBxB;AAhsBE,IAAA,OAAO,MAAM,CACX,GAAoB,EACpB,QAAkB,EAClB,IAAgD,EAAA;AAEhD,QAAA,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE;QAC7B,EAAE,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE;;AAGxC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;AAC5D,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,YAAA,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC;YACjE,IAAI,GAAG,CAAC,YAAY;AAAE,gBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;gBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,aAAA,CAAC;AACF,YAAA,MAAM,EAAE,GAAqB;gBAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,KAAK,EAAE,EAAE;gBACT,OAAO;gBACP,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gBAAA,MAAM,EAAE;oBACN,GAAG,GAAG,CAAC,MAAM;oBACb,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;AACxD,iBAAA;gBACD,iBAAiB,EAAE,IAAI,GAAG,EAAE;AAC5B,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,QAAQ,EAAE,CAAC;AACZ,iBAAA;aACF;YACD,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B;;AAGA,QAAA,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAiB;;YAE1C,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACnE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACnE,YAAA,IAAI,eAAe,GAAG,CAAC,CAAC,MAAM;AAC9B,YAAA,IAAI,WAA+B;AACnC,YAAA,IAAI,WAA+B;YACnC,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClD,IAAI,OAAO,EAAE;oBACX,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChD;YACF;AACA,YAAA,IAAI,CAAC,eAAe;gBAAE,eAAe,GAAG,WAAW;YACnD,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClD,IAAI,OAAO,EAAE;oBACX,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC/C;YACF;;YAGA,IAAI,OAAO,GAAG,SAAS;YACvB,IAAI,YAAY,GAAG,SAAS;YAC5B,IAAI,WAAW,IAAI,WAAW,IAAI,WAAW,KAAK,WAAW,EAAE;gBAC7D,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC;AACzD,gBAAA,IAAI,EAAE;AAAE,oBAAA,OAAO,GAAG,OAAO,IAAI,EAAE;gBAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;AAC/D,gBAAA,IAAI,GAAG;AAAE,oBAAA,YAAY,GAAG,YAAY,IAAI,GAAG;YAC7C;YAEA,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;gBACvB,MAAM,EAAE,eAAe,IAAI,SAAS;gBACpC,OAAO;gBACP,YAAY;AACZ,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;aACjD;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,EAAE;IACX;IAEA,EAAE,CACA,KAAQ,EACR,OAAgC,EAAA;QAEhC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAiC;AACrE,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAChB,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAClC;IAEQ,IAAI,CACV,KAAQ,EACR,OAA2B,EAAA;QAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,GAAG;YAAE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,CAAC,OAAO,CAAC;IACtD;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,KAAc,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;IAC7C;IAEA,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAA,CAAE,CAAC;AAEvD,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACpD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAChC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAChE;AACD,YAAA,IAAI,UAAU;gBAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;;AAE3B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAC5D;QACA,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACtD;IAEA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,OAAO,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IAC9B;AAEQ,IAAA,qBAAqB,CAAC,MAAc,EAAA;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,IAAI,IAAI,CAAC,MAAM;YAAE;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE;QAEhC,IACE,MAAM,CAAC,UAAU;AACjB,YAAA,IAAI,CAAC,eAAe;YACpB,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,EAC9C;;AAEA,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3D;QACF;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG;QAE1B,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AACxE,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;QAEtB,MAAM,QAAQ,GAAG,CACf,KAAa,EACb,cAAuC,EACvC,MAAmB,KACjB;AACF,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;AAEtC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;AAChD,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAClD,IAAI,CAAC,KAAK,UAAU;AAAE,wBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACzC;YACF;AAEA,YAAA,IAAI,SAAc;YAClB,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE;AAC5C,gBAAA,SAAS,GAAG,UAAU,CACpB,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EACjC,MAAM,CAAC,SAAS,CACjB;YACH;AAEA,YAAA,MAAM,GAAG,GAA0B;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACnD,gBAAA,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,KAAI;AACtB,oBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;oBAC7C,IAAI,CAAC,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW;wBAAE;oBACjD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;gBACvC,CAAC;gBACD,oBAAoB,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBAC7D,QAAQ,EAAE,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,gBAAA,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,UAAU,CAAC,MAAM;AAC9B,gBAAA,qBAAqB,EAAE,MAAM,IAAI,eAAe,EAAE;AAClD,gBAAA,cAAc,EAAE,CAAC,CAAS,KAAI;oBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,wBAAA,IAAI,EAAE,eAAe;wBACrB,MAAM;wBACN,KAAK;AACL,wBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC9B,qBAAA,CAAC;gBACJ,CAAC;aACF;AAED,YAAA,MAAM,IAAI,GAAG,OAAO,OAAe,KAAI;gBACrC,IAAI,QAAQ,GAAG,KAAK;AACpB,gBAAA,IAAI;oBACF,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,cAAc,EAAE,GAAG,CAAC;gBAC3D;gBAAE,OAAO,GAAG,EAAE;;AAEZ,oBAAA,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;AAC7B,wBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM;AACvC,wBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACvB,4BAAA,OAAO;wBACT;oBACF;oBACA,QAAQ,GAAG,IAAI;;AAEf,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;AAC1B,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC1B,oBAAA,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;AAC5C,wBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5D,wBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9C,wBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;oBAC1B;AACA,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;gBAC5C;wBAAU;AACR,oBAAA,IAAI,SAAS;wBAAE,YAAY,CAAC,SAAS,CAAC;AACtC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC;AACzC,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC5D,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;oBACjC,IAAI,CAAC,KAAK,CAAC,cAAc;wBACvB,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC;8BACjC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;8BAClC,SAAS;;AAEf,oBAAA,IAAI,CAAC,QAAQ;AAAE,wBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;AAC/C,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,wBAAA,IAAI,EAAE,WAAW;wBACjB,MAAM;wBACN,KAAK;AACL,wBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACtC,qBAAA,CAAC;AACF,oBAAA,IAAI,MAAM;AAAE,wBAAA,MAAM,EAAE;gBACtB;AACF,YAAA,CAAC;;AAGD,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACzD,YAAA,KAAK,IAAI,CAAC,CAAC,CAAC;AACd,QAAA,CAAC;AAED,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;QAChD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;YAAE;AACxD,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3D,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAEhD,MAAM,WAAW,GAAG,MAAK;AACvB,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;oBAAE;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;gBAC7B,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAK;;AAErC,oBAAA,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5B,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;AAED,YAAA,WAAW,EAAE;YACb;QACF;;QAGA,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC;AAEQ,IAAA,oBAAoB,CAAC,MAAc,EAAA;;QAEzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE;AACpE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACrD,IAAI,KAAK,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QACzE;IACF;AAEQ,IAAA,SAAS,CACf,SAAiB,EACjB,SAAiB,EACjB,KAAc,EAAA;;QAGd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE;AAC1C,QAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,SAAS;YACjB,KAAK;AACL,YAAA,EAAE,EAAE,QAAQ;AACb,SAAA,CAAC;;AAGF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAChC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CACtE;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;;AAExB,YAAA,IAAI,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC;AACpC,YAAA,MAAM,aAAa,GAAG,CAAC,CAAU,KAAI;AACnC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/C,gBAAA,IAAI,CAAC,OAAO;oBAAE;gBACd,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;;AAEnC,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,oBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,oBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,EAAE,EAAE,OAAO;AACZ,iBAAA,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/D,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,CAAC,YAAY,EAAE;;AAElB,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,oBAAA,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,CAAC,CAAC,EAAE;AACZ,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC7D,iBAAA,CAAC;AACF,gBAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,gBAAA,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACjB,gBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI;AACvB,gBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;AACpB,gBAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;;AAE7B,gBAAA,KAAK;AACF,qBAAA,YAAY,CAAC,OAAO,EAAE,GAAG;AACzB,qBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,oBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK;oBACxB,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAC9B,oBAAA,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO;;AAEpD,oBAAA,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;AAC7B,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,wBAAA,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,CAAC,CAAC,EAAE;AACZ,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,wBAAA,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc;AACnC,qBAAA,CAAC;oBACF,aAAa,CAAC,CAAC,CAAC;AAClB,gBAAA,CAAC;AACA,qBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;oBACb,IAAI,GAAG,CAAC,OAAO;wBAAE;AACjB,oBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK;AACxB,oBAAA,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;AACvB,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,wBAAA,IAAI,EAAE,cAAc;wBACpB,MAAM,EAAE,CAAC,CAAC,EAAE;AACZ,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;wBAC5D,GAAG;AACJ,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;YACN;iBAAO;gBACL,IAAI,CAAC,CAAC,OAAO;AAAE,oBAAA,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC3C,aAAa,CAAC,OAAO,CAAC;YACxB;QACF;IACF;IAEA,MAAM,GAAA;;QAEJ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;AAClC,YAAA,MAAM,GAAG,GAA0B;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACnD,gBAAA,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;gBACnE,oBAAoB,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClE,QAAQ,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACzC,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,gBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,WAAA,CAAa;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;AACxB,gBAAA,qBAAqB,EAAE,MAAM,IAAI,eAAe,EAAE;AAClD,gBAAA,cAAc,EAAE,CAAC,CAAS,KAAI;oBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,CAAC;aACF;YACD,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;gBACxC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACpD,aAAA,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;QACjC;IACF;IAEA,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;AAClC,QAAA,MAAM,GAAG,GAA0B;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACnD,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;YAC9D,oBAAoB,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YAC7D,QAAQ,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACzC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,CAAA,EAAG,MAAM,CAAA,SAAA,CAAW;YAC3B,WAAW,EAAE,IAAI,CAAC,MAAM;AACxB,YAAA,qBAAqB,EAAE,MAAM,IAAI,eAAe,EAAE;AAClD,YAAA,cAAc,EAAE,CAAC,CAAS,KAAI;gBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,CAAC;SACF;QACD,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,KAAK,EAAE,GAAG,CAAC;IAC5C;IAEA,OAAO,GAAA;QACL,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI;AACxB,YAAA,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACpD,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;;AAGA,IAAA,oBAAoB,CAAC,MAAc,EAAA;QASjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;QAC3B,OAAO;AACL,YAAA,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;SACzB;IACH;IAEA,uBAAuB,GAAA;AACrB,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;IAChC;AAEA,IAAA,cAAc,CAAC,GAA4B,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,GAAG,EAAE;IAC/B;AAEA,IAAA,uBAAuB,CAAC,GAA4B,EAAA;AAClD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,oBAAoB,CAClB,MAAc,EACd,IAKC,EACD,IAA4B,EAAA;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,IAAI,EAAE,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACjB;QACA,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACxD,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AAC3D,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QACrD,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IAC5C;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,MAAM,GAAG,MAAc;YAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACnC,gBAAA,IAAI,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;AAAE,oBAAA,OAAO,KAAK;AAC9C,gBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,KAAK;YACtC;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACD,QAAA,IAAI,MAAM,EAAE;YAAE;AACd,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YAClC,MAAM,KAAK,GAAG,MAAK;AACjB,gBAAA,IAAI,MAAM,EAAE;AAAE,oBAAA,OAAO,EAAE;;AAClB,oBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5B,YAAA,CAAC;AACD,YAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AACvB,QAAA,CAAC,CAAC;IACJ;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEA,IAAA,6BAA6B,CAAC,MAAc,EAAA;AAC1C,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;IACnC;AAEA,IAAA,0BAA0B,CAAC,MAAc,EAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QACvC;IACF;AAEA,IAAA,8BAA8B,CAAC,MAAc,EAAA;AAC3C,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACpC;;IAGA,MAAM,CAAC,GAAoB,EAAE,QAAkB,EAAA;;QAE7C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;QAG7C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE;AACpC,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI;AACxB,gBAAA,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACpD,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3B;QACF;;AAGA,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,IAAI,CAAC,QAAQ,EAAE;;AAEb,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,gBAAA,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;AAC5D,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,gBAAA,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC;gBACjE,IAAI,GAAG,CAAC,YAAY;AAAE,oBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;oBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,iBAAA,CAAC;AACF,gBAAA,MAAM,EAAE,GAAqB;oBAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,KAAK,EAAE,EAAE;oBACT,OAAO;oBACP,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,MAAM,EAAE;wBACN,GAAG,GAAG,CAAC,MAAM;wBACb,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;AACxD,qBAAA;oBACD,iBAAiB,EAAE,IAAI,GAAG,EAAE;AAC5B,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,QAAQ,EAAE,CAAC;AACZ,qBAAA;iBACF;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;;AAE5B,gBAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;AAClC,gBAAA,MAAM,GAAG,GAA0B;oBACjC,KAAK,EAAE,EAAE,CAAC,KAAK;AACf,oBAAA,QAAQ,EAAE,CAAC,IAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;AAC/D,oBAAA,IAAI,EAAE,CAAC,MAAc,EAAE,KAAc,KACnC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;oBAC1C,oBAAoB,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC;oBAChE,QAAQ,EAAE,CAAC,MAAc,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC/C,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,oBAAA,KAAK,EAAE,CAAA,EAAG,EAAE,CAAC,MAAM,CAAA,WAAA,CAAa;oBAChC,WAAW,EAAE,IAAI,CAAC,MAAM;AACxB,oBAAA,qBAAqB,EAAE,MAAM,IAAI,eAAe,EAAE;iBACnD;gBACD,EAAE,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE;oBACpC,KAAK,EAAE,EAAE,CAAC,KAAK;AACf,oBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;AAClD,iBAAA,CAAC;gBACF,EAAE,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;YAC/B;iBAAO;;AAEL,gBAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;oBACnB,QAAQ,CAAC,KAAK,GAAG;AACf,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,QAAQ,EAAE,CAAC;qBACZ;gBACH;YACF;QACF;;AAGA,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB;AAClD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YACjE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACvC;;AAGA,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAiB;YAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACrE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACrE,YAAA,IAAI,eAAe,GAAG,CAAC,CAAC,MAAM;AAC9B,YAAA,IAAI,WAA+B;AACnC,YAAA,IAAI,WAA+B;YACnC,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClD,IAAI,OAAO,EAAE;oBACX,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChD;YACF;AACA,YAAA,IAAI,CAAC,eAAe;gBAAE,eAAe,GAAG,WAAW;YACnD,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClD,IAAI,OAAO,EAAE;oBACX,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC/C;YACF;YAEA,IAAI,OAAO,GAAG,SAAS;YACvB,IAAI,YAAY,GAAG,SAAS;YAC5B,IAAI,WAAW,IAAI,WAAW,IAAI,WAAW,KAAK,WAAW,EAAE;gBAC7D,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC;AACzD,gBAAA,IAAI,EAAE;AAAE,oBAAA,OAAO,GAAG,OAAO,IAAI,EAAE;gBAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;AAC/D,gBAAA,IAAI,GAAG;AAAE,oBAAA,YAAY,GAAG,YAAY,IAAI,GAAG;YAC7C;YACA,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;gBACvB,MAAM,EAAE,eAAe,IAAI,SAAS;gBACpC,OAAO;gBACP,YAAY;AACZ,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;aACjD;AACH,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB;AAClD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YACjE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACvC;;QAGA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE;AAC3C,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,IAAI,OAAO,GAAG,KAAK;YACnB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACxB,oBAAA,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;wBAC1B,OAAO,GAAG,IAAI;oBAChB;gBACF;YACF;AACA,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;QACjD;;QAGA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;QACzC;IACF;AACD;;MC3yBY,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAa;AAEzC,IAAA,QAAQ,CAAC,GAAoB,EAAA;QAC3B,MAAM,MAAM,GAAsB,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;;AAGjC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;gBACzB,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,OAAO,EAAE,CAAA,iBAAA,EAAoB,CAAC,CAAC,MAAM,CAAA,CAAE;AACvC,oBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;AAC3B,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACvB;AACA,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAClD,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,OAAO,EAAE,CAAA,kBAAA,EAAqB,CAAC,CAAC,MAAM,CAAA,CAAE;AACxC,oBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;AAC7C,iBAAA,CAAC;gBACF;YACF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACtD,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,oBAAoB,QAAQ,CAAC,UAAU,CAAA,eAAA,EAAkB,CAAC,CAAC,MAAM,CAAA,CAAE;AAC7E,iBAAA,CAAC;YACJ;QACF;;AAGA,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB;AAC/C,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACrB,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,OAAO,EAAE,CAAA,kBAAA,EAAqB,CAAC,CAAC,EAAE,CAAA,CAAE;AACpC,oBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;AACvB,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB;YACA,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACrE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACrE,YAAA,IAAI,CAAC,OAAO;gBACV,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,qBAAqB;AAC3B,oBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,oBAAA,CAAsB;AAC3C,oBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;AACvB,iBAAA,CAAC;AACJ,YAAA,IAAI,CAAC,OAAO;gBACV,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,qBAAqB;AAC3B,oBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,oBAAA,CAAsB;AAC3C,oBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;AACvB,iBAAA,CAAC;;AAEJ,YAAA,IAAI,eAAe,GAAuB,CAAC,CAAC,MAAM;AAClD,YAAA,IAAI,CAAC,eAAe,IAAI,OAAO,EAAE;AAC/B,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBACvD,IAAI,OAAO,EAAE;oBACX,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBACpD;YACF;YACA,MAAM,IAAI,GAAG;kBACT,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe;kBACvC,SAAS;YACb,IAAI,CAAC,IAAI,EAAE;gBACT,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,wBAAA,CAA0B;AAC/C,oBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;AACvB,iBAAA,CAAC;YACJ;YAEA,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AACvD,gBAAA,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;oBACpD,MAAM,CAAC,IAAI,CAAC;AACV,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,IAAI,EAAE,gBAAgB;AACtB,wBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,eAAA,EAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,YAAA,EAAe,OAAO,CAAC,MAAM,CAAA,CAAE;AACrF,wBAAA,IAAI,EAAE;4BACJ,MAAM,EAAE,CAAC,CAAC,EAAE;4BACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,4BAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACxB,yBAAA;AACF,qBAAA,CAAC;gBACJ;gBACA,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACjD,oBAAA,IACE,QAAQ;wBACR,eAAe;AACf,wBAAA,QAAQ,KAAK,eAAe;wBAC5B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,EACnD;wBACA,MAAM,CAAC,IAAI,CAAC;AACV,4BAAA,KAAK,EAAE,OAAO;AACd,4BAAA,IAAI,EAAE,sBAAsB;AAC5B,4BAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,MAAA,EAAS,eAAe,CAAA,0BAAA,EAA6B,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAA,wBAAA,CAA0B;AAClJ,4BAAA,IAAI,EAAE;gCACJ,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gCAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;gCACvB,QAAQ;gCACR,eAAe;AAChB,6BAAA;AACF,yBAAA,CAAC;oBACJ;gBACF;YACF;YACA,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AACvD,gBAAA,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;oBACnD,MAAM,CAAC,IAAI,CAAC;AACV,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,IAAI,EAAE,eAAe;AACrB,wBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,cAAA,EAAiB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,YAAA,EAAe,OAAO,CAAC,MAAM,CAAA,CAAE;AACpF,wBAAA,IAAI,EAAE;4BACJ,MAAM,EAAE,CAAC,CAAC,EAAE;4BACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,4BAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,yBAAA;AACF,qBAAA,CAAC;gBACJ;gBACA,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAChD,oBAAA,IACE,QAAQ;wBACR,eAAe;AACf,wBAAA,QAAQ,KAAK,eAAe;wBAC5B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC,EACnD;wBACA,MAAM,CAAC,IAAI,CAAC;AACV,4BAAA,KAAK,EAAE,OAAO;AACd,4BAAA,IAAI,EAAE,qBAAqB;AAC3B,4BAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,MAAA,EAAS,eAAe,CAAA,yBAAA,EAA4B,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAA,wBAAA,CAA0B;AACjJ,4BAAA,IAAI,EAAE;gCACJ,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gCAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;gCACtB,QAAQ;gCACR,eAAe;AAChB,6BAAA;AACF,yBAAA,CAAC;oBACJ;gBACF;YACF;;AAGA,YAAA,MAAM,UAAU,GAAG,CAAA,EAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC3D,YAAA,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE;QAEA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE;AACxC,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,GAAG,CAAA,KAAA,EAAQ,KAAK,CAAA,iCAAA,CAAmC;oBACrE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,iBAAA,CAAC;YACJ;QACF;QAEA,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE;IACjE;IAEA,KAAK,CAAC,GAAoB,EAAE,IAAmB,EAAA;AAC7C,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IACtD;AAEA,IAAA,UAAU,CACR,GAAoB,EACpB,QAGC,EACD,UAAkB,EAClB,WAAoB,EAAA;;QAGpB,MAAM,UAAU,GAA2B,EAAE;QAC7C,MAAM,WAAW,GAA2B,EAAE;AAE9C,QAAA,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;YAChE,MAAM,SAAS,GAAG;AAChB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;kBACxC,SAAS;AACb,YAAA,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;AACnE,YAAA,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,SAAS;QAC3C;AAEA,QAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;YAChE,MAAM,SAAS,GAAG;AAChB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;kBACxC,SAAS;AACb,YAAA,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;AACpE,YAAA,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,SAAS;QAC7C;QAEA,OAAO;AACL,YAAA,EAAE,EAAE,UAAU;YACd,WAAW;AACX,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC6B;IACxD;AACD;;MC5PqB,cAAc,CAAA;AAClC,IAAA,WAAA,CAAmB,YAA0B,EAAA;QAA1B,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAiB;IAEhD,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;IAC5B;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,KAAc,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;IAC7C;IAEA,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;QACvD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAC7C;IAEA,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;QAC5C,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;IAClD;IAEA,EAAE,CACA,KAAQ,EACR,OAA+B,EAAA;QAE/B,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC7C;IAEA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IACrC;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IAC7B;AACD;;ACrCK,MAAO,UAAW,SAAQ,cAAc,CAAA;AAC5C,IAAA,WAAA,CAAY,YAA0B,EAAA;QACpC,KAAK,CAAC,YAAY,CAAC;IACrB;AACD;;MCAY,WAAW,CAAA;AAItB,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC;IAC3C;AAEA,IAAA,MAAM,KAAK,CACT,GAAoB,EACpB,IAAgD,EAAA;AAEhD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;IAClC;IAEA,MAAM,MAAM,CAAC,GAAoB,EAAA;;;AAG/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;AACvB,QAAA,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE;YAC3B,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC3C;QACF;AACA,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACvB;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,MAAM;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;QAC7D,OAAO,IAAI,CAAC,MAAM;IACpB;AACD;;AChCK,MAAO,aAAc,SAAQ,cAAc,CAAA;IAG/C,WAAA,CACE,YAA0B,EAClB,IAAA,GAA6B,EAAE,EAAA;QAEvC,KAAK,CAAC,YAAY,CAAC;QAFX,IAAA,CAAA,IAAI,GAAJ,IAAI;AAJN,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAU;IAOtC;IAES,MAAM,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;AAC9D,YAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QACzE;IACF;IAES,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;AAChE,QAAA,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7B;IAES,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;AACrD,QAAA,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,MAAM,KAAK,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE;;QAEhC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAC1B,KAAK,MAAM,CAAC,IAAI,KAAK;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;IAES,OAAO,GAAA;QACd,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QACzC,KAAK,CAAC,OAAO,EAAE;IACjB;AACD;;AC9CD;AACM,MAAO,UAAW,SAAQ,cAAc,CAAA;AAC5C,IAAA,WAAA,CAAY,YAA0B,EAAA;QACpC,KAAK,CAAC,YAAY,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;AAES,IAAA,MAAM,KAAU;;IAGzB,MAAM,WAAW,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,MAAM,CAAC;AACxD,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;AACD;;ACVK,MAAO,YAAa,SAAQ,cAAc,CAAA;IAM9C,WAAA,CAAY,YAA0B,EAAU,IAAA,GAAsB,EAAE,EAAA;QACtE,KAAK,CAAC,YAAY,CAAC;QAD2B,IAAA,CAAA,IAAI,GAAJ,IAAI;QAL5C,IAAA,CAAA,WAAW,GAAG,CAAC;QACf,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;AAChB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAU;AAIpC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;IAC/B;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG;QAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACtB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;gBAErB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACvB,KAAK,MAAM,CAAC,IAAI,KAAK;AACnB,oBAAA,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;AACrD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,oBAAA,IAAI,CAAC,UAAU,GAAG,SAAS;gBAC7B;YACF;QACF;IACF;IAES,MAAM,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;IAC5B;IAES,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;QAChE,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;YAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG;YAC1C,IAAI,IAAI,CAAC,UAAU;AAAE,gBAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;gBAChC,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;gBACrB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACvB,KAAK,MAAM,CAAC,IAAI,KAAK;AACnB,oBAAA,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,UAAU,GAAG,SAAS;YAC7B,CAAC,EAAE,QAAQ,CAAC;QACd;AACA,QAAA,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,MAAM,CAAC;IAC5D;IAES,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;AACrD,QAAA,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7B;IAES,OAAO,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC7B;QACA,KAAK,CAAC,OAAO,EAAE;IACjB;AACD;;AClFD;AACM,MAAO,UAAW,SAAQ,cAAc,CAAA;AAE5C,IAAA,WAAA,CAAY,YAA0B,EAAA;QACpC,KAAK,CAAC,YAAY,CAAC;AAFb,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAU;AAGpC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;AAES,IAAA,MAAM,KAAU;IAEhB,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;AAChE,QAAA,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7B;IAES,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;AACrD,QAAA,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,MAAM,IAAI,GAAA;;QAER,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAC1B,KAAK,MAAM,CAAC,IAAI,KAAK;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;AACD;;ACxBM,MAAM,eAAe,GAA4C;AACtE,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;AAC5B,QAAA,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,EAAA;YAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AACnC,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D;QACF,CAAC;KACF,CAAC;IACF,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE;;;MCNzC,iBAAiB,GAAG,CAC/B,QAAkB,MAId;AACJ,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,YAAY,EAAE,CAAC,IAAI,KAAI;AACrB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;IACxE,CAAC;AACD,IAAA,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,KAAI;AAC1B,QAAA,IAAI,KAA+B;AACnC,QAAA,IAAI,KAA+B;QACnC,OAAO;YACL,WAAW,EAAE,MAAK;gBAChB,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;;gBAE/C,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AAC9B,oBAAA,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CACtB,EAAE;AACD,wBAAA,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE;oBAI1D;AACF,gBAAA,CAAC,CAAC;gBACF,KAAK,CAAC,MAAM,EAAE;YAChB,CAAC;AACD,YAAA,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,KAAI;AAC/B,gBAAA,IAAI,CAAC,KAAK;oBAAE;;AAEZ,gBAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBAClE,IAAI,QAAQ,IAAI,MAAM;AACpB,wBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5D;;AAEA,gBAAA,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACpE,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;oBACjD,IAAI,CAAC,KAAK,SAAS;AAAE,wBAAA,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC7C;YACF,CAAC;YACD,aAAa,EAAE,MAAK;AAClB,gBAAA,IAAI,KAAK;AAAE,oBAAA,KAAK,EAAE;YACpB,CAAC;YACD,OAAO,EAAE,MAAK;AACZ,gBAAA,IAAI,KAAK;AAAE,oBAAA,KAAK,EAAE;gBAClB,KAAK,EAAE,OAAO,EAAE;YAClB,CAAC;SACF;IACH,CAAC;AACD,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC3B,CAAA;;AC7DD;AACA,MAAM,OAAO,GAAG,CAAC,CAAU,KACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAI,CAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAElD,MAAM,SAAS,GAAG,CAChB,CAAoB,EACpB,CAAoB,KACI;AACxB,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACrB,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACrB,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5C,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClE,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAC1C,IAAA,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AACD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,KAChD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACjC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACjE,MAAM,GAAG,GAAG,CAAC,IAAY,KAAI;AAC3B,IAAA,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;AACvB,IAAA,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,UAAU,MAAM,CAAC,IAAI,UAAU;AAClE,CAAC;SAEe,uBAAuB,GAAA;AACrC,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,IAAA,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;IAE7C,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3D,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,WAAW;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,SAAS;KACxC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ;KACvC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,WAAW;QACf,QAAQ,EAAE,CAAC,CAAC,KACV,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,CAAC,CAAC,MAAM,KAAK,CAAC;AACd,YAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC;KACxC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;;IAGD,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;AACzD,QAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAA6B;AAC3D,IAAA,CAAC,CAAC;;AAGF,IAAA,QAAQ,CAAC,qBAAqB,CAC5B,WAAW,EACX,YAAY,EACZ,OAAO,KAAc,EAAE,MAAmB,KAAsB;QAC9D,IAAI,MAAM,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC;QACnE,MAAM,CAAC,GAAG,KAAiC;AAC3C,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,KAAK,CACf,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EACjB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EACjB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAClB;AACH,IAAA,CAAC,CACF;IAED,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAExE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AAExE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;;IAGxE,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,0BAA0B;AAC9B,QAAA,OAAO,EAAE;AACP,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;AAC/B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;AAC/B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;AAC7B,SAAA;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,6BAA6B;AACjC,QAAA,OAAO,EAAE;AACP,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;AAC/B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE;AACtC,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE;AAClC,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE;AACzC,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;AAChC,SAAA;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,aAAa;AACjB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAClE,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,UAAU;AACd,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM;YACjC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACtC,CAAC;AACH,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAChE,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;AACvE,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAkD,KAAI;YAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;QAC/D,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,MAAM,EAAE,YAAY;AACrB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA2D,KAAI;AACpE,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;YAChD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG;iBACtB,IAAI,CAAC,CAAC;AACN,iBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,YAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,eAAe;AACnB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,KAAK,EAAE,YAAY;AACpB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAON,KAAI;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACzB,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC;AACrC,gBAAA,OAAO;sBACH,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;sBACvD,CAAC;AACP,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,0BAA0B;AACrC,YAAA,CAAC,EAAE,cAAc;AACjB,YAAA,CAAC,EAAE,cAAc;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;AACnC,QAAA,IAAI,EAAE,CAAC,GAAoD,KAAI;;YAE7D,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC;AACzC,YAAA,MAAM,GAAG,GAA4C;gBACnD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBACf,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBACf,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACf,gBAAA,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,gBAAA,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,gBAAA,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,gBAAA,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,gBAAA,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;aACzB;YACD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC9C,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvD,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,gBAAA,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACnC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,CAAC,EAAE,cAAc;AACjB,YAAA,CAAC,EAAE,cAAc;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAoD,KAAI;AAC7D,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1C,YAAA,MAAM,GAAG,GAA6C;gBACpD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBACf,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBACf,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;gBAChB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;gBACjB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;aAClB;YACD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAC5B,YAAA,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QACtE,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE;AACnE,QAAA,OAAO,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE;AAC/B,QAAA,IAAI,EAAE,CAAC,GAA8C,KAAI;AACvD,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG;iBACtB,IAAI,CAAC,CAAC;AACN,iBAAA,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAIxD,CACJ;AACH,YAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;QACrB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE;AAC9B,QAAA,OAAO,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE;AACpE,QAAA,IAAI,EAAE,CAAC,GAA6C,KAAI;AACtD,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE;YACzB,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACpB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AACpC,QAAA,IAAI,EAAE,CAAC,GAAuB,KAAI;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5D,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,YAAY;AACpB,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;AACnC,QAAA,IAAI,EAAE,CAAC,GAA+D,KAAI;YACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AACxE,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,YAAY;AACpB,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAKN,KAAI;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CACpB,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,MACE;AACE,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACP,aAAA,CAChC;AACD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;AACF,IAAA,OAAO,QAAQ;AACjB;AAEM,SAAU,iBAAiB,CAAC,QAAkB,EAAA;IAClD,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,aAAa;AACjB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE;AAC7C,QAAA,OAAO,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE;AAC9B,QAAA,IAAI,EAAE,OACJ,GAA+B,EAC/B,GAA0B,KACxB;YACF,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC;AAChC,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC;AAClB,YAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACrE,gBAAA,OAAO;YACT;YACA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;gBAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,MAAK;oBACnB,YAAY,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,gBAAA,CAAC;AACD,gBAAA,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO;oBAAE,OAAO,OAAO,EAAE;AAC7C,gBAAA,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpE,YAAA,CAAC,CAAC;YACF,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QAC9B,CAAC;AACF,KAAA,CAAC;AACJ;AAEA,SAAS,cAAc,CAAC,EAAU,EAAE,MAAmB,EAAA;IACrD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,QAAA,MAAM,EAAE,GAAG,UAAU,CAAC,MAAK;AACzB,YAAA,OAAO,EAAE;AACT,YAAA,OAAO,EAAE;QACX,CAAC,EAAE,EAAE,CAAC;QACN,MAAM,OAAO,GAAG,MAAK;YACnB,YAAY,CAAC,EAAE,CAAC;AAChB,YAAA,OAAO,EAAE;YACT,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,QAAA,CAAC;QACD,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC9C,QAAA,CAAC;QACD,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,OAAO,EAAE;AACpC,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3C,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,qBAAqB,CAAC,QAAkB,EAAA;IACtD,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,WAAW,EAAE,WAAW;AACzB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,OACJ,GAAgE,EAChE,GAAQ,KACN;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC5C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC/B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC;AAC9C,gBAAA,IAAI,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE;oBAC/C,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;AAC/B,oBAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;gBACtE;YACF;AACA,YAAA,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;AACvB,YAAA,OAAO,EAAE,IAAI,EAAE,aAAa,KAAK,CAAA,MAAA,CAAQ,EAAE;QAC7C,CAAC;AACF,KAAA,CAAC;AACJ;;ACvdA,SAAS,wBAAwB,GAAA;IAC/B,OAAO;AACL,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE;AACrC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE;;AAErC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;AACxC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE;AAC5C,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;;AAGD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AACxC,aAAA;AACF,SAAA;KACF;AACH;SAEgB,oBAAoB,GAAA;IAClC,OAAO,wBAAwB,EAAE;AACnC;SAEgB,yBAAyB,GAAA;IACvC,OAAO,uBAAuB,EAAE;AAClC;;SClCgB,mBAAmB,GAAA;AACjC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;AAC/D,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,kBAAkB;AAC3B,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,iBAAiB;AAC1B,aAAA;AACF,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;gBACvC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACrC,gBAAA,MAAM,EAAE,aAAa;;AAEtB,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;SAEgB,wBAAwB,GAAA;AACtC,IAAA,MAAM,QAAQ,GAAG,uBAAuB,EAAE;IAC1C,iBAAiB,CAAC,QAAQ,CAAC;AAC3B,IAAA,OAAO,QAAQ;AACjB;;SC3DgB,sBAAsB,GAAA;AACpC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;AAC1C,YAAA,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE;AAChD,YAAA,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE;AAC7C,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC7C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;AAC5C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;gBACnD,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;AAC9C,aAAA;;AAEF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;SAEgB,2BAA2B,GAAA;AACzC,IAAA,MAAM,QAAQ,GAAG,uBAAuB,EAAE;IAC1C,qBAAqB,CAAC,QAAQ,CAAC;AAC/B,IAAA,OAAO,QAAQ;AACjB;;SChCgB,wBAAwB,GAAA;;;;;AAKtC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE;AACvC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE;AACvC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE;AACrC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE;AAC/C,YAAA,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;;AAEzC,YAAA,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;AACzC,SAAA;AACD,QAAA,KAAK,EAAE;;AAEL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE;AAChD,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;gBACxC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;AACvC,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;SAEgB,6BAA6B,GAAA;AAC3C,IAAA,MAAM,QAAQ,GAAG,uBAAuB,EAAE;AAC1C,IAAA,OAAO,QAAQ;AACjB;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/builder/Registry.ts","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/AbstractEngine.ts","../../src/runtime/PushEngine.ts","../../src/runtime/LocalRunner.ts","../../src/runtime/BatchedEngine.ts","../../src/runtime/PullEngine.ts","../../src/runtime/HybridEngine.ts","../../src/runtime/StepEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/examples/shared.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts"],"sourcesContent":["import type {\n DataTypeDescriptor,\n NodeContext,\n NodeTypeDescriptor,\n} from \"../core/types\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\n\n// Internal path resolution helpers\ninterface _EdgeStepSync {\n from: string;\n to: string;\n kind: \"sync\";\n convert: (v: unknown) => unknown;\n}\ninterface _EdgeStepAsync {\n from: string;\n to: string;\n kind: \"async\";\n convertAsync: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n}\ntype _EdgeStep = _EdgeStepSync | _EdgeStepAsync;\n\n// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n}\nexport type ResolvedCoercion = ResolvedCoercionSync | ResolvedCoercionAsync;\n\nexport class CategoryRegistry {\n private categories = new Map<string, NodeCategoryDescriptor<any, any>>();\n register<Impl, State>(cat: NodeCategoryDescriptor<Impl, State>): this {\n this.categories.set(cat.id, cat);\n return this;\n }\n get(id: string): NodeCategoryDescriptor<any, any> | undefined {\n return this.categories.get(id);\n }\n has(id: string): boolean {\n return this.categories.has(id);\n }\n}\n\nexport class Registry {\n readonly types = new Map<string, DataTypeDescriptor<any>>();\n readonly nodes = new Map<string, NodeTypeDescriptor>();\n readonly enums = new Map<\n string,\n {\n options: Array<{ value: number; label: string }>;\n valueToLabel: Map<number, string>;\n labelToValue: Map<string, number>;\n }\n >();\n readonly categories = new CategoryRegistry();\n readonly serializers = new Map<\n string,\n {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n >();\n\n private coercions = new Map<\n string,\n { convert: (value: unknown) => unknown; nonTransitive: boolean }\n >();\n private asyncCoercions = new Map<\n string,\n {\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n nonTransitive: boolean;\n }\n >();\n\n private resolvedCache = new Map<\n string,\n | { kind: \"sync\"; convert: (value: unknown) => unknown }\n | {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n }\n >();\n\n registerType(\n desc: DataTypeDescriptor,\n opts?: {\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n }\n ): this {\n this.types.set(desc.id, desc);\n // Any structural change invalidates resolution cache\n this.resolvedCache.clear();\n if (!this.serializers.has(desc.id)) {\n this.registerSerializer(desc.id, {\n serialize: (v) => v,\n deserialize: (d) => d,\n });\n }\n if (opts?.withArray) {\n const arrayId = opts.arrayId ?? `${desc.id}[]`;\n if (!this.types.has(arrayId)) {\n const arrayDesc: DataTypeDescriptor<any[]> = {\n id: arrayId,\n validate: (v: unknown) =>\n Array.isArray(v) &&\n v.every((x) => {\n try {\n return desc.validate(x);\n } catch {\n return false;\n }\n }),\n };\n this.types.set(arrayId, arrayDesc);\n }\n\n this.registerCoercion(desc.id, arrayId, (value) =>\n Array.isArray(value) ? value : [value]\n );\n this.registerCoercion(arrayId, desc.id, (value) => {\n if (!Array.isArray(value)) return value;\n if (opts.arrayPickFirstDefined) {\n for (const x of value) if (x !== undefined) return x;\n return undefined;\n }\n return value[0];\n });\n }\n return this;\n }\n\n registerNode<\n I extends Record<string, string>,\n O extends Record<string, string>,\n State = unknown,\n Impl = (\n inputs: Record<string, unknown>,\n ctx: NodeContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | Promise<void | Record<string, unknown>>\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data,\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr = `${fromTypeId}[]`;\n const toArr = `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr = `${fromTypeId}[]`;\n const toArr = `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted)\n throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = { kind: \"sync\", convert: (v) => v };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = { kind: \"sync\", convert };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = { kind: \"async\", convertAsync };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) =>\n typeof v === \"number\" && valueToLabel.has(Number(v)),\n },\n opts\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n)\n ? n\n : Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","import type {\n GraphDefinition,\n NodeTypeDescriptor,\n ExecutionContext,\n RuntimeEdgeStats,\n RuntimeNodeStats,\n GraphEdgeDefinition,\n GraphNodeDefinition,\n} from \"../core/types\";\nimport type { CategoryRuntime } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => void;\n\nexport type RuntimeEventName = \"value\" | \"invalidate\" | \"error\" | \"stats\";\n\n// Event payloads\nexport interface ValueEvent {\n nodeId: string;\n handle: string;\n value: unknown;\n io: \"input\" | \"output\";\n}\n\nexport type NodeRunErrorEvent = {\n nodeId: string;\n runId: string;\n err: unknown;\n};\n\nexport type EdgeConvertErrorEvent = {\n kind: \"edge-convert\";\n edgeId: string;\n source: { nodeId: string; handle: string };\n target: { nodeId: string; handle: string };\n err: unknown;\n};\n\nexport type RuntimeErrorEvent = NodeRunErrorEvent | EdgeConvertErrorEvent;\n\nexport interface InvalidateEvent {\n reason: string;\n}\n\nexport type NodeStartStats = {\n kind: \"node-start\";\n nodeId: string;\n runId: string;\n};\n\nexport type NodeProgressStats = {\n kind: \"node-progress\";\n nodeId: string;\n runId: string;\n progress: number;\n};\n\nexport type NodeDoneStats = {\n kind: \"node-done\";\n nodeId: string;\n runId: string;\n durationMs?: number;\n};\n\nexport type EdgeStartStats = {\n kind: \"edge-start\";\n edgeId: string;\n source: { nodeId: string; handle: string };\n target: { nodeId: string; handle: string };\n};\n\nexport type EdgeDoneStats = {\n kind: \"edge-done\";\n edgeId: string;\n source: { nodeId: string; handle: string };\n target: { nodeId: string; handle: string };\n durationMs?: number;\n};\n\nexport type StatsEvent =\n | NodeStartStats\n | NodeProgressStats\n | NodeDoneStats\n | EdgeStartStats\n | EdgeDoneStats;\n\nexport interface RuntimeEventMap {\n value: ValueEvent;\n invalidate: InvalidateEvent;\n error: RuntimeErrorEvent;\n stats: StatsEvent;\n}\n\ninterface RuntimeNode<State = any> extends GraphNodeDefinition {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: State;\n runtime: CategoryRuntime<State>;\n lifecycle: NodeTypeDescriptor<\n Record<string, string>,\n Record<string, string>,\n State,\n any\n >[\"lifecycle\"];\n policy?: {\n asyncConcurrency?: \"merge\" | \"switch\" | \"queue\" | \"drop\";\n timeoutMs?: number;\n maxQueue?: number;\n debounceMs?: number;\n throttleMs?: number;\n retry?: { attempts: number; backoffMs: (attemptIndex: number) => number };\n };\n latestRunId?: string;\n activeControllers: Set<AbortController>;\n queue: Array<{ runId: string; inputs: Record<string, unknown> }>;\n lastScheduledAt?: number;\n stats: RuntimeNodeStats;\n}\n\ninterface RuntimeEdge extends GraphEdgeDefinition {\n convert?: (value: unknown) => unknown;\n convertAsync?: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n stats: RuntimeEdgeStats;\n}\nexport class GraphRuntime {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n private environment: Record<string, unknown> = {};\n private paused = false;\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.environment = opts?.environment ?? {};\n\n // Instantiate nodes\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n };\n gr.nodes.set(n.nodeId, rn);\n }\n\n // Instantiate edges\n gr.edges = def.edges.map((e): RuntimeEdge => {\n // infer type from source output if missing\n const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId;\n let srcDeclared: string | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) effectiveTypeId = srcDeclared;\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = dstDesc.inputs[e.target.handle];\n }\n }\n\n // Attach convert if source/target differ but coercible\n let convert = undefined;\n let convertAsync = undefined;\n if (srcDeclared && dstDeclared && srcDeclared !== dstDeclared) {\n const fn = registry.getCoercion(srcDeclared, dstDeclared);\n if (fn) convert = convert ?? fn;\n const afn = registry.getAsyncCoercion(srcDeclared, dstDeclared);\n if (afn) convertAsync = convertAsync ?? afn;\n }\n\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\n convert,\n convertAsync,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n\n return gr;\n }\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event) as Set<RuntimeEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n private emit<K extends RuntimeEventName>(\n event: K,\n payload: RuntimeEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (set) for (const h of Array.from(set)) h(payload);\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.nodes.get(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = this.edges.some(\n (e) => e.target.nodeId === nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n node.inputs[handle] = value;\n // Emit value event for input updates\n this.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n }\n if (!this.paused) {\n // Only schedule if all inbound inputs are present (or there are none)\n if (this.allInboundHaveValue(nodeId)) this.scheduleInputsChanged(nodeId);\n }\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.nodes.get(nodeId);\n return node?.outputs[output];\n }\n\n private scheduleInputsChanged(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (this.paused) return;\n const now = Date.now();\n const policy = node.policy ?? {};\n\n if (\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n ) {\n // debounce: replace latest queued\n node.queue.splice(0, node.queue.length);\n const rid = `${nodeId}:${now}`;\n node.queue.push({ runId: rid, inputs: { ...node.inputs } });\n return;\n }\n node.lastScheduledAt = now;\n\n const rid = `${nodeId}:${now}:${Math.random().toString(36).slice(2, 8)}`;\n node.latestRunId = rid;\n\n const startRun = (\n runId: string,\n capturedInputs: Record<string, unknown>,\n onDone?: () => void\n ) => {\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = now;\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n for (const c of Array.from(node.activeControllers)) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n\n let timeoutId: any;\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n timeoutId = setTimeout(\n () => controller.abort(\"timeout\"),\n policy.timeoutMs\n );\n }\n\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => {\n const m = policy.asyncConcurrency ?? \"switch\";\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.propagate(nodeId, handle, value);\n },\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => capturedInputs[handle],\n environment: this.environment,\n runId: runId,\n abortSignal: controller.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n runId,\n progress: node.stats.progress,\n });\n },\n };\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations (switch)\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (reason === \"switch\") {\n return; // ignore switched runs\n }\n }\n hadError = true;\n // Record last error for node\n node.stats.lastError = err;\n const retry = policy.retry;\n if (retry && attempt < (retry.attempts ?? 0)) {\n const delay = retry.backoffMs ? retry.backoffMs(attempt) : 0;\n await new Promise((r) => setTimeout(r, delay));\n return exec(attempt + 1);\n }\n this.emit(\"error\", { nodeId, runId, err });\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n node.activeControllers.delete(controller);\n node.stats.active = Math.max(0, node.activeControllers.size);\n node.stats.lastEndAt = Date.now();\n node.stats.lastDurationMs =\n node.stats.lastStartAt && node.stats.lastEndAt\n ? node.stats.lastEndAt - node.stats.lastStartAt\n : undefined;\n // Clear lastError upon successful completion\n if (!hadError) node.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n runId,\n durationMs: node.stats.lastDurationMs,\n });\n if (onDone) onDone();\n }\n };\n\n // fire node-start event\n this.emit(\"stats\", { kind: \"node-start\", nodeId, runId });\n void exec(0);\n };\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"drop\" && node.activeControllers.size > 0) return;\n if (mode === \"queue\") {\n const maxQ = policy.maxQueue ?? 8;\n node.queue.push({ runId: rid, inputs: { ...node.inputs } });\n if (node.queue.length > maxQ) node.queue.shift();\n\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n node.latestRunId = next.runId;\n startRun(next.runId, next.inputs, () => {\n // After finishing, schedule next\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n return;\n }\n\n // switch or merge\n startRun(rid, { ...node.inputs });\n }\n\n // Returns true if all inbound handles for the node currently have a value\n private allInboundHaveValue(nodeId: string): boolean {\n const node = this.nodes.get(nodeId);\n if (!node) return false;\n const inbound = this.edges.filter((e) => e.target.nodeId === nodeId);\n if (inbound.length === 0) return true;\n for (const e of inbound) {\n if (!(e.target.handle in node.inputs)) return false;\n }\n return true;\n }\n\n private invalidateDownstream(nodeId: string): void {\n // Notifies dependents; for now we propagate current outputs\n for (const e of this.edges.filter((e) => e.source.nodeId === nodeId)) {\n const value = this.getOutput(nodeId, e.source.handle);\n if (value !== undefined) this.propagate(nodeId, e.source.handle, value);\n }\n }\n\n private propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown\n ): void {\n // set source output\n const srcNode = this.nodes.get(srcNodeId)!;\n srcNode.outputs[srcHandle] = value;\n this.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n });\n\n // fan-out along all edges from this output\n const outEdges = this.edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\n\n for (const e of outEdges) {\n // Clone per edge to isolate conversions from mutating the shared source value\n let nextVal = structuredClone(value);\n const applyToTarget = (v: unknown) => {\n const dstNode = this.nodes.get(e.target.nodeId);\n if (!dstNode) return;\n dstNode.inputs[e.target.handle] = v;\n // Emit value event for input updates\n this.emit(\"value\", {\n nodeId: e.target.nodeId,\n handle: e.target.handle,\n value: v,\n io: \"input\",\n });\n if (!this.paused && this.allInboundHaveValue(e.target.nodeId))\n this.scheduleInputsChanged(e.target.nodeId);\n };\n if (e.convertAsync) {\n // emit edge-start before launching async conversion\n this.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n });\n const controller = new AbortController();\n const startAt = Date.now();\n e.stats.runs += 1;\n e.stats.inFlight = true;\n e.stats.progress = 0;\n const sig = controller.signal;\n // Fire async conversion\n void e\n .convertAsync(nextVal, sig)\n .then((v) => {\n e.stats.inFlight = false;\n e.stats.lastEndAt = Date.now();\n e.stats.lastDurationMs = e.stats.lastEndAt - startAt;\n // Clear lastError on successful conversion\n e.stats.lastError = undefined;\n this.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n durationMs: e.stats.lastDurationMs,\n });\n applyToTarget(v);\n })\n .catch((err) => {\n if (sig.aborted) return;\n e.stats.inFlight = false;\n e.stats.lastError = err;\n this.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n });\n } else {\n if (e.convert) nextVal = e.convert(nextVal);\n applyToTarget(nextVal);\n }\n }\n }\n\n launch(): void {\n // call onActivated for nodes that implement it\n for (const node of this.nodes.values()) {\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(node.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(node.nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${node.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n node.lifecycle?.init?.(node.params ?? {}, {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n node.runtime.onActivated?.(ctx);\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: (handle, value) => this.propagate(nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(nodeId),\n getInput: (handle) => node.inputs[handle],\n environment: this.environment,\n runId: `${nodeId}:external`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n },\n };\n node.runtime.onExternalEvent?.(event, ctx);\n }\n\n dispose(): void {\n for (const node of this.nodes.values()) {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n }\n this.nodes.clear();\n this.edges = [];\n this.listeners.clear();\n }\n\n // Unsafe helpers for serializer: read-only accessors and hydration\n __unsafe_getNodeData(nodeId: string):\n | {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: unknown;\n params?: Record<string, unknown>;\n stats?: RuntimeNodeStats;\n }\n | undefined {\n const node = this.nodes.get(nodeId);\n if (!node) return undefined;\n return {\n inputs: { ...node.inputs },\n outputs: { ...node.outputs },\n state: node.state,\n params: node.params,\n stats: { ...node.stats },\n };\n }\n\n __unsafe_getEnvironment(): Record<string, unknown> {\n return { ...this.environment };\n }\n\n setEnvironment(env: Record<string, unknown>): void {\n this.environment = { ...env };\n }\n\n __unsafe_setEnvironment(env: Record<string, unknown>): void {\n this.setEnvironment(env);\n }\n\n __unsafe_hydrateNode(\n nodeId: string,\n data: {\n inputs?: Record<string, unknown>;\n outputs?: Record<string, unknown>;\n state?: unknown;\n params?: Record<string, unknown>;\n },\n opts?: { replace?: boolean }\n ): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n if (opts?.replace) {\n node.inputs = {};\n node.outputs = {};\n node.state = {};\n }\n if (data.inputs) Object.assign(node.inputs, data.inputs);\n if (data.outputs) Object.assign(node.outputs, data.outputs);\n if (data.state !== undefined) node.state = data.state;\n if (data.params) node.params = data.params;\n }\n\n async whenIdle(): Promise<void> {\n const isIdle = (): boolean => {\n for (const n of this.nodes.values()) {\n if (n.activeControllers.size > 0) return false;\n if (n.queue.length > 0) return false;\n }\n return true;\n };\n if (isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (isIdle()) resolve();\n else setTimeout(check, 10);\n };\n setTimeout(check, 10);\n });\n }\n\n pause(): void {\n this.paused = true;\n }\n\n resume(): void {\n this.paused = false;\n }\n\n __unsafe_invalidateDownstream(nodeId: string): void {\n this.invalidateDownstream(nodeId);\n }\n\n __unsafe_reemitNodeOutputs(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n for (const [handle, value] of Object.entries(node.outputs)) {\n this.propagate(nodeId, handle, value);\n }\n }\n\n __unsafe_scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChanged(nodeId);\n }\n\n // Incrementally update nodes/edges to match new definition without full rebuild\n update(def: GraphDefinition, registry: Registry): void {\n // Handle node additions and removals\n const desiredIds = new Set(def.nodes.map((n) => n.nodeId));\n const currentIds = new Set(this.nodes.keys());\n\n // Remove nodes not present\n for (const nodeId of Array.from(currentIds)) {\n if (!desiredIds.has(nodeId)) {\n const node = this.nodes.get(nodeId)!;\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n this.nodes.delete(nodeId);\n }\n }\n\n // Add or update existing nodes\n for (const n of def.nodes) {\n const existing = this.nodes.get(n.nodeId);\n if (!existing) {\n // create new runtime node\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...(n.params && n.params.policy ? n.params.policy : {}),\n },\n activeControllers: new Set(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n };\n this.nodes.set(n.nodeId, rn);\n // Activate new node\n const ctrl = new AbortController();\n const ctx: ExecutionContext<any> = {\n state: rn.state,\n setState: (next: Partial<any>) => Object.assign(rn.state, next),\n emit: (handle: string, value: unknown) =>\n this.propagate(rn.nodeId, handle, value),\n invalidateDownstream: () => this.invalidateDownstream(rn.nodeId),\n getInput: (handle: string) => rn.inputs[handle],\n environment: this.environment,\n runId: `${rn.nodeId}:activation`,\n abortSignal: ctrl.signal,\n createAbortController: () => new AbortController(),\n };\n rn.lifecycle?.init?.(rn.params ?? {}, {\n state: rn.state,\n setState: (next) => Object.assign(rn.state, next),\n });\n rn.runtime.onActivated?.(ctx);\n } else {\n // update params/policy\n existing.params = n.params;\n if (!existing.stats) {\n existing.stats = {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n };\n }\n }\n }\n\n // Capture previous inbound map before rebuilding edges\n const prevInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = prevInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n prevInbound.set(e.target.nodeId, set);\n }\n\n // Rebuild edges mapping with coercions\n this.edges = def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId;\n let srcDeclared: string | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const srcDesc = registry.nodes.get(srcNode.typeId);\n if (srcDesc) {\n srcDeclared = srcDesc.outputs[e.source.handle];\n }\n }\n if (!effectiveTypeId) effectiveTypeId = srcDeclared;\n if (dstNode) {\n const dstDesc = registry.nodes.get(dstNode.typeId);\n if (dstDesc) {\n dstDeclared = dstDesc.inputs[e.target.handle];\n }\n }\n\n let convert = undefined;\n let convertAsync = undefined;\n if (srcDeclared && dstDeclared && srcDeclared !== dstDeclared) {\n const fn = registry.getCoercion(srcDeclared, dstDeclared);\n if (fn) convert = convert ?? fn;\n const afn = registry.getAsyncCoercion(srcDeclared, dstDeclared);\n if (afn) convertAsync = convertAsync ?? afn;\n }\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: effectiveTypeId ?? \"untyped\",\n convert,\n convertAsync,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n\n // Build new inbound map\n const nextInbound = new Map<string, Set<string>>();\n for (const e of this.edges) {\n const set = nextInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n nextInbound.set(e.target.nodeId, set);\n }\n\n // For inputs that lost inbound connections, clear and schedule recompute\n for (const [nodeId, prevSet] of prevInbound) {\n const currSet = nextInbound.get(nodeId) ?? new Set<string>();\n const node = this.nodes.get(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n if (changed) this.scheduleInputsChanged(nodeId);\n }\n\n // Re-emit existing outputs to populate new edges\n for (const nodeId of this.nodes.keys()) {\n this.__unsafe_reemitNodeOutputs(nodeId);\n }\n }\n}\n","import type { GraphDefinition, NodeTypeDescriptor } from \"../core/types\";\nimport { Registry } from \"./Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface ValidationIssueData {\n nodeId?: string;\n edgeId?: string;\n typeId?: string;\n input?: string;\n output?: string;\n declared?: string;\n effectiveTypeId?: string;\n}\nexport interface ValidationIssue {\n level: \"error\" | \"warning\";\n code: string;\n message: string;\n data?: Partial<ValidationIssueData>;\n}\n\nexport interface ValidationReport {\n ok: boolean;\n issues: ValidationIssue[];\n}\n\nexport interface BuildOptions {\n environment?: Record<string, unknown>;\n}\n\nexport class GraphBuilder {\n constructor(private registry: Registry) {}\n\n validate(def: GraphDefinition): ValidationReport {\n const issues: ValidationIssue[] = [];\n const nodeIds = new Set<string>();\n const edgeIds = new Set<string>();\n\n // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n issues.push({\n level: \"error\",\n code: \"NODE_ID_DUP\",\n message: `Duplicate nodeId ${n.nodeId}`,\n data: { nodeId: n.nodeId },\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n issues.push({\n level: \"error\",\n code: \"NODE_TYPE_MISSING\",\n message: `Unknown node type ${n.typeId}`,\n data: { typeId: n.typeId, nodeId: n.nodeId },\n });\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n issues.push({\n level: \"error\",\n code: \"CATEGORY_MISSING\",\n message: `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`,\n });\n }\n }\n\n // edges validation: nodes exist, handles exist, type exists\n const inboundCounts = new Map<string, number>();\n for (const e of def.edges) {\n if (edgeIds.has(e.id)) {\n issues.push({\n level: \"error\",\n code: \"EDGE_ID_DUP\",\n message: `Duplicate edge id ${e.id}`,\n data: { edgeId: e.id },\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);\n if (!srcNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_SOURCE_MISSING\",\n message: `Edge ${e.id} source node missing`,\n data: { edgeId: e.id },\n });\n if (!dstNode)\n issues.push({\n level: \"error\",\n code: \"EDGE_TARGET_MISSING\",\n message: `Edge ${e.id} target node missing`,\n data: { edgeId: e.id },\n });\n // infer edge type from source output if missing\n let effectiveTypeId: string | undefined = e.typeId;\n if (!effectiveTypeId && srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType) {\n effectiveTypeId = srcType.outputs[e.source.handle];\n }\n }\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISSING\",\n message: `Edge ${e.id} type missing or unknown`,\n data: { edgeId: e.id },\n });\n }\n\n if (srcNode) {\n const srcType = this.registry.nodes.get(srcNode.typeId);\n if (srcType && !(e.source.handle in srcType.outputs)) {\n issues.push({\n level: \"error\",\n code: \"OUTPUT_MISSING\",\n message: `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n },\n });\n }\n if (srcType) {\n const declared = srcType.outputs[e.source.handle];\n if (\n declared &&\n effectiveTypeId &&\n declared !== effectiveTypeId &&\n !this.registry.canCoerce(declared, effectiveTypeId)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_OUTPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${declared}) and no coercion exists`,\n data: {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared,\n effectiveTypeId,\n },\n });\n }\n }\n }\n if (dstNode) {\n const dstType = this.registry.nodes.get(dstNode.typeId);\n if (dstType && !(e.target.handle in dstType.inputs)) {\n issues.push({\n level: \"error\",\n code: \"INPUT_MISSING\",\n message: `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n },\n });\n }\n if (dstType) {\n const declared = dstType.inputs[e.target.handle];\n if (\n declared &&\n effectiveTypeId &&\n declared !== effectiveTypeId &&\n !this.registry.canCoerce(effectiveTypeId, declared)\n ) {\n issues.push({\n level: \"error\",\n code: \"TYPE_MISMATCH_INPUT\",\n message: `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declared}) and no coercion exists`,\n data: {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared,\n effectiveTypeId,\n },\n });\n }\n }\n }\n\n // Track multiple inbound edges targeting the same input handle\n const inboundKey = `${e.target.nodeId}::${e.target.handle}`;\n inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);\n }\n\n for (const [key, count] of inboundCounts) {\n if (count > 1) {\n issues.push({\n level: \"warning\",\n code: \"MULTI_INBOUND\",\n message: `Input ${key} has ${count} inbound edges (last-write wins).`,\n data: { nodeId: key.split(\"::\")[0], input: key.split(\"::\")[1] },\n });\n }\n }\n\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n build(def: GraphDefinition, opts?: BuildOptions): GraphRuntime {\n return GraphRuntime.create(def, this.registry, opts);\n }\n\n wrapAsNode(\n def: GraphDefinition,\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n },\n nodeTypeId: string,\n displayName?: string\n ): NodeTypeDescriptor<any, any, any, any> {\n // Infer exposed handle types from inner graph using registry\n const inputTypes: Record<string, string> = {};\n const outputTypes: Record<string, string> = {};\n\n for (const [outerIn, map] of Object.entries(exposure.inputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.inputs[map.handle] : undefined;\n inputTypes[outerIn] = typeId ?? \"untyped\";\n }\n\n for (const [outerOut, map] of Object.entries(exposure.outputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n outputTypes[outerOut] = typeId ?? \"untyped\";\n }\n\n return {\n id: nodeTypeId,\n displayName,\n categoryId: \"composite\",\n inputs: inputTypes,\n outputs: outputTypes,\n impl: { def, exposure },\n } as unknown as NodeTypeDescriptor<any, any, any, any>;\n }\n}\n","import type { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport abstract class AbstractEngine implements Engine {\n constructor(public graphRuntime: GraphRuntime) {}\n\n launch(): void {\n this.graphRuntime.launch();\n }\n\n setInput(nodeId: string, handle: string, value: unknown): void {\n this.setInputs(nodeId, { [handle]: value });\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n this.graphRuntime.triggerExternal(nodeId, event);\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n return this.graphRuntime.on(event, handler);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.graphRuntime.getOutput(nodeId, output);\n }\n\n whenIdle(): Promise<void> {\n return this.graphRuntime.whenIdle();\n }\n\n dispose(): void {\n this.graphRuntime.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport class PushEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n }\n}\n","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { AbstractEngine } from \"./AbstractEngine\";\nimport { PushEngine } from \"./PushEngine\";\nimport type { RunnerControl } from \"./RunnerControl\";\nimport { Registry } from \"../builder/Registry\";\n\nexport class LocalRunner implements RunnerControl {\n private builder: GraphBuilder;\n private engine?: AbstractEngine;\n\n constructor(private registry: Registry) {\n this.builder = new GraphBuilder(registry);\n }\n\n async build(\n def: GraphDefinition,\n opts?: { environment?: Record<string, unknown> }\n ): Promise<void> {\n const rt = this.builder.build(def, opts);\n this.engine = new PushEngine(rt);\n }\n\n async update(def: GraphDefinition): Promise<void> {\n // If engine exists and is a PushEngine backed by GraphRuntime, use runtime.update\n // Otherwise rebuild.\n const eng = this.engine;\n if (eng && eng.graphRuntime) {\n eng.graphRuntime.update(def, this.registry);\n return;\n }\n await this.build(def);\n }\n\n getEngine(): AbstractEngine {\n if (!this.engine)\n throw new Error(\"Engine not built. Call build(def) first.\");\n return this.engine;\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport interface BatchedEngineOptions {\n flushIntervalMs?: number; // if set, perform periodic flushes\n}\n\nexport class BatchedEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n private timer: NodeJS.Timeout | undefined;\n constructor(\n graphRuntime: GraphRuntime,\n private opts: BatchedEngineOptions = {}\n ) {\n super(graphRuntime);\n }\n\n override launch(): void {\n this.graphRuntime.pause();\n if (this.opts.flushIntervalMs && this.opts.flushIntervalMs > 0) {\n this.timer = setInterval(() => this.flush(), this.opts.flushIntervalMs);\n }\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async flush(): Promise<void> {\n if (this.dirtyNodes.size === 0) return;\n // Resume, schedule dirty nodes, wait idle, then pause again\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n\n override dispose(): void {\n if (this.timer) clearInterval(this.timer);\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// PullEngine computes only when asked, otherwise holds inputs without scheduling\nexport class PullEngine extends AbstractEngine {\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n // Pull API\n async computeNode(nodeId: string): Promise<void> {\n this.graphRuntime.resume();\n this.graphRuntime.__unsafe_scheduleInputsChanged(nodeId);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// HybridEngine: push by default, but batch when changes exceed a threshold in a window\nexport interface HybridOptions {\n windowMs?: number;\n batchThreshold?: number;\n}\n\nexport class HybridEngine extends AbstractEngine {\n private windowStart = 0;\n private countInWindow = 0;\n private batching = false;\n private dirtyNodes = new Set<string>();\n private flushTimer: NodeJS.Timeout | undefined;\n constructor(graphRuntime: GraphRuntime, private opts: HybridOptions = {}) {\n super(graphRuntime);\n this.windowStart = Date.now();\n }\n\n private updateWindow(): void {\n const now = Date.now();\n const windowMs = this.opts.windowMs ?? 250;\n if (now - this.windowStart > windowMs) {\n this.windowStart = now;\n this.countInWindow = 0;\n if (this.batching) {\n this.graphRuntime.resume();\n this.batching = false;\n // schedule all dirty nodes accumulated during batching\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes)\n this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n }\n }\n\n override launch(): void {\n this.graphRuntime.resume();\n }\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n this.updateWindow();\n this.countInWindow += 1;\n const threshold = this.opts.batchThreshold ?? 5;\n if (!this.batching && this.countInWindow >= threshold) {\n this.graphRuntime.pause();\n this.batching = true;\n // ensure flush even if no more inputs arrive\n const windowMs = this.opts.windowMs ?? 250;\n if (this.flushTimer) clearTimeout(this.flushTimer);\n this.flushTimer = setTimeout(() => {\n if (!this.batching) return;\n this.graphRuntime.resume();\n this.batching = false;\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n for (const n of nodes)\n this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n this.flushTimer = undefined;\n }, windowMs);\n }\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n if (!this.batching)\n this.graphRuntime.__unsafe_scheduleInputsChanged(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n override dispose(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n super.dispose();\n }\n}\n","import { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n// StepEngine: expose explicit step() to process pending changes once\nexport class StepEngine extends AbstractEngine {\n private dirtyNodes = new Set<string>();\n constructor(graphRuntime: GraphRuntime) {\n super(graphRuntime);\n this.graphRuntime.pause();\n }\n\n override launch(): void {}\n\n override setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n super.setInputs(nodeId, inputs);\n this.dirtyNodes.add(nodeId);\n }\n\n override triggerExternal(nodeId: string, event: unknown): void {\n super.triggerExternal(nodeId, event);\n this.dirtyNodes.add(nodeId);\n }\n\n async step(): Promise<void> {\n // resume first so scheduling isn't ignored due to pause\n const nodes = Array.from(this.dirtyNodes);\n this.dirtyNodes.clear();\n this.graphRuntime.resume();\n for (const n of nodes) this.graphRuntime.__unsafe_scheduleInputsChanged(n);\n await this.graphRuntime.whenIdle();\n this.graphRuntime.pause();\n }\n}\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { ExecutionContext } from \"../core/types\";\n\nexport type ComputeImpl = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<any>\n) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>;\n\nexport const ComputeCategory: NodeCategoryDescriptor<ComputeImpl, {}> = {\n id: \"compute\",\n displayName: \"Compute\",\n createRuntime: ({ impl }) => ({\n async onInputsChanged(inputs, ctx) {\n const out = await impl(inputs, ctx);\n if (out && typeof out === \"object\") {\n for (const [h, v] of Object.entries(out)) ctx.emit(h, v);\n }\n },\n }),\n policy: { mode: \"push\", asyncConcurrency: \"switch\" },\n};\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface CompositeImpl {\n def: GraphDefinition;\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n };\n}\n\nexport const CompositeCategory = (\n registry: Registry\n): NodeCategoryDescriptor<\n CompositeImpl,\n { inner?: GraphRuntime; unsub?: () => void }\n> => ({\n id: \"composite\",\n displayName: \"Composite\",\n validateImpl: (impl) => {\n if (!impl || !impl.def) throw new Error(\"Composite impl requires def\");\n },\n createRuntime: ({ impl }) => {\n let inner: GraphRuntime | undefined;\n let unsub: (() => void) | undefined;\n return {\n onActivated: () => {\n inner = GraphRuntime.create(impl.def, registry);\n // Wire inner outputs to outer emits\n unsub = inner.on(\"value\", (e) => {\n for (const [outHandle, map] of Object.entries(\n impl.exposure.outputs\n )) {\n if (e.nodeId === map.nodeId && e.handle === map.handle) {\n // We cannot access outer ctx here; emit will occur on next input change cycle\n // Instead, we cache outputs and pull them during onInputsChanged\n }\n }\n });\n inner.launch();\n },\n onInputsChanged: (inputs, ctx) => {\n if (!inner) return;\n // map outer input => inner node input\n for (const [inHandle, map] of Object.entries(impl.exposure.inputs)) {\n if (inHandle in inputs)\n inner.setInput(map.nodeId, map.handle, inputs[inHandle]);\n }\n // pull inner exposed outputs and emit\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n const v = inner.getOutput(map.nodeId, map.handle);\n if (v !== undefined) ctx.emit(outHandle, v);\n }\n },\n onDeactivated: () => {\n if (unsub) unsub();\n },\n dispose: () => {\n if (unsub) unsub();\n inner?.dispose();\n },\n };\n },\n policy: { mode: \"hybrid\" },\n});\n","import { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type { ExecutionContext, GraphDefinition } from \"../core/types\";\nimport { ComputeCategory } from \"../plugins/compute\";\n\n// Helpers\nconst asArray = (v: unknown): number[] =>\n Array.isArray(v) ? (v as number[]) : [Number(v)];\n\nconst broadcast = (\n a: number[] | number,\n b: number[] | number\n): [number[], number[]] => {\n const aa = asArray(a);\n const bb = asArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? 0), new Array(len).fill(bb[0] ?? 0)];\n};\nconst clamp = (x: number, min: number, max: number) =>\n Math.min(max, Math.max(min, x));\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lcg = (seed: number) => {\n let s = seed >>> 0 || 1;\n return () => (s = (s * 1664525 + 1013904223) >>> 0) / 0xffffffff;\n};\n\nexport function setupBasicGraphRegistry(): Registry {\n const registry = new Registry();\n registry.categories.register(ComputeCategory);\n\n registry.registerType(\n {\n id: \"base.float\",\n validate: (v) => typeof v === \"number\" && !Number.isNaN(v),\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.bool\",\n validate: (v) => typeof v === \"boolean\",\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.string\",\n validate: (v) => typeof v === \"string\",\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.vec3\",\n validate: (v) =>\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\"),\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n // float -> vec3 : map x to [x,0,0]\n registry.registerCoercion(\"base.float\", \"base.vec3\", (v) => {\n return [Number(v) || 0, 0, 0] as [number, number, number];\n });\n\n // Async coercion variant for vec3 -> float (chunked + abortable)\n registry.registerAsyncCoercion(\n \"base.vec3\",\n \"base.float\",\n async (value: unknown, signal: AbortSignal): Promise<unknown> => {\n if (signal.aborted) throw new DOMException(\"Aborted\", \"AbortError\");\n const v = value as [number, number, number];\n await new Promise<void>((r) => setTimeout(r, 1000));\n return Math.hypot(\n Number(v[0] ?? 0),\n Number(v[1] ?? 0),\n Number(v[2] ?? 0)\n );\n }\n );\n\n registry.registerCoercion(\"base.bool\", \"base.float\", (v) => (v ? 1 : 0));\n\n registry.registerCoercion(\"base.float\", \"base.bool\", (v) => !!v);\n\n registry.registerCoercion(\"base.float\", \"base.string\", (v) => String(v));\n\n registry.registerCoercion(\"base.string\", \"base.float\", (v) => Number(v));\n\n // Enums: Math Operation\n registry.registerEnum({\n id: \"base.enum:math.operation\",\n options: [\n { value: 0, label: \"Add\" },\n { value: 1, label: \"Subtract\" },\n { value: 2, label: \"Multiply\" },\n { value: 3, label: \"Divide\" },\n { value: 4, label: \"Min\" },\n { value: 5, label: \"Max\" },\n { value: 6, label: \"Modulo\" },\n { value: 7, label: \"Power\" },\n ],\n });\n\n // Enums: Compare Operation\n registry.registerEnum({\n id: \"base.enum:compare.operation\",\n options: [\n { value: 0, label: \"LessThan\" },\n { value: 1, label: \"LessThanOrEqual\" },\n { value: 2, label: \"GreaterThan\" },\n { value: 3, label: \"GreaterThanOrEqual\" },\n { value: 4, label: \"Equal\" },\n { value: 5, label: \"NotEqual\" },\n ],\n });\n\n // Number\n registry.registerNode({\n id: \"base.number\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n impl: (ins: { Value: number }) => ({ Result: Number(ins.Value) }),\n });\n\n // Integer\n registry.registerNode({\n id: \"base.int\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n impl: (ins: { Value: number }) => ({\n Result: Math.trunc(Number(ins.Value)),\n }),\n });\n\n // Number to String\n registry.registerNode({\n id: \"base.numberToString\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Value: number }) => ({ Text: String(ins.Value) }),\n });\n\n // Clamp\n registry.registerNode({\n id: \"base.clamp\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float[]\", Min: \"base.float\", Max: \"base.float\" },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { Value: number[]; Min: number; Max: number }) => {\n const vals = asArray(ins.Value);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n return { Value: vals.map((v) => clamp(Number(v), min, max)) };\n },\n });\n\n // Interpolate (lerp)\n registry.registerNode({\n id: \"base.interpolate\",\n categoryId: \"compute\",\n inputs: {\n ValueA: \"base.float[]\",\n ValueB: \"base.float[]\",\n Factor: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { ValueA: number[]; ValueB: number[]; Factor: number }) => {\n const [a, b] = broadcast(ins.ValueA, ins.ValueB);\n const t = Number(ins.Factor ?? 0);\n const len = Math.max(a.length, b.length);\n const out = new Array(len)\n .fill(0)\n .map((_, i) => lerp(Number(a[i] ?? 0), Number(b[i] ?? 0), t));\n return { Value: out };\n },\n });\n\n // Map Range (linear)\n registry.registerNode({\n id: \"base.mapRange\",\n categoryId: \"compute\",\n inputs: {\n Mode: \"base.string\",\n Clamp: \"base.bool\",\n Value: \"base.float[]\",\n FromMin: \"base.float\",\n FromMax: \"base.float\",\n ToMin: \"base.float\",\n ToMax: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: {\n Value: number[];\n FromMin: number;\n FromMax: number;\n ToMin: number;\n ToMax: number;\n Clamp: boolean;\n }) => {\n const vals = asArray(ins.Value);\n const fromMin = Number(ins.FromMin ?? 0);\n const fromMax = Number(ins.FromMax ?? 1);\n const toMin = Number(ins.ToMin ?? 0);\n const toMax = Number(ins.ToMax ?? 1);\n const doClamp = Boolean(ins.Clamp);\n const out = vals.map((v) => {\n const t = (Number(v) - fromMin) / (fromMax - fromMin || 1);\n const r = toMin + t * (toMax - toMin);\n return doClamp\n ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax))\n : r;\n });\n return { Value: out };\n },\n });\n\n // Math (subset) - scalar version for simple examples\n registry.registerNode({\n id: \"base.math\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"base.enum:math.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.float[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n // Gracefully handle missing inputs by treating them as zeros\n const a = ins.A === undefined ? [] : asArray(ins.A);\n const b = ins.B === undefined ? [] : asArray(ins.B);\n const len = Math.max(a.length, b.length);\n const op = Number(ins.Operation ?? 0) | 0;\n const ops: Array<(x: number, y: number) => number> = [\n (x, y) => x + y,\n (x, y) => x - y,\n (x, y) => x * y,\n (x, y) => x / (y || 1),\n (x, y) => Math.min(x, y),\n (x, y) => Math.max(x, y),\n (x, y) => (y ? x % y : 0),\n (x, y) => Math.pow(x, y),\n ];\n const fn = ops[op] ?? ops[0];\n const out = new Array(len).fill(0).map((_, i) => {\n const ax = a.length === 1 && len > 1 ? a[0] : a[i] ?? 0;\n const bx = b.length === 1 && len > 1 ? b[0] : b[i] ?? 0;\n return fn(Number(ax), Number(bx));\n });\n return { Result: out };\n },\n });\n\n // Compare\n registry.registerNode({\n id: \"base.compare\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"base.enum:compare.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const [a, b] = broadcast(ins.A, ins.B);\n const op = Number(ins.Operation ?? 4) | 0; // default Equal\n const ops: Array<(x: number, y: number) => boolean> = [\n (x, y) => x < y,\n (x, y) => x <= y,\n (x, y) => x > y,\n (x, y) => x >= y,\n (x, y) => x === y,\n (x, y) => x !== y,\n ];\n const fn = ops[op] ?? ops[4];\n return { Result: a.map((x, i) => fn(Number(x), Number(b[i] ?? 0))) };\n },\n });\n\n // Combine XYZ\n registry.registerNode({\n id: \"base.compareXYZ\",\n categoryId: \"compute\",\n inputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n outputs: { XYZ: \"base.vec3[]\" },\n impl: (ins: { X: number[]; Y: number[]; Z: number[] }) => {\n const [x, y] = broadcast(ins.X, ins.Y);\n const [xx, z] = broadcast(x, ins.Z);\n const len = Math.max(xx.length, z.length);\n const out = new Array(len)\n .fill(0)\n .map(\n (_, i) =>\n [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [\n number,\n number,\n number\n ]\n );\n return { XYZ: out };\n },\n });\n\n // Separate XYZ\n registry.registerNode({\n id: \"base.separateXYZ\",\n categoryId: \"compute\",\n inputs: { XYZ: \"base.vec3[]\" },\n outputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n impl: (ins: { XYZ: Array<[number, number, number]> }) => {\n const arr = ins.XYZ ?? [];\n const X = arr.map((v) => Number(v?.[0] ?? 0));\n const Y = arr.map((v) => Number(v?.[1] ?? 0));\n const Z = arr.map((v) => Number(v?.[2] ?? 0));\n return { X, Y, Z };\n },\n });\n\n // Indices\n registry.registerNode({\n id: \"base.indices\",\n categoryId: \"compute\",\n inputs: { Domain: \"base.float\" },\n outputs: { Indices: \"base.float[]\" },\n impl: (ins: { Domain: number }) => {\n const n = Math.trunc(ins.Domain);\n return { Indices: Array.from({ length: n }, (_, i) => i) };\n },\n });\n\n // Random Numbers\n registry.registerNode({\n id: \"base.randomNumbers\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.float\",\n Max: \"base.float\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.float[]\" },\n impl: (ins: { Domain: number; Min: number; Max: number; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from({ length: len }, () => min + rng() * (max - min));\n return { Values: out };\n },\n });\n\n // Random Vectors\n registry.registerNode({\n id: \"base.randomXYZs\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.vec3\",\n Max: \"base.vec3\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.vec3[]\" },\n impl: (ins: {\n Domain: number;\n Min: [number, number, number];\n Max: [number, number, number];\n Seed: number;\n }) => {\n const len = Math.trunc(ins.Domain);\n const min = ins.Min ?? [0, 0, 0];\n const max = ins.Max ?? [1, 1, 1];\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from(\n { length: len },\n () =>\n [\n min[0] + rng() * (max[0] - min[0]),\n min[1] + rng() * (max[1] - min[1]),\n min[2] + rng() * (max[2] - min[2]),\n ] as [number, number, number]\n );\n return { Values: out };\n },\n });\n return registry;\n}\n\nexport function registerDelayNode(registry: Registry) {\n registry.registerNode({\n id: \"async.delay\",\n categoryId: \"compute\",\n inputs: { x: \"base.float\", ms: \"base.float\" },\n outputs: { out: \"base.float\" },\n impl: async (\n ins: { x: number; ms?: number },\n ctx: ExecutionContext<any>\n ) => {\n const ms = Number(ins.ms ?? 200);\n const xRaw = ins.x;\n if (xRaw === undefined || xRaw === null || Number.isNaN(Number(xRaw))) {\n return; // wait until x is present to avoid NaN emissions\n }\n await new Promise<void>((resolve, reject) => {\n const id = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(id);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n if (ctx.abortSignal.aborted) return onAbort();\n ctx.abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n });\n return { out: Number(xRaw) };\n },\n });\n}\n\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const id = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(id);\n cleanup();\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n if (signal.aborted) return onAbort();\n signal.addEventListener(\"abort\", onAbort);\n });\n}\n\nexport function registerProgressNodes(registry: Registry) {\n registry.registerNode({\n id: \"async.progress\",\n categoryId: \"compute\",\n inputs: {\n Steps: \"base.float\",\n DelayMs: \"base.float\",\n ShouldError: \"base.bool\",\n },\n outputs: { Done: \"base.string\" },\n impl: async (\n ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean },\n ctx: any\n ) => {\n const steps = Math.max(1, Math.trunc(Number(ins.Steps ?? 10)));\n const delayMs = Math.max(0, Math.trunc(Number(ins.DelayMs ?? 50)));\n const shouldError = Boolean(ins.ShouldError);\n for (let i = 0; i < steps; i++) {\n ctx.reportProgress?.(i / steps);\n await sleepWithAbort(delayMs, ctx.abortSignal);\n if (shouldError && i >= Math.floor(steps * 0.7)) {\n ctx.reportProgress?.(i / steps);\n throw new Error(\"progressWorker: simulated failure at 70% progress\");\n }\n }\n ctx.reportProgress?.(1);\n return { Done: `Completed ${steps} steps` };\n },\n });\n}\n\nexport function createRuntime(registry: Registry, def: GraphDefinition) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\n \"Validation failed: \" +\n report.issues.map((i) => `${i.code}:${i.message}`).join(\", \")\n );\n\n return builder.build(def);\n}\n","import { GraphDefinition } from \"../core/types\";\nimport { setupBasicGraphRegistry, createRuntime } from \"./shared\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nfunction makeBasicGraphDefinition(): GraphDefinition {\n return {\n nodes: [\n { nodeId: \"n1\", typeId: \"base.math\" },\n { nodeId: \"n2\", typeId: \"base.math\" },\n // Transitivity demo nodes\n { nodeId: \"n3\", typeId: \"base.compare\" },\n { nodeId: \"n4\", typeId: \"base.randomXYZs\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"A\" },\n },\n // Feed n2 result to comparer A\n {\n id: \"e2\",\n source: { nodeId: \"n2\", handle: \"Result\" },\n target: { nodeId: \"n3\", handle: \"A\" },\n },\n // Transitive coercion edge: bool[] (n3.Result) -> vec3 (n4.Min)\n // Path: bool[] -> float[] -> vec3[] -> vec3\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"Result\" },\n target: { nodeId: \"n4\", handle: \"Min\" },\n },\n ],\n };\n}\n\nexport function createSimpleGraphDef() {\n return makeBasicGraphDefinition();\n}\n\nexport function createSimpleGraphRegistry() {\n return setupBasicGraphRegistry();\n}\n\n// Execute when run as a script\nexport async function main() {\n const runtime = createRuntime(\n createSimpleGraphRegistry(),\n createSimpleGraphDef()\n );\n runtime.on(\"value\", (e) => {\n console.log(`[value:${e.io}]`, e.nodeId + \".\" + e.handle, e.value);\n });\n const engine = new PushEngine(runtime);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"B\", 3);\n engine.setInput(\"n2\", \"Operation\", \"Multiply\");\n engine.setInput(\"n2\", \"B\", 10);\n engine.setInput(\"n3\", \"B\", 15);\n // Allow async propagation to flush\n await runtime.whenIdle();\n\n console.log(\"n2.Result =\", runtime.getOutput(\"n2\", \"Result\"));\n engine.dispose();\n}\n","import {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n} from \"./shared\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { BatchedEngine } from \"../runtime/BatchedEngine\";\n\nexport function createAsyncGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n {\n nodeId: \"n1\",\n typeId: \"base.math\",\n },\n {\n nodeId: \"n2\",\n typeId: \"async.delay\",\n params: { policy: { asyncConcurrency: \"queue\", maxQueue: 4 } },\n },\n {\n nodeId: \"n3\",\n typeId: \"base.separateXYZ\",\n },\n {\n nodeId: \"n4\",\n typeId: \"base.compareXYZ\",\n },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"x\" },\n },\n // Demonstrate async edge conversion: vec3[] -> float[] using coercion\n {\n id: \"e2\",\n source: { nodeId: \"n4\", handle: \"XYZ\" },\n target: { nodeId: \"n1\", handle: \"A\" },\n typeId: \"base.vec3[]\",\n // convertAsync,\n },\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"X\" },\n target: { nodeId: \"n4\", handle: \"X\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"n3\", handle: \"Y\" },\n target: { nodeId: \"n4\", handle: \"Y\" },\n },\n {\n id: \"e5\",\n source: { nodeId: \"n3\", handle: \"Z\" },\n target: { nodeId: \"n4\", handle: \"Z\" },\n },\n ],\n };\n return def;\n}\n\nexport function createAsyncGraphRegistry() {\n const registry = setupBasicGraphRegistry();\n registerDelayNode(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createAsyncGraphRegistry(),\n createAsyncGraphDef()\n );\n const engine = new BatchedEngine(runtime, { flushIntervalMs: 0 });\n engine.on(\"value\", (e) =>\n console.log(`[value:${e.io}]`, e.nodeId + \".\" + e.handle, e.value)\n );\n engine.on(\"error\", (e) => console.warn(\"[error]\", e));\n engine.launch();\n\n // Set base ms\n engine.setInput(\"n1\", \"Operation\", \"Add\");\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"B\", 2);\n engine.setInput(\"n2\", \"ms\", 250);\n // Provide XYZ and route through async conversion edge\n engine.setInput(\"n3\", \"XYZ\", [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ]);\n\n // Rapid inputs to n1 should cancel prior runs (switch)\n engine.setInput(\"n1\", \"A\", 1);\n engine.setInput(\"n1\", \"A\", 2);\n engine.setInput(\"n1\", \"A\", 3);\n\n await engine.flush();\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInput(\"n1\", \"A\", 10);\n engine.setInput(\"n1\", \"A\", 11);\n engine.setInput(\"n1\", \"A\", 12);\n await engine.flush();\n\n await new Promise((r) => setTimeout(r, 1500));\n await engine.whenIdle();\n engine.dispose();\n}\n","import {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} from \"./shared\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nexport function createProgressGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"steps\", typeId: \"base.number\" },\n { nodeId: \"async.delay\", typeId: \"base.number\" },\n { nodeId: \"work\", typeId: \"async.progress\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"steps\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"Steps\" },\n },\n {\n id: \"e2\",\n source: { nodeId: \"async.delay\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"DelayMs\" },\n },\n // not wiring ShouldError to show manual input driven error later\n ],\n };\n return def;\n}\n\nexport function createProgressGraphRegistry() {\n const registry = setupBasicGraphRegistry();\n registerProgressNodes(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createProgressGraphRegistry(),\n createProgressGraphDef()\n );\n const engine = new PushEngine(runtime);\n\n engine.on(\"value\", (e: any) => {\n console.log(`[value:${e.io}]`, `${e.nodeId}.${e.handle}`, e.value);\n });\n engine.on(\"error\", (e: any) => {\n console.warn(\"[error]\", e.nodeId, e.runId, e.err?.message ?? e.err);\n });\n engine.on(\"stats\", (s: any) => {\n if (s.kind === \"node-progress\") {\n const pct = Math.round(((s.progress ?? 0) as number) * 100);\n console.log(`[progress] ${s.nodeId}: ${pct}%`);\n } else if (s.kind === \"node-done\") {\n console.log(`[done] ${s.nodeId} in ${s.durationMs ?? 0}ms`);\n } else if (s.kind === \"node-start\") {\n console.log(`[start] ${s.nodeId}`);\n } else if (s.kind === \"edge-start\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`\n );\n } else if (s.kind === \"edge-done\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${\n s.target.handle\n } in ${s.durationMs ?? 0}ms`\n );\n }\n });\n\n engine.launch();\n\n // Seed initial values\n engine.setInput(\"steps\", \"Value\", 12);\n engine.setInput(\"async.delay\", \"Value\", 80);\n // Manually set ShouldError on the worker (unwired input)\n engine.setInput(\"work\", \"ShouldError\", false);\n\n // After 2s, trigger an error run\n setTimeout(() => {\n console.log(\"-- triggering error run --\");\n engine.setInput(\"work\", \"ShouldError\", true);\n }, 2000);\n\n // After 5s, stop and exit\n setTimeout(async () => {\n await engine.whenIdle();\n engine.dispose();\n }, 5000);\n}\n","import { setupBasicGraphRegistry, createRuntime } from \"./shared\";\nimport type { GraphDefinition } from \"../core/types\";\nimport { PushEngine } from \"../runtime/PushEngine\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown edge type (wire number to boolean input without coercion)\n // - Missing target input handle\n // - Multi inbound to same input\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"nA\", typeId: \"base.number\" },\n { nodeId: \"nB\", typeId: \"base.number\" },\n { nodeId: \"nC\", typeId: \"base.math\" },\n { nodeId: \"s1\", typeId: \"base.numberToString\" },\n { nodeId: \"cmp\", typeId: \"base.compare\" },\n // Global validation issue: unknown node type (no nodeId/edgeId in data)\n { nodeId: \"bad\", typeId: \"unknownType\" },\n ],\n edges: [\n // Valid: nA.Result -> nC.A (number)\n {\n id: \"e1\",\n source: { nodeId: \"nA\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Invalid input name (INPUT_MISSING)\n {\n id: \"e2\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"NonExistent\" },\n },\n // Multi inbound to same input (warning): another edge to A\n {\n id: \"e3\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Type mismatch to highlight coercion/validation (string -> float[] should error)\n {\n id: \"e4\",\n source: { nodeId: \"s1\", handle: \"Text\" },\n target: { nodeId: \"cmp\", handle: \"A\" },\n },\n ],\n };\n return def;\n}\n\nexport function createValidationGraphRegistry() {\n const registry = setupBasicGraphRegistry();\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createValidationGraphRegistry(),\n createValidationGraphDef()\n );\n const engine = new PushEngine(runtime);\n engine.launch();\n engine.setInput(\"nA\", \"Value\", 1);\n engine.setInput(\"nB\", \"Value\", 2);\n setTimeout(async () => {\n await runtime.whenIdle();\n engine.dispose();\n }, 1000);\n}\n"],"names":[],"mappings":"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"}
|