@tsplc/build 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +13 -8
- package/dist/cli.js.map +4 -4
- package/dist/index.js +18 -11
- package/dist/index.js.map +4 -4
- package/package.json +3 -3
- package/python/build.py +84 -20
- package/python/codesys_online.py +5 -1
- package/python/test_build.py +52 -5
- package/python/test_codesys_online.py +9 -0
- package/src/build.ts +2 -13
- package/src/controller-online.ts +28 -9
- package/src/controller-session.ts +18 -7
- package/src/device-tree.ts +24 -0
package/dist/index.js.map
CHANGED
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
"export type Token = {\n kind: \"word\" | \"string\" | \"pragma\" | \"symbol\";\n value: string;\n start: number;\n end: number;\n};\n\nexport class StSyntaxError extends Error {\n constructor(source: string, offset: number, filename: string, message: string) {\n const lines = source.slice(0, offset).split(/\\r\\n|\\r|\\n/);\n super(`${filename}:${lines.length}:${(lines.at(-1)?.length ?? 0) + 1}: ${message}`);\n this.name = \"StSyntaxError\";\n }\n}\n\n/** Keep original offsets: splitting must preserve comments, pragmas and source spelling. */\nexport const tokenize = (source: string, filename = \"<source>\"): Token[] => {\n const tokens: Token[] = [];\n let offset = 0;\n const fail = (start: number, message: string): never => {\n throw new StSyntaxError(source, start, filename, message);\n };\n const quoted = () => {\n const start = offset;\n const quote = source[offset++];\n while (offset < source.length) {\n // IEC strings escape characters (including quotes and $ itself) with $.\n if (source[offset] === \"$\") {\n offset += 2;\n } else if (source[offset++] === quote) {\n return;\n }\n }\n fail(start, \"Unterminated string\");\n };\n while (offset < source.length) {\n const start = offset;\n const character = source[offset] ?? \"\";\n if (/\\s|\\uFEFF/.test(character)) {\n offset++;\n continue;\n }\n if (source.startsWith(\"//\", offset)) {\n while (offset < source.length && !/[\\r\\n]/.test(source[offset] ?? \"\")) {\n offset++;\n }\n continue;\n }\n if (source.startsWith(\"(*\", offset)) {\n offset += 2;\n let depth = 1;\n while (offset < source.length && depth > 0) {\n if (source.startsWith(\"(*\", offset)) {\n depth++;\n offset += 2;\n } else if (source.startsWith(\"*)\", offset)) {\n depth--;\n offset += 2;\n } else {\n offset++;\n }\n }\n if (depth) {\n fail(start, \"Unterminated block comment\");\n }\n continue;\n }\n if (character === \"'\" || character === '\"') {\n quoted();\n tokens.push({\n kind: \"string\",\n value: source.slice(start, offset),\n start,\n end: offset,\n });\n continue;\n }\n if (character === \"{\") {\n offset++;\n while (offset < source.length && source[offset] !== \"}\") {\n if (source[offset] === \"'\" || source[offset] === '\"') {\n quoted();\n } else {\n offset++;\n }\n }\n if (offset === source.length) {\n fail(start, \"Unterminated pragma\");\n }\n offset++;\n tokens.push({\n kind: \"pragma\",\n value: source.slice(start, offset),\n start,\n end: offset,\n });\n continue;\n }\n if (/[A-Za-z_]/.test(character)) {\n offset++;\n while (/[A-Za-z_0-9]/.test(source[offset] ?? \"\")) {\n offset++;\n }\n tokens.push({\n kind: \"word\",\n value: source.slice(start, offset).toUpperCase(),\n start,\n end: offset,\n });\n continue;\n }\n offset++;\n const pair = source.slice(start, offset + 1);\n if ([\":=\", \"=>\", \"..\", \"<=\", \">=\", \"<>\", \"**\"].includes(pair)) {\n offset++;\n }\n tokens.push({\n kind: \"symbol\",\n value: source.slice(start, offset),\n start,\n end: offset,\n });\n }\n return tokens;\n};\n",
|
|
20
20
|
"import { StSyntaxError, type Token, tokenize } from \"./lexer\";\n\n/** Traverse tokens without losing the source offsets needed for an exact split. */\nexport const createTokenReader = (source: string, filename: string) => {\n const tokens = tokenize(source, filename);\n let index = 0;\n const peek = (ahead = 0) => tokens[index + ahead];\n const fail = (message: string, token = peek()): never => {\n throw new StSyntaxError(source, token?.start ?? source.length, filename, message);\n };\n const take = (): Token => {\n const token = peek();\n if (!token) {\n return fail(\"Unexpected end of declaration\");\n }\n index++;\n return token;\n };\n const expect = (value: string) => {\n if (peek()?.value !== value) {\n fail(`Expected ${value}`);\n }\n return take();\n };\n const consume = (value: string) => {\n if (peek()?.value === value) {\n return take();\n }\n };\n\n return {\n source,\n filename,\n tokens,\n peek,\n take,\n expect,\n consume,\n fail,\n get index() {\n return index;\n },\n // The declaration ends at the last consumed token, before any body whitespace.\n get end() {\n return tokens[index - 1]?.end ?? 0;\n },\n };\n};\n\nexport type TokenReader = ReturnType<typeof createTokenReader>;\n",
|
|
21
21
|
"import type { SourceObject } from \"./sources.ts\";\nimport { tokenize, type Token } from \"./st/lexer.ts\";\nimport { variableSections } from \"./st/declarations.ts\";\n\nexport interface DirectIoBinding {\n address: string;\n type?: string;\n}\n// A span binds at its first element: ARRAY[l..u] OF <element> with consecutive addresses.\nconst arrayType = /^ARRAY\\s*\\[\\s*(-?\\d+)\\s*\\.\\.\\s*(-?\\d+)\\s*\\]\\s*OF\\s+(\\w+)$/;\nconst layout = (type: string) => {\n const array = arrayType.exec(type);\n return array\n ? { element: array[3]!, length: Number(array[2]) - Number(array[1]) + 1 }\n : { element: type, length: 1 };\n};\nconst widths: Record<string, string> = {\n BOOL: \"X\",\n BYTE: \"B\",\n SINT: \"B\",\n USINT: \"B\",\n WORD: \"W\",\n INT: \"W\",\n UINT: \"W\",\n DWORD: \"D\",\n DINT: \"D\",\n UDINT: \"D\",\n REAL: \"D\",\n};\n\n/** Apply the shared mapping to declarations in memory; authored ST stays untouched. */\nexport function bindStructuredTextIo(\n objects: SourceObject[],\n bindings: Record<string, DirectIoBinding>,\n) {\n const declarations: {\n object: SourceObject;\n name: string;\n names: Token[];\n colon: Token;\n type: string;\n }[] = [];\n const visit = (object: SourceObject) => {\n const tokens = tokenize(object.declaration, object.source);\n let section = false,\n start = 0;\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]!;\n if (variableSections.has(token.value)) {\n section = true;\n start = i + 1;\n continue;\n }\n if (token.value === \"END_VAR\") {\n section = false;\n continue;\n }\n if (!section || token.value !== \";\") continue;\n const part = tokens.slice(start, i).filter((t) => t.kind !== \"pragma\");\n start = i + 1;\n const colonIndex = part.findIndex((t) => t.value === \":\");\n if (colonIndex < 1) continue;\n const names = part\n .slice(0, colonIndex)\n .filter(\n (t) => t.kind === \"word\" && ![\"CONSTANT\", \"RETAIN\", \"PERSISTENT\", \"AT\"].includes(t.value),\n );\n const at = part.findIndex((t) => t.value === \"AT\");\n const variables = at < 0 ? names : names.filter((t) => t.start < part[at]!.start);\n const initializer = part.findIndex((t, index) => index > colonIndex && t.value === \":=\");\n const typeTokens = part.slice(colonIndex + 1, initializer < 0 ? undefined : initializer);\n const type = typeTokens.length\n ? object.declaration\n .slice(typeTokens[0]!.start, typeTokens.at(-1)!.end)\n .replace(/\\s+/g, \" \")\n .toUpperCase()\n : \"\";\n for (const name of variables)\n declarations.push({\n object,\n name: name.value,\n names: variables,\n colon: part[colonIndex]!,\n type,\n });\n }\n object.children.forEach(visit);\n };\n objects.forEach(visit);\n const edits = new Map<SourceObject, { start: number; end: number; text: string }[]>();\n for (const [symbol, binding] of Object.entries(bindings)) {\n const parts = symbol.toUpperCase().split(\".\");\n if (parts.length > 2)\n throw new Error(`${symbol}: direct IO maps a scalar declaration, not a nested field.`);\n const matches = declarations.filter(\n (d) =>\n d.name === parts.at(-1) && (parts.length === 1 || d.object.name.toUpperCase() === parts[0]),\n );\n if (matches.length !== 1)\n throw new Error(\n `${symbol}: expected one ST variable declaration, found ${matches.length}. Use Object.Variable to disambiguate.`,\n );\n const declaration = matches[0]!;\n if (declaration.names.length !== 1)\n throw new Error(`${symbol}: declare mapped IO variables separately.`);\n const declared = layout(declaration.type);\n if (\n !widths[declared.element] ||\n (declared.length > 1 && declared.element === \"BOOL\") ||\n binding.address[2] !== widths[declared.element]\n )\n throw new Error(`${symbol}: ${declaration.type} is incompatible with ${binding.address}.`);\n const expected = binding.type && layout(binding.type.replace(/\\s+/g, \" \").toUpperCase());\n if (expected && (expected.element !== declared.element || expected.length !== declared.length))\n throw new Error(`${symbol}: expected ${binding.type}, found ${declaration.type}.`);\n const list = edits.get(declaration.object) ?? [];\n const start = declaration.names[0]!.end;\n if (list.some((e) => e.start === start))\n throw new Error(`${symbol}: the variable has more than one IO binding.`);\n list.push({ start, end: declaration.colon.start, text: ` AT ${binding.address} ` });\n edits.set(declaration.object, list);\n }\n for (const [object, list] of edits)\n for (const edit of list.sort((a, b) => b.start - a.start))\n object.declaration =\n object.declaration.slice(0, edit.start) + edit.text + object.declaration.slice(edit.end);\n}\n",
|
|
22
|
-
"import { createHash } from \"node:crypto\";\nimport { access, copyFile, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { buildFiles, publishBuild, readBuild } from \"./artifacts\";\nimport { dockerImage, type ResolvedConfig } from \"./config\";\nimport { buildInDocker } from \"./docker-build\";\nimport { createCodesysWorker, withWorkerLock } from \"./host/codesys-worker\";\nimport { loadSources } from \"./sources\";\nimport { toWindowsPath } from \"./host/windows-path.ts\";\n\nexport const buildProject = async (config: ResolvedConfig) => {\n if (!config.docker) throw new Error(\"Builds require a Docker builder image.\");\n return buildInDocker(config, dockerImage);\n};\n\n/** The container runner owns Wine; this operation is not a public host build. */\nexport const buildInContainer = async (config: ResolvedConfig) => {\n return withWorkerLock(config, async () => {\n // Invalidate the previous build before validation, so run cannot deploy stale\n // output after a failed rebuild. Keep the last project available for inspection.\n await rm(resolve(config.outDir, buildFiles.receipt), { force: true });\n const sources = await loadSources(config);\n await access(config.template);\n const worker = createCodesysWorker(config);\n const session = await worker.launch();\n const directory = resolve(config.outDir, \".codesys/build\");\n await rm(directory, { recursive: true, force: true });\n await mkdir(resolve(directory, \"runtime\"), { recursive: true });\n const template = resolve(directory, \"Template.project\");\n await copyFile(config.template, template);\n
|
|
23
|
-
"import { execFile } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { mkdir, mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { promisify } from \"node:util\";\nimport { z } from \"zod\";\nimport { controllerSchema, dockerImage, type ResolvedConfig } from \"./config\";\nimport { controllerFailureFile } from \"./diagnostics.ts\";\nimport { prepareContainerRun, runDocker } from \"./docker-run.ts\";\n\nconst execute = promisify(execFile);\nconst imageIdSchema = z.string().regex(/^sha256:[a-f0-9]{64}$/);\nconst endpointSchema = z.strictObject({\n host: z.string().nonempty(),\n port: z.number().int().min(1).max(65535),\n});\nexport const controllerResultSchema = z.strictObject({\n schemaVersion: z.literal(1),\n operationId: z.uuid(),\n operation: z.enum([\"download\", \"online-change\", \"inspect\"]),\n imageId: imageIdSchema,\n templateHash: z.string().regex(/^[a-f0-9]{64}$/),\n target: z.strictObject({\n network: z.string().nonempty(),\n gateway: endpointSchema,\n device: endpointSchema,\n controller: controllerSchema.optional(),\n }),\n generation: z.string().nonempty(),\n application: z.string().nonempty(),\n applicationGuid: z.string().nonempty(),\n controllerIds: z.strictObject({\n codeId: z.string().nonempty(),\n dataId: z.string().nonempty(),\n }),\n state: z.string().nonempty(),\n values: z.record(z.string(), z.string()),\n});\nexport type ControllerResult = z.infer<typeof controllerResultSchema>;\nexport type ControllerUpdateOptions = {\n initializeUser?: boolean;\n read?: string[];\n};\n\n/** Checks the settings every engineering connection needs and names its builder image and target. */\nconst controllerConnection = async (config: ResolvedConfig) => {\n if (!config.docker || !config.online) {\n throw new Error(\n \"Docker image and online gateway/device configuration are required for controller operations\",\n );\n }\n const environmentNames = config.online.credentials\n ? [config.online.credentials.usernameEnv, config.online.credentials.passwordEnv]\n : [];\n for (const name of environmentNames) {\n if (process.env[name] === undefined) {\n throw new Error(`Controller credential environment variable ${name} is not set`);\n }\n }\n const { stdout } = await execute(\n \"docker\",\n [\"image\", \"inspect\", \"--format\", \"{{.Id}}\", dockerImage],\n { timeout: config.timeouts.hostCommand },\n ).catch((cause: unknown) => {\n throw new Error(\n `Cannot inspect Docker builder image ${dockerImage}. Install and start Docker, then run tsplc-build configure if the image is missing`,\n { cause },\n );\n });\n return {\n environmentNames,\n imageId: imageIdSchema.parse(stdout.trim()),\n templateHash: createHash(\"sha256\")\n .update(await readFile(config.template))\n .digest(\"hex\"),\n target: {\n network: config.online.network,\n gateway: config.online.gateway,\n device: config.online.device,\n controller: config.controller,\n },\n };\n};\n\nconst controllerOperation = async (\n config: ResolvedConfig,\n operation: ControllerResult[\"operation\"],\n options: ControllerUpdateOptions,\n): Promise<ControllerResult> => {\n const { environmentNames, imageId, templateHash, target } = await controllerConnection(config);\n const operationId = randomUUID();\n const requestDirectory = await mkdtemp(resolve(tmpdir(), \"codesys-controller-\"));\n const diagnostics = resolve(config.outDir, \".codesys/controller\");\n const failure = resolve(config.outDir, controllerFailureFile);\n try {\n await mkdir(config.outDir, { recursive: true });\n await rm(failure, { force: true });\n await runDocker(\n [\n \"run\",\n \"--rm\",\n ...(await prepareContainerRun(config, requestDirectory, {\n network: target.network,\n environment: environmentNames,\n sources: operation !== \"inspect\",\n })),\n imageId,\n operation,\n \"--request\",\n \"/input/config.json\",\n \"--operation-id\",\n operationId,\n \"--image-id\",\n imageId,\n ...(options.initializeUser ? [\"--initialize-user\"] : []),\n ...(options.read ? [\"--read\", JSON.stringify(options.read)] : []),\n ],\n (status) =>\n `Docker controller operation failed (${status}). Inspect ${diagnostics} for diagnostics`,\n ).catch(async (cause: unknown) => {\n if (!existsSync(failure)) throw cause;\n // A CODESYS failure arrives as a Python traceback, whose last line names it.\n const reason = (await readFile(failure, \"utf8\")).trim().split(\"\\n\").at(-1);\n throw new Error(`${reason}. Inspect ${diagnostics} for diagnostics`, { cause });\n });\n const result = await readFile(resolve(diagnostics, \"result.json\"), \"utf8\")\n .then((content) => controllerResultSchema.parse(JSON.parse(content)))\n .catch((cause: unknown) => {\n throw new Error(\n `Docker did not produce a valid controller receipt. Inspect ${diagnostics} for diagnostics`,\n { cause },\n );\n });\n if (\n result.operationId !== operationId ||\n result.operation !== operation ||\n result.imageId !== imageId ||\n result.templateHash !== templateHash ||\n JSON.stringify(result.target) !== JSON.stringify(target)\n ) {\n throw new Error(\n `Controller receipt does not match this operation's image, template or target. Inspect ${diagnostics} for diagnostics`,\n );\n }\n return result;\n } finally {\n await rm(requestDirectory, { recursive: true, force: true });\n }\n};\n\n/** Download or apply an online change using the original CODESYS Docker compiler. */\nexport const updateController = (\n config: ResolvedConfig,\n operation: \"download\" | \"online-change\",\n options: ControllerUpdateOptions = {},\n) => controllerOperation(config, operation, options);\n\n/** Read the controller using the runner's saved compilation baseline. */\nexport const inspectController = (config: ResolvedConfig, read?: string[]) =>\n controllerOperation(config, \"inspect\", { read });\n\n/**\n * Ends every refusal that only a full download resolves, so callers can offer one. The Python\n * online operations end theirs with the same words.\n */\nexport const explicitDownload = \"use an explicit download\";\n\nexport const loginCommandSchema = z.discriminatedUnion(\"command\", [\n z.strictObject({ command: z.literal(\"state\") }),\n z.strictObject({\n command: z.literal(\"read\"),\n expressions: z.array(z.string().nonempty()).nonempty(),\n }),\n z.strictObject({\n command: z.enum([\"write\", \"force\"]),\n values: z.record(z.string().nonempty(), z.string().nonempty()),\n }),\n // No expressions unforces everything; `restore` puts back the value from before forcing.\n z.strictObject({\n command: z.literal(\"unforce\"),\n expressions: z.array(z.string().nonempty()),\n restore: z.boolean(),\n }),\n z.strictObject({ command: z.enum([\"start\", \"stop\"]) }),\n z.strictObject({ command: z.literal(\"reset\"), kind: z.enum([\"Warm\", \"Cold\"]) }),\n]);\nexport type LoginCommand = z.infer<typeof loginCommandSchema>;\nexport const loginResultSchema = z.union([\n z.strictObject({ values: z.record(z.string(), z.string()) }),\n z.strictObject({ state: z.string(), forced: z.array(z.string()) }),\n]);\nexport type LoginResult = z.infer<typeof loginResultSchema>;\nconst loginReplySchema = z.discriminatedUnion(\"ok\", [\n z.strictObject({ ok: z.literal(true), result: z.unknown() }),\n z.strictObject({ ok: z.literal(false), error: z.string() }),\n]);\n\n/** The port a login container serves its commands on, published to the host's loopback only. */\nconst loginPort = 4851;\n\nconst docker = (args: string[], timeout: number) =>\n execute(\"docker\", args, { timeout }).then(({ stdout }) => stdout.trim());\n\nconst isRunning = async (name: string, timeout: number) =>\n (await docker([\"container\", \"ls\", \"--quiet\", \"--filter\", `name=^${name}$`], timeout)) !== \"\";\n\n/** A login held open in builder container `name`; it ends with `close` or when the container stops. */\nconst attachLogin = async (name: string, timeout: number) => {\n const published = await docker([\"port\", name, String(loginPort)], timeout);\n const url = `http://${published.split(\"\\n\")[0]}`;\n const call = async (init: RequestInit) => {\n const reply = loginReplySchema.parse(await (await fetch(url, init)).json());\n if (!reply.ok) throw new Error(reply.error);\n return reply.result;\n };\n return {\n name,\n /** The relay answers only once CODESYS has logged in. */\n ready: () =>\n fetch(url)\n .then((response) => response.ok)\n .catch(() => false),\n send: async (command: LoginCommand) =>\n loginResultSchema.parse(\n await call({\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(command),\n }),\n ),\n /** Logs out and waits for the container to stop. */\n close: async () => {\n await call({ method: \"DELETE\" });\n await docker([\"wait\", name], timeout);\n await docker([\"rm\", name], timeout);\n },\n };\n};\nexport type ControllerLogin = Awaited<ReturnType<typeof attachLogin>>;\n\n/** The login in container `name`, if one is running; it outlives the process that opened it. */\nexport const findControllerLogin = async (name: string) =>\n (await isRunning(name, 15_000)) ? attachLogin(name, 15_000) : undefined;\n\n/**\n * Logs in to the running application from the saved download baseline, in a detached builder\n * container named `name`. Commands then take seconds instead of a CODESYS start each.\n */\nexport const openControllerLogin = async (config: ResolvedConfig, name: string) => {\n const { environmentNames, imageId, target } = await controllerConnection(config);\n const timeout = config.timeouts.hostCommand;\n // A login that failed to open leaves its stopped container for diagnostics until the next one.\n await docker([\"rm\", \"--force\", name], timeout);\n // The request is overwritten in place: a bind mount of a recreated directory can still show\n // Docker Desktop's cached, empty view of the deleted one.\n const requestDirectory = resolve(config.outDir, \".codesys/login-request\");\n await mkdir(requestDirectory, { recursive: true });\n await docker(\n [\n \"run\",\n \"--detach\",\n \"--name\",\n name,\n \"--publish\",\n `127.0.0.1::${loginPort}`,\n ...(await prepareContainerRun(config, requestDirectory, {\n network: target.network,\n environment: environmentNames,\n sources: false,\n })),\n imageId,\n \"login\",\n \"--request\",\n \"/input/config.json\",\n \"--image-id\",\n imageId,\n \"--port\",\n String(loginPort),\n ],\n timeout,\n );\n const deadline = Date.now() + config.timeouts.startup + config.timeouts.build;\n while (Date.now() < deadline) {\n if (!(await isRunning(name, timeout))) {\n const logs = await execute(\"docker\", [\"logs\", \"--tail\", \"40\", name], { timeout });\n throw new Error(`The controller login failed:\\n${logs.stdout}${logs.stderr}`);\n }\n const login = await attachLogin(name, timeout);\n if (await login.ready()) return login;\n await delay(2000);\n }\n await docker([\"rm\", \"--force\", name], timeout);\n throw new Error(\"The controller login did not open in time\");\n};\n",
|
|
22
|
+
"import { createHash } from \"node:crypto\";\nimport { access, copyFile, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { buildFiles, publishBuild, readBuild } from \"./artifacts\";\nimport { dockerImage, type ResolvedConfig } from \"./config\";\nimport { buildInDocker } from \"./docker-build\";\nimport { writeDeviceTree } from \"./device-tree\";\nimport { createCodesysWorker, withWorkerLock } from \"./host/codesys-worker\";\nimport { loadSources } from \"./sources\";\nimport { toWindowsPath } from \"./host/windows-path.ts\";\n\nexport const buildProject = async (config: ResolvedConfig) => {\n if (!config.docker) throw new Error(\"Builds require a Docker builder image.\");\n return buildInDocker(config, dockerImage);\n};\n\n/** The container runner owns Wine; this operation is not a public host build. */\nexport const buildInContainer = async (config: ResolvedConfig) => {\n return withWorkerLock(config, async () => {\n // Invalidate the previous build before validation, so run cannot deploy stale\n // output after a failed rebuild. Keep the last project available for inspection.\n await rm(resolve(config.outDir, buildFiles.receipt), { force: true });\n const sources = await loadSources(config);\n await access(config.template);\n const worker = createCodesysWorker(config);\n const session = await worker.launch();\n const directory = resolve(config.outDir, \".codesys/build\");\n await rm(directory, { recursive: true, force: true });\n await mkdir(resolve(directory, \"runtime\"), { recursive: true });\n const template = resolve(directory, \"Template.project\");\n await copyFile(config.template, template);\n const deviceTree = config.deviceTree && (await writeDeviceTree(config.deviceTree, directory));\n const request = {\n libraryReferences: config.libraryReferences,\n libraries: await Promise.all(\n (config.libraries ?? []).map(async (library) => ({\n ...library,\n path: await toWindowsPath(library.path, config.codesys.wine),\n })),\n ),\n ...sources,\n task: config.task,\n ...(config.tasks && { tasks: config.tasks }),\n removeObjects: config.removeObjects,\n symbols: config.symbols,\n ...(deviceTree && { deviceTree }),\n ...(config.controller && { controller: config.controller }),\n mode: \"build\",\n output: buildFiles.output,\n project: buildFiles.project,\n archive: buildFiles.archive,\n receipt: buildFiles.receipt,\n template: \"Template.project\",\n templateHash: createHash(\"sha256\")\n .update(await readFile(template))\n .digest(\"hex\"),\n };\n await writeFile(resolve(directory, \"request.json\"), JSON.stringify(request, null, 2));\n console.log(`CODESYS build: ${config.outDir}`);\n try {\n await worker.request(session, { action: \"build\" }, config.timeouts.build);\n const compiled = await readBuild(directory);\n if (config.tasks && JSON.stringify(compiled.tasks) !== JSON.stringify(config.tasks)) {\n throw new Error(\"CODESYS build receipt does not match the requested task plan\");\n }\n // Builds and runs share the lock. Removing the receipt above keeps a failed\n // publication from looking complete even if only some files were replaced.\n return await publishBuild(compiled, config.outDir);\n } catch (cause) {\n throw new Error(\n `CODESYS build failed. Inspect ${directory}/progress.log, error.txt and ${session.directory}/codesys.log`,\n { cause },\n );\n }\n });\n};\n",
|
|
23
|
+
"import { execFile } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { mkdir, mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { promisify } from \"node:util\";\nimport { z } from \"zod\";\nimport { controllerSchema, dockerImage, type ResolvedConfig } from \"./config\";\nimport { controllerFailureFile } from \"./diagnostics.ts\";\nimport { prepareContainerRun, runDocker } from \"./docker-run.ts\";\n\nconst execute = promisify(execFile);\nconst imageIdSchema = z.string().regex(/^sha256:[a-f0-9]{64}$/);\nconst endpointSchema = z.strictObject({\n host: z.string().nonempty(),\n port: z.number().int().min(1).max(65535),\n});\nexport const controllerResultSchema = z.strictObject({\n schemaVersion: z.literal(1),\n operationId: z.uuid(),\n operation: z.enum([\"download\", \"online-change\", \"inspect\"]),\n imageId: imageIdSchema,\n templateHash: z.string().regex(/^[a-f0-9]{64}$/),\n target: z.strictObject({\n network: z.string().nonempty(),\n gateway: endpointSchema,\n device: endpointSchema,\n controller: controllerSchema.optional(),\n deviceTree: z\n .string()\n .regex(/^[a-f0-9]{64}$/)\n .optional(),\n }),\n generation: z.string().nonempty(),\n application: z.string().nonempty(),\n applicationGuid: z.string().nonempty(),\n controllerIds: z.strictObject({\n codeId: z.string().nonempty(),\n dataId: z.string().nonempty(),\n }),\n state: z.string().nonempty(),\n values: z.record(z.string(), z.string()),\n});\nexport type ControllerResult = z.infer<typeof controllerResultSchema>;\nexport type ControllerUpdateOptions = {\n initializeUser?: boolean;\n read?: string[];\n};\n\n/**\n * What a download binds the controller to. An online change needs the same connection, controller\n * and device tree, because it only recompiles the program into the downloaded project.\n */\nexport const controllerTarget = (\n config: ResolvedConfig,\n online: NonNullable<ResolvedConfig[\"online\"]>,\n) => ({\n network: online.network,\n gateway: online.gateway,\n device: online.device,\n controller: config.controller,\n ...(config.deviceTree && {\n deviceTree: createHash(\"sha256\").update(JSON.stringify(config.deviceTree)).digest(\"hex\"),\n }),\n});\n\n/** Checks the settings every engineering connection needs and names its builder image and target. */\nconst controllerConnection = async (config: ResolvedConfig) => {\n if (!config.docker || !config.online) {\n throw new Error(\n \"Docker image and online gateway/device configuration are required for controller operations\",\n );\n }\n const environmentNames = config.online.credentials\n ? [config.online.credentials.usernameEnv, config.online.credentials.passwordEnv]\n : [];\n for (const name of environmentNames) {\n if (process.env[name] === undefined) {\n throw new Error(`Controller credential environment variable ${name} is not set`);\n }\n }\n const { stdout } = await execute(\n \"docker\",\n [\"image\", \"inspect\", \"--format\", \"{{.Id}}\", dockerImage],\n { timeout: config.timeouts.hostCommand },\n ).catch((cause: unknown) => {\n throw new Error(\n `Cannot inspect Docker builder image ${dockerImage}. Install and start Docker, then run tsplc-build configure if the image is missing`,\n { cause },\n );\n });\n return {\n environmentNames,\n imageId: imageIdSchema.parse(stdout.trim()),\n templateHash: createHash(\"sha256\")\n .update(await readFile(config.template))\n .digest(\"hex\"),\n target: controllerTarget(config, config.online),\n };\n};\n\nconst controllerOperation = async (\n config: ResolvedConfig,\n operation: ControllerResult[\"operation\"],\n options: ControllerUpdateOptions,\n): Promise<ControllerResult> => {\n const { environmentNames, imageId, templateHash, target } = await controllerConnection(config);\n const operationId = randomUUID();\n const requestDirectory = await mkdtemp(resolve(tmpdir(), \"codesys-controller-\"));\n const diagnostics = resolve(config.outDir, \".codesys/controller\");\n const failure = resolve(config.outDir, controllerFailureFile);\n try {\n await mkdir(config.outDir, { recursive: true });\n await rm(failure, { force: true });\n await runDocker(\n [\n \"run\",\n \"--rm\",\n ...(await prepareContainerRun(config, requestDirectory, {\n network: target.network,\n environment: environmentNames,\n sources: operation !== \"inspect\",\n })),\n imageId,\n operation,\n \"--request\",\n \"/input/config.json\",\n \"--operation-id\",\n operationId,\n \"--image-id\",\n imageId,\n ...(options.initializeUser ? [\"--initialize-user\"] : []),\n ...(options.read ? [\"--read\", JSON.stringify(options.read)] : []),\n ],\n (status) =>\n `Docker controller operation failed (${status}). Inspect ${diagnostics} for diagnostics`,\n ).catch(async (cause: unknown) => {\n if (!existsSync(failure)) throw cause;\n // A CODESYS failure arrives as a Python traceback, whose last line names it.\n const reason = (await readFile(failure, \"utf8\")).trim().split(\"\\n\").at(-1);\n throw new Error(`${reason}. Inspect ${diagnostics} for diagnostics`, { cause });\n });\n const result = await readFile(resolve(diagnostics, \"result.json\"), \"utf8\")\n .then((content) => controllerResultSchema.parse(JSON.parse(content)))\n .catch((cause: unknown) => {\n throw new Error(\n `Docker did not produce a valid controller receipt. Inspect ${diagnostics} for diagnostics`,\n { cause },\n );\n });\n if (\n result.operationId !== operationId ||\n result.operation !== operation ||\n result.imageId !== imageId ||\n result.templateHash !== templateHash ||\n JSON.stringify(result.target) !== JSON.stringify(target)\n ) {\n throw new Error(\n `Controller receipt does not match this operation's image, template or target. Inspect ${diagnostics} for diagnostics`,\n );\n }\n return result;\n } finally {\n await rm(requestDirectory, { recursive: true, force: true });\n }\n};\n\n/** Download or apply an online change using the original CODESYS Docker compiler. */\nexport const updateController = (\n config: ResolvedConfig,\n operation: \"download\" | \"online-change\",\n options: ControllerUpdateOptions = {},\n) => controllerOperation(config, operation, options);\n\n/** Read the controller using the runner's saved compilation baseline. */\nexport const inspectController = (config: ResolvedConfig, read?: string[]) =>\n controllerOperation(config, \"inspect\", { read });\n\n/**\n * Ends every refusal that only a full download resolves, so callers can offer one. The Python\n * online operations end theirs with the same words.\n */\nexport const explicitDownload = \"use an explicit download\";\n\nexport const loginCommandSchema = z.discriminatedUnion(\"command\", [\n z.strictObject({ command: z.literal(\"state\") }),\n z.strictObject({\n command: z.literal(\"read\"),\n expressions: z.array(z.string().nonempty()).nonempty(),\n }),\n z.strictObject({\n command: z.enum([\"write\", \"force\"]),\n values: z.record(z.string().nonempty(), z.string().nonempty()),\n }),\n // No expressions unforces everything; `restore` puts back the value from before forcing.\n z.strictObject({\n command: z.literal(\"unforce\"),\n expressions: z.array(z.string().nonempty()),\n restore: z.boolean(),\n }),\n z.strictObject({ command: z.enum([\"start\", \"stop\"]) }),\n z.strictObject({ command: z.literal(\"reset\"), kind: z.enum([\"Warm\", \"Cold\"]) }),\n]);\nexport type LoginCommand = z.infer<typeof loginCommandSchema>;\nexport const loginResultSchema = z.union([\n z.strictObject({ values: z.record(z.string(), z.string()) }),\n z.strictObject({ state: z.string(), forced: z.array(z.string()) }),\n]);\nexport type LoginResult = z.infer<typeof loginResultSchema>;\nconst loginReplySchema = z.discriminatedUnion(\"ok\", [\n z.strictObject({ ok: z.literal(true), result: z.unknown() }),\n z.strictObject({ ok: z.literal(false), error: z.string() }),\n]);\n\n/** The port a login container serves its commands on, published to the host's loopback only. */\nconst loginPort = 4851;\n\nconst docker = (args: string[], timeout: number) =>\n execute(\"docker\", args, { timeout }).then(({ stdout }) => stdout.trim());\n\nconst isRunning = async (name: string, timeout: number) =>\n (await docker([\"container\", \"ls\", \"--quiet\", \"--filter\", `name=^${name}$`], timeout)) !== \"\";\n\n/** A login held open in builder container `name`; it ends with `close` or when the container stops. */\nconst attachLogin = async (name: string, timeout: number) => {\n const published = await docker([\"port\", name, String(loginPort)], timeout);\n const url = `http://${published.split(\"\\n\")[0]}`;\n const call = async (init: RequestInit) => {\n const reply = loginReplySchema.parse(await (await fetch(url, init)).json());\n if (!reply.ok) throw new Error(reply.error);\n return reply.result;\n };\n return {\n name,\n /** The relay answers only once CODESYS has logged in. */\n ready: () =>\n fetch(url)\n .then((response) => response.ok)\n .catch(() => false),\n send: async (command: LoginCommand) =>\n loginResultSchema.parse(\n await call({\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(command),\n }),\n ),\n /** Logs out and waits for the container to stop. */\n close: async () => {\n await call({ method: \"DELETE\" });\n await docker([\"wait\", name], timeout);\n await docker([\"rm\", name], timeout);\n },\n };\n};\nexport type ControllerLogin = Awaited<ReturnType<typeof attachLogin>>;\n\n/** The login in container `name`, if one is running; it outlives the process that opened it. */\nexport const findControllerLogin = async (name: string) =>\n (await isRunning(name, 15_000)) ? attachLogin(name, 15_000) : undefined;\n\n/**\n * Logs in to the running application from the saved download baseline, in a detached builder\n * container named `name`. Commands then take seconds instead of a CODESYS start each.\n */\nexport const openControllerLogin = async (config: ResolvedConfig, name: string) => {\n const { environmentNames, imageId, target } = await controllerConnection(config);\n const timeout = config.timeouts.hostCommand;\n // A login that failed to open leaves its stopped container for diagnostics until the next one.\n await docker([\"rm\", \"--force\", name], timeout);\n // The request is overwritten in place: a bind mount of a recreated directory can still show\n // Docker Desktop's cached, empty view of the deleted one.\n const requestDirectory = resolve(config.outDir, \".codesys/login-request\");\n await mkdir(requestDirectory, { recursive: true });\n await docker(\n [\n \"run\",\n \"--detach\",\n \"--name\",\n name,\n \"--publish\",\n `127.0.0.1::${loginPort}`,\n ...(await prepareContainerRun(config, requestDirectory, {\n network: target.network,\n environment: environmentNames,\n sources: false,\n })),\n imageId,\n \"login\",\n \"--request\",\n \"/input/config.json\",\n \"--image-id\",\n imageId,\n \"--port\",\n String(loginPort),\n ],\n timeout,\n );\n const deadline = Date.now() + config.timeouts.startup + config.timeouts.build;\n while (Date.now() < deadline) {\n // A container that stops right after starting never publishes its port, so check it first.\n const login = (await isRunning(name, timeout))\n ? await attachLogin(name, timeout).catch(() => undefined)\n : undefined;\n if (!login && !(await isRunning(name, timeout))) {\n const logs = await execute(\"docker\", [\"logs\", \"--tail\", \"40\", name], { timeout });\n throw new Error(`The controller login failed:\\n${logs.stdout}${logs.stderr}`);\n }\n if (login && (await login.ready())) return login;\n await delay(2000);\n }\n await docker([\"rm\", \"--force\", name], timeout);\n throw new Error(\"The controller login did not open in time\");\n};\n",
|
|
24
24
|
"import { execFile } from \"node:child_process\";\nimport { mkdtemp, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { promisify } from \"node:util\";\nimport { z } from \"zod\";\nimport { readBuild } from \"./artifacts\";\nimport type { ResolvedConfig } from \"./config\";\nimport { runtimeImage } from \"./docker-build\";\nimport { withWorkerLock } from \"./host/codesys-worker\";\nimport { getApplicationStatus } from \"./runtime-status\";\n\nconst execute = promisify(execFile);\nconst stateSchema = z.object({\n Running: z.boolean(),\n StartedAt: z.iso.datetime({ offset: true }),\n});\n\nconst service = \"plc\";\n\n/** The Docker Compose project of a tsPLC project: `FrameAssembly` runs as `frame-assembly`. */\nexport const runtimeProject = (name: string) =>\n name\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, \"-\");\n\n/** The local PLC: named volumes keep its provisioning and the installed application across restarts. */\nexport const runtimeDefinition = (name: string) => ({\n services: {\n [service]: {\n image: runtimeImage,\n platform: \"linux/amd64\",\n hostname: `${runtimeProject(name)}-${service}`,\n init: true,\n ports: [\"127.0.0.1:4840:4840\", \"127.0.0.1:11740:11740\"],\n cap_add: [\"SYS_NICE\", \"IPC_LOCK\"],\n volumes: [\"control-conf:/conf/codesyscontrol\", \"control-data:/data/codesyscontrol\"],\n restart: \"no\",\n },\n },\n volumes: { \"control-conf\": {}, \"control-data\": {} },\n});\n\n/** Deploy the completed boot application to the project's local PLC container. */\nexport const runProject = async (\n config: Pick<ResolvedConfig, \"outDir\" | \"timeouts\">,\n name: string,\n) =>\n withWorkerLock(config, async () => {\n // Validate before stopping anything. A missing receipt includes a failed rebuild.\n const build = await readBuild(config.outDir).catch((cause: unknown) => {\n throw new Error(`No complete build in ${config.outDir}. Run tsplc-build build first.`, {\n cause,\n });\n });\n const definitionDirectory = await mkdtemp(join(tmpdir(), \"tsplc-runtime-\"));\n try {\n const composeFile = join(definitionDirectory, \"compose.yaml\");\n // JSON is valid YAML.\n await writeFile(composeFile, JSON.stringify(runtimeDefinition(name)));\n const docker = (...args: string[]) =>\n execute(\"docker\", args, {\n timeout: config.timeouts.runtime,\n maxBuffer: 8 * 1024 * 1024,\n });\n const compose = (...args: string[]) =>\n docker(\"compose\", \"--project-name\", runtimeProject(name), \"--file\", composeFile, ...args);\n const installer = await readFile(new URL(\"../runtime/install.sh\", import.meta.url), \"utf8\");\n console.log(`Installing ${build.application} in Docker service ${service}`);\n await compose(\"stop\", service);\n // The helper uses the service's volumes without starting its PLC or publishing\n // ports. Its read-only artifact mount is removed with the helper container.\n await compose(\n \"run\",\n \"--rm\",\n \"--no-deps\",\n \"-T\",\n \"--volume\",\n `${dirname(build.output)}:/codesys-build:ro`,\n \"--entrypoint\",\n \"/bin/sh\",\n service,\n \"-c\",\n installer,\n \"codesys-build-install\",\n build.application,\n basename(build.output, \".app\"),\n );\n await compose(\"up\", \"--detach\", \"--no-deps\", service);\n const containers = (await compose(\"ps\", \"--all\", \"--quiet\", service)).stdout\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n if (containers.length !== 1 || !containers[0]) {\n throw new Error(`Expected one container for Compose service ${service}`);\n }\n const container = containers[0];\n const deadline = Date.now() + config.timeouts.runtime;\n while (true) {\n const state = stateSchema.parse(\n JSON.parse((await docker(\"inspect\", \"--format\", \"{{json .State}}\", container)).stdout),\n );\n if (!state.Running) {\n throw new Error(\n `Docker service ${service} exited before the application started. Check docker logs ${container}.`,\n );\n }\n // Use this container start time, not the host clock or an old \"started\" event.\n const { stdout: log } = await docker(\n \"exec\",\n container,\n \"/bin/sh\",\n \"-c\",\n \"if [ -f /data/codesyscontrol/codesyscontrol.log ]; then cat /data/codesyscontrol/codesyscontrol.log; fi\",\n );\n const status = getApplicationStatus(log, build.application, Date.parse(state.StartedAt));\n if (status === \"running\") {\n console.log(`${build.application} is running in ${service}`);\n return { ...build, container };\n }\n if (status === \"failed\" || Date.now() >= deadline) {\n throw new Error(\n `CODESYS did not start ${build.application}. Runtime log:\\n${log.split(\"\\n\").slice(-25).join(\"\\n\")}`,\n );\n }\n await delay(250);\n }\n } finally {\n await rm(definitionDirectory, { force: true, recursive: true });\n }\n });\n",
|
|
25
25
|
"/** Runtime stdout is buffered in Docker. Its log file records start/stop events immediately. */\nexport const getApplicationStatus = (log: string, application: string, startedAt: number) => {\n const event = log\n .split(/\\r?\\n/)\n .reverse()\n .find((line) => {\n const timestamp = Date.parse(line.split(\",\")[0] ?? \"\");\n if (!Number.isFinite(timestamp) || timestamp < startedAt) {\n return false;\n }\n return (\n line.includes(`<app>${application}</app>`) &&\n /\\b(started|stopped|exception|corrupt|failed|denied)\\b/i.test(line) &&\n !line.includes(\"load started\")\n );\n });\n if (!event) {\n return \"pending\";\n }\n return event.includes(`Application [<app>${application}</app>] started`) ? \"running\" : \"failed\";\n};\n",
|
|
26
26
|
"import { createHash, randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { basename, relative, resolve } from \"node:path\";\nimport type { LibraryDependency } from \"@tsplc/config\";\n\nexport const libraryRegistry = \"https://store-archive.codesys.com/CODESYSLibs\";\nconst libraryFile = /\\.(?:compiled-library(?:-v\\d+)?|library)$/i;\ntype Fetcher = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;\nexport interface InstalledLibrary {\n title: string;\n company?: string;\n version?: string;\n namespace?: string;\n path: string;\n sha256: string;\n url?: string;\n}\ninterface LibraryLock {\n version: 1;\n dependencies: Record<string, InstalledLibrary>;\n}\nconst hash = (data: Uint8Array) => createHash(\"sha256\").update(data).digest(\"hex\");\nconst component = (name: string) => {\n if (!name.trim() || /[/\\\\\\0\\r\\n]/.test(name) || name === \".\" || name === \"..\")\n throw new Error(`Invalid library registry component: ${name}.`);\n return encodeURIComponent(name);\n};\nasync function response(url: string, fetcher: Fetcher) {\n const result = await fetcher(url, { signal: AbortSignal.timeout(30_000) });\n if (!result.ok) throw new Error(`Library registry ${result.status}: ${url}`);\n return result;\n}\nexport async function libraryIndex(\n path: string[] = [\"System\"],\n fetcher: Fetcher = fetch,\n): Promise<string[]> {\n const url = `${libraryRegistry}/${path.map(component).join(\"/\")}/index`;\n const result = await response(url, fetcher);\n const text = await result.text();\n if (text.length > 4_000_000 || /<html/i.test(text))\n throw new Error(`Invalid library registry index: ${url}`);\n return text\n .split(/\\r?\\n/)\n .map((s) => s.trim())\n .filter(Boolean);\n}\nexport async function validateLibrary(\n title: string,\n version: string,\n company = \"System\",\n fetcher: Fetcher = fetch,\n) {\n if (!(await libraryIndex([company], fetcher)).includes(title))\n throw new Error(`Unknown CODESYS library ${company}/${title}. Names are case sensitive.`);\n const versions = await libraryIndex([company, title], fetcher);\n if (!versions.includes(version))\n throw new Error(`Unknown version ${version} for ${title}. Available: ${versions.join(\", \")}`);\n const filenames = (await libraryIndex([company, title, version], fetcher)).filter((name) =>\n libraryFile.test(name),\n );\n if (filenames.length !== 1)\n throw new Error(\n `Expected one library payload for ${title} ${version}, received ${filenames.length}.`,\n );\n return {\n filename: filenames[0]!,\n url: `${libraryRegistry}/${[company, title, version, filenames[0]!].map(component).join(\"/\")}`,\n };\n}\nexport async function installLibraries(\n dependencies: Record<string, LibraryDependency>,\n root: string,\n options: { frozen?: boolean; fetcher?: Fetcher } = {},\n) {\n const file = resolve(root, \"tsplc.lock.json\"),\n store = resolve(root, \".tsplc/libraries\");\n let previous: LibraryLock = { version: 1, dependencies: {} };\n try {\n previous = JSON.parse(await readFile(file, \"utf8\"));\n } catch (cause) {\n if (!(cause && typeof cause === \"object\" && \"code\" in cause && cause.code === \"ENOENT\"))\n throw cause;\n }\n if (previous.version !== 1 || !previous.dependencies || typeof previous.dependencies !== \"object\")\n throw new Error(\"Invalid tsplc.lock.json.\");\n const installed: Record<string, InstalledLibrary> = {};\n const fetcher = options.fetcher ?? fetch;\n await mkdir(store, { recursive: true });\n for (const [title, dependency] of Object.entries(dependencies)) {\n component(title);\n const settings = typeof dependency === \"string\" ? { version: dependency } : dependency;\n const locked = previous.dependencies[title];\n const prior = locked ? { ...locked, path: resolve(root, locked.path) } : undefined;\n const same =\n prior !== undefined &&\n prior.namespace === settings.namespace &&\n (\"path\" in settings\n ? prior.url === undefined && prior.path === resolve(root, settings.path)\n : prior.version === settings.version && prior.company === (settings.company ?? \"System\"));\n if (same) {\n try {\n if (hash(await readFile(prior.path)) === prior.sha256) {\n installed[title] = prior;\n continue;\n }\n } catch {\n /* Missing cache can be restored from the exact URL. */\n }\n if (options.frozen) throw new Error(`Locked library ${title} is missing or changed.`);\n } else if (options.frozen) throw new Error(`Dependency ${title} differs from tsplc.lock.json.`);\n if (\"path\" in settings) {\n const path = resolve(root, settings.path);\n if (!libraryFile.test(path))\n throw new Error(`${title}: expected a .library or .compiled-library file.`);\n installed[title] = {\n title,\n path,\n sha256: hash(await readFile(path)),\n ...(settings.namespace ? { namespace: settings.namespace } : {}),\n };\n } else {\n const company = settings.company ?? \"System\";\n const payload = await validateLibrary(title, settings.version, company, fetcher);\n const result = await response(payload.url, fetcher);\n const data = new Uint8Array(await result.arrayBuffer());\n if (!data.length || data.length > 256 * 1024 * 1024)\n throw new Error(`${title}: invalid library payload size.`);\n const sha256 = hash(data);\n // An existing lock pins the payload, even if the registry later changes it.\n if (same && prior.sha256 !== sha256)\n throw new Error(\n `Registry payload changed for locked library ${title} ${settings.version}.`,\n );\n const path = resolve(store, `${sha256}-${basename(payload.filename)}`),\n temp = `${path}.${randomUUID()}.tmp`;\n await writeFile(temp, data, { flag: \"wx\" });\n await rename(temp, path);\n installed[title] = {\n title,\n company,\n version: settings.version,\n path,\n sha256,\n url: payload.url,\n ...(settings.namespace ? { namespace: settings.namespace } : {}),\n };\n }\n }\n if (\n options.frozen &&\n Object.keys(previous.dependencies).some((name) => !Object.hasOwn(dependencies, name))\n )\n throw new Error(\"Removed dependencies differ from tsplc.lock.json.\");\n if (!options.frozen) {\n const temp = `${file}.${randomUUID()}.tmp`;\n const portable = Object.fromEntries(\n Object.entries(installed).map(([title, library]) => [\n title,\n { ...library, path: relative(root, library.path).replaceAll(\"\\\\\", \"/\") },\n ]),\n );\n await writeFile(temp, JSON.stringify({ version: 1, dependencies: portable }, null, 2) + \"\\n\");\n await rename(temp, file);\n }\n return Object.values(installed);\n}\n"
|
|
27
27
|
],
|
|
28
|
-
"mappings": "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",
|
|
29
|
-
"debugId": "
|
|
28
|
+
"mappings": ";AAAA;AACA;AACA;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADKO,IAAM,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EAET,SAAS;AAAA,EAET,SAAS;AACX;AAEA,IAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,MAAM,EAAE,QAAQ,OAAO;AAAA,EACvB,aAAa,EAAE,OAAO,EAAE,MAAM,0BAA0B;AAAA,EACxD,OAAO,kBAAkB,SAAS;AACpC,CAAC;AAGM,IAAM,YAAY,OAAO,cAAsB;AAAA,EACpD,MAAM,UAAU,cAAc,UAC5B,KAAK,MAAM,MAAM,SAAS,QAAQ,WAAW,WAAW,OAAO,GAAG,MAAM,CAAC,CAC3E;AAAA,EACA,IAAI,CAAC,QAAQ,SAAS;AAAA,IACpB,MAAM,IAAI,MAAM,iDAAiD;AAAA,MAC/D,OAAO,QAAQ;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EACA,WAAW,QAAQ,CAAC,WAAW,SAAS,WAAW,QAAQ,WAAW,QAAQ,GAAG;AAAA,IAC/E,MAAM,WAAW,MAAM,KAAK,QAAQ,WAAW,IAAI,CAAC;AAAA,IACpD,IAAI,CAAC,SAAS,OAAO,KAAK,SAAS,SAAS,GAAG;AAAA,MAC7C,MAAM,IAAI,MAAM,uCAAuC,MAAM;AAAA,IAC/D;AAAA,EACF;AAAA,EACA,OAAO;AAAA,OACF,QAAQ;AAAA,IACX;AAAA,IACA,SAAS,QAAQ,WAAW,WAAW,OAAO;AAAA,IAC9C,QAAQ,QAAQ,WAAW,WAAW,MAAM;AAAA,IAC5C,UAAU,QAAQ,WAAW,WAAW,QAAQ;AAAA,EAClD;AAAA;;;AE5CF;AACA;AACA,eAAS,cAAI,mBAAO,sBAAS,iBAAU;AACvC,mBAAS;AACT,oBAAS;AACT;;;ACLA,eAAS,2BAAoB,kBAAI;AACjC;AACA;AACA,6BAAkB;;;ACHlB,oBAAS;AACT;AAGO,IAAM,mBAAmB,SAAQ,cAAc,IAAI,IAAI,MAAM,YAAY,GAAG,CAAC,CAAC;;;ADErF,eAAsB,oBAAoB,GAAG;AAAA,EAC3C,MAAM,UAAU,MAAM,QAAQ,SAAQ,OAAO,GAAG,eAAe,CAAC;AAAA,EAChE,IAAI;AAAA,IACF,WAAW,aAAa,CAAC,OAAO,UAAU,UAAU,SAAS;AAAA,MAC3D,MAAM,IAAG,SAAQ,kBAAkB,SAAS,GAAG,SAAQ,SAAS,SAAS,GAAG;AAAA,QAC1E,WAAW;AAAA,MACb,CAAC;AAAA,IACH,MAAM,aAAa,SACjB,QAAQ,cAAc,YAAY,GAAG,EAAE,QAAQ,qBAAqB,CAAC,GACrE,IACF;AAAA,IACA,MAAM,MAAM,SAAQ,SAAS,eAAe,CAAC;AAAA,IAC7C,MAAM,IAAG,SAAQ,YAAY,KAAK,GAAG,SAAQ,SAAS,mBAAmB,GAAG;AAAA,MAC1E,WAAW;AAAA,IACb,CAAC;AAAA,IACD,MAAM,IAAG,SAAQ,YAAY,WAAW,GAAG,SAAQ,SAAS,yBAAyB,GAAG;AAAA,MACtF,WAAW;AAAA,IACb,CAAC;AAAA,IACD,MAAM,IAAG,SAAQ,YAAY,cAAc,GAAG,SAAQ,SAAS,4BAA4B,CAAC;AAAA,IAC5F,MAAM,WACJ,SAAQ,SAAS,cAAc,GAC/B,KAAK,UAAU,EAAE,MAAM,UAAU,cAAc,EAAE,KAAK,SAAS,MAAM,QAAQ,EAAE,CAAC,CAClF;AAAA,IACA,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,MAAM,IAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAClD,MAAM;AAAA;AAAA;;;AEhCV,cAAS;AAEF,IAAM,2BAA2B,GACrC,OAAO;AAAA,EACN,UAAU,GAAE,OAAO;AAAA,EACnB,MAAM,GAAE,OAAO;AAAA,EACf,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,GACL,OAAO;AAAA,IACN,MAAM,GAAE,OAAO;AAAA,IACf,MAAM,GAAE,OAAO;AAAA,IACf,MAAM,GAAE,MAAM,GAAE,OAAO,CAAC;AAAA,IAExB,oBAAoB,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,CAAC,EACA,YAAY,EACZ,SAAS;AAAA,EAEZ,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,GAAE,IAAI,EAAE,SAAS;AAAA,EACjC,QAAQ,GAAE,IAAI,EAAE,SAAS;AAAA,EACzB,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQ,GAAE,IAAI,EAAE,SAAS;AAC3B,CAAC,EACA,YAAY;AAAA;AAKR,MAAM,6BAA6B,MAAM;AAAA,EAGnC;AAAA,EAFX,WAAW,CACT,SACS,aACT;AAAA,IACA,MAAM,OAAO;AAAA,IAFJ;AAAA,IAGT,KAAK,OAAO;AAAA;AAEhB;AAGO,IAAM,mBAAmB;AAEzB,IAAM,wBAAwB;AAC9B,IAAM,qBAAqB,GAAE,aAAa;AAAA,EAC/C,aAAa,GAAE,KAAK;AAAA,EACpB,SAAS,GAAE,OAAO;AAAA,EAClB,aAAa,GAAE,MAAM,wBAAwB;AAC/C,CAAC;;;ACjDD;AACA;AACA,kBAAS,oBAAO,wBAAU;AAC1B,+CAAoC;AAI7B,IAAM,YAAY,CAAC,MAAgB,YACxC,IAAI,QAAc,CAAC,QAAQ,WAAW;AAAA,EACpC,MAAM,QAAQ,MAAM,UAAU,MAAM;AAAA,IAClC,OAAO,CAAC,WAAW,QAAQ,IAAI,wBAAwB,MAAM,IAAI,WAAW,SAAS;AAAA,EACvF,CAAC;AAAA,EACD,MAAM,YAAY,MAAM,MAAM,KAAK,QAAQ;AAAA,EAC3C,MAAM,YAAY,MAAM,MAAM,KAAK,SAAS;AAAA,EAC5C,QAAQ,GAAG,UAAU,SAAS;AAAA,EAC9B,QAAQ,GAAG,WAAW,SAAS;AAAA,EAC/B,MAAM,UAAU,MAAM;AAAA,IACpB,QAAQ,IAAI,UAAU,SAAS;AAAA,IAC/B,QAAQ,IAAI,WAAW,SAAS;AAAA;AAAA,EAElC,MAAM,KAAK,SAAS,CAAC,UAAU;AAAA,IAC7B,QAAQ;AAAA,IACR,OACE,IAAI,MAAM,0EAA0E;AAAA,MAClF;AAAA,IACF,CAAC,CACH;AAAA,GACD;AAAA,EACD,MAAM,KAAK,QAAQ,CAAC,MAAM,WAAW;AAAA,IACnC,QAAQ;AAAA,IACR,IAAI,SAAS,GAAG;AAAA,MACd,OAAO;AAAA,IACT,EAAO;AAAA,MACL,OAAO,IAAI,MAAM,QAAQ,UAAU,IAAI,CAAC,CAAC;AAAA;AAAA,GAE5C;AAAA,CACF;AAEH,IAAM,YAAY,CAAC,QAAgB,QAAgB,WAAW,UAC5D,qBAAqB,OAAO,WAAW,KAAK,IAAI,aAAa,SAAS,WAAW,cAAc;AAEjG,eAAe,cAAc,CAAC,WAAwC,WAAmB;AAAA,EACvF,IAAI,CAAC,WAAW;AAAA,IAAQ;AAAA,EACxB,MAAM,OAAM,SAAQ,WAAW,WAAW,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAChE,OAAO,QAAQ,IACb,UAAU,IAAI,OAAO,YAAY;AAAA,IAC/B,MAAM,OAAO,MAAM,UAAS,QAAQ,IAAI;AAAA,IACxC,IAAI,WAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK,MAAM,QAAQ;AAAA,MAC9D,MAAM,IAAI,MAAM,uCAAuC,QAAQ,OAAO;AAAA,IACxE,MAAM,WAAW,GAAG,QAAQ,UAAU,SAAS,QAAQ,IAAI;AAAA,IAC3D,MAAM,WAAU,SAAQ,WAAW,aAAa,QAAQ,GAAG,IAAI;AAAA,IAC/D,OAAO,KAAK,SAAS,MAAM,oBAAoB,WAAW;AAAA,GAC3D,CACH;AAAA;AASK,IAAM,sBAAsB,OACjC,QACA,kBACA,YACG;AAAA,EACH,MAAM,WACJ,SAAQ,kBAAkB,aAAa,GACvC,KAAK,UAAU;AAAA,OACV;AAAA,IACH,WAAW,QAAQ,UAAU,MAAM,eAAe,OAAO,WAAW,gBAAgB,IAAI,CAAC;AAAA,IACzF,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO,MAAM,QACX,YACA,SAAS,OAAO,WAAW,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG,CAC9D;AAAA,IACA,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,CAAC,CACH;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA,GAAI,OAAO,QAAQ,SAAS,CAAC,iBAAiB,OAAO,OAAO,MAAM,IAAI,CAAC;AAAA,IACvE;AAAA,IACA,QAAQ;AAAA,IACR,GAAI,QAAQ,UAAU,QAAQ,SAC1B,CAAC,UAAU,GAAG,QAAQ,OAAO,KAAK,QAAQ,OAAO,GAAG,IACpD,CAAC;AAAA,IACL,IAAI,QAAQ,eAAe,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC;AAAA,IAChE;AAAA,IACA,UAAU,kBAAkB,UAAU,IAAI;AAAA,IAC1C,GAAI,QAAQ,UAAU,CAAC,WAAW,UAAU,OAAO,WAAW,YAAY,IAAI,CAAC,IAAI,CAAC;AAAA,IACpF;AAAA,IACA,UAAU,OAAO,UAAU,qBAAqB,IAAI;AAAA,IACpD;AAAA,IACA,UAAU,OAAO,QAAQ,SAAS;AAAA,EACpC;AAAA;;;AJxFF,IAAM,UAAU,UAAU,QAAQ;AAG3B,IAAM,kBAAkB,YAAY;AAAA,EACzC,MAAM,QAAQ;AAAA,EACd,QAAQ,WAAW,MAAM,QACvB,UACA,CAAC,QAAQ,YAAY,+BAA+B,GACpD,EAAE,SAAS,MAAO,CACpB,EAAE,MAAM,CAAC,UAAmB;AAAA,IAC1B,MAAM,IAAI,MAAM,+EAA+E;AAAA,MAC7F;AAAA,IACF,CAAC;AAAA,GACF;AAAA,EACD,MAAM,eAAe,OAAO,KAAK;AAAA,EACjC,MAAM,MAAM,iBAAiB,mBAAmB,iBAAiB;AAAA,EACjE,IAAI,CAAC,OAAO,iBAAiB,kBAAkB,iBAAiB,eAAe;AAAA,IAC7E,MAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AAAA,EACA,MAAM,UAAU,MAAM,SAAQ,SAAQ,QAAO,GAAG,oBAAoB,CAAC;AAAA,EACrE,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,eAAe,MAAM,qBAAqB;AAAA,IAC1C,MAAM,QAAQ,SAAQ,SAAS,YAAY;AAAA,IAC3C,MAAM,OAAM,KAAK;AAAA,IACjB,IAAI,QAAQ,IAAI,6BAA6B;AAAA,MAC3C,MAAM,IAAG,QAAQ,IAAI,6BAA6B,OAAO;AAAA,QACvD,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,IACN,6BAA6B,yEAC/B;AAAA,IACA,MAAM,UACJ;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM,cAAc;AAAA,MAClC;AAAA,MACA,kBAAkB,MAAM,gBAAgB;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA,SAAQ,cAAc,mBAAmB;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,IACF,GACA,CAAC,WACC,gCAAgC,sEACpC;AAAA,IACA,OAAO;AAAA,YACP;AAAA,IACA,MAAM,QAAQ,IAAI;AAAA,MAChB,IAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MAC5C,GAAI,eAAe,CAAC,IAAG,cAAc,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC;AAAA,IAC7E,CAAC;AAAA;AAAA;AAIE,IAAM,eAAe;AAGrB,IAAM,mBAAmB,YAAY;AAAA,EAC1C,MAAM,UAAU,SAAQ,kBAAkB,yBAAyB;AAAA,EACnE,QAAQ,IAAI,oCAAoC,gBAAgB;AAAA,EAChE,MAAM,UACJ,CAAC,SAAS,cAAc,eAAe,cAAc,SAAS,MAAM,cAAc,OAAO,GACzF,CAAC,WAAW,+BAA+B,wCAC7C;AAAA,EACA,OAAO;AAAA;AAGF,IAAM,eAAe;AAGrB,IAAM,mBAAmB,YAAY;AAAA,EAC1C,MAAM,UAAU,SAAQ,kBAAkB,qBAAqB;AAAA,EAC/D,QAAQ,IAAI,kCAAkC,gBAAgB;AAAA,EAC9D,MAAM,UACJ,CAAC,SAAS,cAAc,eAAe,cAAc,SAAS,MAAM,cAAc,OAAO,GACzF,CAAC,WAAW,+BAA+B,wCAC7C;AAAA,EACA,OAAO;AAAA;AAGF,IAAM,gBAAgB,OAAO,QAAwB,UAAkB;AAAA,EAC5E,MAAM,mBAAmB,MAAM,SAAQ,SAAQ,QAAO,GAAG,iBAAiB,CAAC;AAAA,EAC3E,IAAI;AAAA,IACF,MAAM,cAAc,WAAW;AAAA,IAC/B,MAAM,OAAM,OAAO,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,IAC9C,MAAM,cAAc,SAAQ,OAAO,QAAQ,gBAAgB;AAAA,IAC3D,MAAM,IAAG,aAAa,EAAE,OAAO,KAAK,CAAC;AAAA,IACrC,MAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA,GAAI,MAAM,oBAAoB,QAAQ,kBAAkB,EAAE,SAAS,QAAQ,SAAS,KAAK,CAAC;AAAA,MAC1F;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,QAAQ,IAAI,yBAAyB,QAAQ;AAAA,IAC7C,IAAI;AAAA,MACF,MAAM,UACJ,MACA,CAAC,WACC,wBAAwB,iEAAiE,OAAO,0CACpG;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MACrE,MAAM,UAAU,MAAM,UAAS,aAAa,MAAM,EAC/C,KAAK,CAAC,SAAS,mBAAmB,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,EACzD,MAAM,CAAC,UAAmB;AAAA,QACzB,IAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS;AAAA,UAAU;AAAA,QAC1E,MAAM,IAAI,eACR,CAAC,OAAO,KAAK,GACb,GAAG,8CAA8C,gBACjD,EAAE,OAAO,MAAM,CACjB;AAAA,OACD;AAAA,MACH,IAAI,CAAC;AAAA,QAAS,MAAM;AAAA,MACpB,IAAI,QAAQ,gBAAgB;AAAA,QAC1B,MAAM,IAAI,MACR,GAAG,yEACH;AAAA,UACE;AAAA,QACF,CACF;AAAA,MACF,IAAI,iBAAiB,OAAO;AAAA,QAG1B,MAAM,UAAU,GAAG;AAAA,EAAY,QAAQ;AAAA,QACvC,IAAI,QAAQ,YAAY;AAAA,UACtB,MAAM,QAAQ,IAAI,qBAAqB,QAAQ,SAAS,QAAQ,WAAW;AAAA,MAC/E;AAAA,MACA,MAAM;AAAA;AAAA,IAER,OAAO,MAAM,UAAU,OAAO,MAAM;AAAA,YACpC;AAAA,IACA,MAAM,IAAG,kBAAkB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA;AAAA;;;AK9J/D;AAAA;AAAA,cAEE;AAAA,WACA;AAAA;AAAA,cAEA;AAAA,YACA;AAAA,QACA;AAAA;AAAA,eAEA;AAAA;AAEF,oBAAS;AACT,uBAAS;AACT,cAAS;;;ACfT;AAOO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK;AAAA,CAAM;;;ACfb,qBAAS,oBAAU;AAInB,sBAAS;AACT,cAAS;;;ACLT,qBAAS;AAGT,sBAAS;AAGT;AAEA,IAAM,WAAU,WAAU,SAAQ;;;ADElC,IAAM,WAAU,WAAU,SAAQ;AAClC,IAAM,aAAa,GAAE,OAAO;AAAA,EAC1B,KAAK,GAAE,IAAI,EAAE,SAAS;AAAA,EACtB,MAAM,GAAE,IAAI,EAAE,SAAS;AAAA,EACvB,QAAQ,GAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;;;AFOD,IAAM,kBAAkB,SAAQ,kBAAkB,QAAQ;AAE1D,IAAM,gBAAgB,GAAE,OAAO;AAAA,EAC7B,WAAW,GAAE,OAAO;AAAA,EACpB,aAAa,GAAE,OAAO;AAAA,EACtB,KAAK,GAAE,IAAI,EAAE,SAAS;AACxB,CAAC;AAQD,IAAM,UAAU,CAAC,OAAgB,SAC/B,iBAAiB,UAAS,UAAU,UAAS,MAAM,SAAS;AAE9D,IAAM,iBAAiB,CAAC,QAAgB;AAAA,EACtC,IAAI;AAAA,IAGF,QAAQ,KAAK,KAAK,CAAC;AAAA,IACnB,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,IAAI,QAAQ,OAAO,OAAO,GAAG;AAAA,MAC3B,OAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA;AAAA;AAwBH,IAAM,iBAAiB,OAC5B,QACA,QACG;AAAA,EACH,MAAM,OAAM,SAAQ,OAAO,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EACnE,MAAM,OAAO,SAAQ,OAAO,QAAQ,uBAAuB;AAAA,EAC3D,MAAM,WAAW,KAAK,IAAI,IAAI,OAAO,SAAS,QAAQ,OAAO,SAAS;AAAA,EACtE,OAAO,MAAM;AAAA,IACX,MAAM,OAAO,MAAM,KAAK,MAAM,IAAI,EAAE,MAAM,CAAC,UAAmB;AAAA,MAC5D,IAAI,QAAQ,OAAO,QAAQ,GAAG;AAAA,QAC5B;AAAA,MACF;AAAA,MACA,MAAM;AAAA,KACP;AAAA,IAED,IAAI,MAAM;AAAA,MACR,IAAI;AAAA,QACF,MAAM,KAAK,UAAU,OAAO,QAAQ,GAAG,CAAC;AAAA,QACxC,OAAO,MAAM,IAAI;AAAA,gBACjB;AAAA,QACA,MAAM,KAAK,MAAM;AAAA,QACjB,MAAM,OAAO,IAAI;AAAA;AAAA,IAErB;AAAA,IAEA,MAAM,QAAQ,OACZ,MAAM,UAAS,MAAM,MAAM,EAAE,MAAM,CAAC,UAAmB;AAAA,MACrD,IAAI,QAAQ,OAAO,QAAQ,GAAG;AAAA,QAC5B,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,KACP,CACH;AAAA,IACA,IAAI,QAAQ,KAAK,CAAC,eAAe,KAAK,GAAG;AAAA,MAEvC,MAAM,IAAI,MAAM,+BAA+B,wCAAwC;AAAA,IACzF;AAAA,IACA,IAAI,KAAK,IAAI,KAAK,UAAU;AAAA,MAC1B,MAAM,IAAI,MAAM,kDAAkD,OAAO;AAAA,IAC3E;AAAA,IACA,MAAM,MAAM,GAAG;AAAA,EACjB;AAAA;;;AIlHF,8BAAkB;AAClB,qBAAS,sBAAU;;;ACDnB,qBAAS;;;ACGF,IAAM,cAAc;AAAA,EACzB,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AACZ;AAEA,IAAM,YAAY,IAAI,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACM,IAAM,iBAAiB,IAAI,IAAI,CAAC,cAAc,YAAY,CAAC;AAC3D,IAAM,mBAAmB,IAAI,IAAI;AAAA,EACtC,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,iBAAiB,IAAI,IAAI,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC,SAAS,OAAO,MAAM,CAAC;AAC7E,IAAM,sBAAsB,IAAI,IAAI;AAAA,EACzC,GAAG,OAAO,KAAK,WAAW;AAAA,EAC1B,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,uBAAuB,CAAC,UAAkB;AAAA,EAC9C,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,OAAO,kCAAkC,KAAK,MAAM,KAAK,IAAI,IAAI,YAAY;AAAA,EAC/E;AAAA;AAEF,IAAM,sBAAsB,CAAC,UAC3B,OAAO,SAAS,YAAY,CAAC,qBAAqB,KAAK;AAElD,IAAM,yBAAyB,CAAC,WAAwB;AAAA,EAC7D,OAAO,oBAAoB,OAAO,KAAK,CAAC,GAAG;AAAA,IACzC,OAAO,KAAK;AAAA,EACd;AAAA;AAGK,IAAM,2BAA2B,CAAC,WAAwB;AAAA,EAC/D,MAAM,QAAQ,OAAO,KAAK;AAAA,EAG1B,IAAI,OAAO,UAAU,OAAO,CAAC,SAAS,KAAK,OAAO,OAAO,MAAM,OAAO,KAAK,MAAM,KAAK,CAAC,GAAG;AAAA,IACxF,OAAO,KAAK;AAAA,EACd;AAAA;AAGK,IAAM,iBAAiB,CAAC,WAAwB;AAAA,EACrD,MAAM,QAAQ,OAAO,KAAK;AAAA,EAC1B,IAAI,MAAM,SAAS,UAAU,oBAAoB,IAAI,MAAM,KAAK,GAAG;AAAA,IACjE,OAAO,KAAK,8BAA8B,KAAK;AAAA,EACjD;AAAA,EACA,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,MAAM,GAAG;AAAA;AAGnD,IAAM,qBAAqB,CAAC,WAAwB;AAAA,EAGlD,MAAM,OAAO,OAAO,KAAK,CAAC;AAAA,EAC1B,OACE,MAAM,SAAS,UACf,CAAC,oBAAoB,IAAI,KAAK,KAAK,KACnC,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,GAAG,EAAE,SAAS,OAAO,KAAK,CAAC,GAAG,SAAS,EAAE,KAChE,CAAC,SAAS,KAAK,OAAO,OAAO,MAAM,OAAO,KAAK,GAAG,KAAK,KAAK,KAAK,CAAC;AAAA;AAI/D,IAAM,gBAAgB,CAAC,WAAwB;AAAA,EACpD,OAAO,UAAU,IAAI,OAAO,KAAK,GAAG,SAAS,EAAE,GAAG;AAAA,IAChD,IAAI,OAAO,KAAK,GAAG,UAAU,cAAc,CAAC,mBAAmB,MAAM,GAAG;AAAA,MACtE;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA,EACd;AAAA;AAGF,IAAM,iBAAiB,EAAE,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI;AAEtD,IAAM,oBAAoB,CAAC,QAAqB,SAAsC;AAAA,EACpF,OAAO,OAAO,IAAI;AAAA,EAClB,MAAM,WAAW,CAAC,eAAe,KAAK;AAAA,EACtC,OAAO,SAAS,QAAQ;AAAA,IACtB,MAAM,QAAQ,OAAO,KAAK;AAAA,IAC1B,IAAI,MAAM,SAAS,YAAY,MAAM,SAAS,UAAU;AAAA,MACtD;AAAA,IACF;AAAA,IACA,IAAI,MAAM,UAAU,OAAO,MAAM,UAAU,KAAK;AAAA,MAC9C,SAAS,KAAK,eAAe,MAAM,MAAM;AAAA,IAC3C,EAAO,SAAI,MAAM,UAAU,OAAO,MAAM,UAAU,KAAK;AAAA,MACrD,IAAI,SAAS,IAAI,MAAM,MAAM,OAAO;AAAA,QAClC,OAAO,KAAK,wBAAwB,MAAM,SAAS,KAAK;AAAA,MAC1D;AAAA,IACF,EAAO,SAAI,SAAS,OAAO,SAAS,GAAG,EAAE,MAAM,KAAK;AAAA,MAGlD,IAAI,MAAM,UAAU,KAAK;AAAA,QACvB,SAAS,KAAK,GAAG;AAAA,MACnB;AAAA,MACA,IAAI,MAAM,UAAU,KAAK;AAAA,QACvB,SAAS,IAAI;AAAA,MACf;AAAA,IACF;AAAA,IACA,IAAI,oBAAoB,IAAI,MAAM,KAAK,KAAK,MAAM,UAAU,KAAK;AAAA,MAC/D,OAAO,KAAK,YAAY,QAAQ,KAAK;AAAA,IACvC;AAAA,EACF;AAAA;AAGK,IAAM,WAAW,CAAC,WAAgC;AAAA,EACvD,MAAM,QAAQ,OAAO,KAAK,GAAG,SAAS,OAAO,OAAO;AAAA,EAEpD,OAAO,MAAM;AAAA,IACX,IAAI,CAAC,WAAW,aAAa,QAAQ,EAAE,SAAS,OAAO,KAAK,GAAG,SAAS,EAAE,GAAG;AAAA,MAC3E,IAAI,OAAO,KAAK,EAAE,UAAU,UAAU;AAAA,QACpC,OAAO,OAAO,IAAI;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,OAAO,QAAQ,OAAO,GAAG;AAAA,MAC3B,kBAAkB,QAAQ,GAAG;AAAA,MAC7B,OAAO,OAAO,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA,EACA,eAAe,MAAM;AAAA,EACrB,OAAO,OAAO,QAAQ,GAAG,GAAG;AAAA,IAC1B,eAAe,MAAM;AAAA,EACvB;AAAA,EACA,WAAW,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAY;AAAA,IAC3C,IAAI,OAAO,KAAK,GAAG,UAAU,MAAM;AAAA,MACjC,kBAAkB,QAAQ,IAAI;AAAA,IAChC;AAAA,EACF;AAAA,EACA,OAAO,OAAO,OAAO,MAAM,OAAO,OAAO,GAAG;AAAA;AAGvC,IAAM,sBAAsB,CAAC,WAAwB;AAAA,EAC1D,OAAO,KAAK;AAAA,EACZ,MAAM,eAAuC,CAAC;AAAA,EAC9C,OAAO,OAAO,KAAK,GAAG,UAAU,WAAW;AAAA,IACzC,MAAM,QAAQ,OAAO,KAAK;AAAA,IAC1B,IAAI,iBAAiB,IAAI,MAAM,KAAK,KAAK,eAAe,IAAI,MAAM,KAAK,GAAG;AAAA,MACxE,OAAO,KAAK,mBAAmB,KAAK;AAAA,IACtC;AAAA,IACA,MAAM,YAAY,qBAAqB,KAAK;AAAA,IAC5C,IAAI,CAAC,WAAW;AAAA,MACd;AAAA,IACF;AAAA,IACA,IAAI,cAAc,MAAM;AAAA,MACtB,aAAa,KAAK,EAAE,SAAS,MAAM,CAAC;AAAA,MACpC;AAAA,IACF;AAAA,IACA,MAAM,UAAU,aAAa,GAAG,EAAE;AAAA,IAClC,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO,OAAO,KAAK,gCAAgC,KAAK;AAAA,IAC1D;AAAA,IACA,IAAI,cAAc,UAAU;AAAA,MAC1B,aAAa,IAAI;AAAA,MACjB;AAAA,IACF;AAAA,IACA,IAAI,QAAQ,SAAS;AAAA,MACnB,OAAO,KAAK,iCAAiC,KAAK;AAAA,IACpD;AAAA,IACA,QAAQ,UAAU,cAAc;AAAA,EAClC;AAAA,EACA,IAAI,aAAa,QAAQ;AAAA,IACvB,OAAO,KAAK,6DAA6D;AAAA,EAC3E;AAAA,EACA,OAAO,KAAK;AAAA,EACZ,yBAAyB,MAAM;AAAA;AAG1B,IAAM,0BAA0B,CAAC,WAAwB;AAAA,EAC9D,OAAO,OAAO,KAAK,GAAG;AAAA,IAGpB,IAAI,QAAQ;AAAA,IACZ,OAAO,oBAAoB,OAAO,KAAK,KAAK,CAAC,GAAG;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,MAAM,OAAO,OAAO,KAAK,KAAK,GAAG,SAAS;AAAA,IAC1C,IAAI,iBAAiB,IAAI,IAAI,GAAG;AAAA,MAC9B,uBAAuB,MAAM;AAAA,MAC7B,oBAAoB,MAAM;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,IAAI,SAAS,aAAa,SAAS,cAAc;AAAA,MAC/C;AAAA,IACF;AAAA,IAEA,uBAAuB,MAAM;AAAA,IAC7B,OAAO,KAAK;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,OAAO,OAAO,QAAQ,GAAG,GAAG;AAAA,MAC1B,SAAS,MAAM;AAAA,IACjB;AAAA,EACF;AAAA;;;AC5NK,MAAM,sBAAsB,MAAM;AAAA,EACvC,WAAW,CAAC,QAAgB,QAAgB,UAAkB,SAAiB;AAAA,IAC7E,MAAM,QAAQ,OAAO,MAAM,GAAG,MAAM,EAAE,MAAM,YAAY;AAAA,IACxD,MAAM,GAAG,YAAY,MAAM,WAAW,MAAM,GAAG,EAAE,GAAG,UAAU,KAAK,MAAM,SAAS;AAAA,IAClF,KAAK,OAAO;AAAA;AAEhB;AAGO,IAAM,WAAW,CAAC,QAAgB,WAAW,eAAwB;AAAA,EAC1E,MAAM,SAAkB,CAAC;AAAA,EACzB,IAAI,SAAS;AAAA,EACb,MAAM,OAAO,CAAC,OAAe,YAA2B;AAAA,IACtD,MAAM,IAAI,cAAc,QAAQ,OAAO,UAAU,OAAO;AAAA;AAAA,EAE1D,MAAM,SAAS,MAAM;AAAA,IACnB,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ,OAAO;AAAA,IACrB,OAAO,SAAS,OAAO,QAAQ;AAAA,MAE7B,IAAI,OAAO,YAAY,KAAK;AAAA,QAC1B,UAAU;AAAA,MACZ,EAAO,SAAI,OAAO,cAAc,OAAO;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,OAAO,qBAAqB;AAAA;AAAA,EAEnC,OAAO,SAAS,OAAO,QAAQ;AAAA,IAC7B,MAAM,QAAQ;AAAA,IACd,MAAM,YAAY,OAAO,WAAW;AAAA,IACpC,IAAI,YAAY,KAAK,SAAS,GAAG;AAAA,MAC/B;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,OAAO,WAAW,MAAM,MAAM,GAAG;AAAA,MACnC,OAAO,SAAS,OAAO,UAAU,CAAC,SAAS,KAAK,OAAO,WAAW,EAAE,GAAG;AAAA,QACrE;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,OAAO,WAAW,MAAM,MAAM,GAAG;AAAA,MACnC,UAAU;AAAA,MACV,IAAI,QAAQ;AAAA,MACZ,OAAO,SAAS,OAAO,UAAU,QAAQ,GAAG;AAAA,QAC1C,IAAI,OAAO,WAAW,MAAM,MAAM,GAAG;AAAA,UACnC;AAAA,UACA,UAAU;AAAA,QACZ,EAAO,SAAI,OAAO,WAAW,MAAM,MAAM,GAAG;AAAA,UAC1C;AAAA,UACA,UAAU;AAAA,QACZ,EAAO;AAAA,UACL;AAAA;AAAA,MAEJ;AAAA,MACA,IAAI,OAAO;AAAA,QACT,KAAK,OAAO,4BAA4B;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,cAAc,OAAO,cAAc,KAAK;AAAA,MAC1C,OAAO;AAAA,MACP,OAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,OAAO,OAAO,MAAM,OAAO,MAAM;AAAA,QACjC;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACA,IAAI,cAAc,KAAK;AAAA,MACrB;AAAA,MACA,OAAO,SAAS,OAAO,UAAU,OAAO,YAAY,KAAK;AAAA,QACvD,IAAI,OAAO,YAAY,OAAO,OAAO,YAAY,KAAK;AAAA,UACpD,OAAO;AAAA,QACT,EAAO;AAAA,UACL;AAAA;AAAA,MAEJ;AAAA,MACA,IAAI,WAAW,OAAO,QAAQ;AAAA,QAC5B,KAAK,OAAO,qBAAqB;AAAA,MACnC;AAAA,MACA;AAAA,MACA,OAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,OAAO,OAAO,MAAM,OAAO,MAAM;AAAA,QACjC;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACA,IAAI,YAAY,KAAK,SAAS,GAAG;AAAA,MAC/B;AAAA,MACA,OAAO,eAAe,KAAK,OAAO,WAAW,EAAE,GAAG;AAAA,QAChD;AAAA,MACF;AAAA,MACA,OAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,OAAO,OAAO,MAAM,OAAO,MAAM,EAAE,YAAY;AAAA,QAC/C;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACA;AAAA,IACA,MAAM,OAAO,OAAO,MAAM,OAAO,SAAS,CAAC;AAAA,IAC3C,IAAI,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,EAAE,SAAS,IAAI,GAAG;AAAA,MAC7D;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,OAAO,OAAO,MAAM,OAAO,MAAM;AAAA,MACjC;AAAA,MACA,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;;;ACxHF,IAAM,oBAAoB,CAAC,QAAgB,aAAqB;AAAA,EACrE,MAAM,SAAS,SAAS,QAAQ,QAAQ;AAAA,EACxC,IAAI,QAAQ;AAAA,EACZ,MAAM,OAAO,CAAC,QAAQ,MAAM,OAAO,QAAQ;AAAA,EAC3C,MAAM,OAAO,CAAC,SAAiB,QAAQ,KAAK,MAAa;AAAA,IACvD,MAAM,IAAI,cAAc,QAAQ,OAAO,SAAS,OAAO,QAAQ,UAAU,OAAO;AAAA;AAAA,EAElF,MAAM,OAAO,MAAa;AAAA,IACxB,MAAM,QAAQ,KAAK;AAAA,IACnB,IAAI,CAAC,OAAO;AAAA,MACV,OAAO,KAAK,+BAA+B;AAAA,IAC7C;AAAA,IACA;AAAA,IACA,OAAO;AAAA;AAAA,EAET,MAAM,SAAS,CAAC,UAAkB;AAAA,IAChC,IAAI,KAAK,GAAG,UAAU,OAAO;AAAA,MAC3B,KAAK,YAAY,OAAO;AAAA,IAC1B;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,EAEd,MAAM,UAAU,CAAC,UAAkB;AAAA,IACjC,IAAI,KAAK,GAAG,UAAU,OAAO;AAAA,MAC3B,OAAO,KAAK;AAAA,IACd;AAAA;AAAA,EAGF,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACI,KAAK,GAAG;AAAA,MACV,OAAO;AAAA;AAAA,QAGL,GAAG,GAAG;AAAA,MACR,OAAO,OAAO,QAAQ,IAAI,OAAO;AAAA;AAAA,EAErC;AAAA;;;AHXF,IAAM,WAAiE;AAAA,EACrE,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AACP;AAEA,IAAM,WAAW,CAAC,WAAsC;AAAA,EACtD,OAAO,OAAO,MAAM;AAAA,EACpB,cAAc,MAAM;AAAA,EACpB,MAAM,OAAO,eAAe,MAAM;AAAA,EAClC,IAAI,OAAO,QAAQ,SAAS,GAAG;AAAA,IAC7B,SAAS,MAAM;AAAA,EACjB;AAAA,EACA,OAAO,OAAO,GAAG;AAAA,EACjB,uBAAuB,MAAM;AAAA,EAC7B,MAAM,UAAU,SAAS,OAAO,KAAK,GAAG,SAAS,OAAO;AAAA,EACxD,OAAO,OAAO,KAAK,GAAG,UAAU,YAAY;AAAA,IAC1C,IAAI,OAAO,KAAK,GAAG,UAAU,QAAQ;AAAA,MACnC,OAAO,KAAK,+CAA+C;AAAA,IAC7D;AAAA,IACA,OAAO,KAAK;AAAA,EACd;AAAA,EACA,OAAO,KAAK;AAAA,EACZ,OAAO,QAAQ,GAAG;AAAA,EAClB,IAAI,OAAO,KAAK,GAAG;AAAA,IACjB,OAAO,KAAK,mCAAmC;AAAA,EACjD;AAAA,EACA,OAAO,EAAE,MAAM,OAAO,MAAM,aAAa,OAAO,QAAQ,QAAQ;AAAA;AAGlE,IAAM,eAAe,CAAC,QAAqB,YAAwC;AAAA,EACjF,MAAM,SAAS,OAAO,KAAK;AAAA,EAC3B,IAAI,aAAa;AAAA,EACjB,OAAO,OAAO,KAAK,GAAG;AAAA,IACpB,uBAAuB,MAAM;AAAA,IAC7B,IAAI,CAAC,OAAO,KAAK,GAAG;AAAA,MAClB;AAAA,IACF;AAAA,IACA,IAAI,CAAC,eAAe,IAAI,OAAO,KAAK,GAAG,SAAS,EAAE,GAAG;AAAA,MACnD,OAAO,KAAK,oCAAoC;AAAA,IAClD;AAAA,IACA,MAAM,QAAQ,OAAO;AAAA,IACrB,oBAAoB,MAAM;AAAA,IAG1B,WAAW,SAAS,OAAO,OAAO,MAAM,QAAQ,GAAG,OAAO,KAAK,GAAG;AAAA,MAChE,IACE,MAAM,SAAS,UACf,CAAC,CAAC,YAAY,UAAU,cAAc,YAAY,EAAE,SAAS,MAAM,KAAK,GACxE;AAAA,QACA;AAAA,MACF;AAAA,MACA,eAAe,MAAM,UAAU;AAAA,IACjC;AAAA,EACF;AAAA,EACA,MAAM,OAAO,QAAQ,QAAQ,UAAS,OAAO,UAAU,KAAK;AAAA,EAC5D,IAAI,CAAC,2BAA2B,KAAK,IAAI,GAAG;AAAA,IAC1C,OAAO,KAAK,4DAA4D,MAAM;AAAA,EAChF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,aAAa,OAAO;AAAA,OAChB,cAAc,EAAE,YAAY,KAAK;AAAA,EACvC;AAAA;AAGF,IAAM,yBAAyB,CAAC,QAAqB,WAAoB;AAAA,EACvE,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,MAAM,SAAS,QAAQ;AAAA,MACzB;AAAA,IACF;AAAA,IACA,IAAI,iBAAiB,IAAI,MAAM,KAAK,KAAK,MAAM,UAAU,WAAW;AAAA,MAClE,OAAO,KACL,6GACA,KACF;AAAA,IACF;AAAA,IACA,IAAI,oBAAoB,IAAI,MAAM,KAAK,GAAG;AAAA,MACxC,OAAO,KACL,uFACA,KACF;AAAA,IACF;AAAA,EACF;AAAA;AAGF,IAAM,cAAc,CAClB,QACA,QACA,MACA,YACyD;AAAA,EACzD,MAAM,aACJ,OAAO,UAAU,kBAAkB,uBAAuB,OAAO,OAAO;AAAA,EAC1E,MAAM,YAAY,OAAO,OAAO,MAAM,OAAO,KAAK;AAAA,EAClD,MAAM,kBAAkB,UAAU,UAChC,CAAC,UAAU,MAAM,SAAS,UAAU,MAAM,UAAU,UACtD;AAAA,EAGA,IAAI,kBAAkB,KAAK,CAAC,QAAQ,iBAAiB;AAAA,IACnD,OAAO,KAAK,WAAW,YAAY;AAAA,EACrC;AAAA,EACA,MAAM,aAAa,kBAAkB,IAAI,YAAY,UAAU,MAAM,GAAG,eAAe;AAAA,EACvF,OAAO,UAAU,MAAM,kBACrB,kBAAkB,IAAI,CAAC,IAAI,UAAU,MAAM,eAAe;AAAA,EAC5D,MAAM,YAAY,MAAM,UAAU,MAAM,OAAO;AAAA,EAC/C,MAAM,aAAa,YAAY,iBAAiB;AAAA,EAChD,IAAI,YAAY;AAAA,IACd,OAAO,KAAK,4BAA4B,cAAc,UAAU;AAAA,EAClE;AAAA,EACA,uBAAuB,QAAQ,UAAU;AAAA,EAEzC,MAAM,kBAAkB,QAAQ,mBAAmB,SAAS,eAAe,SAAS;AAAA,EACpF,IAAI,mBAAmB,WAAW,QAAQ;AAAA,IACxC,OAAO,KAAK,0DAA0D,WAAW,EAAE;AAAA,EACrF;AAAA,EAEA,MAAM,cAAc,OAAO,OAAO,MAAM,GAAG,OAAO,GAAG;AAAA,EAGrD,MAAM,OACJ,OAAO,OAAO,MAAM,OAAO,KAAK,UAAU,KAAK,KAC9C,WAAW,OAAO,OAAO,OAAO,aAAa,UAAU,GAAG,IAAI;AAAA,EACjE,IAAI,iBAAiB;AAAA,IACnB,OAAO,EAAE,aAAa,cAAc,KAAK;AAAA,EAC3C;AAAA,EACA,OAAO,EAAE,aAAa,gBAAgB,KAAK;AAAA;AAG7C,IAAM,WAAW,CAAC,QAAqB,YAAwC;AAAA,EAC7E,MAAM,SAAS,OAAO,KAAK;AAAA,EAC3B,IAAI,EAAE,OAAO,SAAS,cAAc;AAAA,IAClC,OAAO,KAAK,6BAA6B,OAAO,SAAS,MAAM;AAAA,EACjE;AAAA,EACA,MAAM,OAAO,YAAY,OAAO;AAAA,EAChC,cAAc,MAAM;AAAA,EACpB,MAAM,OAAO,eAAe,MAAM;AAAA,EAClC,MAAM,aAAa,OAAO,QAAQ,GAAG,IAAI,SAAS,MAAM,IAAI;AAAA,EAC5D,IAAI,eAAe,aAAa,SAAS,YAAY;AAAA,IACnD,OAAO,KAAK,GAAG,OAAO,8BAA8B;AAAA,EACtD;AAAA,EAEA,yBAAyB,MAAM;AAAA,EAC/B,wBAAwB,MAAM;AAAA,EAC9B,OAAO;AAAA,IACL;AAAA,IACA;AAAA,OACI,eAAe,YAAY,CAAC,IAAI,EAAE,WAAW;AAAA,OAC9C,YAAY,QAAQ,QAAQ,MAAM,OAAO;AAAA,EAC9C;AAAA;AAIK,IAAM,cAAc,CAAC,QAAgB,UAAwB,CAAC,MAAoB;AAAA,EACvF,MAAM,SAAS,kBAAkB,QAAQ,QAAQ,YAAY,UAAU;AAAA,EACvE,uBAAuB,MAAM;AAAA,EAC7B,MAAM,SAAS,OAAO,KAAK;AAAA,EAC3B,IAAI,QAAQ,UAAU,QAAQ;AAAA,IAC5B,OAAO,SAAS,MAAM;AAAA,EACxB;AAAA,EACA,IAAI,UAAU,eAAe,IAAI,OAAO,KAAK,GAAG;AAAA,IAC9C,OAAO,aAAa,QAAQ,OAAO;AAAA,EACrC;AAAA,EACA,OAAO,SAAS,QAAQ,OAAO;AAAA;;;AI/LjC,IAAM,YAAY;AAClB,IAAM,SAAS,CAAC,SAAiB;AAAA,EAC/B,MAAM,QAAQ,UAAU,KAAK,IAAI;AAAA,EACjC,OAAO,QACH,EAAE,SAAS,MAAM,IAAK,QAAQ,OAAO,MAAM,EAAE,IAAI,OAAO,MAAM,EAAE,IAAI,EAAE,IACtE,EAAE,SAAS,MAAM,QAAQ,EAAE;AAAA;AAEjC,IAAM,SAAiC;AAAA,EACrC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AACR;AAGO,SAAS,oBAAoB,CAClC,SACA,UACA;AAAA,EACA,MAAM,eAMA,CAAC;AAAA,EACP,MAAM,QAAQ,CAAC,WAAyB;AAAA,IACtC,MAAM,SAAS,SAAS,OAAO,aAAa,OAAO,MAAM;AAAA,IACzD,IAAI,UAAU,OACZ,QAAQ;AAAA,IACV,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ,KAAK;AAAA,MACtC,MAAM,QAAQ,OAAO;AAAA,MACrB,IAAI,iBAAiB,IAAI,MAAM,KAAK,GAAG;AAAA,QACrC,UAAU;AAAA,QACV,QAAQ,IAAI;AAAA,QACZ;AAAA,MACF;AAAA,MACA,IAAI,MAAM,UAAU,WAAW;AAAA,QAC7B,UAAU;AAAA,QACV;AAAA,MACF;AAAA,MACA,IAAI,CAAC,WAAW,MAAM,UAAU;AAAA,QAAK;AAAA,MACrC,MAAM,OAAO,OAAO,MAAM,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ;AAAA,MACrE,QAAQ,IAAI;AAAA,MACZ,MAAM,aAAa,KAAK,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG;AAAA,MACxD,IAAI,aAAa;AAAA,QAAG;AAAA,MACpB,MAAM,QAAQ,KACX,MAAM,GAAG,UAAU,EACnB,OACC,CAAC,MAAM,EAAE,SAAS,UAAU,CAAC,CAAC,YAAY,UAAU,cAAc,IAAI,EAAE,SAAS,EAAE,KAAK,CAC1F;AAAA,MACF,MAAM,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,UAAU,IAAI;AAAA,MACjD,MAAM,YAAY,KAAK,IAAI,QAAQ,MAAM,OAAO,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAK,KAAK;AAAA,MAChF,MAAM,cAAc,KAAK,UAAU,CAAC,GAAG,UAAU,QAAQ,cAAc,EAAE,UAAU,IAAI;AAAA,MACvF,MAAM,aAAa,KAAK,MAAM,aAAa,GAAG,cAAc,IAAI,YAAY,WAAW;AAAA,MACvF,MAAM,OAAO,WAAW,SACpB,OAAO,YACJ,MAAM,WAAW,GAAI,OAAO,WAAW,GAAG,EAAE,EAAG,GAAG,EAClD,QAAQ,QAAQ,GAAG,EACnB,YAAY,IACf;AAAA,MACJ,WAAW,QAAQ;AAAA,QACjB,aAAa,KAAK;AAAA,UAChB;AAAA,UACA,MAAM,KAAK;AAAA,UACX,OAAO;AAAA,UACP,OAAO,KAAK;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,IACL;AAAA,IACA,OAAO,SAAS,QAAQ,KAAK;AAAA;AAAA,EAE/B,QAAQ,QAAQ,KAAK;AAAA,EACrB,MAAM,QAAQ,IAAI;AAAA,EAClB,YAAY,QAAQ,YAAY,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACxD,MAAM,QAAQ,OAAO,YAAY,EAAE,MAAM,GAAG;AAAA,IAC5C,IAAI,MAAM,SAAS;AAAA,MACjB,MAAM,IAAI,MAAM,GAAG,kEAAkE;AAAA,IACvF,MAAM,UAAU,aAAa,OAC3B,CAAC,MACC,EAAE,SAAS,MAAM,GAAG,EAAE,MAAM,MAAM,WAAW,KAAK,EAAE,OAAO,KAAK,YAAY,MAAM,MAAM,GAC5F;AAAA,IACA,IAAI,QAAQ,WAAW;AAAA,MACrB,MAAM,IAAI,MACR,GAAG,uDAAuD,QAAQ,8CACpE;AAAA,IACF,MAAM,cAAc,QAAQ;AAAA,IAC5B,IAAI,YAAY,MAAM,WAAW;AAAA,MAC/B,MAAM,IAAI,MAAM,GAAG,iDAAiD;AAAA,IACtE,MAAM,WAAW,OAAO,YAAY,IAAI;AAAA,IACxC,IACE,CAAC,OAAO,SAAS,YAChB,SAAS,SAAS,KAAK,SAAS,YAAY,UAC7C,QAAQ,QAAQ,OAAO,OAAO,SAAS;AAAA,MAEvC,MAAM,IAAI,MAAM,GAAG,WAAW,YAAY,6BAA6B,QAAQ,UAAU;AAAA,IAC3F,MAAM,WAAW,QAAQ,QAAQ,OAAO,QAAQ,KAAK,QAAQ,QAAQ,GAAG,EAAE,YAAY,CAAC;AAAA,IACvF,IAAI,aAAa,SAAS,YAAY,SAAS,WAAW,SAAS,WAAW,SAAS;AAAA,MACrF,MAAM,IAAI,MAAM,GAAG,oBAAoB,QAAQ,eAAe,YAAY,OAAO;AAAA,IACnF,MAAM,OAAO,MAAM,IAAI,YAAY,MAAM,KAAK,CAAC;AAAA,IAC/C,MAAM,QAAQ,YAAY,MAAM,GAAI;AAAA,IACpC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK;AAAA,MACpC,MAAM,IAAI,MAAM,GAAG,oDAAoD;AAAA,IACzE,KAAK,KAAK,EAAE,OAAO,KAAK,YAAY,MAAM,OAAO,MAAM,OAAO,QAAQ,WAAW,CAAC;AAAA,IAClF,MAAM,IAAI,YAAY,QAAQ,IAAI;AAAA,EACpC;AAAA,EACA,YAAY,QAAQ,SAAS;AAAA,IAC3B,WAAW,QAAQ,KAAK,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA,MACtD,OAAO,cACL,OAAO,YAAY,MAAM,GAAG,KAAK,KAAK,IAAI,KAAK,OAAO,OAAO,YAAY,MAAM,KAAK,GAAG;AAAA;;;AL7G/F,IAAM,WAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,KAAK;AACP;AACA,IAAM,eAA2C;AAAA,EAC/C,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;AACA,IAAM,SAAS,CAAC,SACd,CAAC,WAAW,kBAAkB,aAAa,UAAU,EAAE,SAAS,IAAI;AACtE,IAAM,eAAe,CAAC,SAAyB,UAAkB;AAAA,EAC/D,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,UAAU,SAAS;AAAA,IAC5B,MAAM,MAAM,OAAO,KAAK,YAAY;AAAA,IACpC,MAAM,WAAW,KAAK,IAAI,GAAG;AAAA,IAC7B,IAAI,UAAU;AAAA,MACZ,MAAM,IAAI,MACR,sBAAsB,OAAO,WAAW,UAAU,gBAAgB,OAAO,QAC3E;AAAA,IACF;AAAA,IACA,KAAK,IAAI,KAAK,OAAO,MAAM;AAAA,IAC3B,aAAa,OAAO,UAAU,GAAG,SAAS,OAAO,MAAM;AAAA,EACzD;AAAA;AAGF,IAAM,WAAW,OACf,MACA,OACA,MACA,kBAAkB,UAC6B;AAAA,EAC/C,IAAI,CAAC,2BAA2B,KAAK,IAAI,GAAG;AAAA,IAC1C,MAAM,IAAI,MAAM,4BAA4B,MAAM;AAAA,EACpD;AAAA,EACA,YAAY,MAAM,eAAe,OAAO,QAAQ,KAAK,GAAG;AAAA,IACtD,IAAI,WAAW,SAAS,GAAG;AAAA,MACzB,MAAM,IAAI,MAAM,aAAa,YAAY,SAAS,WAAW,KAAK,IAAI,GAAG;AAAA,IAC3E;AAAA,EACF;AAAA,EACA,MAAM,WAAW,MAAM,SAAS;AAAA,EAChC,MAAM,cAAc,MAAM,YAAY;AAAA,EACtC,MAAM,iBAAiB,MAAM,eAAe;AAAA,EAC5C,IAAI,aAAa,eAAe,iBAAiB;AAAA,IAC/C,MAAM,IAAI,MAAM,6CAA6C,MAAM;AAAA,EACrE;AAAA,EACA,MAAM,OAAO,YAAY,eAAe;AAAA,EACxC,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,sBAAsB,MAAM;AAAA,EAC9C;AAAA,EACA,IAAI,SAAS,UAAU;AAAA,IACrB,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,MAAM,iDAAiD,MAAM;AAAA,IACzE;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,aAAa;AAAA,MACb,gBAAgB,MAAM,UAAS,UAAU,MAAM;AAAA,MAC/C,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,IAAI,SAAS,SAAS,SAAS,OAAO;AAAA,IACpC,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,MAAM,wCAAwC,MAAM;AAAA,IAChE;AAAA,IACA,MAAM,OAAO,MAAM,UAAS,UAAU,MAAM;AAAA,IAC5C,MAAM,SAAS,UAAU;AAAA;AAAA,IACzB,MAAM,SAAS,YAAY,GAAG,SAAS;AAAA,aAAoB;AAAA,MACzD,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,OAAO;AAAA,SACF;AAAA,MACH,MAAM;AAAA,MACN;AAAA,MACA,aAAa,OAAO,YAAY,MAAM,OAAO,MAAM;AAAA,MACnD,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,IAAI,CAAC,YAAY,CAAC,aAAa;AAAA,IAC7B,MAAM,IAAI,MAAM,2BAA2B,MAAM;AAAA,EACnD;AAAA,EACA,MAAM,aAAa,YAAY,eAAe;AAAA,EAC9C,MAAM,SAAS,YAAY,MAAM,UAAS,YAAY,MAAM,GAAG;AAAA,IAC7D,UAAU;AAAA,IACV;AAAA,IACA,iBAAiB,CAAC,YAAY;AAAA,EAChC,CAAC;AAAA,EACD,IAAI,OAAO,KAAK,YAAY,MAAM,KAAK,YAAY,GAAG;AAAA,IACpD,MAAM,IAAI,MAAM,eAAe,mCAAmC,OAAO,SAAS,YAAY;AAAA,EAChG;AAAA,EACA,IAAI,QAAQ,OAAO,SAAS,MAAM;AAAA,IAChC,MAAM,IAAI,MAAM,YAAY,eAAe,OAAO,SAAS,YAAY;AAAA,EACzE;AAAA,EACA,IAAI,CAAC,QAAQ,CAAC,UAAU,UAAU,EAAE,SAAS,OAAO,IAAI,GAAG;AAAA,IACzD,MAAM,IAAI,MAAM,sCAAsC,YAAY;AAAA,EACpE;AAAA,EACA,MAAM,SAAS,aAAa,KAAK,KAAK,YAAY,CAAC,IAAI;AAAA,EACvD,IAAI,CAAC,QAAQ,UAAU,SAAS,WAAW,SAAS,YAAY,OAAO,MAAM;AAAA,IAC3E,MAAM,IAAI,MAAM,UAAU,0BAA0B,OAAO,SAAS,YAAY;AAAA,EAClF;AAAA,EACA,MAAM,kBACJ,CAAC,OAAO,OAAO,aAAa,UAAU,EAAE,SAAS,OAAO,IAAI,KAAK;AAAA,EACnE,IAAI,mBAAmB,gBAAgB;AAAA,IACrC,MAAM,IAAI,MAAM,sCAAsC,gBAAgB;AAAA,EACxE;AAAA,EACA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,gBAAgB;AAAA,IACpD,MAAM,IAAI,MAAM,8BAA8B,YAAY;AAAA,EAC5D;AAAA,EACA,OAAO;AAAA,OACF;AAAA,OACC,iBAAiB,EAAE,gBAAgB,MAAM,UAAS,gBAAgB,MAAM,EAAE,IAAI,CAAC;AAAA,IACnF,QAAQ;AAAA,EACV;AAAA;AAIK,IAAM,cAAc,OACzB,WACG;AAAA,EACH,MAAM,UAA0B,CAAC;AAAA,EACjC,MAAM,QAAQ,OACZ,WACA,QACA,QACA,SACkB;AAAA,IAClB,MAAM,WAAW,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAC3E,EAAE,KAAK,cAAc,EAAE,MAAM,IAAI,CACnC;AAAA,IACA,MAAM,SAAS,IAAI;AAAA,IACnB,WAAW,SAAS,SAAS;AAAA,MAC3B,IAAI,MAAM,eAAe,GAAG;AAAA,QAC1B,MAAM,IAAI,MAAM,sCAAsC,SAAQ,WAAW,MAAM,IAAI,GAAG;AAAA,MACxF;AAAA,MACA,IAAI,CAAC,MAAM,OAAO,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,GAAG;AAAA,QACjD;AAAA,MACF;AAAA,MACA,MAAM,OAAO,MAAM,KAAK,MAAM,GAAG,EAAE;AAAA,MACnC,MAAM,SAAS,uCAAuC,KAAK,IAAI;AAAA,MAC/D,MAAM,UAAU,CAAC,UAAU,eAAe,gBAAgB,EAAE,SAAS,IAAI;AAAA,MACzE,MAAM,OAAO,UAAU,UAAS,SAAS,IAAK,SAAS,MAAM;AAAA,MAC7D,MAAM,UAAU,SAAS,MAAM;AAAA,MAC/B,MAAM,OAAO,YAAY,iBAAiB,YAAY,mBAAmB,UAAU;AAAA,MACnF,MAAM,MAAM,KAAK,YAAY;AAAA,MAC7B,MAAM,QAAQ,OAAO,IAAI,GAAG,KAAK;AAAA,QAC/B;AAAA,QACA,OAAO,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,GAAG,gBAAgB,CAAC,EAAE;AAAA,MAC7D;AAAA,MACA,MAAM,MAAM,MAAM,KAAK,SAAQ,WAAW,MAAM,IAAI,CAAC;AAAA,MACrD,OAAO,IAAI,KAAK,KAAK;AAAA,IACvB;AAAA,IACA,MAAM,QAAwB,CAAC;AAAA,IAC/B,MAAM,SAAS,UAAS,SAAS,EAAE,YAAY;AAAA,IAE/C,MAAM,UAAU,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,OAAO,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM,MAAM,CAAC;AAAA,IAC1F,YAAY,OAAO,MAAM,YAAY,SAAS;AAAA,MAC5C,MAAM,cAAc,MAAM,KACxB,CAAC,SAAS,KAAK,SAAS,cAAc,KAAK,KAAK,YAAY,MAAM,MACpE;AAAA,MACA,MAAM,WAAW,gBAAgB,QAAQ,SAAS,QAAQ,SAAS,MAAM;AAAA,MACzE,MAAM,OAAqB;AAAA,WACrB,MAAM,SACR,WAAW,GAAG,SAAS,IAAI,YAAY,IAAI,SAAS,MAAM,CAAC,MAAM,MACjE,OACA,YAAY,MACZ,QAAQ,SAAS,WACnB;AAAA,QACA,QAAQ,SAAS,CAAC,IAAI;AAAA,QACtB,UAAU,CAAC;AAAA,MACb;AAAA,MACA,IAAI,YAAY,aAAa;AAAA,QAC3B,IAAI,QAAQ,SAAS,aAAa;AAAA,UAChC,MAAM,IAAI,MAAM,oDAAoD,KAAK,QAAQ;AAAA,QACnF;AAAA,QACA,YAAY,SAAS,KAAK,IAAI;AAAA,MAChC,EAAO;AAAA,QACL,MAAM,KAAK,IAAI;AAAA,QACf,IAAI,QAAQ;AAAA,UACV,OAAO,SAAS,KAAK,IAAI;AAAA,QAC3B,EAAO;AAAA,UACL,QAAQ,KAAK,IAAI;AAAA;AAAA;AAAA,IAGvB;AAAA,IACA,MAAM,MAAM,MAAM,KAAK,CAAC,SAAS,KAAK,KAAK,YAAY,MAAM,UAAU,OAAO,KAAK,IAAI,CAAC;AAAA,IACxF,IAAI,OAAO,CAAC,QAAQ;AAAA,MAClB,IAAI,SAAS,OAAO,MAAM,GAAG,EAAE;AAAA,IACjC;AAAA,IACA,WAAW,SAAS,QAAQ,OAAO,CAAC,UAAU,MAAM,YAAY,CAAC,GAAG;AAAA,MAClE,MAAM,YAAY,aAAa,MAAM;AAAA,MACrC,IAAI,OAAO,WAAW;AAAA,QACpB,IAAI,IAAI,SAAS,cAAe,IAAI,SAAS,eAAe,cAAc,UAAW;AAAA,UACnF,MAAM,IAAI,MAAM,eAAe,MAAM,cAAc,IAAI,MAAM;AAAA,QAC/D;AAAA,QACA,MAAM,MAAM,SAAQ,WAAW,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;AAAA,MAChE,EAAO,SAAI,QAAQ;AAAA,QACjB,MAAM,MAAM,SAAQ,WAAW,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,IAAI;AAAA,MAC9D,EAAO;AAAA,QACL,MAAM,MAAM,SAAQ,WAAW,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,MAAM,IAAI,CAAC;AAAA;AAAA,IAEvE;AAAA;AAAA,EAEF,MAAM,MAAM,SAAQ,OAAO,SAAS,GAAG,CAAC,CAAC;AAAA,EACzC,aAAa,SAAS,aAAa;AAAA,EACnC,IAAI,OAAO;AAAA,IAAI,qBAAqB,SAAS,OAAO,EAAE;AAAA,EACtD,MAAM,QAAQ,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,SAAQ,OAAO,KAAK,CAAC;AAAA,EAC9E,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,MAAM,qCAAqC,OAAO,OAAO;AAAA,EACrE;AAAA,EACA,IAAI,MAAM,SAAS,WAAW;AAAA,IAC5B,MAAM,IAAI,MAAM,4BAA4B,OAAO,OAAO;AAAA,EAC5D;AAAA,EACA,IAAI,OAAO,OAAO;AAAA,IAChB,MAAM,WAAW,IAAI,IACnB,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,SAAS,EAAE,IAAI,CAAC,WAAW,OAAO,IAAI,CACnF;AAAA,IACA,WAAW,QAAQ,OAAO;AAAA,MACxB,WAAW,WAAW,KAAK;AAAA,QACzB,IAAI,CAAC,SAAS,IAAI,OAAO;AAAA,UACvB,MAAM,IAAI,MAAM,QAAQ,KAAK,2CAA2C,SAAS;AAAA,EACzF;AAAA,EACA,OAAO,EAAE,OAAO,MAAM,MAAM,QAAQ;AAAA;;;AM3O/B,IAAM,eAAe,OAAO,WAA2B;AAAA,EAC5D,IAAI,CAAC,OAAO;AAAA,IAAQ,MAAM,IAAI,MAAM,wCAAwC;AAAA,EAC5E,OAAO,cAAc,QAAQ,WAAW;AAAA;;ACb1C,qBAAS;AACT;AACA,uBAAS,2BAAY;AACrB,kBAAS,mBAAO,sBAAS,iBAAU;AACnC,mBAAS;AACT,oBAAS;AACT,uBAAS;AACT,sBAAS;AACT,cAAS;AAKT,IAAM,WAAU,WAAU,SAAQ;AAClC,IAAM,gBAAgB,GAAE,OAAO,EAAE,MAAM,uBAAuB;AAC9D,IAAM,iBAAiB,GAAE,aAAa;AAAA,EACpC,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK;AACzC,CAAC;AACM,IAAM,yBAAyB,GAAE,aAAa;AAAA,EACnD,eAAe,GAAE,QAAQ,CAAC;AAAA,EAC1B,aAAa,GAAE,KAAK;AAAA,EACpB,WAAW,GAAE,KAAK,CAAC,YAAY,iBAAiB,SAAS,CAAC;AAAA,EAC1D,SAAS;AAAA,EACT,cAAc,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,EAC/C,QAAQ,GAAE,aAAa;AAAA,IACrB,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY,iBAAiB,SAAS;AAAA,IACtC,YAAY,GACT,OAAO,EACP,MAAM,gBAAgB,EACtB,SAAS;AAAA,EACd,CAAC;AAAA,EACD,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAe,GAAE,aAAa;AAAA,IAC5B,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,CAAC;AAAA,EACD,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQ,GAAE,OAAO,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC;AACzC,CAAC;AAWM,IAAM,mBAAmB,CAC9B,QACA,YACI;AAAA,EACJ,SAAS,OAAO;AAAA,EAChB,SAAS,OAAO;AAAA,EAChB,QAAQ,OAAO;AAAA,EACf,YAAY,OAAO;AAAA,KACf,OAAO,cAAc;AAAA,IACvB,YAAY,YAAW,QAAQ,EAAE,OAAO,KAAK,UAAU,OAAO,UAAU,CAAC,EAAE,OAAO,KAAK;AAAA,EACzF;AACF;AAGA,IAAM,uBAAuB,OAAO,WAA2B;AAAA,EAC7D,IAAI,CAAC,OAAO,UAAU,CAAC,OAAO,QAAQ;AAAA,IACpC,MAAM,IAAI,MACR,6FACF;AAAA,EACF;AAAA,EACA,MAAM,mBAAmB,OAAO,OAAO,cACnC,CAAC,OAAO,OAAO,YAAY,aAAa,OAAO,OAAO,YAAY,WAAW,IAC7E,CAAC;AAAA,EACL,WAAW,QAAQ,kBAAkB;AAAA,IACnC,IAAI,QAAQ,IAAI,UAAU,WAAW;AAAA,MACnC,MAAM,IAAI,MAAM,8CAA8C,iBAAiB;AAAA,IACjF;AAAA,EACF;AAAA,EACA,QAAQ,WAAW,MAAM,SACvB,UACA,CAAC,SAAS,WAAW,YAAY,WAAW,WAAW,GACvD,EAAE,SAAS,OAAO,SAAS,YAAY,CACzC,EAAE,MAAM,CAAC,UAAmB;AAAA,IAC1B,MAAM,IAAI,MACR,uCAAuC,iGACvC,EAAE,MAAM,CACV;AAAA,GACD;AAAA,EACD,OAAO;AAAA,IACL;AAAA,IACA,SAAS,cAAc,MAAM,OAAO,KAAK,CAAC;AAAA,IAC1C,cAAc,YAAW,QAAQ,EAC9B,OAAO,MAAM,UAAS,OAAO,QAAQ,CAAC,EACtC,OAAO,KAAK;AAAA,IACf,QAAQ,iBAAiB,QAAQ,OAAO,MAAM;AAAA,EAChD;AAAA;AAGF,IAAM,sBAAsB,OAC1B,QACA,WACA,YAC8B;AAAA,EAC9B,QAAQ,kBAAkB,SAAS,cAAc,WAAW,MAAM,qBAAqB,MAAM;AAAA,EAC7F,MAAM,cAAc,YAAW;AAAA,EAC/B,MAAM,mBAAmB,MAAM,SAAQ,SAAQ,QAAO,GAAG,qBAAqB,CAAC;AAAA,EAC/E,MAAM,cAAc,SAAQ,OAAO,QAAQ,qBAAqB;AAAA,EAChE,MAAM,UAAU,SAAQ,OAAO,QAAQ,qBAAqB;AAAA,EAC5D,IAAI;AAAA,IACF,MAAM,OAAM,OAAO,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,IAC9C,MAAM,IAAG,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,IACjC,MAAM,UACJ;AAAA,MACE;AAAA,MACA;AAAA,MACA,GAAI,MAAM,oBAAoB,QAAQ,kBAAkB;AAAA,QACtD,SAAS,OAAO;AAAA,QAChB,aAAa;AAAA,QACb,SAAS,cAAc;AAAA,MACzB,CAAC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,iBAAiB,CAAC,mBAAmB,IAAI,CAAC;AAAA,MACtD,GAAI,QAAQ,OAAO,CAAC,UAAU,KAAK,UAAU,QAAQ,IAAI,CAAC,IAAI,CAAC;AAAA,IACjE,GACA,CAAC,WACC,uCAAuC,oBAAoB,6BAC/D,EAAE,MAAM,OAAO,UAAmB;AAAA,MAChC,IAAI,CAAC,WAAW,OAAO;AAAA,QAAG,MAAM;AAAA,MAEhC,MAAM,UAAU,MAAM,UAAS,SAAS,MAAM,GAAG,KAAK,EAAE,MAAM;AAAA,CAAI,EAAE,GAAG,EAAE;AAAA,MACzE,MAAM,IAAI,MAAM,GAAG,mBAAmB,+BAA+B,EAAE,MAAM,CAAC;AAAA,KAC/E;AAAA,IACD,MAAM,SAAS,MAAM,UAAS,SAAQ,aAAa,aAAa,GAAG,MAAM,EACtE,KAAK,CAAC,YAAY,uBAAuB,MAAM,KAAK,MAAM,OAAO,CAAC,CAAC,EACnE,MAAM,CAAC,UAAmB;AAAA,MACzB,MAAM,IAAI,MACR,8DAA8D,+BAC9D,EAAE,MAAM,CACV;AAAA,KACD;AAAA,IACH,IACE,OAAO,gBAAgB,eACvB,OAAO,cAAc,aACrB,OAAO,YAAY,WACnB,OAAO,iBAAiB,gBACxB,KAAK,UAAU,OAAO,MAAM,MAAM,KAAK,UAAU,MAAM,GACvD;AAAA,MACA,MAAM,IAAI,MACR,yFAAyF,6BAC3F;AAAA,IACF;AAAA,IACA,OAAO;AAAA,YACP;AAAA,IACA,MAAM,IAAG,kBAAkB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA;AAAA;AAKxD,IAAM,mBAAmB,CAC9B,QACA,WACA,UAAmC,CAAC,MACjC,oBAAoB,QAAQ,WAAW,OAAO;AAG5C,IAAM,oBAAoB,CAAC,QAAwB,SACxD,oBAAoB,QAAQ,WAAW,EAAE,KAAK,CAAC;AAM1C,IAAM,mBAAmB;AAEzB,IAAM,qBAAqB,GAAE,mBAAmB,WAAW;AAAA,EAChE,GAAE,aAAa,EAAE,SAAS,GAAE,QAAQ,OAAO,EAAE,CAAC;AAAA,EAC9C,GAAE,aAAa;AAAA,IACb,SAAS,GAAE,QAAQ,MAAM;AAAA,IACzB,aAAa,GAAE,MAAM,GAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;AAAA,EACvD,CAAC;AAAA,EACD,GAAE,aAAa;AAAA,IACb,SAAS,GAAE,KAAK,CAAC,SAAS,OAAO,CAAC;AAAA,IAClC,QAAQ,GAAE,OAAO,GAAE,OAAO,EAAE,SAAS,GAAG,GAAE,OAAO,EAAE,SAAS,CAAC;AAAA,EAC/D,CAAC;AAAA,EAED,GAAE,aAAa;AAAA,IACb,SAAS,GAAE,QAAQ,SAAS;AAAA,IAC5B,aAAa,GAAE,MAAM,GAAE,OAAO,EAAE,SAAS,CAAC;AAAA,IAC1C,SAAS,GAAE,QAAQ;AAAA,EACrB,CAAC;AAAA,EACD,GAAE,aAAa,EAAE,SAAS,GAAE,KAAK,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC;AAAA,EACrD,GAAE,aAAa,EAAE,SAAS,GAAE,QAAQ,OAAO,GAAG,MAAM,GAAE,KAAK,CAAC,QAAQ,MAAM,CAAC,EAAE,CAAC;AAChF,CAAC;AAEM,IAAM,oBAAoB,GAAE,MAAM;AAAA,EACvC,GAAE,aAAa,EAAE,QAAQ,GAAE,OAAO,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,EAAE,CAAC;AAAA,EAC3D,GAAE,aAAa,EAAE,OAAO,GAAE,OAAO,GAAG,QAAQ,GAAE,MAAM,GAAE,OAAO,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,IAAM,mBAAmB,GAAE,mBAAmB,MAAM;AAAA,EAClD,GAAE,aAAa,EAAE,IAAI,GAAE,QAAQ,IAAI,GAAG,QAAQ,GAAE,QAAQ,EAAE,CAAC;AAAA,EAC3D,GAAE,aAAa,EAAE,IAAI,GAAE,QAAQ,KAAK,GAAG,OAAO,GAAE,OAAO,EAAE,CAAC;AAC5D,CAAC;AAGD,IAAM,YAAY;AAElB,IAAM,SAAS,CAAC,MAAgB,YAC9B,SAAQ,UAAU,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,aAAa,OAAO,KAAK,CAAC;AAEzE,IAAM,YAAY,OAAO,MAAc,YACpC,MAAM,OAAO,CAAC,aAAa,MAAM,WAAW,YAAY,SAAS,OAAO,GAAG,OAAO,MAAO;AAG5F,IAAM,cAAc,OAAO,MAAc,YAAoB;AAAA,EAC3D,MAAM,YAAY,MAAM,OAAO,CAAC,QAAQ,MAAM,OAAO,SAAS,CAAC,GAAG,OAAO;AAAA,EACzE,MAAM,MAAM,UAAU,UAAU,MAAM;AAAA,CAAI,EAAE;AAAA,EAC5C,MAAM,OAAO,OAAO,SAAsB;AAAA,IACxC,MAAM,QAAQ,iBAAiB,MAAM,OAAO,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC;AAAA,IAC1E,IAAI,CAAC,MAAM;AAAA,MAAI,MAAM,IAAI,MAAM,MAAM,KAAK;AAAA,IAC1C,OAAO,MAAM;AAAA;AAAA,EAEf,OAAO;AAAA,IACL;AAAA,IAEA,OAAO,MACL,MAAM,GAAG,EACN,KAAK,CAAC,aAAa,SAAS,EAAE,EAC9B,MAAM,MAAM,KAAK;AAAA,IACtB,MAAM,OAAO,YACX,kBAAkB,MAChB,MAAM,KAAK;AAAA,MACT,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC,CACH;AAAA,IAEF,OAAO,YAAY;AAAA,MACjB,MAAM,KAAK,EAAE,QAAQ,SAAS,CAAC;AAAA,MAC/B,MAAM,OAAO,CAAC,QAAQ,IAAI,GAAG,OAAO;AAAA,MACpC,MAAM,OAAO,CAAC,MAAM,IAAI,GAAG,OAAO;AAAA;AAAA,EAEtC;AAAA;AAKK,IAAM,sBAAsB,OAAO,SACvC,MAAM,UAAU,MAAM,KAAM,IAAK,YAAY,MAAM,KAAM,IAAI;AAMzD,IAAM,sBAAsB,OAAO,QAAwB,SAAiB;AAAA,EACjF,QAAQ,kBAAkB,SAAS,WAAW,MAAM,qBAAqB,MAAM;AAAA,EAC/E,MAAM,UAAU,OAAO,SAAS;AAAA,EAEhC,MAAM,OAAO,CAAC,MAAM,WAAW,IAAI,GAAG,OAAO;AAAA,EAG7C,MAAM,mBAAmB,SAAQ,OAAO,QAAQ,wBAAwB;AAAA,EACxE,MAAM,OAAM,kBAAkB,EAAE,WAAW,KAAK,CAAC;AAAA,EACjD,MAAM,OACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,GAAI,MAAM,oBAAoB,QAAQ,kBAAkB;AAAA,MACtD,SAAS,OAAO;AAAA,MAChB,aAAa;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,SAAS;AAAA,EAClB,GACA,OACF;AAAA,EACA,MAAM,WAAW,KAAK,IAAI,IAAI,OAAO,SAAS,UAAU,OAAO,SAAS;AAAA,EACxE,OAAO,KAAK,IAAI,IAAI,UAAU;AAAA,IAE5B,MAAM,QAAS,MAAM,UAAU,MAAM,OAAO,IACxC,MAAM,YAAY,MAAM,OAAO,EAAE,MAAM,MAAG;AAAA,MAAG;AAAA,KAAS,IACtD;AAAA,IACJ,IAAI,CAAC,SAAS,CAAE,MAAM,UAAU,MAAM,OAAO,GAAI;AAAA,MAC/C,MAAM,OAAO,MAAM,SAAQ,UAAU,CAAC,QAAQ,UAAU,MAAM,IAAI,GAAG,EAAE,QAAQ,CAAC;AAAA,MAChF,MAAM,IAAI,MAAM;AAAA,EAAiC,KAAK,SAAS,KAAK,QAAQ;AAAA,IAC9E;AAAA,IACA,IAAI,SAAU,MAAM,MAAM,MAAM;AAAA,MAAI,OAAO;AAAA,IAC3C,MAAM,OAAM,IAAI;AAAA,EAClB;AAAA,EACA,MAAM,OAAO,CAAC,MAAM,WAAW,IAAI,GAAG,OAAO;AAAA,EAC7C,MAAM,IAAI,MAAM,2CAA2C;AAAA;;AC1T7D,qBAAS;AACT,oBAAS,sBAAS,iBAAU,kBAAI;AAChC,mBAAS;AACT,qBAAS,sBAAU;AACnB,uBAAS;AACT,sBAAS;AACT,cAAS;;;ACLF,IAAM,uBAAuB,CAAC,KAAa,aAAqB,cAAsB;AAAA,EAC3F,MAAM,QAAQ,IACX,MAAM,OAAO,EACb,QAAQ,EACR,KAAK,CAAC,SAAS;AAAA,IACd,MAAM,YAAY,KAAK,MAAM,KAAK,MAAM,GAAG,EAAE,MAAM,EAAE;AAAA,IACrD,IAAI,CAAC,OAAO,SAAS,SAAS,KAAK,YAAY,WAAW;AAAA,MACxD,OAAO;AAAA,IACT;AAAA,IACA,OACE,KAAK,SAAS,QAAQ,mBAAmB,KACzC,yDAAyD,KAAK,IAAI,KAClE,CAAC,KAAK,SAAS,cAAc;AAAA,GAEhC;AAAA,EACH,IAAI,CAAC,OAAO;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,OAAO,MAAM,SAAS,qBAAqB,4BAA4B,IAAI,YAAY;AAAA;;;ADNzF,IAAM,WAAU,WAAU,SAAQ;AAClC,IAAM,cAAc,GAAE,OAAO;AAAA,EAC3B,SAAS,GAAE,QAAQ;AAAA,EACnB,WAAW,GAAE,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;AAC5C,CAAC;AAED,IAAM,UAAU;AAGT,IAAM,iBAAiB,CAAC,SAC7B,KACG,QAAQ,sBAAsB,OAAO,EACrC,YAAY,EACZ,QAAQ,iBAAiB,GAAG;AAG1B,IAAM,oBAAoB,CAAC,UAAkB;AAAA,EAClD,UAAU;AAAA,KACP,UAAU;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU,GAAG,eAAe,IAAI,KAAK;AAAA,MACrC,MAAM;AAAA,MACN,OAAO,CAAC,uBAAuB,uBAAuB;AAAA,MACtD,SAAS,CAAC,YAAY,UAAU;AAAA,MAChC,SAAS,CAAC,qCAAqC,mCAAmC;AAAA,MAClF,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,SAAS,EAAE,gBAAgB,CAAC,GAAG,gBAAgB,CAAC,EAAE;AACpD;AAGO,IAAM,aAAa,OACxB,QACA,SAEA,eAAe,QAAQ,YAAY;AAAA,EAEjC,MAAM,QAAQ,MAAM,UAAU,OAAO,MAAM,EAAE,MAAM,CAAC,UAAmB;AAAA,IACrE,MAAM,IAAI,MAAM,wBAAwB,OAAO,wCAAwC;AAAA,MACrF;AAAA,IACF,CAAC;AAAA,GACF;AAAA,EACD,MAAM,sBAAsB,MAAM,SAAQ,KAAK,QAAO,GAAG,gBAAgB,CAAC;AAAA,EAC1E,IAAI;AAAA,IACF,MAAM,cAAc,KAAK,qBAAqB,cAAc;AAAA,IAE5D,MAAM,WAAU,aAAa,KAAK,UAAU,kBAAkB,IAAI,CAAC,CAAC;AAAA,IACpE,MAAM,SAAS,IAAI,SACjB,SAAQ,UAAU,MAAM;AAAA,MACtB,SAAS,OAAO,SAAS;AAAA,MACzB,WAAW,IAAI,OAAO;AAAA,IACxB,CAAC;AAAA,IACH,MAAM,UAAU,IAAI,SAClB,OAAO,WAAW,kBAAkB,eAAe,IAAI,GAAG,UAAU,aAAa,GAAG,IAAI;AAAA,IAC1F,MAAM,YAAY,MAAM,UAAS,IAAI,IAAI,yBAAyB,YAAY,GAAG,GAAG,MAAM;AAAA,IAC1F,QAAQ,IAAI,cAAc,MAAM,iCAAiC,SAAS;AAAA,IAC1E,MAAM,QAAQ,QAAQ,OAAO;AAAA,IAG7B,MAAM,QACJ,OACA,QACA,aACA,MACA,YACA,GAAG,SAAQ,MAAM,MAAM,uBACvB,gBACA,WACA,SACA,MACA,WACA,yBACA,MAAM,aACN,UAAS,MAAM,QAAQ,MAAM,CAC/B;AAAA,IACA,MAAM,QAAQ,MAAM,YAAY,aAAa,OAAO;AAAA,IACpD,MAAM,cAAc,MAAM,QAAQ,MAAM,SAAS,WAAW,OAAO,GAAG,OACnE,KAAK,EACL,MAAM,KAAK,EACX,OAAO,OAAO;AAAA,IACjB,IAAI,WAAW,WAAW,KAAK,CAAC,WAAW,IAAI;AAAA,MAC7C,MAAM,IAAI,MAAM,8CAA8C,SAAS;AAAA,IACzE;AAAA,IACA,MAAM,YAAY,WAAW;AAAA,IAC7B,MAAM,WAAW,KAAK,IAAI,IAAI,OAAO,SAAS;AAAA,IAC9C,OAAO,MAAM;AAAA,MACX,MAAM,QAAQ,YAAY,MACxB,KAAK,OAAO,MAAM,OAAO,WAAW,YAAY,mBAAmB,SAAS,GAAG,MAAM,CACvF;AAAA,MACA,IAAI,CAAC,MAAM,SAAS;AAAA,QAClB,MAAM,IAAI,MACR,kBAAkB,oEAAoE,YACxF;AAAA,MACF;AAAA,MAEA,QAAQ,QAAQ,QAAQ,MAAM,OAC5B,QACA,WACA,WACA,MACA,yGACF;AAAA,MACA,MAAM,SAAS,qBAAqB,KAAK,MAAM,aAAa,KAAK,MAAM,MAAM,SAAS,CAAC;AAAA,MACvF,IAAI,WAAW,WAAW;AAAA,QACxB,QAAQ,IAAI,GAAG,MAAM,6BAA6B,SAAS;AAAA,QAC3D,OAAO,KAAK,OAAO,UAAU;AAAA,MAC/B;AAAA,MACA,IAAI,WAAW,YAAY,KAAK,IAAI,KAAK,UAAU;AAAA,QACjD,MAAM,IAAI,MACR,yBAAyB,MAAM;AAAA,EAA8B,IAAI,MAAM;AAAA,CAAI,EAAE,MAAM,GAAG,EAAE,KAAK;AAAA,CAAI,GACnG;AAAA,MACF;AAAA,MACA,MAAM,OAAM,GAAG;AAAA,IACjB;AAAA,YACA;AAAA,IACA,MAAM,IAAG,qBAAqB,EAAE,OAAO,MAAM,WAAW,KAAK,CAAC;AAAA;AAAA,CAEjE;;AEpIH,uBAAS,2BAAY;AACrB,kBAAS,oBAAO,qBAAU,sBAAQ;AAClC,qBAAS,uBAAU,sBAAU;AAGtB,IAAM,kBAAkB;AAC/B,IAAM,cAAc;AAepB,IAAM,OAAO,CAAC,SAAqB,YAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK;AACjF,IAAM,YAAY,CAAC,SAAiB;AAAA,EAClC,IAAI,CAAC,KAAK,KAAK,KAAK,cAAc,KAAK,IAAI,KAAK,SAAS,OAAO,SAAS;AAAA,IACvE,MAAM,IAAI,MAAM,uCAAuC,OAAO;AAAA,EAChE,OAAO,mBAAmB,IAAI;AAAA;AAEhC,eAAe,QAAQ,CAAC,KAAa,SAAkB;AAAA,EACrD,MAAM,SAAS,MAAM,QAAQ,KAAK,EAAE,QAAQ,YAAY,QAAQ,KAAM,EAAE,CAAC;AAAA,EACzE,IAAI,CAAC,OAAO;AAAA,IAAI,MAAM,IAAI,MAAM,oBAAoB,OAAO,WAAW,KAAK;AAAA,EAC3E,OAAO;AAAA;AAET,eAAsB,YAAY,CAChC,OAAiB,CAAC,QAAQ,GAC1B,UAAmB,OACA;AAAA,EACnB,MAAM,MAAM,GAAG,mBAAmB,KAAK,IAAI,SAAS,EAAE,KAAK,GAAG;AAAA,EAC9D,MAAM,SAAS,MAAM,SAAS,KAAK,OAAO;AAAA,EAC1C,MAAM,OAAO,MAAM,OAAO,KAAK;AAAA,EAC/B,IAAI,KAAK,SAAS,WAAa,SAAS,KAAK,IAAI;AAAA,IAC/C,MAAM,IAAI,MAAM,mCAAmC,KAAK;AAAA,EAC1D,OAAO,KACJ,MAAM,OAAO,EACb,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AAAA;AAEnB,eAAsB,eAAe,CACnC,OACA,SACA,UAAU,UACV,UAAmB,OACnB;AAAA,EACA,IAAI,EAAE,MAAM,aAAa,CAAC,OAAO,GAAG,OAAO,GAAG,SAAS,KAAK;AAAA,IAC1D,MAAM,IAAI,MAAM,2BAA2B,WAAW,kCAAkC;AAAA,EAC1F,MAAM,WAAW,MAAM,aAAa,CAAC,SAAS,KAAK,GAAG,OAAO;AAAA,EAC7D,IAAI,CAAC,SAAS,SAAS,OAAO;AAAA,IAC5B,MAAM,IAAI,MAAM,mBAAmB,eAAe,qBAAqB,SAAS,KAAK,IAAI,GAAG;AAAA,EAC9F,MAAM,aAAa,MAAM,aAAa,CAAC,SAAS,OAAO,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,SACjF,YAAY,KAAK,IAAI,CACvB;AAAA,EACA,IAAI,UAAU,WAAW;AAAA,IACvB,MAAM,IAAI,MACR,oCAAoC,SAAS,qBAAqB,UAAU,SAC9E;AAAA,EACF,OAAO;AAAA,IACL,UAAU,UAAU;AAAA,IACpB,KAAK,GAAG,mBAAmB,CAAC,SAAS,OAAO,SAAS,UAAU,EAAG,EAAE,IAAI,SAAS,EAAE,KAAK,GAAG;AAAA,EAC7F;AAAA;AAEF,eAAsB,gBAAgB,CACpC,cACA,MACA,UAAmD,CAAC,GACpD;AAAA,EACA,MAAM,OAAO,SAAQ,MAAM,iBAAiB,GAC1C,QAAQ,SAAQ,MAAM,kBAAkB;AAAA,EAC1C,IAAI,WAAwB,EAAE,SAAS,GAAG,cAAc,CAAC,EAAE;AAAA,EAC3D,IAAI;AAAA,IACF,WAAW,KAAK,MAAM,MAAM,UAAS,MAAM,MAAM,CAAC;AAAA,IAClD,OAAO,OAAO;AAAA,IACd,IAAI,EAAE,SAAS,OAAO,UAAU,aAAY,UAAU,UAAS,MAAM,SAAS;AAAA,MAC5E,MAAM;AAAA;AAAA,EAEV,IAAI,SAAS,YAAY,KAAK,CAAC,SAAS,gBAAgB,OAAO,SAAS,iBAAiB;AAAA,IACvF,MAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C,MAAM,YAA8C,CAAC;AAAA,EACrD,MAAM,UAAU,QAAQ,WAAW;AAAA,EACnC,MAAM,OAAM,OAAO,EAAE,WAAW,KAAK,CAAC;AAAA,EACtC,YAAY,OAAO,eAAe,OAAO,QAAQ,YAAY,GAAG;AAAA,IAC9D,UAAU,KAAK;AAAA,IACf,MAAM,WAAW,OAAO,eAAe,WAAW,EAAE,SAAS,WAAW,IAAI;AAAA,IAC5E,MAAM,SAAS,SAAS,aAAa;AAAA,IACrC,MAAM,QAAQ,SAAS,KAAK,QAAQ,MAAM,SAAQ,MAAM,OAAO,IAAI,EAAE,IAAI;AAAA,IACzE,MAAM,OACJ,UAAU,aACV,MAAM,cAAc,SAAS,cAC5B,UAAU,WACP,MAAM,QAAQ,aAAa,MAAM,SAAS,SAAQ,MAAM,SAAS,IAAI,IACrE,MAAM,YAAY,SAAS,WAAW,MAAM,aAAa,SAAS,WAAW;AAAA,IACnF,IAAI,MAAM;AAAA,MACR,IAAI;AAAA,QACF,IAAI,KAAK,MAAM,UAAS,MAAM,IAAI,CAAC,MAAM,MAAM,QAAQ;AAAA,UACrD,UAAU,SAAS;AAAA,UACnB;AAAA,QACF;AAAA,QACA,MAAM;AAAA,MAGR,IAAI,QAAQ;AAAA,QAAQ,MAAM,IAAI,MAAM,kBAAkB,8BAA8B;AAAA,IACtF,EAAO,SAAI,QAAQ;AAAA,MAAQ,MAAM,IAAI,MAAM,cAAc,qCAAqC;AAAA,IAC9F,IAAI,UAAU,UAAU;AAAA,MACtB,MAAM,OAAO,SAAQ,MAAM,SAAS,IAAI;AAAA,MACxC,IAAI,CAAC,YAAY,KAAK,IAAI;AAAA,QACxB,MAAM,IAAI,MAAM,GAAG,uDAAuD;AAAA,MAC5E,UAAU,SAAS;AAAA,QACjB;AAAA,QACA;AAAA,QACA,QAAQ,KAAK,MAAM,UAAS,IAAI,CAAC;AAAA,WAC7B,SAAS,YAAY,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;AAAA,MAChE;AAAA,IACF,EAAO;AAAA,MACL,MAAM,UAAU,SAAS,WAAW;AAAA,MACpC,MAAM,UAAU,MAAM,gBAAgB,OAAO,SAAS,SAAS,SAAS,OAAO;AAAA,MAC/E,MAAM,SAAS,MAAM,SAAS,QAAQ,KAAK,OAAO;AAAA,MAClD,MAAM,OAAO,IAAI,WAAW,MAAM,OAAO,YAAY,CAAC;AAAA,MACtD,IAAI,CAAC,KAAK,UAAU,KAAK,SAAS,MAAM,OAAO;AAAA,QAC7C,MAAM,IAAI,MAAM,GAAG,sCAAsC;AAAA,MAC3D,MAAM,SAAS,KAAK,IAAI;AAAA,MAExB,IAAI,QAAQ,MAAM,WAAW;AAAA,QAC3B,MAAM,IAAI,MACR,+CAA+C,SAAS,SAAS,UACnE;AAAA,MACF,MAAM,OAAO,SAAQ,OAAO,GAAG,UAAU,UAAS,QAAQ,QAAQ,GAAG,GACnE,OAAO,GAAG,QAAQ,YAAW;AAAA,MAC/B,MAAM,WAAU,MAAM,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,MAC1C,MAAM,QAAO,MAAM,IAAI;AAAA,MACvB,UAAU,SAAS;AAAA,QACjB;AAAA,QACA;AAAA,QACA,SAAS,SAAS;AAAA,QAClB;AAAA,QACA;AAAA,QACA,KAAK,QAAQ;AAAA,WACT,SAAS,YAAY,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;AAAA,MAChE;AAAA;AAAA,EAEJ;AAAA,EACA,IACE,QAAQ,UACR,OAAO,KAAK,SAAS,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,OAAO,cAAc,IAAI,CAAC;AAAA,IAEpF,MAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE,IAAI,CAAC,QAAQ,QAAQ;AAAA,IACnB,MAAM,OAAO,GAAG,QAAQ,YAAW;AAAA,IACnC,MAAM,WAAW,OAAO,YACtB,OAAO,QAAQ,SAAS,EAAE,IAAI,EAAE,OAAO,aAAa;AAAA,MAClD;AAAA,MACA,KAAK,SAAS,MAAM,UAAS,MAAM,QAAQ,IAAI,EAAE,WAAW,MAAM,GAAG,EAAE;AAAA,IACzE,CAAC,CACH;AAAA,IACA,MAAM,WAAU,MAAM,KAAK,UAAU,EAAE,SAAS,GAAG,cAAc,SAAS,GAAG,MAAM,CAAC,IAAI;AAAA,CAAI;AAAA,IAC5F,MAAM,QAAO,MAAM,IAAI;AAAA,EACzB;AAAA,EACA,OAAO,OAAO,OAAO,SAAS;AAAA;",
|
|
29
|
+
"debugId": "CDC797A3805D13C164756E2164756E21",
|
|
30
30
|
"names": []
|
|
31
31
|
}
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"url": "git+https://github.com/livingforjesus/tsplc.git",
|
|
16
16
|
"directory": "packages/build"
|
|
17
17
|
},
|
|
18
|
-
"version": "0.2.
|
|
18
|
+
"version": "0.2.4",
|
|
19
19
|
"type": "module",
|
|
20
20
|
"exports": {
|
|
21
21
|
".": {
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"zod": "4.3.6",
|
|
46
|
-
"@tsplc/config": "0.2.
|
|
47
|
-
"@tsplc/typegen": "0.2.
|
|
46
|
+
"@tsplc/config": "0.2.4",
|
|
47
|
+
"@tsplc/typegen": "0.2.4"
|
|
48
48
|
},
|
|
49
49
|
"bin": {
|
|
50
50
|
"tsplc-build": "./dist/cli.js"
|
package/python/build.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Runs inside CODESYS's Python engine, not the Mac's Python installation."""
|
|
2
2
|
from __future__ import print_function
|
|
3
3
|
|
|
4
|
+
import hashlib
|
|
4
5
|
import io
|
|
5
6
|
import json
|
|
6
7
|
import os
|
|
@@ -263,9 +264,19 @@ def import_objects(engine, application, request, reusing, progress):
|
|
|
263
264
|
if list(task.pous) != [request["entry"]]:
|
|
264
265
|
raise RuntimeError("Could not configure the entry task: " + repr(list(task.pous)))
|
|
265
266
|
|
|
267
|
+
def device_tasks(application, configuration):
|
|
268
|
+
"""Tasks that only call devices' cycles, such as the EtherNet/IP scanner's, which belong to the device tree."""
|
|
269
|
+
controller = application.parent
|
|
270
|
+
while not getattr(controller, "is_device", False):
|
|
271
|
+
controller = controller.parent
|
|
272
|
+
devices = set(unicode(child.get_name()) for child in controller.get_children(True) if getattr(child, "is_device", False))
|
|
273
|
+
return set(child.get_name().lower() for child in configuration.get_children() if getattr(child, "is_task", False)
|
|
274
|
+
and list(child.pous) and all(unicode(call).split(".")[0] in devices for call in child.pous))
|
|
275
|
+
|
|
276
|
+
|
|
266
277
|
def configure_tasks(engine, application, tasks, objects):
|
|
267
278
|
# An explicit task plan owns the entire schedule in this private project copy.
|
|
268
|
-
# Unspecified tasks are removed so template programs cannot execute implicitly.
|
|
279
|
+
# Unspecified tasks are removed so template programs cannot execute implicitly; the device tree keeps its own.
|
|
269
280
|
if not tasks:
|
|
270
281
|
raise RuntimeError("Explicit task plan must not be empty")
|
|
271
282
|
available = set(spec["name"] for spec in objects if spec["kind"] == "program")
|
|
@@ -288,8 +299,9 @@ def configure_tasks(engine, application, tasks, objects):
|
|
|
288
299
|
if len(configurations) > 1:
|
|
289
300
|
raise RuntimeError("Application contains ambiguous task configurations")
|
|
290
301
|
configuration = configurations[0] if configurations else application.create_task_configuration()
|
|
302
|
+
kept = device_tasks(application, configuration)
|
|
291
303
|
for child in list(configuration.get_children()):
|
|
292
|
-
if getattr(child, "is_task", False) and child.get_name().lower() not in names:
|
|
304
|
+
if getattr(child, "is_task", False) and child.get_name().lower() not in names | kept:
|
|
293
305
|
child.remove()
|
|
294
306
|
for spec in tasks:
|
|
295
307
|
matches = application.find_ignore_transient_objects(spec["name"], True)
|
|
@@ -318,7 +330,8 @@ def configure_tasks(engine, application, tasks, objects):
|
|
|
318
330
|
interval = Decimal(match.group(1) if match else observed)
|
|
319
331
|
if task.kind_of_task != engine.KindOfTask.Cyclic or int(task.priority) != spec["priority"] or str(task.interval_unit).lower() != "ms" or interval != Decimal(milliseconds) or list(task.pous) != spec["programs"]:
|
|
320
332
|
raise RuntimeError("Task configuration readback differs for {0}: {1}, {2}, {3}, {4}".format(spec["name"], task.priority, task.interval, task.interval_unit, list(task.pous)))
|
|
321
|
-
actual = [child.get_name().lower() for child in configuration.get_children() if getattr(child, "is_task", False)
|
|
333
|
+
actual = [child.get_name().lower() for child in configuration.get_children() if getattr(child, "is_task", False)
|
|
334
|
+
and child.get_name().lower() not in kept]
|
|
322
335
|
if set(actual) != names or len(actual) != len(names):
|
|
323
336
|
raise RuntimeError("Unplanned or duplicate tasks remain in the application")
|
|
324
337
|
return tasks
|
|
@@ -515,8 +528,16 @@ def apply_controller(project, identity, progress):
|
|
|
515
528
|
updated.type, updated.id, updated.version, *wanted))
|
|
516
529
|
|
|
517
530
|
|
|
518
|
-
def
|
|
531
|
+
def import_device_description(engine, device, root):
|
|
519
532
|
from System import Guid
|
|
533
|
+
repository = engine.device_repository
|
|
534
|
+
identity = repository.import_device(os.path.join(root, device["eds"]), repository.sources[0], Guid(EDS_CONVERTER), True)
|
|
535
|
+
if identity is None:
|
|
536
|
+
raise RuntimeError("CODESYS could not import the EDS of " + device["name"])
|
|
537
|
+
return identity
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
def configure_device_tree(engine, project, tree, root, progress):
|
|
520
541
|
controller = template_controller(project)
|
|
521
542
|
for child in controller.get_children(True):
|
|
522
543
|
if getattr(child, "is_device", False) and child.get_device_identification().type in (ETHERNET[1], SCANNER[1]):
|
|
@@ -529,12 +550,9 @@ def configure_device_tree(engine, project, tree, root, progress):
|
|
|
529
550
|
if value is not None:
|
|
530
551
|
set_parameter(parameters[identifier], "'{0}'".format(value) if key == "interface" else ip_array(value))
|
|
531
552
|
scanner = child_device(engine, ethernet, SCANNER)
|
|
532
|
-
repository = engine.device_repository
|
|
533
553
|
pinned = {}
|
|
534
554
|
for device in tree["devices"]:
|
|
535
|
-
identity =
|
|
536
|
-
if identity is None:
|
|
537
|
-
raise RuntimeError("CODESYS could not import the EDS of " + device["name"])
|
|
555
|
+
identity = import_device_description(engine, device, root)
|
|
538
556
|
adapter = child_device(engine, scanner, (device["name"], identity.type, identity.id, identity.version))
|
|
539
557
|
# CODESYS otherwise skips mapped variables no IEC code reads, such as inputs only clients observe.
|
|
540
558
|
adapter.driver_info.always_update_variables = engine.AlwaysUpdateVariablesMode.OnlyIfUnused
|
|
@@ -564,6 +582,59 @@ def verify_pinned(pinned):
|
|
|
564
582
|
raise RuntimeError("Channel {0} moved to {1}".format(address, channel.io_mapping.manual_iec_address))
|
|
565
583
|
|
|
566
584
|
|
|
585
|
+
def device_tree_cache(request, workspace):
|
|
586
|
+
"""The project as it stands once its device tree is generated, kept beside the worker, which each
|
|
587
|
+
container starts afresh. Generating the tree takes most of a build, and the same template,
|
|
588
|
+
controller, tree and generator always produce the same one."""
|
|
589
|
+
with io.open(__file__, "rb") as source:
|
|
590
|
+
generator = hashlib.sha256(source.read()).hexdigest()
|
|
591
|
+
inputs = json.dumps([generator, request["templateHash"], request.get("controller"), request["deviceTree"]], sort_keys=True)
|
|
592
|
+
return os.path.join(os.path.dirname(workspace), "device-tree", hashlib.sha256(inputs.encode("utf-8")).hexdigest() + ".project")
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
def keep_device_tree(pending, cache):
|
|
596
|
+
"""Replace the previous tree once a build with this one succeeds, so the cache holds one verified tree."""
|
|
597
|
+
directory = os.path.dirname(cache)
|
|
598
|
+
for name in os.listdir(directory):
|
|
599
|
+
if os.path.join(directory, name) != pending:
|
|
600
|
+
os.remove(os.path.join(directory, name))
|
|
601
|
+
os.rename(pending, cache)
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
def open_project(engine, request, workspace, progress):
|
|
605
|
+
"""Opens the template with its controller and device tree, from the cache when the tree's inputs match it.
|
|
606
|
+
Returns the project, the channels it pinned, and a newly generated tree to keep if the build succeeds."""
|
|
607
|
+
working = os.path.join(workspace, "project")
|
|
608
|
+
if os.path.isdir(working):
|
|
609
|
+
shutil.rmtree(working)
|
|
610
|
+
os.mkdir(working)
|
|
611
|
+
path = os.path.join(working, "Application.project")
|
|
612
|
+
tree = request.get("deviceTree")
|
|
613
|
+
cache = device_tree_cache(request, workspace) if tree else None
|
|
614
|
+
if cache and os.path.isfile(cache):
|
|
615
|
+
progress("Reusing the generated device tree")
|
|
616
|
+
root = os.path.dirname(request["receipt"])
|
|
617
|
+
# The tree's adapters need their descriptions in this container's device repository.
|
|
618
|
+
for device in tree["devices"]:
|
|
619
|
+
import_device_description(engine, device, root)
|
|
620
|
+
shutil.copyfile(cache, path)
|
|
621
|
+
return engine.projects.open(path, primary=True), {}, None
|
|
622
|
+
progress("Opening project")
|
|
623
|
+
project = engine.projects.open(request["template"], primary=True)
|
|
624
|
+
project.save_as(path)
|
|
625
|
+
if request.get("controller"):
|
|
626
|
+
apply_controller(project, request["controller"], progress)
|
|
627
|
+
if not tree:
|
|
628
|
+
return project, {}, None
|
|
629
|
+
pinned = configure_device_tree(engine, project, tree, os.path.dirname(request["receipt"]), progress)
|
|
630
|
+
project.save()
|
|
631
|
+
if not os.path.isdir(os.path.dirname(cache)):
|
|
632
|
+
os.makedirs(os.path.dirname(cache))
|
|
633
|
+
pending = cache + ".pending"
|
|
634
|
+
shutil.copyfile(project.path, pending)
|
|
635
|
+
return project, pinned, (pending, cache)
|
|
636
|
+
|
|
637
|
+
|
|
567
638
|
def build(engine, request, loaded, workspace):
|
|
568
639
|
progress_path = os.path.join(os.path.dirname(request["receipt"]), "progress.log")
|
|
569
640
|
|
|
@@ -578,6 +649,8 @@ def build(engine, request, loaded, workspace):
|
|
|
578
649
|
key = project_key(request)
|
|
579
650
|
reusing = loaded.get("key") == key
|
|
580
651
|
project = None
|
|
652
|
+
# Only a tree generated in this build has channels to verify; a reused or cached one passed when it was made.
|
|
653
|
+
pinned, generated = {}, None
|
|
581
654
|
try:
|
|
582
655
|
if reusing:
|
|
583
656
|
progress("Reusing loaded project")
|
|
@@ -586,23 +659,12 @@ def build(engine, request, loaded, workspace):
|
|
|
586
659
|
if loaded.get("project") is not None:
|
|
587
660
|
loaded["project"].close()
|
|
588
661
|
loaded.clear()
|
|
589
|
-
|
|
590
|
-
project = engine.projects.open(request["template"], primary=True)
|
|
591
|
-
working = os.path.join(workspace, "project")
|
|
592
|
-
if os.path.isdir(working):
|
|
593
|
-
shutil.rmtree(working)
|
|
594
|
-
os.mkdir(working)
|
|
595
|
-
project.save_as(os.path.join(working, "Application.project"))
|
|
596
|
-
if request.get("controller"):
|
|
597
|
-
apply_controller(project, request["controller"], progress)
|
|
662
|
+
project, pinned, generated = open_project(engine, request, workspace, progress)
|
|
598
663
|
loaded.clear()
|
|
599
664
|
application = project.active_application
|
|
600
665
|
if application is None:
|
|
601
666
|
raise RuntimeError("Template must have an active Application")
|
|
602
667
|
configured_tasks = import_objects(engine, application, request, reusing, progress)
|
|
603
|
-
# A reused project already holds the tree for this key.
|
|
604
|
-
pinned = configure_device_tree(engine, project, request["deviceTree"], os.path.dirname(request["receipt"]), progress) \
|
|
605
|
-
if request.get("deviceTree") and not reusing else {}
|
|
606
668
|
if request["symbols"] and not any(
|
|
607
669
|
getattr(child, "is_symbol_config", False)
|
|
608
670
|
for child in application.get_children()
|
|
@@ -638,6 +700,8 @@ def build(engine, request, loaded, workspace):
|
|
|
638
700
|
fail_on_errors(engine)
|
|
639
701
|
if not os.path.isfile(request["output"]) or os.path.getsize(request["output"]) == 0:
|
|
640
702
|
raise RuntimeError("Compiler did not produce a non-empty boot application")
|
|
703
|
+
if generated:
|
|
704
|
+
keep_device_tree(*generated)
|
|
641
705
|
progress("Build complete")
|
|
642
706
|
with io.open(request["receipt"], "w", encoding="utf-8") as receipt:
|
|
643
707
|
receipt.write(json.dumps(
|
package/python/codesys_online.py
CHANGED
|
@@ -6,7 +6,7 @@ import json
|
|
|
6
6
|
import os
|
|
7
7
|
import re
|
|
8
8
|
import time
|
|
9
|
-
from build import CompilerError, apply_controller, fail_on_errors, import_objects, reported_errors, unique_child
|
|
9
|
+
from build import CompilerError, apply_controller, configure_device_tree, fail_on_errors, import_objects, reported_errors, unique_child, verify_pinned
|
|
10
10
|
from System import Activator, AppDomain, Array, Enum, Environment, Object
|
|
11
11
|
from System.Net import Dns, IPAddress
|
|
12
12
|
from System.Reflection import BindingFlags, TargetInvocationException
|
|
@@ -239,6 +239,9 @@ def run_online(engine, request):
|
|
|
239
239
|
if request['operation'] == 'online-change':
|
|
240
240
|
reconcile(application, previous['objects'], request['objects'])
|
|
241
241
|
import_objects(engine, application, request, request['operation'] != 'download', progress)
|
|
242
|
+
# Only a download carries the tree: it starts from the template, and an online change keeps the downloaded one.
|
|
243
|
+
pinned = configure_device_tree(engine, project, request['deviceTree'], request['devices'], progress) \
|
|
244
|
+
if request.get('deviceTree') else {}
|
|
242
245
|
if request['symbols'] and not any(getattr(child, 'is_symbol_config', False) for child in application.get_children()):
|
|
243
246
|
from System import Guid
|
|
244
247
|
application.create_symbol_config(True, True, Guid('{0141eb75-141b-4ea1-9a8c-75f952b22a6c}'))
|
|
@@ -255,6 +258,7 @@ def run_online(engine, request):
|
|
|
255
258
|
application.rebuild()
|
|
256
259
|
fail_on_errors(engine)
|
|
257
260
|
application.generate_code()
|
|
261
|
+
verify_pinned(pinned)
|
|
258
262
|
project.save()
|
|
259
263
|
else:
|
|
260
264
|
# Cleaning would discard the downloaded reference needed to decide
|